summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-30 03:00:43 +0000
committerNorbert Preining <norbert@preining.info>2019-09-30 03:00:43 +0000
commitbbbe8128e7ae9d816a221377dbf5ff3969bb203b (patch)
tree0283a521760b879b30e61872f14f235645745675
parent14ce8b68fe7df49e8a8891bb94c63b9a846da232 (diff)
CTAN sync 201909300300
-rw-r--r--FILES.byname4155
-rw-r--r--FILES.byname.gzbin2124073 -> 2125016 bytes
-rw-r--r--FILES.last07days1910
-rw-r--r--fonts/amiri/Amiri-Bold.ttfbin0 -> 529580 bytes
-rw-r--r--fonts/amiri/Amiri-BoldSlanted.ttfbin0 -> 529936 bytes
-rw-r--r--fonts/amiri/Amiri-Regular.ttfbin0 -> 551132 bytes
-rw-r--r--fonts/amiri/Amiri-Slanted.ttfbin0 -> 534596 bytes
-rw-r--r--fonts/amiri/Amiri.fontspec7
-rw-r--r--fonts/amiri/AmiriQuran.ttfbin0 -> 136896 bytes
-rw-r--r--fonts/amiri/AmiriQuranColored.ttfbin0 -> 172944 bytes
-rw-r--r--fonts/amiri/Documentation-Arabic.pdfbin0 -> 82057 bytes
-rw-r--r--fonts/amiri/NEWS50
-rw-r--r--fonts/amiri/NEWS-Arabic25
-rw-r--r--fonts/amiri/README61
-rw-r--r--fonts/amiri/amiri-bold.ttfbin618484 -> 0 bytes
-rw-r--r--fonts/amiri/amiri-boldslanted.ttfbin623068 -> 0 bytes
-rw-r--r--fonts/amiri/amiri-quran-colored.ttfbin239992 -> 0 bytes
-rw-r--r--fonts/amiri/amiri-quran.ttfbin187692 -> 0 bytes
-rw-r--r--fonts/amiri/amiri-regular.ttfbin634496 -> 0 bytes
-rw-r--r--fonts/amiri/amiri-slanted.ttfbin620904 -> 0 bytes
-rw-r--r--fonts/amiri/amiri-table.pdfbin174446 -> 0 bytes
-rw-r--r--fonts/amiri/documentation-arabic.pdfbin84828 -> 0 bytes
-rw-r--r--fonts/newpx/README15
-rw-r--r--fonts/newpx/afm/NewPXBMI.afm123
-rw-r--r--fonts/newpx/afm/NewPXBMI_gnu.afm112
-rw-r--r--fonts/newpx/afm/NewPXMI.afm129
-rw-r--r--fonts/newpx/afm/NewPXMI_gnu.afm85
-rw-r--r--fonts/newpx/afm/pxbmiaX.afm186
-rw-r--r--fonts/newpx/afm/pxbsys.afm112
-rw-r--r--fonts/newpx/afm/pxmiaX.afm203
-rw-r--r--fonts/newpx/afm/pxsys.afm110
-rw-r--r--fonts/newpx/doc/CnangesInV1.4.txt49
-rw-r--r--fonts/newpx/doc/newpxdoc.pdfbin287991 -> 791615 bytes
-rw-r--r--fonts/newpx/doc/newpxdoc.tex131
-rw-r--r--fonts/newpx/map/newpx.map30
-rw-r--r--fonts/newpx/tex/lmsnpxsy.fd6
-rw-r--r--fonts/newpx/tex/lmxnpxexx.fd4
-rw-r--r--fonts/newpx/tex/newpx.subs17
-rw-r--r--fonts/newpx/tex/newpxmath.sty371
-rw-r--r--fonts/newpx/tfm/NewPXBMI.tfmbin0 -> 1080 bytes
-rw-r--r--fonts/newpx/tfm/NewPXBMI_gnu.tfmbin0 -> 1232 bytes
-rw-r--r--fonts/newpx/tfm/NewPXMI.tfmbin0 -> 1160 bytes
-rw-r--r--fonts/newpx/tfm/NewPXMI_gnu.tfmbin0 -> 748 bytes
-rw-r--r--fonts/newpx/tfm/pxbmiaX.tfmbin0 -> 1732 bytes
-rw-r--r--fonts/newpx/tfm/pxbsys.tfmbin1680 -> 1644 bytes
-rw-r--r--fonts/newpx/tfm/pxmiaX.tfmbin0 -> 1632 bytes
-rw-r--r--fonts/newpx/tfm/pxsys.tfmbin1628 -> 1584 bytes
-rw-r--r--fonts/newpx/tfm/zplbmi.tfmbin2152 -> 3320 bytes
-rw-r--r--fonts/newpx/tfm/zplbmi1.tfmbin2156 -> 3324 bytes
-rw-r--r--fonts/newpx/tfm/zplbmia.tfmbin3140 -> 2156 bytes
-rw-r--r--fonts/newpx/tfm/zplbsy.tfmbin2040 -> 2056 bytes
-rw-r--r--fonts/newpx/tfm/zplmi.tfmbin2204 -> 3252 bytes
-rw-r--r--fonts/newpx/tfm/zplmi1.tfmbin2200 -> 3248 bytes
-rw-r--r--fonts/newpx/tfm/zplmia.tfmbin3136 -> 2076 bytes
-rw-r--r--fonts/newpx/tfm/zplsy.tfmbin1992 -> 2008 bytes
-rw-r--r--fonts/newpx/type1/NewPXBMI.pfbbin0 -> 24084 bytes
-rw-r--r--fonts/newpx/type1/NewPXBMI_gnu.pfbbin0 -> 18529 bytes
-rw-r--r--fonts/newpx/type1/NewPXMI.pfbbin0 -> 25125 bytes
-rw-r--r--fonts/newpx/type1/NewPXMI_gnu.pfbbin0 -> 16003 bytes
-rw-r--r--fonts/newpx/type1/pxbmiaX.pfbbin0 -> 36960 bytes
-rw-r--r--fonts/newpx/type1/pxbsys.pfbbin42422 -> 38813 bytes
-rw-r--r--fonts/newpx/type1/pxmiaX.pfbbin0 -> 42125 bytes
-rw-r--r--fonts/newpx/type1/pxsys.pfbbin43770 -> 40353 bytes
-rw-r--r--fonts/newpx/vf/zplbmi.vfbin1336 -> 2668 bytes
-rw-r--r--fonts/newpx/vf/zplbmi1.vfbin1340 -> 2668 bytes
-rw-r--r--fonts/newpx/vf/zplbmia.vfbin1844 -> 1532 bytes
-rw-r--r--fonts/newpx/vf/zplbsy.vfbin1700 -> 1772 bytes
-rw-r--r--fonts/newpx/vf/zplmi.vfbin1336 -> 2552 bytes
-rw-r--r--fonts/newpx/vf/zplmi1.vfbin1340 -> 2548 bytes
-rw-r--r--fonts/newpx/vf/zplmia.vfbin1868 -> 1528 bytes
-rw-r--r--fonts/newpx/vf/zplsy.vfbin1696 -> 1780 bytes
-rw-r--r--fonts/newtx/README13
-rw-r--r--fonts/newtx/afm/LibertineI-5nu.afm20
-rw-r--r--fonts/newtx/afm/LibertineMathBMI.afm167
-rw-r--r--fonts/newtx/afm/LibertineMathBMI5.afm167
-rw-r--r--fonts/newtx/afm/LibertineMathBMI7.afm167
-rw-r--r--fonts/newtx/afm/LibertineMathBRM.afm142
-rw-r--r--fonts/newtx/afm/LibertineMathMI.afm169
-rw-r--r--fonts/newtx/afm/LibertineMathMI5.afm168
-rw-r--r--fonts/newtx/afm/LibertineMathMI7.afm168
-rw-r--r--fonts/newtx/afm/LibertineMathRM.afm94
-rw-r--r--fonts/newtx/afm/LibertineZI-5nu.afm20
-rw-r--r--fonts/newtx/afm/NewTXBMI.afm187
-rw-r--r--fonts/newtx/afm/NewTXBMI5.afm187
-rw-r--r--fonts/newtx/afm/NewTXBMI7.afm187
-rw-r--r--fonts/newtx/afm/NewTXMI.afm189
-rw-r--r--fonts/newtx/afm/NewTXMI5.afm189
-rw-r--r--fonts/newtx/afm/NewTXMI7.afm189
-rw-r--r--fonts/newtx/afm/ntxsups-Bold.afm1101
-rw-r--r--fonts/newtx/afm/ntxsups-BoldItalic.afm1133
-rw-r--r--fonts/newtx/afm/ntxsups-Italic.afm1125
-rw-r--r--fonts/newtx/afm/ntxsups-Regular.afm1126
-rw-r--r--fonts/newtx/afm/rtxbmi5.afm102
-rw-r--r--fonts/newtx/afm/rtxbmi7.afm108
-rw-r--r--fonts/newtx/afm/stxscr.afm235
-rw-r--r--fonts/newtx/afm/txbex-bar.afm93
-rw-r--r--fonts/newtx/afm/txbmiaSTbb.afm87
-rw-r--r--fonts/newtx/afm/txbmiaX.afm300
-rw-r--r--fonts/newtx/afm/txbsys.afm50
-rw-r--r--fonts/newtx/afm/txexas.afm15
-rw-r--r--fonts/newtx/afm/txexs.afm14
-rw-r--r--fonts/newtx/afm/txmiaSTbb.afm87
-rw-r--r--fonts/newtx/afm/txmiaX.afm324
-rw-r--r--fonts/newtx/afm/txsys.afm57
-rw-r--r--fonts/newtx/doc/newtxdoc.pdfbin453876 -> 1005512 bytes
-rw-r--r--fonts/newtx/doc/newtxdoc.tex124
-rw-r--r--fonts/newtx/enc/ntxsups_ly1.enc297
-rw-r--r--fonts/newtx/enc/ntxsups_ot1.enc297
-rw-r--r--fonts/newtx/enc/ntxsups_t1.enc297
-rw-r--r--fonts/newtx/map/newtx.map43
-rw-r--r--fonts/newtx/opentype/ntxsups-Bold.otfbin0 -> 16496 bytes
-rw-r--r--fonts/newtx/opentype/ntxsups-BoldItalic.otfbin0 -> 17708 bytes
-rw-r--r--fonts/newtx/opentype/ntxsups-Italic.otfbin0 -> 17700 bytes
-rw-r--r--fonts/newtx/opentype/ntxsups-Regular.otfbin0 -> 16976 bytes
-rw-r--r--fonts/newtx/tex/libertine.subs17
-rw-r--r--fonts/newtx/tex/newtxmath.sty699
-rw-r--r--fonts/newtx/tfm/LibertineI-5nu.tfmbin148 -> 148 bytes
-rw-r--r--fonts/newtx/tfm/LibertineMathBMI.tfmbin0 -> 1544 bytes
-rw-r--r--fonts/newtx/tfm/LibertineMathBMI5.tfmbin0 -> 1600 bytes
-rw-r--r--fonts/newtx/tfm/LibertineMathBMI7.tfmbin0 -> 1580 bytes
-rw-r--r--fonts/newtx/tfm/LibertineMathBRM.tfmbin0 -> 1172 bytes
-rw-r--r--fonts/newtx/tfm/LibertineMathMI.tfmbin0 -> 1552 bytes
-rw-r--r--fonts/newtx/tfm/LibertineMathMI5.tfmbin0 -> 1604 bytes
-rw-r--r--fonts/newtx/tfm/LibertineMathMI7.tfmbin0 -> 1576 bytes
-rw-r--r--fonts/newtx/tfm/LibertineMathRM.tfmbin0 -> 768 bytes
-rw-r--r--fonts/newtx/tfm/LibertineZI-5nu.tfmbin148 -> 148 bytes
-rw-r--r--fonts/newtx/tfm/NewTXBMI.tfmbin0 -> 1420 bytes
-rw-r--r--fonts/newtx/tfm/NewTXBMI5.tfmbin0 -> 1544 bytes
-rw-r--r--fonts/newtx/tfm/NewTXBMI7.tfmbin0 -> 1536 bytes
-rw-r--r--fonts/newtx/tfm/NewTXMI.tfmbin0 -> 1428 bytes
-rw-r--r--fonts/newtx/tfm/NewTXMI5.tfmbin0 -> 1604 bytes
-rw-r--r--fonts/newtx/tfm/NewTXMI7.tfmbin0 -> 1568 bytes
-rw-r--r--fonts/newtx/tfm/ntxbexx.tfmbin1772 -> 1784 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi.tfmbin1856 -> 4192 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi0.tfmbin1856 -> 4200 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi05.tfmbin1924 -> 1900 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi07.tfmbin1916 -> 3348 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi1.tfmbin1884 -> 4200 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi15.tfmbin1936 -> 3388 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi17.tfmbin1932 -> 3352 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi5.tfmbin1924 -> 3384 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmi7.tfmbin1916 -> 3352 bytes
-rw-r--r--fonts/newtx/tfm/ntxbmia.tfmbin3008 -> 2412 bytes
-rw-r--r--fonts/newtx/tfm/ntxbsy.tfmbin2020 -> 2008 bytes
-rw-r--r--fonts/newtx/tfm/ntxbsy5.tfmbin2020 -> 2008 bytes
-rw-r--r--fonts/newtx/tfm/ntxbsy7.tfmbin2032 -> 2020 bytes
-rw-r--r--fonts/newtx/tfm/ntxbsym.tfmbin1588 -> 1588 bytes
-rw-r--r--fonts/newtx/tfm/ntxexx.tfmbin1760 -> 1772 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi.tfmbin2340 -> 4180 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi0.tfmbin2340 -> 4188 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi05.tfmbin1912 -> 3268 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi07.tfmbin1904 -> 3304 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi1.tfmbin2340 -> 4184 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi15.tfmbin1936 -> 3276 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi17.tfmbin1924 -> 3308 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi5.tfmbin1912 -> 3268 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi7.tfmbin1904 -> 3308 bytes
-rw-r--r--fonts/newtx/tfm/ntxmia.tfmbin3012 -> 2472 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Bold-ly1.tfmbin3548 -> 3744 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Bold-ot1.tfmbin3548 -> 3212 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Bold-t1.tfmbin3548 -> 3688 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Bold.tfmbin3540 -> 0 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-BoldItalic-ly1.tfmbin3892 -> 3980 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-BoldItalic-ot1.tfmbin3892 -> 3444 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-BoldItalic-t1.tfmbin3892 -> 3928 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-BoldItalic.tfmbin3728 -> 0 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Italic-ly1.tfmbin3900 -> 4028 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Italic-ot1.tfmbin3900 -> 3472 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Italic-t1.tfmbin3900 -> 3972 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Italic.tfmbin3760 -> 0 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Regular-ly1.tfmbin3664 -> 3780 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Regular-ot1.tfmbin3664 -> 3264 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Regular-t1.tfmbin3664 -> 3720 bytes
-rw-r--r--fonts/newtx/tfm/ntxsups-Regular.tfmbin3664 -> 0 bytes
-rw-r--r--fonts/newtx/tfm/ntxsy.tfmbin2012 -> 2012 bytes
-rw-r--r--fonts/newtx/tfm/ntxsy5.tfmbin2012 -> 2008 bytes
-rw-r--r--fonts/newtx/tfm/ntxsy7.tfmbin2012 -> 2000 bytes
-rw-r--r--fonts/newtx/tfm/ntxsym.tfmbin1560 -> 1564 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi.tfmbin1944 -> 3344 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi0.tfmbin1936 -> 3344 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi01.tfmbin1940 -> 3348 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi015.tfmbin1996 -> 3340 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi017.tfmbin1964 -> 3304 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi02.tfmbin1924 -> 2564 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi025.tfmbin2000 -> 3344 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi027.tfmbin1976 -> 3300 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi03.tfmbin1940 -> 3344 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi035.tfmbin2000 -> 3344 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi037.tfmbin1972 -> 3304 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi05.tfmbin1996 -> 3340 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi07.tfmbin1968 -> 3300 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi1.tfmbin1944 -> 3348 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi15.tfmbin1996 -> 3340 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi17.tfmbin1964 -> 3308 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi2.tfmbin1940 -> 3340 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi25.tfmbin2000 -> 3344 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi27.tfmbin1976 -> 3304 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi3.tfmbin1944 -> 3340 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi35.tfmbin2000 -> 3344 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi37.tfmbin1972 -> 3304 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi5.tfmbin1996 -> 3340 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmi7.tfmbin1968 -> 3304 bytes
-rw-r--r--fonts/newtx/tfm/nxlbmia.tfmbin2388 -> 2508 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi.tfmbin1936 -> 3284 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi0.tfmbin1936 -> 3284 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi01.tfmbin1940 -> 3288 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi015.tfmbin2000 -> 3316 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi017.tfmbin2008 -> 3324 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi02.tfmbin1936 -> 3292 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi025.tfmbin2004 -> 3316 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi027.tfmbin2008 -> 3328 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi03.tfmbin1940 -> 3292 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi035.tfmbin2004 -> 3316 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi037.tfmbin2008 -> 3324 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi05.tfmbin2004 -> 3312 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi07.tfmbin2008 -> 3324 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi1.tfmbin1940 -> 3284 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi15.tfmbin2000 -> 3308 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi17.tfmbin2008 -> 3316 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi2.tfmbin1936 -> 3292 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi25.tfmbin2008 -> 3312 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi27.tfmbin2004 -> 3324 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi3.tfmbin1940 -> 3292 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi35.tfmbin2004 -> 3312 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi37.tfmbin2008 -> 3320 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi5.tfmbin2004 -> 3308 bytes
-rw-r--r--fonts/newtx/tfm/nxlmi7.tfmbin2008 -> 3320 bytes
-rw-r--r--fonts/newtx/tfm/nxlmia.tfmbin2520 -> 2456 bytes
-rw-r--r--fonts/newtx/tfm/rtxbmi5.tfmbin1116 -> 1088 bytes
-rw-r--r--fonts/newtx/tfm/rtxbmi7.tfmbin1112 -> 1112 bytes
-rw-r--r--fonts/newtx/tfm/stxscr.tfmbin0 -> 1836 bytes
-rw-r--r--fonts/newtx/tfm/txbex-bar.tfmbin872 -> 888 bytes
-rw-r--r--fonts/newtx/tfm/txbmiaSTbb.tfmbin0 -> 932 bytes
-rw-r--r--fonts/newtx/tfm/txbmiaX.tfmbin1576 -> 1616 bytes
-rw-r--r--fonts/newtx/tfm/txbsys.tfmbin1660 -> 1616 bytes
-rw-r--r--fonts/newtx/tfm/txexas.tfmbin1504 -> 816 bytes
-rw-r--r--fonts/newtx/tfm/txmiaSTbb.tfmbin0 -> 920 bytes
-rw-r--r--fonts/newtx/tfm/txmiaX.tfmbin1628 -> 1616 bytes
-rw-r--r--fonts/newtx/tfm/txsys.tfmbin1640 -> 1580 bytes
-rw-r--r--fonts/newtx/type1/LibertineI-5nu.pfbbin2816 -> 2832 bytes
-rw-r--r--fonts/newtx/type1/LibertineMathBMI.pfbbin0 -> 37297 bytes
-rw-r--r--fonts/newtx/type1/LibertineMathBMI5.pfbbin0 -> 37371 bytes
-rw-r--r--fonts/newtx/type1/LibertineMathBMI7.pfbbin0 -> 37561 bytes
-rw-r--r--fonts/newtx/type1/LibertineMathBRM.pfbbin0 -> 30598 bytes
-rw-r--r--fonts/newtx/type1/LibertineMathMI.pfbbin0 -> 35829 bytes
-rw-r--r--fonts/newtx/type1/LibertineMathMI5.pfbbin0 -> 36138 bytes
-rw-r--r--fonts/newtx/type1/LibertineMathMI7.pfbbin0 -> 37213 bytes
-rw-r--r--fonts/newtx/type1/LibertineMathRM.pfbbin0 -> 17941 bytes
-rw-r--r--fonts/newtx/type1/LibertineZI-5nu.pfbbin2877 -> 2893 bytes
-rw-r--r--fonts/newtx/type1/NewTXBMI.pfbbin0 -> 32676 bytes
-rw-r--r--fonts/newtx/type1/NewTXBMI5.pfbbin0 -> 34370 bytes
-rw-r--r--fonts/newtx/type1/NewTXBMI7.pfbbin0 -> 35381 bytes
-rw-r--r--fonts/newtx/type1/NewTXMI.pfbbin0 -> 32548 bytes
-rw-r--r--fonts/newtx/type1/NewTXMI5.pfbbin0 -> 36072 bytes
-rw-r--r--fonts/newtx/type1/NewTXMI7.pfbbin0 -> 35027 bytes
-rw-r--r--fonts/newtx/type1/XCharterMathBMI.pfbbin0 -> 32504 bytes
-rw-r--r--fonts/newtx/type1/XCharterMathBRM.pfbbin0 -> 24974 bytes
-rw-r--r--fonts/newtx/type1/XCharterMathMI.pfbbin0 -> 31870 bytes
-rw-r--r--fonts/newtx/type1/XCharterMathRM.pfbbin0 -> 14856 bytes
-rw-r--r--fonts/newtx/type1/ntxsups-Bold.pfbbin20150 -> 21590 bytes
-rw-r--r--fonts/newtx/type1/ntxsups-BoldItalic.pfbbin19346 -> 22351 bytes
-rw-r--r--fonts/newtx/type1/ntxsups-Italic.pfbbin18855 -> 21872 bytes
-rw-r--r--fonts/newtx/type1/ntxsups-Regular.pfbbin18384 -> 21387 bytes
-rw-r--r--fonts/newtx/type1/rtxbmi5.pfbbin16888 -> 16901 bytes
-rw-r--r--fonts/newtx/type1/rtxbmi7.pfbbin16949 -> 17279 bytes
-rw-r--r--fonts/newtx/type1/stxscr.pfbbin0 -> 77528 bytes
-rw-r--r--fonts/newtx/type1/txbex-bar.pfbbin12726 -> 12805 bytes
-rw-r--r--fonts/newtx/type1/txbmiaSTbb.pfbbin0 -> 15466 bytes
-rw-r--r--fonts/newtx/type1/txbmiaX.pfbbin35168 -> 35119 bytes
-rw-r--r--fonts/newtx/type1/txbsys.pfbbin44487 -> 41353 bytes
-rw-r--r--fonts/newtx/type1/txexas.pfbbin23808 -> 23767 bytes
-rw-r--r--fonts/newtx/type1/txmiaSTbb.pfbbin0 -> 15249 bytes
-rw-r--r--fonts/newtx/type1/txmiaX.pfbbin36503 -> 42829 bytes
-rw-r--r--fonts/newtx/type1/txsys.pfbbin43662 -> 40320 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi.vfbin1580 -> 2744 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi0.vfbin1580 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi05.vfbin2144 -> 1828 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi07.vfbin1648 -> 2704 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi1.vfbin1600 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi15.vfbin2172 -> 2708 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi17.vfbin1672 -> 2708 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi5.vfbin2144 -> 2700 bytes
-rw-r--r--fonts/newtx/vf/ntxbmi7.vfbin1652 -> 2700 bytes
-rw-r--r--fonts/newtx/vf/ntxbmia.vfbin2200 -> 1780 bytes
-rw-r--r--fonts/newtx/vf/ntxbsy.vfbin1580 -> 1692 bytes
-rw-r--r--fonts/newtx/vf/ntxbsy5.vfbin1580 -> 1692 bytes
-rw-r--r--fonts/newtx/vf/ntxbsy7.vfbin1740 -> 1856 bytes
-rw-r--r--fonts/newtx/vf/ntxbsym.vfbin1988 -> 2008 bytes
-rw-r--r--fonts/newtx/vf/ntxmi.vfbin1476 -> 2608 bytes
-rw-r--r--fonts/newtx/vf/ntxmi0.vfbin1480 -> 2600 bytes
-rw-r--r--fonts/newtx/vf/ntxmi05.vfbin2040 -> 2584 bytes
-rw-r--r--fonts/newtx/vf/ntxmi07.vfbin1544 -> 2584 bytes
-rw-r--r--fonts/newtx/vf/ntxmi1.vfbin1484 -> 2600 bytes
-rw-r--r--fonts/newtx/vf/ntxmi15.vfbin2064 -> 2588 bytes
-rw-r--r--fonts/newtx/vf/ntxmi17.vfbin1564 -> 2588 bytes
-rw-r--r--fonts/newtx/vf/ntxmi5.vfbin2044 -> 2576 bytes
-rw-r--r--fonts/newtx/vf/ntxmi7.vfbin1544 -> 2576 bytes
-rw-r--r--fonts/newtx/vf/ntxmia.vfbin2204 -> 1868 bytes
-rw-r--r--fonts/newtx/vf/ntxsy.vfbin1648 -> 1756 bytes
-rw-r--r--fonts/newtx/vf/ntxsy5.vfbin1644 -> 1756 bytes
-rw-r--r--fonts/newtx/vf/ntxsy7.vfbin1764 -> 1872 bytes
-rw-r--r--fonts/newtx/vf/ntxsym.vfbin1984 -> 2004 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi.vfbin1788 -> 2744 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi0.vfbin1796 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi01.vfbin1836 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi015.vfbin1836 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi017.vfbin1856 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi02.vfbin1824 -> 1620 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi025.vfbin1836 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi027.vfbin1860 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi03.vfbin1872 -> 2736 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi035.vfbin1872 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi037.vfbin1896 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi05.vfbin1800 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi07.vfbin1824 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi1.vfbin1832 -> 2744 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi15.vfbin1832 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi17.vfbin1856 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi2.vfbin1828 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi25.vfbin1828 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi27.vfbin1852 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi3.vfbin1872 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi35.vfbin1872 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi37.vfbin1896 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi5.vfbin1792 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmi7.vfbin1812 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlbmia.vfbin2048 -> 1904 bytes
-rw-r--r--fonts/newtx/vf/nxlmi.vfbin1780 -> 2744 bytes
-rw-r--r--fonts/newtx/vf/nxlmi0.vfbin1788 -> 2744 bytes
-rw-r--r--fonts/newtx/vf/nxlmi01.vfbin1868 -> 2744 bytes
-rw-r--r--fonts/newtx/vf/nxlmi015.vfbin1876 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi017.vfbin1900 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi02.vfbin1828 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi025.vfbin1872 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi027.vfbin1896 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi03.vfbin1908 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi035.vfbin1916 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi037.vfbin1924 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi05.vfbin1832 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi07.vfbin1856 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi1.vfbin1864 -> 2744 bytes
-rw-r--r--fonts/newtx/vf/nxlmi15.vfbin1868 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi17.vfbin1892 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi2.vfbin1824 -> 2744 bytes
-rw-r--r--fonts/newtx/vf/nxlmi25.vfbin1872 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi27.vfbin1892 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi3.vfbin1900 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi35.vfbin1908 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi37.vfbin1916 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi5.vfbin1824 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmi7.vfbin1848 -> 2740 bytes
-rw-r--r--fonts/newtx/vf/nxlmia.vfbin2436 -> 1968 bytes
-rw-r--r--fonts/xcharter/README5
-rw-r--r--fonts/xcharter/afm/XCharterMathBMI.afm58
-rw-r--r--fonts/xcharter/afm/XCharterMathBRM.afm144
-rw-r--r--fonts/xcharter/afm/XCharterMathMI.afm59
-rw-r--r--fonts/xcharter/afm/XCharterMathRM.afm7
-rw-r--r--fonts/xcharter/doc/xcharter-doc.pdfbin364380 -> 697142 bytes
-rw-r--r--fonts/xcharter/doc/xcharter-doc.tex34
-rw-r--r--fonts/xcharter/map/XCharter.map1
-rw-r--r--fonts/xcharter/tex/xcharter.subs17
-rw-r--r--fonts/xcharter/tfm/XCharterMathBMI.tfmbin1256 -> 1528 bytes
-rw-r--r--fonts/xcharter/tfm/XCharterMathBRM.tfmbin1188 -> 1164 bytes
-rw-r--r--fonts/xcharter/tfm/XCharterMathMI.tfmbin1260 -> 1536 bytes
-rw-r--r--fonts/xcharter/tfm/XCharterMathRM.tfmbin752 -> 752 bytes
-rw-r--r--fonts/xcharter/tfm/zchbmi.tfmbin1860 -> 3256 bytes
-rw-r--r--fonts/xcharter/tfm/zchbmi0.tfmbin1852 -> 3252 bytes
-rw-r--r--fonts/xcharter/tfm/zchbmia.tfmbin2120 -> 2224 bytes
-rw-r--r--fonts/xcharter/tfm/zchmi.tfmbin2820 -> 3248 bytes
-rw-r--r--fonts/xcharter/tfm/zchmi0.tfmbin2812 -> 3248 bytes
-rw-r--r--fonts/xcharter/tfm/zchmia.tfmbin2076 -> 2348 bytes
-rw-r--r--fonts/xcharter/type1/XCharterMathBMI.pfbbin27142 -> 32504 bytes
-rw-r--r--fonts/xcharter/type1/XCharterMathBRM.pfbbin25329 -> 24974 bytes
-rw-r--r--fonts/xcharter/type1/XCharterMathMI.pfbbin26378 -> 31870 bytes
-rw-r--r--fonts/xcharter/type1/XCharterMathRM.pfbbin14935 -> 14856 bytes
-rw-r--r--fonts/xcharter/vf/zchbmi.vfbin1272 -> 2448 bytes
-rw-r--r--fonts/xcharter/vf/zchbmi0.vfbin1272 -> 2448 bytes
-rw-r--r--fonts/xcharter/vf/zchbmia.vfbin1912 -> 1832 bytes
-rw-r--r--fonts/xcharter/vf/zchmi.vfbin1228 -> 2356 bytes
-rw-r--r--fonts/xcharter/vf/zchmi0.vfbin1228 -> 2356 bytes
-rw-r--r--fonts/xcharter/vf/zchmia.vfbin1868 -> 2060 bytes
-rw-r--r--graphics/asymptote/ChangeLog1411
-rw-r--r--graphics/asymptote/GUI/icons_rc.py2962
-rw-r--r--graphics/asymptote/Makefile.in25
-rw-r--r--graphics/asymptote/README4
-rw-r--r--graphics/asymptote/ReleaseNotes15
-rw-r--r--graphics/asymptote/algebra3.cc1610
-rw-r--r--graphics/asymptote/algebra3.h480
-rw-r--r--graphics/asymptote/arcball.cc237
-rw-r--r--graphics/asymptote/arcball.h95
-rw-r--r--graphics/asymptote/asy-keywords.el2
-rw-r--r--graphics/asymptote/asy.list74
-rw-r--r--graphics/asymptote/asymptote.spec2
-rw-r--r--graphics/asymptote/base/plain_prethree.asy2
-rw-r--r--graphics/asymptote/base/shaders/fragment.glsl464
-rw-r--r--graphics/asymptote/base/shaders/vertex.glsl98
-rw-r--r--graphics/asymptote/base/three.asy5
-rw-r--r--graphics/asymptote/base/three_surface.asy90
-rw-r--r--graphics/asymptote/base/webgl/WebGLfooter.html10
-rw-r--r--graphics/asymptote/base/webgl/WebGLheader.html180
-rw-r--r--graphics/asymptote/base/webgl/asygl-1.00.js39
-rw-r--r--graphics/asymptote/bbox3.h104
-rw-r--r--graphics/asymptote/beziercurve.cc153
-rw-r--r--graphics/asymptote/beziercurve.h124
-rw-r--r--graphics/asymptote/bezierpatch.cc620
-rw-r--r--graphics/asymptote/bezierpatch.h231
-rw-r--r--graphics/asymptote/binaries/i386-windows/README4
-rw-r--r--graphics/asymptote/binaries/x86_64-windows/README4
-rw-r--r--graphics/asymptote/build-scripts/HOWTO-MSWindows8
-rwxr-xr-xgraphics/asymptote/build-scripts/build-asygl21
-rwxr-xr-xgraphics/asymptote/build-scripts/build-freeglut22
-rw-r--r--graphics/asymptote/config.h.in9
-rwxr-xr-xgraphics/asymptote/configure31
-rw-r--r--graphics/asymptote/configure.ac11
-rw-r--r--graphics/asymptote/doc/CAD.pdfbin67528 -> 167754 bytes
-rw-r--r--graphics/asymptote/doc/FAQ/asy-faq.info2
-rw-r--r--graphics/asymptote/doc/Makefile.in31
-rw-r--r--graphics/asymptote/doc/TeXShopAndAsymptote.pdfbin31566 -> 77408 bytes
-rw-r--r--graphics/asymptote/doc/asy-latex.pdfbin194549 -> 194549 bytes
-rw-r--r--graphics/asymptote/doc/asy.133
-rw-r--r--graphics/asymptote/doc/asyRefCard.pdfbin53680 -> 121144 bytes
-rw-r--r--graphics/asymptote/doc/asymptote.pdfbin1290552 -> 1294522 bytes
-rw-r--r--graphics/asymptote/doc/asymptote.texi170
-rw-r--r--graphics/asymptote/doc/png/Makefile.in4
-rw-r--r--graphics/asymptote/doc/png/asymptote.info925
-rw-r--r--graphics/asymptote/drawelement.h115
-rw-r--r--graphics/asymptote/drawpath3.cc181
-rw-r--r--graphics/asymptote/drawpath3.h36
-rw-r--r--graphics/asymptote/drawsurface.cc403
-rw-r--r--graphics/asymptote/drawsurface.h174
-rw-r--r--graphics/asymptote/examples/Klein.asy2
-rw-r--r--graphics/asymptote/examples/Sierpinski.asy2
-rw-r--r--graphics/asymptote/examples/SierpinskiSponge.asy11
-rw-r--r--graphics/asymptote/examples/logo3.asy4
-rw-r--r--graphics/asymptote/examples/pdb.asy4
-rw-r--r--graphics/asymptote/examples/shellmethod.asy2
-rw-r--r--graphics/asymptote/examples/triangles.asy4
-rw-r--r--graphics/asymptote/examples/vertexshading.asy5
-rw-r--r--graphics/asymptote/examples/washermethod.asy2
-rw-r--r--graphics/asymptote/fileio.h9
l---------graphics/asymptote/gl.js1
-rw-r--r--graphics/asymptote/glew.c4
-rw-r--r--graphics/asymptote/glrender.cc920
-rw-r--r--graphics/asymptote/glrender.h285
-rw-r--r--graphics/asymptote/jsfile.cc218
-rw-r--r--graphics/asymptote/jsfile.h55
-rw-r--r--graphics/asymptote/main.cc6
-rw-r--r--graphics/asymptote/material.h35
-rw-r--r--graphics/asymptote/pair.h21
-rw-r--r--graphics/asymptote/patches/README3
-rw-r--r--graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch608
-rw-r--r--graphics/asymptote/path3.h8
-rw-r--r--graphics/asymptote/pen.h6
-rw-r--r--graphics/asymptote/picture.cc205
-rw-r--r--graphics/asymptote/picture.h9
-rw-r--r--graphics/asymptote/pipestream.cc2
-rw-r--r--graphics/asymptote/prcfile.h1
-rw-r--r--graphics/asymptote/quaternion.h114
-rw-r--r--graphics/asymptote/revision.cc2
-rw-r--r--graphics/asymptote/runarray.cc516
-rw-r--r--graphics/asymptote/runarray.in48
-rw-r--r--graphics/asymptote/runmath.cc267
-rw-r--r--graphics/asymptote/runmath.in23
-rw-r--r--graphics/asymptote/runpicture.cc402
-rw-r--r--graphics/asymptote/runpicture.in12
-rw-r--r--graphics/asymptote/settings.cc36
-rw-r--r--graphics/asymptote/settings.h5
-rw-r--r--graphics/asymptote/shaders.cc8
-rw-r--r--graphics/asymptote/shaders.h5
-rw-r--r--graphics/asymptote/tr.cc7
-rw-r--r--graphics/asymptote/tr.h1
-rw-r--r--graphics/asymptote/triple.h97
-rw-r--r--graphics/asymptote/util.h2
-rw-r--r--graphics/asymptote/webgl/WebGLfooter.html17
-rw-r--r--graphics/asymptote/webgl/WebGLheader.html172
-rw-r--r--graphics/asymptote/webgl/arcball-0.01.js67
-rw-r--r--graphics/asymptote/webgl/arcball-min-0.01.js1
-rw-r--r--graphics/asymptote/webgl/arcball.js67
-rw-r--r--graphics/asymptote/webgl/data.js47
-rw-r--r--graphics/asymptote/webgl/gl-0.01.js738
-rw-r--r--graphics/asymptote/webgl/gl-matrix-min-2.3.2.js29
-rw-r--r--graphics/asymptote/webgl/gl.js2756
-rw-r--r--graphics/asymptote/webgl/glm-js-min-2.2.2.js273
-rw-r--r--macros/latex/contrib/algobox/LICENSE4
-rw-r--r--macros/latex/contrib/algobox/algobox.dtx16
-rw-r--r--macros/latex/contrib/algobox/algobox.ins2
-rw-r--r--macros/latex/contrib/algobox/algobox.pdfbin131991 -> 115576 bytes
-rw-r--r--macros/latex/contrib/cellprops/LICENSE4
-rw-r--r--macros/latex/contrib/cellprops/README.md2
-rw-r--r--macros/latex/contrib/cellprops/cellprops.dtx117
-rw-r--r--macros/latex/contrib/cellprops/cellprops.ins2
-rw-r--r--macros/latex/contrib/cellprops/cellprops.pdfbin573624 -> 557254 bytes
-rw-r--r--macros/latex/contrib/filecontentsdef/INSTALL4
-rw-r--r--macros/latex/contrib/filecontentsdef/README.md36
-rw-r--r--macros/latex/contrib/filecontentsdef/filecontentsdef.dtx874
-rw-r--r--macros/latex/contrib/filecontentsdef/filecontentsdef.pdfbin90457 -> 129819 bytes
-rw-r--r--macros/latex/contrib/gatherenum/LICENSE4
-rw-r--r--macros/latex/contrib/gatherenum/gatherenum.dtx14
-rw-r--r--macros/latex/contrib/gatherenum/gatherenum.pdfbin411566 -> 393834 bytes
-rw-r--r--macros/latex/contrib/l3build/CHANGELOG.md16
-rw-r--r--macros/latex/contrib/l3build/README.md2
-rw-r--r--macros/latex/contrib/l3build/l3build-check.lua3
-rw-r--r--macros/latex/contrib/l3build/l3build-typesetting.lua5
-rw-r--r--macros/latex/contrib/l3build/l3build.12
-rw-r--r--macros/latex/contrib/l3build/l3build.dtx2
-rw-r--r--macros/latex/contrib/l3build/l3build.lua2
-rw-r--r--macros/latex/contrib/l3build/l3build.pdfbin704972 -> 704702 bytes
-rw-r--r--macros/latex/contrib/l3experimental/CHANGELOG.md9
-rw-r--r--macros/latex/contrib/l3experimental/README.md2
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.pdfbin314276 -> 314468 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3cctab.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3cctab.pdfbin337607 -> 337798 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3color.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3color.pdfbin349735 -> 349914 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-boxes.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-code.pdfbin623901 -> 624152 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-layers.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-paths.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-points.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-scopes.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-softpath.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-state.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-transforms.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3draw.pdfbin491359 -> 491537 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3galley.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3galley.pdfbin385782 -> 385959 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.pdfbin363130 -> 363307 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3pdf-code.pdfbin277263 -> 277554 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3pdf.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3pdf.pdfbin349804 -> 349991 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3str-format.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3str-format.pdfbin344923 -> 345103 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.dtx16
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.pdfbin311683 -> 311872 bytes
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.pdfbin372921 -> 373088 bytes
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.pdfbin285702 -> 285881 bytes
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md39
-rw-r--r--macros/latex/contrib/l3kernel/README.md2
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx427
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin585193 -> 585166 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1530174 -> 1534320 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3.ins5
-rw-r--r--macros/latex/contrib/l3kernel/l3alloc.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx483
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx35
-rw-r--r--macros/latex/contrib/l3kernel/l3candidates.dtx916
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3color-base.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx1447
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx147
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin263297 -> 263491 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx354
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx202
-rw-r--r--macros/latex/contrib/l3kernel/l3final.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx29
-rw-r--r--macros/latex/contrib/l3kernel/l3format.ins5
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx13
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx29
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx77
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx138
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx82
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx124
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx89
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.csv1
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin59020 -> 59084 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx29
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx33
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx101
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx106
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx192
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx10
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin280001 -> 280279 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin227721 -> 228018 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx454
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin186506 -> 186806 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx72
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin5731297 -> 5681390 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
-rw-r--r--macros/latex/contrib/skdoc/README4
-rw-r--r--macros/latex/contrib/skdoc/skdoc.dtx15
-rw-r--r--macros/latex/contrib/skdoc/skdoc.pdfbin271754 -> 293072 bytes
-rw-r--r--macros/latex/contrib/statistics/LICENSE4
-rw-r--r--macros/latex/contrib/statistics/README.md2
-rw-r--r--macros/latex/contrib/statistics/statistics.dtx144
-rw-r--r--macros/latex/contrib/statistics/statistics.ins2
-rw-r--r--macros/latex/contrib/statistics/statistics.pdfbin427734 -> 436624 bytes
-rw-r--r--macros/latex/contrib/testidx/CHANGES8
-rw-r--r--macros/latex/contrib/testidx/README7
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-a4.pdfbin186061 -> 186326 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-amsmath.pdfbin190620 -> 190937 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-babel-german.pdfbin204565 -> 204609 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-babel-german.tex2
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-german.pdfbin204480 -> 204649 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-german.tex2
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-hyp.pdfbin207017 -> 207510 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-letter.pdfbin199713 -> 199911 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-lua.pdfbin148258 -> 148916 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-lua.tex2
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-subset.pdfbin138492 -> 138492 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-t1.pdfbin294342 -> 294962 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-utf8.pdfbin316716 -> 316807 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-utf8.tex2
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.pdfbin101305 -> 102392 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.tex8
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-xe.pdfbin103564 -> 104548 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx-xe.tex2
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idx.pdfbin187731 -> 188003 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.pdfbin178540 -> 179953 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.pdfbin364062 -> 363897 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idxgloss-desc.pdfbin430712 -> 431035 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idxgloss-desc.tex2
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.pdfbin100182 -> 101271 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.pdfbin279604 -> 279705 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idxgloss.pdfbin304536 -> 304624 bytes
-rw-r--r--macros/latex/contrib/testidx/samples/sample-idxgloss.tex2
-rw-r--r--macros/latex/contrib/testidx/samples/sample-noidxgloss.pdfbin276368 -> 277566 bytes
-rw-r--r--macros/latex/contrib/testidx/testidx-code.pdfbin480276 -> 483610 bytes
-rw-r--r--macros/latex/contrib/testidx/testidx-manual.pdfbin321402 -> 326696 bytes
-rw-r--r--macros/latex/contrib/testidx/testidx-manual.tex127
-rw-r--r--macros/latex/contrib/testidx/testidx.dtx80
-rw-r--r--macros/latex/contrib/testidx/testidx.ins4
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb284
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2120424 -> 2119992 bytes
-rw-r--r--systems/win32/miktex/tm/packages/files.csv.lzmabin505775 -> 506082 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/files.csv.lzmabin505605 -> 506353 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini10
-rw-r--r--timestamp2
665 files changed, 27082 insertions, 18313 deletions
diff --git a/FILES.byname b/FILES.byname
index 9430f6b525..7131190451 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -4987,7 +4987,7 @@
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
2014/04/13 | 4600576 | dviware/xdvi/22.87/xdvik-22.87.tar.gz
-2019/09/28 | 155601 | FILES.last07days
+2019/09/29 | 178890 | FILES.last07days
2018/06/27 | 99883 | fonts/academicons/academicons.pdf
2018/06/27 | 10779 | fonts/academicons/academicons.sty
2018/06/27 | 5774 | fonts/academicons/academicons.tex
@@ -8367,20 +8367,20 @@
2014/08/15 | 3241 | fonts/almfixed/README
2014/08/26 | 599924 | fonts/almfixed/ttf/almfixed.ttf
2014/08/29 | 2093574 | fonts/almfixed.zip
-2017/12/20 | 623068 | fonts/amiri/amiri-boldslanted.ttf
-2017/12/20 | 618484 | fonts/amiri/amiri-bold.ttf
-2017/12/20 | 239992 | fonts/amiri/amiri-quran-colored.ttf
-2017/12/20 | 187692 | fonts/amiri/amiri-quran.ttf
-2017/12/20 | 634496 | fonts/amiri/amiri-regular.ttf
-2017/12/20 | 620904 | fonts/amiri/amiri-slanted.ttf
-2017/12/20 | 174446 | fonts/amiri/amiri-table.pdf
-2017/12/20 | 84828 | fonts/amiri/documentation-arabic.pdf
-2017/12/20 | 20279 | fonts/amiri/NEWS
-2017/12/20 | 29142 | fonts/amiri/NEWS-Arabic
-2017/12/20 | 4402 | fonts/amiri/OFL.txt
-2017/12/20 | 1236 | fonts/amiri/README
-2017/12/20 | 2028 | fonts/amiri/README-Arabic
-2017/12/20 | 1498994 | fonts/amiri.zip
+2019/09/29 | 529936 | fonts/amiri/Amiri-BoldSlanted.ttf
+2019/09/29 | 529580 | fonts/amiri/Amiri-Bold.ttf
+2019/09/29 | 149 | fonts/amiri/Amiri.fontspec
+2019/09/29 | 172944 | fonts/amiri/AmiriQuranColored.ttf
+2019/09/29 | 136896 | fonts/amiri/AmiriQuran.ttf
+2019/09/29 | 551132 | fonts/amiri/Amiri-Regular.ttf
+2019/09/29 | 534596 | fonts/amiri/Amiri-Slanted.ttf
+2019/09/29 | 82057 | fonts/amiri/Documentation-Arabic.pdf
+2019/09/29 | 22670 | fonts/amiri/NEWS
+2019/09/29 | 30986 | fonts/amiri/NEWS-Arabic
+2019/09/29 | 4402 | fonts/amiri/OFL.txt
+2019/09/29 | 3217 | fonts/amiri/README
+2019/09/29 | 2028 | fonts/amiri/README-Arabic
+2019/09/29 | 1189669 | fonts/amiri.zip
2009/07/14 | 10140 | fonts/amsfonts/afm/cmb10.afm
2009/07/14 | 9010 | fonts/amsfonts/afm/cmbsy10.afm
2009/07/14 | 9323 | fonts/amsfonts/afm/cmbsy5.afm
@@ -71647,44 +71647,52 @@
2013/03/04 | 692 | fonts/nanumtype1/vf/ts1nanummjmo.vf
2013/03/04 | 684 | fonts/nanumtype1/vf/ts1nanummjm.vf
2013/03/25 | 30424476 | fonts/nanumtype1.zip
-2017/05/30 | 9926 | fonts/newpx/afm/pxbsys.afm
-2017/05/30 | 9854 | fonts/newpx/afm/pxsys.afm
-2009/10/09 | 357647 | fonts/newpx/afm/qplr.afm
-2015/02/06 | 353192 | fonts/newpx/afm/TeXGyrePagella-Regular.afm
-2015/07/17 | 357106 | fonts/newpx/afm/TeXGyrePagellaX-Bold.afm
-2015/07/17 | 275881 | fonts/newpx/afm/TeXGyrePagellaX-BoldItalic.afm
-2015/07/17 | 358847 | fonts/newpx/afm/TeXGyrePagellaX-Italic.afm
-2015/07/17 | 366929 | fonts/newpx/afm/TeXGyrePagellaX-Regular.afm
-2015/07/17 | 357106 | fonts/newpx/afm/zplb.afm
-2015/07/17 | 275881 | fonts/newpx/afm/zplbi.afm
-2015/07/17 | 366929 | fonts/newpx/afm/zplr.afm
-2015/07/17 | 358847 | fonts/newpx/afm/zplri.afm
-2015/04/19 | 635 | fonts/newpx/doc/MANIFEST-newpx.txt
-2017/05/31 | 287991 | fonts/newpx/doc/newpxdoc.pdf
-2017/05/31 | 29386 | fonts/newpx/doc/newpxdoc.tex
+2019/09/05 | 5402 | fonts/newpx/afm/NewPXBMI.afm
+2019/09/10 | 4864 | fonts/newpx/afm/NewPXBMI_gnu.afm
+2019/09/10 | 5651 | fonts/newpx/afm/NewPXMI.afm
+2019/09/10 | 3575 | fonts/newpx/afm/NewPXMI_gnu.afm
+2019/09/10 | 8231 | fonts/newpx/afm/pxbmiaX.afm
+2019/09/10 | 10617 | fonts/newpx/afm/pxbsys.afm
+2019/09/07 | 8940 | fonts/newpx/afm/pxmiaX.afm
+2019/09/11 | 10559 | fonts/newpx/afm/pxsys.afm
+2009/10/10 | 357647 | fonts/newpx/afm/qplr.afm
+2015/02/07 | 353192 | fonts/newpx/afm/TeXGyrePagella-Regular.afm
+2015/07/18 | 357106 | fonts/newpx/afm/TeXGyrePagellaX-Bold.afm
+2015/07/18 | 275881 | fonts/newpx/afm/TeXGyrePagellaX-BoldItalic.afm
+2015/07/18 | 358847 | fonts/newpx/afm/TeXGyrePagellaX-Italic.afm
+2015/07/18 | 366929 | fonts/newpx/afm/TeXGyrePagellaX-Regular.afm
+2015/07/18 | 357106 | fonts/newpx/afm/zplb.afm
+2015/07/18 | 275881 | fonts/newpx/afm/zplbi.afm
+2015/07/18 | 366929 | fonts/newpx/afm/zplr.afm
+2015/07/18 | 358847 | fonts/newpx/afm/zplri.afm
+2019/09/22 | 2226 | fonts/newpx/doc/CnangesInV1.4.txt
+2015/04/20 | 635 | fonts/newpx/doc/MANIFEST-newpx.txt
+2019/09/28 | 791615 | fonts/newpx/doc/newpxdoc.pdf
+2019/09/28 | 40406 | fonts/newpx/doc/newpxdoc.tex
2013/03/29 | 8118 | fonts/newpx/doc/newpxeg-crop.pdf
-2013/03/26 | 8858 | fonts/newpx/doc/pxfontseg-crop.pdf
-2015/02/07 | 6292 | fonts/newpx/enc/ecsups.enc
+2013/03/27 | 8858 | fonts/newpx/doc/pxfontseg-crop.pdf
+2015/02/08 | 6292 | fonts/newpx/enc/ecsups.enc
2015/02/08 | 2837 | fonts/newpx/enc/ot1sups.enc
-2015/02/07 | 5267 | fonts/newpx/enc/texnansxsups.enc
-2015/07/15 | 2578 | fonts/newpx/enc/tgpdiff.enc
-2016/07/06 | 17401 | fonts/newpx/map/newpx.map
-2015/07/28 | 149228 | fonts/newpx/opentype/TeXGyrePagellaX-BoldItalic.otf
-2015/07/28 | 150692 | fonts/newpx/opentype/TeXGyrePagellaX-Bold.otf
-2015/07/28 | 157212 | fonts/newpx/opentype/TeXGyrePagellaX-Italic.otf
-2015/07/28 | 152192 | fonts/newpx/opentype/TeXGyrePagellaX-Regular.otf
-2018/12/16 | 13132 | fonts/newpx/README
-2016/08/15 | 700 | fonts/newpx/tex/lmsnpxsy.fd
-2016/08/15 | 691 | fonts/newpx/tex/lmxnpxexx.fd
+2015/02/08 | 5267 | fonts/newpx/enc/texnansxsups.enc
+2015/07/16 | 2578 | fonts/newpx/enc/tgpdiff.enc
+2019/09/28 | 17653 | fonts/newpx/map/newpx.map
+2015/07/29 | 149228 | fonts/newpx/opentype/TeXGyrePagellaX-BoldItalic.otf
+2015/07/29 | 150692 | fonts/newpx/opentype/TeXGyrePagellaX-Bold.otf
+2015/07/29 | 157212 | fonts/newpx/opentype/TeXGyrePagellaX-Italic.otf
+2015/07/29 | 152192 | fonts/newpx/opentype/TeXGyrePagellaX-Regular.otf
+2019/09/27 | 14988 | fonts/newpx/README
+2016/07/06 | 694 | fonts/newpx/tex/lmsnpxsy.fd
+2016/07/06 | 690 | fonts/newpx/tex/lmxnpxexx.fd
2015/05/01 | 1510 | fonts/newpx/tex/ly1npxtt.fd
2015/05/01 | 1696 | fonts/newpx/tex/ly1zpllf.fd
2015/05/01 | 1734 | fonts/newpx/tex/ly1zplosf.fd
2015/05/01 | 1881 | fonts/newpx/tex/ly1zplsups.fd
2015/05/01 | 1734 | fonts/newpx/tex/ly1zpltlf.fd
2015/05/01 | 1901 | fonts/newpx/tex/ly1zpltosf.fd
-2018/11/22 | 88014 | fonts/newpx/tex/newpxmath.sty
+2019/09/25 | 97949 | fonts/newpx/tex/newpxmath.sty
+2019/09/25 | 151 | fonts/newpx/tex/newpx.subs
2017/08/18 | 7083 | fonts/newpx/tex/newpxtext.sty
-2013/03/31 | 1021 | fonts/newpx/tex/omlnpxmi.fd
+2013/04/01 | 1021 | fonts/newpx/tex/omlnpxmi.fd
2015/05/01 | 1510 | fonts/newpx/tex/ot1npxtt.fd
2015/05/01 | 1696 | fonts/newpx/tex/ot1zpllf.fd
2015/05/01 | 1734 | fonts/newpx/tex/ot1zplosf.fd
@@ -71697,26 +71705,32 @@
2015/05/01 | 1857 | fonts/newpx/tex/t1zplsups.fd
2015/05/01 | 1704 | fonts/newpx/tex/t1zpltlf.fd
2015/05/01 | 1870 | fonts/newpx/tex/t1zpltosf.fd
-2015/04/19 | 228 | fonts/newpx/tex/TeXGyrePagellaX.fontspec
+2015/04/20 | 228 | fonts/newpx/tex/TeXGyrePagellaX.fontspec
2015/05/01 | 1501 | fonts/newpx/tex/ts1npxtt.fd
2015/05/01 | 1210 | fonts/newpx/tex/ts1zpllf.fd
2015/05/01 | 1300 | fonts/newpx/tex/ts1zplosf.fd
-2015/07/03 | 1300 | fonts/newpx/tex/ts1zpltlf.fd
+2015/07/04 | 1300 | fonts/newpx/tex/ts1zpltlf.fd
2015/05/01 | 1331 | fonts/newpx/tex/ts1zpltosf.fd
-2013/03/31 | 628 | fonts/newpx/tex/unpxexa.fd
-2013/03/31 | 837 | fonts/newpx/tex/unpxmia.fd
-2013/03/31 | 1501 | fonts/newpx/tex/unpxss.fd
-2013/03/31 | 629 | fonts/newpx/tex/unpxsyc.fd
-2015/03/21 | 629 | fonts/newpx/tex/unpxsym.fd
+2013/04/01 | 628 | fonts/newpx/tex/unpxexa.fd
+2013/04/01 | 837 | fonts/newpx/tex/unpxmia.fd
+2013/04/01 | 1501 | fonts/newpx/tex/unpxss.fd
+2013/04/01 | 629 | fonts/newpx/tex/unpxsyc.fd
+2015/03/22 | 629 | fonts/newpx/tex/unpxsym.fd
2015/05/01 | 1477 | fonts/newpx/tex/unpxtt.fd
-2017/05/30 | 1680 | fonts/newpx/tfm/pxbsys.tfm
-2017/05/30 | 1628 | fonts/newpx/tfm/pxsys.tfm
+2019/09/10 | 1232 | fonts/newpx/tfm/NewPXBMI_gnu.tfm
+2019/09/10 | 1080 | fonts/newpx/tfm/NewPXBMI.tfm
+2019/09/10 | 748 | fonts/newpx/tfm/NewPXMI_gnu.tfm
+2019/09/10 | 1160 | fonts/newpx/tfm/NewPXMI.tfm
+2019/09/10 | 1732 | fonts/newpx/tfm/pxbmiaX.tfm
+2019/09/10 | 1644 | fonts/newpx/tfm/pxbsys.tfm
+2019/09/07 | 1632 | fonts/newpx/tfm/pxmiaX.tfm
+2019/09/03 | 1584 | fonts/newpx/tfm/pxsys.tfm
2017/02/12 | 756 | fonts/newpx/tfm/zplbexa.tfm
-2016/08/13 | 1772 | fonts/newpx/tfm/zplbexx.tfm
+2016/08/14 | 1772 | fonts/newpx/tfm/zplbexx.tfm
2016/10/15 | 2156 | fonts/newpx/tfm/zplbmi0.tfm
-2017/05/30 | 2156 | fonts/newpx/tfm/zplbmi1.tfm
-2016/10/15 | 3140 | fonts/newpx/tfm/zplbmia.tfm
-2017/05/30 | 2152 | fonts/newpx/tfm/zplbmi.tfm
+2019/09/25 | 3324 | fonts/newpx/tfm/zplbmi1.tfm
+2019/09/25 | 2156 | fonts/newpx/tfm/zplbmia.tfm
+2019/09/25 | 3320 | fonts/newpx/tfm/zplbmi.tfm
2016/02/11 | 6320 | fonts/newpx/tfm/zpl-BoldItalic-lf-ly1.tfm
2016/02/11 | 2864 | fonts/newpx/tfm/zpl-BoldItalic-lf-ot1.tfm
2016/02/11 | 11072 | fonts/newpx/tfm/zpl-BoldItalic-lf-scl-ly1.tfm
@@ -71789,12 +71803,12 @@
2016/02/11 | 3292 | fonts/newpx/tfm/zpl-Bold-tosf-sc-ot1.tfm
2016/02/11 | 12908 | fonts/newpx/tfm/zpl-Bold-tosf-sc-t1.tfm
2016/02/11 | 11660 | fonts/newpx/tfm/zpl-Bold-tosf-t1.tfm
-2013/03/31 | 1012 | fonts/newpx/tfm/zplbsyc.tfm
-2015/03/21 | 1572 | fonts/newpx/tfm/zplbsym.tfm
-2017/05/30 | 2040 | fonts/newpx/tfm/zplbsy.tfm
-2015/07/15 | 192 | fonts/newpx/tfm/zplb-x.tfm
+2019/09/04 | 1012 | fonts/newpx/tfm/zplbsyc.tfm
+2019/09/04 | 1572 | fonts/newpx/tfm/zplbsym.tfm
+2019/09/03 | 2056 | fonts/newpx/tfm/zplbsy.tfm
+2015/07/16 | 192 | fonts/newpx/tfm/zplb-x.tfm
2017/02/12 | 712 | fonts/newpx/tfm/zplexa.tfm
-2016/08/13 | 1760 | fonts/newpx/tfm/zplexx.tfm
+2016/08/14 | 1760 | fonts/newpx/tfm/zplexx.tfm
2016/02/11 | 7548 | fonts/newpx/tfm/zpl-Italic-lf-ly1.tfm
2016/02/11 | 3268 | fonts/newpx/tfm/zpl-Italic-lf-ot1.tfm
2016/02/11 | 13108 | fonts/newpx/tfm/zpl-Italic-lf-scl-ly1.tfm
@@ -71837,9 +71851,9 @@
2016/02/11 | 3416 | fonts/newpx/tfm/zpl-Italic-tosf-sc-ot1.tfm
2016/02/11 | 12824 | fonts/newpx/tfm/zpl-Italic-tosf-sc-t1.tfm
2016/02/11 | 11928 | fonts/newpx/tfm/zpl-Italic-tosf-t1.tfm
-2017/05/30 | 2200 | fonts/newpx/tfm/zplmi1.tfm
-2016/10/15 | 3136 | fonts/newpx/tfm/zplmia.tfm
-2017/05/30 | 2204 | fonts/newpx/tfm/zplmi.tfm
+2019/09/25 | 3248 | fonts/newpx/tfm/zplmi1.tfm
+2019/09/25 | 2076 | fonts/newpx/tfm/zplmia.tfm
+2019/09/25 | 3252 | fonts/newpx/tfm/zplmi.tfm
2016/02/11 | 7736 | fonts/newpx/tfm/zpl-Regular-lf-ly1.tfm
2016/02/11 | 3324 | fonts/newpx/tfm/zpl-Regular-lf-ot1.tfm
2016/02/11 | 13376 | fonts/newpx/tfm/zpl-Regular-lf-scl-ly1.tfm
@@ -71876,7 +71890,7 @@
2016/02/11 | 3300 | fonts/newpx/tfm/zpl-Regular-tosf-sc-ot1.tfm
2016/02/11 | 13072 | fonts/newpx/tfm/zpl-Regular-tosf-sc-t1.tfm
2016/02/11 | 12236 | fonts/newpx/tfm/zpl-Regular-tosf-t1.tfm
-2015/07/15 | 196 | fonts/newpx/tfm/zplr-x.tfm
+2015/07/16 | 196 | fonts/newpx/tfm/zplr-x.tfm
2016/02/11 | 2624 | fonts/newpx/tfm/zplsups-BoldItalic-ly1.tfm
2016/02/11 | 1288 | fonts/newpx/tfm/zplsups-BoldItalic-ot1.tfm
2016/02/11 | 4384 | fonts/newpx/tfm/zplsups-BoldItalic-t1.tfm
@@ -71889,23 +71903,29 @@
2016/02/11 | 2696 | fonts/newpx/tfm/zplsups-Regular-ly1.tfm
2016/02/11 | 1140 | fonts/newpx/tfm/zplsups-Regular-ot1.tfm
2016/02/11 | 5108 | fonts/newpx/tfm/zplsups-Regular-t1.tfm
-2013/03/31 | 1000 | fonts/newpx/tfm/zplsyc.tfm
-2015/03/21 | 1544 | fonts/newpx/tfm/zplsym.tfm
-2017/05/30 | 1992 | fonts/newpx/tfm/zplsy.tfm
-2017/05/30 | 42422 | fonts/newpx/type1/pxbsys.pfb
-2017/05/30 | 43770 | fonts/newpx/type1/pxsys.pfb
+2019/09/04 | 1000 | fonts/newpx/tfm/zplsyc.tfm
+2019/09/04 | 1544 | fonts/newpx/tfm/zplsym.tfm
+2019/09/03 | 2008 | fonts/newpx/tfm/zplsy.tfm
+2019/09/10 | 18529 | fonts/newpx/type1/NewPXBMI_gnu.pfb
+2019/09/05 | 24084 | fonts/newpx/type1/NewPXBMI.pfb
+2019/09/10 | 16003 | fonts/newpx/type1/NewPXMI_gnu.pfb
+2019/09/10 | 25125 | fonts/newpx/type1/NewPXMI.pfb
+2019/09/10 | 36960 | fonts/newpx/type1/pxbmiaX.pfb
+2019/09/10 | 38813 | fonts/newpx/type1/pxbsys.pfb
+2019/09/07 | 42125 | fonts/newpx/type1/pxmiaX.pfb
+2019/09/11 | 40353 | fonts/newpx/type1/pxsys.pfb
2016/02/11 | 204097 | fonts/newpx/type1/zplbi.pfb
2016/02/11 | 197081 | fonts/newpx/type1/zplb.pfb
2016/02/11 | 206482 | fonts/newpx/type1/zplri.pfb
2016/02/11 | 199307 | fonts/newpx/type1/zplr.pfb
-2015/07/15 | 3542 | fonts/newpx/type1/zplx-bold.pfb
-2015/07/15 | 3685 | fonts/newpx/type1/zplx-regular.pfb
+2015/07/16 | 3542 | fonts/newpx/type1/zplx-bold.pfb
+2015/07/16 | 3685 | fonts/newpx/type1/zplx-regular.pfb
2017/02/12 | 548 | fonts/newpx/vf/zplbexa.vf
-2016/08/13 | 1280 | fonts/newpx/vf/zplbexx.vf
+2016/08/14 | 1280 | fonts/newpx/vf/zplbexx.vf
2016/10/15 | 1364 | fonts/newpx/vf/zplbmi0.vf
-2017/05/30 | 1340 | fonts/newpx/vf/zplbmi1.vf
-2016/10/15 | 1844 | fonts/newpx/vf/zplbmia.vf
-2017/05/30 | 1336 | fonts/newpx/vf/zplbmi.vf
+2019/09/25 | 2668 | fonts/newpx/vf/zplbmi1.vf
+2019/09/25 | 1532 | fonts/newpx/vf/zplbmia.vf
+2019/09/25 | 2668 | fonts/newpx/vf/zplbmi.vf
2016/02/11 | 1772 | fonts/newpx/vf/zpl-BoldItalic-lf-scl-ly1.vf
2016/02/11 | 920 | fonts/newpx/vf/zpl-BoldItalic-lf-scl-ot1.vf
2016/02/11 | 1852 | fonts/newpx/vf/zpl-BoldItalic-lf-scl-t1.vf
@@ -71930,11 +71950,11 @@
2016/02/11 | 1764 | fonts/newpx/vf/zpl-Bold-tosf-scl-ly1.vf
2016/02/11 | 912 | fonts/newpx/vf/zpl-Bold-tosf-scl-ot1.vf
2016/02/11 | 1844 | fonts/newpx/vf/zpl-Bold-tosf-scl-t1.vf
-2013/03/29 | 980 | fonts/newpx/vf/zplbsyc.vf
-2015/03/21 | 1672 | fonts/newpx/vf/zplbsym.vf
-2017/05/30 | 1700 | fonts/newpx/vf/zplbsy.vf
+2019/09/04 | 980 | fonts/newpx/vf/zplbsyc.vf
+2019/09/04 | 1672 | fonts/newpx/vf/zplbsym.vf
+2019/09/03 | 1772 | fonts/newpx/vf/zplbsy.vf
2017/02/12 | 544 | fonts/newpx/vf/zplexa.vf
-2016/08/13 | 1308 | fonts/newpx/vf/zplexx.vf
+2016/08/14 | 1308 | fonts/newpx/vf/zplexx.vf
2016/02/11 | 1764 | fonts/newpx/vf/zpl-Italic-lf-scl-ly1.vf
2016/02/11 | 912 | fonts/newpx/vf/zpl-Italic-lf-scl-ot1.vf
2016/02/11 | 1844 | fonts/newpx/vf/zpl-Italic-lf-scl-t1.vf
@@ -71947,9 +71967,9 @@
2016/02/11 | 1768 | fonts/newpx/vf/zpl-Italic-tosf-scl-ly1.vf
2016/02/11 | 916 | fonts/newpx/vf/zpl-Italic-tosf-scl-ot1.vf
2016/02/11 | 1848 | fonts/newpx/vf/zpl-Italic-tosf-scl-t1.vf
-2017/05/30 | 1340 | fonts/newpx/vf/zplmi1.vf
-2016/10/15 | 1868 | fonts/newpx/vf/zplmia.vf
-2017/05/30 | 1336 | fonts/newpx/vf/zplmi.vf
+2019/09/25 | 2548 | fonts/newpx/vf/zplmi1.vf
+2019/09/25 | 1528 | fonts/newpx/vf/zplmia.vf
+2019/09/25 | 2552 | fonts/newpx/vf/zplmi.vf
2016/02/11 | 1768 | fonts/newpx/vf/zpl-Regular-lf-scl-ly1.vf
2016/02/11 | 912 | fonts/newpx/vf/zpl-Regular-lf-scl-ot1.vf
2016/02/11 | 1848 | fonts/newpx/vf/zpl-Regular-lf-scl-t1.vf
@@ -71962,86 +71982,114 @@
2016/02/11 | 1772 | fonts/newpx/vf/zpl-Regular-tosf-scl-ly1.vf
2016/02/11 | 916 | fonts/newpx/vf/zpl-Regular-tosf-scl-ot1.vf
2016/02/11 | 1852 | fonts/newpx/vf/zpl-Regular-tosf-scl-t1.vf
-2013/03/29 | 980 | fonts/newpx/vf/zplsyc.vf
-2015/03/21 | 1668 | fonts/newpx/vf/zplsym.vf
-2017/05/30 | 1696 | fonts/newpx/vf/zplsy.vf
-2018/12/17 | 2811565 | fonts/newpx.zip
-2015/01/31 | 11007 | fonts/newtx/afm/ntxsups-Bold.afm
-2015/01/31 | 11500 | fonts/newtx/afm/ntxsups-BoldItalic.afm
-2015/01/31 | 11416 | fonts/newtx/afm/ntxsups-Italic.afm
-2015/01/31 | 11439 | fonts/newtx/afm/ntxsups-Regular.afm
-2015/01/31 | 337795 | fonts/newtx/afm/ntxtmb.afm
-2015/01/31 | 347973 | fonts/newtx/afm/ntxtmbi.afm
-2015/01/31 | 336881 | fonts/newtx/afm/ntxtmr.afm
+2019/09/04 | 980 | fonts/newpx/vf/zplsyc.vf
+2019/09/04 | 1668 | fonts/newpx/vf/zplsym.vf
+2019/09/03 | 1780 | fonts/newpx/vf/zplsy.vf
+2019/09/29 | 3159519 | fonts/newpx.zip
+2019/06/17 | 524 | fonts/newtx/afm/LibertineI-5nu.afm
+2019/09/11 | 7518 | fonts/newtx/afm/LibertineMathBMI5.afm
+2019/09/11 | 7507 | fonts/newtx/afm/LibertineMathBMI7.afm
+2019/09/11 | 7481 | fonts/newtx/afm/LibertineMathBMI.afm
+2019/09/12 | 6193 | fonts/newtx/afm/LibertineMathBRM.afm
+2019/09/11 | 7555 | fonts/newtx/afm/LibertineMathMI5.afm
+2019/09/11 | 7529 | fonts/newtx/afm/LibertineMathMI7.afm
+2019/09/11 | 7576 | fonts/newtx/afm/LibertineMathMI.afm
+2019/09/12 | 3919 | fonts/newtx/afm/LibertineMathRM.afm
+2019/06/17 | 523 | fonts/newtx/afm/LibertineZI-5nu.afm
+2019/09/11 | 8454 | fonts/newtx/afm/NewTXBMI5.afm
+2019/09/11 | 8423 | fonts/newtx/afm/NewTXBMI7.afm
+2019/09/12 | 8411 | fonts/newtx/afm/NewTXBMI.afm
+2019/09/11 | 8522 | fonts/newtx/afm/NewTXMI5.afm
+2019/09/11 | 8501 | fonts/newtx/afm/NewTXMI7.afm
+2019/09/12 | 8477 | fonts/newtx/afm/NewTXMI.afm
+2019/09/01 | 15212 | fonts/newtx/afm/ntxsups-Bold.afm
+2019/09/01 | 15361 | fonts/newtx/afm/ntxsups-BoldItalic.afm
+2019/09/01 | 15283 | fonts/newtx/afm/ntxsups-Italic.afm
+2019/09/01 | 15293 | fonts/newtx/afm/ntxsups-Regular.afm
+2015/02/01 | 337795 | fonts/newtx/afm/ntxtmb.afm
+2015/02/01 | 347973 | fonts/newtx/afm/ntxtmbi.afm
+2015/02/01 | 336881 | fonts/newtx/afm/ntxtmr.afm
2016/03/19 | 337116 | fonts/newtx/afm/ntxtmri.afm
-2017/02/10 | 5019 | fonts/newtx/afm/txbexas.afm
-2017/02/10 | 5132 | fonts/newtx/afm/txbex-bar.afm
-2018/04/17 | 7078 | fonts/newtx/afm/txbmiaX.afm
-2017/05/31 | 9673 | fonts/newtx/afm/txbsys.afm
-2017/02/10 | 5158 | fonts/newtx/afm/txexas.afm
-2017/02/10 | 5184 | fonts/newtx/afm/txex-bar.afm
-2016/08/03 | 11406 | fonts/newtx/afm/txexs.afm
-2018/04/17 | 9331 | fonts/newtx/afm/txmiaX.afm
-2017/05/31 | 9698 | fonts/newtx/afm/txsys.afm
+2018/10/20 | 4125 | fonts/newtx/afm/rtxbmi5.afm
+2018/10/20 | 4368 | fonts/newtx/afm/rtxbmi7.afm
+2019/08/27 | 11387 | fonts/newtx/afm/stxscr.afm
+2017/02/11 | 5019 | fonts/newtx/afm/txbexas.afm
+2019/06/17 | 5212 | fonts/newtx/afm/txbex-bar.afm
+2019/06/03 | 3924 | fonts/newtx/afm/txbmiaSTbb.afm
+2019/09/11 | 8131 | fonts/newtx/afm/txbmiaX.afm
+2019/09/12 | 10476 | fonts/newtx/afm/txbsys.afm
+2019/08/25 | 5028 | fonts/newtx/afm/txexas.afm
+2017/02/11 | 5184 | fonts/newtx/afm/txex-bar.afm
+2016/08/09 | 11406 | fonts/newtx/afm/txexs.afm
+2019/06/02 | 3906 | fonts/newtx/afm/txmiaSTbb.afm
+2019/09/11 | 8913 | fonts/newtx/afm/txmiaX.afm
+2019/09/12 | 10400 | fonts/newtx/afm/txsys.afm
2014/03/17 | 76404 | fonts/newtx/doc/implementation.pdf
2014/03/17 | 22096 | fonts/newtx/doc/implementation.tex
-2015/01/30 | 478 | fonts/newtx/doc/MANIFEST-newtx.txt
+2015/01/31 | 478 | fonts/newtx/doc/MANIFEST-newtx.txt
2013/09/09 | 188187 | fonts/newtx/doc/mathnotes.pdf
2013/09/09 | 4388 | fonts/newtx/doc/mathnotes.tex
-2018/05/11 | 453876 | fonts/newtx/doc/newtxdoc.pdf
-2018/05/11 | 55173 | fonts/newtx/doc/newtxdoc.tex
-2012/05/26 | 17530 | fonts/newtx/doc/sample-lib-crop.pdf
+2019/09/28 | 1005512 | fonts/newtx/doc/newtxdoc.pdf
+2019/09/28 | 65902 | fonts/newtx/doc/newtxdoc.tex
+2012/05/27 | 17530 | fonts/newtx/doc/sample-lib-crop.pdf
2012/05/22 | 18519 | fonts/newtx/doc/sample-libmtp-crop.pdf
2012/05/06 | 18157 | fonts/newtx/doc/sample-mtp-crop.pdf
-2012/05/26 | 19544 | fonts/newtx/doc/sample-ntx-crop.pdf
+2012/05/27 | 19544 | fonts/newtx/doc/sample-ntx-crop.pdf
2012/05/06 | 17676 | fonts/newtx/doc/sample-ptmx-crop.pdf
2012/05/06 | 16708 | fonts/newtx/doc/sample-tx-crop.pdf
-2012/06/21 | 2538 | fonts/newtx/enc/alt-mn-greek.enc
+2012/06/22 | 2538 | fonts/newtx/enc/alt-mn-greek.enc
2012/11/09 | 2619 | fonts/newtx/enc/libcaps.enc
-2015/02/12 | 2533 | fonts/newtx/enc/libertinealt.enc
-2015/08/07 | 2629 | fonts/newtx/enc/ntx-ec-lf.enc
-2015/08/07 | 2824 | fonts/newtx/enc/ntx-ec-lf-sc.enc
-2015/08/07 | 2632 | fonts/newtx/enc/ntx-ec-osf.enc
-2015/08/07 | 2857 | fonts/newtx/enc/ntx-ec-osf-sc.enc
-2015/08/07 | 2627 | fonts/newtx/enc/ntx-ecth-lf.enc
-2015/08/07 | 2987 | fonts/newtx/enc/ntx-ecth-osf.enc
-2015/08/07 | 2962 | fonts/newtx/enc/ntx-ecth-tlf.enc
-2015/08/07 | 2993 | fonts/newtx/enc/ntx-ecth-tosf.enc
-2015/08/07 | 2880 | fonts/newtx/enc/ntx-ec-tlf.enc
-2015/08/07 | 3096 | fonts/newtx/enc/ntx-ec-tlf-sc.enc
-2015/08/07 | 2993 | fonts/newtx/enc/ntx-ec-tosf.enc
-2015/08/07 | 3217 | fonts/newtx/enc/ntx-ec-tosf-sc.enc
+2015/02/13 | 2533 | fonts/newtx/enc/libertinealt.enc
+2015/08/08 | 2629 | fonts/newtx/enc/ntx-ec-lf.enc
+2015/08/08 | 2824 | fonts/newtx/enc/ntx-ec-lf-sc.enc
+2015/08/08 | 2632 | fonts/newtx/enc/ntx-ec-osf.enc
+2015/08/08 | 2857 | fonts/newtx/enc/ntx-ec-osf-sc.enc
+2015/08/08 | 2627 | fonts/newtx/enc/ntx-ecth-lf.enc
+2015/08/08 | 2987 | fonts/newtx/enc/ntx-ecth-osf.enc
+2015/08/08 | 2962 | fonts/newtx/enc/ntx-ecth-tlf.enc
+2015/08/08 | 2993 | fonts/newtx/enc/ntx-ecth-tosf.enc
+2015/08/08 | 2880 | fonts/newtx/enc/ntx-ec-tlf.enc
+2015/08/08 | 3096 | fonts/newtx/enc/ntx-ec-tlf-sc.enc
+2015/08/08 | 2993 | fonts/newtx/enc/ntx-ec-tosf.enc
+2015/08/08 | 3217 | fonts/newtx/enc/ntx-ec-tosf-sc.enc
2012/12/26 | 4278 | fonts/newtx/enc/ntx-ly1-sc.enc
-2015/02/12 | 2643 | fonts/newtx/enc/ntxmiaalt.enc
+2015/02/13 | 2643 | fonts/newtx/enc/ntxmiaalt.enc
2015/01/19 | 2132 | fonts/newtx/enc/ntx-ot1-lf.enc
2015/01/19 | 2260 | fonts/newtx/enc/ntx-ot1-lf-sc.enc
2015/01/19 | 2173 | fonts/newtx/enc/ntx-ot1-osf.enc
2015/01/19 | 2301 | fonts/newtx/enc/ntx-ot1-osf-sc.enc
2012/12/26 | 2367 | fonts/newtx/enc/ntx-ot1-sc.enc
-2015/02/08 | 2176 | fonts/newtx/enc/ntx-ot1-th-osf.enc
-2015/02/08 | 2146 | fonts/newtx/enc/ntx-ot1-th-tlf.enc
+2015/02/09 | 2176 | fonts/newtx/enc/ntx-ot1-th-osf.enc
+2015/02/09 | 2146 | fonts/newtx/enc/ntx-ot1-th-tlf.enc
2015/01/19 | 2083 | fonts/newtx/enc/ntx-ot1-tlf.enc
2015/01/19 | 2211 | fonts/newtx/enc/ntx-ot1-tlf-sc.enc
2015/01/19 | 2204 | fonts/newtx/enc/ntx-ot1-tosf.enc
2015/01/19 | 2332 | fonts/newtx/enc/ntx-ot1-tosf-sc.enc
+2019/06/07 | 3713 | fonts/newtx/enc/ntxsups_ly1.enc
+2019/06/07 | 2787 | fonts/newtx/enc/ntxsups_ot1.enc
+2019/06/07 | 3661 | fonts/newtx/enc/ntxsups_t1.enc
2012/12/26 | 2414 | fonts/newtx/enc/ntx-t1-sc.enc
-2015/08/07 | 2664 | fonts/newtx/enc/ntx-texnansi-lf.enc
-2015/08/07 | 2809 | fonts/newtx/enc/ntx-texnansi-lf-sc.enc
-2015/08/07 | 2705 | fonts/newtx/enc/ntx-texnansi-osf.enc
-2015/08/07 | 2850 | fonts/newtx/enc/ntx-texnansi-osf-sc.enc
-2015/08/07 | 2711 | fonts/newtx/enc/ntx-texnansi-th-osf.enc
-2015/08/07 | 3028 | fonts/newtx/enc/ntx-texnansi-th-tlf.enc
-2015/08/07 | 2962 | fonts/newtx/enc/ntx-texnansi-tlf.enc
-2015/08/07 | 3108 | fonts/newtx/enc/ntx-texnansi-tlf-sc.enc
-2015/08/07 | 3083 | fonts/newtx/enc/ntx-texnansi-tosf.enc
-2015/08/07 | 3228 | fonts/newtx/enc/ntx-texnansi-tosf-sc.enc
-2018/05/30 | 22036 | fonts/newtx/map/newtx.map
+2015/08/08 | 2664 | fonts/newtx/enc/ntx-texnansi-lf.enc
+2015/08/08 | 2809 | fonts/newtx/enc/ntx-texnansi-lf-sc.enc
+2015/08/08 | 2705 | fonts/newtx/enc/ntx-texnansi-osf.enc
+2015/08/08 | 2850 | fonts/newtx/enc/ntx-texnansi-osf-sc.enc
+2015/08/08 | 2711 | fonts/newtx/enc/ntx-texnansi-th-osf.enc
+2015/08/08 | 3028 | fonts/newtx/enc/ntx-texnansi-th-tlf.enc
+2015/08/08 | 2962 | fonts/newtx/enc/ntx-texnansi-tlf.enc
+2015/08/08 | 3108 | fonts/newtx/enc/ntx-texnansi-tlf-sc.enc
+2015/08/08 | 3083 | fonts/newtx/enc/ntx-texnansi-tosf.enc
+2015/08/08 | 3228 | fonts/newtx/enc/ntx-texnansi-tosf-sc.enc
+2019/09/28 | 22875 | fonts/newtx/map/newtx.map
2012/06/25 | 739 | fonts/newtx/map/zmn.map
+2019/09/01 | 17708 | fonts/newtx/opentype/ntxsups-BoldItalic.otf
+2019/09/01 | 16496 | fonts/newtx/opentype/ntxsups-Bold.otf
+2019/09/01 | 17700 | fonts/newtx/opentype/ntxsups-Italic.otf
+2019/09/01 | 16976 | fonts/newtx/opentype/ntxsups-Regular.otf
2017/03/08 | 182428 | fonts/newtx/opentype/TeXGyreTermesX-BoldItalic.otf
-2017/03/07 | 174068 | fonts/newtx/opentype/TeXGyreTermesX-Bold.otf
-2017/03/07 | 181164 | fonts/newtx/opentype/TeXGyreTermesX-Italic.otf
-2017/03/07 | 178756 | fonts/newtx/opentype/TeXGyreTermesX-Regular.otf
-2018/05/30 | 28390 | fonts/newtx/README
+2017/03/08 | 174068 | fonts/newtx/opentype/TeXGyreTermesX-Bold.otf
+2017/03/08 | 181164 | fonts/newtx/opentype/TeXGyreTermesX-Italic.otf
+2017/03/08 | 178756 | fonts/newtx/opentype/TeXGyreTermesX-Regular.otf
+2019/09/28 | 30025 | fonts/newtx/README
2018/06/07 | 312975 | fonts/newtxsf/doc/newtxsf-doc.pdf
2018/06/07 | 6059 | fonts/newtxsf/doc/newtxsf-doc.tex
2014/09/29 | 43780 | fonts/newtxsf/doc/OFL-FAQ.txt
@@ -72068,403 +72116,417 @@
2015/07/04 | 1712 | fonts/newtxsf/vf/ntxsfmia.vf
2015/07/04 | 1412 | fonts/newtxsf/vf/ntxsfmi.vf
2018/06/07 | 453191 | fonts/newtxsf.zip
-2016/07/03 | 826 | fonts/newtx/tex/lmsntxsy.fd
-2016/07/03 | 549 | fonts/newtx/tex/lmxntxexx.fd
-2013/10/12 | 593 | fonts/newtx/tex/ly1minlibertine.fd
+2019/09/21 | 149 | fonts/newtx/tex/libertine.subs
+2016/07/04 | 826 | fonts/newtx/tex/lmsntxsy.fd
+2016/07/04 | 549 | fonts/newtx/tex/lmxntxexx.fd
+2013/10/13 | 593 | fonts/newtx/tex/ly1minlibertine.fd
2015/05/01 | 1690 | fonts/newtx/tex/ly1ntxlf.fd
2015/05/01 | 1728 | fonts/newtx/tex/ly1ntxosf.fd
-2015/03/03 | 1874 | fonts/newtx/tex/ly1ntxsups.fd
+2015/03/04 | 1874 | fonts/newtx/tex/ly1ntxsups.fd
2015/05/01 | 1728 | fonts/newtx/tex/ly1ntxtlf.fd
2015/05/01 | 1895 | fonts/newtx/tex/ly1ntxtosf.fd
-2012/04/30 | 1516 | fonts/newtx/tex/ly1ntxtt.fd
-2018/05/15 | 107206 | fonts/newtx/tex/newtxmath.sty
-2018/03/27 | 8038 | fonts/newtx/tex/newtxtext.sty
-2016/10/06 | 1919 | fonts/newtx/tex/omlntxmi.fd
+2012/05/01 | 1516 | fonts/newtx/tex/ly1ntxtt.fd
+2019/09/26 | 114062 | fonts/newtx/tex/newtxmath.sty
+2018/03/28 | 8038 | fonts/newtx/tex/newtxtext.sty
+2016/10/07 | 1919 | fonts/newtx/tex/omlntxmi.fd
2018/04/27 | 781 | fonts/newtx/tex/omlntxstx2mi.fd
-2013/12/13 | 3537 | fonts/newtx/tex/omlnxlmi.fd
+2013/12/14 | 3537 | fonts/newtx/tex/omlnxlmi.fd
2014/04/07 | 769 | fonts/newtx/tex/omlzbvmi.fd
2013/08/07 | 769 | fonts/newtx/tex/omlzmnmi.fd
-2014/04/14 | 769 | fonts/newtx/tex/omlzutmi.fd
-2013/10/12 | 593 | fonts/newtx/tex/ot1minlibertine.fd
+2014/04/15 | 769 | fonts/newtx/tex/omlzutmi.fd
+2013/10/13 | 593 | fonts/newtx/tex/ot1minlibertine.fd
2015/05/01 | 1689 | fonts/newtx/tex/ot1ntxlf.fd
2015/05/01 | 1727 | fonts/newtx/tex/ot1ntxosf.fd
-2015/03/03 | 1874 | fonts/newtx/tex/ot1ntxsups.fd
+2015/03/04 | 1874 | fonts/newtx/tex/ot1ntxsups.fd
2015/05/01 | 1727 | fonts/newtx/tex/ot1ntxtlf.fd
2015/05/01 | 1894 | fonts/newtx/tex/ot1ntxtosf.fd
-2012/04/30 | 1494 | fonts/newtx/tex/ot1ntxtt.fd
-2012/08/01 | 1435 | fonts/newtx/tex/t1fxl1.fd
-2013/10/12 | 583 | fonts/newtx/tex/t1minlibertine.fd
+2012/05/01 | 1494 | fonts/newtx/tex/ot1ntxtt.fd
+2012/08/02 | 1435 | fonts/newtx/tex/t1fxl1.fd
+2013/10/13 | 583 | fonts/newtx/tex/t1minlibertine.fd
2015/05/01 | 1659 | fonts/newtx/tex/t1ntxlf.fd
2015/05/01 | 1697 | fonts/newtx/tex/t1ntxosf.fd
-2015/03/03 | 1850 | fonts/newtx/tex/t1ntxsups.fd
+2015/03/04 | 1850 | fonts/newtx/tex/t1ntxsups.fd
2015/05/01 | 1697 | fonts/newtx/tex/t1ntxtlf.fd
2015/05/01 | 1864 | fonts/newtx/tex/t1ntxtosf.fd
-2012/04/30 | 1500 | fonts/newtx/tex/t1ntxtt.fd
-2016/10/15 | 223 | fonts/newtx/tex/TeXGyreTermesX.fontspec
-2015/01/29 | 1129 | fonts/newtx/tex/ts1ntxlf.fd
-2015/01/29 | 1219 | fonts/newtx/tex/ts1ntxosf.fd
-2015/01/29 | 1219 | fonts/newtx/tex/ts1ntxtlf.fd
-2015/01/29 | 1250 | fonts/newtx/tex/ts1ntxtosf.fd
-2012/04/30 | 1483 | fonts/newtx/tex/ts1ntxtt.fd
+2012/05/01 | 1500 | fonts/newtx/tex/t1ntxtt.fd
+2016/10/16 | 223 | fonts/newtx/tex/TeXGyreTermesX.fontspec
+2015/01/30 | 1129 | fonts/newtx/tex/ts1ntxlf.fd
+2015/01/30 | 1219 | fonts/newtx/tex/ts1ntxosf.fd
+2015/01/30 | 1219 | fonts/newtx/tex/ts1ntxtlf.fd
+2015/01/30 | 1250 | fonts/newtx/tex/ts1ntxtosf.fd
+2012/05/01 | 1483 | fonts/newtx/tex/ts1ntxtt.fd
2013/08/07 | 558 | fonts/newtx/tex/untxexa.fd
-2018/04/18 | 1962 | fonts/newtx/tex/untxmia.fd
+2018/04/19 | 1962 | fonts/newtx/tex/untxmia.fd
2013/08/07 | 558 | fonts/newtx/tex/untxsyc.fd
-2015/03/20 | 561 | fonts/newtx/tex/untxsym.fd
-2012/04/30 | 1460 | fonts/newtx/tex/untxtt.fd
+2015/03/21 | 561 | fonts/newtx/tex/untxsym.fd
+2012/05/01 | 1460 | fonts/newtx/tex/untxtt.fd
2013/08/07 | 766 | fonts/newtx/tex/uzmnmia.fd
2012/05/20 | 1064 | fonts/newtx/tfm/fxlri-5alt.tfm
2012/05/20 | 2088 | fonts/newtx/tfm/fxlri-5letters.tfm
2012/05/20 | 1072 | fonts/newtx/tfm/fxlri-7alt.tfm
2012/05/20 | 2080 | fonts/newtx/tfm/fxlri-7letters.tfm
-2013/12/13 | 1080 | fonts/newtx/tfm/fxlzi-5alt.tfm
-2013/12/13 | 1348 | fonts/newtx/tfm/fxlzi-5letters.tfm
+2013/12/14 | 1080 | fonts/newtx/tfm/fxlzi-5alt.tfm
+2013/12/14 | 1348 | fonts/newtx/tfm/fxlzi-5letters.tfm
2013/12/13 | 1068 | fonts/newtx/tfm/fxlzi-7alt.tfm
-2013/12/13 | 1332 | fonts/newtx/tfm/fxlzi-7letters.tfm
-2012/05/19 | 344 | fonts/newtx/tfm/fxlzi-jv5.tfm
-2012/05/19 | 344 | fonts/newtx/tfm/fxlzi-jv7.tfm
-2012/05/19 | 344 | fonts/newtx/tfm/fxlzi-jv.tfm
-2012/09/14 | 148 | fonts/newtx/tfm/LibertineI-5nu.tfm
+2013/12/14 | 1332 | fonts/newtx/tfm/fxlzi-7letters.tfm
+2012/05/20 | 344 | fonts/newtx/tfm/fxlzi-jv5.tfm
+2012/05/20 | 344 | fonts/newtx/tfm/fxlzi-jv7.tfm
+2012/05/20 | 344 | fonts/newtx/tfm/fxlzi-jv.tfm
+2019/06/17 | 148 | fonts/newtx/tfm/LibertineI-5nu.tfm
2012/09/14 | 148 | fonts/newtx/tfm/LibertineI-7nu.tfm
-2012/09/12 | 148 | fonts/newtx/tfm/LibertineI-nu.tfm
-2012/09/12 | 148 | fonts/newtx/tfm/Libertine-nu.tfm
-2012/06/27 | 152 | fonts/newtx/tfm/LibertineTheta-Regular.tfm
-2012/09/14 | 148 | fonts/newtx/tfm/LibertineZI-5nu.tfm
+2012/09/13 | 148 | fonts/newtx/tfm/LibertineI-nu.tfm
+2019/09/11 | 1600 | fonts/newtx/tfm/LibertineMathBMI5.tfm
+2019/09/11 | 1580 | fonts/newtx/tfm/LibertineMathBMI7.tfm
+2019/09/11 | 1544 | fonts/newtx/tfm/LibertineMathBMI.tfm
+2019/09/12 | 1172 | fonts/newtx/tfm/LibertineMathBRM.tfm
+2019/09/11 | 1604 | fonts/newtx/tfm/LibertineMathMI5.tfm
+2019/09/11 | 1576 | fonts/newtx/tfm/LibertineMathMI7.tfm
+2019/09/11 | 1552 | fonts/newtx/tfm/LibertineMathMI.tfm
+2019/09/12 | 768 | fonts/newtx/tfm/LibertineMathRM.tfm
+2012/09/13 | 148 | fonts/newtx/tfm/Libertine-nu.tfm
+2012/06/28 | 152 | fonts/newtx/tfm/LibertineTheta-Regular.tfm
+2019/06/17 | 148 | fonts/newtx/tfm/LibertineZI-5nu.tfm
2012/09/14 | 148 | fonts/newtx/tfm/LibertineZI-7nu.tfm
-2012/09/12 | 148 | fonts/newtx/tfm/LibertineZI-nu.tfm
-2012/09/12 | 148 | fonts/newtx/tfm/LibertineZ-nu.tfm
-2013/10/12 | 2416 | fonts/newtx/tfm/MinLibBolIta-ly1.tfm
-2013/10/12 | 2168 | fonts/newtx/tfm/MinLibBolIta-ot1.tfm
-2013/10/12 | 2212 | fonts/newtx/tfm/MinLibBolIta-t1.tfm
-2013/10/12 | 5564 | fonts/newtx/tfm/MinLibBol-ly1.tfm
-2013/10/12 | 4580 | fonts/newtx/tfm/MinLibBol-ot1.tfm
-2013/10/12 | 5444 | fonts/newtx/tfm/MinLibBol-t1.tfm
-2013/10/12 | 5800 | fonts/newtx/tfm/MinLibIta-ly1.tfm
-2013/10/12 | 4452 | fonts/newtx/tfm/MinLibIta-ot1.tfm
-2013/10/12 | 5284 | fonts/newtx/tfm/MinLibIta-t1.tfm
-2013/10/12 | 5648 | fonts/newtx/tfm/MinLibReg-ly1.tfm
-2013/10/12 | 4196 | fonts/newtx/tfm/MinLibReg-ot1.tfm
-2013/10/12 | 5384 | fonts/newtx/tfm/MinLibReg-t1.tfm
+2012/09/13 | 148 | fonts/newtx/tfm/LibertineZI-nu.tfm
+2012/09/13 | 148 | fonts/newtx/tfm/LibertineZ-nu.tfm
+2013/10/13 | 2416 | fonts/newtx/tfm/MinLibBolIta-ly1.tfm
+2013/10/13 | 2168 | fonts/newtx/tfm/MinLibBolIta-ot1.tfm
+2013/10/13 | 2212 | fonts/newtx/tfm/MinLibBolIta-t1.tfm
+2013/10/13 | 5564 | fonts/newtx/tfm/MinLibBol-ly1.tfm
+2013/10/13 | 4580 | fonts/newtx/tfm/MinLibBol-ot1.tfm
+2013/10/13 | 5444 | fonts/newtx/tfm/MinLibBol-t1.tfm
+2013/10/13 | 5800 | fonts/newtx/tfm/MinLibIta-ly1.tfm
+2013/10/13 | 4452 | fonts/newtx/tfm/MinLibIta-ot1.tfm
+2013/10/13 | 5284 | fonts/newtx/tfm/MinLibIta-t1.tfm
+2013/10/13 | 5648 | fonts/newtx/tfm/MinLibReg-ly1.tfm
+2013/10/13 | 4196 | fonts/newtx/tfm/MinLibReg-ot1.tfm
+2013/10/13 | 5384 | fonts/newtx/tfm/MinLibReg-t1.tfm
+2019/09/11 | 1544 | fonts/newtx/tfm/NewTXBMI5.tfm
+2019/09/11 | 1536 | fonts/newtx/tfm/NewTXBMI7.tfm
+2019/09/13 | 1420 | fonts/newtx/tfm/NewTXBMI.tfm
+2019/09/11 | 1604 | fonts/newtx/tfm/NewTXMI5.tfm
+2019/09/11 | 1568 | fonts/newtx/tfm/NewTXMI7.tfm
+2019/09/13 | 1428 | fonts/newtx/tfm/NewTXMI.tfm
2017/02/11 | 772 | fonts/newtx/tfm/ntxbexa.tfm
2012/06/18 | 520 | fonts/newtx/tfm/ntxbexb.tfm
-2013/05/25 | 816 | fonts/newtx/tfm/ntxbexmods.tfm
-2013/05/25 | 1176 | fonts/newtx/tfm/ntxbex.tfm
-2016/08/12 | 1772 | fonts/newtx/tfm/ntxbexx.tfm
-2018/05/14 | 1924 | fonts/newtx/tfm/ntxbmi05.tfm
-2018/05/14 | 1916 | fonts/newtx/tfm/ntxbmi07.tfm
-2018/05/14 | 1856 | fonts/newtx/tfm/ntxbmi0.tfm
-2018/05/14 | 1936 | fonts/newtx/tfm/ntxbmi15.tfm
-2018/05/14 | 1932 | fonts/newtx/tfm/ntxbmi17.tfm
-2018/05/14 | 1884 | fonts/newtx/tfm/ntxbmi1.tfm
-2013/02/13 | 2292 | fonts/newtx/tfm/ntxbmi1x.tfm
-2018/05/14 | 1924 | fonts/newtx/tfm/ntxbmi5.tfm
-2018/05/14 | 1916 | fonts/newtx/tfm/ntxbmi7.tfm
+2013/05/26 | 816 | fonts/newtx/tfm/ntxbexmods.tfm
+2013/05/26 | 1176 | fonts/newtx/tfm/ntxbex.tfm
+2019/08/07 | 1784 | fonts/newtx/tfm/ntxbexx.tfm
+2019/09/23 | 1900 | fonts/newtx/tfm/ntxbmi05.tfm
+2019/09/23 | 3348 | fonts/newtx/tfm/ntxbmi07.tfm
+2019/09/23 | 4200 | fonts/newtx/tfm/ntxbmi0.tfm
+2019/09/23 | 3388 | fonts/newtx/tfm/ntxbmi15.tfm
+2019/09/23 | 3352 | fonts/newtx/tfm/ntxbmi17.tfm
+2019/09/23 | 4200 | fonts/newtx/tfm/ntxbmi1.tfm
+2013/02/14 | 2292 | fonts/newtx/tfm/ntxbmi1x.tfm
+2019/09/23 | 3384 | fonts/newtx/tfm/ntxbmi5.tfm
+2019/09/23 | 3352 | fonts/newtx/tfm/ntxbmi7.tfm
2012/05/04 | 2400 | fonts/newtx/tfm/ntxbmial1.tfm
2012/05/04 | 2424 | fonts/newtx/tfm/ntxbmials.tfm
-2017/11/23 | 3008 | fonts/newtx/tfm/ntxbmia.tfm
-2018/05/14 | 1856 | fonts/newtx/tfm/ntxbmi.tfm
-2018/03/27 | 7216 | fonts/newtx/tfm/ntx-BoldItalic-lf-ly1.tfm
-2018/03/27 | 3124 | fonts/newtx/tfm/ntx-BoldItalic-lf-ot1.tfm
-2018/03/27 | 8332 | fonts/newtx/tfm/ntx-BoldItalic-lf-scl-ly1.tfm
-2018/03/27 | 3504 | fonts/newtx/tfm/ntx-BoldItalic-lf-scl-ot1.tfm
-2018/03/27 | 13344 | fonts/newtx/tfm/ntx-BoldItalic-lf-scl-t1.tfm
-2018/03/27 | 8348 | fonts/newtx/tfm/ntx-BoldItalic-lf-sc-ly1.tfm
-2018/03/27 | 3500 | fonts/newtx/tfm/ntx-BoldItalic-lf-sc-ot1.tfm
-2018/03/27 | 13336 | fonts/newtx/tfm/ntx-BoldItalic-lf-sc-t1.tfm
-2018/03/27 | 11380 | fonts/newtx/tfm/ntx-BoldItalic-lf-t1.tfm
-2018/03/27 | 7216 | fonts/newtx/tfm/ntx-BoldItalic-osf-ly1.tfm
-2018/03/27 | 3124 | fonts/newtx/tfm/ntx-BoldItalic-osf-ot1.tfm
-2018/03/27 | 8324 | fonts/newtx/tfm/ntx-BoldItalic-osf-scl-ly1.tfm
-2018/03/27 | 3496 | fonts/newtx/tfm/ntx-BoldItalic-osf-scl-ot1.tfm
-2018/03/27 | 13332 | fonts/newtx/tfm/ntx-BoldItalic-osf-scl-t1.tfm
-2018/03/27 | 8344 | fonts/newtx/tfm/ntx-BoldItalic-osf-sc-ly1.tfm
-2018/03/27 | 3496 | fonts/newtx/tfm/ntx-BoldItalic-osf-sc-ot1.tfm
-2018/03/27 | 13328 | fonts/newtx/tfm/ntx-BoldItalic-osf-sc-t1.tfm
-2018/03/27 | 11376 | fonts/newtx/tfm/ntx-BoldItalic-osf-t1.tfm
-2018/03/27 | 7168 | fonts/newtx/tfm/ntx-BoldItalic-tlf-ly1.tfm
-2018/03/27 | 3072 | fonts/newtx/tfm/ntx-BoldItalic-tlf-ot1.tfm
-2018/03/27 | 8284 | fonts/newtx/tfm/ntx-BoldItalic-tlf-scl-ly1.tfm
-2018/03/27 | 3452 | fonts/newtx/tfm/ntx-BoldItalic-tlf-scl-ot1.tfm
-2018/03/27 | 13292 | fonts/newtx/tfm/ntx-BoldItalic-tlf-scl-t1.tfm
-2018/03/27 | 8308 | fonts/newtx/tfm/ntx-BoldItalic-tlf-sc-ly1.tfm
-2018/03/27 | 3456 | fonts/newtx/tfm/ntx-BoldItalic-tlf-sc-ot1.tfm
-2018/03/27 | 13292 | fonts/newtx/tfm/ntx-BoldItalic-tlf-sc-t1.tfm
-2018/03/27 | 11328 | fonts/newtx/tfm/ntx-BoldItalic-tlf-t1.tfm
-2018/03/27 | 7164 | fonts/newtx/tfm/ntx-BoldItalic-tosf-ly1.tfm
-2018/03/27 | 3068 | fonts/newtx/tfm/ntx-BoldItalic-tosf-ot1.tfm
-2018/03/27 | 8280 | fonts/newtx/tfm/ntx-BoldItalic-tosf-scl-ly1.tfm
-2018/03/27 | 3448 | fonts/newtx/tfm/ntx-BoldItalic-tosf-scl-ot1.tfm
-2018/03/27 | 13288 | fonts/newtx/tfm/ntx-BoldItalic-tosf-scl-t1.tfm
-2018/03/27 | 8300 | fonts/newtx/tfm/ntx-BoldItalic-tosf-sc-ly1.tfm
-2018/03/27 | 3448 | fonts/newtx/tfm/ntx-BoldItalic-tosf-sc-ot1.tfm
-2018/03/27 | 13284 | fonts/newtx/tfm/ntx-BoldItalic-tosf-sc-t1.tfm
-2018/03/27 | 11324 | fonts/newtx/tfm/ntx-BoldItalic-tosf-t1.tfm
-2018/03/27 | 7244 | fonts/newtx/tfm/ntx-Bold-lf-ly1.tfm
-2018/03/27 | 3016 | fonts/newtx/tfm/ntx-Bold-lf-ot1.tfm
-2018/03/27 | 7680 | fonts/newtx/tfm/ntx-Bold-lf-scl-ly1.tfm
-2018/03/27 | 3128 | fonts/newtx/tfm/ntx-Bold-lf-scl-ot1.tfm
-2018/03/27 | 12284 | fonts/newtx/tfm/ntx-Bold-lf-scl-t1.tfm
-2018/03/27 | 7728 | fonts/newtx/tfm/ntx-Bold-lf-sc-ly1.tfm
-2018/03/27 | 3180 | fonts/newtx/tfm/ntx-Bold-lf-sc-ot1.tfm
-2018/03/27 | 12324 | fonts/newtx/tfm/ntx-Bold-lf-sc-t1.tfm
-2018/03/27 | 11332 | fonts/newtx/tfm/ntx-Bold-lf-t1.tfm
-2018/03/27 | 7240 | fonts/newtx/tfm/ntx-Bold-osf-ly1.tfm
-2018/03/27 | 3012 | fonts/newtx/tfm/ntx-Bold-osf-ot1.tfm
-2018/03/27 | 7676 | fonts/newtx/tfm/ntx-Bold-osf-scl-ly1.tfm
-2018/03/27 | 3124 | fonts/newtx/tfm/ntx-Bold-osf-scl-ot1.tfm
-2018/03/27 | 12280 | fonts/newtx/tfm/ntx-Bold-osf-scl-t1.tfm
-2018/03/27 | 7724 | fonts/newtx/tfm/ntx-Bold-osf-sc-ly1.tfm
-2018/03/27 | 3176 | fonts/newtx/tfm/ntx-Bold-osf-sc-ot1.tfm
-2018/03/27 | 12320 | fonts/newtx/tfm/ntx-Bold-osf-sc-t1.tfm
-2018/03/27 | 11328 | fonts/newtx/tfm/ntx-Bold-osf-t1.tfm
-2018/03/27 | 7212 | fonts/newtx/tfm/ntx-Bold-tlf-ly1.tfm
-2018/03/27 | 2980 | fonts/newtx/tfm/ntx-Bold-tlf-ot1.tfm
-2018/03/27 | 7648 | fonts/newtx/tfm/ntx-Bold-tlf-scl-ly1.tfm
-2018/03/27 | 3092 | fonts/newtx/tfm/ntx-Bold-tlf-scl-ot1.tfm
-2018/03/27 | 12248 | fonts/newtx/tfm/ntx-Bold-tlf-scl-t1.tfm
-2018/03/27 | 7696 | fonts/newtx/tfm/ntx-Bold-tlf-sc-ly1.tfm
-2018/03/27 | 3144 | fonts/newtx/tfm/ntx-Bold-tlf-sc-ot1.tfm
-2018/03/27 | 12288 | fonts/newtx/tfm/ntx-Bold-tlf-sc-t1.tfm
-2018/03/27 | 11296 | fonts/newtx/tfm/ntx-Bold-tlf-t1.tfm
-2018/03/27 | 7212 | fonts/newtx/tfm/ntx-Bold-tosf-ly1.tfm
-2018/03/27 | 2980 | fonts/newtx/tfm/ntx-Bold-tosf-ot1.tfm
-2018/03/27 | 7648 | fonts/newtx/tfm/ntx-Bold-tosf-scl-ly1.tfm
-2018/03/27 | 3092 | fonts/newtx/tfm/ntx-Bold-tosf-scl-ot1.tfm
-2018/03/27 | 12248 | fonts/newtx/tfm/ntx-Bold-tosf-scl-t1.tfm
-2018/03/27 | 7696 | fonts/newtx/tfm/ntx-Bold-tosf-sc-ly1.tfm
-2018/03/27 | 3144 | fonts/newtx/tfm/ntx-Bold-tosf-sc-ot1.tfm
-2018/03/27 | 12288 | fonts/newtx/tfm/ntx-Bold-tosf-sc-t1.tfm
-2018/03/27 | 11296 | fonts/newtx/tfm/ntx-Bold-tosf-t1.tfm
-2017/05/31 | 2020 | fonts/newtx/tfm/ntxbsy5.tfm
-2017/05/31 | 2032 | fonts/newtx/tfm/ntxbsy7.tfm
-2012/07/02 | 1012 | fonts/newtx/tfm/ntxbsyc.tfm
-2018/05/14 | 1588 | fonts/newtx/tfm/ntxbsym.tfm
-2017/05/31 | 2020 | fonts/newtx/tfm/ntxbsy.tfm
+2019/09/23 | 2412 | fonts/newtx/tfm/ntxbmia.tfm
+2019/09/23 | 4192 | fonts/newtx/tfm/ntxbmi.tfm
+2018/03/28 | 7216 | fonts/newtx/tfm/ntx-BoldItalic-lf-ly1.tfm
+2018/03/28 | 3124 | fonts/newtx/tfm/ntx-BoldItalic-lf-ot1.tfm
+2018/03/28 | 8332 | fonts/newtx/tfm/ntx-BoldItalic-lf-scl-ly1.tfm
+2018/03/28 | 3504 | fonts/newtx/tfm/ntx-BoldItalic-lf-scl-ot1.tfm
+2018/03/28 | 13344 | fonts/newtx/tfm/ntx-BoldItalic-lf-scl-t1.tfm
+2018/03/28 | 8348 | fonts/newtx/tfm/ntx-BoldItalic-lf-sc-ly1.tfm
+2018/03/28 | 3500 | fonts/newtx/tfm/ntx-BoldItalic-lf-sc-ot1.tfm
+2018/03/28 | 13336 | fonts/newtx/tfm/ntx-BoldItalic-lf-sc-t1.tfm
+2018/03/28 | 11380 | fonts/newtx/tfm/ntx-BoldItalic-lf-t1.tfm
+2018/03/28 | 7216 | fonts/newtx/tfm/ntx-BoldItalic-osf-ly1.tfm
+2018/03/28 | 3124 | fonts/newtx/tfm/ntx-BoldItalic-osf-ot1.tfm
+2018/03/28 | 8324 | fonts/newtx/tfm/ntx-BoldItalic-osf-scl-ly1.tfm
+2018/03/28 | 3496 | fonts/newtx/tfm/ntx-BoldItalic-osf-scl-ot1.tfm
+2018/03/28 | 13332 | fonts/newtx/tfm/ntx-BoldItalic-osf-scl-t1.tfm
+2018/03/28 | 8344 | fonts/newtx/tfm/ntx-BoldItalic-osf-sc-ly1.tfm
+2018/03/28 | 3496 | fonts/newtx/tfm/ntx-BoldItalic-osf-sc-ot1.tfm
+2018/03/28 | 13328 | fonts/newtx/tfm/ntx-BoldItalic-osf-sc-t1.tfm
+2018/03/28 | 11376 | fonts/newtx/tfm/ntx-BoldItalic-osf-t1.tfm
+2018/03/28 | 7168 | fonts/newtx/tfm/ntx-BoldItalic-tlf-ly1.tfm
+2018/03/28 | 3072 | fonts/newtx/tfm/ntx-BoldItalic-tlf-ot1.tfm
+2018/03/28 | 8284 | fonts/newtx/tfm/ntx-BoldItalic-tlf-scl-ly1.tfm
+2018/03/28 | 3452 | fonts/newtx/tfm/ntx-BoldItalic-tlf-scl-ot1.tfm
+2018/03/28 | 13292 | fonts/newtx/tfm/ntx-BoldItalic-tlf-scl-t1.tfm
+2018/03/28 | 8308 | fonts/newtx/tfm/ntx-BoldItalic-tlf-sc-ly1.tfm
+2018/03/28 | 3456 | fonts/newtx/tfm/ntx-BoldItalic-tlf-sc-ot1.tfm
+2018/03/28 | 13292 | fonts/newtx/tfm/ntx-BoldItalic-tlf-sc-t1.tfm
+2018/03/28 | 11328 | fonts/newtx/tfm/ntx-BoldItalic-tlf-t1.tfm
+2018/03/28 | 7164 | fonts/newtx/tfm/ntx-BoldItalic-tosf-ly1.tfm
+2018/03/28 | 3068 | fonts/newtx/tfm/ntx-BoldItalic-tosf-ot1.tfm
+2018/03/28 | 8280 | fonts/newtx/tfm/ntx-BoldItalic-tosf-scl-ly1.tfm
+2018/03/28 | 3448 | fonts/newtx/tfm/ntx-BoldItalic-tosf-scl-ot1.tfm
+2018/03/28 | 13288 | fonts/newtx/tfm/ntx-BoldItalic-tosf-scl-t1.tfm
+2018/03/28 | 8300 | fonts/newtx/tfm/ntx-BoldItalic-tosf-sc-ly1.tfm
+2018/03/28 | 3448 | fonts/newtx/tfm/ntx-BoldItalic-tosf-sc-ot1.tfm
+2018/03/28 | 13284 | fonts/newtx/tfm/ntx-BoldItalic-tosf-sc-t1.tfm
+2018/03/28 | 11324 | fonts/newtx/tfm/ntx-BoldItalic-tosf-t1.tfm
+2018/03/28 | 7244 | fonts/newtx/tfm/ntx-Bold-lf-ly1.tfm
+2018/03/28 | 3016 | fonts/newtx/tfm/ntx-Bold-lf-ot1.tfm
+2018/03/28 | 7680 | fonts/newtx/tfm/ntx-Bold-lf-scl-ly1.tfm
+2018/03/28 | 3128 | fonts/newtx/tfm/ntx-Bold-lf-scl-ot1.tfm
+2018/03/28 | 12284 | fonts/newtx/tfm/ntx-Bold-lf-scl-t1.tfm
+2018/03/28 | 7728 | fonts/newtx/tfm/ntx-Bold-lf-sc-ly1.tfm
+2018/03/28 | 3180 | fonts/newtx/tfm/ntx-Bold-lf-sc-ot1.tfm
+2018/03/28 | 12324 | fonts/newtx/tfm/ntx-Bold-lf-sc-t1.tfm
+2018/03/28 | 11332 | fonts/newtx/tfm/ntx-Bold-lf-t1.tfm
+2018/03/28 | 7240 | fonts/newtx/tfm/ntx-Bold-osf-ly1.tfm
+2018/03/28 | 3012 | fonts/newtx/tfm/ntx-Bold-osf-ot1.tfm
+2018/03/28 | 7676 | fonts/newtx/tfm/ntx-Bold-osf-scl-ly1.tfm
+2018/03/28 | 3124 | fonts/newtx/tfm/ntx-Bold-osf-scl-ot1.tfm
+2018/03/28 | 12280 | fonts/newtx/tfm/ntx-Bold-osf-scl-t1.tfm
+2018/03/28 | 7724 | fonts/newtx/tfm/ntx-Bold-osf-sc-ly1.tfm
+2018/03/28 | 3176 | fonts/newtx/tfm/ntx-Bold-osf-sc-ot1.tfm
+2018/03/28 | 12320 | fonts/newtx/tfm/ntx-Bold-osf-sc-t1.tfm
+2018/03/28 | 11328 | fonts/newtx/tfm/ntx-Bold-osf-t1.tfm
+2018/03/28 | 7212 | fonts/newtx/tfm/ntx-Bold-tlf-ly1.tfm
+2018/03/28 | 2980 | fonts/newtx/tfm/ntx-Bold-tlf-ot1.tfm
+2018/03/28 | 7648 | fonts/newtx/tfm/ntx-Bold-tlf-scl-ly1.tfm
+2018/03/28 | 3092 | fonts/newtx/tfm/ntx-Bold-tlf-scl-ot1.tfm
+2018/03/28 | 12248 | fonts/newtx/tfm/ntx-Bold-tlf-scl-t1.tfm
+2018/03/28 | 7696 | fonts/newtx/tfm/ntx-Bold-tlf-sc-ly1.tfm
+2018/03/28 | 3144 | fonts/newtx/tfm/ntx-Bold-tlf-sc-ot1.tfm
+2018/03/28 | 12288 | fonts/newtx/tfm/ntx-Bold-tlf-sc-t1.tfm
+2018/03/28 | 11296 | fonts/newtx/tfm/ntx-Bold-tlf-t1.tfm
+2018/03/28 | 7212 | fonts/newtx/tfm/ntx-Bold-tosf-ly1.tfm
+2018/03/28 | 2980 | fonts/newtx/tfm/ntx-Bold-tosf-ot1.tfm
+2018/03/28 | 7648 | fonts/newtx/tfm/ntx-Bold-tosf-scl-ly1.tfm
+2018/03/28 | 3092 | fonts/newtx/tfm/ntx-Bold-tosf-scl-ot1.tfm
+2018/03/28 | 12248 | fonts/newtx/tfm/ntx-Bold-tosf-scl-t1.tfm
+2018/03/28 | 7696 | fonts/newtx/tfm/ntx-Bold-tosf-sc-ly1.tfm
+2018/03/28 | 3144 | fonts/newtx/tfm/ntx-Bold-tosf-sc-ot1.tfm
+2018/03/28 | 12288 | fonts/newtx/tfm/ntx-Bold-tosf-sc-t1.tfm
+2018/03/28 | 11296 | fonts/newtx/tfm/ntx-Bold-tosf-t1.tfm
+2019/09/25 | 2008 | fonts/newtx/tfm/ntxbsy5.tfm
+2019/09/25 | 2020 | fonts/newtx/tfm/ntxbsy7.tfm
+2012/07/03 | 1012 | fonts/newtx/tfm/ntxbsyc.tfm
+2019/08/04 | 1588 | fonts/newtx/tfm/ntxbsym.tfm
+2019/09/25 | 2008 | fonts/newtx/tfm/ntxbsy.tfm
2017/02/11 | 732 | fonts/newtx/tfm/ntxexa.tfm
2012/06/18 | 184 | fonts/newtx/tfm/ntxexb.tfm
2013/05/25 | 816 | fonts/newtx/tfm/ntxexmods.tfm
-2016/08/12 | 1760 | fonts/newtx/tfm/ntxexx.tfm
-2018/03/27 | 7184 | fonts/newtx/tfm/ntx-Italic-lf-ly1.tfm
-2018/03/27 | 3148 | fonts/newtx/tfm/ntx-Italic-lf-ot1.tfm
-2018/03/27 | 8100 | fonts/newtx/tfm/ntx-Italic-lf-scl-ly1.tfm
-2018/03/27 | 3496 | fonts/newtx/tfm/ntx-Italic-lf-scl-ot1.tfm
-2018/03/27 | 12616 | fonts/newtx/tfm/ntx-Italic-lf-scl-t1.tfm
-2018/03/27 | 8100 | fonts/newtx/tfm/ntx-Italic-lf-sc-ly1.tfm
-2018/03/27 | 3504 | fonts/newtx/tfm/ntx-Italic-lf-sc-ot1.tfm
-2018/03/27 | 12608 | fonts/newtx/tfm/ntx-Italic-lf-sc-t1.tfm
-2018/03/27 | 11296 | fonts/newtx/tfm/ntx-Italic-lf-t1.tfm
-2018/03/27 | 7172 | fonts/newtx/tfm/ntx-Italic-osf-ly1.tfm
-2018/03/27 | 3116 | fonts/newtx/tfm/ntx-Italic-osf-ot1.tfm
-2018/03/27 | 8088 | fonts/newtx/tfm/ntx-Italic-osf-scl-ly1.tfm
-2018/03/27 | 3476 | fonts/newtx/tfm/ntx-Italic-osf-scl-ot1.tfm
-2018/03/27 | 12604 | fonts/newtx/tfm/ntx-Italic-osf-scl-t1.tfm
-2018/03/27 | 8088 | fonts/newtx/tfm/ntx-Italic-osf-sc-ly1.tfm
-2018/03/27 | 3476 | fonts/newtx/tfm/ntx-Italic-osf-sc-ot1.tfm
-2018/03/27 | 12596 | fonts/newtx/tfm/ntx-Italic-osf-sc-t1.tfm
-2018/03/27 | 11284 | fonts/newtx/tfm/ntx-Italic-osf-t1.tfm
-2018/03/27 | 7172 | fonts/newtx/tfm/ntx-Italic-osf-th-ly1.tfm
-2018/03/27 | 3100 | fonts/newtx/tfm/ntx-Italic-osf-th-ot1.tfm
-2018/03/27 | 11268 | fonts/newtx/tfm/ntx-Italic-osf-th-t1.tfm
-2018/03/27 | 7136 | fonts/newtx/tfm/ntx-Italic-tlf-ly1.tfm
-2018/03/27 | 3076 | fonts/newtx/tfm/ntx-Italic-tlf-ot1.tfm
-2018/03/27 | 8052 | fonts/newtx/tfm/ntx-Italic-tlf-scl-ly1.tfm
-2018/03/27 | 3428 | fonts/newtx/tfm/ntx-Italic-tlf-scl-ot1.tfm
-2018/03/27 | 12564 | fonts/newtx/tfm/ntx-Italic-tlf-scl-t1.tfm
-2018/03/27 | 8052 | fonts/newtx/tfm/ntx-Italic-tlf-sc-ly1.tfm
-2018/03/27 | 3432 | fonts/newtx/tfm/ntx-Italic-tlf-sc-ot1.tfm
-2018/03/27 | 12556 | fonts/newtx/tfm/ntx-Italic-tlf-sc-t1.tfm
-2018/03/27 | 11248 | fonts/newtx/tfm/ntx-Italic-tlf-t1.tfm
-2018/03/27 | 7140 | fonts/newtx/tfm/ntx-Italic-tlf-th-ly1.tfm
-2018/03/27 | 3068 | fonts/newtx/tfm/ntx-Italic-tlf-th-ot1.tfm
-2018/03/27 | 11236 | fonts/newtx/tfm/ntx-Italic-tlf-th-t1.tfm
-2018/03/27 | 7136 | fonts/newtx/tfm/ntx-Italic-tosf-ly1.tfm
-2018/03/27 | 3072 | fonts/newtx/tfm/ntx-Italic-tosf-ot1.tfm
-2018/03/27 | 8052 | fonts/newtx/tfm/ntx-Italic-tosf-scl-ly1.tfm
-2018/03/27 | 3424 | fonts/newtx/tfm/ntx-Italic-tosf-scl-ot1.tfm
-2018/03/27 | 12564 | fonts/newtx/tfm/ntx-Italic-tosf-scl-t1.tfm
-2018/03/27 | 8052 | fonts/newtx/tfm/ntx-Italic-tosf-sc-ly1.tfm
-2018/03/27 | 3428 | fonts/newtx/tfm/ntx-Italic-tosf-sc-ot1.tfm
-2018/03/27 | 12552 | fonts/newtx/tfm/ntx-Italic-tosf-sc-t1.tfm
-2018/03/27 | 11248 | fonts/newtx/tfm/ntx-Italic-tosf-t1.tfm
-2018/05/14 | 1912 | fonts/newtx/tfm/ntxmi05.tfm
-2018/05/14 | 1904 | fonts/newtx/tfm/ntxmi07.tfm
-2018/05/14 | 2340 | fonts/newtx/tfm/ntxmi0.tfm
-2018/05/14 | 1936 | fonts/newtx/tfm/ntxmi15.tfm
-2018/05/14 | 1924 | fonts/newtx/tfm/ntxmi17.tfm
-2018/05/14 | 2340 | fonts/newtx/tfm/ntxmi1.tfm
-2018/05/14 | 1912 | fonts/newtx/tfm/ntxmi5.tfm
-2018/05/14 | 1904 | fonts/newtx/tfm/ntxmi7.tfm
-2017/11/23 | 3012 | fonts/newtx/tfm/ntxmia.tfm
-2018/05/14 | 2340 | fonts/newtx/tfm/ntxmi.tfm
-2018/03/27 | 7288 | fonts/newtx/tfm/ntx-Regular-lf-ly1.tfm
-2018/03/27 | 3048 | fonts/newtx/tfm/ntx-Regular-lf-ot1.tfm
-2018/03/27 | 7764 | fonts/newtx/tfm/ntx-Regular-lf-scl-ly1.tfm
-2018/03/27 | 3164 | fonts/newtx/tfm/ntx-Regular-lf-scl-ot1.tfm
-2018/03/27 | 12272 | fonts/newtx/tfm/ntx-Regular-lf-scl-t1.tfm
-2018/03/27 | 7820 | fonts/newtx/tfm/ntx-Regular-lf-sc-ly1.tfm
-2018/03/27 | 3228 | fonts/newtx/tfm/ntx-Regular-lf-sc-ot1.tfm
-2018/03/27 | 12312 | fonts/newtx/tfm/ntx-Regular-lf-sc-t1.tfm
-2018/03/27 | 11360 | fonts/newtx/tfm/ntx-Regular-lf-t1.tfm
-2018/03/27 | 7284 | fonts/newtx/tfm/ntx-Regular-osf-ly1.tfm
-2018/03/27 | 3044 | fonts/newtx/tfm/ntx-Regular-osf-ot1.tfm
-2018/03/27 | 7760 | fonts/newtx/tfm/ntx-Regular-osf-scl-ly1.tfm
-2018/03/27 | 3160 | fonts/newtx/tfm/ntx-Regular-osf-scl-ot1.tfm
-2018/03/27 | 12268 | fonts/newtx/tfm/ntx-Regular-osf-scl-t1.tfm
-2018/03/27 | 7812 | fonts/newtx/tfm/ntx-Regular-osf-sc-ly1.tfm
-2018/03/27 | 3220 | fonts/newtx/tfm/ntx-Regular-osf-sc-ot1.tfm
-2018/03/27 | 12308 | fonts/newtx/tfm/ntx-Regular-osf-sc-t1.tfm
-2018/03/27 | 11356 | fonts/newtx/tfm/ntx-Regular-osf-t1.tfm
-2018/03/27 | 7256 | fonts/newtx/tfm/ntx-Regular-tlf-ly1.tfm
-2018/03/27 | 3012 | fonts/newtx/tfm/ntx-Regular-tlf-ot1.tfm
-2018/03/27 | 7732 | fonts/newtx/tfm/ntx-Regular-tlf-scl-ly1.tfm
-2018/03/27 | 3128 | fonts/newtx/tfm/ntx-Regular-tlf-scl-ot1.tfm
-2018/03/27 | 12240 | fonts/newtx/tfm/ntx-Regular-tlf-scl-t1.tfm
-2018/03/27 | 7784 | fonts/newtx/tfm/ntx-Regular-tlf-sc-ly1.tfm
-2018/03/27 | 3188 | fonts/newtx/tfm/ntx-Regular-tlf-sc-ot1.tfm
-2018/03/27 | 12280 | fonts/newtx/tfm/ntx-Regular-tlf-sc-t1.tfm
-2018/03/27 | 11328 | fonts/newtx/tfm/ntx-Regular-tlf-t1.tfm
-2018/03/27 | 7256 | fonts/newtx/tfm/ntx-Regular-tosf-ly1.tfm
-2018/03/27 | 3012 | fonts/newtx/tfm/ntx-Regular-tosf-ot1.tfm
-2018/03/27 | 7732 | fonts/newtx/tfm/ntx-Regular-tosf-scl-ly1.tfm
-2018/03/27 | 3128 | fonts/newtx/tfm/ntx-Regular-tosf-scl-ot1.tfm
-2018/03/27 | 12240 | fonts/newtx/tfm/ntx-Regular-tosf-scl-t1.tfm
-2018/03/27 | 7784 | fonts/newtx/tfm/ntx-Regular-tosf-sc-ly1.tfm
-2018/03/27 | 3188 | fonts/newtx/tfm/ntx-Regular-tosf-sc-ot1.tfm
-2018/03/27 | 12280 | fonts/newtx/tfm/ntx-Regular-tosf-sc-t1.tfm
-2018/03/27 | 11328 | fonts/newtx/tfm/ntx-Regular-tosf-t1.tfm
-2018/05/05 | 3044 | fonts/newtx/tfm/ntxstx2bmia.tfm
-2018/05/05 | 1944 | fonts/newtx/tfm/ntxstx2bmi.tfm
-2018/05/05 | 2936 | fonts/newtx/tfm/ntxstx2mia.tfm
-2018/05/05 | 1932 | fonts/newtx/tfm/ntxstx2mi.tfm
-2018/03/27 | 3892 | fonts/newtx/tfm/ntxsups-BoldItalic-ly1.tfm
-2018/03/27 | 3892 | fonts/newtx/tfm/ntxsups-BoldItalic-ot1.tfm
-2018/03/27 | 3892 | fonts/newtx/tfm/ntxsups-BoldItalic-t1.tfm
-2018/03/27 | 3728 | fonts/newtx/tfm/ntxsups-BoldItalic.tfm
-2018/03/27 | 3548 | fonts/newtx/tfm/ntxsups-Bold-ly1.tfm
-2018/03/27 | 3548 | fonts/newtx/tfm/ntxsups-Bold-ot1.tfm
-2018/03/27 | 3548 | fonts/newtx/tfm/ntxsups-Bold-t1.tfm
-2018/03/27 | 3540 | fonts/newtx/tfm/ntxsups-Bold.tfm
-2018/03/27 | 3900 | fonts/newtx/tfm/ntxsups-Italic-ly1.tfm
-2018/03/27 | 3900 | fonts/newtx/tfm/ntxsups-Italic-ot1.tfm
-2018/03/27 | 3900 | fonts/newtx/tfm/ntxsups-Italic-t1.tfm
-2018/03/27 | 3760 | fonts/newtx/tfm/ntxsups-Italic.tfm
-2018/03/27 | 3664 | fonts/newtx/tfm/ntxsups-Regular-ly1.tfm
-2018/03/27 | 3664 | fonts/newtx/tfm/ntxsups-Regular-ot1.tfm
-2018/03/27 | 3664 | fonts/newtx/tfm/ntxsups-Regular-t1.tfm
-2018/03/27 | 3664 | fonts/newtx/tfm/ntxsups-Regular.tfm
-2017/05/31 | 2012 | fonts/newtx/tfm/ntxsy5.tfm
-2017/05/31 | 2012 | fonts/newtx/tfm/ntxsy7.tfm
-2015/02/12 | 712 | fonts/newtx/tfm/ntxsybalt.tfm
-2012/07/02 | 1000 | fonts/newtx/tfm/ntxsyc.tfm
-2018/05/14 | 1560 | fonts/newtx/tfm/ntxsym.tfm
-2015/02/12 | 728 | fonts/newtx/tfm/ntxsyralt.tfm
-2017/05/31 | 2012 | fonts/newtx/tfm/ntxsy.tfm
-2014/11/11 | 1996 | fonts/newtx/tfm/nxlbmi015.tfm
-2014/11/11 | 1964 | fonts/newtx/tfm/nxlbmi017.tfm
-2014/11/11 | 1940 | fonts/newtx/tfm/nxlbmi01.tfm
-2018/05/30 | 2000 | fonts/newtx/tfm/nxlbmi025.tfm
-2018/05/30 | 1976 | fonts/newtx/tfm/nxlbmi027.tfm
-2018/05/30 | 1924 | fonts/newtx/tfm/nxlbmi02.tfm
-2014/11/11 | 2000 | fonts/newtx/tfm/nxlbmi035.tfm
-2014/11/11 | 1972 | fonts/newtx/tfm/nxlbmi037.tfm
-2014/11/11 | 1940 | fonts/newtx/tfm/nxlbmi03.tfm
-2018/05/30 | 1996 | fonts/newtx/tfm/nxlbmi05.tfm
-2018/05/30 | 1968 | fonts/newtx/tfm/nxlbmi07.tfm
-2018/05/30 | 1936 | fonts/newtx/tfm/nxlbmi0.tfm
-2014/11/11 | 1996 | fonts/newtx/tfm/nxlbmi15.tfm
-2014/11/11 | 1964 | fonts/newtx/tfm/nxlbmi17.tfm
-2014/11/11 | 1944 | fonts/newtx/tfm/nxlbmi1.tfm
-2018/05/30 | 2000 | fonts/newtx/tfm/nxlbmi25.tfm
-2018/05/30 | 1976 | fonts/newtx/tfm/nxlbmi27.tfm
-2018/05/30 | 1940 | fonts/newtx/tfm/nxlbmi2.tfm
-2014/11/11 | 2000 | fonts/newtx/tfm/nxlbmi35.tfm
-2014/11/11 | 1972 | fonts/newtx/tfm/nxlbmi37.tfm
-2014/11/11 | 1944 | fonts/newtx/tfm/nxlbmi3.tfm
-2018/05/30 | 1996 | fonts/newtx/tfm/nxlbmi5.tfm
-2018/05/30 | 1968 | fonts/newtx/tfm/nxlbmi7.tfm
-2015/02/12 | 2388 | fonts/newtx/tfm/nxlbmia.tfm
-2018/05/30 | 1944 | fonts/newtx/tfm/nxlbmi.tfm
-2012/11/14 | 1600 | fonts/newtx/tfm/nxlbsy5.tfm
-2012/11/14 | 1600 | fonts/newtx/tfm/nxlbsy7.tfm
-2014/11/11 | 2000 | fonts/newtx/tfm/nxlmi015.tfm
-2014/11/11 | 2008 | fonts/newtx/tfm/nxlmi017.tfm
-2014/11/11 | 1940 | fonts/newtx/tfm/nxlmi01.tfm
-2018/05/30 | 2004 | fonts/newtx/tfm/nxlmi025.tfm
-2018/05/30 | 2008 | fonts/newtx/tfm/nxlmi027.tfm
-2018/05/30 | 1936 | fonts/newtx/tfm/nxlmi02.tfm
-2014/11/11 | 2004 | fonts/newtx/tfm/nxlmi035.tfm
-2014/11/11 | 2008 | fonts/newtx/tfm/nxlmi037.tfm
-2014/11/11 | 1940 | fonts/newtx/tfm/nxlmi03.tfm
-2018/05/30 | 2004 | fonts/newtx/tfm/nxlmi05.tfm
-2018/05/30 | 2008 | fonts/newtx/tfm/nxlmi07.tfm
-2018/05/30 | 1936 | fonts/newtx/tfm/nxlmi0.tfm
-2014/11/11 | 2000 | fonts/newtx/tfm/nxlmi15.tfm
-2014/11/11 | 2008 | fonts/newtx/tfm/nxlmi17.tfm
-2014/11/11 | 1940 | fonts/newtx/tfm/nxlmi1.tfm
-2018/05/30 | 2008 | fonts/newtx/tfm/nxlmi25.tfm
-2018/05/30 | 2004 | fonts/newtx/tfm/nxlmi27.tfm
-2018/05/30 | 1936 | fonts/newtx/tfm/nxlmi2.tfm
-2014/11/11 | 2004 | fonts/newtx/tfm/nxlmi35.tfm
-2014/11/11 | 2008 | fonts/newtx/tfm/nxlmi37.tfm
-2014/11/11 | 1940 | fonts/newtx/tfm/nxlmi3.tfm
-2018/05/30 | 2004 | fonts/newtx/tfm/nxlmi5.tfm
-2018/05/30 | 2008 | fonts/newtx/tfm/nxlmi7.tfm
-2015/02/12 | 2520 | fonts/newtx/tfm/nxlmia.tfm
-2018/05/30 | 1936 | fonts/newtx/tfm/nxlmi.tfm
-2012/11/14 | 1556 | fonts/newtx/tfm/nxlsy5.tfm
-2012/11/14 | 1556 | fonts/newtx/tfm/nxlsy7.tfm
-2015/02/12 | 880 | fonts/newtx/tfm/rfxlr-alt.tfm
-2015/02/12 | 1072 | fonts/newtx/tfm/rfxlri-alt.tfm
-2012/07/07 | 156 | fonts/newtx/tfm/rfxlri-vw5.tfm
-2012/07/07 | 156 | fonts/newtx/tfm/rfxlri-vw7.tfm
-2012/07/07 | 156 | fonts/newtx/tfm/rfxlri-vw.tfm
-2015/02/12 | 920 | fonts/newtx/tfm/rfxlz-alt.tfm
-2015/02/12 | 1072 | fonts/newtx/tfm/rfxlzi-alt.tfm
-2012/07/07 | 156 | fonts/newtx/tfm/rfxlzi-vw5.tfm
-2012/07/07 | 156 | fonts/newtx/tfm/rfxlzi-vw7.tfm
-2012/07/07 | 156 | fonts/newtx/tfm/rfxlzi-vw.tfm
-2013/02/11 | 752 | fonts/newtx/tfm/rntxbmi5.tfm
-2013/02/11 | 768 | fonts/newtx/tfm/rntxbmi7.tfm
-2013/02/11 | 628 | fonts/newtx/tfm/rntxbmi.tfm
+2019/08/07 | 1772 | fonts/newtx/tfm/ntxexx.tfm
+2018/03/28 | 7184 | fonts/newtx/tfm/ntx-Italic-lf-ly1.tfm
+2018/03/28 | 3148 | fonts/newtx/tfm/ntx-Italic-lf-ot1.tfm
+2018/03/28 | 8100 | fonts/newtx/tfm/ntx-Italic-lf-scl-ly1.tfm
+2018/03/28 | 3496 | fonts/newtx/tfm/ntx-Italic-lf-scl-ot1.tfm
+2018/03/28 | 12616 | fonts/newtx/tfm/ntx-Italic-lf-scl-t1.tfm
+2018/03/28 | 8100 | fonts/newtx/tfm/ntx-Italic-lf-sc-ly1.tfm
+2018/03/28 | 3504 | fonts/newtx/tfm/ntx-Italic-lf-sc-ot1.tfm
+2018/03/28 | 12608 | fonts/newtx/tfm/ntx-Italic-lf-sc-t1.tfm
+2018/03/28 | 11296 | fonts/newtx/tfm/ntx-Italic-lf-t1.tfm
+2018/03/28 | 7172 | fonts/newtx/tfm/ntx-Italic-osf-ly1.tfm
+2018/03/28 | 3116 | fonts/newtx/tfm/ntx-Italic-osf-ot1.tfm
+2018/03/28 | 8088 | fonts/newtx/tfm/ntx-Italic-osf-scl-ly1.tfm
+2018/03/28 | 3476 | fonts/newtx/tfm/ntx-Italic-osf-scl-ot1.tfm
+2018/03/28 | 12604 | fonts/newtx/tfm/ntx-Italic-osf-scl-t1.tfm
+2018/03/28 | 8088 | fonts/newtx/tfm/ntx-Italic-osf-sc-ly1.tfm
+2018/03/28 | 3476 | fonts/newtx/tfm/ntx-Italic-osf-sc-ot1.tfm
+2018/03/28 | 12596 | fonts/newtx/tfm/ntx-Italic-osf-sc-t1.tfm
+2018/03/28 | 11284 | fonts/newtx/tfm/ntx-Italic-osf-t1.tfm
+2018/03/28 | 7172 | fonts/newtx/tfm/ntx-Italic-osf-th-ly1.tfm
+2018/03/28 | 3100 | fonts/newtx/tfm/ntx-Italic-osf-th-ot1.tfm
+2018/03/28 | 11268 | fonts/newtx/tfm/ntx-Italic-osf-th-t1.tfm
+2018/03/28 | 7136 | fonts/newtx/tfm/ntx-Italic-tlf-ly1.tfm
+2018/03/28 | 3076 | fonts/newtx/tfm/ntx-Italic-tlf-ot1.tfm
+2018/03/28 | 8052 | fonts/newtx/tfm/ntx-Italic-tlf-scl-ly1.tfm
+2018/03/28 | 3428 | fonts/newtx/tfm/ntx-Italic-tlf-scl-ot1.tfm
+2018/03/28 | 12564 | fonts/newtx/tfm/ntx-Italic-tlf-scl-t1.tfm
+2018/03/28 | 8052 | fonts/newtx/tfm/ntx-Italic-tlf-sc-ly1.tfm
+2018/03/28 | 3432 | fonts/newtx/tfm/ntx-Italic-tlf-sc-ot1.tfm
+2018/03/28 | 12556 | fonts/newtx/tfm/ntx-Italic-tlf-sc-t1.tfm
+2018/03/28 | 11248 | fonts/newtx/tfm/ntx-Italic-tlf-t1.tfm
+2018/03/28 | 7140 | fonts/newtx/tfm/ntx-Italic-tlf-th-ly1.tfm
+2018/03/28 | 3068 | fonts/newtx/tfm/ntx-Italic-tlf-th-ot1.tfm
+2018/03/28 | 11236 | fonts/newtx/tfm/ntx-Italic-tlf-th-t1.tfm
+2018/03/28 | 7136 | fonts/newtx/tfm/ntx-Italic-tosf-ly1.tfm
+2018/03/28 | 3072 | fonts/newtx/tfm/ntx-Italic-tosf-ot1.tfm
+2018/03/28 | 8052 | fonts/newtx/tfm/ntx-Italic-tosf-scl-ly1.tfm
+2018/03/28 | 3424 | fonts/newtx/tfm/ntx-Italic-tosf-scl-ot1.tfm
+2018/03/28 | 12564 | fonts/newtx/tfm/ntx-Italic-tosf-scl-t1.tfm
+2018/03/28 | 8052 | fonts/newtx/tfm/ntx-Italic-tosf-sc-ly1.tfm
+2018/03/28 | 3428 | fonts/newtx/tfm/ntx-Italic-tosf-sc-ot1.tfm
+2018/03/28 | 12552 | fonts/newtx/tfm/ntx-Italic-tosf-sc-t1.tfm
+2018/03/28 | 11248 | fonts/newtx/tfm/ntx-Italic-tosf-t1.tfm
+2019/09/23 | 3268 | fonts/newtx/tfm/ntxmi05.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/ntxmi07.tfm
+2019/09/23 | 4188 | fonts/newtx/tfm/ntxmi0.tfm
+2019/09/23 | 3276 | fonts/newtx/tfm/ntxmi15.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/ntxmi17.tfm
+2019/09/23 | 4184 | fonts/newtx/tfm/ntxmi1.tfm
+2019/09/23 | 3268 | fonts/newtx/tfm/ntxmi5.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/ntxmi7.tfm
+2019/09/23 | 2472 | fonts/newtx/tfm/ntxmia.tfm
+2019/09/23 | 4180 | fonts/newtx/tfm/ntxmi.tfm
+2018/03/28 | 7288 | fonts/newtx/tfm/ntx-Regular-lf-ly1.tfm
+2018/03/28 | 3048 | fonts/newtx/tfm/ntx-Regular-lf-ot1.tfm
+2018/03/28 | 7764 | fonts/newtx/tfm/ntx-Regular-lf-scl-ly1.tfm
+2018/03/28 | 3164 | fonts/newtx/tfm/ntx-Regular-lf-scl-ot1.tfm
+2018/03/28 | 12272 | fonts/newtx/tfm/ntx-Regular-lf-scl-t1.tfm
+2018/03/28 | 7820 | fonts/newtx/tfm/ntx-Regular-lf-sc-ly1.tfm
+2018/03/28 | 3228 | fonts/newtx/tfm/ntx-Regular-lf-sc-ot1.tfm
+2018/03/28 | 12312 | fonts/newtx/tfm/ntx-Regular-lf-sc-t1.tfm
+2018/03/28 | 11360 | fonts/newtx/tfm/ntx-Regular-lf-t1.tfm
+2018/03/28 | 7284 | fonts/newtx/tfm/ntx-Regular-osf-ly1.tfm
+2018/03/28 | 3044 | fonts/newtx/tfm/ntx-Regular-osf-ot1.tfm
+2018/03/28 | 7760 | fonts/newtx/tfm/ntx-Regular-osf-scl-ly1.tfm
+2018/03/28 | 3160 | fonts/newtx/tfm/ntx-Regular-osf-scl-ot1.tfm
+2018/03/28 | 12268 | fonts/newtx/tfm/ntx-Regular-osf-scl-t1.tfm
+2018/03/28 | 7812 | fonts/newtx/tfm/ntx-Regular-osf-sc-ly1.tfm
+2018/03/28 | 3220 | fonts/newtx/tfm/ntx-Regular-osf-sc-ot1.tfm
+2018/03/28 | 12308 | fonts/newtx/tfm/ntx-Regular-osf-sc-t1.tfm
+2018/03/28 | 11356 | fonts/newtx/tfm/ntx-Regular-osf-t1.tfm
+2018/03/28 | 7256 | fonts/newtx/tfm/ntx-Regular-tlf-ly1.tfm
+2018/03/28 | 3012 | fonts/newtx/tfm/ntx-Regular-tlf-ot1.tfm
+2018/03/28 | 7732 | fonts/newtx/tfm/ntx-Regular-tlf-scl-ly1.tfm
+2018/03/28 | 3128 | fonts/newtx/tfm/ntx-Regular-tlf-scl-ot1.tfm
+2018/03/28 | 12240 | fonts/newtx/tfm/ntx-Regular-tlf-scl-t1.tfm
+2018/03/28 | 7784 | fonts/newtx/tfm/ntx-Regular-tlf-sc-ly1.tfm
+2018/03/28 | 3188 | fonts/newtx/tfm/ntx-Regular-tlf-sc-ot1.tfm
+2018/03/28 | 12280 | fonts/newtx/tfm/ntx-Regular-tlf-sc-t1.tfm
+2018/03/28 | 11328 | fonts/newtx/tfm/ntx-Regular-tlf-t1.tfm
+2018/03/28 | 7256 | fonts/newtx/tfm/ntx-Regular-tosf-ly1.tfm
+2018/03/28 | 3012 | fonts/newtx/tfm/ntx-Regular-tosf-ot1.tfm
+2018/03/28 | 7732 | fonts/newtx/tfm/ntx-Regular-tosf-scl-ly1.tfm
+2018/03/28 | 3128 | fonts/newtx/tfm/ntx-Regular-tosf-scl-ot1.tfm
+2018/03/28 | 12240 | fonts/newtx/tfm/ntx-Regular-tosf-scl-t1.tfm
+2018/03/28 | 7784 | fonts/newtx/tfm/ntx-Regular-tosf-sc-ly1.tfm
+2018/03/28 | 3188 | fonts/newtx/tfm/ntx-Regular-tosf-sc-ot1.tfm
+2018/03/28 | 12280 | fonts/newtx/tfm/ntx-Regular-tosf-sc-t1.tfm
+2018/03/28 | 11328 | fonts/newtx/tfm/ntx-Regular-tosf-t1.tfm
+2018/05/06 | 3044 | fonts/newtx/tfm/ntxstx2bmia.tfm
+2018/05/06 | 1944 | fonts/newtx/tfm/ntxstx2bmi.tfm
+2018/05/06 | 2936 | fonts/newtx/tfm/ntxstx2mia.tfm
+2018/05/06 | 1932 | fonts/newtx/tfm/ntxstx2mi.tfm
+2019/09/23 | 3980 | fonts/newtx/tfm/ntxsups-BoldItalic-ly1.tfm
+2019/09/23 | 3444 | fonts/newtx/tfm/ntxsups-BoldItalic-ot1.tfm
+2019/09/23 | 3928 | fonts/newtx/tfm/ntxsups-BoldItalic-t1.tfm
+2019/09/23 | 3744 | fonts/newtx/tfm/ntxsups-Bold-ly1.tfm
+2019/09/23 | 3212 | fonts/newtx/tfm/ntxsups-Bold-ot1.tfm
+2019/09/23 | 3688 | fonts/newtx/tfm/ntxsups-Bold-t1.tfm
+2019/09/23 | 4028 | fonts/newtx/tfm/ntxsups-Italic-ly1.tfm
+2019/09/23 | 3472 | fonts/newtx/tfm/ntxsups-Italic-ot1.tfm
+2019/09/23 | 3972 | fonts/newtx/tfm/ntxsups-Italic-t1.tfm
+2019/09/23 | 3780 | fonts/newtx/tfm/ntxsups-Regular-ly1.tfm
+2019/09/23 | 3264 | fonts/newtx/tfm/ntxsups-Regular-ot1.tfm
+2019/09/23 | 3720 | fonts/newtx/tfm/ntxsups-Regular-t1.tfm
+2019/09/25 | 2008 | fonts/newtx/tfm/ntxsy5.tfm
+2019/09/25 | 2000 | fonts/newtx/tfm/ntxsy7.tfm
+2015/02/13 | 712 | fonts/newtx/tfm/ntxsybalt.tfm
+2012/07/03 | 1000 | fonts/newtx/tfm/ntxsyc.tfm
+2019/08/04 | 1564 | fonts/newtx/tfm/ntxsym.tfm
+2015/02/13 | 728 | fonts/newtx/tfm/ntxsyralt.tfm
+2019/09/25 | 2012 | fonts/newtx/tfm/ntxsy.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi015.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi017.tfm
+2019/09/23 | 3348 | fonts/newtx/tfm/nxlbmi01.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi025.tfm
+2019/09/23 | 3300 | fonts/newtx/tfm/nxlbmi027.tfm
+2019/09/23 | 2564 | fonts/newtx/tfm/nxlbmi02.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi035.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi037.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi03.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi05.tfm
+2019/09/23 | 3300 | fonts/newtx/tfm/nxlbmi07.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi0.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi15.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/nxlbmi17.tfm
+2019/09/23 | 3348 | fonts/newtx/tfm/nxlbmi1.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi25.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi27.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi2.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi35.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi37.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi3.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi5.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi7.tfm
+2019/09/23 | 2508 | fonts/newtx/tfm/nxlbmia.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi.tfm
+2012/11/15 | 1600 | fonts/newtx/tfm/nxlbsy5.tfm
+2012/11/15 | 1600 | fonts/newtx/tfm/nxlbsy7.tfm
+2019/09/23 | 3316 | fonts/newtx/tfm/nxlmi015.tfm
+2019/09/23 | 3324 | fonts/newtx/tfm/nxlmi017.tfm
+2019/09/23 | 3288 | fonts/newtx/tfm/nxlmi01.tfm
+2019/09/23 | 3316 | fonts/newtx/tfm/nxlmi025.tfm
+2019/09/23 | 3328 | fonts/newtx/tfm/nxlmi027.tfm
+2019/09/23 | 3292 | fonts/newtx/tfm/nxlmi02.tfm
+2019/09/23 | 3316 | fonts/newtx/tfm/nxlmi035.tfm
+2019/09/23 | 3324 | fonts/newtx/tfm/nxlmi037.tfm
+2019/09/23 | 3292 | fonts/newtx/tfm/nxlmi03.tfm
+2019/09/23 | 3312 | fonts/newtx/tfm/nxlmi05.tfm
+2019/09/23 | 3324 | fonts/newtx/tfm/nxlmi07.tfm
+2019/09/23 | 3284 | fonts/newtx/tfm/nxlmi0.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/nxlmi15.tfm
+2019/09/23 | 3316 | fonts/newtx/tfm/nxlmi17.tfm
+2019/09/23 | 3284 | fonts/newtx/tfm/nxlmi1.tfm
+2019/09/23 | 3312 | fonts/newtx/tfm/nxlmi25.tfm
+2019/09/23 | 3324 | fonts/newtx/tfm/nxlmi27.tfm
+2019/09/23 | 3292 | fonts/newtx/tfm/nxlmi2.tfm
+2019/09/23 | 3312 | fonts/newtx/tfm/nxlmi35.tfm
+2019/09/23 | 3320 | fonts/newtx/tfm/nxlmi37.tfm
+2019/09/23 | 3292 | fonts/newtx/tfm/nxlmi3.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/nxlmi5.tfm
+2019/09/23 | 3320 | fonts/newtx/tfm/nxlmi7.tfm
+2019/09/23 | 2456 | fonts/newtx/tfm/nxlmia.tfm
+2019/09/23 | 3284 | fonts/newtx/tfm/nxlmi.tfm
+2012/11/15 | 1556 | fonts/newtx/tfm/nxlsy5.tfm
+2012/11/15 | 1556 | fonts/newtx/tfm/nxlsy7.tfm
+2015/02/13 | 880 | fonts/newtx/tfm/rfxlr-alt.tfm
+2015/02/13 | 1072 | fonts/newtx/tfm/rfxlri-alt.tfm
+2012/07/08 | 156 | fonts/newtx/tfm/rfxlri-vw5.tfm
+2012/07/08 | 156 | fonts/newtx/tfm/rfxlri-vw7.tfm
+2012/07/08 | 156 | fonts/newtx/tfm/rfxlri-vw.tfm
+2015/02/13 | 920 | fonts/newtx/tfm/rfxlz-alt.tfm
+2015/02/13 | 1072 | fonts/newtx/tfm/rfxlzi-alt.tfm
+2012/07/08 | 156 | fonts/newtx/tfm/rfxlzi-vw5.tfm
+2012/07/08 | 156 | fonts/newtx/tfm/rfxlzi-vw7.tfm
+2012/07/08 | 156 | fonts/newtx/tfm/rfxlzi-vw.tfm
+2013/02/12 | 752 | fonts/newtx/tfm/rntxbmi5.tfm
+2013/02/12 | 768 | fonts/newtx/tfm/rntxbmi7.tfm
+2013/02/12 | 628 | fonts/newtx/tfm/rntxbmi.tfm
2013/02/11 | 860 | fonts/newtx/tfm/rntxmi5.tfm
2013/02/11 | 896 | fonts/newtx/tfm/rntxmi7.tfm
2013/02/11 | 736 | fonts/newtx/tfm/rntxmi.tfm
2013/02/12 | 1088 | fonts/newtx/tfm/rtxbmi5-rev.tfm
-2013/02/11 | 1116 | fonts/newtx/tfm/rtxbmi5.tfm
+2019/06/17 | 1088 | fonts/newtx/tfm/rtxbmi5.tfm
2013/02/12 | 1096 | fonts/newtx/tfm/rtxbmi7-rev.tfm
-2013/02/11 | 1112 | fonts/newtx/tfm/rtxbmi7.tfm
-2012/04/22 | 992 | fonts/newtx/tfm/rtxbmio.tfm
+2019/06/17 | 1112 | fonts/newtx/tfm/rtxbmi7.tfm
+2012/04/23 | 992 | fonts/newtx/tfm/rtxbmio.tfm
2013/02/12 | 1048 | fonts/newtx/tfm/rtxbmi-rev.tfm
-2014/04/14 | 1028 | fonts/newtx/tfm/rtxbmi-ut.tfm
-2013/02/11 | 1108 | fonts/newtx/tfm/rtxmi5.tfm
-2013/02/11 | 1088 | fonts/newtx/tfm/rtxmi7.tfm
-2012/04/22 | 992 | fonts/newtx/tfm/rtxmio.tfm
-2014/04/14 | 1028 | fonts/newtx/tfm/rtxmi-ut.tfm
+2014/04/15 | 1028 | fonts/newtx/tfm/rtxbmi-ut.tfm
+2013/02/12 | 1108 | fonts/newtx/tfm/rtxmi5.tfm
+2013/02/12 | 1088 | fonts/newtx/tfm/rtxmi7.tfm
+2012/04/23 | 992 | fonts/newtx/tfm/rtxmio.tfm
+2014/04/15 | 1028 | fonts/newtx/tfm/rtxmi-ut.tfm
2018/04/27 | 1880 | fonts/newtx/tfm/stx2rm.tfm
+2019/08/27 | 1836 | fonts/newtx/tfm/stxscr.tfm
2017/02/11 | 864 | fonts/newtx/tfm/txbexas.tfm
-2017/02/10 | 872 | fonts/newtx/tfm/txbex-bar.tfm
+2019/06/17 | 888 | fonts/newtx/tfm/txbex-bar.tfm
2016/08/12 | 1544 | fonts/newtx/tfm/txbexs.tfm
-2018/04/17 | 1576 | fonts/newtx/tfm/txbmiaX.tfm
-2012/05/18 | 1156 | fonts/newtx/tfm/txbsy5.tfm
-2012/05/18 | 1160 | fonts/newtx/tfm/txbsy7.tfm
-2017/05/31 | 1660 | fonts/newtx/tfm/txbsys.tfm
-2017/02/11 | 1504 | fonts/newtx/tfm/txexas.tfm
-2017/02/10 | 872 | fonts/newtx/tfm/txex-bar.tfm
+2019/06/04 | 932 | fonts/newtx/tfm/txbmiaSTbb.tfm
+2019/09/12 | 1616 | fonts/newtx/tfm/txbmiaX.tfm
+2012/05/19 | 1156 | fonts/newtx/tfm/txbsy5.tfm
+2012/05/19 | 1160 | fonts/newtx/tfm/txbsy7.tfm
+2019/09/12 | 1616 | fonts/newtx/tfm/txbsys.tfm
+2019/06/17 | 816 | fonts/newtx/tfm/txexas.tfm
+2017/02/11 | 872 | fonts/newtx/tfm/txex-bar.tfm
2016/08/12 | 1552 | fonts/newtx/tfm/txexs.tfm
-2018/04/17 | 1628 | fonts/newtx/tfm/txmiaX.tfm
-2012/05/18 | 1172 | fonts/newtx/tfm/txsy5.tfm
-2012/05/18 | 1156 | fonts/newtx/tfm/txsy7.tfm
-2017/05/31 | 1640 | fonts/newtx/tfm/txsys.tfm
+2019/06/02 | 920 | fonts/newtx/tfm/txmiaSTbb.tfm
+2019/09/12 | 1616 | fonts/newtx/tfm/txmiaX.tfm
+2012/05/19 | 1172 | fonts/newtx/tfm/txsy5.tfm
+2012/05/19 | 1156 | fonts/newtx/tfm/txsy7.tfm
+2019/09/12 | 1580 | fonts/newtx/tfm/txsys.tfm
2012/06/22 | 156 | fonts/newtx/tfm/zmn-vw-b.tfm
2012/06/22 | 712 | fonts/newtx/tfm/zmn-vw-r.tfm
2017/10/24 | 1972 | fonts/newtx/tfm/zutbmi.tfm
2017/10/24 | 2900 | fonts/newtx/tfm/zutmi.tfm
2012/10/07 | 244 | fonts/newtx/tfm/zxlr-5nums.tfm
2012/10/07 | 240 | fonts/newtx/tfm/zxlr-7nums.tfm
-2012/10/06 | 1220 | fonts/newtx/tfm/zxlr-8r.tfm
-2012/11/13 | 228 | fonts/newtx/tfm/zxlr-caps.tfm
+2012/10/07 | 1220 | fonts/newtx/tfm/zxlr-8r.tfm
+2012/11/14 | 228 | fonts/newtx/tfm/zxlr-caps.tfm
2012/10/06 | 1328 | fonts/newtx/tfm/zxlri-8r.tfm
-2012/10/06 | 1220 | fonts/newtx/tfm/zxlz-8r.tfm
-2012/11/13 | 220 | fonts/newtx/tfm/zxlz-caps.tfm
+2012/10/07 | 1220 | fonts/newtx/tfm/zxlz-8r.tfm
+2012/11/14 | 220 | fonts/newtx/tfm/zxlz-caps.tfm
2012/10/06 | 1444 | fonts/newtx/tfm/zxlzi-8r.tfm
2014/12/29 | 75948 | fonts/newtxtt/doc/newtxtt-doc.pdf
2014/12/29 | 7695 | fonts/newtxtt/doc/newtxtt-doc.tex
@@ -72614,178 +72676,199 @@
2017/04/11 | 32374 | fonts/newtxtt/type1/newtxtt.pfb
2017/04/11 | 31117 | fonts/newtxtt/type1/newtxttsc.pfb
2017/05/22 | 337211 | fonts/newtxtt.zip
-2016/07/02 | 706601 | fonts/newtx/type1/fxlri-5letters.pfb
-2016/07/02 | 700591 | fonts/newtx/type1/fxlri-7letters.pfb
-2012/07/10 | 2872 | fonts/newtx/type1/fxlri-vw5.pfb
-2012/07/10 | 2890 | fonts/newtx/type1/fxlri-vw7.pfb
-2012/07/10 | 2889 | fonts/newtx/type1/fxlri-vw.pfb
-2016/07/02 | 51435 | fonts/newtx/type1/fxlzi-5letters.pfb
-2016/07/02 | 50588 | fonts/newtx/type1/fxlzi-7letters.pfb
-2012/05/19 | 7993 | fonts/newtx/type1/fxlzi-jv5.pfb
-2012/05/19 | 7988 | fonts/newtx/type1/fxlzi-jv7.pfb
-2012/05/19 | 7981 | fonts/newtx/type1/fxlzi-jv.pfb
-2012/07/10 | 2992 | fonts/newtx/type1/fxlzi-vw5.pfb
-2012/07/10 | 2988 | fonts/newtx/type1/fxlzi-vw7.pfb
-2012/07/10 | 2984 | fonts/newtx/type1/fxlzi-vw.pfb
-2012/10/05 | 2816 | fonts/newtx/type1/LibertineI-5nu.pfb
-2012/10/05 | 2815 | fonts/newtx/type1/LibertineI-7nu.pfb
-2012/10/05 | 2845 | fonts/newtx/type1/LibertineI-nu.pfb
-2012/10/05 | 2800 | fonts/newtx/type1/Libertine-nu.pfb
-2012/06/27 | 2897 | fonts/newtx/type1/LibertineTheta-Regular.pfb
-2012/10/05 | 2877 | fonts/newtx/type1/LibertineZI-5nu.pfb
-2012/10/05 | 2875 | fonts/newtx/type1/LibertineZI-7nu.pfb
-2012/10/05 | 2894 | fonts/newtx/type1/LibertineZI-nu.pfb
-2012/10/05 | 2880 | fonts/newtx/type1/LibertineZ-nu.pfb
+2016/07/03 | 706601 | fonts/newtx/type1/fxlri-5letters.pfb
+2016/07/03 | 700591 | fonts/newtx/type1/fxlri-7letters.pfb
+2012/07/11 | 2872 | fonts/newtx/type1/fxlri-vw5.pfb
+2012/07/11 | 2890 | fonts/newtx/type1/fxlri-vw7.pfb
+2012/07/11 | 2889 | fonts/newtx/type1/fxlri-vw.pfb
+2016/07/03 | 51435 | fonts/newtx/type1/fxlzi-5letters.pfb
+2016/07/03 | 50588 | fonts/newtx/type1/fxlzi-7letters.pfb
+2012/05/20 | 7993 | fonts/newtx/type1/fxlzi-jv5.pfb
+2012/05/20 | 7988 | fonts/newtx/type1/fxlzi-jv7.pfb
+2012/05/20 | 7981 | fonts/newtx/type1/fxlzi-jv.pfb
+2012/07/11 | 2992 | fonts/newtx/type1/fxlzi-vw5.pfb
+2012/07/11 | 2988 | fonts/newtx/type1/fxlzi-vw7.pfb
+2012/07/11 | 2984 | fonts/newtx/type1/fxlzi-vw.pfb
+2019/06/17 | 2832 | fonts/newtx/type1/LibertineI-5nu.pfb
+2012/10/06 | 2815 | fonts/newtx/type1/LibertineI-7nu.pfb
+2012/10/06 | 2845 | fonts/newtx/type1/LibertineI-nu.pfb
+2019/09/11 | 37371 | fonts/newtx/type1/LibertineMathBMI5.pfb
+2019/09/11 | 37561 | fonts/newtx/type1/LibertineMathBMI7.pfb
+2019/09/11 | 37297 | fonts/newtx/type1/LibertineMathBMI.pfb
+2019/09/12 | 30598 | fonts/newtx/type1/LibertineMathBRM.pfb
+2019/09/11 | 36138 | fonts/newtx/type1/LibertineMathMI5.pfb
+2019/09/11 | 37213 | fonts/newtx/type1/LibertineMathMI7.pfb
+2019/09/11 | 35829 | fonts/newtx/type1/LibertineMathMI.pfb
+2019/09/12 | 17941 | fonts/newtx/type1/LibertineMathRM.pfb
+2012/10/06 | 2800 | fonts/newtx/type1/Libertine-nu.pfb
+2012/06/28 | 2897 | fonts/newtx/type1/LibertineTheta-Regular.pfb
+2019/06/17 | 2893 | fonts/newtx/type1/LibertineZI-5nu.pfb
+2012/10/06 | 2875 | fonts/newtx/type1/LibertineZI-7nu.pfb
+2012/10/06 | 2894 | fonts/newtx/type1/LibertineZI-nu.pfb
+2012/10/06 | 2880 | fonts/newtx/type1/LibertineZ-nu.pfb
2013/10/12 | 40298 | fonts/newtx/type1/MinLibBolIta.pfb
2013/10/12 | 39595 | fonts/newtx/type1/MinLibBol.pfb
2013/10/12 | 36207 | fonts/newtx/type1/MinLibIta.pfb
2013/10/12 | 38885 | fonts/newtx/type1/MinLibReg.pfb
-2012/04/30 | 4520 | fonts/newtx/type1/ntxbexb.pfb
-2013/05/25 | 5905 | fonts/newtx/type1/ntxbexmods.pfb
-2012/04/30 | 3969 | fonts/newtx/type1/ntxexb.pfb
+2019/09/11 | 34370 | fonts/newtx/type1/NewTXBMI5.pfb
+2019/09/11 | 35381 | fonts/newtx/type1/NewTXBMI7.pfb
+2019/09/12 | 32676 | fonts/newtx/type1/NewTXBMI.pfb
+2019/09/11 | 36072 | fonts/newtx/type1/NewTXMI5.pfb
+2019/09/11 | 35027 | fonts/newtx/type1/NewTXMI7.pfb
+2019/09/12 | 32548 | fonts/newtx/type1/NewTXMI.pfb
+2012/05/01 | 4520 | fonts/newtx/type1/ntxbexb.pfb
+2013/05/26 | 5905 | fonts/newtx/type1/ntxbexmods.pfb
+2012/05/01 | 3969 | fonts/newtx/type1/ntxexb.pfb
2013/05/25 | 5544 | fonts/newtx/type1/ntxexmods.pfb
-2015/01/31 | 19346 | fonts/newtx/type1/ntxsups-BoldItalic.pfb
-2015/01/31 | 20150 | fonts/newtx/type1/ntxsups-Bold.pfb
-2015/01/31 | 18855 | fonts/newtx/type1/ntxsups-Italic.pfb
-2015/01/31 | 18384 | fonts/newtx/type1/ntxsups-Regular.pfb
-2015/02/10 | 6831 | fonts/newtx/type1/ntxsybalt.pfb
-2015/02/10 | 6960 | fonts/newtx/type1/ntxsyralt.pfb
-2015/01/31 | 178202 | fonts/newtx/type1/ntxtmbi.pfb
-2015/01/31 | 189458 | fonts/newtx/type1/ntxtmb.pfb
-2016/01/31 | 168551 | fonts/newtx/type1/ntxtmri.pfb
-2015/01/31 | 184042 | fonts/newtx/type1/ntxtmr.pfb
-2013/02/11 | 14028 | fonts/newtx/type1/rntxbmi5.pfb
-2013/02/11 | 14634 | fonts/newtx/type1/rntxbmi7.pfb
-2013/02/11 | 14162 | fonts/newtx/type1/rntxbmi.pfb
+2019/09/01 | 22351 | fonts/newtx/type1/ntxsups-BoldItalic.pfb
+2019/09/01 | 21590 | fonts/newtx/type1/ntxsups-Bold.pfb
+2019/09/01 | 21872 | fonts/newtx/type1/ntxsups-Italic.pfb
+2019/09/01 | 21387 | fonts/newtx/type1/ntxsups-Regular.pfb
+2015/02/11 | 6831 | fonts/newtx/type1/ntxsybalt.pfb
+2015/02/11 | 6960 | fonts/newtx/type1/ntxsyralt.pfb
+2015/02/01 | 178202 | fonts/newtx/type1/ntxtmbi.pfb
+2015/02/01 | 189458 | fonts/newtx/type1/ntxtmb.pfb
+2016/02/01 | 168551 | fonts/newtx/type1/ntxtmri.pfb
+2015/02/01 | 184042 | fonts/newtx/type1/ntxtmr.pfb
+2013/02/12 | 14028 | fonts/newtx/type1/rntxbmi5.pfb
+2013/02/12 | 14634 | fonts/newtx/type1/rntxbmi7.pfb
+2013/02/12 | 14162 | fonts/newtx/type1/rntxbmi.pfb
2013/02/11 | 16585 | fonts/newtx/type1/rntxmi5.pfb
2013/02/11 | 15929 | fonts/newtx/type1/rntxmi7.pfb
2013/02/11 | 15631 | fonts/newtx/type1/rntxmi.pfb
-2015/07/03 | 16888 | fonts/newtx/type1/rtxbmi5.pfb
-2015/07/02 | 16448 | fonts/newtx/type1/rtxbmi5-rev.pfb
-2015/07/03 | 16949 | fonts/newtx/type1/rtxbmi7.pfb
-2015/07/02 | 16952 | fonts/newtx/type1/rtxbmi7-rev.pfb
-2015/07/02 | 14313 | fonts/newtx/type1/rtxbmi-rev.pfb
-2013/02/11 | 21290 | fonts/newtx/type1/rtxmi5.pfb
-2013/02/11 | 20809 | fonts/newtx/type1/rtxmi7.pfb
-2017/02/10 | 24222 | fonts/newtx/type1/txbexas.pfb
-2017/02/10 | 12726 | fonts/newtx/type1/txbex-bar.pfb
+2018/10/20 | 16901 | fonts/newtx/type1/rtxbmi5.pfb
+2015/07/03 | 16448 | fonts/newtx/type1/rtxbmi5-rev.pfb
+2018/10/20 | 17279 | fonts/newtx/type1/rtxbmi7.pfb
+2015/07/03 | 16952 | fonts/newtx/type1/rtxbmi7-rev.pfb
+2015/07/03 | 14313 | fonts/newtx/type1/rtxbmi-rev.pfb
+2013/02/12 | 21290 | fonts/newtx/type1/rtxmi5.pfb
+2013/02/12 | 20809 | fonts/newtx/type1/rtxmi7.pfb
+2019/08/27 | 77528 | fonts/newtx/type1/stxscr.pfb
+2017/02/11 | 24222 | fonts/newtx/type1/txbexas.pfb
+2019/06/17 | 12805 | fonts/newtx/type1/txbex-bar.pfb
2016/08/08 | 36674 | fonts/newtx/type1/txbexs.pfb
-2018/04/17 | 35168 | fonts/newtx/type1/txbmiaX.pfb
-2015/07/03 | 28828 | fonts/newtx/type1/txbsy5.pfb
-2015/07/03 | 28622 | fonts/newtx/type1/txbsy7.pfb
-2017/05/31 | 44487 | fonts/newtx/type1/txbsys.pfb
-2017/02/10 | 23808 | fonts/newtx/type1/txexas.pfb
-2017/02/10 | 12648 | fonts/newtx/type1/txex-bar.pfb
-2016/08/08 | 33353 | fonts/newtx/type1/txexs.pfb
-2018/04/17 | 36503 | fonts/newtx/type1/txmiaX.pfb
-2012/05/15 | 29142 | fonts/newtx/type1/txsy5.pfb
-2012/05/14 | 29124 | fonts/newtx/type1/txsy7.pfb
-2017/05/31 | 43662 | fonts/newtx/type1/txsys.pfb
+2019/06/03 | 15466 | fonts/newtx/type1/txbmiaSTbb.pfb
+2019/09/11 | 35119 | fonts/newtx/type1/txbmiaX.pfb
+2015/07/04 | 28828 | fonts/newtx/type1/txbsy5.pfb
+2015/07/04 | 28622 | fonts/newtx/type1/txbsy7.pfb
+2019/09/12 | 41353 | fonts/newtx/type1/txbsys.pfb
+2019/08/25 | 23767 | fonts/newtx/type1/txexas.pfb
+2017/02/11 | 12648 | fonts/newtx/type1/txex-bar.pfb
+2016/08/09 | 33353 | fonts/newtx/type1/txexs.pfb
+2019/06/02 | 15249 | fonts/newtx/type1/txmiaSTbb.pfb
+2019/09/11 | 42829 | fonts/newtx/type1/txmiaX.pfb
+2012/05/16 | 29142 | fonts/newtx/type1/txsy5.pfb
+2012/05/15 | 29124 | fonts/newtx/type1/txsy7.pfb
+2019/09/12 | 40320 | fonts/newtx/type1/txsys.pfb
+2019/09/24 | 32504 | fonts/newtx/type1/XCharterMathBMI.pfb
+2019/09/24 | 24974 | fonts/newtx/type1/XCharterMathBRM.pfb
+2019/09/24 | 31870 | fonts/newtx/type1/XCharterMathMI.pfb
+2019/09/24 | 14856 | fonts/newtx/type1/XCharterMathRM.pfb
2012/06/22 | 2946 | fonts/newtx/type1/zmn-vw-b.pfb
2012/06/22 | 3085 | fonts/newtx/type1/zmn-vw-r.pfb
2012/10/07 | 9120 | fonts/newtx/type1/zxlr-5nums.pfb
2012/10/07 | 9095 | fonts/newtx/type1/zxlr-7nums.pfb
-2016/07/02 | 40013 | fonts/newtx/type1/zxlri.pfb
-2016/07/02 | 45761 | fonts/newtx/type1/zxlr.pfb
-2016/07/02 | 48600 | fonts/newtx/type1/zxlzi.pfb
-2016/07/02 | 51381 | fonts/newtx/type1/zxlz.pfb
+2016/07/03 | 40013 | fonts/newtx/type1/zxlri.pfb
+2016/07/03 | 45761 | fonts/newtx/type1/zxlr.pfb
+2016/07/03 | 48600 | fonts/newtx/type1/zxlzi.pfb
+2016/07/03 | 51381 | fonts/newtx/type1/zxlz.pfb
2017/02/11 | 580 | fonts/newtx/vf/ntxbexa.vf
-2013/05/25 | 1072 | fonts/newtx/vf/ntxbex.vf
-2016/08/12 | 1620 | fonts/newtx/vf/ntxbexx.vf
-2018/05/14 | 2144 | fonts/newtx/vf/ntxbmi05.vf
-2018/05/14 | 1648 | fonts/newtx/vf/ntxbmi07.vf
-2018/05/14 | 1580 | fonts/newtx/vf/ntxbmi0.vf
-2018/05/14 | 2172 | fonts/newtx/vf/ntxbmi15.vf
-2018/05/14 | 1672 | fonts/newtx/vf/ntxbmi17.vf
-2018/05/14 | 1600 | fonts/newtx/vf/ntxbmi1.vf
-2013/02/13 | 1632 | fonts/newtx/vf/ntxbmi1x.vf
-2018/05/14 | 2144 | fonts/newtx/vf/ntxbmi5.vf
-2018/05/14 | 1652 | fonts/newtx/vf/ntxbmi7.vf
-2017/11/23 | 2200 | fonts/newtx/vf/ntxbmia.vf
-2018/05/14 | 1580 | fonts/newtx/vf/ntxbmi.vf
-2017/05/31 | 1580 | fonts/newtx/vf/ntxbsy5.vf
-2017/05/31 | 1740 | fonts/newtx/vf/ntxbsy7.vf
-2012/07/02 | 1436 | fonts/newtx/vf/ntxbsyc.vf
-2018/05/14 | 1988 | fonts/newtx/vf/ntxbsym.vf
-2017/05/31 | 1580 | fonts/newtx/vf/ntxbsy.vf
+2013/05/26 | 1072 | fonts/newtx/vf/ntxbex.vf
+2019/08/07 | 1620 | fonts/newtx/vf/ntxbexx.vf
+2019/09/23 | 1828 | fonts/newtx/vf/ntxbmi05.vf
+2019/09/23 | 2704 | fonts/newtx/vf/ntxbmi07.vf
+2019/09/23 | 2740 | fonts/newtx/vf/ntxbmi0.vf
+2019/09/23 | 2708 | fonts/newtx/vf/ntxbmi15.vf
+2019/09/23 | 2708 | fonts/newtx/vf/ntxbmi17.vf
+2019/09/23 | 2740 | fonts/newtx/vf/ntxbmi1.vf
+2013/02/14 | 1632 | fonts/newtx/vf/ntxbmi1x.vf
+2019/09/23 | 2700 | fonts/newtx/vf/ntxbmi5.vf
+2019/09/23 | 2700 | fonts/newtx/vf/ntxbmi7.vf
+2019/09/23 | 1780 | fonts/newtx/vf/ntxbmia.vf
+2019/09/23 | 2744 | fonts/newtx/vf/ntxbmi.vf
+2019/09/25 | 1692 | fonts/newtx/vf/ntxbsy5.vf
+2019/09/25 | 1856 | fonts/newtx/vf/ntxbsy7.vf
+2012/07/03 | 1436 | fonts/newtx/vf/ntxbsyc.vf
+2019/08/04 | 2008 | fonts/newtx/vf/ntxbsym.vf
+2019/09/25 | 1692 | fonts/newtx/vf/ntxbsy.vf
2017/02/11 | 576 | fonts/newtx/vf/ntxexa.vf
-2016/08/12 | 1648 | fonts/newtx/vf/ntxexx.vf
-2018/05/14 | 2040 | fonts/newtx/vf/ntxmi05.vf
-2018/05/14 | 1544 | fonts/newtx/vf/ntxmi07.vf
-2018/05/14 | 1480 | fonts/newtx/vf/ntxmi0.vf
-2018/05/14 | 2064 | fonts/newtx/vf/ntxmi15.vf
-2018/05/14 | 1564 | fonts/newtx/vf/ntxmi17.vf
-2018/05/14 | 1484 | fonts/newtx/vf/ntxmi1.vf
-2018/05/14 | 2044 | fonts/newtx/vf/ntxmi5.vf
-2018/05/14 | 1544 | fonts/newtx/vf/ntxmi7.vf
-2017/11/23 | 2204 | fonts/newtx/vf/ntxmia.vf
-2018/05/14 | 1476 | fonts/newtx/vf/ntxmi.vf
-2018/05/05 | 1840 | fonts/newtx/vf/ntxstx2bmia.vf
-2018/05/05 | 1032 | fonts/newtx/vf/ntxstx2bmi.vf
-2018/05/05 | 1748 | fonts/newtx/vf/ntxstx2mia.vf
-2018/05/05 | 964 | fonts/newtx/vf/ntxstx2mi.vf
-2017/05/31 | 1644 | fonts/newtx/vf/ntxsy5.vf
-2017/05/31 | 1764 | fonts/newtx/vf/ntxsy7.vf
-2012/07/02 | 1436 | fonts/newtx/vf/ntxsyc.vf
-2018/05/14 | 1984 | fonts/newtx/vf/ntxsym.vf
-2017/05/31 | 1648 | fonts/newtx/vf/ntxsy.vf
-2014/11/11 | 1836 | fonts/newtx/vf/nxlbmi015.vf
-2014/11/11 | 1856 | fonts/newtx/vf/nxlbmi017.vf
-2014/11/11 | 1836 | fonts/newtx/vf/nxlbmi01.vf
-2018/05/30 | 1836 | fonts/newtx/vf/nxlbmi025.vf
-2018/05/30 | 1860 | fonts/newtx/vf/nxlbmi027.vf
-2018/05/30 | 1824 | fonts/newtx/vf/nxlbmi02.vf
-2014/11/11 | 1872 | fonts/newtx/vf/nxlbmi035.vf
-2014/11/11 | 1896 | fonts/newtx/vf/nxlbmi037.vf
-2014/11/11 | 1872 | fonts/newtx/vf/nxlbmi03.vf
-2018/05/30 | 1800 | fonts/newtx/vf/nxlbmi05.vf
-2018/05/30 | 1824 | fonts/newtx/vf/nxlbmi07.vf
-2018/05/30 | 1796 | fonts/newtx/vf/nxlbmi0.vf
-2014/11/11 | 1832 | fonts/newtx/vf/nxlbmi15.vf
-2014/11/11 | 1856 | fonts/newtx/vf/nxlbmi17.vf
-2014/11/11 | 1832 | fonts/newtx/vf/nxlbmi1.vf
-2018/05/30 | 1828 | fonts/newtx/vf/nxlbmi25.vf
-2018/05/30 | 1852 | fonts/newtx/vf/nxlbmi27.vf
-2018/05/30 | 1828 | fonts/newtx/vf/nxlbmi2.vf
-2014/11/11 | 1872 | fonts/newtx/vf/nxlbmi35.vf
-2014/11/11 | 1896 | fonts/newtx/vf/nxlbmi37.vf
-2014/11/11 | 1872 | fonts/newtx/vf/nxlbmi3.vf
-2018/05/30 | 1792 | fonts/newtx/vf/nxlbmi5.vf
-2018/05/30 | 1812 | fonts/newtx/vf/nxlbmi7.vf
-2015/02/12 | 2048 | fonts/newtx/vf/nxlbmia.vf
-2018/05/30 | 1788 | fonts/newtx/vf/nxlbmi.vf
-2012/11/14 | 1176 | fonts/newtx/vf/nxlbsy5.vf
-2012/11/14 | 1176 | fonts/newtx/vf/nxlbsy7.vf
-2014/11/11 | 1876 | fonts/newtx/vf/nxlmi015.vf
-2014/11/11 | 1900 | fonts/newtx/vf/nxlmi017.vf
-2014/11/11 | 1868 | fonts/newtx/vf/nxlmi01.vf
-2018/05/30 | 1872 | fonts/newtx/vf/nxlmi025.vf
-2018/05/30 | 1896 | fonts/newtx/vf/nxlmi027.vf
-2018/05/30 | 1828 | fonts/newtx/vf/nxlmi02.vf
-2014/11/11 | 1916 | fonts/newtx/vf/nxlmi035.vf
-2014/11/11 | 1924 | fonts/newtx/vf/nxlmi037.vf
-2014/11/11 | 1908 | fonts/newtx/vf/nxlmi03.vf
-2018/05/30 | 1832 | fonts/newtx/vf/nxlmi05.vf
-2018/05/30 | 1856 | fonts/newtx/vf/nxlmi07.vf
-2018/05/30 | 1788 | fonts/newtx/vf/nxlmi0.vf
-2014/11/11 | 1868 | fonts/newtx/vf/nxlmi15.vf
-2014/11/11 | 1892 | fonts/newtx/vf/nxlmi17.vf
-2014/11/11 | 1864 | fonts/newtx/vf/nxlmi1.vf
-2018/05/30 | 1872 | fonts/newtx/vf/nxlmi25.vf
-2018/05/30 | 1892 | fonts/newtx/vf/nxlmi27.vf
-2018/05/30 | 1824 | fonts/newtx/vf/nxlmi2.vf
-2014/11/11 | 1908 | fonts/newtx/vf/nxlmi35.vf
-2014/11/11 | 1916 | fonts/newtx/vf/nxlmi37.vf
-2014/11/11 | 1900 | fonts/newtx/vf/nxlmi3.vf
-2018/05/30 | 1824 | fonts/newtx/vf/nxlmi5.vf
-2018/05/30 | 1848 | fonts/newtx/vf/nxlmi7.vf
-2015/02/12 | 2436 | fonts/newtx/vf/nxlmia.vf
-2018/05/30 | 1780 | fonts/newtx/vf/nxlmi.vf
-2012/11/14 | 1184 | fonts/newtx/vf/nxlsy5.vf
-2012/11/14 | 1184 | fonts/newtx/vf/nxlsy7.vf
+2019/08/07 | 1648 | fonts/newtx/vf/ntxexx.vf
+2019/09/23 | 2584 | fonts/newtx/vf/ntxmi05.vf
+2019/09/23 | 2584 | fonts/newtx/vf/ntxmi07.vf
+2019/09/23 | 2600 | fonts/newtx/vf/ntxmi0.vf
+2019/09/23 | 2588 | fonts/newtx/vf/ntxmi15.vf
+2019/09/23 | 2588 | fonts/newtx/vf/ntxmi17.vf
+2019/09/23 | 2600 | fonts/newtx/vf/ntxmi1.vf
+2019/09/23 | 2576 | fonts/newtx/vf/ntxmi5.vf
+2019/09/23 | 2576 | fonts/newtx/vf/ntxmi7.vf
+2019/09/23 | 1868 | fonts/newtx/vf/ntxmia.vf
+2019/09/23 | 2608 | fonts/newtx/vf/ntxmi.vf
+2018/05/06 | 1840 | fonts/newtx/vf/ntxstx2bmia.vf
+2018/05/06 | 1032 | fonts/newtx/vf/ntxstx2bmi.vf
+2018/05/06 | 1748 | fonts/newtx/vf/ntxstx2mia.vf
+2018/05/06 | 964 | fonts/newtx/vf/ntxstx2mi.vf
+2019/09/25 | 1756 | fonts/newtx/vf/ntxsy5.vf
+2019/09/25 | 1872 | fonts/newtx/vf/ntxsy7.vf
+2012/07/03 | 1436 | fonts/newtx/vf/ntxsyc.vf
+2019/08/04 | 2004 | fonts/newtx/vf/ntxsym.vf
+2019/09/25 | 1756 | fonts/newtx/vf/ntxsy.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi015.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi017.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi01.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi025.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi027.vf
+2019/09/23 | 1620 | fonts/newtx/vf/nxlbmi02.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi035.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi037.vf
+2019/09/23 | 2736 | fonts/newtx/vf/nxlbmi03.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi05.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi07.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi0.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi15.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi17.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlbmi1.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi25.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi27.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi2.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi35.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi37.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi3.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi5.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi7.vf
+2019/09/23 | 1904 | fonts/newtx/vf/nxlbmia.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlbmi.vf
+2012/11/15 | 1176 | fonts/newtx/vf/nxlbsy5.vf
+2012/11/15 | 1176 | fonts/newtx/vf/nxlbsy7.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi015.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi017.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi01.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi025.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi027.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi02.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi035.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi037.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi03.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi05.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi07.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi0.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi15.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi17.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi1.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi25.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi27.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi2.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi35.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi37.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi3.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi5.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi7.vf
+2019/09/23 | 1968 | fonts/newtx/vf/nxlmia.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi.vf
+2012/11/15 | 1184 | fonts/newtx/vf/nxlsy5.vf
+2012/11/15 | 1184 | fonts/newtx/vf/nxlsy7.vf
2017/10/24 | 1508 | fonts/newtx/vf/zutbmi.vf
2017/10/24 | 1512 | fonts/newtx/vf/zutmi.vf
-2018/05/31 | 5741310 | fonts/newtx.zip
+2019/09/29 | 6747349 | fonts/newtx.zip
2005/10/24 | 6224 | fonts/niceframe/afm/bbding10.afm
2005/10/24 | 2299 | fonts/niceframe/afm/dingbat.afm
2005/10/24 | 9099 | fonts/niceframe/afm/karta15.afm
@@ -120216,18 +120299,18 @@
2019/08/05 | 252092 | fonts/xcharter/afm/XCharter-BoldItalic.afm
2019/08/06 | 249030 | fonts/xcharter/afm/XCharter-BoldSlanted.afm
2019/08/05 | 243051 | fonts/xcharter/afm/XCharter-Italic.afm
-2019/05/31 | 6329 | fonts/xcharter/afm/XCharterMathBMI.afm
-2019/06/06 | 6227 | fonts/xcharter/afm/XCharterMathBRM.afm
-2019/05/31 | 6318 | fonts/xcharter/afm/XCharterMathMI.afm
-2019/06/06 | 3810 | fonts/xcharter/afm/XCharterMathRM.afm
+2019/09/20 | 8312 | fonts/xcharter/afm/XCharterMathBMI.afm
+2019/09/20 | 6029 | fonts/xcharter/afm/XCharterMathBRM.afm
+2019/09/20 | 8339 | fonts/xcharter/afm/XCharterMathMI.afm
+2019/09/19 | 3761 | fonts/xcharter/afm/XCharterMathRM.afm
2019/08/18 | 268307 | fonts/xcharter/afm/XCharter-Roman.afm
2019/08/05 | 255038 | fonts/xcharter/afm/XCharter-Slanted.afm
2018/06/02 | 3719 | fonts/xcharter/doc/altone.py
2019/06/04 | 18419 | fonts/xcharter/doc/newgermanfxch-crop.pdf
2019/06/04 | 17633 | fonts/xcharter/doc/newgermanfxch.pdf
2019/06/04 | 4688 | fonts/xcharter/doc/newgermanfxch.tex
-2019/08/01 | 364380 | fonts/xcharter/doc/xcharter-doc.pdf
-2019/08/01 | 18832 | fonts/xcharter/doc/xcharter-doc.tex
+2019/09/28 | 697142 | fonts/xcharter/doc/xcharter-doc.pdf
+2019/09/28 | 19759 | fonts/xcharter/doc/xcharter-doc.tex
2014/11/04 | 2276 | fonts/xcharter/enc/chalph.enc
2014/11/04 | 2667 | fonts/xcharter/enc/chtabosf.enc
2019/08/18 | 3931 | fonts/xcharter/enc/xch1_3v4tq3.enc
@@ -120318,14 +120401,14 @@
2019/08/18 | 3330 | fonts/xcharter/enc/xch_yrgi2d.enc
2019/08/18 | 3655 | fonts/xcharter/enc/xch_yz7cd7.enc
2019/08/18 | 3501 | fonts/xcharter/enc/xch_zwwfce.enc
-2019/08/18 | 40352 | fonts/xcharter/map/XCharter.map
+2019/09/24 | 40353 | fonts/xcharter/map/XCharter.map
2019/08/05 | 111956 | fonts/xcharter/opentype/XCharter-BoldItalic.otf
2019/08/05 | 123956 | fonts/xcharter/opentype/XCharter-Bold.otf
2019/08/06 | 124388 | fonts/xcharter/opentype/XCharter-BoldSlanted.otf
2019/08/05 | 110504 | fonts/xcharter/opentype/XCharter-Italic.otf
2019/08/18 | 120776 | fonts/xcharter/opentype/XCharter-Roman.otf
2019/08/05 | 122296 | fonts/xcharter/opentype/XCharter-Slanted.otf
-2019/08/18 | 9255 | fonts/xcharter/README
+2019/09/28 | 9548 | fonts/xcharter/README
2017/06/27 | 1248 | fonts/xcharter/tex/LY1XCharter-Dnom.fd
2017/06/27 | 1226 | fonts/xcharter/tex/LY1XCharter-Inf.fd
2017/06/27 | 1247 | fonts/xcharter/tex/LY1XCharter-Numr.fd
@@ -120358,6 +120441,7 @@
2017/06/27 | 1247 | fonts/xcharter/tex/TS1XCharter-TOsF.fd
2017/06/16 | 311 | fonts/xcharter/tex/XCharter.fontspec
2018/06/02 | 5273 | fonts/xcharter/tex/XCharter.sty
+2019/09/21 | 150 | fonts/xcharter/tex/xcharter.subs
2019/08/18 | 1836 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-ly1--base.tfm
2019/08/18 | 25408 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-ly1.tfm
2019/08/18 | 6832 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-ot1.tfm
@@ -120726,10 +120810,10 @@
2019/08/18 | 8176 | fonts/xcharter/tfm/XCharter-Italic-tosf-t2a.tfm
2019/08/18 | 1424 | fonts/xcharter/tfm/XCharter-Italic-tosf-ts1--base.tfm
2019/08/18 | 1460 | fonts/xcharter/tfm/XCharter-Italic-tosf-ts1.tfm
-2019/06/05 | 1256 | fonts/xcharter/tfm/XCharterMathBMI.tfm
-2019/06/06 | 1188 | fonts/xcharter/tfm/XCharterMathBRM.tfm
-2019/06/05 | 1260 | fonts/xcharter/tfm/XCharterMathMI.tfm
-2019/06/06 | 752 | fonts/xcharter/tfm/XCharterMathRM.tfm
+2019/09/24 | 1528 | fonts/xcharter/tfm/XCharterMathBMI.tfm
+2019/09/24 | 1164 | fonts/xcharter/tfm/XCharterMathBRM.tfm
+2019/09/24 | 1536 | fonts/xcharter/tfm/XCharterMathMI.tfm
+2019/09/24 | 752 | fonts/xcharter/tfm/XCharterMathRM.tfm
2014/11/04 | 284 | fonts/xcharter/tfm/XCharter-osf.tfm
2019/08/18 | 1700 | fonts/xcharter/tfm/XCharter-Roman-dnom-ly1--base.tfm
2019/08/18 | 1704 | fonts/xcharter/tfm/XCharter-Roman-dnom-ly1.tfm
@@ -120856,20 +120940,20 @@
2019/08/18 | 8284 | fonts/xcharter/tfm/XCharter-Slanted-tosf-t2a.tfm
2019/08/18 | 1540 | fonts/xcharter/tfm/XCharter-Slanted-tosf-ts1--base.tfm
2019/08/18 | 1572 | fonts/xcharter/tfm/XCharter-Slanted-tosf-ts1.tfm
-2018/04/11 | 1852 | fonts/xcharter/tfm/zchbmi0.tfm
-2018/04/11 | 2120 | fonts/xcharter/tfm/zchbmia.tfm
-2018/04/11 | 1860 | fonts/xcharter/tfm/zchbmi.tfm
-2018/04/11 | 2812 | fonts/xcharter/tfm/zchmi0.tfm
-2018/04/11 | 2076 | fonts/xcharter/tfm/zchmia.tfm
-2018/04/11 | 2820 | fonts/xcharter/tfm/zchmi.tfm
+2019/09/24 | 3252 | fonts/xcharter/tfm/zchbmi0.tfm
+2019/09/24 | 2224 | fonts/xcharter/tfm/zchbmia.tfm
+2019/09/24 | 3256 | fonts/xcharter/tfm/zchbmi.tfm
+2019/09/24 | 3248 | fonts/xcharter/tfm/zchmi0.tfm
+2019/09/24 | 2348 | fonts/xcharter/tfm/zchmia.tfm
+2019/09/24 | 3248 | fonts/xcharter/tfm/zchmi.tfm
2019/08/05 | 182522 | fonts/xcharter/type1/XCharter-BoldItalic.pfb
2019/08/05 | 216320 | fonts/xcharter/type1/XCharter-Bold.pfb
2019/08/06 | 205095 | fonts/xcharter/type1/XCharter-BoldSlanted.pfb
2019/08/05 | 182125 | fonts/xcharter/type1/XCharter-Italic.pfb
-2019/05/31 | 27142 | fonts/xcharter/type1/XCharterMathBMI.pfb
-2019/06/06 | 25329 | fonts/xcharter/type1/XCharterMathBRM.pfb
-2019/05/31 | 26378 | fonts/xcharter/type1/XCharterMathMI.pfb
-2019/06/06 | 14935 | fonts/xcharter/type1/XCharterMathRM.pfb
+2019/09/20 | 32504 | fonts/xcharter/type1/XCharterMathBMI.pfb
+2019/09/20 | 24974 | fonts/xcharter/type1/XCharterMathBRM.pfb
+2019/09/20 | 31870 | fonts/xcharter/type1/XCharterMathMI.pfb
+2019/09/19 | 14856 | fonts/xcharter/type1/XCharterMathRM.pfb
2019/08/18 | 199097 | fonts/xcharter/type1/XCharter-Roman.pfb
2019/08/05 | 192906 | fonts/xcharter/type1/XCharter-Slanted.pfb
2019/08/18 | 1880 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-ly1.vf
@@ -121092,13 +121176,13 @@
2019/08/18 | 1736 | fonts/xcharter/vf/XCharter-Slanted-tosf-t1.vf
2019/08/18 | 1544 | fonts/xcharter/vf/XCharter-Slanted-tosf-t2asrb.vf
2019/08/18 | 616 | fonts/xcharter/vf/XCharter-Slanted-tosf-ts1.vf
-2018/04/11 | 1272 | fonts/xcharter/vf/zchbmi0.vf
-2018/04/11 | 1912 | fonts/xcharter/vf/zchbmia.vf
-2018/04/11 | 1272 | fonts/xcharter/vf/zchbmi.vf
-2018/04/11 | 1228 | fonts/xcharter/vf/zchmi0.vf
-2018/04/11 | 1868 | fonts/xcharter/vf/zchmia.vf
-2018/04/11 | 1228 | fonts/xcharter/vf/zchmi.vf
-2019/08/18 | 4258733 | fonts/xcharter.zip
+2019/09/24 | 2448 | fonts/xcharter/vf/zchbmi0.vf
+2019/09/24 | 1832 | fonts/xcharter/vf/zchbmia.vf
+2019/09/24 | 2448 | fonts/xcharter/vf/zchbmi.vf
+2019/09/24 | 2356 | fonts/xcharter/vf/zchmi0.vf
+2019/09/24 | 2060 | fonts/xcharter/vf/zchmia.vf
+2019/09/24 | 2356 | fonts/xcharter/vf/zchmi.vf
+2019/09/29 | 4354020 | fonts/xcharter.zip
2019/09/07 | 9349 | fonts/xits/FONTLOG.txt
2019/09/07 | 5279 | fonts/xits/OFL.txt
2019/09/07 | 1165 | fonts/xits/README.txt
@@ -121341,932 +121425,924 @@
2012/11/17 | 1096 | graphics/AddTeX2Eps/default.tex
2006/04/17 | 836 | graphics/AddTeX2Eps/readme.txt
2012/11/17 | 5620 | graphics/AddTeX2Eps.zip
-2019/08/21 | 472 | graphics/asymptote/absyn.cc
-2019/08/21 | 1030 | graphics/asymptote/absyn.h
-2019/08/21 | 3309 | graphics/asymptote/access.cc
-2019/08/21 | 2976 | graphics/asymptote/access.h
-2019/08/21 | 35186 | graphics/asymptote/algebra3.cc
-2019/08/21 | 19523 | graphics/asymptote/algebra3.h
-2019/08/21 | 2278 | graphics/asymptote/align.h
-2019/08/21 | 829 | graphics/asymptote/angle.h
-2019/08/21 | 18534 | graphics/asymptote/application.cc
-2019/08/21 | 9094 | graphics/asymptote/application.h
-2019/08/21 | 5658 | graphics/asymptote/arcball.cc
-2019/08/21 | 3349 | graphics/asymptote/arcball.h
-2019/08/21 | 4624 | graphics/asymptote/array.cc
-2019/08/21 | 1951 | graphics/asymptote/array.h
-2019/08/21 | 14023 | graphics/asymptote/arrayop.h
-2019/08/21 | 11516 | graphics/asymptote/aspy.py
-2019/08/21 | 4286 | graphics/asymptote/asy.ico
-2019/08/21 | 17705 | graphics/asymptote/asy-keywords.el
-2019/08/21 | 205228 | graphics/asymptote/asy.list
-2019/08/21 | 1612 | graphics/asymptote/asy-list.pl
-2019/08/21 | 6300 | graphics/asymptote/asymptote.nsi
-2019/08/21 | 2961 | graphics/asymptote/asymptote.spec
-2019/08/21 | 770 | graphics/asymptote/asy.rc
-2019/08/21 | 34 | graphics/asymptote/autogen.sh
-2019/08/21 | 12534 | graphics/asymptote/ax_pthread.m4
-2019/08/21 | 42 | graphics/asymptote/base/animate.asy
-2019/08/21 | 5222 | graphics/asymptote/base/animation.asy
-2019/08/21 | 578 | graphics/asymptote/base/annotate.asy
-2019/08/21 | 99 | graphics/asymptote/base/asy_filetype.vim
-2019/08/21 | 268 | graphics/asymptote/base/asy-init.el
-2019/08/21 | 8243 | graphics/asymptote/base/asy-kate.sh
-2019/08/21 | 71223 | graphics/asymptote/base/asy-mode.el
-2019/08/21 | 1293 | graphics/asymptote/base/asymptote.py
-2019/08/21 | 8870 | graphics/asymptote/base/asy.vim
-2019/08/21 | 51 | graphics/asymptote/base/babel.asy
-2019/08/21 | 9566 | graphics/asymptote/base/bezulate.asy
-2019/08/21 | 11482 | graphics/asymptote/base/binarytree.asy
-2019/08/21 | 5440 | graphics/asymptote/base/bsp.asy
-2019/08/21 | 10830 | graphics/asymptote/base/CAD.asy
-2019/08/21 | 174673 | graphics/asymptote/base/colormap.asy
-2019/08/21 | 14660 | graphics/asymptote/base/contour3.asy
-2019/08/21 | 20105 | graphics/asymptote/base/contour.asy
-2019/08/21 | 2109 | graphics/asymptote/base/drawtree.asy
-2019/08/21 | 1183 | graphics/asymptote/base/embed.asy
-2019/08/21 | 1122 | graphics/asymptote/base/external.asy
-2019/08/21 | 21459 | graphics/asymptote/base/feynman.asy
-2019/08/21 | 14311 | graphics/asymptote/base/flowchart.asy
-2019/08/21 | 35 | graphics/asymptote/base/fontsize.asy
-2019/08/21 | 321369 | graphics/asymptote/base/geometry.asy
-2019/08/21 | 62159 | graphics/asymptote/base/graph3.asy
-2019/08/21 | 63886 | graphics/asymptote/base/graph.asy
-2019/08/21 | 314 | graphics/asymptote/base/graph_settings.asy
-2019/08/21 | 7422 | graphics/asymptote/base/graph_splinetype.asy
-2019/08/21 | 13476 | graphics/asymptote/base/grid3.asy
-2019/08/21 | 3944 | graphics/asymptote/base/interpolate.asy
-2019/08/21 | 2465 | graphics/asymptote/base/labelpath3.asy
-2019/08/21 | 729 | graphics/asymptote/base/labelpath.asy
-2019/08/21 | 61 | graphics/asymptote/base/latin1.asy
-2019/08/21 | 24659 | graphics/asymptote/base/lmfit.asy
-2019/08/21 | 7302 | graphics/asymptote/base/markers.asy
-2019/08/21 | 11030 | graphics/asymptote/base/math.asy
-2019/08/21 | 253 | graphics/asymptote/base/metapost.asy
-2019/08/21 | 39 | graphics/asymptote/base/nopapersize.ps
-2019/08/21 | 3279 | graphics/asymptote/base/obj.asy
-2019/08/21 | 15192 | graphics/asymptote/base/ode.asy
-2019/08/21 | 14709 | graphics/asymptote/base/palette.asy
-2019/08/21 | 2615 | graphics/asymptote/base/patterns.asy
-2019/08/21 | 1259 | graphics/asymptote/base/plain_arcs.asy
-2019/08/21 | 19085 | graphics/asymptote/base/plain_arrows.asy
-2019/08/21 | 7102 | graphics/asymptote/base/plain.asy
-2019/08/21 | 21005 | graphics/asymptote/base/plain_bounds.asy
-2019/08/21 | 4128 | graphics/asymptote/base/plain_boxes.asy
-2019/08/21 | 3716 | graphics/asymptote/base/plain_constants.asy
-2019/08/21 | 2187 | graphics/asymptote/base/plain_debugger.asy
-2019/08/21 | 6292 | graphics/asymptote/base/plain_filldraw.asy
-2019/08/21 | 16578 | graphics/asymptote/base/plain_Label.asy
-2019/08/21 | 2552 | graphics/asymptote/base/plain_margins.asy
-2019/08/21 | 11320 | graphics/asymptote/base/plain_markers.asy
-2019/08/21 | 9309 | graphics/asymptote/base/plain_paths.asy
-2019/08/21 | 8661 | graphics/asymptote/base/plain_pens.asy
-2019/08/21 | 46927 | graphics/asymptote/base/plain_picture.asy
-2019/08/21 | 6320 | graphics/asymptote/base/plain_prethree.asy
-2019/08/21 | 5760 | graphics/asymptote/base/plain_scaling.asy
-2019/08/21 | 3820 | graphics/asymptote/base/plain_shipout.asy
-2019/08/21 | 6347 | graphics/asymptote/base/plain_strings.asy
-2019/08/21 | 358 | graphics/asymptote/base/pstoedit.asy
-2019/08/21 | 4916 | graphics/asymptote/base/rational.asy
-2019/08/21 | 8372 | graphics/asymptote/base/rationalSimplex.asy
-2019/08/21 | 657 | graphics/asymptote/base/reload.js
-2019/08/21 | 289 | graphics/asymptote/base/res/notes.txt
-2019/08/21 | 3430 | graphics/asymptote/base/roundedpath.asy
-2019/08/21 | 6512 | graphics/asymptote/base/shaders/fragment.glsl
-2019/08/21 | 720 | graphics/asymptote/base/shaders/vertex.glsl
-2019/08/21 | 7482 | graphics/asymptote/base/simplex.asy
-2019/08/21 | 608 | graphics/asymptote/base/size10.asy
-2019/08/21 | 600 | graphics/asymptote/base/size11.asy
-2019/08/21 | 16138 | graphics/asymptote/base/slide.asy
-2019/08/21 | 2068 | graphics/asymptote/base/slopefield.asy
-2019/08/21 | 56037 | graphics/asymptote/base/smoothcontour3.asy
-2019/08/21 | 12261 | graphics/asymptote/base/solids.asy
-2019/08/21 | 7307 | graphics/asymptote/base/stats.asy
-2019/08/21 | 22971 | graphics/asymptote/base/syzygy.asy
-2019/08/21 | 2277 | graphics/asymptote/base/texcolors.asy
-2019/08/21 | 23846 | graphics/asymptote/base/three_arrows.asy
-2019/08/21 | 86187 | graphics/asymptote/base/three.asy
-2019/08/21 | 3673 | graphics/asymptote/base/three_light.asy
-2019/08/21 | 2764 | graphics/asymptote/base/three_margins.asy
-2019/08/21 | 72913 | graphics/asymptote/base/three_surface.asy
-2019/08/21 | 12522 | graphics/asymptote/base/three_tube.asy
-2019/08/21 | 1375 | graphics/asymptote/base/tree.asy
-2019/08/21 | 5797 | graphics/asymptote/base/trembling.asy
-2019/08/21 | 4297 | graphics/asymptote/base/tube.asy
-2019/08/21 | 51 | graphics/asymptote/base/unicode.asy
-2019/08/21 | 4812 | graphics/asymptote/base/x11colors.asy
-2019/08/21 | 3918 | graphics/asymptote/bbox3.h
-2019/08/21 | 4503 | graphics/asymptote/bbox.h
-2019/08/21 | 4417 | graphics/asymptote/beziercurve.cc
-2019/08/21 | 2777 | graphics/asymptote/beziercurve.h
-2019/08/21 | 31689 | graphics/asymptote/bezierpatch.cc
-2019/08/21 | 8396 | graphics/asymptote/bezierpatch.h
+2019/09/29 | 472 | graphics/asymptote/absyn.cc
+2019/09/29 | 1030 | graphics/asymptote/absyn.h
+2019/09/29 | 3309 | graphics/asymptote/access.cc
+2019/09/29 | 2976 | graphics/asymptote/access.h
+2019/09/29 | 2278 | graphics/asymptote/align.h
+2019/09/29 | 829 | graphics/asymptote/angle.h
+2019/09/29 | 18534 | graphics/asymptote/application.cc
+2019/09/29 | 9094 | graphics/asymptote/application.h
+2019/09/29 | 4624 | graphics/asymptote/array.cc
+2019/09/29 | 1951 | graphics/asymptote/array.h
+2019/09/29 | 14023 | graphics/asymptote/arrayop.h
+2019/09/29 | 11516 | graphics/asymptote/aspy.py
+2019/09/29 | 4286 | graphics/asymptote/asy.ico
+2019/09/29 | 17705 | graphics/asymptote/asy-keywords.el
+2019/09/29 | 205266 | graphics/asymptote/asy.list
+2019/09/29 | 1612 | graphics/asymptote/asy-list.pl
+2019/09/29 | 6300 | graphics/asymptote/asymptote.nsi
+2019/09/29 | 2961 | graphics/asymptote/asymptote.spec
+2019/09/29 | 770 | graphics/asymptote/asy.rc
+2019/09/29 | 34 | graphics/asymptote/autogen.sh
+2019/09/29 | 12534 | graphics/asymptote/ax_pthread.m4
+2019/09/29 | 42 | graphics/asymptote/base/animate.asy
+2019/09/29 | 5222 | graphics/asymptote/base/animation.asy
+2019/09/29 | 578 | graphics/asymptote/base/annotate.asy
+2019/09/29 | 99 | graphics/asymptote/base/asy_filetype.vim
+2019/09/29 | 268 | graphics/asymptote/base/asy-init.el
+2019/09/29 | 8243 | graphics/asymptote/base/asy-kate.sh
+2019/09/29 | 71223 | graphics/asymptote/base/asy-mode.el
+2019/09/29 | 1293 | graphics/asymptote/base/asymptote.py
+2019/09/29 | 8870 | graphics/asymptote/base/asy.vim
+2019/09/29 | 51 | graphics/asymptote/base/babel.asy
+2019/09/29 | 9566 | graphics/asymptote/base/bezulate.asy
+2019/09/29 | 11482 | graphics/asymptote/base/binarytree.asy
+2019/09/29 | 5440 | graphics/asymptote/base/bsp.asy
+2019/09/29 | 10830 | graphics/asymptote/base/CAD.asy
+2019/09/29 | 174673 | graphics/asymptote/base/colormap.asy
+2019/09/29 | 14660 | graphics/asymptote/base/contour3.asy
+2019/09/29 | 20105 | graphics/asymptote/base/contour.asy
+2019/09/29 | 2109 | graphics/asymptote/base/drawtree.asy
+2019/09/29 | 1183 | graphics/asymptote/base/embed.asy
+2019/09/29 | 1122 | graphics/asymptote/base/external.asy
+2019/09/29 | 21459 | graphics/asymptote/base/feynman.asy
+2019/09/29 | 14311 | graphics/asymptote/base/flowchart.asy
+2019/09/29 | 35 | graphics/asymptote/base/fontsize.asy
+2019/09/29 | 321369 | graphics/asymptote/base/geometry.asy
+2019/09/29 | 62159 | graphics/asymptote/base/graph3.asy
+2019/09/29 | 63886 | graphics/asymptote/base/graph.asy
+2019/09/29 | 314 | graphics/asymptote/base/graph_settings.asy
+2019/09/29 | 7422 | graphics/asymptote/base/graph_splinetype.asy
+2019/09/29 | 13476 | graphics/asymptote/base/grid3.asy
+2019/09/29 | 3944 | graphics/asymptote/base/interpolate.asy
+2019/09/29 | 2465 | graphics/asymptote/base/labelpath3.asy
+2019/09/29 | 729 | graphics/asymptote/base/labelpath.asy
+2019/09/29 | 61 | graphics/asymptote/base/latin1.asy
+2019/09/29 | 24659 | graphics/asymptote/base/lmfit.asy
+2019/09/29 | 7302 | graphics/asymptote/base/markers.asy
+2019/09/29 | 11030 | graphics/asymptote/base/math.asy
+2019/09/29 | 253 | graphics/asymptote/base/metapost.asy
+2019/09/29 | 39 | graphics/asymptote/base/nopapersize.ps
+2019/09/29 | 3279 | graphics/asymptote/base/obj.asy
+2019/09/29 | 15192 | graphics/asymptote/base/ode.asy
+2019/09/29 | 14709 | graphics/asymptote/base/palette.asy
+2019/09/29 | 2615 | graphics/asymptote/base/patterns.asy
+2019/09/29 | 1259 | graphics/asymptote/base/plain_arcs.asy
+2019/09/29 | 19085 | graphics/asymptote/base/plain_arrows.asy
+2019/09/29 | 7102 | graphics/asymptote/base/plain.asy
+2019/09/29 | 21005 | graphics/asymptote/base/plain_bounds.asy
+2019/09/29 | 4128 | graphics/asymptote/base/plain_boxes.asy
+2019/09/29 | 3716 | graphics/asymptote/base/plain_constants.asy
+2019/09/29 | 2187 | graphics/asymptote/base/plain_debugger.asy
+2019/09/29 | 6292 | graphics/asymptote/base/plain_filldraw.asy
+2019/09/29 | 16578 | graphics/asymptote/base/plain_Label.asy
+2019/09/29 | 2552 | graphics/asymptote/base/plain_margins.asy
+2019/09/29 | 11320 | graphics/asymptote/base/plain_markers.asy
+2019/09/29 | 9309 | graphics/asymptote/base/plain_paths.asy
+2019/09/29 | 8661 | graphics/asymptote/base/plain_pens.asy
+2019/09/29 | 46927 | graphics/asymptote/base/plain_picture.asy
+2019/09/29 | 6285 | graphics/asymptote/base/plain_prethree.asy
+2019/09/29 | 5760 | graphics/asymptote/base/plain_scaling.asy
+2019/09/29 | 3820 | graphics/asymptote/base/plain_shipout.asy
+2019/09/29 | 6347 | graphics/asymptote/base/plain_strings.asy
+2019/09/29 | 358 | graphics/asymptote/base/pstoedit.asy
+2019/09/29 | 4916 | graphics/asymptote/base/rational.asy
+2019/09/29 | 8372 | graphics/asymptote/base/rationalSimplex.asy
+2019/09/29 | 657 | graphics/asymptote/base/reload.js
+2019/09/29 | 289 | graphics/asymptote/base/res/notes.txt
+2019/09/29 | 3430 | graphics/asymptote/base/roundedpath.asy
+2019/09/29 | 5330 | graphics/asymptote/base/shaders/fragment.glsl
+2019/09/29 | 619 | graphics/asymptote/base/shaders/vertex.glsl
+2019/09/29 | 7482 | graphics/asymptote/base/simplex.asy
+2019/09/29 | 608 | graphics/asymptote/base/size10.asy
+2019/09/29 | 600 | graphics/asymptote/base/size11.asy
+2019/09/29 | 16138 | graphics/asymptote/base/slide.asy
+2019/09/29 | 2068 | graphics/asymptote/base/slopefield.asy
+2019/09/29 | 56037 | graphics/asymptote/base/smoothcontour3.asy
+2019/09/29 | 12261 | graphics/asymptote/base/solids.asy
+2019/09/29 | 7307 | graphics/asymptote/base/stats.asy
+2019/09/29 | 22971 | graphics/asymptote/base/syzygy.asy
+2019/09/29 | 2277 | graphics/asymptote/base/texcolors.asy
+2019/09/29 | 23846 | graphics/asymptote/base/three_arrows.asy
+2019/09/29 | 86263 | graphics/asymptote/base/three.asy
+2019/09/29 | 3673 | graphics/asymptote/base/three_light.asy
+2019/09/29 | 2764 | graphics/asymptote/base/three_margins.asy
+2019/09/29 | 73252 | graphics/asymptote/base/three_surface.asy
+2019/09/29 | 12522 | graphics/asymptote/base/three_tube.asy
+2019/09/29 | 1375 | graphics/asymptote/base/tree.asy
+2019/09/29 | 5797 | graphics/asymptote/base/trembling.asy
+2019/09/29 | 4297 | graphics/asymptote/base/tube.asy
+2019/09/29 | 51 | graphics/asymptote/base/unicode.asy
+2019/09/29 | 42236 | graphics/asymptote/base/webgl/asygl-1.00.js
+2019/09/29 | 163 | graphics/asymptote/base/webgl/WebGLfooter.html
+2019/09/29 | 3749 | graphics/asymptote/base/webgl/WebGLheader.html
+2019/09/29 | 4812 | graphics/asymptote/base/x11colors.asy
+2019/09/29 | 3670 | graphics/asymptote/bbox3.h
+2019/09/29 | 4503 | graphics/asymptote/bbox.h
+2019/09/29 | 1473 | graphics/asymptote/beziercurve.cc
+2019/09/29 | 1557 | graphics/asymptote/beziercurve.h
+2019/09/29 | 26841 | graphics/asymptote/bezierpatch.cc
+2019/09/29 | 5785 | graphics/asymptote/bezierpatch.h
2018/02/02 | 3002325 | graphics/asymptote/binaries/i386-windows/cygwin1.dll
-2019/08/21 | 2652 | graphics/asymptote/binaries/i386-windows/README
-2019/08/21 | 7564288 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
+2019/09/29 | 2504 | graphics/asymptote/binaries/i386-windows/README
+2019/09/29 | 7578624 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
2018/04/05 | 288 | graphics/asymptote/binaries/i386-windows/texlive/README
2018/11/08 | 3339661 | graphics/asymptote/binaries/x86_64-windows/cygwin1.dll
-2019/08/21 | 2652 | graphics/asymptote/binaries/x86_64-windows/README
-2019/08/21 | 7541760 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
+2019/09/29 | 2504 | graphics/asymptote/binaries/x86_64-windows/README
+2019/09/29 | 7554560 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
2018/01/12 | 288 | graphics/asymptote/binaries/x86_64-windows/texlive/README
-2019/08/21 | 255 | graphics/asymptote/BUGS
-2019/08/21 | 2293 | graphics/asymptote/build-scripts/build-asymptote
-2019/08/21 | 3436 | graphics/asymptote/build-scripts/build-asymptote.dos
-2019/08/21 | 789 | graphics/asymptote/build-scripts/build-freeglut
-2019/08/21 | 1868 | graphics/asymptote/build-scripts/HOWTO-MSWindows
-2019/08/21 | 288 | graphics/asymptote/build-scripts/README-binaries
-2019/08/21 | 31244 | graphics/asymptote/builtin.cc
-2019/08/21 | 1637 | graphics/asymptote/builtin.h
-2019/08/21 | 1151 | graphics/asymptote/callable.cc
-2019/08/21 | 1642 | graphics/asymptote/callable.h
-2019/08/21 | 1191 | graphics/asymptote/camperror.cc
-2019/08/21 | 818 | graphics/asymptote/camperror.h
-2019/08/21 | 13339 | graphics/asymptote/camp.l
-2019/08/21 | 127885 | graphics/asymptote/camp.tab.cc
-2019/08/21 | 4089 | graphics/asymptote/camp.tab.h
-2019/08/21 | 20029 | graphics/asymptote/camp.y
-2019/08/21 | 4687 | graphics/asymptote/castop.h
-2019/08/21 | 1307483 | graphics/asymptote/ChangeLog
-2019/08/21 | 7808 | graphics/asymptote/coder.cc
-2019/08/21 | 11658 | graphics/asymptote/coder.h
-2019/08/21 | 1126 | graphics/asymptote/coenv.cc
-2019/08/21 | 908 | graphics/asymptote/coenv.h
-2019/08/21 | 1520 | graphics/asymptote/common.h
-2019/08/21 | 44166 | graphics/asymptote/config.guess
-2019/08/21 | 6675 | graphics/asymptote/config.h.in
-2019/08/21 | 36141 | graphics/asymptote/config.sub
-2019/08/21 | 280060 | graphics/asymptote/configure
-2019/08/21 | 14323 | graphics/asymptote/configure.ac
-2019/08/21 | 3673 | graphics/asymptote/constructor.cc
-2019/08/21 | 20893 | graphics/asymptote/dec.cc
-2019/08/21 | 15845 | graphics/asymptote/dec.h
-2019/08/21 | 5897 | graphics/asymptote/Delaunay.cc
-2019/08/21 | 384 | graphics/asymptote/Delaunay.h
-2019/08/21 | 7594 | graphics/asymptote/doc/asy.1
-2019/08/21 | 1005 | graphics/asymptote/doc/asy.1.begin
-2019/08/21 | 333 | graphics/asymptote/doc/asy.1.end
-2019/08/21 | 2800 | graphics/asymptote/doc/asycolors.sty
-2019/08/21 | 18136 | graphics/asymptote/doc/asy-latex.dtx
-2019/08/21 | 194549 | graphics/asymptote/doc/asy-latex.pdf
-2019/08/21 | 1290552 | graphics/asymptote/doc/asymptote.pdf
-2019/08/21 | 9846 | graphics/asymptote/doc/asymptote.sty
-2019/08/21 | 381854 | graphics/asymptote/doc/asymptote.texi
-2019/08/21 | 53680 | graphics/asymptote/doc/asyRefCard.pdf
-2019/08/21 | 20051 | graphics/asymptote/doc/asyRefCard.tex
-2019/08/21 | 246 | graphics/asymptote/doc/axis3.asy
-2019/08/21 | 416 | graphics/asymptote/doc/bezier2.asy
-2019/08/21 | 81 | graphics/asymptote/doc/bezier.asy
-2019/08/21 | 234 | graphics/asymptote/doc/beziercurve.asy
-2019/08/21 | 41 | graphics/asymptote/doc/bigdiagonal.asy
-2019/08/21 | 306 | graphics/asymptote/doc/binarytreetest.asy
-2019/08/21 | 677 | graphics/asymptote/doc/Bode.asy
-2019/08/21 | 524 | graphics/asymptote/doc/brokenaxis.asy
-2019/08/21 | 1391 | graphics/asymptote/doc/CAD1.asy
-2019/08/21 | 67528 | graphics/asymptote/doc/CAD.pdf
-2019/08/21 | 10196 | graphics/asymptote/doc/CAD.tex
-2019/08/21 | 506 | graphics/asymptote/doc/CDlabel.asy
-2019/08/21 | 4348 | graphics/asymptote/doc/colo-asy.tex
-2019/08/21 | 49 | graphics/asymptote/doc/colons.asy
-2019/08/21 | 1620 | graphics/asymptote/doc/colors.asy
-2019/08/21 | 243 | graphics/asymptote/doc/cube.asy
-2019/08/21 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
-2019/08/21 | 218 | graphics/asymptote/doc/datagraph.asy
-2019/08/21 | 24 | graphics/asymptote/doc/diagonal.asy
-2019/08/21 | 2882 | graphics/asymptote/doc/diatom.asy
-2019/08/21 | 4067 | graphics/asymptote/doc/diatom.csv
-2019/08/21 | 49 | graphics/asymptote/doc/dots.asy
-2019/08/21 | 1051 | graphics/asymptote/doc/eetomumu.asy
-2019/08/21 | 2039 | graphics/asymptote/doc/elliptic.asy
-2019/08/21 | 912 | graphics/asymptote/doc/errorbars.asy
-2019/08/21 | 202 | graphics/asymptote/doc/exp.asy
-2019/08/21 | 343 | graphics/asymptote/doc/externalprc.tex
-2019/08/21 | 19597 | graphics/asymptote/doc/external-proposal.html
-2019/08/21 | 25137 | graphics/asymptote/doc/extra/intro.asy
-2019/08/21 | 40764 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
-2019/08/21 | 63140 | graphics/asymptote/doc/FAQ/asy-faq.info
-2019/08/21 | 9202 | graphics/asymptote/doc/FAQ/bfnnconv.pl
-2019/08/21 | 13663 | graphics/asymptote/doc/FAQ/install-sh
-2019/08/21 | 1000 | graphics/asymptote/doc/FAQ/Makefile
-2019/08/21 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
-2019/08/21 | 9725 | graphics/asymptote/doc/FAQ/m-html.pl
-2019/08/21 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
-2019/08/21 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
-2019/08/21 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
-2019/08/21 | 238 | graphics/asymptote/doc/filegraph.asy
-2019/08/21 | 26 | graphics/asymptote/doc/filegraph.dat
-2019/08/21 | 604 | graphics/asymptote/doc/flow.asy
-2019/08/21 | 862 | graphics/asymptote/doc/flowchartdemo.asy
-2019/08/21 | 464 | graphics/asymptote/doc/GaussianSurface.asy
-2019/08/21 | 376 | graphics/asymptote/doc/generalaxis3.asy
-2019/08/21 | 277 | graphics/asymptote/doc/generalaxis.asy
-2019/08/21 | 754 | graphics/asymptote/doc/graphmarkers.asy
-2019/08/21 | 426 | graphics/asymptote/doc/grid3xyz.asy
-2019/08/21 | 279 | graphics/asymptote/doc/hatch.asy
-2019/08/21 | 423 | graphics/asymptote/doc/helix.asy
-2019/08/21 | 330 | graphics/asymptote/doc/HermiteSpline.asy
-2019/08/21 | 441 | graphics/asymptote/doc/histogram.asy
-2019/08/21 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
-2019/08/21 | 500 | graphics/asymptote/doc/Hobbydir.asy
-2019/08/21 | 380 | graphics/asymptote/doc/icon.asy
-2019/08/21 | 401 | graphics/asymptote/doc/image.asy
-2019/08/21 | 872 | graphics/asymptote/doc/imagecontour.asy
-2019/08/21 | 13663 | graphics/asymptote/doc/install-sh
-2019/08/21 | 357 | graphics/asymptote/doc/irregularcontour.asy
-2019/08/21 | 442 | graphics/asymptote/doc/join3.asy
-2019/08/21 | 261 | graphics/asymptote/doc/join.asy
-2019/08/21 | 417 | graphics/asymptote/doc/knots.asy
-2019/08/21 | 121 | graphics/asymptote/doc/labelsquare.asy
-2019/08/21 | 144 | graphics/asymptote/doc/latexmkrc
-2019/08/21 | 150 | graphics/asymptote/doc/latexmkrc_asydir
-2019/08/21 | 3106 | graphics/asymptote/doc/latexusage.tex
-2019/08/21 | 1025 | graphics/asymptote/doc/leastsquares.asy
-2019/08/21 | 6318 | graphics/asymptote/doc/leastsquares.dat
-2019/08/21 | 410 | graphics/asymptote/doc/legend.asy
-2019/08/21 | 366 | graphics/asymptote/doc/lineargraph0.asy
-2019/08/21 | 373 | graphics/asymptote/doc/lineargraph.asy
-2019/08/21 | 416 | graphics/asymptote/doc/linetype.asy
-2019/08/21 | 423 | graphics/asymptote/doc/log2graph.asy
-2019/08/21 | 262 | graphics/asymptote/doc/loggraph.asy
-2019/08/21 | 382 | graphics/asymptote/doc/loggrid.asy
-2019/08/21 | 480 | graphics/asymptote/doc/logimage.asy
-2019/08/21 | 619 | graphics/asymptote/doc/logo.asy
-2019/08/21 | 314 | graphics/asymptote/doc/logticks.asy
-2019/08/21 | 3219 | graphics/asymptote/doc/Makefile.in
-2019/08/21 | 293 | graphics/asymptote/doc/makepen.asy
-2019/08/21 | 2653 | graphics/asymptote/doc/markers1.asy
-2019/08/21 | 877 | graphics/asymptote/doc/markers2.asy
-2019/08/21 | 288 | graphics/asymptote/doc/mexicanhat.asy
-2019/08/21 | 374 | graphics/asymptote/doc/monthaxis.asy
-2019/08/21 | 458 | graphics/asymptote/doc/multicontour.asy
-2019/08/21 | 3497 | graphics/asymptote/doc/ocg.sty
-2019/08/21 | 115 | graphics/asymptote/doc/onecontour.asy
-2019/08/21 | 240 | graphics/asymptote/doc/parametricgraph.asy
-2019/08/21 | 498 | graphics/asymptote/doc/penfunctionimage.asy
-2019/08/21 | 219 | graphics/asymptote/doc/penimage.asy
-2019/08/21 | 2771 | graphics/asymptote/doc/pixel.pdf
-2019/08/21 | 354 | graphics/asymptote/doc/planes.asy
-2019/08/21 | 455881 | graphics/asymptote/doc/png/asymptote.info
-2019/08/21 | 1469 | graphics/asymptote/doc/png/Makefile.in
-2019/08/21 | 49 | graphics/asymptote/doc/quartercircle.asy
-2019/08/21 | 354 | graphics/asymptote/doc/reloadpdf.tex
-2019/08/21 | 157 | graphics/asymptote/doc/saddle.asy
-2019/08/21 | 355 | graphics/asymptote/doc/scaledgraph.asy
-2019/08/21 | 821 | graphics/asymptote/doc/secondaryaxis.asy
-2019/08/21 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
-2019/08/21 | 256 | graphics/asymptote/doc/shadedtiling.asy
-2019/08/21 | 154 | graphics/asymptote/doc/slopefield1.asy
-2019/08/21 | 52 | graphics/asymptote/doc/square.asy
-2019/08/21 | 341 | graphics/asymptote/doc/subpictures.asy
-2019/08/21 | 123 | graphics/asymptote/doc/superpath.asy
-2019/08/21 | 31566 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
-2019/08/21 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
-2019/08/21 | 390 | graphics/asymptote/doc/tile.asy
-2019/08/21 | 396 | graphics/asymptote/doc/triangulate.asy
-2019/08/21 | 186 | graphics/asymptote/doc/unitcircle3.asy
-2019/08/21 | 147 | graphics/asymptote/doc/vectorfield.asy
-2019/08/21 | 1746 | graphics/asymptote/doc/westnile.asy
-2019/08/21 | 4727 | graphics/asymptote/doc/westnile.csv
-2019/08/21 | 880 | graphics/asymptote/doc/xasy.1x
-2019/08/21 | 1878 | graphics/asymptote/drawclipbegin.h
-2019/08/21 | 1213 | graphics/asymptote/drawclipend.h
-2019/08/21 | 10595 | graphics/asymptote/drawelement.h
-2019/08/21 | 4619 | graphics/asymptote/drawfill.cc
-2019/08/21 | 6570 | graphics/asymptote/drawfill.h
-2019/08/21 | 496 | graphics/asymptote/drawgrestore.h
-2019/08/21 | 2924 | graphics/asymptote/drawgroup.h
-2019/08/21 | 466 | graphics/asymptote/drawgsave.h
-2019/08/21 | 3042 | graphics/asymptote/drawimage.h
-2019/08/21 | 6865 | graphics/asymptote/drawlabel.cc
-2019/08/21 | 2163 | graphics/asymptote/drawlabel.h
-2019/08/21 | 773 | graphics/asymptote/drawlayer.h
-2019/08/21 | 6595 | graphics/asymptote/drawpath3.cc
-2019/08/21 | 5004 | graphics/asymptote/drawpath3.h
-2019/08/21 | 3522 | graphics/asymptote/drawpath.cc
-2019/08/21 | 674 | graphics/asymptote/drawpath.h
-2019/08/21 | 24415 | graphics/asymptote/drawsurface.cc
-2019/08/21 | 18814 | graphics/asymptote/drawsurface.h
-2019/08/21 | 1279 | graphics/asymptote/drawverbatim.h
-2019/08/21 | 20738 | graphics/asymptote/entry.cc
-2019/08/21 | 14795 | graphics/asymptote/entry.h
-2019/08/21 | 5465 | graphics/asymptote/env.cc
-2019/08/21 | 1142 | graphics/asymptote/envcompleter.cc
-2019/08/21 | 845 | graphics/asymptote/envcompleter.h
-2019/08/21 | 4575 | graphics/asymptote/env.h
-2019/08/21 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
-2019/08/21 | 1753 | graphics/asymptote/errormsg.cc
-2019/08/21 | 5098 | graphics/asymptote/errormsg.h
-2019/08/21 | 9251 | graphics/asymptote/errors
-2019/08/21 | 6911 | graphics/asymptote/errortest.asy
-2019/08/21 | 657 | graphics/asymptote/examples/100d.views
-2019/08/21 | 309 | graphics/asymptote/examples/1overx.asy
-2019/08/21 | 4158 | graphics/asymptote/examples/advection.asy
-2019/08/21 | 245 | graphics/asymptote/examples/alignbox.asy
-2019/08/21 | 2832 | graphics/asymptote/examples/alignedaxis.asy
-2019/08/21 | 946 | graphics/asymptote/examples/animations/cube.asy
-2019/08/21 | 160672 | graphics/asymptote/examples/animations/dice.u3d
-2019/08/21 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
-2019/08/21 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
-2019/08/21 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
-2019/08/21 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
-2019/08/21 | 414 | graphics/asymptote/examples/animations/glmovie.asy
-2019/08/21 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
-2019/08/21 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
-2019/08/21 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
-2019/08/21 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
-2019/08/21 | 1238 | graphics/asymptote/examples/animations/slidemovies.asy
-2019/08/21 | 832 | graphics/asymptote/examples/animations/sphere.asy
-2019/08/21 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
-2019/08/21 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
-2019/08/21 | 1120 | graphics/asymptote/examples/animations/wheel.asy
-2019/08/21 | 236 | graphics/asymptote/examples/annotation.asy
-2019/08/21 | 661 | graphics/asymptote/examples/arrows3.asy
-2019/08/21 | 497 | graphics/asymptote/examples/bars3.asy
-2019/08/21 | 1033 | graphics/asymptote/examples/basealign.asy
-2019/08/21 | 395 | graphics/asymptote/examples/BezierPatch.asy
-2019/08/21 | 581 | graphics/asymptote/examples/BezierSaddle.asy
-2019/08/21 | 1526 | graphics/asymptote/examples/BezierSurface.asy
-2019/08/21 | 199 | graphics/asymptote/examples/BezierTriangle.asy
-2019/08/21 | 154 | graphics/asymptote/examples/billboard.asy
-2019/08/21 | 513 | graphics/asymptote/examples/buildcycle.asy
-2019/08/21 | 233 | graphics/asymptote/examples/cardioid.asy
-2019/08/21 | 485 | graphics/asymptote/examples/cards.asy
-2019/08/21 | 691 | graphics/asymptote/examples/centroidfg.asy
-2019/08/21 | 322 | graphics/asymptote/examples/cheese.asy
-2019/08/21 | 576 | graphics/asymptote/examples/circles.asy
-2019/08/21 | 228 | graphics/asymptote/examples/circumcircle.asy
-2019/08/21 | 762 | graphics/asymptote/examples/clockarray.asy
-2019/08/21 | 264 | graphics/asymptote/examples/coag.asy
-2019/08/21 | 424 | graphics/asymptote/examples/colorpatch.asy
-2019/08/21 | 465 | graphics/asymptote/examples/colorplanes.asy
-2019/08/21 | 739 | graphics/asymptote/examples/condor.asy
-2019/08/21 | 445 | graphics/asymptote/examples/cones.asy
-2019/08/21 | 1780 | graphics/asymptote/examples/conicurv.asy
-2019/08/21 | 255 | graphics/asymptote/examples/contextfonts.asy
-2019/08/21 | 778 | graphics/asymptote/examples/controlsystem.asy
-2019/08/21 | 123 | graphics/asymptote/examples/Coons.asy
-2019/08/21 | 235 | graphics/asymptote/examples/cos2theta.asy
-2019/08/21 | 582 | graphics/asymptote/examples/cos3.asy
-2019/08/21 | 461 | graphics/asymptote/examples/cosaddition.asy
-2019/08/21 | 5740 | graphics/asymptote/examples/cpkcolors.asy
-2019/08/21 | 573 | graphics/asymptote/examples/curvedlabel3.asy
-2019/08/21 | 177 | graphics/asymptote/examples/curvedlabel.asy
-2019/08/21 | 1835 | graphics/asymptote/examples/cyclohexane.asy
-2019/08/21 | 146 | graphics/asymptote/examples/cylinder.asy
-2019/08/21 | 506 | graphics/asymptote/examples/delu.asy
-2019/08/21 | 521 | graphics/asymptote/examples/dimension.asy
-2019/08/21 | 1216 | graphics/asymptote/examples/dragon.asy
-2019/08/21 | 1326 | graphics/asymptote/examples/electromagnetic.asy
-2019/08/21 | 323 | graphics/asymptote/examples/elevation.asy
-2019/08/21 | 398 | graphics/asymptote/examples/epix.asy
-2019/08/21 | 242 | graphics/asymptote/examples/equilateral.asy
-2019/08/21 | 549 | graphics/asymptote/examples/equilchord.asy
-2019/08/21 | 579 | graphics/asymptote/examples/exp3.asy
-2019/08/21 | 581 | graphics/asymptote/examples/extrudedcontour.asy
-2019/08/21 | 498 | graphics/asymptote/examples/fano.asy
-2019/08/21 | 1109 | graphics/asymptote/examples/fequlogo.asy
-2019/08/21 | 727 | graphics/asymptote/examples/fermi.asy
-2019/08/21 | 971 | graphics/asymptote/examples/filesurface.asy
-2019/08/21 | 5543 | graphics/asymptote/examples/filesurface.dat
-2019/08/21 | 574 | graphics/asymptote/examples/fillcontour.asy
-2019/08/21 | 4203 | graphics/asymptote/examples/fin.asy
-2019/08/21 | 710 | graphics/asymptote/examples/fjortoft.asy
-2019/08/21 | 548 | graphics/asymptote/examples/floatingdisk.asy
-2019/08/21 | 502 | graphics/asymptote/examples/floor.asy
-2019/08/21 | 683 | graphics/asymptote/examples/fractaltree.asy
-2019/08/21 | 1185 | graphics/asymptote/examples/functionshading.asy
-2019/08/21 | 499 | graphics/asymptote/examples/galleon.asy
-2019/08/21 | 714 | graphics/asymptote/examples/gamma3.asy
-2019/08/21 | 440 | graphics/asymptote/examples/gamma.asy
-2019/08/21 | 679 | graphics/asymptote/examples/genusthree.asy
-2019/08/21 | 1136 | graphics/asymptote/examples/genustwo.asy
-2019/08/21 | 384 | graphics/asymptote/examples/Gouraud.asy
-2019/08/21 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
-2019/08/21 | 76 | graphics/asymptote/examples/grid.asy
-2019/08/21 | 459 | graphics/asymptote/examples/hierarchy.asy
-2019/08/21 | 308 | graphics/asymptote/examples/hyperboloid.asy
-2019/08/21 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
-2019/08/21 | 1140 | graphics/asymptote/examples/imagehistogram.asy
-2019/08/21 | 610 | graphics/asymptote/examples/impact.asy
-2019/08/21 | 605 | graphics/asymptote/examples/integraltest.asy
-2019/08/21 | 4825 | graphics/asymptote/examples/interpolate1.asy
-2019/08/21 | 291 | graphics/asymptote/examples/jump.asy
-2019/08/21 | 1328 | graphics/asymptote/examples/Klein.asy
-2019/08/21 | 182 | graphics/asymptote/examples/label3.asy
-2019/08/21 | 196 | graphics/asymptote/examples/label3ribbon.asy
-2019/08/21 | 187 | graphics/asymptote/examples/label3solid.asy
-2019/08/21 | 546 | graphics/asymptote/examples/label3zoom.asy
-2019/08/21 | 264 | graphics/asymptote/examples/labelbox.asy
-2019/08/21 | 1114 | graphics/asymptote/examples/laserlattice.asy
-2019/08/21 | 136 | graphics/asymptote/examples/latticeshading.asy
-2019/08/21 | 688 | graphics/asymptote/examples/layers.asy
-2019/08/21 | 460 | graphics/asymptote/examples/lever.asy
-2019/08/21 | 654 | graphics/asymptote/examples/limit.asy
-2019/08/21 | 1908 | graphics/asymptote/examples/linearregression.asy
-2019/08/21 | 168 | graphics/asymptote/examples/lines.asy
-2019/08/21 | 980 | graphics/asymptote/examples/lmfit1.asy
-2019/08/21 | 206 | graphics/asymptote/examples/log.asy
-2019/08/21 | 349 | graphics/asymptote/examples/logdown.asy
-2019/08/21 | 1167 | graphics/asymptote/examples/logo3.asy
-2019/08/21 | 196 | graphics/asymptote/examples/lowint.asy
-2019/08/21 | 659 | graphics/asymptote/examples/lowupint.asy
-2019/08/21 | 479 | graphics/asymptote/examples/magnetic.asy
-2019/08/21 | 833 | graphics/asymptote/examples/markregular.asy
-2019/08/21 | 1950 | graphics/asymptote/examples/mergeExample.asy
-2019/08/21 | 5258 | graphics/asymptote/examples/mosaic.asy
-2019/08/21 | 2512 | graphics/asymptote/examples/mosquito.asy
-2019/08/21 | 1569 | graphics/asymptote/examples/near_earth.asy
-2019/08/21 | 649 | graphics/asymptote/examples/NURBScurve.asy
-2019/08/21 | 1020 | graphics/asymptote/examples/NURBSsphere.asy
-2019/08/21 | 1461 | graphics/asymptote/examples/NURBSsurface.asy
-2019/08/21 | 1251 | graphics/asymptote/examples/odetest.asy
-2019/08/21 | 309 | graphics/asymptote/examples/oneoverx.asy
-2019/08/21 | 788 | graphics/asymptote/examples/orthocenter.asy
-2019/08/21 | 254 | graphics/asymptote/examples/parametricelevation.asy
-2019/08/21 | 407 | graphics/asymptote/examples/parametricsurface.asy
-2019/08/21 | 711 | graphics/asymptote/examples/partialsurface.asy
-2019/08/21 | 1055 | graphics/asymptote/examples/partitionExample.asy
-2019/08/21 | 426 | graphics/asymptote/examples/pathintersectsurface.asy
-2019/08/21 | 3322 | graphics/asymptote/examples/pdb.asy
-2019/08/21 | 361 | graphics/asymptote/examples/phase.asy
-2019/08/21 | 83362 | graphics/asymptote/examples/piicon.eps
-2019/08/21 | 362 | graphics/asymptote/examples/pipeintersection.asy
-2019/08/21 | 3868 | graphics/asymptote/examples/pipes.asy
-2019/08/21 | 418 | graphics/asymptote/examples/planeproject.asy
-2019/08/21 | 930 | graphics/asymptote/examples/polararea.asy
-2019/08/21 | 628 | graphics/asymptote/examples/polarcircle.asy
-2019/08/21 | 326 | graphics/asymptote/examples/polardatagraph.asy
-2019/08/21 | 643 | graphics/asymptote/examples/p-orbital.asy
-2019/08/21 | 956 | graphics/asymptote/examples/poster.asy
-2019/08/21 | 58 | graphics/asymptote/examples/progrid.asy
-2019/08/21 | 373 | graphics/asymptote/examples/projectelevation.asy
-2019/08/21 | 438 | graphics/asymptote/examples/projectrevolution.asy
-2019/08/21 | 747 | graphics/asymptote/examples/pseudosphere.asy
-2019/08/21 | 557 | graphics/asymptote/examples/Pythagoras.asy
-2019/08/21 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
-2019/08/21 | 734 | graphics/asymptote/examples/quilt.asy
-2019/08/21 | 325 | graphics/asymptote/examples/rainbow.asy
-2019/08/21 | 54 | graphics/asymptote/examples/randompath3.asy
-2019/08/21 | 1537 | graphics/asymptote/examples/refs.bib
-2019/08/21 | 993 | graphics/asymptote/examples/RiemannSphere.asy
-2019/08/21 | 369 | graphics/asymptote/examples/RiemannSurface.asy
-2019/08/21 | 386 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
-2019/08/21 | 141 | graphics/asymptote/examples/ring.asy
-2019/08/21 | 182 | graphics/asymptote/examples/roll.asy
-2019/08/21 | 1310 | graphics/asymptote/examples/roundpath.asy
-2019/08/21 | 288 | graphics/asymptote/examples/sacone3D.asy
-2019/08/21 | 445 | graphics/asymptote/examples/sacone.asy
-2019/08/21 | 341 | graphics/asymptote/examples/sacylinder3D.asy
-2019/08/21 | 400 | graphics/asymptote/examples/sacylinder.asy
-2019/08/21 | 66 | graphics/asymptote/examples/shade.asy
-2019/08/21 | 104 | graphics/asymptote/examples/shadestroke.asy
-2019/08/21 | 1066 | graphics/asymptote/examples/shellmethod.asy
-2019/08/21 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
-2019/08/21 | 410 | graphics/asymptote/examples/Sierpinski.asy
-2019/08/21 | 849 | graphics/asymptote/examples/SierpinskiGasket.asy
-2019/08/21 | 2422 | graphics/asymptote/examples/SierpinskiSponge.asy
-2019/08/21 | 327 | graphics/asymptote/examples/sin1x.asy
-2019/08/21 | 579 | graphics/asymptote/examples/sin3.asy
-2019/08/21 | 591 | graphics/asymptote/examples/sinc.asy
-2019/08/21 | 385 | graphics/asymptote/examples/sinxlex.asy
-2019/08/21 | 3340 | graphics/asymptote/examples/slidedemo.asy
-2019/08/21 | 341 | graphics/asymptote/examples/slidedemo_.bbl
-2019/08/21 | 2043 | graphics/asymptote/examples/slope.asy
-2019/08/21 | 520 | graphics/asymptote/examples/smoothelevation.asy
-2019/08/21 | 2658 | graphics/asymptote/examples/soccerball.asy
-2019/08/21 | 2362 | graphics/asymptote/examples/spectrum.asy
-2019/08/21 | 126 | graphics/asymptote/examples/sphere.asy
-2019/08/21 | 150 | graphics/asymptote/examples/spheresilhouette.asy
-2019/08/21 | 165 | graphics/asymptote/examples/sphereskeleton.asy
-2019/08/21 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
-2019/08/21 | 426 | graphics/asymptote/examples/spiral3.asy
-2019/08/21 | 210 | graphics/asymptote/examples/spiral.asy
-2019/08/21 | 618 | graphics/asymptote/examples/spline.asy
-2019/08/21 | 2180 | graphics/asymptote/examples/splitpatch.asy
-2019/08/21 | 38 | graphics/asymptote/examples/spring0.asy
-2019/08/21 | 43 | graphics/asymptote/examples/spring2.asy
-2019/08/21 | 671 | graphics/asymptote/examples/spring.asy
-2019/08/21 | 674 | graphics/asymptote/examples/sqrtx01.asy
-2019/08/21 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
-2019/08/21 | 145 | graphics/asymptote/examples/star.asy
-2019/08/21 | 170 | graphics/asymptote/examples/stereoscopic.asy
-2019/08/21 | 59 | graphics/asymptote/examples/stroke3.asy
-2019/08/21 | 315 | graphics/asymptote/examples/strokepath.asy
-2019/08/21 | 168 | graphics/asymptote/examples/strokeshade.asy
-2019/08/21 | 198 | graphics/asymptote/examples/tanh.asy
-2019/08/21 | 13739 | graphics/asymptote/examples/teapot.asy
-2019/08/21 | 303 | graphics/asymptote/examples/tensor.asy
-2019/08/21 | 547 | graphics/asymptote/examples/tetra.asy
-2019/08/21 | 312 | graphics/asymptote/examples/textpath.asy
-2019/08/21 | 10210 | graphics/asymptote/examples/thermodynamics.asy
-2019/08/21 | 576 | graphics/asymptote/examples/threeviews.asy
-2019/08/21 | 413 | graphics/asymptote/examples/torus.asy
-2019/08/21 | 246 | graphics/asymptote/examples/transparency.asy
-2019/08/21 | 602 | graphics/asymptote/examples/treetest.asy
-2019/08/21 | 589 | graphics/asymptote/examples/trefoilknot.asy
-2019/08/21 | 959 | graphics/asymptote/examples/triads.asy
-2019/08/21 | 209 | graphics/asymptote/examples/triangle.asy
-2019/08/21 | 417 | graphics/asymptote/examples/triangles.asy
-2019/08/21 | 251 | graphics/asymptote/examples/triceratops.asy
-2019/08/21 | 291 | graphics/asymptote/examples/trumpet.asy
-2019/08/21 | 2084 | graphics/asymptote/examples/truncatedIcosahedron.asy
-2019/08/21 | 40326 | graphics/asymptote/examples/tvgen.asy
-2019/08/21 | 885 | graphics/asymptote/examples/twistedtubes.asy
-2019/08/21 | 322 | graphics/asymptote/examples/unitcircle.asy
-2019/08/21 | 713 | graphics/asymptote/examples/unitoctant.asy
-2019/08/21 | 199 | graphics/asymptote/examples/upint.asy
-2019/08/21 | 525 | graphics/asymptote/examples/vectorfield3.asy
-2019/08/21 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
-2019/08/21 | 839 | graphics/asymptote/examples/venn3.asy
-2019/08/21 | 626 | graphics/asymptote/examples/venn.asy
-2019/08/21 | 539 | graphics/asymptote/examples/vertexshading.asy
-2019/08/21 | 360 | graphics/asymptote/examples/washer.asy
-2019/08/21 | 1004 | graphics/asymptote/examples/washermethod.asy
-2019/08/21 | 628 | graphics/asymptote/examples/wedge.asy
-2019/08/21 | 956 | graphics/asymptote/examples/workcone.asy
-2019/08/21 | 951 | graphics/asymptote/examples/worksheet.asy
-2019/08/21 | 2659 | graphics/asymptote/examples/worldmap.asy
-2019/08/21 | 580 | graphics/asymptote/examples/xsin1x.asy
-2019/08/21 | 3746 | graphics/asymptote/examples/xstitch.asy
-2019/08/21 | 743 | graphics/asymptote/examples/xxsq01.asy
-2019/08/21 | 868 | graphics/asymptote/examples/xxsq01x-1.asy
-2019/08/21 | 827 | graphics/asymptote/examples/xxsq01y.asy
-2019/08/21 | 223 | graphics/asymptote/examples/yingyang.asy
-2019/08/21 | 33877 | graphics/asymptote/exp.cc
-2019/08/21 | 28809 | graphics/asymptote/exp.h
-2019/08/21 | 119 | graphics/asymptote/fftw++asy.cc
-2019/08/21 | 1694 | graphics/asymptote/fftw++.cc
-2019/08/21 | 47031 | graphics/asymptote/fftw++.h
-2019/08/21 | 4063 | graphics/asymptote/fileio.cc
-2019/08/21 | 19823 | graphics/asymptote/fileio.h
-2019/08/21 | 1245 | graphics/asymptote/findsym.pl
-2019/08/21 | 1020 | graphics/asymptote/flatguide.cc
-2019/08/21 | 4231 | graphics/asymptote/flatguide.h
-2019/08/21 | 666 | graphics/asymptote/fpu.h
-2019/08/21 | 2173 | graphics/asymptote/frame.h
-2019/08/21 | 7935 | graphics/asymptote/fundec.cc
-2019/08/21 | 4347 | graphics/asymptote/fundec.h
-2019/08/21 | 1160528 | graphics/asymptote/gc-8.0.4.tar.gz
-2019/08/21 | 3161 | graphics/asymptote/genv.cc
-2019/08/21 | 1626 | graphics/asymptote/genv.h
-2019/08/21 | 4520 | graphics/asymptote/getopt1.c
-2019/08/21 | 30147 | graphics/asymptote/getopt.c
-2019/08/21 | 6650 | graphics/asymptote/getopt.h
-2019/08/21 | 112 | graphics/asymptote/glew.c
-2019/08/21 | 1235777 | graphics/asymptote/GL/glew.c
-2019/08/21 | 1186601 | graphics/asymptote/GL/glew.h
-2019/08/21 | 73435 | graphics/asymptote/GL/glxew.h
-2019/08/21 | 39319 | graphics/asymptote/glrender.cc
-2019/08/21 | 3504 | graphics/asymptote/glrender.h
-2019/08/21 | 63314 | graphics/asymptote/GL/wglew.h
-2019/08/21 | 50697 | graphics/asymptote/gsl.cc
-2019/08/21 | 22 | graphics/asymptote/GUI/configs/__init__.py
-2019/08/21 | 1151 | graphics/asymptote/GUI/configs/xasyconfig.cson
-2019/08/21 | 359 | graphics/asymptote/GUI/configs/xasykeymap.cson
-2019/08/21 | 3503 | graphics/asymptote/GUI/CustMatTransform.py
-2019/08/21 | 131 | graphics/asymptote/GUI/DebugFlags.py
-2019/08/21 | 1175 | graphics/asymptote/guide.cc
-2019/08/21 | 298 | graphics/asymptote/guideflags.h
-2019/08/21 | 6783 | graphics/asymptote/guide.h
-2019/08/21 | 1724 | graphics/asymptote/GUI/GuidesManager.py
-2019/08/21 | 45 | graphics/asymptote/GUI/icon-list.txt
-2019/08/21 | 162009 | graphics/asymptote/GUI/icons_rc.py
-2019/08/21 | 23 | graphics/asymptote/GUI/__init__.py
-2019/08/21 | 11528 | graphics/asymptote/GUI/InplaceAddObj.py
-2019/08/21 | 5151 | graphics/asymptote/GUI/labelEditor.py
-2019/08/21 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
-2019/08/21 | 2399 | graphics/asymptote/GUI/PrimitiveShape.py
-2019/08/21 | 9944 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
-2019/08/21 | 6153 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
-2019/08/21 | 2824 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
-2019/08/21 | 7128 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
-2019/08/21 | 2192 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
-2019/08/21 | 4848 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
-2019/08/21 | 4667 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
-2019/08/21 | 54704 | graphics/asymptote/GUI/pyUIClass/window1.py
-2019/08/21 | 57 | graphics/asymptote/GUI/requirements.txt
-2019/08/21 | 288 | graphics/asymptote/GUI/res/icons/anchor.svg
-2019/08/21 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
-2019/08/21 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
-2019/08/21 | 802 | graphics/asymptote/GUI/res/icons/android-camera.svg
-2019/08/21 | 695 | graphics/asymptote/GUI/res/icons/android-close.svg
-2019/08/21 | 1319 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
-2019/08/21 | 674 | graphics/asymptote/GUI/res/icons/android-delete.svg
-2019/08/21 | 633 | graphics/asymptote/GUI/res/icons/android-done.svg
-2019/08/21 | 822 | graphics/asymptote/GUI/res/icons/android-expand.svg
-2019/08/21 | 850 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
-2019/08/21 | 1482 | graphics/asymptote/GUI/res/icons/android-hand.svg
-2019/08/21 | 1124 | graphics/asymptote/GUI/res/icons/android-locate.svg
-2019/08/21 | 764 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
-2019/08/21 | 844 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
-2019/08/21 | 806 | graphics/asymptote/GUI/res/icons/android-refresh.svg
-2019/08/21 | 713 | graphics/asymptote/GUI/res/icons/arrow-move.svg
-2019/08/21 | 639 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
-2019/08/21 | 609 | graphics/asymptote/GUI/res/icons/bucket.asy
-2019/08/21 | 1463 | graphics/asymptote/GUI/res/icons/bucket.svg
-2019/08/21 | 232 | graphics/asymptote/GUI/res/icons/center.asy
-2019/08/21 | 143 | graphics/asymptote/GUI/res/icons/centerorigin.asy
-2019/08/21 | 1040 | graphics/asymptote/GUI/res/icons/centerorigin.svg
-2019/08/21 | 869 | graphics/asymptote/GUI/res/icons/center.svg
-2019/08/21 | 780 | graphics/asymptote/GUI/res/icons/check.svg
-2019/08/21 | 964 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
-2019/08/21 | 949 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
-2019/08/21 | 701 | graphics/asymptote/GUI/res/icons/circle.svg
-2019/08/21 | 140 | graphics/asymptote/GUI/res/icons/closedcurve.asy
-2019/08/21 | 1213 | graphics/asymptote/GUI/res/icons/closedcurve.svg
-2019/08/21 | 140 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
-2019/08/21 | 1072 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
-2019/08/21 | 838 | graphics/asymptote/GUI/res/icons/close-round.svg
-2019/08/21 | 1145 | graphics/asymptote/GUI/res/icons/code.svg
-2019/08/21 | 876 | graphics/asymptote/GUI/res/icons/edit.svg
-2019/08/21 | 1003 | graphics/asymptote/GUI/res/icons/eye.svg
-2019/08/21 | 1919 | graphics/asymptote/GUI/res/icons/filledbucket.svg
-2019/08/21 | 1764 | graphics/asymptote/GUI/res/icons/grid.svg
-2019/08/21 | 915 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
-2019/08/21 | 133 | graphics/asymptote/GUI/res/icons/opencurve.asy
-2019/08/21 | 1165 | graphics/asymptote/GUI/res/icons/opencurve.svg
-2019/08/21 | 133 | graphics/asymptote/GUI/res/icons/openpolygon.asy
-2019/08/21 | 1058 | graphics/asymptote/GUI/res/icons/openpolygon.svg
-2019/08/21 | 759 | graphics/asymptote/GUI/res/icons/plus-round.svg
-2019/08/21 | 1711 | graphics/asymptote/GUI/res/icons.qrc
-2019/08/21 | 620 | graphics/asymptote/GUI/res/icons/save.svg
-2019/08/21 | 1920 | graphics/asymptote/GUI/res/icons/social-python.svg
-2019/08/21 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
-2019/08/21 | 221 | graphics/asymptote/GUI/res/icons/text.svg
-2019/08/21 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
-2019/08/21 | 1393 | graphics/asymptote/GUI/SetCustomAnchor.py
-2019/08/21 | 394 | graphics/asymptote/GUI/setup.py
-2019/08/21 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
-2019/08/21 | 3249 | graphics/asymptote/GUI/Widg_addLabel.py
-2019/08/21 | 883 | graphics/asymptote/GUI/Widg_addPolyOpt.py
-2019/08/21 | 1665 | graphics/asymptote/GUI/Widg_editBezier.py
-2019/08/21 | 72112 | graphics/asymptote/GUI/Window1.py
-2019/08/21 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
-2019/08/21 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
-2019/08/21 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
-2019/08/21 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
-2019/08/21 | 2148 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
-2019/08/21 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
-2019/08/21 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
-2019/08/21 | 68758 | graphics/asymptote/GUI/windows/window1.ui
-2019/08/21 | 50403 | graphics/asymptote/GUI/xasy2asy.py
-2019/08/21 | 821 | graphics/asymptote/GUI/xasyArgs.py
-2019/08/21 | 13550 | graphics/asymptote/GUI/xasyBezierInterface.py
-2019/08/21 | 2554 | graphics/asymptote/GUI/xasyFile.py
-2019/08/21 | 5048 | graphics/asymptote/GUI/xasyOptions.py
-2019/08/21 | 285 | graphics/asymptote/GUI/xasy.py
-2019/08/21 | 599 | graphics/asymptote/GUI/xasyStrings.py
-2019/08/21 | 710 | graphics/asymptote/GUI/xasySvg.py
-2019/08/21 | 964 | graphics/asymptote/GUI/xasyTransform.py
-2019/08/21 | 1504 | graphics/asymptote/GUI/xasyUtils.py
-2019/08/21 | 238 | graphics/asymptote/GUI/xasyValidator.py
-2019/08/21 | 12744 | graphics/asymptote/impdatum.cc
-2019/08/21 | 10445 | graphics/asymptote/INSTALL
-2019/08/21 | 13663 | graphics/asymptote/install-sh
-2019/08/21 | 1986 | graphics/asymptote/inst.h
-2019/08/21 | 4994 | graphics/asymptote/interact.cc
-2019/08/21 | 1309 | graphics/asymptote/interact.h
-2019/08/21 | 5857 | graphics/asymptote/item.h
-2019/08/21 | 609 | graphics/asymptote/keywords.cc
-2019/08/21 | 1253 | graphics/asymptote/keywords.pl
-2019/08/21 | 22355 | graphics/asymptote/knot.cc
-2019/08/21 | 12300 | graphics/asymptote/knot.h
-2019/08/21 | 345 | graphics/asymptote/lexical.h
-2019/08/21 | 83435 | graphics/asymptote/lex.yy.cc
-2019/08/21 | 503734 | graphics/asymptote/libatomic_ops-7.6.10.tar.gz
-2019/08/21 | 35147 | graphics/asymptote/LICENSE
-2019/08/21 | 7639 | graphics/asymptote/LICENSE.LESSER
-2019/08/21 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
-2019/08/21 | 2195 | graphics/asymptote/locate.cc
-2019/08/21 | 560 | graphics/asymptote/locate.h
-2019/08/21 | 5301 | graphics/asymptote/main.cc
-2019/08/21 | 11042 | graphics/asymptote/Makefile.in
-2019/08/21 | 2024 | graphics/asymptote/material.h
-2019/08/21 | 6425 | graphics/asymptote/mathop.h
-2019/08/21 | 5070 | graphics/asymptote/memory.h
-2019/08/21 | 720 | graphics/asymptote/mod.h
-2019/08/21 | 908 | graphics/asymptote/modifier.h
-2019/08/21 | 7445 | graphics/asymptote/name.cc
-2019/08/21 | 5239 | graphics/asymptote/name.h
-2019/08/21 | 4269 | graphics/asymptote/newexp.cc
-2019/08/21 | 1278 | graphics/asymptote/newexp.h
-2019/08/21 | 917 | graphics/asymptote/opcodes.h
-2019/08/21 | 1050 | graphics/asymptote/opsymbols.pl
-2019/08/21 | 4548 | graphics/asymptote/pair.h
-2019/08/21 | 3505 | graphics/asymptote/parser.cc
-2019/08/21 | 852 | graphics/asymptote/parser.h
-2019/08/21 | 5262 | graphics/asymptote/patches/bison.patch
-2019/08/21 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
-2019/08/21 | 1311 | graphics/asymptote/patches/dvipdf
-2019/08/21 | 113 | graphics/asymptote/patches/fixmem.reg
-2019/08/21 | 1524 | graphics/asymptote/patches/flex.patch
-2019/08/21 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
-2019/08/21 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
-2019/08/21 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
-2019/08/21 | 981 | graphics/asymptote/patches/README
-2019/08/21 | 38066 | graphics/asymptote/path3.cc
-2019/08/21 | 10459 | graphics/asymptote/path3.h
-2019/08/21 | 33988 | graphics/asymptote/path.cc
-2019/08/21 | 11580 | graphics/asymptote/path.h
-2019/08/21 | 1594 | graphics/asymptote/pen.cc
-2019/08/21 | 28136 | graphics/asymptote/pen.h
-2019/08/21 | 39229 | graphics/asymptote/picture.cc
-2019/08/21 | 3396 | graphics/asymptote/picture.h
-2019/08/21 | 5028 | graphics/asymptote/pipestream.cc
-2019/08/21 | 2624 | graphics/asymptote/pipestream.h
-2019/08/21 | 138 | graphics/asymptote/Pipfile
-2019/08/21 | 2526 | graphics/asymptote/policy.h
-2019/08/21 | 637 | graphics/asymptote/prcfile.h
-2019/08/21 | 974 | graphics/asymptote/prc/Makefile
-2019/08/21 | 70751 | graphics/asymptote/prc/oPRCFile.cc
-2019/08/21 | 51432 | graphics/asymptote/prc/oPRCFile.h
-2019/08/21 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
-2019/08/21 | 2518 | graphics/asymptote/prc/PRCbitStream.h
-2019/08/21 | 177246 | graphics/asymptote/prc/PRCdouble.cc
-2019/08/21 | 3765 | graphics/asymptote/prc/PRCdouble.h
-2019/08/21 | 30208 | graphics/asymptote/prc/PRC.h
-2019/08/21 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
-2019/08/21 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
-2019/08/21 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
-2019/08/21 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
-2019/08/21 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
-2019/08/21 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
-2019/08/21 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
-2019/08/21 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
-2019/08/21 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
-2019/08/21 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
-2019/08/21 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
-2019/08/21 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
-2019/08/21 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
-2019/08/21 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
-2019/08/21 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
-2019/08/21 | 95 | graphics/asymptote/prc/test.asy
-2019/08/21 | 36243 | graphics/asymptote/prc/test.cc
-2019/08/21 | 66751 | graphics/asymptote/prc/writePRC.cc
-2019/08/21 | 48481 | graphics/asymptote/prc/writePRC.h
-2019/08/21 | 116025 | graphics/asymptote/predicates.cc
-2019/08/21 | 986 | graphics/asymptote/predicates.h
-2019/08/21 | 1234 | graphics/asymptote/primitives.h
-2019/08/21 | 25292 | graphics/asymptote/process.cc
-2019/08/21 | 3003 | graphics/asymptote/process.h
-2019/08/21 | 2339 | graphics/asymptote/profile.py
-2019/08/21 | 9892 | graphics/asymptote/profiler.h
-2019/08/21 | 3275 | graphics/asymptote/program.cc
-2019/08/21 | 2562 | graphics/asymptote/program.h
-2019/08/21 | 18964 | graphics/asymptote/psfile.cc
-2019/08/21 | 9306 | graphics/asymptote/psfile.h
-2019/08/21 | 5963 | graphics/asymptote/quaternion.cc
-2019/08/21 | 4961 | graphics/asymptote/quaternion.h
-2019/08/21 | 2652 | graphics/asymptote/README
-2019/08/21 | 1704 | graphics/asymptote/record.cc
-2019/08/21 | 2738 | graphics/asymptote/record.h
-2019/08/21 | 1098 | graphics/asymptote/refaccess.cc
-2019/08/21 | 1936 | graphics/asymptote/refaccess.h
-2019/08/21 | 113052 | graphics/asymptote/ReleaseNotes
-2019/08/21 | 29 | graphics/asymptote/revision.cc
-2019/08/21 | 3553 | graphics/asymptote/rounding.h
-2019/08/21 | 69407 | graphics/asymptote/runarray.cc
-2019/08/21 | 1492 | graphics/asymptote/runarray.h
-2019/08/21 | 45291 | graphics/asymptote/runarray.in
-2019/08/21 | 2661 | graphics/asymptote/runbacktrace.cc
-2019/08/21 | 169 | graphics/asymptote/runbacktrace.h
-2019/08/21 | 833 | graphics/asymptote/runbacktrace.in
-2019/08/21 | 17743 | graphics/asymptote/runfile.cc
-2019/08/21 | 969 | graphics/asymptote/runfile.h
-2019/08/21 | 5924 | graphics/asymptote/runfile.in
-2019/08/21 | 8157 | graphics/asymptote/runhistory.cc
-2019/08/21 | 161 | graphics/asymptote/runhistory.h
-2019/08/21 | 5119 | graphics/asymptote/runhistory.in
-2019/08/21 | 16702 | graphics/asymptote/runlabel.cc
-2019/08/21 | 153 | graphics/asymptote/runlabel.h
-2019/08/21 | 12959 | graphics/asymptote/runlabel.in
-2019/08/21 | 22474 | graphics/asymptote/runmath.cc
-2019/08/21 | 269 | graphics/asymptote/runmath.h
-2019/08/21 | 9426 | graphics/asymptote/runmath.in
-2019/08/21 | 16348 | graphics/asymptote/runpair.cc
-2019/08/21 | 299 | graphics/asymptote/runpair.h
-2019/08/21 | 4246 | graphics/asymptote/runpair.in
-2019/08/21 | 25218 | graphics/asymptote/runpath3d.cc
-2019/08/21 | 186 | graphics/asymptote/runpath3d.h
-2019/08/21 | 8051 | graphics/asymptote/runpath3d.in
-2019/08/21 | 26292 | graphics/asymptote/runpath.cc
-2019/08/21 | 177 | graphics/asymptote/runpath.h
-2019/08/21 | 8368 | graphics/asymptote/runpath.in
-2019/08/21 | 55152 | graphics/asymptote/runpicture.cc
-2019/08/21 | 191 | graphics/asymptote/runpicture.h
-2019/08/21 | 18842 | graphics/asymptote/runpicture.in
-2019/08/21 | 18772 | graphics/asymptote/runstring.cc
-2019/08/21 | 188 | graphics/asymptote/runstring.h
-2019/08/21 | 9871 | graphics/asymptote/runstring.in
-2019/08/21 | 12522 | graphics/asymptote/runsystem.cc
-2019/08/21 | 157 | graphics/asymptote/runsystem.h
-2019/08/21 | 5098 | graphics/asymptote/runsystem.in
-2019/08/21 | 1343 | graphics/asymptote/runtimebase.in
-2019/08/21 | 60604 | graphics/asymptote/runtime.cc
-2019/08/21 | 1163 | graphics/asymptote/runtime.h
-2019/08/21 | 20758 | graphics/asymptote/runtime.in
-2019/08/21 | 7230 | graphics/asymptote/runtime.pl
-2019/08/21 | 13700 | graphics/asymptote/runtriple.cc
-2019/08/21 | 320 | graphics/asymptote/runtriple.h
-2019/08/21 | 2725 | graphics/asymptote/runtriple.in
-2019/08/21 | 2113 | graphics/asymptote/seconds.h
-2019/08/21 | 48796 | graphics/asymptote/settings.cc
-2019/08/21 | 2495 | graphics/asymptote/settings.h
-2019/08/21 | 2753 | graphics/asymptote/shaders.cc
-2019/08/21 | 785 | graphics/asymptote/shaders.h
-2019/08/21 | 6660 | graphics/asymptote/simpson.cc
-2019/08/21 | 14448 | graphics/asymptote/stack.cc
-2019/08/21 | 3328 | graphics/asymptote/stack.h
-2019/08/21 | 958 | graphics/asymptote/statistics.h
-2019/08/21 | 12103 | graphics/asymptote/stm.cc
-2019/08/21 | 4400 | graphics/asymptote/stm.h
-2019/08/21 | 8912 | graphics/asymptote/symbol.cc
-2019/08/21 | 2662 | graphics/asymptote/symbol.h
-2019/08/21 | 2697 | graphics/asymptote/table.h
-2019/08/21 | 620 | graphics/asymptote/tests/arith/integer.asy
-2019/08/21 | 449 | graphics/asymptote/tests/arith/pair.asy
-2019/08/21 | 193 | graphics/asymptote/tests/arith/random.asy
-2019/08/21 | 383 | graphics/asymptote/tests/arith/real.asy
-2019/08/21 | 1710 | graphics/asymptote/tests/arith/roots.asy
-2019/08/21 | 639 | graphics/asymptote/tests/arith/transform.asy
-2019/08/21 | 244 | graphics/asymptote/tests/arith/triple.asy
-2019/08/21 | 936 | graphics/asymptote/tests/array/array.asy
-2019/08/21 | 680 | graphics/asymptote/tests/array/delete.asy
-2019/08/21 | 737 | graphics/asymptote/tests/array/determinant.asy
-2019/08/21 | 1927 | graphics/asymptote/tests/array/fields.asy
-2019/08/21 | 4841 | graphics/asymptote/tests/array/slice.asy
-2019/08/21 | 966 | graphics/asymptote/tests/array/solve.asy
-2019/08/21 | 746 | graphics/asymptote/tests/array/sort.asy
-2019/08/21 | 1096 | graphics/asymptote/tests/array/transpose.asy
-2019/08/21 | 276 | graphics/asymptote/tests/bench/6000circles.asy
-2019/08/21 | 2222 | graphics/asymptote/tests/frames/loop.asy
-2019/08/21 | 202 | graphics/asymptote/tests/frames/stat2.asy
-2019/08/21 | 158 | graphics/asymptote/tests/frames/stat.asy
-2019/08/21 | 62 | graphics/asymptote/tests/gc/array.asy
-2019/08/21 | 102 | graphics/asymptote/tests/gc/file.asy
-2019/08/21 | 54 | graphics/asymptote/tests/gc/funcall.asy
-2019/08/21 | 65 | graphics/asymptote/tests/gc/guide.asy
-2019/08/21 | 143 | graphics/asymptote/tests/gc/label.asy
-2019/08/21 | 124 | graphics/asymptote/tests/gc/path.asy
-2019/08/21 | 72 | graphics/asymptote/tests/gc/pen.asy
-2019/08/21 | 193 | graphics/asymptote/tests/gc/shipout.asy
-2019/08/21 | 77 | graphics/asymptote/tests/gc/string.asy
-2019/08/21 | 129 | graphics/asymptote/tests/gc/struct.asy
-2019/08/21 | 70 | graphics/asymptote/tests/gc/transform.asy
-2019/08/21 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
-2019/08/21 | 11907 | graphics/asymptote/tests/gsl/random.asy
-2019/08/21 | 1209 | graphics/asymptote/tests/imp/unravel.asy
-2019/08/21 | 308 | graphics/asymptote/tests/Makefile
-2019/08/21 | 18 | graphics/asymptote/tests/output/circle.asy
-2019/08/21 | 22 | graphics/asymptote/tests/output/line.asy
-2019/08/21 | 1284 | graphics/asymptote/tests/output/Makefile
-2019/08/21 | 1384 | graphics/asymptote/tests/pic/trans.asy
-2019/08/21 | 236 | graphics/asymptote/tests/string/erase.asy
-2019/08/21 | 182 | graphics/asymptote/tests/string/find.asy
-2019/08/21 | 109 | graphics/asymptote/tests/string/insert.asy
-2019/08/21 | 132 | graphics/asymptote/tests/string/length.asy
-2019/08/21 | 187 | graphics/asymptote/tests/string/rfind.asy
-2019/08/21 | 118 | graphics/asymptote/tests/string/substr.asy
-2019/08/21 | 238 | graphics/asymptote/tests/TestLib.asy
-2019/08/21 | 159 | graphics/asymptote/tests/types/cast.asy
-2019/08/21 | 6503 | graphics/asymptote/tests/types/constructor.asy
-2019/08/21 | 155 | graphics/asymptote/tests/types/ecast.asy
-2019/08/21 | 3375 | graphics/asymptote/tests/types/guide.asy
-2019/08/21 | 224 | graphics/asymptote/tests/types/init.asy
-2019/08/21 | 4242 | graphics/asymptote/tests/types/keyword.asy
-2019/08/21 | 4072 | graphics/asymptote/tests/types/order.asy
-2019/08/21 | 2731 | graphics/asymptote/tests/types/resolve.asy
-2019/08/21 | 308 | graphics/asymptote/tests/types/shadow.asy
-2019/08/21 | 1331 | graphics/asymptote/tests/types/spec.asy
-2019/08/21 | 1189 | graphics/asymptote/tests/types/var.asy
-2019/08/21 | 20214 | graphics/asymptote/texfile.cc
-2019/08/21 | 10644 | graphics/asymptote/texfile.h
-2019/08/21 | 1293 | graphics/asymptote/TODO
-2019/08/21 | 6185 | graphics/asymptote/transform.h
-2019/08/21 | 10654 | graphics/asymptote/tr.cc
-2019/08/21 | 3575 | graphics/asymptote/tr.h
-2019/08/21 | 7912 | graphics/asymptote/triple.h
-2019/08/21 | 13884 | graphics/asymptote/types.cc
-2019/08/21 | 15372 | graphics/asymptote/types.h
-2019/08/21 | 9756 | graphics/asymptote/util.cc
-2019/08/21 | 4515 | graphics/asymptote/util.h
-2019/08/21 | 1978 | graphics/asymptote/varinit.cc
-2019/08/21 | 2013 | graphics/asymptote/varinit.h
-2019/08/21 | 901 | graphics/asymptote/virtualfieldaccess.cc
-2019/08/21 | 2328 | graphics/asymptote/virtualfieldaccess.h
-2019/08/21 | 750 | graphics/asymptote/vm.h
-2019/08/21 | 219 | graphics/asymptote/wce
-2019/08/21 | 1902 | graphics/asymptote/webgl/arcball-0.01.js
-2019/08/21 | 1902 | graphics/asymptote/webgl/arcball.js
-2019/08/21 | 1118 | graphics/asymptote/webgl/arcball-min-0.01.js
-2019/08/21 | 1264 | graphics/asymptote/webgl/data.js
-2019/08/21 | 21180 | graphics/asymptote/webgl/gl-0.01.js
-2019/08/21 | 27084 | graphics/asymptote/webgl/gl.js
-2019/08/21 | 54209 | graphics/asymptote/webgl/gl-matrix-min-2.3.2.js
-2019/08/21 | 104644 | graphics/asymptote/webgl/glm-js-min-2.2.2.js
-2019/08/21 | 379 | graphics/asymptote/webgl/WebGLfooter.html
-2019/08/21 | 5456 | graphics/asymptote/webgl/WebGLheader.html
-2019/08/21 | 6512 | graphics/asymptote/xstream.h
-2019/08/21 | 13932116 | graphics/asymptote.zip
+2019/09/29 | 255 | graphics/asymptote/BUGS
+2019/09/29 | 846 | graphics/asymptote/build-scripts/build-asygl
+2019/09/29 | 2293 | graphics/asymptote/build-scripts/build-asymptote
+2019/09/29 | 3436 | graphics/asymptote/build-scripts/build-asymptote.dos
+2019/09/29 | 1907 | graphics/asymptote/build-scripts/HOWTO-MSWindows
+2019/09/29 | 288 | graphics/asymptote/build-scripts/README-binaries
+2019/09/29 | 31244 | graphics/asymptote/builtin.cc
+2019/09/29 | 1637 | graphics/asymptote/builtin.h
+2019/09/29 | 1151 | graphics/asymptote/callable.cc
+2019/09/29 | 1642 | graphics/asymptote/callable.h
+2019/09/29 | 1191 | graphics/asymptote/camperror.cc
+2019/09/29 | 818 | graphics/asymptote/camperror.h
+2019/09/29 | 13339 | graphics/asymptote/camp.l
+2019/09/29 | 127885 | graphics/asymptote/camp.tab.cc
+2019/09/29 | 4089 | graphics/asymptote/camp.tab.h
+2019/09/29 | 20029 | graphics/asymptote/camp.y
+2019/09/29 | 4687 | graphics/asymptote/castop.h
+2019/09/29 | 1348681 | graphics/asymptote/ChangeLog
+2019/09/29 | 7808 | graphics/asymptote/coder.cc
+2019/09/29 | 11658 | graphics/asymptote/coder.h
+2019/09/29 | 1126 | graphics/asymptote/coenv.cc
+2019/09/29 | 908 | graphics/asymptote/coenv.h
+2019/09/29 | 1520 | graphics/asymptote/common.h
+2019/09/29 | 44166 | graphics/asymptote/config.guess
+2019/09/29 | 6612 | graphics/asymptote/config.h.in
+2019/09/29 | 36141 | graphics/asymptote/config.sub
+2019/09/29 | 280081 | graphics/asymptote/configure
+2019/09/29 | 14333 | graphics/asymptote/configure.ac
+2019/09/29 | 3673 | graphics/asymptote/constructor.cc
+2019/09/29 | 20893 | graphics/asymptote/dec.cc
+2019/09/29 | 15845 | graphics/asymptote/dec.h
+2019/09/29 | 5897 | graphics/asymptote/Delaunay.cc
+2019/09/29 | 384 | graphics/asymptote/Delaunay.h
+2019/09/29 | 8116 | graphics/asymptote/doc/asy.1
+2019/09/29 | 1005 | graphics/asymptote/doc/asy.1.begin
+2019/09/29 | 333 | graphics/asymptote/doc/asy.1.end
+2019/09/29 | 2800 | graphics/asymptote/doc/asycolors.sty
+2019/09/29 | 18136 | graphics/asymptote/doc/asy-latex.dtx
+2019/09/29 | 194549 | graphics/asymptote/doc/asy-latex.pdf
+2019/09/29 | 1294522 | graphics/asymptote/doc/asymptote.pdf
+2019/09/29 | 9846 | graphics/asymptote/doc/asymptote.sty
+2019/09/29 | 384516 | graphics/asymptote/doc/asymptote.texi
+2019/09/29 | 121144 | graphics/asymptote/doc/asyRefCard.pdf
+2019/09/29 | 20051 | graphics/asymptote/doc/asyRefCard.tex
+2019/09/29 | 246 | graphics/asymptote/doc/axis3.asy
+2019/09/29 | 416 | graphics/asymptote/doc/bezier2.asy
+2019/09/29 | 81 | graphics/asymptote/doc/bezier.asy
+2019/09/29 | 234 | graphics/asymptote/doc/beziercurve.asy
+2019/09/29 | 41 | graphics/asymptote/doc/bigdiagonal.asy
+2019/09/29 | 306 | graphics/asymptote/doc/binarytreetest.asy
+2019/09/29 | 677 | graphics/asymptote/doc/Bode.asy
+2019/09/29 | 524 | graphics/asymptote/doc/brokenaxis.asy
+2019/09/29 | 1391 | graphics/asymptote/doc/CAD1.asy
+2019/09/29 | 167754 | graphics/asymptote/doc/CAD.pdf
+2019/09/29 | 10196 | graphics/asymptote/doc/CAD.tex
+2019/09/29 | 506 | graphics/asymptote/doc/CDlabel.asy
+2019/09/29 | 4348 | graphics/asymptote/doc/colo-asy.tex
+2019/09/29 | 49 | graphics/asymptote/doc/colons.asy
+2019/09/29 | 1620 | graphics/asymptote/doc/colors.asy
+2019/09/29 | 243 | graphics/asymptote/doc/cube.asy
+2019/09/29 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
+2019/09/29 | 218 | graphics/asymptote/doc/datagraph.asy
+2019/09/29 | 24 | graphics/asymptote/doc/diagonal.asy
+2019/09/29 | 2882 | graphics/asymptote/doc/diatom.asy
+2019/09/29 | 4067 | graphics/asymptote/doc/diatom.csv
+2019/09/29 | 49 | graphics/asymptote/doc/dots.asy
+2019/09/29 | 1051 | graphics/asymptote/doc/eetomumu.asy
+2019/09/29 | 2039 | graphics/asymptote/doc/elliptic.asy
+2019/09/29 | 912 | graphics/asymptote/doc/errorbars.asy
+2019/09/29 | 202 | graphics/asymptote/doc/exp.asy
+2019/09/29 | 343 | graphics/asymptote/doc/externalprc.tex
+2019/09/29 | 19597 | graphics/asymptote/doc/external-proposal.html
+2019/09/29 | 25137 | graphics/asymptote/doc/extra/intro.asy
+2019/09/29 | 40764 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
+2019/09/29 | 63140 | graphics/asymptote/doc/FAQ/asy-faq.info
+2019/09/29 | 9202 | graphics/asymptote/doc/FAQ/bfnnconv.pl
+2019/09/29 | 13663 | graphics/asymptote/doc/FAQ/install-sh
+2019/09/29 | 1000 | graphics/asymptote/doc/FAQ/Makefile
+2019/09/29 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
+2019/09/29 | 9725 | graphics/asymptote/doc/FAQ/m-html.pl
+2019/09/29 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
+2019/09/29 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
+2019/09/29 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
+2019/09/29 | 238 | graphics/asymptote/doc/filegraph.asy
+2019/09/29 | 26 | graphics/asymptote/doc/filegraph.dat
+2019/09/29 | 604 | graphics/asymptote/doc/flow.asy
+2019/09/29 | 862 | graphics/asymptote/doc/flowchartdemo.asy
+2019/09/29 | 464 | graphics/asymptote/doc/GaussianSurface.asy
+2019/09/29 | 376 | graphics/asymptote/doc/generalaxis3.asy
+2019/09/29 | 277 | graphics/asymptote/doc/generalaxis.asy
+2019/09/29 | 754 | graphics/asymptote/doc/graphmarkers.asy
+2019/09/29 | 426 | graphics/asymptote/doc/grid3xyz.asy
+2019/09/29 | 279 | graphics/asymptote/doc/hatch.asy
+2019/09/29 | 423 | graphics/asymptote/doc/helix.asy
+2019/09/29 | 330 | graphics/asymptote/doc/HermiteSpline.asy
+2019/09/29 | 441 | graphics/asymptote/doc/histogram.asy
+2019/09/29 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
+2019/09/29 | 500 | graphics/asymptote/doc/Hobbydir.asy
+2019/09/29 | 380 | graphics/asymptote/doc/icon.asy
+2019/09/29 | 401 | graphics/asymptote/doc/image.asy
+2019/09/29 | 872 | graphics/asymptote/doc/imagecontour.asy
+2019/09/29 | 13663 | graphics/asymptote/doc/install-sh
+2019/09/29 | 357 | graphics/asymptote/doc/irregularcontour.asy
+2019/09/29 | 442 | graphics/asymptote/doc/join3.asy
+2019/09/29 | 261 | graphics/asymptote/doc/join.asy
+2019/09/29 | 417 | graphics/asymptote/doc/knots.asy
+2019/09/29 | 121 | graphics/asymptote/doc/labelsquare.asy
+2019/09/29 | 144 | graphics/asymptote/doc/latexmkrc
+2019/09/29 | 150 | graphics/asymptote/doc/latexmkrc_asydir
+2019/09/29 | 3106 | graphics/asymptote/doc/latexusage.tex
+2019/09/29 | 1025 | graphics/asymptote/doc/leastsquares.asy
+2019/09/29 | 6318 | graphics/asymptote/doc/leastsquares.dat
+2019/09/29 | 410 | graphics/asymptote/doc/legend.asy
+2019/09/29 | 366 | graphics/asymptote/doc/lineargraph0.asy
+2019/09/29 | 373 | graphics/asymptote/doc/lineargraph.asy
+2019/09/29 | 416 | graphics/asymptote/doc/linetype.asy
+2019/09/29 | 423 | graphics/asymptote/doc/log2graph.asy
+2019/09/29 | 262 | graphics/asymptote/doc/loggraph.asy
+2019/09/29 | 382 | graphics/asymptote/doc/loggrid.asy
+2019/09/29 | 480 | graphics/asymptote/doc/logimage.asy
+2019/09/29 | 619 | graphics/asymptote/doc/logo.asy
+2019/09/29 | 314 | graphics/asymptote/doc/logticks.asy
+2019/09/29 | 3023 | graphics/asymptote/doc/Makefile.in
+2019/09/29 | 293 | graphics/asymptote/doc/makepen.asy
+2019/09/29 | 2653 | graphics/asymptote/doc/markers1.asy
+2019/09/29 | 877 | graphics/asymptote/doc/markers2.asy
+2019/09/29 | 288 | graphics/asymptote/doc/mexicanhat.asy
+2019/09/29 | 374 | graphics/asymptote/doc/monthaxis.asy
+2019/09/29 | 458 | graphics/asymptote/doc/multicontour.asy
+2019/09/29 | 3497 | graphics/asymptote/doc/ocg.sty
+2019/09/29 | 115 | graphics/asymptote/doc/onecontour.asy
+2019/09/29 | 240 | graphics/asymptote/doc/parametricgraph.asy
+2019/09/29 | 498 | graphics/asymptote/doc/penfunctionimage.asy
+2019/09/29 | 219 | graphics/asymptote/doc/penimage.asy
+2019/09/29 | 2771 | graphics/asymptote/doc/pixel.pdf
+2019/09/29 | 354 | graphics/asymptote/doc/planes.asy
+2019/09/29 | 458387 | graphics/asymptote/doc/png/asymptote.info
+2019/09/29 | 1469 | graphics/asymptote/doc/png/Makefile.in
+2019/09/29 | 49 | graphics/asymptote/doc/quartercircle.asy
+2019/09/29 | 354 | graphics/asymptote/doc/reloadpdf.tex
+2019/09/29 | 157 | graphics/asymptote/doc/saddle.asy
+2019/09/29 | 355 | graphics/asymptote/doc/scaledgraph.asy
+2019/09/29 | 821 | graphics/asymptote/doc/secondaryaxis.asy
+2019/09/29 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
+2019/09/29 | 256 | graphics/asymptote/doc/shadedtiling.asy
+2019/09/29 | 154 | graphics/asymptote/doc/slopefield1.asy
+2019/09/29 | 52 | graphics/asymptote/doc/square.asy
+2019/09/29 | 341 | graphics/asymptote/doc/subpictures.asy
+2019/09/29 | 123 | graphics/asymptote/doc/superpath.asy
+2019/09/29 | 77408 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
+2019/09/29 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
+2019/09/29 | 390 | graphics/asymptote/doc/tile.asy
+2019/09/29 | 396 | graphics/asymptote/doc/triangulate.asy
+2019/09/29 | 186 | graphics/asymptote/doc/unitcircle3.asy
+2019/09/29 | 147 | graphics/asymptote/doc/vectorfield.asy
+2019/09/29 | 1746 | graphics/asymptote/doc/westnile.asy
+2019/09/29 | 4727 | graphics/asymptote/doc/westnile.csv
+2019/09/29 | 880 | graphics/asymptote/doc/xasy.1x
+2019/09/29 | 1878 | graphics/asymptote/drawclipbegin.h
+2019/09/29 | 1213 | graphics/asymptote/drawclipend.h
+2019/09/29 | 12460 | graphics/asymptote/drawelement.h
+2019/09/29 | 4619 | graphics/asymptote/drawfill.cc
+2019/09/29 | 6570 | graphics/asymptote/drawfill.h
+2019/09/29 | 496 | graphics/asymptote/drawgrestore.h
+2019/09/29 | 2924 | graphics/asymptote/drawgroup.h
+2019/09/29 | 466 | graphics/asymptote/drawgsave.h
+2019/09/29 | 3042 | graphics/asymptote/drawimage.h
+2019/09/29 | 6865 | graphics/asymptote/drawlabel.cc
+2019/09/29 | 2163 | graphics/asymptote/drawlabel.h
+2019/09/29 | 773 | graphics/asymptote/drawlayer.h
+2019/09/29 | 5908 | graphics/asymptote/drawpath3.cc
+2019/09/29 | 5326 | graphics/asymptote/drawpath3.h
+2019/09/29 | 3522 | graphics/asymptote/drawpath.cc
+2019/09/29 | 674 | graphics/asymptote/drawpath.h
+2019/09/29 | 22833 | graphics/asymptote/drawsurface.cc
+2019/09/29 | 19885 | graphics/asymptote/drawsurface.h
+2019/09/29 | 1279 | graphics/asymptote/drawverbatim.h
+2019/09/29 | 20738 | graphics/asymptote/entry.cc
+2019/09/29 | 14795 | graphics/asymptote/entry.h
+2019/09/29 | 5465 | graphics/asymptote/env.cc
+2019/09/29 | 1142 | graphics/asymptote/envcompleter.cc
+2019/09/29 | 845 | graphics/asymptote/envcompleter.h
+2019/09/29 | 4575 | graphics/asymptote/env.h
+2019/09/29 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
+2019/09/29 | 1753 | graphics/asymptote/errormsg.cc
+2019/09/29 | 5098 | graphics/asymptote/errormsg.h
+2019/09/29 | 9251 | graphics/asymptote/errors
+2019/09/29 | 6911 | graphics/asymptote/errortest.asy
+2019/09/29 | 657 | graphics/asymptote/examples/100d.views
+2019/09/29 | 309 | graphics/asymptote/examples/1overx.asy
+2019/09/29 | 4158 | graphics/asymptote/examples/advection.asy
+2019/09/29 | 245 | graphics/asymptote/examples/alignbox.asy
+2019/09/29 | 2832 | graphics/asymptote/examples/alignedaxis.asy
+2019/09/29 | 946 | graphics/asymptote/examples/animations/cube.asy
+2019/09/29 | 160672 | graphics/asymptote/examples/animations/dice.u3d
+2019/09/29 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
+2019/09/29 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
+2019/09/29 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
+2019/09/29 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
+2019/09/29 | 414 | graphics/asymptote/examples/animations/glmovie.asy
+2019/09/29 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
+2019/09/29 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
+2019/09/29 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
+2019/09/29 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
+2019/09/29 | 1238 | graphics/asymptote/examples/animations/slidemovies.asy
+2019/09/29 | 832 | graphics/asymptote/examples/animations/sphere.asy
+2019/09/29 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
+2019/09/29 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
+2019/09/29 | 1120 | graphics/asymptote/examples/animations/wheel.asy
+2019/09/29 | 236 | graphics/asymptote/examples/annotation.asy
+2019/09/29 | 661 | graphics/asymptote/examples/arrows3.asy
+2019/09/29 | 497 | graphics/asymptote/examples/bars3.asy
+2019/09/29 | 1033 | graphics/asymptote/examples/basealign.asy
+2019/09/29 | 395 | graphics/asymptote/examples/BezierPatch.asy
+2019/09/29 | 581 | graphics/asymptote/examples/BezierSaddle.asy
+2019/09/29 | 1526 | graphics/asymptote/examples/BezierSurface.asy
+2019/09/29 | 199 | graphics/asymptote/examples/BezierTriangle.asy
+2019/09/29 | 154 | graphics/asymptote/examples/billboard.asy
+2019/09/29 | 513 | graphics/asymptote/examples/buildcycle.asy
+2019/09/29 | 233 | graphics/asymptote/examples/cardioid.asy
+2019/09/29 | 485 | graphics/asymptote/examples/cards.asy
+2019/09/29 | 691 | graphics/asymptote/examples/centroidfg.asy
+2019/09/29 | 322 | graphics/asymptote/examples/cheese.asy
+2019/09/29 | 576 | graphics/asymptote/examples/circles.asy
+2019/09/29 | 228 | graphics/asymptote/examples/circumcircle.asy
+2019/09/29 | 762 | graphics/asymptote/examples/clockarray.asy
+2019/09/29 | 264 | graphics/asymptote/examples/coag.asy
+2019/09/29 | 424 | graphics/asymptote/examples/colorpatch.asy
+2019/09/29 | 465 | graphics/asymptote/examples/colorplanes.asy
+2019/09/29 | 739 | graphics/asymptote/examples/condor.asy
+2019/09/29 | 445 | graphics/asymptote/examples/cones.asy
+2019/09/29 | 1780 | graphics/asymptote/examples/conicurv.asy
+2019/09/29 | 255 | graphics/asymptote/examples/contextfonts.asy
+2019/09/29 | 778 | graphics/asymptote/examples/controlsystem.asy
+2019/09/29 | 123 | graphics/asymptote/examples/Coons.asy
+2019/09/29 | 235 | graphics/asymptote/examples/cos2theta.asy
+2019/09/29 | 582 | graphics/asymptote/examples/cos3.asy
+2019/09/29 | 461 | graphics/asymptote/examples/cosaddition.asy
+2019/09/29 | 5740 | graphics/asymptote/examples/cpkcolors.asy
+2019/09/29 | 573 | graphics/asymptote/examples/curvedlabel3.asy
+2019/09/29 | 177 | graphics/asymptote/examples/curvedlabel.asy
+2019/09/29 | 1835 | graphics/asymptote/examples/cyclohexane.asy
+2019/09/29 | 146 | graphics/asymptote/examples/cylinder.asy
+2019/09/29 | 506 | graphics/asymptote/examples/delu.asy
+2019/09/29 | 521 | graphics/asymptote/examples/dimension.asy
+2019/09/29 | 1216 | graphics/asymptote/examples/dragon.asy
+2019/09/29 | 1326 | graphics/asymptote/examples/electromagnetic.asy
+2019/09/29 | 323 | graphics/asymptote/examples/elevation.asy
+2019/09/29 | 398 | graphics/asymptote/examples/epix.asy
+2019/09/29 | 242 | graphics/asymptote/examples/equilateral.asy
+2019/09/29 | 549 | graphics/asymptote/examples/equilchord.asy
+2019/09/29 | 579 | graphics/asymptote/examples/exp3.asy
+2019/09/29 | 581 | graphics/asymptote/examples/extrudedcontour.asy
+2019/09/29 | 498 | graphics/asymptote/examples/fano.asy
+2019/09/29 | 1109 | graphics/asymptote/examples/fequlogo.asy
+2019/09/29 | 727 | graphics/asymptote/examples/fermi.asy
+2019/09/29 | 971 | graphics/asymptote/examples/filesurface.asy
+2019/09/29 | 5543 | graphics/asymptote/examples/filesurface.dat
+2019/09/29 | 574 | graphics/asymptote/examples/fillcontour.asy
+2019/09/29 | 4203 | graphics/asymptote/examples/fin.asy
+2019/09/29 | 710 | graphics/asymptote/examples/fjortoft.asy
+2019/09/29 | 548 | graphics/asymptote/examples/floatingdisk.asy
+2019/09/29 | 502 | graphics/asymptote/examples/floor.asy
+2019/09/29 | 683 | graphics/asymptote/examples/fractaltree.asy
+2019/09/29 | 1185 | graphics/asymptote/examples/functionshading.asy
+2019/09/29 | 499 | graphics/asymptote/examples/galleon.asy
+2019/09/29 | 714 | graphics/asymptote/examples/gamma3.asy
+2019/09/29 | 440 | graphics/asymptote/examples/gamma.asy
+2019/09/29 | 679 | graphics/asymptote/examples/genusthree.asy
+2019/09/29 | 1136 | graphics/asymptote/examples/genustwo.asy
+2019/09/29 | 384 | graphics/asymptote/examples/Gouraud.asy
+2019/09/29 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
+2019/09/29 | 76 | graphics/asymptote/examples/grid.asy
+2019/09/29 | 459 | graphics/asymptote/examples/hierarchy.asy
+2019/09/29 | 308 | graphics/asymptote/examples/hyperboloid.asy
+2019/09/29 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
+2019/09/29 | 1140 | graphics/asymptote/examples/imagehistogram.asy
+2019/09/29 | 610 | graphics/asymptote/examples/impact.asy
+2019/09/29 | 605 | graphics/asymptote/examples/integraltest.asy
+2019/09/29 | 4825 | graphics/asymptote/examples/interpolate1.asy
+2019/09/29 | 291 | graphics/asymptote/examples/jump.asy
+2019/09/29 | 1309 | graphics/asymptote/examples/Klein.asy
+2019/09/29 | 182 | graphics/asymptote/examples/label3.asy
+2019/09/29 | 196 | graphics/asymptote/examples/label3ribbon.asy
+2019/09/29 | 187 | graphics/asymptote/examples/label3solid.asy
+2019/09/29 | 546 | graphics/asymptote/examples/label3zoom.asy
+2019/09/29 | 264 | graphics/asymptote/examples/labelbox.asy
+2019/09/29 | 1114 | graphics/asymptote/examples/laserlattice.asy
+2019/09/29 | 136 | graphics/asymptote/examples/latticeshading.asy
+2019/09/29 | 688 | graphics/asymptote/examples/layers.asy
+2019/09/29 | 460 | graphics/asymptote/examples/lever.asy
+2019/09/29 | 654 | graphics/asymptote/examples/limit.asy
+2019/09/29 | 1908 | graphics/asymptote/examples/linearregression.asy
+2019/09/29 | 168 | graphics/asymptote/examples/lines.asy
+2019/09/29 | 980 | graphics/asymptote/examples/lmfit1.asy
+2019/09/29 | 206 | graphics/asymptote/examples/log.asy
+2019/09/29 | 349 | graphics/asymptote/examples/logdown.asy
+2019/09/29 | 1231 | graphics/asymptote/examples/logo3.asy
+2019/09/29 | 196 | graphics/asymptote/examples/lowint.asy
+2019/09/29 | 659 | graphics/asymptote/examples/lowupint.asy
+2019/09/29 | 479 | graphics/asymptote/examples/magnetic.asy
+2019/09/29 | 833 | graphics/asymptote/examples/markregular.asy
+2019/09/29 | 1950 | graphics/asymptote/examples/mergeExample.asy
+2019/09/29 | 5258 | graphics/asymptote/examples/mosaic.asy
+2019/09/29 | 2512 | graphics/asymptote/examples/mosquito.asy
+2019/09/29 | 1569 | graphics/asymptote/examples/near_earth.asy
+2019/09/29 | 649 | graphics/asymptote/examples/NURBScurve.asy
+2019/09/29 | 1020 | graphics/asymptote/examples/NURBSsphere.asy
+2019/09/29 | 1461 | graphics/asymptote/examples/NURBSsurface.asy
+2019/09/29 | 1251 | graphics/asymptote/examples/odetest.asy
+2019/09/29 | 309 | graphics/asymptote/examples/oneoverx.asy
+2019/09/29 | 788 | graphics/asymptote/examples/orthocenter.asy
+2019/09/29 | 254 | graphics/asymptote/examples/parametricelevation.asy
+2019/09/29 | 407 | graphics/asymptote/examples/parametricsurface.asy
+2019/09/29 | 711 | graphics/asymptote/examples/partialsurface.asy
+2019/09/29 | 1055 | graphics/asymptote/examples/partitionExample.asy
+2019/09/29 | 426 | graphics/asymptote/examples/pathintersectsurface.asy
+2019/09/29 | 3344 | graphics/asymptote/examples/pdb.asy
+2019/09/29 | 361 | graphics/asymptote/examples/phase.asy
+2019/09/29 | 83362 | graphics/asymptote/examples/piicon.eps
+2019/09/29 | 362 | graphics/asymptote/examples/pipeintersection.asy
+2019/09/29 | 3868 | graphics/asymptote/examples/pipes.asy
+2019/09/29 | 418 | graphics/asymptote/examples/planeproject.asy
+2019/09/29 | 930 | graphics/asymptote/examples/polararea.asy
+2019/09/29 | 628 | graphics/asymptote/examples/polarcircle.asy
+2019/09/29 | 326 | graphics/asymptote/examples/polardatagraph.asy
+2019/09/29 | 643 | graphics/asymptote/examples/p-orbital.asy
+2019/09/29 | 956 | graphics/asymptote/examples/poster.asy
+2019/09/29 | 58 | graphics/asymptote/examples/progrid.asy
+2019/09/29 | 373 | graphics/asymptote/examples/projectelevation.asy
+2019/09/29 | 438 | graphics/asymptote/examples/projectrevolution.asy
+2019/09/29 | 747 | graphics/asymptote/examples/pseudosphere.asy
+2019/09/29 | 557 | graphics/asymptote/examples/Pythagoras.asy
+2019/09/29 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
+2019/09/29 | 734 | graphics/asymptote/examples/quilt.asy
+2019/09/29 | 325 | graphics/asymptote/examples/rainbow.asy
+2019/09/29 | 54 | graphics/asymptote/examples/randompath3.asy
+2019/09/29 | 1537 | graphics/asymptote/examples/refs.bib
+2019/09/29 | 993 | graphics/asymptote/examples/RiemannSphere.asy
+2019/09/29 | 369 | graphics/asymptote/examples/RiemannSurface.asy
+2019/09/29 | 386 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
+2019/09/29 | 141 | graphics/asymptote/examples/ring.asy
+2019/09/29 | 182 | graphics/asymptote/examples/roll.asy
+2019/09/29 | 1310 | graphics/asymptote/examples/roundpath.asy
+2019/09/29 | 288 | graphics/asymptote/examples/sacone3D.asy
+2019/09/29 | 445 | graphics/asymptote/examples/sacone.asy
+2019/09/29 | 341 | graphics/asymptote/examples/sacylinder3D.asy
+2019/09/29 | 400 | graphics/asymptote/examples/sacylinder.asy
+2019/09/29 | 66 | graphics/asymptote/examples/shade.asy
+2019/09/29 | 104 | graphics/asymptote/examples/shadestroke.asy
+2019/09/29 | 1065 | graphics/asymptote/examples/shellmethod.asy
+2019/09/29 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
+2019/09/29 | 410 | graphics/asymptote/examples/Sierpinski.asy
+2019/09/29 | 849 | graphics/asymptote/examples/SierpinskiGasket.asy
+2019/09/29 | 2361 | graphics/asymptote/examples/SierpinskiSponge.asy
+2019/09/29 | 327 | graphics/asymptote/examples/sin1x.asy
+2019/09/29 | 579 | graphics/asymptote/examples/sin3.asy
+2019/09/29 | 591 | graphics/asymptote/examples/sinc.asy
+2019/09/29 | 385 | graphics/asymptote/examples/sinxlex.asy
+2019/09/29 | 3340 | graphics/asymptote/examples/slidedemo.asy
+2019/09/29 | 341 | graphics/asymptote/examples/slidedemo_.bbl
+2019/09/29 | 2043 | graphics/asymptote/examples/slope.asy
+2019/09/29 | 520 | graphics/asymptote/examples/smoothelevation.asy
+2019/09/29 | 2658 | graphics/asymptote/examples/soccerball.asy
+2019/09/29 | 2362 | graphics/asymptote/examples/spectrum.asy
+2019/09/29 | 126 | graphics/asymptote/examples/sphere.asy
+2019/09/29 | 150 | graphics/asymptote/examples/spheresilhouette.asy
+2019/09/29 | 165 | graphics/asymptote/examples/sphereskeleton.asy
+2019/09/29 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
+2019/09/29 | 426 | graphics/asymptote/examples/spiral3.asy
+2019/09/29 | 210 | graphics/asymptote/examples/spiral.asy
+2019/09/29 | 618 | graphics/asymptote/examples/spline.asy
+2019/09/29 | 2180 | graphics/asymptote/examples/splitpatch.asy
+2019/09/29 | 38 | graphics/asymptote/examples/spring0.asy
+2019/09/29 | 43 | graphics/asymptote/examples/spring2.asy
+2019/09/29 | 671 | graphics/asymptote/examples/spring.asy
+2019/09/29 | 674 | graphics/asymptote/examples/sqrtx01.asy
+2019/09/29 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
+2019/09/29 | 145 | graphics/asymptote/examples/star.asy
+2019/09/29 | 170 | graphics/asymptote/examples/stereoscopic.asy
+2019/09/29 | 59 | graphics/asymptote/examples/stroke3.asy
+2019/09/29 | 315 | graphics/asymptote/examples/strokepath.asy
+2019/09/29 | 168 | graphics/asymptote/examples/strokeshade.asy
+2019/09/29 | 198 | graphics/asymptote/examples/tanh.asy
+2019/09/29 | 13739 | graphics/asymptote/examples/teapot.asy
+2019/09/29 | 303 | graphics/asymptote/examples/tensor.asy
+2019/09/29 | 547 | graphics/asymptote/examples/tetra.asy
+2019/09/29 | 312 | graphics/asymptote/examples/textpath.asy
+2019/09/29 | 10210 | graphics/asymptote/examples/thermodynamics.asy
+2019/09/29 | 576 | graphics/asymptote/examples/threeviews.asy
+2019/09/29 | 413 | graphics/asymptote/examples/torus.asy
+2019/09/29 | 246 | graphics/asymptote/examples/transparency.asy
+2019/09/29 | 602 | graphics/asymptote/examples/treetest.asy
+2019/09/29 | 589 | graphics/asymptote/examples/trefoilknot.asy
+2019/09/29 | 959 | graphics/asymptote/examples/triads.asy
+2019/09/29 | 209 | graphics/asymptote/examples/triangle.asy
+2019/09/29 | 441 | graphics/asymptote/examples/triangles.asy
+2019/09/29 | 251 | graphics/asymptote/examples/triceratops.asy
+2019/09/29 | 291 | graphics/asymptote/examples/trumpet.asy
+2019/09/29 | 2084 | graphics/asymptote/examples/truncatedIcosahedron.asy
+2019/09/29 | 40326 | graphics/asymptote/examples/tvgen.asy
+2019/09/29 | 885 | graphics/asymptote/examples/twistedtubes.asy
+2019/09/29 | 322 | graphics/asymptote/examples/unitcircle.asy
+2019/09/29 | 713 | graphics/asymptote/examples/unitoctant.asy
+2019/09/29 | 199 | graphics/asymptote/examples/upint.asy
+2019/09/29 | 525 | graphics/asymptote/examples/vectorfield3.asy
+2019/09/29 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
+2019/09/29 | 839 | graphics/asymptote/examples/venn3.asy
+2019/09/29 | 626 | graphics/asymptote/examples/venn.asy
+2019/09/29 | 632 | graphics/asymptote/examples/vertexshading.asy
+2019/09/29 | 360 | graphics/asymptote/examples/washer.asy
+2019/09/29 | 1010 | graphics/asymptote/examples/washermethod.asy
+2019/09/29 | 628 | graphics/asymptote/examples/wedge.asy
+2019/09/29 | 956 | graphics/asymptote/examples/workcone.asy
+2019/09/29 | 951 | graphics/asymptote/examples/worksheet.asy
+2019/09/29 | 2659 | graphics/asymptote/examples/worldmap.asy
+2019/09/29 | 580 | graphics/asymptote/examples/xsin1x.asy
+2019/09/29 | 3746 | graphics/asymptote/examples/xstitch.asy
+2019/09/29 | 743 | graphics/asymptote/examples/xxsq01.asy
+2019/09/29 | 868 | graphics/asymptote/examples/xxsq01x-1.asy
+2019/09/29 | 827 | graphics/asymptote/examples/xxsq01y.asy
+2019/09/29 | 223 | graphics/asymptote/examples/yingyang.asy
+2019/09/29 | 33877 | graphics/asymptote/exp.cc
+2019/09/29 | 28809 | graphics/asymptote/exp.h
+2019/09/29 | 119 | graphics/asymptote/fftw++asy.cc
+2019/09/29 | 1694 | graphics/asymptote/fftw++.cc
+2019/09/29 | 47031 | graphics/asymptote/fftw++.h
+2019/09/29 | 4063 | graphics/asymptote/fileio.cc
+2019/09/29 | 19984 | graphics/asymptote/fileio.h
+2019/09/29 | 1245 | graphics/asymptote/findsym.pl
+2019/09/29 | 1020 | graphics/asymptote/flatguide.cc
+2019/09/29 | 4231 | graphics/asymptote/flatguide.h
+2019/09/29 | 666 | graphics/asymptote/fpu.h
+2019/09/29 | 2173 | graphics/asymptote/frame.h
+2019/09/29 | 7935 | graphics/asymptote/fundec.cc
+2019/09/29 | 4347 | graphics/asymptote/fundec.h
+2019/09/29 | 1160528 | graphics/asymptote/gc-8.0.4.tar.gz
+2019/09/29 | 3161 | graphics/asymptote/genv.cc
+2019/09/29 | 1626 | graphics/asymptote/genv.h
+2019/09/29 | 4520 | graphics/asymptote/getopt1.c
+2019/09/29 | 30147 | graphics/asymptote/getopt.c
+2019/09/29 | 6650 | graphics/asymptote/getopt.h
+2019/09/29 | 152 | graphics/asymptote/glew.c
+2019/09/29 | 1235777 | graphics/asymptote/GL/glew.c
+2019/09/29 | 1186601 | graphics/asymptote/GL/glew.h
+2019/09/29 | 73435 | graphics/asymptote/GL/glxew.h
+2019/09/29 | 44501 | graphics/asymptote/glrender.cc
+2019/09/29 | 8818 | graphics/asymptote/glrender.h
+2019/09/29 | 63314 | graphics/asymptote/GL/wglew.h
+2019/09/29 | 50697 | graphics/asymptote/gsl.cc
+2019/09/29 | 22 | graphics/asymptote/GUI/configs/__init__.py
+2019/09/29 | 1151 | graphics/asymptote/GUI/configs/xasyconfig.cson
+2019/09/29 | 359 | graphics/asymptote/GUI/configs/xasykeymap.cson
+2019/09/29 | 3503 | graphics/asymptote/GUI/CustMatTransform.py
+2019/09/29 | 131 | graphics/asymptote/GUI/DebugFlags.py
+2019/09/29 | 1175 | graphics/asymptote/guide.cc
+2019/09/29 | 298 | graphics/asymptote/guideflags.h
+2019/09/29 | 6783 | graphics/asymptote/guide.h
+2019/09/29 | 1724 | graphics/asymptote/GUI/GuidesManager.py
+2019/09/29 | 45 | graphics/asymptote/GUI/icon-list.txt
+2019/09/29 | 162009 | graphics/asymptote/GUI/icons_rc.py
+2019/09/29 | 23 | graphics/asymptote/GUI/__init__.py
+2019/09/29 | 11528 | graphics/asymptote/GUI/InplaceAddObj.py
+2019/09/29 | 5151 | graphics/asymptote/GUI/labelEditor.py
+2019/09/29 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
+2019/09/29 | 2399 | graphics/asymptote/GUI/PrimitiveShape.py
+2019/09/29 | 9944 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
+2019/09/29 | 6153 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
+2019/09/29 | 2824 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
+2019/09/29 | 7128 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
+2019/09/29 | 2192 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
+2019/09/29 | 4848 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
+2019/09/29 | 4667 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
+2019/09/29 | 54704 | graphics/asymptote/GUI/pyUIClass/window1.py
+2019/09/29 | 57 | graphics/asymptote/GUI/requirements.txt
+2019/09/29 | 288 | graphics/asymptote/GUI/res/icons/anchor.svg
+2019/09/29 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
+2019/09/29 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
+2019/09/29 | 802 | graphics/asymptote/GUI/res/icons/android-camera.svg
+2019/09/29 | 695 | graphics/asymptote/GUI/res/icons/android-close.svg
+2019/09/29 | 1319 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
+2019/09/29 | 674 | graphics/asymptote/GUI/res/icons/android-delete.svg
+2019/09/29 | 633 | graphics/asymptote/GUI/res/icons/android-done.svg
+2019/09/29 | 822 | graphics/asymptote/GUI/res/icons/android-expand.svg
+2019/09/29 | 850 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
+2019/09/29 | 1482 | graphics/asymptote/GUI/res/icons/android-hand.svg
+2019/09/29 | 1124 | graphics/asymptote/GUI/res/icons/android-locate.svg
+2019/09/29 | 764 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
+2019/09/29 | 844 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
+2019/09/29 | 806 | graphics/asymptote/GUI/res/icons/android-refresh.svg
+2019/09/29 | 713 | graphics/asymptote/GUI/res/icons/arrow-move.svg
+2019/09/29 | 639 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
+2019/09/29 | 609 | graphics/asymptote/GUI/res/icons/bucket.asy
+2019/09/29 | 1463 | graphics/asymptote/GUI/res/icons/bucket.svg
+2019/09/29 | 232 | graphics/asymptote/GUI/res/icons/center.asy
+2019/09/29 | 143 | graphics/asymptote/GUI/res/icons/centerorigin.asy
+2019/09/29 | 1040 | graphics/asymptote/GUI/res/icons/centerorigin.svg
+2019/09/29 | 869 | graphics/asymptote/GUI/res/icons/center.svg
+2019/09/29 | 780 | graphics/asymptote/GUI/res/icons/check.svg
+2019/09/29 | 964 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
+2019/09/29 | 949 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
+2019/09/29 | 701 | graphics/asymptote/GUI/res/icons/circle.svg
+2019/09/29 | 140 | graphics/asymptote/GUI/res/icons/closedcurve.asy
+2019/09/29 | 1213 | graphics/asymptote/GUI/res/icons/closedcurve.svg
+2019/09/29 | 140 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
+2019/09/29 | 1072 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
+2019/09/29 | 838 | graphics/asymptote/GUI/res/icons/close-round.svg
+2019/09/29 | 1145 | graphics/asymptote/GUI/res/icons/code.svg
+2019/09/29 | 876 | graphics/asymptote/GUI/res/icons/edit.svg
+2019/09/29 | 1003 | graphics/asymptote/GUI/res/icons/eye.svg
+2019/09/29 | 1919 | graphics/asymptote/GUI/res/icons/filledbucket.svg
+2019/09/29 | 1764 | graphics/asymptote/GUI/res/icons/grid.svg
+2019/09/29 | 915 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
+2019/09/29 | 133 | graphics/asymptote/GUI/res/icons/opencurve.asy
+2019/09/29 | 1165 | graphics/asymptote/GUI/res/icons/opencurve.svg
+2019/09/29 | 133 | graphics/asymptote/GUI/res/icons/openpolygon.asy
+2019/09/29 | 1058 | graphics/asymptote/GUI/res/icons/openpolygon.svg
+2019/09/29 | 759 | graphics/asymptote/GUI/res/icons/plus-round.svg
+2019/09/29 | 1711 | graphics/asymptote/GUI/res/icons.qrc
+2019/09/29 | 620 | graphics/asymptote/GUI/res/icons/save.svg
+2019/09/29 | 1920 | graphics/asymptote/GUI/res/icons/social-python.svg
+2019/09/29 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
+2019/09/29 | 221 | graphics/asymptote/GUI/res/icons/text.svg
+2019/09/29 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
+2019/09/29 | 1393 | graphics/asymptote/GUI/SetCustomAnchor.py
+2019/09/29 | 394 | graphics/asymptote/GUI/setup.py
+2019/09/29 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
+2019/09/29 | 3249 | graphics/asymptote/GUI/Widg_addLabel.py
+2019/09/29 | 883 | graphics/asymptote/GUI/Widg_addPolyOpt.py
+2019/09/29 | 1665 | graphics/asymptote/GUI/Widg_editBezier.py
+2019/09/29 | 72112 | graphics/asymptote/GUI/Window1.py
+2019/09/29 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
+2019/09/29 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
+2019/09/29 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
+2019/09/29 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
+2019/09/29 | 2148 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
+2019/09/29 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
+2019/09/29 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
+2019/09/29 | 68758 | graphics/asymptote/GUI/windows/window1.ui
+2019/09/29 | 50403 | graphics/asymptote/GUI/xasy2asy.py
+2019/09/29 | 821 | graphics/asymptote/GUI/xasyArgs.py
+2019/09/29 | 13550 | graphics/asymptote/GUI/xasyBezierInterface.py
+2019/09/29 | 2554 | graphics/asymptote/GUI/xasyFile.py
+2019/09/29 | 5048 | graphics/asymptote/GUI/xasyOptions.py
+2019/09/29 | 285 | graphics/asymptote/GUI/xasy.py
+2019/09/29 | 599 | graphics/asymptote/GUI/xasyStrings.py
+2019/09/29 | 710 | graphics/asymptote/GUI/xasySvg.py
+2019/09/29 | 964 | graphics/asymptote/GUI/xasyTransform.py
+2019/09/29 | 1504 | graphics/asymptote/GUI/xasyUtils.py
+2019/09/29 | 238 | graphics/asymptote/GUI/xasyValidator.py
+2019/09/29 | 12744 | graphics/asymptote/impdatum.cc
+2019/09/29 | 10445 | graphics/asymptote/INSTALL
+2019/09/29 | 13663 | graphics/asymptote/install-sh
+2019/09/29 | 1986 | graphics/asymptote/inst.h
+2019/09/29 | 4994 | graphics/asymptote/interact.cc
+2019/09/29 | 1309 | graphics/asymptote/interact.h
+2019/09/29 | 5857 | graphics/asymptote/item.h
+2019/09/29 | 6592 | graphics/asymptote/jsfile.cc
+2019/09/29 | 1348 | graphics/asymptote/jsfile.h
+2019/09/29 | 609 | graphics/asymptote/keywords.cc
+2019/09/29 | 1253 | graphics/asymptote/keywords.pl
+2019/09/29 | 22355 | graphics/asymptote/knot.cc
+2019/09/29 | 12300 | graphics/asymptote/knot.h
+2019/09/29 | 345 | graphics/asymptote/lexical.h
+2019/09/29 | 83435 | graphics/asymptote/lex.yy.cc
+2019/09/29 | 503734 | graphics/asymptote/libatomic_ops-7.6.10.tar.gz
+2019/09/29 | 35147 | graphics/asymptote/LICENSE
+2019/09/29 | 7639 | graphics/asymptote/LICENSE.LESSER
+2019/09/29 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
+2019/09/29 | 2195 | graphics/asymptote/locate.cc
+2019/09/29 | 560 | graphics/asymptote/locate.h
+2019/09/29 | 5310 | graphics/asymptote/main.cc
+2019/09/29 | 11348 | graphics/asymptote/Makefile.in
+2019/09/29 | 2632 | graphics/asymptote/material.h
+2019/09/29 | 6425 | graphics/asymptote/mathop.h
+2019/09/29 | 5070 | graphics/asymptote/memory.h
+2019/09/29 | 720 | graphics/asymptote/mod.h
+2019/09/29 | 908 | graphics/asymptote/modifier.h
+2019/09/29 | 7445 | graphics/asymptote/name.cc
+2019/09/29 | 5239 | graphics/asymptote/name.h
+2019/09/29 | 4269 | graphics/asymptote/newexp.cc
+2019/09/29 | 1278 | graphics/asymptote/newexp.h
+2019/09/29 | 917 | graphics/asymptote/opcodes.h
+2019/09/29 | 1050 | graphics/asymptote/opsymbols.pl
+2019/09/29 | 5049 | graphics/asymptote/pair.h
+2019/09/29 | 3505 | graphics/asymptote/parser.cc
+2019/09/29 | 852 | graphics/asymptote/parser.h
+2019/09/29 | 5262 | graphics/asymptote/patches/bison.patch
+2019/09/29 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
+2019/09/29 | 1311 | graphics/asymptote/patches/dvipdf
+2019/09/29 | 113 | graphics/asymptote/patches/fixmem.reg
+2019/09/29 | 1524 | graphics/asymptote/patches/flex.patch
+2019/09/29 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
+2019/09/29 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
+2019/09/29 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
+2019/09/29 | 19462 | graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
+2019/09/29 | 1082 | graphics/asymptote/patches/README
+2019/09/29 | 38066 | graphics/asymptote/path3.cc
+2019/09/29 | 10494 | graphics/asymptote/path3.h
+2019/09/29 | 33988 | graphics/asymptote/path.cc
+2019/09/29 | 11580 | graphics/asymptote/path.h
+2019/09/29 | 1594 | graphics/asymptote/pen.cc
+2019/09/29 | 28156 | graphics/asymptote/pen.h
+2019/09/29 | 39918 | graphics/asymptote/picture.cc
+2019/09/29 | 3434 | graphics/asymptote/picture.h
+2019/09/29 | 5025 | graphics/asymptote/pipestream.cc
+2019/09/29 | 2624 | graphics/asymptote/pipestream.h
+2019/09/29 | 138 | graphics/asymptote/Pipfile
+2019/09/29 | 2526 | graphics/asymptote/policy.h
+2019/09/29 | 654 | graphics/asymptote/prcfile.h
+2019/09/29 | 974 | graphics/asymptote/prc/Makefile
+2019/09/29 | 70751 | graphics/asymptote/prc/oPRCFile.cc
+2019/09/29 | 51432 | graphics/asymptote/prc/oPRCFile.h
+2019/09/29 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
+2019/09/29 | 2518 | graphics/asymptote/prc/PRCbitStream.h
+2019/09/29 | 177246 | graphics/asymptote/prc/PRCdouble.cc
+2019/09/29 | 3765 | graphics/asymptote/prc/PRCdouble.h
+2019/09/29 | 30208 | graphics/asymptote/prc/PRC.h
+2019/09/29 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
+2019/09/29 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
+2019/09/29 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
+2019/09/29 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
+2019/09/29 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
+2019/09/29 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
+2019/09/29 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
+2019/09/29 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
+2019/09/29 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
+2019/09/29 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
+2019/09/29 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
+2019/09/29 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
+2019/09/29 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
+2019/09/29 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
+2019/09/29 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
+2019/09/29 | 95 | graphics/asymptote/prc/test.asy
+2019/09/29 | 36243 | graphics/asymptote/prc/test.cc
+2019/09/29 | 66751 | graphics/asymptote/prc/writePRC.cc
+2019/09/29 | 48481 | graphics/asymptote/prc/writePRC.h
+2019/09/29 | 116025 | graphics/asymptote/predicates.cc
+2019/09/29 | 986 | graphics/asymptote/predicates.h
+2019/09/29 | 1234 | graphics/asymptote/primitives.h
+2019/09/29 | 25292 | graphics/asymptote/process.cc
+2019/09/29 | 3003 | graphics/asymptote/process.h
+2019/09/29 | 2339 | graphics/asymptote/profile.py
+2019/09/29 | 9892 | graphics/asymptote/profiler.h
+2019/09/29 | 3275 | graphics/asymptote/program.cc
+2019/09/29 | 2562 | graphics/asymptote/program.h
+2019/09/29 | 18964 | graphics/asymptote/psfile.cc
+2019/09/29 | 9306 | graphics/asymptote/psfile.h
+2019/09/29 | 5963 | graphics/asymptote/quaternion.cc
+2019/09/29 | 2504 | graphics/asymptote/README
+2019/09/29 | 1704 | graphics/asymptote/record.cc
+2019/09/29 | 2738 | graphics/asymptote/record.h
+2019/09/29 | 1098 | graphics/asymptote/refaccess.cc
+2019/09/29 | 1936 | graphics/asymptote/refaccess.h
+2019/09/29 | 113923 | graphics/asymptote/ReleaseNotes
+2019/09/29 | 29 | graphics/asymptote/revision.cc
+2019/09/29 | 3553 | graphics/asymptote/rounding.h
+2019/09/29 | 70119 | graphics/asymptote/runarray.cc
+2019/09/29 | 1492 | graphics/asymptote/runarray.h
+2019/09/29 | 45997 | graphics/asymptote/runarray.in
+2019/09/29 | 2661 | graphics/asymptote/runbacktrace.cc
+2019/09/29 | 169 | graphics/asymptote/runbacktrace.h
+2019/09/29 | 833 | graphics/asymptote/runbacktrace.in
+2019/09/29 | 17743 | graphics/asymptote/runfile.cc
+2019/09/29 | 969 | graphics/asymptote/runfile.h
+2019/09/29 | 5924 | graphics/asymptote/runfile.in
+2019/09/29 | 8157 | graphics/asymptote/runhistory.cc
+2019/09/29 | 161 | graphics/asymptote/runhistory.h
+2019/09/29 | 5119 | graphics/asymptote/runhistory.in
+2019/09/29 | 16702 | graphics/asymptote/runlabel.cc
+2019/09/29 | 153 | graphics/asymptote/runlabel.h
+2019/09/29 | 12959 | graphics/asymptote/runlabel.in
+2019/09/29 | 21948 | graphics/asymptote/runmath.cc
+2019/09/29 | 269 | graphics/asymptote/runmath.h
+2019/09/29 | 8900 | graphics/asymptote/runmath.in
+2019/09/29 | 16348 | graphics/asymptote/runpair.cc
+2019/09/29 | 299 | graphics/asymptote/runpair.h
+2019/09/29 | 4246 | graphics/asymptote/runpair.in
+2019/09/29 | 25218 | graphics/asymptote/runpath3d.cc
+2019/09/29 | 186 | graphics/asymptote/runpath3d.h
+2019/09/29 | 8051 | graphics/asymptote/runpath3d.in
+2019/09/29 | 26292 | graphics/asymptote/runpath.cc
+2019/09/29 | 177 | graphics/asymptote/runpath.h
+2019/09/29 | 8368 | graphics/asymptote/runpath.in
+2019/09/29 | 55426 | graphics/asymptote/runpicture.cc
+2019/09/29 | 191 | graphics/asymptote/runpicture.h
+2019/09/29 | 18929 | graphics/asymptote/runpicture.in
+2019/09/29 | 18772 | graphics/asymptote/runstring.cc
+2019/09/29 | 188 | graphics/asymptote/runstring.h
+2019/09/29 | 9871 | graphics/asymptote/runstring.in
+2019/09/29 | 12522 | graphics/asymptote/runsystem.cc
+2019/09/29 | 157 | graphics/asymptote/runsystem.h
+2019/09/29 | 5098 | graphics/asymptote/runsystem.in
+2019/09/29 | 1343 | graphics/asymptote/runtimebase.in
+2019/09/29 | 60604 | graphics/asymptote/runtime.cc
+2019/09/29 | 1163 | graphics/asymptote/runtime.h
+2019/09/29 | 20758 | graphics/asymptote/runtime.in
+2019/09/29 | 7230 | graphics/asymptote/runtime.pl
+2019/09/29 | 13700 | graphics/asymptote/runtriple.cc
+2019/09/29 | 320 | graphics/asymptote/runtriple.h
+2019/09/29 | 2725 | graphics/asymptote/runtriple.in
+2019/09/29 | 2113 | graphics/asymptote/seconds.h
+2019/09/29 | 50191 | graphics/asymptote/settings.cc
+2019/09/29 | 2687 | graphics/asymptote/settings.h
+2019/09/29 | 2664 | graphics/asymptote/shaders.cc
+2019/09/29 | 782 | graphics/asymptote/shaders.h
+2019/09/29 | 6660 | graphics/asymptote/simpson.cc
+2019/09/29 | 14448 | graphics/asymptote/stack.cc
+2019/09/29 | 3328 | graphics/asymptote/stack.h
+2019/09/29 | 958 | graphics/asymptote/statistics.h
+2019/09/29 | 12103 | graphics/asymptote/stm.cc
+2019/09/29 | 4400 | graphics/asymptote/stm.h
+2019/09/29 | 8912 | graphics/asymptote/symbol.cc
+2019/09/29 | 2662 | graphics/asymptote/symbol.h
+2019/09/29 | 2697 | graphics/asymptote/table.h
+2019/09/29 | 620 | graphics/asymptote/tests/arith/integer.asy
+2019/09/29 | 449 | graphics/asymptote/tests/arith/pair.asy
+2019/09/29 | 193 | graphics/asymptote/tests/arith/random.asy
+2019/09/29 | 383 | graphics/asymptote/tests/arith/real.asy
+2019/09/29 | 1710 | graphics/asymptote/tests/arith/roots.asy
+2019/09/29 | 639 | graphics/asymptote/tests/arith/transform.asy
+2019/09/29 | 244 | graphics/asymptote/tests/arith/triple.asy
+2019/09/29 | 936 | graphics/asymptote/tests/array/array.asy
+2019/09/29 | 680 | graphics/asymptote/tests/array/delete.asy
+2019/09/29 | 737 | graphics/asymptote/tests/array/determinant.asy
+2019/09/29 | 1927 | graphics/asymptote/tests/array/fields.asy
+2019/09/29 | 4841 | graphics/asymptote/tests/array/slice.asy
+2019/09/29 | 966 | graphics/asymptote/tests/array/solve.asy
+2019/09/29 | 746 | graphics/asymptote/tests/array/sort.asy
+2019/09/29 | 1096 | graphics/asymptote/tests/array/transpose.asy
+2019/09/29 | 276 | graphics/asymptote/tests/bench/6000circles.asy
+2019/09/29 | 2222 | graphics/asymptote/tests/frames/loop.asy
+2019/09/29 | 202 | graphics/asymptote/tests/frames/stat2.asy
+2019/09/29 | 158 | graphics/asymptote/tests/frames/stat.asy
+2019/09/29 | 62 | graphics/asymptote/tests/gc/array.asy
+2019/09/29 | 102 | graphics/asymptote/tests/gc/file.asy
+2019/09/29 | 54 | graphics/asymptote/tests/gc/funcall.asy
+2019/09/29 | 65 | graphics/asymptote/tests/gc/guide.asy
+2019/09/29 | 143 | graphics/asymptote/tests/gc/label.asy
+2019/09/29 | 124 | graphics/asymptote/tests/gc/path.asy
+2019/09/29 | 72 | graphics/asymptote/tests/gc/pen.asy
+2019/09/29 | 193 | graphics/asymptote/tests/gc/shipout.asy
+2019/09/29 | 77 | graphics/asymptote/tests/gc/string.asy
+2019/09/29 | 129 | graphics/asymptote/tests/gc/struct.asy
+2019/09/29 | 70 | graphics/asymptote/tests/gc/transform.asy
+2019/09/29 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
+2019/09/29 | 11907 | graphics/asymptote/tests/gsl/random.asy
+2019/09/29 | 1209 | graphics/asymptote/tests/imp/unravel.asy
+2019/09/29 | 308 | graphics/asymptote/tests/Makefile
+2019/09/29 | 18 | graphics/asymptote/tests/output/circle.asy
+2019/09/29 | 22 | graphics/asymptote/tests/output/line.asy
+2019/09/29 | 1284 | graphics/asymptote/tests/output/Makefile
+2019/09/29 | 1384 | graphics/asymptote/tests/pic/trans.asy
+2019/09/29 | 236 | graphics/asymptote/tests/string/erase.asy
+2019/09/29 | 182 | graphics/asymptote/tests/string/find.asy
+2019/09/29 | 109 | graphics/asymptote/tests/string/insert.asy
+2019/09/29 | 132 | graphics/asymptote/tests/string/length.asy
+2019/09/29 | 187 | graphics/asymptote/tests/string/rfind.asy
+2019/09/29 | 118 | graphics/asymptote/tests/string/substr.asy
+2019/09/29 | 238 | graphics/asymptote/tests/TestLib.asy
+2019/09/29 | 159 | graphics/asymptote/tests/types/cast.asy
+2019/09/29 | 6503 | graphics/asymptote/tests/types/constructor.asy
+2019/09/29 | 155 | graphics/asymptote/tests/types/ecast.asy
+2019/09/29 | 3375 | graphics/asymptote/tests/types/guide.asy
+2019/09/29 | 224 | graphics/asymptote/tests/types/init.asy
+2019/09/29 | 4242 | graphics/asymptote/tests/types/keyword.asy
+2019/09/29 | 4072 | graphics/asymptote/tests/types/order.asy
+2019/09/29 | 2731 | graphics/asymptote/tests/types/resolve.asy
+2019/09/29 | 308 | graphics/asymptote/tests/types/shadow.asy
+2019/09/29 | 1331 | graphics/asymptote/tests/types/spec.asy
+2019/09/29 | 1189 | graphics/asymptote/tests/types/var.asy
+2019/09/29 | 20214 | graphics/asymptote/texfile.cc
+2019/09/29 | 10644 | graphics/asymptote/texfile.h
+2019/09/29 | 1293 | graphics/asymptote/TODO
+2019/09/29 | 6185 | graphics/asymptote/transform.h
+2019/09/29 | 10585 | graphics/asymptote/tr.cc
+2019/09/29 | 3606 | graphics/asymptote/tr.h
+2019/09/29 | 8773 | graphics/asymptote/triple.h
+2019/09/29 | 13884 | graphics/asymptote/types.cc
+2019/09/29 | 15372 | graphics/asymptote/types.h
+2019/09/29 | 9756 | graphics/asymptote/util.cc
+2019/09/29 | 4515 | graphics/asymptote/util.h
+2019/09/29 | 1978 | graphics/asymptote/varinit.cc
+2019/09/29 | 2013 | graphics/asymptote/varinit.h
+2019/09/29 | 901 | graphics/asymptote/virtualfieldaccess.cc
+2019/09/29 | 2328 | graphics/asymptote/virtualfieldaccess.h
+2019/09/29 | 750 | graphics/asymptote/vm.h
+2019/09/29 | 219 | graphics/asymptote/wce
+2019/09/29 | 59203 | graphics/asymptote/webgl/gl.js
+2019/09/29 | 6512 | graphics/asymptote/xstream.h
+2019/09/29 | 14148989 | graphics/asymptote.zip
2014/04/16 | 55108 | graphics/asypictureb/asypictureB.dtx
2014/04/16 | 2401 | graphics/asypictureb/asypictureB.ins
2014/04/15 | 637107 | graphics/asypictureb/asypictureB.pdf
@@ -156604,8 +156680,8 @@
2013/11/02 | 2698039 | install/fonts/mintspirit.tds.zip
2017/02/26 | 17914016 | install/fonts/montserrat.tds.zip
2015/12/30 | 4535379 | install/fonts/musixtex-fonts.tds.zip
-2018/12/16 | 2839273 | install/fonts/newpx.tds.zip
-2018/05/31 | 5794214 | install/fonts/newtx.tds.zip
+2019/09/29 | 3188759 | install/fonts/newpx.tds.zip
+2019/09/29 | 6805147 | install/fonts/newtx.tds.zip
2017/05/21 | 350847 | install/fonts/newtxtt.tds.zip
2018/09/21 | 5679572 | install/fonts/nimbus15.tds.zip
2019/05/23 | 107844140 | install/fonts/noto.tds.zip
@@ -156682,7 +156758,7 @@
2012/02/06 | 254553 | install/fonts/urw/arial.tds.zip
2014/08/28 | 1312858 | install/fonts/urw/classico.tds.zip
2016/01/09 | 254062 | install/fonts/verdana.tds.zip
-2019/08/18 | 4330595 | install/fonts/xcharter.tds.zip
+2019/09/29 | 4425946 | install/fonts/xcharter.tds.zip
2019/06/11 | 58442 | install/fonts/zlmtt.tds.zip
2019/09/27 | 20235141 | install/graphics/ketcindy.tds.zip
2012/12/03 | 1483078 | install/graphics/mfpic.tds.zip
@@ -156874,9 +156950,9 @@
2019/02/03 | 15206559 | install/macros/latex/contrib/koma-script.tds.zip
2015/12/09 | 171418 | install/macros/latex/contrib/ksp-thesis.tds.zip
2019/09/06 | 767015 | install/macros/latex/contrib/l3backend.tds.zip
-2019/09/25 | 786491 | install/macros/latex/contrib/l3build.tds.zip
-2019/09/19 | 4946392 | install/macros/latex/contrib/l3experimental.tds.zip
-2019/09/19 | 9449469 | install/macros/latex/contrib/l3kernel.tds.zip
+2019/09/29 | 786319 | install/macros/latex/contrib/l3build.tds.zip
+2019/09/28 | 4949211 | install/macros/latex/contrib/l3experimental.tds.zip
+2019/09/28 | 9416715 | install/macros/latex/contrib/l3kernel.tds.zip
2019/05/28 | 2142801 | install/macros/latex/contrib/l3packages.tds.zip
2015/03/29 | 573323 | install/macros/latex/contrib/lastpage.tds.zip
2009/09/02 | 556672 | install/macros/latex/contrib/layouts.tds.zip
@@ -156968,7 +157044,7 @@
2017/08/05 | 166767 | install/macros/latex/contrib/screenplay-pkg.tds.zip
2012/09/24 | 130991 | install/macros/latex/contrib/scrjrnl.tds.zip
2018/05/17 | 770946 | install/macros/latex/contrib/siunitx.tds.zip
-2018/04/18 | 310902 | install/macros/latex/contrib/skdoc.tds.zip
+2019/09/29 | 332217 | install/macros/latex/contrib/skdoc.tds.zip
2018/12/29 | 296037 | install/macros/latex/contrib/skmath.tds.zip
2018/12/29 | 325146 | install/macros/latex/contrib/skrapport.tds.zip
2016/02/18 | 469004 | install/macros/latex/contrib/splitindex.tds.zip
@@ -156987,6 +157063,7 @@
2013/01/22 | 615461 | install/macros/latex/contrib/tabvar.tds.zip
2019/09/19 | 6158113 | install/macros/latex/contrib/tcolorbox.tds.zip
2009/06/22 | 771373 | install/macros/latex/contrib/tdsfrmath.tds.zip
+2019/09/29 | 5325410 | install/macros/latex/contrib/testidx.tds.zip
2019/07/31 | 453685 | install/macros/latex/contrib/thalie.tds.zip
2013/01/06 | 389729 | install/macros/latex/contrib/threadcol.tds.zip
2014/03/09 | 752162 | install/macros/latex/contrib/thumbs.tds.zip
@@ -172900,12 +172977,12 @@
2015/08/04 | 114907 | macros/latex/contrib/alertmessage.zip
2003/05/26 | 18992 | macros/latex/contrib/alg/alg.dtx
2001/03/12 | 674 | macros/latex/contrib/alg/alg.ins
-2017/09/04 | 18584 | macros/latex/contrib/algobox/algobox.dtx
-2017/09/04 | 469 | macros/latex/contrib/algobox/algobox.ins
-2017/09/04 | 131991 | macros/latex/contrib/algobox/algobox.pdf
-2017/09/04 | 35081 | macros/latex/contrib/algobox/LICENSE
-2017/09/04 | 988 | macros/latex/contrib/algobox/README.md
-2017/09/04 | 146324 | macros/latex/contrib/algobox.zip
+2019/09/29 | 18594 | macros/latex/contrib/algobox/algobox.dtx
+2019/09/29 | 469 | macros/latex/contrib/algobox/algobox.ins
+2019/09/29 | 115576 | macros/latex/contrib/algobox/algobox.pdf
+2019/09/29 | 35081 | macros/latex/contrib/algobox/LICENSE
+2019/09/29 | 988 | macros/latex/contrib/algobox/README.md
+2019/09/29 | 129575 | macros/latex/contrib/algobox.zip
2008/05/11 | 89 | macros/latex/contrib/algorithm2e/doc/algorithm2e_ex01.tex
2008/05/11 | 57 | macros/latex/contrib/algorithm2e/doc/algorithm2e_ex02.tex
2007/08/28 | 63 | macros/latex/contrib/algorithm2e/doc/algorithm2e_ex03.tex
@@ -176846,12 +176923,12 @@
2014/06/27 | 83768 | macros/latex/contrib/cd.zip
2010/12/14 | 35907 | macros/latex/contrib/cell/cell.bst
2010/12/14 | 4002 | macros/latex/contrib/cell/cell.sty
-2018/07/16 | 45202 | macros/latex/contrib/cellprops/cellprops.dtx
-2018/07/16 | 475 | macros/latex/contrib/cellprops/cellprops.ins
-2018/07/16 | 573624 | macros/latex/contrib/cellprops/cellprops.pdf
-2018/07/16 | 35103 | macros/latex/contrib/cellprops/LICENSE
-2018/07/16 | 1117 | macros/latex/contrib/cellprops/README.md
-2018/07/18 | 581835 | macros/latex/contrib/cellprops.zip
+2019/09/29 | 45659 | macros/latex/contrib/cellprops/cellprops.dtx
+2019/09/29 | 475 | macros/latex/contrib/cellprops/cellprops.ins
+2019/09/29 | 557254 | macros/latex/contrib/cellprops/cellprops.pdf
+2019/09/29 | 35113 | macros/latex/contrib/cellprops/LICENSE
+2019/09/29 | 1122 | macros/latex/contrib/cellprops/README.md
+2019/09/29 | 563391 | macros/latex/contrib/cellprops.zip
2010/12/02 | 224 | macros/latex/contrib/cell/README
2019/03/11 | 336907 | macros/latex/contrib/cellspace/cellspace.pdf
2019/03/11 | 5940 | macros/latex/contrib/cellspace/cellspace.sty
@@ -181280,11 +181357,11 @@
2002/04/05 | 13451 | macros/latex/contrib/figsize/figsize.tex
2002/04/05 | 1651 | macros/latex/contrib/figsize/README
2005/04/30 | 92363 | macros/latex/contrib/figsize.zip
-2019/04/21 | 37165 | macros/latex/contrib/filecontentsdef/filecontentsdef.dtx
-2019/04/21 | 90457 | macros/latex/contrib/filecontentsdef/filecontentsdef.pdf
-2019/04/21 | 1210 | macros/latex/contrib/filecontentsdef/INSTALL
-2019/04/21 | 2123 | macros/latex/contrib/filecontentsdef/README.md
-2019/04/23 | 101978 | macros/latex/contrib/filecontentsdef.zip
+2019/09/29 | 56433 | macros/latex/contrib/filecontentsdef/filecontentsdef.dtx
+2019/09/29 | 129819 | macros/latex/contrib/filecontentsdef/filecontentsdef.pdf
+2019/09/29 | 1211 | macros/latex/contrib/filecontentsdef/INSTALL
+2019/09/29 | 3325 | macros/latex/contrib/filecontentsdef/README.md
+2019/09/29 | 145712 | macros/latex/contrib/filecontentsdef.zip
2019/09/21 | 16076 | macros/latex/contrib/filecontents/filecontents.dtx
2019/09/21 | 2148 | macros/latex/contrib/filecontents/filecontents.ins
2019/09/21 | 127330 | macros/latex/contrib/filecontents/filecontents.pdf
@@ -182834,12 +182911,12 @@
2010/07/26 | 28845 | macros/latex/contrib/gatech-thesis/README
2010/07/26 | 271 | macros/latex/contrib/gatech-thesis/TODO
2012/09/26 | 180447 | macros/latex/contrib/gatech-thesis.zip
-2018/06/19 | 10318 | macros/latex/contrib/gatherenum/gatherenum.dtx
-2018/06/19 | 473 | macros/latex/contrib/gatherenum/gatherenum.ins
-2018/06/19 | 411566 | macros/latex/contrib/gatherenum/gatherenum.pdf
-2018/06/19 | 35077 | macros/latex/contrib/gatherenum/LICENSE
-2018/06/19 | 593 | macros/latex/contrib/gatherenum/README.md
-2018/06/19 | 426507 | macros/latex/contrib/gatherenum.zip
+2019/09/29 | 10355 | macros/latex/contrib/gatherenum/gatherenum.dtx
+2019/09/29 | 473 | macros/latex/contrib/gatherenum/gatherenum.ins
+2019/09/29 | 393834 | macros/latex/contrib/gatherenum/gatherenum.pdf
+2019/09/29 | 35087 | macros/latex/contrib/gatherenum/LICENSE
+2019/09/29 | 593 | macros/latex/contrib/gatherenum/README.md
+2019/09/29 | 408544 | macros/latex/contrib/gatherenum.zip
2011/10/26 | 120119 | macros/latex/contrib/gauss/gauss-doc.pdf
2011/10/26 | 33188 | macros/latex/contrib/gauss/gauss-ex.pdf
2011/10/26 | 1438 | macros/latex/contrib/gauss/gauss-ex.tex
@@ -186068,152 +186145,153 @@
2019/09/05 | 63625 | macros/latex/contrib/l3backend/l3backend-pdf.dtx
2019/09/05 | 545 | macros/latex/contrib/l3backend/README.md
2019/09/06 | 742531 | macros/latex/contrib/l3backend.zip
-2019/09/25 | 9722 | macros/latex/contrib/l3build/CHANGELOG.md
+2019/09/29 | 10059 | macros/latex/contrib/l3build/CHANGELOG.md
2017/11/28 | 2339 | macros/latex/contrib/l3build/CONTRIBUTING.md
-2019/09/25 | 1817 | macros/latex/contrib/l3build/l3build.1
+2019/09/29 | 1817 | macros/latex/contrib/l3build/l3build.1
2019/08/17 | 7438 | macros/latex/contrib/l3build/l3build-arguments.lua
2019/02/10 | 3239 | macros/latex/contrib/l3build/l3build-aux.lua
-2019/09/25 | 33347 | macros/latex/contrib/l3build/l3build-check.lua
+2019/09/29 | 33326 | macros/latex/contrib/l3build/l3build-check.lua
2018/12/11 | 1495 | macros/latex/contrib/l3build/l3build-clean.lua
2019/02/10 | 4472 | macros/latex/contrib/l3build/l3build-ctan.lua
-2019/09/25 | 102828 | macros/latex/contrib/l3build/l3build.dtx
+2019/09/29 | 102828 | macros/latex/contrib/l3build/l3build.dtx
2019/08/21 | 11748 | macros/latex/contrib/l3build/l3build-file-functions.lua
2018/12/19 | 2191 | macros/latex/contrib/l3build/l3build-help.lua
2018/12/11 | 1537 | macros/latex/contrib/l3build/l3build.ins
2019/08/21 | 8368 | macros/latex/contrib/l3build/l3build-install.lua
-2019/09/25 | 5154 | macros/latex/contrib/l3build/l3build.lua
+2019/09/29 | 5154 | macros/latex/contrib/l3build/l3build.lua
2018/04/07 | 7205 | macros/latex/contrib/l3build/l3build-manifest.lua
2018/04/07 | 11024 | macros/latex/contrib/l3build/l3build-manifest-setup.lua
-2019/09/25 | 704972 | macros/latex/contrib/l3build/l3build.pdf
+2019/09/29 | 704702 | macros/latex/contrib/l3build/l3build.pdf
2019/02/03 | 4305 | macros/latex/contrib/l3build/l3build-stdmain.lua
2019/02/03 | 2305 | macros/latex/contrib/l3build/l3build-tagging.lua
-2019/09/25 | 6580 | macros/latex/contrib/l3build/l3build-typesetting.lua
+2019/09/29 | 6600 | macros/latex/contrib/l3build/l3build-typesetting.lua
2019/08/24 | 3106 | macros/latex/contrib/l3build/l3build-unpack.lua
2019/02/10 | 11575 | macros/latex/contrib/l3build/l3build-upload.lua
2019/09/24 | 6740 | macros/latex/contrib/l3build/l3build-variables.lua
-2019/09/25 | 1024 | macros/latex/contrib/l3build/README.md
-2019/09/25 | 781500 | macros/latex/contrib/l3build.zip
-2019/09/19 | 3216 | macros/latex/contrib/l3experimental/CHANGELOG.md
-2019/09/19 | 17815 | macros/latex/contrib/l3experimental/l3benchmark.dtx
+2019/09/29 | 1024 | macros/latex/contrib/l3build/README.md
+2019/09/29 | 781328 | macros/latex/contrib/l3build.zip
+2019/09/28 | 3385 | macros/latex/contrib/l3experimental/CHANGELOG.md
+2019/09/28 | 17815 | macros/latex/contrib/l3experimental/l3benchmark.dtx
2019/08/30 | 1564 | macros/latex/contrib/l3experimental/l3benchmark.ins
-2019/09/19 | 314276 | macros/latex/contrib/l3experimental/l3benchmark.pdf
-2019/09/19 | 17934 | macros/latex/contrib/l3experimental/l3cctab.dtx
+2019/09/28 | 314468 | macros/latex/contrib/l3experimental/l3benchmark.pdf
+2019/09/28 | 17934 | macros/latex/contrib/l3experimental/l3cctab.dtx
2019/08/30 | 1559 | macros/latex/contrib/l3experimental/l3cctab.ins
-2019/09/19 | 337607 | macros/latex/contrib/l3experimental/l3cctab.pdf
-2019/09/19 | 29812 | macros/latex/contrib/l3experimental/l3color.dtx
+2019/09/28 | 337798 | macros/latex/contrib/l3experimental/l3cctab.pdf
+2019/09/28 | 29812 | macros/latex/contrib/l3experimental/l3color.dtx
2019/08/30 | 1547 | macros/latex/contrib/l3experimental/l3color.ins
-2019/09/19 | 349735 | macros/latex/contrib/l3experimental/l3color.pdf
-2019/09/19 | 4328 | macros/latex/contrib/l3experimental/l3draw-boxes.dtx
-2019/09/19 | 623901 | macros/latex/contrib/l3experimental/l3draw-code.pdf
-2019/08/30 | 1356 | macros/latex/contrib/l3experimental/l3draw-code.tex
-2019/09/19 | 40718 | macros/latex/contrib/l3experimental/l3draw.dtx
-2019/08/30 | 1912 | macros/latex/contrib/l3experimental/l3draw.ins
-2019/09/19 | 5662 | macros/latex/contrib/l3experimental/l3draw-layers.dtx
-2019/09/19 | 32473 | macros/latex/contrib/l3experimental/l3draw-paths.dtx
-2019/09/19 | 491359 | macros/latex/contrib/l3experimental/l3draw.pdf
-2019/09/19 | 31299 | macros/latex/contrib/l3experimental/l3draw-points.dtx
-2019/09/19 | 7488 | macros/latex/contrib/l3experimental/l3draw-scopes.dtx
-2019/09/19 | 20463 | macros/latex/contrib/l3experimental/l3draw-softpath.dtx
-2019/09/19 | 6163 | macros/latex/contrib/l3experimental/l3draw-state.dtx
-2019/09/19 | 9888 | macros/latex/contrib/l3experimental/l3draw-transforms.dtx
-2019/09/19 | 96866 | macros/latex/contrib/l3experimental/l3galley.dtx
-2019/09/19 | 385782 | macros/latex/contrib/l3experimental/l3galley.pdf
-2019/09/19 | 24771 | macros/latex/contrib/l3experimental/l3graphics.dtx
-2019/08/30 | 1549 | macros/latex/contrib/l3experimental/l3graphics.ins
-2019/09/19 | 363130 | macros/latex/contrib/l3experimental/l3graphics.pdf
-2019/09/19 | 277263 | macros/latex/contrib/l3experimental/l3pdf-code.pdf
-2019/09/19 | 1116 | macros/latex/contrib/l3experimental/l3pdf-code.tex
-2019/09/19 | 9857 | macros/latex/contrib/l3experimental/l3pdf.dtx
-2019/09/19 | 1526 | macros/latex/contrib/l3experimental/l3pdf.ins
-2019/09/19 | 349804 | macros/latex/contrib/l3experimental/l3pdf.pdf
-2019/09/19 | 31787 | macros/latex/contrib/l3experimental/l3str-format.dtx
-2019/09/19 | 344923 | macros/latex/contrib/l3experimental/l3str-format.pdf
-2019/08/30 | 1565 | macros/latex/contrib/l3experimental/l3str.ins
-2019/09/19 | 10937 | macros/latex/contrib/l3experimental/l3sys-shell.dtx
+2019/09/28 | 349914 | macros/latex/contrib/l3experimental/l3color.pdf
+2019/09/28 | 4328 | macros/latex/contrib/l3experimental/l3draw-boxes.dtx
+2019/09/28 | 624152 | macros/latex/contrib/l3experimental/l3draw-code.pdf
+2019/09/26 | 1356 | macros/latex/contrib/l3experimental/l3draw-code.tex
+2019/09/28 | 40718 | macros/latex/contrib/l3experimental/l3draw.dtx
+2019/09/26 | 1912 | macros/latex/contrib/l3experimental/l3draw.ins
+2019/09/28 | 5662 | macros/latex/contrib/l3experimental/l3draw-layers.dtx
+2019/09/28 | 32473 | macros/latex/contrib/l3experimental/l3draw-paths.dtx
+2019/09/28 | 491537 | macros/latex/contrib/l3experimental/l3draw.pdf
+2019/09/28 | 31299 | macros/latex/contrib/l3experimental/l3draw-points.dtx
+2019/09/28 | 7488 | macros/latex/contrib/l3experimental/l3draw-scopes.dtx
+2019/09/28 | 20463 | macros/latex/contrib/l3experimental/l3draw-softpath.dtx
+2019/09/28 | 6163 | macros/latex/contrib/l3experimental/l3draw-state.dtx
+2019/09/28 | 9888 | macros/latex/contrib/l3experimental/l3draw-transforms.dtx
+2019/09/28 | 96866 | macros/latex/contrib/l3experimental/l3galley.dtx
+2019/09/28 | 385959 | macros/latex/contrib/l3experimental/l3galley.pdf
+2019/09/28 | 24771 | macros/latex/contrib/l3experimental/l3graphics.dtx
+2019/09/26 | 1549 | macros/latex/contrib/l3experimental/l3graphics.ins
+2019/09/28 | 363307 | macros/latex/contrib/l3experimental/l3graphics.pdf
+2019/09/28 | 277554 | macros/latex/contrib/l3experimental/l3pdf-code.pdf
+2019/09/28 | 1116 | macros/latex/contrib/l3experimental/l3pdf-code.tex
+2019/09/28 | 9857 | macros/latex/contrib/l3experimental/l3pdf.dtx
+2019/09/28 | 1526 | macros/latex/contrib/l3experimental/l3pdf.ins
+2019/09/28 | 349991 | macros/latex/contrib/l3experimental/l3pdf.pdf
+2019/09/28 | 31787 | macros/latex/contrib/l3experimental/l3str-format.dtx
+2019/09/28 | 345103 | macros/latex/contrib/l3experimental/l3str-format.pdf
+2019/09/26 | 1565 | macros/latex/contrib/l3experimental/l3str.ins
+2019/09/28 | 10937 | macros/latex/contrib/l3experimental/l3sys-shell.dtx
2019/08/30 | 1571 | macros/latex/contrib/l3experimental/l3sys-shell.ins
-2019/09/19 | 311683 | macros/latex/contrib/l3experimental/l3sys-shell.pdf
-2019/09/19 | 4549 | macros/latex/contrib/l3experimental/README.md
-2019/09/19 | 35177 | macros/latex/contrib/l3experimental/xcoffins.dtx
+2019/09/28 | 311872 | macros/latex/contrib/l3experimental/l3sys-shell.pdf
+2019/09/28 | 4549 | macros/latex/contrib/l3experimental/README.md
+2019/09/28 | 35177 | macros/latex/contrib/l3experimental/xcoffins.dtx
2019/08/30 | 1570 | macros/latex/contrib/l3experimental/xcoffins.ins
-2019/09/19 | 372921 | macros/latex/contrib/l3experimental/xcoffins.pdf
-2019/09/19 | 58429 | macros/latex/contrib/l3experimental/xgalley.dtx
+2019/09/28 | 373088 | macros/latex/contrib/l3experimental/xcoffins.pdf
+2019/09/28 | 58429 | macros/latex/contrib/l3experimental/xgalley.dtx
2019/08/30 | 1625 | macros/latex/contrib/l3experimental/xgalley.ins
-2019/09/19 | 285702 | macros/latex/contrib/l3experimental/xgalley.pdf
-2019/09/19 | 4899881 | macros/latex/contrib/l3experimental.zip
-2019/09/19 | 14489 | macros/latex/contrib/l3kernel/CHANGELOG.md
-2019/09/19 | 68191 | macros/latex/contrib/l3kernel/expl3.dtx
-2019/09/19 | 585193 | macros/latex/contrib/l3kernel/expl3.pdf
-2019/09/19 | 1530174 | macros/latex/contrib/l3kernel/interface3.pdf
-2019/09/19 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
-2019/09/19 | 6129 | macros/latex/contrib/l3kernel/l3alloc.dtx
-2019/09/19 | 137805 | macros/latex/contrib/l3kernel/l3basics.dtx
-2019/09/19 | 19610 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
-2019/09/19 | 78723 | macros/latex/contrib/l3kernel/l3box.dtx
-2019/09/19 | 161351 | macros/latex/contrib/l3kernel/l3candidates.dtx
-2019/09/19 | 74349 | macros/latex/contrib/l3kernel/l3clist.dtx
-2019/09/19 | 85417 | macros/latex/contrib/l3kernel/l3coffins.dtx
-2019/09/19 | 6203 | macros/latex/contrib/l3kernel/l3color-base.dtx
-2019/09/19 | 33796 | macros/latex/contrib/l3kernel/l3deprecation.dtx
-2019/09/19 | 149143 | macros/latex/contrib/l3kernel/l3doc.dtx
-2019/09/19 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
-2019/09/19 | 263297 | macros/latex/contrib/l3kernel/l3docstrip.pdf
-2019/09/19 | 104953 | macros/latex/contrib/l3kernel/l3expan.dtx
-2019/09/19 | 113574 | macros/latex/contrib/l3kernel/l3file.dtx
-2019/09/19 | 15708 | macros/latex/contrib/l3kernel/l3final.dtx
-2019/09/19 | 10286 | macros/latex/contrib/l3kernel/l3flag.dtx
-2019/09/19 | 5523 | macros/latex/contrib/l3kernel/l3format.ins
-2019/09/19 | 9484 | macros/latex/contrib/l3kernel/l3fparray.dtx
-2019/09/19 | 6970 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
-2019/09/19 | 47215 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
-2019/09/19 | 84833 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
-2019/09/19 | 19378 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
-2019/09/19 | 69157 | macros/latex/contrib/l3kernel/l3fp.dtx
-2019/09/19 | 49394 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
-2019/09/19 | 51073 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
-2019/09/19 | 23068 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
-2019/09/19 | 105630 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
-2019/09/19 | 25753 | macros/latex/contrib/l3kernel/l3fp-random.dtx
-2019/09/19 | 18605 | macros/latex/contrib/l3kernel/l3fp-round.dtx
-2019/09/19 | 12979 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
-2019/09/19 | 73859 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
-2019/09/19 | 5754 | macros/latex/contrib/l3kernel/l3.ins
-2019/09/19 | 18045 | macros/latex/contrib/l3kernel/l3intarray.dtx
-2019/09/19 | 90450 | macros/latex/contrib/l3kernel/l3int.dtx
-2019/09/19 | 24818 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
-2019/09/19 | 97705 | macros/latex/contrib/l3kernel/l3keys.dtx
-2019/09/19 | 2479 | macros/latex/contrib/l3kernel/l3legacy.dtx
-2019/09/19 | 16179 | macros/latex/contrib/l3kernel/l3luatex.dtx
-2019/09/19 | 72111 | macros/latex/contrib/l3kernel/l3msg.dtx
-2019/09/19 | 111497 | macros/latex/contrib/l3kernel/l3names.dtx
-2019/09/19 | 35785 | macros/latex/contrib/l3kernel/l3obsolete.txt
-2019/09/19 | 29356 | macros/latex/contrib/l3kernel/l3prefixes.csv
-2019/09/19 | 59020 | macros/latex/contrib/l3kernel/l3prefixes.pdf
-2019/08/30 | 2592 | macros/latex/contrib/l3kernel/l3prefixes.tex
-2019/09/19 | 63877 | macros/latex/contrib/l3kernel/l3prg.dtx
-2019/09/19 | 48454 | macros/latex/contrib/l3kernel/l3prop.dtx
-2019/09/19 | 21917 | macros/latex/contrib/l3kernel/l3quark.dtx
-2019/09/19 | 253003 | macros/latex/contrib/l3kernel/l3regex.dtx
-2019/09/19 | 78635 | macros/latex/contrib/l3kernel/l3seq.dtx
-2019/09/19 | 79630 | macros/latex/contrib/l3kernel/l3skip.dtx
-2019/09/19 | 40930 | macros/latex/contrib/l3kernel/l3sort.dtx
-2019/09/19 | 109736 | macros/latex/contrib/l3kernel/l3str-convert.dtx
-2019/09/19 | 72864 | macros/latex/contrib/l3kernel/l3str.dtx
-2019/09/19 | 280001 | macros/latex/contrib/l3kernel/l3styleguide.pdf
-2019/09/19 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
-2019/09/19 | 227721 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
-2019/09/19 | 6104 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
-2019/09/19 | 9304 | macros/latex/contrib/l3kernel/l3sys.dtx
-2019/09/19 | 186506 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
-2019/09/19 | 1642 | macros/latex/contrib/l3kernel/l3term-glossary.tex
-2019/09/19 | 40709 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
-2019/09/19 | 134276 | macros/latex/contrib/l3kernel/l3tl.dtx
-2019/09/19 | 98506 | macros/latex/contrib/l3kernel/l3token.dtx
-2019/09/19 | 8973 | macros/latex/contrib/l3kernel/l3unicode.dtx
-2019/09/19 | 2997 | macros/latex/contrib/l3kernel/README.md
-2019/08/30 | 21047 | macros/latex/contrib/l3kernel/source3body.tex
-2019/09/19 | 5731297 | macros/latex/contrib/l3kernel/source3.pdf
-2019/09/19 | 2153 | macros/latex/contrib/l3kernel/source3.tex
-2019/09/19 | 9242457 | macros/latex/contrib/l3kernel.zip
+2019/09/28 | 285881 | macros/latex/contrib/l3experimental/xgalley.pdf
+2019/09/29 | 4902692 | macros/latex/contrib/l3experimental.zip
+2019/09/28 | 15469 | macros/latex/contrib/l3kernel/CHANGELOG.md
+2019/09/28 | 59426 | macros/latex/contrib/l3kernel/expl3.dtx
+2019/09/28 | 585166 | macros/latex/contrib/l3kernel/expl3.pdf
+2019/09/28 | 1534320 | macros/latex/contrib/l3kernel/interface3.pdf
+2019/09/28 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
+2019/09/28 | 6129 | macros/latex/contrib/l3kernel/l3alloc.dtx
+2019/09/28 | 124824 | macros/latex/contrib/l3kernel/l3basics.dtx
+2019/09/28 | 19610 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
+2019/09/28 | 77026 | macros/latex/contrib/l3kernel/l3box.dtx
+2019/09/28 | 129546 | macros/latex/contrib/l3kernel/l3candidates.dtx
+2019/09/28 | 74349 | macros/latex/contrib/l3kernel/l3clist.dtx
+2019/09/28 | 85417 | macros/latex/contrib/l3kernel/l3coffins.dtx
+2019/09/28 | 6203 | macros/latex/contrib/l3kernel/l3color-base.dtx
+2019/09/28 | 42137 | macros/latex/contrib/l3kernel/l3debug.dtx
+2019/09/28 | 35043 | macros/latex/contrib/l3kernel/l3deprecation.dtx
+2019/09/28 | 149143 | macros/latex/contrib/l3kernel/l3doc.dtx
+2019/09/28 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
+2019/09/28 | 263491 | macros/latex/contrib/l3kernel/l3docstrip.pdf
+2019/09/28 | 106223 | macros/latex/contrib/l3kernel/l3expan.dtx
+2019/09/28 | 120179 | macros/latex/contrib/l3kernel/l3file.dtx
+2019/09/28 | 15708 | macros/latex/contrib/l3kernel/l3final.dtx
+2019/09/28 | 9450 | macros/latex/contrib/l3kernel/l3flag.dtx
+2019/09/26 | 5667 | macros/latex/contrib/l3kernel/l3format.ins
+2019/09/28 | 11826 | macros/latex/contrib/l3kernel/l3fparray.dtx
+2019/09/28 | 6970 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
+2019/09/28 | 47215 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
+2019/09/28 | 84833 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
+2019/09/28 | 19661 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
+2019/09/28 | 70287 | macros/latex/contrib/l3kernel/l3fp.dtx
+2019/09/28 | 49394 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
+2019/09/28 | 51073 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
+2019/09/28 | 23068 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
+2019/09/28 | 105630 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
+2019/09/28 | 25753 | macros/latex/contrib/l3kernel/l3fp-random.dtx
+2019/09/28 | 18605 | macros/latex/contrib/l3kernel/l3fp-round.dtx
+2019/09/28 | 12979 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
+2019/09/28 | 73859 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
+2019/09/26 | 5912 | macros/latex/contrib/l3kernel/l3.ins
+2019/09/28 | 19693 | macros/latex/contrib/l3kernel/l3intarray.dtx
+2019/09/28 | 88331 | macros/latex/contrib/l3kernel/l3int.dtx
+2019/09/28 | 19219 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+2019/09/28 | 97721 | macros/latex/contrib/l3kernel/l3keys.dtx
+2019/09/28 | 2479 | macros/latex/contrib/l3kernel/l3legacy.dtx
+2019/09/28 | 16179 | macros/latex/contrib/l3kernel/l3luatex.dtx
+2019/09/28 | 71688 | macros/latex/contrib/l3kernel/l3msg.dtx
+2019/09/28 | 111497 | macros/latex/contrib/l3kernel/l3names.dtx
+2019/09/28 | 35785 | macros/latex/contrib/l3kernel/l3obsolete.txt
+2019/09/28 | 29531 | macros/latex/contrib/l3kernel/l3prefixes.csv
+2019/09/28 | 59084 | macros/latex/contrib/l3kernel/l3prefixes.pdf
+2019/09/26 | 2592 | macros/latex/contrib/l3kernel/l3prefixes.tex
+2019/09/28 | 64264 | macros/latex/contrib/l3kernel/l3prg.dtx
+2019/09/28 | 49619 | macros/latex/contrib/l3kernel/l3prop.dtx
+2019/09/28 | 21791 | macros/latex/contrib/l3kernel/l3quark.dtx
+2019/09/28 | 250949 | macros/latex/contrib/l3kernel/l3regex.dtx
+2019/09/28 | 82562 | macros/latex/contrib/l3kernel/l3seq.dtx
+2019/09/28 | 75902 | macros/latex/contrib/l3kernel/l3skip.dtx
+2019/09/28 | 40930 | macros/latex/contrib/l3kernel/l3sort.dtx
+2019/09/28 | 109736 | macros/latex/contrib/l3kernel/l3str-convert.dtx
+2019/09/28 | 72900 | macros/latex/contrib/l3kernel/l3str.dtx
+2019/09/28 | 280279 | macros/latex/contrib/l3kernel/l3styleguide.pdf
+2019/09/28 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
+2019/09/28 | 228018 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+2019/09/28 | 6104 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
+2019/09/28 | 23619 | macros/latex/contrib/l3kernel/l3sys.dtx
+2019/09/28 | 186806 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
+2019/09/28 | 1642 | macros/latex/contrib/l3kernel/l3term-glossary.tex
+2019/09/28 | 40709 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+2019/09/28 | 132279 | macros/latex/contrib/l3kernel/l3tl.dtx
+2019/09/28 | 98506 | macros/latex/contrib/l3kernel/l3token.dtx
+2019/09/28 | 8973 | macros/latex/contrib/l3kernel/l3unicode.dtx
+2019/09/28 | 2997 | macros/latex/contrib/l3kernel/README.md
+2019/09/26 | 21047 | macros/latex/contrib/l3kernel/source3body.tex
+2019/09/28 | 5681390 | macros/latex/contrib/l3kernel/source3.pdf
+2019/09/28 | 2153 | macros/latex/contrib/l3kernel/source3.tex
+2019/09/29 | 9207039 | macros/latex/contrib/l3kernel.zip
2019/05/28 | 1769 | macros/latex/contrib/l3packages/CHANGELOG.md
2018/04/29 | 1444 | macros/latex/contrib/l3packages/l3keys2e-demo.tex
2019/05/28 | 11156 | macros/latex/contrib/l3packages/l3keys2e.dtx
@@ -195357,11 +195435,11 @@
2011/05/12 | 2538 | macros/latex/contrib/skb/source/skb.ins
2011/03/15 | 523 | macros/latex/contrib/skb/source/TODO.TXT
2011/06/03 | 1621916 | macros/latex/contrib/skb.zip
-2018/04/18 | 1617 | macros/latex/contrib/skdoc/Makefile
-2018/04/18 | 1611 | macros/latex/contrib/skdoc/README
-2018/04/18 | 123610 | macros/latex/contrib/skdoc/skdoc.dtx
-2018/04/18 | 271754 | macros/latex/contrib/skdoc/skdoc.pdf
-2018/04/19 | 300090 | macros/latex/contrib/skdoc.zip
+2019/09/29 | 1617 | macros/latex/contrib/skdoc/Makefile
+2019/09/29 | 1611 | macros/latex/contrib/skdoc/README
+2019/09/29 | 123767 | macros/latex/contrib/skdoc/skdoc.dtx
+2019/09/29 | 293072 | macros/latex/contrib/skdoc/skdoc.pdf
+2019/09/29 | 321405 | macros/latex/contrib/skdoc.zip
2011/10/28 | 2523 | macros/latex/contrib/skeycommand/README
2011/11/20 | 1507 | macros/latex/contrib/skeycommand/skeycommand-guide.cfg
2011/11/20 | 356201 | macros/latex/contrib/skeycommand/skeycommand-guide.pdf
@@ -195986,12 +196064,12 @@
2010/11/01 | 5205 | macros/latex/contrib/statex/statex-example.tex
2006/05/17 | 15102 | macros/latex/contrib/statex/statex.sty
2010/11/03 | 180456 | macros/latex/contrib/statex.zip
-2018/07/21 | 35086 | macros/latex/contrib/statistics/LICENSE
-2018/07/21 | 923 | macros/latex/contrib/statistics/README.md
-2018/07/21 | 122862 | macros/latex/contrib/statistics/statistics.dtx
-2018/07/21 | 478 | macros/latex/contrib/statistics/statistics.ins
-2018/07/21 | 427734 | macros/latex/contrib/statistics/statistics.pdf
-2018/07/21 | 455463 | macros/latex/contrib/statistics.zip
+2019/09/29 | 35086 | macros/latex/contrib/statistics/LICENSE
+2019/09/29 | 923 | macros/latex/contrib/statistics/README.md
+2019/09/29 | 125859 | macros/latex/contrib/statistics/statistics.dtx
+2019/09/29 | 478 | macros/latex/contrib/statistics/statistics.ins
+2019/09/29 | 436624 | macros/latex/contrib/statistics/statistics.pdf
+2019/09/29 | 464207 | macros/latex/contrib/statistics.zip
2003/04/06 | 14849 | macros/latex/contrib/statistik/statistik.dtx
2003/04/06 | 3127 | macros/latex/contrib/statistik/statistik.ins
2010/11/01 | 93561 | macros/latex/contrib/statistik/statistik.pdf
@@ -197187,54 +197265,54 @@
2015/11/23 | 21446 | macros/latex/contrib/testhyphens/testhyphens.dtx
2015/11/23 | 382110 | macros/latex/contrib/testhyphens/testhyphens.pdf
2015/11/23 | 390448 | macros/latex/contrib/testhyphens.zip
-2017/08/11 | 391 | macros/latex/contrib/testidx/CHANGES
-2017/08/11 | 707 | macros/latex/contrib/testidx/README
-2017/08/11 | 186061 | macros/latex/contrib/testidx/samples/sample-idx-a4.pdf
-2017/08/11 | 494 | macros/latex/contrib/testidx/samples/sample-idx-a4.tex
-2017/08/11 | 190620 | macros/latex/contrib/testidx/samples/sample-idx-amsmath.pdf
-2017/08/11 | 531 | macros/latex/contrib/testidx/samples/sample-idx-amsmath.tex
-2017/08/11 | 204565 | macros/latex/contrib/testidx/samples/sample-idx-babel-german.pdf
-2017/08/11 | 984 | macros/latex/contrib/testidx/samples/sample-idx-babel-german.tex
-2017/08/11 | 204480 | macros/latex/contrib/testidx/samples/sample-idx-german.pdf
-2017/08/11 | 967 | macros/latex/contrib/testidx/samples/sample-idx-german.tex
-2017/08/11 | 364062 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.pdf
-2017/08/11 | 2117 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.tex
-2017/08/11 | 178540 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.pdf
-2017/08/11 | 2226 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.tex
-2017/08/11 | 430712 | macros/latex/contrib/testidx/samples/sample-idxgloss-desc.pdf
-2017/08/11 | 298 | macros/latex/contrib/testidx/samples/sample-idxgloss-desc.tex
-2017/08/11 | 304536 | macros/latex/contrib/testidx/samples/sample-idxgloss.pdf
-2017/08/11 | 444 | macros/latex/contrib/testidx/samples/sample-idxgloss.tex
-2017/08/11 | 100182 | macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.pdf
-2017/08/11 | 865 | macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.tex
-2017/08/11 | 279604 | macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.pdf
-2017/08/11 | 788 | macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.tex
-2017/08/11 | 207017 | macros/latex/contrib/testidx/samples/sample-idx-hyp.pdf
-2017/08/11 | 513 | macros/latex/contrib/testidx/samples/sample-idx-hyp.tex
-2017/08/11 | 199713 | macros/latex/contrib/testidx/samples/sample-idx-letter.pdf
-2017/08/11 | 567 | macros/latex/contrib/testidx/samples/sample-idx-letter.tex
-2017/08/11 | 148258 | macros/latex/contrib/testidx/samples/sample-idx-lua.pdf
-2017/08/11 | 1616 | macros/latex/contrib/testidx/samples/sample-idx-lua.tex
-2017/08/11 | 187731 | macros/latex/contrib/testidx/samples/sample-idx.pdf
-2017/08/11 | 138492 | macros/latex/contrib/testidx/samples/sample-idx-subset.pdf
-2017/08/11 | 528 | macros/latex/contrib/testidx/samples/sample-idx-subset.tex
-2017/08/11 | 294342 | macros/latex/contrib/testidx/samples/sample-idx-t1.pdf
-2017/08/11 | 889 | macros/latex/contrib/testidx/samples/sample-idx-t1.tex
-2017/08/11 | 855 | macros/latex/contrib/testidx/samples/sample-idx.tex
-2017/08/11 | 316716 | macros/latex/contrib/testidx/samples/sample-idx-utf8.pdf
-2017/08/11 | 1993 | macros/latex/contrib/testidx/samples/sample-idx-utf8.tex
-2017/08/11 | 101305 | macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.pdf
-2017/08/11 | 1754 | macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.tex
-2017/08/11 | 103564 | macros/latex/contrib/testidx/samples/sample-idx-xe.pdf
-2017/08/11 | 1625 | macros/latex/contrib/testidx/samples/sample-idx-xe.tex
-2017/08/11 | 276368 | macros/latex/contrib/testidx/samples/sample-noidxgloss.pdf
-2017/08/11 | 256 | macros/latex/contrib/testidx/samples/sample-noidxgloss.tex
-2017/08/11 | 480276 | macros/latex/contrib/testidx/testidx-code.pdf
-2017/08/11 | 393735 | macros/latex/contrib/testidx/testidx.dtx
-2017/08/11 | 3023 | macros/latex/contrib/testidx/testidx.ins
-2017/08/11 | 321402 | macros/latex/contrib/testidx/testidx-manual.pdf
-2017/08/11 | 40731 | macros/latex/contrib/testidx/testidx-manual.tex
-2017/08/11 | 5232199 | macros/latex/contrib/testidx.zip
+2019/09/29 | 508 | macros/latex/contrib/testidx/CHANGES
+2019/09/29 | 759 | macros/latex/contrib/testidx/README
+2019/09/29 | 186326 | macros/latex/contrib/testidx/samples/sample-idx-a4.pdf
+2019/09/29 | 494 | macros/latex/contrib/testidx/samples/sample-idx-a4.tex
+2019/09/29 | 190937 | macros/latex/contrib/testidx/samples/sample-idx-amsmath.pdf
+2019/09/29 | 531 | macros/latex/contrib/testidx/samples/sample-idx-amsmath.tex
+2019/09/29 | 204609 | macros/latex/contrib/testidx/samples/sample-idx-babel-german.pdf
+2019/09/29 | 991 | macros/latex/contrib/testidx/samples/sample-idx-babel-german.tex
+2019/09/29 | 204649 | macros/latex/contrib/testidx/samples/sample-idx-german.pdf
+2019/09/29 | 973 | macros/latex/contrib/testidx/samples/sample-idx-german.tex
+2019/09/29 | 363897 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.pdf
+2019/09/29 | 2117 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.tex
+2019/09/29 | 179953 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.pdf
+2019/09/29 | 2226 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.tex
+2019/09/29 | 431035 | macros/latex/contrib/testidx/samples/sample-idxgloss-desc.pdf
+2019/09/29 | 304 | macros/latex/contrib/testidx/samples/sample-idxgloss-desc.tex
+2019/09/29 | 304624 | macros/latex/contrib/testidx/samples/sample-idxgloss.pdf
+2019/09/29 | 450 | macros/latex/contrib/testidx/samples/sample-idxgloss.tex
+2019/09/29 | 101271 | macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.pdf
+2019/09/29 | 865 | macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.tex
+2019/09/29 | 279705 | macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.pdf
+2019/09/29 | 788 | macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.tex
+2019/09/29 | 207510 | macros/latex/contrib/testidx/samples/sample-idx-hyp.pdf
+2019/09/29 | 513 | macros/latex/contrib/testidx/samples/sample-idx-hyp.tex
+2019/09/29 | 199911 | macros/latex/contrib/testidx/samples/sample-idx-letter.pdf
+2019/09/29 | 567 | macros/latex/contrib/testidx/samples/sample-idx-letter.tex
+2019/09/29 | 148916 | macros/latex/contrib/testidx/samples/sample-idx-lua.pdf
+2019/09/29 | 1622 | macros/latex/contrib/testidx/samples/sample-idx-lua.tex
+2019/09/29 | 188003 | macros/latex/contrib/testidx/samples/sample-idx.pdf
+2019/09/29 | 138492 | macros/latex/contrib/testidx/samples/sample-idx-subset.pdf
+2019/09/29 | 528 | macros/latex/contrib/testidx/samples/sample-idx-subset.tex
+2019/09/29 | 294962 | macros/latex/contrib/testidx/samples/sample-idx-t1.pdf
+2019/09/29 | 889 | macros/latex/contrib/testidx/samples/sample-idx-t1.tex
+2019/09/29 | 855 | macros/latex/contrib/testidx/samples/sample-idx.tex
+2019/09/29 | 316807 | macros/latex/contrib/testidx/samples/sample-idx-utf8.pdf
+2019/09/29 | 2000 | macros/latex/contrib/testidx/samples/sample-idx-utf8.tex
+2019/09/29 | 102392 | macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.pdf
+2019/09/29 | 1813 | macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.tex
+2019/09/29 | 104548 | macros/latex/contrib/testidx/samples/sample-idx-xe.pdf
+2019/09/29 | 1630 | macros/latex/contrib/testidx/samples/sample-idx-xe.tex
+2019/09/29 | 277566 | macros/latex/contrib/testidx/samples/sample-noidxgloss.pdf
+2019/09/29 | 256 | macros/latex/contrib/testidx/samples/sample-noidxgloss.tex
+2019/09/29 | 483610 | macros/latex/contrib/testidx/testidx-code.pdf
+2019/09/29 | 395407 | macros/latex/contrib/testidx/testidx.dtx
+2019/09/29 | 3023 | macros/latex/contrib/testidx/testidx.ins
+2019/09/29 | 326696 | macros/latex/contrib/testidx/testidx-manual.pdf
+2019/09/29 | 44121 | macros/latex/contrib/testidx/testidx-manual.tex
+2019/09/29 | 5250133 | macros/latex/contrib/testidx.zip
2016/03/31 | 2328 | macros/latex/contrib/teubner/README
2016/03/31 | 381111 | macros/latex/contrib/teubner/teubner-doc.pdf
2016/03/31 | 89189 | macros/latex/contrib/teubner/teubner-doc.tex
@@ -247802,9 +247880,9 @@
2019/02/28 | 3340 | systems/texlive/tlnet/archive/dashundergaps.tar.xz
2019/02/28 | 247204 | systems/texlive/tlnet/archive/dataref.doc.tar.xz
2019/02/28 | 6868 | systems/texlive/tlnet/archive/dataref.tar.xz
-2019/02/28 | 2678888 | systems/texlive/tlnet/archive/datatool.doc.tar.xz
-2019/02/28 | 103196 | systems/texlive/tlnet/archive/datatool.source.tar.xz
-2019/02/28 | 55332 | systems/texlive/tlnet/archive/datatool.tar.xz
+2019/09/29 | 2683716 | systems/texlive/tlnet/archive/datatool.doc.tar.xz
+2019/09/29 | 103864 | systems/texlive/tlnet/archive/datatool.source.tar.xz
+2019/09/29 | 55404 | systems/texlive/tlnet/archive/datatool.tar.xz
2019/02/28 | 233644 | systems/texlive/tlnet/archive/dateiliste.doc.tar.xz
2019/02/28 | 22632 | systems/texlive/tlnet/archive/dateiliste.source.tar.xz
2019/02/28 | 4264 | systems/texlive/tlnet/archive/dateiliste.tar.xz
@@ -249703,7 +249781,7 @@
2019/02/28 | 123944 | systems/texlive/tlnet/archive/glossaries-danish.doc.tar.xz
2019/02/28 | 2232 | systems/texlive/tlnet/archive/glossaries-danish.source.tar.xz
2019/02/28 | 1668 | systems/texlive/tlnet/archive/glossaries-danish.tar.xz
-2019/02/28 | 5384196 | systems/texlive/tlnet/archive/glossaries.doc.tar.xz
+2019/09/29 | 5384624 | systems/texlive/tlnet/archive/glossaries.doc.tar.xz
2019/02/28 | 155320 | systems/texlive/tlnet/archive/glossaries-dutch.doc.tar.xz
2019/02/28 | 2364 | systems/texlive/tlnet/archive/glossaries-dutch.source.tar.xz
2019/02/28 | 1656 | systems/texlive/tlnet/archive/glossaries-dutch.tar.xz
@@ -249751,11 +249829,11 @@
2019/05/25 | 124256 | systems/texlive/tlnet/archive/glossaries-slovene.doc.tar.xz
2019/05/25 | 2240 | systems/texlive/tlnet/archive/glossaries-slovene.source.tar.xz
2019/05/25 | 1668 | systems/texlive/tlnet/archive/glossaries-slovene.tar.xz
-2019/02/28 | 145424 | systems/texlive/tlnet/archive/glossaries.source.tar.xz
+2019/09/29 | 145616 | systems/texlive/tlnet/archive/glossaries.source.tar.xz
2019/02/28 | 128220 | systems/texlive/tlnet/archive/glossaries-spanish.doc.tar.xz
2019/02/28 | 2520 | systems/texlive/tlnet/archive/glossaries-spanish.source.tar.xz
2019/02/28 | 1896 | systems/texlive/tlnet/archive/glossaries-spanish.tar.xz
-2019/02/28 | 76664 | systems/texlive/tlnet/archive/glossaries.tar.xz
+2019/09/29 | 76784 | systems/texlive/tlnet/archive/glossaries.tar.xz
2019/02/28 | 720 | systems/texlive/tlnet/archive/glossaries.win32.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/glossaries.x86_64-cygwin.tar.xz
2019/02/28 | 376 | systems/texlive/tlnet/archive/glossaries.x86_64-darwinlegacy.tar.xz
@@ -255487,8 +255565,8 @@
2019/04/06 | 280 | systems/texlive/tlnet/archive/texlive-cz.tar.xz
2019/03/28 | 1299960 | systems/texlive/tlnet/archive/texlive-de.doc.tar.xz
2019/03/28 | 272 | systems/texlive/tlnet/archive/texlive-de.tar.xz
-2019/09/27 | 154820 | systems/texlive/tlnet/archive/texlive-docindex.doc.tar.xz
-2019/09/27 | 109876 | systems/texlive/tlnet/archive/texlive-docindex.tar.xz
+2019/09/29 | 154856 | systems/texlive/tlnet/archive/texlive-docindex.doc.tar.xz
+2019/09/29 | 109876 | systems/texlive/tlnet/archive/texlive-docindex.tar.xz
2019/08/15 | 1856616 | systems/texlive/tlnet/archive/texlive-en.doc.tar.xz
2019/08/15 | 276 | systems/texlive/tlnet/archive/texlive-en.tar.xz
2019/04/01 | 2279380 | systems/texlive/tlnet/archive/texlive-es.doc.tar.xz
@@ -255544,13 +255622,13 @@
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.tar.xz
-2019/09/28 | 51244 | systems/texlive/tlnet/archive/texlive-scripts.doc.tar.xz
+2019/09/29 | 51244 | systems/texlive/tlnet/archive/texlive-scripts.doc.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.i386-cygwin.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.i386-freebsd.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.tar.xz
-2019/09/28 | 85048 | systems/texlive/tlnet/archive/texlive-scripts.tar.xz
+2019/09/29 | 85088 | systems/texlive/tlnet/archive/texlive-scripts.tar.xz
2019/08/31 | 11636 | systems/texlive/tlnet/archive/texlive-scripts.win32.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.tar.xz
2019/02/28 | 376 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-darwinlegacy.tar.xz
@@ -256392,8 +256470,8 @@
2019/07/27 | 352 | systems/texlive/tlnet/archive/uplatex.x86_64-linuxmusl.tar.xz
2019/07/27 | 344 | systems/texlive/tlnet/archive/uplatex.x86_64-linux.tar.xz
2019/07/27 | 348 | systems/texlive/tlnet/archive/uplatex.x86_64-solaris.tar.xz
-2019/09/18 | 514236 | systems/texlive/tlnet/archive/upmethodology.doc.tar.xz
-2019/09/18 | 28508 | systems/texlive/tlnet/archive/upmethodology.tar.xz
+2019/09/29 | 527644 | systems/texlive/tlnet/archive/upmethodology.doc.tar.xz
+2019/09/29 | 28676 | systems/texlive/tlnet/archive/upmethodology.tar.xz
2019/02/28 | 156432 | systems/texlive/tlnet/archive/uppunctlm.doc.tar.xz
2019/02/28 | 13992 | systems/texlive/tlnet/archive/uppunctlm.tar.xz
2019/02/28 | 163312 | systems/texlive/tlnet/archive/upquote.doc.tar.xz
@@ -257084,16 +257162,16 @@
2019/02/28 | 136844 | systems/texlive/tlnet/archive/zxjatype.doc.tar.xz
2019/02/28 | 8412 | systems/texlive/tlnet/archive/zxjatype.tar.xz
2019/08/08 | 106115 | systems/texlive/tlnet/install-tl
-2019/09/28 | 3941652 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2019/09/28 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2019/09/28 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2019/09/29 | 3941700 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2019/09/29 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2019/09/29 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2019/05/09 | 4543 | systems/texlive/tlnet/install-tl-windows.bat
-2019/09/28 | 18694100 | systems/texlive/tlnet/install-tl-windows.exe
-2019/09/28 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2019/09/28 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2019/09/28 | 22533016 | systems/texlive/tlnet/install-tl.zip
-2019/09/28 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2019/09/28 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2019/09/29 | 18688889 | systems/texlive/tlnet/install-tl-windows.exe
+2019/09/29 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2019/09/29 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2019/09/29 | 22533046 | systems/texlive/tlnet/install-tl.zip
+2019/09/29 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2019/09/29 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2019/04/29 | 1221 | systems/texlive/tlnet/README.md
2019/03/13 | 5351 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
2016/04/12 | 600 | systems/texlive/tlnet/tlpkg/gpg/random_seed
@@ -257102,7 +257180,7 @@
2019/03/13 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2019/09/14 | 48351 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2019/09/27 | 5141 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2019/09/28 | 5273 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2018/04/29 | 13647 | systems/texlive/tlnet/tlpkg/installer/DirSelect.pm
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
2019/06/25 | 5491 | systems/texlive/tlnet/tlpkg/installer/install-menu-extl.pl
@@ -257148,12 +257226,12 @@
2019/09/23 | 18176 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2016/10/11 | 4618 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2017/11/14 | 27560 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2019/09/28 | 15815240 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2019/09/28 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2019/09/29 | 15815352 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2019/09/29 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2019/09/24 | 87255 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2019/09/28 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2019/09/28 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2019/09/28 | 2119504 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2019/09/29 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2019/09/29 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2019/09/29 | 2120424 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2019/03/03 | 57785 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2018/12/17 | 36910 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2018/08/31 | 14972 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -259360,7 +259438,7 @@
2012/01/02 | 1774663 | systems/win32/miktex/tm/packages/acrosort.tar.lzma
2019/09/26 | 612535 | systems/win32/miktex/tm/packages/acro.tar.lzma
2010/11/24 | 163309 | systems/win32/miktex/tm/packages/acroterm.tar.lzma
-2019/06/04 | 3165398 | systems/win32/miktex/tm/packages/acrotex.tar.lzma
+2019/09/29 | 3180241 | systems/win32/miktex/tm/packages/acrotex.tar.lzma
2008/05/23 | 333795 | systems/win32/miktex/tm/packages/active-conf.tar.lzma
2019/06/19 | 130643 | systems/win32/miktex/tm/packages/actuarialangle.tar.lzma
2019/06/14 | 301579 | systems/win32/miktex/tm/packages/actuarialsymbol.tar.lzma
@@ -259570,7 +259648,7 @@
2015/05/25 | 5256 | systems/win32/miktex/tm/packages/babel-spanglish.tar.lzma
2016/03/09 | 222541 | systems/win32/miktex/tm/packages/babel-spanish.tar.lzma
2014/05/21 | 140369 | systems/win32/miktex/tm/packages/babel-swedish.tar.lzma
-2019/07/20 | 1445093 | systems/win32/miktex/tm/packages/babel.tar.lzma
+2019/09/29 | 1452203 | systems/win32/miktex/tm/packages/babel.tar.lzma
2014/05/21 | 234101 | systems/win32/miktex/tm/packages/babel-thai.tar.lzma
2019/07/06 | 309208 | systems/win32/miktex/tm/packages/babel-turkish.tar.lzma
2018/04/12 | 476406 | systems/win32/miktex/tm/packages/babel-ukrainian.tar.lzma
@@ -259898,7 +259976,7 @@
2019/09/26 | 991513 | systems/win32/miktex/tm/packages/chemformula.tar.lzma
2016/12/21 | 743474 | systems/win32/miktex/tm/packages/chemgreek.tar.lzma
2005/06/22 | 5537 | systems/win32/miktex/tm/packages/chem-journal.cab
-2019/09/26 | 1121414 | systems/win32/miktex/tm/packages/chemmacros.tar.lzma
+2019/09/29 | 1121422 | systems/win32/miktex/tm/packages/chemmacros.tar.lzma
2016/04/15 | 768092 | systems/win32/miktex/tm/packages/chemnum.tar.lzma
2018/02/26 | 312601 | systems/win32/miktex/tm/packages/chemschemex.tar.lzma
2018/03/17 | 267392 | systems/win32/miktex/tm/packages/chemsec.tar.lzma
@@ -260125,7 +260203,7 @@
2013/04/08 | 238072 | systems/win32/miktex/tm/packages/dashrule.tar.lzma
2018/11/22 | 873357 | systems/win32/miktex/tm/packages/dashundergaps.tar.lzma
2015/09/22 | 267580 | systems/win32/miktex/tm/packages/dataref.tar.lzma
-2018/12/18 | 2838530 | systems/win32/miktex/tm/packages/datatool.tar.lzma
+2019/09/29 | 2844543 | systems/win32/miktex/tm/packages/datatool.tar.lzma
2012/10/17 | 260631 | systems/win32/miktex/tm/packages/dateiliste.tar.lzma
2006/11/14 | 111476 | systems/win32/miktex/tm/packages/datenumber.cab
2018/07/05 | 840667 | systems/win32/miktex/tm/packages/datepicker-pro.tar.lzma
@@ -260262,8 +260340,8 @@
2019/07/20 | 354196 | systems/win32/miktex/tm/packages/dtxdescribe.tar.lzma
2019/07/20 | 61900 | systems/win32/miktex/tm/packages/dtxgen.tar.lzma
2015/09/22 | 315058 | systems/win32/miktex/tm/packages/dtxtut.tar.lzma
-2019/06/12 | 553461 | systems/win32/miktex/tm/packages/ducksay.tar.lzma
-2019/06/03 | 973704 | systems/win32/miktex/tm/packages/duckuments.tar.lzma
+2019/09/29 | 553589 | systems/win32/miktex/tm/packages/ducksay.tar.lzma
+2019/09/29 | 964997 | systems/win32/miktex/tm/packages/duckuments.tar.lzma
2006/10/07 | 152105 | systems/win32/miktex/tm/packages/duerer-latex.cab
2010/12/23 | 14971 | systems/win32/miktex/tm/packages/duerer.tar.lzma
2010/06/04 | 161381 | systems/win32/miktex/tm/packages/duotenzor.tar.lzma
@@ -260457,7 +260535,7 @@
2016/07/15 | 296374 | systems/win32/miktex/tm/packages/export.tar.lzma
2004/08/09 | 526992 | systems/win32/miktex/tm/packages/expressg.cab
2009/03/07 | 92380 | systems/win32/miktex/tm/packages/exp-testopt.tar.lzma
-2017/02/10 | 729581 | systems/win32/miktex/tm/packages/exsheets.tar.lzma
+2019/09/29 | 723561 | systems/win32/miktex/tm/packages/exsheets.tar.lzma
2018/10/24 | 616405 | systems/win32/miktex/tm/packages/exsol.tar.lzma
2008/05/19 | 29425 | systems/win32/miktex/tm/packages/extarrows.tar.lzma
2006/10/07 | 116548 | systems/win32/miktex/tm/packages/exteps.tar.bz2
@@ -260521,7 +260599,7 @@
2019/08/24 | 279023 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2019/09/28 | 505775 | systems/win32/miktex/tm/packages/files.csv.lzma
+2019/09/29 | 506082 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -260727,7 +260805,7 @@
2019/05/25 | 127463 | systems/win32/miktex/tm/packages/glossaries-slovene.tar.lzma
2015/05/30 | 132515 | systems/win32/miktex/tm/packages/glossaries-spanish.tar.lzma
2016/03/09 | 144990 | systems/win32/miktex/tm/packages/glossaries-swedish.tar.lzma
-2019/01/07 | 5571829 | systems/win32/miktex/tm/packages/glossaries.tar.lzma
+2019/09/29 | 5574860 | systems/win32/miktex/tm/packages/glossaries.tar.lzma
2006/07/29 | 139399 | systems/win32/miktex/tm/packages/glossary.cab
2005/06/27 | 26164 | systems/win32/miktex/tm/packages/gloss.cab
2016/02/07 | 78162 | systems/win32/miktex/tm/packages/gloss-occitan.tar.lzma
@@ -261001,7 +261079,7 @@
2016/07/16 | 106291 | systems/win32/miktex/tm/packages/kdgreek.tar.lzma
2009/01/22 | 1704440 | systems/win32/miktex/tm/packages/kerkis.tar.lzma
2004/04/22 | 672120 | systems/win32/miktex/tm/packages/kerntest.cab
-2019/07/05 | 14415990 | systems/win32/miktex/tm/packages/ketcindy.tar.lzma
+2019/09/29 | 14435760 | systems/win32/miktex/tm/packages/ketcindy.tar.lzma
2010/05/10 | 363388 | systems/win32/miktex/tm/packages/keycommand.tar.lzma
2019/09/24 | 1077315 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
2019/04/07 | 150914 | systems/win32/miktex/tm/packages/keyindex.tar.lzma
@@ -261256,7 +261334,7 @@
2015/07/21 | 246219 | systems/win32/miktex/tm/packages/luasseq.tar.lzma
2016/06/21 | 176793 | systems/win32/miktex/tm/packages/luatex85.tar.lzma
2015/10/06 | 276167 | systems/win32/miktex/tm/packages/luatexbase.tar.lzma
-2019/08/30 | 3709754 | systems/win32/miktex/tm/packages/luatexja.tar.lzma
+2019/09/29 | 3749347 | systems/win32/miktex/tm/packages/luatexja.tar.lzma
2019/08/02 | 318598 | systems/win32/miktex/tm/packages/luatexko.tar.lzma
2010/12/23 | 322873 | systems/win32/miktex/tm/packages/luatextra.tar.lzma
2017/10/03 | 253167 | systems/win32/miktex/tm/packages/luatodonotes.tar.lzma
@@ -261620,9 +261698,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2019/09/28 | 38716 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2019/09/28 | 42876 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2019/09/28 | 191020 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2019/09/28 | 1133136 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2019/09/28 | 1056461 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2019/09/29 | 191033 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2019/09/29 | 1133069 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2019/09/29 | 1056881 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2019/09/28 | 13043 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2019/09/28 | 14032 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -261734,7 +261812,7 @@
2011/12/07 | 464357 | systems/win32/miktex/tm/packages/nag.tar.lzma
2017/03/28 | 1049696 | systems/win32/miktex/tm/packages/nameauth.tar.lzma
2005/06/25 | 8785 | systems/win32/miktex/tm/packages/namespc.cab
-2019/04/29 | 434073 | systems/win32/miktex/tm/packages/nanicolle.tar.lzma
+2019/09/29 | 433369 | systems/win32/miktex/tm/packages/nanicolle.tar.lzma
2013/03/28 | 28195703 | systems/win32/miktex/tm/packages/nanumtype1.tar.lzma
2018/06/23 | 362432 | systems/win32/miktex/tm/packages/na-position.tar.lzma
2010/12/13 | 495608 | systems/win32/miktex/tm/packages/natbib.tar.lzma
@@ -261767,183 +261845,183 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2019/09/11 | 231430 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2019/09/28 | 505605 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2019/09/28 | 29253 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2019/09/28 | 33426 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2019/09/28 | 863046 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2019/09/28 | 954180 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2019/09/28 | 24053 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2019/09/28 | 26194 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2019/09/28 | 29256 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2019/09/28 | 34850 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2019/09/28 | 49731 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2019/09/28 | 57192 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2019/09/28 | 84433 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2019/09/28 | 94256 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2019/09/28 | 60336 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2019/09/28 | 67252 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2019/09/28 | 26648 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2019/09/28 | 30238 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2019/09/28 | 328749 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2019/09/28 | 391447 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2019/09/28 | 32191 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2019/09/28 | 36366 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2019/09/28 | 49272 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2019/09/28 | 53940 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2019/09/28 | 198185 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2019/09/28 | 214120 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2019/09/28 | 169239 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2019/09/28 | 184238 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2019/09/28 | 52037 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2019/09/28 | 58851 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2019/09/28 | 20720 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2019/09/28 | 22909 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2019/09/28 | 450077 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
-2019/09/28 | 41010 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2019/09/28 | 45776 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2019/09/28 | 271720 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2019/09/28 | 308929 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2019/09/28 | 40557 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2019/09/28 | 44954 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2019/09/28 | 112856 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2019/09/28 | 127164 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2019/09/28 | 1205460 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2019/09/28 | 1326762 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2019/09/28 | 33355 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2019/09/28 | 38688 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2019/09/28 | 43445 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2019/09/28 | 47969 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2019/09/28 | 45471 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2019/09/28 | 50508 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2019/09/28 | 56633 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2019/09/28 | 61779 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2019/09/28 | 133150 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2019/09/28 | 152131 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2019/09/28 | 69598 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2019/09/28 | 72689 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2019/09/28 | 68750 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2019/09/28 | 77424 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2019/09/28 | 246472 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2019/09/28 | 281503 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2019/09/28 | 25319 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2019/09/28 | 28736 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2019/09/28 | 100714 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2019/09/28 | 116836 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2019/09/28 | 63277 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2019/09/28 | 72559 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2019/09/28 | 94161 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2019/09/28 | 110969 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2019/09/28 | 35220 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2019/09/28 | 39876 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2019/09/28 | 457519 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2019/09/28 | 544492 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2019/09/28 | 1101600 | systems/win32/miktex/tm/packages/next/miktex-harftex-bin-2.9.tar.lzma
-2019/09/28 | 1273248 | systems/win32/miktex/tm/packages/next/miktex-harftex-bin-x64-2.9.tar.lzma
-2019/09/28 | 137118 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2019/09/28 | 149925 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2019/09/28 | 92918 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2019/09/28 | 108875 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2019/09/28 | 15892 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2019/09/28 | 17690 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2019/09/28 | 27650 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2019/09/28 | 29711 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2019/09/28 | 499167 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2019/09/28 | 560964 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2019/09/28 | 539381 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2019/09/28 | 575507 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2019/09/28 | 93412 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2019/09/28 | 102389 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2019/09/28 | 1407480 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2019/09/28 | 1620002 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2019/09/28 | 67250 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2019/09/28 | 73599 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2019/09/28 | 26959 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2019/09/28 | 31186 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2019/09/28 | 7496 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2019/09/28 | 8452 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2019/09/28 | 167814 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2019/09/28 | 182708 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2019/09/28 | 247517 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2019/09/28 | 281253 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2019/09/28 | 87273 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2019/09/28 | 92004 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2019/09/28 | 77869 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2019/09/28 | 86746 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2019/09/28 | 165673 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2019/09/28 | 185583 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2019/09/28 | 146753 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2019/09/28 | 165556 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2019/09/28 | 194933 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2019/09/28 | 177646 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2019/09/28 | 80469 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2019/09/28 | 91204 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2019/09/28 | 31007 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2019/09/28 | 34836 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2019/09/28 | 56405 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2019/09/28 | 62919 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2019/09/28 | 41900 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2019/09/28 | 45725 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2019/09/28 | 45614 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2019/09/28 | 52009 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2019/09/28 | 354709 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
-2019/09/28 | 387869 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
-2019/09/28 | 321227 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2019/09/28 | 356012 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2019/09/28 | 186818 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2019/09/28 | 193856 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2019/09/28 | 202550 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2019/09/28 | 237448 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2019/09/28 | 77970 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2019/09/28 | 87206 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2019/09/28 | 933134 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2019/09/28 | 1042828 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2019/09/28 | 19791 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2019/09/28 | 23334 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2019/09/28 | 31155 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2019/09/28 | 36626 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2019/09/28 | 63193 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2019/09/28 | 71578 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2019/09/28 | 42564 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2019/09/28 | 50931 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2019/09/28 | 1066577 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2019/09/28 | 1194274 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2019/09/28 | 41906 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2019/09/28 | 50893 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2019/09/28 | 53398 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
-2019/09/28 | 59417 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
-2019/09/28 | 26741 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2019/09/28 | 29124 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2019/09/28 | 16035 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2019/09/28 | 17766 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2019/09/28 | 63348 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2019/09/28 | 69222 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2019/09/28 | 147140 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2019/09/28 | 160578 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2019/09/28 | 73170 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2019/09/28 | 82643 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2019/09/28 | 91281 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2019/09/28 | 96183 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2019/09/28 | 2457990 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2019/09/28 | 2579879 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2019/09/28 | 54818 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2019/09/28 | 61565 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2019/09/28 | 26506 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2019/09/28 | 32350 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2019/09/28 | 61552 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2019/09/28 | 65040 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2019/09/28 | 247001 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2019/09/28 | 276789 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2019/09/28 | 533668 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2019/09/28 | 563400 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2019/09/28 | 39209 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2019/09/28 | 42941 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2019/09/28 | 190946 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2019/09/28 | 1133390 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2019/09/28 | 1056729 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2019/09/28 | 13059 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2019/09/28 | 14052 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2019/09/29 | 506353 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2019/09/29 | 29252 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2019/09/29 | 33426 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2019/09/29 | 863044 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2019/09/29 | 954180 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2019/09/29 | 24053 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2019/09/29 | 26195 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2019/09/29 | 29256 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2019/09/29 | 34850 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2019/09/29 | 49731 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2019/09/29 | 57191 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2019/09/29 | 84434 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2019/09/29 | 94256 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2019/09/29 | 60336 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2019/09/29 | 67252 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2019/09/29 | 26648 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2019/09/29 | 30237 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2019/09/29 | 328750 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2019/09/29 | 391447 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2019/09/29 | 32192 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2019/09/29 | 36365 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2019/09/29 | 49273 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2019/09/29 | 53940 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2019/09/29 | 198183 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2019/09/29 | 214120 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2019/09/29 | 169239 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2019/09/29 | 184239 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2019/09/29 | 52036 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2019/09/29 | 58851 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2019/09/29 | 20720 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2019/09/29 | 22910 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2019/09/29 | 450077 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
+2019/09/29 | 41007 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2019/09/29 | 45776 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2019/09/29 | 271720 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2019/09/29 | 308929 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2019/09/29 | 40558 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2019/09/29 | 44954 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2019/09/29 | 112854 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2019/09/29 | 127164 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2019/09/29 | 1205459 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2019/09/29 | 1326762 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2019/09/29 | 33355 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2019/09/29 | 38690 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2019/09/29 | 43445 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2019/09/29 | 47969 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2019/09/29 | 45471 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2019/09/29 | 50504 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2019/09/29 | 56633 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2019/09/29 | 61778 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2019/09/29 | 133146 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2019/09/29 | 152132 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2019/09/29 | 69600 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2019/09/29 | 72688 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2019/09/29 | 68750 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2019/09/29 | 77424 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2019/09/29 | 246472 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2019/09/29 | 281504 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2019/09/29 | 25319 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2019/09/29 | 28738 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2019/09/29 | 100717 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2019/09/29 | 116835 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2019/09/29 | 63275 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2019/09/29 | 72559 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2019/09/29 | 94162 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2019/09/29 | 110969 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2019/09/29 | 35220 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2019/09/29 | 39876 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2019/09/29 | 457517 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2019/09/29 | 544494 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2019/09/29 | 1101600 | systems/win32/miktex/tm/packages/next/miktex-harftex-bin-2.9.tar.lzma
+2019/09/29 | 1273247 | systems/win32/miktex/tm/packages/next/miktex-harftex-bin-x64-2.9.tar.lzma
+2019/09/29 | 137120 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2019/09/29 | 149925 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2019/09/29 | 92918 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2019/09/29 | 108875 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2019/09/29 | 15891 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2019/09/29 | 17691 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2019/09/29 | 27652 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2019/09/29 | 29712 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2019/09/29 | 499166 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2019/09/29 | 560963 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2019/09/29 | 539375 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2019/09/29 | 575507 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2019/09/29 | 93414 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2019/09/29 | 102390 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2019/09/29 | 1407479 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2019/09/29 | 1620008 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2019/09/29 | 67252 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2019/09/29 | 73601 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2019/09/29 | 26960 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2019/09/29 | 31186 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2019/09/29 | 7497 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2019/09/29 | 8454 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2019/09/29 | 167816 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2019/09/29 | 182710 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2019/09/29 | 247519 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2019/09/29 | 281254 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2019/09/29 | 87276 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2019/09/29 | 92002 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2019/09/29 | 77866 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2019/09/29 | 86745 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2019/09/29 | 165670 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2019/09/29 | 185586 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2019/09/29 | 146752 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2019/09/29 | 165557 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2019/09/29 | 194931 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2019/09/29 | 177647 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2019/09/29 | 80469 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2019/09/29 | 91204 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2019/09/29 | 31007 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2019/09/29 | 34837 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2019/09/29 | 56406 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2019/09/29 | 62918 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2019/09/29 | 41900 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2019/09/29 | 45725 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2019/09/29 | 45617 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2019/09/29 | 52009 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2019/09/29 | 354708 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
+2019/09/29 | 387869 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
+2019/09/29 | 321227 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2019/09/29 | 356012 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2019/09/29 | 186819 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2019/09/29 | 193856 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2019/09/29 | 202550 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2019/09/29 | 237448 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2019/09/29 | 77969 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2019/09/29 | 87205 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2019/09/29 | 933132 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2019/09/29 | 1042823 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2019/09/29 | 19792 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2019/09/29 | 23333 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2019/09/29 | 31155 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2019/09/29 | 36628 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2019/09/29 | 63194 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2019/09/29 | 71578 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2019/09/29 | 42566 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2019/09/29 | 50929 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2019/09/29 | 1066576 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2019/09/29 | 1194277 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2019/09/29 | 41908 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2019/09/29 | 50894 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2019/09/29 | 53399 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
+2019/09/29 | 59418 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2019/09/29 | 26740 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2019/09/29 | 29124 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2019/09/29 | 16037 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2019/09/29 | 17766 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2019/09/29 | 63349 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2019/09/29 | 69223 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2019/09/29 | 147139 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2019/09/29 | 160577 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2019/09/29 | 73170 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2019/09/29 | 82642 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2019/09/29 | 91282 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2019/09/29 | 96184 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2019/09/29 | 2457992 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2019/09/29 | 2579882 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2019/09/29 | 54820 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2019/09/29 | 61567 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2019/09/29 | 26506 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2019/09/29 | 32350 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2019/09/29 | 61551 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2019/09/29 | 65042 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2019/09/29 | 247004 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2019/09/29 | 276790 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2019/09/29 | 533667 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2019/09/29 | 563403 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2019/09/29 | 39210 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2019/09/29 | 42942 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2019/09/29 | 191043 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2019/09/29 | 1134249 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2019/09/29 | 1057476 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2019/09/29 | 13060 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2019/09/29 | 14056 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2019/09/28 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
+2019/09/29 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -262207,7 +262285,7 @@
2018/01/22 | 615824 | systems/win32/miktex/tm/packages/pm-isomath.tar.lzma
2016/01/03 | 396227 | systems/win32/miktex/tm/packages/pmxchords.tar.lzma
2018/02/14 | 548653 | systems/win32/miktex/tm/packages/pmx.tar.lzma
-2019/09/24 | 856032 | systems/win32/miktex/tm/packages/poemscol.tar.lzma
+2019/09/29 | 856100 | systems/win32/miktex/tm/packages/poemscol.tar.lzma
2019/05/02 | 287323 | systems/win32/miktex/tm/packages/poetry.tar.lzma
2016/03/09 | 18224 | systems/win32/miktex/tm/packages/poetrytex.tar.lzma
2019/06/19 | 186268 | systems/win32/miktex/tm/packages/poiretone.tar.lzma
@@ -262232,6 +262310,7 @@
2003/11/29 | 865775 | systems/win32/miktex/tm/packages/ppower4.cab
2005/09/05 | 36405 | systems/win32/miktex/tm/packages/ppr-prv.cab
2007/08/27 | 405632 | systems/win32/miktex/tm/packages/pracjourn.tar.lzma
+2019/09/29 | 221242 | systems/win32/miktex/tm/packages/practicalreports.tar.lzma
2013/05/21 | 677996 | systems/win32/miktex/tm/packages/preprint.tar.lzma
2010/08/30 | 73719 | systems/win32/miktex/tm/packages/prepr.tar.lzma
2017/12/01 | 722302 | systems/win32/miktex/tm/packages/prerex.tar.lzma
@@ -262240,7 +262319,7 @@
2008/11/07 | 35981 | systems/win32/miktex/tm/packages/prettyref.tar.lzma
2017/07/26 | 201385 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
-2019/09/28 | 654 | systems/win32/miktex/tm/packages/pr.ini
+2019/09/29 | 434 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -262970,7 +263049,7 @@
2014/03/14 | 312556 | systems/win32/miktex/tm/packages/tocvsec2.tar.lzma
2019/01/26 | 452981 | systems/win32/miktex/tm/packages/todonotes.tar.lzma
2010/04/13 | 187962 | systems/win32/miktex/tm/packages/todo.tar.lzma
-2019/08/22 | 256912 | systems/win32/miktex/tm/packages/tokcycle.tar.lzma
+2019/09/29 | 284805 | systems/win32/miktex/tm/packages/tokcycle.tar.lzma
2004/05/07 | 6156 | systems/win32/miktex/tm/packages/tokenizer.cab
2010/08/30 | 865703 | systems/win32/miktex/tm/packages/tolkienfonts.tar.lzma
2013/11/28 | 169234 | systems/win32/miktex/tm/packages/toolbox.tar.lzma
@@ -263094,7 +263173,7 @@
2017/08/12 | 910880 | systems/win32/miktex/tm/packages/uowthesistitlepage.tar.lzma
2011/05/25 | 2544 | systems/win32/miktex/tm/packages/upca.tar.lzma
2019/04/07 | 934169 | systems/win32/miktex/tm/packages/uplatex.tar.lzma
-2019/09/24 | 573550 | systems/win32/miktex/tm/packages/upmethodology.tar.lzma
+2019/09/29 | 587412 | systems/win32/miktex/tm/packages/upmethodology.tar.lzma
2016/10/18 | 171420 | systems/win32/miktex/tm/packages/uppunctlm.tar.lzma
2012/04/27 | 167179 | systems/win32/miktex/tm/packages/upquote.tar.lzma
2019/02/16 | 167025 | systems/win32/miktex/tm/packages/uptex-fonts.tar.lzma
@@ -263342,7 +263421,7 @@
2019/08/14 | 4896864 | systems/win32/w32tex/aleph-w32.tar.xz
2019/09/23 | 62950996 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2019/09/27 | 512888 | systems/win32/w32tex/ChangeLog
+2019/09/28 | 513322 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
@@ -263350,7 +263429,7 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2019/09/23 | 22139752 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2019/09/12 | 129731556 | systems/win32/w32tex/context.tar.xz
+2019/09/28 | 131720580 | systems/win32/w32tex/context.tar.xz
2019/08/14 | 904952 | systems/win32/w32tex/cweb-w32.tar.xz
2019/09/15 | 6205812 | systems/win32/w32tex/datetime2.tar.xz
2019/08/14 | 838256 | systems/win32/w32tex/dvi2ps-w32.tar.xz
@@ -263369,10 +263448,10 @@
2019/09/26 | 380518604 | systems/win32/w32tex/ltxpkgdocs.tar.xz
2019/09/26 | 34161524 | systems/win32/w32tex/ltxpkgs.tar.xz
2019/08/17 | 3531060 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
-2019/09/21 | 4976580 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
+2019/09/28 | 4984328 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2019/09/09 | 5013136 | systems/win32/w32tex/luajittex-w32.tar.xz
2019/09/22 | 14554560 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2019/09/22 | 15895684 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2019/09/28 | 15864436 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2019/09/27 | 17698764 | systems/win32/w32tex/luatexja.tar.xz
2019/09/22 | 15173120 | systems/win32/w32tex/luatex-w32.tar.xz
2019/09/11 | 1598052 | systems/win32/w32tex/makeindex-w32.tar.xz
@@ -263421,7 +263500,7 @@
2019/09/24 | 43954184 | systems/win32/w32tex/web2c-w32.tar.xz
2019/08/28 | 810352 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2019/08/25 | 21280532 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
-2019/09/12 | 1934764 | systems/win32/w32tex/win64/context-w64.tar.xz
+2019/09/28 | 1935012 | systems/win32/w32tex/win64/context-w64.tar.xz
2019/08/28 | 82568 | systems/win32/w32tex/win64/cweb-w64.tar.xz
2019/08/14 | 745316 | systems/win32/w32tex/win64/dvi2ps-w64.tar.xz
2019/09/11 | 447424 | systems/win32/w32tex/win64/dvi2tty-w64.tar.xz
@@ -263435,10 +263514,10 @@
2019/07/27 | 2652 | systems/win32/w32tex/win64/latex-dev-w64.tar.xz
2019/08/28 | 799776 | systems/win32/w32tex/win64/lcdf-typetools-w64.tar.xz
2019/08/28 | 2752676 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
-2019/09/21 | 3489296 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
+2019/09/28 | 3481900 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
2019/08/28 | 3497184 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
2019/08/28 | 2489864 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
-2019/09/21 | 3110680 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
+2019/09/28 | 3110872 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
2019/08/28 | 3103388 | systems/win32/w32tex/win64/luatex-w64.tar.xz
2019/09/11 | 1067856 | systems/win32/w32tex/win64/makeindex-w64.tar.xz
2019/08/14 | 430688 | systems/win32/w32tex/win64/mftools-w64.tar.xz
@@ -263558,7 +263637,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2019/09/29 | 186 | timestamp
+2019/09/30 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2016/03/08 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index d8d3077775..e5afc94b27 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 45fccf2e96..411657b1bf 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,202 +1,1430 @@
+2019/09/29 | 99 | graphics/asymptote/base/asy_filetype.vim
+2019/09/29 | 9944 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
+2019/09/29 | 993 | graphics/asymptote/examples/RiemannSphere.asy
+2019/09/29 | 991 | macros/latex/contrib/testidx/samples/sample-idx-babel-german.tex
+2019/09/29 | 9892 | graphics/asymptote/profiler.h
+2019/09/29 | 988 | macros/latex/contrib/algobox/README.md
+2019/09/29 | 9871 | graphics/asymptote/runstring.in
+2019/09/29 | 986 | graphics/asymptote/predicates.h
+2019/09/29 | 9846 | graphics/asymptote/doc/asymptote.sty
+2019/09/29 | 980 | graphics/asymptote/examples/lmfit1.asy
+2019/09/29 | 9756 | graphics/asymptote/util.cc
+2019/09/29 | 974 | graphics/asymptote/prc/Makefile
+2019/09/29 | 973 | macros/latex/contrib/testidx/samples/sample-idx-german.tex
+2019/09/29 | 9725 | graphics/asymptote/doc/FAQ/m-html.pl
+2019/09/29 | 971 | graphics/asymptote/examples/filesurface.asy
+2019/09/29 | 969 | graphics/asymptote/runfile.h
+2019/09/29 | 966 | graphics/asymptote/tests/array/solve.asy
+2019/09/29 | 964 | graphics/asymptote/GUI/xasyTransform.py
+2019/09/29 | 964 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
+2019/09/29 | 964997 | systems/win32/miktex/tm/packages/duckuments.tar.lzma
+2019/09/29 | 96184 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2019/09/29 | 95 | graphics/asymptote/prc/test.asy
+2019/09/29 | 959 | graphics/asymptote/examples/triads.asy
+2019/09/29 | 958 | graphics/asymptote/statistics.h
+2019/09/29 | 956 | graphics/asymptote/examples/workcone.asy
+2019/09/29 | 956 | graphics/asymptote/examples/poster.asy
+2019/09/29 | 9566 | graphics/asymptote/base/bezulate.asy
+2019/09/29 | 954180 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2019/09/29 | 951 | graphics/asymptote/examples/worksheet.asy
+2019/09/29 | 949 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
+2019/09/29 | 946 | graphics/asymptote/examples/animations/cube.asy
+2019/09/29 | 94256 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2019/09/29 | 94162 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2019/09/29 | 936 | graphics/asymptote/tests/array/array.asy
+2019/09/29 | 93414 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2019/09/29 | 933132 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2019/09/29 | 930 | graphics/asymptote/examples/polararea.asy
+2019/09/29 | 9309 | graphics/asymptote/base/plain_paths.asy
+2019/09/29 | 9306 | graphics/asymptote/psfile.h
+2019/09/29 | 92918 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2019/09/29 | 9251 | graphics/asymptote/errors
+2019/09/29 | 923 | macros/latex/contrib/statistics/README.md
+2019/09/29 | 9207039 | macros/latex/contrib/l3kernel.zip
+2019/09/29 | 9202 | graphics/asymptote/doc/FAQ/bfnnconv.pl
+2019/09/29 | 92002 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2019/09/29 | 917 | graphics/asymptote/opcodes.h
+2019/09/29 | 915 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
+2019/09/29 | 912 | graphics/asymptote/doc/errorbars.asy
+2019/09/29 | 91282 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2019/09/29 | 91204 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2019/09/29 | 9094 | graphics/asymptote/application.h
+2019/09/29 | 908 | graphics/asymptote/modifier.h
+2019/09/29 | 908 | graphics/asymptote/coenv.h
+2019/09/29 | 901 | graphics/asymptote/virtualfieldaccess.cc
+2019/09/29 | 8912 | graphics/asymptote/symbol.cc
+2019/09/29 | 8900 | graphics/asymptote/runmath.in
+2019/09/29 | 889 | macros/latex/contrib/testidx/samples/sample-idx-t1.tex
+2019/09/29 | 8870 | graphics/asymptote/base/asy.vim
+2019/09/29 | 885 | graphics/asymptote/examples/twistedtubes.asy
+2019/09/29 | 883 | graphics/asymptote/GUI/Widg_addPolyOpt.py
+2019/09/29 | 8818 | graphics/asymptote/glrender.h
+2019/09/29 | 880 | graphics/asymptote/doc/xasy.1x
+2019/09/29 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
+2019/09/29 | 877 | graphics/asymptote/doc/markers2.asy
+2019/09/29 | 8773 | graphics/asymptote/triple.h
+2019/09/29 | 876 | graphics/asymptote/GUI/res/icons/edit.svg
+2019/09/29 | 872 | graphics/asymptote/doc/imagecontour.asy
+2019/09/29 | 87276 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2019/09/29 | 87205 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2019/09/29 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
+2019/09/29 | 869 | graphics/asymptote/GUI/res/icons/center.svg
+2019/09/29 | 868 | graphics/asymptote/examples/xxsq01x-1.asy
+2019/09/29 | 86745 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2019/09/29 | 8661 | graphics/asymptote/base/plain_pens.asy
+2019/09/29 | 865 | macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.tex
+2019/09/29 | 863044 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2019/09/29 | 862 | graphics/asymptote/doc/flowchartdemo.asy
+2019/09/29 | 86263 | graphics/asymptote/base/three.asy
+2019/09/29 | 856100 | systems/win32/miktex/tm/packages/poemscol.tar.lzma
+2019/09/29 | 855 | macros/latex/contrib/testidx/samples/sample-idx.tex
+2019/09/29 | 852 | graphics/asymptote/parser.h
+2019/09/29 | 850 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
+2019/09/29 | 85088 | systems/texlive/tlnet/archive/texlive-scripts.tar.xz
+2019/09/29 | 849 | graphics/asymptote/examples/SierpinskiGasket.asy
+2019/09/29 | 846 | graphics/asymptote/build-scripts/build-asygl
+2019/09/29 | 845 | graphics/asymptote/envcompleter.h
+2019/09/29 | 8454 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2019/09/29 | 844 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
+2019/09/29 | 84434 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2019/09/29 | 839 | graphics/asymptote/examples/venn3.asy
+2019/09/29 | 838 | graphics/asymptote/GUI/res/icons/close-round.svg
+2019/09/29 | 8372 | graphics/asymptote/base/rationalSimplex.asy
+2019/09/29 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
+2019/09/29 | 8368 | graphics/asymptote/runpath.in
+2019/09/29 | 83435 | graphics/asymptote/lex.yy.cc
+2019/09/29 | 833 | graphics/asymptote/runbacktrace.in
+2019/09/29 | 833 | graphics/asymptote/examples/markregular.asy
+2019/09/29 | 83362 | graphics/asymptote/examples/piicon.eps
+2019/09/29 | 832 | graphics/asymptote/examples/animations/sphere.asy
+2019/09/29 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
+2019/09/29 | 829 | graphics/asymptote/angle.h
+2019/09/29 | 827 | graphics/asymptote/examples/xxsq01y.asy
+2019/09/29 | 82642 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2019/09/29 | 8243 | graphics/asymptote/base/asy-kate.sh
+2019/09/29 | 822 | graphics/asymptote/GUI/res/icons/android-expand.svg
+2019/09/29 | 821 | graphics/asymptote/GUI/xasyArgs.py
+2019/09/29 | 821 | graphics/asymptote/doc/secondaryaxis.asy
+2019/09/29 | 82057 | fonts/amiri/Documentation-Arabic.pdf
+2019/09/29 | 81 | graphics/asymptote/doc/bezier.asy
+2019/09/29 | 818 | graphics/asymptote/camperror.h
+2019/09/29 | 8157 | graphics/asymptote/runhistory.cc
+2019/09/29 | 8116 | graphics/asymptote/doc/asy.1
+2019/09/29 | 806 | graphics/asymptote/GUI/res/icons/android-refresh.svg
+2019/09/29 | 8051 | graphics/asymptote/runpath3d.in
+2019/09/29 | 80469 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2019/09/29 | 802 | graphics/asymptote/GUI/res/icons/android-camera.svg
+2019/09/29 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
+2019/09/29 | 7935 | graphics/asymptote/fundec.cc
+2019/09/29 | 788 | macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.tex
+2019/09/29 | 788 | graphics/asymptote/examples/orthocenter.asy
+2019/09/29 | 786319 | install/macros/latex/contrib/l3build.tds.zip
+2019/09/29 | 782 | graphics/asymptote/shaders.h
+2019/09/29 | 781328 | macros/latex/contrib/l3build.zip
+2019/09/29 | 780 | graphics/asymptote/GUI/res/icons/check.svg
+2019/09/29 | 7808 | graphics/asymptote/coder.cc
+2019/09/29 | 77 | graphics/asymptote/tests/gc/string.asy
+2019/09/29 | 77969 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2019/09/29 | 778 | graphics/asymptote/examples/controlsystem.asy
+2019/09/29 | 77866 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2019/09/29 | 77424 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2019/09/29 | 77408 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
+2019/09/29 | 773 | graphics/asymptote/drawlayer.h
+2019/09/29 | 770 | graphics/asymptote/asy.rc
+2019/09/29 | 76 | graphics/asymptote/examples/grid.asy
+2019/09/29 | 76784 | systems/texlive/tlnet/archive/glossaries.tar.xz
+2019/09/29 | 764 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
+2019/09/29 | 7639 | graphics/asymptote/LICENSE.LESSER
+2019/09/29 | 762 | graphics/asymptote/examples/clockarray.asy
+2019/09/29 | 759 | macros/latex/contrib/testidx/README
+2019/09/29 | 759 | graphics/asymptote/GUI/res/icons/plus-round.svg
+2019/09/29 | 7578624 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
+2019/09/29 | 7554560 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
+2019/09/29 | 754 | graphics/asymptote/doc/graphmarkers.asy
+2019/09/29 | 750 | graphics/asymptote/vm.h
+2019/09/29 | 7497 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2019/09/29 | 7482 | graphics/asymptote/base/simplex.asy
+2019/09/29 | 747 | graphics/asymptote/examples/pseudosphere.asy
+2019/09/29 | 746 | graphics/asymptote/tests/array/sort.asy
+2019/09/29 | 7445 | graphics/asymptote/name.cc
+2019/09/29 | 743 | graphics/asymptote/examples/xxsq01.asy
+2019/09/29 | 7422 | graphics/asymptote/base/graph_splinetype.asy
+2019/09/29 | 739 | graphics/asymptote/examples/condor.asy
+2019/09/29 | 737 | graphics/asymptote/tests/array/determinant.asy
+2019/09/29 | 73601 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2019/09/29 | 734 | graphics/asymptote/examples/quilt.asy
+2019/09/29 | 73435 | graphics/asymptote/GL/glxew.h
+2019/09/29 | 73252 | graphics/asymptote/base/three_surface.asy
+2019/09/29 | 73170 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2019/09/29 | 7307 | graphics/asymptote/base/stats.asy
+2019/09/29 | 7302 | graphics/asymptote/base/markers.asy
+2019/09/29 | 72 | graphics/asymptote/tests/gc/pen.asy
+2019/09/29 | 729 | graphics/asymptote/base/labelpath.asy
+2019/09/29 | 727 | graphics/asymptote/examples/fermi.asy
+2019/09/29 | 72688 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2019/09/29 | 72559 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2019/09/29 | 723561 | systems/win32/miktex/tm/packages/exsheets.tar.lzma
+2019/09/29 | 7230 | graphics/asymptote/runtime.pl
+2019/09/29 | 72112 | graphics/asymptote/GUI/Window1.py
+2019/09/29 | 720 | graphics/asymptote/mod.h
+2019/09/29 | 71578 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2019/09/29 | 714 | graphics/asymptote/examples/gamma3.asy
+2019/09/29 | 713 | graphics/asymptote/GUI/res/icons/arrow-move.svg
+2019/09/29 | 713 | graphics/asymptote/examples/unitoctant.asy
+2019/09/29 | 7128 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
+2019/09/29 | 71223 | graphics/asymptote/base/asy-mode.el
+2019/09/29 | 711 | graphics/asymptote/examples/partialsurface.asy
+2019/09/29 | 710 | graphics/asymptote/GUI/xasySvg.py
+2019/09/29 | 710 | graphics/asymptote/examples/fjortoft.asy
+2019/09/29 | 7102 | graphics/asymptote/base/plain.asy
+2019/09/29 | 70 | graphics/asymptote/tests/gc/transform.asy
+2019/09/29 | 70751 | graphics/asymptote/prc/oPRCFile.cc
+2019/09/29 | 704702 | macros/latex/contrib/l3build/l3build.pdf
+2019/09/29 | 701 | graphics/asymptote/GUI/res/icons/circle.svg
+2019/09/29 | 70119 | graphics/asymptote/runarray.cc
+2019/09/29 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
+2019/09/29 | 69600 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2019/09/29 | 695 | graphics/asymptote/GUI/res/icons/android-close.svg
+2019/09/29 | 69223 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2019/09/29 | 691 | graphics/asymptote/examples/centroidfg.asy
+2019/09/29 | 6911 | graphics/asymptote/errortest.asy
+2019/09/29 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
+2019/09/29 | 688 | graphics/asymptote/examples/layers.asy
+2019/09/29 | 68758 | graphics/asymptote/GUI/windows/window1.ui
+2019/09/29 | 68750 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2019/09/29 | 6865 | graphics/asymptote/drawlabel.cc
+2019/09/29 | 683 | graphics/asymptote/examples/fractaltree.asy
+2019/09/29 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
+2019/09/29 | 680 | graphics/asymptote/tests/array/delete.asy
+2019/09/29 | 6805147 | install/fonts/newtx.tds.zip
+2019/09/29 | 679 | graphics/asymptote/examples/genusthree.asy
+2019/09/29 | 6783 | graphics/asymptote/guide.h
+2019/09/29 | 677 | graphics/asymptote/doc/Bode.asy
+2019/09/29 | 674 | graphics/asymptote/GUI/res/icons/android-delete.svg
+2019/09/29 | 674 | graphics/asymptote/examples/sqrtx01.asy
+2019/09/29 | 674 | graphics/asymptote/drawpath.h
+2019/09/29 | 6747349 | fonts/newtx.zip
+2019/09/29 | 67252 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2019/09/29 | 67252 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2019/09/29 | 671 | graphics/asymptote/examples/spring.asy
+2019/09/29 | 66 | graphics/asymptote/examples/shade.asy
+2019/09/29 | 66751 | graphics/asymptote/prc/writePRC.cc
+2019/09/29 | 666 | graphics/asymptote/fpu.h
+2019/09/29 | 6660 | graphics/asymptote/simpson.cc
+2019/09/29 | 6650 | graphics/asymptote/getopt.h
+2019/09/29 | 661 | graphics/asymptote/examples/arrows3.asy
+2019/09/29 | 6612 | graphics/asymptote/config.h.in
+2019/09/29 | 6600 | macros/latex/contrib/l3build/l3build-typesetting.lua
+2019/09/29 | 65 | graphics/asymptote/tests/gc/guide.asy
+2019/09/29 | 659 | graphics/asymptote/examples/lowupint.asy
+2019/09/29 | 6592 | graphics/asymptote/jsfile.cc
+2019/09/29 | 657 | graphics/asymptote/examples/100d.views
+2019/09/29 | 657 | graphics/asymptote/base/reload.js
+2019/09/29 | 6570 | graphics/asymptote/drawfill.h
+2019/09/29 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
+2019/09/29 | 654 | graphics/asymptote/prcfile.h
+2019/09/29 | 654 | graphics/asymptote/examples/limit.asy
+2019/09/29 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
+2019/09/29 | 6512 | graphics/asymptote/xstream.h
+2019/09/29 | 65042 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2019/09/29 | 6503 | graphics/asymptote/tests/types/constructor.asy
+2019/09/29 | 649 | graphics/asymptote/examples/NURBScurve.asy
+2019/09/29 | 643 | graphics/asymptote/examples/p-orbital.asy
+2019/09/29 | 6425 | graphics/asymptote/mathop.h
+2019/09/29 | 639 | graphics/asymptote/tests/arith/transform.asy
+2019/09/29 | 639 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
+2019/09/29 | 63886 | graphics/asymptote/base/graph.asy
+2019/09/29 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
+2019/09/29 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
+2019/09/29 | 6347 | graphics/asymptote/base/plain_strings.asy
+2019/09/29 | 633 | graphics/asymptote/GUI/res/icons/android-done.svg
+2019/09/29 | 63349 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2019/09/29 | 63314 | graphics/asymptote/GL/wglew.h
+2019/09/29 | 632 | graphics/asymptote/examples/vertexshading.asy
+2019/09/29 | 63275 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2019/09/29 | 63194 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2019/09/29 | 6318 | graphics/asymptote/doc/leastsquares.dat
+2019/09/29 | 63140 | graphics/asymptote/doc/FAQ/asy-faq.info
+2019/09/29 | 6300 | graphics/asymptote/asymptote.nsi
+2019/09/29 | 62 | graphics/asymptote/tests/gc/array.asy
+2019/09/29 | 6292 | graphics/asymptote/base/plain_filldraw.asy
+2019/09/29 | 62918 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2019/09/29 | 628 | graphics/asymptote/examples/wedge.asy
+2019/09/29 | 628 | graphics/asymptote/examples/polarcircle.asy
+2019/09/29 | 6285 | graphics/asymptote/base/plain_prethree.asy
+2019/09/29 | 626 | graphics/asymptote/examples/venn.asy
+2019/09/29 | 62159 | graphics/asymptote/base/graph3.asy
+2019/09/29 | 620 | graphics/asymptote/tests/arith/integer.asy
+2019/09/29 | 620 | graphics/asymptote/GUI/res/icons/save.svg
+2019/09/29 | 61 | graphics/asymptote/base/latin1.asy
+2019/09/29 | 619 | graphics/asymptote/doc/logo.asy
+2019/09/29 | 619 | graphics/asymptote/base/shaders/vertex.glsl
+2019/09/29 | 618 | graphics/asymptote/examples/spline.asy
+2019/09/29 | 6185 | graphics/asymptote/transform.h
+2019/09/29 | 61778 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2019/09/29 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
+2019/09/29 | 61567 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2019/09/29 | 61551 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2019/09/29 | 6153 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
+2019/09/29 | 610 | graphics/asymptote/examples/impact.asy
+2019/09/29 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
+2019/09/29 | 609 | graphics/asymptote/keywords.cc
+2019/09/29 | 609 | graphics/asymptote/GUI/res/icons/bucket.asy
+2019/09/29 | 608 | graphics/asymptote/base/size10.asy
+2019/09/29 | 60604 | graphics/asymptote/runtime.cc
+2019/09/29 | 605 | graphics/asymptote/examples/integraltest.asy
+2019/09/29 | 604 | graphics/asymptote/doc/flow.asy
+2019/09/29 | 60336 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2019/09/29 | 602 | graphics/asymptote/examples/treetest.asy
+2019/09/29 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
+2019/09/29 | 600 | graphics/asymptote/base/size11.asy
+2019/09/29 | 59 | graphics/asymptote/examples/stroke3.asy
+2019/09/29 | 599 | graphics/asymptote/GUI/xasyStrings.py
+2019/09/29 | 5963 | graphics/asymptote/quaternion.cc
+2019/09/29 | 59418 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2019/09/29 | 593 | macros/latex/contrib/gatherenum/README.md
+2019/09/29 | 5924 | graphics/asymptote/runfile.in
+2019/09/29 | 59203 | graphics/asymptote/webgl/gl.js
+2019/09/29 | 591 | graphics/asymptote/examples/sinc.asy
+2019/09/29 | 5908 | graphics/asymptote/drawpath3.cc
+2019/09/29 | 58 | graphics/asymptote/examples/progrid.asy
+2019/09/29 | 589 | graphics/asymptote/examples/trefoilknot.asy
+2019/09/29 | 5897 | graphics/asymptote/Delaunay.cc
+2019/09/29 | 58851 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2019/09/29 | 587412 | systems/win32/miktex/tm/packages/upmethodology.tar.lzma
+2019/09/29 | 5857 | graphics/asymptote/item.h
+2019/09/29 | 582 | graphics/asymptote/examples/cos3.asy
+2019/09/29 | 581 | graphics/asymptote/examples/extrudedcontour.asy
+2019/09/29 | 581 | graphics/asymptote/examples/BezierSaddle.asy
+2019/09/29 | 580 | graphics/asymptote/examples/xsin1x.asy
+2019/09/29 | 57 | graphics/asymptote/GUI/requirements.txt
+2019/09/29 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
+2019/09/29 | 579 | graphics/asymptote/examples/sin3.asy
+2019/09/29 | 579 | graphics/asymptote/examples/exp3.asy
+2019/09/29 | 5797 | graphics/asymptote/base/trembling.asy
+2019/09/29 | 578 | graphics/asymptote/base/annotate.asy
+2019/09/29 | 5785 | graphics/asymptote/bezierpatch.h
+2019/09/29 | 576 | graphics/asymptote/examples/threeviews.asy
+2019/09/29 | 576 | graphics/asymptote/examples/circles.asy
+2019/09/29 | 5760 | graphics/asymptote/base/plain_scaling.asy
+2019/09/29 | 575507 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2019/09/29 | 574 | graphics/asymptote/examples/fillcontour.asy
+2019/09/29 | 5740 | graphics/asymptote/examples/cpkcolors.asy
+2019/09/29 | 573 | graphics/asymptote/examples/curvedlabel3.asy
+2019/09/29 | 57191 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2019/09/29 | 567 | macros/latex/contrib/testidx/samples/sample-idx-letter.tex
+2019/09/29 | 56633 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2019/09/29 | 56433 | macros/latex/contrib/filecontentsdef/filecontentsdef.dtx
+2019/09/29 | 56406 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2019/09/29 | 563403 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2019/09/29 | 563391 | macros/latex/contrib/cellprops.zip
+2019/09/29 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
+2019/09/29 | 560 | graphics/asymptote/locate.h
+2019/09/29 | 560963 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2019/09/29 | 56037 | graphics/asymptote/base/smoothcontour3.asy
+2019/09/29 | 557 | graphics/asymptote/examples/Pythagoras.asy
+2019/09/29 | 5574860 | systems/win32/miktex/tm/packages/glossaries.tar.lzma
+2019/09/29 | 557254 | macros/latex/contrib/cellprops/cellprops.pdf
+2019/09/29 | 5543 | graphics/asymptote/examples/filesurface.dat
+2019/09/29 | 55426 | graphics/asymptote/runpicture.cc
+2019/09/29 | 55404 | systems/texlive/tlnet/archive/datatool.tar.xz
+2019/09/29 | 553589 | systems/win32/miktex/tm/packages/ducksay.tar.lzma
+2019/09/29 | 551132 | fonts/amiri/Amiri-Regular.ttf
+2019/09/29 | 54 | graphics/asymptote/tests/gc/funcall.asy
+2019/09/29 | 54 | graphics/asymptote/examples/randompath3.asy
+2019/09/29 | 549 | graphics/asymptote/examples/equilchord.asy
+2019/09/29 | 548 | graphics/asymptote/examples/floatingdisk.asy
+2019/09/29 | 54820 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2019/09/29 | 547 | graphics/asymptote/examples/tetra.asy
+2019/09/29 | 54704 | graphics/asymptote/GUI/pyUIClass/window1.py
+2019/09/29 | 546 | graphics/asymptote/examples/label3zoom.asy
+2019/09/29 | 5465 | graphics/asymptote/env.cc
+2019/09/29 | 544494 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2019/09/29 | 5440 | graphics/asymptote/base/bsp.asy
+2019/09/29 | 53940 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2019/09/29 | 539375 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2019/09/29 | 5384624 | systems/texlive/tlnet/archive/glossaries.doc.tar.xz
+2019/09/29 | 534596 | fonts/amiri/Amiri-Slanted.ttf
+2019/09/29 | 53399 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
+2019/09/29 | 533667 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2019/09/29 | 5330 | graphics/asymptote/base/shaders/fragment.glsl
+2019/09/29 | 5326 | graphics/asymptote/drawpath3.h
+2019/09/29 | 5325410 | install/macros/latex/contrib/testidx.tds.zip
+2019/09/29 | 531 | macros/latex/contrib/testidx/samples/sample-idx-amsmath.tex
+2019/09/29 | 5310 | graphics/asymptote/main.cc
+2019/09/29 | 52 | graphics/asymptote/doc/square.asy
+2019/09/29 | 529936 | fonts/amiri/Amiri-BoldSlanted.ttf
+2019/09/29 | 529580 | fonts/amiri/Amiri-Bold.ttf
+2019/09/29 | 528 | macros/latex/contrib/testidx/samples/sample-idx-subset.tex
+2019/09/29 | 527644 | systems/texlive/tlnet/archive/upmethodology.doc.tar.xz
+2019/09/29 | 5262 | graphics/asymptote/patches/bison.patch
+2019/09/29 | 525 | graphics/asymptote/examples/vectorfield3.asy
+2019/09/29 | 5258 | graphics/asymptote/examples/mosaic.asy
+2019/09/29 | 5250133 | macros/latex/contrib/testidx.zip
+2019/09/29 | 524 | graphics/asymptote/doc/brokenaxis.asy
+2019/09/29 | 5239 | graphics/asymptote/name.h
+2019/09/29 | 5222 | graphics/asymptote/base/animation.asy
+2019/09/29 | 521 | graphics/asymptote/examples/dimension.asy
+2019/09/29 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
+2019/09/29 | 520 | graphics/asymptote/examples/smoothelevation.asy
+2019/09/29 | 52036 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2019/09/29 | 52009 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2019/09/29 | 51 | graphics/asymptote/base/unicode.asy
+2019/09/29 | 51 | graphics/asymptote/base/babel.asy
+2019/09/29 | 5154 | macros/latex/contrib/l3build/l3build.lua
+2019/09/29 | 5151 | graphics/asymptote/GUI/labelEditor.py
+2019/09/29 | 51432 | graphics/asymptote/prc/oPRCFile.h
+2019/09/29 | 513 | macros/latex/contrib/testidx/samples/sample-idx-hyp.tex
+2019/09/29 | 513 | graphics/asymptote/examples/buildcycle.asy
+2019/09/29 | 51244 | systems/texlive/tlnet/archive/texlive-scripts.doc.tar.xz
+2019/09/29 | 5119 | graphics/asymptote/runhistory.in
+2019/09/29 | 5098 | graphics/asymptote/runsystem.in
+2019/09/29 | 5098 | graphics/asymptote/errormsg.h
+2019/09/29 | 50929 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2019/09/29 | 508 | macros/latex/contrib/testidx/CHANGES
+2019/09/29 | 50894 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2019/09/29 | 5070 | graphics/asymptote/memory.h
+2019/09/29 | 506 | graphics/asymptote/examples/delu.asy
+2019/09/29 | 506 | graphics/asymptote/doc/CDlabel.asy
+2019/09/29 | 50697 | graphics/asymptote/gsl.cc
+2019/09/29 | 506353 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2019/09/29 | 506082 | systems/win32/miktex/tm/packages/files.csv.lzma
+2019/09/29 | 50504 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2019/09/29 | 5049 | graphics/asymptote/pair.h
+2019/09/29 | 5048 | graphics/asymptote/GUI/xasyOptions.py
+2019/09/29 | 50403 | graphics/asymptote/GUI/xasy2asy.py
+2019/09/29 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
+2019/09/29 | 503734 | graphics/asymptote/libatomic_ops-7.6.10.tar.gz
+2019/09/29 | 502 | graphics/asymptote/examples/floor.asy
+2019/09/29 | 5025 | graphics/asymptote/pipestream.cc
+2019/09/29 | 50191 | graphics/asymptote/settings.cc
+2019/09/29 | 500 | graphics/asymptote/doc/Hobbydir.asy
+2019/09/29 | 49 | graphics/asymptote/doc/quartercircle.asy
+2019/09/29 | 49 | graphics/asymptote/doc/dots.asy
+2019/09/29 | 49 | graphics/asymptote/doc/colons.asy
+2019/09/29 | 499 | graphics/asymptote/examples/galleon.asy
+2019/09/29 | 4994 | graphics/asymptote/interact.cc
+2019/09/29 | 499166 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2019/09/29 | 498 | graphics/asymptote/examples/fano.asy
+2019/09/29 | 498 | graphics/asymptote/doc/penfunctionimage.asy
+2019/09/29 | 497 | graphics/asymptote/examples/bars3.asy
+2019/09/29 | 49731 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2019/09/29 | 496 | graphics/asymptote/drawgrestore.h
+2019/09/29 | 494 | macros/latex/contrib/testidx/samples/sample-idx-a4.tex
+2019/09/29 | 49273 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2019/09/29 | 4916 | graphics/asymptote/base/rational.asy
+2019/09/29 | 4902692 | macros/latex/contrib/l3experimental.zip
+2019/09/29 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2019/09/29 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
+2019/09/29 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
+2019/09/29 | 485 | graphics/asymptote/examples/cards.asy
+2019/09/29 | 4848 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
+2019/09/29 | 48481 | graphics/asymptote/prc/writePRC.h
+2019/09/29 | 4841 | graphics/asymptote/tests/array/slice.asy
+2019/09/29 | 483610 | macros/latex/contrib/testidx/testidx-code.pdf
+2019/09/29 | 4825 | graphics/asymptote/examples/interpolate1.asy
+2019/09/29 | 4812 | graphics/asymptote/base/x11colors.asy
+2019/09/29 | 480 | graphics/asymptote/doc/logimage.asy
+2019/09/29 | 479 | graphics/asymptote/examples/magnetic.asy
+2019/09/29 | 47969 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2019/09/29 | 478 | macros/latex/contrib/statistics/statistics.ins
+2019/09/29 | 475 | macros/latex/contrib/cellprops/cellprops.ins
+2019/09/29 | 473 | macros/latex/contrib/gatherenum/gatherenum.ins
+2019/09/29 | 472 | graphics/asymptote/absyn.cc
+2019/09/29 | 4727 | graphics/asymptote/doc/westnile.csv
+2019/09/29 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
+2019/09/29 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
+2019/09/29 | 47031 | graphics/asymptote/fftw++.h
+2019/09/29 | 469 | macros/latex/contrib/algobox/algobox.ins
+2019/09/29 | 46927 | graphics/asymptote/base/plain_picture.asy
+2019/09/29 | 4687 | graphics/asymptote/castop.h
+2019/09/29 | 466 | graphics/asymptote/drawgsave.h
+2019/09/29 | 4667 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
+2019/09/29 | 465 | graphics/asymptote/examples/colorplanes.asy
+2019/09/29 | 464 | graphics/asymptote/doc/GaussianSurface.asy
+2019/09/29 | 464207 | macros/latex/contrib/statistics.zip
+2019/09/29 | 4624 | graphics/asymptote/array.cc
+2019/09/29 | 461 | graphics/asymptote/examples/cosaddition.asy
+2019/09/29 | 4619 | graphics/asymptote/drawfill.cc
+2019/09/29 | 460 | graphics/asymptote/examples/lever.asy
+2019/09/29 | 45 | graphics/asymptote/GUI/icon-list.txt
+2019/09/29 | 459 | graphics/asymptote/examples/hierarchy.asy
+2019/09/29 | 45997 | graphics/asymptote/runarray.in
+2019/09/29 | 458 | graphics/asymptote/doc/multicontour.asy
+2019/09/29 | 458387 | graphics/asymptote/doc/png/asymptote.info
+2019/09/29 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
+2019/09/29 | 45776 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2019/09/29 | 4575 | graphics/asymptote/env.h
+2019/09/29 | 457517 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2019/09/29 | 45725 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2019/09/29 | 45659 | macros/latex/contrib/cellprops/cellprops.dtx
+2019/09/29 | 45617 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2019/09/29 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2019/09/29 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2019/09/29 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2019/09/29 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2019/09/29 | 45471 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2019/09/29 | 4520 | graphics/asymptote/getopt1.c
+2019/09/29 | 4515 | graphics/asymptote/util.h
+2019/09/29 | 450 | macros/latex/contrib/testidx/samples/sample-idxgloss.tex
+2019/09/29 | 4503 | graphics/asymptote/bbox.h
+2019/09/29 | 450077 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
+2019/09/29 | 449 | graphics/asymptote/tests/arith/pair.asy
+2019/09/29 | 44954 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2019/09/29 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
+2019/09/29 | 445 | graphics/asymptote/examples/sacone.asy
+2019/09/29 | 445 | graphics/asymptote/examples/cones.asy
+2019/09/29 | 44501 | graphics/asymptote/glrender.cc
+2019/09/29 | 442 | graphics/asymptote/doc/join3.asy
+2019/09/29 | 4425946 | install/fonts/xcharter.tds.zip
+2019/09/29 | 441 | graphics/asymptote/examples/triangles.asy
+2019/09/29 | 441 | graphics/asymptote/doc/histogram.asy
+2019/09/29 | 44166 | graphics/asymptote/config.guess
+2019/09/29 | 44121 | macros/latex/contrib/testidx/testidx-manual.tex
+2019/09/29 | 440 | graphics/asymptote/examples/gamma.asy
+2019/09/29 | 4402 | fonts/amiri/OFL.txt
+2019/09/29 | 4400 | graphics/asymptote/stm.h
+2019/09/29 | 43 | graphics/asymptote/examples/spring2.asy
+2019/09/29 | 438 | graphics/asymptote/examples/projectrevolution.asy
+2019/09/29 | 436624 | macros/latex/contrib/statistics/statistics.pdf
+2019/09/29 | 4354020 | fonts/xcharter.zip
+2019/09/29 | 434 | systems/win32/miktex/tm/packages/pr.ini
+2019/09/29 | 4348 | graphics/asymptote/doc/colo-asy.tex
+2019/09/29 | 4347 | graphics/asymptote/fundec.h
+2019/09/29 | 43445 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2019/09/29 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
+2019/09/29 | 433369 | systems/win32/miktex/tm/packages/nanicolle.tar.lzma
+2019/09/29 | 431035 | macros/latex/contrib/testidx/samples/sample-idxgloss-desc.pdf
+2019/09/29 | 42 | graphics/asymptote/base/animate.asy
+2019/09/29 | 4297 | graphics/asymptote/base/tube.asy
+2019/09/29 | 42942 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2019/09/29 | 4286 | graphics/asymptote/asy.ico
+2019/09/29 | 426 | graphics/asymptote/examples/spiral3.asy
+2019/09/29 | 426 | graphics/asymptote/examples/pathintersectsurface.asy
+2019/09/29 | 426 | graphics/asymptote/doc/grid3xyz.asy
+2019/09/29 | 4269 | graphics/asymptote/newexp.cc
+2019/09/29 | 42566 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2019/09/29 | 424 | graphics/asymptote/examples/colorpatch.asy
+2019/09/29 | 4246 | graphics/asymptote/runpair.in
+2019/09/29 | 4242 | graphics/asymptote/tests/types/keyword.asy
+2019/09/29 | 423 | graphics/asymptote/doc/log2graph.asy
+2019/09/29 | 423 | graphics/asymptote/doc/helix.asy
+2019/09/29 | 4231 | graphics/asymptote/flatguide.h
+2019/09/29 | 42236 | graphics/asymptote/base/webgl/asygl-1.00.js
+2019/09/29 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
+2019/09/29 | 4203 | graphics/asymptote/examples/fin.asy
+2019/09/29 | 41 | graphics/asymptote/doc/bigdiagonal.asy
+2019/09/29 | 41908 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2019/09/29 | 41900 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2019/09/29 | 418 | graphics/asymptote/examples/planeproject.asy
+2019/09/29 | 417 | graphics/asymptote/doc/knots.asy
+2019/09/29 | 416 | graphics/asymptote/doc/linetype.asy
+2019/09/29 | 416 | graphics/asymptote/doc/bezier2.asy
+2019/09/29 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
+2019/09/29 | 4158 | graphics/asymptote/examples/advection.asy
+2019/09/29 | 414 | graphics/asymptote/examples/animations/glmovie.asy
+2019/09/29 | 413 | graphics/asymptote/examples/torus.asy
+2019/09/29 | 4128 | graphics/asymptote/base/plain_boxes.asy
+2019/09/29 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
+2019/09/29 | 410 | graphics/asymptote/examples/Sierpinski.asy
+2019/09/29 | 410 | graphics/asymptote/doc/legend.asy
+2019/09/29 | 41007 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2019/09/29 | 4089 | graphics/asymptote/camp.tab.h
+2019/09/29 | 408544 | macros/latex/contrib/gatherenum.zip
+2019/09/29 | 407 | graphics/asymptote/examples/parametricsurface.asy
+2019/09/29 | 40764 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
+2019/09/29 | 4072 | graphics/asymptote/tests/types/order.asy
+2019/09/29 | 4067 | graphics/asymptote/doc/diatom.csv
+2019/09/29 | 4063 | graphics/asymptote/fileio.cc
+2019/09/29 | 40558 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2019/09/29 | 40326 | graphics/asymptote/examples/tvgen.asy
+2019/09/29 | 401 | graphics/asymptote/doc/image.asy
+2019/09/29 | 400 | graphics/asymptote/examples/sacylinder.asy
+2019/09/29 | 39 | graphics/asymptote/base/nopapersize.ps
+2019/09/29 | 39918 | graphics/asymptote/picture.cc
+2019/09/29 | 398 | graphics/asymptote/examples/epix.asy
+2019/09/29 | 39876 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2019/09/29 | 396 | graphics/asymptote/doc/triangulate.asy
+2019/09/29 | 395 | graphics/asymptote/examples/BezierPatch.asy
+2019/09/29 | 395407 | macros/latex/contrib/testidx/testidx.dtx
+2019/09/29 | 394 | graphics/asymptote/GUI/setup.py
+2019/09/29 | 3944 | graphics/asymptote/base/interpolate.asy
+2019/09/29 | 3941700 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2019/09/29 | 393834 | macros/latex/contrib/gatherenum/gatherenum.pdf
+2019/09/29 | 39210 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2019/09/29 | 391447 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2019/09/29 | 390 | graphics/asymptote/doc/tile.asy
+2019/09/29 | 38 | graphics/asymptote/examples/spring0.asy
+2019/09/29 | 387869 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
+2019/09/29 | 386 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
+2019/09/29 | 38690 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2019/09/29 | 3868 | graphics/asymptote/examples/pipes.asy
+2019/09/29 | 385 | graphics/asymptote/examples/sinxlex.asy
+2019/09/29 | 384 | graphics/asymptote/examples/Gouraud.asy
+2019/09/29 | 384 | graphics/asymptote/Delaunay.h
+2019/09/29 | 384516 | graphics/asymptote/doc/asymptote.texi
+2019/09/29 | 383 | graphics/asymptote/tests/arith/real.asy
+2019/09/29 | 382 | graphics/asymptote/doc/loggrid.asy
+2019/09/29 | 3820 | graphics/asymptote/base/plain_shipout.asy
+2019/09/29 | 380 | graphics/asymptote/doc/icon.asy
+2019/09/29 | 38066 | graphics/asymptote/path3.cc
+2019/09/29 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
+2019/09/29 | 376 | graphics/asymptote/doc/generalaxis3.asy
+2019/09/29 | 3765 | graphics/asymptote/prc/PRCdouble.h
+2019/09/29 | 374 | graphics/asymptote/doc/monthaxis.asy
+2019/09/29 | 3749 | graphics/asymptote/base/webgl/WebGLheader.html
+2019/09/29 | 3749347 | systems/win32/miktex/tm/packages/luatexja.tar.lzma
+2019/09/29 | 3746 | graphics/asymptote/examples/xstitch.asy
+2019/09/29 | 373 | graphics/asymptote/examples/projectelevation.asy
+2019/09/29 | 373 | graphics/asymptote/doc/lineargraph.asy
+2019/09/29 | 3716 | graphics/asymptote/base/plain_constants.asy
+2019/09/29 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
+2019/09/29 | 369 | graphics/asymptote/examples/RiemannSurface.asy
+2019/09/29 | 3673 | graphics/asymptote/constructor.cc
+2019/09/29 | 3673 | graphics/asymptote/base/three_light.asy
+2019/09/29 | 3670 | graphics/asymptote/bbox3.h
+2019/09/29 | 366 | graphics/asymptote/doc/lineargraph0.asy
+2019/09/29 | 36628 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2019/09/29 | 363897 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.pdf
+2019/09/29 | 36365 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2019/09/29 | 362 | graphics/asymptote/examples/pipeintersection.asy
+2019/09/29 | 36243 | graphics/asymptote/prc/test.cc
+2019/09/29 | 361 | graphics/asymptote/examples/phase.asy
+2019/09/29 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
+2019/09/29 | 36141 | graphics/asymptote/config.sub
+2019/09/29 | 360 | graphics/asymptote/examples/washer.asy
+2019/09/29 | 3606 | graphics/asymptote/tr.h
+2019/09/29 | 35 | graphics/asymptote/base/fontsize.asy
+2019/09/29 | 359 | graphics/asymptote/GUI/configs/xasykeymap.cson
+2019/09/29 | 358 | graphics/asymptote/base/pstoedit.asy
+2019/09/29 | 357 | graphics/asymptote/doc/irregularcontour.asy
+2019/09/29 | 356012 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2019/09/29 | 355 | graphics/asymptote/doc/scaledgraph.asy
+2019/09/29 | 3553 | graphics/asymptote/rounding.h
+2019/09/29 | 354 | graphics/asymptote/doc/reloadpdf.tex
+2019/09/29 | 354 | graphics/asymptote/doc/planes.asy
+2019/09/29 | 354708 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
+2019/09/29 | 3522 | graphics/asymptote/drawpath.cc
+2019/09/29 | 35220 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2019/09/29 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
+2019/09/29 | 35147 | graphics/asymptote/LICENSE
+2019/09/29 | 35113 | macros/latex/contrib/cellprops/LICENSE
+2019/09/29 | 35087 | macros/latex/contrib/gatherenum/LICENSE
+2019/09/29 | 35086 | macros/latex/contrib/statistics/LICENSE
+2019/09/29 | 35081 | macros/latex/contrib/algobox/LICENSE
+2019/09/29 | 3505 | graphics/asymptote/parser.cc
+2019/09/29 | 3503 | graphics/asymptote/GUI/CustMatTransform.py
+2019/09/29 | 34 | graphics/asymptote/autogen.sh
+2019/09/29 | 349 | graphics/asymptote/examples/logdown.asy
+2019/09/29 | 3497 | graphics/asymptote/doc/ocg.sty
+2019/09/29 | 34850 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2019/09/29 | 34837 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2019/09/29 | 345 | graphics/asymptote/lexical.h
+2019/09/29 | 343 | graphics/asymptote/doc/externalprc.tex
+2019/09/29 | 3436 | graphics/asymptote/build-scripts/build-asymptote.dos
+2019/09/29 | 3434 | graphics/asymptote/picture.h
+2019/09/29 | 3430 | graphics/asymptote/base/roundedpath.asy
+2019/09/29 | 341 | graphics/asymptote/examples/slidedemo_.bbl
+2019/09/29 | 341 | graphics/asymptote/examples/sacylinder3D.asy
+2019/09/29 | 341 | graphics/asymptote/doc/subpictures.asy
+2019/09/29 | 33988 | graphics/asymptote/path.cc
+2019/09/29 | 33877 | graphics/asymptote/exp.cc
+2019/09/29 | 3375 | graphics/asymptote/tests/types/guide.asy
+2019/09/29 | 3344 | graphics/asymptote/examples/pdb.asy
+2019/09/29 | 33426 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2019/09/29 | 3340 | graphics/asymptote/examples/slidedemo.asy
+2019/09/29 | 333 | graphics/asymptote/doc/asy.1.end
+2019/09/29 | 33355 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2019/09/29 | 33326 | macros/latex/contrib/l3build/l3build-check.lua
+2019/09/29 | 3328 | graphics/asymptote/stack.h
+2019/09/29 | 3325 | macros/latex/contrib/filecontentsdef/README.md
+2019/09/29 | 332217 | install/macros/latex/contrib/skdoc.tds.zip
+2019/09/29 | 330 | graphics/asymptote/doc/HermiteSpline.asy
+2019/09/29 | 3309 | graphics/asymptote/access.cc
+2019/09/29 | 328750 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2019/09/29 | 327 | graphics/asymptote/examples/sin1x.asy
+2019/09/29 | 3279 | graphics/asymptote/base/obj.asy
+2019/09/29 | 3275 | graphics/asymptote/program.cc
+2019/09/29 | 326 | graphics/asymptote/examples/polardatagraph.asy
+2019/09/29 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
+2019/09/29 | 326696 | macros/latex/contrib/testidx/testidx-manual.pdf
+2019/09/29 | 325 | graphics/asymptote/examples/rainbow.asy
+2019/09/29 | 3249 | graphics/asymptote/GUI/Widg_addLabel.py
+2019/09/29 | 323 | graphics/asymptote/examples/elevation.asy
+2019/09/29 | 32350 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2019/09/29 | 322 | graphics/asymptote/examples/unitcircle.asy
+2019/09/29 | 322 | graphics/asymptote/examples/cheese.asy
+2019/09/29 | 32192 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2019/09/29 | 3217 | fonts/amiri/README
+2019/09/29 | 321405 | macros/latex/contrib/skdoc.zip
+2019/09/29 | 321369 | graphics/asymptote/base/geometry.asy
+2019/09/29 | 321227 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2019/09/29 | 320 | graphics/asymptote/runtriple.h
+2019/09/29 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
+2019/09/29 | 3188759 | install/fonts/newpx.tds.zip
+2019/09/29 | 3180241 | systems/win32/miktex/tm/packages/acrotex.tar.lzma
+2019/09/29 | 316807 | macros/latex/contrib/testidx/samples/sample-idx-utf8.pdf
+2019/09/29 | 3161 | graphics/asymptote/genv.cc
+2019/09/29 | 315 | graphics/asymptote/examples/strokepath.asy
+2019/09/29 | 3159519 | fonts/newpx.zip
+2019/09/29 | 314 | graphics/asymptote/doc/logticks.asy
+2019/09/29 | 314 | graphics/asymptote/base/graph_settings.asy
+2019/09/29 | 312 | graphics/asymptote/examples/textpath.asy
+2019/09/29 | 31244 | graphics/asymptote/builtin.cc
+2019/09/29 | 31186 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2019/09/29 | 31155 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2019/09/29 | 3106 | graphics/asymptote/doc/latexusage.tex
+2019/09/29 | 31007 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2019/09/29 | 309 | graphics/asymptote/examples/oneoverx.asy
+2019/09/29 | 309 | graphics/asymptote/examples/1overx.asy
+2019/09/29 | 30986 | fonts/amiri/NEWS-Arabic
+2019/09/29 | 308 | graphics/asymptote/tests/types/shadow.asy
+2019/09/29 | 308 | graphics/asymptote/tests/Makefile
+2019/09/29 | 308 | graphics/asymptote/examples/hyperboloid.asy
+2019/09/29 | 308929 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2019/09/29 | 306 | graphics/asymptote/doc/binarytreetest.asy
+2019/09/29 | 304 | macros/latex/contrib/testidx/samples/sample-idxgloss-desc.tex
+2019/09/29 | 304624 | macros/latex/contrib/testidx/samples/sample-idxgloss.pdf
+2019/09/29 | 3042 | graphics/asymptote/drawimage.h
+2019/09/29 | 303 | graphics/asymptote/examples/tensor.asy
+2019/09/29 | 3023 | macros/latex/contrib/testidx/testidx.ins
+2019/09/29 | 3023 | graphics/asymptote/doc/Makefile.in
+2019/09/29 | 30237 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2019/09/29 | 30208 | graphics/asymptote/prc/PRC.h
+2019/09/29 | 30147 | graphics/asymptote/getopt.c
+2019/09/29 | 3003 | graphics/asymptote/process.h
+2019/09/29 | 29 | graphics/asymptote/revision.cc
+2019/09/29 | 299 | graphics/asymptote/runpair.h
+2019/09/29 | 298 | graphics/asymptote/guideflags.h
+2019/09/29 | 2976 | graphics/asymptote/access.h
+2019/09/29 | 29712 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2019/09/29 | 2961 | graphics/asymptote/asymptote.spec
+2019/09/29 | 294962 | macros/latex/contrib/testidx/samples/sample-idx-t1.pdf
+2019/09/29 | 293 | graphics/asymptote/doc/makepen.asy
+2019/09/29 | 293072 | macros/latex/contrib/skdoc/skdoc.pdf
+2019/09/29 | 29256 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2019/09/29 | 29252 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2019/09/29 | 2924 | graphics/asymptote/drawgroup.h
+2019/09/29 | 291 | graphics/asymptote/examples/trumpet.asy
+2019/09/29 | 291 | graphics/asymptote/examples/jump.asy
+2019/09/29 | 29124 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2019/09/29 | 289 | graphics/asymptote/base/res/notes.txt
+2019/09/29 | 288 | graphics/asymptote/GUI/res/icons/anchor.svg
+2019/09/29 | 288 | graphics/asymptote/examples/sacone3D.asy
+2019/09/29 | 288 | graphics/asymptote/doc/mexicanhat.asy
+2019/09/29 | 288 | graphics/asymptote/build-scripts/README-binaries
+2019/09/29 | 2882 | graphics/asymptote/doc/diatom.asy
+2019/09/29 | 28809 | graphics/asymptote/exp.h
+2019/09/29 | 28738 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2019/09/29 | 28676 | systems/texlive/tlnet/archive/upmethodology.tar.xz
+2019/09/29 | 285 | graphics/asymptote/GUI/xasy.py
+2019/09/29 | 284805 | systems/win32/miktex/tm/packages/tokcycle.tar.lzma
+2019/09/29 | 2844543 | systems/win32/miktex/tm/packages/datatool.tar.lzma
+2019/09/29 | 2832 | graphics/asymptote/examples/alignedaxis.asy
+2019/09/29 | 2824 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
+2019/09/29 | 28156 | graphics/asymptote/pen.h
+2019/09/29 | 281504 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2019/09/29 | 281254 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2019/09/29 | 2800 | graphics/asymptote/doc/asycolors.sty
+2019/09/29 | 280081 | graphics/asymptote/configure
+2019/09/29 | 279 | graphics/asymptote/doc/hatch.asy
+2019/09/29 | 279705 | macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.pdf
+2019/09/29 | 277 | graphics/asymptote/doc/generalaxis.asy
+2019/09/29 | 277566 | macros/latex/contrib/testidx/samples/sample-noidxgloss.pdf
+2019/09/29 | 2771 | graphics/asymptote/doc/pixel.pdf
+2019/09/29 | 276 | graphics/asymptote/tests/bench/6000circles.asy
+2019/09/29 | 276790 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2019/09/29 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
+2019/09/29 | 27652 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2019/09/29 | 2764 | graphics/asymptote/base/three_margins.asy
+2019/09/29 | 2738 | graphics/asymptote/record.h
+2019/09/29 | 2731 | graphics/asymptote/tests/types/resolve.asy
+2019/09/29 | 2725 | graphics/asymptote/runtriple.in
+2019/09/29 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
+2019/09/29 | 271720 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2019/09/29 | 26 | graphics/asymptote/doc/filegraph.dat
+2019/09/29 | 269 | graphics/asymptote/runmath.h
+2019/09/29 | 2697 | graphics/asymptote/table.h
+2019/09/29 | 26960 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2019/09/29 | 268 | graphics/asymptote/base/asy-init.el
+2019/09/29 | 2687 | graphics/asymptote/settings.h
+2019/09/29 | 26841 | graphics/asymptote/bezierpatch.cc
+2019/09/29 | 2683716 | systems/texlive/tlnet/archive/datatool.doc.tar.xz
+2019/09/29 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
+2019/09/29 | 26740 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2019/09/29 | 2664 | graphics/asymptote/shaders.cc
+2019/09/29 | 26648 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2019/09/29 | 2662 | graphics/asymptote/symbol.h
+2019/09/29 | 2661 | graphics/asymptote/runbacktrace.cc
+2019/09/29 | 2659 | graphics/asymptote/examples/worldmap.asy
+2019/09/29 | 2658 | graphics/asymptote/examples/soccerball.asy
+2019/09/29 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
+2019/09/29 | 2653 | graphics/asymptote/doc/markers1.asy
+2019/09/29 | 26506 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2019/09/29 | 264 | graphics/asymptote/examples/labelbox.asy
+2019/09/29 | 264 | graphics/asymptote/examples/coag.asy
+2019/09/29 | 2632 | graphics/asymptote/material.h
+2019/09/29 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
+2019/09/29 | 262 | graphics/asymptote/doc/loggraph.asy
+2019/09/29 | 26292 | graphics/asymptote/runpath.cc
+2019/09/29 | 2624 | graphics/asymptote/pipestream.h
+2019/09/29 | 261 | graphics/asymptote/doc/join.asy
+2019/09/29 | 26195 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2019/09/29 | 2615 | graphics/asymptote/base/patterns.asy
+2019/09/29 | 2579882 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2019/09/29 | 256 | macros/latex/contrib/testidx/samples/sample-noidxgloss.tex
+2019/09/29 | 256 | graphics/asymptote/doc/shadedtiling.asy
+2019/09/29 | 2562 | graphics/asymptote/program.h
+2019/09/29 | 255 | graphics/asymptote/examples/contextfonts.asy
+2019/09/29 | 255 | graphics/asymptote/BUGS
+2019/09/29 | 2554 | graphics/asymptote/GUI/xasyFile.py
+2019/09/29 | 2552 | graphics/asymptote/base/plain_margins.asy
+2019/09/29 | 254 | graphics/asymptote/examples/parametricelevation.asy
+2019/09/29 | 253 | graphics/asymptote/base/metapost.asy
+2019/09/29 | 25319 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2019/09/29 | 25292 | graphics/asymptote/process.cc
+2019/09/29 | 2526 | graphics/asymptote/policy.h
+2019/09/29 | 25218 | graphics/asymptote/runpath3d.cc
+2019/09/29 | 251 | graphics/asymptote/examples/triceratops.asy
+2019/09/29 | 2518 | graphics/asymptote/prc/PRCbitStream.h
+2019/09/29 | 25137 | graphics/asymptote/doc/extra/intro.asy
+2019/09/29 | 2512 | graphics/asymptote/examples/mosquito.asy
+2019/09/29 | 2504 | graphics/asymptote/README
+2019/09/29 | 2504 | graphics/asymptote/binaries/x86_64-windows/README
+2019/09/29 | 2504 | graphics/asymptote/binaries/i386-windows/README
+2019/09/29 | 24 | graphics/asymptote/doc/diagonal.asy
+2019/09/29 | 247519 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2019/09/29 | 247004 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2019/09/29 | 246 | graphics/asymptote/examples/transparency.asy
+2019/09/29 | 246 | graphics/asymptote/doc/axis3.asy
+2019/09/29 | 2465 | graphics/asymptote/base/labelpath3.asy
+2019/09/29 | 24659 | graphics/asymptote/base/lmfit.asy
+2019/09/29 | 246472 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2019/09/29 | 245 | graphics/asymptote/examples/alignbox.asy
+2019/09/29 | 2457992 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2019/09/29 | 244 | graphics/asymptote/tests/arith/triple.asy
+2019/09/29 | 243 | graphics/asymptote/doc/cube.asy
+2019/09/29 | 242 | graphics/asymptote/examples/equilateral.asy
+2019/09/29 | 240 | graphics/asymptote/doc/parametricgraph.asy
+2019/09/29 | 24053 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2019/09/29 | 23 | graphics/asymptote/GUI/__init__.py
+2019/09/29 | 2399 | graphics/asymptote/GUI/PrimitiveShape.py
+2019/09/29 | 238 | graphics/asymptote/tests/TestLib.asy
+2019/09/29 | 238 | graphics/asymptote/GUI/xasyValidator.py
+2019/09/29 | 238 | graphics/asymptote/doc/filegraph.asy
+2019/09/29 | 23846 | graphics/asymptote/base/three_arrows.asy
+2019/09/29 | 237448 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2019/09/29 | 236 | graphics/asymptote/tests/string/erase.asy
+2019/09/29 | 236 | graphics/asymptote/examples/annotation.asy
+2019/09/29 | 2362 | graphics/asymptote/examples/spectrum.asy
+2019/09/29 | 2361 | graphics/asymptote/examples/SierpinskiSponge.asy
+2019/09/29 | 235 | graphics/asymptote/examples/cos2theta.asy
+2019/09/29 | 234 | graphics/asymptote/doc/beziercurve.asy
+2019/09/29 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
+2019/09/29 | 233 | graphics/asymptote/examples/cardioid.asy
+2019/09/29 | 2339 | graphics/asymptote/profile.py
+2019/09/29 | 23333 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2019/09/29 | 232 | graphics/asymptote/GUI/res/icons/center.asy
+2019/09/29 | 2328 | graphics/asymptote/virtualfieldaccess.h
+2019/09/29 | 22 | graphics/asymptote/tests/output/line.asy
+2019/09/29 | 22 | graphics/asymptote/GUI/configs/__init__.py
+2019/09/29 | 22971 | graphics/asymptote/base/syzygy.asy
+2019/09/29 | 2293 | graphics/asymptote/build-scripts/build-asymptote
+2019/09/29 | 22910 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2019/09/29 | 228 | graphics/asymptote/examples/circumcircle.asy
+2019/09/29 | 22833 | graphics/asymptote/drawsurface.cc
+2019/09/29 | 2278 | graphics/asymptote/align.h
+2019/09/29 | 2277 | graphics/asymptote/base/texcolors.asy
+2019/09/29 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
+2019/09/29 | 22670 | fonts/amiri/NEWS
+2019/09/29 | 22533046 | systems/texlive/tlnet/install-tl.zip
+2019/09/29 | 224 | graphics/asymptote/tests/types/init.asy
+2019/09/29 | 223 | graphics/asymptote/examples/yingyang.asy
+2019/09/29 | 22355 | graphics/asymptote/knot.cc
+2019/09/29 | 2226 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.tex
+2019/09/29 | 2222 | graphics/asymptote/tests/frames/loop.asy
+2019/09/29 | 221 | graphics/asymptote/GUI/res/icons/text.svg
+2019/09/29 | 221242 | systems/win32/miktex/tm/packages/practicalreports.tar.lzma
+2019/09/29 | 219 | graphics/asymptote/wce
+2019/09/29 | 219 | graphics/asymptote/doc/penimage.asy
+2019/09/29 | 2195 | graphics/asymptote/locate.cc
+2019/09/29 | 21948 | graphics/asymptote/runmath.cc
+2019/09/29 | 2192 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
+2019/09/29 | 218 | graphics/asymptote/doc/datagraph.asy
+2019/09/29 | 2187 | graphics/asymptote/base/plain_debugger.asy
+2019/09/29 | 2180 | graphics/asymptote/examples/splitpatch.asy
+2019/09/29 | 2173 | graphics/asymptote/frame.h
+2019/09/29 | 2163 | graphics/asymptote/drawlabel.h
+2019/09/29 | 2148 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
+2019/09/29 | 21459 | graphics/asymptote/base/feynman.asy
+2019/09/29 | 214120 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2019/09/29 | 2120424 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2019/09/29 | 2117 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.tex
+2019/09/29 | 2113 | graphics/asymptote/seconds.h
+2019/09/29 | 210 | graphics/asymptote/examples/spiral.asy
+2019/09/29 | 2109 | graphics/asymptote/base/drawtree.asy
+2019/09/29 | 21005 | graphics/asymptote/base/plain_bounds.asy
+2019/09/29 | 209 | graphics/asymptote/examples/triangle.asy
+2019/09/29 | 20893 | graphics/asymptote/dec.cc
+2019/09/29 | 2084 | graphics/asymptote/examples/truncatedIcosahedron.asy
+2019/09/29 | 20758 | graphics/asymptote/runtime.in
+2019/09/29 | 207510 | macros/latex/contrib/testidx/samples/sample-idx-hyp.pdf
+2019/09/29 | 20738 | graphics/asymptote/entry.cc
+2019/09/29 | 20720 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2019/09/29 | 206 | graphics/asymptote/examples/log.asy
+2019/09/29 | 2068 | graphics/asymptote/base/slopefield.asy
+2019/09/29 | 205266 | graphics/asymptote/asy.list
+2019/09/29 | 204649 | macros/latex/contrib/testidx/samples/sample-idx-german.pdf
+2019/09/29 | 204609 | macros/latex/contrib/testidx/samples/sample-idx-babel-german.pdf
+2019/09/29 | 2043 | graphics/asymptote/examples/slope.asy
+2019/09/29 | 2039 | graphics/asymptote/doc/elliptic.asy
+2019/09/29 | 202 | graphics/asymptote/tests/frames/stat2.asy
+2019/09/29 | 202 | graphics/asymptote/doc/exp.asy
+2019/09/29 | 2028 | fonts/amiri/README-Arabic
+2019/09/29 | 202550 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2019/09/29 | 20214 | graphics/asymptote/texfile.cc
+2019/09/29 | 2013 | graphics/asymptote/varinit.h
+2019/09/29 | 20105 | graphics/asymptote/base/contour.asy
+2019/09/29 | 20051 | graphics/asymptote/doc/asyRefCard.tex
+2019/09/29 | 20029 | graphics/asymptote/camp.y
+2019/09/29 | 2000 | macros/latex/contrib/testidx/samples/sample-idx-utf8.tex
+2019/09/29 | 199 | graphics/asymptote/examples/upint.asy
+2019/09/29 | 199 | graphics/asymptote/examples/BezierTriangle.asy
+2019/09/29 | 199911 | macros/latex/contrib/testidx/samples/sample-idx-letter.pdf
+2019/09/29 | 19984 | graphics/asymptote/fileio.h
+2019/09/29 | 198 | graphics/asymptote/examples/tanh.asy
+2019/09/29 | 19885 | graphics/asymptote/drawsurface.h
+2019/09/29 | 1986 | graphics/asymptote/inst.h
+2019/09/29 | 198183 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2019/09/29 | 19792 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2019/09/29 | 1978 | graphics/asymptote/varinit.cc
+2019/09/29 | 196 | graphics/asymptote/examples/lowint.asy
+2019/09/29 | 196 | graphics/asymptote/examples/label3ribbon.asy
+2019/09/29 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
+2019/09/29 | 19597 | graphics/asymptote/doc/external-proposal.html
+2019/09/29 | 1951 | graphics/asymptote/array.h
+2019/09/29 | 1950 | graphics/asymptote/examples/mergeExample.asy
+2019/09/29 | 194931 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2019/09/29 | 19462 | graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
+2019/09/29 | 194549 | graphics/asymptote/doc/asy-latex.pdf
+2019/09/29 | 193 | graphics/asymptote/tests/gc/shipout.asy
+2019/09/29 | 193 | graphics/asymptote/tests/arith/random.asy
+2019/09/29 | 193856 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2019/09/29 | 1936 | graphics/asymptote/refaccess.h
+2019/09/29 | 1927 | graphics/asymptote/tests/array/fields.asy
+2019/09/29 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
+2019/09/29 | 1920 | graphics/asymptote/GUI/res/icons/social-python.svg
+2019/09/29 | 191 | graphics/asymptote/runpicture.h
+2019/09/29 | 1919 | graphics/asymptote/GUI/res/icons/filledbucket.svg
+2019/09/29 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
+2019/09/29 | 191043 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2019/09/29 | 191033 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2019/09/29 | 190937 | macros/latex/contrib/testidx/samples/sample-idx-amsmath.pdf
+2019/09/29 | 1908 | graphics/asymptote/examples/linearregression.asy
+2019/09/29 | 19085 | graphics/asymptote/base/plain_arrows.asy
+2019/09/29 | 1907 | graphics/asymptote/build-scripts/HOWTO-MSWindows
+2019/09/29 | 18 | graphics/asymptote/tests/output/circle.asy
+2019/09/29 | 18964 | graphics/asymptote/psfile.cc
+2019/09/29 | 18929 | graphics/asymptote/runpicture.in
+2019/09/29 | 188 | graphics/asymptote/runstring.h
+2019/09/29 | 188003 | macros/latex/contrib/testidx/samples/sample-idx.pdf
+2019/09/29 | 187 | graphics/asymptote/tests/string/rfind.asy
+2019/09/29 | 187 | graphics/asymptote/examples/label3solid.asy
+2019/09/29 | 1878 | graphics/asymptote/drawclipbegin.h
+2019/09/29 | 18772 | graphics/asymptote/runstring.cc
+2019/09/29 | 186 | graphics/asymptote/runpath3d.h
+2019/09/29 | 186 | graphics/asymptote/doc/unitcircle3.asy
+2019/09/29 | 18688889 | systems/texlive/tlnet/install-tl-windows.exe
+2019/09/29 | 186819 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2019/09/29 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
+2019/09/29 | 186326 | macros/latex/contrib/testidx/samples/sample-idx-a4.pdf
+2019/09/29 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
+2019/09/29 | 18594 | macros/latex/contrib/algobox/algobox.dtx
+2019/09/29 | 185586 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2019/09/29 | 18534 | graphics/asymptote/application.cc
+2019/09/29 | 184239 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2019/09/29 | 1835 | graphics/asymptote/examples/cyclohexane.asy
+2019/09/29 | 182 | graphics/asymptote/tests/string/find.asy
+2019/09/29 | 182 | graphics/asymptote/examples/roll.asy
+2019/09/29 | 182 | graphics/asymptote/examples/label3.asy
+2019/09/29 | 182710 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2019/09/29 | 1817 | macros/latex/contrib/l3build/l3build.1
+2019/09/29 | 1813 | macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.tex
+2019/09/29 | 18136 | graphics/asymptote/doc/asy-latex.dtx
+2019/09/29 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
+2019/09/29 | 179953 | macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.pdf
+2019/09/29 | 1780 | graphics/asymptote/examples/conicurv.asy
+2019/09/29 | 177 | graphics/asymptote/runpath.h
+2019/09/29 | 177 | graphics/asymptote/examples/curvedlabel.asy
+2019/09/29 | 17766 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2019/09/29 | 177647 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2019/09/29 | 17743 | graphics/asymptote/runfile.cc
+2019/09/29 | 177246 | graphics/asymptote/prc/PRCdouble.cc
+2019/09/29 | 17705 | graphics/asymptote/asy-keywords.el
+2019/09/29 | 17691 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2019/09/29 | 1764 | graphics/asymptote/GUI/res/icons/grid.svg
+2019/09/29 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
+2019/09/29 | 1753 | graphics/asymptote/errormsg.cc
+2019/09/29 | 1746 | graphics/asymptote/doc/westnile.asy
+2019/09/29 | 174673 | graphics/asymptote/base/colormap.asy
+2019/09/29 | 172944 | fonts/amiri/AmiriQuranColored.ttf
+2019/09/29 | 1724 | graphics/asymptote/GUI/GuidesManager.py
+2019/09/29 | 1711 | graphics/asymptote/GUI/res/icons.qrc
+2019/09/29 | 1710 | graphics/asymptote/tests/arith/roots.asy
+2019/09/29 | 170 | graphics/asymptote/examples/stereoscopic.asy
+2019/09/29 | 1704 | graphics/asymptote/record.cc
+2019/09/29 | 169 | graphics/asymptote/runbacktrace.h
+2019/09/29 | 1694 | graphics/asymptote/fftw++.cc
+2019/09/29 | 169239 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2019/09/29 | 168 | graphics/asymptote/examples/strokeshade.asy
+2019/09/29 | 168 | graphics/asymptote/examples/lines.asy
+2019/09/29 | 167816 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2019/09/29 | 167754 | graphics/asymptote/doc/CAD.pdf
+2019/09/29 | 16702 | graphics/asymptote/runlabel.cc
+2019/09/29 | 1665 | graphics/asymptote/GUI/Widg_editBezier.py
+2019/09/29 | 165 | graphics/asymptote/examples/sphereskeleton.asy
+2019/09/29 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
+2019/09/29 | 16578 | graphics/asymptote/base/plain_Label.asy
+2019/09/29 | 165670 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2019/09/29 | 165557 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2019/09/29 | 1642 | graphics/asymptote/callable.h
+2019/09/29 | 163 | graphics/asymptote/base/webgl/WebGLfooter.html
+2019/09/29 | 1637 | graphics/asymptote/builtin.h
+2019/09/29 | 16348 | graphics/asymptote/runpair.cc
+2019/09/29 | 1630 | macros/latex/contrib/testidx/samples/sample-idx-xe.tex
+2019/09/29 | 1626 | graphics/asymptote/genv.h
+2019/09/29 | 1622 | macros/latex/contrib/testidx/samples/sample-idx-lua.tex
+2019/09/29 | 1620 | graphics/asymptote/doc/colors.asy
+2019/09/29 | 162009 | graphics/asymptote/GUI/icons_rc.py
+2019/09/29 | 1620008 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2019/09/29 | 161 | graphics/asymptote/runhistory.h
+2019/09/29 | 1617 | macros/latex/contrib/skdoc/Makefile
+2019/09/29 | 16138 | graphics/asymptote/base/slide.asy
+2019/09/29 | 1612 | graphics/asymptote/asy-list.pl
+2019/09/29 | 1611 | macros/latex/contrib/skdoc/README
+2019/09/29 | 160672 | graphics/asymptote/examples/animations/dice.u3d
+2019/09/29 | 160577 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2019/09/29 | 16037 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2019/09/29 | 159 | graphics/asymptote/tests/types/cast.asy
+2019/09/29 | 1594 | graphics/asymptote/pen.cc
+2019/09/29 | 158 | graphics/asymptote/tests/frames/stat.asy
+2019/09/29 | 15891 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2019/09/29 | 15845 | graphics/asymptote/dec.h
+2019/09/29 | 15815352 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2019/09/29 | 157 | graphics/asymptote/runsystem.h
+2019/09/29 | 157 | graphics/asymptote/doc/saddle.asy
+2019/09/29 | 1569 | graphics/asymptote/examples/near_earth.asy
+2019/09/29 | 155 | graphics/asymptote/tests/types/ecast.asy
+2019/09/29 | 1557 | graphics/asymptote/beziercurve.h
+2019/09/29 | 154 | graphics/asymptote/examples/billboard.asy
+2019/09/29 | 154 | graphics/asymptote/doc/slopefield1.asy
+2019/09/29 | 154856 | systems/texlive/tlnet/archive/texlive-docindex.doc.tar.xz
+2019/09/29 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2019/09/29 | 153 | graphics/asymptote/runlabel.h
+2019/09/29 | 1537 | graphics/asymptote/examples/refs.bib
+2019/09/29 | 15372 | graphics/asymptote/types.h
+2019/09/29 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2019/09/29 | 152 | graphics/asymptote/glew.c
+2019/09/29 | 1526 | graphics/asymptote/examples/BezierSurface.asy
+2019/09/29 | 1524 | graphics/asymptote/patches/flex.patch
+2019/09/29 | 152132 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2019/09/29 | 1520 | graphics/asymptote/common.h
+2019/09/29 | 15192 | graphics/asymptote/base/ode.asy
+2019/09/29 | 150 | graphics/asymptote/examples/spheresilhouette.asy
+2019/09/29 | 150 | graphics/asymptote/doc/latexmkrc_asydir
+2019/09/29 | 1504 | graphics/asymptote/GUI/xasyUtils.py
+2019/09/29 | 149 | fonts/amiri/Amiri.fontspec
+2019/09/29 | 149925 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2019/09/29 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
+2019/09/29 | 1492 | graphics/asymptote/runarray.h
+2019/09/29 | 148916 | macros/latex/contrib/testidx/samples/sample-idx-lua.pdf
+2019/09/29 | 1482 | graphics/asymptote/GUI/res/icons/android-hand.svg
+2019/09/29 | 147 | graphics/asymptote/doc/vectorfield.asy
+2019/09/29 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
+2019/09/29 | 14795 | graphics/asymptote/entry.h
+2019/09/29 | 1473 | graphics/asymptote/beziercurve.cc
+2019/09/29 | 147139 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2019/09/29 | 14709 | graphics/asymptote/base/palette.asy
+2019/09/29 | 146 | graphics/asymptote/examples/cylinder.asy
+2019/09/29 | 1469 | graphics/asymptote/doc/png/Makefile.in
+2019/09/29 | 146752 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2019/09/29 | 14660 | graphics/asymptote/base/contour3.asy
+2019/09/29 | 1463 | graphics/asymptote/GUI/res/icons/bucket.svg
+2019/09/29 | 1461 | graphics/asymptote/examples/NURBSsurface.asy
+2019/09/29 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2019/09/29 | 145 | graphics/asymptote/examples/star.asy
+2019/09/29 | 145712 | macros/latex/contrib/filecontentsdef.zip
+2019/09/29 | 145616 | systems/texlive/tlnet/archive/glossaries.source.tar.xz
+2019/09/29 | 1452203 | systems/win32/miktex/tm/packages/babel.tar.lzma
+2019/09/29 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2019/09/29 | 144 | graphics/asymptote/doc/latexmkrc
+2019/09/29 | 14448 | graphics/asymptote/stack.cc
+2019/09/29 | 14435760 | systems/win32/miktex/tm/packages/ketcindy.tar.lzma
+2019/09/29 | 143 | graphics/asymptote/tests/gc/label.asy
+2019/09/29 | 143 | graphics/asymptote/GUI/res/icons/centerorigin.asy
+2019/09/29 | 14333 | graphics/asymptote/configure.ac
+2019/09/29 | 14311 | graphics/asymptote/base/flowchart.asy
+2019/09/29 | 141 | graphics/asymptote/examples/ring.asy
+2019/09/29 | 14148989 | graphics/asymptote.zip
+2019/09/29 | 140 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
+2019/09/29 | 140 | graphics/asymptote/GUI/res/icons/closedcurve.asy
+2019/09/29 | 1407479 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2019/09/29 | 14056 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2019/09/29 | 14023 | graphics/asymptote/arrayop.h
+2019/09/29 | 1393 | graphics/asymptote/GUI/SetCustomAnchor.py
+2019/09/29 | 1391 | graphics/asymptote/doc/CAD1.asy
+2019/09/29 | 138 | graphics/asymptote/Pipfile
+2019/09/29 | 13884 | graphics/asymptote/types.cc
+2019/09/29 | 1384 | graphics/asymptote/tests/pic/trans.asy
+2019/09/29 | 138492 | macros/latex/contrib/testidx/samples/sample-idx-subset.pdf
+2019/09/29 | 1375 | graphics/asymptote/base/tree.asy
+2019/09/29 | 13739 | graphics/asymptote/examples/teapot.asy
+2019/09/29 | 137120 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2019/09/29 | 13700 | graphics/asymptote/runtriple.cc
+2019/09/29 | 136 | graphics/asymptote/examples/latticeshading.asy
+2019/09/29 | 136896 | fonts/amiri/AmiriQuran.ttf
+2019/09/29 | 13663 | graphics/asymptote/install-sh
+2019/09/29 | 13663 | graphics/asymptote/doc/install-sh
+2019/09/29 | 13663 | graphics/asymptote/doc/FAQ/install-sh
+2019/09/29 | 13550 | graphics/asymptote/GUI/xasyBezierInterface.py
+2019/09/29 | 1348 | graphics/asymptote/jsfile.h
+2019/09/29 | 1348681 | graphics/asymptote/ChangeLog
+2019/09/29 | 13476 | graphics/asymptote/base/grid3.asy
+2019/09/29 | 1343 | graphics/asymptote/runtimebase.in
+2019/09/29 | 133 | graphics/asymptote/GUI/res/icons/openpolygon.asy
+2019/09/29 | 133 | graphics/asymptote/GUI/res/icons/opencurve.asy
+2019/09/29 | 13339 | graphics/asymptote/camp.l
+2019/09/29 | 1331 | graphics/asymptote/tests/types/spec.asy
+2019/09/29 | 133146 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2019/09/29 | 132 | graphics/asymptote/tests/string/length.asy
+2019/09/29 | 1326 | graphics/asymptote/examples/electromagnetic.asy
+2019/09/29 | 1326762 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2019/09/29 | 131 | graphics/asymptote/GUI/DebugFlags.py
+2019/09/29 | 1319 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
+2019/09/29 | 1311 | graphics/asymptote/patches/dvipdf
+2019/09/29 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
+2019/09/29 | 1310 | graphics/asymptote/examples/roundpath.asy
+2019/09/29 | 1309 | graphics/asymptote/interact.h
+2019/09/29 | 1309 | graphics/asymptote/examples/Klein.asy
+2019/09/29 | 13060 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2019/09/29 | 129 | graphics/asymptote/tests/gc/struct.asy
+2019/09/29 | 129819 | macros/latex/contrib/filecontentsdef/filecontentsdef.pdf
+2019/09/29 | 12959 | graphics/asymptote/runlabel.in
+2019/09/29 | 129575 | macros/latex/contrib/algobox.zip
+2019/09/29 | 1294522 | graphics/asymptote/doc/asymptote.pdf
+2019/09/29 | 1293 | graphics/asymptote/TODO
+2019/09/29 | 1293 | graphics/asymptote/base/asymptote.py
+2019/09/29 | 1284 | graphics/asymptote/tests/output/Makefile
+2019/09/29 | 1279 | graphics/asymptote/drawverbatim.h
+2019/09/29 | 1278 | graphics/asymptote/newexp.h
+2019/09/29 | 127885 | graphics/asymptote/camp.tab.cc
+2019/09/29 | 12744 | graphics/asymptote/impdatum.cc
+2019/09/29 | 1273247 | systems/win32/miktex/tm/packages/next/miktex-harftex-bin-x64-2.9.tar.lzma
+2019/09/29 | 127164 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2019/09/29 | 126 | graphics/asymptote/examples/sphere.asy
+2019/09/29 | 1259 | graphics/asymptote/base/plain_arcs.asy
+2019/09/29 | 125859 | macros/latex/contrib/statistics/statistics.dtx
+2019/09/29 | 1253 | graphics/asymptote/keywords.pl
+2019/09/29 | 12534 | graphics/asymptote/ax_pthread.m4
+2019/09/29 | 12522 | graphics/asymptote/runsystem.cc
+2019/09/29 | 12522 | graphics/asymptote/base/three_tube.asy
+2019/09/29 | 1251 | graphics/asymptote/examples/odetest.asy
+2019/09/29 | 124 | graphics/asymptote/tests/gc/path.asy
+2019/09/29 | 12460 | graphics/asymptote/drawelement.h
+2019/09/29 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
+2019/09/29 | 1245 | graphics/asymptote/findsym.pl
+2019/09/29 | 123 | graphics/asymptote/examples/Coons.asy
+2019/09/29 | 123 | graphics/asymptote/doc/superpath.asy
+2019/09/29 | 1238 | graphics/asymptote/examples/animations/slidemovies.asy
+2019/09/29 | 123767 | macros/latex/contrib/skdoc/skdoc.dtx
+2019/09/29 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
+2019/09/29 | 1235777 | graphics/asymptote/GL/glew.c
+2019/09/29 | 1234 | graphics/asymptote/primitives.h
+2019/09/29 | 1231 | graphics/asymptote/examples/logo3.asy
+2019/09/29 | 12300 | graphics/asymptote/knot.h
+2019/09/29 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
+2019/09/29 | 12261 | graphics/asymptote/base/solids.asy
+2019/09/29 | 121 | graphics/asymptote/doc/labelsquare.asy
+2019/09/29 | 1216 | graphics/asymptote/examples/dragon.asy
+2019/09/29 | 1213 | graphics/asymptote/GUI/res/icons/closedcurve.svg
+2019/09/29 | 1213 | graphics/asymptote/drawclipend.h
+2019/09/29 | 1211 | macros/latex/contrib/filecontentsdef/INSTALL
+2019/09/29 | 121144 | graphics/asymptote/doc/asyRefCard.pdf
+2019/09/29 | 12103 | graphics/asymptote/stm.cc
+2019/09/29 | 1209 | graphics/asymptote/tests/imp/unravel.asy
+2019/09/29 | 1205459 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2019/09/29 | 119 | graphics/asymptote/fftw++asy.cc
+2019/09/29 | 1194277 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2019/09/29 | 1191 | graphics/asymptote/camperror.cc
+2019/09/29 | 11907 | graphics/asymptote/tests/gsl/random.asy
+2019/09/29 | 118 | graphics/asymptote/tests/string/substr.asy
+2019/09/29 | 1189 | graphics/asymptote/tests/types/var.asy
+2019/09/29 | 1189669 | fonts/amiri.zip
+2019/09/29 | 1186601 | graphics/asymptote/GL/glew.h
+2019/09/29 | 1185 | graphics/asymptote/examples/functionshading.asy
+2019/09/29 | 1183 | graphics/asymptote/base/embed.asy
+2019/09/29 | 1175 | graphics/asymptote/guide.cc
+2019/09/29 | 116835 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2019/09/29 | 1165 | graphics/asymptote/GUI/res/icons/opencurve.svg
+2019/09/29 | 11658 | graphics/asymptote/coder.h
+2019/09/29 | 1163 | graphics/asymptote/runtime.h
+2019/09/29 | 1160528 | graphics/asymptote/gc-8.0.4.tar.gz
+2019/09/29 | 116025 | graphics/asymptote/predicates.cc
+2019/09/29 | 115 | graphics/asymptote/doc/onecontour.asy
+2019/09/29 | 11580 | graphics/asymptote/path.h
+2019/09/29 | 115576 | macros/latex/contrib/algobox/algobox.pdf
+2019/09/29 | 11528 | graphics/asymptote/GUI/InplaceAddObj.py
+2019/09/29 | 1151 | graphics/asymptote/GUI/configs/xasyconfig.cson
+2019/09/29 | 1151 | graphics/asymptote/callable.cc
+2019/09/29 | 11516 | graphics/asymptote/aspy.py
+2019/09/29 | 11482 | graphics/asymptote/base/binarytree.asy
+2019/09/29 | 1145 | graphics/asymptote/GUI/res/icons/code.svg
+2019/09/29 | 1142 | graphics/asymptote/envcompleter.cc
+2019/09/29 | 1140 | graphics/asymptote/examples/imagehistogram.asy
+2019/09/29 | 113 | graphics/asymptote/patches/fixmem.reg
+2019/09/29 | 113923 | graphics/asymptote/ReleaseNotes
+2019/09/29 | 1136 | graphics/asymptote/examples/genustwo.asy
+2019/09/29 | 11348 | graphics/asymptote/Makefile.in
+2019/09/29 | 1134249 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2019/09/29 | 1133069 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2019/09/29 | 11320 | graphics/asymptote/base/plain_markers.asy
+2019/09/29 | 112854 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2019/09/29 | 1126 | graphics/asymptote/coenv.cc
+2019/09/29 | 1124 | graphics/asymptote/GUI/res/icons/android-locate.svg
+2019/09/29 | 1122 | macros/latex/contrib/cellprops/README.md
+2019/09/29 | 1122 | graphics/asymptote/base/external.asy
+2019/09/29 | 1121422 | systems/win32/miktex/tm/packages/chemmacros.tar.lzma
+2019/09/29 | 1120 | graphics/asymptote/examples/animations/wheel.asy
+2019/09/29 | 1114 | graphics/asymptote/examples/laserlattice.asy
+2019/09/29 | 1109 | graphics/asymptote/examples/fequlogo.asy
+2019/09/29 | 110969 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2019/09/29 | 11030 | graphics/asymptote/base/math.asy
+2019/09/29 | 1101600 | systems/win32/miktex/tm/packages/next/miktex-harftex-bin-2.9.tar.lzma
+2019/09/29 | 109 | graphics/asymptote/tests/string/insert.asy
+2019/09/29 | 1098 | graphics/asymptote/refaccess.cc
+2019/09/29 | 109876 | systems/texlive/tlnet/archive/texlive-docindex.tar.xz
+2019/09/29 | 1096 | graphics/asymptote/tests/array/transpose.asy
+2019/09/29 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
+2019/09/29 | 108875 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2019/09/29 | 10830 | graphics/asymptote/base/CAD.asy
+2019/09/29 | 1082 | graphics/asymptote/patches/README
+2019/09/29 | 1072 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
+2019/09/29 | 1066576 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2019/09/29 | 1065 | graphics/asymptote/examples/shellmethod.asy
+2019/09/29 | 10644 | graphics/asymptote/texfile.h
+2019/09/29 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
+2019/09/29 | 1058 | graphics/asymptote/GUI/res/icons/openpolygon.svg
+2019/09/29 | 10585 | graphics/asymptote/tr.cc
+2019/09/29 | 1057476 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2019/09/29 | 1056881 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2019/09/29 | 1055 | graphics/asymptote/examples/partitionExample.asy
+2019/09/29 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
+2019/09/29 | 1051 | graphics/asymptote/doc/eetomumu.asy
+2019/09/29 | 1050 | graphics/asymptote/opsymbols.pl
+2019/09/29 | 104 | graphics/asymptote/examples/shadestroke.asy
+2019/09/29 | 10494 | graphics/asymptote/path3.h
+2019/09/29 | 104548 | macros/latex/contrib/testidx/samples/sample-idx-xe.pdf
+2019/09/29 | 10445 | graphics/asymptote/INSTALL
+2019/09/29 | 1042823 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2019/09/29 | 1040 | graphics/asymptote/GUI/res/icons/centerorigin.svg
+2019/09/29 | 103864 | systems/texlive/tlnet/archive/datatool.source.tar.xz
+2019/09/29 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
+2019/09/29 | 10355 | macros/latex/contrib/gatherenum/gatherenum.dtx
+2019/09/29 | 1033 | graphics/asymptote/examples/basealign.asy
+2019/09/29 | 1030 | graphics/asymptote/absyn.h
+2019/09/29 | 102 | graphics/asymptote/tests/gc/file.asy
+2019/09/29 | 102828 | macros/latex/contrib/l3build/l3build.dtx
+2019/09/29 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
+2019/09/29 | 1025 | graphics/asymptote/doc/leastsquares.asy
+2019/09/29 | 1024 | macros/latex/contrib/l3build/README.md
+2019/09/29 | 102392 | macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.pdf
+2019/09/29 | 102390 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2019/09/29 | 10210 | graphics/asymptote/examples/thermodynamics.asy
+2019/09/29 | 1020 | graphics/asymptote/flatguide.cc
+2019/09/29 | 1020 | graphics/asymptote/examples/NURBSsphere.asy
+2019/09/29 | 10196 | graphics/asymptote/doc/CAD.tex
+2019/09/29 | 101271 | macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.pdf
+2019/09/29 | 1010 | graphics/asymptote/examples/washermethod.asy
+2019/09/29 | 100717 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2019/09/29 | 1005 | graphics/asymptote/doc/asy.1.begin
+2019/09/29 | 10059 | macros/latex/contrib/l3build/CHANGELOG.md
+2019/09/29 | 1003 | graphics/asymptote/GUI/res/icons/eye.svg
+2019/09/29 | 1000 | graphics/asymptote/doc/FAQ/Makefile
2019/09/28 | 9986 | macros/latex/contrib/glossaries/samples/samplexdy.tex
2019/09/28 | 995308 | macros/latex/contrib/acrotex/doc/eformman.pdf
2019/09/28 | 99121 | macros/latex/contrib/glossaries/samples/sampleNtn.pdf
+2019/09/28 | 9888 | macros/latex/contrib/l3experimental/l3draw-transforms.dtx
+2019/09/28 | 9857 | macros/latex/contrib/l3experimental/l3pdf.dtx
+2019/09/28 | 98506 | macros/latex/contrib/l3kernel/l3token.dtx
2019/09/28 | 98148 | systems/texlive/tlnet/archive/texinfo.tar.xz
+2019/09/28 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
+2019/09/28 | 97721 | macros/latex/contrib/l3kernel/l3keys.dtx
2019/09/28 | 972 | macros/latex/contrib/glossaries/samples/sample-nomathhyper.tex
+2019/09/28 | 96866 | macros/latex/contrib/l3experimental/l3galley.dtx
2019/09/28 | 96349 | macros/latex/contrib/glossaries/samples/sample-noidxapp-utf8.pdf
-2019/09/28 | 96183 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
2019/09/28 | 96180 | systems/win32/miktex/tm/packages/miktex-texware-bin-x64-2.9.tar.lzma
2019/09/28 | 95497 | macros/latex/contrib/glossaries/samples/sampleSort.pdf
-2019/09/28 | 954180 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2019/09/28 | 9548 | fonts/xcharter/README
2019/09/28 | 954050 | systems/win32/miktex/tm/packages/miktex-asymptote-bin-x64-2.9.tar.lzma
-2019/09/28 | 94256 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2019/09/28 | 9450 | macros/latex/contrib/l3kernel/l3flag.dtx
2019/09/28 | 94218 | systems/win32/miktex/tm/packages/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2019/09/28 | 94161 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2019/09/28 | 9416715 | install/macros/latex/contrib/l3kernel.tds.zip
2019/09/28 | 939 | macros/latex/contrib/glossaries/samples/sample-numberlist.tex
2019/09/28 | 93960 | systems/win32/miktex/tm/packages/miktex-gregorio-bin-2.9.tar.lzma
2019/09/28 | 93618 | macros/latex/contrib/glossaries/samples/sampleCustomAcr.pdf
2019/09/28 | 93443 | systems/win32/miktex/tm/packages/miktex-lua53-bin-2.9.tar.lzma
-2019/09/28 | 93412 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2019/09/28 | 933134 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
2019/09/28 | 932121 | systems/win32/miktex/tm/packages/miktex-poppler-bin-2.9.tar.lzma
-2019/09/28 | 92918 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
2019/09/28 | 92893 | systems/win32/miktex/tm/packages/miktex-jpeg-bin-2.9.tar.lzma
2019/09/28 | 92105 | systems/win32/miktex/tm/packages/miktex-mfware-bin-x64-2.9.tar.lzma
-2019/09/28 | 92004 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
2019/09/28 | 91349 | macros/latex/contrib/glossaries/samples/sampleFnAcrDesc.pdf
-2019/09/28 | 91281 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2019/09/28 | 91204 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
2019/09/28 | 91180 | systems/win32/miktex/tm/packages/miktex-texware-bin-2.9.tar.lzma
2019/09/28 | 91165 | systems/win32/miktex/tm/packages/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2019/09/28 | 8973 | macros/latex/contrib/l3kernel/l3unicode.dtx
2019/09/28 | 891961 | macros/latex/contrib/glossaries/glossaries-user.pdf
2019/09/28 | 88808 | macros/latex/contrib/ducksay/ducksay.dtx
+2019/09/28 | 88331 | macros/latex/contrib/l3kernel/l3int.dtx
2019/09/28 | 8751 | macros/latex/contrib/glossaries/samples/samplexdy3.tex
2019/09/28 | 87444 | systems/win32/miktex/tm/packages/miktex-mfware-bin-2.9.tar.lzma
2019/09/28 | 87310 | systems/win32/miktex/tm/packages/miktex-png-bin-x64-2.9.tar.lzma
-2019/09/28 | 87273 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2019/09/28 | 87206 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2019/09/28 | 86746 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
2019/09/28 | 865 | macros/latex/contrib/glossaries/samples/database1.tex
2019/09/28 | 86490 | systems/win32/miktex/tm/packages/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2019/09/28 | 863046 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
2019/09/28 | 862289 | systems/win32/miktex/tm/packages/miktex-asymptote-bin-2.9.tar.lzma
2019/09/28 | 859 | macros/latex/contrib/glossaries/samples/sample-crossref.tex
2019/09/28 | 859919 | macros/latex/contrib/poemscol.zip
2019/09/28 | 85528 | macros/latex/contrib/glossaries/glossary2glossaries.html
-2019/09/28 | 85048 | systems/texlive/tlnet/archive/texlive-scripts.tar.xz
+2019/09/28 | 85417 | macros/latex/contrib/l3kernel/l3coffins.dtx
+2019/09/28 | 84833 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
2019/09/28 | 84617 | systems/win32/miktex/tm/packages/miktex-bibtex8bit-bin-2.9.tar.lzma
-2019/09/28 | 8452 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2019/09/28 | 8446 | systems/win32/miktex/tm/packages/miktex-md5-bin-x64-2.9.tar.lzma
-2019/09/28 | 84433 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
2019/09/28 | 82730 | systems/win32/miktex/tm/packages/miktex-texify-bin-x64-2.9.tar.lzma
-2019/09/28 | 82643 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2019/09/28 | 82562 | macros/latex/contrib/l3kernel/l3seq.dtx
2019/09/28 | 82190 | macros/latex/contrib/glossaries/samples/sample-custom-acronym.pdf
-2019/09/28 | 80469 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
2019/09/28 | 80446 | systems/win32/miktex/tm/packages/miktex-mpmcli-bin-2.9.tar.lzma
+2019/09/28 | 791615 | fonts/newpx/doc/newpxdoc.pdf
2019/09/28 | 7861 | macros/latex/contrib/glossaries/samples/sampleEqPg.tex
2019/09/28 | 781 | macros/latex/contrib/glossaries/samples/sample-dual.tex
-2019/09/28 | 77970 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
2019/09/28 | 7793 | macros/latex/contrib/glossaries/makeglossaries.1
2019/09/28 | 77928 | systems/win32/miktex/tm/packages/miktex-png-bin-2.9.tar.lzma
2019/09/28 | 77874 | systems/win32/miktex/tm/packages/miktex-mkfntmap-bin-2.9.tar.lzma
-2019/09/28 | 77869 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2019/09/28 | 77424 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
2019/09/28 | 77258 | systems/win32/miktex/tm/packages/miktex-freeglut-bin-x64-2.9.tar.lzma
+2019/09/28 | 77026 | macros/latex/contrib/l3kernel/l3box.dtx
+2019/09/28 | 75902 | macros/latex/contrib/l3kernel/l3skip.dtx
2019/09/28 | 7587 | macros/latex/contrib/glossaries/makeglossaries-lite.1
-2019/09/28 | 7496 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2019/09/28 | 7488 | macros/latex/contrib/l3experimental/l3draw-scopes.dtx
2019/09/28 | 7470 | systems/win32/miktex/tm/packages/miktex-md5-bin-2.9.tar.lzma
-2019/09/28 | 73599 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2019/09/28 | 74349 | macros/latex/contrib/l3kernel/l3clist.dtx
+2019/09/28 | 73859 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
2019/09/28 | 73577 | systems/win32/miktex/tm/packages/miktex-lzma-bin-x64-2.9.tar.lzma
-2019/09/28 | 73170 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
2019/09/28 | 73170 | systems/win32/miktex/tm/packages/miktex-texify-bin-2.9.tar.lzma
-2019/09/28 | 72689 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2019/09/28 | 72559 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2019/09/28 | 72900 | macros/latex/contrib/l3kernel/l3str.dtx
2019/09/28 | 72557 | systems/win32/miktex/tm/packages/miktex-graphite2-bin-x64-2.9.tar.lzma
2019/09/28 | 72522 | systems/win32/miktex/tm/packages/miktex-fonts-bin-x64-2.9.tar.lzma
2019/09/28 | 71810 | macros/latex/contrib/glossaries/glossariesbegin.tex
+2019/09/28 | 71688 | macros/latex/contrib/l3kernel/l3msg.dtx
2019/09/28 | 71614 | systems/win32/miktex/tm/packages/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2019/09/28 | 71578 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
2019/09/28 | 712 | macros/latex/contrib/glossaries/samples/database2.tex
2019/09/28 | 711514 | macros/latex/contrib/poemscol/poemscol.pdf
+2019/09/28 | 70287 | macros/latex/contrib/l3kernel/l3fp.dtx
+2019/09/28 | 697142 | fonts/xcharter/doc/xcharter-doc.pdf
+2019/09/28 | 6970 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
2019/09/28 | 69662 | systems/win32/miktex/tm/packages/miktex-fonts-bin-2.9.tar.lzma
-2019/09/28 | 69598 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
2019/09/28 | 694556 | systems/texlive/tlnet/archive/exsheets.doc.tar.xz
2019/09/28 | 69258 | systems/win32/miktex/tm/packages/miktex-tex4ht-bin-x64-2.9.tar.lzma
2019/09/28 | 692496 | systems/texlive/tlnet/archive/babel.doc.tar.xz
-2019/09/28 | 69222 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2019/09/28 | 68750 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
2019/09/28 | 68744 | systems/win32/miktex/tm/packages/miktex-freeglut-bin-2.9.tar.lzma
2019/09/28 | 68406 | macros/latex/contrib/glossaries/samples/samplexdy2.pdf
2019/09/28 | 67264 | systems/win32/miktex/tm/packages/miktex-bibtex-bin-x64-2.9.tar.lzma
-2019/09/28 | 67252 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2019/09/28 | 67250 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
2019/09/28 | 67223 | systems/win32/miktex/tm/packages/miktex-lzma-bin-2.9.tar.lzma
2019/09/28 | 67085 | macros/latex/contrib/glossaries/samples/sample-noidxapp.pdf
2019/09/28 | 66917 | macros/latex/contrib/glossaries/samples/sampletree.pdf
+2019/09/28 | 65902 | fonts/newtx/doc/newtxdoc.tex
2019/09/28 | 65674 | macros/latex/contrib/glossaries/samples/sampleSec.pdf
2019/09/28 | 65618 | macros/latex/contrib/glossaries/samples/sampleAcrDesc.pdf
2019/09/28 | 65512 | macros/latex/contrib/glossaries/samples/sampleAcr.pdf
-2019/09/28 | 654 | systems/win32/miktex/tm/packages/pr.ini
-2019/09/28 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
-2019/09/28 | 65040 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
2019/09/28 | 65016 | systems/win32/miktex/tm/packages/miktex-web-bin-x64-2.9.tar.lzma
2019/09/28 | 644127 | macros/latex/contrib/upmethodology.zip
2019/09/28 | 6440 | macros/latex/contrib/glossaries/samples/glossary-lipsum-examples.tex
+2019/09/28 | 64264 | macros/latex/contrib/l3kernel/l3prg.dtx
2019/09/28 | 6423050 | install/macros/latex/contrib/glossaries.tds.zip
-2019/09/28 | 63348 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
2019/09/28 | 63283 | systems/win32/miktex/tm/packages/miktex-ps2pk-bin-2.9.tar.lzma
-2019/09/28 | 63277 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
2019/09/28 | 63269 | systems/win32/miktex/tm/packages/miktex-graphite2-bin-2.9.tar.lzma
-2019/09/28 | 63193 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
2019/09/28 | 63045 | systems/win32/miktex/tm/packages/miktex-tex4ht-bin-2.9.tar.lzma
2019/09/28 | 6299222 | macros/latex/contrib/glossaries.zip
-2019/09/28 | 62919 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
2019/09/28 | 62770 | systems/win32/miktex/tm/packages/miktex-mthelp-bin-x64-2.9.tar.lzma
+2019/09/28 | 624152 | macros/latex/contrib/l3experimental/l3draw-code.pdf
2019/09/28 | 623 | macros/latex/contrib/glossaries/samples/sample-FnDesc.tex
2019/09/28 | 622 | macros/latex/contrib/glossaries/samples/sample-entryfmt.tex
-2019/09/28 | 61779 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2019/09/28 | 6203 | macros/latex/contrib/l3kernel/l3color-base.dtx
2019/09/28 | 6171 | macros/latex/contrib/glossaries/samples/sampleEq.tex
2019/09/28 | 61675 | systems/win32/miktex/tm/packages/miktex-fmt-bin-x64-2.9.tar.lzma
-2019/09/28 | 61565 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2019/09/28 | 6163 | macros/latex/contrib/l3experimental/l3draw-state.dtx
2019/09/28 | 61561 | systems/win32/miktex/tm/packages/miktex-web-bin-2.9.tar.lzma
-2019/09/28 | 61552 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2019/09/28 | 6129 | macros/latex/contrib/l3kernel/l3alloc.dtx
2019/09/28 | 61096 | systems/win32/miktex/tm/packages/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2019/09/28 | 6104 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
2019/09/28 | 604612 | systems/texlive/tlnet/archive/babel.source.tar.xz
-2019/09/28 | 60336 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
2019/09/28 | 60185 | systems/win32/miktex/tm/packages/miktex-bibtex-bin-2.9.tar.lzma
-2019/09/28 | 59417 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2019/09/28 | 59426 | macros/latex/contrib/l3kernel/expl3.dtx
2019/09/28 | 59400 | systems/win32/miktex/tm/packages/miktex-tdsutil-bin-x64-2.9.tar.lzma
2019/09/28 | 5908 | systems/texlive/tlnet/archive/collection-latexextra.tar.xz
-2019/09/28 | 58851 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2019/09/28 | 59084 | macros/latex/contrib/l3kernel/l3prefixes.pdf
2019/09/28 | 58822 | macros/latex/contrib/glossaries/samples/sample-FnDesc.pdf
2019/09/28 | 58808 | systems/win32/miktex/tm/packages/miktex-cweb-bin-x64-2.9.tar.lzma
+2019/09/28 | 585166 | macros/latex/contrib/l3kernel/expl3.pdf
+2019/09/28 | 58429 | macros/latex/contrib/l3experimental/xgalley.dtx
2019/09/28 | 575 | macros/latex/contrib/glossaries/samples/sample4col.tex
2019/09/28 | 575859 | systems/win32/miktex/tm/packages/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2019/09/28 | 575507 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2019/09/28 | 57192 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
2019/09/28 | 57177 | systems/win32/miktex/tm/packages/miktex-bibarts-bin-x64-2.9.tar.lzma
2019/09/28 | 5703 | macros/latex/contrib/glossaries/samples/sample.tex
-2019/09/28 | 56633 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2019/09/28 | 5681390 | macros/latex/contrib/l3kernel/source3.pdf
+2019/09/28 | 5662 | macros/latex/contrib/l3experimental/l3draw-layers.dtx
2019/09/28 | 56542 | systems/win32/miktex/tm/packages/miktex-fmt-bin-2.9.tar.lzma
-2019/09/28 | 56405 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
2019/09/28 | 56349 | systems/win32/miktex/tm/packages/miktex-mthelp-bin-2.9.tar.lzma
-2019/09/28 | 563400 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
2019/09/28 | 563125 | systems/win32/miktex/tm/packages/miktex-yap-bin-x64-2.9.tar.lzma
-2019/09/28 | 560964 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
2019/09/28 | 560931 | systems/win32/miktex/tm/packages/miktex-libressl-bin-x64-2.9.tar.lzma
2019/09/28 | 54828 | macros/latex/contrib/glossaries/samples/sample-chap-hyperfirst.pdf
-2019/09/28 | 54818 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
2019/09/28 | 54793 | systems/win32/miktex/tm/packages/miktex-ttf2pk2-bin-2.9.tar.lzma
-2019/09/28 | 544492 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
2019/09/28 | 544021 | systems/win32/miktex/tm/packages/miktex-harfbuzz-bin-x64-2.9.tar.lzma
2019/09/28 | 542033 | macros/latex/contrib/ducksay.zip
2019/09/28 | 54074 | systems/win32/miktex/tm/packages/miktex-cjkutils-bin-x64-2.9.tar.lzma
2019/09/28 | 540295 | systems/win32/miktex/tm/packages/miktex-log4cxx-bin-2.9.tar.lzma
-2019/09/28 | 53940 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2019/09/28 | 539381 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
2019/09/28 | 53794 | macros/latex/contrib/upmethodology/src/upmethodology-fmt.sty
2019/09/28 | 53462 | macros/latex/contrib/glossaries/samples/sample-crossref.pdf
-2019/09/28 | 53398 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
2019/09/28 | 53383 | systems/win32/miktex/tm/packages/miktex-tdsutil-bin-2.9.tar.lzma
-2019/09/28 | 533668 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2019/09/28 | 533583 | systems/win32/miktex/tm/packages/miktex-yap-bin-2.9.tar.lzma
2019/09/28 | 52806 | macros/latex/contrib/glossaries/samples/sample-dot-abbr.pdf
+2019/09/28 | 5273 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2019/09/28 | 526 | macros/latex/contrib/glossaries/samples/sample-ignored.tex
2019/09/28 | 525295 | macros/latex/contrib/ducksay/ducksay.pdf
2019/09/28 | 52138 | systems/win32/miktex/tm/packages/miktex-m-tx-bin-x64-2.9.tar.lzma
-2019/09/28 | 52037 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
2019/09/28 | 52011 | systems/win32/miktex/tm/packages/miktex-cweb-bin-2.9.tar.lzma
-2019/09/28 | 52009 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
2019/09/28 | 518 | macros/latex/contrib/glossaries/samples/mwe-acr-desc.tex
2019/09/28 | 514365 | macros/latex/contrib/glossaries/glossaries-user.tex
-2019/09/28 | 51244 | systems/texlive/tlnet/archive/texlive-scripts.doc.tar.xz
+2019/09/28 | 513322 | systems/win32/w32tex/ChangeLog
+2019/09/28 | 51073 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
2019/09/28 | 5105 | macros/latex/contrib/glossaries/samples/sample-custom-acronym.tex
2019/09/28 | 50939 | systems/win32/miktex/tm/packages/miktex-psutils-bin-x64-2.9.tar.lzma
-2019/09/28 | 50931 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2019/09/28 | 50893 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
2019/09/28 | 50813 | systems/win32/miktex/tm/packages/miktex-synctex-bin-x64-2.9.tar.lzma
2019/09/28 | 50715 | macros/latex/contrib/glossaries/samples/sample-font-abbr.pdf
-2019/09/28 | 505775 | systems/win32/miktex/tm/packages/files.csv.lzma
-2019/09/28 | 505605 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2019/09/28 | 50508 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
2019/09/28 | 50460 | systems/win32/miktex/tm/packages/miktex-findtexmf-bin-x64-2.9.tar.lzma
2019/09/28 | 501889 | systems/win32/miktex/doc/2.9/miktex.pdf
2019/09/28 | 49963 | macros/latex/contrib/glossaries/samples/minimalgls.pdf
-2019/09/28 | 499167 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
2019/09/28 | 498461 | systems/win32/miktex/tm/packages/miktex-libressl-bin-2.9.tar.lzma
+2019/09/28 | 4984328 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2019/09/28 | 49752 | systems/win32/miktex/tm/packages/miktex-bibarts-bin-2.9.tar.lzma
-2019/09/28 | 49731 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2019/09/28 | 49619 | macros/latex/contrib/l3kernel/l3prop.dtx
+2019/09/28 | 4949211 | install/macros/latex/contrib/l3experimental.tds.zip
2019/09/28 | 494807 | macros/latex/contrib/duckuments/duckuments.pdf
+2019/09/28 | 49394 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
2019/09/28 | 492 | macros/latex/contrib/glossaries/samples/sampleDB.tex
2019/09/28 | 49289 | systems/win32/miktex/tm/packages/miktex-cjkutils-bin-2.9.tar.lzma
-2019/09/28 | 49272 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2019/09/28 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2019/09/28 | 491537 | macros/latex/contrib/l3experimental/l3draw.pdf
2019/09/28 | 489546 | macros/latex/contrib/acrotex/examples/webeqtst.pdf
2019/09/28 | 48402 | macros/latex/contrib/glossaries/samples/sampleDesc.pdf
-2019/09/28 | 47969 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
2019/09/28 | 47962 | systems/win32/miktex/tm/packages/miktex-expat-bin-x64-2.9.tar.lzma
2019/09/28 | 4766 | macros/latex/contrib/glossaries/samples/sample-inline.tex
2019/09/28 | 47465 | macros/latex/contrib/glossaries/samples/samplePeople.pdf
+2019/09/28 | 47215 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
2019/09/28 | 47048 | macros/latex/contrib/glossaries/samples/sampleDB.pdf
2019/09/28 | 4702 | macros/latex/contrib/upmethodology/src/upm_question.svg
2019/09/28 | 464855 | macros/latex/contrib/poemscol/poemscol.dtx
@@ -204,339 +1432,292 @@
2019/09/28 | 459076 | systems/win32/miktex/tm/packages/miktex-harfbuzz-bin-2.9.tar.lzma
2019/09/28 | 4582 | macros/latex/contrib/glossaries/samples/sample-storage-abbr-desc.tex
2019/09/28 | 45791 | systems/win32/miktex/tm/packages/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2019/09/28 | 45776 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2019/09/28 | 457519 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2019/09/28 | 45725 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
2019/09/28 | 45670 | systems/win32/miktex/tm/packages/miktex-mtprint-bin-x64-2.9.tar.lzma
-2019/09/28 | 45614 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2019/09/28 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2019/09/28 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2019/09/28 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2019/09/28 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2019/09/28 | 455 | macros/latex/contrib/glossaries/samples/mwe-acr.tex
2019/09/28 | 45585 | systems/win32/miktex/tm/packages/miktex-m-tx-bin-2.9.tar.lzma
-2019/09/28 | 45471 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2019/09/28 | 4549 | macros/latex/contrib/l3experimental/README.md
2019/09/28 | 45431 | systems/win32/miktex/tm/packages/miktex-findtexmf-bin-2.9.tar.lzma
2019/09/28 | 450102 | systems/win32/miktex/tm/packages/miktex-doc-2.9.tar.lzma
-2019/09/28 | 450077 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
2019/09/28 | 44994 | systems/win32/miktex/tm/packages/miktex-dvipng-bin-x64-2.9.tar.lzma
-2019/09/28 | 44954 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
2019/09/28 | 44951 | macros/latex/contrib/glossaries/samples/sampleutf8.pdf
2019/09/28 | 43525 | macros/latex/contrib/glossaries/makeglossaries
-2019/09/28 | 43445 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
2019/09/28 | 43392 | systems/win32/miktex/tm/packages/miktex-expat-bin-2.9.tar.lzma
2019/09/28 | 43385 | macros/latex/contrib/glossaries/samples/sample-index.pdf
2019/09/28 | 43333 | macros/latex/contrib/glossaries/samples/sample4col.pdf
+2019/09/28 | 4328 | macros/latex/contrib/l3experimental/l3draw-boxes.dtx
2019/09/28 | 43266 | macros/latex/contrib/glossaries/samples/sample-prefix.pdf
2019/09/28 | 4317 | macros/latex/contrib/upmethodology/src/upm_info.svg
-2019/09/28 | 42941 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
2019/09/28 | 42876 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
2019/09/28 | 4260 | systems/texlive/tlnet/archive/tokcycle.tar.xz
2019/09/28 | 42567 | systems/win32/miktex/tm/packages/miktex-psutils-bin-2.9.tar.lzma
-2019/09/28 | 42564 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2019/09/28 | 42137 | macros/latex/contrib/l3kernel/l3debug.dtx
2019/09/28 | 41985 | macros/latex/contrib/glossaries/samples/sample-numberlist.pdf
-2019/09/28 | 41906 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2019/09/28 | 41900 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
2019/09/28 | 41873 | systems/win32/miktex/tm/packages/miktex-mtprint-bin-2.9.tar.lzma
2019/09/28 | 41795 | systems/win32/miktex/tm/packages/miktex-synctex-bin-2.9.tar.lzma
2019/09/28 | 41752 | macros/latex/contrib/glossaries/samples/sample-nomathhyper.pdf
2019/09/28 | 41167 | macros/latex/contrib/glossaries/samples/sampleaccsupp.pdf
-2019/09/28 | 41010 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
2019/09/28 | 40930 | systems/win32/miktex/tm/packages/miktex-dvicopy-bin-2.9.tar.lzma
+2019/09/28 | 40930 | macros/latex/contrib/l3kernel/l3sort.dtx
+2019/09/28 | 40718 | macros/latex/contrib/l3experimental/l3draw.dtx
2019/09/28 | 40714 | systems/win32/miktex/tm/packages/miktex-dvipng-bin-2.9.tar.lzma
+2019/09/28 | 40709 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
2019/09/28 | 4064 | macros/latex/contrib/glossaries/INSTALL
2019/09/28 | 40632 | systems/texlive/tlnet/archive/chemmacros.tar.xz
-2019/09/28 | 40557 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2019/09/28 | 40406 | fonts/newpx/doc/newpxdoc.tex
2019/09/28 | 4002 | macros/latex/contrib/upmethodology/src/upm_caution.svg
2019/09/28 | 40015 | macros/latex/contrib/duckuments/duckuments.dtx
2019/09/28 | 39905 | macros/latex/contrib/glossaries/samples/sample-storage-abbr-desc.pdf
2019/09/28 | 39897 | systems/win32/miktex/tm/packages/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2019/09/28 | 39876 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
2019/09/28 | 39567 | macros/latex/contrib/glossaries/CHANGES
-2019/09/28 | 3941652 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2019/09/28 | 39209 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
2019/09/28 | 39204 | macros/latex/contrib/glossaries/samples/sample-newkeys.pdf
2019/09/28 | 391628 | systems/win32/miktex/tm/packages/miktex-cairo-bin-x64-2.9.tar.lzma
-2019/09/28 | 391447 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2019/09/28 | 38866 | macros/latex/contrib/glossaries/samples/sample-langdict.pdf
-2019/09/28 | 387869 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
2019/09/28 | 387253 | systems/win32/miktex/tm/packages/miktex-omega-bin-x64-2.9.tar.lzma
2019/09/28 | 38716 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
-2019/09/28 | 38688 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
2019/09/28 | 38631 | systems/win32/miktex/tm/packages/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2019/09/28 | 385959 | macros/latex/contrib/l3experimental/l3galley.pdf
2019/09/28 | 383 | macros/latex/contrib/glossaries/samples/mwe-gls.tex
2019/09/28 | 37969 | macros/latex/contrib/glossaries/samples/mwe-acr-desc.pdf
2019/09/28 | 37671 | macros/latex/contrib/glossaries/samples/sample-storage-abbr.pdf
2019/09/28 | 3755 | macros/latex/contrib/glossaries/samples/sampleCustomAcr.tex
+2019/09/28 | 373088 | macros/latex/contrib/l3experimental/xcoffins.pdf
2019/09/28 | 37213 | macros/latex/contrib/glossaries/samples/sampleacronyms.pdf
2019/09/28 | 36845 | macros/latex/contrib/glossaries/samples/sample-entrycount.pdf
-2019/09/28 | 36626 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
2019/09/28 | 36599 | systems/win32/miktex/tm/packages/miktex-posix-bin-x64-2.9.tar.lzma
2019/09/28 | 36467 | macros/latex/contrib/glossaries/samples/sample-dual.pdf
-2019/09/28 | 36366 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2019/09/28 | 36360 | systems/win32/miktex/tm/packages/miktex-chktex-bin-x64-2.9.tar.lzma
+2019/09/28 | 363307 | macros/latex/contrib/l3experimental/l3graphics.pdf
2019/09/28 | 3624 | systems/texlive/tlnet/archive/esindex.tar.xz
-2019/09/28 | 356012 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2019/09/28 | 35785 | macros/latex/contrib/l3kernel/l3obsolete.txt
2019/09/28 | 355970 | macros/latex/contrib/acrotex/examples/jquiztst.pdf
2019/09/28 | 355820 | systems/win32/miktex/tm/packages/miktex-pdftex-bin-x64-2.9.tar.lzma
2019/09/28 | 354911 | systems/win32/miktex/tm/packages/miktex-omega-bin-2.9.tar.lzma
-2019/09/28 | 354709 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
-2019/09/28 | 35220 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
2019/09/28 | 35189 | systems/win32/miktex/tm/packages/miktex-gsf2pk-bin-2.9.tar.lzma
+2019/09/28 | 35177 | macros/latex/contrib/l3experimental/xcoffins.dtx
+2019/09/28 | 35043 | macros/latex/contrib/l3kernel/l3deprecation.dtx
+2019/09/28 | 349991 | macros/latex/contrib/l3experimental/l3pdf.pdf
+2019/09/28 | 349914 | macros/latex/contrib/l3experimental/l3color.pdf
2019/09/28 | 34909 | macros/latex/contrib/glossaries/samples/sample-entryfmt.pdf
-2019/09/28 | 34850 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
2019/09/28 | 34838 | systems/win32/miktex/tm/packages/miktex-axohelp-bin-x64-2.9.tar.lzma
-2019/09/28 | 34836 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
2019/09/28 | 34821 | systems/win32/miktex/tm/packages/miktex-mspack-bin-x64-2.9.tar.lzma
+2019/09/28 | 3481900 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
2019/09/28 | 3465 | macros/latex/contrib/glossaries/samples/sample-storage-abbr.tex
+2019/09/28 | 345103 | macros/latex/contrib/l3experimental/l3str-format.pdf
+2019/09/28 | 3385 | macros/latex/contrib/l3experimental/CHANGELOG.md
+2019/09/28 | 337798 | macros/latex/contrib/l3experimental/l3cctab.pdf
2019/09/28 | 33661 | macros/latex/contrib/glossaries/samples/mwe-acr.pdf
2019/09/28 | 3361 | macros/latex/contrib/glossaries/samples/sample-noidxapp-utf8.tex
2019/09/28 | 3354617 | macros/latex/contrib/acrotex.zip
-2019/09/28 | 33426 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
2019/09/28 | 33399 | systems/win32/miktex/tm/packages/miktex-arctrl-bin-x64-2.9.tar.lzma
-2019/09/28 | 33355 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
2019/09/28 | 33331 | systems/win32/miktex/tm/packages/miktex-epstopdf-bin-2.9.tar.lzma
-2019/09/28 | 328749 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
2019/09/28 | 328686 | systems/win32/miktex/tm/packages/miktex-cairo-bin-2.9.tar.lzma
2019/09/28 | 3276 | macros/latex/contrib/glossaries/samples/sample-noidxapp.tex
-2019/09/28 | 32350 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2019/09/28 | 32473 | macros/latex/contrib/l3experimental/l3draw-paths.dtx
2019/09/28 | 32331 | systems/win32/miktex/tm/packages/miktex-uriparser-bin-x64-2.9.tar.lzma
2019/09/28 | 32234 | systems/win32/miktex/tm/packages/miktex-chktex-bin-2.9.tar.lzma
-2019/09/28 | 32191 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2019/09/28 | 321227 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
2019/09/28 | 321036 | systems/win32/miktex/tm/packages/miktex-pdftex-bin-2.9.tar.lzma
2019/09/28 | 31816 | macros/latex/contrib/glossaries/samples/sample-ignored.pdf
+2019/09/28 | 31787 | macros/latex/contrib/l3experimental/l3str-format.dtx
+2019/09/28 | 314468 | macros/latex/contrib/l3experimental/l3benchmark.pdf
+2019/09/28 | 31299 | macros/latex/contrib/l3experimental/l3draw-points.dtx
2019/09/28 | 31194 | systems/win32/miktex/tm/packages/miktex-makeindex-bin-x64-2.9.tar.lzma
-2019/09/28 | 31186 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2019/09/28 | 31155 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2019/09/28 | 311872 | macros/latex/contrib/l3experimental/l3sys-shell.pdf
2019/09/28 | 31135 | systems/win32/miktex/tm/packages/miktex-posix-bin-2.9.tar.lzma
-2019/09/28 | 31007 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2019/09/28 | 3110872 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
2019/09/28 | 30969 | systems/win32/miktex/tm/packages/miktex-mspack-bin-2.9.tar.lzma
-2019/09/28 | 308929 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
2019/09/28 | 308463 | systems/win32/miktex/tm/packages/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2019/09/28 | 30238 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2019/09/28 | 30189 | systems/win32/miktex/tm/packages/miktex-bzip2-bin-x64-2.9.tar.lzma
+2019/09/28 | 30025 | fonts/newtx/README
+2019/09/28 | 2997 | macros/latex/contrib/l3kernel/README.md
2019/09/28 | 29951 | macros/latex/contrib/glossaries/samples/mwe-gls.pdf
2019/09/28 | 2984 | macros/latex/contrib/acrotex/README.md
-2019/09/28 | 29711 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2019/09/28 | 29812 | macros/latex/contrib/l3experimental/l3color.dtx
2019/09/28 | 29679 | systems/win32/miktex/tm/packages/miktex-lacheck-bin-x64-2.9.tar.lzma
+2019/09/28 | 29531 | macros/latex/contrib/l3kernel/l3prefixes.csv
2019/09/28 | 29274 | systems/win32/miktex/tm/packages/miktex-axohelp-bin-2.9.tar.lzma
-2019/09/28 | 29256 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2019/09/28 | 29253 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
2019/09/28 | 29190 | systems/win32/miktex/tm/packages/miktex-arctrl-bin-2.9.tar.lzma
-2019/09/28 | 29124 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
2019/09/28 | 29111 | systems/win32/miktex/tm/packages/miktex-teckit-bin-x64-2.9.tar.lzma
2019/09/28 | 2902 | macros/latex/contrib/glossaries/makeglossaries-lite.pod
-2019/09/28 | 28736 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
2019/09/28 | 28702 | systems/win32/miktex/tm/packages/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2019/09/28 | 285881 | macros/latex/contrib/l3experimental/xgalley.pdf
2019/09/28 | 28419 | macros/latex/contrib/glossaries/samples/samplexdy-mc.xdy
2019/09/28 | 281575 | systems/win32/miktex/tm/packages/miktex-freetype2-bin-x64-2.9.tar.lzma
-2019/09/28 | 281503 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2019/09/28 | 281312 | systems/win32/miktex/tm/packages/miktex-metapost-bin-x64-2.9.tar.lzma
-2019/09/28 | 281253 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2019/09/28 | 280279 | macros/latex/contrib/l3kernel/l3styleguide.pdf
2019/09/28 | 279872 | systems/texlive/tlnet/archive/tokcycle.doc.tar.xz
2019/09/28 | 278614 | macros/latex/contrib/duckuments/example-image-duck.pdf
2019/09/28 | 27771 | systems/win32/miktex/tm/packages/miktex-lacheck-bin-2.9.tar.lzma
-2019/09/28 | 276789 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2019/09/28 | 27650 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2019/09/28 | 277554 | macros/latex/contrib/l3experimental/l3pdf-code.pdf
2019/09/28 | 276460 | systems/win32/miktex/tm/packages/miktex-xetex-bin-x64-2.9.tar.lzma
2019/09/28 | 272737 | macros/latex/contrib/duckuments/example-image-duck-portrait.pdf
2019/09/28 | 271763 | systems/win32/miktex/tm/packages/miktex-dvipdfmx-bin-2.9.tar.lzma
-2019/09/28 | 271720 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
2019/09/28 | 26 | macros/latex/contrib/upmethodology/src/UPMVERSION.def
2019/09/28 | 26968 | systems/win32/miktex/tm/packages/miktex-makeindex-bin-2.9.tar.lzma
2019/09/28 | 2695 | macros/latex/contrib/glossaries/README
-2019/09/28 | 26959 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2019/09/28 | 26741 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
2019/09/28 | 26737 | systems/win32/miktex/tm/packages/miktex-teckit-bin-2.9.tar.lzma
-2019/09/28 | 26648 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
2019/09/28 | 26620 | systems/win32/miktex/tm/packages/miktex-bzip2-bin-2.9.tar.lzma
-2019/09/28 | 26506 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
2019/09/28 | 26466 | systems/win32/miktex/tm/packages/miktex-uriparser-bin-2.9.tar.lzma
2019/09/28 | 2636 | macros/latex/contrib/glossaries/samples/sampleSort.tex
-2019/09/28 | 26194 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2019/09/28 | 263491 | macros/latex/contrib/l3kernel/l3docstrip.pdf
2019/09/28 | 26174 | systems/win32/miktex/tm/packages/miktex-autosp-bin-x64-2.9.tar.lzma
2019/09/28 | 2590 | macros/latex/contrib/glossaries/samples/minimalgls.tex
2019/09/28 | 2580248 | systems/win32/miktex/tm/packages/miktex-texworks-bin-x64-2.9.tar.lzma
-2019/09/28 | 2579879 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2019/09/28 | 25753 | macros/latex/contrib/l3kernel/l3fp-random.dtx
2019/09/28 | 2559 | macros/latex/contrib/glossaries/samples/sampleAcr.tex
2019/09/28 | 2540 | macros/latex/contrib/glossaries/samples/sampleFnAcrDesc.tex
2019/09/28 | 25320 | systems/win32/miktex/tm/packages/miktex-fribidixetex-bin-2.9.tar.lzma
-2019/09/28 | 25319 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
2019/09/28 | 2526932 | systems/texlive/tlnet/archive/ketcindy.tar.xz
+2019/09/28 | 250949 | macros/latex/contrib/l3kernel/l3regex.dtx
2019/09/28 | 248676 | macros/latex/contrib/glossaries/samples/glossary-lipsum-examples.pdf
2019/09/28 | 2480966 | install/macros/latex/required/babel-base.tds.zip
+2019/09/28 | 2479 | macros/latex/contrib/l3kernel/l3legacy.dtx
2019/09/28 | 247870 | systems/win32/miktex/tm/packages/miktex-metapost-bin-2.9.tar.lzma
-2019/09/28 | 247517 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2019/09/28 | 247001 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2019/09/28 | 24771 | macros/latex/contrib/l3experimental/l3graphics.dtx
2019/09/28 | 246951 | systems/win32/miktex/tm/packages/miktex-xetex-bin-2.9.tar.lzma
-2019/09/28 | 246472 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
2019/09/28 | 246391 | systems/win32/miktex/tm/packages/miktex-freetype2-bin-2.9.tar.lzma
-2019/09/28 | 2457990 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
2019/09/28 | 2457800 | systems/win32/miktex/tm/packages/miktex-texworks-bin-2.9.tar.lzma
2019/09/28 | 24235 | macros/latex/contrib/glossaries/glossary2glossaries.tex
2019/09/28 | 24112 | systems/texlive/tlnet/archive/exsheets.tar.xz
-2019/09/28 | 24053 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
2019/09/28 | 24006 | systems/win32/miktex/tm/packages/miktex-autosp-bin-2.9.tar.lzma
2019/09/28 | 237479 | systems/win32/miktex/tm/packages/miktex-pmx-bin-x64-2.9.tar.lzma
-2019/09/28 | 237448 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2019/09/28 | 23619 | macros/latex/contrib/l3kernel/l3sys.dtx
2019/09/28 | 2341 | macros/latex/contrib/glossaries/samples/sampleAcrDesc.tex
2019/09/28 | 23340 | systems/win32/miktex/tm/packages/miktex-popt-bin-x64-2.9.tar.lzma
-2019/09/28 | 23334 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2019/09/28 | 23068 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
2019/09/28 | 2300 | macros/latex/contrib/glossaries/samples/sampleNtn.tex
2019/09/28 | 22917 | systems/win32/miktex/tm/packages/miktex-devnag-bin-x64-2.9.tar.lzma
-2019/09/28 | 22909 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2019/09/28 | 22533016 | systems/texlive/tlnet/install-tl.zip
+2019/09/28 | 22875 | fonts/newtx/map/newtx.map
+2019/09/28 | 228018 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+2019/09/28 | 21791 | macros/latex/contrib/l3kernel/l3quark.dtx
2019/09/28 | 217267 | systems/win32/miktex/tm/packages/miktex-console-bin-x64-2.9.tar.lzma
2019/09/28 | 21722 | macros/latex/contrib/glossaries/samples/sample-si.pdf
2019/09/28 | 215616 | systems/texlive/tlnet/archive/esindex.doc.tar.xz
2019/09/28 | 215568 | macros/latex/contrib/acrotex/eforms.dtx
-2019/09/28 | 214120 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2019/09/28 | 2119504 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2019/09/28 | 2153 | macros/latex/contrib/l3kernel/source3.tex
2019/09/28 | 2094 | macros/latex/contrib/glossaries/samples/sample-dot-abbr.tex
2019/09/28 | 2089 | macros/latex/contrib/upmethodology/src/upm_question.pdf
-2019/09/28 | 20720 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
2019/09/28 | 20669 | systems/win32/miktex/tm/packages/miktex-devnag-bin-2.9.tar.lzma
-2019/09/28 | 202550 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2019/09/28 | 20463 | macros/latex/contrib/l3experimental/l3draw-softpath.dtx
2019/09/28 | 202284 | systems/win32/miktex/tm/packages/miktex-pmx-bin-2.9.tar.lzma
2019/09/28 | 198511 | systems/win32/miktex/tm/packages/miktex-console-bin-2.9.tar.lzma
-2019/09/28 | 198185 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2019/09/28 | 19791 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
2019/09/28 | 19769 | systems/win32/miktex/tm/packages/miktex-popt-bin-2.9.tar.lzma
+2019/09/28 | 19759 | fonts/xcharter/doc/xcharter-doc.tex
2019/09/28 | 1970 | macros/latex/contrib/glossaries/samples/sampletree.tex
+2019/09/28 | 19693 | macros/latex/contrib/l3kernel/l3intarray.dtx
2019/09/28 | 1967 | macros/latex/contrib/upmethodology/src/upm_info.pdf
+2019/09/28 | 19661 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
+2019/09/28 | 19610 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
2019/09/28 | 1956 | macros/latex/contrib/glossaries/samples/sampleDesc.tex
2019/09/28 | 195204 | systems/win32/miktex/tm/packages/miktex-mpfr-bin-2.9.tar.lzma
-2019/09/28 | 194933 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2019/09/28 | 193856 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
2019/09/28 | 193705 | systems/win32/miktex/tm/packages/miktex-pixman-bin-x64-2.9.tar.lzma
-2019/09/28 | 191020 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2019/09/28 | 190946 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2019/09/28 | 1935012 | systems/win32/w32tex/win64/context-w64.tar.xz
+2019/09/28 | 19219 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+2019/09/28 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
2019/09/28 | 187264 | macros/latex/contrib/acrotex/doc/eformman.tex
-2019/09/28 | 18694100 | systems/texlive/tlnet/install-tl-windows.exe
2019/09/28 | 186857 | systems/win32/miktex/tm/packages/miktex-pixman-bin-2.9.tar.lzma
-2019/09/28 | 186818 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2019/09/28 | 186806 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
2019/09/28 | 186413 | macros/latex/contrib/glossaries/glossariesbegin.pdf
-2019/09/28 | 185583 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2019/09/28 | 18605 | macros/latex/contrib/l3kernel/l3fp-round.dtx
2019/09/28 | 185115 | systems/win32/miktex/tm/packages/miktex-mktex-bin-x64-2.9.tar.lzma
-2019/09/28 | 184238 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
2019/09/28 | 184183 | systems/win32/miktex/tm/packages/miktex-curl-bin-x64-2.9.tar.lzma
2019/09/28 | 184162 | macros/latex/contrib/glossaries/glossariesbegin.html
2019/09/28 | 1835 | macros/latex/contrib/glossaries/samples/samplexdy2.tex
2019/09/28 | 1833 | macros/latex/contrib/upmethodology/src/upm_caution.pdf
2019/09/28 | 182855 | systems/win32/miktex/tm/packages/miktex-metafont-bin-x64-2.9.tar.lzma
-2019/09/28 | 182708 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2019/09/28 | 17934 | macros/latex/contrib/l3experimental/l3cctab.dtx
2019/09/28 | 17925 | macros/latex/contrib/upmethodology/src/upm_question.png
2019/09/28 | 179160 | macros/latex/contrib/glossaries/samples/samplexdy3.pdf
+2019/09/28 | 17815 | macros/latex/contrib/l3experimental/l3benchmark.dtx
2019/09/28 | 17810 | macros/latex/contrib/upmethodology/src/upm_info.png
-2019/09/28 | 17766 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2019/09/28 | 177646 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
2019/09/28 | 177442 | systems/win32/miktex/tm/packages/miktex-mpfr-bin-x64-2.9.tar.lzma
2019/09/28 | 17740 | systems/win32/miktex/tm/packages/miktex-tex2xindy-bin-x64-2.9.tar.lzma
2019/09/28 | 17720 | macros/latex/contrib/glossaries/samples/samplexdy-mc207.xdy
-2019/09/28 | 17690 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2019/09/28 | 17667 | systems/win32/miktex/tm/packages/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2019/09/28 | 17653 | fonts/newpx/map/newpx.map
2019/09/28 | 1757 | macros/latex/contrib/glossaries/samples/README-samples
2019/09/28 | 1752 | macros/latex/contrib/glossaries/samples/sampleSec.tex
-2019/09/28 | 169239 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
2019/09/28 | 169231 | systems/win32/miktex/tm/packages/miktex-curl-bin-2.9.tar.lzma
2019/09/28 | 169073 | macros/latex/contrib/glossaries/samples/sampleEqPg.pdf
2019/09/28 | 1686 | macros/latex/contrib/glossaries/samples/sample-prefix.tex
-2019/09/28 | 167814 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
2019/09/28 | 167757 | systems/win32/miktex/tm/packages/miktex-metafont-bin-2.9.tar.lzma
2019/09/28 | 1663 | macros/latex/contrib/glossaries/samples/sample-font-abbr.tex
2019/09/28 | 165703 | systems/win32/miktex/tm/packages/miktex-mo-bin-x64-2.9.tar.lzma
2019/09/28 | 1656 | macros/latex/contrib/glossaries/samples/sample-newkeys.tex
-2019/09/28 | 165673 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2019/09/28 | 165650 | systems/win32/miktex/tm/packages/miktex-mktex-bin-2.9.tar.lzma
-2019/09/28 | 165556 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2019/09/28 | 1620002 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2019/09/28 | 1642 | macros/latex/contrib/l3kernel/l3term-glossary.tex
2019/09/28 | 1618768 | systems/win32/miktex/tm/packages/miktex-luatex-bin-x64-2.9.tar.lzma
-2019/09/28 | 160578 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2019/09/28 | 16179 | macros/latex/contrib/l3kernel/l3luatex.dtx
2019/09/28 | 160469 | systems/win32/miktex/tm/packages/miktex-tex-bin-x64-2.9.tar.lzma
-2019/09/28 | 16035 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
2019/09/28 | 16034 | systems/win32/miktex/tm/packages/miktex-tex2xindy-bin-2.9.tar.lzma
2019/09/28 | 1593 | macros/latex/contrib/glossaries/samples/sample-index.tex
-2019/09/28 | 15892 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
2019/09/28 | 15879 | systems/win32/miktex/tm/packages/miktex-kpathsea-bin-2.9.tar.lzma
-2019/09/28 | 15815240 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2019/09/28 | 15864436 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2019/09/28 | 1577421 | macros/latex/required/babel/base.zip
+2019/09/28 | 15708 | macros/latex/contrib/l3kernel/l3final.dtx
2019/09/28 | 155616 | macros/latex/contrib/glossaries/samples/sampleEq.pdf
-2019/09/28 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2019/09/28 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2019/09/28 | 15469 | macros/latex/contrib/l3kernel/CHANGELOG.md
+2019/09/28 | 1534320 | macros/latex/contrib/l3kernel/interface3.pdf
+2019/09/28 | 1526 | macros/latex/contrib/l3experimental/l3pdf.ins
2019/09/28 | 152153 | systems/win32/miktex/tm/packages/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2019/09/28 | 152131 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2019/09/28 | 1520933 | macros/latex/contrib/glossaries/glossaries-user.html
2019/09/28 | 150122 | systems/win32/miktex/tm/packages/miktex-hunspell-bin-x64-2.9.tar.lzma
-2019/09/28 | 149925 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2019/09/28 | 149143 | macros/latex/contrib/l3kernel/l3doc.dtx
2019/09/28 | 148008 | systems/texlive/tlnet/archive/babel.tar.xz
2019/09/28 | 147485 | macros/latex/contrib/glossaries/samples/sample-inline.pdf
-2019/09/28 | 147140 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
2019/09/28 | 147024 | systems/win32/miktex/tm/packages/miktex-tex-bin-2.9.tar.lzma
2019/09/28 | 147020 | systems/win32/miktex/tm/packages/miktex-mo-bin-2.9.tar.lzma
-2019/09/28 | 146753 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2019/09/28 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
2019/09/28 | 1453 | macros/latex/contrib/glossaries/samples/samplePeople.tex
-2019/09/28 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2019/09/28 | 14415 | macros/latex/contrib/upmethodology/src/upm_caution.png
2019/09/28 | 143123 | macros/latex/contrib/glossaries/glossary2glossaries.pdf
2019/09/28 | 14254036 | systems/texlive/tlnet/archive/ketcindy.doc.tar.xz
2019/09/28 | 1407 | macros/latex/contrib/glossaries/samples/sampleutf8.tex
-2019/09/28 | 1407480 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
2019/09/28 | 1405 | macros/latex/contrib/glossaries/samples/sample-chap-hyperfirst.tex
-2019/09/28 | 14052 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/09/28 | 1404044 | systems/win32/miktex/tm/packages/miktex-luatex-bin-2.9.tar.lzma
2019/09/28 | 14032 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2019/09/28 | 1395 | macros/latex/contrib/glossaries/samples/sample-langdict.tex
2019/09/28 | 137202 | systems/win32/miktex/tm/packages/miktex-hunspell-bin-2.9.tar.lzma
-2019/09/28 | 137118 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
2019/09/28 | 134115 | macros/latex/contrib/glossaries/samples/samplexdy.pdf
-2019/09/28 | 133150 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
2019/09/28 | 133136 | systems/win32/miktex/tm/packages/miktex-fontconfig-bin-2.9.tar.lzma
2019/09/28 | 1327861 | systems/win32/miktex/tm/packages/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2019/09/28 | 1326762 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2019/09/28 | 13059 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2019/09/28 | 132279 | macros/latex/contrib/l3kernel/l3tl.dtx
+2019/09/28 | 131720580 | systems/win32/w32tex/context.tar.xz
2019/09/28 | 13043 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
-2019/09/28 | 1273248 | systems/win32/miktex/tm/packages/next/miktex-harftex-bin-x64-2.9.tar.lzma
+2019/09/28 | 12979 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
+2019/09/28 | 129546 | macros/latex/contrib/l3kernel/l3candidates.dtx
2019/09/28 | 1272652 | systems/win32/miktex/tm/packages/miktex-harftex-bin-x64-2.9.tar.lzma
2019/09/28 | 127215 | systems/win32/miktex/tm/packages/miktex-dvips-bin-x64-2.9.tar.lzma
-2019/09/28 | 127164 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2019/09/28 | 124824 | macros/latex/contrib/l3kernel/l3basics.dtx
2019/09/28 | 12480 | macros/latex/contrib/glossaries/makeglossaries-lite.lua
-2019/09/28 | 1205460 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2019/09/28 | 120179 | macros/latex/contrib/l3kernel/l3file.dtx
2019/09/28 | 1198508 | systems/win32/miktex/tm/packages/miktex-dvisvgm-bin-2.9.tar.lzma
2019/09/28 | 1197366 | macros/latex/contrib/glossaries/glossaries-code.pdf
2019/09/28 | 1194351 | macros/latex/contrib/glossaries/glossaries.dtx
-2019/09/28 | 1194274 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
2019/09/28 | 1193762 | systems/win32/miktex/tm/packages/miktex-runtime-bin-x64-2.9.tar.lzma
-2019/09/28 | 116836 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2019/09/28 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
+2019/09/28 | 11826 | macros/latex/contrib/l3kernel/l3fparray.dtx
2019/09/28 | 116432 | systems/win32/miktex/tm/packages/miktex-gd-bin-x64-2.9.tar.lzma
-2019/09/28 | 1133390 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2019/09/28 | 1133136 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
2019/09/28 | 11288 | macros/latex/contrib/glossaries/glossaries.ins
2019/09/28 | 112887 | systems/win32/miktex/tm/packages/miktex-dvips-bin-2.9.tar.lzma
-2019/09/28 | 112856 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2019/09/28 | 110969 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2019/09/28 | 1116 | macros/latex/contrib/l3experimental/l3pdf-code.tex
+2019/09/28 | 111497 | macros/latex/contrib/l3kernel/l3names.dtx
2019/09/28 | 110950 | systems/win32/miktex/tm/packages/miktex-gregorio-bin-x64-2.9.tar.lzma
2019/09/28 | 1103 | macros/latex/contrib/glossaries/samples/sampleacronyms.tex
2019/09/28 | 1103778 | systems/win32/miktex/tm/packages/miktex-harftex-bin-2.9.tar.lzma
-2019/09/28 | 1101600 | systems/win32/miktex/tm/packages/next/miktex-harftex-bin-2.9.tar.lzma
-2019/09/28 | 108875 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2019/09/28 | 109736 | macros/latex/contrib/l3kernel/l3str-convert.dtx
+2019/09/28 | 10937 | macros/latex/contrib/l3experimental/l3sys-shell.dtx
2019/09/28 | 108862 | systems/win32/miktex/tm/packages/miktex-jpeg-bin-x64-2.9.tar.lzma
2019/09/28 | 1082 | macros/latex/contrib/glossaries/samples/sample-entrycount.tex
2019/09/28 | 1074076 | systems/texlive/tlnet/archive/chemmacros.doc.tar.xz
2019/09/28 | 1066737 | systems/win32/miktex/tm/packages/miktex-runtime-bin-2.9.tar.lzma
-2019/09/28 | 1066577 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2019/09/28 | 1056729 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2019/09/28 | 1056461 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2019/09/28 | 106223 | macros/latex/contrib/l3kernel/l3expan.dtx
+2019/09/28 | 105630 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
2019/09/28 | 104381 | macros/latex/contrib/glossaries/samples/sample.pdf
2019/09/28 | 1043022 | systems/win32/miktex/tm/packages/miktex-poppler-bin-x64-2.9.tar.lzma
-2019/09/28 | 1042828 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2019/09/28 | 102389 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
2019/09/28 | 102387 | systems/win32/miktex/tm/packages/miktex-lua53-bin-x64-2.9.tar.lzma
2019/09/28 | 1022613 | macros/latex/contrib/duckuments.zip
2019/09/28 | 1011 | macros/latex/contrib/glossaries/samples/sampleaccsupp.tex
-2019/09/28 | 100714 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
2019/09/28 | 100627 | systems/win32/miktex/tm/packages/miktex-gd-bin-2.9.tar.lzma
+2019/09/28 | 1005512 | fonts/newtx/doc/newtxdoc.pdf
2019/09/27 | 98366900 | systems/win32/w32tex/web2c-lib.tar.xz
2019/09/27 | 9812 | graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/zogen3.tex
2019/09/27 | 9764 | graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/srcold/KetCindyPlugin170605.java
@@ -811,12 +1992,10 @@
2019/09/27 | 5168 | graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/bowdata.tex
2019/09/27 | 5164 | graphics/ketcindy/ketcindyfolder/work/samples/s01figure/s0110hypotrochoid.cdy
2019/09/27 | 514 | graphics/ketcindy/ketcindyfolder/work/samples/s07slides/s0703repeatE.txt
-2019/09/27 | 5141 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2019/09/27 | 5139 | graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3d1.tex
2019/09/27 | 5137 | graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0203graph2.cdy
2019/09/27 | 5135 | graphics/ketcindy/ketcindyfolder/work/samples/s02graph/s0206defexp.cdy
2019/09/27 | 512 | graphics/ketcindy/ketcindyfolder/scripts/data/fontF/rcr.txt
-2019/09/27 | 512888 | systems/win32/w32tex/ChangeLog
2019/09/27 | 5125 | graphics/ketcindy/ketcindyfolder/scripts/ketcindy.pl
2019/09/27 | 5109 | graphics/ketcindy/ketcindyfolder/work/samples/s08R/s0802plotR2.cdy
2019/09/27 | 5103 | graphics/ketcindy/ketcindyfolder/work/samples/s10maxima/s1012odefor.cdy
@@ -1285,7 +2464,6 @@
2019/09/27 | 1587 | graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/addax1.tex
2019/09/27 | 157570 | graphics/ketcindy/ketcindyfolder/scripts/ketjava/KetCindyPlugin.jar
2019/09/27 | 1569 | graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/ForRef-Arrowhead-ya1.tex
-2019/09/27 | 154820 | systems/texlive/tlnet/archive/texlive-docindex.doc.tar.xz
2019/09/27 | 153765 | macros/latex/contrib/chemmacros/chemmacros_en.tex
2019/09/27 | 15305 | graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/fourier_sec.max
2019/09/27 | 152709 | graphics/ketcindy/ketcindyfolder/doc/source/KetCindyPlugin/lib/commons-math.jar
@@ -1300,6 +2478,7 @@
2019/09/27 | 1500 | graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/setorigin.tex
2019/09/27 | 15003 | macros/latex/contrib/datatool/CHANGES
2019/09/27 | 149969 | graphics/ketcindy/ketcindyfolder/scripts/data/fontF/tsi.cdy
+2019/09/27 | 14988 | fonts/newpx/README
2019/09/27 | 14941 | macros/latex/contrib/datatool/samples/sample-index.tex
2019/09/27 | 14785 | macros/latex/contrib/chemmacros/chemmacros.module.base.code.tex
2019/09/27 | 1476 | macros/latex/contrib/datatool/samples/sample-two-per-row.tex
@@ -1371,7 +2550,6 @@
2019/09/27 | 113 | graphics/ketcindy/forMac/Forsettingmanually/ketcindy.conf
2019/09/27 | 112718 | graphics/ketcindy/ketcindyfolder/work/samples/s17spacekc/SpacekcReference.pdf
2019/09/27 | 11266 | graphics/ketcindy/ketcindyfolder/doc/source/ketmanual/Fig/partcrv3.tex
-2019/09/27 | 109876 | systems/texlive/tlnet/archive/texlive-docindex.tar.xz
2019/09/27 | 1096 | graphics/ketcindy/forLinux/setwork.sh
2019/09/27 | 10943 | macros/generic/tokcycle/tokcycle.tex
2019/09/27 | 1086 | graphics/ketcindy/ketcindyfolder/scripts/ketlib/maximaL/matoperation.max
@@ -1435,11 +2613,13 @@
2019/09/26 | 617 | macros/luatex/generic/luatexja/src/patches/lltjp-array.sty
2019/09/26 | 612535 | systems/win32/miktex/tm/packages/acro.tar.lzma
2019/09/26 | 6060 | macros/luatex/generic/luatexja/tool/kyoikukanjiChars.tex
+2019/09/26 | 5912 | macros/latex/contrib/l3kernel/l3.ins
2019/09/26 | 5883 | macros/latex/contrib/exsheets/exsheets-listings.sty
2019/09/26 | 580 | macros/luatex/generic/luatexja/tool/blocks2defcharrange.rb
2019/09/26 | 5752 | macros/luatex/generic/luatexja/src/ltj-lotf_aux.lua
2019/09/26 | 57133 | macros/latex/contrib/unicode-math/um-doc-main.tex
2019/09/26 | 5681 | macros/luatex/generic/luatexja/src/patches/lltjp-tascmac.sty
+2019/09/26 | 5667 | macros/latex/contrib/l3kernel/l3format.ins
2019/09/26 | 563358 | macros/luatex/generic/luatexja/doc/luatexja-zhfonts.pdf
2019/09/26 | 551 | macros/luatex/generic/luatexja/tool/jfm-readable.rb
2019/09/26 | 54427 | macros/luatex/generic/luatexja/src/ltj-jisx0208.lua
@@ -1504,6 +2684,7 @@
2019/09/26 | 26124 | macros/latex/contrib/unicode-math/um-code-alphabets.dtx
2019/09/26 | 2601 | macros/luatex/generic/luatexja/src/jfm-kaiming.lua
2019/09/26 | 2601 | macros/luatex/generic/luatexja/src/jfm-banjiao.lua
+2019/09/26 | 2592 | macros/latex/contrib/l3kernel/l3prefixes.tex
2019/09/26 | 2590 | macros/latex/contrib/unicode-math/um-doc-legacyfontdimen.tex
2019/09/26 | 2575 | macros/luatex/generic/luatexja/src/jfm-quanjiao.lua
2019/09/26 | 241265 | macros/latex/contrib/unicode-math/unicode-math-table.tex
@@ -1515,12 +2696,14 @@
2019/09/26 | 22002 | macros/latex/contrib/unicode-math/unimath-example.pdf
2019/09/26 | 2193 | macros/luatex/generic/luatexja/src/addons/luatexja-zhfonts.sty
2019/09/26 | 215230 | macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua
+2019/09/26 | 21047 | macros/latex/contrib/l3kernel/source3body.tex
2019/09/26 | 2053 | macros/latex/contrib/unicode-math/unicode-math.ins
2019/09/26 | 200 | macros/luatex/generic/luatexja/src/jfm-prop.lua
2019/09/26 | 19886 | macros/luatex/generic/luatexja/src/luatexja.lua
2019/09/26 | 196 | macros/luatex/generic/luatexja/src/jfm-propv.lua
2019/09/26 | 19520 | macros/latex/contrib/unicode-math/um-code-usv.dtx
2019/09/26 | 192 | macros/luatex/generic/luatexja/src/jfm-mono.lua
+2019/09/26 | 1912 | macros/latex/contrib/l3experimental/l3draw.ins
2019/09/26 | 19106 | macros/latex/contrib/unicode-math/LICENSE
2019/09/26 | 18950 | macros/luatex/generic/luatexja/src/ltj-adjust.lua
2019/09/26 | 189189 | macros/luatex/generic/luatexja/src/ltjsclasses.dtx
@@ -1541,9 +2724,11 @@
2019/09/26 | 1627 | macros/latex/contrib/unicode-math/um-doc-stixextract.tex
2019/09/26 | 162731 | macros/latex/contrib/unicode-math/unicode-math.pdf
2019/09/26 | 15856 | macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-26h.sty
+2019/09/26 | 1565 | macros/latex/contrib/l3experimental/l3str.ins
2019/09/26 | 15633 | macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty
2019/09/26 | 155405 | systems/win32/miktex/tm/packages/jlreq.tar.lzma
2019/09/26 | 1553 | macros/latex/contrib/exsheets/README
+2019/09/26 | 1549 | macros/latex/contrib/l3experimental/l3graphics.ins
2019/09/26 | 15373 | macros/latex/contrib/unicode-math/unimath-symbols.ltx
2019/09/26 | 1536 | macros/luatex/generic/luatexja/COPYING
2019/09/26 | 15235 | macros/latex/contrib/unicode-math/CHANGES.md
@@ -1552,6 +2737,7 @@
2019/09/26 | 140622 | macros/luatex/generic/luatexja/doc/lltjp-geometry.pdf
2019/09/26 | 1397 | macros/luatex/generic/luatexja/tool/ivslist.tex
2019/09/26 | 13958 | macros/luatex/generic/luatexja/doc/luatexja-zhfonts.tex
+2019/09/26 | 1356 | macros/latex/contrib/l3experimental/l3draw-code.tex
2019/09/26 | 135678 | systems/win32/miktex/tm/packages/gitver.tar.lzma
2019/09/26 | 13422 | macros/luatex/generic/luatexja/doc/lltjp-geometry.tex
2019/09/26 | 1332 | macros/latex/contrib/exsheets/exsheets_configurations.cfg
@@ -1570,11 +2756,11 @@
2019/09/26 | 1190 | macros/latex/contrib/unicode-math/um-code-api.dtx
2019/09/26 | 11748 | macros/luatex/generic/luatexja/src/ltj-base.lua
2019/09/26 | 11459 | macros/latex/contrib/unicode-math/um-code-primes.dtx
+2019/09/26 | 114062 | fonts/newtx/tex/newtxmath.sty
2019/09/26 | 11335 | macros/luatex/generic/luatexja/tool/unicodeBlocks.tex
2019/09/26 | 1130 | macros/luatex/generic/luatexja/tool/function_uax50.lua
2019/09/26 | 11307 | macros/luatex/generic/luatexja/src/jfm-ujisv.lua
2019/09/26 | 11242 | macros/latex/contrib/unicode-math/um-code-opening.dtx
-2019/09/26 | 1121414 | systems/win32/miktex/tm/packages/chemmacros.tar.lzma
2019/09/26 | 11106 | macros/luatex/generic/luatexja/src/jfm-ujis.lua
2019/09/26 | 10689 | macros/luatex/generic/luatexja/src/patches/lltjcore.sty
2019/09/26 | 106013 | macros/latex/contrib/exsheets/exsheets_en.tex
@@ -1582,16 +2768,12 @@
2019/09/26 | 1044 | macros/latex/contrib/unicode-math/unicode-math.ltx
2019/09/26 | 10420 | macros/latex/contrib/unicode-math/um-doc-mathfontdimen.tex
2019/09/26 | 10037 | macros/luatex/generic/luatexja/src/patches/lltjdefs.sty
-2019/09/25 | 9722 | macros/latex/contrib/l3build/CHANGELOG.md
+2019/09/25 | 97949 | fonts/newpx/tex/newpxmath.sty
2019/09/25 | 965768 | systems/texlive/tlnet/archive/chemformula.doc.tar.xz
2019/09/25 | 83716 | systems/texlive/tlnet/archive/pythontex.source.tar.xz
-2019/09/25 | 786491 | install/macros/latex/contrib/l3build.tds.zip
-2019/09/25 | 781500 | macros/latex/contrib/l3build.zip
-2019/09/25 | 704972 | macros/latex/contrib/l3build/l3build.pdf
2019/09/25 | 6970 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
2019/09/25 | 66856 | systems/texlive/tlnet/archive/pythontex.tar.xz
2019/09/25 | 65948 | systems/texlive/tlnet/archive/plantuml.doc.tar.xz
-2019/09/25 | 6580 | macros/latex/contrib/l3build/l3build-typesetting.lua
2019/09/25 | 657262 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
2019/09/25 | 635416 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
2019/09/25 | 629337 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
@@ -1606,7 +2788,6 @@
2019/09/25 | 556366 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
2019/09/25 | 5436 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
2019/09/25 | 5384 | macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
-2019/09/25 | 5154 | macros/latex/contrib/l3build/l3build.lua
2019/09/25 | 4805 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
2019/09/25 | 4673 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty
2019/09/25 | 4631 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
@@ -1618,31 +2799,52 @@
2019/09/25 | 372980 | systems/texlive/tlnet/archive/ebgaramond-maths.doc.tar.xz
2019/09/25 | 3621 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
2019/09/25 | 3456 | systems/texlive/tlnet/archive/ebgaramond-maths.tar.xz
-2019/09/25 | 33347 | macros/latex/contrib/l3build/l3build-check.lua
2019/09/25 | 33338 | macros/latex/contrib/tuda-ci/tex/tudapub.cls
+2019/09/25 | 3324 | fonts/newpx/tfm/zplbmi1.tfm
+2019/09/25 | 3320 | fonts/newpx/tfm/zplbmi.tfm
+2019/09/25 | 3252 | fonts/newpx/tfm/zplmi.tfm
+2019/09/25 | 3248 | fonts/newpx/tfm/zplmi1.tfm
2019/09/25 | 2708 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty
+2019/09/25 | 2668 | fonts/newpx/vf/zplbmi.vf
+2019/09/25 | 2668 | fonts/newpx/vf/zplbmi1.vf
+2019/09/25 | 2552 | fonts/newpx/vf/zplmi.vf
+2019/09/25 | 2548 | fonts/newpx/vf/zplmi1.vf
2019/09/25 | 24784 | systems/texlive/tlnet/archive/acro.tar.xz
2019/09/25 | 24688 | systems/texlive/tlnet/archive/jlreq.doc.tar.xz
2019/09/25 | 2224 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
2019/09/25 | 2204 | systems/texlive/tlnet/archive/plantuml.tar.xz
2019/09/25 | 21911 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
+2019/09/25 | 2156 | fonts/newpx/tfm/zplbmia.tfm
2019/09/25 | 2094 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
+2019/09/25 | 2076 | fonts/newpx/tfm/zplmia.tfm
+2019/09/25 | 2020 | fonts/newtx/tfm/ntxbsy7.tfm
+2019/09/25 | 2012 | fonts/newtx/tfm/ntxsy.tfm
+2019/09/25 | 2008 | fonts/newtx/tfm/ntxsy5.tfm
+2019/09/25 | 2008 | fonts/newtx/tfm/ntxbsy.tfm
+2019/09/25 | 2008 | fonts/newtx/tfm/ntxbsy5.tfm
+2019/09/25 | 2000 | fonts/newtx/tfm/ntxsy7.tfm
+2019/09/25 | 1872 | fonts/newtx/vf/ntxsy7.vf
+2019/09/25 | 1856 | fonts/newtx/vf/ntxbsy7.vf
2019/09/25 | 18524 | systems/texlive/tlnet/archive/chemformula.tar.xz
2019/09/25 | 1838203 | macros/latex/contrib/unicode-math.zip
-2019/09/25 | 1817 | macros/latex/contrib/l3build/l3build.1
+2019/09/25 | 1756 | fonts/newtx/vf/ntxsy.vf
+2019/09/25 | 1756 | fonts/newtx/vf/ntxsy5.vf
2019/09/25 | 17258 | macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
+2019/09/25 | 1692 | fonts/newtx/vf/ntxbsy.vf
+2019/09/25 | 1692 | fonts/newtx/vf/ntxbsy5.vf
2019/09/25 | 16763 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
2019/09/25 | 1619 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
2019/09/25 | 15620 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
2019/09/25 | 15607 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
2019/09/25 | 1550244 | systems/texlive/tlnet/archive/pythontex.doc.tar.xz
+2019/09/25 | 1532 | fonts/newpx/vf/zplbmia.vf
+2019/09/25 | 1528 | fonts/newpx/vf/zplmia.vf
+2019/09/25 | 151 | fonts/newpx/tex/newpx.subs
2019/09/25 | 14172 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls
2019/09/25 | 131060 | systems/texlive/tlnet/archive/jlreq.tar.xz
2019/09/25 | 12453409 | macros/texinfo/texinfo.zip
2019/09/25 | 11439 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls
2019/09/25 | 10506 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
-2019/09/25 | 102828 | macros/latex/contrib/l3build/l3build.dtx
-2019/09/25 | 1024 | macros/latex/contrib/l3build/README.md
2019/09/24 | 985564 | macros/latex/contrib/chemformula.zip
2019/09/24 | 950273 | macros/latex/contrib/chemformula/chemformula_en.pdf
2019/09/24 | 931813 | systems/win32/miktex/tm/packages/luaotfload.tar.lzma
@@ -1653,12 +2855,12 @@
2019/09/24 | 87255 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
2019/09/24 | 8696 | fonts/ebgaramond-maths/ebgaramond-maths.tex
2019/09/24 | 8663924 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
-2019/09/24 | 856032 | systems/win32/miktex/tm/packages/poemscol.tar.lzma
2019/09/24 | 8374855 | install/language/japanese/jlreq.tds.zip
2019/09/24 | 815 | fonts/adforn/manifest.txt
2019/09/24 | 81093 | systems/win32/miktex/tm/packages/xfakebold.tar.lzma
2019/09/24 | 801 | fonts/adfsymbols/adfbullets.sty
2019/09/24 | 7603104 | systems/win32/w32tex/ptex-w32.tar.xz
+2019/09/24 | 752 | fonts/xcharter/tfm/XCharterMathRM.tfm
2019/09/24 | 7300 | systems/texlive/tlnet/archive/perltex.tar.xz
2019/09/24 | 68466 | systems/win32/miktex/tm/packages/plantuml.tar.lzma
2019/09/24 | 6740 | macros/latex/contrib/l3build/l3build-variables.lua
@@ -1669,7 +2871,6 @@
2019/09/24 | 612690 | macros/latex/contrib/acro.zip
2019/09/24 | 61192 | systems/texlive/tlnet/archive/tex4ht.doc.tar.xz
2019/09/24 | 5750 | fonts/adfsymbols/adfarrows.sty
-2019/09/24 | 573550 | systems/win32/miktex/tm/packages/upmethodology.tar.lzma
2019/09/24 | 569351 | language/japanese/jlreq.zip
2019/09/24 | 496938 | systems/win32/miktex/tm/packages/xindex.tar.lzma
2019/09/24 | 4785217 | systems/win32/miktex/tm/packages/tcolorbox.tar.lzma
@@ -1678,6 +2879,7 @@
2019/09/24 | 428704 | systems/win32/miktex/tm/packages/gnuplottex.tar.lzma
2019/09/24 | 415952 | systems/texlive/tlnet/archive/gnuplottex.doc.tar.xz
2019/09/24 | 414694 | fonts/adfsymbols.zip
+2019/09/24 | 40353 | fonts/xcharter/map/XCharter.map
2019/09/24 | 400614 | fonts/adforn.zip
2019/09/24 | 3980795 | systems/win32/miktex/tm/packages/l3experimental.tar.lzma
2019/09/24 | 39582 | systems/win32/miktex/tm/packages/ctanbib.tar.lzma
@@ -1691,6 +2893,12 @@
2019/09/24 | 342144 | systems/texlive/tlnet/archive/lwarp.source.tar.xz
2019/09/24 | 3404252 | systems/win32/w32tex/win64/web2c-w64.tar.xz
2019/09/24 | 3296 | systems/texlive/tlnet/archive/gnuplottex.tar.xz
+2019/09/24 | 3256 | fonts/xcharter/tfm/zchbmi.tfm
+2019/09/24 | 3252 | fonts/xcharter/tfm/zchbmi0.tfm
+2019/09/24 | 32504 | fonts/newtx/type1/XCharterMathBMI.pfb
+2019/09/24 | 3248 | fonts/xcharter/tfm/zchmi.tfm
+2019/09/24 | 3248 | fonts/xcharter/tfm/zchmi0.tfm
+2019/09/24 | 31870 | fonts/newtx/type1/XCharterMathMI.pfb
2019/09/24 | 31468 | systems/texlive/tlnet/archive/perltex.source.tar.xz
2019/09/24 | 3121509 | systems/win32/miktex/tm/packages/iodhbwm.tar.lzma
2019/09/24 | 311585 | systems/win32/miktex/tm/packages/perltex.tar.lzma
@@ -1700,17 +2908,26 @@
2019/09/24 | 27136 | systems/texlive/tlnet/archive/keyfloat.source.tar.xz
2019/09/24 | 2611 | fonts/ebgaramond-maths/ebgaramond-maths.sty
2019/09/24 | 253132 | systems/win32/miktex/tm/packages/scontents.tar.lzma
+2019/09/24 | 24974 | fonts/newtx/type1/XCharterMathBRM.pfb
2019/09/24 | 249009 | systems/win32/miktex/tm/packages/libertinus-otf.tar.lzma
+2019/09/24 | 2448 | fonts/xcharter/vf/zchbmi.vf
+2019/09/24 | 2448 | fonts/xcharter/vf/zchbmi0.vf
2019/09/24 | 242847 | systems/win32/miktex/tm/packages/etoolbox.tar.lzma
2019/09/24 | 2391596 | systems/texlive/tlnet/archive/lwarp.doc.tar.xz
+2019/09/24 | 2356 | fonts/xcharter/vf/zchmi.vf
+2019/09/24 | 2356 | fonts/xcharter/vf/zchmi0.vf
+2019/09/24 | 2348 | fonts/xcharter/tfm/zchmia.tfm
2019/09/24 | 2298 | fonts/ebgaramond-maths/a_w5zv5t.enc
2019/09/24 | 22439 | systems/win32/miktex/tm/packages/miktex-misc.tar.lzma
+2019/09/24 | 2224 | fonts/xcharter/tfm/zchbmia.tfm
2019/09/24 | 212841 | systems/win32/miktex/tm/packages/snapshot.tar.lzma
+2019/09/24 | 2060 | fonts/xcharter/vf/zchmia.vf
2019/09/24 | 204323 | systems/win32/miktex/tm/packages/derivative.tar.lzma
2019/09/24 | 2028167 | systems/win32/miktex/tm/packages/biblatex-oxref.tar.lzma
2019/09/24 | 2001 | fonts/adforn/OrnementsADF.enc
2019/09/24 | 198369 | systems/win32/miktex/tm/packages/marcellus.tar.lzma
2019/09/24 | 184569 | systems/win32/miktex/tm/packages/extract.tar.lzma
+2019/09/24 | 1832 | fonts/xcharter/vf/zchbmia.vf
2019/09/24 | 18300 | systems/win32/miktex/tm/packages/ocgx2.tar.lzma
2019/09/24 | 17992 | fonts/adfsymbols/COPYING
2019/09/24 | 17992 | fonts/adforn/COPYING
@@ -1718,6 +2935,9 @@
2019/09/24 | 1764079 | macros/latex/contrib/pythontex.zip
2019/09/24 | 1700 | fonts/adfsymbols/NOTICE
2019/09/24 | 1690 | fonts/adforn/NOTICE
+2019/09/24 | 1536 | fonts/xcharter/tfm/XCharterMathMI.tfm
+2019/09/24 | 1528 | fonts/xcharter/tfm/XCharterMathBMI.tfm
+2019/09/24 | 14856 | fonts/newtx/type1/XCharterMathRM.pfb
2019/09/24 | 145764 | systems/texlive/tlnet/archive/lwarp.tar.xz
2019/09/24 | 140 | fonts/ebgaramond-maths/EBGaramond-Maths.map
2019/09/24 | 1404 | fonts/ebgaramond-maths/manifest.txt
@@ -1730,6 +2950,7 @@
2019/09/24 | 13022 | fonts/adfsymbols/adfsymbols.tex
2019/09/24 | 1248 | fonts/ebgaramond-maths/README
2019/09/24 | 1167 | fonts/adfsymbols/README
+2019/09/24 | 1164 | fonts/xcharter/tfm/XCharterMathBRM.tfm
2019/09/24 | 1144 | fonts/ebgaramond-maths/OMLEBGaramond-Maths.fd
2019/09/24 | 1135 | fonts/adforn/README
2019/09/24 | 1077315 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
@@ -1768,7 +2989,6 @@
2019/09/23 | 7035 | macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Report.texi
2019/09/23 | 700884 | macros/texinfo/texinfo/configure
2019/09/23 | 69907 | macros/luatex/latex/plantuml.zip
-2019/09/23 | 685128 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
2019/09/23 | 67253 | macros/texinfo/texinfo/doc/Makefile.in
2019/09/23 | 66 | macros/texinfo/texinfo/tp/Texinfo/Parser.pm
2019/09/23 | 66191 | macros/texinfo/texinfo/tp/Texinfo/Convert/TexinfoXML.pm
@@ -1777,15 +2997,12 @@
2019/09/23 | 636 | macros/luatex/latex/plantuml/example-component-diagram.tex
2019/09/23 | 6312528 | systems/win32/w32tex/uptex-w32.tar.xz
2019/09/23 | 63024 | macros/texinfo/texinfo/NEWS
-2019/09/23 | 62950996 | systems/win32/w32tex/biblatex-biber.tar.xz
-2019/09/23 | 6269356 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2019/09/23 | 6092 | macros/texinfo/texinfo/tp/Texinfo/XS/TestXS.c
2019/09/23 | 60831 | macros/texinfo/texinfo/texindex/Makefile.in
2019/09/23 | 59828 | macros/texinfo/texinfo/util/texi2dvi
2019/09/23 | 59828 | macros/texinfo/latest/texi2dvi
2019/09/23 | 59397 | macros/texinfo/texinfo/util/Makefile.in
2019/09/23 | 592 | systems/texlive/tlnet/archive/collection-langjapanese.tar.xz
-2019/09/23 | 592888 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
2019/09/23 | 59129 | macros/texinfo/texinfo/Makefile.in
2019/09/23 | 58326 | macros/texinfo/texinfo/Pod-Simple-Texinfo/Makefile.in
2019/09/23 | 57892 | macros/texinfo/texinfo/tp/Texinfo/Convert/DocBook.pm
@@ -1819,7 +3036,12 @@
2019/09/23 | 43178 | macros/texinfo/texinfo/doc/tp_api/Makefile.in
2019/09/23 | 425873 | macros/latex/contrib/gnuplottex.zip
2019/09/23 | 42122 | macros/texinfo/texinfo/tp/Texinfo/Convert/Unicode.pm
-2019/09/23 | 416400 | macros/latex/contrib/gnuplottex/gnuplottex.pdf
+2019/09/23 | 4200 | fonts/newtx/tfm/ntxbmi1.tfm
+2019/09/23 | 4200 | fonts/newtx/tfm/ntxbmi0.tfm
+2019/09/23 | 4192 | fonts/newtx/tfm/ntxbmi.tfm
+2019/09/23 | 4188 | fonts/newtx/tfm/ntxmi0.tfm
+2019/09/23 | 4184 | fonts/newtx/tfm/ntxmi1.tfm
+2019/09/23 | 4180 | fonts/newtx/tfm/ntxmi.tfm
2019/09/23 | 41330 | macros/texinfo/texinfo/tp/tests/indices/Makefile.in
2019/09/23 | 41072 | macros/texinfo/texinfo/tp/tests/contents/Makefile.in
2019/09/23 | 41001 | macros/texinfo/texinfo/tp/tests/formatting/Makefile.in
@@ -1835,20 +3057,75 @@
2019/09/23 | 373207 | macros/latex/contrib/pythontex/pythontex_gallery.pdf
2019/09/23 | 36019 | macros/texinfo/texinfo/config.in
2019/09/23 | 357444 | systems/texlive/tlnet/archive/almendra.tar.xz
-2019/09/23 | 35521 | macros/latex/contrib/gnuplottex/gnuplottex.dtx
2019/09/23 | 353101 | language/japanese/jlreq/jlreq-ja.pdf
2019/09/23 | 34292 | systems/texlive/tlnet/archive/pdfpages.source.tar.xz
2019/09/23 | 3420 | systems/texlive/tlnet/archive/biblatex-phys.tar.xz
+2019/09/23 | 3388 | fonts/newtx/tfm/ntxbmi15.tfm
+2019/09/23 | 3384 | fonts/newtx/tfm/ntxbmi5.tfm
2019/09/23 | 33720 | macros/texinfo/texinfo/tp/Texinfo/Convert/IXIN.pm
2019/09/23 | 33684 | macros/latex/contrib/pythontex/NEWS.rst
+2019/09/23 | 3352 | fonts/newtx/tfm/ntxbmi7.tfm
+2019/09/23 | 3352 | fonts/newtx/tfm/ntxbmi17.tfm
+2019/09/23 | 3348 | fonts/newtx/tfm/nxlbmi1.tfm
+2019/09/23 | 3348 | fonts/newtx/tfm/nxlbmi01.tfm
+2019/09/23 | 3348 | fonts/newtx/tfm/ntxbmi07.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi35.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi25.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi0.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi03.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi035.tfm
+2019/09/23 | 3344 | fonts/newtx/tfm/nxlbmi025.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi5.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi3.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi2.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi15.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi05.tfm
+2019/09/23 | 3340 | fonts/newtx/tfm/nxlbmi015.tfm
+2019/09/23 | 3328 | fonts/newtx/tfm/nxlmi027.tfm
+2019/09/23 | 3324 | fonts/newtx/tfm/nxlmi27.tfm
+2019/09/23 | 3324 | fonts/newtx/tfm/nxlmi07.tfm
+2019/09/23 | 3324 | fonts/newtx/tfm/nxlmi037.tfm
+2019/09/23 | 3324 | fonts/newtx/tfm/nxlmi017.tfm
+2019/09/23 | 3320 | fonts/newtx/tfm/nxlmi7.tfm
+2019/09/23 | 3320 | fonts/newtx/tfm/nxlmi37.tfm
+2019/09/23 | 3316 | fonts/newtx/tfm/nxlmi17.tfm
+2019/09/23 | 3316 | fonts/newtx/tfm/nxlmi035.tfm
+2019/09/23 | 3316 | fonts/newtx/tfm/nxlmi025.tfm
+2019/09/23 | 3316 | fonts/newtx/tfm/nxlmi015.tfm
+2019/09/23 | 3312 | fonts/newtx/tfm/nxlmi35.tfm
+2019/09/23 | 3312 | fonts/newtx/tfm/nxlmi25.tfm
+2019/09/23 | 3312 | fonts/newtx/tfm/nxlmi05.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/nxlmi5.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/nxlmi15.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/nxlbmi17.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/ntxmi7.tfm
+2019/09/23 | 3308 | fonts/newtx/tfm/ntxmi17.tfm
2019/09/23 | 330567 | macros/texinfo/texinfo/tp/Texinfo/XS/parsetexi/Parser-5556.pm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi7.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi37.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi27.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi037.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/nxlbmi017.tfm
+2019/09/23 | 3304 | fonts/newtx/tfm/ntxmi07.tfm
+2019/09/23 | 3300 | fonts/newtx/tfm/nxlbmi07.tfm
+2019/09/23 | 3300 | fonts/newtx/tfm/nxlbmi027.tfm
+2019/09/23 | 3292 | fonts/newtx/tfm/nxlmi3.tfm
+2019/09/23 | 3292 | fonts/newtx/tfm/nxlmi2.tfm
+2019/09/23 | 3292 | fonts/newtx/tfm/nxlmi03.tfm
+2019/09/23 | 3292 | fonts/newtx/tfm/nxlmi02.tfm
+2019/09/23 | 3288 | fonts/newtx/tfm/nxlmi01.tfm
+2019/09/23 | 3284 | fonts/newtx/tfm/nxlmi.tfm
+2019/09/23 | 3284 | fonts/newtx/tfm/nxlmi1.tfm
+2019/09/23 | 3284 | fonts/newtx/tfm/nxlmi0.tfm
2019/09/23 | 3279 | macros/latex/contrib/acro/example_two.tex
+2019/09/23 | 3276 | fonts/newtx/tfm/ntxmi15.tfm
+2019/09/23 | 3268 | fonts/newtx/tfm/ntxmi5.tfm
+2019/09/23 | 3268 | fonts/newtx/tfm/ntxmi05.tfm
2019/09/23 | 3265065 | install/macros/latex/contrib/lwarp.tds.zip
-2019/09/23 | 318990 | install/macros/latex/contrib/perltex.tds.zip
2019/09/23 | 314788 | systems/texlive/tlnet/archive/pdfpages.doc.tar.xz
2019/09/23 | 31188 | systems/texlive/tlnet/archive/almendra.doc.tar.xz
2019/09/23 | 309434 | macros/latex/contrib/perltex.zip
-2019/09/23 | 3073 | macros/latex/contrib/perltex/perltex.ins
2019/09/23 | 3020 | macros/latex/contrib/pythontex/pythontex.py
2019/09/23 | 2953 | macros/texinfo/texinfo/man/info.1
2019/09/23 | 2947 | macros/latex/contrib/lwarp/lwarp_tutorial.txt
@@ -1862,17 +3139,85 @@
2019/09/23 | 28577 | macros/texinfo/texinfo/tp/Texinfo/Convert/Text.pm
2019/09/23 | 28527 | macros/texinfo/texinfo/tp/Texinfo/Transformations.pm
2019/09/23 | 2842760 | macros/latex/contrib/lwarp.zip
-2019/09/23 | 283945 | macros/latex/contrib/perltex/perltex.pdf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi2.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi1.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi0.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlmi01.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlbmi.vf
+2019/09/23 | 2744 | fonts/newtx/vf/nxlbmi1.vf
+2019/09/23 | 2744 | fonts/newtx/vf/ntxbmi.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi7.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi5.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi3.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi37.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi35.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi27.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi25.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi17.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi15.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi07.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi05.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi03.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi037.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi035.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi02.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi027.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi025.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi017.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlmi015.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi7.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi5.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi3.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi37.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi35.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi2.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi27.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi25.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi17.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi15.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi0.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi07.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi05.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi037.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi035.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi027.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi025.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi01.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi017.vf
+2019/09/23 | 2740 | fonts/newtx/vf/nxlbmi015.vf
+2019/09/23 | 2740 | fonts/newtx/vf/ntxbmi1.vf
+2019/09/23 | 2740 | fonts/newtx/vf/ntxbmi0.vf
+2019/09/23 | 2736 | fonts/newtx/vf/nxlbmi03.vf
+2019/09/23 | 2708 | fonts/newtx/vf/ntxbmi17.vf
+2019/09/23 | 2708 | fonts/newtx/vf/ntxbmi15.vf
+2019/09/23 | 2704 | fonts/newtx/vf/ntxbmi07.vf
+2019/09/23 | 2700 | fonts/newtx/vf/ntxbmi7.vf
+2019/09/23 | 2700 | fonts/newtx/vf/ntxbmi5.vf
2019/09/23 | 26 | macros/latex/contrib/pythontex/pythontex.bat
2019/09/23 | 268857 | macros/texinfo/texinfo/tp/Texinfo/ParserNonXS.pm
2019/09/23 | 2654 | macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-HTML.texi
2019/09/23 | 263827 | macros/texinfo/texinfo/tp/Texinfo/Convert/HTML.pm
2019/09/23 | 2616824 | systems/win32/w32tex/dvitools-w32.tar.xz
2019/09/23 | 2613 | macros/latex/contrib/pythontex/README
+2019/09/23 | 2608 | fonts/newtx/vf/ntxmi.vf
+2019/09/23 | 2600 | fonts/newtx/vf/ntxmi1.vf
+2019/09/23 | 2600 | fonts/newtx/vf/ntxmi0.vf
2019/09/23 | 259184 | language/japanese/jlreq/jlreq.cls
+2019/09/23 | 2588 | fonts/newtx/vf/ntxmi17.vf
+2019/09/23 | 2588 | fonts/newtx/vf/ntxmi15.vf
+2019/09/23 | 2584 | fonts/newtx/vf/ntxmi07.vf
+2019/09/23 | 2584 | fonts/newtx/vf/ntxmi05.vf
+2019/09/23 | 2576 | fonts/newtx/vf/ntxmi7.vf
+2019/09/23 | 2576 | fonts/newtx/vf/ntxmi5.vf
+2019/09/23 | 2564 | fonts/newtx/tfm/nxlbmi02.tfm
2019/09/23 | 25207 | macros/latex/contrib/lwarp/lwarp.ins
+2019/09/23 | 2508 | fonts/newtx/tfm/nxlbmia.tfm
2019/09/23 | 2488031 | macros/latex/contrib/lwarp/lwarp.pdf
+2019/09/23 | 2472 | fonts/newtx/tfm/ntxmia.tfm
+2019/09/23 | 2456 | fonts/newtx/tfm/nxlmia.tfm
2019/09/23 | 2449008 | systems/win32/w32tex/tex4htk-w32.tar.xz
+2019/09/23 | 2412 | fonts/newtx/tfm/ntxbmia.tfm
2019/09/23 | 2409 | macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-TexinfoXML.texi
2019/09/23 | 2385 | macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Plaintext.texi
2019/09/23 | 2364996 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
@@ -1883,7 +3228,6 @@
2019/09/23 | 229080 | systems/texlive/tlnet/archive/scontents.doc.tar.xz
2019/09/23 | 2265 | macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Info.texi
2019/09/23 | 2244 | macros/texinfo/texinfo/tp/Texinfo/Convert/IXINSXML.pm
-2019/09/23 | 2221 | macros/latex/contrib/perltex/README
2019/09/23 | 22139752 | systems/win32/w32tex/cjkzr.tar.xz
2019/09/23 | 21197 | macros/latex/contrib/pythontex/pythontex_install.py
2019/09/23 | 20751 | macros/latex/contrib/pythontex/pythontex_utils.py
@@ -1891,10 +3235,16 @@
2019/09/23 | 2008 | macros/luatex/latex/plantuml/CHANGELOG.md
2019/09/23 | 1995 | macros/latex/contrib/acro/example_one.tex
2019/09/23 | 19934 | macros/texinfo/texinfo/tp/Texinfo/Convert/Info.pm
+2019/09/23 | 1968 | fonts/newtx/vf/nxlmia.vf
2019/09/23 | 19220 | systems/texlive/tlnet/archive/scontents.source.tar.xz
+2019/09/23 | 1904 | fonts/newtx/vf/nxlbmia.vf
+2019/09/23 | 1900 | fonts/newtx/tfm/ntxbmi05.tfm
+2019/09/23 | 1868 | fonts/newtx/vf/ntxmia.vf
+2019/09/23 | 1828 | fonts/newtx/vf/ntxbmi05.vf
2019/09/23 | 18176 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2019/09/23 | 181612 | macros/latex/contrib/pythontex/pythontex_quickstart.pdf
2019/09/23 | 18031 | macros/texinfo/texinfo/tp/Texinfo/XS/XSParagraph.c
+2019/09/23 | 1780 | fonts/newtx/vf/ntxbmia.vf
2019/09/23 | 17773 | macros/texinfo/texinfo/tp/Texinfo/Report.pm
2019/09/23 | 177736 | macros/texinfo/texinfo/ChangeLog
2019/09/23 | 17234 | macros/texinfo/texinfo/tp/Texinfo/Convert/ParagraphNonXS.pm
@@ -1902,6 +3252,7 @@
2019/09/23 | 1704 | systems/texlive/tlnet/archive/bxghost.doc.tar.xz
2019/09/23 | 1644 | macros/latex/contrib/keyfloat/keyfloat.ins
2019/09/23 | 1623 | macros/latex/contrib/lwarp/README.txt
+2019/09/23 | 1620 | fonts/newtx/vf/nxlbmi02.vf
2019/09/23 | 16130 | macros/texinfo/texinfo/texindex/texindex.awk
2019/09/23 | 1606 | macros/texinfo/texinfo/tp/Texinfo/Convert/PlainTexinfo.pm
2019/09/23 | 16054 | macros/texinfo/texinfo/configure.ac
@@ -1922,13 +3273,11 @@
2019/09/23 | 131772 | macros/texinfo/texinfo/tp/Texinfo/Convert/Plaintext.pm
2019/09/23 | 13128 | macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Structuring.texi
2019/09/23 | 1295 | macros/latex/contrib/acro/README
-2019/09/23 | 12834004 | systems/win32/w32tex/pdftex-w32.tar.xz
2019/09/23 | 127702 | macros/texinfo/texinfo/gnulib/lib/Makefile.in
2019/09/23 | 1246 | macros/texinfo/texinfo/util/texi2pdf
2019/09/23 | 1246 | macros/texinfo/texinfo/util/pdftexi2dvi
2019/09/23 | 1246 | macros/texinfo/texinfo/man/texindex.1
2019/09/23 | 1213 | macros/texinfo/texinfo/tp/Texinfo/Convert/UnFilled.pm
-2019/09/23 | 120627 | macros/latex/contrib/perltex/perltex.dtx
2019/09/23 | 115749 | language/japanese/jlreq/jlreq.pdf
2019/09/23 | 11565 | macros/texinfo/texinfo/doc/tp_api/tp_api.texi
2019/09/23 | 11485 | macros/texinfo/texinfo/tp/Texinfo/Convert/NodeNameNormalization.pm
@@ -1940,112 +3289,3 @@
2019/09/23 | 10567 | macros/latex/contrib/pythontex/pythontex_quickstart.tex
2019/09/23 | 1036937 | macros/latex/contrib/keyfloat/keyfloat.pdf
2019/09/23 | 10321 | macros/texinfo/texinfo/tp/Texinfo/XS/parsetexi/Parsetexi.pm
-2019/09/23 | 10119 | macros/latex/contrib/perltex/perltex.1
-2019/09/22 | 969272 | systems/texlive/tlnet/archive/nicematrix.doc.tar.xz
-2019/09/22 | 92038 | language/japanese/uptex-base/samples/adobe-gb-utf8.tex
-2019/09/22 | 9191536 | systems/texlive/tlnet/archive/xetex.win32.tar.xz
-2019/09/22 | 9132 | language/japanese/uptex-base/samples/bkmk-utf8.tex
-2019/09/22 | 886 | language/japanese/uptex-base/00readme_uptex.txt
-2019/09/22 | 870 | language/japanese/uptex-base/samples/texxet-jis.tex
-2019/09/22 | 8678 | language/japanese/uptex-base/ukinsoku.tex
-2019/09/22 | 813 | language/japanese/uptex-base/samples/console_io.tex
-2019/09/22 | 79672 | systems/texlive/tlnet/archive/xfakebold.doc.tar.xz
-2019/09/22 | 78324 | macros/latex/contrib/scontents/scontents.dtx
-2019/09/22 | 74011 | language/japanese/uptex-base/samples/adobe-cns-utf8.tex
-2019/09/22 | 73 | language/japanese/uptex-base/euptex.ini
-2019/09/22 | 721 | language/japanese/uptex-base/Makefile
-2019/09/22 | 6884 | systems/texlive/tlnet/archive/derivative.tar.xz
-2019/09/22 | 6784 | language/japanese/uptex-base/samples/aozora-ujreport-utf8.tex
-2019/09/22 | 6782 | language/japanese/uptex-base/samples/aozora-ujbook-utf8.tex
-2019/09/22 | 6748 | language/japanese/uptex-base/samples/aozora-ujarticle-utf8.tex
-2019/09/22 | 6704 | language/japanese/uptex-base/samples/aozora-utreport-utf8.tex
-2019/09/22 | 6702 | language/japanese/uptex-base/samples/aozora-utbook-utf8.tex
-2019/09/22 | 6677 | language/japanese/uptex-base/samples/set3-check-h-utf8.tex
-2019/09/22 | 6668 | language/japanese/uptex-base/samples/aozora-utf8.tex
-2019/09/22 | 6668 | language/japanese/uptex-base/samples/aozora-utarticle-utf8.tex
-2019/09/22 | 61 | language/japanese/uptex-base/uptex.ini
-2019/09/22 | 6192 | systems/texlive/tlnet/archive/filecontents.source.tar.xz
-2019/09/22 | 6115 | language/japanese/uptex-base/samples/bkmk-jis.tex
-2019/09/22 | 6108 | language/japanese/uptex-base/samples/jbib2-utf8.tex
-2019/09/22 | 563 | language/japanese/uptex-base/samples/area-uptex.mp
-2019/09/22 | 5420 | language/japanese/uptex-base/samples/jbib1-jis.tex
-2019/09/22 | 53462 | language/japanese/uptex-base/samples/adobe-kr-utf8.tex
-2019/09/22 | 52852 | systems/texlive/tlnet/archive/ctanbib.doc.tar.xz
-2019/09/22 | 5212 | language/japanese/uptex-base/samples/otfsmpl-uplatex.tex
-2019/09/22 | 48661 | language/japanese/uptex-base/samples/adobe-jp-utf8.tex
-2019/09/22 | 481109 | fonts/almendra.zip
-2019/09/22 | 4791 | language/japanese/uptex-base/samples/sangoku-uplatex.tex
-2019/09/22 | 475 | language/japanese/uptex-base/samples/area-jis.mp
-2019/09/22 | 471 | language/japanese/uptex-base/samples/area-utf8.mp
-2019/09/22 | 463724 | systems/texlive/tlnet/archive/xindex.doc.tar.xz
-2019/09/22 | 458 | language/japanese/uptex-base/samples/area-sjis.mp
-2019/09/22 | 457 | language/japanese/uptex-base/samples/area-euc.mp
-2019/09/22 | 446 | language/japanese/uptex-base/README.md
-2019/09/22 | 42564 | systems/texlive/tlnet/archive/nicematrix.source.tar.xz
-2019/09/22 | 4089 | language/japanese/uptex-base/samples/sangoku-uptex.tex
-2019/09/22 | 3751 | language/japanese/uptex-base/samples/testrun.bat
-2019/09/22 | 372 | language/japanese/uptex-base/samples/box-utf8.eps
-2019/09/22 | 3632 | language/japanese/uptex-base/samples/utfsmpl-uplatex.tex
-2019/09/22 | 355 | language/japanese/uptex-base/samples/box-sjis.eps
-2019/09/22 | 3557 | language/japanese/uptex-base/samples/jbtest.bib
-2019/09/22 | 350 | language/japanese/uptex-base/samples/box-euc.eps
-2019/09/22 | 3417 | language/japanese/uptex-base/samples/adobe-cid.tex
-2019/09/22 | 339 | language/japanese/uptex-base/samples/box-jis.eps
-2019/09/22 | 336320 | language/japanese/uptex-base.zip
-2019/09/22 | 33279 | language/japanese/uptex-base/01uptex_doc_utf8.txt
-2019/09/22 | 32230 | language/japanese/uptex-base/02uptex_changelog_utf8.txt
-2019/09/22 | 320 | language/japanese/uptex-base/samples/bkmk-docinfo.txt
-2019/09/22 | 31 | language/japanese/uptex-base/samples/iotext.txt
-2019/09/22 | 3158 | language/japanese/uptex-base/samples/simple-u-utf8.tex
-2019/09/22 | 3157 | language/japanese/uptex-base/samples/greek-uplatex.tex
-2019/09/22 | 29428 | systems/texlive/tlnet/archive/xindex.tar.xz
-2019/09/22 | 2913 | language/japanese/BX/bxghost.zip
-2019/09/22 | 2764 | language/japanese/uptex-base/samples/kinsoku-chk-utf8.tex
-2019/09/22 | 2746 | language/japanese/uptex-base/samples/widow.tex
-2019/09/22 | 2735 | language/japanese/uptex-base/samples/simple-utf8.tex
-2019/09/22 | 2689 | language/japanese/uptex-base/samples/simple-jis.tex
-2019/09/22 | 26548 | language/japanese/uptex-base/euptex.src
-2019/09/22 | 2613 | language/japanese/uptex-base/samples/simple-u-jis.tex
-2019/09/22 | 2588 | systems/texlive/tlnet/archive/ctanbib.tar.xz
-2019/09/22 | 2500 | language/japanese/uptex-base/samples/simple-sjis.tex
-2019/09/22 | 2493 | language/japanese/uptex-base/samples/simple-euc.tex
-2019/09/22 | 248331 | macros/latex/contrib/scontents.zip
-2019/09/22 | 244760 | macros/latex/contrib/scontents/scontents.pdf
-2019/09/22 | 237 | language/japanese/uptex-base/samples/jstr-uptex.mp
-2019/09/22 | 2367 | language/japanese/uptex-base/samples/00readme_uptex_samples.txt
-2019/09/22 | 234 | language/japanese/uptex-base/samples/jstr-utf8.mp
-2019/09/22 | 227 | language/japanese/uptex-base/samples/jstr-jis.mp
-2019/09/22 | 221 | language/japanese/uptex-base/samples/jstr-sjis.mp
-2019/09/22 | 221 | language/japanese/uptex-base/samples/jstr-euc.mp
-2019/09/22 | 2145 | language/japanese/uptex-base/README_uptex.txt
-2019/09/22 | 2056 | systems/texlive/tlnet/archive/filecontents.tar.xz
-2019/09/22 | 2024 | language/japanese/uptex-base/samples/yaku-jsc-utf8.tex
-2019/09/22 | 196956 | systems/texlive/tlnet/archive/derivative.doc.tar.xz
-2019/09/22 | 1810 | language/japanese/uptex-base/uptex.tex
-2019/09/22 | 1611 | language/japanese/uptex-base/samples/linebreak.bib
-2019/09/22 | 1601 | language/japanese/uptex-base/samples/yaku-jsc-jis.tex
-2019/09/22 | 1591 | language/japanese/uptex-base/LICENSE
-2019/09/22 | 15686 | language/japanese/uptex-base/samples/Makefile
-2019/09/22 | 1419 | language/japanese/uptex-base/samples/check_enc.pl
-2019/09/22 | 13795 | language/japanese/uptex-base/samples/punctuation.tex
-2019/09/22 | 136 | language/japanese/uptex-base/samples/jstr-uptex-incl.tex
-2019/09/22 | 136 | language/japanese/uptex-base/samples/area-uptex-incl.tex
-2019/09/22 | 134 | language/japanese/uptex-base/samples/jstr-utf8-incl.tex
-2019/09/22 | 134 | language/japanese/uptex-base/samples/jstr-sjis-incl.tex
-2019/09/22 | 134 | language/japanese/uptex-base/samples/area-utf8-incl.tex
-2019/09/22 | 134 | language/japanese/uptex-base/samples/area-sjis-incl.tex
-2019/09/22 | 133 | language/japanese/uptex-base/samples/jstr-jis-incl.tex
-2019/09/22 | 133 | language/japanese/uptex-base/samples/jstr-euc-incl.tex
-2019/09/22 | 133 | language/japanese/uptex-base/samples/area-jis-incl.tex
-2019/09/22 | 133 | language/japanese/uptex-base/samples/area-euc-incl.tex
-2019/09/22 | 1316 | systems/texlive/tlnet/archive/xfakebold.tar.xz
-2019/09/22 | 13007 | language/japanese/uptex-base/samples/cjk_babel.tex
-2019/09/22 | 12837 | language/japanese/uptex-base/samples/show_kcat.tex
-2019/09/22 | 122336 | systems/texlive/tlnet/archive/filecontents.doc.tar.xz
-2019/09/22 | 11868 | systems/texlive/tlnet/archive/nicematrix.tar.xz
-2019/09/22 | 1184 | language/japanese/uptex-base/samples/umin10x.tfm
-2019/09/22 | 1184 | language/japanese/uptex-base/samples/min10x.tfm
-2019/09/22 | 11616 | language/japanese/uptex-base/samples/jis_uni_variation.tex
-2019/09/22 | 1132 | macros/latex/contrib/scontents/README.md
-2019/09/22 | 11271 | language/japanese/uptex-base/samples/misc-check-h-utf8.tex
-2019/09/22 | 10491 | language/japanese/uptex-base/samples/misc-check-v-utf8.tex
diff --git a/fonts/amiri/Amiri-Bold.ttf b/fonts/amiri/Amiri-Bold.ttf
new file mode 100644
index 0000000000..f3751f1531
--- /dev/null
+++ b/fonts/amiri/Amiri-Bold.ttf
Binary files differ
diff --git a/fonts/amiri/Amiri-BoldSlanted.ttf b/fonts/amiri/Amiri-BoldSlanted.ttf
new file mode 100644
index 0000000000..b772ce48da
--- /dev/null
+++ b/fonts/amiri/Amiri-BoldSlanted.ttf
Binary files differ
diff --git a/fonts/amiri/Amiri-Regular.ttf b/fonts/amiri/Amiri-Regular.ttf
new file mode 100644
index 0000000000..d516fe6a06
--- /dev/null
+++ b/fonts/amiri/Amiri-Regular.ttf
Binary files differ
diff --git a/fonts/amiri/Amiri-Slanted.ttf b/fonts/amiri/Amiri-Slanted.ttf
new file mode 100644
index 0000000000..ef887e1b14
--- /dev/null
+++ b/fonts/amiri/Amiri-Slanted.ttf
Binary files differ
diff --git a/fonts/amiri/Amiri.fontspec b/fonts/amiri/Amiri.fontspec
new file mode 100644
index 0000000000..362e35e5a0
--- /dev/null
+++ b/fonts/amiri/Amiri.fontspec
@@ -0,0 +1,7 @@
+\defaultfontfeatures[Amiri]{
+ Extension=.ttf,
+ UprightFont=*-Regular,
+ ItalicFont=*-Slanted,
+ BoldFont=*-Bold,
+ BoldItalicFont=*-BoldSlanted,
+}
diff --git a/fonts/amiri/AmiriQuran.ttf b/fonts/amiri/AmiriQuran.ttf
new file mode 100644
index 0000000000..8899d6a412
--- /dev/null
+++ b/fonts/amiri/AmiriQuran.ttf
Binary files differ
diff --git a/fonts/amiri/AmiriQuranColored.ttf b/fonts/amiri/AmiriQuranColored.ttf
new file mode 100644
index 0000000000..60a03dc5fe
--- /dev/null
+++ b/fonts/amiri/AmiriQuranColored.ttf
Binary files differ
diff --git a/fonts/amiri/Documentation-Arabic.pdf b/fonts/amiri/Documentation-Arabic.pdf
new file mode 100644
index 0000000000..4fc3ab3e25
--- /dev/null
+++ b/fonts/amiri/Documentation-Arabic.pdf
Binary files differ
diff --git a/fonts/amiri/NEWS b/fonts/amiri/NEWS
index 5ccd53eab5..22e405d250 100644
--- a/fonts/amiri/NEWS
+++ b/fonts/amiri/NEWS
@@ -1,3 +1,53 @@
+Amiri 0.112 (2019-09-29)
+------------------------
+
+* Fix dot below (U+065C) and make it rounded not rectangular.
+* Add an Amiri.fontspec file for use with LaTeX fontspec package (#139).
+* Make the build reproducible.
+* Fix some misplaced Latin accents.
+* Add alternate comma and semicolon for Sindhi and Malay, and can be enabled
+ with “ss08” feature as well (#145).
+* Fix Rohingya tones positioning a bit (#155).
+* Don’t make rounded guillemots the default as they are meant to be only for
+ Arabic.
+* Make narrow no break space as wide as thin space (#177).
+* Fix handling of several Quranic small letters to follow latest Unicode
+ recommendations.
+
+Amiri 0.111 (2017-12-30)
+------------------------
+
+* Drop TTF files from the web fonts archive, WOFF and WOFF2 should be all one
+ needs now.
+* Cosmetic changes to the CSS snippet.
+* Fix kerning of the new Kaf glyphs introduced in the previous release.
+* Add a font table document for the Quran font since it has different character
+ coverage.
+* Removed the `ccmp` feature composing decomposed Latin base/accent
+ combinations supported by the font. HarfBuzz does this in a bit smarter way,
+ users of other engines can apply Unicode normalization to the input text if
+ this is needed.
+* Fix wrong glyph class for U+0674 ARABIC LETTER HIGH HAMZA, causing it to be
+ incorrectly treated as a zero width mark:
+ https://github.com/alif-type/amiri/issues/138.
+* Drop localized Arabic names from the font (like style names), their support
+ in application is spotty, also it is a bit Ugly to have the font presented
+ with mixed language name, e.g. “Amiri عادي”, in some applications under
+ Arabic locales.
+* Allow Kashida around floating Hamza:
+ https://github.com/alif-type/amiri/issues/137
+* Colorize Hamza above mark in colored Quran font:
+ https://github.com/alif-type/amiri/issues/136
+* Change the shape of Damma used in U+06C7 & U+0677:
+ https://github.com/alif-type/amiri/issues/123
+* Other smaller fixes.
+* OpenType layout tables are now compiled with FontTool’s feaLib instead of my
+ FontForge fork. This is an attempt to make building the fonts from source
+ simpler for others and more predictable.
+* The font can now be built with Python 3, by calling `make PY2=python3`.
+* The font can be also built with upstream FontForge now, though the result
+ might be slightly different from the pre-built fonts.
+
Amiri 0.110 (2017-12-20)
------------------------
* New Glyphs
diff --git a/fonts/amiri/NEWS-Arabic b/fonts/amiri/NEWS-Arabic
index 5a556ba483..76dfe47b7c 100644
--- a/fonts/amiri/NEWS-Arabic
+++ b/fonts/amiri/NEWS-Arabic
@@ -1,3 +1,28 @@
+أميري ٠٫١١٢ (٢٠١٩-٠٩-٢٩)
+------------------------
+* إصلاح علامة النقطة التحتية لتكون مستديرة لا مربعة.
+* إضافة ملف Amiri.fontspec ليستحدم مع حزمة fontspec للاتخ (#139).
+* إضافة فاصلة وفاصلة منقوطة بديلة للسندية والجاوية، ويمكنتفعيلها أيضا بخاصية
+ “ss08” (#145).
+* إصلاح تموضع بعض علامات تشكيل الروهينجا (#155).
+* جعل المسافة الضيقة غير الفاصلة مساوية في العرض للمسافة الرفيعة (#177).
+* إصلاح الحروف القرآنية الصغيرة لتوافق معايير يونيكود الحديثة.
+
+أميري ٠٫١١١ (٢٠١٧-١٢-٣٠)
+------------------------
+* تحسين اقتران الكافات التي أضيفت في الإصدارة السابقة.
+* إصلاح خطأ يجعل جرف الهمزة العالية (U+0674) يقترن بالهرف السابق عليه:
+ https://github.com/alif-type/amiri/issues/138.
+* إزالة الأسماء العربية الداخلية للخط، لتفادي ازدواجية اللغة في اسم الخط في بعض
+ التطبيقات عندما يكون النظام باللغة العربية، مثل ”Amiri عادي“.
+* السماح بأن تسبق أو تلحق همزة وسط الكلمة بالكشيدة:
+ https://github.com/alif-type/amiri/issues/137
+* تلوين علامة الهمزة المنفصلة في الخط القرآني الملون:
+ https://github.com/alif-type/amiri/issues/136
+* تغيير شكل الضمة في حرفي U+06C7 و U+0677:
+ https://github.com/alif-type/amiri/issues/123
+* تغييرات شغيرة أخرى، و تغييرات على نظام بناء الخط من المصدر.
+
أميري ٠٫١١٠ (٢٠١٧-١٢-٢٠)
-----------------------
* محارف جديدة:
diff --git a/fonts/amiri/README b/fonts/amiri/README
index c8fbceed9d..ed2c3595b2 100644
--- a/fonts/amiri/README
+++ b/fonts/amiri/README
@@ -1,3 +1,5 @@
+[![Build Status](https://travis-ci.org/alif-type/amiri.svg?branch=master)](https://travis-ci.org/alif-type/amiri)
+
Amiri Font
==========
@@ -26,5 +28,64 @@ Latest version of the Amiri font can be optained from its web site:
> http://amirifont.org
+Contributing
+------------
+
+To edit the font sources, you will need FontForge, preferably the latest
+version. To install FontForge on Debian and Ubuntu:
+
+ $ sudo apt-get install fontforge
+
+You can then open the source files in FontForge and start editing, either from
+GUI or from the command line:
+
+ $ fontforge sources/Amiri-Regular.sfdir
+
+To build the fonts you need FontForge Python module, gpp and FontTools:
+
+ $ sudo apt-get install python-fontforge gpp
+ $ python -m venv amiri --system-site-packages
+ $ . amiri/bin/activate
+ $ pip install fonttools brotli
+
+To build the font files run:
+
+ $ make ttf
+
+To build the font files along with the web files; run:
+
+ $ make web
+
+Ubuntu 16.04 Contributors
+-------------------------
+
+You might face an error with importing fontforge
+
+ File "tools/build.py", line 18, in <module>
+ import fontforge
+ ImportError: No module named fontforge
+
+This is because fontforge does not work properly with Python 3 on Ubuntu 16.04.
+To build the fonts with Python version 2.7 ; install FontForge Python
+module by following the instructions from the [official documentation][3]. But
+make sure to enable python extension and scripting for Python 2. Use the following
+commands instead of the original in the last step of the installation:
+
+ $ cd fontforge
+ $ ./bootstrap
+ $ ./configure --enable-python-extension --enable-python-scripting=2
+ $ make
+ $ sudo make install
+ $ sudo ldconfig
+
+After that, return back to the directory of the amiri repository and continue
+with python-fontforge, gpp, and the virtual environment
+
+ $ sudo apt-get install python-fontforge gpp
+ $ virtualenv amiri --system-site-packages
+ $ . amiri/bin/activate
+ $ pip install fonttools brotli
+
[1]: http://www.bibalex.org/bulaqpress/en/bulaq.htm "The Bulaq Press"
[2]: http://scripts.sil.org/OFL "The Open Font License"
+[3]: https://github.com/fontforge/fontforge/blob/master/INSTALL-git.md "FontForge official documentation" \ No newline at end of file
diff --git a/fonts/amiri/amiri-bold.ttf b/fonts/amiri/amiri-bold.ttf
deleted file mode 100644
index 85f7c39c99..0000000000
--- a/fonts/amiri/amiri-bold.ttf
+++ /dev/null
Binary files differ
diff --git a/fonts/amiri/amiri-boldslanted.ttf b/fonts/amiri/amiri-boldslanted.ttf
deleted file mode 100644
index 96642d2487..0000000000
--- a/fonts/amiri/amiri-boldslanted.ttf
+++ /dev/null
Binary files differ
diff --git a/fonts/amiri/amiri-quran-colored.ttf b/fonts/amiri/amiri-quran-colored.ttf
deleted file mode 100644
index 850bb7f48c..0000000000
--- a/fonts/amiri/amiri-quran-colored.ttf
+++ /dev/null
Binary files differ
diff --git a/fonts/amiri/amiri-quran.ttf b/fonts/amiri/amiri-quran.ttf
deleted file mode 100644
index f164804138..0000000000
--- a/fonts/amiri/amiri-quran.ttf
+++ /dev/null
Binary files differ
diff --git a/fonts/amiri/amiri-regular.ttf b/fonts/amiri/amiri-regular.ttf
deleted file mode 100644
index a71b358cde..0000000000
--- a/fonts/amiri/amiri-regular.ttf
+++ /dev/null
Binary files differ
diff --git a/fonts/amiri/amiri-slanted.ttf b/fonts/amiri/amiri-slanted.ttf
deleted file mode 100644
index b6ae65d388..0000000000
--- a/fonts/amiri/amiri-slanted.ttf
+++ /dev/null
Binary files differ
diff --git a/fonts/amiri/amiri-table.pdf b/fonts/amiri/amiri-table.pdf
deleted file mode 100644
index b6bab412a0..0000000000
--- a/fonts/amiri/amiri-table.pdf
+++ /dev/null
Binary files differ
diff --git a/fonts/amiri/documentation-arabic.pdf b/fonts/amiri/documentation-arabic.pdf
deleted file mode 100644
index c6f814b9f0..0000000000
--- a/fonts/amiri/documentation-arabic.pdf
+++ /dev/null
Binary files differ
diff --git a/fonts/newpx/README b/fonts/newpx/README
index 0c30cb25c1..e6569e34cd 100644
--- a/fonts/newpx/README
+++ b/fonts/newpx/README
@@ -1,10 +1,23 @@
This package, based initially on pxfonts, provides many fixes and enhancements to that package, splitting it in two parts---newpxtext and newpxmath---which may be run independently of one another. It provides scaling, improved metrics, and other options. For proper operation, the packages require that the packages newtxmath, pxfonts and TeXGyrePagella be installed and their map files enabled. The text package now relies on an extension of the TeXGyrePagella Type1 fonts that is provided with this package. The accompanying MANIFEST-newpx.txt provides details of the extension as requested by GUST-FONT-LICENSE.txt
-Current version: 1.33 2018-12-16
+Current version: 1.40 2019-09-27
This material is subject to the LaTeX Project Public License. See http://www.ctan.org/license/lppl1.3
for the details of that license.
+Changes in version 1.40
+1. Reworked the math italics to improve the rendering of some subscripts and superscripts, where formerly, overlaps could occur with superscripts like j, f, p and y with base shapes, such as D, that are round on the right. Increasing the left side-bearing of j, etc, helps with superscripts but makes those letters leave a large gap when used as subscripts.
+2. Corrected and enhanced the subscriptcorrection option to newpxmath so that it now fixes the above problem. I regret that this option is incompatible with xy-pic, both depending on making _ an active character but with very different behaviors. Newpxmath will detect if xy is loaded and disable subscriptcorrection if so.
+3. Added new script alphabets to math italics by extending the encoding from oml to full 256 slots, so they can be used without wasting math families.
+4. Rearranged npxmia and zplsy. The user should not notice this, unless I have erred somewhere.
+5. Provided an adaptive vector accent which matches the normal vector accent but extends as needed over its accentee. I've followed the usage of the esvect package, but changed its implementation.
+6. Many small corrections to spacing and accent positioning.
+7. Revised the superior letters fonts so they have appropriate unicode values.
+8. As a result of these changes, documents generated using newpxmath and appropriate settings will validate PDF/A-1b. (Thanks to Ross Moore for providing the necessary files and details on this.) See the updated documentation to newpx for details.
+9. Fixed error in lmxnpxexx.fd re fontdimens. (Thanks Ruixi Zhang.)
+10. Added option fracspacing that modifies fontdimens 8 and 11 of the symbol font to values more appropriate to the newpx fonts. (Thanks Ruixi Zhang.)
+11. Corrected AMS replacement font npxsym to fix \dalath, \mathbb{k}, \circledR and \circledS.
+
Changes in version 1.33
Modified newpxmath.sty to correct the macros involving selection of Blackboard Bold alphabets.
diff --git a/fonts/newpx/afm/NewPXBMI.afm b/fonts/newpx/afm/NewPXBMI.afm
new file mode 100644
index 0000000000..a071348bf7
--- /dev/null
+++ b/fonts/newpx/afm/NewPXBMI.afm
@@ -0,0 +1,123 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 5 13:57:58 2019
+FontName NewPXBMI
+FullName NewPX Bold Math Italic
+FamilyName NewPXMath
+Weight Regular
+Notice (Based on TeXGyrePagella)
+Comment Modifications Copyright (c) 2017-2019, Michael Sharpe
+Comment Licensed under LPPL
+ItalicAngle -10
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -130 -271 1073 877
+StartCharMetrics 103
+C 0 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 1 ; WX 333 ; N u1D6A4.bit ; B 26 -17 293 469 ;
+C 2 ; WX 333 ; N u1D6A5.bit ; B -64 -271 274 469 ;
+C 3 ; WX 667 ; N uni01B5 ; B 24 -3 627 681 ;
+C 5 ; WX 333 ; N gravecomb ; B 17 506 255 691 ;
+C 6 ; WX 333 ; N acutecomb ; B 78 506 316 691 ;
+C 7 ; WX 333 ; N uni0302 ; B -2 512 335 687 ;
+C 8 ; WX 333 ; N tildecomb ; B -16 536 349 662 ;
+C 9 ; WX 333 ; N uni0304 ; B 1 564 332 635 ;
+C 10 ; WX 333 ; N uni0306 ; B 15 518 318 681 ;
+C 11 ; WX 333 ; N uni0307 ; B 100 532 234 666 ;
+C 12 ; WX 333 ; N uni0308 ; B -8 532 341 666 ;
+C 13 ; WX 333 ; N uni030A ; B 67 499 267 699 ;
+C 14 ; WX 333 ; N uni030C ; B -2 512 335 687 ;
+C 16 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 17 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 18 ; WX 504 ; N uni2107 ; B 33 -17 482 660 ;
+C 19 ; WX 449 ; N uni2113 ; B 19 -15 462 713 ;
+C 20 ; WX 766 ; N uni2126 ; B 13 0 754 731 ;
+C 21 ; WX 766 ; N uni2127 ; B 12 -49 753 682 ;
+C 22 ; WX 778 ; N uni212B ; B 24 -3 757 877 ;
+C 66 ; WX 644 ; N uni210F ; B 112 -17 612 726 ;
+C 67 ; WX 644 ; N uni210F.alt ; B 112 -17 612 726 ;
+C 71 ; WX 722 ; N u1D468 ; B -35 -3 685 683 ;
+C 72 ; WX 667 ; N u1D469 ; B 8 -4 629 682 ;
+C 73 ; WX 685 ; N u1D46A ; B 69 -17 695 695 ;
+C 74 ; WX 778 ; N u1D46B ; B 0 -4 747 682 ;
+C 75 ; WX 611 ; N u1D46C ; B 11 -3 606 681 ;
+C 76 ; WX 556 ; N u1D46D ; B -6 -3 593 681 ;
+C 77 ; WX 778 ; N u1D46E ; B 72 -17 750 695 ;
+C 78 ; WX 778 ; N u1D46F ; B -12 -3 826 681 ;
+C 79 ; WX 389 ; N u1D470 ; B -1 -3 412 681 ;
+C 80 ; WX 389 ; N u1D471 ; B -29 -207 417 681 ;
+C 81 ; WX 722 ; N u1D472 ; B -10 -3 746 681 ;
+C 82 ; WX 611 ; N u1D473 ; B 26 -3 578 681 ;
+C 83 ; WX 944 ; N u1D474 ; B -23 -17 985 681 ;
+C 84 ; WX 778 ; N u1D475 ; B -2 -3 829 681 ;
+C 85 ; WX 833 ; N u1D476 ; B 76 -17 794 695 ;
+C 86 ; WX 667 ; N u1D477 ; B 11 -3 673 681 ;
+C 87 ; WX 833 ; N u1D478 ; B 76 -222 794 695 ;
+C 88 ; WX 722 ; N u1D479 ; B 4 -3 697 681 ;
+C 89 ; WX 556 ; N u1D47A ; B 50 -17 517 695 ;
+C 90 ; WX 611 ; N u1D47B ; B 56 -3 674 681 ;
+C 91 ; WX 778 ; N u1D47C ; B 83 -17 825 681 ;
+C 92 ; WX 667 ; N u1D47D ; B 67 -3 745 681 ;
+C 93 ; WX 1000 ; N u1D47E ; B 67 -3 1073 689 ;
+C 94 ; WX 722 ; N u1D47F ; B -9 -3 772 681 ;
+C 95 ; WX 611 ; N u1D480 ; B 54 -3 675 695 ;
+C 96 ; WX 667 ; N u1D481 ; B 1 -3 676 681 ;
+C 97 ; WX 556 ; N u1D482 ; B 44 -17 519 470 ;
+C 98 ; WX 537 ; N u1D483 ; B 44 -17 494 726 ;
+C 99 ; WX 444 ; N u1D484 ; B 32 -17 436 469 ;
+C 100 ; WX 556 ; N u1D485 ; B 38 -17 550 726 ;
+C 101 ; WX 444 ; N u1D486 ; B 28 -17 418 469 ;
+C 102 ; WX 333 ; N u1D487 ; B -130 -271 449 726 ;
+C 103 ; WX 500 ; N u1D488 ; B -50 -271 529 469 ;
+C 104 ; WX 556 ; N u1D489 ; B 22 -17 522 726 ;
+C 105 ; WX 333 ; N u1D48A ; B 26 -17 301 675 ;
+C 106 ; WX 333 ; N u1D48B ; B -64 -271 311 675 ;
+C 107 ; WX 556 ; N u1D48C ; B 34 -17 528 726 ;
+C 108 ; WX 333 ; N u1D48D ; B 64 -17 318 726 ;
+C 109 ; WX 833 ; N u1D48E ; B 19 -17 803 469 ;
+C 110 ; WX 556 ; N u1D48F ; B 17 -17 521 469 ;
+C 111 ; WX 556 ; N u1D490 ; B 48 -17 502 469 ;
+C 112 ; WX 556 ; N u1D491 ; B -21 -271 516 469 ;
+C 113 ; WX 537 ; N u1D492 ; B 32 -271 513 469 ;
+C 114 ; WX 389 ; N u1D493 ; B 20 -17 411 469 ;
+C 115 ; WX 444 ; N u1D494 ; B 25 -17 406 469 ;
+C 116 ; WX 389 ; N u1D495 ; B 42 -17 409 636 ;
+C 117 ; WX 556 ; N u1D496 ; B 22 -17 521 469 ;
+C 118 ; WX 556 ; N u1D497 ; B 19 -17 513 469 ;
+C 119 ; WX 833 ; N u1D498 ; B 27 -17 802 469 ;
+C 120 ; WX 500 ; N u1D499 ; B -8 -17 500 469 ;
+C 121 ; WX 556 ; N u1D49A ; B 13 -271 541 469 ;
+C 122 ; WX 500 ; N u1D49B ; B 31 -17 470 469 ;
+C 123 ; WX 421 ; N u1D497.alt ; B 15 -9 392 462 ;
+C 124 ; WX 649 ; N u1D498.alt ; B 15 -9 620 462 ;
+C 125 ; WX 526 ; N u1D742.alt ; B 33 -11 500 445 ;
+C 126 ; WX 537 ; N u1D49A.alt ; B -12 -207 508 462 ;
+C 127 ; WX 500 ; N zero.oldstyle ; B 24 -13 476 544 ;
+C 128 ; WX 500 ; N one.oldstyle ; B 65 0 442 544 ;
+C 129 ; WX 500 ; N two.oldstyle ; B 17 0 478 554 ;
+C 130 ; WX 500 ; N three.oldstyle ; B 16 -158 468 544 ;
+C 131 ; WX 500 ; N four.oldstyle ; B 19 -144 475 544 ;
+C 132 ; WX 500 ; N five.oldstyle ; B 22 -152 470 532 ;
+C 133 ; WX 500 ; N six.oldstyle ; B 28 -13 475 688 ;
+C 134 ; WX 500 ; N seven.oldstyle ; B 17 -144 477 532 ;
+C 135 ; WX 500 ; N eight.oldstyle ; B 28 -13 472 688 ;
+C 136 ; WX 500 ; N nine.oldstyle ; B 26 -157 473 544 ;
+C 137 ; WX 532 ; N zero ; B 40 -14 492 676 ;
+C 138 ; WX 323 ; N one ; B 20 0 303 676 ;
+C 139 ; WX 525 ; N two ; B 40 0 485 676 ;
+C 140 ; WX 469 ; N three ; B 40 -14 429 676 ;
+C 141 ; WX 500 ; N four ; B 20 0 480 676 ;
+C 142 ; WX 486 ; N five ; B 40 -14 446 688 ;
+C 143 ; WX 514 ; N six ; B 40 -14 474 684 ;
+C 144 ; WX 469 ; N seven ; B 20 -8 449 662 ;
+C 145 ; WX 469 ; N eight ; B 40 -14 429 676 ;
+C 146 ; WX 509 ; N nine ; B 40 -22 469 676 ;
+C 147 ; WX 250 ; N period ; B 48 -17 187 135 ;
+C 148 ; WX 250 ; N comma ; B -33 -164 208 147 ;
+C 149 ; WX 250 ; N colon ; B 47 -12 203 454 ;
+C 150 ; WX 250 ; N semicolon ; B -6 -166 227 454 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newpx/afm/NewPXBMI_gnu.afm b/fonts/newpx/afm/NewPXBMI_gnu.afm
new file mode 100644
index 0000000000..e87ef1d8f3
--- /dev/null
+++ b/fonts/newpx/afm/NewPXBMI_gnu.afm
@@ -0,0 +1,112 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Mon Sep 9 20:18:55 2019
+FontName NewPXBMI_gnu
+FullName NewPX Bold Math Italic GNU
+FamilyName NewPXMath_gnu
+Weight Bold
+Notice (Based on PXFonts, GNU3.0)
+Comment Modifications Copyright (c) 2017-2019, Michael Sharpe
+Comment
+ItalicAngle -10
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -42 -302 1004 794
+StartCharMetrics 92
+C 4 ; WX 531 ; N uni019B ; B 0 -7 569 699 ;
+C 15 ; WX 529 ; N uni03F6 ; B 28 -17 505 471 ;
+C 19 ; WX 427 ; N uni2113 ; B 18 -14 439 677 ;
+C 20 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 21 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 23 ; WX 556 ; N u1D71E ; B -6 -3 593 682 ;
+C 24 ; WX 695 ; N u1D71F ; B -5 -4 614 689 ;
+C 25 ; WX 833 ; N u1D723 ; B 76 -17 794 695 ;
+C 26 ; WX 722 ; N u1D726 ; B -34 -4 686 689 ;
+C 27 ; WX 686 ; N u1D729 ; B 15 -3 678 689 ;
+C 28 ; WX 778 ; N u1D72B ; B -15 -3 821 689 ;
+C 29 ; WX 716 ; N u1D72E ; B 20 -3 660 689 ;
+C 30 ; WX 700 ; N u1D730 ; B 56 -3 757 702 ;
+C 31 ; WX 954 ; N u1D731 ; B 75 -3 909 689 ;
+C 32 ; WX 961 ; N u1D733 ; B 87 -3 1004 690 ;
+C 33 ; WX 866 ; N u1D734 ; B 15 -3 829 701 ;
+C 34 ; WX 664 ; N u1D736 ; B 49 -21 633 478 ;
+C 35 ; WX 583 ; N u1D737 ; B -19 -282 573 705 ;
+C 36 ; WX 633 ; N u1D738 ; B 26 -291 608 480 ;
+C 37 ; WX 557 ; N u1D739 ; B 49 -22 506 708 ;
+C 38 ; WX 529 ; N u1D750 ; B 28 -17 505 471 ;
+C 39 ; WX 559 ; N u1D73B ; B 36 -193 527 704 ;
+C 40 ; WX 561 ; N u1D73C ; B 26 -279 515 480 ;
+C 41 ; WX 646 ; N u1D73D ; B 75 -21 601 701 ;
+C 42 ; WX 273 ; N u1D73E ; B 35 -17 252 481 ;
+C 43 ; WX 540 ; N u1D73F ; B 26 -17 543 481 ;
+C 44 ; WX 588 ; N u1D740 ; B 0 -7 569 699 ;
+C 45 ; WX 611 ; N u1D741 ; B 29 -302 582 492 ;
+C 46 ; WX 562 ; N u1D742 ; B 26 -16 539 480 ;
+C 47 ; WX 525 ; N u1D743 ; B 41 -193 541 705 ;
+C 48 ; WX 634 ; N u1D745 ; B 26 -16 623 476 ;
+C 49 ; WX 567 ; N u1D746 ; B -21 -279 534 476 ;
+C 50 ; WX 571 ; N u1D748 ; B 49 -25 602 492 ;
+C 51 ; WX 519 ; N u1D749 ; B 44 -17 527 480 ;
+C 52 ; WX 577 ; N u1D74A ; B 26 -18 526 480 ;
+C 53 ; WX 743 ; N u1D753 ; B 49 -279 694 688 ;
+C 54 ; WX 584 ; N u1D74C ; B -42 -185 595 480 ;
+C 55 ; WX 763 ; N u1D74D ; B 28 -279 734 688 ;
+C 56 ; WX 818 ; N u1D74E ; B 49 -14 767 480 ;
+C 57 ; WX 464 ; N u1D73A ; B 49 -21 435 479 ;
+C 58 ; WX 591 ; N u1D751 ; B 13 -18 567 700 ;
+C 59 ; WX 818 ; N u1D755 ; B 49 -14 767 567 ;
+C 60 ; WX 563 ; N u1D754 ; B 82 -266 561 476 ;
+C 61 ; WX 516 ; N u1D747 ; B 49 -193 486 477 ;
+C 62 ; WX 837 ; N u1D74B ; B 49 -277 786 478 ;
+C 63 ; WX 695 ; N u1D735 ; B 75 -14 694 679 ;
+C 64 ; WX 576 ; N u1D74F ; B 19 -10 557 753 ;
+C 68 ; WX 645 ; N u1D752 ; B 35 -23 622 505 ;
+C 125 ; WX 526 ; N u1D742.alt ; B 33 -11 500 445 ;
+C 127 ; WX 500 ; N zero.oldstyle ; B 24 -13 476 544 ;
+C 128 ; WX 500 ; N one.oldstyle ; B 65 0 442 544 ;
+C 129 ; WX 500 ; N two.oldstyle ; B 17 0 478 554 ;
+C 130 ; WX 500 ; N three.oldstyle ; B 16 -158 468 544 ;
+C 131 ; WX 500 ; N four.oldstyle ; B 19 -144 475 544 ;
+C 132 ; WX 500 ; N five.oldstyle ; B 22 -152 470 532 ;
+C 133 ; WX 500 ; N six.oldstyle ; B 28 -13 475 688 ;
+C 134 ; WX 500 ; N seven.oldstyle ; B 17 -144 477 532 ;
+C 135 ; WX 500 ; N eight.oldstyle ; B 28 -13 472 688 ;
+C 136 ; WX 500 ; N nine.oldstyle ; B 26 -157 473 544 ;
+C 137 ; WX 532 ; N zero ; B 40 -14 492 676 ;
+C 138 ; WX 323 ; N one ; B 20 0 303 676 ;
+C 139 ; WX 525 ; N two ; B 40 0 485 676 ;
+C 140 ; WX 469 ; N three ; B 40 -14 429 676 ;
+C 141 ; WX 500 ; N four ; B 20 0 480 676 ;
+C 142 ; WX 486 ; N five ; B 40 -14 446 688 ;
+C 143 ; WX 514 ; N six ; B 40 -14 474 684 ;
+C 144 ; WX 469 ; N seven ; B 20 -8 449 662 ;
+C 145 ; WX 469 ; N eight ; B 40 -14 429 676 ;
+C 146 ; WX 509 ; N nine ; B 40 -22 469 676 ;
+C 147 ; WX 250 ; N period ; B 41 -13 210 156 ;
+C 148 ; WX 250 ; N comma ; B 39 -180 223 155 ;
+C 149 ; WX 964 ; N uni21BC ; B 62 209 902 491 ;
+C 150 ; WX 964 ; N uni21BD ; B 62 23 902 305 ;
+C 151 ; WX 964 ; N uni21C0 ; B 62 209 902 491 ;
+C 152 ; WX 964 ; N uni21C1 ; B 62 23 902 305 ;
+C 153 ; WX 359 ; N uni21A9 ; B 62 209 297 510 ;
+C 154 ; WX 359 ; N uni21AA ; B 62 209 297 510 ;
+C 155 ; WX 601 ; N uni22B2 ; B 22 -25 579 541 ;
+C 156 ; WX 601 ; N uni22B3 ; B 22 -25 579 541 ;
+C 157 ; WX 676 ; N less ; B 62 -25 614 539 ;
+C 158 ; WX 482 ; N slash ; B 62 -176 420 693 ;
+C 159 ; WX 676 ; N greater ; B 62 -25 614 539 ;
+C 160 ; WX 820 ; N uni2605 ; B 44 -47 776 607 ;
+C 161 ; WX 396 ; N uni266D ; B 32 -21 374 737 ;
+C 162 ; WX 374 ; N uni266E ; B 32 -221 342 719 ;
+C 163 ; WX 419 ; N uni266F ; B 32 -207 387 770 ;
+C 164 ; WX 951 ; N uni2323 ; B 62 131 889 400 ;
+C 165 ; WX 951 ; N uni2322 ; B 62 131 889 400 ;
+C 166 ; WX 666 ; N uni2118 ; B 53 -193 624 479 ;
+C 167 ; WX 492 ; N uni20D7 ; B 136 507 572 794 ;
+C 168 ; WX 265 ; N uni2040 ; B 214 516 626 678 ;
+C 169 ; WX 547 ; N u1D488.alt ; B -1 -271 519 482 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newpx/afm/NewPXMI.afm b/fonts/newpx/afm/NewPXMI.afm
new file mode 100644
index 0000000000..39a886b5e1
--- /dev/null
+++ b/fonts/newpx/afm/NewPXMI.afm
@@ -0,0 +1,129 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Mon Sep 9 17:05:48 2019
+FontName NewPXMI
+FullName NewPX Math Italic
+FamilyName NewPXMath
+Weight Regular
+Notice (Derived from TeXGyrePagella)
+Comment Modifications are Copyright (c) 2017-2019, Michael Sharpe
+Comment Licensed under LPPL
+ItalicAngle -10
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -162 -283 980 899
+StartCharMetrics 109
+C 0 ; WX 400 ; N degree ; B 50 389 350 689 ;
+C 2 ; WX 667 ; N uni01B5 ; B 15 -3 638 692 ;
+C 3 ; WX 304 ; N uni0300 ; B 40 506 264 677 ;
+C 4 ; WX 304 ; N uni0301 ; B 40 506 264 677 ;
+C 5 ; WX 392 ; N uni0302 ; B 40 509 352 676 ;
+C 6 ; WX 390 ; N uni0303 ; B 30 540 360 645 ;
+C 7 ; WX 363 ; N uni0304 ; B 25 566 337 619 ;
+C 8 ; WX 382 ; N uni0306 ; B 50 513 332 671 ;
+C 9 ; WX 200 ; N uni0307 ; B 50 542 150 642 ;
+C 10 ; WX 399 ; N uni0308 ; B 50 542 349 642 ;
+C 11 ; WX 324 ; N uni030A ; B 62 492 262 692 ;
+C 12 ; WX 350 ; N uni030C ; B 19 509 331 676 ;
+C 14 ; WX 468 ; N uni20DB ; B 14 542 455 642 ;
+C 15 ; WX 637 ; N uni20DC ; B 14 542 622 642 ;
+C 16 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 17 ; WX 500 ; N uni210E ; B 10 -9 471 733 ;
+C 18 ; WX 369 ; N uni2113 ; B 70 -20 419 712 ;
+C 19 ; WX 765 ; N uni2126 ; B 15 0 752 731 ;
+C 20 ; WX 765 ; N uni2127 ; B 15 -12 752 719 ;
+C 21 ; WX 778 ; N uni212B ; B 15 -3 756 899 ;
+C 22 ; WX 722 ; N u1D434 ; B -19 -3 677 705 ;
+C 23 ; WX 611 ; N u1D435 ; B 26 -3 559 692 ;
+C 24 ; WX 667 ; N u1D436 ; B 45 -18 651 706 ;
+C 25 ; WX 778 ; N u1D437 ; B 28 -3 741 692 ;
+C 26 ; WX 611 ; N u1D438 ; B 30 -3 570 692 ;
+C 27 ; WX 556 ; N u1D439 ; B 0 -3 548 692 ;
+C 28 ; WX 722 ; N u1D43A ; B 50 -18 694 706 ;
+C 29 ; WX 778 ; N u1D43B ; B -3 -3 800 692 ;
+C 30 ; WX 333 ; N u1D43C ; B 7 -3 354 692 ;
+C 31 ; WX 333 ; N u1D43D ; B -35 -206 358 692 ;
+C 32 ; WX 667 ; N u1D43E ; B 13 -3 683 692 ;
+C 33 ; WX 556 ; N u1D43F ; B 16 -3 523 692 ;
+C 34 ; WX 944 ; N u1D440 ; B -19 -18 940 692 ;
+C 35 ; WX 778 ; N u1D441 ; B 2 -11 804 692 ;
+C 36 ; WX 778 ; N u1D442 ; B 53 -18 748 706 ;
+C 37 ; WX 611 ; N u1D443 ; B 9 -3 594 692 ;
+C 38 ; WX 778 ; N u1D444 ; B 53 -201 748 706 ;
+C 39 ; WX 667 ; N u1D445 ; B 9 -3 639 692 ;
+C 40 ; WX 556 ; N u1D446 ; B 42 -18 506 706 ;
+C 41 ; WX 611 ; N u1D447 ; B 53 -3 635 692 ;
+C 42 ; WX 778 ; N u1D448 ; B 88 -19 798 692 ;
+C 43 ; WX 722 ; N u1D449 ; B 75 -8 754 692 ;
+C 44 ; WX 944 ; N u1D44A ; B 71 -8 980 700 ;
+C 45 ; WX 722 ; N u1D44B ; B 20 -3 734 692 ;
+C 46 ; WX 667 ; N u1D44C ; B 52 -3 675 705 ;
+C 47 ; WX 667 ; N u1D44D ; B 20 -3 637 692 ;
+C 48 ; WX 444 ; N u1D44E ; B 4 -11 406 482 ;
+C 49 ; WX 463 ; N u1D44F ; B 37 -11 433 733 ;
+C 50 ; WX 407 ; N u1D450 ; B 25 -11 389 482 ;
+C 51 ; WX 500 ; N u1D451 ; B 17 -11 483 733 ;
+C 52 ; WX 389 ; N u1D452 ; B 15 -11 374 482 ;
+C 53 ; WX 278 ; N u1D453 ; B -162 -276 413 733 ;
+C 54 ; WX 500 ; N u1D454 ; B -37 -276 498 482 ;
+C 55 ; WX 500 ; N u1D455 ; B 10 -9 471 733 ;
+C 56 ; WX 278 ; N u1D456 ; B 34 -9 266 670 ;
+C 57 ; WX 278 ; N u1D457 ; B -70 -276 273 670 ;
+C 58 ; WX 444 ; N u1D458 ; B 8 -9 449 733 ;
+C 59 ; WX 278 ; N u1D459 ; B 36 -9 251 733 ;
+C 60 ; WX 778 ; N u1D45A ; B 24 -9 740 482 ;
+C 61 ; WX 556 ; N u1D45B ; B 24 -9 514 482 ;
+C 62 ; WX 444 ; N u1D45C ; B 17 -11 411 482 ;
+C 63 ; WX 500 ; N u1D45D ; B -7 -276 465 482 ;
+C 64 ; WX 463 ; N u1D45E ; B 24 -276 432 482 ;
+C 65 ; WX 389 ; N u1D45F ; B 26 -9 384 482 ;
+C 66 ; WX 389 ; N u1D460 ; B 9 -11 345 482 ;
+C 67 ; WX 333 ; N u1D461 ; B 41 -9 310 646 ;
+C 68 ; WX 556 ; N u1D462 ; B 32 -11 512 482 ;
+C 69 ; WX 500 ; N u1D463 ; B 21 -11 477 482 ;
+C 70 ; WX 722 ; N u1D464 ; B 21 -11 699 482 ;
+C 71 ; WX 500 ; N u1D465 ; B 9 -11 484 482 ;
+C 72 ; WX 500 ; N u1D466 ; B -8 -276 490 482 ;
+C 73 ; WX 444 ; N u1D467 ; B -1 -11 416 482 ;
+C 116 ; WX 531 ; N uni019B.alt ; B 16 -11 531 655 ;
+C 117 ; WX 497 ; N uni210F ; B 19 -9 478 683 ;
+C 118 ; WX 497 ; N uni210F.alt ; B 19 -9 478 683 ;
+C 120 ; WX 619 ; N uni019B.ital ; B 32 -16 574 702 ;
+C 121 ; WX 278 ; N u1D6A4 ; B 34 -9 241 482 ;
+C 122 ; WX 278 ; N u1D6A5 ; B -70 -276 228 482 ;
+C 123 ; WX 393 ; N u1D463.alt ; B 40 -11 375 441 ;
+C 124 ; WX 626 ; N u1D464.alt ; B 40 -11 608 441 ;
+C 125 ; WX 470 ; N u1D708.alt ; B 31 -11 441 442 ;
+C 126 ; WX 460 ; N u1D466.alt ; B -4 -207 473 441 ;
+C 127 ; WX 500 ; N zero.oldstyle ; B 25 -20 475 479 ;
+C 128 ; WX 500 ; N one.oldstyle ; B 60 -3 418 485 ;
+C 129 ; WX 500 ; N two.oldstyle ; B 21 -3 468 478 ;
+C 130 ; WX 500 ; N three.oldstyle ; B 23 -238 462 477 ;
+C 131 ; WX 500 ; N four.oldstyle ; B 2 -225 472 513 ;
+C 132 ; WX 500 ; N five.oldstyle ; B 23 -238 439 471 ;
+C 133 ; WX 500 ; N six.oldstyle ; B 32 -20 468 689 ;
+C 134 ; WX 500 ; N seven.oldstyle ; B 44 -238 497 454 ;
+C 135 ; WX 500 ; N eight.oldstyle ; B 30 -20 464 689 ;
+C 136 ; WX 500 ; N nine.oldstyle ; B 20 -230 457 479 ;
+C 138 ; WX 500 ; N zero ; B 29 -20 465 689 ;
+C 139 ; WX 500 ; N one ; B 60 -3 418 694 ;
+C 140 ; WX 500 ; N two ; B 16 -3 468 689 ;
+C 141 ; WX 500 ; N three ; B 15 -20 462 689 ;
+C 142 ; WX 500 ; N four ; B 2 -3 472 694 ;
+C 143 ; WX 500 ; N five ; B 13 -20 459 689 ;
+C 144 ; WX 500 ; N six ; B 32 -20 468 689 ;
+C 145 ; WX 500 ; N seven ; B 44 -3 497 689 ;
+C 146 ; WX 500 ; N eight ; B 30 -20 464 689 ;
+C 147 ; WX 500 ; N nine ; B 20 -20 457 689 ;
+C 148 ; WX 512 ; N u1D454.alt ; B 9 -276 502 482 ;
+C 149 ; WX 250 ; N period ; B 67 -5 183 111 ;
+C 150 ; WX 250 ; N comma ; B 16 -155 218 123 ;
+C 151 ; WX 250 ; N colon ; B 66 -5 182 456 ;
+C 152 ; WX 250 ; N semicolon ; B 16 -153 218 456 ;
+C 171 ; WX 287 ; N u1D6A4.up ; B 21 -3 271 469 ;
+C 172 ; WX 234 ; N u1D6A5.up ; B -40 -283 159 469 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newpx/afm/NewPXMI_gnu.afm b/fonts/newpx/afm/NewPXMI_gnu.afm
new file mode 100644
index 0000000000..dbb63ef3e9
--- /dev/null
+++ b/fonts/newpx/afm/NewPXMI_gnu.afm
@@ -0,0 +1,85 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Mon Sep 9 20:54:12 2019
+FontName NewPXMI_gnu
+FullName NewPX Math Italic GNU
+FamilyName NewPXMath_gnu
+Weight Regular
+Notice (Derived from PX fonts and GNUFreeFont, GNU 3.0)
+Comment Modifications are Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -10
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -27 -289 950 802
+StartCharMetrics 66
+C 0 ; WX 619 ; N uni019B ; B 32 -16 574 702 ;
+C 1 ; WX 466 ; N uni03F6 ; B 15 -11 454 482 ;
+C 2 ; WX 709 ; N u1D6E5 ; B 11 -4 596 689 ;
+C 3 ; WX 778 ; N u1D6E9 ; B 53 -18 748 706 ;
+C 4 ; WX 712 ; N u1D6EC ; B -27 -4 673 689 ;
+C 5 ; WX 718 ; N u1D6EF ; B 44 -4 676 689 ;
+C 6 ; WX 778 ; N u1D6F1 ; B 26 -4 784 689 ;
+C 7 ; WX 671 ; N u1D6F4 ; B 11 -4 627 689 ;
+C 8 ; WX 695 ; N u1D6F6 ; B 73 -4 740 703 ;
+C 9 ; WX 823 ; N u1D6F7 ; B 67 -4 789 689 ;
+C 10 ; WX 747 ; N u1D6F9 ; B 18 -4 856 694 ;
+C 11 ; WX 884 ; N u1D6FA ; B 44 -4 819 703 ;
+C 12 ; WX 709 ; N u1D6FB ; B 141 -10 726 683 ;
+C 13 ; WX 595 ; N u1D6FC ; B 27 -16 555 473 ;
+C 14 ; WX 513 ; N u1D6FD ; B -6 -283 471 680 ;
+C 15 ; WX 582 ; N u1D6FE ; B 14 -273 542 473 ;
+C 16 ; WX 498 ; N u1D6FF ; B 32 -16 457 702 ;
+C 17 ; WX 494 ; N u1D700 ; B 56 -15 440 473 ;
+C 18 ; WX 505 ; N u1D701 ; B 53 -149 469 712 ;
+C 19 ; WX 532 ; N u1D702 ; B 34 -275 493 473 ;
+C 20 ; WX 614 ; N u1D703 ; B 71 -16 573 702 ;
+C 21 ; WX 311 ; N u1D704 ; B 66 -16 282 473 ;
+C 22 ; WX 572 ; N u1D705 ; B 36 -16 540 473 ;
+C 23 ; WX 619 ; N u1D706 ; B 32 -16 574 702 ;
+C 24 ; WX 611 ; N u1D707 ; B 45 -286 565 473 ;
+C 25 ; WX 498 ; N u1D708 ; B -1 -7 471 473 ;
+C 26 ; WX 548 ; N u1D709 ; B 45 -148 503 701 ;
+C 27 ; WX 654 ; N u1D70B ; B 45 -15 608 467 ;
+C 28 ; WX 567 ; N u1D70C ; B 41 -284 522 473 ;
+C 29 ; WX 502 ; N u1D70D ; B 45 -155 458 463 ;
+C 30 ; WX 553 ; N u1D70E ; B 28 -15 525 474 ;
+C 31 ; WX 520 ; N u1D70F ; B 45 -16 476 464 ;
+C 32 ; WX 548 ; N u1D710 ; B 36 -12 507 471 ;
+C 33 ; WX 682 ; N u1D711 ; B 27 -277 638 485 ;
+C 34 ; WX 609 ; N u1D712 ; B 4 -193 596 479 ;
+C 35 ; WX 696 ; N u1D713 ; B 36 -281 651 682 ;
+C 36 ; WX 716 ; N u1D714 ; B 27 -12 672 463 ;
+C 37 ; WX 537 ; N u1D715 ; B 19 -10 517 753 ;
+C 38 ; WX 466 ; N u1D716 ; B 15 -11 454 482 ;
+C 39 ; WX 621 ; N u1D717 ; B 43 -15 575 702 ;
+C 40 ; WX 660 ; N u1D718 ; B 72 -17 609 483 ;
+C 41 ; WX 666 ; N u1D719 ; B 27 -289 622 705 ;
+C 42 ; WX 479 ; N u1D71A ; B 59 -260 489 474 ;
+C 43 ; WX 716 ; N u1D71B ; B 27 -12 674 529 ;
+C 44 ; WX 512 ; N u1D454.alt ; B 9 -276 502 482 ;
+C 45 ; WX 1015 ; N uni21BC ; B 65 241 950 486 ;
+C 46 ; WX 1015 ; N uni21BD ; B 65 55 950 300 ;
+C 47 ; WX 1015 ; N uni21C0 ; B 65 241 950 486 ;
+C 48 ; WX 1015 ; N uni21C1 ; B 65 55 950 300 ;
+C 49 ; WX 335 ; N uni21A9 ; B 65 241 271 515 ;
+C 50 ; WX 335 ; N uni21AA ; B 65 241 271 515 ;
+C 51 ; WX 440 ; N uni22B2 ; B 21 68 419 470 ;
+C 52 ; WX 440 ; N uni22B3 ; B 21 72 419 473 ;
+C 53 ; WX 669 ; N less ; B 65 6 604 535 ;
+C 54 ; WX 464 ; N slash ; B 65 -170 399 714 ;
+C 55 ; WX 669 ; N greater ; B 65 6 604 535 ;
+C 56 ; WX 707 ; N uni2605 ; B 46 -6 661 579 ;
+C 57 ; WX 436 ; N uni266D ; B 69 -22 388 769 ;
+C 58 ; WX 396 ; N uni266E ; B 63 -225 347 750 ;
+C 59 ; WX 423 ; N uni266F ; B 53 -207 384 802 ;
+C 60 ; WX 1015 ; N uni2323 ; B 65 106 950 360 ;
+C 61 ; WX 1015 ; N uni2322 ; B 65 166 950 420 ;
+C 62 ; WX 657 ; N uni2118 ; B 58 -203 617 504 ;
+C 63 ; WX 511 ; N uni20D7 ; B 179 480 625 784 ;
+C 64 ; WX 273 ; N uni2040 ; B 234 518 645 684 ;
+C 65 ; WX 556 ; N u1D6E4 ; B 0 -3 548 692 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newpx/afm/pxbmiaX.afm b/fonts/newpx/afm/pxbmiaX.afm
new file mode 100644
index 0000000000..1d1d7df14b
--- /dev/null
+++ b/fonts/newpx/afm/pxbmiaX.afm
@@ -0,0 +1,186 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Mon Sep 9 21:11:06 2019
+FontName pxbmiaX
+FullName pxbmiaX
+FamilyName pxbmiaX
+Weight Medium
+Notice (Version 3.1, GPL)
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 3.1
+EncodingScheme FontSpecific
+FontBBox -26 -302 1115 899
+StartCharMetrics 168
+C 0 ; WX 556 ; N u1D6AA ; B 28 -3 539 682 ;
+C 1 ; WX 687 ; N u1D6AB ; B 25 0 662 693 ;
+C 2 ; WX 833 ; N u1D6AF ; B 47 -17 787 695 ;
+C 3 ; WX 778 ; N u1D6B2 ; B 24 -3 762 693 ;
+C 4 ; WX 685 ; N u1D6B5 ; B 34 -3 652 689 ;
+C 5 ; WX 818 ; N u1D6B7 ; B 32 -3 787 689 ;
+C 6 ; WX 660 ; N u1D6BA ; B 25 -3 619 689 ;
+C 7 ; WX 699 ; N u1D6BC ; B 5 0 704 705 ;
+C 8 ; WX 958 ; N u1D6BD ; B 46 -3 913 689 ;
+C 9 ; WX 936 ; N u1D6BF ; B 4 -5 932 694 ;
+C 10 ; WX 811 ; N u1D6C0 ; B 34 -3 777 700 ;
+C 11 ; WX 664 ; N u1D6C2 ; B 68 -21 628 478 ;
+C 12 ; WX 583 ; N u1D6C3 ; B 57 -282 527 705 ;
+C 13 ; WX 633 ; N u1D6C4 ; B -19 -291 556 480 ;
+C 14 ; WX 557 ; N u1D6C5 ; B 75 -22 519 708 ;
+C 15 ; WX 529 ; N u1D6DC ; B 38 -17 477 471 ;
+C 16 ; WX 559 ; N u1D6C7 ; B 51 -193 533 704 ;
+C 17 ; WX 561 ; N u1D6C8 ; B -16 -279 492 480 ;
+C 18 ; WX 646 ; N u1D6C9 ; B 87 -21 587 701 ;
+C 19 ; WX 273 ; N u1D6CA ; B 64 -17 275 481 ;
+C 20 ; WX 540 ; N u1D6CB ; B 3 -17 541 481 ;
+C 21 ; WX 588 ; N u1D6CC ; B 54 -7 616 699 ;
+C 22 ; WX 611 ; N u1D6CD ; B 73 -302 583 492 ;
+C 23 ; WX 562 ; N u1D6CE ; B 2 -16 513 480 ;
+C 24 ; WX 525 ; N u1D6CF ; B 59 -193 529 705 ;
+C 25 ; WX 634 ; N u1D6D1 ; B 14 -16 628 476 ;
+C 26 ; WX 567 ; N u1D6D2 ; B 38 -279 502 476 ;
+C 27 ; WX 571 ; N u1D6D4 ; B 60 -25 563 492 ;
+C 28 ; WX 519 ; N u1D6D5 ; B 35 -17 489 480 ;
+C 29 ; WX 577 ; N u1D6D6 ; B 5 -18 514 480 ;
+C 30 ; WX 743 ; N u1D6DF ; B 47 -279 685 688 ;
+C 31 ; WX 584 ; N u1D6D8 ; B 1 -185 551 480 ;
+C 32 ; WX 763 ; N u1D6D9 ; B -3 -279 708 688 ;
+C 33 ; WX 818 ; N u1D6DA ; B 61 -14 755 480 ;
+C 34 ; WX 464 ; N u1D6C6 ; B 67 -21 459 479 ;
+C 35 ; WX 591 ; N u1D6DD ; B 31 -18 578 700 ;
+C 36 ; WX 818 ; N u1D6E1 ; B 68 -14 762 567 ;
+C 37 ; WX 563 ; N u1D6E0 ; B 95 -266 532 476 ;
+C 38 ; WX 516 ; N u1D6D3 ; B 47 -193 502 477 ;
+C 39 ; WX 837 ; N u1D6D7 ; B 31 -277 753 478 ;
+C 40 ; WX 571 ; N u1D6CE.alt ; B 25 -16 538 480 ;
+C 41 ; WX 645 ; N u1D752 ; B 35 -23 622 505 ;
+C 42 ; WX 682 ; N u1D6DE ; B 32 -23 648 505 ;
+C 43 ; WX 687 ; N u1D6C1 ; B 25 -10 662 683 ;
+C 44 ; WX 333 ; N colon ; B 82 -13 251 472 ;
+C 45 ; WX 333 ; N semicolon ; B 82 -180 266 472 ;
+C 46 ; WX 278 ; N slash ; B -24 -19 302 691 ;
+C 47 ; WX 500 ; N question ; B 57 -13 445 689 ;
+C 48 ; WX 541 ; N u1D742 ; B 53 -16 569 480 ;
+C 49 ; WX 539 ; N u1D488 ; B 11 -271 524 469 ;
+C 50 ; WX 537 ; N u1D49A ; B -12 -207 508 462 ;
+C 51 ; WX 421 ; N u1D497 ; B 15 -9 392 462 ;
+C 52 ; WX 649 ; N u1D498 ; B 15 -9 620 462 ;
+C 54 ; WX 711 ; N uni2284 ; B 55 -128 657 670 ;
+C 55 ; WX 711 ; N uni2285 ; B 55 -128 657 670 ;
+C 56 ; WX 606 ; N uni2209 ; B 55 -128 552 670 ;
+C 57 ; WX 606 ; N uni220C ; B 55 -128 552 670 ;
+C 58 ; WX 997 ; N uni2254 ; B 86 15 932 526 ;
+C 59 ; WX 997 ; N uni2255 ; B 65 15 911 526 ;
+C 60 ; WX 711 ; N uni2260 ; B 65 -76 647 617 ;
+C 61 ; WX 711 ; N equal ; B 65 92 647 450 ;
+C 62 ; WX 562 ; N braceleft ; B 108 -195 505 737 ;
+C 63 ; WX 562 ; N braceright ; B 108 -195 505 737 ;
+C 64 ; WX 494 ; N u1D6DB ; B 23 -13 466 750 ;
+C 65 ; WX 749 ; N u1D56C ; B 54 -9 726 719 ;
+C 66 ; WX 749 ; N u1D56D ; B 52 -7 723 715 ;
+C 67 ; WX 698 ; N u1D56E ; B 77 -8 667 718 ;
+C 68 ; WX 698 ; N u1D56F ; B 51 -8 668 715 ;
+C 69 ; WX 698 ; N u1D570 ; B 63 -8 684 719 ;
+C 70 ; WX 646 ; N u1D571 ; B 37 -167 633 719 ;
+C 71 ; WX 802 ; N u1D572 ; B 76 -9 756 718 ;
+C 72 ; WX 749 ; N u1D573 ; B 33 -167 709 718 ;
+C 73 ; WX 646 ; N u1D574 ; B 29 -11 611 718 ;
+C 74 ; WX 646 ; N u1D575 ; B 16 -167 609 719 ;
+C 75 ; WX 749 ; N u1D576 ; B 14 -14 732 718 ;
+C 76 ; WX 594 ; N u1D577 ; B 32 -11 556 718 ;
+C 77 ; WX 969 ; N u1D578 ; B 16 -15 952 719 ;
+C 78 ; WX 802 ; N u1D579 ; B 53 -11 785 719 ;
+C 79 ; WX 698 ; N u1D57A ; B 69 -7 681 718 ;
+C 80 ; WX 749 ; N u1D57B ; B 47 -167 749 719 ;
+C 81 ; WX 760 ; N u1D57C ; B 52 -11 748 717 ;
+C 82 ; WX 802 ; N u1D57D ; B 49 -11 782 719 ;
+C 83 ; WX 698 ; N u1D57E ; B 62 -5 672 719 ;
+C 84 ; WX 646 ; N u1D57F ; B 71 -8 632 716 ;
+C 85 ; WX 698 ; N u1D580 ; B 32 -12 676 718 ;
+C 86 ; WX 749 ; N u1D581 ; B 43 -9 746 718 ;
+C 87 ; WX 969 ; N u1D582 ; B 38 -4 968 713 ;
+C 88 ; WX 646 ; N u1D583 ; B 32 -6 642 718 ;
+C 89 ; WX 749 ; N u1D584 ; B 49 -167 705 718 ;
+C 90 ; WX 656 ; N u1D585 ; B 20 -167 601 717 ;
+C 91 ; WX 556 ; N uni210F ; B 22 -17 522 726 ;
+C 92 ; WX 556 ; N uni210F.var ; B 22 -17 522 726 ;
+C 93 ; WX 588 ; N uni019B ; B 0 -7 569 699 ;
+C 94 ; WX 667 ; N uni01B5 ; B 15 -3 638 692 ;
+C 95 ; WX 778 ; N uni212B ; B 15 -3 756 899 ;
+C 96 ; WX 505 ; N uni2107 ; B 34 -14 470 672 ;
+C 97 ; WX 500 ; N u1D586 ; B 63 -9 489 537 ;
+C 98 ; WX 521 ; N u1D587 ; B 43 -17 472 709 ;
+C 99 ; WX 365 ; N u1D588 ; B 61 -7 354 540 ;
+C 100 ; WX 531 ; N u1D589 ; B 52 -8 481 717 ;
+C 101 ; WX 417 ; N u1D58A ; B 49 -11 411 541 ;
+C 102 ; WX 375 ; N u1D58B ; B 43 -166 348 718 ;
+C 103 ; WX 479 ; N u1D58C ; B 43 -167 466 536 ;
+C 104 ; WX 521 ; N u1D58D ; B 37 -166 474 718 ;
+C 105 ; WX 313 ; N u1D58E ; B 22 -11 302 719 ;
+C 106 ; WX 323 ; N u1D58F ; B 35 -168 289 718 ;
+C 107 ; WX 375 ; N u1D590 ; B 52 -8 345 718 ;
+C 108 ; WX 313 ; N u1D591 ; B 52 -9 304 716 ;
+C 109 ; WX 823 ; N u1D592 ; B 27 -9 800 537 ;
+C 110 ; WX 542 ; N u1D593 ; B 2 -7 542 539 ;
+C 111 ; WX 479 ; N u1D594 ; B 40 -8 455 549 ;
+C 112 ; WX 552 ; N u1D595 ; B 36 -167 505 544 ;
+C 113 ; WX 489 ; N u1D596 ; B 54 -167 458 549 ;
+C 114 ; WX 417 ; N u1D597 ; B 41 -8 414 545 ;
+C 115 ; WX 469 ; N u1D598 ; B 60 -4 429 542 ;
+C 116 ; WX 323 ; N u1D599 ; B 23 -11 317 704 ;
+C 117 ; WX 531 ; N u1D59A ; B 24 -11 529 543 ;
+C 118 ; WX 521 ; N u1D59B ; B 28 -4 477 536 ;
+C 119 ; WX 749 ; N u1D59C ; B 32 -6 709 546 ;
+C 120 ; WX 427 ; N u1D59D ; B 21 -8 417 537 ;
+C 121 ; WX 479 ; N u1D59E ; B 25 -166 447 536 ;
+C 122 ; WX 375 ; N u1D59F ; B 36 -168 345 541 ;
+C 123 ; WX 313 ; N u1D58E.dtls ; B 22 -11 302 540 ;
+C 124 ; WX 323 ; N u1D58F.dtls ; B 35 -168 289 539 ;
+C 125 ; WX 588 ; N uni019B.alt ; B 0 -7 569 699 ;
+C 127 ; WX 279 ; N tie ; B 225 543 659 714 ;
+C 129 ; WX 888 ; N u1D538 ; B 4 -9 877 705 ;
+C 130 ; WX 740 ; N u1D539 ; B 16 -9 716 698 ;
+C 131 ; WX 709 ; N uni2102 ; B 12 -25 682 715 ;
+C 132 ; WX 899 ; N u1D53B ; B 12 -9 886 698 ;
+C 133 ; WX 728 ; N u1D53C ; B 12 -9 703 697 ;
+C 134 ; WX 673 ; N u1D53D ; B 12 -9 666 697 ;
+C 135 ; WX 763 ; N u1D53E ; B 12 -25 740 715 ;
+C 136 ; WX 949 ; N uni210D ; B 12 -9 938 697 ;
+C 137 ; WX 454 ; N u1D540 ; B 12 -9 442 697 ;
+C 138 ; WX 441 ; N u1D541 ; B -26 -199 429 697 ;
+C 139 ; WX 843 ; N u1D542 ; B 12 -9 846 697 ;
+C 140 ; WX 728 ; N u1D543 ; B 12 -9 715 697 ;
+C 141 ; WX 1067 ; N u1D544 ; B 5 -18 1058 697 ;
+C 142 ; WX 952 ; N uni2115 ; B 6 -27 944 697 ;
+C 143 ; WX 786 ; N u1D546 ; B 12 -25 775 715 ;
+C 144 ; WX 721 ; N uni2119 ; B 12 -9 707 698 ;
+C 145 ; WX 786 ; N uni211A ; B 12 -182 775 715 ;
+C 146 ; WX 785 ; N uni211D ; B 12 -9 797 698 ;
+C 147 ; WX 525 ; N u1D54A ; B 14 -25 514 715 ;
+C 148 ; WX 738 ; N u1D54B ; B 6 -9 732 699 ;
+C 149 ; WX 908 ; N u1D54C ; B 1 -28 900 697 ;
+C 150 ; WX 852 ; N u1D54D ; B -3 -14 847 698 ;
+C 151 ; WX 1120 ; N u1D54E ; B -3 -14 1115 705 ;
+C 152 ; WX 784 ; N u1D54F ; B 3 -9 776 705 ;
+C 153 ; WX 667 ; N u1D550 ; B -2 -9 665 710 ;
+C 154 ; WX 817 ; N uni2124 ; B 4 -9 800 697 ;
+C 165 ; WX 676 ; N u1D55C ; B 11 -18 680 733 ;
+C 186 ; WX 350 ; N caron ; B -2 556 353 741 ;
+C 187 ; WX 350 ; N breve ; B 16 556 335 728 ;
+C 188 ; WX 791 ; N uni2AEB ; B 65 0 727 579 ;
+C 189 ; WX 791 ; N uni2AEB.not ; B 65 -104 727 643 ;
+C 190 ; WX 283 ; N u1D6A4.bup ; B 25 -2 258 442 ;
+C 191 ; WX 332 ; N u1D6A5.bup ; B 12 -223 256 442 ;
+C 219 ; WX 350 ; N tilde ; B -17 576 367 710 ;
+C 221 ; WX 350 ; N macron ; B 1 595 349 671 ;
+C 222 ; WX 350 ; N ring ; B 63 565 287 790 ;
+C 223 ; WX 350 ; N circumflex ; B -2 556 353 741 ;
+C 251 ; WX 643 ; N dblbracketleft ; B 93 -203 555 755 ;
+C 252 ; WX 664 ; N dblbracketright ; B 57 -203 519 755 ;
+C 253 ; WX 600 ; N plus ; B 35 0 565 533 ;
+C 254 ; WX 350 ; N grave ; B 8 556 259 751 ;
+C 255 ; WX 350 ; N acute ; B 91 556 341 751 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newpx/afm/pxbsys.afm b/fonts/newpx/afm/pxbsys.afm
index aa904695de..5f44cfc5a0 100644
--- a/fonts/newpx/afm/pxbsys.afm
+++ b/fonts/newpx/afm/pxbsys.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20161003
-Comment Creation Date: Tue May 30 16:42:38 2017
+Comment Generated by FontForge 20190801
+Comment Creation Date: Mon Sep 9 20:15:31 2019
FontName pxbsys
FullName pxbsys
FamilyName pxbsys
@@ -12,9 +12,8 @@ UnderlinePosition -100
UnderlineThickness 50
Version 1.0
EncodingScheme FontSpecific
-FontBBox -17 -978 1537 913
-CapHeight 728
-StartCharMetrics 194
+FontBBox -21 -978 1537 913
+StartCharMetrics 205
C 0 ; WX 711 ; N minus ; B 65 220 646 321 ;
C 1 ; WX 250 ; N periodcentered ; B 47 195 203 351 ;
C 2 ; WX 711 ; N multiply ; B 65 -18 646 559 ;
@@ -70,7 +69,7 @@ C 51 ; WX 617 ; N owner ; B 55 -13 552 554 ;
C 52 ; WX 736 ; N triangle ; B 44 0 692 601 ;
C 53 ; WX 736 ; N triangleinv ; B 44 -24 692 577 ;
C 54 ; WX 0 ; N negationslash ; B 120 -192 592 733 ;
-C 55 ; WX 0 ; N mapsto ; B 65 34 263 507 ;
+C 55 ; WX 0 ; N uni21A6.endl ; B 65 34 263 507 ;
C 56 ; WX 617 ; N universal ; B 21 -15 597 698 ;
C 57 ; WX 617 ; N existential ; B 46 0 572 697 ;
C 58 ; WX 716 ; N logicalnot ; B 65 67 651 381 ;
@@ -80,32 +79,32 @@ C 61 ; WX 776 ; N Ifractur ; B 76 -39 679 801 ;
C 62 ; WX 791 ; N latticetop ; B 65 0 726 579 ;
C 63 ; WX 791 ; N perpendicular ; B 65 0 726 579 ;
C 64 ; WX 701 ; N aleph ; B 32 -17 669 757 ;
-C 65 ; WX 997 ; N A ; B 16 -41 980 692 ;
-C 66 ; WX 848 ; N B ; B 18 -23 822 720 ;
-C 67 ; WX 636 ; N C ; B 26 -52 694 704 ;
-C 68 ; WX 976 ; N D ; B 17 -31 949 707 ;
-C 69 ; WX 678 ; N E ; B 13 -19 663 719 ;
-C 70 ; WX 761 ; N F ; B 13 -70 902 742 ;
-C 71 ; WX 808 ; N G ; B 26 -176 795 715 ;
-C 72 ; WX 1011 ; N H ; B 20 -35 1112 761 ;
-C 73 ; WX 615 ; N I ; B 19 -26 731 734 ;
-C 74 ; WX 834 ; N J ; B 11 -157 982 714 ;
-C 75 ; WX 888 ; N K ; B 5 -27 974 734 ;
-C 76 ; WX 842 ; N L ; B 13 -91 828 725 ;
-C 77 ; WX 1266 ; N M ; B 13 -46 1240 741 ;
-C 78 ; WX 925 ; N N ; B 13 -40 1027 720 ;
-C 79 ; WX 820 ; N O ; B 26 -26 794 753 ;
-C 80 ; WX 826 ; N P ; B 17 -39 812 714 ;
-C 81 ; WX 816 ; N Q ; B 26 -59 794 753 ;
-C 82 ; WX 786 ; N R ; B 18 -8 778 727 ;
-C 83 ; WX 774 ; N S ; B 26 -29 747 738 ;
-C 84 ; WX 694 ; N T ; B 18 -29 927 717 ;
-C 85 ; WX 1029 ; N U ; B 15 -34 1079 731 ;
-C 86 ; WX 969 ; N V ; B 17 -39 1027 711 ;
-C 87 ; WX 1319 ; N W ; B 5 -32 1382 732 ;
-C 88 ; WX 797 ; N X ; B 11 -41 778 761 ;
-C 89 ; WX 815 ; N Y ; B 23 -72 913 759 ;
-C 90 ; WX 963 ; N Z ; B 9 -112 948 747 ;
+C 65 ; WX 997 ; N u1D4D0 ; B 16 -41 980 692 ;
+C 66 ; WX 848 ; N u1D4D1 ; B 18 -23 822 720 ;
+C 67 ; WX 636 ; N u1D4D2 ; B 26 -52 694 704 ;
+C 68 ; WX 976 ; N u1D4D3 ; B 17 -31 949 707 ;
+C 69 ; WX 678 ; N u1D4D4 ; B 13 -19 663 719 ;
+C 70 ; WX 761 ; N u1D4D5 ; B 13 -70 902 742 ;
+C 71 ; WX 808 ; N u1D4D6 ; B 26 -176 795 715 ;
+C 72 ; WX 1011 ; N u1D4D7 ; B 20 -35 1112 761 ;
+C 73 ; WX 615 ; N u1D4D8 ; B 19 -26 731 734 ;
+C 74 ; WX 834 ; N u1D4D9 ; B 11 -157 982 714 ;
+C 75 ; WX 888 ; N u1D4DA ; B 5 -27 974 734 ;
+C 76 ; WX 842 ; N u1D4DB ; B 13 -91 828 725 ;
+C 77 ; WX 1266 ; N u1D4DC ; B 13 -46 1240 741 ;
+C 78 ; WX 925 ; N u1D4DD ; B 13 -40 1027 720 ;
+C 79 ; WX 820 ; N u1D4DE ; B 26 -26 794 753 ;
+C 80 ; WX 826 ; N u1D4DF ; B 17 -39 812 714 ;
+C 81 ; WX 816 ; N u1D4E0 ; B 26 -59 794 753 ;
+C 82 ; WX 786 ; N u1D4E1 ; B 18 -8 778 727 ;
+C 83 ; WX 774 ; N u1D4E2 ; B 26 -29 747 738 ;
+C 84 ; WX 694 ; N u1D4E3 ; B 18 -29 927 717 ;
+C 85 ; WX 1029 ; N u1D4E4 ; B 15 -34 1079 731 ;
+C 86 ; WX 969 ; N u1D4E5 ; B 17 -39 1027 711 ;
+C 87 ; WX 1319 ; N u1D4E6 ; B 5 -32 1382 732 ;
+C 88 ; WX 797 ; N u1D4E7 ; B 11 -41 778 761 ;
+C 89 ; WX 815 ; N u1D4E8 ; B 23 -72 913 759 ;
+C 90 ; WX 963 ; N u1D4E9 ; B 9 -112 948 747 ;
C 91 ; WX 730 ; N union ; B 65 0 665 625 ;
C 92 ; WX 730 ; N intersection ; B 65 0 665 625 ;
C 93 ; WX 730 ; N unionmulti ; B 65 0 665 625 ;
@@ -170,15 +169,36 @@ C 151 ; WX 561 ; N uni2A16.upsm ; B 55 -175 497 759 ;
C 152 ; WX 771 ; N product.sm ; B 22 0 748 697 ;
C 153 ; WX 736 ; N summation.sm ; B 45 0 684 697 ;
C 154 ; WX 617 ; N nexists ; B 46 -141 572 836 ;
-C 155 ; WX 580 ; N emptysetAlt ; B 32 -81 547 538 ;
-C 156 ; WX 775 ; N emptysetAlt2 ; B 65 -43 710 621 ;
+C 155 ; WX 580 ; N emptyset.alt1 ; B 32 -81 547 538 ;
+C 156 ; WX 775 ; N emptyset.alt2 ; B 65 -43 710 621 ;
C 157 ; WX 507 ; N slash ; B 65 -202 442 744 ;
+C 158 ; WX 350 ; N grave ; B 8 556 259 751 ;
+C 159 ; WX 350 ; N acute ; B 91 556 341 751 ;
+C 160 ; WX 350 ; N circumflex ; B -2 556 353 741 ;
+C 161 ; WX 350 ; N tilde ; B -17 576 367 710 ;
+C 162 ; WX 350 ; N macron ; B 1 595 349 671 ;
+C 163 ; WX 350 ; N breve ; B 16 556 335 728 ;
+C 164 ; WX 350 ; N dotacc ; B 108 565 244 701 ;
+C 165 ; WX 350 ; N ddotacc ; B -2 565 355 701 ;
+C 166 ; WX 350 ; N ring ; B 63 565 287 790 ;
+C 167 ; WX 350 ; N caron ; B -2 556 353 741 ;
+C 168 ; WX 577 ; N dddotacc ; B 42 565 535 681 ;
C 169 ; WX 477 ; N lvec ; B 18 604 460 825 ;
C 170 ; WX 477 ; N harpoonacc ; B 18 677 460 825 ;
C 171 ; WX 477 ; N lharpoonacc ; B 18 677 460 825 ;
C 172 ; WX 498 ; N lrvec ; B 18 604 481 825 ;
C 173 ; WX 477 ; N lrharpoonacc ; B 18 677 460 825 ;
C 174 ; WX 477 ; N vec ; B 18 604 460 825 ;
+C 175 ; WX 305 ; N uni20D7.rt ; B 0 -73 337 148 ;
+C 176 ; WX 226 ; N uni20D7.ex ; B 0 0 226 75 ;
+C 177 ; WX 351 ; N periodcentered.B ; B 75 148 276 349 ;
+C 178 ; WX 409 ; N periodcentered.BB ; B 96 143 313 360 ;
+C 179 ; WX 632 ; N openbullet.S ; B 81 13 552 483 ;
+C 180 ; WX 344 ; N bullet.SSS ; B 52 113 293 355 ;
+C 181 ; WX 433 ; N bullet.SS ; B 62 80 372 387 ;
+C 182 ; WX 530 ; N bullet.S ; B 78 46 453 421 ;
+C 183 ; WX 354 ; N prime.var ; B 52 42 306 495 ;
+C 184 ; WX 600 ; N plus ; B 35 0 565 533 ;
C 185 ; WX 397 ; N parenleft ; B 72 -213 356 755 ;
C 186 ; WX 397 ; N parenright ; B 72 -213 356 755 ;
C 187 ; WX 356 ; N bracketleft ; B 93 -203 315 744 ;
@@ -192,22 +212,12 @@ C 194 ; WX 350 ; N tildehat ; B -17 556 367 882 ;
C 195 ; WX 350 ; N hatbar ; B 1 552 348 831 ;
C 196 ; WX 350 ; N hattilde ; B -17 555 367 880 ;
C 197 ; WX 333 ; N hathat ; B -2 555 335 865 ;
-C 198 ; WX 333 ; N circumflex ; B -2 555 335 695 ;
-C 199 ; WX 333 ; N grave ; B 17 555 255 710 ;
-C 200 ; WX 333 ; N acute ; B 78 555 316 710 ;
-C 201 ; WX 333 ; N breve ; B 15 550 318 698 ;
-C 202 ; WX 333 ; N caron ; B -2 555 335 690 ;
-C 203 ; WX 437 ; N transpose ; B -16 0 416 564 ;
-C 208 ; WX 351 ; N cdotB ; B 75 148 276 349 ;
-C 209 ; WX 409 ; N cdotBB ; B 96 143 313 360 ;
-C 210 ; WX 632 ; N smcompB ; B 81 13 552 483 ;
-C 211 ; WX 344 ; N bulletSSS ; B 52 113 293 355 ;
-C 212 ; WX 433 ; N bulletSS ; B 62 80 372 387 ;
-C 213 ; WX 530 ; N bulletS ; B 78 46 453 421 ;
-C 214 ; WX 354 ; N prime2 ; B 52 42 306 495 ;
-C 219 ; WX 365 ; N dotacc ; B 111 570 256 716 ;
-C 220 ; WX 433 ; N ddotacc ; B 42 570 392 716 ;
-C 221 ; WX 637 ; N dddotacc ; B 42 570 596 716 ;
-C 222 ; WX 842 ; N ddddotacc ; B 42 570 800 716 ;
+C 198 ; WX 765 ; N ddddotacc ; B 42 565 725 681 ;
+C 199 ; WX 437 ; N transpose ; B -16 0 416 564 ;
+C 200 ; WX 643 ; N dblbracketleft ; B 93 -203 555 755 ;
+C 201 ; WX 664 ; N dblbracketright ; B 57 -203 519 755 ;
+C 202 ; WX 431 ; N hermitconj ; B -21 0 411 564 ;
+C 203 ; WX 791 ; N uni2AEB ; B 65 0 727 579 ;
+C 204 ; WX 791 ; N nPerp ; B 65 -104 727 643 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/newpx/afm/pxmiaX.afm b/fonts/newpx/afm/pxmiaX.afm
new file mode 100644
index 0000000000..c9c0221fb6
--- /dev/null
+++ b/fonts/newpx/afm/pxmiaX.afm
@@ -0,0 +1,203 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Sat Sep 7 14:04:40 2019
+FontName pxmiaX
+FullName pxmiaX
+FamilyName pxmiaX
+Weight Medium
+Notice (Version 3.1, GPL)
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 3.1
+EncodingScheme FontSpecific
+FontBBox -400 -289 1086 899
+CapHeight 697
+XHeight 450
+Ascender 642
+Descender -217
+StartCharMetrics 181
+C 0 ; WX 556 ; N uni0393 ; B 22 -3 536 692 ;
+C 1 ; WX 689 ; N uni0394 ; B 27 -4 662 697 ;
+C 2 ; WX 786 ; N uni0398 ; B 22 -20 764 709 ;
+C 3 ; WX 754 ; N uni039B ; B 17 -4 729 697 ;
+C 4 ; WX 693 ; N uni039E ; B 42 -4 651 689 ;
+C 5 ; WX 813 ; N uni03A0 ; B 25 -4 788 689 ;
+C 6 ; WX 685 ; N uni03A3 ; B 45 -4 643 689 ;
+C 7 ; WX 734 ; N uni03A5 ; B 3 -4 736 691 ;
+C 8 ; WX 746 ; N uni03A6 ; B 23 -4 723 689 ;
+C 9 ; WX 871 ; N uni03A8 ; B 18 -4 852 689 ;
+C 10 ; WX 825 ; N uni03A9 ; B 34 -6 791 704 ;
+C 11 ; WX 595 ; N uni03B1 ; B 44 -16 571 473 ;
+C 12 ; WX 513 ; N uni03B2 ; B 68 -283 461 680 ;
+C 13 ; WX 582 ; N uni03B3 ; B -31 -273 490 473 ;
+C 14 ; WX 498 ; N uni03B4 ; B 56 -16 469 702 ;
+C 15 ; WX 456 ; N uni03F5 ; B 24 -11 414 482 ;
+C 16 ; WX 505 ; N uni03B6 ; B 61 -149 510 712 ;
+C 17 ; WX 532 ; N uni03B7 ; B -11 -275 464 473 ;
+C 18 ; WX 614 ; N uni03B8 ; B 83 -16 556 702 ;
+C 19 ; WX 311 ; N uni03B9 ; B 93 -16 305 473 ;
+C 20 ; WX 572 ; N uni03BA ; B 13 -16 553 473 ;
+C 21 ; WX 619 ; N uni03BB ; B 86 -16 616 702 ;
+C 22 ; WX 611 ; N uni03BC ; B 89 -286 567 473 ;
+C 23 ; WX 498 ; N uni03BD ; B -24 -7 444 473 ;
+C 24 ; WX 548 ; N uni03BE ; B 65 -148 508 701 ;
+C 25 ; WX 654 ; N uni03C0 ; B 27 -15 628 467 ;
+C 26 ; WX 567 ; N uni03C1 ; B 83 -284 491 473 ;
+C 27 ; WX 553 ; N uni03C3 ; B 35 -15 487 474 ;
+C 28 ; WX 520 ; N uni03C4 ; B 35 -16 439 464 ;
+C 29 ; WX 548 ; N uni03C5 ; B 13 -12 491 471 ;
+C 30 ; WX 666 ; N uni03D5 ; B 27 -289 614 705 ;
+C 31 ; WX 609 ; N uni03C7 ; B 51 -193 548 479 ;
+C 32 ; WX 696 ; N uni03C8 ; B 6 -281 627 682 ;
+C 33 ; WX 716 ; N uni03C9 ; B 36 -12 660 463 ;
+C 34 ; WX 494 ; N uni03B5 ; B 72 -15 428 473 ;
+C 35 ; WX 621 ; N uni03D1 ; B 62 -15 583 702 ;
+C 36 ; WX 716 ; N uni03D6 ; B 41 -12 672 529 ;
+C 37 ; WX 479 ; N uni03F1 ; B 72 -260 462 474 ;
+C 38 ; WX 502 ; N uni03C2 ; B 43 -155 431 463 ;
+C 39 ; WX 682 ; N uni03C6 ; B 8 -277 607 485 ;
+C 40 ; WX 528 ; N uni03BD.alt ; B 25 -7 497 473 ;
+C 41 ; WX 660 ; N u1D718 ; B 72 -17 609 483 ;
+C 42 ; WX 693 ; N uni03F0 ; B 37 -17 656 483 ;
+C 43 ; WX 689 ; N uni2207 ; B 27 -14 662 687 ;
+C 44 ; WX 278 ; N colon ; B 81 -11 192 459 ;
+C 45 ; WX 278 ; N semicolon ; B 80 -141 219 459 ;
+C 46 ; WX 278 ; N slash ; B -9 -14 287 676 ;
+C 47 ; WX 444 ; N question ; B 68 -8 414 676 ;
+C 48 ; WX 488 ; N u1D708 ; B 37 -7 515 473 ;
+C 49 ; WX 512 ; N u1D454 ; B 9 -276 502 482 ;
+C 50 ; WX 460 ; N u1D466 ; B -4 -207 473 441 ;
+C 51 ; WX 393 ; N u1D463 ; B 42 -11 375 441 ;
+C 52 ; WX 619 ; N uni019B.alt ; B 32 -16 574 702 ;
+C 54 ; WX 669 ; N uni2284 ; B 55 -107 615 649 ;
+C 55 ; WX 669 ; N uni2285 ; B 55 -107 615 649 ;
+C 56 ; WX 564 ; N uni2209 ; B 55 -107 510 649 ;
+C 57 ; WX 564 ; N uni220C ; B 55 -107 510 649 ;
+C 58 ; WX 891 ; N uni2254 ; B 85 23 827 518 ;
+C 59 ; WX 891 ; N uni2255 ; B 65 23 807 518 ;
+C 60 ; WX 669 ; N uni2260 ; B 65 -55 604 596 ;
+C 61 ; WX 669 ; N equal ; B 65 134 604 406 ;
+C 62 ; WX 564 ; N braceleft ; B 130 -120 485 765 ;
+C 63 ; WX 564 ; N braceright ; B 130 -118 485 767 ;
+C 64 ; WX 542 ; N partialdiff ; B 37 -9 480 732 ;
+C 65 ; WX 698 ; N u1D504 ; B 20 -4 675 721 ;
+C 66 ; WX 802 ; N u1D505 ; B 60 -7 747 720 ;
+C 67 ; WX 646 ; N uni212D ; B 53 -4 629 719 ;
+C 68 ; WX 802 ; N u1D507 ; B 69 -4 746 708 ;
+C 69 ; WX 646 ; N u1D508 ; B 54 -4 629 719 ;
+C 70 ; WX 698 ; N u1D509 ; B 74 -157 663 715 ;
+C 71 ; WX 802 ; N u1D50A ; B 88 -4 740 721 ;
+C 72 ; WX 698 ; N uni210C ; B 29 -166 657 719 ;
+C 73 ; WX 646 ; N Ifraktur ; B 12 -4 594 721 ;
+C 74 ; WX 646 ; N u1D50D ; B -1 -162 586 719 ;
+C 75 ; WX 698 ; N u1D50E ; B 2 -4 659 716 ;
+C 76 ; WX 646 ; N u1D50F ; B 37 -4 603 719 ;
+C 77 ; WX 958 ; N u1D510 ; B 11 -4 936 714 ;
+C 78 ; WX 749 ; N u1D511 ; B 16 -6 716 716 ;
+C 79 ; WX 802 ; N u1D512 ; B 42 -4 754 707 ;
+C 80 ; WX 802 ; N u1D513 ; B 37 -163 715 721 ;
+C 81 ; WX 802 ; N u1D514 ; B 41 -4 800 706 ;
+C 82 ; WX 749 ; N Rfraktur ; B 17 -4 702 717 ;
+C 83 ; WX 802 ; N u1D516 ; B 103 -4 757 706 ;
+C 84 ; WX 698 ; N u1D517 ; B 42 -4 688 707 ;
+C 85 ; WX 698 ; N u1D518 ; B 49 -4 683 720 ;
+C 86 ; WX 802 ; N u1D519 ; B 48 -4 705 714 ;
+C 87 ; WX 958 ; N u1D51A ; B 25 2 931 713 ;
+C 88 ; WX 646 ; N u1D51B ; B 29 -4 629 719 ;
+C 89 ; WX 749 ; N u1D51C ; B 19 -165 641 719 ;
+C 90 ; WX 698 ; N uni2128 ; B -7 -171 608 709 ;
+C 91 ; WX 510 ; N uni210F ; B 20 -9 481 733 ;
+C 92 ; WX 510 ; N uni210F.var ; B 20 -9 481 733 ;
+C 93 ; WX 619 ; N uni019B ; B 32 -16 574 702 ;
+C 94 ; WX 667 ; N uni01B5 ; B 15 -3 638 692 ;
+C 95 ; WX 778 ; N uni212B ; B 15 -3 756 899 ;
+C 96 ; WX 505 ; N uni2107 ; B 34 -14 470 672 ;
+C 97 ; WX 479 ; N u1D51E ; B 67 -6 469 504 ;
+C 98 ; WX 479 ; N u1D51F ; B 23 -9 436 683 ;
+C 99 ; WX 375 ; N u1D520 ; B 85 -4 356 500 ;
+C 100 ; WX 479 ; N u1D521 ; B 54 -4 447 696 ;
+C 101 ; WX 427 ; N u1D522 ; B 78 -5 392 503 ;
+C 102 ; WX 323 ; N u1D523 ; B 27 -162 293 719 ;
+C 103 ; WX 479 ; N u1D524 ; B 54 -163 443 505 ;
+C 104 ; WX 479 ; N u1D525 ; B 25 -165 438 696 ;
+C 105 ; WX 271 ; N u1D526 ; B 32 -4 258 703 ;
+C 106 ; WX 271 ; N u1D527 ; B 32 -169 229 705 ;
+C 107 ; WX 323 ; N u1D528 ; B 21 -4 308 702 ;
+C 108 ; WX 271 ; N u1D529 ; B 42 -5 265 696 ;
+C 109 ; WX 802 ; N u1D52A ; B 24 -4 774 499 ;
+C 110 ; WX 531 ; N u1D52B ; B 16 -4 518 499 ;
+C 111 ; WX 479 ; N u1D52C ; B 69 -4 447 502 ;
+C 112 ; WX 531 ; N u1D52D ; B 68 -161 496 505 ;
+C 113 ; WX 479 ; N u1D52E ; B 66 -168 455 499 ;
+C 114 ; WX 375 ; N u1D52F ; B 17 -4 362 504 ;
+C 115 ; WX 427 ; N u1D530 ; B 56 -6 409 500 ;
+C 116 ; WX 323 ; N u1D531 ; B 19 -6 293 696 ;
+C 117 ; WX 531 ; N u1D532 ; B 25 -4 513 501 ;
+C 118 ; WX 479 ; N u1D533 ; B 28 -4 434 496 ;
+C 119 ; WX 749 ; N u1D534 ; B 46 -4 708 501 ;
+C 120 ; WX 427 ; N u1D535 ; B 31 -4 402 503 ;
+C 121 ; WX 531 ; N u1D536 ; B 36 -163 465 505 ;
+C 122 ; WX 375 ; N u1D537 ; B 39 -165 344 505 ;
+C 123 ; WX 271 ; N u1D526.dtls ; B 32 -4 258 501 ;
+C 124 ; WX 271 ; N u1D527.dtls ; B 32 -169 229 504 ;
+C 127 ; WX 260 ; N tie ; B 222 517 613 675 ;
+C 129 ; WX 864 ; N u1D538 ; B 16 0 848 709 ;
+C 130 ; WX 817 ; N u1D539 ; B 18 0 740 696 ;
+C 131 ; WX 701 ; N uni2102 ; B 29 -15 666 711 ;
+C 132 ; WX 864 ; N u1D53B ; B 17 0 826 696 ;
+C 133 ; WX 747 ; N u1D53C ; B 13 0 733 696 ;
+C 134 ; WX 690 ; N u1D53D ; B 13 0 680 696 ;
+C 135 ; WX 759 ; N u1D53E ; B 34 -15 746 711 ;
+C 136 ; WX 864 ; N uni210D ; B 20 0 844 696 ;
+C 137 ; WX 455 ; N u1D540 ; B 19 0 437 696 ;
+C 138 ; WX 514 ; N u1D541 ; B 11 -15 494 696 ;
+C 139 ; WX 864 ; N u1D542 ; B 36 0 866 696 ;
+C 140 ; WX 747 ; N u1D543 ; B 13 0 734 696 ;
+C 141 ; WX 1040 ; N u1D544 ; B 13 0 1013 696 ;
+C 142 ; WX 864 ; N uni2115 ; B 13 -12 849 696 ;
+C 143 ; WX 759 ; N u1D546 ; B 36 -15 724 711 ;
+C 144 ; WX 690 ; N uni2119 ; B 17 0 675 696 ;
+C 145 ; WX 759 ; N uni211A ; B 36 -187 737 711 ;
+C 146 ; WX 806 ; N uni211D ; B 18 0 798 696 ;
+C 147 ; WX 584 ; N u1D54A ; B 44 -15 517 711 ;
+C 148 ; WX 747 ; N u1D54B ; B 18 0 729 696 ;
+C 149 ; WX 864 ; N u1D54C ; B 15 -16 847 696 ;
+C 150 ; WX 864 ; N u1D54D ; B 17 -12 838 696 ;
+C 151 ; WX 1098 ; N u1D54E ; B 5 -12 1086 696 ;
+C 152 ; WX 864 ; N u1D54F ; B 11 0 846 696 ;
+C 153 ; WX 759 ; N u1D550 ; B 23 0 740 696 ;
+C 154 ; WX 769 ; N uni2124 ; B 9 0 754 696 ;
+C 165 ; WX 631 ; N u1D55C ; B 7 0 636 719 ;
+C 186 ; WX 333 ; N caron ; B 11 507 322 674 ;
+C 187 ; WX 333 ; N breve ; B 26 507 307 664 ;
+C 188 ; WX 749 ; N uni2AEB ; B 65 0 684 579 ;
+C 189 ; WX 749 ; N uni2AEB.not ; B 65 -78 684 649 ;
+C 190 ; WX 283 ; N u1D6A4.up ; B 25 -2 258 442 ;
+C 191 ; WX 332 ; N u1D6A5.up ; B 12 -223 256 442 ;
+C 219 ; WX 333 ; N tilde ; B 1 532 331 638 ;
+C 220 ; WX 0 ; N dotaccent ; B -286 551 -174 660 ;
+C 221 ; WX 333 ; N macron ; B 11 547 322 601 ;
+C 222 ; WX 333 ; N ring ; B 67 512 266 711 ;
+C 223 ; WX 333 ; N circumflex ; B 11 507 322 674 ;
+C 224 ; WX 0 ; N uni0300 ; B -338 521 -176 674 ;
+C 225 ; WX 0 ; N uni0301 ; B -284 521 -121 674 ;
+C 226 ; WX 0 ; N uni0302 ; B -371 521 -89 674 ;
+C 227 ; WX 0 ; N uni0303 ; B -386 533 -65 642 ;
+C 228 ; WX 0 ; N uni0304 ; B -375 555 -85 610 ;
+C 229 ; WX 0 ; N uni0305 ; B -400 555 0 610 ;
+C 230 ; WX 0 ; N uni0306 ; B -377 529 -84 683 ;
+C 231 ; WX 0 ; N uni0307 ; B -286 551 -174 660 ;
+C 232 ; WX 0 ; N uni0308 ; B -396 551 -65 661 ;
+C 233 ; WX 0 ; N uni0309 ; B -307 521 -125 729 ;
+C 234 ; WX 0 ; N uni030A ; B -333 530 -128 729 ;
+C 235 ; WX 0 ; N uni030B ; B -325 521 -35 674 ;
+C 236 ; WX 0 ; N uni030C ; B -371 525 -89 678 ;
+C 251 ; WX 569 ; N dblbracketleft ; B 83 -284 478 825 ;
+C 252 ; WX 591 ; N dblbracketright ; B 47 -284 440 825 ;
+C 253 ; WX 669 ; N plus ; B 63 -2 609 544 ;
+C 254 ; WX 333 ; N grave ; B 19 507 242 678 ;
+C 255 ; WX 333 ; N acute ; B 93 507 317 678 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newpx/afm/pxsys.afm b/fonts/newpx/afm/pxsys.afm
index 267459d009..25583da572 100644
--- a/fonts/newpx/afm/pxsys.afm
+++ b/fonts/newpx/afm/pxsys.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20161003
-Comment Creation Date: Tue May 30 16:37:01 2017
+Comment Generated by FontForge 20190801
+Comment Creation Date: Tue Sep 10 22:21:56 2019
FontName pxsys
FullName pxsys
FamilyName pxsys
@@ -13,8 +13,7 @@ UnderlineThickness 50
Version 1.0
EncodingScheme FontSpecific
FontBBox -49 -994 1308 912
-CapHeight 728
-StartCharMetrics 194
+StartCharMetrics 205
C 0 ; WX 669 ; N minus ; B 65 241 604 300 ;
C 1 ; WX 250 ; N periodcentered ; B 67 213 183 329 ;
C 2 ; WX 669 ; N multiply ; B 59 -5 611 547 ;
@@ -70,7 +69,7 @@ C 51 ; WX 564 ; N owner ; B 55 8 509 533 ;
C 52 ; WX 667 ; N triangle ; B 44 0 623 577 ;
C 53 ; WX 667 ; N triangleinv ; B 44 0 623 577 ;
C 54 ; WX 0 ; N negationslash ; B 131 -171 539 712 ;
-C 55 ; WX 0 ; N mapsto ; B 65 55 179 486 ;
+C 55 ; WX 0 ; N uni21A6.endl ; B 65 55 179 486 ;
C 56 ; WX 617 ; N universal ; B 26 -15 592 698 ;
C 57 ; WX 617 ; N existential ; B 46 0 572 697 ;
C 58 ; WX 673 ; N logicalnot ; B 65 88 608 360 ;
@@ -80,32 +79,32 @@ C 61 ; WX 740 ; N Ifractur ; B 78 -19 643 780 ;
C 62 ; WX 749 ; N latticetop ; B 65 0 684 579 ;
C 63 ; WX 749 ; N perpendicular ; B 65 0 684 579 ;
C 64 ; WX 673 ; N aleph ; B 32 -13 641 746 ;
-C 65 ; WX 916 ; N A ; B 7 -41 908 692 ;
-C 66 ; WX 756 ; N B ; B 7 -23 748 720 ;
-C 67 ; WX 682 ; N C ; B 7 -52 675 704 ;
-C 68 ; WX 905 ; N D ; B 7 -31 898 707 ;
-C 69 ; WX 655 ; N E ; B 7 -19 647 719 ;
-C 70 ; WX 704 ; N F ; B 7 -69 897 742 ;
-C 71 ; WX 741 ; N G ; B 7 -176 734 715 ;
-C 72 ; WX 922 ; N H ; B 7 -36 1018 758 ;
-C 73 ; WX 684 ; N I ; B 7 -26 677 734 ;
-C 74 ; WX 816 ; N J ; B -21 -157 908 714 ;
-C 75 ; WX 838 ; N K ; B 7 -29 939 734 ;
-C 76 ; WX 788 ; N L ; B 7 -91 781 725 ;
-C 77 ; WX 1137 ; N M ; B 7 -46 1129 741 ;
-C 78 ; WX 865 ; N N ; B 7 -40 959 720 ;
-C 79 ; WX 740 ; N O ; B 7 -26 733 753 ;
-C 80 ; WX 746 ; N P ; B 7 -39 746 714 ;
-C 81 ; WX 740 ; N Q ; B 7 -59 733 753 ;
-C 82 ; WX 716 ; N R ; B 7 -23 722 727 ;
-C 83 ; WX 715 ; N S ; B 7 -29 707 738 ;
-C 84 ; WX 714 ; N T ; B 7 -29 875 717 ;
-C 85 ; WX 944 ; N U ; B 7 -34 987 731 ;
-C 86 ; WX 939 ; N V ; B 7 -39 955 712 ;
-C 87 ; WX 1265 ; N W ; B 7 -25 1292 734 ;
-C 88 ; WX 777 ; N X ; B 7 -31 769 729 ;
-C 89 ; WX 839 ; N Y ; B 7 -72 855 759 ;
-C 90 ; WX 911 ; N Z ; B 7 -116 903 743 ;
+C 65 ; WX 916 ; N u1D49C ; B 7 -41 908 692 ;
+C 66 ; WX 756 ; N uni212C ; B 7 -23 748 720 ;
+C 67 ; WX 682 ; N u1D49E ; B 7 -52 675 704 ;
+C 68 ; WX 905 ; N u1D49F ; B 7 -31 898 707 ;
+C 69 ; WX 655 ; N uni2130 ; B 7 -19 647 719 ;
+C 70 ; WX 704 ; N uni2131 ; B 7 -69 897 742 ;
+C 71 ; WX 741 ; N u1D4A2 ; B 7 -176 734 715 ;
+C 72 ; WX 922 ; N uni210B ; B 7 -36 1018 758 ;
+C 73 ; WX 684 ; N uni2110 ; B 7 -26 677 734 ;
+C 74 ; WX 816 ; N u1D4A5 ; B -21 -157 908 714 ;
+C 75 ; WX 838 ; N u1D4A6 ; B 7 -29 939 734 ;
+C 76 ; WX 788 ; N uni2112 ; B 7 -91 781 725 ;
+C 77 ; WX 1137 ; N uni2133 ; B 7 -46 1129 741 ;
+C 78 ; WX 865 ; N u1D4A9 ; B 7 -40 959 720 ;
+C 79 ; WX 740 ; N u1D4AA ; B 7 -26 733 753 ;
+C 80 ; WX 746 ; N u1D4AB ; B 7 -39 746 714 ;
+C 81 ; WX 740 ; N u1D4AC ; B 7 -59 733 753 ;
+C 82 ; WX 716 ; N uni211B ; B 7 -23 722 727 ;
+C 83 ; WX 715 ; N u1D4AE ; B 7 -29 707 738 ;
+C 84 ; WX 714 ; N u1D4AF ; B 7 -29 875 717 ;
+C 85 ; WX 944 ; N u1D4B0 ; B 7 -34 987 731 ;
+C 86 ; WX 939 ; N u1D4B1 ; B 7 -39 955 712 ;
+C 87 ; WX 1265 ; N u1D4B2 ; B 7 -25 1292 734 ;
+C 88 ; WX 777 ; N u1D4B3 ; B 7 -31 769 729 ;
+C 89 ; WX 839 ; N u1D4B4 ; B 7 -72 855 759 ;
+C 90 ; WX 911 ; N u1D4B5 ; B 7 -116 903 743 ;
C 91 ; WX 688 ; N union ; B 65 0 623 603 ;
C 92 ; WX 688 ; N intersection ; B 65 0 623 603 ;
C 93 ; WX 688 ; N unionmulti ; B 65 0 623 603 ;
@@ -170,15 +169,36 @@ C 151 ; WX 493 ; N uni2A16.upsm ; B 47 -167 427 753 ;
C 152 ; WX 765 ; N product.sm ; B 25 0 740 697 ;
C 153 ; WX 705 ; N summation.sm ; B 45 0 659 697 ;
C 154 ; WX 617 ; N nexists ; B 46 -141 572 836 ;
-C 155 ; WX 526 ; N emptysetAlt ; B 25 -51 501 514 ;
-C 156 ; WX 733 ; N emptysetAlt2 ; B 65 -13 668 590 ;
+C 155 ; WX 526 ; N emptyset.alt1 ; B 25 -51 501 514 ;
+C 156 ; WX 733 ; N emptyset.alt2 ; B 65 -13 668 590 ;
C 157 ; WX 484 ; N slash ; B 65 -203 419 744 ;
+C 158 ; WX 350 ; N grave ; B 8 556 259 751 ;
+C 159 ; WX 350 ; N acute ; B 91 556 341 751 ;
+C 160 ; WX 350 ; N circumflex ; B -2 556 353 741 ;
+C 161 ; WX 350 ; N tilde ; B -17 576 367 710 ;
+C 162 ; WX 350 ; N macron ; B 1 595 349 671 ;
+C 163 ; WX 350 ; N breve ; B 16 556 335 728 ;
+C 164 ; WX 350 ; N dotacc ; B 108 565 244 701 ;
+C 165 ; WX 350 ; N ddotacc ; B -2 565 355 701 ;
+C 166 ; WX 350 ; N ring ; B 63 565 287 790 ;
+C 167 ; WX 350 ; N caron ; B -2 556 353 741 ;
+C 168 ; WX 577 ; N dddotacc ; B 42 565 535 681 ;
C 169 ; WX 477 ; N lvec ; B 18 578 460 799 ;
C 170 ; WX 477 ; N harpoonacc ; B 18 659 460 799 ;
C 171 ; WX 477 ; N lharpoonacc ; B 18 659 460 799 ;
C 172 ; WX 477 ; N lrvec ; B 18 578 460 799 ;
C 173 ; WX 477 ; N lrharpoonacc ; B 18 659 460 799 ;
C 174 ; WX 477 ; N vec ; B 18 578 460 799 ;
+C 175 ; WX 294 ; N uni20D7.rt ; B 0 -81 326 140 ;
+C 176 ; WX 184 ; N uni20D7.ex ; B 0 0 184 58 ;
+C 177 ; WX 351 ; N periodcentered.B ; B 106 180 244 318 ;
+C 178 ; WX 409 ; N periodcentered.BB ; B 124 172 284 332 ;
+C 179 ; WX 443 ; N openbullet.S ; B 47 74 396 422 ;
+C 180 ; WX 289 ; N bullet.SSS ; B 33 121 257 346 ;
+C 181 ; WX 368 ; N bullet.SS ; B 41 92 327 377 ;
+C 182 ; WX 447 ; N bullet.S ; B 51 60 397 407 ;
+C 183 ; WX 351 ; N prime.var ; B 53 47 299 495 ;
+C 184 ; WX 669 ; N plus ; B 63 -2 609 544 ;
C 185 ; WX 346 ; N parenleft ; B 60 -213 314 755 ;
C 186 ; WX 346 ; N parenright ; B 32 -213 286 755 ;
C 187 ; WX 350 ; N bracketleft ; B 93 -203 315 744 ;
@@ -192,22 +212,12 @@ C 194 ; WX 350 ; N tildehat ; B 1 544 348 800 ;
C 195 ; WX 350 ; N hatbar ; B 12 557 339 780 ;
C 196 ; WX 350 ; N hattilde ; B 1 557 348 819 ;
C 197 ; WX 350 ; N hathat ; B 19 557 331 799 ;
-C 198 ; WX 350 ; N circumflex ; B 19 557 331 679 ;
-C 199 ; WX 333 ; N grave ; B 31 555 255 695 ;
-C 200 ; WX 333 ; N acute ; B 78 555 302 695 ;
-C 201 ; WX 350 ; N breve ; B 34 557 316 680 ;
-C 202 ; WX 350 ; N caron ; B 19 556 331 678 ;
-C 203 ; WX 436 ; N transpose ; B -13 0 419 564 ;
-C 208 ; WX 351 ; N cdotB ; B 106 180 244 318 ;
-C 209 ; WX 409 ; N cdotBB ; B 124 172 284 332 ;
-C 210 ; WX 443 ; N smcompB ; B 47 74 396 422 ;
-C 211 ; WX 289 ; N bulletSSS ; B 33 121 257 346 ;
-C 212 ; WX 368 ; N bulletSS ; B 41 92 327 377 ;
-C 213 ; WX 447 ; N bulletS ; B 51 60 397 407 ;
-C 214 ; WX 351 ; N prime2 ; B 53 47 299 495 ;
-C 219 ; WX 350 ; N dotacc ; B 118 546 234 662 ;
-C 220 ; WX 389 ; N ddotacc ; B 42 546 347 662 ;
-C 221 ; WX 576 ; N dddotacc ; B 42 546 535 662 ;
-C 222 ; WX 766 ; N ddddotacc ; B 42 546 724 662 ;
+C 198 ; WX 729 ; N ddddotacc ; B 40 537 689 647 ;
+C 199 ; WX 436 ; N transpose ; B -13 0 419 564 ;
+C 200 ; WX 555 ; N dblbracketleft ; B 93 -256 468 797 ;
+C 201 ; WX 574 ; N dblbracketright ; B 57 -256 430 797 ;
+C 202 ; WX 431 ; N hermitconj ; B -19 0 413 564 ;
+C 203 ; WX 749 ; N uni2AEB ; B 65 0 684 579 ;
+C 204 ; WX 749 ; N uni2AEB.not ; B 65 -78 684 649 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/newpx/doc/CnangesInV1.4.txt b/fonts/newpx/doc/CnangesInV1.4.txt
new file mode 100644
index 0000000000..f4ac551f30
--- /dev/null
+++ b/fonts/newpx/doc/CnangesInV1.4.txt
@@ -0,0 +1,49 @@
+Files changed in Newpx as of version 1.4 (2019/09/09)
+
+MATH
+
+NewPXMI.{pfb,afm,tfm} : math italics, LPPL licensed (new)
+NewPXBMI.{pfb,afm,tfm} : bold math italics, LPPL licensed (new)
+NewPXMI_gnu.{pfb,afm,tfm} : math italics, GNU licensed (new)
+NewPXBMI_gnu.{pfb,afm,tfm} : bold math italics, GNU licensed (new)
+stsscr.{pfb,afm,tfm} : old STIX script alphabets OFL (new)
+txmiaSTbb.{pfb,afm,tfm} : old STIX BBB alphabet OFL (new)
+txbmiaSTbb.{pfb,afm,tfm} : old STIX bold BBB alphabet OFL (new)
+px[b]miaX.{pfb,afm,tfm} : extended and modified px[b]mia
+px[b]sys.{pfb,afm,tfm} : modified px[b]sys
+zpl[b]mi.{tfm,vf} : letters
+zpl[b[sy.{tfm,vf} : symbols
+zpl[b]mia.{tfm,vf} : lettersA
+
+TEXT
+
+The npxsups*.tfm were completely revised so as to pass PDF/A-1b validation.
+npxsups-Regular.{pfb,afm} LPPL (New)
+npxsups-Italic.{pfb,afm} LPPL (New)
+npxsups-Bold.{pfb,afm} LPPL (New)
+npxsups-BoldItalic.{pfb,afm} LPPL (New)
+npxsups_OT1.enc (New)
+npxsups_T1.enc (New)
+npxsups_LY1.enc (New)
+
+The tfm files were generated using
+
+afm2tfm npxsups-Regular -a -T npxsups_OT1.enc -v npxsups-Regular-ot1 npxsups-Regular-ot1
+afm2tfm npxsups-Regular -a -T npxsups_T1.enc -v npxsups-Regular-t1 npxsups-Regular-t1
+afm2tfm npxsups-Regular -a -T npxsups_LY1.enc -v npxsups-Regular-ly1 npxsups-Regular-ly1
+afm2tfm npxsups-Italic -a -T npxsups_OT1.enc -v npxsups-Italic-ot1 npxsups-Italic-ot1
+afm2tfm npxsups-Italic -a -T npxsups_T1.enc -v npxsups-Italic-t1 npxsups-Italic-t1
+afm2tfm npxsups-Italic -a -T npxsups_LY1.enc -v npxsups-Italic-ly1 npxsups-Italic-ly1
+afm2tfm npxsups-Bold -a -T npxsups_OT1.enc -v npxsups-Bold-ot1 npxsups-Bold-ot1
+afm2tfm npxsups-Bold -a -T npxsups_T1.enc -v npxsups-Bold-t1 npxsups-Bold-t1
+afm2tfm npxsups-Bold -a -T npxsups_LY1.enc -v npxsups-Bold-ly1 npxsups-Bold-ly1
+afm2tfm npxsups-BoldItalic -a -T npxsups_OT1.enc -v npxsups-BoldItalic-ot1 npxsups-BoldItalic-ot1
+afm2tfm npxsups-BoldItalic -a -T npxsups_T1.enc -v npxsups-BoldItalic-t1 npxsups-BoldItalic-t1
+afm2tfm npxsups-BoldItalic -a -T npxsups_LY1.enc -v npxsups-BoldItalic-ly1 npxsups-BoldItalic-ly1
+#
+for f in npxsups*.vpl; do /bin/cp -fp $f ${f%.*}.pl; done
+for f in npxsups*.pl; do pltotf $f ${f%.*}.tfm; done
+
+MAP
+
+newpx.map was revised to relect the changes above. \ No newline at end of file
diff --git a/fonts/newpx/doc/newpxdoc.pdf b/fonts/newpx/doc/newpxdoc.pdf
index 94e091de7d..8381b1ae57 100644
--- a/fonts/newpx/doc/newpxdoc.pdf
+++ b/fonts/newpx/doc/newpxdoc.pdf
Binary files differ
diff --git a/fonts/newpx/doc/newpxdoc.tex b/fonts/newpx/doc/newpxdoc.tex
index 28f800b1cf..756509ac5b 100644
--- a/fonts/newpx/doc/newpxdoc.tex
+++ b/fonts/newpx/doc/newpxdoc.tex
@@ -2,6 +2,15 @@
\documentclass[11pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage[parfill]{parskip}% Begin paragraphs with an empty line rather than an indent
+\pdfmapfile{=newtx.map}
+\pdfmapfile{=newpx.map}
+\pdfcompresslevel=0
+\pdfgentounicode=1
+\input glyphtounicode.tex
+\usepackage{pdfx} % v 1.6.4 or higher
+\InputIfFileExists{glyphtounicode-cmr.tex}{}{}
+\InputIfFileExists{glyphtounicode-ntx.tex}{}{}
+\usepackage{fonttable}
\usepackage{amsthm}
\newtheoremstyle{oldplain}
{\topsep} % ABOVESPACE
@@ -376,4 +385,126 @@ Variant 2 & \verb|$\vvmathbb{R}}$| $\vvmathbb{R}$& \verb|{\boldmath $\vvmathbb{R
For further information on the changes made to \texttt{newpxmath} 1.3, see the appendix to the documentation for \texttt{newtxmath} 1.5.
+\def\jj{\mkern-3mu j}
+
+\section{Appendix 1: Changes made in version 1.40}
+Versions of {\tt newpx} dated from September, 2019 (1.40 for {\tt newpxmath} make some quite substantial changes, mostly to math mode.
+
+\section{Goals}
+Spurred by work of Ross Moore to provide means of generating archivable pdf using {\tt pdflatex}, the main goal was to change {\tt newpx} and {\tt newtx} to meet the requirements for satisfying the {\tt PDF/A-1b} standards by using an appropriate preamble involving the {\tt pdfx} package and other unicode mapping files. Making these changes gave me the opportunity to organize the source files to make them more manageable in future revisions.
+
+A further goal whose time seemed ripe was to rework the spacing of math letters, both Roman and Greek, so they behaved better in superscripts and subscripts. This did not turn out to be so easy. The problem is illustrated by math italic j. If you don't give it enough extra space on the left, it will likely collide with the D in rendering \verb|$D^j$|. On the other hand, if you do give it enough space on the left, it will look bad as a subscript, appearing too far right.
+
+A final goal was to make better use of the remaining space in some of the math fonts by placing some math alphabets in them, avoiding perhaps a waste of those precious sixteen math families.
+
+\section{The important changes}
+The following changes were made to both {\tt newtx} and {\tt newpx}.
+
+\subsection{Archivability}
+Some of the individual font files from which the math fonts are built turned out to have some fairly minor structural issues. These have all been corrected. The more major issue was the lack of unicode mapping for all characters in the fonts. For the symbol and math extension fonts, this issue was largely solved by Ross Moore's {\tt glyphtounicode} files that are now accessible as part of TeXLive and MiKTeX. The main problem was the math alphabets like math italic, bold math italic, upright Greek and slanted Greek, all of which have now been assigned their own unicode points. For all of these, I constructed new fonts using unicode names for the glyphs, then made \textsf{fontinst} scripts that renamed those unicode values to the original simple names as used in the encoding files so that I could use my old encoding and adjustment files. This exercise has now been carried out for {\tt newtxmath}, {\tt newpxmath}, {\tt newtxmath/libertine} and {\tt newtxmath/xcharter.} Each of these can now be considered to have an ``enhanced'' status that allows them to share all the new assets described below. The other packages which may be specified as an option to {\tt newtxmath} (e.g., {\tt cochineal, baskervillef}) must be considered for the moment to be ``unenhanced'' and able to share only some of the new assets. In particular, only the enhanced items can generate archivable pdf.
+
+Also modified were the {\tt sups} fonts in {newpxtext}, where the main issue was unicode mapping. Superior number and some superior letters do have assigned unicode values, but in may cases a more creative approach was needed, and provided once again by Ross Moore. I rebuilt the superior font files using those unicode names, solving that particular problem.
+
+Here is a sample preamble showing the elements you will need to specify to generate a pdf satisfying the PDF/A-1b standards, as verified by Adobe Acrobat Pro. (Other verification processes may yield different outcomes.)
+\begin{verbatim}
+\documentclass[noamsfonts]{amsart} % save 2 math families
+\pdfcompresslevel=0
+\pdfgentounicode=1
+\input glyphtounicode.tex
+\usepackage{pdfx} % v 1.6.4 or higher
+\InputIfFileExists{glyphtounicode-cmr.tex}{}{}
+\InputIfFileExists{glyphtounicode-ntx.tex}{}{}
+\usepackage{newpxtext} %T1 is default encoding
+\usepackage[scaled=0.95]{inconsolata} % typewriter
+%\usepackage[leqno]{amsmath}
+\usepackage{amsthm}
+\usepackage[vvarbb]{newpxmath} % vvarbb gives STIX Bbb
+\end{verbatim}
+
+Version 1.6.3 of {\tt pdfx} from February 2019 mishandles math accents. A fix is now available and will become part of the upcoming {\tt pdfx} v1.6.4.
+
+\subsection{Glyph spacing changes} I reworked the math italics to improve the rendering of some superscripts. This affects (a) parentheses, brackets and braces to inhibit clashes; (b) glyphs like j, f, p, y, \verb|\rho|, \verb|\beta| and \verb|\mu| where a long tail could pose problems intersecting with other glyphs; (c) glyphs like such as D, Q and \verb|\Phi| that are round on the right, where interference is most likely to occur with a superscript. Increasing the left side-bearing of j, etc., helps with superscripts but creates an ugly gap when used as subscripts.
+
+
+ The {\tt subscriptcorrection} option to {\tt newpxmath} has been corrected and enhanced so that it now offers a partial solution the subscript spacing problem. I regret that this option is incompatible with xy-pic, both depending on redefining \verb|_| as an active character. {\tt Newpxmath} will detect if the {\tt xy} package is loaded and disable {\tt subscriptcorrection} if so. You would have to correct such issues by manually inserting a negative \verb|\mkern|. For example, you might put in your preamble something like
+ \begin{verbatim}
+\def\jj{\mkern-3mu j}
+\end{verbatim}
+and then use \verb|$x_{\jj}$| instead of \verb|$x_j$|, turning $x_j$ into $x_{\jj}$.
+
+If you do enable {\tt subscriptcorrection}, there is a default correction table in the {\tt sty} file, but the sty file also looks for a file named, {\tt newpx.subs}. There is already such a file located in the {\tt newpx} distribution in the \verb|tex/latex/newpx| folder. (The contents of this file are also listed at the end of this appendix, from which they may be more easily copied.) If you wish to make changes to this file, copy the file to your home TeX folder where it will be found by TeX before the one in the distribution. (The contents of this file are also listed at the end of this appendix, from which they may be more easily copied.) The entries in the file are lines like
+\begin{verbatim}
+{j}{-3}
+\end{verbatim}
+each of which will have the same effect as the above macro if the first item in the subscript is j. You can also specify Greek letters with lines like
+\begin{verbatim}
+{\beta}{-1.5}
+\end{verbatim}
+
+\subsection{New glyphs added} Math family 1 {\tt (letters)} has been extended from 128 slots to 256, retaining the {\tt OML} encoding of the first 128. Most of additional slots have been allocated to a script font from the old STIX collection and an upright modification of that font.
+By default, \verb|$\mathscr{F}$| will produce $\mathscr{F}$.\\
+$\bullet$ option {\tt uprightscript} changes the output to {\usefont{OML}{ntxmi}{m}{it}\char201}.\\
+In both cases, there are full upper-case and lower-case and {\tt dotlessi}, {\tt dotlessj}. To insert the latter, you can write either \verb|$\mathscr{\imath}$| or \verb|$\imathscr$|, rendered as $\mathscr{\imath}$ in the slanted script case.
+
+The secondary letters font {\tt (lettersA)} and math family 2 {\tt(symbols)} have been rearranged. The first of these continues to have a Fraktur alphabet, but it a modification of its original one, having wider vertical stems and a blacker appearance more in keeping with the weight Times. {\tt Dotlessi} and {\tt dotlessj} have been added and can be specified in math mode by \verb|$\imathfrak$| and \verb|$\jmathfrak$|---\verb|$\mathfrak{\imath}$| also works. There are in addition two subsidiary Bbb alphabets in {\tt lettersA}, specified by the respective options {\tt vmathbb}, {\tt vvmathbb}, and there are corresponding {\tt dotlessi}, {\tt dotlessj} activated by \verb|$\imathbb$|, \verb|$\jmathbb$|, which always render as $\imathbb$, $\jmathbb$ mo matter the choice of which Blackboard Bold Alphabet. If you select one of the options {\tt vmathbb}, {\tt vvmathbb}, you will have Bbb digits 0..9 using, e.g., \verb|$\mathbb{1}$| to get~$\mathbb{1}$.
+
+Among the new symbols added are:\\
+$\bullet$ \verb|\hslash|, \verb|\hbar|, \verb|\lambdaslash|, \verb|\lambdabar|, \verb|\Zbar|, \verb|\Angstrom| are now constructed from the native glyphs.\\
+$\bullet$ Euler's constant \verb|$\Euler$| ($\Euler$).\\
+$\bullet$ Hermitian transpose \verb|\hermtransp| or \verb|\htransp| is used like \verb|$\mathbf{A}^{\htransp}$| ($\mathbf{A}^{\htransp}$). This usage is similar to simple transpose \verb|$\mathbf{A}^{\transp}$| ($\mathbf{A}^{\transp}$).\\
+$\bullet$ Independence can use \verb|\Perp|, $\Perp$, and there is a new \verb|\nPerp|, $\nPerp$ for the negation.
+
+\subsection{Adaptive vector accent} The \LaTeX\ macro \verb|\overrightarrow| provides a right arrow with adaptive width, but not matching the vector head of {\tt newpxmath}. Likewise, the {\tt esvect} provides a similar service with a choice of vector heads, none of which match {\tt newpxmath}. I've added code to provide a matching adaptive vector accent and which uses the same macro name, \verb|\vv|, as {\tt esvect}.
+For a comparison of these vector accents, \verb|$\vec{XY} \vv{XY} \overrightarrow{XY}$| renders as\\
+$\vec{XY} \vv{XY} \overrightarrow{XY}$.\\
+$\bullet$ \verb|$\vv{AB}$| renders as $\vv{AB}$.\\
+$\bullet$ \verb|$\vv*{AB}{x}$| renders as $\vv*{AB}{x}$. This provides better horizontal spacing of subscripts than \verb|$\vv{AB}_{x}$|, $\vv{AB}_{x}$.\\
+$\bullet$ You can also do \verb|$\vv*{AB}{\vv{CD}}$|, which renders as $\vv*{AB}{\vv{CD}}$.\\
+$\bullet$ You can change the vertical space between the arrow and the accentee by means of the package option {\tt vecsep}, whose default value is {\tt .25ex}.
+
+\subsection{Miscellaneous Changes}
+\begin{itemize}
+\item
+The superior letters fonts in {\tt newpx}
+have been extended and all glyphs now have appropriate unicode mappings.
+\item
+The AMS fonts replacement, {\tt zplsym} corrects the former misplacement of \verb|\kbbb|, \verb|\daleth|, \verb|\circledR| and \verb|\circledS|.)
+\end{itemize}
+\newpage
+\section{Changed Font Tables}
+\subsection{letters}
+\fonttable{zplmi}
+\newpage
+\subsection{lettersA}
+\fonttable{zplmia}
+\newpage
+\subsection{symbols}
+\fonttable{zplsy}
+\newpage
+\subsection{A sample newpx.subs}
+You may either copy the entire block below, starting with the line \verb|\begin{...| and ending after the line beginning \verb|\end{|
+and pasting it into the top of your document before the \verb|\documentclass...| line, which will allow for easy editing and will write the file to the same folder as your document, or make your own file, omitting those outer two lines.
+
+\begin{verbatim}
+\begin{filecontents*}{newpx.subs}
+{f}{-2.5}
+{j}{-1.5}
+{p}{-1}
+{y}{-1}
+{A}{-1.5}
+{B}{-1}
+{D}{-1}
+{H}{-1}
+{I}{-1}
+{K}{-1}
+{L}{-1}
+{M}{-1}
+{N}{-0.5}
+{P}{-1}
+{X}{-1}
+{\rho}{-1.5}
+{\mu}{-1}
+\end{filecontents*}
+
+\end{verbatim}
\end{document} \ No newline at end of file
diff --git a/fonts/newpx/map/newpx.map b/fonts/newpx/map/newpx.map
index 1940f35c6c..c881cb21cf 100644
--- a/fonts/newpx/map/newpx.map
+++ b/fonts/newpx/map/newpx.map
@@ -99,18 +99,6 @@ zpl-Italic-tlf-sc-ot1 TeXGyrePagellaX-Italic " encntx-ot1-tlf-sc ReEncodeFont "
zpl-Italic-osf-sc-ot1 TeXGyrePagellaX-Italic " encntx-ot1-osf-sc ReEncodeFont " <[ntx-ot1-osf-sc.enc <zplri.pfb
zpl-Italic-lf-sc-ot1 TeXGyrePagellaX-Italic " encntx-ot1-lf-sc ReEncodeFont " <[ntx-ot1-lf-sc.enc <zplri.pfb
zpl-Italic-tosf-sc-ot1 TeXGyrePagellaX-Italic " encntx-ot1-tosf-sc ReEncodeFont " <[ntx-ot1-tosf-sc.enc <zplri.pfb
-zplsups-Regular-ot1 TeXGyrePagellaX-Regular " zpl7TsupsEncoding ReEncodeFont " <[ot1sups.enc <zplr.pfb
-zplsups-Regular-t1 TeXGyrePagellaX-Regular " ECsupsEncoding ReEncodeFont " <[ecsups.enc <zplr.pfb
-zplsups-Regular-ly1 TeXGyrePagellaX-Regular " TeXnANSIsupsEncoding ReEncodeFont " <[texnansxsups.enc <zplr.pfb
-zplsups-Italic-ot1 TeXGyrePagellaX-Italic " zpl7TsupsEncoding ReEncodeFont " <[ot1sups.enc <zplri.pfb
-zplsups-Italic-t1 TeXGyrePagellaX-Italic " ECsupsEncoding ReEncodeFont " <[ecsups.enc <zplri.pfb
-zplsups-Italic-ly1 TeXGyrePagellaX-Italic " TeXnANSIsupsEncoding ReEncodeFont " <[texnansxsups.enc <zplri.pfb
-zplsups-Bold-ot1 TeXGyrePagellaX-Bold " zpl7TsupsEncoding ReEncodeFont " <[ot1sups.enc <zplb.pfb
-zplsups-Bold-t1 TeXGyrePagellaX-Bold " ECsupsEncoding ReEncodeFont " <[ecsups.enc <zplb.pfb
-zplsups-Bold-ly1 TeXGyrePagellaX-Bold " TeXnANSIsupsEncoding ReEncodeFont " <[texnansxsups.enc <zplb.pfb
-zplsups-BoldItalic-ot1 TeXGyrePagellaX-BoldItalic " zpl7TsupsEncoding ReEncodeFont " <[ot1sups.enc <zplbi.pfb
-zplsups-BoldItalic-t1 TeXGyrePagellaX-BoldItalic " ECsupsEncoding ReEncodeFont " <[ecsups.enc <zplbi.pfb
-zplsups-BoldItalic-ly1 TeXGyrePagellaX-BoldItalic " TeXnANSIsupsEncoding ReEncodeFont " <[texnansxsups.enc <zplbi.pfb
zpl-Italic-tlf-th-t1 TeXGyrePagellaX-Italic " encntx-ecth-tlf ReEncodeFont " <[ntx-ecth-tlf.enc <zplri.pfb
zpl-Italic-osf-th-t1 TeXGyrePagellaX-Italic " encntx-ecth-osf ReEncodeFont " <[ntx-ecth-osf.enc <zplri.pfb
zpl-Italic-tlf-th-ot1 TeXGyrePagellaX-Italic " encntx-ot1-th-tlf ReEncodeFont " <ntx-ot1-th-tlf.enc <zplri.pfb
@@ -166,3 +154,21 @@ zpl-Regular-tosf-scl-ot1 zplr " encntx-ot1-tosf-sc ReEncodeFont " <[ntx-ot1-tosf
zpl-Regular-tosf-scl-t1 zplr " encntx-ec-tosf-sc ReEncodeFont " <[ntx-ec-tosf-sc.enc <zplr.pfb
pxsys pxsys <pxsys.pfb
pxbsys pxbsys <pxbsys.pfb
+npxsups-Regular-ot1 npxsups-Regular " npxsupsOT1Encoding ReEncodeFont " <npxsups_OT1.enc <npxsups-Regular.pfb
+npxsups-Regular-t1 npxsups-Regular " npxsupsT1Encoding ReEncodeFont " <npxsups_T1.enc <npxsups-Regular.pfb
+npxsups-Regular-ly1 npxsups-Regular " npxsupsLY1Encoding ReEncodeFont " <npxsups_LY1.enc <npxsups-Regular.pfb
+npxsups-Italic-ot1 npxsups-Italic " npxsupsOT1Encoding ReEncodeFont " <npxsups_OT1.enc <npxsups-Italic.pfb
+npxsups-Italic-t1 npxsups-Italic " npxsupsT1Encoding ReEncodeFont " <npxsups_T1.enc <npxsups-Italic.pfb
+npxsups-Italic-ly1 npxsups-Italic " npxsupsLY1Encoding ReEncodeFont " <npxsups_LY1.enc <npxsups-Italic.pfb
+npxsups-Bold-ot1 npxsups-Bold " npxsupsOT1Encoding ReEncodeFont " <npxsups_OT1.enc <npxsups-Bold.pfb
+npxsups-Bold-t1 npxsups-Bold " npxsupsT1Encoding ReEncodeFont " <npxsups_T1.enc <npxsups-Bold.pfb
+npxsups-Bold-ly1 npxsups-Bold " npxsupsLY1Encoding ReEncodeFont " <npxsups_LY1.enc <npxsups-Bold.pfb
+npxsups-BoldItalic-ot1 npxsups-BoldItalic " npxsupsOT1Encoding ReEncodeFont " <npxsups_OT1.enc <npxsups-BoldItalic.pfb
+npxsups-BoldItalic-t1 npxsups-BoldItalic " npxsupsT1Encoding ReEncodeFont " <npxsups_T1.enc <npxsups-BoldItalic.pfb
+npxsups-BoldItalic-ly1 npxsups-BoldItalic " npxsupsLY1Encoding ReEncodeFont " <npxsups_LY1.enc <npxsups-BoldItalic.pfb
+NewPXMI NewPXMI <NewPXMI.pfb
+NewPXMI_gnu NewPXMI_gnu <NewPXMI_gnu.pfb
+NewPXBMI_gnu NewPXBMI_gnu <NewPXBMI_gnu.pfb
+NewPXBMI NewPXBMI <NewPXBMI.pfb
+pxmiaX pxmiaX <pxmiaX.pfb
+pxbmiaX pxbmiaX <pxbmiaX.pfb
diff --git a/fonts/newpx/tex/lmsnpxsy.fd b/fonts/newpx/tex/lmsnpxsy.fd
index 0c96902b5a..3c68c42662 100644
--- a/fonts/newpx/tex/lmsnpxsy.fd
+++ b/fonts/newpx/tex/lmsnpxsy.fd
@@ -1,11 +1,11 @@
%Filename: lmsnpxsy.fd
-%Created by: tex px-sy-drv
+%Created by: tex px-drv
%Created using fontinst v1.933
%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
\ProvidesFile{lmsnpxsy.fd}
- [2016/08/13 Fontinst v1.933 font definitions for LMS/npxsy.]
+ [2016/07/04 Fontinst v1.933 font definitions for LMS/npxsy.]
\expandafter\ifx\csname npxmath@scaled\endcsname\relax
\let\npxmath@@scaled\@empty%
@@ -13,7 +13,7 @@
\edef\npxmath@@scaled{s*[\csname npxmath@scaled\endcsname]}%
\fi
-\DeclareFontFamily{LMS}{npxsy}{\providecommand {\setSYdimens}{}\setSYdimens\skewchar \font =120}
+\DeclareFontFamily{LMS}{npxsy}{\providecommand{\setSYdimens}{}\setSYdimens\skewchar\font=120}
\DeclareFontShape{LMS}{npxsy}{m}{n}{
<-> \npxmath@@scaled zplsy
diff --git a/fonts/newpx/tex/lmxnpxexx.fd b/fonts/newpx/tex/lmxnpxexx.fd
index c3325abea8..ac65cf1415 100644
--- a/fonts/newpx/tex/lmxnpxexx.fd
+++ b/fonts/newpx/tex/lmxnpxexx.fd
@@ -5,7 +5,7 @@
%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
\ProvidesFile{lmxnpxexx.fd}
- [2016/08/13 Fontinst v1.933 font definitions for LMX/npxexx.]
+ [2016/07/04 Fontinst v1.933 font definitions for LMX/npxexx.]
\expandafter\ifx\csname npxmath@scaled\endcsname\relax
\let\npxmath@@scaled\@empty%
@@ -13,7 +13,7 @@
\edef\npxmath@@scaled{s*[\csname npxmath@scaled\endcsname]}%
\fi
-\DeclareFontFamily{LMX}{npxexx}{\providecommand {\setSYdimens}{}\setSYdimens}
+\DeclareFontFamily{LMX}{npxexx}{\providecommand{\setEXdimens}{}\setEXdimens}
\DeclareFontShape{LMX}{npxexx}{m}{n}{
<-> \npxmath@@scaled zplexx
diff --git a/fonts/newpx/tex/newpx.subs b/fonts/newpx/tex/newpx.subs
new file mode 100644
index 0000000000..02c4b277db
--- /dev/null
+++ b/fonts/newpx/tex/newpx.subs
@@ -0,0 +1,17 @@
+{f}{-2.5}
+{j}{-1.5}
+{p}{-1}
+{y}{-1}
+{A}{-1.5}
+{B}{-1}
+{D}{-1}
+{H}{-1}
+{I}{-1}
+{K}{-1}
+{L}{-1}
+{M}{-1}
+{N}{-0.5}
+{P}{-1}
+{X}{-1}
+{\rho}{-1.5}
+{\mu}{-1}
diff --git a/fonts/newpx/tex/newpxmath.sty b/fonts/newpx/tex/newpxmath.sty
index 60b6483fc1..2058b34925 100644
--- a/fonts/newpx/tex/newpxmath.sty
+++ b/fonts/newpx/tex/newpxmath.sty
@@ -11,8 +11,8 @@
% of glyph collisions.
% These modifications are by Michael Sharpe, msharpe at ucsd dot edu
-\def\fileversion{1.33}
-\def\filedate{2018/11/22}
+\def\fileversion{1.40}
+\def\filedate{2019/09/22}
\ProvidesPackage{newpxmath}
[\filedate\space v\fileversion]
%\@ifundefined{newpxmathLoaded}{}{\endinput}
@@ -31,8 +31,110 @@
\input{binhex}
\RequirePackage{xkeyval}
+\RequirePackage{centernot} % for proper handling of negated relations
+
+\newif\ifpx@sbc
+%\newif\ifpx@spc
+
+%\newcommand\enablesbcorrection{\px@sbctrue\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax}}
+%\newcommand\disablesbcorrection{\px@sbcfalse\catcode`\_=8\relax}
+%\newcommand\enablespcorrection{\px@spctrue\AtBeginDocument{\mathcode`\^=\string"8000 \catcode`\^=12\relax}}
+%\newcommand\disablespcorrection{\px@spcfalse\catcode`\^=7\relax}
+%\@onlypreamble\enablesbcorrection
+%\@onlypreamble\disablesbcorrection
+%\@onlypreamble\enablespcorrection
+%\@onlypreamble\disablespcorrection
+
+% Should test for which math italic font and customize these numbers.
+\def\px@sb@dflt{% default subscript kerns, usually negative
+ \if\px@next f\mkern-2.5mu\else
+ \if\px@next j\mkern-1.5mu\else
+ \if\px@next p\mkern-1 mu\else
+ \if\px@next y\mkern-1 mu\else
+ \if\px@next A\mkern-1.5mu\else
+ \if\px@next B\mkern-1 mu\else
+ \if\px@next D\mkern-1 mu\else
+ \if\px@next H\mkern-1 mu\else
+ \if\px@next I\mkern-1 mu\else
+ \if\px@next K\mkern-1 mu\else
+ \if\px@next L\mkern-1 mu\else
+ \if\px@next M\mkern-1 mu\else
+ \if\px@next N\mkern-0.5mu\else
+ \if\px@next P\mkern-1 mu\else
+ \if\px@next X\mkern-1 mu\else
+ \ifx\px@next \rho\mkern-1.5mu\else
+ \ifx\px@next \mu\mkern-1 mu\else
+ \fi
+ \fi
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi}
+%\def\px@sp@dflt{% default superscript kerns, usually positive
+% \if\px@next f\mkern 2 mu\else
+% \if\px@next j\mkern 2 mu\else
+% \if\px@next p\mkern1 mu\else
+% \if\px@next y\mkern 2 mu\else
+% \if\px@next \rho\mkern 2 mu\else
+% \if\px@next \mu\mkern 2 mu\else
+% \fi
+% \fi
+% \fi%
+% \fi%
+% \fi%
+% \fi}
+\newtoks\px@tA % accumulate \if\next
+\newtoks\px@tB % accumulate \fi
+\newcommand*{\loadsubfile}[1]{\readsufile{#1}%creates toks px@tA. px@tB
+\px@tA\expandafter{\the\expandafter\px@tA\the\px@tB}
+\expandafter\def\expandafter\px@sb\expandafter{\the\px@tA}\enablesbcorrection}
+%\newcommand*{\loadsupfile}[1]{\readsufile{#1}%creates toks px@tA. px@tB
+%\def\px@sp{\the\px@tA \the\px@tB}\enablespcorrection}
+\newread\px@su
+
+\def\readsufile#1{%
+ \px@tA={}
+ \px@tB={}
+ \openin\px@su=#1
+ \loop\unless\ifeof\px@su
+ \read\px@su to \px@line
+ \if\px@line\par\else
+ \expandafter\px@addrec\px@line
+ \fi
+ \repeat
+}
+%\def\px@Prepend#1(to:)#2{\toks0={#1}%
+% \edef\px@act{\noexpand#2={\the\toks0 \the#2}}%
+% \px@act}
+%\def\px@Append#1(to:)#2{\toks0={#1}%
+% \edef\px@act{\noexpand#2={\the#2 \the\toks0}}%
+% \px@act}
+%\def\px@AppendToks#1(to:)#2{%
+% \edef\px@act{\noexpand#2={\the#2 \the#1}}%
+% \px@act}
+
+\def\px@addrec#1#2{%
+\ifiscseq{#1}{\px@tA\expandafter{\the\px@tA\ifx}}{\px@tA\expandafter{\the\px@tA\if}}
+\px@tA\expandafter{\the\px@tA\ifx\px@next #1\mkern #2 mu\else}
+\px@tB\expandafter{\the\px@tB\fi}}
+%px@AppendToks\toks0(to:)\px@tA \px@AppendToks\fi(to:)\px@tB}
+
+
\let\npxmath@scaled\@empty
\define@key{npxmath}{scaled}[1.0]{\def\npxmath@scaled{#1}}
+\def\npxmath@vecsep{.25ex}
+\define@key{npxmath}{vecsep}[.25ex]{\def\npxmath@vecsep{#1}}
\DeclareOption*{%
\begingroup
\edef\x{\endgroup
@@ -42,9 +144,12 @@
\newif\ifpx@upint %default is sloped
\newif\ifpx@smops %default is large binary operators
\newcount\px@Isdigit
-\newif\ifpx@ams \newif\ifpx@slantedG \newif\ifpx@cmint \newif\ifpx@braces
+\newif\ifpx@ams \newif\ifpx@slantedG \newif\ifpx@cmint \newif\ifpx@braces \newif\ifpx@upscr
+
\newif\ifpx@varbb \newif\ifpx@vvarbb \newif\ifpx@symbolsC \newif\ifpx@bigdelims \newif\ifpx@frenchm % french math
\px@symbolsCtrue
+\DeclareOption{nosubscriptcorrection}{\px@sbcfalse}
+\DeclareOption{subscriptcorrection}{\px@sbctrue}
\DeclareOption{bigdelims}{\px@bigdelimstrue}
\DeclareOption{varbb}{\px@varbbtrue}
\DeclareOption{vvarbb}{\px@vvarbbtrue}
@@ -53,14 +158,33 @@
\DeclareOption{cmbraces}{\px@bracestrue}
\DeclareOption{noamssymbols}{\px@amsfalse}
\DeclareOption{amssymbols}{\px@amstrue}
+\DeclareOption{uprightscript}{\px@upscrtrue}
\DeclareOption{uprightGreek}{\px@slantedGfalse}
\DeclareOption{slantedGreek}{\px@slantedGtrue}
\DeclareOption{frenchmath}{\px@frenchmtrue}
\DeclareOption{upint}{\px@upinttrue}
\DeclareOption{smallerops}{\px@smopstrue}
+\DeclareOption{fracspacing}{%
+ \def\setSYdimens{%
+ \fontdimen 8\font=0.789\fontdimen6\font % was 0.677 of a quad
+ \fontdimen11\font=0.798\fontdimen6\font % was 0.686 of a quad
+ }}
\ExecuteOptions{%
amssymbols,uprightGreek}
\ProcessOptions*
+% Check if xy is loaded
+\AtEndPreamble{%
+\ifpx@sbc
+ \expandafter\ifx\csname xyversion\endcsname\relax \else
+ \PackageError{newpxmath}{xy package is not compatible with the subscriptcorrection macros}{Either remove xy or disable
+ subscriptcorrection}
+ \fi % ifx
+ \IfFileExists{newpx.subs}{\loadsubfile{newpx.subs}}%
+ {\def\px@sb{\px@sb@dflt}\message{File newpx.subs not found. Using basic defaults for subscript correction.^^J}}
+\fi
+}
+
+
% frenchmath implies uprightGreek
\ifpx@frenchm\px@slantedGfalse\fi
@@ -82,17 +206,28 @@ amssymbols,uprightGreek}
\SetMathAlphabet{\mathtt}{bold}{\encodingdefault}{\ttdefault}{b}{n}
% change default def of \hbar in case noamssymbols
-\ifx\encodingdefault\t@one
- \renewcommand{\hbar}{\raisebox{-.04ex}{\mbox{$\mathchar'11$}}\mkern-7.3mu h}%
-\else
- \renewcommand{\hbar}{\raisebox{-.04ex}{\mbox{$\mathchar'26$}}\mkern-7.3mu h}%
-\fi
+%\ifx\encodingdefault\t@one
+% \renewcommand{\hbar}{\raisebox{-.04ex}{\mbox{$\mathchar'11$}}\mkern-7.3mu h}%
+%\else
+% \renewcommand{\hbar}{\raisebox{-.04ex}{\mbox{$\mathchar'26$}}\mkern-7.3mu h}%
+%\fi
%%%%%%%%%%%%%%%
% Math Italic %
%%%%%%%%%%%%%%%
\DeclareSymbolFont{letters}{OML}{npxmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{npxmi}{b}{it}
\DeclareFontSubstitution{OML}{npxmi}{m}{it}
+\ifpx@upscr
+ \DeclareRobustCommand{\mathscr}[1]{\npx@alfa{#1}{196}{222}{248}{249}{}{letters}}
+\DeclareMathSymbol{\imathscr}{\mathord}{letters}{248}
+\DeclareMathSymbol{\jmathscr}{\mathord}{letters}{249}
+
+\else
+ \DeclareRobustCommand{\mathscr}[1]{\npx@alfa{#1}{142}{168}{194}{195}{}{letters}}
+\DeclareMathSymbol{\imathscr}{\mathord}{letters}{194}
+\DeclareMathSymbol{\jmathscr}{\mathord}{letters}{195}
+\fi
+
%%%%%%%%%%%%%%%%%
% Math Italic A %
%%%%%%%%%%%%%%%%%
@@ -242,6 +377,44 @@ amssymbols,uprightGreek}
}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Subscript correction code
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newtoks\px@sbptoks
+% next 2 macros borrowed from TeX by Topic
+\def\px@Pop#1(into:)#2{%
+ \edef\px@act{\noexpand\px@SplitOff\the#1%
+ (tx@head:)\noexpand#2(tx@tail:)\noexpand#1}%
+ \px@act}
+\def\px@SplitOff#1#2(tx@head:)#3(tx@tail:)#4{\def#3{\noexpand #1}#4={#2}}
+
+\ifpx@sbc
+\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax} \begingroup
+ \catcode`\_=13 % active
+ \gdef_{\s@@b}
+\endgroup
+%
+\def\s@@b{\ifpx@sbc\expandafter\s@@b@\else\expandafter\sb\fi}
+\def\s@@b@#1{\def\px@next@{#1}%
+\px@sbptoks={#1}%
+\px@Pop\px@sbptoks(into:)\px@next% px@next first non-blank token
+\sb{\px@sb \px@next@}}
+\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Superscript correction code
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begingroup
+% \catcode`\^=13 % active
+% \gdef^{\s@@p}
+%\endgroup
+%\def\s@@p{\ifpx@spc\expandafter\s@@p@\else\expandafter\sp\fi}
+%\def\s@@p@#1{\def\px@next@{#1}%
+%\px@sbptoks={#1}%
+%\px@Pop\px@sbptoks(into:)\px@next% first token
+%\sp{\px@sp \px@next@}}
+%\def\px@sp{\px@sp@dflt}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -314,21 +487,34 @@ amssymbols,uprightGreek}
\let\|=\Vert
\DeclareMathDelimiter{\updownarrow}{\mathrel}{symbols}{108}{largesymbols}{63}
\DeclareMathDelimiter{\Updownarrow}{\mathrel}{symbols}{109}{largesymbols}{119}
- \DeclareMathDelimiter{\llbracket}{\mathopen}{lettersA}{251}{largesymbolsPXA}{18}
+ \DeclareMathDelimiter{\llbracket}{\mathopen}{symbols}{201}{largesymbolsPXA}{18}
\let\lBrack=\llbracket
- \DeclareMathDelimiter{\rrbracket}{\mathclose}{lettersA}{252}{largesymbolsPXA}{19}
+ \DeclareMathDelimiter{\rrbracket}{\mathclose}{symbols}{202}{largesymbolsPXA}{19}
\let\rBrack=\rrbracket
\DeclareMathDelimiter{\lvert} {\mathopen} {symbols}{106}{largesymbols}{12}
\DeclareMathDelimiter{\rvert} {\mathclose} {symbols}{106}{largesymbols}{12}
\DeclareMathDelimiter{\lVert} {\mathopen} {symbols}{107}{largesymbols}{13}
\DeclareMathDelimiter{\rVert} {\mathclose} {symbols}{107}{largesymbols}{13}
%\fi
-\DeclareMathSymbol{+}{\mathbin}{lettersA}{253}
+\DeclareMathDelimiter{\smlbrace}{\mathopen}{lettersA}{62}{largesymbols}{8}
+\DeclareMathDelimiter{\smrbrace}{\mathclose}{lettersA}{63}{largesymbols}{9}
+
+\re@DeclareMathSymbol{\Perp}{\mathrel}{symbols}{205} % was symbolsC
+\re@DeclareMathSymbol{\nPerp}{\mathrel}{symbols}{206} % was symbolsC
+\DeclareMathSymbol{+}{\mathbin}{symbols}{207}
%\DeclareMathDelimiter{/}{\mathord}{operators}{47}{largesymbols}{14}
%\DeclareMathSymbol{:}{\mathrel}{operators}{58}
%\DeclareMathSymbol{\colon}{\mathpunct}{operators}{58}
%\DeclareMathSymbol{;}{\mathpunct}{operators}{59}
-\DeclareMathSymbol{=}{\mathrel}{lettersA}{53}
+\DeclareMathSymbol{=}{\mathrel}{lettersA}{61} % was 53
+\re@DeclareMathSymbol{\hslash}{\mathord}{lettersA}{91}
+\re@DeclareMathSymbol{\hbar}{\mathord}{lettersA}{92}
+\DeclareMathSymbol{\lambdabar}{\mathord}{lettersA}{93}
+\DeclareMathSymbol{\Zbar}{\mathord}{lettersA}{94}
+\DeclareMathSymbol{\Angstrom}{\mathord}{lettersA}{95}
+\DeclareMathSymbol{\Euler}{\mathord}{lettersA}{96}
+\DeclareMathSymbol{\lambdaslash}{\mathord}{lettersA}{251}
+
%\DeclareMathSymbol{?}{\mathclose}{operators}{63}
%\DeclareMathDelimiter{[}{\mathopen}{operators}{91}{largesymbols}{2}
%\DeclareMathDelimiter{]}{\mathclose}{operators}{93}{largesymbols}{3}
@@ -336,16 +522,21 @@ amssymbols,uprightGreek}
%\DeclareMathAccent{\dot}{\mathalpha}{operators}{95}
%\DeclareMathAccent{\tilde}{\mathalpha}{operators}{126}
%\DeclareMathAccent{\ddot}{\mathalpha}{operators}{127}
-\re@DeclareMathAccent{\hat}{\mathalpha}{symbols}{198}
-\re@DeclareMathAccent{\grave}{\mathalpha}{symbols}{199}
-\re@DeclareMathAccent{\acute}{\mathalpha}{symbols}{200}
-\re@DeclareMathAccent{\breve}{\mathalpha}{symbols}{201}
-\re@DeclareMathAccent{\check}{\mathalpha}{symbols}{202}
+\re@DeclareMathAccent{\grave}{\mathaord}{symbols}{158}
+\re@DeclareMathAccent{\acute}{\mathord}{symbols}{159}
+\re@DeclareMathAccent{\hat}{\mathord}{symbols}{160}
+\re@DeclareMathAccent{\tilde}{\mathord}{symbols}{161}
+\re@DeclareMathAccent{\bar}{\mathord}{symbols}{162}
+\re@DeclareMathAccent{\breve}{\mathord}{symbols}{163}
+\re@DeclareMathAccent{\mathring}{\mathord}{symbols}{166}
+\re@DeclareMathAccent{\check}{\mathord}{symbols}{167}
\DeclareMathSymbol{\transp}{\mathord}{symbols}{203}
-\re@DeclareMathAccent{\dot}{\mathalpha}{symbols}{219}
-\re@DeclareMathAccent{\ddot}{\mathalpha}{symbols}{220}
-\re@DeclareMathAccent{\dddot}{\mathord}{symbols}{221}
-\re@DeclareMathAccent{\ddddot}{\mathord}{symbols}{222}
+\DeclareMathSymbol{\hermtransp}{\mathord}{symbols}{204}
+ \let\htransp=\hermtransp
+\re@DeclareMathAccent{\dot}{\mathaord}{symbols}{164}
+\re@DeclareMathAccent{\ddot}{\mathord}{symbols}{165}
+\re@DeclareMathAccent{\dddot}{\mathord}{symbols}{168}
+\re@DeclareMathAccent{\ddddot}{\mathord}{symbols}{200}
%\ifx\encodingdefault\t@one%
% \re@DeclareMathAccent{\grave}{\mathalpha}{operators}{0}
% \re@DeclareMathAccent{\acute}{\mathalpha}{operators}{1}
@@ -595,6 +786,25 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\DeclareMathAccent{\widearc}{\mathalpha}{symbols}{175}
\DeclareMathAccent{\wideOarc}{\mathalpha}{symbols}{180}
+%%%%%%% Begin pxvec code 2019-07-31 (adaptive vec)
+\DeclareMathSymbol{\rVec@h}{\mathrel}{symbols}{198}% vector head
+\DeclareMathSymbol{\rVec@x}{\mathrel}{symbols}{199}% vector extension
+%% borrow interface from esvect
+\def\vv{\@ifstar{\vvstar}{\pxvec}}
+\def\vvstar#1#2{{\pxvec{#1}}_{\mkern-1mu\relax#2}}
+%%
+\newcommand{\pxvec}{\mathpalette{\overVec@\Vecfill@}}
+%
+\def\Vecfill@{\@rrowfill@\rVec@x\rVec@h}
+%
+\def\@rrowfill@#1#2#3{$\m@th\mkern2mu%
+\relax#3#1\mkern-1.5mu\cleaders\hbox{$#3\mkern-.4mu#1\mkern-.4mu$}\hfill\mkern-1.5mu#2$}
+%
+\def\overVec@#1#2#3{\mathop{\vbox{\ialign{##\crcr\noalign{\kern-.2ex}%
+#1#2\crcr\noalign{\kern\npxmath@vecsep\nointerlineskip}% kern controls sep to arrow
+$\m@th\hfil #2#3\hfil$\crcr}}}}
+%%%%%%%% End pxvec code
+
%%%%%%%%%%%%
%Integrals
%%%%%%%%%%%%
@@ -1032,7 +1242,7 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\eqsim}{\mathrel}{AMSm}{104}
\re@DeclareMathSymbol{\beth}{\mathord}{AMSm}{105}
\re@DeclareMathSymbol{\gimel}{\mathord}{AMSm}{106}
-\re@DeclareMathSymbol{\daleth}{\mathord}{AMSm}{107}
+\re@DeclareMathSymbol{\daleth}{\mathord}{AMSm}{124} % was 107
\re@DeclareMathSymbol{\lessdot}{\mathbin}{AMSm}{108}
\re@DeclareMathSymbol{\gtrdot}{\mathbin}{AMSm}{109}
\re@DeclareMathSymbol{\ltimes}{\mathbin}{AMSm}{110}
@@ -1050,8 +1260,8 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\digamma}{\mathord}{AMSm}{122}
%\re@DeclareMathSymbol{\varkappa}{\mathord}{AMSm}{123}
\re@DeclareMathSymbol{\Bbbk}{\mathord}{AMSm}{124}
-\re@DeclareMathSymbol{\hslash}{\mathord}{AMSm}{125}
-\re@DeclareMathSymbol{\hbar}{\mathord}{AMSm}{126}
+%\re@DeclareMathSymbol{\hslash}{\mathord}{AMSm}{125}
+%\re@DeclareMathSymbol{\hbar}{\mathord}{AMSm}{126}
\re@DeclareMathSymbol{\backepsilon}{\mathrel}{AMSm}{127}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1189,8 +1399,8 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\boxbar}{\mathbin}{symbolsC}{107}
\re@DeclareMathSymbol{\boxslash}{\mathbin}{symbolsC}{108}
\re@DeclareMathSymbol{\Wr}{\mathbin}{symbolsC}{109}
-\re@DeclareMathSymbol{\lambdaslash}{\mathord}{symbolsC}{110}
-\re@DeclareMathSymbol{\lambdabar}{\mathord}{symbolsC}{111}
+%\re@DeclareMathSymbol{\lambdaslash}{\mathord}{symbolsC}{110}
+%\re@DeclareMathSymbol{\lambdabar}{\mathord}{symbolsC}{111}
\re@DeclareMathSymbol{\varclubsuit}{\mathord}{symbolsC}{112}
\re@DeclareMathSymbol{\vardiamondsuit}{\mathord}{symbolsC}{113}
\re@DeclareMathSymbol{\varheartsuit}{\mathord}{symbolsC}{114}
@@ -1201,13 +1411,15 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\Swarrow}{\mathrel}{symbolsC}{119}
\re@DeclareMathSymbol{\Top}{\mathord}{symbolsC}{120}
\re@DeclareMathSymbol{\Bot}{\mathord}{symbolsC}{121}
-\re@DeclareMathSymbol{\Perp}{\mathrel}{symbolsC}{121}
+%\re@DeclareMathSymbol{\Perp}{\mathrel}{symbolsC}{121}
\re@DeclareMathSymbol\leadstoext{\mathrel}{symbolsC}{122}
\re@DeclareMathSymbol\leadsto{\mathrel}{symbolsC}{123}
\re@DeclareMathSymbol{\sqcupplus}{\mathbin}{symbolsC}{124}
\re@DeclareMathSymbol{\sqcapplus}{\mathbin}{symbolsC}{125}
\re@DeclareMathDelimiter{\llbracket}{\mathopen}{symbolsC}{126}{largesymbolsPXA}{18}
-\re@DeclareMathDelimiter{\rrbracket}{\mathclose}{symbolsC}{127}{largesymbolsPXA}{19}
+ \let\lBrack=\llbracket
+ \re@DeclareMathDelimiter{\rrbracket}{\mathclose}{symbolsC}{127}{largesymbolsPXA}{19}
+ \let\rBrack=\rrbracket
\re@DeclareMathSymbol{\boxright}{\mathrel}{symbolsC}{128}
\re@DeclareMathSymbol{\boxleft}{\mathrel}{symbolsC}{129}
\re@DeclareMathSymbol{\boxdotright}{\mathrel}{symbolsC}{130}
@@ -1235,10 +1447,51 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\multimapdotbothvert}{\mathrel}{symbolsC}{150}
\re@DeclareMathSymbol{\multimapdotbothBvert}{\mathrel}{symbolsC}{151}
\re@DeclareMathSymbol{\multimapdotbothAvert}{\mathrel}{symbolsC}{152}
+\else % \px@symbolsCfalse
+ \newcommand*{\nvarparallel}{\centernot\varparallel}
+ \newcommand*{\nvarparallelinv}{\centernot\varparallelinv}
+ \newcommand*{\nprecsim}{\centernot\precsim}
+ \newcommand*{\nsuccsim}{\centernot\succsim}
+ \newcommand*{\nlesssim}{\centernot\lesssim}
+ \newcommand*{\ngtrsim}{\centernot\gtrsim}
+ \newcommand*{\nlessapprox}{\centernot\lessapprox}
+ \newcommand*{\ngtrapprox}{\centernot\gtrapprox}
+ \newcommand*{\npreccurlyeq}{\centernot\preccurlyeq}
+ \newcommand*{\nsucccurlyeq}{\centernot\succcurlyeq}
+ \newcommand*{\ngtrless}{\centernot\gtrless}
+ \newcommand*{\nlessgtr}{\centernot\lessgtr}
+ \newcommand*{\nbumpeq}{\centernot\bumpeq}
+ \newcommand*{\nBumpeq}{\centernot\Bumpeq}
+ \newcommand*{\nbacksim}{\centernot\backsim}
+ \newcommand*{\nbacksimeq}{\centernot\backsimeq}
+ \newcommand*{\nasymp}{\centernot\asymp}
+ \newcommand*{\nequiv}{\centernot\equiv}
+ %\newcommand*{\nsim}{\centernot\sim}
+ \newcommand*{\napprox}{\centernot\approx}
+ \newcommand*{\nll}{\centernot\ll}
+ \newcommand*{\ngg}{\centernot\gg}
+ \newcommand*{\nthickapprox}{\centernot\thickapprox}
+ \newcommand*{\napproxeq}{\centernot\approxeq}
+ \newcommand*{\nprecapprox}{\centernot\precapprox}
+ \newcommand*{\nsuccapprox}{\centernot\succapprox}
+ \newcommand*{\npreceqq}{\centernot\preceqq}
+ \newcommand*{\nsucceqq}{\centernot\succeqq}
+ \newcommand*{\nsimeq}{\centernot\simeq}
+ \newcommand*{\nSubset}{\centernot\Subset}
+ \newcommand*{\nSupset}{\centernot\Supset}
+ \newcommand*{\nsqsubseteq}{\centernot\sqsubseteq}
+ \newcommand*{\nsqsupseteq}{\centernot\sqsupseteq}
+ \newcommand*{\nplus}{\centernot\plus}
+ \newcommand*{\nsqsubset}{\centernot\sqsubset}
+ \newcommand*{\nsqsupset}{\centernot\sqsupset}
+ \newcommand*{\ntwoheadrightarrow}{\centernot\twoheadrightarrow}
+ \newcommand*{\ntwoheadleftarrow}{\centernot\twoheadleftarrow}
\fi
-% The following may be used for [[ and ]] without loading symbolsC as a math family. They replace \llbracket and \rrbracket.
-\def\dlb{\ensuremath\raisebox{.15ex}{\mbox{\usefont{U}{pxsyc}{m}{n}\char126}}}
-\def\drb{\ensuremath\raisebox{.15ex}{\mbox{\usefont{U}{pxsyc}{m}{n}\char127}}}
+%\def\dlb{\ensuremath\raisebox{.15ex}{\mbox{\usefont{U}{pxsyc}{m}{n}\char126}}}
+%\def\drb{\ensuremath\raisebox{.15ex}{\mbox{\usefont{U}{pxsyc}{m}{n}\char127}}}
+\let\dlb\llbracket
+\let\drb\rrbracket
+
% Changes to put some symbolsC glyphs into lettersA
\re@DeclareMathSymbol{\nsubset}{\mathrel}{lettersA}{54}
\re@DeclareMathSymbol{\nsupset}{\mathrel}{lettersA}{55}
@@ -1249,6 +1502,13 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\eqcolon}{\mathrel}{lettersA}{59}
\re@DeclareMathSymbol{\neq}{\mathrel}{lettersA}{60}
\let\ne=\neq
+%Additional imath and jmath
+\DeclareMathSymbol{\imathfrak}{\mathord}{lettersA}{123}
+\DeclareMathSymbol{\jmathfrak}{\mathord}{lettersA}{124}
+\DeclareMathSymbol{\imathbb}{\mathord}{lettersA}{125}
+\DeclareMathSymbol{\jmathbb}{\mathord}{lettersA}{126}
+\DeclareMathSymbol{\imathup}{\mathord}{lettersA}{188}
+\DeclareMathSymbol{\jmathup}{\mathord}{lettersA}{189}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1342,8 +1602,9 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Math Italic A (npxmia) Definition % lettersA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\re@DeclareMathSymbol{\varkappa}{\mathord}{lettersA}{41}
-\re@DeclareMathSymbol{\varkappaup}{\mathord}{lettersA}{42}
+ \re@DeclareMathSymbol{\varkappait}{\mathord}{letters}{129}
+ \let\varkappa\varkappait
+ \re@DeclareMathSymbol{\varkappaup}{\mathord}{lettersA}{129}
% upright Greek
\re@DeclareMathSymbol{\Gammaup}{\mathalpha}{lettersA}{0}
@@ -1542,7 +1803,8 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\varsigmait}{\mathord}{letters}{38}
\re@DeclareMathSymbol{\varphiit}{\mathord}{letters}{39}
-\re@DeclareMathSymbol{\varg}{\mathord}{lettersA}{49}
+%\re@DeclareMathSymbol{\varg}{\mathord}{lettersA}{49} % change this
+\def\varg{\mathnormal{g}}
\DeclareMathSymbol{\uppartial}{\mathord}{lettersA}{64}
%\def\npx@UC{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}
@@ -1710,8 +1972,8 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\fi %end of ifnum <256
}
-\DeclareRobustCommand{\vmathbb}[1]{\npx@alfa{#1}{129}{159}{}{}{}{lettersA}}
-\DeclareRobustCommand{\vvmathbb}[1]{\npx@alfa{#1}{193}{225}{}{}{176}{lettersA}}
+\DeclareRobustCommand{\vmathbb}[1]{\npx@alfa{#1}{132}{158}{186}{187}{43}{lettersA}}
+\DeclareRobustCommand{\vvmathbb}[1]{\npx@alfa{#1}{193}{225}{186}{187}{43}{lettersA}}
\ifpx@vvarbb
\let\mathbb\vvmathbb
@@ -1864,22 +2126,19 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
%%% otherwise, \not\XXX is done in the usual way.
\DeclareMathSymbol{\n@tch@r}{\mathrel}{symbols}{54}
+\@namedef{not=}{\ne}
+\@namedef{not>}{\ngtr}
+\@namedef{not<}{\nless}
\DeclareRobustCommand*{\not}[1]{%
- \ifx #1=\ne\else
- \ifx #1<\nless\else
- \ifx #1>\ngtr\else
- \n@t@@n{#1}\fi\fi\fi}
-
-\def\n@t@@n#1{%
- \begingroup \escapechar\m@ne\xdef\@gtempa{not\string#1}\endgroup%
- \expandafter\@ifundefined{\@gtempa}%
- {\not@n@{#1}}%
- {\@nameuse{\@gtempa}}}
+ \begingroup \escapechar\m@ne\xdef\@gtempa{not\string#1}\endgroup
+ \@ifundefined{\@gtempa}%
+ {\not@n@{#1}}%
+ {\@nameuse{\@gtempa}}}
\def\not@n@#1{%
- \begingroup \escapechar\m@ne\xdef\@gtempa{n\string#1}\endgroup%
- \expandafter\@ifundefined{\@gtempa}%
- {\n@tch@r #1}%
- {\@nameuse{\@gtempa}}}
+ \begingroup \escapechar\m@ne\xdef\@gtempa{n\string#1}\endgroup
+ \@ifundefined{\@gtempa}%
+ {\n@tch@r #1}%
+ {\@nameuse{\@gtempa}}}
%%%
%%% for AMS classes
@@ -1942,5 +2201,17 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\advance\count@\@ne
\repeat
\typeout{***}}
+%%%%%%% Additional pdf to unicode values not in Ross Moore's collection
+\pdfglyphtounicode{nPerp}{2AEB 2215}% .. ..
+\pdfglyphtounicode{periodcentered.B}{00B7}
+\pdfglyphtounicode{periodcentered.BB}{22C5}
+\pdfglyphtounicode{openbullet.S}{25CB}
+\pdfglyphtounicode{bullet.S}{25C5}
+\pdfglyphtounicode{bullet.SS}{2022}
+\pdfglyphtounicode{bullet.SSS}{2219}
+\pdfglyphtounicode{emptyset.alt1}{2300}
+\pdfglyphtounicode{emptyset.alt2}{2205}
+\pdfglyphtounicode{transpose}{1D40}
+\pdfglyphtounicode{hermitconj}{22B9}
\endinput
diff --git a/fonts/newpx/tfm/NewPXBMI.tfm b/fonts/newpx/tfm/NewPXBMI.tfm
new file mode 100644
index 0000000000..ea994518d0
--- /dev/null
+++ b/fonts/newpx/tfm/NewPXBMI.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/NewPXBMI_gnu.tfm b/fonts/newpx/tfm/NewPXBMI_gnu.tfm
new file mode 100644
index 0000000000..3688eaf55a
--- /dev/null
+++ b/fonts/newpx/tfm/NewPXBMI_gnu.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/NewPXMI.tfm b/fonts/newpx/tfm/NewPXMI.tfm
new file mode 100644
index 0000000000..5b8ee69e90
--- /dev/null
+++ b/fonts/newpx/tfm/NewPXMI.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/NewPXMI_gnu.tfm b/fonts/newpx/tfm/NewPXMI_gnu.tfm
new file mode 100644
index 0000000000..65360451f4
--- /dev/null
+++ b/fonts/newpx/tfm/NewPXMI_gnu.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/pxbmiaX.tfm b/fonts/newpx/tfm/pxbmiaX.tfm
new file mode 100644
index 0000000000..13e88279a8
--- /dev/null
+++ b/fonts/newpx/tfm/pxbmiaX.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/pxbsys.tfm b/fonts/newpx/tfm/pxbsys.tfm
index 33cf131b99..0a2f7f03d1 100644
--- a/fonts/newpx/tfm/pxbsys.tfm
+++ b/fonts/newpx/tfm/pxbsys.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/pxmiaX.tfm b/fonts/newpx/tfm/pxmiaX.tfm
new file mode 100644
index 0000000000..787df53c39
--- /dev/null
+++ b/fonts/newpx/tfm/pxmiaX.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/pxsys.tfm b/fonts/newpx/tfm/pxsys.tfm
index e9494a7f1f..8740726795 100644
--- a/fonts/newpx/tfm/pxsys.tfm
+++ b/fonts/newpx/tfm/pxsys.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/zplbmi.tfm b/fonts/newpx/tfm/zplbmi.tfm
index 9d202876a3..37bece5b4d 100644
--- a/fonts/newpx/tfm/zplbmi.tfm
+++ b/fonts/newpx/tfm/zplbmi.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/zplbmi1.tfm b/fonts/newpx/tfm/zplbmi1.tfm
index 11206ba55c..2bd09c8136 100644
--- a/fonts/newpx/tfm/zplbmi1.tfm
+++ b/fonts/newpx/tfm/zplbmi1.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/zplbmia.tfm b/fonts/newpx/tfm/zplbmia.tfm
index e4b771f14f..48544a503b 100644
--- a/fonts/newpx/tfm/zplbmia.tfm
+++ b/fonts/newpx/tfm/zplbmia.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/zplbsy.tfm b/fonts/newpx/tfm/zplbsy.tfm
index 7377521055..4241f0701a 100644
--- a/fonts/newpx/tfm/zplbsy.tfm
+++ b/fonts/newpx/tfm/zplbsy.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/zplmi.tfm b/fonts/newpx/tfm/zplmi.tfm
index b720eac710..9fa91880c0 100644
--- a/fonts/newpx/tfm/zplmi.tfm
+++ b/fonts/newpx/tfm/zplmi.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/zplmi1.tfm b/fonts/newpx/tfm/zplmi1.tfm
index f38557b1b7..4246a1d2fc 100644
--- a/fonts/newpx/tfm/zplmi1.tfm
+++ b/fonts/newpx/tfm/zplmi1.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/zplmia.tfm b/fonts/newpx/tfm/zplmia.tfm
index 012a5696bf..054c1d6d49 100644
--- a/fonts/newpx/tfm/zplmia.tfm
+++ b/fonts/newpx/tfm/zplmia.tfm
Binary files differ
diff --git a/fonts/newpx/tfm/zplsy.tfm b/fonts/newpx/tfm/zplsy.tfm
index 42b146b014..a9ba1193bf 100644
--- a/fonts/newpx/tfm/zplsy.tfm
+++ b/fonts/newpx/tfm/zplsy.tfm
Binary files differ
diff --git a/fonts/newpx/type1/NewPXBMI.pfb b/fonts/newpx/type1/NewPXBMI.pfb
new file mode 100644
index 0000000000..361fb65c7b
--- /dev/null
+++ b/fonts/newpx/type1/NewPXBMI.pfb
Binary files differ
diff --git a/fonts/newpx/type1/NewPXBMI_gnu.pfb b/fonts/newpx/type1/NewPXBMI_gnu.pfb
new file mode 100644
index 0000000000..34b5b8ffce
--- /dev/null
+++ b/fonts/newpx/type1/NewPXBMI_gnu.pfb
Binary files differ
diff --git a/fonts/newpx/type1/NewPXMI.pfb b/fonts/newpx/type1/NewPXMI.pfb
new file mode 100644
index 0000000000..014556088a
--- /dev/null
+++ b/fonts/newpx/type1/NewPXMI.pfb
Binary files differ
diff --git a/fonts/newpx/type1/NewPXMI_gnu.pfb b/fonts/newpx/type1/NewPXMI_gnu.pfb
new file mode 100644
index 0000000000..23db46beca
--- /dev/null
+++ b/fonts/newpx/type1/NewPXMI_gnu.pfb
Binary files differ
diff --git a/fonts/newpx/type1/pxbmiaX.pfb b/fonts/newpx/type1/pxbmiaX.pfb
new file mode 100644
index 0000000000..ea5bf4e3b0
--- /dev/null
+++ b/fonts/newpx/type1/pxbmiaX.pfb
Binary files differ
diff --git a/fonts/newpx/type1/pxbsys.pfb b/fonts/newpx/type1/pxbsys.pfb
index 9e1bee935e..f3b933f8b4 100644
--- a/fonts/newpx/type1/pxbsys.pfb
+++ b/fonts/newpx/type1/pxbsys.pfb
Binary files differ
diff --git a/fonts/newpx/type1/pxmiaX.pfb b/fonts/newpx/type1/pxmiaX.pfb
new file mode 100644
index 0000000000..efac5ee648
--- /dev/null
+++ b/fonts/newpx/type1/pxmiaX.pfb
Binary files differ
diff --git a/fonts/newpx/type1/pxsys.pfb b/fonts/newpx/type1/pxsys.pfb
index 9b3c6fb79b..8cacfe6dbb 100644
--- a/fonts/newpx/type1/pxsys.pfb
+++ b/fonts/newpx/type1/pxsys.pfb
Binary files differ
diff --git a/fonts/newpx/vf/zplbmi.vf b/fonts/newpx/vf/zplbmi.vf
index b6be1767d9..522c9e2071 100644
--- a/fonts/newpx/vf/zplbmi.vf
+++ b/fonts/newpx/vf/zplbmi.vf
Binary files differ
diff --git a/fonts/newpx/vf/zplbmi1.vf b/fonts/newpx/vf/zplbmi1.vf
index d64f363feb..c7bceca1ed 100644
--- a/fonts/newpx/vf/zplbmi1.vf
+++ b/fonts/newpx/vf/zplbmi1.vf
Binary files differ
diff --git a/fonts/newpx/vf/zplbmia.vf b/fonts/newpx/vf/zplbmia.vf
index 1fa097f721..a9c4cb7434 100644
--- a/fonts/newpx/vf/zplbmia.vf
+++ b/fonts/newpx/vf/zplbmia.vf
Binary files differ
diff --git a/fonts/newpx/vf/zplbsy.vf b/fonts/newpx/vf/zplbsy.vf
index 2de06d01a1..f0ddeeb5eb 100644
--- a/fonts/newpx/vf/zplbsy.vf
+++ b/fonts/newpx/vf/zplbsy.vf
Binary files differ
diff --git a/fonts/newpx/vf/zplmi.vf b/fonts/newpx/vf/zplmi.vf
index ebe4b71777..f3b99493e7 100644
--- a/fonts/newpx/vf/zplmi.vf
+++ b/fonts/newpx/vf/zplmi.vf
Binary files differ
diff --git a/fonts/newpx/vf/zplmi1.vf b/fonts/newpx/vf/zplmi1.vf
index ccb67eebd2..e750482873 100644
--- a/fonts/newpx/vf/zplmi1.vf
+++ b/fonts/newpx/vf/zplmi1.vf
Binary files differ
diff --git a/fonts/newpx/vf/zplmia.vf b/fonts/newpx/vf/zplmia.vf
index b930bf822f..350e9cc9eb 100644
--- a/fonts/newpx/vf/zplmia.vf
+++ b/fonts/newpx/vf/zplmia.vf
Binary files differ
diff --git a/fonts/newpx/vf/zplsy.vf b/fonts/newpx/vf/zplsy.vf
index 6fd66277a9..ea71f6529d 100644
--- a/fonts/newpx/vf/zplsy.vf
+++ b/fonts/newpx/vf/zplsy.vf
Binary files differ
diff --git a/fonts/newtx/README b/fonts/newtx/README
index b48dd1523d..b001283b5e 100644
--- a/fonts/newtx/README
+++ b/fonts/newtx/README
@@ -1,10 +1,21 @@
This package, initially based on txfonts, provides many fixes and enhancements to the txfonts package, splitting it into two separate packages---newtxtext and newtxmath, which may be run independently of one another. It provides scaling, improved metrics, and other options. In particular, newtxmath offers a libertine option which substitutes Linux Libertine (provided with TeXLive and MikTeX) italic and Greek letters for the default Times letters, providing a good match for the Libertine text font, which is heavier than Computer Modern but lighter than Times, and in my experience, looks very sharp and clear on the screen.
-Current version: 1.554 2018-05-30
+Current version: 1.60 2019-09-27
This material is subject to the LaTeX Project Public License. See http://www.ctan.org/license/lppl1.3
for the details of that license.
+Changes in version 1.60
+1. Reworked the math italics to improve the rendering of some subscripts and superscripts, where formerly, overlaps could occur with superscripts like j, f, p and y with base shapes, such as D, that are round on the right. Increasing the left side-bearing of j, etc, helps with superscripts but makes those letters leave a large gap when used as subscripts.
+2. Corrected and enhanced the subscriptcorrection option to newtxmath so that it now fixes the above problem. I regret that this option is incompatible with xy-pic, both depending on making _ an active character but with very different behaviors. Newtxmath will detect if xy is loaded and disable subscriptcorrection if so.
+3. Added new script alphabets to math italics by extending the encoding from oml to full 256 slots, so they can be used without wasting math families.
+4. Rearranged ntxmia and ntxsy. The user should not notice this, unless I have erred somewhere.
+5. Provided an adaptive vector accent which matches the normal vector accent but extends as needed over its accentee. I've followed the usage of the esvect package, but changed its implementation.
+6. Many small corrections to spacing and accent positioning.
+7. Revised the superior letters fonts so they have appropriate unicode values.
+8. As a result of these changes, documents generated using newpxmath and appropriate settings will validate PDF/A-1b. (Thanks to Ross Moore for providing the necessary files and details on this.) See the updated documentation to newtx for details.
+9. Corrected AMS replacement font ntxsym to fix \dalath, \mathbb{k}, \circledR and \circledS.
+
Changes in version 1.554
1. Removed some map lines from newtx.map that were duplicates of some in stickstootext.map.
2. Fixed a number of problems that had crept into the libertime math italic alphabets, which were in some cases not operating as documented with option libaltvw. Now they do.
diff --git a/fonts/newtx/afm/LibertineI-5nu.afm b/fonts/newtx/afm/LibertineI-5nu.afm
new file mode 100644
index 0000000000..c3eb4d3229
--- /dev/null
+++ b/fonts/newtx/afm/LibertineI-5nu.afm
@@ -0,0 +1,20 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20170730
+Comment Creation Date: Sun Jun 16 16:17:51 2019
+FontName LibertineI-5nu
+FullName LibertineI-5nu
+FamilyName LibertineI
+Weight Medium
+Notice (Created by Michael Sharpe with FontForge 2.0 (http://fontforge.sf.net))
+ItalicAngle -12
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox 38 -11 533 442
+XHeight 442
+StartCharMetrics 1
+C 110 ; WX 567 ; N nu ; B 38 -11 533 442 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineMathBMI.afm b/fonts/newtx/afm/LibertineMathBMI.afm
new file mode 100644
index 0000000000..223ed636b2
--- /dev/null
+++ b/fonts/newtx/afm/LibertineMathBMI.afm
@@ -0,0 +1,167 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Wed Sep 11 14:39:03 2019
+FontName LibertineMathBMI
+FullName Libertine Math Math Bold Italic
+FamilyName LibertineMath
+Weight Regular
+Notice (Libertine isCopyright (c) Philip Poll)
+Comment Modifications Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -12
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -90 -263 964 786
+StartCharMetrics 148
+C 0 ; WX 267 ; N degree ; B 34 426 233 625 ;
+C 1 ; WX 326 ; N u1D6A4.bit ; B 112 -10 335 436 ;
+C 2 ; WX 349 ; N u1D6A5.bit ; B -90 -207 336 447 ;
+C 3 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 4 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 5 ; WX 274 ; N gravecomb ; B 51 545 224 713 ;
+C 6 ; WX 274 ; N acutecomb ; B 50 542 224 713 ;
+C 7 ; WX 349 ; N uni0302 ; B 43 518 306 671 ;
+C 8 ; WX 292 ; N tildecomb ; B 12 562 301 680 ;
+C 9 ; WX 425 ; N uni0304 ; B 59 503 374 553 ;
+C 10 ; WX 317 ; N uni0306 ; B 28 523 308 681 ;
+C 11 ; WX 291 ; N uni0307 ; B 96 579 220 703 ;
+C 12 ; WX 455 ; N uni0308 ; B 96 520 385 627 ;
+C 13 ; WX 361 ; N uni030A ; B 108 588 279 754 ;
+C 14 ; WX 349 ; N uni030C ; B 59 514 312 661 ;
+C 15 ; WX 446 ; N uni03F6 ; B 58 -12 479 445 ;
+C 16 ; WX 501 ; N uni20DB ; B 30 520 500 627 ;
+C 17 ; WX 651 ; N uni20DC ; B 30 520 681 627 ;
+C 18 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 19 ; WX 345 ; N uni2113 ; B 10 -14 382 588 ;
+C 20 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 21 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 22 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 23 ; WX 541 ; N u1D71E ; B 4 -1 595 647 ;
+C 24 ; WX 661 ; N u1D71F ; B 22 -2 634 652 ;
+C 25 ; WX 734 ; N u1D723 ; B 97 -12 773 658 ;
+C 26 ; WX 664 ; N u1D726 ; B -66 0 550 658 ;
+C 27 ; WX 672 ; N u1D729 ; B 62 -4 723 650 ;
+C 28 ; WX 691 ; N u1D72B ; B 13 -1 793 647 ;
+C 29 ; WX 618 ; N u1D72E ; B 28 -1 674 647 ;
+C 30 ; WX 570 ; N u1D730 ; B 107 -1 669 658 ;
+C 31 ; WX 695 ; N u1D731 ; B 85 -1 725 647 ;
+C 32 ; WX 711 ; N u1D733 ; B 122 -1 802 647 ;
+C 33 ; WX 717 ; N u1D734 ; B 42 0 751 658 ;
+C 34 ; WX 638 ; N u1D736 ; B 75 -12 730 448 ;
+C 35 ; WX 542 ; N u1D737 ; B 28 -233 596 698 ;
+C 36 ; WX 550 ; N u1D738 ; B 83 -263 612 445 ;
+C 37 ; WX 540 ; N u1D739 ; B 84 -12 590 698 ;
+C 38 ; WX 446 ; N u1D750 ; B 71 -12 492 445 ;
+C 39 ; WX 496 ; N u1D73B ; B 97 -204 577 672 ;
+C 40 ; WX 561 ; N u1D73C ; B 99 -237 560 445 ;
+C 41 ; WX 498 ; N u1D73D ; B 90 -12 563 681 ;
+C 42 ; WX 328 ; N u1D73E ; B 114 -12 347 445 ;
+C 43 ; WX 530 ; N u1D73F ; B 93 -28 589 445 ;
+C 44 ; WX 581 ; N u1D740 ; B 16 -15 593 698 ;
+C 45 ; WX 545 ; N u1D741 ; B 20 -232 547 448 ;
+C 46 ; WX 517 ; N u1D742 ; B 98 -12 581 445 ;
+C 47 ; WX 460 ; N u1D743 ; B 76 -209 560 664 ;
+C 48 ; WX 607 ; N u1D745 ; B 51 -12 675 459 ;
+C 49 ; WX 561 ; N u1D746 ; B 2 -248 589 445 ;
+C 50 ; WX 594 ; N u1D748 ; B 79 -12 672 465 ;
+C 51 ; WX 463 ; N u1D749 ; B 90 -12 532 459 ;
+C 52 ; WX 530 ; N u1D74A ; B 119 -12 568 445 ;
+C 53 ; WX 553 ; N u1D753 ; B 20 -220 580 647 ;
+C 54 ; WX 559 ; N u1D74C ; B 20 -190 652 448 ;
+C 55 ; WX 600 ; N u1D74D ; B 20 -220 624 538 ;
+C 56 ; WX 686 ; N u1D74E ; B 20 -12 703 456 ;
+C 57 ; WX 387 ; N u1D73A ; B 20 -12 430 445 ;
+C 58 ; WX 553 ; N u1D751 ; B 20 -12 603 681 ;
+C 59 ; WX 669 ; N u1D755 ; B 20 -18 761 427 ;
+C 60 ; WX 472 ; N u1D754 ; B 20 -249 503 445 ;
+C 61 ; WX 431 ; N u1D747 ; B 20 -222 488 445 ;
+C 62 ; WX 580 ; N u1D74B ; B 20 -237 609 446 ;
+C 63 ; WX 651 ; N u1D735 ; B 20 -2 632 652 ;
+C 64 ; WX 448 ; N u1D74F ; B 20 -11 489 617 ;
+C 66 ; WX 539 ; N uni210F ; B 41 -12 498 698 ;
+C 67 ; WX 519 ; N uni210F.alt ; B 89 -10 528 698 ;
+C 68 ; WX 494 ; N u1D752 ; B 20 -17 527 411 ;
+C 69 ; WX 581 ; N uni019B.alt ; B 16 -15 593 698 ;
+C 70 ; WX 581 ; N uni019B.ital ; B 16 -15 593 698 ;
+C 71 ; WX 743 ; N u1D468 ; B 20 -2 723 658 ;
+C 72 ; WX 626 ; N u1D469 ; B 20 -3 606 647 ;
+C 73 ; WX 575 ; N u1D46A ; B 20 -10 612 658 ;
+C 74 ; WX 687 ; N u1D46B ; B 19 0 712 647 ;
+C 75 ; WX 535 ; N u1D46C ; B 19 0 584 646 ;
+C 76 ; WX 489 ; N u1D46D ; B 19 -1 583 646 ;
+C 77 ; WX 639 ; N u1D46E ; B 19 -10 677 659 ;
+C 78 ; WX 717 ; N u1D46F ; B 20 -1 813 646 ;
+C 79 ; WX 327 ; N u1D470 ; B 20 -2 435 647 ;
+C 80 ; WX 340 ; N u1D471 ; B -51 -196 459 646 ;
+C 81 ; WX 660 ; N u1D472 ; B 20 -2 757 648 ;
+C 82 ; WX 546 ; N u1D473 ; B 20 -1 546 646 ;
+C 83 ; WX 842 ; N u1D474 ; B 20 -12 889 647 ;
+C 84 ; WX 709 ; N u1D475 ; B 19 -12 819 648 ;
+C 85 ; WX 657 ; N u1D476 ; B 20 -12 696 658 ;
+C 86 ; WX 521 ; N u1D477 ; B 19 -1 594 654 ;
+C 87 ; WX 657 ; N u1D478 ; B 20 -219 697 659 ;
+C 88 ; WX 583 ; N u1D479 ; B 20 -6 598 654 ;
+C 89 ; WX 424 ; N u1D47A ; B 20 -10 447 658 ;
+C 90 ; WX 493 ; N u1D47B ; B 20 -1 585 673 ;
+C 91 ; WX 570 ; N u1D47C ; B 20 -12 694 646 ;
+C 92 ; WX 521 ; N u1D47D ; B 19 -12 636 646 ;
+C 93 ; WX 868 ; N u1D47E ; B 20 -12 964 646 ;
+C 94 ; WX 694 ; N u1D47F ; B 20 -1 785 646 ;
+C 95 ; WX 503 ; N u1D480 ; B 19 -1 618 646 ;
+C 96 ; WX 597 ; N u1D481 ; B 19 0 680 658 ;
+C 97 ; WX 482 ; N u1D482 ; B 20 -10 499 448 ;
+C 98 ; WX 473 ; N u1D483 ; B 20 -17 498 698 ;
+C 99 ; WX 392 ; N u1D484 ; B 20 -10 431 444 ;
+C 100 ; WX 506 ; N u1D485 ; B 20 -10 552 698 ;
+C 101 ; WX 415 ; N u1D486 ; B 20 -10 416 444 ;
+C 102 ; WX 483 ; N u1D487 ; B 20 -238 603 698 ;
+C 103 ; WX 539 ; N u1D488 ; B 39 -235 543 439 ;
+C 104 ; WX 551 ; N u1D489 ; B 20 -10 531 699 ;
+C 105 ; WX 236 ; N u1D48A ; B 20 -10 243 631 ;
+C 106 ; WX 445 ; N u1D48B ; B 20 -207 445 632 ;
+C 107 ; WX 507 ; N u1D48C ; B 19 -10 534 699 ;
+C 108 ; WX 251 ; N u1D48D ; B 19 -10 284 699 ;
+C 109 ; WX 782 ; N u1D48E ; B 20 -11 788 439 ;
+C 110 ; WX 551 ; N u1D48F ; B 19 -10 531 440 ;
+C 111 ; WX 455 ; N u1D490 ; B 20 -10 465 444 ;
+C 112 ; WX 596 ; N u1D491 ; B 20 -234 613 470 ;
+C 113 ; WX 514 ; N u1D492 ; B 20 -234 494 458 ;
+C 114 ; WX 375 ; N u1D493 ; B 20 -10 433 436 ;
+C 115 ; WX 373 ; N u1D494 ; B 20 -12 382 444 ;
+C 116 ; WX 285 ; N u1D495 ; B 20 -10 333 573 ;
+C 117 ; WX 502 ; N u1D496 ; B 20 -10 511 444 ;
+C 118 ; WX 470 ; N u1D497 ; B 44 -7 490 439 ;
+C 119 ; WX 621 ; N u1D498 ; B 20 -12 653 444 ;
+C 120 ; WX 511 ; N u1D499 ; B 19 -11 562 440 ;
+C 121 ; WX 516 ; N u1D49A ; B 20 -232 555 444 ;
+C 122 ; WX 431 ; N u1D49B ; B 20 -15 463 457 ;
+C 123 ; WX 465 ; N u1D497.alt ; B 34 -12 458 445 ;
+C 124 ; WX 687 ; N u1D498.alt ; B 21 -12 669 445 ;
+C 125 ; WX 526 ; N u1D742.alt ; B 33 -11 500 445 ;
+C 126 ; WX 570 ; N u1D49A.alt ; B 72 -237 586 444 ;
+C 127 ; WX 524 ; N zero.oldstyle ; B 40 -10 484 444 ;
+C 128 ; WX 375 ; N one.oldstyle ; B 36 -2 353 446 ;
+C 129 ; WX 462 ; N two.oldstyle ; B 55 0 454 444 ;
+C 130 ; WX 467 ; N three.oldstyle ; B 45 -177 433 444 ;
+C 131 ; WX 490 ; N four.oldstyle ; B 28 -171 482 441 ;
+C 132 ; WX 437 ; N five.oldstyle ; B 26 -180 411 444 ;
+C 133 ; WX 472 ; N six.oldstyle ; B 38 -10 441 612 ;
+C 134 ; WX 421 ; N seven.oldstyle ; B 20 -171 406 442 ;
+C 135 ; WX 490 ; N eight.oldstyle ; B 46 -11 444 610 ;
+C 136 ; WX 468 ; N nine.oldstyle ; B 33 -178 436 444 ;
+C 137 ; WX 465 ; N zero ; B 39 -10 422 610 ;
+C 138 ; WX 465 ; N one ; B 89 -2 380 608 ;
+C 139 ; WX 465 ; N two ; B 52 -2 412 610 ;
+C 140 ; WX 465 ; N three ; B 44 -10 413 610 ;
+C 141 ; WX 465 ; N four ; B 28 -2 445 610 ;
+C 142 ; WX 465 ; N five ; B 54 -11 408 611 ;
+C 143 ; WX 465 ; N six ; B 44 -11 421 611 ;
+C 144 ; WX 465 ; N seven ; B 51 -13 424 614 ;
+C 145 ; WX 465 ; N eight ; B 46 -10 419 610 ;
+C 146 ; WX 465 ; N nine ; B 50 -12 427 610 ;
+C 147 ; WX 244 ; N period ; B 66 -10 178 101 ;
+C 148 ; WX 244 ; N comma ; B 51 -137 187 102 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineMathBMI5.afm b/fonts/newtx/afm/LibertineMathBMI5.afm
new file mode 100644
index 0000000000..0a238a7589
--- /dev/null
+++ b/fonts/newtx/afm/LibertineMathBMI5.afm
@@ -0,0 +1,167 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Wed Sep 11 14:41:17 2019
+FontName LibertineMathBMI5
+FullName Libertine Math Math Bold Italic 5
+FamilyName LibertineMath
+Weight Regular
+Notice (Libertine isCopyright (c) Philip Poll)
+Comment Modifications Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -12
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -107 -263 1191 786
+StartCharMetrics 148
+C 0 ; WX 267 ; N degree ; B 34 426 233 625 ;
+C 1 ; WX 377 ; N u1D6A4.bit ; B 128 -10 388 436 ;
+C 2 ; WX 384 ; N u1D6A5.bit ; B -103 -210 371 448 ;
+C 3 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 4 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 5 ; WX 274 ; N gravecomb ; B 51 545 224 713 ;
+C 6 ; WX 274 ; N acutecomb ; B 50 542 224 713 ;
+C 7 ; WX 349 ; N uni0302 ; B 43 518 306 671 ;
+C 8 ; WX 292 ; N tildecomb ; B 12 562 301 680 ;
+C 9 ; WX 425 ; N uni0304 ; B 59 503 374 553 ;
+C 10 ; WX 317 ; N uni0306 ; B 28 523 308 681 ;
+C 11 ; WX 291 ; N uni0307 ; B 96 579 220 703 ;
+C 12 ; WX 455 ; N uni0308 ; B 96 520 385 627 ;
+C 13 ; WX 361 ; N uni030A ; B 108 588 279 754 ;
+C 14 ; WX 349 ; N uni030C ; B 59 514 312 661 ;
+C 15 ; WX 512 ; N uni03F6 ; B 66 -12 551 445 ;
+C 16 ; WX 501 ; N uni20DB ; B 30 520 500 627 ;
+C 17 ; WX 651 ; N uni20DC ; B 30 520 681 627 ;
+C 18 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 19 ; WX 380 ; N uni2113 ; B 12 -16 420 588 ;
+C 20 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 21 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 22 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 23 ; WX 607 ; N u1D71E ; B 4 -1 671 647 ;
+C 24 ; WX 743 ; N u1D71F ; B 27 -2 714 652 ;
+C 25 ; WX 845 ; N u1D723 ; B 111 -12 890 658 ;
+C 26 ; WX 760 ; N u1D726 ; B -76 0 631 658 ;
+C 27 ; WX 772 ; N u1D729 ; B 71 -4 832 650 ;
+C 28 ; WX 753 ; N u1D72B ; B 15 -1 873 647 ;
+C 29 ; WX 708 ; N u1D72E ; B 32 -1 773 647 ;
+C 30 ; WX 651 ; N u1D730 ; B 122 -1 765 658 ;
+C 31 ; WX 800 ; N u1D731 ; B 97 -1 835 647 ;
+C 32 ; WX 792 ; N u1D733 ; B 140 -1 897 647 ;
+C 33 ; WX 824 ; N u1D734 ; B 48 0 864 658 ;
+C 34 ; WX 731 ; N u1D736 ; B 86 -12 838 448 ;
+C 35 ; WX 608 ; N u1D737 ; B 32 -233 671 698 ;
+C 36 ; WX 634 ; N u1D738 ; B 95 -263 706 445 ;
+C 37 ; WX 626 ; N u1D739 ; B 96 -12 684 698 ;
+C 38 ; WX 512 ; N u1D750 ; B 81 -12 566 445 ;
+C 39 ; WX 572 ; N u1D73B ; B 111 -204 665 672 ;
+C 40 ; WX 641 ; N u1D73C ; B 113 -237 641 445 ;
+C 41 ; WX 573 ; N u1D73D ; B 103 -12 649 681 ;
+C 42 ; WX 376 ; N u1D73E ; B 131 -12 399 445 ;
+C 43 ; WX 602 ; N u1D73F ; B 107 -28 672 445 ;
+C 44 ; WX 665 ; N u1D740 ; B 18 -15 681 698 ;
+C 45 ; WX 613 ; N u1D741 ; B 22 -232 616 448 ;
+C 46 ; WX 596 ; N u1D742 ; B 112 -12 670 445 ;
+C 47 ; WX 530 ; N u1D743 ; B 87 -209 645 666 ;
+C 48 ; WX 693 ; N u1D745 ; B 59 -12 775 446 ;
+C 49 ; WX 631 ; N u1D746 ; B 2 -246 666 445 ;
+C 50 ; WX 684 ; N u1D748 ; B 91 -12 774 465 ;
+C 51 ; WX 531 ; N u1D749 ; B 103 -12 611 459 ;
+C 52 ; WX 603 ; N u1D74A ; B 136 -12 647 445 ;
+C 53 ; WX 696 ; N u1D753 ; B 81 -220 727 647 ;
+C 54 ; WX 624 ; N u1D74C ; B 12 -184 734 448 ;
+C 55 ; WX 792 ; N u1D74D ; B 122 -220 820 538 ;
+C 56 ; WX 849 ; N u1D74E ; B 80 -12 870 463 ;
+C 57 ; WX 501 ; N u1D73A ; B 78 -12 552 445 ;
+C 58 ; WX 701 ; N u1D751 ; B 97 -12 759 681 ;
+C 59 ; WX 832 ; N u1D755 ; B 93 -18 938 427 ;
+C 60 ; WX 562 ; N u1D754 ; B 42 -249 599 445 ;
+C 61 ; WX 551 ; N u1D747 ; B 78 -222 618 445 ;
+C 62 ; WX 727 ; N u1D74B ; B 98 -237 761 446 ;
+C 63 ; WX 743 ; N u1D735 ; B 127 -2 814 652 ;
+C 64 ; WX 448 ; N u1D74F ; B 20 -11 489 617 ;
+C 66 ; WX 664 ; N uni210F ; B 50 -12 631 698 ;
+C 67 ; WX 609 ; N uni210F.alt ; B 50 -12 631 698 ;
+C 68 ; WX 494 ; N u1D752 ; B 20 -17 527 411 ;
+C 69 ; WX 581 ; N uni019B.alt ; B 16 -15 593 698 ;
+C 70 ; WX 581 ; N uni019B.ital ; B 16 -15 593 698 ;
+C 71 ; WX 803 ; N u1D468 ; B 15 -2 801 658 ;
+C 72 ; WX 669 ; N u1D469 ; B 5 -2 669 647 ;
+C 73 ; WX 732 ; N u1D46A ; B 94 -10 775 658 ;
+C 74 ; WX 776 ; N u1D46B ; B 24 0 807 646 ;
+C 75 ; WX 605 ; N u1D46C ; B 27 0 663 646 ;
+C 76 ; WX 554 ; N u1D46D ; B 27 -1 662 646 ;
+C 77 ; WX 797 ; N u1D46E ; B 88 -10 841 658 ;
+C 78 ; WX 827 ; N u1D46F ; B 56 -1 940 646 ;
+C 79 ; WX 391 ; N u1D470 ; B 43 -2 517 647 ;
+C 80 ; WX 415 ; N u1D471 ; B -63 -200 562 646 ;
+C 81 ; WX 778 ; N u1D472 ; B 61 -2 891 648 ;
+C 82 ; WX 645 ; N u1D473 ; B 56 -1 646 646 ;
+C 83 ; WX 956 ; N u1D474 ; B 17 -12 1013 647 ;
+C 84 ; WX 852 ; N u1D475 ; B 61 -12 979 647 ;
+C 85 ; WX 846 ; N u1D476 ; B 111 -12 891 658 ;
+C 86 ; WX 588 ; N u1D477 ; B 24 -1 672 654 ;
+C 87 ; WX 846 ; N u1D478 ; B 111 -219 891 658 ;
+C 88 ; WX 667 ; N u1D479 ; B 24 -9 683 654 ;
+C 89 ; WX 525 ; N u1D47A ; B 58 -10 552 658 ;
+C 90 ; WX 636 ; N u1D47B ; B 113 -1 742 673 ;
+C 91 ; WX 773 ; N u1D47C ; B 152 -12 917 646 ;
+C 92 ; WX 698 ; N u1D47D ; B 125 -12 832 646 ;
+C 93 ; WX 1078 ; N u1D47E ; B 125 -12 1191 646 ;
+C 94 ; WX 779 ; N u1D47F ; B 5 -1 884 646 ;
+C 95 ; WX 678 ; N u1D480 ; B 124 -1 810 646 ;
+C 96 ; WX 682 ; N u1D481 ; B 23 0 780 658 ;
+C 97 ; WX 621 ; N u1D482 ; B 89 -10 641 447 ;
+C 98 ; WX 581 ; N u1D483 ; B 73 -17 611 698 ;
+C 99 ; WX 513 ; N u1D484 ; B 82 -10 558 444 ;
+C 100 ; WX 639 ; N u1D485 ; B 80 -10 693 698 ;
+C 101 ; WX 547 ; N u1D486 ; B 91 -10 550 444 ;
+C 102 ; WX 418 ; N u1D487 ; B -107 -238 605 698 ;
+C 103 ; WX 627 ; N u1D488 ; B 45 -235 633 439 ;
+C 104 ; WX 628 ; N u1D489 ; B 83 -20 635 698 ;
+C 105 ; WX 377 ; N u1D48A ; B 126 -10 386 631 ;
+C 106 ; WX 402 ; N u1D48B ; B -103 -207 413 631 ;
+C 107 ; WX 651 ; N u1D48C ; B 95 -10 682 698 ;
+C 108 ; WX 368 ; N u1D48D ; B 109 -10 409 698 ;
+C 109 ; WX 981 ; N u1D48E ; B 102 -10 989 439 ;
+C 110 ; WX 699 ; N u1D48F ; B 102 -10 693 439 ;
+C 111 ; WX 586 ; N u1D490 ; B 82 -10 598 444 ;
+C 112 ; WX 605 ; N u1D491 ; B -33 -238 626 463 ;
+C 113 ; WX 657 ; N u1D492 ; B 87 -234 634 451 ;
+C 114 ; WX 512 ; N u1D493 ; B 102 -10 580 436 ;
+C 115 ; WX 482 ; N u1D494 ; B 75 -12 495 444 ;
+C 116 ; WX 391 ; N u1D495 ; B 101 -10 457 595 ;
+C 117 ; WX 627 ; N u1D496 ; B 91 -10 641 446 ;
+C 118 ; WX 595 ; N u1D497 ; B 50 -11 619 439 ;
+C 119 ; WX 805 ; N u1D498 ; B 117 -12 843 444 ;
+C 120 ; WX 599 ; N u1D499 ; B 52 -12 657 445 ;
+C 121 ; WX 585 ; N u1D49A ; B 17 -232 631 444 ;
+C 122 ; WX 522 ; N u1D49B ; B 52 -15 560 457 ;
+C 123 ; WX 569 ; N u1D497.alt ; B 42 -16 562 445 ;
+C 124 ; WX 841 ; N u1D498.alt ; B 26 -16 821 445 ;
+C 125 ; WX 660 ; N u1D742.alt ; B 40 -11 630 445 ;
+C 126 ; WX 647 ; N u1D49A.alt ; B 84 -237 667 444 ;
+C 127 ; WX 524 ; N zero.oldstyle ; B 40 -10 484 444 ;
+C 128 ; WX 375 ; N one.oldstyle ; B 36 -2 353 446 ;
+C 129 ; WX 462 ; N two.oldstyle ; B 55 0 454 444 ;
+C 130 ; WX 467 ; N three.oldstyle ; B 45 -177 433 444 ;
+C 131 ; WX 490 ; N four.oldstyle ; B 28 -171 482 441 ;
+C 132 ; WX 437 ; N five.oldstyle ; B 26 -180 411 444 ;
+C 133 ; WX 472 ; N six.oldstyle ; B 38 -10 441 612 ;
+C 134 ; WX 421 ; N seven.oldstyle ; B 20 -171 406 442 ;
+C 135 ; WX 490 ; N eight.oldstyle ; B 46 -11 444 610 ;
+C 136 ; WX 468 ; N nine.oldstyle ; B 33 -178 436 444 ;
+C 137 ; WX 571 ; N zero ; B 45 -10 523 610 ;
+C 138 ; WX 548 ; N one ; B 102 -2 451 608 ;
+C 139 ; WX 560 ; N two ; B 60 -2 500 610 ;
+C 140 ; WX 565 ; N three ; B 50 -10 506 610 ;
+C 141 ; WX 548 ; N four ; B 32 -2 526 610 ;
+C 142 ; WX 551 ; N five ; B 62 -11 487 612 ;
+C 143 ; WX 568 ; N six ; B 50 -11 518 611 ;
+C 144 ; WX 533 ; N seven ; B 59 -13 488 614 ;
+C 145 ; WX 560 ; N eight ; B 52 -10 508 610 ;
+C 146 ; WX 568 ; N nine ; B 58 -12 526 610 ;
+C 147 ; WX 302 ; N period ; B 76 -14 228 100 ;
+C 148 ; WX 289 ; N comma ; B 58 -137 226 102 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineMathBMI7.afm b/fonts/newtx/afm/LibertineMathBMI7.afm
new file mode 100644
index 0000000000..8a5aac6f2b
--- /dev/null
+++ b/fonts/newtx/afm/LibertineMathBMI7.afm
@@ -0,0 +1,167 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Wed Sep 11 14:42:01 2019
+FontName LibertineMathBMI7
+FullName Libertine Math Math Bold Italic 7
+FamilyName LibertineMath
+Weight Regular
+Notice (Libertine isCopyright (c) Philip Poll)
+Comment Modifications Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -12
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -100 -263 1116 786
+StartCharMetrics 148
+C 0 ; WX 267 ; N degree ; B 34 426 233 625 ;
+C 1 ; WX 326 ; N u1D6A4.bit ; B 112 -10 335 436 ;
+C 2 ; WX 366 ; N u1D6A5.bit ; B -96 -207 354 447 ;
+C 3 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 4 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 5 ; WX 274 ; N gravecomb ; B 51 545 224 713 ;
+C 6 ; WX 274 ; N acutecomb ; B 50 542 224 713 ;
+C 7 ; WX 349 ; N uni0302 ; B 43 518 306 671 ;
+C 8 ; WX 292 ; N tildecomb ; B 12 562 301 680 ;
+C 9 ; WX 425 ; N uni0304 ; B 59 503 374 553 ;
+C 10 ; WX 317 ; N uni0306 ; B 28 523 308 681 ;
+C 11 ; WX 291 ; N uni0307 ; B 96 579 220 703 ;
+C 12 ; WX 455 ; N uni0308 ; B 96 520 385 627 ;
+C 13 ; WX 361 ; N uni030A ; B 108 588 279 754 ;
+C 14 ; WX 349 ; N uni030C ; B 59 514 312 661 ;
+C 15 ; WX 468 ; N uni03F6 ; B 62 -12 504 445 ;
+C 16 ; WX 501 ; N uni20DB ; B 30 520 500 627 ;
+C 17 ; WX 651 ; N uni20DC ; B 30 520 681 627 ;
+C 18 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 19 ; WX 351 ; N uni2113 ; B 52 -14 430 588 ;
+C 20 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 21 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 22 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 23 ; WX 565 ; N u1D71E ; B 4 -1 623 647 ;
+C 24 ; WX 699 ; N u1D71F ; B 25 -2 671 652 ;
+C 25 ; WX 765 ; N u1D723 ; B 104 -12 807 658 ;
+C 26 ; WX 706 ; N u1D726 ; B -71 0 584 658 ;
+C 27 ; WX 702 ; N u1D729 ; B 66 -4 757 650 ;
+C 28 ; WX 709 ; N u1D72B ; B 14 -1 820 647 ;
+C 29 ; WX 657 ; N u1D72E ; B 30 -1 717 647 ;
+C 30 ; WX 609 ; N u1D730 ; B 114 -1 715 658 ;
+C 31 ; WX 726 ; N u1D731 ; B 91 -1 759 647 ;
+C 32 ; WX 737 ; N u1D733 ; B 131 -1 835 647 ;
+C 33 ; WX 748 ; N u1D734 ; B 45 0 785 658 ;
+C 34 ; WX 673 ; N u1D736 ; B 80 -12 772 448 ;
+C 35 ; WX 557 ; N u1D737 ; B 30 -233 615 698 ;
+C 36 ; WX 572 ; N u1D738 ; B 89 -263 639 445 ;
+C 37 ; WX 554 ; N u1D739 ; B 90 -12 608 698 ;
+C 38 ; WX 468 ; N u1D750 ; B 76 -12 518 445 ;
+C 39 ; WX 518 ; N u1D73B ; B 104 -204 605 672 ;
+C 40 ; WX 581 ; N u1D73C ; B 106 -237 580 445 ;
+C 41 ; WX 517 ; N u1D73D ; B 96 -12 587 681 ;
+C 42 ; WX 342 ; N u1D73E ; B 122 -12 363 445 ;
+C 43 ; WX 554 ; N u1D73F ; B 100 -28 619 445 ;
+C 44 ; WX 616 ; N u1D740 ; B 17 -15 630 698 ;
+C 45 ; WX 554 ; N u1D741 ; B 21 -232 557 448 ;
+C 46 ; WX 538 ; N u1D742 ; B 105 -12 607 445 ;
+C 47 ; WX 473 ; N u1D743 ; B 81 -209 580 666 ;
+C 48 ; WX 641 ; N u1D745 ; B 55 -12 716 446 ;
+C 49 ; WX 581 ; N u1D746 ; B 2 -246 612 445 ;
+C 50 ; WX 620 ; N u1D748 ; B 85 -12 704 465 ;
+C 51 ; WX 488 ; N u1D749 ; B 96 -12 562 459 ;
+C 52 ; WX 549 ; N u1D74A ; B 127 -12 590 445 ;
+C 53 ; WX 625 ; N u1D753 ; B 76 -220 654 647 ;
+C 54 ; WX 575 ; N u1D74C ; B 11 -184 676 448 ;
+C 55 ; WX 713 ; N u1D74D ; B 114 -220 739 538 ;
+C 56 ; WX 761 ; N u1D74E ; B 75 -12 780 463 ;
+C 57 ; WX 452 ; N u1D73A ; B 73 -12 499 445 ;
+C 58 ; WX 636 ; N u1D751 ; B 91 -12 690 681 ;
+C 59 ; WX 758 ; N u1D755 ; B 87 -18 857 427 ;
+C 60 ; WX 508 ; N u1D754 ; B 39 -249 542 445 ;
+C 61 ; WX 500 ; N u1D747 ; B 73 -222 562 445 ;
+C 62 ; WX 667 ; N u1D74B ; B 92 -237 699 446 ;
+C 63 ; WX 699 ; N u1D735 ; B 125 -2 771 652 ;
+C 64 ; WX 505 ; N u1D74F ; B 62 -11 549 617 ;
+C 66 ; WX 539 ; N uni210F ; B 41 -12 498 698 ;
+C 67 ; WX 519 ; N uni210F.alt ; B 89 -10 528 698 ;
+C 68 ; WX 538 ; N u1D752 ; B 62 -17 574 411 ;
+C 69 ; WX 581 ; N uni019B.alt ; B 16 -15 593 698 ;
+C 70 ; WX 581 ; N uni019B.ital ; B 16 -15 593 698 ;
+C 71 ; WX 753 ; N u1D468 ; B 14 -2 751 658 ;
+C 72 ; WX 616 ; N u1D469 ; B 5 -2 615 647 ;
+C 73 ; WX 670 ; N u1D46A ; B 88 -10 710 658 ;
+C 74 ; WX 717 ; N u1D46B ; B 22 0 744 646 ;
+C 75 ; WX 559 ; N u1D46C ; B 25 0 612 646 ;
+C 76 ; WX 511 ; N u1D46D ; B 25 -1 612 646 ;
+C 77 ; WX 732 ; N u1D46E ; B 82 -10 772 658 ;
+C 78 ; WX 776 ; N u1D46F ; B 52 -1 880 646 ;
+C 79 ; WX 357 ; N u1D470 ; B 40 -2 474 647 ;
+C 80 ; WX 372 ; N u1D471 ; B -55 -198 500 646 ;
+C 81 ; WX 730 ; N u1D472 ; B 57 -2 834 648 ;
+C 82 ; WX 605 ; N u1D473 ; B 52 -1 605 646 ;
+C 83 ; WX 891 ; N u1D474 ; B 16 -12 943 647 ;
+C 84 ; WX 794 ; N u1D475 ; B 57 -12 912 647 ;
+C 85 ; WX 766 ; N u1D476 ; B 104 -12 808 658 ;
+C 86 ; WX 540 ; N u1D477 ; B 22 -1 618 654 ;
+C 87 ; WX 766 ; N u1D478 ; B 104 -219 808 658 ;
+C 88 ; WX 615 ; N u1D479 ; B 22 -9 630 654 ;
+C 89 ; WX 467 ; N u1D47A ; B 54 -10 492 658 ;
+C 90 ; WX 597 ; N u1D47B ; B 106 -1 696 673 ;
+C 91 ; WX 714 ; N u1D47C ; B 142 -12 847 646 ;
+C 92 ; WX 648 ; N u1D47D ; B 117 -12 772 646 ;
+C 93 ; WX 1012 ; N u1D47E ; B 117 -12 1116 646 ;
+C 94 ; WX 717 ; N u1D47F ; B 5 -1 815 646 ;
+C 95 ; WX 624 ; N u1D480 ; B 116 -1 747 646 ;
+C 96 ; WX 639 ; N u1D481 ; B 21 0 729 658 ;
+C 97 ; WX 569 ; N u1D482 ; B 83 -10 587 447 ;
+C 98 ; WX 534 ; N u1D483 ; B 68 -17 562 698 ;
+C 99 ; WX 458 ; N u1D484 ; B 77 -10 500 444 ;
+C 100 ; WX 586 ; N u1D485 ; B 75 -10 636 698 ;
+C 101 ; WX 490 ; N u1D486 ; B 85 -10 492 444 ;
+C 102 ; WX 381 ; N u1D487 ; B -100 -238 555 698 ;
+C 103 ; WX 582 ; N u1D488 ; B 42 -235 587 439 ;
+C 104 ; WX 577 ; N u1D489 ; B 78 -20 583 698 ;
+C 105 ; WX 333 ; N u1D48A ; B 118 -10 341 631 ;
+C 106 ; WX 363 ; N u1D48B ; B -96 -207 373 631 ;
+C 107 ; WX 609 ; N u1D48C ; B 89 -10 638 698 ;
+C 108 ; WX 339 ; N u1D48D ; B 102 -10 376 698 ;
+C 109 ; WX 879 ; N u1D48E ; B 95 -10 886 439 ;
+C 110 ; WX 626 ; N u1D48F ; B 95 -10 620 439 ;
+C 111 ; WX 525 ; N u1D490 ; B 77 -10 536 444 ;
+C 112 ; WX 556 ; N u1D491 ; B -31 -238 575 469 ;
+C 113 ; WX 603 ; N u1D492 ; B 81 -234 581 451 ;
+C 114 ; WX 466 ; N u1D493 ; B 95 -10 529 436 ;
+C 115 ; WX 425 ; N u1D494 ; B 70 -12 437 444 ;
+C 116 ; WX 355 ; N u1D495 ; B 94 -10 416 595 ;
+C 117 ; WX 578 ; N u1D496 ; B 85 -10 591 446 ;
+C 118 ; WX 534 ; N u1D497 ; B 47 -9 556 439 ;
+C 119 ; WX 744 ; N u1D498 ; B 109 -12 779 444 ;
+C 120 ; WX 551 ; N u1D499 ; B 49 -12 603 445 ;
+C 121 ; WX 539 ; N u1D49A ; B 16 -232 582 444 ;
+C 122 ; WX 485 ; N u1D49B ; B 49 -15 520 457 ;
+C 123 ; WX 512 ; N u1D497.alt ; B 36 -14 505 445 ;
+C 124 ; WX 746 ; N u1D498.alt ; B 22 -14 727 445 ;
+C 125 ; WX 576 ; N u1D742.alt ; B 35 -11 549 445 ;
+C 126 ; WX 608 ; N u1D49A.alt ; B 78 -235 626 444 ;
+C 127 ; WX 524 ; N zero.oldstyle ; B 40 -10 484 444 ;
+C 128 ; WX 375 ; N one.oldstyle ; B 36 -2 353 446 ;
+C 129 ; WX 462 ; N two.oldstyle ; B 55 0 454 444 ;
+C 130 ; WX 467 ; N three.oldstyle ; B 45 -177 433 444 ;
+C 131 ; WX 490 ; N four.oldstyle ; B 28 -171 482 441 ;
+C 132 ; WX 437 ; N five.oldstyle ; B 26 -180 411 444 ;
+C 133 ; WX 472 ; N six.oldstyle ; B 38 -10 441 612 ;
+C 134 ; WX 421 ; N seven.oldstyle ; B 20 -171 406 442 ;
+C 135 ; WX 490 ; N eight.oldstyle ; B 46 -11 444 610 ;
+C 136 ; WX 468 ; N nine.oldstyle ; B 33 -178 436 444 ;
+C 137 ; WX 515 ; N zero ; B 42 -10 470 610 ;
+C 138 ; WX 505 ; N one ; B 95 -2 414 608 ;
+C 139 ; WX 506 ; N two ; B 56 -2 450 610 ;
+C 140 ; WX 512 ; N three ; B 47 -10 457 610 ;
+C 141 ; WX 505 ; N four ; B 30 -2 484 610 ;
+C 142 ; WX 506 ; N five ; B 58 -11 446 612 ;
+C 143 ; WX 514 ; N six ; B 47 -11 467 611 ;
+C 144 ; WX 495 ; N seven ; B 55 -13 452 614 ;
+C 145 ; WX 510 ; N eight ; B 49 -10 461 610 ;
+C 146 ; WX 514 ; N nine ; B 54 -12 474 610 ;
+C 147 ; WX 272 ; N period ; B 71 -12 202 100 ;
+C 148 ; WX 265 ; N comma ; B 54 -137 205 102 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineMathBRM.afm b/fonts/newtx/afm/LibertineMathBRM.afm
new file mode 100644
index 0000000000..37d98b1e65
--- /dev/null
+++ b/fonts/newtx/afm/LibertineMathBRM.afm
@@ -0,0 +1,142 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 12 14:44:17 2019
+FontName LibertineMathBRM
+FullName Libertine Math Bold Roman
+FamilyName LibertineMath
+Weight Bold
+Notice (Copyright (c) Philip Poll)
+Comment Modifications Copyright (c) 2017--2019, Michael Sharpe
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox 0 -263 978 786
+StartCharMetrics 123
+C 0 ; WX 511 ; N u1D6AA ; B 22 -1 512 646 ;
+C 1 ; WX 692 ; N u1D6AB ; B 28 -2 658 651 ;
+C 2 ; WX 730 ; N u1D6AF ; B 37 -10 694 658 ;
+C 3 ; WX 636 ; N u1D6B2 ; B 0 0 637 658 ;
+C 4 ; WX 648 ; N u1D6B5 ; B 53 -4 601 650 ;
+C 5 ; WX 750 ; N u1D6B7 ; B 17 -1 733 646 ;
+C 6 ; WX 615 ; N u1D6BA ; B 9 -1 577 646 ;
+C 7 ; WX 570 ; N u1D6BC ; B 0 -1 562 658 ;
+C 8 ; WX 709 ; N u1D6BD ; B 37 -1 673 646 ;
+C 9 ; WX 749 ; N u1D6BF ; B 22 -1 728 646 ;
+C 10 ; WX 729 ; N u1D6C0 ; B 44 0 685 658 ;
+C 11 ; WX 638 ; N u1D6C2 ; B 36 -12 627 448 ;
+C 12 ; WX 542 ; N u1D6C3 ; B 74 -233 506 698 ;
+C 13 ; WX 550 ; N u1D6C4 ; B 8 -263 521 445 ;
+C 14 ; WX 540 ; N u1D6C5 ; B 44 -12 505 698 ;
+C 15 ; WX 446 ; N u1D6DC ; B 29 -12 418 445 ;
+C 16 ; WX 496 ; N u1D6C7 ; B 61 -204 464 672 ;
+C 17 ; WX 561 ; N u1D6C8 ; B 34 -237 508 447 ;
+C 18 ; WX 498 ; N u1D6C9 ; B 29 -12 469 681 ;
+C 19 ; WX 328 ; N u1D6CA ; B 34 -12 329 447 ;
+C 20 ; WX 530 ; N u1D6CB ; B 26 -28 511 447 ;
+C 21 ; WX 581 ; N u1D6CC ; B 16 -15 570 698 ;
+C 22 ; WX 529 ; N u1D6CD ; B 36 -232 518 448 ;
+C 23 ; WX 517 ; N u1D6CE ; B 11 -12 490 445 ;
+C 24 ; WX 460 ; N u1D6CF ; B 45 -209 438 664 ;
+C 25 ; WX 607 ; N u1D6D1 ; B 23 -12 580 459 ;
+C 26 ; WX 561 ; N u1D6D2 ; B 53 -248 528 445 ;
+C 27 ; WX 594 ; N u1D6D4 ; B 38 -12 572 465 ;
+C 28 ; WX 463 ; N u1D6D5 ; B 24 -12 434 459 ;
+C 29 ; WX 530 ; N u1D6D6 ; B 27 -12 499 445 ;
+C 30 ; WX 604 ; N u1D6DF ; B 28 -220 576 647 ;
+C 31 ; WX 549 ; N u1D6D8 ; B 20 -190 538 448 ;
+C 32 ; WX 687 ; N u1D6D9 ; B 33 -220 628 538 ;
+C 33 ; WX 736 ; N u1D6DA ; B 37 -12 700 456 ;
+C 34 ; WX 435 ; N u1D6C6 ; B 44 -12 397 445 ;
+C 35 ; WX 618 ; N u1D6DD ; B 28 -12 596 681 ;
+C 36 ; WX 789 ; N u1D6E1 ; B 17 -12 740 456 ;
+C 37 ; WX 488 ; N u1D6E0 ; B 27 -249 462 445 ;
+C 38 ; WX 479 ; N u1D6D3 ; B 28 -222 451 445 ;
+C 39 ; WX 646 ; N u1D6D7 ; B 41 -237 614 446 ;
+C 40 ; WX 692 ; N u1D6C1 ; B 28 -2 658 651 ;
+C 41 ; WX 515 ; N u1D6DB ; B 36 -12 467 635 ;
+C 42 ; WX 622 ; N uni019B.upb ; B 19 -10 602 748 ;
+C 43 ; WX 622 ; N uni019B.upbalt ; B 19 -10 602 744 ;
+C 44 ; WX 597 ; N uni210F.upb ; B 16 0 586 739 ;
+C 45 ; WX 597 ; N uni210F.upbalt ; B 16 0 586 739 ;
+C 46 ; WX 532 ; N u1D6DE ; B 12 -13 520 446 ;
+C 47 ; WX 446 ; N uni03F6 ; B 31 -12 421 445 ;
+C 48 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 49 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 50 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 51 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 52 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 53 ; WX 581 ; N uni019B.alt ; B 16 -15 593 698 ;
+C 54 ; WX 581 ; N uni019B ; B 16 -15 593 698 ;
+C 56 ; WX 274 ; N uni0300 ; B 51 545 224 713 ;
+C 57 ; WX 274 ; N uni0301 ; B 50 542 224 713 ;
+C 58 ; WX 349 ; N uni0302 ; B 43 518 306 671 ;
+C 59 ; WX 292 ; N uni0303 ; B 12 562 301 680 ;
+C 60 ; WX 425 ; N uni0304 ; B 59 503 374 553 ;
+C 61 ; WX 317 ; N uni0306 ; B 28 523 308 681 ;
+C 62 ; WX 291 ; N uni0307 ; B 96 579 220 703 ;
+C 63 ; WX 455 ; N uni0308 ; B 96 520 385 627 ;
+C 64 ; WX 361 ; N uni030A ; B 108 588 279 754 ;
+C 65 ; WX 349 ; N uni030C ; B 59 514 312 661 ;
+C 66 ; WX 501 ; N uni20DB ; B 30 520 500 627 ;
+C 67 ; WX 651 ; N uni20DC ; B 30 520 681 627 ;
+C 68 ; WX 267 ; N degree ; B 34 426 233 625 ;
+C 72 ; WX 699 ; N u1D400 ; B 2 -1 697 658 ;
+C 73 ; WX 620 ; N u1D401 ; B 22 0 577 647 ;
+C 74 ; WX 666 ; N u1D402 ; B 34 -10 631 658 ;
+C 75 ; WX 718 ; N u1D403 ; B 22 0 681 646 ;
+C 76 ; WX 562 ; N u1D404 ; B 24 0 542 646 ;
+C 77 ; WX 513 ; N u1D405 ; B 24 -2 513 646 ;
+C 78 ; WX 727 ; N u1D406 ; B 29 -10 708 658 ;
+C 79 ; WX 723 ; N u1D407 ; B 22 -2 702 647 ;
+C 80 ; WX 319 ; N u1D408 ; B 22 -2 298 647 ;
+C 81 ; WX 483 ; N u1D409 ; B 20 -182 448 647 ;
+C 82 ; WX 660 ; N u1D40A ; B 22 -2 658 647 ;
+C 83 ; WX 538 ; N u1D40B ; B 22 -2 512 647 ;
+C 84 ; WX 853 ; N u1D40C ; B 24 -12 831 646 ;
+C 85 ; WX 710 ; N u1D40D ; B 22 -12 687 646 ;
+C 86 ; WX 730 ; N u1D40E ; B 37 -10 694 658 ;
+C 87 ; WX 550 ; N u1D40F ; B 22 -2 533 654 ;
+C 88 ; WX 730 ; N u1D410 ; B 37 -220 694 658 ;
+C 89 ; WX 609 ; N u1D411 ; B 22 -6 618 654 ;
+C 90 ; WX 475 ; N u1D412 ; B 34 -10 441 658 ;
+C 91 ; WX 597 ; N u1D413 ; B 8 -2 590 673 ;
+C 92 ; WX 678 ; N u1D414 ; B 7 -10 671 646 ;
+C 93 ; WX 636 ; N u1D415 ; B 0 -12 637 646 ;
+C 94 ; WX 998 ; N u1D416 ; B 0 -12 978 646 ;
+C 95 ; WX 708 ; N u1D417 ; B 5 -2 704 646 ;
+C 96 ; WX 617 ; N u1D418 ; B 0 -1 617 647 ;
+C 97 ; WX 624 ; N u1D419 ; B 20 0 598 658 ;
+C 98 ; WX 476 ; N u1D41A ; B 36 -10 474 444 ;
+C 99 ; WX 505 ; N u1D41B ; B 3 -13 468 698 ;
+C 100 ; WX 435 ; N u1D41C ; B 37 -10 411 444 ;
+C 101 ; WX 527 ; N u1D41D ; B 37 -12 510 698 ;
+C 102 ; WX 461 ; N u1D41E ; B 34 -10 431 444 ;
+C 103 ; WX 336 ; N u1D41F ; B 26 -2 387 698 ;
+C 104 ; WX 508 ; N u1D420 ; B 34 -238 493 467 ;
+C 105 ; WX 550 ; N u1D421 ; B 14 -2 536 698 ;
+C 106 ; WX 286 ; N u1D422 ; B 35 -2 276 631 ;
+C 107 ; WX 372 ; N u1D423 ; B 20 -228 302 633 ;
+C 108 ; WX 523 ; N u1D424 ; B 12 -2 511 698 ;
+C 109 ; WX 289 ; N u1D425 ; B 24 -2 273 698 ;
+C 110 ; WX 801 ; N u1D426 ; B 32 -2 784 447 ;
+C 111 ; WX 563 ; N u1D427 ; B 33 -2 546 447 ;
+C 112 ; WX 519 ; N u1D428 ; B 34 -10 485 444 ;
+C 113 ; WX 523 ; N u1D429 ; B 20 -234 488 447 ;
+C 114 ; WX 518 ; N u1D42A ; B 36 -234 510 447 ;
+C 115 ; WX 401 ; N u1D42B ; B 32 -2 393 447 ;
+C 116 ; WX 401 ; N u1D42C ; B 37 -10 365 444 ;
+C 117 ; WX 331 ; N u1D42D ; B 20 -10 316 595 ;
+C 118 ; WX 550 ; N u1D42E ; B 24 -12 527 436 ;
+C 119 ; WX 527 ; N u1D42F ; B 9 -12 515 436 ;
+C 120 ; WX 778 ; N u1D430 ; B 8 -12 761 436 ;
+C 121 ; WX 521 ; N u1D431 ; B 15 -2 505 436 ;
+C 122 ; WX 533 ; N u1D432 ; B 10 -233 518 436 ;
+C 123 ; WX 432 ; N u1D433 ; B 32 0 411 446 ;
+C 124 ; WX 306 ; N u1D6A4.bup ; B 35 -2 276 447 ;
+C 125 ; WX 372 ; N u1D6A5.bup ; B 20 -228 302 447 ;
+C 126 ; WX 520 ; N u1D6CE.alt ; B 25 -12 486 446 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineMathMI.afm b/fonts/newtx/afm/LibertineMathMI.afm
new file mode 100644
index 0000000000..797e0360d0
--- /dev/null
+++ b/fonts/newtx/afm/LibertineMathMI.afm
@@ -0,0 +1,169 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Wed Sep 11 10:29:40 2019
+FontName LibertineMathMI
+FullName Libertine Math Italic
+FamilyName LibertineMath
+Weight Regular
+Notice (Libertine font Copyright (c) Philip Poll)
+Comment Modifications are Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -12
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -342 -238 1011 786
+StartCharMetrics 150
+C 0 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 1 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 2 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 3 ; WX 392 ; N uni0300 ; B 96 538 254 701 ;
+C 4 ; WX 341 ; N uni0301 ; B 88 543 248 705 ;
+C 5 ; WX 349 ; N uni0302 ; B 51 525 303 684 ;
+C 6 ; WX 292 ; N uni0303 ; B 5 568 283 674 ;
+C 7 ; WX 0 ; N uni0304 ; B -342 535 -81 585 ;
+C 8 ; WX 317 ; N uni0306 ; B 21 529 291 676 ;
+C 9 ; WX 291 ; N uni0307 ; B 96 547 196 647 ;
+C 10 ; WX 299 ; N uni0308 ; B 18 548 281 643 ;
+C 11 ; WX 361 ; N uni030A ; B 93 586 269 756 ;
+C 12 ; WX 349 ; N uni030C ; B 48 518 301 661 ;
+C 13 ; WX 421 ; N uni03F6 ; B 63 -8 447 444 ;
+C 14 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 15 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 16 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 17 ; WX 519 ; N uni210E ; B 89 -10 528 698 ;
+C 18 ; WX 341 ; N uni2113 ; B 29 -10 397 610 ;
+C 19 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 20 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 21 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 22 ; WX 667 ; N u1D434 ; B 3 -2 666 658 ;
+C 23 ; WX 557 ; N u1D435 ; B 16 -2 562 647 ;
+C 24 ; WX 616 ; N u1D436 ; B 89 -10 670 658 ;
+C 25 ; WX 667 ; N u1D437 ; B 16 -2 694 647 ;
+C 26 ; WX 526 ; N u1D438 ; B 11 -2 553 649 ;
+C 27 ; WX 457 ; N u1D439 ; B 12 -2 553 649 ;
+C 28 ; WX 664 ; N u1D43A ; B 84 -10 706 658 ;
+C 29 ; WX 673 ; N u1D43B ; B 18 -2 778 647 ;
+C 30 ; WX 280 ; N u1D43C ; B 18 -2 388 647 ;
+C 31 ; WX 315 ; N u1D43D ; B -82 -172 422 647 ;
+C 32 ; WX 637 ; N u1D43E ; B 18 -2 722 647 ;
+C 33 ; WX 519 ; N u1D43F ; B 19 -2 517 647 ;
+C 34 ; WX 804 ; N u1D440 ; B 16 -6 874 647 ;
+C 35 ; WX 666 ; N u1D441 ; B 12 -10 788 647 ;
+C 36 ; WX 668 ; N u1D442 ; B 87 -10 706 658 ;
+C 37 ; WX 499 ; N u1D443 ; B 16 -2 574 654 ;
+C 38 ; WX 668 ; N u1D444 ; B 87 -209 706 658 ;
+C 39 ; WX 555 ; N u1D445 ; B 16 -10 574 654 ;
+C 40 ; WX 454 ; N u1D446 ; B 51 -10 493 658 ;
+C 41 ; WX 544 ; N u1D447 ; B 111 -2 656 658 ;
+C 42 ; WX 634 ; N u1D448 ; B 121 -10 760 647 ;
+C 43 ; WX 597 ; N u1D449 ; B 109 -12 726 647 ;
+C 44 ; WX 858 ; N u1D44A ; B 134 -12 1011 647 ;
+C 45 ; WX 628 ; N u1D44B ; B 3 -2 732 647 ;
+C 46 ; WX 552 ; N u1D44C ; B 122 -2 664 647 ;
+C 47 ; WX 578 ; N u1D44D ; B 41 -2 673 658 ;
+C 48 ; WX 486 ; N u1D44E ; B 78 -10 492 439 ;
+C 49 ; WX 478 ; N u1D44F ; B 98 -10 492 698 ;
+C 50 ; WX 389 ; N u1D450 ; B 83 -10 423 439 ;
+C 51 ; WX 489 ; N u1D451 ; B 81 -10 547 698 ;
+C 52 ; WX 401 ; N u1D452 ; B 83 -10 425 439 ;
+C 53 ; WX 314 ; N u1D453 ; B -78 -238 523 698 ;
+C 54 ; WX 499 ; N u1D454 ; B 39 -235 503 439 ;
+C 55 ; WX 519 ; N u1D455 ; B 89 -10 528 698 ;
+C 56 ; WX 276 ; N u1D456 ; B 107 -10 297 618 ;
+C 57 ; WX 259 ; N u1D457 ; B -78 -196 302 618 ;
+C 58 ; WX 486 ; N u1D458 ; B 76 -10 520 698 ;
+C 59 ; WX 266 ; N u1D459 ; B 92 -10 311 698 ;
+C 60 ; WX 783 ; N u1D45A ; B 112 -10 786 439 ;
+C 61 ; WX 518 ; N u1D45B ; B 89 -10 520 439 ;
+C 62 ; WX 447 ; N u1D45C ; B 78 -10 465 439 ;
+C 63 ; WX 489 ; N u1D45D ; B -19 -238 509 491 ;
+C 64 ; WX 491 ; N u1D45E ; B 81 -238 507 446 ;
+C 65 ; WX 357 ; N u1D45F ; B 89 -10 429 439 ;
+C 66 ; WX 353 ; N u1D460 ; B 59 -10 377 439 ;
+C 67 ; WX 307 ; N u1D461 ; B 101 -10 364 561 ;
+C 68 ; WX 521 ; N u1D462 ; B 85 -10 537 439 ;
+C 69 ; WX 391 ; N u1D463 ; B 48 -6 414 439 ;
+C 70 ; WX 688 ; N u1D464 ; B 82 -12 735 439 ;
+C 71 ; WX 475 ; N u1D465 ; B 35 -10 536 439 ;
+C 72 ; WX 503 ; N u1D466 ; B 49 -234 549 439 ;
+C 73 ; WX 436 ; N u1D467 ; B 54 -12 467 444 ;
+C 74 ; WX 636 ; N u1D6E5 ; B 21 -2 609 651 ;
+C 75 ; WX 668 ; N u1D6E9 ; B 87 -10 706 658 ;
+C 76 ; WX 621 ; N u1D6EC ; B -10 0 612 660 ;
+C 77 ; WX 648 ; N u1D6EF ; B 59 -4 708 650 ;
+C 78 ; WX 691 ; N u1D6F1 ; B 17 -1 789 646 ;
+C 79 ; WX 594 ; N u1D6F4 ; B 9 0 629 646 ;
+C 80 ; WX 530 ; N u1D6F6 ; B 118 -2 655 658 ;
+C 81 ; WX 670 ; N u1D6F7 ; B 91 -1 694 647 ;
+C 82 ; WX 687 ; N u1D6F9 ; B 128 -1 772 647 ;
+C 83 ; WX 693 ; N u1D6FA ; B 49 0 721 661 ;
+C 84 ; WX 478 ; N u1D6FB ; B 19 -13 586 603 ;
+C 85 ; WX 522 ; N u1D6FC ; B 66 -12 588 442 ;
+C 86 ; WX 472 ; N u1D6FD ; B -4 -235 526 698 ;
+C 87 ; WX 458 ; N u1D6FE ; B 106 -235 553 442 ;
+C 88 ; WX 450 ; N u1D6FF ; B 72 -12 517 698 ;
+C 89 ; WX 369 ; N u1D700 ; B 64 -12 413 442 ;
+C 90 ; WX 402 ; N u1D701 ; B 74 -229 523 698 ;
+C 91 ; WX 490 ; N u1D702 ; B 89 -235 484 439 ;
+C 92 ; WX 447 ; N u1D703 ; B 94 -12 510 698 ;
+C 93 ; WX 258 ; N u1D704 ; B 88 -10 268 439 ;
+C 94 ; WX 506 ; N u1D705 ; B 90 -10 534 439 ;
+C 95 ; WX 494 ; N u1D706 ; B 21 -12 499 698 ;
+C 96 ; WX 451 ; N u1D707 ; B -13 -235 475 439 ;
+C 97 ; WX 440 ; N u1D708 ; B 107 -12 500 442 ;
+C 98 ; WX 391 ; N u1D709 ; B 70 -228 495 698 ;
+C 99 ; WX 525 ; N u1D70B ; B 48 -12 599 429 ;
+C 100 ; WX 482 ; N u1D70C ; B 0 -235 506 442 ;
+C 101 ; WX 410 ; N u1D70D ; B 67 -229 461 442 ;
+C 102 ; WX 521 ; N u1D70E ; B 74 -12 601 429 ;
+C 103 ; WX 410 ; N u1D70F ; B 92 -12 498 429 ;
+C 104 ; WX 455 ; N u1D710 ; B 103 -10 482 442 ;
+C 105 ; WX 546 ; N u1D711 ; B 79 -235 569 442 ;
+C 106 ; WX 469 ; N u1D712 ; B -32 -231 554 442 ;
+C 107 ; WX 584 ; N u1D713 ; B 117 -235 686 698 ;
+C 108 ; WX 630 ; N u1D714 ; B 64 -12 652 442 ;
+C 109 ; WX 424 ; N u1D715 ; B 19 -11 460 616 ;
+C 110 ; WX 421 ; N u1D716 ; B 79 -8 463 444 ;
+C 111 ; WX 507 ; N u1D717 ; B 85 -12 593 698 ;
+C 112 ; WX 507 ; N u1D718 ; B 64 -17 533 408 ;
+C 113 ; WX 537 ; N u1D719 ; B 73 -235 564 698 ;
+C 114 ; WX 454 ; N u1D71A ; B 39 -225 484 433 ;
+C 115 ; WX 642 ; N u1D71B ; B 66 -12 668 469 ;
+C 116 ; WX 494 ; N uni019B.alt ; B 21 -12 499 698 ;
+C 117 ; WX 539 ; N uni210F ; B 41 -12 498 698 ;
+C 118 ; WX 519 ; N uni210F.alt ; B 89 -10 528 698 ;
+C 119 ; WX 494 ; N uni019B.bar ; B 21 -12 499 698 ;
+C 120 ; WX 494 ; N uni019B.ital ; B 21 -12 499 698 ;
+C 121 ; WX 276 ; N u1D6A4 ; B 107 -10 287 436 ;
+C 122 ; WX 259 ; N u1D6A5 ; B -78 -196 270 436 ;
+C 123 ; WX 381 ; N u1D463.alt ; B 17 -10 366 442 ;
+C 124 ; WX 631 ; N u1D464.alt ; B 39 -10 586 442 ;
+C 125 ; WX 470 ; N u1D708.alt ; B 31 -11 441 442 ;
+C 126 ; WX 511 ; N u1D466.alt ; B 92 -235 526 439 ;
+C 127 ; WX 540 ; N zero.oldstyle ; B 44 -10 496 439 ;
+C 128 ; WX 338 ; N one.oldstyle ; B 43 -2 321 442 ;
+C 129 ; WX 462 ; N two.oldstyle ; B 50 -3 422 439 ;
+C 130 ; WX 448 ; N three.oldstyle ; B 46 -181 416 439 ;
+C 131 ; WX 481 ; N four.oldstyle ; B 28 -174 445 438 ;
+C 132 ; WX 425 ; N five.oldstyle ; B 25 -183 379 439 ;
+C 133 ; WX 473 ; N six.oldstyle ; B 47 -11 425 611 ;
+C 134 ; WX 438 ; N seven.oldstyle ; B 45 -184 418 443 ;
+C 135 ; WX 469 ; N eight.oldstyle ; B 48 -10 421 610 ;
+C 136 ; WX 469 ; N nine.oldstyle ; B 41 -183 419 439 ;
+C 137 ; WX 516 ; N u1D6E4 ; B 12 -2 614 645 ;
+C 138 ; WX 465 ; N zero ; B 39 -10 422 610 ;
+C 139 ; WX 465 ; N one ; B 89 -2 380 608 ;
+C 140 ; WX 465 ; N two ; B 52 -2 412 610 ;
+C 141 ; WX 465 ; N three ; B 44 -10 413 610 ;
+C 142 ; WX 465 ; N four ; B 28 -2 445 610 ;
+C 143 ; WX 465 ; N five ; B 54 -11 408 611 ;
+C 144 ; WX 465 ; N six ; B 44 -11 421 611 ;
+C 145 ; WX 465 ; N seven ; B 51 -13 424 614 ;
+C 146 ; WX 465 ; N eight ; B 46 -10 419 610 ;
+C 147 ; WX 465 ; N nine ; B 50 -12 427 610 ;
+C 148 ; WX 220 ; N period ; B 57 -10 163 96 ;
+C 149 ; WX 220 ; N comma ; B 43 -133 170 95 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineMathMI5.afm b/fonts/newtx/afm/LibertineMathMI5.afm
new file mode 100644
index 0000000000..6912eea4c3
--- /dev/null
+++ b/fonts/newtx/afm/LibertineMathMI5.afm
@@ -0,0 +1,168 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Wed Sep 11 10:53:45 2019
+FontName LibertineMathMI5
+FullName Libertine Math Italic 5
+FamilyName LibertineMath
+Weight Regular
+Notice (Libertine font Copyright (c) Philip Poll)
+Comment Modifications are Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -12
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -342 -238 1247 786
+StartCharMetrics 149
+C 0 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 1 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 2 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 3 ; WX 392 ; N uni0300 ; B 96 538 254 701 ;
+C 4 ; WX 341 ; N uni0301 ; B 88 543 248 705 ;
+C 5 ; WX 349 ; N uni0302 ; B 51 525 303 684 ;
+C 6 ; WX 292 ; N uni0303 ; B 5 568 283 674 ;
+C 7 ; WX 0 ; N uni0304 ; B -342 535 -81 585 ;
+C 8 ; WX 317 ; N uni0306 ; B 21 529 291 676 ;
+C 9 ; WX 291 ; N uni0307 ; B 96 547 196 647 ;
+C 10 ; WX 299 ; N uni0308 ; B 18 548 281 643 ;
+C 11 ; WX 361 ; N uni030A ; B 93 586 269 756 ;
+C 12 ; WX 349 ; N uni030C ; B 48 518 301 661 ;
+C 13 ; WX 421 ; N uni03F6 ; B 63 -8 447 444 ;
+C 14 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 15 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 16 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 17 ; WX 664 ; N uni210E ; B 50 -12 631 698 ;
+C 18 ; WX 389 ; N uni2113 ; B 59 -18 470 586 ;
+C 19 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 20 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 21 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 22 ; WX 793 ; N u1D434 ; B 3 -2 792 658 ;
+C 23 ; WX 681 ; N u1D435 ; B 19 -2 690 647 ;
+C 24 ; WX 769 ; N u1D436 ; B 109 -10 837 658 ;
+C 25 ; WX 815 ; N u1D437 ; B 19 -2 850 647 ;
+C 26 ; WX 641 ; N u1D438 ; B 14 -2 677 649 ;
+C 27 ; WX 557 ; N u1D439 ; B 15 -2 677 649 ;
+C 28 ; WX 807 ; N u1D43A ; B 103 -10 863 658 ;
+C 29 ; WX 805 ; N u1D43B ; B 22 -2 935 647 ;
+C 30 ; WX 345 ; N u1D43C ; B 22 -2 478 647 ;
+C 31 ; WX 299 ; N u1D43D ; B -107 -172 500 647 ;
+C 32 ; WX 765 ; N u1D43E ; B 22 -2 872 647 ;
+C 33 ; WX 622 ; N u1D43F ; B 24 -2 622 647 ;
+C 34 ; WX 939 ; N u1D440 ; B 19 -6 1026 647 ;
+C 35 ; WX 795 ; N u1D441 ; B 15 -10 948 647 ;
+C 36 ; WX 840 ; N u1D442 ; B 107 -10 889 658 ;
+C 37 ; WX 610 ; N u1D443 ; B 19 -2 704 654 ;
+C 38 ; WX 840 ; N u1D444 ; B 107 -209 889 658 ;
+C 39 ; WX 680 ; N u1D445 ; B 19 -10 704 654 ;
+C 40 ; WX 585 ; N u1D446 ; B 63 -10 636 658 ;
+C 41 ; WX 646 ; N u1D447 ; B 136 -2 786 658 ;
+C 42 ; WX 775 ; N u1D448 ; B 149 -10 933 647 ;
+C 43 ; WX 717 ; N u1D449 ; B 135 -12 876 647 ;
+C 44 ; WX 1056 ; N u1D44A ; B 164 -12 1247 647 ;
+C 45 ; WX 780 ; N u1D44B ; B 3 -2 909 647 ;
+C 46 ; WX 681 ; N u1D44C ; B 151 -2 817 647 ;
+C 47 ; WX 706 ; N u1D44D ; B 50 -2 824 658 ;
+C 48 ; WX 614 ; N u1D44E ; B 95 -10 622 439 ;
+C 49 ; WX 600 ; N u1D44F ; B 120 -10 619 698 ;
+C 50 ; WX 495 ; N u1D450 ; B 102 -10 539 439 ;
+C 51 ; WX 618 ; N u1D451 ; B 100 -10 692 698 ;
+C 52 ; WX 509 ; N u1D452 ; B 102 -10 540 439 ;
+C 53 ; WX 371 ; N u1D453 ; B -95 -238 631 698 ;
+C 54 ; WX 620 ; N u1D454 ; B 48 -235 627 439 ;
+C 55 ; WX 664 ; N u1D455 ; B 50 -12 631 698 ;
+C 56 ; WX 354 ; N u1D456 ; B 131 -10 383 618 ;
+C 57 ; WX 332 ; N u1D457 ; B -95 -196 388 618 ;
+C 58 ; WX 588 ; N u1D458 ; B 93 -10 631 698 ;
+C 59 ; WX 335 ; N u1D459 ; B 112 -10 393 698 ;
+C 60 ; WX 994 ; N u1D45A ; B 137 -10 1001 439 ;
+C 61 ; WX 661 ; N u1D45B ; B 109 -10 665 439 ;
+C 62 ; WX 569 ; N u1D45C ; B 95 -10 592 439 ;
+C 63 ; WX 595 ; N u1D45D ; B -22 -238 621 491 ;
+C 64 ; WX 625 ; N u1D45E ; B 100 -238 647 446 ;
+C 65 ; WX 451 ; N u1D45F ; B 109 -10 541 439 ;
+C 66 ; WX 461 ; N u1D460 ; B 72 -10 492 439 ;
+C 67 ; WX 403 ; N u1D461 ; B 124 -10 475 561 ;
+C 68 ; WX 655 ; N u1D462 ; B 94 -10 676 439 ;
+C 69 ; WX 491 ; N u1D463 ; B 55 -7 519 439 ;
+C 70 ; WX 840 ; N u1D464 ; B 101 -12 900 439 ;
+C 71 ; WX 589 ; N u1D465 ; B 43 -10 665 439 ;
+C 72 ; WX 625 ; N u1D466 ; B 60 -234 682 439 ;
+C 73 ; WX 534 ; N u1D467 ; B 66 -12 574 444 ;
+C 74 ; WX 777 ; N u1D6E5 ; B 26 -2 746 651 ;
+C 75 ; WX 841 ; N u1D6E9 ; B 107 -10 890 658 ;
+C 76 ; WX 744 ; N u1D6EC ; B -13 0 735 660 ;
+C 77 ; WX 805 ; N u1D6EF ; B 72 -4 881 650 ;
+C 78 ; WX 818 ; N u1D6F1 ; B 20 -1 940 646 ;
+C 79 ; WX 730 ; N u1D6F4 ; B 12 0 775 646 ;
+C 80 ; WX 645 ; N u1D6F6 ; B 144 -2 799 658 ;
+C 81 ; WX 817 ; N u1D6F7 ; B 111 -1 848 647 ;
+C 82 ; WX 822 ; N u1D6F9 ; B 157 -1 930 647 ;
+C 83 ; WX 875 ; N u1D6FA ; B 60 0 911 661 ;
+C 84 ; WX 777 ; N u1D6FB ; B 126 -2 846 651 ;
+C 85 ; WX 654 ; N u1D6FC ; B 81 -12 737 442 ;
+C 86 ; WX 583 ; N u1D6FD ; B -4 -235 652 698 ;
+C 87 ; WX 571 ; N u1D6FE ; B 129 -235 689 442 ;
+C 88 ; WX 577 ; N u1D6FF ; B 88 -12 660 698 ;
+C 89 ; WX 466 ; N u1D700 ; B 78 -12 521 442 ;
+C 90 ; WX 514 ; N u1D701 ; B 91 -229 664 698 ;
+C 91 ; WX 606 ; N u1D702 ; B 109 -235 600 439 ;
+C 92 ; WX 566 ; N u1D703 ; B 116 -12 645 698 ;
+C 93 ; WX 316 ; N u1D704 ; B 108 -10 330 439 ;
+C 94 ; WX 630 ; N u1D705 ; B 110 -10 665 439 ;
+C 95 ; WX 610 ; N u1D706 ; B 26 -12 617 698 ;
+C 96 ; WX 551 ; N u1D707 ; B -16 -235 582 439 ;
+C 97 ; WX 541 ; N u1D708 ; B 131 -12 617 442 ;
+C 98 ; WX 500 ; N u1D709 ; B 86 -228 629 698 ;
+C 99 ; WX 644 ; N u1D70B ; B 59 -12 736 429 ;
+C 100 ; WX 589 ; N u1D70C ; B 0 -235 622 442 ;
+C 101 ; WX 513 ; N u1D70D ; B 82 -229 576 442 ;
+C 102 ; WX 655 ; N u1D70E ; B 91 -12 755 429 ;
+C 103 ; WX 510 ; N u1D70F ; B 112 -12 618 429 ;
+C 104 ; WX 555 ; N u1D710 ; B 126 -10 589 442 ;
+C 105 ; WX 691 ; N u1D711 ; B 97 -235 721 442 ;
+C 106 ; WX 579 ; N u1D712 ; B -39 -231 685 442 ;
+C 107 ; WX 723 ; N u1D713 ; B 143 -235 848 698 ;
+C 108 ; WX 800 ; N u1D714 ; B 78 -12 828 442 ;
+C 109 ; WX 586 ; N u1D715 ; B 71 -11 632 616 ;
+C 110 ; WX 523 ; N u1D716 ; B 97 -8 577 444 ;
+C 111 ; WX 646 ; N u1D717 ; B 104 -12 754 698 ;
+C 112 ; WX 647 ; N u1D718 ; B 78 -17 681 408 ;
+C 113 ; WX 677 ; N u1D719 ; B 89 -235 711 698 ;
+C 114 ; WX 571 ; N u1D71A ; B 48 -225 610 433 ;
+C 115 ; WX 814 ; N u1D71B ; B 81 -12 848 469 ;
+C 116 ; WX 515 ; N uni019B.alt ; B -10 -7 505 744 ;
+C 117 ; WX 664 ; N uni210F ; B 50 -12 631 698 ;
+C 118 ; WX 609 ; N uni210F.alt ; B 50 -12 631 698 ;
+C 120 ; WX 659 ; N uni019B.ital ; B 14 -13 690 698 ;
+C 121 ; WX 317 ; N u1D6A4 ; B 131 -10 332 436 ;
+C 122 ; WX 330 ; N u1D6A5 ; B -95 -196 344 436 ;
+C 123 ; WX 441 ; N u1D463.alt ; B 20 -14 425 442 ;
+C 124 ; WX 728 ; N u1D464.alt ; B 45 -14 681 442 ;
+C 125 ; WX 570 ; N u1D708.alt ; B 38 -11 535 442 ;
+C 126 ; WX 624 ; N u1D466.alt ; B 107 -235 644 439 ;
+C 127 ; WX 540 ; N zero.oldstyle ; B 44 -10 496 439 ;
+C 128 ; WX 338 ; N one.oldstyle ; B 43 -2 321 442 ;
+C 129 ; WX 462 ; N two.oldstyle ; B 50 -3 422 439 ;
+C 130 ; WX 448 ; N three.oldstyle ; B 46 -181 416 439 ;
+C 131 ; WX 481 ; N four.oldstyle ; B 28 -174 445 438 ;
+C 132 ; WX 425 ; N five.oldstyle ; B 25 -183 379 439 ;
+C 133 ; WX 473 ; N six.oldstyle ; B 47 -11 425 611 ;
+C 134 ; WX 438 ; N seven.oldstyle ; B 45 -184 418 443 ;
+C 135 ; WX 469 ; N eight.oldstyle ; B 48 -10 421 610 ;
+C 136 ; WX 469 ; N nine.oldstyle ; B 41 -183 419 439 ;
+C 137 ; WX 622 ; N u1D6E4 ; B 15 -2 743 645 ;
+C 138 ; WX 571 ; N zero ; B 45 -10 523 610 ;
+C 139 ; WX 548 ; N one ; B 102 -2 451 608 ;
+C 140 ; WX 560 ; N two ; B 60 -2 500 610 ;
+C 141 ; WX 565 ; N three ; B 50 -10 506 610 ;
+C 142 ; WX 548 ; N four ; B 32 -2 526 610 ;
+C 143 ; WX 551 ; N five ; B 62 -11 487 612 ;
+C 144 ; WX 568 ; N six ; B 50 -11 518 611 ;
+C 145 ; WX 533 ; N seven ; B 59 -13 488 614 ;
+C 146 ; WX 560 ; N eight ; B 52 -10 508 610 ;
+C 147 ; WX 568 ; N nine ; B 58 -12 526 610 ;
+C 148 ; WX 244 ; N period ; B 61 -12 184 95 ;
+C 149 ; WX 238 ; N comma ; B 46 -135 185 95 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineMathMI7.afm b/fonts/newtx/afm/LibertineMathMI7.afm
new file mode 100644
index 0000000000..40da60d18c
--- /dev/null
+++ b/fonts/newtx/afm/LibertineMathMI7.afm
@@ -0,0 +1,168 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Wed Sep 11 10:33:16 2019
+FontName LibertineMathMI7
+FullName Libertine Math Italic 7
+FamilyName LibertineMath
+Weight Regular
+Notice (Libertine font Copyright (c) Philip Poll)
+Comment Modifications are Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -12
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -342 -238 1088 786
+StartCharMetrics 149
+C 0 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 1 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 2 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 3 ; WX 392 ; N uni0300 ; B 96 538 254 701 ;
+C 4 ; WX 341 ; N uni0301 ; B 88 543 248 705 ;
+C 5 ; WX 349 ; N uni0302 ; B 51 525 303 684 ;
+C 6 ; WX 292 ; N uni0303 ; B 5 568 283 674 ;
+C 7 ; WX 0 ; N uni0304 ; B -342 535 -81 585 ;
+C 8 ; WX 317 ; N uni0306 ; B 21 529 291 676 ;
+C 9 ; WX 291 ; N uni0307 ; B 96 547 196 647 ;
+C 10 ; WX 299 ; N uni0308 ; B 18 548 281 643 ;
+C 11 ; WX 361 ; N uni030A ; B 93 586 269 756 ;
+C 12 ; WX 349 ; N uni030C ; B 48 518 301 661 ;
+C 13 ; WX 457 ; N uni03F6 ; B 67 -8 485 444 ;
+C 14 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 15 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 16 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 17 ; WX 563 ; N uni210E ; B 95 -10 574 698 ;
+C 18 ; WX 341 ; N uni2113 ; B 29 -10 397 610 ;
+C 19 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 20 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 21 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 22 ; WX 703 ; N u1D434 ; B 3 -2 702 658 ;
+C 23 ; WX 602 ; N u1D435 ; B 17 -2 609 647 ;
+C 24 ; WX 669 ; N u1D436 ; B 95 -10 727 658 ;
+C 25 ; WX 720 ; N u1D437 ; B 17 -2 750 647 ;
+C 26 ; WX 566 ; N u1D438 ; B 12 -2 596 649 ;
+C 27 ; WX 492 ; N u1D439 ; B 13 -2 596 649 ;
+C 28 ; WX 715 ; N u1D43A ; B 90 -10 762 658 ;
+C 29 ; WX 719 ; N u1D43B ; B 20 -2 832 647 ;
+C 30 ; WX 304 ; N u1D43C ; B 20 -2 420 647 ;
+C 31 ; WX 270 ; N u1D43D ; B -93 -172 444 647 ;
+C 32 ; WX 678 ; N u1D43E ; B 20 -2 771 647 ;
+C 33 ; WX 553 ; N u1D43F ; B 21 -2 552 647 ;
+C 34 ; WX 848 ; N u1D440 ; B 17 -6 923 647 ;
+C 35 ; WX 714 ; N u1D441 ; B 13 -10 846 647 ;
+C 36 ; WX 732 ; N u1D442 ; B 93 -10 773 658 ;
+C 37 ; WX 540 ; N u1D443 ; B 17 -2 621 654 ;
+C 38 ; WX 732 ; N u1D444 ; B 93 -209 773 658 ;
+C 39 ; WX 601 ; N u1D445 ; B 17 -10 621 654 ;
+C 40 ; WX 506 ; N u1D446 ; B 55 -10 549 658 ;
+C 41 ; WX 578 ; N u1D447 ; B 119 -2 699 658 ;
+C 42 ; WX 684 ; N u1D448 ; B 130 -10 820 647 ;
+C 43 ; WX 637 ; N u1D449 ; B 118 -12 775 647 ;
+C 44 ; WX 923 ; N u1D44A ; B 143 -12 1088 647 ;
+C 45 ; WX 681 ; N u1D44B ; B 3 -2 793 647 ;
+C 46 ; WX 594 ; N u1D44C ; B 132 -2 713 647 ;
+C 47 ; WX 618 ; N u1D44D ; B 44 -2 720 658 ;
+C 48 ; WX 535 ; N u1D44E ; B 83 -10 541 439 ;
+C 49 ; WX 524 ; N u1D44F ; B 105 -10 540 698 ;
+C 50 ; WX 431 ; N u1D450 ; B 89 -10 468 439 ;
+C 51 ; WX 538 ; N u1D451 ; B 87 -10 601 698 ;
+C 52 ; WX 443 ; N u1D452 ; B 89 -10 469 439 ;
+C 53 ; WX 336 ; N u1D453 ; B -83 -238 562 698 ;
+C 54 ; WX 531 ; N u1D454 ; B 7 -238 573 439 ;
+C 55 ; WX 563 ; N u1D455 ; B 95 -10 574 698 ;
+C 56 ; WX 307 ; N u1D456 ; B 114 -10 331 618 ;
+C 57 ; WX 288 ; N u1D457 ; B -83 -196 336 618 ;
+C 58 ; WX 519 ; N u1D458 ; B 81 -10 556 698 ;
+C 59 ; WX 292 ; N u1D459 ; B 98 -10 342 698 ;
+C 60 ; WX 863 ; N u1D45A ; B 120 -10 868 439 ;
+C 61 ; WX 574 ; N u1D45B ; B 95 -10 576 439 ;
+C 62 ; WX 494 ; N u1D45C ; B 83 -10 513 439 ;
+C 63 ; WX 527 ; N u1D45D ; B -20 -238 549 491 ;
+C 64 ; WX 543 ; N u1D45E ; B 87 -238 561 446 ;
+C 65 ; WX 388 ; N u1D45F ; B 95 -10 466 439 ;
+C 66 ; WX 400 ; N u1D460 ; B 63 -10 426 439 ;
+C 67 ; WX 351 ; N u1D461 ; B 108 -10 414 561 ;
+C 68 ; WX 570 ; N u1D462 ; B 84 -10 588 439 ;
+C 69 ; WX 438 ; N u1D463 ; B 51 -7 463 439 ;
+C 70 ; WX 741 ; N u1D464 ; B 88 -12 793 439 ;
+C 71 ; WX 515 ; N u1D465 ; B 37 -10 580 439 ;
+C 72 ; WX 545 ; N u1D466 ; B 52 -234 594 439 ;
+C 73 ; WX 468 ; N u1D467 ; B 58 -12 502 444 ;
+C 74 ; WX 680 ; N u1D6E5 ; B 22 -2 651 651 ;
+C 75 ; WX 732 ; N u1D6E9 ; B 93 -10 773 658 ;
+C 76 ; WX 662 ; N u1D6EC ; B -11 0 653 660 ;
+C 77 ; WX 703 ; N u1D6EF ; B 63 -4 768 650 ;
+C 78 ; WX 738 ; N u1D6F1 ; B 18 -1 844 646 ;
+C 79 ; WX 638 ; N u1D6F4 ; B 10 0 676 646 ;
+C 80 ; WX 568 ; N u1D6F6 ; B 126 -2 702 658 ;
+C 81 ; WX 725 ; N u1D6F7 ; B 97 -1 751 647 ;
+C 82 ; WX 736 ; N u1D6F9 ; B 137 -1 829 647 ;
+C 83 ; WX 761 ; N u1D6FA ; B 52 0 791 661 ;
+C 84 ; WX 680 ; N u1D6FB ; B 122 -2 751 651 ;
+C 85 ; WX 570 ; N u1D6FC ; B 71 -12 641 442 ;
+C 86 ; WX 515 ; N u1D6FD ; B -4 -235 574 698 ;
+C 87 ; WX 499 ; N u1D6FE ; B 113 -235 601 442 ;
+C 88 ; WX 501 ; N u1D6FF ; B 77 -12 573 698 ;
+C 89 ; WX 406 ; N u1D700 ; B 68 -12 453 442 ;
+C 90 ; WX 446 ; N u1D701 ; B 79 -229 576 698 ;
+C 91 ; WX 537 ; N u1D702 ; B 95 -235 536 439 ;
+C 92 ; WX 492 ; N u1D703 ; B 101 -12 560 698 ;
+C 93 ; WX 276 ; N u1D704 ; B 94 -10 287 439 ;
+C 94 ; WX 549 ; N u1D705 ; B 96 -10 579 439 ;
+C 95 ; WX 531 ; N u1D706 ; B 22 -12 536 698 ;
+C 96 ; WX 487 ; N u1D707 ; B -14 -235 514 439 ;
+C 97 ; WX 478 ; N u1D708 ; B 114 -12 544 442 ;
+C 98 ; WX 433 ; N u1D709 ; B 75 -228 545 698 ;
+C 99 ; WX 569 ; N u1D70B ; B 51 -12 649 429 ;
+C 100 ; WX 522 ; N u1D70C ; B 0 -235 549 442 ;
+C 101 ; WX 447 ; N u1D70D ; B 72 -229 502 442 ;
+C 102 ; WX 571 ; N u1D70E ; B 79 -12 657 429 ;
+C 103 ; WX 444 ; N u1D70F ; B 98 -12 538 429 ;
+C 104 ; WX 493 ; N u1D710 ; B 110 -10 522 442 ;
+C 105 ; WX 602 ; N u1D711 ; B 85 -235 628 442 ;
+C 106 ; WX 504 ; N u1D712 ; B -34 -231 596 442 ;
+C 107 ; WX 631 ; N u1D713 ; B 125 -235 740 698 ;
+C 108 ; WX 695 ; N u1D714 ; B 68 -12 719 442 ;
+C 109 ; WX 509 ; N u1D715 ; B 62 -11 548 616 ;
+C 110 ; WX 457 ; N u1D716 ; B 85 -8 503 444 ;
+C 111 ; WX 562 ; N u1D717 ; B 91 -12 655 698 ;
+C 112 ; WX 565 ; N u1D718 ; B 68 -17 593 408 ;
+C 113 ; WX 588 ; N u1D719 ; B 78 -235 617 698 ;
+C 114 ; WX 498 ; N u1D71A ; B 42 -225 531 433 ;
+C 115 ; WX 708 ; N u1D71B ; B 71 -12 737 469 ;
+C 116 ; WX 515 ; N uni019B.alt ; B -10 -7 505 744 ;
+C 117 ; WX 539 ; N uni210F ; B 41 -12 498 698 ;
+C 118 ; WX 519 ; N uni210F.alt ; B 89 -10 528 698 ;
+C 120 ; WX 575 ; N uni019B.ital ; B 12 -13 601 698 ;
+C 121 ; WX 289 ; N u1D6A4 ; B 114 -10 301 436 ;
+C 122 ; WX 286 ; N u1D6A5 ; B -83 -196 298 436 ;
+C 123 ; WX 414 ; N u1D463.alt ; B 18 -12 399 442 ;
+C 124 ; WX 680 ; N u1D464.alt ; B 42 -12 634 442 ;
+C 125 ; WX 507 ; N u1D708.alt ; B 33 -11 476 442 ;
+C 126 ; WX 550 ; N u1D466.alt ; B 98 -235 567 439 ;
+C 127 ; WX 540 ; N zero.oldstyle ; B 44 -10 496 439 ;
+C 128 ; WX 338 ; N one.oldstyle ; B 43 -2 321 442 ;
+C 129 ; WX 462 ; N two.oldstyle ; B 50 -3 422 439 ;
+C 130 ; WX 448 ; N three.oldstyle ; B 46 -181 416 439 ;
+C 131 ; WX 481 ; N four.oldstyle ; B 28 -174 445 438 ;
+C 132 ; WX 425 ; N five.oldstyle ; B 25 -183 379 439 ;
+C 133 ; WX 473 ; N six.oldstyle ; B 47 -11 425 611 ;
+C 134 ; WX 438 ; N seven.oldstyle ; B 45 -184 418 443 ;
+C 135 ; WX 469 ; N eight.oldstyle ; B 48 -10 421 610 ;
+C 136 ; WX 469 ; N nine.oldstyle ; B 41 -183 419 439 ;
+C 137 ; WX 553 ; N u1D6E4 ; B 13 -2 658 645 ;
+C 138 ; WX 515 ; N zero ; B 42 -10 470 610 ;
+C 139 ; WX 505 ; N one ; B 95 -2 414 608 ;
+C 140 ; WX 506 ; N two ; B 56 -2 450 610 ;
+C 141 ; WX 512 ; N three ; B 47 -10 457 610 ;
+C 142 ; WX 505 ; N four ; B 30 -2 484 610 ;
+C 143 ; WX 506 ; N five ; B 58 -11 446 612 ;
+C 144 ; WX 514 ; N six ; B 47 -11 467 611 ;
+C 145 ; WX 495 ; N seven ; B 55 -13 452 614 ;
+C 146 ; WX 510 ; N eight ; B 49 -10 461 610 ;
+C 147 ; WX 514 ; N nine ; B 54 -12 474 610 ;
+C 148 ; WX 244 ; N period ; B 61 -12 184 95 ;
+C 149 ; WX 238 ; N comma ; B 46 -135 185 95 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineMathRM.afm b/fonts/newtx/afm/LibertineMathRM.afm
new file mode 100644
index 0000000000..e3eb9ebd77
--- /dev/null
+++ b/fonts/newtx/afm/LibertineMathRM.afm
@@ -0,0 +1,94 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Wed Sep 11 17:11:08 2019
+FontName LibertineMathRM
+FullName Libertine Math Roman
+FamilyName LibertineMath
+Weight Regular
+Notice (Libertine fonts Copyright (c) by Philip Poll)
+Comment Modifications Copyright (c) 2017--2019 by Michael Sharpe
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -342 -238 690 786
+CapHeight 658
+XHeight 429
+Ascender 698
+Descender -236
+StartCharMetrics 71
+C 0 ; WX 497 ; N uni0393 ; B 13 -2 487 647 ;
+C 1 ; WX 636 ; N uni0394 ; B 30 0 600 658 ;
+C 2 ; WX 702 ; N uni0398 ; B 37 -10 666 658 ;
+C 3 ; WX 658 ; N uni039B ; B 3 -2 653 657 ;
+C 4 ; WX 648 ; N uni039E ; B 45 -4 599 649 ;
+C 5 ; WX 667 ; N uni03A0 ; B 12 -2 655 647 ;
+C 6 ; WX 574 ; N uni03A3 ; B 18 -2 536 646 ;
+C 7 ; WX 552 ; N uni03A5 ; B 5 -2 548 658 ;
+C 8 ; WX 643 ; N uni03A6 ; B 24 -2 619 647 ;
+C 9 ; WX 679 ; N uni03A8 ; B 12 -3 667 647 ;
+C 10 ; WX 697 ; N uni03A9 ; B 44 0 653 658 ;
+C 11 ; WX 566 ; N uni03B1 ; B 34 -10 560 439 ;
+C 12 ; WX 517 ; N uni03B2 ; B 49 -238 474 698 ;
+C 13 ; WX 505 ; N uni03B3 ; B 13 -235 495 442 ;
+C 14 ; WX 491 ; N uni03B4 ; B 37 -10 456 698 ;
+C 15 ; WX 421 ; N uni03F5 ; B 37 -12 389 442 ;
+C 16 ; WX 441 ; N uni03B6 ; B 38 -229 410 698 ;
+C 17 ; WX 528 ; N uni03B7 ; B 27 -238 449 442 ;
+C 18 ; WX 489 ; N uni03B8 ; B 39 -10 451 698 ;
+C 19 ; WX 281 ; N uni03B9 ; B 66 -11 274 438 ;
+C 20 ; WX 506 ; N uni03BA ; B 29 -10 466 442 ;
+C 21 ; WX 531 ; N uni03BB ; B 21 -12 524 698 ;
+C 22 ; WX 490 ; N uni03BC ; B 40 -238 487 439 ;
+C 23 ; WX 474 ; N uni03BD ; B 18 -12 440 442 ;
+C 24 ; WX 426 ; N uni03BE ; B 39 -228 400 698 ;
+C 25 ; WX 566 ; N uni03C0 ; B 24 -10 542 429 ;
+C 26 ; WX 525 ; N uni03C1 ; B 54 -238 486 439 ;
+C 27 ; WX 570 ; N uni03C3 ; B 37 -10 551 429 ;
+C 28 ; WX 441 ; N uni03C4 ; B 27 -10 432 429 ;
+C 29 ; WX 490 ; N uni03C5 ; B 24 -10 446 442 ;
+C 30 ; WX 579 ; N uni03D5 ; B 35 -238 545 698 ;
+C 31 ; WX 505 ; N uni03C7 ; B 9 -235 497 439 ;
+C 32 ; WX 628 ; N uni03C8 ; B 27 -238 601 655 ;
+C 33 ; WX 658 ; N uni03C9 ; B 34 -10 624 442 ;
+C 34 ; WX 397 ; N uni03B5 ; B 44 -10 359 439 ;
+C 35 ; WX 547 ; N uni03D1 ; B 24 -12 540 698 ;
+C 36 ; WX 692 ; N uni03D6 ; B 36 -12 659 469 ;
+C 37 ; WX 473 ; N uni03F1 ; B 34 -235 440 439 ;
+C 38 ; WX 441 ; N uni03C2 ; B 32 -233 406 442 ;
+C 39 ; WX 589 ; N uni03C6 ; B 39 -238 546 439 ;
+C 40 ; WX 584 ; N uni2207 ; B 12 0 577 616 ;
+C 41 ; WX 475 ; N uni2202 ; B 36 -12 427 625 ;
+C 42 ; WX 521 ; N uni019B.upr ; B 12 -8 515 751 ;
+C 43 ; WX 521 ; N uni019B.upralt ; B 12 -8 515 744 ;
+C 44 ; WX 564 ; N uni210F.upr ; B 19 0 546 739 ;
+C 45 ; WX 564 ; N uni210F.upralt ; B 19 0 546 736 ;
+C 46 ; WX 498 ; N uni03F0 ; B 24 -12 492 442 ;
+C 47 ; WX 421 ; N uni03F6 ; B 37 -12 389 442 ;
+C 48 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 49 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 50 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 51 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 52 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 53 ; WX 283 ; N u1D6A4.up ; B 25 -2 258 442 ;
+C 54 ; WX 332 ; N u1D6A5.up ; B 12 -223 256 442 ;
+C 56 ; WX 392 ; N uni0300 ; B 96 538 254 701 ;
+C 57 ; WX 341 ; N uni0301 ; B 88 543 248 705 ;
+C 58 ; WX 349 ; N uni0302 ; B 51 525 303 684 ;
+C 59 ; WX 292 ; N uni0303 ; B 5 568 283 674 ;
+C 60 ; WX 0 ; N uni0304 ; B -342 535 -81 585 ;
+C 61 ; WX 317 ; N uni0306 ; B 21 529 291 676 ;
+C 62 ; WX 291 ; N uni0307 ; B 96 547 196 647 ;
+C 63 ; WX 299 ; N uni0308 ; B 18 548 281 643 ;
+C 64 ; WX 361 ; N uni030A ; B 93 586 269 756 ;
+C 65 ; WX 349 ; N uni030C ; B 48 518 301 661 ;
+C 66 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 67 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 68 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 69 ; WX 460 ; N uni03BD.alt ; B 25 -12 427 442 ;
+C 70 ; WX 494 ; N uni019B.alt ; B 21 -12 499 698 ;
+C 71 ; WX 494 ; N uni019B ; B 21 -12 499 698 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/LibertineZI-5nu.afm b/fonts/newtx/afm/LibertineZI-5nu.afm
new file mode 100644
index 0000000000..b7559512c0
--- /dev/null
+++ b/fonts/newtx/afm/LibertineZI-5nu.afm
@@ -0,0 +1,20 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20170730
+Comment Creation Date: Sun Jun 16 16:23:23 2019
+FontName LibertineZI-5nu
+FullName LibertineZI-5nu
+FamilyName LibertineZI
+Weight SemiBold
+Notice (Created by Michael Sharpe with FontForge 2.0 (http://fontforge.sf.net))
+ItalicAngle -12
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme Symbol
+FontBBox 40 -11 633 445
+XHeight 445
+StartCharMetrics 1
+C 110 ; WX 663 ; N nu ; B 40 -11 633 445 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/NewTXBMI.afm b/fonts/newtx/afm/NewTXBMI.afm
new file mode 100644
index 0000000000..3ad37f1515
--- /dev/null
+++ b/fonts/newtx/afm/NewTXBMI.afm
@@ -0,0 +1,187 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 12 14:51:48 2019
+FontName NewTXBMI
+FullName NewTX Bold Math Italic
+FamilyName NewTXMath
+Weight Regular
+Notice (Based on TX fonts and GNU FreeFonts. GNU 3.0)
+Comment Modifications Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -15
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -342 -225 940 794
+StartCharMetrics 168
+C 0 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 1 ; WX 298 ; N u1D6A4.bit ; B 22 -9 258 462 ;
+C 2 ; WX 278 ; N u1D6A5.bit ; B -189 -207 239 462 ;
+C 3 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 4 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 5 ; WX 392 ; N gravecomb ; B 96 538 254 701 ;
+C 6 ; WX 341 ; N acutecomb ; B 88 543 248 705 ;
+C 7 ; WX 349 ; N uni0302 ; B 51 525 303 684 ;
+C 8 ; WX 292 ; N tildecomb ; B 5 568 283 674 ;
+C 9 ; WX 0 ; N uni0304 ; B -342 535 -81 585 ;
+C 10 ; WX 317 ; N uni0306 ; B 21 529 291 676 ;
+C 11 ; WX 291 ; N uni0307 ; B 96 547 196 647 ;
+C 12 ; WX 299 ; N uni0308 ; B 18 548 281 643 ;
+C 13 ; WX 361 ; N uni030A ; B 93 586 269 756 ;
+C 14 ; WX 349 ; N uni030C ; B 48 518 301 661 ;
+C 15 ; WX 411 ; N uni03F6 ; B 20 -3 441 458 ;
+C 16 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 17 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 18 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 19 ; WX 427 ; N uni2113 ; B 18 -14 439 677 ;
+C 20 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 21 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 22 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 23 ; WX 674 ; N u1D71E ; B -13 0 667 669 ;
+C 24 ; WX 627 ; N u1D71F ; B -48 0 536 677 ;
+C 25 ; WX 722 ; N u1D723 ; B 27 -18 691 685 ;
+C 26 ; WX 657 ; N u1D726 ; B -67 -18 583 669 ;
+C 27 ; WX 659 ; N u1D729 ; B -23 0 713 662 ;
+C 28 ; WX 778 ; N u1D72B ; B -35 0 860 662 ;
+C 29 ; WX 619 ; N u1D72E ; B -52 0 676 662 ;
+C 30 ; WX 722 ; N u1D730 ; B 72 0 778 676 ;
+C 31 ; WX 789 ; N u1D731 ; B 63 0 771 662 ;
+C 32 ; WX 800 ; N u1D733 ; B 120 0 894 677 ;
+C 33 ; WX 746 ; N u1D734 ; B -9 0 733 677 ;
+C 34 ; WX 630 ; N u1D736 ; B 24 -7 621 462 ;
+C 35 ; WX 569 ; N u1D737 ; B -97 -204 566 680 ;
+C 36 ; WX 589 ; N u1D738 ; B 3 -205 576 445 ;
+C 37 ; WX 505 ; N u1D739 ; B 18 -16 502 682 ;
+C 38 ; WX 411 ; N u1D750 ; B 50 -3 471 458 ;
+C 39 ; WX 453 ; N u1D73B ; B 18 -208 514 669 ;
+C 40 ; WX 540 ; N u1D73C ; B 22 -218 521 462 ;
+C 41 ; WX 479 ; N u1D73D ; B 29 -13 493 677 ;
+C 42 ; WX 307 ; N u1D73E ; B 22 -3 275 464 ;
+C 43 ; WX 475 ; N u1D73F ; B 7 -9 478 456 ;
+C 44 ; WX 539 ; N u1D740 ; B 16 -10 537 682 ;
+C 45 ; WX 569 ; N u1D741 ; B -49 -208 529 457 ;
+C 46 ; WX 473 ; N u1D742 ; B 23 -8 475 468 ;
+C 47 ; WX 477 ; N u1D743 ; B -7 -207 506 679 ;
+C 48 ; WX 556 ; N u1D745 ; B 3 -16 559 449 ;
+C 49 ; WX 549 ; N u1D746 ; B -48 -209 539 459 ;
+C 50 ; WX 701 ; N u1D748 ; B 25 -9 698 460 ;
+C 51 ; WX 512 ; N u1D749 ; B 3 -15 509 449 ;
+C 52 ; WX 554 ; N u1D74A ; B 26 -7 534 464 ;
+C 53 ; WX 590 ; N u1D753 ; B 24 -199 565 661 ;
+C 54 ; WX 605 ; N u1D74C ; B -120 -225 602 464 ;
+C 55 ; WX 648 ; N u1D74D ; B 28 -209 645 661 ;
+C 56 ; WX 731 ; N u1D74E ; B 23 -6 707 449 ;
+C 57 ; WX 513 ; N u1D73A ; B 17 -9 510 458 ;
+C 58 ; WX 605 ; N u1D751 ; B -7 -13 595 727 ;
+C 59 ; WX 854 ; N u1D755 ; B 16 -6 851 449 ;
+C 60 ; WX 539 ; N u1D754 ; B -9 -201 514 459 ;
+C 61 ; WX 513 ; N u1D747 ; B 28 -178 538 457 ;
+C 62 ; WX 605 ; N u1D74B ; B 22 -203 580 452 ;
+C 63 ; WX 627 ; N u1D735 ; B 102 0 686 677 ;
+C 64 ; WX 558 ; N u1D74F ; B 20 -16 533 692 ;
+C 65 ; WX 659 ; N uni019B.alt ; B 55 -10 626 744 ;
+C 66 ; WX 539 ; N uni210F ; B 41 -12 498 698 ;
+C 67 ; WX 519 ; N uni210F.alt ; B 89 -10 528 698 ;
+C 68 ; WX 550 ; N u1D752 ; B 5 -13 522 459 ;
+C 71 ; WX 667 ; N u1D468 ; B -67 0 593 683 ;
+C 72 ; WX 667 ; N u1D469 ; B -24 0 624 669 ;
+C 73 ; WX 667 ; N u1D46A ; B 32 -18 677 685 ;
+C 74 ; WX 722 ; N u1D46B ; B -46 0 685 669 ;
+C 75 ; WX 667 ; N u1D46C ; B -27 0 653 669 ;
+C 76 ; WX 667 ; N u1D46D ; B -13 0 660 669 ;
+C 77 ; WX 722 ; N u1D46E ; B 21 -18 706 685 ;
+C 78 ; WX 778 ; N u1D46F ; B -24 0 799 669 ;
+C 79 ; WX 389 ; N u1D470 ; B -32 0 406 669 ;
+C 80 ; WX 500 ; N u1D471 ; B -46 -99 524 669 ;
+C 81 ; WX 667 ; N u1D472 ; B -21 0 702 669 ;
+C 82 ; WX 611 ; N u1D473 ; B -22 0 590 669 ;
+C 83 ; WX 889 ; N u1D474 ; B -29 -12 917 669 ;
+C 84 ; WX 722 ; N u1D475 ; B -27 -15 748 669 ;
+C 85 ; WX 722 ; N u1D476 ; B 27 -18 691 685 ;
+C 86 ; WX 611 ; N u1D477 ; B -27 0 613 669 ;
+C 87 ; WX 722 ; N u1D478 ; B 27 -208 691 685 ;
+C 88 ; WX 667 ; N u1D479 ; B -29 0 623 669 ;
+C 89 ; WX 556 ; N u1D47A ; B 2 -18 526 685 ;
+C 90 ; WX 611 ; N u1D47B ; B 50 0 650 669 ;
+C 91 ; WX 722 ; N u1D47C ; B 67 -18 744 669 ;
+C 92 ; WX 667 ; N u1D47D ; B 65 -18 715 669 ;
+C 93 ; WX 889 ; N u1D47E ; B 65 -18 940 669 ;
+C 94 ; WX 667 ; N u1D47F ; B -24 0 694 669 ;
+C 95 ; WX 611 ; N u1D480 ; B 73 0 659 669 ;
+C 96 ; WX 611 ; N u1D481 ; B -11 0 590 669 ;
+C 97 ; WX 500 ; N u1D482 ; B -21 -14 455 462 ;
+C 98 ; WX 500 ; N u1D483 ; B -14 -13 444 699 ;
+C 99 ; WX 444 ; N u1D484 ; B -5 -13 392 462 ;
+C 100 ; WX 500 ; N u1D485 ; B -21 -13 517 699 ;
+C 101 ; WX 444 ; N u1D486 ; B 5 -13 398 462 ;
+C 102 ; WX 333 ; N u1D487 ; B -169 -205 446 698 ;
+C 103 ; WX 500 ; N u1D488 ; B -52 -203 478 462 ;
+C 104 ; WX 556 ; N u1D489 ; B -13 -9 498 699 ;
+C 105 ; WX 278 ; N u1D48A ; B 2 -9 266 658 ;
+C 106 ; WX 278 ; N u1D48B ; B -189 -207 284 658 ;
+C 107 ; WX 500 ; N u1D48C ; B -23 -8 483 699 ;
+C 108 ; WX 278 ; N u1D48D ; B 2 -9 290 699 ;
+C 109 ; WX 778 ; N u1D48E ; B -14 -9 722 462 ;
+C 110 ; WX 556 ; N u1D48F ; B -6 -9 493 462 ;
+C 111 ; WX 500 ; N u1D490 ; B -3 -13 441 462 ;
+C 112 ; WX 500 ; N u1D491 ; B -120 -205 446 462 ;
+C 113 ; WX 500 ; N u1D492 ; B 1 -205 471 462 ;
+C 114 ; WX 389 ; N u1D493 ; B -21 0 389 462 ;
+C 115 ; WX 389 ; N u1D494 ; B -19 -13 333 462 ;
+C 116 ; WX 278 ; N u1D495 ; B -11 -9 281 594 ;
+C 117 ; WX 556 ; N u1D496 ; B 15 -9 492 462 ;
+C 118 ; WX 444 ; N u1D497 ; B 16 -13 401 462 ;
+C 119 ; WX 667 ; N u1D498 ; B 16 -13 614 462 ;
+C 120 ; WX 500 ; N u1D499 ; B -46 -13 469 462 ;
+C 121 ; WX 444 ; N u1D49A ; B -94 -205 392 462 ;
+C 122 ; WX 389 ; N u1D49B ; B -43 -78 368 449 ;
+C 123 ; WX 421 ; N u1D497.alt ; B 15 -9 392 462 ;
+C 124 ; WX 649 ; N u1D498.alt ; B 15 -9 620 462 ;
+C 125 ; WX 526 ; N u1D742.alt ; B 33 -11 500 445 ;
+C 126 ; WX 537 ; N u1D49A.alt ; B -12 -207 508 462 ;
+C 127 ; WX 500 ; N zero.oldstyle ; B 24 -13 476 544 ;
+C 128 ; WX 500 ; N one.oldstyle ; B 65 0 442 544 ;
+C 129 ; WX 500 ; N two.oldstyle ; B 17 0 478 554 ;
+C 130 ; WX 500 ; N three.oldstyle ; B 16 -158 468 544 ;
+C 131 ; WX 500 ; N four.oldstyle ; B 19 -144 475 544 ;
+C 132 ; WX 500 ; N five.oldstyle ; B 22 -152 470 532 ;
+C 133 ; WX 500 ; N six.oldstyle ; B 28 -13 475 688 ;
+C 134 ; WX 500 ; N seven.oldstyle ; B 17 -144 477 532 ;
+C 135 ; WX 500 ; N eight.oldstyle ; B 28 -13 472 688 ;
+C 136 ; WX 500 ; N nine.oldstyle ; B 26 -157 473 544 ;
+C 137 ; WX 532 ; N zero ; B 40 -14 492 676 ;
+C 138 ; WX 323 ; N one ; B 20 0 303 676 ;
+C 139 ; WX 525 ; N two ; B 40 0 485 676 ;
+C 140 ; WX 469 ; N three ; B 40 -14 429 676 ;
+C 141 ; WX 500 ; N four ; B 20 0 480 676 ;
+C 142 ; WX 486 ; N five ; B 40 -14 446 688 ;
+C 143 ; WX 514 ; N six ; B 40 -14 474 684 ;
+C 144 ; WX 469 ; N seven ; B 20 -8 449 662 ;
+C 145 ; WX 469 ; N eight ; B 40 -14 429 676 ;
+C 146 ; WX 509 ; N nine ; B 40 -22 469 676 ;
+C 147 ; WX 250 ; N period ; B 41 -13 210 156 ;
+C 148 ; WX 250 ; N comma ; B 39 -180 223 155 ;
+C 149 ; WX 964 ; N uni21BC ; B 62 209 902 491 ;
+C 150 ; WX 964 ; N uni21BD ; B 62 23 902 305 ;
+C 151 ; WX 964 ; N uni21C0 ; B 62 209 902 491 ;
+C 152 ; WX 964 ; N uni21C1 ; B 62 23 902 305 ;
+C 153 ; WX 359 ; N uni21A9 ; B 62 209 297 510 ;
+C 154 ; WX 359 ; N uni21AA ; B 62 209 297 510 ;
+C 155 ; WX 601 ; N uni22B2 ; B 22 -25 579 541 ;
+C 156 ; WX 601 ; N uni22B3 ; B 22 -25 579 541 ;
+C 157 ; WX 676 ; N less ; B 62 -25 614 539 ;
+C 158 ; WX 482 ; N slash ; B 62 -176 420 693 ;
+C 159 ; WX 676 ; N greater ; B 62 -25 614 539 ;
+C 160 ; WX 820 ; N uni2605 ; B 44 -47 776 607 ;
+C 161 ; WX 396 ; N uni266D ; B 32 -21 374 737 ;
+C 162 ; WX 374 ; N uni266E ; B 32 -221 342 719 ;
+C 163 ; WX 419 ; N uni266F ; B 32 -207 387 770 ;
+C 164 ; WX 951 ; N uni2323 ; B 62 131 889 400 ;
+C 165 ; WX 951 ; N uni2322 ; B 62 131 889 400 ;
+C 166 ; WX 666 ; N uni2118 ; B 53 -193 624 479 ;
+C 167 ; WX 492 ; N uni20D7 ; B 136 507 572 794 ;
+C 168 ; WX 265 ; N uni2040 ; B 214 516 626 678 ;
+C 169 ; WX 530 ; N u1D488.alt ; B 1 -207 501 462 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/NewTXBMI5.afm b/fonts/newtx/afm/NewTXBMI5.afm
new file mode 100644
index 0000000000..bee7ccc5a7
--- /dev/null
+++ b/fonts/newtx/afm/NewTXBMI5.afm
@@ -0,0 +1,187 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Tue Sep 10 17:44:38 2019
+FontName NewTXBMI5
+FullName NewTX Bold Math Italic 5
+FamilyName NewTXMath
+Weight Bold
+Notice (Based on TX fonts and GNU FreeFonts. GNU 3.0)
+Comment Modifications Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -15
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -419 -225 1121 794
+StartCharMetrics 168
+C 0 ; WX 335 ; N degree ; B 42 405 295 610 ;
+C 1 ; WX 379 ; N u1D6A4.bit ; B 28 -13 333 462 ;
+C 2 ; WX 311 ; N u1D6A5.bit ; B -231 -211 266 462 ;
+C 3 ; WX 719 ; N uni01B5 ; B 50 -2 690 653 ;
+C 4 ; WX 655 ; N uni019B ; B 28 -16 648 698 ;
+C 5 ; WX 479 ; N gravecomb ; B 118 534 312 701 ;
+C 6 ; WX 422 ; N acutecomb ; B 108 539 309 705 ;
+C 7 ; WX 426 ; N uni0302 ; B 63 521 372 684 ;
+C 8 ; WX 361 ; N tildecomb ; B 5 564 352 674 ;
+C 9 ; WX 33 ; N uni0304 ; B -419 531 -64 584 ;
+C 10 ; WX 392 ; N uni0306 ; B 26 525 362 676 ;
+C 11 ; WX 369 ; N uni0307 ; B 118 543 254 646 ;
+C 12 ; WX 392 ; N uni0308 ; B 21 544 371 642 ;
+C 13 ; WX 450 ; N uni030A ; B 114 582 340 756 ;
+C 14 ; WX 426 ; N uni030C ; B 59 514 369 661 ;
+C 15 ; WX 503 ; N uni03F6 ; B 24 -7 542 458 ;
+C 16 ; WX 613 ; N uni20DB ; B 21 542 592 640 ;
+C 17 ; WX 834 ; N uni20DC ; B 21 522 813 620 ;
+C 18 ; WX 641 ; N uni2107 ; B 47 -16 592 658 ;
+C 19 ; WX 530 ; N uni2113 ; B 21 -18 545 677 ;
+C 20 ; WX 875 ; N uni2126 ; B 54 0 822 658 ;
+C 21 ; WX 875 ; N uni2127 ; B 54 -11 822 651 ;
+C 22 ; WX 865 ; N uni212B ; B 5 -2 859 786 ;
+C 23 ; WX 809 ; N u1D71E ; B -20 0 774 669 ;
+C 24 ; WX 731 ; N u1D71F ; B -55 0 601 677 ;
+C 25 ; WX 854 ; N u1D723 ; B 24 -18 801 685 ;
+C 26 ; WX 795 ; N u1D726 ; B -77 -18 713 669 ;
+C 27 ; WX 773 ; N u1D729 ; B -27 0 810 662 ;
+C 28 ; WX 952 ; N u1D72B ; B -40 0 1022 662 ;
+C 29 ; WX 713 ; N u1D72E ; B -60 0 751 662 ;
+C 30 ; WX 910 ; N u1D730 ; B 59 0 952 676 ;
+C 31 ; WX 964 ; N u1D731 ; B 60 0 929 662 ;
+C 32 ; WX 949 ; N u1D733 ; B 117 0 1033 677 ;
+C 33 ; WX 880 ; N u1D734 ; B -10 0 847 677 ;
+C 34 ; WX 768 ; N u1D736 ; B 22 -7 743 462 ;
+C 35 ; WX 686 ; N u1D737 ; B -103 -204 654 680 ;
+C 36 ; WX 716 ; N u1D738 ; B -9 -205 685 445 ;
+C 37 ; WX 608 ; N u1D739 ; B 15 -16 574 682 ;
+C 38 ; WX 481 ; N u1D750 ; B 51 -3 535 458 ;
+C 39 ; WX 543 ; N u1D73B ; B 18 -208 586 669 ;
+C 40 ; WX 677 ; N u1D73C ; B 25 -218 633 462 ;
+C 41 ; WX 587 ; N u1D73D ; B 33 -13 575 677 ;
+C 42 ; WX 376 ; N u1D73E ; B 22 -3 338 464 ;
+C 43 ; WX 568 ; N u1D73F ; B 7 -9 557 456 ;
+C 44 ; WX 624 ; N u1D740 ; B 18 -10 622 682 ;
+C 45 ; WX 696 ; N u1D741 ; B -47 -208 638 457 ;
+C 46 ; WX 557 ; N u1D742 ; B 9 -8 545 468 ;
+C 47 ; WX 568 ; N u1D743 ; B -11 -207 577 679 ;
+C 48 ; WX 652 ; N u1D745 ; B -12 -16 639 449 ;
+C 49 ; WX 667 ; N u1D746 ; B -46 -209 645 459 ;
+C 50 ; WX 826 ; N u1D748 ; B 23 -9 806 460 ;
+C 51 ; WX 607 ; N u1D749 ; B -9 -15 586 449 ;
+C 52 ; WX 660 ; N u1D74A ; B 15 -7 617 464 ;
+C 53 ; WX 724 ; N u1D753 ; B 22 -199 685 661 ;
+C 54 ; WX 690 ; N u1D74C ; B -128 -225 671 464 ;
+C 55 ; WX 804 ; N u1D74D ; B 28 -209 784 661 ;
+C 56 ; WX 858 ; N u1D74E ; B 22 -6 821 449 ;
+C 57 ; WX 597 ; N u1D73A ; B 15 -9 582 458 ;
+C 58 ; WX 752 ; N u1D751 ; B -19 -13 727 727 ;
+C 59 ; WX 1002 ; N u1D755 ; B 8 -6 982 449 ;
+C 60 ; WX 650 ; N u1D754 ; B 6 -201 610 459 ;
+C 61 ; WX 599 ; N u1D747 ; B 27 -178 614 457 ;
+C 62 ; WX 730 ; N u1D74B ; B 21 -203 691 452 ;
+C 63 ; WX 776 ; N u1D735 ; B 125 0 851 677 ;
+C 64 ; WX 669 ; N u1D74F ; B 18 -16 621 692 ;
+C 65 ; WX 817 ; N uni019B.alt ; B 67 -10 778 744 ;
+C 66 ; WX 652 ; N uni210F ; B 50 -16 604 698 ;
+C 67 ; WX 636 ; N uni210F.alt ; B 109 -14 649 698 ;
+C 68 ; WX 691 ; N u1D752 ; B -29 -17 643 486 ;
+C 71 ; WX 815 ; N u1D468 ; B -83 0 726 683 ;
+C 72 ; WX 823 ; N u1D469 ; B -31 0 742 669 ;
+C 73 ; WX 841 ; N u1D46A ; B 24 -22 814 685 ;
+C 74 ; WX 882 ; N u1D46B ; B -57 0 816 669 ;
+C 75 ; WX 802 ; N u1D46C ; B -34 0 747 669 ;
+C 76 ; WX 803 ; N u1D46D ; B -17 0 756 669 ;
+C 77 ; WX 906 ; N u1D46E ; B 10 -22 871 685 ;
+C 78 ; WX 915 ; N u1D46F ; B -31 0 905 669 ;
+C 79 ; WX 475 ; N u1D470 ; B -41 0 460 669 ;
+C 80 ; WX 605 ; N u1D471 ; B -57 -99 599 669 ;
+C 81 ; WX 792 ; N u1D472 ; B -27 0 798 669 ;
+C 82 ; WX 724 ; N u1D473 ; B -29 0 688 669 ;
+C 83 ; WX 1094 ; N u1D474 ; B -36 -12 1092 669 ;
+C 84 ; WX 891 ; N u1D475 ; B -34 -15 886 669 ;
+C 85 ; WX 920 ; N u1D476 ; B 19 -22 857 685 ;
+C 86 ; WX 748 ; N u1D477 ; B -34 0 722 669 ;
+C 87 ; WX 920 ; N u1D478 ; B 19 -212 857 685 ;
+C 88 ; WX 817 ; N u1D479 ; B -36 0 748 669 ;
+C 89 ; WX 719 ; N u1D47A ; B 3 -22 643 685 ;
+C 90 ; WX 729 ; N u1D47B ; B 61 0 739 669 ;
+C 91 ; WX 902 ; N u1D47C ; B 72 -18 893 669 ;
+C 92 ; WX 825 ; N u1D47D ; B 40 -18 848 669 ;
+C 93 ; WX 1094 ; N u1D47E ; B 40 -18 1121 669 ;
+C 94 ; WX 823 ; N u1D47F ; B -31 0 821 669 ;
+C 95 ; WX 762 ; N u1D480 ; B 51 0 784 669 ;
+C 96 ; WX 746 ; N u1D481 ; B -16 0 684 669 ;
+C 97 ; WX 642 ; N u1D482 ; B -34 -14 582 462 ;
+C 98 ; WX 647 ; N u1D483 ; B -20 -13 561 699 ;
+C 99 ; WX 574 ; N u1D484 ; B -14 -17 492 462 ;
+C 100 ; WX 645 ; N u1D485 ; B -34 -13 625 699 ;
+C 101 ; WX 571 ; N u1D486 ; B -4 -17 495 462 ;
+C 102 ; WX 408 ; N u1D487 ; B -201 -209 511 698 ;
+C 103 ; WX 654 ; N u1D488 ; B -59 -207 607 462 ;
+C 104 ; WX 686 ; N u1D489 ; B -16 -9 609 699 ;
+C 105 ; WX 374 ; N u1D48A ; B -2 -13 328 658 ;
+C 106 ; WX 337 ; N u1D48B ; B -224 -211 312 658 ;
+C 107 ; WX 588 ; N u1D48C ; B -29 -8 551 699 ;
+C 108 ; WX 351 ; N u1D48D ; B -2 -9 325 699 ;
+C 109 ; WX 990 ; N u1D48E ; B -17 -9 917 462 ;
+C 110 ; WX 694 ; N u1D48F ; B -6 -9 611 462 ;
+C 111 ; WX 642 ; N u1D490 ; B -12 -17 555 462 ;
+C 112 ; WX 613 ; N u1D491 ; B -136 -209 529 459 ;
+C 113 ; WX 625 ; N u1D492 ; B -7 -209 563 462 ;
+C 114 ; WX 476 ; N u1D493 ; B -26 0 454 462 ;
+C 115 ; WX 507 ; N u1D494 ; B -21 -17 415 462 ;
+C 116 ; WX 355 ; N u1D495 ; B -18 -13 337 594 ;
+C 117 ; WX 715 ; N u1D496 ; B 13 -13 631 462 ;
+C 118 ; WX 567 ; N u1D497 ; B -7 -17 493 462 ;
+C 119 ; WX 841 ; N u1D498 ; B -7 -17 754 462 ;
+C 120 ; WX 610 ; N u1D499 ; B -59 -17 552 462 ;
+C 121 ; WX 552 ; N u1D49A ; B -108 -209 466 462 ;
+C 122 ; WX 488 ; N u1D49B ; B -52 -82 437 449 ;
+C 123 ; WX 520 ; N u1D497.alt ; B 7 -9 468 462 ;
+C 124 ; WX 800 ; N u1D498.alt ; B 0 -9 753 462 ;
+C 125 ; WX 656 ; N u1D742.alt ; B 40 -12 625 445 ;
+C 126 ; WX 631 ; N u1D49A.alt ; B 10 -211 644 462 ;
+C 127 ; WX 656 ; N zero.oldstyle ; B 28 -13 630 544 ;
+C 128 ; WX 604 ; N one.oldstyle ; B 75 0 539 544 ;
+C 129 ; WX 601 ; N two.oldstyle ; B 19 0 577 554 ;
+C 130 ; WX 607 ; N three.oldstyle ; B 18 -162 571 544 ;
+C 131 ; WX 602 ; N four.oldstyle ; B 21 -144 573 544 ;
+C 132 ; WX 574 ; N five.oldstyle ; B 26 -156 542 532 ;
+C 133 ; WX 652 ; N six.oldstyle ; B 32 -13 625 688 ;
+C 134 ; WX 575 ; N seven.oldstyle ; B 19 -148 550 532 ;
+C 135 ; WX 639 ; N eight.oldstyle ; B 32 -13 608 688 ;
+C 136 ; WX 653 ; N nine.oldstyle ; B 30 -161 624 544 ;
+C 137 ; WX 660 ; N zero ; B 65 -14 607 676 ;
+C 138 ; WX 447 ; N one ; B 54 0 396 678 ;
+C 139 ; WX 662 ; N two ; B 69 0 610 676 ;
+C 140 ; WX 594 ; N three ; B 63 -14 535 676 ;
+C 141 ; WX 669 ; N four ; B 59 0 618 676 ;
+C 142 ; WX 606 ; N five ; B 63 -14 557 688 ;
+C 143 ; WX 645 ; N six ; B 66 -14 587 684 ;
+C 144 ; WX 642 ; N seven ; B 54 -8 585 662 ;
+C 145 ; WX 612 ; N eight ; B 76 -14 544 676 ;
+C 146 ; WX 639 ; N nine ; B 67 -28 581 678 ;
+C 147 ; WX 329 ; N period ; B 50 -17 281 155 ;
+C 148 ; WX 319 ; N comma ; B 48 -184 288 155 ;
+C 149 ; WX 1103 ; N uni21BC ; B 71 205 1033 491 ;
+C 150 ; WX 1103 ; N uni21BD ; B 71 19 1033 305 ;
+C 151 ; WX 1103 ; N uni21C0 ; B 71 205 1033 491 ;
+C 152 ; WX 1103 ; N uni21C1 ; B 71 19 1033 305 ;
+C 153 ; WX 431 ; N uni21A9 ; B 71 205 361 510 ;
+C 154 ; WX 440 ; N uni21AA ; B 71 205 370 510 ;
+C 155 ; WX 707 ; N uni22B2 ; B 26 -25 683 541 ;
+C 156 ; WX 715 ; N uni22B3 ; B 26 -25 691 541 ;
+C 157 ; WX 773 ; N less ; B 71 -25 703 539 ;
+C 158 ; WX 552 ; N slash ; B 71 -176 484 693 ;
+C 159 ; WX 773 ; N greater ; B 71 -25 703 539 ;
+C 160 ; WX 938 ; N uni2605 ; B 50 -47 888 607 ;
+C 161 ; WX 507 ; N uni266D ; B 36 -25 483 737 ;
+C 162 ; WX 467 ; N uni266E ; B 36 -221 431 719 ;
+C 163 ; WX 527 ; N uni266F ; B 36 -207 491 770 ;
+C 164 ; WX 1088 ; N uni2323 ; B 71 127 1018 400 ;
+C 165 ; WX 1088 ; N uni2322 ; B 71 127 1018 400 ;
+C 166 ; WX 852 ; N uni2118 ; B 65 -197 802 479 ;
+C 167 ; WX 606 ; N uni20D7 ; B 167 503 706 794 ;
+C 168 ; WX 337 ; N uni2040 ; B 262 512 780 678 ;
+C 169 ; WX 635 ; N u1D488.alt ; B -9 -211 613 462 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/NewTXBMI7.afm b/fonts/newtx/afm/NewTXBMI7.afm
new file mode 100644
index 0000000000..7b6d855721
--- /dev/null
+++ b/fonts/newtx/afm/NewTXBMI7.afm
@@ -0,0 +1,187 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Tue Sep 10 17:45:23 2019
+FontName NewTXBMI7
+FullName NewTX Bold Math Italic 7
+FamilyName NewTXMath
+Weight Bold
+Notice (Based on TX fonts and GNU FreeFonts. GNU 3.0)
+Comment Modifications Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -15
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -366 -225 1007 794
+StartCharMetrics 168
+C 0 ; WX 292 ; N degree ; B 36 407 256 610 ;
+C 1 ; WX 330 ; N u1D6A4.bit ; B 24 -11 288 462 ;
+C 2 ; WX 299 ; N u1D6A5.bit ; B -202 -209 259 462 ;
+C 3 ; WX 642 ; N uni01B5 ; B 44 -2 616 653 ;
+C 4 ; WX 572 ; N uni019B ; B 24 -14 565 698 ;
+C 5 ; WX 419 ; N gravecomb ; B 103 536 272 701 ;
+C 6 ; WX 370 ; N acutecomb ; B 94 541 270 705 ;
+C 7 ; WX 373 ; N uni0302 ; B 55 523 325 684 ;
+C 8 ; WX 316 ; N tildecomb ; B 5 566 307 674 ;
+C 9 ; WX 25 ; N uni0304 ; B -366 533 -61 584 ;
+C 10 ; WX 343 ; N uni0306 ; B 22 527 315 676 ;
+C 11 ; WX 321 ; N uni0307 ; B 103 545 220 646 ;
+C 12 ; WX 338 ; N uni0308 ; B 19 546 319 642 ;
+C 13 ; WX 392 ; N uni030A ; B 100 584 295 756 ;
+C 14 ; WX 373 ; N uni030C ; B 51 516 322 661 ;
+C 15 ; WX 440 ; N uni03F6 ; B 21 -5 473 458 ;
+C 16 ; WX 528 ; N uni20DB ; B 19 544 509 640 ;
+C 17 ; WX 718 ; N uni20DC ; B 19 524 699 620 ;
+C 18 ; WX 562 ; N uni2107 ; B 41 -14 518 658 ;
+C 19 ; WX 427 ; N uni2113 ; B 18 -14 439 677 ;
+C 20 ; WX 762 ; N uni2126 ; B 47 0 715 658 ;
+C 21 ; WX 762 ; N uni2127 ; B 47 -9 715 651 ;
+C 22 ; WX 753 ; N uni212B ; B 3 -2 747 786 ;
+C 23 ; WX 737 ; N u1D71E ; B -18 0 717 669 ;
+C 24 ; WX 678 ; N u1D71F ; B -51 0 567 677 ;
+C 25 ; WX 790 ; N u1D723 ; B 25 -18 749 685 ;
+C 26 ; WX 744 ; N u1D726 ; B -72 0 666 687 ;
+C 27 ; WX 713 ; N u1D729 ; B -25 0 759 662 ;
+C 28 ; WX 859 ; N u1D72B ; B -37 0 936 662 ;
+C 29 ; WX 664 ; N u1D72E ; B -56 0 711 662 ;
+C 30 ; WX 811 ; N u1D730 ; B 65 0 861 676 ;
+C 31 ; WX 883 ; N u1D731 ; B 61 0 857 662 ;
+C 32 ; WX 871 ; N u1D733 ; B 119 0 960 677 ;
+C 33 ; WX 812 ; N u1D734 ; B -9 0 790 677 ;
+C 34 ; WX 630 ; N u1D736 ; B 24 -7 621 462 ;
+C 35 ; WX 569 ; N u1D737 ; B -97 -204 566 680 ;
+C 36 ; WX 589 ; N u1D738 ; B 3 -205 576 445 ;
+C 37 ; WX 505 ; N u1D739 ; B 18 -16 502 682 ;
+C 38 ; WX 411 ; N u1D750 ; B 50 -3 471 458 ;
+C 39 ; WX 453 ; N u1D73B ; B 18 -208 514 669 ;
+C 40 ; WX 540 ; N u1D73C ; B 22 -218 521 462 ;
+C 41 ; WX 479 ; N u1D73D ; B 29 -13 493 677 ;
+C 42 ; WX 307 ; N u1D73E ; B 22 -3 275 464 ;
+C 43 ; WX 475 ; N u1D73F ; B 7 -9 478 456 ;
+C 44 ; WX 539 ; N u1D740 ; B 16 -10 537 682 ;
+C 45 ; WX 569 ; N u1D741 ; B -49 -208 529 457 ;
+C 46 ; WX 473 ; N u1D742 ; B 23 -8 475 468 ;
+C 47 ; WX 477 ; N u1D743 ; B -7 -207 506 679 ;
+C 48 ; WX 556 ; N u1D745 ; B 3 -16 559 449 ;
+C 49 ; WX 549 ; N u1D746 ; B -48 -209 539 459 ;
+C 50 ; WX 701 ; N u1D748 ; B 25 -9 698 460 ;
+C 51 ; WX 512 ; N u1D749 ; B 3 -15 509 449 ;
+C 52 ; WX 554 ; N u1D74A ; B 26 -7 534 464 ;
+C 53 ; WX 590 ; N u1D753 ; B 24 -199 565 661 ;
+C 54 ; WX 605 ; N u1D74C ; B -120 -225 602 464 ;
+C 55 ; WX 648 ; N u1D74D ; B 28 -209 645 661 ;
+C 56 ; WX 731 ; N u1D74E ; B 23 -6 707 449 ;
+C 57 ; WX 513 ; N u1D73A ; B 17 -9 510 458 ;
+C 58 ; WX 605 ; N u1D751 ; B -7 -13 595 727 ;
+C 59 ; WX 854 ; N u1D755 ; B 16 -6 851 449 ;
+C 60 ; WX 539 ; N u1D754 ; B -9 -201 514 459 ;
+C 61 ; WX 513 ; N u1D747 ; B 28 -178 538 457 ;
+C 62 ; WX 605 ; N u1D74B ; B 22 -203 580 452 ;
+C 63 ; WX 677 ; N u1D735 ; B 109 0 742 677 ;
+C 64 ; WX 558 ; N u1D74F ; B 20 -16 533 692 ;
+C 65 ; WX 717 ; N uni019B.alt ; B 59 -10 682 744 ;
+C 66 ; WX 577 ; N uni210F ; B 44 -14 534 698 ;
+C 67 ; WX 563 ; N uni210F.alt ; B 95 -12 574 698 ;
+C 68 ; WX 599 ; N u1D752 ; B -25 -15 557 474 ;
+C 71 ; WX 713 ; N u1D468 ; B -73 0 634 683 ;
+C 72 ; WX 730 ; N u1D469 ; B -27 0 673 669 ;
+C 73 ; WX 732 ; N u1D46A ; B 28 -20 727 685 ;
+C 74 ; WX 784 ; N u1D46B ; B -50 0 737 669 ;
+C 75 ; WX 715 ; N u1D46C ; B -30 0 686 669 ;
+C 76 ; WX 715 ; N u1D46D ; B -15 0 693 669 ;
+C 77 ; WX 788 ; N u1D46E ; B 15 -20 764 685 ;
+C 78 ; WX 822 ; N u1D46F ; B -27 0 831 669 ;
+C 79 ; WX 416 ; N u1D470 ; B -35 0 420 669 ;
+C 80 ; WX 542 ; N u1D471 ; B -50 -99 553 669 ;
+C 81 ; WX 710 ; N u1D472 ; B -23 0 733 669 ;
+C 82 ; WX 650 ; N u1D473 ; B -25 0 624 669 ;
+C 83 ; WX 958 ; N u1D474 ; B -32 -12 975 669 ;
+C 84 ; WX 779 ; N u1D475 ; B -30 -15 793 669 ;
+C 85 ; WX 800 ; N u1D476 ; B 23 -20 758 685 ;
+C 86 ; WX 666 ; N u1D477 ; B -30 0 657 669 ;
+C 87 ; WX 800 ; N u1D478 ; B 23 -210 758 685 ;
+C 88 ; WX 726 ; N u1D479 ; B -32 0 668 669 ;
+C 89 ; WX 622 ; N u1D47A ; B 2 -20 575 685 ;
+C 90 ; WX 653 ; N u1D47B ; B 53 0 680 669 ;
+C 91 ; WX 788 ; N u1D47C ; B 68 -18 798 669 ;
+C 92 ; WX 719 ; N u1D47D ; B 55 -18 757 669 ;
+C 93 ; WX 966 ; N u1D47E ; B 55 -18 1007 669 ;
+C 94 ; WX 720 ; N u1D47F ; B -27 0 736 669 ;
+C 95 ; WX 667 ; N u1D480 ; B 64 0 703 669 ;
+C 96 ; WX 653 ; N u1D481 ; B -13 0 616 669 ;
+C 97 ; WX 557 ; N u1D482 ; B -26 -14 507 462 ;
+C 98 ; WX 559 ; N u1D483 ; B -16 -13 493 699 ;
+C 99 ; WX 497 ; N u1D484 ; B -9 -15 435 462 ;
+C 100 ; WX 558 ; N u1D485 ; B -26 -13 561 699 ;
+C 101 ; WX 495 ; N u1D486 ; B 1 -15 438 462 ;
+C 102 ; WX 363 ; N u1D487 ; B -179 -207 471 698 ;
+C 103 ; WX 564 ; N u1D488 ; B -54 -205 533 462 ;
+C 104 ; WX 612 ; N u1D489 ; B -14 -9 548 699 ;
+C 105 ; WX 322 ; N u1D48A ; B 1 -11 297 658 ;
+C 106 ; WX 309 ; N u1D48B ; B -200 -209 303 658 ;
+C 107 ; WX 531 ; N u1D48C ; B -25 -8 504 699 ;
+C 108 ; WX 305 ; N u1D48D ; B 0 -9 303 699 ;
+C 109 ; WX 859 ; N u1D48E ; B -15 -9 796 462 ;
+C 110 ; WX 610 ; N u1D48F ; B -6 -9 540 462 ;
+C 111 ; WX 557 ; N u1D490 ; B -7 -15 489 462 ;
+C 112 ; WX 545 ; N u1D491 ; B -124 -207 481 461 ;
+C 113 ; WX 549 ; N u1D492 ; B -3 -207 508 462 ;
+C 114 ; WX 416 ; N u1D493 ; B -22 0 409 462 ;
+C 115 ; WX 439 ; N u1D494 ; B -20 -15 370 462 ;
+C 116 ; WX 309 ; N u1D495 ; B -14 -11 304 594 ;
+C 117 ; WX 620 ; N u1D496 ; B 14 -11 549 462 ;
+C 118 ; WX 493 ; N u1D497 ; B 7 -15 439 462 ;
+C 119 ; WX 731 ; N u1D498 ; B 7 -15 667 462 ;
+C 120 ; WX 534 ; N u1D499 ; B -51 -15 494 462 ;
+C 121 ; WX 482 ; N u1D49A ; B -98 -207 418 462 ;
+C 122 ; WX 424 ; N u1D49B ; B -46 -80 392 449 ;
+C 123 ; WX 472 ; N u1D497.alt ; B 16 -11 441 462 ;
+C 124 ; WX 730 ; N u1D498.alt ; B 16 -11 699 462 ;
+C 125 ; WX 572 ; N u1D742.alt ; B 35 -12 544 445 ;
+C 126 ; WX 577 ; N u1D49A.alt ; B -23 -209 558 462 ;
+C 127 ; WX 500 ; N zero.oldstyle ; B 24 -13 476 544 ;
+C 128 ; WX 500 ; N one.oldstyle ; B 65 0 442 544 ;
+C 129 ; WX 500 ; N two.oldstyle ; B 17 0 478 554 ;
+C 130 ; WX 500 ; N three.oldstyle ; B 16 -158 468 544 ;
+C 131 ; WX 500 ; N four.oldstyle ; B 19 -144 475 544 ;
+C 132 ; WX 500 ; N five.oldstyle ; B 22 -152 470 532 ;
+C 133 ; WX 500 ; N six.oldstyle ; B 28 -13 475 688 ;
+C 134 ; WX 500 ; N seven.oldstyle ; B 17 -144 477 532 ;
+C 135 ; WX 500 ; N eight.oldstyle ; B 28 -13 472 688 ;
+C 136 ; WX 500 ; N nine.oldstyle ; B 26 -157 473 544 ;
+C 137 ; WX 608 ; N zero ; B 60 -14 562 676 ;
+C 138 ; WX 410 ; N one ; B 51 0 362 676 ;
+C 139 ; WX 589 ; N two ; B 56 0 543 676 ;
+C 140 ; WX 523 ; N three ; B 53 -14 476 676 ;
+C 141 ; WX 581 ; N four ; B 41 0 541 676 ;
+C 142 ; WX 537 ; N five ; B 53 -14 495 688 ;
+C 143 ; WX 583 ; N six ; B 56 -14 538 684 ;
+C 144 ; WX 545 ; N seven ; B 41 -8 505 662 ;
+C 145 ; WX 536 ; N eight ; B 56 -14 489 676 ;
+C 146 ; WX 586 ; N nine ; B 58 -24 535 676 ;
+C 147 ; WX 250 ; N period ; B 41 -13 210 156 ;
+C 148 ; WX 250 ; N comma ; B 39 -180 223 155 ;
+C 149 ; WX 964 ; N uni21BC ; B 62 209 902 491 ;
+C 150 ; WX 964 ; N uni21BD ; B 62 23 902 305 ;
+C 151 ; WX 964 ; N uni21C0 ; B 62 209 902 491 ;
+C 152 ; WX 964 ; N uni21C1 ; B 62 23 902 305 ;
+C 153 ; WX 359 ; N uni21A9 ; B 62 209 297 510 ;
+C 154 ; WX 359 ; N uni21AA ; B 62 209 297 510 ;
+C 155 ; WX 601 ; N uni22B2 ; B 22 -25 579 541 ;
+C 156 ; WX 601 ; N uni22B3 ; B 22 -25 579 541 ;
+C 157 ; WX 676 ; N less ; B 62 -25 614 539 ;
+C 158 ; WX 482 ; N slash ; B 62 -176 420 693 ;
+C 159 ; WX 676 ; N greater ; B 62 -25 614 539 ;
+C 160 ; WX 820 ; N uni2605 ; B 44 -47 776 607 ;
+C 161 ; WX 396 ; N uni266D ; B 32 -21 374 737 ;
+C 162 ; WX 374 ; N uni266E ; B 32 -221 342 719 ;
+C 163 ; WX 419 ; N uni266F ; B 32 -207 387 770 ;
+C 164 ; WX 951 ; N uni2323 ; B 62 131 889 400 ;
+C 165 ; WX 951 ; N uni2322 ; B 62 131 889 400 ;
+C 166 ; WX 666 ; N uni2118 ; B 53 -193 624 479 ;
+C 167 ; WX 528 ; N uni20D7 ; B 146 505 615 794 ;
+C 168 ; WX 292 ; N uni2040 ; B 229 514 679 678 ;
+C 169 ; WX 578 ; N u1D488.alt ; B -9 -209 559 462 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/NewTXMI.afm b/fonts/newtx/afm/NewTXMI.afm
new file mode 100644
index 0000000000..dde71a1086
--- /dev/null
+++ b/fonts/newtx/afm/NewTXMI.afm
@@ -0,0 +1,189 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 12 14:55:45 2019
+FontName NewTXMI
+FullName NewTX Math Italic
+FamilyName NewTXMath
+Weight Regular
+Notice (Derived from TX fonts and GNUFreeFont, GNU 3.0)
+Comment Modifications are Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -15
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -342 -214 906 786
+StartCharMetrics 170
+C 0 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 1 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 2 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 3 ; WX 392 ; N uni0300 ; B 96 538 254 701 ;
+C 4 ; WX 341 ; N uni0301 ; B 88 543 248 705 ;
+C 5 ; WX 349 ; N uni0302 ; B 51 525 303 684 ;
+C 6 ; WX 292 ; N uni0303 ; B 5 568 283 674 ;
+C 7 ; WX 0 ; N uni0304 ; B -342 535 -81 585 ;
+C 8 ; WX 317 ; N uni0306 ; B 21 529 291 676 ;
+C 9 ; WX 291 ; N uni0307 ; B 96 547 196 647 ;
+C 10 ; WX 299 ; N uni0308 ; B 18 548 281 643 ;
+C 11 ; WX 361 ; N uni030A ; B 93 586 269 756 ;
+C 12 ; WX 349 ; N uni030C ; B 48 518 301 661 ;
+C 13 ; WX 390 ; N uni03F6 ; B 10 -11 411 441 ;
+C 14 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 15 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 16 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 17 ; WX 500 ; N uni210E ; B 19 -9 478 683 ;
+C 18 ; WX 417 ; N uni2113 ; B 15 -11 432 677 ;
+C 19 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 20 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 21 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 22 ; WX 611 ; N u1D434 ; B -51 0 564 668 ;
+C 23 ; WX 611 ; N u1D435 ; B -8 0 588 653 ;
+C 24 ; WX 667 ; N u1D436 ; B 66 -18 689 666 ;
+C 25 ; WX 722 ; N u1D437 ; B -8 0 700 653 ;
+C 26 ; WX 611 ; N u1D438 ; B -1 0 634 653 ;
+C 27 ; WX 611 ; N u1D439 ; B 8 0 645 653 ;
+C 28 ; WX 722 ; N u1D43A ; B 52 -18 722 666 ;
+C 29 ; WX 722 ; N u1D43B ; B -8 0 767 653 ;
+C 30 ; WX 333 ; N u1D43C ; B -8 0 384 653 ;
+C 31 ; WX 444 ; N u1D43D ; B -6 -18 491 653 ;
+C 32 ; WX 667 ; N u1D43E ; B 7 0 722 653 ;
+C 33 ; WX 556 ; N u1D43F ; B -8 0 559 653 ;
+C 34 ; WX 833 ; N u1D440 ; B -18 0 873 653 ;
+C 35 ; WX 667 ; N u1D441 ; B -20 -15 727 653 ;
+C 36 ; WX 722 ; N u1D442 ; B 60 -18 700 666 ;
+C 37 ; WX 611 ; N u1D443 ; B 0 0 605 653 ;
+C 38 ; WX 722 ; N u1D444 ; B 59 -182 699 666 ;
+C 39 ; WX 611 ; N u1D445 ; B -13 0 588 653 ;
+C 40 ; WX 500 ; N u1D446 ; B 17 -18 508 667 ;
+C 41 ; WX 556 ; N u1D447 ; B 59 0 633 653 ;
+C 42 ; WX 722 ; N u1D448 ; B 102 -18 765 653 ;
+C 43 ; WX 611 ; N u1D449 ; B 76 -18 688 653 ;
+C 44 ; WX 833 ; N u1D44A ; B 71 -18 906 653 ;
+C 45 ; WX 611 ; N u1D44B ; B -29 0 655 653 ;
+C 46 ; WX 556 ; N u1D44C ; B 78 0 633 653 ;
+C 47 ; WX 556 ; N u1D44D ; B -6 0 606 653 ;
+C 48 ; WX 500 ; N u1D44E ; B 17 -11 476 441 ;
+C 49 ; WX 500 ; N u1D44F ; B 23 -11 473 683 ;
+C 50 ; WX 444 ; N u1D450 ; B 30 -11 425 441 ;
+C 51 ; WX 500 ; N u1D451 ; B 15 -13 527 683 ;
+C 52 ; WX 444 ; N u1D452 ; B 31 -11 412 441 ;
+C 53 ; WX 278 ; N u1D453 ; B -147 -207 424 678 ;
+C 54 ; WX 500 ; N u1D454 ; B 8 -206 469 441 ;
+C 55 ; WX 500 ; N u1D455 ; B 19 -9 478 683 ;
+C 56 ; WX 278 ; N u1D456 ; B 49 -11 276 643 ;
+C 57 ; WX 278 ; N u1D457 ; B -124 -207 301 643 ;
+C 58 ; WX 444 ; N u1D458 ; B 14 -11 461 683 ;
+C 59 ; WX 278 ; N u1D459 ; B 41 -11 279 683 ;
+C 60 ; WX 722 ; N u1D45A ; B 12 -9 704 441 ;
+C 61 ; WX 500 ; N u1D45B ; B 14 -9 474 441 ;
+C 62 ; WX 500 ; N u1D45C ; B 27 -11 468 441 ;
+C 63 ; WX 500 ; N u1D45D ; B -75 -205 469 441 ;
+C 64 ; WX 500 ; N u1D45E ; B 25 -205 483 441 ;
+C 65 ; WX 389 ; N u1D45F ; B 45 0 412 441 ;
+C 66 ; WX 389 ; N u1D460 ; B 16 -13 366 442 ;
+C 67 ; WX 278 ; N u1D461 ; B 37 -11 296 546 ;
+C 68 ; WX 500 ; N u1D462 ; B 42 -11 475 441 ;
+C 69 ; WX 444 ; N u1D463 ; B 21 -18 426 441 ;
+C 70 ; WX 667 ; N u1D464 ; B 16 -18 648 441 ;
+C 71 ; WX 444 ; N u1D465 ; B -27 -11 447 441 ;
+C 72 ; WX 444 ; N u1D466 ; B -24 -206 426 441 ;
+C 73 ; WX 389 ; N u1D467 ; B -2 -81 380 428 ;
+C 74 ; WX 587 ; N u1D6E5 ; B -43 0 511 677 ;
+C 75 ; WX 722 ; N u1D6E9 ; B 60 -18 699 666 ;
+C 76 ; WX 636 ; N u1D6EC ; B -11 0 601 671 ;
+C 77 ; WX 639 ; N u1D6EF ; B -7 0 688 662 ;
+C 78 ; WX 722 ; N u1D6F1 ; B -29 0 806 662 ;
+C 79 ; WX 594 ; N u1D6F4 ; B -35 0 655 662 ;
+C 80 ; WX 676 ; N u1D6F6 ; B 82 0 696 672 ;
+C 81 ; WX 761 ; N u1D6F7 ; B 77 0 748 662 ;
+C 82 ; WX 703 ; N u1D6F9 ; B 134 0 808 670 ;
+C 83 ; WX 723 ; N u1D6FA ; B 13 0 725 677 ;
+C 84 ; WX 587 ; N u1D6FB ; B 77 0 631 677 ;
+C 85 ; WX 593 ; N u1D6FC ; B 24 -11 584 441 ;
+C 86 ; WX 508 ; N u1D6FD ; B -97 -207 505 655 ;
+C 87 ; WX 518 ; N u1D6FE ; B 3 -207 531 441 ;
+C 88 ; WX 465 ; N u1D6FF ; B 18 -15 462 657 ;
+C 89 ; WX 481 ; N u1D700 ; B 17 -11 478 441 ;
+C 90 ; WX 421 ; N u1D701 ; B 18 -207 482 645 ;
+C 91 ; WX 495 ; N u1D702 ; B 22 -207 476 441 ;
+C 92 ; WX 439 ; N u1D703 ; B 29 -11 453 654 ;
+C 93 ; WX 284 ; N u1D704 ; B 22 -11 252 441 ;
+C 94 ; WX 434 ; N u1D705 ; B 7 -11 447 441 ;
+C 95 ; WX 530 ; N u1D706 ; B 16 -11 527 655 ;
+C 96 ; WX 535 ; N u1D707 ; B -49 -207 495 441 ;
+C 97 ; WX 460 ; N u1D708 ; B 23 -11 462 441 ;
+C 98 ; WX 437 ; N u1D709 ; B -7 -207 466 654 ;
+C 99 ; WX 524 ; N u1D70B ; B 3 -11 521 441 ;
+C 100 ; WX 508 ; N u1D70C ; B -63 -207 483 441 ;
+C 101 ; WX 473 ; N u1D70D ; B 28 -171 502 441 ;
+C 102 ; WX 679 ; N u1D70E ; B 25 -11 676 441 ;
+C 103 ; WX 474 ; N u1D70F ; B 3 -11 471 441 ;
+C 104 ; WX 525 ; N u1D710 ; B 26 -11 505 441 ;
+C 105 ; WX 569 ; N u1D711 ; B 22 -207 544 441 ;
+C 106 ; WX 555 ; N u1D712 ; B -120 -207 552 441 ;
+C 107 ; WX 617 ; N u1D713 ; B 28 -207 614 624 ;
+C 108 ; WX 691 ; N u1D714 ; B 23 -11 667 441 ;
+C 109 ; WX 512 ; N u1D715 ; B 19 -16 492 692 ;
+C 110 ; WX 390 ; N u1D716 ; B 49 -11 450 441 ;
+C 111 ; WX 587 ; N u1D717 ; B 18 -11 578 678 ;
+C 112 ; WX 504 ; N u1D718 ; B 5 -10 460 441 ;
+C 113 ; WX 550 ; N u1D719 ; B 24 -207 525 630 ;
+C 114 ; WX 499 ; N u1D71A ; B -9 -207 474 441 ;
+C 115 ; WX 822 ; N u1D71B ; B 16 -11 819 441 ;
+C 116 ; WX 531 ; N uni019B.alt ; B 16 -11 531 655 ;
+C 117 ; WX 497 ; N uni210F ; B 19 -9 478 683 ;
+C 118 ; WX 497 ; N uni210F.alt ; B 19 -9 478 683 ;
+C 120 ; WX 531 ; N uni019B.ital ; B 16 -11 530 655 ;
+C 121 ; WX 278 ; N u1D6A4 ; B 49 -11 235 441 ;
+C 122 ; WX 278 ; N u1D6A5 ; B -124 -207 246 441 ;
+C 123 ; WX 393 ; N u1D463.alt ; B 40 -11 375 441 ;
+C 124 ; WX 626 ; N u1D464.alt ; B 40 -11 608 441 ;
+C 125 ; WX 470 ; N u1D708.alt ; B 31 -11 441 442 ;
+C 126 ; WX 460 ; N u1D466.alt ; B -4 -207 473 441 ;
+C 127 ; WX 500 ; N zero.oldstyle ; B 24 -14 476 509 ;
+C 128 ; WX 500 ; N one.oldstyle ; B 111 0 394 509 ;
+C 129 ; WX 500 ; N two.oldstyle ; B 30 0 475 509 ;
+C 130 ; WX 500 ; N three.oldstyle ; B 43 -181 431 509 ;
+C 131 ; WX 500 ; N four.oldstyle ; B 12 -167 472 509 ;
+C 132 ; WX 500 ; N five.oldstyle ; B 32 -181 438 521 ;
+C 133 ; WX 500 ; N six.oldstyle ; B 34 -14 468 684 ;
+C 134 ; WX 500 ; N seven.oldstyle ; B 20 -175 449 495 ;
+C 135 ; WX 500 ; N eight.oldstyle ; B 56 -14 445 676 ;
+C 136 ; WX 500 ; N nine.oldstyle ; B 30 -189 459 509 ;
+C 137 ; WX 611 ; N u1D6E4 ; B 9 0 644 653 ;
+C 138 ; WX 532 ; N zero ; B 40 -14 492 676 ;
+C 139 ; WX 323 ; N one ; B 20 0 303 676 ;
+C 140 ; WX 525 ; N two ; B 40 0 485 676 ;
+C 141 ; WX 469 ; N three ; B 40 -14 429 676 ;
+C 142 ; WX 500 ; N four ; B 20 0 480 676 ;
+C 143 ; WX 486 ; N five ; B 40 -14 446 688 ;
+C 144 ; WX 514 ; N six ; B 40 -14 474 684 ;
+C 145 ; WX 469 ; N seven ; B 20 -8 449 662 ;
+C 146 ; WX 469 ; N eight ; B 40 -14 429 676 ;
+C 147 ; WX 509 ; N nine ; B 40 -22 469 676 ;
+C 148 ; WX 454 ; N u1D454.alt ; B -1 -207 478 439 ;
+C 149 ; WX 250 ; N period ; B 70 -11 181 100 ;
+C 150 ; WX 250 ; N comma ; B 56 -141 195 102 ;
+C 151 ; WX 964 ; N uni21BC ; B 62 229 902 462 ;
+C 152 ; WX 964 ; N uni21BD ; B 62 52 902 285 ;
+C 153 ; WX 964 ; N uni21C0 ; B 62 229 902 462 ;
+C 154 ; WX 964 ; N uni21C1 ; B 62 52 902 285 ;
+C 155 ; WX 319 ; N uni21A9 ; B 62 229 257 489 ;
+C 156 ; WX 319 ; N uni21AA ; B 62 229 257 489 ;
+C 157 ; WX 418 ; N uni22B2 ; B 20 65 398 446 ;
+C 158 ; WX 418 ; N uni22B3 ; B 20 68 398 449 ;
+C 159 ; WX 636 ; N less ; B 62 6 574 508 ;
+C 160 ; WX 441 ; N slash ; B 62 -161 379 678 ;
+C 161 ; WX 636 ; N greater ; B 62 6 574 508 ;
+C 162 ; WX 672 ; N uni2605 ; B 44 -6 628 550 ;
+C 163 ; WX 415 ; N uni266D ; B 66 -21 368 730 ;
+C 164 ; WX 377 ; N uni266E ; B 60 -214 330 712 ;
+C 165 ; WX 402 ; N uni266F ; B 50 -197 365 762 ;
+C 166 ; WX 964 ; N uni2323 ; B 62 101 902 342 ;
+C 167 ; WX 964 ; N uni2322 ; B 62 158 902 399 ;
+C 168 ; WX 624 ; N uni2118 ; B 55 -193 586 479 ;
+C 169 ; WX 486 ; N uni20D7 ; B 170 456 594 745 ;
+C 170 ; WX 260 ; N uni2040 ; B 222 492 613 650 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/NewTXMI5.afm b/fonts/newtx/afm/NewTXMI5.afm
new file mode 100644
index 0000000000..4cb18f2632
--- /dev/null
+++ b/fonts/newtx/afm/NewTXMI5.afm
@@ -0,0 +1,189 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Tue Sep 10 17:41:07 2019
+FontName NewTXMI5
+FullName NewTX Math Italic 5
+FamilyName NewTXMath
+Weight Regular
+Notice (Derived from TX fonts and GNUFreeFont, GNU 3.0)
+Comment Modifications are Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -12
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -342 -214 1153 786
+StartCharMetrics 170
+C 0 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 1 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 2 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 3 ; WX 392 ; N uni0300 ; B 96 538 254 701 ;
+C 4 ; WX 341 ; N uni0301 ; B 88 543 248 705 ;
+C 5 ; WX 349 ; N uni0302 ; B 51 525 303 684 ;
+C 6 ; WX 292 ; N uni0303 ; B 5 568 283 674 ;
+C 7 ; WX 0 ; N uni0304 ; B -342 535 -81 585 ;
+C 8 ; WX 317 ; N uni0306 ; B 21 529 291 676 ;
+C 9 ; WX 291 ; N uni0307 ; B 96 547 196 647 ;
+C 10 ; WX 299 ; N uni0308 ; B 18 548 281 643 ;
+C 11 ; WX 361 ; N uni030A ; B 93 586 269 756 ;
+C 12 ; WX 349 ; N uni030C ; B 48 518 301 661 ;
+C 13 ; WX 434 ; N uni03F6 ; B 4 -11 448 441 ;
+C 14 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 15 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 16 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 17 ; WX 636 ; N uni210E ; B 24 -9 603 683 ;
+C 18 ; WX 495 ; N uni2113 ; B 14 -11 508 677 ;
+C 19 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 20 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 21 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 22 ; WX 767 ; N u1D434 ; B -69 0 706 668 ;
+C 23 ; WX 802 ; N u1D435 ; B -14 0 737 653 ;
+C 24 ; WX 880 ; N u1D436 ; B 69 -22 865 666 ;
+C 25 ; WX 944 ; N u1D437 ; B -14 0 889 653 ;
+C 26 ; WX 794 ; N u1D438 ; B -3 0 781 653 ;
+C 27 ; WX 781 ; N u1D439 ; B 10 0 783 653 ;
+C 28 ; WX 951 ; N u1D43A ; B 50 -22 933 666 ;
+C 29 ; WX 898 ; N u1D43B ; B -14 0 916 653 ;
+C 30 ; WX 427 ; N u1D43C ; B -14 0 452 653 ;
+C 31 ; WX 586 ; N u1D43D ; B -12 -18 607 653 ;
+C 32 ; WX 845 ; N u1D43E ; B 5 0 875 653 ;
+C 33 ; WX 700 ; N u1D43F ; B -14 0 695 653 ;
+C 34 ; WX 1074 ; N u1D440 ; B -24 0 1084 653 ;
+C 35 ; WX 870 ; N u1D441 ; B -28 -15 906 653 ;
+C 36 ; WX 954 ; N u1D442 ; B 62 -22 897 666 ;
+C 37 ; WX 780 ; N u1D443 ; B -2 0 740 653 ;
+C 38 ; WX 954 ; N u1D444 ; B 61 -186 897 666 ;
+C 39 ; WX 779 ; N u1D445 ; B -19 0 741 653 ;
+C 40 ; WX 664 ; N u1D446 ; B 22 -22 630 667 ;
+C 41 ; WX 692 ; N u1D447 ; B 43 0 750 653 ;
+C 42 ; WX 944 ; N u1D448 ; B 117 -18 959 653 ;
+C 43 ; WX 810 ; N u1D449 ; B 54 -18 869 653 ;
+C 44 ; WX 1099 ; N u1D44A ; B 47 -18 1153 653 ;
+C 45 ; WX 799 ; N u1D44B ; B -39 0 816 653 ;
+C 46 ; WX 726 ; N u1D44C ; B 75 0 787 653 ;
+C 47 ; WX 728 ; N u1D44D ; B -7 0 753 653 ;
+C 48 ; WX 661 ; N u1D44E ; B 13 -11 624 441 ;
+C 49 ; WX 661 ; N u1D44F ; B 27 -11 607 683 ;
+C 50 ; WX 588 ; N u1D450 ; B 28 -11 540 441 ;
+C 51 ; WX 664 ; N u1D451 ; B 11 -13 654 683 ;
+C 52 ; WX 588 ; N u1D452 ; B 30 -11 523 441 ;
+C 53 ; WX 342 ; N u1D453 ; B -183 -211 493 678 ;
+C 54 ; WX 661 ; N u1D454 ; B 18 -206 599 441 ;
+C 55 ; WX 636 ; N u1D455 ; B 24 -9 603 683 ;
+C 56 ; WX 370 ; N u1D456 ; B 51 -11 329 643 ;
+C 57 ; WX 342 ; N u1D457 ; B -153 -207 333 643 ;
+C 58 ; WX 563 ; N u1D458 ; B 18 -11 560 683 ;
+C 59 ; WX 367 ; N u1D459 ; B 50 -15 325 683 ;
+C 60 ; WX 950 ; N u1D45A ; B 16 -9 921 441 ;
+C 61 ; WX 654 ; N u1D45B ; B 18 -9 615 441 ;
+C 62 ; WX 660 ; N u1D45C ; B 25 -11 600 441 ;
+C 63 ; WX 659 ; N u1D45D ; B -85 -205 600 441 ;
+C 64 ; WX 662 ; N u1D45E ; B 25 -205 612 441 ;
+C 65 ; WX 508 ; N u1D45F ; B 59 0 514 441 ;
+C 66 ; WX 515 ; N u1D460 ; B 20 -13 456 442 ;
+C 67 ; WX 368 ; N u1D461 ; B 47 -15 365 546 ;
+C 68 ; WX 658 ; N u1D462 ; B 46 -11 621 441 ;
+C 69 ; WX 582 ; N u1D463 ; B -2 -18 535 441 ;
+C 70 ; WX 878 ; N u1D464 ; B -10 -18 828 441 ;
+C 71 ; WX 582 ; N u1D465 ; B -38 -11 561 441 ;
+C 72 ; WX 582 ; N u1D466 ; B -21 -206 534 441 ;
+C 73 ; WX 510 ; N u1D467 ; B -2 -85 481 428 ;
+C 74 ; WX 675 ; N u1D6E5 ; B -49 -4 583 677 ;
+C 75 ; WX 890 ; N u1D6E9 ; B 64 -22 860 666 ;
+C 76 ; WX 749 ; N u1D6EC ; B -13 0 710 675 ;
+C 77 ; WX 746 ; N u1D6EF ; B -7 -4 796 662 ;
+C 78 ; WX 819 ; N u1D6F1 ; B -33 -4 909 662 ;
+C 79 ; WX 684 ; N u1D6F4 ; B -40 -4 747 662 ;
+C 80 ; WX 827 ; N u1D6F6 ; B 87 -4 844 672 ;
+C 81 ; WX 927 ; N u1D6F7 ; B 83 -4 910 662 ;
+C 82 ; WX 829 ; N u1D6F9 ; B 145 -4 944 668 ;
+C 83 ; WX 882 ; N u1D6FA ; B 15 -4 881 677 ;
+C 84 ; WX 638 ; N u1D6FB ; B 77 -3 682 677 ;
+C 85 ; WX 712 ; N u1D6FC ; B 25 -11 698 441 ;
+C 86 ; WX 611 ; N u1D6FD ; B -108 -207 605 655 ;
+C 87 ; WX 604 ; N u1D6FE ; B -1 -207 614 441 ;
+C 88 ; WX 575 ; N u1D6FF ; B 17 -19 565 657 ;
+C 89 ; WX 586 ; N u1D700 ; B 17 -11 579 441 ;
+C 90 ; WX 519 ; N u1D701 ; B 18 -207 583 645 ;
+C 91 ; WX 640 ; N u1D702 ; B 26 -207 616 441 ;
+C 92 ; WX 538 ; N u1D703 ; B 30 -11 549 654 ;
+C 93 ; WX 340 ; N u1D704 ; B 25 -11 305 441 ;
+C 94 ; WX 498 ; N u1D705 ; B 7 -11 510 439 ;
+C 95 ; WX 635 ; N u1D706 ; B 18 -11 631 655 ;
+C 96 ; WX 628 ; N u1D707 ; B -53 -207 584 432 ;
+C 97 ; WX 572 ; N u1D708 ; B 22 -11 572 441 ;
+C 98 ; WX 562 ; N u1D709 ; B -9 -207 590 654 ;
+C 99 ; WX 617 ; N u1D70B ; B 2 -11 610 441 ;
+C 100 ; WX 605 ; N u1D70C ; B -69 -207 574 441 ;
+C 101 ; WX 587 ; N u1D70D ; B 30 -175 616 441 ;
+C 102 ; WX 812 ; N u1D70E ; B 26 -11 805 441 ;
+C 103 ; WX 557 ; N u1D70F ; B -1 -11 550 441 ;
+C 104 ; WX 631 ; N u1D710 ; B 26 -11 605 441 ;
+C 105 ; WX 670 ; N u1D711 ; B 23 -207 640 441 ;
+C 106 ; WX 643 ; N u1D712 ; B -134 -207 637 441 ;
+C 107 ; WX 728 ; N u1D713 ; B 30 -207 720 624 ;
+C 108 ; WX 839 ; N u1D714 ; B 24 -11 811 441 ;
+C 109 ; WX 642 ; N u1D715 ; B 18 -20 616 692 ;
+C 110 ; WX 465 ; N u1D716 ; B 56 -11 529 441 ;
+C 111 ; WX 729 ; N u1D717 ; B 16 -11 716 678 ;
+C 112 ; WX 665 ; N u1D718 ; B 5 -13 601 462 ;
+C 113 ; WX 673 ; N u1D719 ; B 25 -207 643 630 ;
+C 114 ; WX 607 ; N u1D71A ; B -11 -207 575 441 ;
+C 115 ; WX 983 ; N u1D71B ; B 15 -11 975 441 ;
+C 116 ; WX 641 ; N uni019B.alt ; B 18 -11 635 655 ;
+C 117 ; WX 636 ; N uni210F ; B 24 -9 603 683 ;
+C 118 ; WX 636 ; N uni210F.alt ; B 24 -9 603 683 ;
+C 120 ; WX 664 ; N uni019B.ital ; B 18 -11 631 655 ;
+C 121 ; WX 333 ; N u1D6A4 ; B 55 -11 284 441 ;
+C 122 ; WX 327 ; N u1D6A5 ; B -140 -207 287 441 ;
+C 123 ; WX 472 ; N u1D463.alt ; B 43 -11 449 441 ;
+C 124 ; WX 732 ; N u1D464.alt ; B 43 -11 709 441 ;
+C 125 ; WX 470 ; N u1D708.alt ; B 31 -11 441 442 ;
+C 126 ; WX 564 ; N u1D466.alt ; B 13 -210 563 469 ;
+C 127 ; WX 623 ; N zero.oldstyle ; B 28 -14 597 509 ;
+C 128 ; WX 591 ; N one.oldstyle ; B 127 -4 470 509 ;
+C 129 ; WX 590 ; N two.oldstyle ; B 34 -4 562 509 ;
+C 130 ; WX 594 ; N three.oldstyle ; B 49 -185 516 509 ;
+C 131 ; WX 588 ; N four.oldstyle ; B 14 -171 558 509 ;
+C 132 ; WX 586 ; N five.oldstyle ; B 36 -185 516 521 ;
+C 133 ; WX 617 ; N six.oldstyle ; B 39 -14 582 684 ;
+C 134 ; WX 576 ; N seven.oldstyle ; B 22 -179 518 495 ;
+C 135 ; WX 608 ; N eight.oldstyle ; B 64 -14 546 676 ;
+C 136 ; WX 621 ; N nine.oldstyle ; B 34 -193 575 509 ;
+C 137 ; WX 717 ; N u1D6E4 ; B 11 -4 748 653 ;
+C 138 ; WX 660 ; N zero ; B 65 -14 607 676 ;
+C 139 ; WX 447 ; N one ; B 54 0 396 678 ;
+C 140 ; WX 662 ; N two ; B 69 0 610 676 ;
+C 141 ; WX 594 ; N three ; B 63 -14 535 676 ;
+C 142 ; WX 669 ; N four ; B 59 0 618 676 ;
+C 143 ; WX 606 ; N five ; B 63 -14 557 688 ;
+C 144 ; WX 645 ; N six ; B 66 -14 587 684 ;
+C 145 ; WX 642 ; N seven ; B 54 -8 585 662 ;
+C 146 ; WX 612 ; N eight ; B 76 -14 544 676 ;
+C 147 ; WX 639 ; N nine ; B 67 -28 581 678 ;
+C 148 ; WX 576 ; N u1D454.alt ; B 16 -210 556 439 ;
+C 149 ; WX 309 ; N period ; B 80 -11 231 100 ;
+C 150 ; WX 297 ; N comma ; B 64 -145 235 102 ;
+C 151 ; WX 1103 ; N uni21BC ; B 71 225 1033 462 ;
+C 152 ; WX 1103 ; N uni21BD ; B 71 48 1033 285 ;
+C 153 ; WX 1103 ; N uni21C0 ; B 71 225 1033 462 ;
+C 154 ; WX 1103 ; N uni21C1 ; B 71 48 1033 285 ;
+C 155 ; WX 377 ; N uni21A9 ; B 71 225 307 489 ;
+C 156 ; WX 383 ; N uni21AA ; B 71 225 313 489 ;
+C 157 ; WX 489 ; N uni22B2 ; B 22 65 467 446 ;
+C 158 ; WX 494 ; N uni22B3 ; B 22 68 472 449 ;
+C 159 ; WX 727 ; N less ; B 71 6 657 508 ;
+C 160 ; WX 499 ; N slash ; B 71 -156 429 673 ;
+C 161 ; WX 727 ; N greater ; B 71 6 657 508 ;
+C 162 ; WX 769 ; N uni2605 ; B 50 -6 719 550 ;
+C 163 ; WX 510 ; N uni266D ; B 76 -25 458 730 ;
+C 164 ; WX 450 ; N uni266E ; B 68 -214 397 712 ;
+C 165 ; WX 491 ; N uni266F ; B 58 -197 449 762 ;
+C 166 ; WX 1103 ; N uni2323 ; B 71 97 1033 342 ;
+C 167 ; WX 1103 ; N uni2322 ; B 71 154 1033 399 ;
+C 168 ; WX 760 ; N uni2118 ; B 60 -197 715 479 ;
+C 169 ; WX 556 ; N uni20D7 ; B 195 452 681 745 ;
+C 170 ; WX 314 ; N uni2040 ; B 255 488 720 650 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/NewTXMI7.afm b/fonts/newtx/afm/NewTXMI7.afm
new file mode 100644
index 0000000000..b80cd0d511
--- /dev/null
+++ b/fonts/newtx/afm/NewTXMI7.afm
@@ -0,0 +1,189 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Tue Sep 10 17:42:19 2019
+FontName NewTXMI7
+FullName NewTX Math Italic 7
+FamilyName NewTXMath
+Weight Regular
+Notice (Derived from TX fonts and GNUFreeFont, GNU 3.0)
+Comment Modifications are Copyright (c) 2017-2019, Michael Sharpe
+ItalicAngle -12
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox -342 -214 1023 786
+StartCharMetrics 170
+C 0 ; WX 267 ; N degree ; B 34 409 233 610 ;
+C 1 ; WX 531 ; N uni019B ; B 22 -12 524 698 ;
+C 2 ; WX 604 ; N uni01B5 ; B 41 -2 578 653 ;
+C 3 ; WX 392 ; N uni0300 ; B 96 538 254 701 ;
+C 4 ; WX 341 ; N uni0301 ; B 88 543 248 705 ;
+C 5 ; WX 349 ; N uni0302 ; B 51 525 303 684 ;
+C 6 ; WX 292 ; N uni0303 ; B 5 568 283 674 ;
+C 7 ; WX 0 ; N uni0304 ; B -342 535 -81 585 ;
+C 8 ; WX 317 ; N uni0306 ; B 21 529 291 676 ;
+C 9 ; WX 291 ; N uni0307 ; B 96 547 196 647 ;
+C 10 ; WX 299 ; N uni0308 ; B 18 548 281 643 ;
+C 11 ; WX 361 ; N uni030A ; B 93 586 269 756 ;
+C 12 ; WX 349 ; N uni030C ; B 48 518 301 661 ;
+C 13 ; WX 434 ; N uni03F6 ; B 4 -11 448 441 ;
+C 14 ; WX 468 ; N uni20DB ; B 18 546 450 641 ;
+C 15 ; WX 637 ; N uni20DC ; B 18 526 619 621 ;
+C 16 ; WX 517 ; N uni2107 ; B 38 -12 475 658 ;
+C 17 ; WX 564 ; N uni210E ; B 21 -9 537 683 ;
+C 18 ; WX 462 ; N uni2113 ; B 16 -11 479 677 ;
+C 19 ; WX 697 ; N uni2126 ; B 44 0 653 658 ;
+C 20 ; WX 697 ; N uni2127 ; B 44 -7 653 651 ;
+C 21 ; WX 695 ; N uni212B ; B 2 -2 690 786 ;
+C 22 ; WX 684 ; N u1D434 ; B -60 0 631 668 ;
+C 23 ; WX 697 ; N u1D435 ; B -11 0 654 653 ;
+C 24 ; WX 767 ; N u1D436 ; B 67 -20 771 666 ;
+C 25 ; WX 823 ; N u1D437 ; B -11 0 786 653 ;
+C 26 ; WX 700 ; N u1D438 ; B -2 0 705 653 ;
+C 27 ; WX 688 ; N u1D439 ; B 9 0 706 653 ;
+C 28 ; WX 829 ; N u1D43A ; B 51 -20 821 666 ;
+C 29 ; WX 806 ; N u1D43B ; B -11 0 838 653 ;
+C 30 ; WX 378 ; N u1D43C ; B -11 0 416 653 ;
+C 31 ; WX 510 ; N u1D43D ; B -9 -18 544 653 ;
+C 32 ; WX 751 ; N u1D43E ; B 6 0 793 653 ;
+C 33 ; WX 624 ; N u1D43F ; B -11 0 623 653 ;
+C 34 ; WX 945 ; N u1D440 ; B -21 0 970 653 ;
+C 35 ; WX 761 ; N u1D441 ; B -23 -15 809 653 ;
+C 36 ; WX 829 ; N u1D442 ; B 60 -20 790 666 ;
+C 37 ; WX 690 ; N u1D443 ; B -1 0 667 653 ;
+C 38 ; WX 829 ; N u1D444 ; B 60 -184 789 666 ;
+C 39 ; WX 690 ; N u1D445 ; B -16 0 648 653 ;
+C 40 ; WX 576 ; N u1D446 ; B 19 -20 564 667 ;
+C 41 ; WX 619 ; N u1D447 ; B 49 0 686 653 ;
+C 42 ; WX 824 ; N u1D448 ; B 111 -18 853 653 ;
+C 43 ; WX 707 ; N u1D449 ; B 64 -18 775 653 ;
+C 44 ; WX 959 ; N u1D44A ; B 58 -18 1023 653 ;
+C 45 ; WX 698 ; N u1D44B ; B -34 0 729 653 ;
+C 46 ; WX 635 ; N u1D44C ; B 82 0 704 653 ;
+C 47 ; WX 636 ; N u1D44D ; B -7 0 674 653 ;
+C 48 ; WX 575 ; N u1D44E ; B 15 -11 545 441 ;
+C 49 ; WX 575 ; N u1D44F ; B 25 -11 536 683 ;
+C 50 ; WX 511 ; N u1D450 ; B 29 -11 478 441 ;
+C 51 ; WX 578 ; N u1D451 ; B 13 -13 586 683 ;
+C 52 ; WX 511 ; N u1D452 ; B 30 -11 463 441 ;
+C 53 ; WX 309 ; N u1D453 ; B -164 -209 457 678 ;
+C 54 ; WX 573 ; N u1D454 ; B 13 -206 528 441 ;
+C 55 ; WX 564 ; N u1D455 ; B 21 -9 537 683 ;
+C 56 ; WX 320 ; N u1D456 ; B 54 -11 297 643 ;
+C 57 ; WX 308 ; N u1D457 ; B -138 -207 314 643 ;
+C 58 ; WX 497 ; N u1D458 ; B 16 -11 504 683 ;
+C 59 ; WX 318 ; N u1D459 ; B 45 -13 298 683 ;
+C 60 ; WX 825 ; N u1D45A ; B 14 -9 802 441 ;
+C 61 ; WX 567 ; N u1D45B ; B 16 -9 536 441 ;
+C 62 ; WX 575 ; N u1D45C ; B 26 -11 529 441 ;
+C 63 ; WX 575 ; N u1D45D ; B -80 -205 530 441 ;
+C 64 ; WX 577 ; N u1D45E ; B 25 -205 544 441 ;
+C 65 ; WX 445 ; N u1D45F ; B 51 0 459 441 ;
+C 66 ; WX 444 ; N u1D460 ; B 18 -13 404 442 ;
+C 67 ; WX 322 ; N u1D461 ; B 42 -13 330 546 ;
+C 68 ; WX 573 ; N u1D462 ; B 46 -11 543 441 ;
+C 69 ; WX 508 ; N u1D463 ; B 9 -18 477 441 ;
+C 70 ; WX 766 ; N u1D464 ; B 3 -18 732 441 ;
+C 71 ; WX 507 ; N u1D465 ; B -33 -11 499 441 ;
+C 72 ; WX 508 ; N u1D466 ; B -23 -207 475 441 ;
+C 73 ; WX 445 ; N u1D467 ; B -2 -83 423 428 ;
+C 74 ; WX 638 ; N u1D6E5 ; B -46 1 559 681 ;
+C 75 ; WX 828 ; N u1D6E9 ; B 64 -21 804 666 ;
+C 76 ; WX 706 ; N u1D6EC ; B -12 0 669 674 ;
+C 77 ; WX 697 ; N u1D6EF ; B -7 1 750 666 ;
+C 78 ; WX 776 ; N u1D6F1 ; B -31 1 867 666 ;
+C 79 ; WX 639 ; N u1D6F4 ; B -37 -3 705 662 ;
+C 80 ; WX 771 ; N u1D6F6 ; B 88 -3 793 672 ;
+C 81 ; WX 865 ; N u1D6F7 ; B 82 -3 851 662 ;
+C 82 ; WX 776 ; N u1D6F9 ; B 143 -3 890 668 ;
+C 83 ; WX 823 ; N u1D6FA ; B 14 -3 826 677 ;
+C 84 ; WX 638 ; N u1D6FB ; B 77 -3 682 677 ;
+C 85 ; WX 665 ; N u1D6FC ; B 26 -11 656 441 ;
+C 86 ; WX 575 ; N u1D6FD ; B -104 -207 574 655 ;
+C 87 ; WX 564 ; N u1D6FE ; B 3 -207 578 441 ;
+C 88 ; WX 535 ; N u1D6FF ; B 19 -18 532 657 ;
+C 89 ; WX 546 ; N u1D700 ; B 18 -11 543 441 ;
+C 90 ; WX 484 ; N u1D701 ; B 19 -207 550 645 ;
+C 91 ; WX 595 ; N u1D702 ; B 24 -207 576 441 ;
+C 92 ; WX 501 ; N u1D703 ; B 31 -11 516 654 ;
+C 93 ; WX 318 ; N u1D704 ; B 24 -11 285 441 ;
+C 94 ; WX 466 ; N u1D705 ; B 7 -11 481 439 ;
+C 95 ; WX 592 ; N u1D706 ; B 17 -11 589 655 ;
+C 96 ; WX 590 ; N u1D707 ; B -52 -207 549 435 ;
+C 97 ; WX 533 ; N u1D708 ; B 25 -11 536 441 ;
+C 98 ; WX 521 ; N u1D709 ; B -7 -207 553 654 ;
+C 99 ; WX 576 ; N u1D70B ; B 3 -11 574 441 ;
+C 100 ; WX 564 ; N u1D70C ; B -67 -207 538 441 ;
+C 101 ; WX 548 ; N u1D70D ; B 30 -174 579 441 ;
+C 102 ; WX 757 ; N u1D70E ; B 27 -11 755 441 ;
+C 103 ; WX 521 ; N u1D70F ; B 3 -11 519 441 ;
+C 104 ; WX 595 ; N u1D710 ; B 28 -11 574 441 ;
+C 105 ; WX 630 ; N u1D711 ; B 24 -207 604 441 ;
+C 106 ; WX 601 ; N u1D712 ; B -128 -207 600 441 ;
+C 107 ; WX 679 ; N u1D713 ; B 30 -207 676 624 ;
+C 108 ; WX 783 ; N u1D714 ; B 25 -11 758 441 ;
+C 109 ; WX 599 ; N u1D715 ; B 20 -19 578 692 ;
+C 110 ; WX 434 ; N u1D716 ; B 54 -11 498 441 ;
+C 111 ; WX 679 ; N u1D717 ; B 19 -11 670 678 ;
+C 112 ; WX 579 ; N u1D718 ; B 5 -11 523 462 ;
+C 113 ; WX 628 ; N u1D719 ; B 26 -207 602 630 ;
+C 114 ; WX 566 ; N u1D71A ; B -10 -207 539 441 ;
+C 115 ; WX 917 ; N u1D71B ; B 17 -11 914 441 ;
+C 116 ; WX 595 ; N uni019B.alt ; B 17 -11 594 655 ;
+C 117 ; WX 564 ; N uni210F ; B 21 -9 537 683 ;
+C 118 ; WX 564 ; N uni210F.alt ; B 21 -9 537 683 ;
+C 120 ; WX 594 ; N uni019B.ital ; B 17 -11 590 655 ;
+C 121 ; WX 311 ; N u1D6A4 ; B 52 -11 265 441 ;
+C 122 ; WX 310 ; N u1D6A5 ; B -133 -207 277 441 ;
+C 123 ; WX 444 ; N u1D463.alt ; B 45 -11 425 441 ;
+C 124 ; WX 690 ; N u1D464.alt ; B 45 -11 671 441 ;
+C 125 ; WX 470 ; N u1D708.alt ; B 31 -11 441 442 ;
+C 126 ; WX 502 ; N u1D466.alt ; B 18 -208 490 441 ;
+C 127 ; WX 580 ; N zero.oldstyle ; B 26 -14 555 509 ;
+C 128 ; WX 551 ; N one.oldstyle ; B 119 -3 438 509 ;
+C 129 ; WX 550 ; N two.oldstyle ; B 32 -3 524 509 ;
+C 130 ; WX 555 ; N three.oldstyle ; B 46 -184 482 509 ;
+C 131 ; WX 549 ; N four.oldstyle ; B 13 -170 520 509 ;
+C 132 ; WX 548 ; N five.oldstyle ; B 34 -184 482 521 ;
+C 133 ; WX 576 ; N six.oldstyle ; B 36 -14 542 684 ;
+C 134 ; WX 539 ; N seven.oldstyle ; B 21 -178 485 495 ;
+C 135 ; WX 566 ; N eight.oldstyle ; B 60 -14 508 676 ;
+C 136 ; WX 578 ; N nine.oldstyle ; B 32 -192 535 509 ;
+C 137 ; WX 677 ; N u1D6E4 ; B 10 0 713 653 ;
+C 138 ; WX 608 ; N zero ; B 60 -14 562 676 ;
+C 139 ; WX 410 ; N one ; B 51 0 362 676 ;
+C 140 ; WX 589 ; N two ; B 56 0 543 676 ;
+C 141 ; WX 523 ; N three ; B 53 -14 476 676 ;
+C 142 ; WX 581 ; N four ; B 41 0 541 676 ;
+C 143 ; WX 537 ; N five ; B 53 -14 495 688 ;
+C 144 ; WX 583 ; N six ; B 56 -14 538 684 ;
+C 145 ; WX 545 ; N seven ; B 41 -8 505 662 ;
+C 146 ; WX 536 ; N eight ; B 56 -14 489 676 ;
+C 147 ; WX 586 ; N nine ; B 58 -24 535 676 ;
+C 148 ; WX 524 ; N u1D454.alt ; B 21 -208 496 439 ;
+C 149 ; WX 288 ; N period ; B 75 -11 215 100 ;
+C 150 ; WX 277 ; N comma ; B 60 -144 219 102 ;
+C 151 ; WX 1031 ; N uni21BC ; B 66 226 965 462 ;
+C 152 ; WX 1031 ; N uni21BD ; B 66 49 965 285 ;
+C 153 ; WX 1031 ; N uni21C0 ; B 66 226 965 462 ;
+C 154 ; WX 1031 ; N uni21C1 ; B 66 49 965 285 ;
+C 155 ; WX 352 ; N uni21A9 ; B 66 226 286 489 ;
+C 156 ; WX 357 ; N uni21AA ; B 66 226 291 489 ;
+C 157 ; WX 457 ; N uni22B2 ; B 21 65 436 446 ;
+C 158 ; WX 461 ; N uni22B3 ; B 21 68 440 449 ;
+C 159 ; WX 680 ; N less ; B 66 6 614 508 ;
+C 160 ; WX 467 ; N slash ; B 66 -156 401 673 ;
+C 161 ; WX 680 ; N greater ; B 66 6 614 508 ;
+C 162 ; WX 719 ; N uni2605 ; B 47 -6 672 550 ;
+C 163 ; WX 475 ; N uni266D ; B 71 -24 426 730 ;
+C 164 ; WX 421 ; N uni266E ; B 64 -214 371 712 ;
+C 165 ; WX 458 ; N uni266F ; B 54 -197 418 762 ;
+C 166 ; WX 1031 ; N uni2323 ; B 66 98 965 342 ;
+C 167 ; WX 1031 ; N uni2322 ; B 66 155 965 399 ;
+C 168 ; WX 711 ; N uni2118 ; B 59 -196 671 479 ;
+C 169 ; WX 556 ; N uni20D7 ; B 75 529 551 751 ;
+C 170 ; WX 292 ; N uni2040 ; B 238 489 671 650 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/ntxsups-Bold.afm b/fonts/newtx/afm/ntxsups-Bold.afm
index 2ca286c28d..c95068795e 100644
--- a/fonts/newtx/afm/ntxsups-Bold.afm
+++ b/fonts/newtx/afm/ntxsups-Bold.afm
@@ -1,570 +1,571 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20150126
-Comment Creation Date: Sat Jan 31 16:17:00 2015
+Comment Generated by FontForge 20190801
+Comment Creation Date: Sun Sep 1 14:02:27 2019
FontName ntxsups-Bold
FullName ntxsups Bold
FamilyName ntxsups
Weight Bold
-Notice (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development)
+Notice (Copyright 2006, 2009 for TeX Gyre extensions by B. Jackowski and J.M. Nowacki (on behalf of TeX users groups). This work is released under the GUST Font License -- see http://tug.org/fonts/licenses/G)
+Comment UST-FONT-LICENSE.txt for details.
Comment
-Comment Copyright 2015 Michael Sharpe, LPPL.
+Comment Copyright 2015--2019 Michael Sharpe, under equivalent LPPL.
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -100
UnderlineThickness 50
-Version 1.05
+Version 1.06
EncodingScheme FontSpecific
FontBBox -37 129 710 722
CapHeight 676
-XHeight 547
-Ascender 676
+XHeight 554
Descender 147
-StartCharMetrics 98
-C 0 ; WX 250 ; N space ; B 0 0 0 0 ;
-C 1 ; WX 245 ; N exclam ; B 53 262 192 685 ;
-C 2 ; WX 404 ; N quotedbl ; B 54 508 351 688 ;
-C 3 ; WX 377 ; N numbersign ; B 3 270 375 692 ;
-C 4 ; WX 369 ; N dollar ; B 19 211 351 722 ;
-C 5 ; WX 693 ; N percent ; B 81 262 613 685 ;
-C 6 ; WX 638 ; N ampersand ; B 40 260 608 685 ;
-C 7 ; WX 227 ; N quoteright ; B 51 465 182 702 ;
-C 8 ; WX 236 ; N parenleft ; B 30 165 219 690 ;
-C 9 ; WX 236 ; N parenright ; B 18 165 207 690 ;
-C 10 ; WX 341 ; N asterisk ; B 36 411 307 688 ;
-C 11 ; WX 384 ; N plus ; B 21 270 363 577 ;
-C 12 ; WX 173 ; N comma ; B 25 162 156 398 ;
-C 13 ; WX 257 ; N hyphen ; B 29 359 228 454 ;
-C 14 ; WX 191 ; N period ; B 27 262 166 401 ;
-C 15 ; WX 206 ; N slash ; B -16 259 222 685 ;
-C 16 ; WX 379 ; N zero ; B 16 262 364 683 ;
-C 17 ; WX 349 ; N one ; B 42 270 312 683 ;
-C 18 ; WX 348 ; N two ; B 11 270 334 683 ;
-C 19 ; WX 364 ; N three ; B 10 262 343 683 ;
-C 20 ; WX 361 ; N four ; B 12 270 345 683 ;
-C 21 ; WX 338 ; N five ; B 14 265 319 676 ;
-C 22 ; WX 377 ; N six ; B 18 262 361 683 ;
-C 23 ; WX 390 ; N seven ; B 11 270 376 676 ;
-C 24 ; WX 374 ; N eight ; B 18 262 356 683 ;
-C 25 ; WX 377 ; N nine ; B 17 262 360 683 ;
-C 26 ; WX 245 ; N colon ; B 53 262 192 553 ;
-C 27 ; WX 247 ; N semicolon ; B 53 162 204 553 ;
-C 28 ; WX 391 ; N less ; B 20 263 371 607 ;
-C 29 ; WX 370 ; N equal ; B 21 324 349 519 ;
-C 30 ; WX 391 ; N greater ; B 20 263 371 599 ;
-C 31 ; WX 395 ; N question ; B 37 262 360 683 ;
-C 32 ; WX 647 ; N at ; B 70 259 577 685 ;
-C 33 ; WX 536 ; N A ; B 6 270 515 684 ;
-C 34 ; WX 498 ; N B ; B 10 270 467 676 ;
-C 35 ; WX 499 ; N C ; B 32 259 477 685 ;
-C 36 ; WX 526 ; N D ; B 9 270 506 676 ;
-C 37 ; WX 477 ; N E ; B 10 270 460 676 ;
-C 38 ; WX 441 ; N F ; B 10 270 423 676 ;
-C 39 ; WX 561 ; N G ; B 24 259 547 685 ;
-C 40 ; WX 561 ; N H ; B 14 270 549 676 ;
-C 41 ; WX 280 ; N I ; B 13 270 268 676 ;
-C 42 ; WX 372 ; N J ; B 2 205 359 680 ;
-C 43 ; WX 601 ; N K ; B 20 270 596 676 ;
-C 44 ; WX 461 ; N L ; B 12 270 442 676 ;
-C 45 ; WX 712 ; N M ; B 9 270 697 676 ;
-C 46 ; WX 557 ; N N ; B 10 259 543 676 ;
-C 47 ; WX 565 ; N O ; B 23 259 543 685 ;
-C 48 ; WX 454 ; N P ; B 10 270 447 676 ;
-C 49 ; WX 565 ; N Q ; B 23 154 543 691 ;
-C 50 ; WX 525 ; N R ; B 17 270 521 676 ;
-C 51 ; WX 403 ; N S ; B 23 259 376 686 ;
-C 52 ; WX 479 ; N T ; B 20 270 459 676 ;
-C 53 ; WX 510 ; N U ; B 10 259 496 676 ;
-C 54 ; WX 535 ; N V ; B 10 259 522 676 ;
-C 55 ; WX 722 ; N W ; B 12 261 710 676 ;
-C 56 ; WX 540 ; N X ; B 10 270 525 676 ;
-C 57 ; WX 525 ; N Y ; B 10 270 511 676 ;
-C 58 ; WX 510 ; N Z ; B 18 270 490 676 ;
-C 59 ; WX 234 ; N bracketleft ; B 44 173 214 683 ;
-C 60 ; WX 207 ; N backslash ; B -16 259 224 685 ;
-C 61 ; WX 234 ; N bracketright ; B 21 173 191 683 ;
-C 62 ; WX 446 ; N asciicircum ; B 47 446 399 686 ;
-C 63 ; WX 325 ; N underscore ; B 0 185 325 234 ;
-C 64 ; WX 227 ; N quoteleft ; B 46 465 176 688 ;
-C 65 ; WX 373 ; N a ; B 16 262 365 554 ;
-C 66 ; WX 410 ; N b ; B 11 262 388 676 ;
-C 67 ; WX 334 ; N c ; B 16 262 325 554 ;
-C 68 ; WX 409 ; N d ; B 16 262 395 676 ;
-C 69 ; WX 312 ; N e ; B 16 262 301 554 ;
-C 70 ; WX 256 ; N f ; B 9 270 293 685 ;
-C 71 ; WX 380 ; N g ; B 18 139 369 569 ;
-C 72 ; WX 408 ; N h ; B 10 270 394 676 ;
-C 73 ; WX 209 ; N i ; B 10 270 194 685 ;
-C 74 ; WX 260 ; N j ; B -37 141 215 702 ;
-C 75 ; WX 437 ; N k ; B 14 270 429 676 ;
-C 76 ; WX 204 ; N l ; B 10 270 189 676 ;
-C 77 ; WX 613 ; N m ; B 10 270 601 554 ;
-C 78 ; WX 408 ; N n ; B 14 270 398 554 ;
-C 79 ; WX 375 ; N o ; B 16 262 360 554 ;
-C 80 ; WX 409 ; N p ; B 12 147 388 554 ;
-C 81 ; WX 410 ; N q ; B 22 147 397 554 ;
-C 82 ; WX 312 ; N r ; B 19 270 306 554 ;
-C 83 ; WX 287 ; N s ; B 16 262 269 554 ;
-C 84 ; WX 240 ; N t ; B 13 263 240 652 ;
-C 85 ; WX 408 ; N u ; B 10 262 396 547 ;
-C 86 ; WX 376 ; N v ; B 14 262 367 547 ;
-C 87 ; WX 530 ; N w ; B 15 262 520 547 ;
-C 88 ; WX 370 ; N x ; B 8 270 360 547 ;
-C 89 ; WX 385 ; N y ; B 10 140 372 550 ;
-C 90 ; WX 366 ; N z ; B 14 270 350 547 ;
-C 91 ; WX 289 ; N braceleft ; B 14 162 254 691 ;
-C 92 ; WX 157 ; N bar ; B 43 259 115 685 ;
-C 93 ; WX 274 ; N braceright ; B 35 162 260 691 ;
-C 94 ; WX 337 ; N asciitilde ; B 19 350 319 478 ;
-C 95 ; WX 264 ; N exclamdown ; B 53 129 212 589 ;
-C 96 ; WX 312 ; N eacute ; B 16 262 301 704 ;
-C 97 ; WX 312 ; N egrave ; B 16 262 301 704 ;
+StartCharMetrics 99
+C 0 ; WX 0 ; N .notdef ; B 0 0 0 0 ;
+C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 245 ; N exclam.sup ; B 53 262 192 685 ;
+C 34 ; WX 404 ; N quotedbl.sup ; B 54 508 351 688 ;
+C 35 ; WX 377 ; N numbersign.sup ; B 3 270 375 692 ;
+C 36 ; WX 369 ; N dollar.sup ; B 19 211 351 722 ;
+C 37 ; WX 693 ; N percent.sup ; B 81 262 613 685 ;
+C 38 ; WX 638 ; N ampersand.sup ; B 40 260 608 685 ;
+C 39 ; WX 227 ; N quoteright.sup ; B 51 465 182 702 ;
+C 40 ; WX 236 ; N parenleft.sup ; B 30 165 219 690 ;
+C 41 ; WX 236 ; N parenright.sup ; B 18 165 207 690 ;
+C 42 ; WX 341 ; N asterisk.sup ; B 36 411 307 688 ;
+C 43 ; WX 384 ; N plus.sup ; B 21 270 363 577 ;
+C 44 ; WX 173 ; N comma.sup ; B 25 162 156 398 ;
+C 45 ; WX 257 ; N hyphen.sup ; B 29 359 228 454 ;
+C 46 ; WX 191 ; N period.sup ; B 27 262 166 401 ;
+C 47 ; WX 206 ; N slash.sup ; B -16 259 222 685 ;
+C 48 ; WX 379 ; N zero.sup ; B 16 262 364 683 ;
+C 49 ; WX 349 ; N one.sup ; B 42 270 312 683 ;
+C 50 ; WX 348 ; N two.sup ; B 11 270 334 683 ;
+C 51 ; WX 364 ; N three.sup ; B 10 262 343 683 ;
+C 52 ; WX 361 ; N four.sup ; B 12 270 345 683 ;
+C 53 ; WX 338 ; N five.sup ; B 14 265 319 676 ;
+C 54 ; WX 377 ; N six.sup ; B 18 262 361 683 ;
+C 55 ; WX 390 ; N seven.sup ; B 11 270 376 676 ;
+C 56 ; WX 374 ; N eight.sup ; B 18 262 356 683 ;
+C 57 ; WX 377 ; N nine.sup ; B 17 262 360 683 ;
+C 58 ; WX 245 ; N colon.sup ; B 53 262 192 553 ;
+C 59 ; WX 247 ; N semicolon.sup ; B 53 162 204 553 ;
+C 60 ; WX 391 ; N less.sup ; B 20 263 371 607 ;
+C 61 ; WX 370 ; N equal.sup ; B 21 324 349 519 ;
+C 62 ; WX 391 ; N greater.sup ; B 20 263 371 599 ;
+C 63 ; WX 395 ; N question.sup ; B 37 262 360 683 ;
+C 64 ; WX 647 ; N at.sup ; B 70 259 577 685 ;
+C 65 ; WX 536 ; N A.sup ; B 6 270 515 684 ;
+C 66 ; WX 498 ; N B.sup ; B 10 270 467 676 ;
+C 67 ; WX 499 ; N C.sup ; B 32 259 477 685 ;
+C 68 ; WX 526 ; N D.sup ; B 9 270 506 676 ;
+C 69 ; WX 477 ; N E.sup ; B 10 270 460 676 ;
+C 70 ; WX 441 ; N F.sup ; B 10 270 423 676 ;
+C 71 ; WX 561 ; N G.sup ; B 24 259 547 685 ;
+C 72 ; WX 561 ; N H.sup ; B 14 270 549 676 ;
+C 73 ; WX 280 ; N I.sup ; B 13 270 268 676 ;
+C 74 ; WX 372 ; N J.sup ; B 2 205 359 680 ;
+C 75 ; WX 601 ; N K.sup ; B 20 270 596 676 ;
+C 76 ; WX 461 ; N L.sup ; B 12 270 442 676 ;
+C 77 ; WX 712 ; N M.sup ; B 9 270 697 676 ;
+C 78 ; WX 557 ; N N.sup ; B 10 259 543 676 ;
+C 79 ; WX 565 ; N O.sup ; B 23 259 543 685 ;
+C 80 ; WX 454 ; N P.sup ; B 10 270 447 676 ;
+C 81 ; WX 565 ; N Q.sup ; B 23 154 543 691 ;
+C 82 ; WX 525 ; N R.sup ; B 17 270 521 676 ;
+C 83 ; WX 403 ; N S.sup ; B 23 259 376 686 ;
+C 84 ; WX 479 ; N T.sup ; B 20 270 459 676 ;
+C 85 ; WX 510 ; N U.sup ; B 10 259 496 676 ;
+C 86 ; WX 535 ; N V.sup ; B 10 259 522 676 ;
+C 87 ; WX 722 ; N W.sup ; B 12 261 710 676 ;
+C 88 ; WX 540 ; N X.sup ; B 10 270 525 676 ;
+C 89 ; WX 525 ; N Y.sup ; B 10 270 511 676 ;
+C 90 ; WX 510 ; N Z.sup ; B 18 270 490 676 ;
+C 91 ; WX 234 ; N bracketleft.sup ; B 44 173 214 683 ;
+C 92 ; WX 207 ; N backslash.sup ; B -16 259 224 685 ;
+C 93 ; WX 234 ; N bracketright.sup ; B 21 173 191 683 ;
+C 94 ; WX 446 ; N asciicircum.sup ; B 47 446 399 686 ;
+C 95 ; WX 325 ; N underscore.sup ; B 0 185 325 234 ;
+C 96 ; WX 227 ; N quoteleft.sup ; B 46 465 176 688 ;
+C 97 ; WX 373 ; N a.sup ; B 16 262 365 554 ;
+C 98 ; WX 410 ; N b.sup ; B 11 262 388 676 ;
+C 99 ; WX 334 ; N c.sup ; B 16 262 325 554 ;
+C 100 ; WX 409 ; N d.sup ; B 16 262 395 676 ;
+C 101 ; WX 312 ; N e.sup ; B 16 262 301 554 ;
+C 102 ; WX 256 ; N f.sup ; B 9 270 293 685 ;
+C 103 ; WX 380 ; N g.sup ; B 18 139 369 569 ;
+C 104 ; WX 408 ; N h.sup ; B 10 270 394 676 ;
+C 105 ; WX 209 ; N i.sup ; B 10 270 194 685 ;
+C 106 ; WX 260 ; N j.sup ; B -37 141 215 702 ;
+C 107 ; WX 437 ; N k.sup ; B 14 270 429 676 ;
+C 108 ; WX 204 ; N l.sup ; B 10 270 189 676 ;
+C 109 ; WX 613 ; N m.sup ; B 10 270 601 554 ;
+C 110 ; WX 408 ; N n.sup ; B 14 270 398 554 ;
+C 111 ; WX 375 ; N o.sup ; B 16 262 360 554 ;
+C 112 ; WX 409 ; N p.sup ; B 12 147 388 554 ;
+C 113 ; WX 410 ; N q.sup ; B 22 147 397 554 ;
+C 114 ; WX 312 ; N r.sup ; B 19 270 306 554 ;
+C 115 ; WX 287 ; N s.sup ; B 16 262 269 554 ;
+C 116 ; WX 240 ; N t.sup ; B 13 263 240 652 ;
+C 117 ; WX 408 ; N u.sup ; B 10 262 396 547 ;
+C 118 ; WX 376 ; N v.sup ; B 14 262 367 547 ;
+C 119 ; WX 530 ; N w.sup ; B 15 262 520 547 ;
+C 120 ; WX 370 ; N x.sup ; B 8 270 360 547 ;
+C 121 ; WX 385 ; N y.sup ; B 10 140 372 550 ;
+C 122 ; WX 366 ; N z.sup ; B 14 270 350 547 ;
+C 123 ; WX 289 ; N braceleft.sup ; B 14 162 254 691 ;
+C 124 ; WX 157 ; N bar.sup ; B 43 259 115 685 ;
+C 125 ; WX 274 ; N braceright.sup ; B 35 162 260 691 ;
+C 126 ; WX 337 ; N asciitilde.sup ; B 19 350 319 478 ;
+C 161 ; WX 264 ; N exclamdown.sup ; B 53 129 212 589 ;
+C 232 ; WX 312 ; N egrave.sup ; B 16 262 301 704 ;
+C 233 ; WX 312 ; N eacute.sup ; B 16 262 301 704 ;
EndCharMetrics
StartKernData
StartKernPairs 444
-KPX quoteright y -22
-KPX quoteright w -23
-KPX quoteright v -25
-KPX quoteright t -19
-KPX quoteright s -17
-KPX quoteright r -26
-KPX quoteright period -35
-KPX quoteright o -34
-KPX quoteright d -31
-KPX quoteright comma -34
-KPX quoteright A -91
-KPX comma quoteright -23
-KPX comma one -12
-KPX hyphen Y -83
-KPX hyphen W -54
-KPX hyphen V -72
-KPX hyphen T -74
-KPX hyphen A -18
-KPX period quoteright -27
-KPX period one -21
-KPX zero seven 7
-KPX zero one -31
-KPX zero four 11
-KPX one zero -35
-KPX one two -2
-KPX one three -10
-KPX one six -47
-KPX one seven -56
-KPX one period -17
-KPX one one -27
-KPX one nine -9
-KPX one four -56
-KPX one five -16
-KPX one eight -34
-KPX one comma -16
-KPX two seven -7
-KPX two one -29
-KPX two four 14
-KPX three seven -15
-KPX three one -33
-KPX three four 9
-KPX four seven -16
-KPX four one -35
-KPX four four 13
-KPX five seven -9
-KPX five one -28
-KPX five four 1
-KPX six seven -7
-KPX six one -43
-KPX six four 13
-KPX seven two -21
-KPX seven three -20
-KPX seven six -37
-KPX seven seven -6
-KPX seven period -58
-KPX seven one -25
-KPX seven four -54
-KPX seven five -34
-KPX seven eight -18
-KPX seven comma -57
-KPX seven colon -64
-KPX eight one -19
-KPX eight four 11
-KPX nine seven 10
-KPX nine one -26
-KPX nine four 2
-KPX A y -83
-KPX A w -79
-KPX A v -84
-KPX A u -30
-KPX A t -27
-KPX A quoteright -108
-KPX A q -38
-KPX A o -37
-KPX A hyphen -30
-KPX A g -7
-KPX A e -32
-KPX A d -28
-KPX A comma 1
-KPX A c -35
-KPX A b -22
-KPX A a -5
-KPX A Y -74
-KPX A W -116
-KPX A V -130
-KPX A U -66
-KPX A T -59
-KPX A Q -68
-KPX A O -68
-KPX A G -68
-KPX A C -73
-KPX B Y -44
-KPX B W -46
-KPX B V -45
-KPX B O -12
-KPX B A -34
-KPX C O -14
-KPX C K -6
-KPX C H -2
-KPX C A -25
-KPX D Y -59
-KPX D X -51
-KPX D W -50
-KPX D V -60
-KPX D T -7
-KPX D J -40
-KPX D A -55
-KPX F u -10
-KPX F r -7
-KPX F period -60
-KPX F o -54
-KPX F j -26
-KPX F i -1
-KPX F hyphen -34
-KPX F e -51
-KPX F comma -59
-KPX F a -50
-KPX F O -7
-KPX F J -42
-KPX F A -79
-KPX G Y -33
-KPX G W -35
-KPX G V -33
-KPX G T -41
-KPX G A -27
-KPX J A -30
-KPX K y -83
-KPX K u -18
-KPX K o -25
-KPX K hyphen -47
-KPX K e -20
-KPX K a 6
-KPX K T -2
-KPX K S 13
-KPX K O -56
-KPX K G -56
-KPX K C -61
-KPX L y -49
-KPX L u -11
-KPX L quoteright -69
-KPX L hyphen 24
-KPX L Y -89
-KPX L W -87
-KPX L V -106
-KPX L U -29
-KPX L T -74
-KPX L S 2
-KPX L O -5
-KPX L G -5
-KPX L C -11
-KPX L A -1
-KPX N u -17
-KPX N o -16
-KPX N e -13
-KPX N comma 1
-KPX N a -16
-KPX N O -15
-KPX N G -16
-KPX N C -22
-KPX N A -19
-KPX O Y -59
-KPX O X -51
-KPX O W -54
-KPX O V -60
-KPX O T -9
-KPX O A -55
-KPX P period -86
-KPX P o -33
-KPX P hyphen -39
-KPX P e -29
-KPX P comma -85
-KPX P a -19
-KPX P J -68
-KPX P A -81
-KPX R y -27
-KPX R u -17
-KPX R o -24
-KPX R hyphen -30
-KPX R e -19
-KPX R a 7
-KPX R Y -53
-KPX R W -55
-KPX R V -53
-KPX R U -37
-KPX R T -26
-KPX R O -29
-KPX R G -30
-KPX R C -36
-KPX S t -10
-KPX S Y -8
-KPX S W -10
-KPX S V -9
-KPX S T -16
-KPX S A -24
-KPX T y -104
-KPX T w -107
-KPX T v -106
-KPX T u -89
-KPX T semicolon -85
-KPX T s -59
-KPX T r -61
-KPX T period -64
-KPX T o -88
-KPX T j -40
-KPX T i -16
-KPX T hyphen -73
-KPX T g -68
-KPX T e -85
-KPX T comma -63
-KPX T colon -85
-KPX T c -88
-KPX T a -65
-KPX T Y 11
-KPX T W 9
-KPX T V 11
-KPX T S -2
-KPX T O -9
-KPX T J -43
-KPX T G -11
-KPX T C -17
-KPX T A -46
-KPX U r -29
-KPX U period -18
-KPX U p -28
-KPX U n -25
-KPX U m -23
-KPX U comma -17
-KPX U A -54
-KPX V y -56
-KPX V u -58
-KPX V semicolon -94
-KPX V r -60
-KPX V period -95
-KPX V o -89
-KPX V i -13
-KPX V hyphen -68
-KPX V g -86
-KPX V e -86
-KPX V comma -94
-KPX V colon -94
-KPX V a -87
-KPX V T 8
-KPX V S -25
-KPX V O -63
-KPX V G -64
-KPX V C -70
-KPX V A -113
-KPX W y -44
-KPX W u -45
-KPX W semicolon -80
-KPX W r -49
-KPX W period -73
-KPX W o -70
-KPX W i -12
-KPX W hyphen -49
-KPX W g -70
-KPX W e -67
-KPX W comma -72
-KPX W colon -81
-KPX W a -70
-KPX W T 9
-KPX W S -24
-KPX W O -51
-KPX W G -52
-KPX W C -58
-KPX W A -98
-KPX X y -90
-KPX X u -25
-KPX X o -32
-KPX X hyphen -43
-KPX X e -27
-KPX X Q -57
-KPX X O -56
-KPX X C -63
-KPX Y v -78
-KPX Y u -76
-KPX Y semicolon -103
-KPX Y period -81
-KPX Y p -72
-KPX Y o -96
-KPX Y i -14
-KPX Y hyphen -87
-KPX Y g -86
-KPX Y e -93
-KPX Y comma -80
-KPX Y colon -103
-KPX Y a -83
-KPX Y T 7
-KPX Y S -26
-KPX Y O -64
-KPX Y G -65
-KPX Y C -71
-KPX Y A -64
-KPX Z y -44
-KPX Z v -45
-KPX quoteleft Y -17
-KPX quoteleft W -19
-KPX quoteleft V -17
-KPX quoteleft T -22
-KPX quoteleft A -92
-KPX a y -44
-KPX a w -40
-KPX a v -39
-KPX a quoteright -34
-KPX a j -39
-KPX b y -42
-KPX b w -40
-KPX b v -39
-KPX c k -18
-KPX c h -17
-KPX e y -31
-KPX e x -19
-KPX e w -30
-KPX e v -29
-KPX e t -10
-KPX e quoteright -19
-KPX f t -3
-KPX f s -8
-KPX f quoteright 18
-KPX f o -32
-KPX f l 33
-KPX f j -1
-KPX f i 22
-KPX f f 12
-KPX f e -29
-KPX f a -17
-KPX g r 1
-KPX g e -20
-KPX g a -15
-KPX h y -34
-KPX h quoteright -30
-KPX i j -36
-KPX i T -18
-KPX k u -5
-KPX k s 5
-KPX k o -38
-KPX k hyphen -47
-KPX k g -4
-KPX k e -33
-KPX k a -3
-KPX l y -19
-KPX l v -22
-KPX m y -33
-KPX m w -33
-KPX m v -32
-KPX m p -16
-KPX n y -32
-KPX n w -32
-KPX n v -31
-KPX n quoteright -28
-KPX n p -14
-KPX n T -56
-KPX o y -42
-KPX o x -29
-KPX o w -38
-KPX o v -42
-KPX o t -10
-KPX o quoteright -27
-KPX o T -88
-KPX p y -34
-KPX p t -11
-KPX q u -15
-KPX q c -13
-KPX r z -1
-KPX r y 9
-KPX r x 11
-KPX r w 7
-KPX r v 8
-KPX r u 9
-KPX r t 9
-KPX r semicolon -16
-KPX r quoteright -8
-KPX r q -15
-KPX r period -68
-KPX r p 4
-KPX r o -14
-KPX r n 4
-KPX r m 6
-KPX r l -14
-KPX r k -15
-KPX r j -12
-KPX r i 6
-KPX r hyphen -18
-KPX r h -15
-KPX r g -5
-KPX r f 11
-KPX r e -11
-KPX r d -13
-KPX r comma -67
-KPX r colon -16
-KPX r c -15
-KPX r a -6
-KPX s t -7
-KPX s quoteright -17
-KPX t semicolon -12
-KPX t quoteright -31
-KPX t o -4
-KPX t h -4
-KPX t e -1
-KPX t colon -12
-KPX t a 11
-KPX t S 11
-KPX u quoteright -25
-KPX v semicolon -23
-KPX v s -16
-KPX v period -57
-KPX v o -40
-KPX v l -16
-KPX v hyphen -27
-KPX v g -22
-KPX v e -35
-KPX v comma -56
-KPX v colon -23
-KPX v c -40
-KPX v a -23
-KPX w semicolon -23
-KPX w s -16
-KPX w period -51
-KPX w o -36
-KPX w l -16
-KPX w hyphen -23
-KPX w g -22
-KPX w e -33
-KPX w comma -50
-KPX w colon -23
-KPX w c -36
-KPX w a -23
-KPX x q -32
-KPX x o -30
-KPX x e -27
-KPX x c -30
-KPX x a -2
-KPX y semicolon -28
-KPX y s -24
-KPX y period -57
-KPX y o -42
-KPX y l -19
-KPX y hyphen -29
-KPX y g -31
-KPX y e -40
-KPX y comma -56
-KPX y colon -28
-KPX y c -42
-KPX y a -32
+KPX quoteright.sup period.sup -35
+KPX quoteright.sup comma.sup -34
+KPX quoteright.sup y.sup -22
+KPX quoteright.sup w.sup -23
+KPX quoteright.sup v.sup -25
+KPX quoteright.sup t.sup -19
+KPX quoteright.sup s.sup -17
+KPX quoteright.sup r.sup -26
+KPX quoteright.sup o.sup -34
+KPX quoteright.sup d.sup -31
+KPX quoteright.sup A.sup -91
+KPX comma.sup quoteright.sup -23
+KPX comma.sup one.sup -12
+KPX hyphen.sup Y.sup -83
+KPX hyphen.sup W.sup -54
+KPX hyphen.sup V.sup -72
+KPX hyphen.sup T.sup -74
+KPX hyphen.sup A.sup -18
+KPX period.sup quoteright.sup -27
+KPX period.sup one.sup -21
+KPX zero.sup seven.sup 7
+KPX zero.sup one.sup -31
+KPX zero.sup four.sup 11
+KPX one.sup zero.sup -35
+KPX one.sup two.sup -2
+KPX one.sup three.sup -10
+KPX one.sup six.sup -47
+KPX one.sup seven.sup -56
+KPX one.sup period.sup -17
+KPX one.sup one.sup -27
+KPX one.sup nine.sup -9
+KPX one.sup four.sup -56
+KPX one.sup five.sup -16
+KPX one.sup eight.sup -34
+KPX one.sup comma.sup -16
+KPX two.sup seven.sup -7
+KPX two.sup one.sup -29
+KPX two.sup four.sup 14
+KPX three.sup seven.sup -15
+KPX three.sup one.sup -33
+KPX three.sup four.sup 9
+KPX four.sup seven.sup -16
+KPX four.sup one.sup -35
+KPX four.sup four.sup 13
+KPX five.sup seven.sup -9
+KPX five.sup one.sup -28
+KPX five.sup four.sup 1
+KPX six.sup seven.sup -7
+KPX six.sup one.sup -43
+KPX six.sup four.sup 13
+KPX seven.sup two.sup -21
+KPX seven.sup three.sup -20
+KPX seven.sup six.sup -37
+KPX seven.sup seven.sup -6
+KPX seven.sup period.sup -58
+KPX seven.sup one.sup -25
+KPX seven.sup four.sup -54
+KPX seven.sup five.sup -34
+KPX seven.sup eight.sup -18
+KPX seven.sup comma.sup -57
+KPX seven.sup colon.sup -64
+KPX eight.sup one.sup -19
+KPX eight.sup four.sup 11
+KPX nine.sup seven.sup 10
+KPX nine.sup one.sup -26
+KPX nine.sup four.sup 2
+KPX A.sup y.sup -83
+KPX A.sup w.sup -79
+KPX A.sup v.sup -84
+KPX A.sup u.sup -30
+KPX A.sup t.sup -27
+KPX A.sup quoteright.sup -108
+KPX A.sup q.sup -38
+KPX A.sup o.sup -37
+KPX A.sup hyphen.sup -30
+KPX A.sup g.sup -7
+KPX A.sup e.sup -32
+KPX A.sup d.sup -28
+KPX A.sup comma.sup 1
+KPX A.sup c.sup -35
+KPX A.sup b.sup -22
+KPX A.sup a.sup -5
+KPX A.sup Y.sup -74
+KPX A.sup W.sup -116
+KPX A.sup V.sup -130
+KPX A.sup U.sup -66
+KPX A.sup T.sup -59
+KPX A.sup Q.sup -68
+KPX A.sup O.sup -68
+KPX A.sup G.sup -68
+KPX A.sup C.sup -73
+KPX B.sup Y.sup -44
+KPX B.sup W.sup -46
+KPX B.sup V.sup -45
+KPX B.sup O.sup -12
+KPX B.sup A.sup -34
+KPX C.sup O.sup -14
+KPX C.sup K.sup -6
+KPX C.sup H.sup -2
+KPX C.sup A.sup -25
+KPX D.sup Y.sup -59
+KPX D.sup X.sup -51
+KPX D.sup W.sup -50
+KPX D.sup V.sup -60
+KPX D.sup T.sup -7
+KPX D.sup J.sup -40
+KPX D.sup A.sup -55
+KPX F.sup u.sup -10
+KPX F.sup r.sup -7
+KPX F.sup period.sup -60
+KPX F.sup o.sup -54
+KPX F.sup j.sup -26
+KPX F.sup i.sup -1
+KPX F.sup hyphen.sup -34
+KPX F.sup e.sup -51
+KPX F.sup comma.sup -59
+KPX F.sup a.sup -50
+KPX F.sup O.sup -7
+KPX F.sup J.sup -42
+KPX F.sup A.sup -79
+KPX G.sup Y.sup -33
+KPX G.sup W.sup -35
+KPX G.sup V.sup -33
+KPX G.sup T.sup -41
+KPX G.sup A.sup -27
+KPX J.sup A.sup -30
+KPX K.sup y.sup -83
+KPX K.sup u.sup -18
+KPX K.sup o.sup -25
+KPX K.sup hyphen.sup -47
+KPX K.sup e.sup -20
+KPX K.sup a.sup 6
+KPX K.sup T.sup -2
+KPX K.sup S.sup 13
+KPX K.sup O.sup -56
+KPX K.sup G.sup -56
+KPX K.sup C.sup -61
+KPX L.sup y.sup -49
+KPX L.sup u.sup -11
+KPX L.sup quoteright.sup -69
+KPX L.sup hyphen.sup 24
+KPX L.sup Y.sup -89
+KPX L.sup W.sup -87
+KPX L.sup V.sup -106
+KPX L.sup U.sup -29
+KPX L.sup T.sup -74
+KPX L.sup S.sup 2
+KPX L.sup O.sup -5
+KPX L.sup G.sup -5
+KPX L.sup C.sup -11
+KPX L.sup A.sup -1
+KPX N.sup u.sup -17
+KPX N.sup o.sup -16
+KPX N.sup e.sup -13
+KPX N.sup comma.sup 1
+KPX N.sup a.sup -16
+KPX N.sup O.sup -15
+KPX N.sup G.sup -16
+KPX N.sup C.sup -22
+KPX N.sup A.sup -19
+KPX O.sup Y.sup -59
+KPX O.sup X.sup -51
+KPX O.sup W.sup -54
+KPX O.sup V.sup -60
+KPX O.sup T.sup -9
+KPX O.sup A.sup -55
+KPX P.sup period.sup -86
+KPX P.sup o.sup -33
+KPX P.sup hyphen.sup -39
+KPX P.sup e.sup -29
+KPX P.sup comma.sup -85
+KPX P.sup a.sup -19
+KPX P.sup J.sup -68
+KPX P.sup A.sup -81
+KPX R.sup y.sup -27
+KPX R.sup u.sup -17
+KPX R.sup o.sup -24
+KPX R.sup hyphen.sup -30
+KPX R.sup e.sup -19
+KPX R.sup a.sup 7
+KPX R.sup Y.sup -53
+KPX R.sup W.sup -55
+KPX R.sup V.sup -53
+KPX R.sup U.sup -37
+KPX R.sup T.sup -26
+KPX R.sup O.sup -29
+KPX R.sup G.sup -30
+KPX R.sup C.sup -36
+KPX S.sup t.sup -10
+KPX S.sup Y.sup -8
+KPX S.sup W.sup -10
+KPX S.sup V.sup -9
+KPX S.sup T.sup -16
+KPX S.sup A.sup -24
+KPX T.sup y.sup -104
+KPX T.sup w.sup -107
+KPX T.sup v.sup -106
+KPX T.sup u.sup -89
+KPX T.sup semicolon.sup -85
+KPX T.sup s.sup -59
+KPX T.sup r.sup -61
+KPX T.sup period.sup -64
+KPX T.sup o.sup -88
+KPX T.sup j.sup -40
+KPX T.sup i.sup -16
+KPX T.sup hyphen.sup -73
+KPX T.sup g.sup -68
+KPX T.sup e.sup -85
+KPX T.sup comma.sup -63
+KPX T.sup colon.sup -85
+KPX T.sup c.sup -88
+KPX T.sup a.sup -65
+KPX T.sup Y.sup 11
+KPX T.sup W.sup 9
+KPX T.sup V.sup 11
+KPX T.sup S.sup -2
+KPX T.sup O.sup -9
+KPX T.sup J.sup -43
+KPX T.sup G.sup -11
+KPX T.sup C.sup -17
+KPX T.sup A.sup -46
+KPX U.sup r.sup -29
+KPX U.sup period.sup -18
+KPX U.sup p.sup -28
+KPX U.sup n.sup -25
+KPX U.sup m.sup -23
+KPX U.sup comma.sup -17
+KPX U.sup A.sup -54
+KPX V.sup y.sup -56
+KPX V.sup u.sup -58
+KPX V.sup semicolon.sup -94
+KPX V.sup r.sup -60
+KPX V.sup period.sup -95
+KPX V.sup o.sup -89
+KPX V.sup i.sup -13
+KPX V.sup hyphen.sup -68
+KPX V.sup g.sup -86
+KPX V.sup e.sup -86
+KPX V.sup comma.sup -94
+KPX V.sup colon.sup -94
+KPX V.sup a.sup -87
+KPX V.sup T.sup 8
+KPX V.sup S.sup -25
+KPX V.sup O.sup -63
+KPX V.sup G.sup -64
+KPX V.sup C.sup -70
+KPX V.sup A.sup -113
+KPX W.sup y.sup -44
+KPX W.sup u.sup -45
+KPX W.sup semicolon.sup -80
+KPX W.sup r.sup -49
+KPX W.sup period.sup -73
+KPX W.sup o.sup -70
+KPX W.sup i.sup -12
+KPX W.sup hyphen.sup -49
+KPX W.sup g.sup -70
+KPX W.sup e.sup -67
+KPX W.sup comma.sup -72
+KPX W.sup colon.sup -81
+KPX W.sup a.sup -70
+KPX W.sup T.sup 9
+KPX W.sup S.sup -24
+KPX W.sup O.sup -51
+KPX W.sup G.sup -52
+KPX W.sup C.sup -58
+KPX W.sup A.sup -98
+KPX X.sup y.sup -90
+KPX X.sup u.sup -25
+KPX X.sup o.sup -32
+KPX X.sup hyphen.sup -43
+KPX X.sup e.sup -27
+KPX X.sup Q.sup -57
+KPX X.sup O.sup -56
+KPX X.sup C.sup -63
+KPX Y.sup v.sup -78
+KPX Y.sup u.sup -76
+KPX Y.sup semicolon.sup -103
+KPX Y.sup period.sup -81
+KPX Y.sup p.sup -72
+KPX Y.sup o.sup -96
+KPX Y.sup i.sup -14
+KPX Y.sup hyphen.sup -87
+KPX Y.sup g.sup -86
+KPX Y.sup e.sup -93
+KPX Y.sup comma.sup -80
+KPX Y.sup colon.sup -103
+KPX Y.sup a.sup -83
+KPX Y.sup T.sup 7
+KPX Y.sup S.sup -26
+KPX Y.sup O.sup -64
+KPX Y.sup G.sup -65
+KPX Y.sup C.sup -71
+KPX Y.sup A.sup -64
+KPX Z.sup y.sup -44
+KPX Z.sup v.sup -45
+KPX quoteleft.sup Y.sup -17
+KPX quoteleft.sup W.sup -19
+KPX quoteleft.sup V.sup -17
+KPX quoteleft.sup T.sup -22
+KPX quoteleft.sup A.sup -92
+KPX a.sup y.sup -44
+KPX a.sup w.sup -40
+KPX a.sup v.sup -39
+KPX a.sup quoteright.sup -34
+KPX a.sup j.sup -39
+KPX b.sup y.sup -42
+KPX b.sup w.sup -40
+KPX b.sup v.sup -39
+KPX c.sup k.sup -18
+KPX c.sup h.sup -17
+KPX e.sup y.sup -31
+KPX e.sup x.sup -19
+KPX e.sup w.sup -30
+KPX e.sup v.sup -29
+KPX e.sup t.sup -10
+KPX e.sup quoteright.sup -19
+KPX f.sup t.sup -3
+KPX f.sup s.sup -8
+KPX f.sup quoteright.sup 18
+KPX f.sup o.sup -32
+KPX f.sup l.sup 33
+KPX f.sup j.sup -1
+KPX f.sup i.sup 22
+KPX f.sup f.sup 12
+KPX f.sup e.sup -29
+KPX f.sup a.sup -17
+KPX g.sup r.sup 1
+KPX g.sup e.sup -20
+KPX g.sup a.sup -15
+KPX h.sup y.sup -34
+KPX h.sup quoteright.sup -30
+KPX i.sup j.sup -36
+KPX i.sup T.sup -18
+KPX k.sup u.sup -5
+KPX k.sup s.sup 5
+KPX k.sup o.sup -38
+KPX k.sup hyphen.sup -47
+KPX k.sup g.sup -4
+KPX k.sup e.sup -33
+KPX k.sup a.sup -3
+KPX l.sup y.sup -19
+KPX l.sup v.sup -22
+KPX m.sup y.sup -33
+KPX m.sup w.sup -33
+KPX m.sup v.sup -32
+KPX m.sup p.sup -16
+KPX n.sup y.sup -32
+KPX n.sup w.sup -32
+KPX n.sup v.sup -31
+KPX n.sup quoteright.sup -28
+KPX n.sup p.sup -14
+KPX n.sup T.sup -56
+KPX o.sup y.sup -42
+KPX o.sup x.sup -29
+KPX o.sup w.sup -38
+KPX o.sup v.sup -42
+KPX o.sup t.sup -10
+KPX o.sup quoteright.sup -27
+KPX o.sup T.sup -88
+KPX p.sup y.sup -34
+KPX p.sup t.sup -11
+KPX q.sup u.sup -15
+KPX q.sup c.sup -13
+KPX r.sup z.sup -1
+KPX r.sup y.sup 9
+KPX r.sup x.sup 11
+KPX r.sup w.sup 7
+KPX r.sup v.sup 8
+KPX r.sup u.sup 9
+KPX r.sup t.sup 9
+KPX r.sup semicolon.sup -16
+KPX r.sup quoteright.sup -8
+KPX r.sup q.sup -15
+KPX r.sup period.sup -68
+KPX r.sup p.sup 4
+KPX r.sup o.sup -14
+KPX r.sup n.sup 4
+KPX r.sup m.sup 6
+KPX r.sup l.sup -14
+KPX r.sup k.sup -15
+KPX r.sup j.sup -12
+KPX r.sup i.sup 6
+KPX r.sup hyphen.sup -18
+KPX r.sup h.sup -15
+KPX r.sup g.sup -5
+KPX r.sup f.sup 11
+KPX r.sup e.sup -11
+KPX r.sup d.sup -13
+KPX r.sup comma.sup -67
+KPX r.sup colon.sup -16
+KPX r.sup c.sup -15
+KPX r.sup a.sup -6
+KPX s.sup t.sup -7
+KPX s.sup quoteright.sup -17
+KPX t.sup semicolon.sup -12
+KPX t.sup quoteright.sup -31
+KPX t.sup o.sup -4
+KPX t.sup h.sup -4
+KPX t.sup e.sup -1
+KPX t.sup colon.sup -12
+KPX t.sup a.sup 11
+KPX t.sup S.sup 11
+KPX u.sup quoteright.sup -25
+KPX v.sup semicolon.sup -23
+KPX v.sup s.sup -16
+KPX v.sup period.sup -57
+KPX v.sup o.sup -40
+KPX v.sup l.sup -16
+KPX v.sup hyphen.sup -27
+KPX v.sup g.sup -22
+KPX v.sup e.sup -35
+KPX v.sup comma.sup -56
+KPX v.sup colon.sup -23
+KPX v.sup c.sup -40
+KPX v.sup a.sup -23
+KPX w.sup semicolon.sup -23
+KPX w.sup s.sup -16
+KPX w.sup period.sup -51
+KPX w.sup o.sup -36
+KPX w.sup l.sup -16
+KPX w.sup hyphen.sup -23
+KPX w.sup g.sup -22
+KPX w.sup e.sup -33
+KPX w.sup comma.sup -50
+KPX w.sup colon.sup -23
+KPX w.sup c.sup -36
+KPX w.sup a.sup -23
+KPX x.sup q.sup -32
+KPX x.sup o.sup -30
+KPX x.sup e.sup -27
+KPX x.sup c.sup -30
+KPX x.sup a.sup -2
+KPX y.sup semicolon.sup -28
+KPX y.sup s.sup -24
+KPX y.sup period.sup -57
+KPX y.sup o.sup -42
+KPX y.sup l.sup -19
+KPX y.sup hyphen.sup -29
+KPX y.sup g.sup -31
+KPX y.sup e.sup -40
+KPX y.sup comma.sup -56
+KPX y.sup colon.sup -28
+KPX y.sup c.sup -42
+KPX y.sup a.sup -32
EndKernPairs
EndKernData
EndFontMetrics
diff --git a/fonts/newtx/afm/ntxsups-BoldItalic.afm b/fonts/newtx/afm/ntxsups-BoldItalic.afm
index 7cfb4b879e..b4f625b396 100644
--- a/fonts/newtx/afm/ntxsups-BoldItalic.afm
+++ b/fonts/newtx/afm/ntxsups-BoldItalic.afm
@@ -1,595 +1,576 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20150126
-Comment Creation Date: Sat Jan 31 16:18:01 2015
+Comment Generated by FontForge 20190801
+Comment Creation Date: Sun Sep 1 14:13:40 2019
FontName ntxsups-BoldItalic
FullName ntxsups Bold Italic
FamilyName ntxsups
Weight Bold
-Notice (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development)
+Notice (Copyright 2006, 2009 for TeX Gyre extensions by B. Jackowski and J.M. Nowacki (on behalf of TeX users groups). This work is released under the GUST Font License -- see http://tug.org/fonts/licenses/G)
+Comment UST-FONT-LICENSE.txt for details.
Comment
-Comment Copyright 2015 by Michael Sharpe, LPPL
+Comment Copyright 2015--2019 Michael Sharpe, under equivalent LPPL.
ItalicAngle -15.3
IsFixedPitch false
UnderlinePosition -100
UnderlineThickness 50
-Version 1.05
-EncodingScheme AdobeStandardEncoding
+Version 1.06
+EncodingScheme FontSpecific
FontBBox -42 125 772 720
CapHeight 669
-XHeight 548
-Ascender 692
+XHeight 547
Descender 147
-StartCharMetrics 98
+StartCharMetrics 99
+C 0 ; WX 0 ; N .notdef ; B 0 0 0 0 ;
C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 303 ; N exclam ; B 125 262 373 680 ;
-C 34 ; WX 402 ; N quotedbl ; B 169 504 471 685 ;
-C 35 ; WX 374 ; N numbersign ; B 60 270 477 692 ;
-C 36 ; WX 355 ; N dollar ; B 68 187 435 720 ;
-C 37 ; WX 595 ; N percent ; B 106 264 650 686 ;
-C 38 ; WX 584 ; N ampersand ; B 84 259 614 679 ;
-C 39 ; WX 231 ; N quoteright ; B 145 486 293 685 ;
-C 40 ; WX 232 ; N parenleft ; B 99 158 320 685 ;
-C 41 ; WX 232 ; N parenright ; B 52 158 273 685 ;
-C 42 ; WX 298 ; N asterisk ; B 123 424 385 685 ;
-C 43 ; WX 384 ; N plus ; B 102 270 444 577 ;
-C 44 ; WX 177 ; N comma ; B 42 125 190 385 ;
-C 45 ; WX 216 ; N hyphen ; B 82 356 257 451 ;
-C 46 ; WX 187 ; N period ; B 75 262 196 383 ;
-C 47 ; WX 227 ; N slash ; B 39 259 350 681 ;
-C 48 ; WX 358 ; N zero ; B 92 262 425 680 ;
-C 49 ; WX 337 ; N one ; B 84 270 366 680 ;
-C 50 ; WX 347 ; N two ; B 63 270 393 680 ;
-C 51 ; WX 353 ; N three ; B 71 262 402 680 ;
-C 52 ; WX 345 ; N four ; B 71 270 429 680 ;
-C 53 ; WX 328 ; N five ; B 74 262 401 671 ;
-C 54 ; WX 366 ; N six ; B 96 261 453 677 ;
-C 55 ; WX 324 ; N seven ; B 115 270 422 671 ;
-C 56 ; WX 398 ; N eight ; B 83 262 464 680 ;
-C 57 ; WX 365 ; N nine ; B 73 264 430 680 ;
-C 58 ; WX 256 ; N colon ; B 96 262 293 545 ;
-C 59 ; WX 245 ; N semicolon ; B 65 143 282 562 ;
-C 60 ; WX 391 ; N less ; B 101 263 452 607 ;
-C 61 ; WX 370 ; N equal ; B 102 324 430 519 ;
-C 62 ; WX 391 ; N greater ; B 101 263 452 599 ;
-C 63 ; WX 370 ; N question ; B 132 262 432 680 ;
-C 64 ; WX 584 ; N at ; B 122 259 625 681 ;
-C 65 ; WX 492 ; N A ; B 37 270 525 680 ;
-C 66 ; WX 534 ; N B ; B 65 270 587 671 ;
-C 67 ; WX 479 ; N C ; B 102 259 567 681 ;
-C 68 ; WX 561 ; N D ; B 51 270 618 671 ;
-C 69 ; WX 533 ; N E ; B 63 270 605 671 ;
-C 70 ; WX 502 ; N F ; B 73 270 579 671 ;
-C 71 ; WX 515 ; N G ; B 95 259 586 681 ;
-C 72 ; WX 561 ; N H ; B 65 270 656 671 ;
-C 73 ; WX 267 ; N I ; B 60 270 360 671 ;
-C 74 ; WX 360 ; N J ; B 51 203 457 675 ;
-C 75 ; WX 487 ; N K ; B 67 270 591 671 ;
-C 76 ; WX 450 ; N L ; B 67 270 518 671 ;
-C 77 ; WX 655 ; N M ; B 62 263 755 671 ;
-C 78 ; WX 514 ; N N ; B 63 261 613 671 ;
-C 79 ; WX 517 ; N O ; B 99 259 579 681 ;
-C 80 ; WX 466 ; N P ; B 63 270 548 671 ;
-C 81 ; WX 517 ; N Q ; B 99 134 579 687 ;
-C 82 ; WX 530 ; N R ; B 62 270 583 671 ;
-C 83 ; WX 417 ; N S ; B 82 259 479 681 ;
-C 84 ; WX 448 ; N T ; B 113 270 555 671 ;
-C 85 ; WX 509 ; N U ; B 125 259 605 671 ;
-C 86 ; WX 495 ; N V ; B 123 259 608 671 ;
-C 87 ; WX 658 ; N W ; B 123 259 772 671 ;
-C 88 ; WX 488 ; N X ; B 65 270 587 671 ;
-C 89 ; WX 453 ; N Y ; B 128 270 565 671 ;
-C 90 ; WX 495 ; N Z ; B 74 270 563 671 ;
-C 91 ; WX 249 ; N bracketleft ; B 57 167 349 681 ;
-C 92 ; WX 226 ; N backslash ; B 80 259 308 681 ;
-C 93 ; WX 246 ; N bracketright ; B 45 168 334 681 ;
-C 94 ; WX 439 ; N asciicircum ; B 125 441 477 682 ;
-C 95 ; WX 325 ; N underscore ; B 81 185 406 234 ;
-C 96 ; WX 231 ; N quoteleft ; B 164 486 312 685 ;
-C 97 ; WX 365 ; N a ; B 67 262 417 547 ;
-C 98 ; WX 401 ; N b ; B 72 262 446 690 ;
-C 99 ; WX 327 ; N c ; B 78 262 375 547 ;
-C 100 ; WX 343 ; N d ; B 67 262 436 690 ;
-C 101 ; WX 326 ; N e ; B 84 262 377 547 ;
-C 102 ; WX 245 ; N f ; B -29 140 400 694 ;
-C 103 ; WX 391 ; N g ; B 47 148 458 547 ;
-C 104 ; WX 434 ; N h ; B 73 265 478 690 ;
-C 105 ; WX 224 ; N i ; B 82 265 275 681 ;
-C 106 ; WX 251 ; N j ; B -42 139 293 696 ;
-C 107 ; WX 381 ; N k ; B 66 265 451 690 ;
-C 108 ; WX 190 ; N l ; B 82 265 279 690 ;
-C 109 ; WX 600 ; N m ; B 72 265 645 547 ;
-C 110 ; WX 433 ; N n ; B 77 265 474 547 ;
-C 111 ; WX 366 ; N o ; B 79 262 409 547 ;
-C 112 ; WX 343 ; N p ; B 3 147 390 547 ;
-C 113 ; WX 388 ; N q ; B 82 147 451 547 ;
-C 114 ; WX 253 ; N r ; B 67 270 334 547 ;
-C 115 ; WX 310 ; N s ; B 69 262 355 547 ;
-C 116 ; WX 230 ; N t ; B 94 265 324 702 ;
-C 117 ; WX 442 ; N u ; B 91 265 482 547 ;
-C 118 ; WX 320 ; N v ; B 91 262 373 547 ;
-C 119 ; WX 463 ; N w ; B 91 262 510 547 ;
-C 120 ; WX 340 ; N x ; B 51 262 401 550 ;
-C 121 ; WX 298 ; N y ; B 20 137 346 551 ;
-C 122 ; WX 318 ; N z ; B 53 217 386 550 ;
-C 123 ; WX 242 ; N braceleft ; B 84 153 380 685 ;
-C 124 ; WX 157 ; N bar ; B 124 259 196 681 ;
-C 125 ; WX 259 ; N braceright ; B 15 153 311 685 ;
-C 126 ; WX 370 ; N asciitilde ; B 116 350 416 478 ;
-C 161 ; WX 303 ; N exclamdown ; B 93 142 339 582 ;
-C -1 ; WX 326 ; N eacute ; B 84 262 401 693 ;
-C -1 ; WX 326 ; N egrave ; B 84 262 377 693 ;
+C 33 ; WX 303 ; N exclam.sup ; B 125 262 373 680 ;
+C 34 ; WX 402 ; N quotedbl.sup ; B 169 504 471 685 ;
+C 35 ; WX 374 ; N numbersign.sup ; B 60 270 477 692 ;
+C 36 ; WX 355 ; N dollar.sup ; B 68 187 435 720 ;
+C 37 ; WX 595 ; N percent.sup ; B 106 264 650 686 ;
+C 38 ; WX 584 ; N ampersand.sup ; B 84 259 614 679 ;
+C 39 ; WX 231 ; N quoteright.sup ; B 145 486 293 685 ;
+C 40 ; WX 232 ; N parenleft.sup ; B 99 158 320 685 ;
+C 41 ; WX 232 ; N parenright.sup ; B 52 158 273 685 ;
+C 42 ; WX 298 ; N asterisk.sup ; B 123 424 385 685 ;
+C 43 ; WX 384 ; N plus.sup ; B 102 270 444 577 ;
+C 44 ; WX 177 ; N comma.sup ; B 42 125 190 385 ;
+C 45 ; WX 216 ; N hyphen.sup ; B 82 356 257 451 ;
+C 46 ; WX 187 ; N period.sup ; B 75 262 196 383 ;
+C 47 ; WX 227 ; N slash.sup ; B 39 259 350 681 ;
+C 48 ; WX 358 ; N zero.sup ; B 92 262 425 680 ;
+C 49 ; WX 337 ; N one.sup ; B 84 270 366 680 ;
+C 50 ; WX 347 ; N two.sup ; B 63 270 393 680 ;
+C 51 ; WX 353 ; N three.sup ; B 71 262 402 680 ;
+C 52 ; WX 345 ; N four.sup ; B 71 270 429 680 ;
+C 53 ; WX 328 ; N five.sup ; B 74 262 401 671 ;
+C 54 ; WX 366 ; N six.sup ; B 96 261 453 677 ;
+C 55 ; WX 324 ; N seven.sup ; B 115 270 422 671 ;
+C 56 ; WX 398 ; N eight.sup ; B 83 262 464 680 ;
+C 57 ; WX 365 ; N nine.sup ; B 73 264 430 680 ;
+C 58 ; WX 256 ; N colon.sup ; B 96 262 293 545 ;
+C 59 ; WX 245 ; N semicolon.sup ; B 65 143 282 562 ;
+C 60 ; WX 391 ; N less.sup ; B 101 263 452 607 ;
+C 61 ; WX 370 ; N equal.sup ; B 102 324 430 519 ;
+C 62 ; WX 391 ; N greater.sup ; B 101 263 452 599 ;
+C 63 ; WX 370 ; N question.sup ; B 132 262 432 680 ;
+C 64 ; WX 584 ; N at.sup ; B 122 259 625 681 ;
+C 65 ; WX 492 ; N A.sup ; B 37 270 525 680 ;
+C 66 ; WX 534 ; N B.sup ; B 65 270 587 671 ;
+C 67 ; WX 479 ; N C.sup ; B 102 259 567 681 ;
+C 68 ; WX 561 ; N D.sup ; B 51 270 618 671 ;
+C 69 ; WX 533 ; N E.sup ; B 63 270 605 671 ;
+C 70 ; WX 502 ; N F.sup ; B 73 270 579 671 ;
+C 71 ; WX 515 ; N G.sup ; B 95 259 586 681 ;
+C 72 ; WX 561 ; N H.sup ; B 65 270 656 671 ;
+C 73 ; WX 267 ; N I.sup ; B 60 270 360 671 ;
+C 74 ; WX 360 ; N J.sup ; B 51 203 457 675 ;
+C 75 ; WX 487 ; N K.sup ; B 67 270 591 671 ;
+C 76 ; WX 450 ; N L.sup ; B 67 270 518 671 ;
+C 77 ; WX 655 ; N M.sup ; B 62 263 755 671 ;
+C 78 ; WX 514 ; N N.sup ; B 63 261 613 671 ;
+C 79 ; WX 517 ; N O.sup ; B 99 259 579 681 ;
+C 80 ; WX 466 ; N P.sup ; B 63 270 548 671 ;
+C 81 ; WX 517 ; N Q.sup ; B 99 134 579 687 ;
+C 82 ; WX 530 ; N R.sup ; B 62 270 583 671 ;
+C 83 ; WX 417 ; N S.sup ; B 82 259 479 681 ;
+C 84 ; WX 448 ; N T.sup ; B 104 270 525 671 ;
+C 85 ; WX 509 ; N U.sup ; B 125 259 605 671 ;
+C 86 ; WX 495 ; N V.sup ; B 123 259 608 671 ;
+C 87 ; WX 658 ; N W.sup ; B 123 259 772 671 ;
+C 88 ; WX 488 ; N X.sup ; B 65 270 587 671 ;
+C 89 ; WX 453 ; N Y.sup ; B 128 270 565 671 ;
+C 90 ; WX 495 ; N Z.sup ; B 74 270 563 671 ;
+C 91 ; WX 249 ; N bracketleft.sup ; B 57 167 349 681 ;
+C 92 ; WX 226 ; N backslash.sup ; B 80 259 308 681 ;
+C 93 ; WX 246 ; N bracketright.sup ; B 45 168 334 681 ;
+C 94 ; WX 439 ; N asciicircum.sup ; B 125 441 477 682 ;
+C 95 ; WX 325 ; N underscore.sup ; B 81 185 406 234 ;
+C 96 ; WX 231 ; N quoteleft.sup ; B 164 486 312 685 ;
+C 97 ; WX 365 ; N a.sup ; B 67 262 417 547 ;
+C 98 ; WX 401 ; N b.sup ; B 72 262 446 690 ;
+C 99 ; WX 327 ; N c.sup ; B 78 262 375 547 ;
+C 100 ; WX 343 ; N d.sup ; B 67 262 436 690 ;
+C 101 ; WX 326 ; N e.sup ; B 84 262 377 547 ;
+C 102 ; WX 245 ; N f.sup ; B -29 140 400 694 ;
+C 103 ; WX 391 ; N g.sup ; B 47 148 458 547 ;
+C 104 ; WX 434 ; N h.sup ; B 73 265 478 690 ;
+C 105 ; WX 224 ; N i.sup ; B 82 265 275 681 ;
+C 106 ; WX 251 ; N j.sup ; B -42 139 293 696 ;
+C 107 ; WX 381 ; N k.sup ; B 66 265 451 690 ;
+C 108 ; WX 190 ; N l.sup ; B 82 265 279 690 ;
+C 109 ; WX 600 ; N m.sup ; B 72 265 645 547 ;
+C 110 ; WX 433 ; N n.sup ; B 77 265 474 547 ;
+C 111 ; WX 366 ; N o.sup ; B 79 262 409 547 ;
+C 112 ; WX 343 ; N p.sup ; B 3 147 390 547 ;
+C 113 ; WX 388 ; N q.sup ; B 92 147 451 547 ;
+C 114 ; WX 253 ; N r.sup ; B 67 270 334 547 ;
+C 115 ; WX 310 ; N s.sup ; B 69 262 355 547 ;
+C 116 ; WX 230 ; N t.sup ; B 94 265 324 702 ;
+C 117 ; WX 442 ; N u.sup ; B 91 265 482 547 ;
+C 118 ; WX 320 ; N v.sup ; B 91 262 373 547 ;
+C 119 ; WX 463 ; N w.sup ; B 91 262 510 547 ;
+C 120 ; WX 340 ; N x.sup ; B 51 262 401 550 ;
+C 121 ; WX 298 ; N y.sup ; B 20 137 346 551 ;
+C 122 ; WX 318 ; N z.sup ; B 53 217 386 550 ;
+C 123 ; WX 242 ; N braceleft.sup ; B 84 153 380 685 ;
+C 124 ; WX 157 ; N bar.sup ; B 124 259 196 681 ;
+C 125 ; WX 259 ; N braceright.sup ; B 15 153 311 685 ;
+C 126 ; WX 370 ; N asciitilde.sup ; B 116 350 416 478 ;
+C 161 ; WX 303 ; N exclamdown.sup ; B 93 142 339 582 ;
+C 232 ; WX 326 ; N egrave.sup ; B 84 262 377 693 ;
+C 233 ; WX 326 ; N eacute.sup ; B 84 262 401 693 ;
EndCharMetrics
StartKernData
-StartKernPairs 469
-KPX quoteright y -18
-KPX quoteright w -23
-KPX quoteright v -23
-KPX quoteright t -19
-KPX quoteright s -26
-KPX quoteright r -26
-KPX quoteright period -59
-KPX quoteright o -50
-KPX quoteright d -50
-KPX quoteright comma -57
-KPX quoteright A -94
-KPX comma quoteright -23
-KPX comma one -26
-KPX hyphen Y -69
-KPX hyphen W -59
-KPX hyphen V -62
-KPX hyphen T -59
-KPX hyphen A -13
-KPX period quoteright -27
-KPX period one -32
-KPX zero seven -12
-KPX zero one -50
-KPX zero four -1
-KPX one zero -48
-KPX one two -32
-KPX one three -43
-KPX one six -62
-KPX one seven -65
-KPX one period -39
-KPX one one -48
-KPX one nine -40
-KPX one four -75
-KPX one five -45
-KPX one eight -56
-KPX one comma -38
-KPX two seven -27
-KPX two one -48
-KPX two four -8
-KPX three seven -27
-KPX three one -67
-KPX three four -15
-KPX four seven -21
-KPX four one -50
-KPX four four 1
-KPX five seven -37
-KPX five one -56
-KPX five four -13
-KPX six seven -32
-KPX six one -52
-KPX six four 2
-KPX seven two -30
-KPX seven three -42
-KPX seven six -60
-KPX seven seven -27
-KPX seven period -81
-KPX seven one -43
-KPX seven four -79
-KPX seven five -60
-KPX seven eight -46
-KPX seven comma -80
-KPX seven colon -90
-KPX eight seven -13
-KPX eight one -52
-KPX eight four -4
-KPX nine seven -12
-KPX nine one -67
-KPX nine four -18
-KPX A y -67
-KPX A w -56
-KPX A v -51
-KPX A u -18
-KPX A t -4
-KPX A quoteright -101
-KPX A q -18
-KPX A period 1
-KPX A o -23
-KPX A hyphen -23
-KPX A g -20
-KPX A e -25
-KPX A d -5
-KPX A c -20
-KPX A b -1
-KPX A a -5
-KPX A Y -44
-KPX A W -107
-KPX A V -110
-KPX A U -61
-KPX A T -33
-KPX A Q -54
-KPX A O -53
-KPX A G -59
-KPX A C -61
-KPX B Y -50
-KPX B W -46
-KPX B V -46
-KPX B O -22
-KPX B A -34
-KPX C O -25
-KPX C K -28
-KPX C H -26
-KPX C A -24
-KPX D Y -64
-KPX D X -64
-KPX D W -58
-KPX D V -60
-KPX D T -27
-KPX D J -67
-KPX D A -54
-KPX F u -42
-KPX F r -38
-KPX F period -98
-KPX F o -81
-KPX F j -34
-KPX F i -29
-KPX F hyphen -54
-KPX F eacute -86
-KPX F e -86
-KPX F comma -96
-KPX F a -75
-KPX F O -48
-KPX F J -88
-KPX F A -101
-KPX G Y -31
-KPX G W -27
-KPX G V -27
-KPX G T -42
-KPX G A -14
-KPX J A -39
-KPX K y -68
-KPX K u -8
-KPX K o -13
-KPX K hyphen -30
-KPX K e -16
-KPX K a 3
-KPX K S -1
-KPX K O -43
-KPX K G -46
-KPX K C -51
-KPX L y -23
-KPX L u 5
-KPX L quoteright -67
-KPX L hyphen 41
-KPX L Y -41
-KPX L W -74
-KPX L V -77
-KPX L U -17
-KPX L T -30
-KPX L S 1
-KPX L O 4
-KPX L G 4
-KPX L A 28
-KPX N u -33
-KPX N period -26
-KPX N o -32
-KPX N eacute -38
-KPX N e -37
-KPX N comma -24
-KPX N a -25
-KPX N O -32
-KPX N G -26
-KPX N C -32
-KPX N A -39
-KPX O Y -56
-KPX O X -63
-KPX O W -52
-KPX O V -52
-KPX O T -18
-KPX O A -57
-KPX P period -109
-KPX P o -52
-KPX P hyphen -54
-KPX P eacute -57
-KPX P e -57
-KPX P comma -107
-KPX P a -50
-KPX P J -105
-KPX P A -89
-KPX R y -12
-KPX R u -13
-KPX R o -18
-KPX R hyphen -30
-KPX R eacute -21
-KPX R e -21
-KPX R a -1
-KPX R Y -40
-KPX R W -46
-KPX R V -46
-KPX R U -44
-KPX R T -24
-KPX R O -34
-KPX R G -28
-KPX R C -33
-KPX S t -6
-KPX S Y -24
-KPX S W -20
-KPX S V -20
-KPX S T -34
-KPX S A -11
-KPX T y -86
-KPX T w -89
-KPX T v -89
-KPX T u -91
-KPX T semicolon -98
-KPX T s -78
-KPX T r -76
-KPX T period -79
-KPX T o -90
-KPX T j -27
-KPX T i -19
-KPX T hyphen -74
-KPX T g -95
-KPX T e -94
-KPX T comma -77
-KPX T colon -98
-KPX T c -89
-KPX T a -83
-KPX T Y 11
-KPX T W 15
-KPX T V 15
-KPX T S -16
-KPX T O -22
-KPX T J -63
-KPX T G -9
-KPX T C -15
-KPX T A -52
-KPX U r -32
-KPX U period -41
-KPX U p -30
-KPX U n -39
-KPX U m -35
-KPX U comma -40
-KPX U A -65
-KPX V y -34
-KPX V u -47
-KPX V semicolon -96
-KPX V r -44
-KPX V period -97
-KPX V o -83
-KPX V i -12
-KPX V hyphen -62
-KPX V g -83
-KPX V e -87
-KPX V comma -96
-KPX V colon -96
-KPX V a -76
-KPX V T 7
-KPX V S -25
-KPX V O -64
-KPX V G -53
-KPX V C -60
-KPX V A -100
-KPX W y -25
-KPX W u -38
-KPX W semicolon -79
-KPX W r -34
-KPX W period -64
-KPX W o -58
-KPX W i -11
-KPX W hyphen -37
-KPX W g -63
-KPX W e -62
-KPX W comma -62
-KPX W colon -78
-KPX W a -51
-KPX W T 8
-KPX W S -24
-KPX W O -47
-KPX W G -41
-KPX W C -46
-KPX W A -83
-KPX X y -81
-KPX X u -21
-KPX X o -26
-KPX X hyphen -46
-KPX X e -29
-KPX X a -9
-KPX X Q -58
-KPX X O -56
-KPX X C -58
-KPX Y v -54
-KPX Y u -59
-KPX Y semicolon -91
-KPX Y period -69
-KPX Y p -54
-KPX Y o -76
-KPX Y i -12
-KPX Y hyphen -63
-KPX Y g -81
-KPX Y e -80
-KPX Y comma -67
-KPX Y colon -91
-KPX Y a -69
-KPX Y T 7
-KPX Y S -25
-KPX Y O -61
-KPX Y G -54
-KPX Y C -59
-KPX Y A -45
-KPX Z y -39
-KPX Z v -29
-KPX quoteleft Y -7
-KPX quoteleft W -3
-KPX quoteleft V -3
-KPX quoteleft T -18
-KPX quoteleft A -83
-KPX a y -3
-KPX a w -5
-KPX a v -5
-KPX a quoteright -22
-KPX a j -2
-KPX b y -17
-KPX b w -12
-KPX b v -12
-KPX c k -16
-KPX c h -20
-KPX e y -6
-KPX e x -15
-KPX e w -3
-KPX e v -3
-KPX e t -3
-KPX e quoteright -12
-KPX f t 9
-KPX f s -14
-KPX f quoteright 12
-KPX f o -30
-KPX f l 43
-KPX f j 12
-KPX f i 20
-KPX f f 2
-KPX f eacute -36
-KPX f e -35
-KPX f a -23
-KPX g r 3
-KPX g l -21
-KPX g eacute -32
-KPX g e -32
-KPX g a -25
-KPX h y -20
-KPX h quoteright -32
-KPX i j -5
-KPX i T -20
-KPX k u 2
-KPX k s 1
-KPX k period 17
-KPX k o 1
-KPX k hyphen 1
-KPX k g -14
-KPX k eacute -2
-KPX k e -2
-KPX k comma 19
-KPX k a 10
-KPX l y -8
-KPX l v -12
-KPX m y -16
-KPX m w -16
-KPX m v -16
-KPX m p -1
-KPX n y -20
-KPX n w -20
-KPX n v -20
-KPX n quoteright -32
-KPX n p -4
-KPX n T -59
-KPX o y -29
-KPX o x -26
-KPX o w -21
-KPX o v -21
-KPX o t -2
-KPX o quoteright -22
-KPX o T -75
-KPX p y -13
-KPX p t -2
-KPX q u -5
-KPX q c -6
-KPX r z 10
-KPX r y 20
-KPX r x 7
-KPX r w 20
-KPX r v 20
-KPX r u 11
-KPX r t 12
-KPX r semicolon -30
-KPX r s 1
-KPX r r 14
-KPX r q -19
-KPX r period -69
-KPX r p 16
-KPX r o -15
-KPX r n 6
-KPX r m 10
-KPX r l -12
-KPX r k -11
-KPX r j 12
-KPX r i 17
-KPX r hyphen -13
-KPX r h -16
-KPX r g -4
-KPX r f 8
-KPX r egrave -20
-KPX r eacute -20
-KPX r e -20
-KPX r d -14
-KPX r comma -67
-KPX r colon -30
-KPX r c -15
-KPX r a -13
-KPX s t -6
-KPX s quoteright -22
-KPX t semicolon -23
-KPX t quoteright -19
-KPX t o 1
-KPX t h -5
-KPX t eacute -2
-KPX t e -2
-KPX t colon -22
-KPX t a 10
-KPX t S -11
-KPX u quoteright -33
-KPX v semicolon -51
-KPX v s -19
-KPX v period -51
-KPX v o -24
-KPX v l -24
-KPX v hyphen -1
-KPX v g -20
-KPX v egrave -28
-KPX v eacute -28
-KPX v e -28
-KPX v comma -51
-KPX v colon -51
-KPX v c -24
-KPX v a -20
-KPX w semicolon -56
-KPX w s -24
-KPX w period -53
-KPX w o -30
-KPX w l -28
-KPX w hyphen -7
-KPX w g -26
-KPX w egrave -34
-KPX w eacute -34
-KPX w e -34
-KPX w comma -53
-KPX w colon -56
-KPX w c -30
-KPX w a -24
-KPX x q -12
-KPX x o -11
-KPX x eacute -14
-KPX x e -14
-KPX x c -10
-KPX x a -1
-KPX y semicolon -44
-KPX y s -13
-KPX y period -26
-KPX y o -17
-KPX y l -16
-KPX y hyphen 2
-KPX y g -23
-KPX y egrave -23
-KPX y eacute -23
-KPX y e -22
-KPX y comma -25
-KPX y colon -43
-KPX y c -17
-KPX y a -11
-KPX eacute y -6
-KPX eacute w -3
-KPX eacute v -3
+StartKernPairs 449
+KPX quoteright.sup y.sup -18
+KPX quoteright.sup w.sup -23
+KPX quoteright.sup v.sup -23
+KPX quoteright.sup t.sup -19
+KPX quoteright.sup s.sup -26
+KPX quoteright.sup r.sup -26
+KPX quoteright.sup period.sup -59
+KPX quoteright.sup o.sup -50
+KPX quoteright.sup d.sup -50
+KPX quoteright.sup comma.sup -57
+KPX quoteright.sup A.sup -94
+KPX comma.sup quoteright.sup -23
+KPX comma.sup one.sup -26
+KPX hyphen.sup Y.sup -69
+KPX hyphen.sup W.sup -59
+KPX hyphen.sup V.sup -62
+KPX hyphen.sup T.sup -59
+KPX hyphen.sup A.sup -13
+KPX period.sup quoteright.sup -27
+KPX period.sup one.sup -32
+KPX zero.sup seven.sup -12
+KPX zero.sup one.sup -50
+KPX zero.sup four.sup -1
+KPX one.sup zero.sup -48
+KPX one.sup two.sup -32
+KPX one.sup three.sup -43
+KPX one.sup six.sup -62
+KPX one.sup seven.sup -65
+KPX one.sup period.sup -39
+KPX one.sup one.sup -48
+KPX one.sup nine.sup -40
+KPX one.sup four.sup -75
+KPX one.sup five.sup -45
+KPX one.sup eight.sup -56
+KPX one.sup comma.sup -38
+KPX two.sup seven.sup -27
+KPX two.sup one.sup -48
+KPX two.sup four.sup -8
+KPX three.sup seven.sup -27
+KPX three.sup one.sup -67
+KPX three.sup four.sup -15
+KPX four.sup seven.sup -21
+KPX four.sup one.sup -50
+KPX four.sup four.sup 1
+KPX five.sup seven.sup -37
+KPX five.sup one.sup -56
+KPX five.sup four.sup -13
+KPX six.sup seven.sup -32
+KPX six.sup one.sup -52
+KPX six.sup four.sup 2
+KPX seven.sup two.sup -30
+KPX seven.sup three.sup -42
+KPX seven.sup six.sup -60
+KPX seven.sup seven.sup -27
+KPX seven.sup period.sup -81
+KPX seven.sup one.sup -43
+KPX seven.sup four.sup -79
+KPX seven.sup five.sup -60
+KPX seven.sup eight.sup -46
+KPX seven.sup comma.sup -80
+KPX seven.sup colon.sup -90
+KPX eight.sup seven.sup -13
+KPX eight.sup one.sup -52
+KPX eight.sup four.sup -4
+KPX nine.sup seven.sup -12
+KPX nine.sup one.sup -67
+KPX nine.sup four.sup -18
+KPX A.sup y.sup -67
+KPX A.sup w.sup -56
+KPX A.sup v.sup -51
+KPX A.sup u.sup -18
+KPX A.sup t.sup -4
+KPX A.sup quoteright.sup -101
+KPX A.sup q.sup -18
+KPX A.sup period.sup 1
+KPX A.sup o.sup -23
+KPX A.sup hyphen.sup -23
+KPX A.sup g.sup -20
+KPX A.sup e.sup -25
+KPX A.sup d.sup -5
+KPX A.sup c.sup -20
+KPX A.sup b.sup -1
+KPX A.sup a.sup -5
+KPX A.sup Y.sup -44
+KPX A.sup W.sup -107
+KPX A.sup V.sup -110
+KPX A.sup U.sup -61
+KPX A.sup T.sup -33
+KPX A.sup Q.sup -54
+KPX A.sup O.sup -53
+KPX A.sup G.sup -59
+KPX A.sup C.sup -61
+KPX B.sup Y.sup -50
+KPX B.sup W.sup -46
+KPX B.sup V.sup -46
+KPX B.sup O.sup -22
+KPX B.sup A.sup -34
+KPX C.sup O.sup -25
+KPX C.sup K.sup -28
+KPX C.sup H.sup -26
+KPX C.sup A.sup -24
+KPX D.sup Y.sup -64
+KPX D.sup X.sup -64
+KPX D.sup W.sup -58
+KPX D.sup V.sup -60
+KPX D.sup T.sup -27
+KPX D.sup J.sup -67
+KPX D.sup A.sup -54
+KPX F.sup u.sup -42
+KPX F.sup r.sup -38
+KPX F.sup period.sup -98
+KPX F.sup o.sup -81
+KPX F.sup j.sup -34
+KPX F.sup i.sup -29
+KPX F.sup hyphen.sup -54
+KPX F.sup e.sup -86
+KPX F.sup comma.sup -96
+KPX F.sup a.sup -75
+KPX F.sup O.sup -48
+KPX F.sup J.sup -88
+KPX F.sup A.sup -101
+KPX G.sup Y.sup -31
+KPX G.sup W.sup -27
+KPX G.sup V.sup -27
+KPX G.sup T.sup -42
+KPX G.sup A.sup -14
+KPX J.sup A.sup -39
+KPX K.sup y.sup -68
+KPX K.sup u.sup -8
+KPX K.sup o.sup -13
+KPX K.sup hyphen.sup -30
+KPX K.sup e.sup -16
+KPX K.sup a.sup 3
+KPX K.sup S.sup -1
+KPX K.sup O.sup -43
+KPX K.sup G.sup -46
+KPX K.sup C.sup -51
+KPX L.sup y.sup -23
+KPX L.sup u.sup 5
+KPX L.sup quoteright.sup -67
+KPX L.sup hyphen.sup 41
+KPX L.sup Y.sup -41
+KPX L.sup W.sup -74
+KPX L.sup V.sup -77
+KPX L.sup U.sup -17
+KPX L.sup T.sup -30
+KPX L.sup S.sup 1
+KPX L.sup O.sup 4
+KPX L.sup G.sup 4
+KPX L.sup A.sup 28
+KPX N.sup u.sup -33
+KPX N.sup period.sup -26
+KPX N.sup o.sup -32
+KPX N.sup e.sup -37
+KPX N.sup comma.sup -24
+KPX N.sup a.sup -25
+KPX N.sup O.sup -32
+KPX N.sup G.sup -26
+KPX N.sup C.sup -32
+KPX N.sup A.sup -39
+KPX O.sup Y.sup -56
+KPX O.sup X.sup -63
+KPX O.sup W.sup -52
+KPX O.sup V.sup -52
+KPX O.sup T.sup -18
+KPX O.sup A.sup -57
+KPX P.sup period.sup -109
+KPX P.sup o.sup -52
+KPX P.sup hyphen.sup -54
+KPX P.sup e.sup -57
+KPX P.sup comma.sup -107
+KPX P.sup a.sup -50
+KPX P.sup J.sup -105
+KPX P.sup A.sup -89
+KPX R.sup y.sup -12
+KPX R.sup u.sup -13
+KPX R.sup o.sup -18
+KPX R.sup hyphen.sup -30
+KPX R.sup e.sup -21
+KPX R.sup a.sup -1
+KPX R.sup Y.sup -40
+KPX R.sup W.sup -46
+KPX R.sup V.sup -46
+KPX R.sup U.sup -44
+KPX R.sup T.sup -24
+KPX R.sup O.sup -34
+KPX R.sup G.sup -28
+KPX R.sup C.sup -33
+KPX S.sup t.sup -6
+KPX S.sup Y.sup -24
+KPX S.sup W.sup -20
+KPX S.sup V.sup -20
+KPX S.sup T.sup -34
+KPX S.sup A.sup -11
+KPX T.sup y.sup -86
+KPX T.sup w.sup -89
+KPX T.sup v.sup -89
+KPX T.sup u.sup -91
+KPX T.sup semicolon.sup -98
+KPX T.sup s.sup -78
+KPX T.sup r.sup -76
+KPX T.sup period.sup -79
+KPX T.sup o.sup -90
+KPX T.sup j.sup -27
+KPX T.sup i.sup -19
+KPX T.sup hyphen.sup -74
+KPX T.sup g.sup -95
+KPX T.sup e.sup -94
+KPX T.sup comma.sup -77
+KPX T.sup colon.sup -98
+KPX T.sup c.sup -89
+KPX T.sup a.sup -83
+KPX T.sup Y.sup 11
+KPX T.sup W.sup 15
+KPX T.sup V.sup 15
+KPX T.sup S.sup -16
+KPX T.sup O.sup -22
+KPX T.sup J.sup -63
+KPX T.sup G.sup -9
+KPX T.sup C.sup -15
+KPX T.sup A.sup -52
+KPX U.sup r.sup -32
+KPX U.sup period.sup -41
+KPX U.sup p.sup -30
+KPX U.sup n.sup -39
+KPX U.sup m.sup -35
+KPX U.sup comma.sup -40
+KPX U.sup A.sup -65
+KPX V.sup y.sup -34
+KPX V.sup u.sup -47
+KPX V.sup semicolon.sup -96
+KPX V.sup r.sup -44
+KPX V.sup period.sup -97
+KPX V.sup o.sup -83
+KPX V.sup i.sup -12
+KPX V.sup hyphen.sup -62
+KPX V.sup g.sup -83
+KPX V.sup e.sup -87
+KPX V.sup comma.sup -96
+KPX V.sup colon.sup -96
+KPX V.sup a.sup -76
+KPX V.sup T.sup 7
+KPX V.sup S.sup -25
+KPX V.sup O.sup -64
+KPX V.sup G.sup -53
+KPX V.sup C.sup -60
+KPX V.sup A.sup -100
+KPX W.sup y.sup -25
+KPX W.sup u.sup -38
+KPX W.sup semicolon.sup -79
+KPX W.sup r.sup -34
+KPX W.sup period.sup -64
+KPX W.sup o.sup -58
+KPX W.sup i.sup -11
+KPX W.sup hyphen.sup -37
+KPX W.sup g.sup -63
+KPX W.sup e.sup -62
+KPX W.sup comma.sup -62
+KPX W.sup colon.sup -78
+KPX W.sup a.sup -51
+KPX W.sup T.sup 8
+KPX W.sup S.sup -24
+KPX W.sup O.sup -47
+KPX W.sup G.sup -41
+KPX W.sup C.sup -46
+KPX W.sup A.sup -83
+KPX X.sup y.sup -81
+KPX X.sup u.sup -21
+KPX X.sup o.sup -26
+KPX X.sup hyphen.sup -46
+KPX X.sup e.sup -29
+KPX X.sup a.sup -9
+KPX X.sup Q.sup -58
+KPX X.sup O.sup -56
+KPX X.sup C.sup -58
+KPX Y.sup v.sup -54
+KPX Y.sup u.sup -59
+KPX Y.sup semicolon.sup -91
+KPX Y.sup period.sup -69
+KPX Y.sup p.sup -54
+KPX Y.sup o.sup -76
+KPX Y.sup i.sup -12
+KPX Y.sup hyphen.sup -63
+KPX Y.sup g.sup -81
+KPX Y.sup e.sup -80
+KPX Y.sup comma.sup -67
+KPX Y.sup colon.sup -91
+KPX Y.sup a.sup -69
+KPX Y.sup T.sup 7
+KPX Y.sup S.sup -25
+KPX Y.sup O.sup -61
+KPX Y.sup G.sup -54
+KPX Y.sup C.sup -59
+KPX Y.sup A.sup -45
+KPX Z.sup y.sup -39
+KPX Z.sup v.sup -29
+KPX quoteleft.sup Y.sup -7
+KPX quoteleft.sup W.sup -3
+KPX quoteleft.sup V.sup -3
+KPX quoteleft.sup T.sup -18
+KPX quoteleft.sup A.sup -83
+KPX a.sup y.sup -3
+KPX a.sup w.sup -5
+KPX a.sup v.sup -5
+KPX a.sup quoteright.sup -22
+KPX a.sup j.sup -2
+KPX b.sup y.sup -17
+KPX b.sup w.sup -12
+KPX b.sup v.sup -12
+KPX c.sup k.sup -16
+KPX c.sup h.sup -20
+KPX e.sup y.sup -6
+KPX e.sup x.sup -15
+KPX e.sup w.sup -3
+KPX e.sup v.sup -3
+KPX e.sup t.sup -3
+KPX e.sup quoteright.sup -12
+KPX f.sup t.sup 9
+KPX f.sup s.sup -14
+KPX f.sup quoteright.sup 12
+KPX f.sup o.sup -30
+KPX f.sup l.sup 43
+KPX f.sup j.sup 12
+KPX f.sup i.sup 20
+KPX f.sup f.sup 2
+KPX f.sup e.sup -35
+KPX f.sup a.sup -23
+KPX g.sup r.sup 3
+KPX g.sup l.sup -21
+KPX g.sup e.sup -32
+KPX g.sup a.sup -25
+KPX h.sup y.sup -20
+KPX h.sup quoteright.sup -32
+KPX i.sup j.sup -5
+KPX i.sup T.sup -20
+KPX k.sup u.sup 2
+KPX k.sup s.sup 1
+KPX k.sup period.sup 17
+KPX k.sup o.sup 1
+KPX k.sup hyphen.sup 1
+KPX k.sup g.sup -14
+KPX k.sup e.sup -2
+KPX k.sup comma.sup 19
+KPX k.sup a.sup 10
+KPX l.sup y.sup -8
+KPX l.sup v.sup -12
+KPX m.sup y.sup -16
+KPX m.sup w.sup -16
+KPX m.sup v.sup -16
+KPX m.sup p.sup -1
+KPX n.sup y.sup -20
+KPX n.sup w.sup -20
+KPX n.sup v.sup -20
+KPX n.sup quoteright.sup -32
+KPX n.sup p.sup -4
+KPX n.sup T.sup -59
+KPX o.sup y.sup -29
+KPX o.sup x.sup -26
+KPX o.sup w.sup -21
+KPX o.sup v.sup -21
+KPX o.sup t.sup -2
+KPX o.sup quoteright.sup -22
+KPX o.sup T.sup -75
+KPX p.sup y.sup -13
+KPX p.sup t.sup -2
+KPX q.sup u.sup -5
+KPX q.sup c.sup -6
+KPX r.sup z.sup 10
+KPX r.sup y.sup 20
+KPX r.sup x.sup 7
+KPX r.sup w.sup 20
+KPX r.sup v.sup 20
+KPX r.sup u.sup 11
+KPX r.sup t.sup 12
+KPX r.sup semicolon.sup -30
+KPX r.sup s.sup 1
+KPX r.sup r.sup 14
+KPX r.sup q.sup -19
+KPX r.sup period.sup -69
+KPX r.sup p.sup 16
+KPX r.sup o.sup -15
+KPX r.sup n.sup 6
+KPX r.sup m.sup 10
+KPX r.sup l.sup -12
+KPX r.sup k.sup -11
+KPX r.sup j.sup 12
+KPX r.sup i.sup 17
+KPX r.sup hyphen.sup -13
+KPX r.sup h.sup -16
+KPX r.sup g.sup -4
+KPX r.sup f.sup 8
+KPX r.sup e.sup -20
+KPX r.sup d.sup -14
+KPX r.sup comma.sup -67
+KPX r.sup colon.sup -30
+KPX r.sup c.sup -15
+KPX r.sup a.sup -13
+KPX s.sup t.sup -6
+KPX s.sup quoteright.sup -22
+KPX t.sup semicolon.sup -23
+KPX t.sup quoteright.sup -19
+KPX t.sup o.sup 1
+KPX t.sup h.sup -5
+KPX t.sup e.sup -2
+KPX t.sup colon.sup -22
+KPX t.sup a.sup 10
+KPX t.sup S.sup -11
+KPX u.sup quoteright.sup -33
+KPX v.sup semicolon.sup -51
+KPX v.sup s.sup -19
+KPX v.sup period.sup -51
+KPX v.sup o.sup -24
+KPX v.sup l.sup -24
+KPX v.sup hyphen.sup -1
+KPX v.sup g.sup -20
+KPX v.sup e.sup -28
+KPX v.sup comma.sup -51
+KPX v.sup colon.sup -51
+KPX v.sup c.sup -24
+KPX v.sup a.sup -20
+KPX w.sup semicolon.sup -56
+KPX w.sup s.sup -24
+KPX w.sup period.sup -53
+KPX w.sup o.sup -30
+KPX w.sup l.sup -28
+KPX w.sup hyphen.sup -7
+KPX w.sup g.sup -26
+KPX w.sup e.sup -34
+KPX w.sup comma.sup -53
+KPX w.sup colon.sup -56
+KPX w.sup c.sup -30
+KPX w.sup a.sup -24
+KPX x.sup q.sup -12
+KPX x.sup o.sup -11
+KPX x.sup e.sup -14
+KPX x.sup c.sup -10
+KPX x.sup a.sup -1
+KPX y.sup semicolon.sup -44
+KPX y.sup s.sup -13
+KPX y.sup period.sup -26
+KPX y.sup o.sup -17
+KPX y.sup l.sup -16
+KPX y.sup hyphen.sup 2
+KPX y.sup g.sup -23
+KPX y.sup e.sup -22
+KPX y.sup comma.sup -25
+KPX y.sup colon.sup -43
+KPX y.sup c.sup -17
+KPX y.sup a.sup -11
EndKernPairs
EndKernData
EndFontMetrics
diff --git a/fonts/newtx/afm/ntxsups-Italic.afm b/fonts/newtx/afm/ntxsups-Italic.afm
index 4f5ff3b7cd..63f7f2d3dd 100644
--- a/fonts/newtx/afm/ntxsups-Italic.afm
+++ b/fonts/newtx/afm/ntxsups-Italic.afm
@@ -1,589 +1,572 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20150126
-Comment Creation Date: Sat Jan 31 16:18:47 2015
+Comment Generated by FontForge 20190801
+Comment Creation Date: Sun Sep 1 13:42:10 2019
FontName ntxsups-Italic
FullName ntxsups Italic
FamilyName ntxsups
Weight Regular
-Notice (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development)
+Notice (Copyright 2006, 2009 for TeX Gyre extensions by B. Jackowski and J.M. Nowacki (on behalf of TeX users groups). This work is released under the GUST Font License -- see http://tug.org/fonts/licenses/G)
+Comment UST-FONT-LICENSE.txt for details.
Comment
-Comment Copyright 2015 Michael Sharpe, LPPL
+Comment Copyright 2015--2019 Michael Sharpe, under equivalent LPPL.
ItalicAngle -15.5
IsFixedPitch false
UnderlinePosition -100
UnderlineThickness 50
-Version 1.05
-EncodingScheme AdobeStandardEncoding
+Version 1.06
+EncodingScheme FontSpecific
FontBBox -15 134 719 732
CapHeight 653
-XHeight 535
-Ascender 679
-Descender 146
-StartCharMetrics 98
+XHeight 531
+Descender 145
+StartCharMetrics 99
+C 0 ; WX 0 ; N .notdef ; B 0 0 0 0 ;
C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 253 ; N exclam ; B 106 263 314 670 ;
-C 34 ; WX 302 ; N quotedbl ; B 175 518 392 673 ;
-C 35 ; WX 350 ; N numbersign ; B 82 270 458 678 ;
-C 36 ; WX 352 ; N dollar ; B 101 207 431 732 ;
-C 37 ; WX 603 ; N percent ; B 132 262 656 675 ;
-C 38 ; WX 569 ; N ampersand ; B 130 259 614 670 ;
-C 39 ; WX 227 ; N quoteright ; B 179 527 280 673 ;
-C 40 ; WX 228 ; N parenleft ; B 108 157 298 675 ;
-C 41 ; WX 229 ; N parenright ; B 91 158 281 675 ;
-C 42 ; WX 337 ; N asterisk ; B 164 413 413 673 ;
-C 43 ; WX 449 ; N plus ; B 137 270 475 577 ;
-C 44 ; WX 173 ; N comma ; B 78 166 179 356 ;
-C 45 ; WX 215 ; N hyphen ; B 113 377 264 429 ;
-C 46 ; WX 181 ; N period ; B 99 263 190 354 ;
-C 47 ; WX 225 ; N slash ; B 39 259 376 670 ;
-C 48 ; WX 352 ; N zero ; B 102 266 432 676 ;
-C 49 ; WX 360 ; N one ; B 113 270 352 672 ;
-C 50 ; WX 371 ; N two ; B 89 270 421 676 ;
-C 51 ; WX 348 ; N three ; B 91 266 408 676 ;
-C 52 ; WX 379 ; N four ; B 82 270 447 681 ;
-C 53 ; WX 334 ; N five ; B 91 266 410 670 ;
-C 54 ; WX 352 ; N six ; B 101 266 447 682 ;
-C 55 ; WX 336 ; N seven ; B 130 265 442 670 ;
-C 56 ; WX 378 ; N eight ; B 101 266 455 676 ;
-C 57 ; WX 352 ; N nine ; B 96 260 428 676 ;
-C 58 ; WX 252 ; N colon ; B 113 263 287 535 ;
-C 59 ; WX 251 ; N semicolon ; B 99 180 286 547 ;
-C 60 ; WX 453 ; N less ; B 136 264 481 601 ;
-C 61 ; WX 439 ; N equal ; B 137 334 465 509 ;
-C 62 ; WX 453 ; N greater ; B 136 264 481 595 ;
-C 63 ; WX 357 ; N question ; B 167 263 421 668 ;
-C 64 ; WX 636 ; N at ; B 158 259 644 670 ;
-C 65 ; WX 438 ; N A ; B 48 270 489 671 ;
-C 66 ; WX 475 ; N B ; B 76 270 542 662 ;
-C 67 ; WX 458 ; N C ; B 124 259 554 670 ;
-C 68 ; WX 540 ; N D ; B 76 270 607 662 ;
-C 69 ; WX 469 ; N E ; B 80 270 565 662 ;
-C 70 ; WX 446 ; N F ; B 86 270 549 662 ;
-C 71 ; WX 504 ; N G ; B 115 259 586 670 ;
-C 72 ; WX 506 ; N H ; B 76 270 617 662 ;
-C 73 ; WX 222 ; N I ; B 76 270 337 662 ;
-C 74 ; WX 361 ; N J ; B 77 259 473 662 ;
-C 75 ; WX 484 ; N K ; B 86 270 602 662 ;
-C 76 ; WX 397 ; N L ; B 76 270 481 662 ;
-C 77 ; WX 598 ; N M ; B 69 270 705 662 ;
-C 78 ; WX 471 ; N N ; B 68 261 592 662 ;
-C 79 ; WX 505 ; N O ; B 120 259 572 670 ;
-C 80 ; WX 445 ; N P ; B 81 270 523 662 ;
-C 81 ; WX 505 ; N Q ; B 119 152 571 676 ;
-C 82 ; WX 467 ; N R ; B 73 270 534 662 ;
-C 83 ; WX 366 ; N S ; B 92 259 453 671 ;
-C 84 ; WX 402 ; N T ; B 119 270 533 662 ;
-C 85 ; WX 502 ; N U ; B 147 259 612 662 ;
-C 86 ; WX 445 ; N V ; B 130 259 576 662 ;
-C 87 ; WX 590 ; N W ; B 127 259 719 662 ;
-C 88 ; WX 439 ; N X ; B 62 270 549 662 ;
-C 89 ; WX 405 ; N Y ; B 132 270 537 662 ;
-C 90 ; WX 448 ; N Z ; B 77 270 562 662 ;
-C 91 ; WX 279 ; N bracketleft ; B 95 172 362 673 ;
-C 92 ; WX 221 ; N backslash ; B 54 259 329 670 ;
-C 93 ; WX 276 ; N bracketright ; B 89 172 353 673 ;
-C 94 ; WX 328 ; N asciicircum ; B 81 442 410 678 ;
-C 95 ; WX 325 ; N underscore ; B 81 185 406 234 ;
-C 96 ; WX 227 ; N quoteleft ; B 192 527 293 673 ;
-C 97 ; WX 351 ; N a ; B 92 263 417 535 ;
-C 98 ; WX 354 ; N b ; B 96 263 418 680 ;
-C 99 ; WX 315 ; N c ; B 101 263 385 535 ;
-C 100 ; WX 370 ; N d ; B 91 262 442 678 ;
-C 101 ; WX 313 ; N e ; B 101 263 374 535 ;
-C 102 ; WX 225 ; N f ; B -15 141 401 681 ;
-C 103 ; WX 370 ; N g ; B 86 141 433 539 ;
-C 104 ; WX 377 ; N h ; B 93 265 444 677 ;
-C 105 ; WX 218 ; N i ; B 113 263 267 662 ;
-C 106 ; WX 230 ; N j ; B 0 140 290 674 ;
-C 107 ; WX 316 ; N k ; B 90 263 408 680 ;
-C 108 ; WX 211 ; N l ; B 107 263 269 677 ;
-C 109 ; WX 545 ; N m ; B 89 265 614 537 ;
-C 110 ; WX 375 ; N n ; B 90 265 440 535 ;
-C 111 ; WX 353 ; N o ; B 99 263 414 535 ;
-C 112 ; WX 375 ; N p ; B 32 147 436 535 ;
-C 113 ; WX 352 ; N q ; B 97 145 423 531 ;
-C 114 ; WX 265 ; N r ; B 110 270 362 535 ;
-C 115 ; WX 295 ; N s ; B 91 262 361 536 ;
-C 116 ; WX 185 ; N t ; B 105 263 278 602 ;
-C 117 ; WX 392 ; N u ; B 108 263 457 533 ;
-C 118 ; WX 309 ; N v ; B 95 259 379 535 ;
-C 119 ; WX 478 ; N w ; B 91 259 547 535 ;
-C 120 ; WX 307 ; N x ; B 63 263 391 535 ;
-C 121 ; WX 302 ; N y ; B 65 139 371 542 ;
-C 122 ; WX 310 ; N z ; B 80 221 386 527 ;
-C 123 ; WX 264 ; N braceleft ; B 114 161 350 684 ;
-C 124 ; WX 189 ; N bar ; B 149 259 203 670 ;
-C 125 ; WX 303 ; N braceright ; B 76 159 335 686 ;
-C 126 ; WX 351 ; N asciitilde ; B 107 373 407 469 ;
-C 161 ; WX 289 ; N exclamdown ; B 119 134 326 566 ;
-C -1 ; WX 314 ; N eacute ; B 101 263 405 668 ;
-C -1 ; WX 313 ; N egrave ; B 101 263 374 668 ;
+C 33 ; WX 253 ; N exclam.sup ; B 106 263 314 670 ;
+C 34 ; WX 302 ; N quotedbl.sup ; B 175 518 392 673 ;
+C 35 ; WX 350 ; N numbersign.sup ; B 82 270 458 678 ;
+C 36 ; WX 352 ; N dollar.sup ; B 101 207 431 732 ;
+C 37 ; WX 603 ; N percent.sup ; B 132 262 656 675 ;
+C 38 ; WX 569 ; N ampersand.sup ; B 130 259 614 670 ;
+C 39 ; WX 227 ; N quoteright.sup ; B 179 527 280 673 ;
+C 40 ; WX 228 ; N parenleft.sup ; B 108 157 298 675 ;
+C 41 ; WX 229 ; N parenright.sup ; B 91 158 281 675 ;
+C 42 ; WX 337 ; N asterisk.sup ; B 164 413 413 673 ;
+C 43 ; WX 449 ; N plus.sup ; B 137 270 475 577 ;
+C 44 ; WX 173 ; N comma.sup ; B 78 166 179 356 ;
+C 45 ; WX 215 ; N hyphen.sup ; B 113 377 264 429 ;
+C 46 ; WX 181 ; N period.sup ; B 99 263 190 354 ;
+C 47 ; WX 225 ; N slash.sup ; B 39 259 376 670 ;
+C 48 ; WX 352 ; N zero.sup ; B 102 266 432 676 ;
+C 49 ; WX 360 ; N one.sup ; B 113 270 352 672 ;
+C 50 ; WX 371 ; N two.sup ; B 89 270 421 676 ;
+C 51 ; WX 348 ; N three.sup ; B 91 266 408 676 ;
+C 52 ; WX 379 ; N four.sup ; B 82 270 447 681 ;
+C 53 ; WX 334 ; N five.sup ; B 91 266 410 670 ;
+C 54 ; WX 352 ; N six.sup ; B 101 266 447 682 ;
+C 55 ; WX 336 ; N seven.sup ; B 130 265 442 670 ;
+C 56 ; WX 378 ; N eight.sup ; B 101 266 455 676 ;
+C 57 ; WX 352 ; N nine.sup ; B 96 260 428 676 ;
+C 58 ; WX 252 ; N colon.sup ; B 113 263 287 535 ;
+C 59 ; WX 251 ; N semicolon.sup ; B 99 180 286 547 ;
+C 60 ; WX 453 ; N less.sup ; B 136 264 481 601 ;
+C 61 ; WX 439 ; N equal.sup ; B 137 334 465 509 ;
+C 62 ; WX 453 ; N greater.sup ; B 136 264 481 595 ;
+C 63 ; WX 357 ; N question.sup ; B 167 263 421 668 ;
+C 64 ; WX 636 ; N at.sup ; B 158 259 644 670 ;
+C 65 ; WX 438 ; N A.sup ; B 48 270 489 671 ;
+C 66 ; WX 475 ; N B.sup ; B 76 270 542 662 ;
+C 67 ; WX 458 ; N C.sup ; B 124 259 554 670 ;
+C 68 ; WX 540 ; N D.sup ; B 76 270 607 662 ;
+C 69 ; WX 469 ; N E.sup ; B 80 270 565 662 ;
+C 70 ; WX 446 ; N F.sup ; B 86 270 549 662 ;
+C 71 ; WX 504 ; N G.sup ; B 115 259 586 670 ;
+C 72 ; WX 506 ; N H.sup ; B 76 270 617 662 ;
+C 73 ; WX 222 ; N I.sup ; B 76 270 337 662 ;
+C 74 ; WX 361 ; N J.sup ; B 77 259 473 662 ;
+C 75 ; WX 484 ; N K.sup ; B 86 270 602 662 ;
+C 76 ; WX 397 ; N L.sup ; B 76 270 481 662 ;
+C 77 ; WX 598 ; N M.sup ; B 69 270 705 662 ;
+C 78 ; WX 471 ; N N.sup ; B 68 261 592 662 ;
+C 79 ; WX 505 ; N O.sup ; B 120 259 572 670 ;
+C 80 ; WX 445 ; N P.sup ; B 81 270 523 662 ;
+C 81 ; WX 505 ; N Q.sup ; B 119 152 571 676 ;
+C 82 ; WX 467 ; N R.sup ; B 73 270 534 662 ;
+C 83 ; WX 366 ; N S.sup ; B 92 259 453 671 ;
+C 84 ; WX 402 ; N T.sup ; B 109 270 523 662 ;
+C 85 ; WX 502 ; N U.sup ; B 147 259 612 662 ;
+C 86 ; WX 445 ; N V.sup ; B 130 259 576 662 ;
+C 87 ; WX 590 ; N W.sup ; B 127 259 719 662 ;
+C 88 ; WX 439 ; N X.sup ; B 62 270 549 662 ;
+C 89 ; WX 405 ; N Y.sup ; B 132 270 537 662 ;
+C 90 ; WX 448 ; N Z.sup ; B 77 270 562 662 ;
+C 91 ; WX 279 ; N bracketleft.sup ; B 95 172 362 673 ;
+C 92 ; WX 221 ; N backslash.sup ; B 54 259 329 670 ;
+C 93 ; WX 276 ; N bracketright.sup ; B 89 172 353 673 ;
+C 94 ; WX 328 ; N asciicircum.sup ; B 81 442 410 678 ;
+C 95 ; WX 325 ; N underscore.sup ; B 81 185 406 234 ;
+C 96 ; WX 227 ; N quoteleft.sup ; B 192 527 293 673 ;
+C 97 ; WX 351 ; N a.sup ; B 92 263 417 535 ;
+C 98 ; WX 354 ; N b.sup ; B 96 263 418 680 ;
+C 99 ; WX 315 ; N c.sup ; B 101 263 385 535 ;
+C 100 ; WX 370 ; N d.sup ; B 91 262 442 678 ;
+C 101 ; WX 313 ; N e.sup ; B 101 263 374 535 ;
+C 102 ; WX 225 ; N f.sup ; B -15 141 401 681 ;
+C 103 ; WX 370 ; N g.sup ; B 86 141 433 539 ;
+C 104 ; WX 377 ; N h.sup ; B 93 265 444 677 ;
+C 105 ; WX 218 ; N i.sup ; B 113 263 267 662 ;
+C 106 ; WX 230 ; N j.sup ; B 0 140 290 674 ;
+C 107 ; WX 316 ; N k.sup ; B 90 263 408 680 ;
+C 108 ; WX 211 ; N l.sup ; B 107 263 269 677 ;
+C 109 ; WX 545 ; N m.sup ; B 89 265 614 537 ;
+C 110 ; WX 375 ; N n.sup ; B 90 265 440 535 ;
+C 111 ; WX 353 ; N o.sup ; B 99 263 414 535 ;
+C 112 ; WX 375 ; N p.sup ; B 32 147 436 535 ;
+C 113 ; WX 352 ; N q.sup ; B 97 145 423 531 ;
+C 114 ; WX 265 ; N r.sup ; B 110 270 362 535 ;
+C 115 ; WX 295 ; N s.sup ; B 91 262 361 536 ;
+C 116 ; WX 185 ; N t.sup ; B 105 263 278 602 ;
+C 117 ; WX 392 ; N u.sup ; B 108 263 457 533 ;
+C 118 ; WX 309 ; N v.sup ; B 95 259 379 535 ;
+C 119 ; WX 478 ; N w.sup ; B 91 259 547 535 ;
+C 120 ; WX 307 ; N x.sup ; B 63 263 391 535 ;
+C 121 ; WX 302 ; N y.sup ; B 65 139 371 542 ;
+C 122 ; WX 310 ; N z.sup ; B 80 221 386 527 ;
+C 123 ; WX 264 ; N braceleft.sup ; B 114 161 350 684 ;
+C 124 ; WX 189 ; N bar.sup ; B 149 259 203 670 ;
+C 125 ; WX 303 ; N braceright.sup ; B 76 159 335 686 ;
+C 126 ; WX 351 ; N asciitilde.sup ; B 107 373 407 469 ;
+C 161 ; WX 289 ; N exclamdown.sup ; B 119 134 326 566 ;
+C 232 ; WX 313 ; N egrave.sup ; B 101 263 374 668 ;
+C 233 ; WX 314 ; N eacute.sup ; B 101 263 405 668 ;
EndCharMetrics
StartKernData
-StartKernPairs 463
-KPX quoteright y -28
-KPX quoteright w -26
-KPX quoteright v -28
-KPX quoteright t -49
-KPX quoteright s -63
-KPX quoteright r -57
-KPX quoteright period -78
-KPX quoteright o -78
-KPX quoteright d -79
-KPX quoteright comma -73
-KPX quoteright A -87
-KPX comma quoteright -39
-KPX comma one -40
-KPX hyphen Y -53
-KPX hyphen W -34
-KPX hyphen V -43
-KPX hyphen T -46
-KPX hyphen A 3
-KPX period quoteright -38
-KPX period one -39
-KPX zero seven -3
-KPX zero one -50
-KPX zero four 14
-KPX one zero -41
-KPX one two -50
-KPX one three -55
-KPX one six -50
-KPX one seven -60
-KPX one period -56
-KPX one one -69
-KPX one nine -61
-KPX one four -69
-KPX one five -55
-KPX one eight -57
-KPX one comma -52
-KPX two seven -22
-KPX two one -45
-KPX two four -12
-KPX three seven -15
-KPX three one -76
-KPX three four -9
-KPX four seven -27
-KPX four one -69
-KPX four four 12
-KPX five seven -28
-KPX five one -71
-KPX five four -5
-KPX six seven -37
-KPX six one -64
-KPX six four 17
-KPX seven two -13
-KPX seven three -42
-KPX seven six -37
-KPX seven seven -11
-KPX seven period -83
-KPX seven one -47
-KPX seven four -65
-KPX seven five -53
-KPX seven eight -32
-KPX seven comma -79
-KPX seven colon -88
-KPX eight seven -1
-KPX eight one -50
-KPX eight four 13
-KPX nine seven -5
-KPX nine one -64
-KPX nine four 2
-KPX A y -57
-KPX A w -44
-KPX A v -50
-KPX A u -9
-KPX A t -6
-KPX A quoteright -92
-KPX A q -12
-KPX A period 8
-KPX A o -17
-KPX A hyphen -13
-KPX A g -25
-KPX A e -17
-KPX A d -4
-KPX A comma 8
-KPX A c -18
-KPX A a -4
-KPX A Y -21
-KPX A W -75
-KPX A V -81
-KPX A U -57
-KPX A T -14
-KPX A Q -44
-KPX A O -45
-KPX A G -44
-KPX A C -50
-KPX B Y -39
-KPX B W -29
-KPX B V -32
-KPX B O -14
-KPX B A -23
-KPX C O -19
-KPX C K -21
-KPX C H -13
-KPX C A -14
-KPX D Y -50
-KPX D X -40
-KPX D W -36
-KPX D V -42
-KPX D T -9
-KPX D J -32
-KPX D A -36
-KPX F u -50
-KPX F r -52
-KPX F period -99
-KPX F o -79
-KPX F j -41
-KPX F i -36
-KPX F hyphen -45
-KPX F eacute -83
-KPX F e -83
-KPX F comma -95
-KPX F a -77
-KPX F O -40
-KPX F J -60
-KPX F A -72
-KPX G Y -12
-KPX G W -2
-KPX G V -5
-KPX G T -13
-KPX G A -17
-KPX J A -40
-KPX K y -89
-KPX K u -10
-KPX K o -18
-KPX K hyphen -57
-KPX K e -18
-KPX K a -5
-KPX K T 21
-KPX K S 6
-KPX K O -46
-KPX K G -53
-KPX K C -55
-KPX L y -26
-KPX L u 12
-KPX L quoteright -92
-KPX L hyphen 47
-KPX L Y -20
-KPX L W -48
-KPX L V -55
-KPX L U -8
-KPX L T -13
-KPX L S 20
-KPX L O 10
-KPX L G 11
-KPX L C 6
-KPX L A 44
-KPX N u -24
-KPX N period -16
-KPX N o -25
-KPX N eacute -30
-KPX N e -28
-KPX N comma -13
-KPX N a -22
-KPX N O -20
-KPX N G -14
-KPX N C -21
-KPX N A -20
-KPX O Y -51
-KPX O X -41
-KPX O W -39
-KPX O V -45
-KPX O T -3
-KPX O A -38
-KPX P period -121
-KPX P o -73
-KPX P hyphen -64
-KPX P eacute -79
-KPX P e -79
-KPX P comma -118
-KPX P a -74
-KPX P J -89
-KPX P A -79
-KPX R u -7
-KPX R o -15
-KPX R hyphen -29
-KPX R eacute -15
-KPX R e -15
-KPX R a -3
-KPX R Y -19
-KPX R W -28
-KPX R V -31
-KPX R U -36
-KPX R O -26
-KPX R G -20
-KPX R C -26
-KPX S t -13
-KPX S Y -1
-KPX S W 8
-KPX S V 5
-KPX S T 1
-KPX S A -2
-KPX T y -70
-KPX T w -69
-KPX T v -72
-KPX T u -86
-KPX T semicolon -92
-KPX T s -74
-KPX T r -87
-KPX T period -71
-KPX T o -87
-KPX T j -20
-KPX T i -16
-KPX T hyphen -68
-KPX T g -102
-KPX T e -90
-KPX T comma -70
-KPX T colon -84
-KPX T c -86
-KPX T a -81
-KPX T Y 33
-KPX T W 43
-KPX T V 41
-KPX T S -2
-KPX T O -20
-KPX T J -39
-KPX T G -7
-KPX T C -15
-KPX T A -33
-KPX U r -41
-KPX U period -39
-KPX U p -32
-KPX U n -29
-KPX U m -28
-KPX U comma -35
-KPX U A -50
-KPX V y -16
-KPX V u -40
-KPX V semicolon -79
-KPX V r -45
-KPX V period -80
-KPX V o -70
-KPX V i -16
-KPX V hyphen -45
-KPX V g -84
-KPX V e -74
-KPX V comma -76
-KPX V colon -82
-KPX V a -67
-KPX V T 32
-KPX V S -15
-KPX V O -48
-KPX V G -42
-KPX V C -48
-KPX V A -66
-KPX W y -11
-KPX W u -35
-KPX W semicolon -74
-KPX W r -40
-KPX W period -62
-KPX W o -56
-KPX W i -18
-KPX W hyphen -32
-KPX W g -75
-KPX W e -60
-KPX W comma -58
-KPX W colon -77
-KPX W a -53
-KPX W T 30
-KPX W S -17
-KPX W O -39
-KPX W G -33
-KPX W C -39
-KPX W A -57
-KPX X y -67
-KPX X u -7
-KPX X o -15
-KPX X hyphen -41
-KPX X e -15
-KPX X a -3
-KPX X Q -42
-KPX X O -44
-KPX X C -50
-KPX Y v -32
-KPX Y u -58
-KPX Y semicolon -86
-KPX Y period -65
-KPX Y p -52
-KPX Y o -75
-KPX Y i -16
-KPX Y hyphen -60
-KPX Y g -94
-KPX Y e -78
-KPX Y comma -64
-KPX Y colon -78
-KPX Y a -72
-KPX Y T 32
-KPX Y S -15
-KPX Y O -52
-KPX Y G -45
-KPX Y C -52
-KPX Y A -27
-KPX Z y -28
-KPX Z v -12
-KPX quoteleft Y -15
-KPX quoteleft W -5
-KPX quoteleft V -8
-KPX quoteleft T -9
-KPX quoteleft A -78
-KPX a y 2
-KPX a w 4
-KPX a v 1
-KPX a quoteright -28
-KPX a j -22
-KPX b y -3
-KPX b w -7
-KPX b v -10
-KPX c k -29
-KPX c h -30
-KPX e y 4
-KPX e x -10
-KPX e w 2
-KPX e t -16
-KPX e quoteright -21
-KPX f t 18
-KPX f s -20
-KPX f quoteright 18
-KPX f o -29
-KPX f l 42
-KPX f j 13
-KPX f i 17
-KPX f f 30
-KPX f eacute -34
-KPX f e -32
-KPX f a -26
-KPX g r -21
-KPX g l -46
-KPX g eacute -45
-KPX g e -45
-KPX g a -41
-KPX h y -4
-KPX h quoteright -31
-KPX i j -31
-KPX i T -10
-KPX k u 8
-KPX k s 7
-KPX k period 26
-KPX k o 6
-KPX k hyphen -27
-KPX k g -27
-KPX k eacute 5
-KPX k e 5
-KPX k comma 27
-KPX k a 12
-KPX l y -11
-KPX l v -12
-KPX m y -3
-KPX m w -4
-KPX m v -6
-KPX m p -4
-KPX n y -6
-KPX n w -7
-KPX n v -10
-KPX n quoteright -34
-KPX n p -7
-KPX n T -41
-KPX o y -10
-KPX o x -33
-KPX o w -15
-KPX o v -18
-KPX o t -15
-KPX o quoteright -24
-KPX o T -63
-KPX p y -4
-KPX p t -14
-KPX q u -11
-KPX q c -13
-KPX r y 33
-KPX r x 7
-KPX r w 32
-KPX r v 30
-KPX r u 11
-KPX r t 12
-KPX r semicolon -28
-KPX r s -17
-KPX r r 4
-KPX r quoteright -4
-KPX r q -31
-KPX r period -72
-KPX r p 13
-KPX r o -28
-KPX r n 16
-KPX r m 17
-KPX r l -21
-KPX r k -15
-KPX r j 4
-KPX r i 8
-KPX r hyphen -52
-KPX r h -17
-KPX r g -21
-KPX r f 23
-KPX r egrave -35
-KPX r eacute -35
-KPX r e -35
-KPX r d -31
-KPX r comma -68
-KPX r colon -28
-KPX r c -26
-KPX r a -29
-KPX s t -12
-KPX s quoteright -20
-KPX t semicolon -26
-KPX t quoteright -19
-KPX t o -11
-KPX t h -11
-KPX t eacute -13
-KPX t e -13
-KPX t colon -29
-KPX t a -6
-KPX t S -9
-KPX u quoteright -31
-KPX v semicolon -48
-KPX v s -30
-KPX v period -51
-KPX v o -26
-KPX v l -29
-KPX v g -36
-KPX v egrave -32
-KPX v eacute -32
-KPX v e -30
-KPX v comma -46
-KPX v colon -48
-KPX v c -26
-KPX v a -24
-KPX w semicolon -49
-KPX w s -32
-KPX w period -51
-KPX w o -28
-KPX w l -30
-KPX w hyphen -4
-KPX w g -38
-KPX w egrave -34
-KPX w eacute -34
-KPX w e -32
-KPX w comma -47
-KPX w colon -49
-KPX w c -28
-KPX w a -26
-KPX x q 2
-KPX x o 1
-KPX x a 6
-KPX y semicolon -45
-KPX y s -19
-KPX y period -25
-KPX y o -15
-KPX y l -18
-KPX y hyphen 7
-KPX y g -34
-KPX y egrave -19
-KPX y eacute -19
-KPX y e -19
-KPX y comma -21
-KPX y colon -48
-KPX y c -15
-KPX y a -12
-KPX eacute y 4
-KPX eacute w 2
+StartKernPairs 445
+KPX quoteright.sup A.sup -87
+KPX quoteright.sup comma.sup -73
+KPX quoteright.sup d.sup -79
+KPX quoteright.sup o.sup -78
+KPX quoteright.sup period.sup -78
+KPX quoteright.sup r.sup -57
+KPX quoteright.sup s.sup -63
+KPX quoteright.sup t.sup -49
+KPX quoteright.sup v.sup -28
+KPX quoteright.sup w.sup -26
+KPX quoteright.sup y.sup -28
+KPX comma.sup quoteright.sup -39
+KPX comma.sup one.sup -40
+KPX hyphen.sup Y.sup -53
+KPX hyphen.sup W.sup -34
+KPX hyphen.sup V.sup -43
+KPX hyphen.sup T.sup -46
+KPX hyphen.sup A.sup 3
+KPX period.sup one.sup -39
+KPX period.sup quoteright.sup -38
+KPX zero.sup four.sup 14
+KPX zero.sup one.sup -50
+KPX zero.sup seven.sup -3
+KPX one.sup zero.sup -41
+KPX one.sup two.sup -50
+KPX one.sup three.sup -55
+KPX one.sup six.sup -50
+KPX one.sup seven.sup -60
+KPX one.sup period.sup -56
+KPX one.sup one.sup -69
+KPX one.sup nine.sup -61
+KPX one.sup four.sup -69
+KPX one.sup five.sup -55
+KPX one.sup eight.sup -57
+KPX one.sup comma.sup -52
+KPX two.sup seven.sup -22
+KPX two.sup one.sup -45
+KPX two.sup four.sup -12
+KPX three.sup seven.sup -15
+KPX three.sup one.sup -76
+KPX three.sup four.sup -9
+KPX four.sup four.sup 12
+KPX four.sup one.sup -69
+KPX four.sup seven.sup -27
+KPX five.sup four.sup -5
+KPX five.sup one.sup -71
+KPX five.sup seven.sup -28
+KPX six.sup four.sup 17
+KPX six.sup one.sup -64
+KPX six.sup seven.sup -37
+KPX seven.sup colon.sup -88
+KPX seven.sup comma.sup -79
+KPX seven.sup eight.sup -32
+KPX seven.sup five.sup -53
+KPX seven.sup four.sup -65
+KPX seven.sup one.sup -47
+KPX seven.sup period.sup -83
+KPX seven.sup seven.sup -11
+KPX seven.sup six.sup -37
+KPX seven.sup three.sup -42
+KPX seven.sup two.sup -13
+KPX eight.sup four.sup 13
+KPX eight.sup one.sup -50
+KPX eight.sup seven.sup -1
+KPX nine.sup four.sup 2
+KPX nine.sup one.sup -64
+KPX nine.sup seven.sup -5
+KPX A.sup C.sup -50
+KPX A.sup G.sup -44
+KPX A.sup O.sup -45
+KPX A.sup Q.sup -44
+KPX A.sup T.sup -14
+KPX A.sup U.sup -57
+KPX A.sup V.sup -81
+KPX A.sup W.sup -75
+KPX A.sup Y.sup -21
+KPX A.sup a.sup -4
+KPX A.sup c.sup -18
+KPX A.sup comma.sup 8
+KPX A.sup d.sup -4
+KPX A.sup e.sup -17
+KPX A.sup g.sup -25
+KPX A.sup hyphen.sup -13
+KPX A.sup o.sup -17
+KPX A.sup period.sup 8
+KPX A.sup q.sup -12
+KPX A.sup quoteright.sup -92
+KPX A.sup t.sup -6
+KPX A.sup u.sup -9
+KPX A.sup v.sup -50
+KPX A.sup w.sup -44
+KPX A.sup y.sup -57
+KPX B.sup A.sup -23
+KPX B.sup O.sup -14
+KPX B.sup V.sup -32
+KPX B.sup W.sup -29
+KPX B.sup Y.sup -39
+KPX C.sup O.sup -19
+KPX C.sup K.sup -21
+KPX C.sup H.sup -13
+KPX C.sup A.sup -14
+KPX D.sup Y.sup -50
+KPX D.sup X.sup -40
+KPX D.sup W.sup -36
+KPX D.sup V.sup -42
+KPX D.sup T.sup -9
+KPX D.sup J.sup -32
+KPX D.sup A.sup -36
+KPX F.sup u.sup -50
+KPX F.sup r.sup -52
+KPX F.sup period.sup -99
+KPX F.sup o.sup -79
+KPX F.sup j.sup -41
+KPX F.sup i.sup -36
+KPX F.sup hyphen.sup -45
+KPX F.sup e.sup -83
+KPX F.sup comma.sup -95
+KPX F.sup a.sup -77
+KPX F.sup O.sup -40
+KPX F.sup J.sup -60
+KPX F.sup A.sup -72
+KPX G.sup A.sup -17
+KPX G.sup T.sup -13
+KPX G.sup V.sup -5
+KPX G.sup W.sup -2
+KPX G.sup Y.sup -12
+KPX J.sup A.sup -40
+KPX K.sup C.sup -55
+KPX K.sup G.sup -53
+KPX K.sup O.sup -46
+KPX K.sup S.sup 6
+KPX K.sup T.sup 21
+KPX K.sup a.sup -5
+KPX K.sup e.sup -18
+KPX K.sup hyphen.sup -57
+KPX K.sup o.sup -18
+KPX K.sup u.sup -10
+KPX K.sup y.sup -89
+KPX L.sup A.sup 44
+KPX L.sup C.sup 6
+KPX L.sup G.sup 11
+KPX L.sup O.sup 10
+KPX L.sup S.sup 20
+KPX L.sup T.sup -13
+KPX L.sup U.sup -8
+KPX L.sup V.sup -55
+KPX L.sup W.sup -48
+KPX L.sup Y.sup -20
+KPX L.sup hyphen.sup 47
+KPX L.sup quoteright.sup -92
+KPX L.sup u.sup 12
+KPX L.sup y.sup -26
+KPX N.sup A.sup -20
+KPX N.sup C.sup -21
+KPX N.sup G.sup -14
+KPX N.sup O.sup -20
+KPX N.sup a.sup -22
+KPX N.sup comma.sup -13
+KPX N.sup e.sup -28
+KPX N.sup o.sup -25
+KPX N.sup period.sup -16
+KPX N.sup u.sup -24
+KPX O.sup A.sup -38
+KPX O.sup T.sup -3
+KPX O.sup V.sup -45
+KPX O.sup W.sup -39
+KPX O.sup X.sup -41
+KPX O.sup Y.sup -51
+KPX P.sup A.sup -79
+KPX P.sup J.sup -89
+KPX P.sup a.sup -74
+KPX P.sup comma.sup -118
+KPX P.sup e.sup -79
+KPX P.sup hyphen.sup -64
+KPX P.sup o.sup -73
+KPX P.sup period.sup -121
+KPX R.sup u.sup -7
+KPX R.sup o.sup -15
+KPX R.sup hyphen.sup -29
+KPX R.sup e.sup -15
+KPX R.sup a.sup -3
+KPX R.sup Y.sup -19
+KPX R.sup W.sup -28
+KPX R.sup V.sup -31
+KPX R.sup U.sup -36
+KPX R.sup O.sup -26
+KPX R.sup G.sup -20
+KPX R.sup C.sup -26
+KPX S.sup t.sup -13
+KPX S.sup Y.sup -1
+KPX S.sup W.sup 8
+KPX S.sup V.sup 5
+KPX S.sup T.sup 1
+KPX S.sup A.sup -2
+KPX T.sup y.sup -70
+KPX T.sup w.sup -69
+KPX T.sup v.sup -72
+KPX T.sup u.sup -86
+KPX T.sup semicolon.sup -92
+KPX T.sup s.sup -74
+KPX T.sup r.sup -87
+KPX T.sup period.sup -71
+KPX T.sup o.sup -87
+KPX T.sup j.sup -20
+KPX T.sup i.sup -16
+KPX T.sup hyphen.sup -68
+KPX T.sup g.sup -102
+KPX T.sup e.sup -90
+KPX T.sup comma.sup -70
+KPX T.sup colon.sup -84
+KPX T.sup c.sup -86
+KPX T.sup a.sup -81
+KPX T.sup Y.sup 33
+KPX T.sup W.sup 43
+KPX T.sup V.sup 41
+KPX T.sup S.sup -2
+KPX T.sup O.sup -20
+KPX T.sup J.sup -39
+KPX T.sup G.sup -7
+KPX T.sup C.sup -15
+KPX T.sup A.sup -33
+KPX U.sup r.sup -41
+KPX U.sup period.sup -39
+KPX U.sup p.sup -32
+KPX U.sup n.sup -29
+KPX U.sup m.sup -28
+KPX U.sup comma.sup -35
+KPX U.sup A.sup -50
+KPX V.sup A.sup -66
+KPX V.sup C.sup -48
+KPX V.sup G.sup -42
+KPX V.sup O.sup -48
+KPX V.sup S.sup -15
+KPX V.sup T.sup 32
+KPX V.sup a.sup -67
+KPX V.sup colon.sup -82
+KPX V.sup comma.sup -76
+KPX V.sup e.sup -74
+KPX V.sup g.sup -84
+KPX V.sup hyphen.sup -45
+KPX V.sup i.sup -16
+KPX V.sup o.sup -70
+KPX V.sup period.sup -80
+KPX V.sup r.sup -45
+KPX V.sup semicolon.sup -79
+KPX V.sup u.sup -40
+KPX V.sup y.sup -16
+KPX W.sup y.sup -11
+KPX W.sup u.sup -35
+KPX W.sup semicolon.sup -74
+KPX W.sup r.sup -40
+KPX W.sup period.sup -62
+KPX W.sup o.sup -56
+KPX W.sup i.sup -18
+KPX W.sup hyphen.sup -32
+KPX W.sup g.sup -75
+KPX W.sup e.sup -60
+KPX W.sup comma.sup -58
+KPX W.sup colon.sup -77
+KPX W.sup a.sup -53
+KPX W.sup T.sup 30
+KPX W.sup S.sup -17
+KPX W.sup O.sup -39
+KPX W.sup G.sup -33
+KPX W.sup C.sup -39
+KPX W.sup A.sup -57
+KPX X.sup y.sup -67
+KPX X.sup u.sup -7
+KPX X.sup o.sup -15
+KPX X.sup hyphen.sup -41
+KPX X.sup e.sup -15
+KPX X.sup a.sup -3
+KPX X.sup Q.sup -42
+KPX X.sup O.sup -44
+KPX X.sup C.sup -50
+KPX Y.sup v.sup -32
+KPX Y.sup u.sup -58
+KPX Y.sup semicolon.sup -86
+KPX Y.sup period.sup -65
+KPX Y.sup p.sup -52
+KPX Y.sup o.sup -75
+KPX Y.sup i.sup -16
+KPX Y.sup hyphen.sup -60
+KPX Y.sup g.sup -94
+KPX Y.sup e.sup -78
+KPX Y.sup comma.sup -64
+KPX Y.sup colon.sup -78
+KPX Y.sup a.sup -72
+KPX Y.sup T.sup 32
+KPX Y.sup S.sup -15
+KPX Y.sup O.sup -52
+KPX Y.sup G.sup -45
+KPX Y.sup C.sup -52
+KPX Y.sup A.sup -27
+KPX Z.sup y.sup -28
+KPX Z.sup v.sup -12
+KPX quoteleft.sup A.sup -78
+KPX quoteleft.sup T.sup -9
+KPX quoteleft.sup V.sup -8
+KPX quoteleft.sup W.sup -5
+KPX quoteleft.sup Y.sup -15
+KPX a.sup j.sup -22
+KPX a.sup quoteright.sup -28
+KPX a.sup v.sup 1
+KPX a.sup w.sup 4
+KPX a.sup y.sup 2
+KPX b.sup v.sup -10
+KPX b.sup w.sup -7
+KPX b.sup y.sup -3
+KPX c.sup h.sup -30
+KPX c.sup k.sup -29
+KPX e.sup quoteright.sup -21
+KPX e.sup t.sup -16
+KPX e.sup w.sup 2
+KPX e.sup x.sup -10
+KPX e.sup y.sup 4
+KPX f.sup a.sup -26
+KPX f.sup e.sup -32
+KPX f.sup f.sup 30
+KPX f.sup i.sup 17
+KPX f.sup j.sup 13
+KPX f.sup l.sup 42
+KPX f.sup o.sup -29
+KPX f.sup quoteright.sup 18
+KPX f.sup s.sup -20
+KPX f.sup t.sup 18
+KPX g.sup a.sup -41
+KPX g.sup e.sup -45
+KPX g.sup l.sup -46
+KPX g.sup r.sup -21
+KPX h.sup quoteright.sup -31
+KPX h.sup y.sup -4
+KPX i.sup T.sup -10
+KPX i.sup j.sup -31
+KPX k.sup a.sup 12
+KPX k.sup comma.sup 27
+KPX k.sup e.sup 5
+KPX k.sup g.sup -27
+KPX k.sup hyphen.sup -27
+KPX k.sup o.sup 6
+KPX k.sup period.sup 26
+KPX k.sup s.sup 7
+KPX k.sup u.sup 8
+KPX l.sup v.sup -12
+KPX l.sup y.sup -11
+KPX m.sup p.sup -4
+KPX m.sup v.sup -6
+KPX m.sup w.sup -4
+KPX m.sup y.sup -3
+KPX n.sup T.sup -41
+KPX n.sup p.sup -7
+KPX n.sup quoteright.sup -34
+KPX n.sup v.sup -10
+KPX n.sup w.sup -7
+KPX n.sup y.sup -6
+KPX o.sup T.sup -63
+KPX o.sup quoteright.sup -24
+KPX o.sup t.sup -15
+KPX o.sup v.sup -18
+KPX o.sup w.sup -15
+KPX o.sup x.sup -33
+KPX o.sup y.sup -10
+KPX p.sup t.sup -14
+KPX p.sup y.sup -4
+KPX q.sup u.sup -11
+KPX q.sup c.sup -13
+KPX r.sup a.sup -29
+KPX r.sup c.sup -26
+KPX r.sup colon.sup -28
+KPX r.sup comma.sup -68
+KPX r.sup d.sup -31
+KPX r.sup e.sup -35
+KPX r.sup f.sup 23
+KPX r.sup g.sup -21
+KPX r.sup h.sup -17
+KPX r.sup hyphen.sup -52
+KPX r.sup i.sup 8
+KPX r.sup j.sup 4
+KPX r.sup k.sup -15
+KPX r.sup l.sup -21
+KPX r.sup m.sup 17
+KPX r.sup n.sup 16
+KPX r.sup o.sup -28
+KPX r.sup p.sup 13
+KPX r.sup period.sup -72
+KPX r.sup q.sup -31
+KPX r.sup quoteright.sup -4
+KPX r.sup r.sup 4
+KPX r.sup s.sup -17
+KPX r.sup semicolon.sup -28
+KPX r.sup t.sup 12
+KPX r.sup u.sup 11
+KPX r.sup v.sup 30
+KPX r.sup w.sup 32
+KPX r.sup x.sup 7
+KPX r.sup y.sup 33
+KPX s.sup quoteright.sup -20
+KPX s.sup t.sup -12
+KPX t.sup S.sup -9
+KPX t.sup a.sup -6
+KPX t.sup colon.sup -29
+KPX t.sup e.sup -13
+KPX t.sup h.sup -11
+KPX t.sup o.sup -11
+KPX t.sup quoteright.sup -19
+KPX t.sup semicolon.sup -26
+KPX u.sup quoteright.sup -31
+KPX v.sup a.sup -24
+KPX v.sup c.sup -26
+KPX v.sup colon.sup -48
+KPX v.sup comma.sup -46
+KPX v.sup e.sup -30
+KPX v.sup g.sup -36
+KPX v.sup l.sup -29
+KPX v.sup o.sup -26
+KPX v.sup period.sup -51
+KPX v.sup s.sup -30
+KPX v.sup semicolon.sup -48
+KPX w.sup a.sup -26
+KPX w.sup c.sup -28
+KPX w.sup colon.sup -49
+KPX w.sup comma.sup -47
+KPX w.sup e.sup -32
+KPX w.sup g.sup -38
+KPX w.sup hyphen.sup -4
+KPX w.sup l.sup -30
+KPX w.sup o.sup -28
+KPX w.sup period.sup -51
+KPX w.sup s.sup -32
+KPX w.sup semicolon.sup -49
+KPX x.sup a.sup 6
+KPX x.sup o.sup 1
+KPX x.sup q.sup 2
+KPX y.sup a.sup -12
+KPX y.sup c.sup -15
+KPX y.sup colon.sup -48
+KPX y.sup comma.sup -21
+KPX y.sup e.sup -19
+KPX y.sup g.sup -34
+KPX y.sup hyphen.sup 7
+KPX y.sup l.sup -18
+KPX y.sup o.sup -15
+KPX y.sup period.sup -25
+KPX y.sup s.sup -19
+KPX y.sup semicolon.sup -45
EndKernPairs
EndKernData
EndFontMetrics
diff --git a/fonts/newtx/afm/ntxsups-Regular.afm b/fonts/newtx/afm/ntxsups-Regular.afm
index aa2f051fd1..46849ce770 100644
--- a/fonts/newtx/afm/ntxsups-Regular.afm
+++ b/fonts/newtx/afm/ntxsups-Regular.afm
@@ -1,591 +1,573 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20150126
-Comment Creation Date: Sat Jan 31 16:19:39 2015
+Comment Generated by FontForge 20190801
+Comment Creation Date: Sun Sep 1 13:30:35 2019
FontName ntxsups-Regular
FullName ntxsups Regular
FamilyName ntxsups
Weight Regular
-Notice (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development)
+Notice (Copyright 2006, 2009 for TeX Gyre extensions by B. Jackowski and J.M. Nowacki (on behalf of TeX users groups). This work is released under the GUST Font License -- see http://tug.org/fonts/licenses/G)
+Comment UST-FONT-LICENSE.txt for details.
Comment
-Comment Copyright 2015 Michael Sharpe, LPPL
+Comment Copyright 2015--2019 Michael Sharpe, under equivalent LPPL.
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -100
UnderlineThickness 50
-Version 1.05
-EncodingScheme AdobeStandardEncoding
+Version 1.06
+EncodingScheme FontSpecific
FontBBox -46 129 663 707
CapHeight 662
-XHeight 540
-Ascender 684
+XHeight 547
Descender 140
-StartCharMetrics 98
+StartCharMetrics 99
+C 0 ; WX 0 ; N .notdef ; B 0 0 0 0 ;
C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 234 ; N exclam ; B 84 265 172 676 ;
-C 34 ; WX 295 ; N quotedbl ; B 50 501 245 703 ;
-C 35 ; WX 382 ; N numbersign ; B 3 270 380 667 ;
-C 36 ; WX 365 ; N dollar ; B 29 218 338 707 ;
-C 37 ; WX 604 ; N percent ; B 40 262 565 681 ;
-C 38 ; WX 579 ; N ampersand ; B 27 262 561 676 ;
-C 39 ; WX 229 ; N quoteright ; B 51 518 154 687 ;
-C 40 ; WX 232 ; N parenleft ; B 31 159 213 679 ;
-C 41 ; WX 232 ; N parenright ; B 19 159 201 679 ;
-C 42 ; WX 335 ; N asterisk ; B 45 419 291 679 ;
-C 43 ; WX 377 ; N plus ; B 20 270 358 577 ;
-C 44 ; WX 175 ; N comma ; B 36 185 139 354 ;
-C 45 ; WX 258 ; N hyphen ; B 25 378 227 430 ;
-C 46 ; WX 181 ; N period ; B 46 263 136 354 ;
-C 47 ; WX 200 ; N slash ; B -6 262 206 676 ;
-C 48 ; WX 358 ; N zero ; B 16 262 343 676 ;
-C 49 ; WX 340 ; N one ; B 72 270 271 676 ;
-C 50 ; WX 360 ; N two ; B 20 270 344 676 ;
-C 51 ; WX 351 ; N three ; B 28 262 307 676 ;
-C 52 ; WX 358 ; N four ; B 8 270 340 676 ;
-C 53 ; WX 329 ; N five ; B 21 262 289 684 ;
-C 54 ; WX 355 ; N six ; B 22 262 335 680 ;
-C 55 ; WX 336 ; N seven ; B 13 265 303 667 ;
-C 56 ; WX 353 ; N eight ; B 36 262 317 676 ;
-C 57 ; WX 357 ; N nine ; B 20 252 330 681 ;
-C 58 ; WX 199 ; N colon ; B 53 263 144 545 ;
-C 59 ; WX 208 ; N semicolon ; B 52 185 170 545 ;
-C 60 ; WX 381 ; N less ; B 18 264 363 601 ;
-C 61 ; WX 367 ; N equal ; B 20 334 348 509 ;
-C 62 ; WX 381 ; N greater ; B 18 264 363 595 ;
-C 63 ; WX 330 ; N question ; B 44 265 311 676 ;
-C 64 ; WX 638 ; N at ; B 75 262 565 676 ;
-C 65 ; WX 522 ; N A ; B 10 270 512 674 ;
-C 66 ; WX 477 ; N B ; B 11 270 429 667 ;
-C 67 ; WX 463 ; N C ; B 18 262 441 676 ;
-C 68 ; WX 505 ; N D ; B 10 270 481 667 ;
-C 69 ; WX 431 ; N E ; B 8 270 423 667 ;
-C 70 ; WX 396 ; N F ; B 8 270 390 667 ;
-C 71 ; WX 505 ; N G ; B 21 262 497 676 ;
-C 72 ; WX 504 ; N H ; B 12 270 491 667 ;
-C 73 ; WX 234 ; N I ; B 12 270 223 667 ;
-C 74 ; WX 287 ; N J ; B 6 262 276 667 ;
-C 75 ; WX 527 ; N K ; B 22 270 528 667 ;
-C 76 ; WX 415 ; N L ; B 8 270 407 667 ;
-C 77 ; WX 657 ; N M ; B 8 270 641 667 ;
-C 78 ; WX 536 ; N N ; B 8 263 527 667 ;
-C 79 ; WX 507 ; N O ; B 22 262 485 676 ;
-C 80 ; WX 397 ; N P ; B 10 270 388 667 ;
-C 81 ; WX 506 ; N Q ; B 22 158 493 682 ;
-C 82 ; WX 495 ; N R ; B 11 270 490 667 ;
-C 83 ; WX 393 ; N S ; B 27 262 351 676 ;
-C 84 ; WX 430 ; N T ; B 11 270 419 667 ;
-C 85 ; WX 502 ; N U ; B 9 262 491 667 ;
-C 86 ; WX 519 ; N V ; B 10 263 503 667 ;
-C 87 ; WX 670 ; N W ; B 3 263 663 667 ;
-C 88 ; WX 521 ; N X ; B 6 270 510 667 ;
-C 89 ; WX 523 ; N Y ; B 14 270 511 667 ;
-C 90 ; WX 464 ; N Z ; B 6 270 456 667 ;
-C 91 ; WX 229 ; N bracketleft ; B 57 171 207 672 ;
-C 92 ; WX 200 ; N backslash ; B -6 262 206 676 ;
-C 93 ; WX 229 ; N bracketright ; B 22 171 172 672 ;
-C 94 ; WX 359 ; N asciicircum ; B 16 439 345 676 ;
-C 95 ; WX 325 ; N underscore ; B 0 185 325 234 ;
-C 96 ; WX 229 ; N quoteleft ; B 75 517 178 679 ;
-C 97 ; WX 318 ; N a ; B 24 264 317 546 ;
-C 98 ; WX 354 ; N b ; B 2 264 334 680 ;
-C 99 ; WX 318 ; N c ; B 16 264 297 546 ;
-C 100 ; WX 355 ; N d ; B 18 264 350 680 ;
-C 101 ; WX 301 ; N e ; B 16 264 288 546 ;
-C 102 ; WX 230 ; N f ; B 13 270 263 680 ;
-C 103 ; WX 367 ; N g ; B 18 139 348 546 ;
-C 104 ; WX 354 ; N h ; B 6 270 346 680 ;
-C 105 ; WX 200 ; N i ; B 10 270 184 680 ;
-C 106 ; WX 201 ; N j ; B -46 132 146 691 ;
-C 107 ; WX 356 ; N k ; B 5 270 360 689 ;
-C 108 ; WX 194 ; N l ; B 12 270 181 680 ;
-C 109 ; WX 550 ; N m ; B 10 270 548 546 ;
-C 110 ; WX 354 ; N n ; B 10 270 344 546 ;
-C 111 ; WX 356 ; N o ; B 19 264 337 546 ;
-C 112 ; WX 354 ; N p ; B 3 140 335 546 ;
-C 113 ; WX 354 ; N q ; B 16 140 347 547 ;
-C 114 ; WX 230 ; N r ; B 3 270 232 546 ;
-C 115 ; WX 274 ; N s ; B 33 264 248 545 ;
-C 116 ; WX 221 ; N t ; B 8 264 222 620 ;
-C 117 ; WX 353 ; N u ; B 6 264 340 540 ;
-C 118 ; WX 360 ; N v ; B 12 262 346 540 ;
-C 119 ; WX 513 ; N w ; B 14 262 496 540 ;
-C 120 ; WX 364 ; N x ; B 11 270 351 540 ;
-C 121 ; WX 367 ; N y ; B 9 129 351 544 ;
-C 122 ; WX 340 ; N z ; B 18 270 323 540 ;
-C 123 ; WX 324 ; N braceleft ; B 65 158 240 680 ;
-C 124 ; WX 141 ; N bar ; B 44 262 98 676 ;
-C 125 ; WX 324 ; N braceright ; B 84 158 260 680 ;
-C 126 ; WX 351 ; N asciitilde ; B 26 373 326 469 ;
-C 161 ; WX 234 ; N exclamdown ; B 63 134 151 563 ;
-C -1 ; WX 301 ; N eacute ; B 16 264 288 677 ;
-C -1 ; WX 301 ; N egrave ; B 16 264 288 677 ;
+C 33 ; WX 234 ; N exclam.sup ; B 74 265 162 676 ;
+C 34 ; WX 295 ; N quotedbl.sup ; B 50 501 245 703 ;
+C 35 ; WX 382 ; N numbersign.sup ; B 3 270 380 667 ;
+C 36 ; WX 365 ; N dollar.sup ; B 29 218 338 707 ;
+C 37 ; WX 604 ; N percent.sup ; B 40 262 565 681 ;
+C 38 ; WX 579 ; N ampersand.sup ; B 27 262 561 676 ;
+C 39 ; WX 229 ; N quoteright.sup ; B 51 518 154 687 ;
+C 40 ; WX 232 ; N parenleft.sup ; B 31 159 213 679 ;
+C 41 ; WX 232 ; N parenright.sup ; B 19 159 201 679 ;
+C 42 ; WX 335 ; N asterisk.sup ; B 45 419 291 679 ;
+C 43 ; WX 377 ; N plus.sup ; B 20 270 358 577 ;
+C 44 ; WX 175 ; N comma.sup ; B 36 185 139 354 ;
+C 45 ; WX 258 ; N hyphen.sup ; B 25 378 227 430 ;
+C 46 ; WX 181 ; N period.sup ; B 46 263 136 354 ;
+C 47 ; WX 200 ; N slash.sup ; B -6 262 206 676 ;
+C 48 ; WX 358 ; N zero.sup ; B 16 262 343 676 ;
+C 49 ; WX 340 ; N one.sup ; B 72 270 271 676 ;
+C 50 ; WX 360 ; N two.sup ; B 20 270 344 676 ;
+C 51 ; WX 351 ; N three.sup ; B 28 262 307 676 ;
+C 52 ; WX 358 ; N four.sup ; B 8 270 340 676 ;
+C 53 ; WX 329 ; N five.sup ; B 21 262 289 684 ;
+C 54 ; WX 355 ; N six.sup ; B 22 262 335 680 ;
+C 55 ; WX 336 ; N seven.sup ; B 13 265 303 667 ;
+C 56 ; WX 353 ; N eight.sup ; B 36 262 317 676 ;
+C 57 ; WX 357 ; N nine.sup ; B 20 252 330 681 ;
+C 58 ; WX 199 ; N colon.sup ; B 53 263 144 545 ;
+C 59 ; WX 208 ; N semicolon.sup ; B 52 185 170 545 ;
+C 60 ; WX 381 ; N less.sup ; B 18 264 363 601 ;
+C 61 ; WX 367 ; N equal.sup ; B 20 334 348 509 ;
+C 62 ; WX 381 ; N greater.sup ; B 18 264 363 595 ;
+C 63 ; WX 330 ; N question.sup ; B 44 265 311 676 ;
+C 64 ; WX 638 ; N at.sup ; B 75 262 565 676 ;
+C 65 ; WX 522 ; N A.sup ; B 10 270 512 674 ;
+C 66 ; WX 477 ; N B.sup ; B 11 270 429 667 ;
+C 67 ; WX 463 ; N C.sup ; B 18 262 441 676 ;
+C 68 ; WX 505 ; N D.sup ; B 10 270 481 667 ;
+C 69 ; WX 431 ; N E.sup ; B 8 270 423 667 ;
+C 70 ; WX 396 ; N F.sup ; B 8 270 390 667 ;
+C 71 ; WX 505 ; N G.sup ; B 21 262 497 676 ;
+C 72 ; WX 504 ; N H.sup ; B 12 270 491 667 ;
+C 73 ; WX 234 ; N I.sup ; B 12 270 223 667 ;
+C 74 ; WX 287 ; N J.sup ; B 6 262 276 667 ;
+C 75 ; WX 527 ; N K.sup ; B 22 270 528 667 ;
+C 76 ; WX 415 ; N L.sup ; B 8 270 407 667 ;
+C 77 ; WX 657 ; N M.sup ; B 8 270 641 667 ;
+C 78 ; WX 536 ; N N.sup ; B 8 263 527 667 ;
+C 79 ; WX 507 ; N O.sup ; B 22 262 485 676 ;
+C 80 ; WX 397 ; N P.sup ; B 10 270 388 667 ;
+C 81 ; WX 506 ; N Q.sup ; B 22 158 493 682 ;
+C 82 ; WX 495 ; N R.sup ; B 11 270 490 667 ;
+C 83 ; WX 381 ; N S.sup ; B 27 262 351 676 ;
+C 84 ; WX 430 ; N T.sup ; B 11 270 419 667 ;
+C 85 ; WX 502 ; N U.sup ; B 9 262 491 667 ;
+C 86 ; WX 519 ; N V.sup ; B 10 263 503 667 ;
+C 87 ; WX 670 ; N W.sup ; B 3 263 663 667 ;
+C 88 ; WX 521 ; N X.sup ; B 6 270 510 667 ;
+C 89 ; WX 523 ; N Y.sup ; B 14 270 511 667 ;
+C 90 ; WX 464 ; N Z.sup ; B 6 270 456 667 ;
+C 91 ; WX 229 ; N bracketleft.sup ; B 57 171 207 672 ;
+C 92 ; WX 200 ; N backslash.sup ; B -6 262 206 676 ;
+C 93 ; WX 229 ; N bracketright.sup ; B 22 171 172 672 ;
+C 94 ; WX 359 ; N asciicircum.sup ; B 16 439 345 676 ;
+C 95 ; WX 325 ; N underscore.sup ; B 0 185 325 234 ;
+C 96 ; WX 229 ; N quoteleft.sup ; B 75 517 178 679 ;
+C 97 ; WX 318 ; N a.sup ; B 24 264 317 546 ;
+C 98 ; WX 354 ; N b.sup ; B 2 264 334 680 ;
+C 99 ; WX 318 ; N c.sup ; B 16 264 297 546 ;
+C 100 ; WX 355 ; N d.sup ; B 18 264 350 680 ;
+C 101 ; WX 301 ; N e.sup ; B 16 264 288 546 ;
+C 102 ; WX 230 ; N f.sup ; B 13 270 263 680 ;
+C 103 ; WX 367 ; N g.sup ; B 18 139 348 546 ;
+C 104 ; WX 354 ; N h.sup ; B 6 270 346 680 ;
+C 105 ; WX 200 ; N i.sup ; B 10 270 184 680 ;
+C 106 ; WX 201 ; N j.sup ; B -46 132 146 691 ;
+C 107 ; WX 356 ; N k.sup ; B 5 270 360 689 ;
+C 108 ; WX 194 ; N l.sup ; B 12 270 181 680 ;
+C 109 ; WX 550 ; N m.sup ; B 10 270 548 546 ;
+C 110 ; WX 354 ; N n.sup ; B 10 270 344 546 ;
+C 111 ; WX 356 ; N o.sup ; B 19 264 337 546 ;
+C 112 ; WX 354 ; N p.sup ; B 3 140 335 546 ;
+C 113 ; WX 354 ; N q.sup ; B 16 140 347 547 ;
+C 114 ; WX 230 ; N r.sup ; B 3 270 232 546 ;
+C 115 ; WX 274 ; N s.sup ; B 33 264 248 545 ;
+C 116 ; WX 221 ; N t.sup ; B 8 264 222 620 ;
+C 117 ; WX 353 ; N u.sup ; B 6 264 340 540 ;
+C 118 ; WX 360 ; N v.sup ; B 12 262 346 540 ;
+C 119 ; WX 513 ; N w.sup ; B 14 262 496 540 ;
+C 120 ; WX 364 ; N x.sup ; B 11 270 351 540 ;
+C 121 ; WX 367 ; N y.sup ; B 9 129 351 544 ;
+C 122 ; WX 340 ; N z.sup ; B 18 270 323 540 ;
+C 123 ; WX 324 ; N braceleft.sup ; B 65 158 240 680 ;
+C 124 ; WX 141 ; N bar.sup ; B 44 262 98 676 ;
+C 125 ; WX 324 ; N braceright.sup ; B 84 158 260 680 ;
+C 126 ; WX 351 ; N asciitilde.sup ; B 26 373 326 469 ;
+C 161 ; WX 234 ; N exclamdown.sup ; B 63 134 151 563 ;
+C 232 ; WX 301 ; N egrave.sup ; B 16 264 288 677 ;
+C 233 ; WX 301 ; N eacute.sup ; B 16 264 288 677 ;
EndCharMetrics
StartKernData
-StartKernPairs 465
-KPX quoteright y -45
-KPX quoteright w -47
-KPX quoteright v -47
-KPX quoteright t -43
-KPX quoteright s -47
-KPX quoteright r -44
-KPX quoteright period -78
-KPX quoteright o -54
-KPX quoteright d -56
-KPX quoteright comma -71
-KPX quoteright A -130
-KPX comma quoteright -53
-KPX comma one -52
-KPX hyphen Y -108
-KPX hyphen W -59
-KPX hyphen V -82
-KPX hyphen T -77
-KPX hyphen A -26
-KPX period quoteright -58
-KPX period one -61
-KPX zero seven -5
-KPX zero one -55
-KPX zero four 12
-KPX one zero -54
-KPX one two -34
-KPX one three -41
-KPX one six -66
-KPX one seven -78
-KPX one period -55
-KPX one one -78
-KPX one nine -61
-KPX one four -72
-KPX one five -37
-KPX one eight -68
-KPX one comma -48
-KPX two seven -16
-KPX two one -60
-KPX three seven -28
-KPX three one -75
-KPX three four -6
-KPX four seven -42
-KPX four one -75
-KPX four four 14
-KPX five seven -36
-KPX five one -70
-KPX five four -8
-KPX six seven -29
-KPX six one -74
-KPX six four 12
-KPX seven two -31
-KPX seven three -35
-KPX seven six -46
-KPX seven seven -20
-KPX seven period -79
-KPX seven one -56
-KPX seven four -63
-KPX seven five -59
-KPX seven eight -40
-KPX seven comma -72
-KPX seven colon -68
-KPX eight seven -15
-KPX eight one -64
-KPX nine seven -6
-KPX nine one -63
-KPX nine four -7
-KPX A y -83
-KPX A w -73
-KPX A v -81
-KPX A u -28
-KPX A t -20
-KPX A quoteright -116
-KPX A q -21
-KPX A period -10
-KPX A o -40
-KPX A hyphen -23
-KPX A g -20
-KPX A e -27
-KPX A d -28
-KPX A comma -3
-KPX A c -29
-KPX A b -20
-KPX A a -6
-KPX A Y -81
-KPX A W -113
-KPX A V -131
-KPX A U -62
-KPX A T -54
-KPX A Q -60
-KPX A O -60
-KPX A G -57
-KPX A C -51
-KPX B Y -68
-KPX B W -59
-KPX B V -65
-KPX B O -24
-KPX B A -51
-KPX C O -12
-KPX C K -10
-KPX C H -2
-KPX C A -23
-KPX D Y -74
-KPX D X -64
-KPX D W -57
-KPX D V -71
-KPX D T -10
-KPX D J -41
-KPX D A -67
-KPX F u -11
-KPX F r -10
-KPX F period -58
-KPX F o -21
-KPX F j -20
-KPX F i -13
-KPX F hyphen 3
-KPX F eacute -19
-KPX F e -19
-KPX F comma -51
-KPX F a -34
-KPX F O -10
-KPX F J -13
-KPX F A -71
-KPX G Y -26
-KPX G W -18
-KPX G V -23
-KPX G T -21
-KPX G A -26
-KPX J A -53
-KPX K y -86
-KPX K u -19
-KPX K o -31
-KPX K hyphen -63
-KPX K e -19
-KPX K a 2
-KPX K S 1
-KPX K O -51
-KPX K G -49
-KPX K C -43
-KPX L y -56
-KPX L u -10
-KPX L quoteright -125
-KPX L hyphen 25
-KPX L Y -100
-KPX L W -89
-KPX L V -115
-KPX L U -26
-KPX L T -73
-KPX L S 5
-KPX L O -3
-KPX L C 2
-KPX N u -25
-KPX N period -21
-KPX N o -21
-KPX N eacute -17
-KPX N e -17
-KPX N comma -14
-KPX N a -27
-KPX N O -20
-KPX N G -19
-KPX N C -16
-KPX N A -28
-KPX O Y -72
-KPX O X -55
-KPX O W -54
-KPX O V -69
-KPX O T -9
-KPX O A -58
-KPX P period -101
-KPX P o -25
-KPX P hyphen -37
-KPX P eacute -23
-KPX P e -23
-KPX P comma -94
-KPX P a -17
-KPX P J -52
-KPX P A -90
-KPX R y -37
-KPX R u -24
-KPX R o -36
-KPX R hyphen -52
-KPX R eacute -23
-KPX R e -23
-KPX R a -2
-KPX R Y -76
-KPX R W -67
-KPX R V -73
-KPX R U -56
-KPX R T -34
-KPX R O -45
-KPX R G -44
-KPX R C -41
-KPX S t -20
-KPX S Y -30
-KPX S W -21
-KPX S V -27
-KPX S T -19
-KPX S A -37
-KPX T y -102
-KPX T w -106
-KPX T v -105
-KPX T u -93
-KPX T semicolon -87
-KPX T s -73
-KPX T r -50
-KPX T period -82
-KPX T o -90
-KPX T j -25
-KPX T i -18
-KPX T hyphen -73
-KPX T g -91
-KPX T e -86
-KPX T comma -74
-KPX T colon -87
-KPX T c -87
-KPX T a -77
-KPX T Y 11
-KPX T W 20
-KPX T V 14
-KPX T S -10
-KPX T O -10
-KPX T J -18
-KPX T G -11
-KPX T C -8
-KPX T A -53
-KPX U r -27
-KPX U period -37
-KPX U p -28
-KPX U n -31
-KPX U m -33
-KPX U comma -31
-KPX U A -65
-KPX V y -54
-KPX V u -51
-KPX V semicolon -89
-KPX V r -56
-KPX V period -112
-KPX V o -89
-KPX V i -20
-KPX V hyphen -69
-KPX V g -101
-KPX V e -85
-KPX V comma -105
-KPX V colon -90
-KPX V a -88
-KPX V T 10
-KPX V S -47
-KPX V O -67
-KPX V G -66
-KPX V C -63
-KPX V A -124
-KPX W y -45
-KPX W u -43
-KPX W semicolon -81
-KPX W r -47
-KPX W period -96
-KPX W o -76
-KPX W i -13
-KPX W hyphen -56
-KPX W g -91
-KPX W e -72
-KPX W comma -89
-KPX W colon -81
-KPX W a -80
-KPX W T 17
-KPX W S -41
-KPX W O -56
-KPX W G -56
-KPX W C -53
-KPX W A -113
-KPX X y -96
-KPX X u -29
-KPX X o -41
-KPX X hyphen -54
-KPX X e -28
-KPX X a -7
-KPX X Q -61
-KPX X O -61
-KPX X C -52
-KPX Y v -86
-KPX Y u -78
-KPX Y semicolon -108
-KPX Y period -103
-KPX Y p -88
-KPX Y o -107
-KPX Y i -17
-KPX Y hyphen -98
-KPX Y g -113
-KPX Y e -103
-KPX Y comma -96
-KPX Y colon -109
-KPX Y a -99
-KPX Y T 13
-KPX Y S -44
-KPX Y O -69
-KPX Y G -71
-KPX Y C -68
-KPX Y A -74
-KPX Z y -50
-KPX Z v -48
-KPX quoteleft Y -26
-KPX quoteleft W -17
-KPX quoteleft V -23
-KPX quoteleft T -9
-KPX quoteleft A -110
-KPX a y -32
-KPX a w -31
-KPX a v -30
-KPX a quoteright -40
-KPX a j -26
-KPX b y -32
-KPX b w -30
-KPX b v -29
-KPX c k -19
-KPX c h -15
-KPX e y -30
-KPX e x -35
-KPX e w -28
-KPX e v -27
-KPX e t -10
-KPX e quoteright -30
-KPX f t 10
-KPX f s -21
-KPX f quoteright 17
-KPX f o -38
-KPX f l 44
-KPX f j 8
-KPX f i 15
-KPX f f 6
-KPX f eacute -34
-KPX f e -34
-KPX f a -25
-KPX g r 11
-KPX g l -7
-KPX g eacute -25
-KPX g e -25
-KPX g a -17
-KPX h y -30
-KPX h quoteright -38
-KPX i j -36
-KPX i T -28
-KPX k u 14
-KPX k s 5
-KPX k period -2
-KPX k o -32
-KPX k hyphen -65
-KPX k g -12
-KPX k eacute -19
-KPX k e -19
-KPX k comma 4
-KPX k a 1
-KPX l y -25
-KPX l v -28
-KPX m y -31
-KPX m w -31
-KPX m v -30
-KPX m p -9
-KPX n y -31
-KPX n w -31
-KPX n v -30
-KPX n quoteright -39
-KPX n p -13
-KPX n T -55
-KPX o y -41
-KPX o x -36
-KPX o w -36
-KPX o v -36
-KPX o t -9
-KPX o quoteright -34
-KPX o T -91
-KPX p y -28
-KPX p t -6
-KPX q u -12
-KPX q c -7
-KPX r z 2
-KPX r y 22
-KPX r x 17
-KPX r w 19
-KPX r v 20
-KPX r u 19
-KPX r t 23
-KPX r semicolon -7
-KPX r r 26
-KPX r quoteright -19
-KPX r q -10
-KPX r period -48
-KPX r p 25
-KPX r o -8
-KPX r n 22
-KPX r m 20
-KPX r l -18
-KPX r k -10
-KPX r j 14
-KPX r i 20
-KPX r hyphen -46
-KPX r h -6
-KPX r g -15
-KPX r f 19
-KPX r egrave -6
-KPX r eacute -6
-KPX r e -6
-KPX r d -10
-KPX r comma -41
-KPX r colon -7
-KPX r c -8
-KPX r a -1
-KPX s t -15
-KPX s quoteright -38
-KPX t semicolon -8
-KPX t quoteright -29
-KPX t o -8
-KPX t h 10
-KPX t colon -8
-KPX t a 10
-KPX t S 2
-KPX u quoteright -36
-KPX v semicolon -20
-KPX v s -21
-KPX v period -76
-KPX v o -38
-KPX v l -31
-KPX v hyphen -28
-KPX v g -41
-KPX v egrave -36
-KPX v eacute -36
-KPX v e -36
-KPX v comma -69
-KPX v colon -20
-KPX v c -37
-KPX v a -24
-KPX w semicolon -23
-KPX w s -23
-KPX w period -71
-KPX w o -35
-KPX w l -33
-KPX w hyphen -24
-KPX w g -43
-KPX w egrave -31
-KPX w eacute -31
-KPX w e -31
-KPX w comma -64
-KPX w colon -23
-KPX w c -33
-KPX w a -27
-KPX x q -26
-KPX x o -45
-KPX x eacute -32
-KPX x e -32
-KPX x c -34
-KPX x a -11
-KPX y semicolon -23
-KPX y s -26
-KPX y period -73
-KPX y o -39
-KPX y l -32
-KPX y hyphen -27
-KPX y g -48
-KPX y egrave -35
-KPX y eacute -35
-KPX y e -35
-KPX y comma -66
-KPX y colon -23
-KPX y c -37
-KPX y a -32
-KPX eacute y -30
-KPX eacute w -28
-KPX eacute v -27
+StartKernPairs 446
+KPX quoteright.sup y.sup -45
+KPX quoteright.sup w.sup -47
+KPX quoteright.sup v.sup -47
+KPX quoteright.sup t.sup -43
+KPX quoteright.sup s.sup -47
+KPX quoteright.sup r.sup -44
+KPX quoteright.sup period.sup -78
+KPX quoteright.sup o.sup -54
+KPX quoteright.sup d.sup -56
+KPX quoteright.sup comma.sup -71
+KPX quoteright.sup A.sup -130
+KPX comma.sup quoteright.sup -53
+KPX comma.sup one.sup -52
+KPX hyphen.sup Y.sup -108
+KPX hyphen.sup W.sup -59
+KPX hyphen.sup V.sup -82
+KPX hyphen.sup T.sup -77
+KPX hyphen.sup A.sup -26
+KPX period.sup quoteright.sup -58
+KPX period.sup one.sup -61
+KPX zero.sup seven.sup -5
+KPX zero.sup one.sup -55
+KPX zero.sup four.sup 12
+KPX one.sup zero.sup -54
+KPX one.sup two.sup -34
+KPX one.sup three.sup -41
+KPX one.sup six.sup -66
+KPX one.sup seven.sup -78
+KPX one.sup period.sup -55
+KPX one.sup one.sup -78
+KPX one.sup nine.sup -61
+KPX one.sup four.sup -72
+KPX one.sup five.sup -37
+KPX one.sup eight.sup -68
+KPX one.sup comma.sup -48
+KPX two.sup seven.sup -16
+KPX two.sup one.sup -60
+KPX three.sup seven.sup -28
+KPX three.sup one.sup -75
+KPX three.sup four.sup -6
+KPX four.sup seven.sup -42
+KPX four.sup one.sup -75
+KPX four.sup four.sup 14
+KPX five.sup seven.sup -36
+KPX five.sup one.sup -70
+KPX five.sup four.sup -8
+KPX six.sup seven.sup -29
+KPX six.sup one.sup -74
+KPX six.sup four.sup 12
+KPX seven.sup two.sup -31
+KPX seven.sup three.sup -35
+KPX seven.sup six.sup -46
+KPX seven.sup seven.sup -20
+KPX seven.sup period.sup -79
+KPX seven.sup one.sup -56
+KPX seven.sup four.sup -63
+KPX seven.sup five.sup -59
+KPX seven.sup eight.sup -40
+KPX seven.sup comma.sup -72
+KPX seven.sup colon.sup -68
+KPX eight.sup seven.sup -15
+KPX eight.sup one.sup -64
+KPX nine.sup seven.sup -6
+KPX nine.sup one.sup -63
+KPX nine.sup four.sup -7
+KPX A.sup y.sup -83
+KPX A.sup w.sup -73
+KPX A.sup v.sup -81
+KPX A.sup u.sup -28
+KPX A.sup t.sup -20
+KPX A.sup quoteright.sup -116
+KPX A.sup q.sup -21
+KPX A.sup period.sup -10
+KPX A.sup o.sup -40
+KPX A.sup hyphen.sup -23
+KPX A.sup g.sup -20
+KPX A.sup e.sup -27
+KPX A.sup d.sup -28
+KPX A.sup comma.sup -3
+KPX A.sup c.sup -29
+KPX A.sup b.sup -20
+KPX A.sup a.sup -6
+KPX A.sup Y.sup -81
+KPX A.sup W.sup -113
+KPX A.sup V.sup -131
+KPX A.sup U.sup -62
+KPX A.sup T.sup -54
+KPX A.sup Q.sup -60
+KPX A.sup O.sup -60
+KPX A.sup G.sup -57
+KPX A.sup C.sup -51
+KPX B.sup Y.sup -68
+KPX B.sup W.sup -59
+KPX B.sup V.sup -65
+KPX B.sup O.sup -24
+KPX B.sup A.sup -51
+KPX C.sup O.sup -12
+KPX C.sup K.sup -10
+KPX C.sup H.sup -2
+KPX C.sup A.sup -23
+KPX D.sup Y.sup -74
+KPX D.sup X.sup -64
+KPX D.sup W.sup -57
+KPX D.sup V.sup -71
+KPX D.sup T.sup -10
+KPX D.sup J.sup -41
+KPX D.sup A.sup -67
+KPX F.sup u.sup -11
+KPX F.sup r.sup -10
+KPX F.sup period.sup -58
+KPX F.sup o.sup -21
+KPX F.sup j.sup -20
+KPX F.sup i.sup -13
+KPX F.sup hyphen.sup 3
+KPX F.sup e.sup -19
+KPX F.sup comma.sup -51
+KPX F.sup a.sup -34
+KPX F.sup O.sup -10
+KPX F.sup J.sup -13
+KPX F.sup A.sup -71
+KPX G.sup Y.sup -26
+KPX G.sup W.sup -18
+KPX G.sup V.sup -23
+KPX G.sup T.sup -21
+KPX G.sup A.sup -26
+KPX J.sup A.sup -53
+KPX K.sup y.sup -86
+KPX K.sup u.sup -19
+KPX K.sup o.sup -31
+KPX K.sup hyphen.sup -63
+KPX K.sup e.sup -19
+KPX K.sup a.sup 2
+KPX K.sup S.sup 1
+KPX K.sup O.sup -51
+KPX K.sup G.sup -49
+KPX K.sup C.sup -43
+KPX L.sup y.sup -56
+KPX L.sup u.sup -10
+KPX L.sup quoteright.sup -125
+KPX L.sup hyphen.sup 25
+KPX L.sup Y.sup -100
+KPX L.sup W.sup -89
+KPX L.sup V.sup -115
+KPX L.sup U.sup -26
+KPX L.sup T.sup -73
+KPX L.sup S.sup 5
+KPX L.sup O.sup -3
+KPX L.sup C.sup 2
+KPX N.sup u.sup -25
+KPX N.sup period.sup -21
+KPX N.sup o.sup -21
+KPX N.sup e.sup -17
+KPX N.sup comma.sup -14
+KPX N.sup a.sup -27
+KPX N.sup O.sup -20
+KPX N.sup G.sup -19
+KPX N.sup C.sup -16
+KPX N.sup A.sup -28
+KPX O.sup Y.sup -72
+KPX O.sup X.sup -55
+KPX O.sup W.sup -54
+KPX O.sup V.sup -69
+KPX O.sup T.sup -9
+KPX O.sup A.sup -58
+KPX P.sup period.sup -101
+KPX P.sup o.sup -25
+KPX P.sup hyphen.sup -37
+KPX P.sup e.sup -23
+KPX P.sup comma.sup -94
+KPX P.sup a.sup -17
+KPX P.sup J.sup -52
+KPX P.sup A.sup -90
+KPX R.sup y.sup -37
+KPX R.sup u.sup -24
+KPX R.sup o.sup -36
+KPX R.sup hyphen.sup -52
+KPX R.sup e.sup -23
+KPX R.sup a.sup -2
+KPX R.sup Y.sup -76
+KPX R.sup W.sup -67
+KPX R.sup V.sup -73
+KPX R.sup U.sup -56
+KPX R.sup T.sup -34
+KPX R.sup O.sup -45
+KPX R.sup G.sup -44
+KPX R.sup C.sup -41
+KPX S.sup t.sup -20
+KPX S.sup Y.sup -30
+KPX S.sup W.sup -21
+KPX S.sup V.sup -27
+KPX S.sup T.sup -19
+KPX S.sup A.sup -37
+KPX T.sup y.sup -102
+KPX T.sup w.sup -106
+KPX T.sup v.sup -105
+KPX T.sup u.sup -93
+KPX T.sup semicolon.sup -87
+KPX T.sup s.sup -73
+KPX T.sup r.sup -50
+KPX T.sup period.sup -82
+KPX T.sup o.sup -90
+KPX T.sup j.sup -25
+KPX T.sup i.sup -18
+KPX T.sup hyphen.sup -73
+KPX T.sup g.sup -91
+KPX T.sup e.sup -86
+KPX T.sup comma.sup -74
+KPX T.sup colon.sup -87
+KPX T.sup c.sup -87
+KPX T.sup a.sup -77
+KPX T.sup Y.sup 11
+KPX T.sup W.sup 20
+KPX T.sup V.sup 14
+KPX T.sup S.sup -10
+KPX T.sup O.sup -10
+KPX T.sup J.sup -18
+KPX T.sup G.sup -11
+KPX T.sup C.sup -8
+KPX T.sup A.sup -53
+KPX U.sup r.sup -27
+KPX U.sup period.sup -37
+KPX U.sup p.sup -28
+KPX U.sup n.sup -31
+KPX U.sup m.sup -33
+KPX U.sup comma.sup -31
+KPX U.sup A.sup -65
+KPX V.sup y.sup -54
+KPX V.sup u.sup -51
+KPX V.sup semicolon.sup -89
+KPX V.sup r.sup -56
+KPX V.sup period.sup -112
+KPX V.sup o.sup -89
+KPX V.sup i.sup -20
+KPX V.sup hyphen.sup -69
+KPX V.sup g.sup -101
+KPX V.sup e.sup -85
+KPX V.sup comma.sup -105
+KPX V.sup colon.sup -90
+KPX V.sup a.sup -88
+KPX V.sup T.sup 10
+KPX V.sup S.sup -47
+KPX V.sup O.sup -67
+KPX V.sup G.sup -66
+KPX V.sup C.sup -63
+KPX V.sup A.sup -124
+KPX W.sup y.sup -45
+KPX W.sup u.sup -43
+KPX W.sup semicolon.sup -81
+KPX W.sup r.sup -47
+KPX W.sup period.sup -96
+KPX W.sup o.sup -76
+KPX W.sup i.sup -13
+KPX W.sup hyphen.sup -56
+KPX W.sup g.sup -91
+KPX W.sup e.sup -72
+KPX W.sup comma.sup -89
+KPX W.sup colon.sup -81
+KPX W.sup a.sup -80
+KPX W.sup T.sup 17
+KPX W.sup S.sup -41
+KPX W.sup O.sup -56
+KPX W.sup G.sup -56
+KPX W.sup C.sup -53
+KPX W.sup A.sup -113
+KPX X.sup y.sup -96
+KPX X.sup u.sup -29
+KPX X.sup o.sup -41
+KPX X.sup hyphen.sup -54
+KPX X.sup e.sup -28
+KPX X.sup a.sup -7
+KPX X.sup Q.sup -61
+KPX X.sup O.sup -61
+KPX X.sup C.sup -52
+KPX Y.sup v.sup -86
+KPX Y.sup u.sup -78
+KPX Y.sup semicolon.sup -108
+KPX Y.sup period.sup -103
+KPX Y.sup p.sup -88
+KPX Y.sup o.sup -107
+KPX Y.sup i.sup -17
+KPX Y.sup hyphen.sup -98
+KPX Y.sup g.sup -113
+KPX Y.sup e.sup -103
+KPX Y.sup comma.sup -96
+KPX Y.sup colon.sup -109
+KPX Y.sup a.sup -99
+KPX Y.sup T.sup 13
+KPX Y.sup S.sup -44
+KPX Y.sup O.sup -69
+KPX Y.sup G.sup -71
+KPX Y.sup C.sup -68
+KPX Y.sup A.sup -74
+KPX Z.sup y.sup -50
+KPX Z.sup v.sup -48
+KPX quoteleft.sup Y.sup -26
+KPX quoteleft.sup W.sup -17
+KPX quoteleft.sup V.sup -23
+KPX quoteleft.sup T.sup -9
+KPX quoteleft.sup A.sup -110
+KPX a.sup y.sup -32
+KPX a.sup w.sup -31
+KPX a.sup v.sup -30
+KPX a.sup quoteright.sup -40
+KPX a.sup j.sup -26
+KPX b.sup y.sup -32
+KPX b.sup w.sup -30
+KPX b.sup v.sup -29
+KPX c.sup k.sup -19
+KPX c.sup h.sup -15
+KPX e.sup y.sup -30
+KPX e.sup x.sup -35
+KPX e.sup w.sup -28
+KPX e.sup v.sup -27
+KPX e.sup t.sup -10
+KPX e.sup quoteright.sup -30
+KPX f.sup t.sup 10
+KPX f.sup s.sup -21
+KPX f.sup quoteright.sup 17
+KPX f.sup o.sup -38
+KPX f.sup l.sup 44
+KPX f.sup j.sup 8
+KPX f.sup i.sup 15
+KPX f.sup f.sup 6
+KPX f.sup e.sup -34
+KPX f.sup a.sup -25
+KPX g.sup r.sup 11
+KPX g.sup l.sup -7
+KPX g.sup e.sup -25
+KPX g.sup a.sup -17
+KPX h.sup y.sup -30
+KPX h.sup quoteright.sup -38
+KPX i.sup j.sup -36
+KPX i.sup T.sup -28
+KPX k.sup u.sup 14
+KPX k.sup s.sup 5
+KPX k.sup period.sup -2
+KPX k.sup o.sup -32
+KPX k.sup hyphen.sup -65
+KPX k.sup g.sup -12
+KPX k.sup e.sup -19
+KPX k.sup comma.sup 4
+KPX k.sup a.sup 1
+KPX l.sup y.sup -25
+KPX l.sup v.sup -28
+KPX m.sup y.sup -31
+KPX m.sup w.sup -31
+KPX m.sup v.sup -30
+KPX m.sup p.sup -9
+KPX n.sup y.sup -31
+KPX n.sup w.sup -31
+KPX n.sup v.sup -30
+KPX n.sup quoteright.sup -39
+KPX n.sup p.sup -13
+KPX n.sup T.sup -55
+KPX o.sup y.sup -41
+KPX o.sup x.sup -36
+KPX o.sup w.sup -36
+KPX o.sup v.sup -36
+KPX o.sup t.sup -9
+KPX o.sup quoteright.sup -34
+KPX o.sup T.sup -91
+KPX p.sup y.sup -28
+KPX p.sup t.sup -6
+KPX q.sup u.sup -12
+KPX q.sup c.sup -7
+KPX r.sup z.sup 2
+KPX r.sup y.sup 22
+KPX r.sup x.sup 17
+KPX r.sup w.sup 19
+KPX r.sup v.sup 20
+KPX r.sup u.sup 19
+KPX r.sup t.sup 23
+KPX r.sup semicolon.sup -7
+KPX r.sup r.sup 26
+KPX r.sup quoteright.sup -19
+KPX r.sup q.sup -10
+KPX r.sup period.sup -48
+KPX r.sup p.sup 25
+KPX r.sup o.sup -8
+KPX r.sup n.sup 22
+KPX r.sup m.sup 20
+KPX r.sup l.sup -18
+KPX r.sup k.sup -10
+KPX r.sup j.sup 14
+KPX r.sup i.sup 20
+KPX r.sup hyphen.sup -46
+KPX r.sup h.sup -6
+KPX r.sup g.sup -15
+KPX r.sup f.sup 19
+KPX r.sup e.sup -6
+KPX r.sup d.sup -10
+KPX r.sup comma.sup -41
+KPX r.sup colon.sup -7
+KPX r.sup c.sup -8
+KPX r.sup a.sup -1
+KPX s.sup t.sup -15
+KPX s.sup quoteright.sup -38
+KPX t.sup semicolon.sup -8
+KPX t.sup quoteright.sup -29
+KPX t.sup o.sup -8
+KPX t.sup h.sup 10
+KPX t.sup colon.sup -8
+KPX t.sup a.sup 10
+KPX t.sup S.sup 2
+KPX u.sup quoteright.sup -36
+KPX v.sup semicolon.sup -20
+KPX v.sup s.sup -21
+KPX v.sup period.sup -76
+KPX v.sup o.sup -38
+KPX v.sup l.sup -31
+KPX v.sup hyphen.sup -28
+KPX v.sup g.sup -41
+KPX v.sup e.sup -36
+KPX v.sup comma.sup -69
+KPX v.sup colon.sup -20
+KPX v.sup c.sup -37
+KPX v.sup a.sup -24
+KPX w.sup semicolon.sup -23
+KPX w.sup s.sup -23
+KPX w.sup period.sup -71
+KPX w.sup o.sup -35
+KPX w.sup l.sup -33
+KPX w.sup hyphen.sup -24
+KPX w.sup g.sup -43
+KPX w.sup e.sup -31
+KPX w.sup comma.sup -64
+KPX w.sup colon.sup -23
+KPX w.sup c.sup -33
+KPX w.sup a.sup -27
+KPX x.sup q.sup -26
+KPX x.sup o.sup -45
+KPX x.sup e.sup -32
+KPX x.sup c.sup -34
+KPX x.sup a.sup -11
+KPX y.sup semicolon.sup -23
+KPX y.sup s.sup -26
+KPX y.sup period.sup -73
+KPX y.sup o.sup -39
+KPX y.sup l.sup -32
+KPX y.sup hyphen.sup -27
+KPX y.sup g.sup -48
+KPX y.sup e.sup -35
+KPX y.sup comma.sup -66
+KPX y.sup colon.sup -23
+KPX y.sup c.sup -37
+KPX y.sup a.sup -32
EndKernPairs
EndKernData
EndFontMetrics
diff --git a/fonts/newtx/afm/rtxbmi5.afm b/fonts/newtx/afm/rtxbmi5.afm
new file mode 100644
index 0000000000..25ceb42823
--- /dev/null
+++ b/fonts/newtx/afm/rtxbmi5.afm
@@ -0,0 +1,102 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20170730
+Comment Creation Date: Fri Oct 19 15:18:55 2018
+FontName rtxbmi5
+FullName rtxbmi5
+FamilyName rtxbmi
+Weight Bold
+Notice (Version 3.1, GPL)
+ItalicAngle -15
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 3.1
+EncodingScheme FontSpecific
+FontBBox -212 -225 1045 794
+CapHeight 662
+XHeight 454
+Ascender 662
+Descender -209
+StartCharMetrics 80
+C 0 ; WX 792 ; N Gamma ; B -16 0 762 669 ;
+C 1 ; WX 741 ; N Delta ; B -55 0 616 677 ;
+C 2 ; WX 904 ; N Theta ; B 23 -18 854 685 ;
+C 3 ; WX 789 ; N Lambda ; B -77 -18 708 669 ;
+C 4 ; WX 771 ; N Xi ; B -27 0 810 662 ;
+C 5 ; WX 892 ; N Pi ; B -40 0 965 662 ;
+C 6 ; WX 711 ; N Sigma ; B -61 0 754 662 ;
+C 7 ; WX 896 ; N Upsilon ; B 61 0 939 676 ;
+C 8 ; WX 975 ; N Phi ; B 61 0 943 662 ;
+C 9 ; WX 959 ; N Psi ; B 119 0 1045 677 ;
+C 10 ; WX 939 ; N Omega ; B -11 0 909 677 ;
+C 11 ; WX 765 ; N alpha ; B 21 -7 741 462 ;
+C 12 ; WX 692 ; N beta ; B -104 -204 672 680 ;
+C 13 ; WX 704 ; N gamma ; B -8 -205 673 445 ;
+C 14 ; WX 643 ; N delta ; B 13 -16 620 682 ;
+C 15 ; WX 497 ; N epsilon1 ; B 52 -3 551 458 ;
+C 16 ; WX 570 ; N zeta ; B 17 -208 622 669 ;
+C 17 ; WX 699 ; N eta ; B 26 -218 668 462 ;
+C 18 ; WX 603 ; N theta ; B 25 -13 603 677 ;
+C 19 ; WX 375 ; N iota ; B 22 -3 337 464 ;
+C 20 ; WX 565 ; N kappa ; B 7 -9 557 456 ;
+C 21 ; WX 649 ; N lambda ; B 18 -10 645 682 ;
+C 22 ; WX 678 ; N mu ; B -49 -208 618 457 ;
+C 23 ; WX 599 ; N nu ; B 13 -8 589 468 ;
+C 24 ; WX 622 ; N xi ; B -12 -207 637 679 ;
+C 25 ; WX 672 ; N pi ; B -1 -16 661 449 ;
+C 26 ; WX 649 ; N rho ; B -48 -209 632 459 ;
+C 27 ; WX 851 ; N sigma ; B 22 -9 833 460 ;
+C 28 ; WX 620 ; N tau ; B -8 -15 601 449 ;
+C 29 ; WX 684 ; N upsilon ; B 17 -7 649 464 ;
+C 30 ; WX 735 ; N phi ; B 22 -199 698 661 ;
+C 31 ; WX 718 ; N chi ; B -129 -225 699 464 ;
+C 32 ; WX 775 ; N psi ; B 26 -209 756 661 ;
+C 33 ; WX 905 ; N omega ; B 21 -6 871 449 ;
+C 34 ; WX 632 ; N epsilon ; B 14 -9 617 458 ;
+C 35 ; WX 787 ; N theta1 ; B -17 -13 764 727 ;
+C 36 ; WX 1030 ; N pi1 ; B 9 -6 1011 449 ;
+C 37 ; WX 676 ; N rho1 ; B -10 -201 638 459 ;
+C 38 ; WX 640 ; N sigma1 ; B 27 -178 656 457 ;
+C 39 ; WX 732 ; N phi1 ; B 20 -203 695 452 ;
+C 40 ; WX 1103 ; N arrowlefttophalf ; B 71 205 1033 491 ;
+C 41 ; WX 1103 ; N arrowleftbothalf ; B 71 19 1033 305 ;
+C 42 ; WX 1103 ; N arrowrighttophalf ; B 71 205 1033 491 ;
+C 43 ; WX 1103 ; N arrowrightbothalf ; B 71 19 1033 305 ;
+C 44 ; WX 431 ; N arrowhookleft ; B 71 205 361 510 ;
+C 45 ; WX 440 ; N arrowhookright ; B 71 205 370 510 ;
+C 46 ; WX 707 ; N triangleright ; B 26 -25 683 541 ;
+C 47 ; WX 715 ; N triangleleft ; B 26 -25 691 541 ;
+C 48 ; WX 656 ; N zero ; B 28 -13 630 544 ;
+C 49 ; WX 604 ; N one ; B 75 0 539 544 ;
+C 50 ; WX 601 ; N two ; B 19 0 577 554 ;
+C 51 ; WX 607 ; N three ; B 18 -162 571 544 ;
+C 52 ; WX 602 ; N four ; B 21 -144 573 544 ;
+C 53 ; WX 574 ; N five ; B 26 -156 542 532 ;
+C 54 ; WX 652 ; N six ; B 32 -13 625 688 ;
+C 55 ; WX 575 ; N seven ; B 19 -148 550 532 ;
+C 56 ; WX 639 ; N eight ; B 32 -13 608 688 ;
+C 57 ; WX 653 ; N nine ; B 30 -161 624 544 ;
+C 58 ; WX 323 ; N period ; B 47 -13 278 156 ;
+C 59 ; WX 304 ; N comma ; B 45 -181 275 155 ;
+C 60 ; WX 773 ; N less ; B 71 -25 703 539 ;
+C 61 ; WX 552 ; N slash ; B 71 -176 484 693 ;
+C 62 ; WX 773 ; N greater ; B 71 -25 703 539 ;
+C 63 ; WX 938 ; N star ; B 50 -47 888 607 ;
+C 64 ; WX 718 ; N partialdiff ; B 16 -16 675 692 ;
+C 91 ; WX 507 ; N flat ; B 36 -25 483 737 ;
+C 92 ; WX 467 ; N natural ; B 36 -221 431 719 ;
+C 93 ; WX 527 ; N sharp ; B 36 -207 491 770 ;
+C 94 ; WX 1088 ; N slurbelow ; B 71 127 1018 400 ;
+C 95 ; WX 1088 ; N slurabove ; B 71 127 1018 400 ;
+C 96 ; WX 523 ; N lscript ; B 12 -14 517 677 ;
+C 103 ; WX 594 ; N g ; B -5 -207 548 462 ;
+C 118 ; WX 523 ; N v ; B 11 -9 479 462 ;
+C 119 ; WX 771 ; N w ; B 13 -9 727 462 ;
+C 121 ; WX 613 ; N y ; B 2 -207 566 462 ;
+C 123 ; WX 366 ; N dotlessi ; B 23 -9 318 462 ;
+C 124 ; WX 330 ; N dotlessj ; B -212 -207 272 462 ;
+C 125 ; WX 812 ; N weierstrass ; B 53 -193 755 479 ;
+C 126 ; WX 492 ; N vector ; B 136 507 572 794 ;
+C 127 ; WX 307 ; N tie ; B 245 515 722 678 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/rtxbmi7.afm b/fonts/newtx/afm/rtxbmi7.afm
new file mode 100644
index 0000000000..d31440c62d
--- /dev/null
+++ b/fonts/newtx/afm/rtxbmi7.afm
@@ -0,0 +1,108 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20170730
+Comment Creation Date: Fri Oct 19 15:22:09 2018
+FontName rtxbmi7
+FullName rtxbmi7
+FamilyName rtxbmi
+Weight Medium
+Notice (Version 3.1, GPL)
+ItalicAngle -15
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 3.1
+EncodingScheme FontSpecific
+FontBBox -200 -225 965 794
+CapHeight 662
+XHeight 454
+Ascender 662
+Descender -209
+StartCharMetrics 86
+C 0 ; WX 741 ; N Gamma ; B -15 0 720 669 ;
+C 1 ; WX 686 ; N Delta ; B -51 0 576 677 ;
+C 2 ; WX 809 ; N Theta ; B 24 -18 767 685 ;
+C 3 ; WX 732 ; N Lambda ; B -73 -18 655 669 ;
+C 4 ; WX 715 ; N Xi ; B -25 0 760 662 ;
+C 5 ; WX 832 ; N Pi ; B -37 0 907 662 ;
+C 6 ; WX 663 ; N Sigma ; B -57 0 711 662 ;
+C 7 ; WX 811 ; N Upsilon ; B 65 0 859 676 ;
+C 8 ; WX 882 ; N Phi ; B 60 0 856 662 ;
+C 9 ; WX 875 ; N Psi ; B 118 0 963 677 ;
+C 10 ; WX 844 ; N Omega ; B -10 0 821 677 ;
+C 11 ; WX 694 ; N alpha ; B 22 -7 676 462 ;
+C 12 ; WX 631 ; N beta ; B -100 -204 617 680 ;
+C 13 ; WX 650 ; N gamma ; B -4 -205 627 445 ;
+C 14 ; WX 569 ; N delta ; B 15 -16 554 682 ;
+C 15 ; WX 451 ; N epsilon1 ; B 50 -3 507 458 ;
+C 16 ; WX 507 ; N zeta ; B 17 -208 561 669 ;
+C 17 ; WX 615 ; N eta ; B 24 -218 589 462 ;
+C 18 ; WX 542 ; N theta ; B 26 -13 547 677 ;
+C 19 ; WX 339 ; N iota ; B 22 -3 304 464 ;
+C 20 ; WX 521 ; N kappa ; B 7 -9 518 456 ;
+C 21 ; WX 590 ; N lambda ; B 17 -10 587 682 ;
+C 22 ; WX 621 ; N mu ; B -48 -208 569 457 ;
+C 23 ; WX 536 ; N nu ; B 16 -8 531 468 ;
+C 24 ; WX 546 ; N xi ; B -10 -207 566 679 ;
+C 25 ; WX 618 ; N pi ; B 2 -16 613 449 ;
+C 26 ; WX 599 ; N rho ; B -47 -209 584 459 ;
+C 27 ; WX 771 ; N sigma ; B 23 -9 760 460 ;
+C 28 ; WX 563 ; N tau ; B -4 -15 551 449 ;
+C 29 ; WX 620 ; N upsilon ; B 20 -7 591 464 ;
+C 30 ; WX 661 ; N phi ; B 22 -199 629 661 ;
+C 31 ; WX 659 ; N chi ; B -124 -225 647 464 ;
+C 32 ; WX 709 ; N psi ; B 26 -209 697 661 ;
+C 33 ; WX 816 ; N omega ; B 21 -6 786 449 ;
+C 34 ; WX 569 ; N epsilon ; B 15 -9 559 458 ;
+C 35 ; WX 693 ; N theta1 ; B -14 -13 675 727 ;
+C 36 ; WX 937 ; N pi1 ; B 11 -6 925 449 ;
+C 37 ; WX 613 ; N rho1 ; B -9 -201 580 459 ;
+C 38 ; WX 574 ; N sigma1 ; B 26 -178 593 457 ;
+C 39 ; WX 669 ; N phi1 ; B 20 -203 637 452 ;
+C 40 ; WX 1031 ; N arrowlefttophalf ; B 66 207 965 491 ;
+C 41 ; WX 1031 ; N arrowleftbothalf ; B 66 21 965 305 ;
+C 42 ; WX 1031 ; N arrowrighttophalf ; B 66 207 965 491 ;
+C 43 ; WX 1031 ; N arrowrightbothalf ; B 66 21 965 305 ;
+C 44 ; WX 393 ; N arrowhookleft ; B 66 207 327 510 ;
+C 45 ; WX 401 ; N arrowhookright ; B 66 207 335 510 ;
+C 46 ; WX 652 ; N triangleright ; B 24 -25 629 541 ;
+C 47 ; WX 659 ; N triangleleft ; B 24 -25 636 541 ;
+C 48 ; WX 580 ; N zero ; B 26 -13 555 544 ;
+C 49 ; WX 549 ; N one ; B 70 0 488 544 ;
+C 50 ; WX 548 ; N two ; B 18 0 525 554 ;
+C 51 ; WX 555 ; N three ; B 17 -160 521 544 ;
+C 52 ; WX 548 ; N four ; B 20 -144 521 544 ;
+C 53 ; WX 536 ; N five ; B 24 -154 504 532 ;
+C 54 ; WX 578 ; N six ; B 30 -13 552 688 ;
+C 55 ; WX 536 ; N seven ; B 18 -146 512 532 ;
+C 56 ; WX 570 ; N eight ; B 30 -13 541 688 ;
+C 57 ; WX 579 ; N nine ; B 28 -159 551 544 ;
+C 58 ; WX 284 ; N period ; B 44 -13 242 156 ;
+C 59 ; WX 278 ; N comma ; B 42 -181 250 155 ;
+C 60 ; WX 723 ; N less ; B 66 -25 657 539 ;
+C 61 ; WX 516 ; N slash ; B 66 -176 452 693 ;
+C 62 ; WX 723 ; N greater ; B 66 -25 657 539 ;
+C 63 ; WX 877 ; N star ; B 47 -47 830 607 ;
+C 64 ; WX 637 ; N partialdiff ; B 17 -16 602 692 ;
+C 91 ; WX 453 ; N flat ; B 34 -23 430 737 ;
+C 92 ; WX 421 ; N natural ; B 34 -221 387 719 ;
+C 93 ; WX 477 ; N sharp ; B 34 -207 443 770 ;
+C 94 ; WX 1017 ; N slurbelow ; B 66 129 951 400 ;
+C 95 ; WX 1017 ; N slurabove ; B 66 129 951 400 ;
+C 96 ; WX 472 ; N lscript ; B 14 -14 473 677 ;
+C 103 ; WX 545 ; N g ; B -2 -207 507 462 ;
+C 118 ; WX 472 ; N v ; B 13 -9 434 462 ;
+C 119 ; WX 711 ; N w ; B 13 -9 673 462 ;
+C 121 ; WX 562 ; N y ; B 0 -207 523 462 ;
+C 123 ; WX 330 ; N dotlessi ; B 22 -9 286 462 ;
+C 124 ; WX 303 ; N dotlessj ; B -200 -207 254 462 ;
+C 125 ; WX 741 ; N weierstrass ; B 53 -193 691 479 ;
+C 126 ; WX 492 ; N vector ; B 136 507 572 794 ;
+C 127 ; WX 282 ; N tie ; B 229 515 669 678 ;
+C 128 ; WX 0 ; N NameMe.128 ; B 0 0 0 0 ;
+C 129 ; WX 0 ; N NameMe.129 ; B 0 0 0 0 ;
+C 130 ; WX 0 ; N NameMe.130 ; B 0 0 0 0 ;
+C 131 ; WX 0 ; N NameMe.131 ; B 0 0 0 0 ;
+C 132 ; WX 0 ; N NameMe.132 ; B 0 0 0 0 ;
+C 133 ; WX 0 ; N NameMe.133 ; B 0 0 0 0 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/stxscr.afm b/fonts/newtx/afm/stxscr.afm
new file mode 100644
index 0000000000..3091027c90
--- /dev/null
+++ b/fonts/newtx/afm/stxscr.afm
@@ -0,0 +1,235 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20190801
+Comment Creation Date: Mon Aug 26 18:31:35 2019
+FontName stxscr
+FullName stxscr
+FamilyName stxscr
+Weight Regular
+Notice (Copyright (c) 2001-2011 by the STI Pub Companies, consisting of the American Chemical Society, the American Institute of Physics, the American Mathematical Society, the American Physical Society, Else)
+Comment vier, Inc., and The Institute of Electrical and Electronic Engineers, Inc. Portions copyright (c) 1998-2003 by MicroPress, Inc. Portions copyright (c) 1990 by Elsevier, Inc. All rights reserved.
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.000
+EncodingScheme FontSpecific
+FontBBox 8 -251 1306 699
+StartCharMetrics 216
+C 0 ; WX 855 ; N u1D49C ; B 31 -15 846 674 ;
+C 1 ; WX 950 ; N uni212C ; B 34 -15 902 687 ;
+C 2 ; WX 797 ; N u1D49E ; B 37 -15 781 687 ;
+C 3 ; WX 885 ; N u1D49F ; B 36 -15 818 687 ;
+C 4 ; WX 750 ; N uni2130 ; B 100 -15 734 687 ;
+C 5 ; WX 919 ; N uni2131 ; B 43 0 907 680 ;
+C 6 ; WX 773 ; N u1D4A2 ; B 83 -15 740 687 ;
+C 7 ; WX 997 ; N uni210B ; B 53 -15 991 687 ;
+C 8 ; WX 897 ; N uni2110 ; B 26 -15 888 675 ;
+C 9 ; WX 802 ; N u1D4A5 ; B 9 -177 792 674 ;
+C 10 ; WX 1009 ; N u1D4A6 ; B 40 -15 1004 687 ;
+C 11 ; WX 946 ; N uni2112 ; B 33 -15 931 687 ;
+C 12 ; WX 1072 ; N uni2133 ; B 38 -15 1056 674 ;
+C 13 ; WX 970 ; N u1D4A9 ; B 38 -15 956 687 ;
+C 14 ; WX 692 ; N u1D4AA ; B 82 -15 663 680 ;
+C 15 ; WX 910 ; N u1D4AB ; B 38 -15 886 687 ;
+C 16 ; WX 692 ; N u1D4AC ; B 82 -38 663 680 ;
+C 17 ; WX 944 ; N uni211B ; B 34 -15 876 687 ;
+C 18 ; WX 743 ; N u1D4AE ; B 67 -15 701 680 ;
+C 19 ; WX 912 ; N u1D4AF ; B 43 -15 907 687 ;
+C 20 ; WX 842 ; N u1D4B0 ; B 36 -15 805 687 ;
+C 21 ; WX 932 ; N u1D4B1 ; B 35 -15 922 687 ;
+C 22 ; WX 1078 ; N u1D4B2 ; B 35 -15 1070 687 ;
+C 23 ; WX 891 ; N u1D4B3 ; B 36 -15 873 687 ;
+C 24 ; WX 926 ; N u1D4B4 ; B 91 -226 916 687 ;
+C 25 ; WX 932 ; N u1D4B5 ; B 59 -15 912 687 ;
+C 26 ; WX 819 ; N u1D4B6 ; B 30 -11 758 441 ;
+C 27 ; WX 580 ; N u1D4B7 ; B 47 -12 559 687 ;
+C 28 ; WX 662 ; N u1D4B8 ; B 30 -11 589 441 ;
+C 29 ; WX 845 ; N u1D4B9 ; B 30 -11 827 687 ;
+C 30 ; WX 627 ; N uni212F ; B 30 -11 554 441 ;
+C 31 ; WX 685 ; N u1D4BB ; B 27 -209 673 687 ;
+C 32 ; WX 738 ; N uni210A ; B 30 -219 678 441 ;
+C 33 ; WX 753 ; N u1D4BD ; B 38 -11 690 687 ;
+C 34 ; WX 496 ; N u1D4BE ; B 83 -11 484 653 ;
+C 35 ; WX 730 ; N u1D4BF ; B 9 -219 718 653 ;
+C 36 ; WX 726 ; N u1D4C0 ; B 40 -11 666 687 ;
+C 37 ; WX 579 ; N u1D4C1 ; B 48 -11 571 687 ;
+C 38 ; WX 1038 ; N u1D4C2 ; B 49 -11 978 441 ;
+C 39 ; WX 761 ; N u1D4C3 ; B 49 -11 701 441 ;
+C 40 ; WX 697 ; N uni2134 ; B 30 -11 680 441 ;
+C 41 ; WX 773 ; N u1D4C5 ; B 23 -209 694 441 ;
+C 42 ; WX 780 ; N u1D4C6 ; B 30 -209 743 441 ;
+C 43 ; WX 580 ; N u1D4C7 ; B 48 0 572 444 ;
+C 44 ; WX 515 ; N u1D4C8 ; B 62 -11 412 531 ;
+C 45 ; WX 551 ; N u1D4C9 ; B 30 -11 532 658 ;
+C 46 ; WX 753 ; N u1D4CA ; B 30 -11 693 424 ;
+C 47 ; WX 618 ; N u1D4CB ; B 30 -11 582 441 ;
+C 48 ; WX 888 ; N u1D4CC ; B 30 -11 852 441 ;
+C 49 ; WX 752 ; N u1D4CD ; B 65 -11 675 441 ;
+C 50 ; WX 658 ; N u1D4CE ; B 30 -219 617 424 ;
+C 51 ; WX 691 ; N u1D4CF ; B 52 -11 617 478 ;
+C 52 ; WX 496 ; N u1D4BE.dtls ; B 83 -11 438 424 ;
+C 53 ; WX 730 ; N u1D4BF.dtls ; B 9 -219 596 424 ;
+C 56 ; WX 984 ; N u1D4D0 ; B 50 -21 955 699 ;
+C 57 ; WX 1060 ; N u1D4D1 ; B 55 -21 985 699 ;
+C 58 ; WX 912 ; N u1D4D2 ; B 60 -21 877 699 ;
+C 59 ; WX 991 ; N u1D4D3 ; B 60 -21 906 699 ;
+C 60 ; WX 826 ; N u1D4D4 ; B 95 -21 791 699 ;
+C 61 ; WX 1042 ; N u1D4D5 ; B 65 -21 1025 699 ;
+C 62 ; WX 834 ; N u1D4D6 ; B 82 -21 799 699 ;
+C 63 ; WX 1171 ; N u1D4D7 ; B 65 -21 1154 699 ;
+C 64 ; WX 997 ; N u1D4D8 ; B 47 -21 977 699 ;
+C 65 ; WX 906 ; N u1D4D9 ; B 19 -224 886 699 ;
+C 66 ; WX 1154 ; N u1D4DA ; B 45 -21 1130 699 ;
+C 67 ; WX 1036 ; N u1D4DB ; B 40 -21 1015 699 ;
+C 68 ; WX 1300 ; N u1D4DC ; B 60 -21 1245 699 ;
+C 69 ; WX 1095 ; N u1D4DD ; B 60 -21 1078 699 ;
+C 70 ; WX 809 ; N u1D4DE ; B 72 -21 749 699 ;
+C 71 ; WX 1025 ; N u1D4DF ; B 55 -21 994 699 ;
+C 72 ; WX 809 ; N u1D4E0 ; B 72 -52 749 699 ;
+C 73 ; WX 1048 ; N u1D4E1 ; B 55 -21 973 699 ;
+C 74 ; WX 816 ; N u1D4E2 ; B 81 -21 781 699 ;
+C 75 ; WX 1030 ; N u1D4E3 ; B 65 -21 1025 699 ;
+C 76 ; WX 964 ; N u1D4E4 ; B 60 -21 904 699 ;
+C 77 ; WX 1040 ; N u1D4E5 ; B 60 -21 1024 699 ;
+C 78 ; WX 1320 ; N u1D4E6 ; B 60 -21 1306 699 ;
+C 79 ; WX 1033 ; N u1D4E7 ; B 64 -21 1010 699 ;
+C 80 ; WX 989 ; N u1D4E8 ; B 60 -224 963 699 ;
+C 81 ; WX 996 ; N u1D4E9 ; B 50 -21 976 699 ;
+C 82 ; WX 942 ; N u1D4EA ; B 35 -14 865 462 ;
+C 83 ; WX 646 ; N u1D4EB ; B 60 -14 624 699 ;
+C 84 ; WX 764 ; N u1D4EC ; B 35 -14 683 462 ;
+C 85 ; WX 949 ; N u1D4ED ; B 28 -14 912 699 ;
+C 86 ; WX 726 ; N u1D4EE ; B 35 -14 648 462 ;
+C 87 ; WX 768 ; N u1D4EF ; B 25 -205 749 699 ;
+C 88 ; WX 819 ; N u1D4F0 ; B 27 -224 771 462 ;
+C 89 ; WX 838 ; N u1D4F1 ; B 55 -14 758 699 ;
+C 90 ; WX 558 ; N u1D4F2 ; B 40 -14 534 698 ;
+C 91 ; WX 840 ; N u1D4F3 ; B 41 -223 823 698 ;
+C 92 ; WX 810 ; N u1D4F4 ; B 55 -14 730 699 ;
+C 93 ; WX 650 ; N u1D4F5 ; B 43 -14 632 699 ;
+C 94 ; WX 1137 ; N u1D4F6 ; B 45 -14 1057 462 ;
+C 95 ; WX 851 ; N u1D4F7 ; B 45 -14 771 462 ;
+C 96 ; WX 848 ; N u1D4F8 ; B 35 -14 780 462 ;
+C 97 ; WX 885 ; N u1D4F9 ; B 25 -205 770 462 ;
+C 98 ; WX 913 ; N u1D4FA ; B 35 -205 833 462 ;
+C 99 ; WX 677 ; N u1D4FB ; B 40 0 648 462 ;
+C 100 ; WX 562 ; N u1D4FC ; B 51 -14 449 557 ;
+C 101 ; WX 618 ; N u1D4FD ; B 47 -14 612 669 ;
+C 102 ; WX 842 ; N u1D4FE ; B 31 -14 762 450 ;
+C 103 ; WX 732 ; N u1D4FF ; B 40 -14 670 458 ;
+C 104 ; WX 1012 ; N u1D500 ; B 40 -14 950 458 ;
+C 105 ; WX 820 ; N u1D501 ; B 63 -14 740 462 ;
+C 106 ; WX 784 ; N u1D502 ; B 40 -224 711 450 ;
+C 107 ; WX 782 ; N u1D503 ; B 61 -14 702 493 ;
+C 108 ; WX 558 ; N u1D4F2.dtls ; B 40 -14 486 450 ;
+C 109 ; WX 840 ; N u1D4F3.dtls ; B 41 -223 710 450 ;
+C 112 ; WX 707 ; N u1D49C.alt ; B 28 -15 693 674 ;
+C 113 ; WX 864 ; N uni212C.alt ; B 35 -15 829 687 ;
+C 114 ; WX 759 ; N u1D49E.alt ; B 35 -15 729 687 ;
+C 115 ; WX 799 ; N u1D49F.alt ; B 34 -15 754 668 ;
+C 116 ; WX 708 ; N uni2130.alt ; B 35 -15 683 687 ;
+C 117 ; WX 739 ; N uni2131.alt ; B 35 0 689 680 ;
+C 118 ; WX 761 ; N u1D4A2.alt ; B 35 -15 704 687 ;
+C 119 ; WX 819 ; N uni210B.alt ; B 35 -15 800 687 ;
+C 120 ; WX 677 ; N uni2110.alt ; B 15 -15 635 675 ;
+C 121 ; WX 516 ; N u1D4A5.alt ; B 25 -177 464 674 ;
+C 122 ; WX 846 ; N u1D4A6.alt ; B 35 -15 816 687 ;
+C 123 ; WX 741 ; N uni2112.alt ; B 20 -15 708 687 ;
+C 124 ; WX 967 ; N uni2133.alt ; B 21 -15 917 674 ;
+C 125 ; WX 707 ; N u1D4A9.alt ; B 20 -15 682 687 ;
+C 126 ; WX 644 ; N u1D4AA.alt ; B 47 -15 582 680 ;
+C 127 ; WX 833 ; N u1D4AB.alt ; B 59 -15 778 687 ;
+C 128 ; WX 660 ; N u1D4AC.alt ; B 47 -58 603 680 ;
+C 129 ; WX 890 ; N uni211B.alt ; B 35 -15 880 687 ;
+C 130 ; WX 588 ; N u1D4AE.alt ; B 40 -15 528 680 ;
+C 131 ; WX 697 ; N u1D4AF.alt ; B 19 -15 671 687 ;
+C 132 ; WX 852 ; N u1D4B0.alt ; B 17 -15 832 687 ;
+C 133 ; WX 834 ; N u1D4B1.alt ; B 8 -15 799 687 ;
+C 134 ; WX 991 ; N u1D4B2.alt ; B 15 -15 956 687 ;
+C 135 ; WX 774 ; N u1D4B3.alt ; B 27 -15 739 687 ;
+C 136 ; WX 777 ; N u1D4B4.alt ; B 17 -226 742 687 ;
+C 137 ; WX 757 ; N u1D4B5.alt ; B 34 -15 722 687 ;
+C 138 ; WX 684 ; N u1D4B6.alt ; B 31 -11 654 441 ;
+C 139 ; WX 620 ; N u1D4B7.alt ; B 27 -12 579 687 ;
+C 140 ; WX 523 ; N u1D4B8.alt ; B 32 -11 482 441 ;
+C 141 ; WX 706 ; N u1D4B9.alt ; B 30 -11 670 687 ;
+C 142 ; WX 506 ; N uni212F.alt ; B 32 -11 475 441 ;
+C 143 ; WX 426 ; N u1D4BB.alt ; B 62 -209 371 687 ;
+C 144 ; WX 582 ; N uni210A.alt ; B 33 -219 535 441 ;
+C 145 ; WX 705 ; N u1D4BD.alt ; B 30 -11 685 687 ;
+C 146 ; WX 392 ; N u1D4BE.alt ; B 31 -11 367 653 ;
+C 147 ; WX 409 ; N u1D4BF.alt ; B 21 -219 355 653 ;
+C 148 ; WX 688 ; N u1D4C0.alt ; B 30 -11 663 687 ;
+C 149 ; WX 445 ; N u1D4C1.alt ; B 30 -11 400 687 ;
+C 150 ; WX 941 ; N u1D4C2.alt ; B 32 -11 921 441 ;
+C 151 ; WX 673 ; N u1D4C3.alt ; B 33 -11 648 441 ;
+C 152 ; WX 664 ; N uni2134.alt ; B 32 -11 594 441 ;
+C 153 ; WX 630 ; N u1D4C5.alt ; B 31 -210 558 440 ;
+C 154 ; WX 647 ; N u1D4C6.alt ; B 31 -209 576 441 ;
+C 155 ; WX 545 ; N u1D4C7.alt ; B 32 0 480 444 ;
+C 156 ; WX 450 ; N u1D4C8.alt ; B 55 -11 380 531 ;
+C 157 ; WX 442 ; N u1D4C9.alt ; B 33 -11 397 658 ;
+C 158 ; WX 713 ; N u1D4CA.alt ; B 39 -11 693 424 ;
+C 159 ; WX 619 ; N u1D4CB.alt ; B 38 -11 567 441 ;
+C 160 ; WX 909 ; N u1D4CC.alt ; B 33 -11 837 441 ;
+C 161 ; WX 605 ; N u1D4CD.alt ; B 31 -11 560 441 ;
+C 162 ; WX 612 ; N u1D4CE.alt ; B 31 -219 539 424 ;
+C 163 ; WX 541 ; N u1D4CF.alt ; B 33 -11 511 478 ;
+C 164 ; WX 392 ; N u1D4BE.alt.dtls ; B 31 -11 367 424 ;
+C 165 ; WX 409 ; N u1D4BF.alt.dtls ; B 21 -219 346 424 ;
+C 168 ; WX 829 ; N u1D4D0.alt ; B 53 -21 812 699 ;
+C 169 ; WX 970 ; N u1D4D1.alt ; B 50 -21 924 699 ;
+C 170 ; WX 850 ; N u1D4D2.alt ; B 50 -21 797 699 ;
+C 171 ; WX 920 ; N u1D4D3.alt ; B 50 -21 861 699 ;
+C 172 ; WX 806 ; N u1D4D4.alt ; B 50 -21 752 699 ;
+C 173 ; WX 872 ; N u1D4D5.alt ; B 52 -21 832 699 ;
+C 174 ; WX 814 ; N u1D4D6.alt ; B 50 -21 755 699 ;
+C 175 ; WX 953 ; N u1D4D7.alt ; B 53 -21 911 699 ;
+C 176 ; WX 777 ; N u1D4D8.alt ; B 37 -21 723 699 ;
+C 177 ; WX 619 ; N u1D4D9.alt ; B 45 -224 560 699 ;
+C 178 ; WX 1007 ; N u1D4DA.alt ; B 52 -21 950 699 ;
+C 179 ; WX 864 ; N u1D4DB.alt ; B 53 -21 814 699 ;
+C 180 ; WX 1191 ; N u1D4DC.alt ; B 40 -21 1131 699 ;
+C 181 ; WX 889 ; N u1D4DD.alt ; B 45 -31 831 689 ;
+C 182 ; WX 741 ; N u1D4DE.alt ; B 63 -21 667 699 ;
+C 183 ; WX 930 ; N u1D4DF.alt ; B 53 -21 868 699 ;
+C 184 ; WX 741 ; N u1D4E0.alt ; B 63 -72 667 699 ;
+C 185 ; WX 999 ; N u1D4E1.alt ; B 53 -21 967 699 ;
+C 186 ; WX 678 ; N u1D4E2.alt ; B 67 -21 611 699 ;
+C 187 ; WX 820 ; N u1D4E3.alt ; B 50 -21 789 699 ;
+C 188 ; WX 944 ; N u1D4E4.alt ; B 38 -21 920 699 ;
+C 189 ; WX 935 ; N u1D4E5.alt ; B 34 -21 907 699 ;
+C 190 ; WX 1218 ; N u1D4E6.alt ; B 36 -21 1190 699 ;
+C 191 ; WX 897 ; N u1D4E7.alt ; B 48 -21 846 699 ;
+C 192 ; WX 873 ; N u1D4E8.alt ; B 38 -224 821 699 ;
+C 193 ; WX 837 ; N u1D4E9.alt ; B 41 -21 795 699 ;
+C 194 ; WX 794 ; N u1D4EA.alt ; B 35 -14 761 462 ;
+C 195 ; WX 686 ; N u1D4EB.alt ; B 41 -14 631 699 ;
+C 196 ; WX 600 ; N u1D4EC.alt ; B 43 -14 565 462 ;
+C 197 ; WX 796 ; N u1D4ED.alt ; B 44 -14 756 699 ;
+C 198 ; WX 601 ; N u1D4EE.alt ; B 37 -14 564 462 ;
+C 199 ; WX 495 ; N u1D4EF.alt ; B 67 -205 451 699 ;
+C 200 ; WX 701 ; N u1D4F0.alt ; B 45 -251 640 462 ;
+C 201 ; WX 748 ; N u1D4F1.alt ; B 45 -14 690 699 ;
+C 202 ; WX 481 ; N u1D4F2.alt ; B 40 -14 446 698 ;
+C 203 ; WX 534 ; N u1D4F3.alt ; B 34 -221 475 698 ;
+C 204 ; WX 707 ; N u1D4F4.alt ; B 40 -14 667 699 ;
+C 205 ; WX 554 ; N u1D4F5.alt ; B 42 -14 507 699 ;
+C 206 ; WX 1045 ; N u1D4F6.alt ; B 41 -14 1004 462 ;
+C 207 ; WX 760 ; N u1D4F7.alt ; B 37 -14 725 462 ;
+C 208 ; WX 753 ; N u1D4F8.alt ; B 49 -14 689 462 ;
+C 209 ; WX 739 ; N u1D4F9.alt ; B 45 -205 673 462 ;
+C 210 ; WX 735 ; N u1D4FA.alt ; B 44 -205 685 462 ;
+C 211 ; WX 627 ; N u1D4FB.alt ; B 45 0 564 462 ;
+C 212 ; WX 496 ; N u1D4FC.alt ; B 63 -14 434 557 ;
+C 213 ; WX 512 ; N u1D4FD.alt ; B 37 -14 477 669 ;
+C 214 ; WX 769 ; N u1D4FE.alt ; B 39 -14 734 449 ;
+C 215 ; WX 676 ; N u1D4FF.alt ; B 44 -14 637 458 ;
+C 216 ; WX 957 ; N u1D500.alt ; B 36 -14 909 458 ;
+C 217 ; WX 693 ; N u1D501.alt ; B 40 -14 636 462 ;
+C 218 ; WX 671 ; N u1D502.alt ; B 44 -251 620 449 ;
+C 219 ; WX 641 ; N u1D503.alt ; B 40 -14 589 493 ;
+C 220 ; WX 481 ; N u1D4F2.alt.dtls ; B 40 -14 446 449 ;
+C 221 ; WX 534 ; N u1D4F3.alt.dtls ; B 34 -221 475 449 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/txbex-bar.afm b/fonts/newtx/afm/txbex-bar.afm
index a8c2c691f5..9342e0cdbc 100644
--- a/fonts/newtx/afm/txbex-bar.afm
+++ b/fonts/newtx/afm/txbex-bar.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20161003
-Comment Creation Date: Fri Feb 10 16:24:39 2017
+Comment Generated by FontForge 20170730
+Comment Creation Date: Sun Jun 16 15:43:29 2019
FontName txbex-bar
ItalicAngle 0
IsFixedPitch false
@@ -8,23 +8,23 @@ UnderlinePosition -100
UnderlineThickness 50
EncodingScheme FontSpecific
FontBBox -11 -2364 2900 1444
-StartCharMetrics 82
-C 0 ; WX 343 ; N parenleftbigx ; B 50 -1064 313 56 ;
-C 1 ; WX 343 ; N parenrightbigx ; B 30 -1064 293 56 ;
+StartCharMetrics 93
+C 0 ; WX 343 ; N parenleftbigx ; B 50 -1069 313 56 ;
+C 1 ; WX 343 ; N parenrightbigx ; B 30 -1069 293 56 ;
C 2 ; WX 359 ; N bracketleftbigx ; B 88 -1064 325 56 ;
-C 3 ; WX 359 ; N bracketrightbigx ; B 34 -1064 271 56 ;
-C 4 ; WX 411 ; N floorleftbigx ; B 88 -1064 377 56 ;
-C 5 ; WX 411 ; N floorrightbigx ; B 34 -1064 323 56 ;
-C 6 ; WX 411 ; N ceilingleftbigx ; B 88 -1064 377 56 ;
-C 7 ; WX 411 ; N ceilingrightbigx ; B 34 -1064 323 56 ;
-C 8 ; WX 432 ; N braceleftbigx ; B 58 -1064 374 56 ;
-C 9 ; WX 432 ; N bracerightbigx ; B 58 -1064 374 56 ;
-C 10 ; WX 402 ; N angleleftbigx ; B 50 -1064 352 56 ;
-C 11 ; WX 402 ; N anglerightbigx ; B 50 -1064 352 56 ;
-C 12 ; WX 272 ; N barex ; B 86 0 186 484 ;
-C 13 ; WX 516 ; N bardblex ; B 86 0 430 484 ;
-C 14 ; WX 272 ; N barexbigx ; B 89 -1064 183 56 ;
-C 15 ; WX 516 ; N bardblexbigx ; B 86 -1064 430 56 ;
+C 3 ; WX 359 ; N bracketrightbigx ; B 34 -1104 271 96 ;
+C 4 ; WX 411 ; N floorleftbigx ; B 88 -1104 377 96 ;
+C 5 ; WX 411 ; N floorrightbigx ; B 34 -1104 323 96 ;
+C 6 ; WX 411 ; N ceilingleftbigx ; B 88 -1104 377 96 ;
+C 7 ; WX 411 ; N ceilingrightbigx ; B 34 -1104 323 96 ;
+C 8 ; WX 432 ; N braceleftbigx ; B 58 -1109 374 96 ;
+C 9 ; WX 432 ; N bracerightbigx ; B 58 -1109 374 96 ;
+C 10 ; WX 402 ; N angleleftbigx ; B 50 -1104 352 96 ;
+C 11 ; WX 402 ; N anglerightbigx ; B 50 -1104 352 96 ;
+C 12 ; WX 272 ; N barex ; B 86 -6 186 495 ;
+C 13 ; WX 516 ; N bardblex ; B 86 -5 430 495 ;
+C 14 ; WX 272 ; N barexbigx ; B 89 -1065 183 56 ;
+C 15 ; WX 516 ; N bardblexbigx ; B 86 -1065 430 56 ;
C 16 ; WX 300 ; N grouphtipdownleft ; B -7 -103 310 129 ;
C 17 ; WX 300 ; N grouphtipdownright ; B -11 -107 307 130 ;
C 18 ; WX 307 ; N grouphtipupleft ; B 2 0 319 234 ;
@@ -47,33 +47,33 @@ C 37 ; WX 411 ; N floorrightBigg ; B 34 -2364 323 56 ;
C 38 ; WX 411 ; N ceilingleftBigg ; B 88 -2364 377 56 ;
C 39 ; WX 411 ; N ceilingrightBigg ; B 34 -2364 323 56 ;
C 40 ; WX 444 ; N braceleftBig ; B 68 -1397 376 56 ;
-C 41 ; WX 444 ; N bracerightBig ; B 68 -1397 376 56 ;
-C 42 ; WX 475 ; N parenlefttpA ; B 50 0 430 1424 ;
-C 43 ; WX 475 ; N parenrighttpA ; B 45 0 425 1424 ;
-C 44 ; WX 475 ; N parenleftbtA ; B 50 0 430 1424 ;
-C 45 ; WX 475 ; N parenrightbtA ; B 45 0 425 1424 ;
-C 46 ; WX 475 ; N parenleftexA ; B 50 0 184 484 ;
-C 47 ; WX 475 ; N parenrightexA ; B 291 0 425 484 ;
-C 48 ; WX 421 ; N parenlefttp ; B 50 -1153 391 56 ;
-C 49 ; WX 421 ; N parenrighttp ; B 30 -1153 371 56 ;
-C 50 ; WX 389 ; N bracketlefttp ; B 88 0 355 484 ;
-C 51 ; WX 389 ; N bracketrighttp ; B 34 0 301 484 ;
-C 52 ; WX 389 ; N bracketleftbt ; B 88 0 355 484 ;
-C 53 ; WX 389 ; N bracketrightbt ; B 34 0 301 484 ;
-C 54 ; WX 389 ; N bracketleftex ; B 88 0 205 484 ;
-C 55 ; WX 389 ; N bracketrightex ; B 184 0 301 484 ;
-C 56 ; WX 597 ; N bracelefttp ; B 234 0 549 752 ;
-C 57 ; WX 597 ; N bracerighttp ; B 48 0 363 752 ;
-C 58 ; WX 597 ; N braceleftbt ; B 234 0 549 752 ;
-C 59 ; WX 597 ; N bracerightbt ; B 48 0 363 752 ;
-C 60 ; WX 597 ; N braceleftmid ; B 61 -438 363 484 ;
-C 61 ; WX 597 ; N bracerightmid ; B 234 -438 536 484 ;
-C 62 ; WX 597 ; N braceex ; B 234 0 363 242 ;
-C 63 ; WX 590 ; N arrowvertex ; B 249 0 341 484 ;
-C 64 ; WX 421 ; N parenleftbt ; B 50 -829 391 380 ;
-C 65 ; WX 421 ; N parenrightbt ; B 30 -829 371 380 ;
-C 66 ; WX 421 ; N parenleftex ; B 50 0 184 484 ;
-C 67 ; WX 421 ; N parenrightex ; B 237 0 371 484 ;
+C 41 ; WX 444 ; N bracerightBig ; B 68 -1397 376 57 ;
+C 42 ; WX 475 ; N parenlefttpA ; B 50 -20 430 1424 ;
+C 43 ; WX 475 ; N parenrighttpA ; B 45 -20 425 1424 ;
+C 44 ; WX 475 ; N parenleftbtA ; B 50 0 430 1444 ;
+C 45 ; WX 475 ; N parenrightbtA ; B 45 0 425 1444 ;
+C 46 ; WX 475 ; N parenleftexA ; B 50 -21 184 499 ;
+C 47 ; WX 475 ; N parenrightexA ; B 291 -21 425 499 ;
+C 48 ; WX 421 ; N parenlefttp ; B 50 -1173 391 56 ;
+C 49 ; WX 421 ; N parenrighttp ; B 30 -1173 371 56 ;
+C 50 ; WX 389 ; N bracketlefttp ; B 88 -20 355 484 ;
+C 51 ; WX 389 ; N bracketrighttp ; B 34 -20 301 484 ;
+C 52 ; WX 389 ; N bracketleftbt ; B 88 0 355 511 ;
+C 53 ; WX 389 ; N bracketrightbt ; B 34 0 301 511 ;
+C 54 ; WX 389 ; N bracketleftex ; B 88 -9 205 499 ;
+C 55 ; WX 389 ; N bracketrightex ; B 184 -7 301 500 ;
+C 56 ; WX 597 ; N bracelefttp ; B 234 -20 549 752 ;
+C 57 ; WX 597 ; N bracerighttp ; B 48 -20 363 752 ;
+C 58 ; WX 597 ; N braceleftbt ; B 234 0 549 772 ;
+C 59 ; WX 597 ; N bracerightbt ; B 48 0 363 772 ;
+C 60 ; WX 597 ; N braceleftmid ; B 61 -462 363 507 ;
+C 61 ; WX 597 ; N bracerightmid ; B 234 -461 536 507 ;
+C 62 ; WX 597 ; N braceex ; B 234 -4 363 257 ;
+C 63 ; WX 590 ; N arrowvertex ; B 249 -4 341 497 ;
+C 64 ; WX 421 ; N parenleftbt ; B 50 -829 391 400 ;
+C 65 ; WX 421 ; N parenrightbt ; B 30 -829 371 400 ;
+C 66 ; WX 421 ; N parenleftex ; B 50 -21 184 499 ;
+C 67 ; WX 421 ; N parenrightex ; B 237 -21 371 499 ;
C 68 ; WX 666 ; N hatwide ; B 53 576 613 752 ;
C 69 ; WX 1900 ; N hat4 ; B 0 564 1900 752 ;
C 70 ; WX 2400 ; N hat5 ; B 0 559 2400 752 ;
@@ -100,6 +100,7 @@ C 104 ; WX 411 ; N floorleftBig ; B 88 -1398 377 56 ;
C 105 ; WX 411 ; N floorrightBig ; B 34 -1398 323 56 ;
C 106 ; WX 411 ; N ceilingleftBig ; B 88 -1398 377 56 ;
C 107 ; WX 411 ; N ceilingrightBig ; B 34 -1398 323 56 ;
-C 119 ; WX 726 ; N arrowvertexdbl ; B 195 0 531 484 ;
+C 118 ; WX 1070 ; N radicaltp ; B 689 -244 1070 96 ;
+C 119 ; WX 726 ; N arrowvertexdbl ; B 195 -5 531 497 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/newtx/afm/txbmiaSTbb.afm b/fonts/newtx/afm/txbmiaSTbb.afm
new file mode 100644
index 0000000000..23f09c23e2
--- /dev/null
+++ b/fonts/newtx/afm/txbmiaSTbb.afm
@@ -0,0 +1,87 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20170730
+Comment Creation Date: Mon Jun 3 08:19:04 2019
+FontName txbmiaSTbb
+FullName txbmiaST Blackboard Bold
+FamilyName txbmiaST
+Weight Bold
+Notice (Copyright (c) 2001-2011 by the STI Pub Companies, consisting of the American Chemical Society, the American Institute of Physics, the American Mathematical Society, the American Physical Society, Else)
+Comment vier, Inc., and The Institute of Electrical and Electronic Engineers, Inc. Portions copyright (c) 1998-2003 by MicroPress, Inc. Portions copyright (c) 1990 by Elsevier, Inc. All rights reserved.
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -50
+UnderlineThickness 50
+Version Version 1.1-beta1
+EncodingScheme FontSpecific
+FontBBox -20 -205 1015 693
+StartCharMetrics 68
+C 0 ; WX 497 ; N uni213E ; B 75 0 643 676 ;
+C 5 ; WX 768 ; N uni213F ; B 75 0 693 676 ;
+C 13 ; WX 646 ; N uni213D ; B 23 -203 624 486 ;
+C 25 ; WX 804 ; N uni213C ; B 55 -11 759 461 ;
+C 48 ; WX 540 ; N u1D7D8 ; B 28 -14 512 676 ;
+C 49 ; WX 540 ; N u1D7D9 ; B 91 0 355 693 ;
+C 50 ; WX 547 ; N u1D7DA ; B 48 0 514 676 ;
+C 51 ; WX 540 ; N u1D7DB ; B 49 -14 478 676 ;
+C 52 ; WX 540 ; N u1D7DC ; B 20 0 524 676 ;
+C 53 ; WX 540 ; N u1D7DD ; B 35 -14 489 662 ;
+C 54 ; WX 540 ; N u1D7DE ; B 28 -14 512 676 ;
+C 55 ; WX 540 ; N u1D7DF ; B 24 0 511 662 ;
+C 56 ; WX 540 ; N u1D7E0 ; B 28 -14 512 676 ;
+C 57 ; WX 540 ; N u1D7E1 ; B 28 -12 512 676 ;
+C 65 ; WX 787 ; N u1D538 ; B 50 0 737 676 ;
+C 66 ; WX 729 ; N u1D539 ; B 75 0 669 676 ;
+C 67 ; WX 727 ; N uni2102 ; B 45 -19 672 691 ;
+C 68 ; WX 748 ; N u1D53B ; B 75 0 703 676 ;
+C 69 ; WX 650 ; N u1D53C ; B 75 0 595 676 ;
+C 70 ; WX 474 ; N u1D53D ; B 75 0 595 676 ;
+C 71 ; WX 751 ; N u1D53E ; B 45 -19 686 691 ;
+C 72 ; WX 768 ; N uni210D ; B 75 0 693 676 ;
+C 73 ; WX 380 ; N u1D540 ; B 80 0 300 676 ;
+C 74 ; WX 618 ; N u1D541 ; B 50 -19 548 676 ;
+C 75 ; WX 792 ; N u1D542 ; B 75 0 767 676 ;
+C 76 ; WX 662 ; N u1D543 ; B 70 0 607 676 ;
+C 77 ; WX 914 ; N u1D544 ; B 75 0 839 676 ;
+C 78 ; WX 738 ; N uni2115 ; B 75 0 663 676 ;
+C 79 ; WX 787 ; N u1D546 ; B 45 -19 742 691 ;
+C 80 ; WX 700 ; N uni2119 ; B 75 0 670 676 ;
+C 81 ; WX 797 ; N uni211A ; B 45 -64 747 691 ;
+C 82 ; WX 783 ; N uni211D ; B 75 0 758 676 ;
+C 83 ; WX 702 ; N u1D54A ; B 45 -19 657 692 ;
+C 84 ; WX 556 ; N u1D54B ; B 25 0 645 676 ;
+C 85 ; WX 738 ; N u1D54C ; B 70 -19 668 676 ;
+C 86 ; WX 627 ; N u1D54D ; B 17 0 704 676 ;
+C 87 ; WX 996 ; N u1D54E ; B 17 0 1015 676 ;
+C 88 ; WX 794 ; N u1D54F ; B 20 0 769 676 ;
+C 89 ; WX 652 ; N u1D550 ; B 23 0 739 676 ;
+C 90 ; WX 777 ; N uni2124 ; B 52 0 727 691 ;
+C 97 ; WX 623 ; N u1D552 ; B 50 -14 563 473 ;
+C 98 ; WX 643 ; N u1D553 ; B 60 -14 593 676 ;
+C 99 ; WX 574 ; N u1D554 ; B 50 -14 524 473 ;
+C 100 ; WX 643 ; N u1D555 ; B 50 -14 583 676 ;
+C 101 ; WX 573 ; N u1D556 ; B 50 -14 523 473 ;
+C 102 ; WX 474 ; N u1D557 ; B 25 0 536 676 ;
+C 103 ; WX 643 ; N u1D558 ; B 50 -205 583 473 ;
+C 104 ; WX 624 ; N u1D559 ; B 60 0 564 676 ;
+C 105 ; WX 330 ; N u1D55A ; B 65 0 265 691 ;
+C 106 ; WX 371 ; N u1D55B ; B -20 -205 311 691 ;
+C 107 ; WX 646 ; N u1D55C ; B 60 0 621 676 ;
+C 108 ; WX 325 ; N u1D55D ; B 60 0 265 676 ;
+C 109 ; WX 908 ; N u1D55E ; B 60 0 848 473 ;
+C 110 ; WX 624 ; N u1D55F ; B 60 0 564 473 ;
+C 111 ; WX 598 ; N u1D560 ; B 45 -14 553 473 ;
+C 112 ; WX 643 ; N u1D561 ; B 60 -205 593 473 ;
+C 113 ; WX 643 ; N u1D562 ; B 50 -205 583 473 ;
+C 114 ; WX 339 ; N u1D563 ; B 60 0 445 473 ;
+C 115 ; WX 549 ; N u1D564 ; B 52 -14 497 473 ;
+C 116 ; WX 446 ; N u1D565 ; B 25 -14 411 676 ;
+C 117 ; WX 619 ; N u1D566 ; B 55 -16 559 461 ;
+C 118 ; WX 494 ; N u1D567 ; B 6 0 544 461 ;
+C 119 ; WX 786 ; N u1D568 ; B 22 0 789 461 ;
+C 120 ; WX 660 ; N u1D569 ; B 25 0 635 461 ;
+C 121 ; WX 471 ; N u1D56A ; B -9 -205 537 461 ;
+C 122 ; WX 513 ; N u1D56B ; B 40 0 473 461 ;
+C 123 ; WX 330 ; N u1D55A.dtls ; B 65 0 265 461 ;
+C 124 ; WX 371 ; N u1D55B.dtls ; B -20 -205 311 461 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/txbmiaX.afm b/fonts/newtx/afm/txbmiaX.afm
index 65d9aa63f8..e0169be9d0 100644
--- a/fonts/newtx/afm/txbmiaX.afm
+++ b/fonts/newtx/afm/txbmiaX.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20170730
-Comment Creation Date: Tue Apr 17 15:51:39 2018
+Comment Generated by FontForge 20190801
+Comment Creation Date: Tue Sep 10 17:34:38 2019
FontName txbmiaX
FullName txbmiaX
FamilyName txbmiaX
@@ -12,161 +12,171 @@ UnderlinePosition -100
UnderlineThickness 50
Version 3.1
EncodingScheme FontSpecific
-FontBBox -24 -240 1032 750
-CapHeight 671
-XHeight 461
-Ascender 681
-Descender -161
-StartCharMetrics 152
-C 0 ; WX 611 ; N Gamma ; B 16 0 583 676 ;
-C 1 ; WX 627 ; N Delta ; B 24 0 603 676 ;
-C 2 ; WX 778 ; N Theta ; B 35 -19 743 691 ;
-C 3 ; WX 722 ; N Lambda ; B 16 0 701 694 ;
-C 4 ; WX 677 ; N Xi ; B 56 0 622 662 ;
-C 5 ; WX 778 ; N Pi ; B 20 0 759 662 ;
-C 6 ; WX 654 ; N Sigma ; B 6 0 622 662 ;
-C 7 ; WX 722 ; N Upsilon ; B 20 0 719 676 ;
-C 8 ; WX 830 ; N Phi ; B 38 0 792 662 ;
-C 9 ; WX 780 ; N Psi ; B 15 0 765 670 ;
-C 10 ; WX 801 ; N Omega ; B 37 0 764 677 ;
-C 11 ; WX 605 ; N alpha ; B 37 -13 588 474 ;
-C 12 ; WX 550 ; N beta ; B 57 -231 519 727 ;
-C 13 ; WX 550 ; N gamma ; B 28 -231 523 474 ;
-C 14 ; WX 550 ; N delta ; B 40 -13 511 727 ;
-C 15 ; WX 411 ; N uni03F5 ; B 25 -3 408 458 ;
-C 16 ; WX 495 ; N zeta ; B 47 -180 476 735 ;
-C 17 ; WX 605 ; N eta ; B 9 -231 529 474 ;
-C 18 ; WX 550 ; N theta ; B 50 -13 501 696 ;
-C 19 ; WX 330 ; N iota ; B 65 -13 318 461 ;
-C 20 ; WX 608 ; N kappa ; B 17 0 579 486 ;
-C 21 ; WX 495 ; N lambda ; B 12 -13 486 708 ;
-C 22 ; WX 605 ; N mu ; B 49 -215 587 461 ;
-C 23 ; WX 495 ; N nu ; B 9 -13 472 474 ;
-C 24 ; WX 495 ; N xi ; B 36 -191 467 727 ;
-C 25 ; WX 605 ; N pi ; B 26 -13 570 498 ;
-C 26 ; WX 550 ; N rho ; B 43 -231 508 474 ;
-C 27 ; WX 550 ; N sigma ; B 34 -13 537 474 ;
-C 28 ; WX 440 ; N tau ; B 8 -13 423 499 ;
-C 29 ; WX 550 ; N upsilon ; B 8 -13 491 474 ;
-C 30 ; WX 660 ; N phi ; B 44 -211 617 676 ;
-C 31 ; WX 495 ; N chi ; B 9 -211 486 474 ;
-C 32 ; WX 693 ; N psi ; B 13 -216 680 488 ;
-C 33 ; WX 715 ; N omega ; B 35 -13 680 474 ;
-C 34 ; WX 440 ; N epsilon ; B 36 -13 431 474 ;
-C 35 ; WX 605 ; N uni03D1 ; B 8 -13 592 727 ;
-C 36 ; WX 715 ; N uni03D6 ; B 25 -13 680 547 ;
-C 37 ; WX 550 ; N uni03F1 ; B 43 -240 508 474 ;
-C 38 ; WX 513 ; N uni03C2 ; B 24 -178 487 457 ;
-C 39 ; WX 660 ; N uni03D5 ; B 39 -211 622 474 ;
-C 40 ; WX 520 ; N nu1 ; B 25 -12 486 446 ;
-C 41 ; WX 550 ; N kappa1 ; B -23 -13 511 474 ;
-C 42 ; WX 550 ; N kappa1up ; B 28 -13 523 474 ;
-C 43 ; WX 627 ; N uni2207 ; B 24 0 603 676 ;
+FontBBox -24 -240 1032 871
+StartCharMetrics 166
+C 0 ; WX 611 ; N u1D6AA ; B 16 0 583 676 ;
+C 1 ; WX 627 ; N u1D6AB ; B 24 0 603 676 ;
+C 2 ; WX 778 ; N u1D6AF ; B 35 -19 743 691 ;
+C 3 ; WX 722 ; N u1D6B2 ; B 16 0 701 694 ;
+C 4 ; WX 677 ; N u1D6B5 ; B 56 0 622 662 ;
+C 5 ; WX 778 ; N u1D6B7 ; B 20 0 759 662 ;
+C 6 ; WX 654 ; N u1D6BA ; B 6 0 622 662 ;
+C 7 ; WX 722 ; N u1D6BC ; B 20 0 719 676 ;
+C 8 ; WX 830 ; N u1D6BD ; B 38 0 792 662 ;
+C 9 ; WX 780 ; N u1D6BF ; B 15 0 765 670 ;
+C 10 ; WX 801 ; N u1D6C0 ; B 37 0 764 677 ;
+C 11 ; WX 605 ; N u1D6C2 ; B 37 -13 588 474 ;
+C 12 ; WX 550 ; N u1D6C3 ; B 57 -231 519 727 ;
+C 13 ; WX 550 ; N u1D6C4 ; B 28 -231 523 474 ;
+C 14 ; WX 550 ; N u1D6C5 ; B 40 -13 511 727 ;
+C 15 ; WX 411 ; N u1D6DC ; B 25 -3 408 458 ;
+C 16 ; WX 495 ; N u1D6C7 ; B 47 -180 476 735 ;
+C 17 ; WX 605 ; N u1D6C8 ; B 9 -231 529 474 ;
+C 18 ; WX 550 ; N u1D6C9 ; B 50 -13 501 696 ;
+C 19 ; WX 330 ; N u1D6CA ; B 65 -13 318 461 ;
+C 20 ; WX 608 ; N u1D6CB ; B 17 0 579 486 ;
+C 21 ; WX 495 ; N u1D6CC ; B 12 -13 486 708 ;
+C 22 ; WX 605 ; N u1D6CD ; B 49 -215 587 461 ;
+C 23 ; WX 495 ; N u1D6CE ; B 9 -13 472 474 ;
+C 24 ; WX 495 ; N u1D6CF ; B 36 -191 467 727 ;
+C 25 ; WX 605 ; N u1D6D1 ; B 26 -13 570 498 ;
+C 26 ; WX 550 ; N u1D6D2 ; B 43 -231 508 474 ;
+C 27 ; WX 550 ; N u1D6D4 ; B 34 -13 537 474 ;
+C 28 ; WX 440 ; N u1D6D5 ; B 8 -13 423 499 ;
+C 29 ; WX 550 ; N u1D6D6 ; B 8 -13 491 474 ;
+C 30 ; WX 660 ; N u1D6DF ; B 44 -211 617 676 ;
+C 31 ; WX 495 ; N u1D6D8 ; B 9 -211 486 474 ;
+C 32 ; WX 693 ; N u1D6D9 ; B 13 -216 680 488 ;
+C 33 ; WX 715 ; N u1D6DA ; B 35 -13 680 474 ;
+C 34 ; WX 440 ; N u1D6C6 ; B 36 -13 431 474 ;
+C 35 ; WX 605 ; N u1D6DD ; B 8 -13 592 727 ;
+C 36 ; WX 715 ; N u1D6E1 ; B 25 -13 680 547 ;
+C 37 ; WX 550 ; N u1D6E0 ; B 43 -240 508 474 ;
+C 38 ; WX 513 ; N u1D6D3 ; B 24 -178 487 457 ;
+C 39 ; WX 660 ; N u1D6D7 ; B 39 -211 622 474 ;
+C 40 ; WX 520 ; N u1D6CE.alt ; B 25 -12 486 446 ;
+C 41 ; WX 550 ; N u1D752 ; B -23 -13 511 474 ;
+C 42 ; WX 550 ; N u1D6DE ; B 28 -13 523 474 ;
+C 43 ; WX 627 ; N u1D6C1 ; B 24 0 603 676 ;
C 44 ; WX 333 ; N colon ; B 82 -13 251 472 ;
C 45 ; WX 333 ; N semicolon ; B 82 -180 266 472 ;
C 46 ; WX 278 ; N slash ; B -24 -19 302 691 ;
C 47 ; WX 500 ; N question ; B 57 -13 445 689 ;
-C 49 ; WX 530 ; N g1 ; B 1 -207 501 462 ;
-C 50 ; WX 537 ; N y1 ; B -12 -207 508 462 ;
-C 51 ; WX 421 ; N v1 ; B 15 -9 392 462 ;
-C 52 ; WX 649 ; N w1 ; B 15 -9 620 462 ;
-C 54 ; WX 676 ; N npropersubset ; B 52 -122 624 636 ;
-C 55 ; WX 676 ; N npropersuperset ; B 52 -122 624 636 ;
-C 56 ; WX 576 ; N nelement ; B 52 -122 524 636 ;
-C 57 ; WX 576 ; N nowner ; B 52 -122 524 636 ;
-C 58 ; WX 947 ; N colonequal ; B 82 14 885 500 ;
-C 59 ; WX 947 ; N equalcolon ; B 62 14 865 500 ;
-C 60 ; WX 676 ; N nequal ; B 62 -72 614 586 ;
+C 49 ; WX 530 ; N u1D488 ; B 1 -207 501 462 ;
+C 50 ; WX 537 ; N u1D49A ; B -12 -207 508 462 ;
+C 51 ; WX 421 ; N u1D497 ; B 15 -9 392 462 ;
+C 52 ; WX 539 ; N uni019B.alt ; B 16 -10 537 682 ;
+C 54 ; WX 676 ; N uni2284 ; B 52 -122 624 636 ;
+C 55 ; WX 676 ; N uni2285 ; B 52 -122 624 636 ;
+C 56 ; WX 576 ; N uni2209 ; B 52 -122 524 636 ;
+C 57 ; WX 576 ; N uni220C ; B 52 -122 524 636 ;
+C 58 ; WX 947 ; N uni2254 ; B 82 14 885 500 ;
+C 59 ; WX 947 ; N uni2255 ; B 62 14 865 500 ;
+C 60 ; WX 676 ; N uni2260 ; B 62 -72 614 586 ;
C 61 ; WX 676 ; N equal ; B 62 87 614 427 ;
-C 64 ; WX 565 ; N partialdiff.up ; B 21 -16 532 692 ;
-C 65 ; WX 712 ; N A ; B 51 -18 690 692 ;
-C 66 ; WX 712 ; N B ; B 49 -16 687 688 ;
-C 67 ; WX 663 ; N C ; B 73 -17 634 691 ;
-C 68 ; WX 663 ; N D ; B 48 -17 635 688 ;
-C 69 ; WX 663 ; N E ; B 60 -17 650 692 ;
-C 70 ; WX 614 ; N F ; B 35 -173 601 692 ;
-C 71 ; WX 762 ; N G ; B 72 -18 718 691 ;
-C 72 ; WX 712 ; N H ; B 31 -173 674 691 ;
-C 73 ; WX 614 ; N I ; B 28 -20 580 691 ;
-C 74 ; WX 614 ; N J ; B 15 -173 579 692 ;
-C 75 ; WX 712 ; N K ; B 13 -23 695 691 ;
-C 76 ; WX 564 ; N L ; B 30 -20 528 691 ;
-C 77 ; WX 921 ; N M ; B 15 -24 904 692 ;
-C 78 ; WX 762 ; N N ; B 50 -20 746 692 ;
-C 79 ; WX 663 ; N O ; B 66 -16 647 691 ;
-C 80 ; WX 712 ; N P ; B 45 -173 712 692 ;
-C 81 ; WX 722 ; N Q ; B 49 -20 711 690 ;
-C 82 ; WX 762 ; N R ; B 47 -20 743 692 ;
-C 83 ; WX 663 ; N S ; B 59 -14 638 692 ;
-C 84 ; WX 614 ; N T ; B 67 -17 600 689 ;
-C 85 ; WX 663 ; N U ; B 30 -21 642 691 ;
-C 86 ; WX 712 ; N V ; B 41 -18 709 691 ;
-C 87 ; WX 921 ; N W ; B 36 -13 920 686 ;
-C 88 ; WX 614 ; N X ; B 30 -15 610 691 ;
-C 89 ; WX 712 ; N Y ; B 47 -173 670 691 ;
-C 90 ; WX 623 ; N Z ; B 19 -173 571 690 ;
-C 97 ; WX 475 ; N a ; B 60 -9 465 510 ;
-C 98 ; WX 495 ; N b ; B 41 -16 448 674 ;
-C 99 ; WX 347 ; N c ; B 58 -7 336 513 ;
-C 100 ; WX 504 ; N d ; B 49 -8 457 681 ;
-C 101 ; WX 396 ; N e ; B 47 -10 390 514 ;
-C 102 ; WX 356 ; N f ; B 41 -158 331 682 ;
-C 103 ; WX 455 ; N g ; B 41 -159 443 509 ;
-C 104 ; WX 495 ; N h ; B 35 -158 450 682 ;
-C 105 ; WX 297 ; N i ; B 21 -10 287 683 ;
-C 106 ; WX 307 ; N j ; B 33 -160 275 682 ;
-C 107 ; WX 356 ; N k ; B 49 -8 328 682 ;
-C 108 ; WX 297 ; N l ; B 49 -9 289 680 ;
-C 109 ; WX 782 ; N m ; B 26 -9 760 510 ;
-C 110 ; WX 515 ; N n ; B 2 -7 515 512 ;
-C 111 ; WX 455 ; N o ; B 38 -8 432 522 ;
-C 112 ; WX 524 ; N p ; B 34 -159 480 517 ;
-C 113 ; WX 465 ; N q ; B 51 -159 435 522 ;
-C 114 ; WX 396 ; N r ; B 39 -8 393 518 ;
-C 115 ; WX 446 ; N s ; B 57 -4 408 515 ;
-C 116 ; WX 307 ; N t ; B 22 -10 301 669 ;
-C 117 ; WX 504 ; N u ; B 23 -10 503 516 ;
-C 118 ; WX 495 ; N v ; B 27 -4 453 509 ;
-C 119 ; WX 712 ; N w ; B 30 -6 674 519 ;
-C 120 ; WX 406 ; N x ; B 20 -8 396 510 ;
-C 121 ; WX 455 ; N y ; B 24 -158 425 509 ;
-C 122 ; WX 356 ; N z ; B 34 -160 328 514 ;
+C 62 ; WX 534 ; N braceleft ; B 103 -185 480 700 ;
+C 63 ; WX 534 ; N braceright ; B 103 -185 480 700 ;
+C 64 ; WX 565 ; N u1D6DB ; B 21 -16 532 692 ;
+C 65 ; WX 722 ; N u1D56C ; B 50 -26 701 694 ;
+C 66 ; WX 722 ; N u1D56D ; B 48 -18 698 690 ;
+C 67 ; WX 672 ; N u1D56E ; B 72 -19 645 698 ;
+C 68 ; WX 673 ; N u1D56F ; B 47 -19 646 690 ;
+C 69 ; WX 672 ; N u1D570 ; B 59 -19 661 699 ;
+C 70 ; WX 623 ; N u1D571 ; B 34 -175 612 694 ;
+C 71 ; WX 772 ; N u1D572 ; B 71 -20 729 698 ;
+C 72 ; WX 721 ; N u1D573 ; B 30 -181 685 697 ;
+C 73 ; WX 624 ; N u1D574 ; B 27 -22 591 693 ;
+C 74 ; WX 623 ; N u1D575 ; B 14 -175 590 694 ;
+C 75 ; WX 721 ; N u1D576 ; B 12 -27 706 693 ;
+C 76 ; WX 573 ; N u1D577 ; B 29 -20 539 693 ;
+C 77 ; WX 931 ; N u1D578 ; B 14 -31 915 694 ;
+C 78 ; WX 771 ; N u1D579 ; B 49 -24 757 694 ;
+C 79 ; WX 673 ; N u1D57A ; B 65 -18 658 697 ;
+C 80 ; WX 721 ; N u1D57B ; B 44 -175 723 694 ;
+C 81 ; WX 731 ; N u1D57C ; B 48 -22 722 696 ;
+C 82 ; WX 772 ; N u1D57D ; B 46 -25 754 694 ;
+C 83 ; WX 673 ; N u1D57E ; B 58 -16 649 694 ;
+C 84 ; WX 624 ; N u1D57F ; B 66 -19 611 691 ;
+C 85 ; WX 672 ; N u1D580 ; B 29 -28 653 694 ;
+C 86 ; WX 722 ; N u1D581 ; B 40 -20 720 693 ;
+C 87 ; WX 931 ; N u1D582 ; B 35 -15 931 688 ;
+C 88 ; WX 624 ; N u1D583 ; B 29 -21 621 696 ;
+C 89 ; WX 722 ; N u1D584 ; B 46 -179 682 693 ;
+C 90 ; WX 632 ; N u1D585 ; B 18 -175 582 692 ;
+C 91 ; WX 556 ; N uni210F ; B -13 -9 498 699 ;
+C 92 ; WX 556 ; N uni210F.var ; B -13 -9 498 699 ;
+C 93 ; WX 539 ; N uni019B ; B 16 -10 537 682 ;
+C 94 ; WX 612 ; N uni01B5 ; B 10 0 598 662 ;
+C 95 ; WX 722 ; N uni212B ; B 15 0 707 871 ;
+C 96 ; WX 505 ; N uni2107 ; B 34 -14 470 672 ;
+C 97 ; WX 485 ; N u1D586 ; B 59 -15 476 516 ;
+C 98 ; WX 504 ; N u1D587 ; B 40 -23 459 676 ;
+C 99 ; WX 357 ; N u1D588 ; B 57 -11 347 521 ;
+C 100 ; WX 514 ; N u1D589 ; B 48 -13 468 683 ;
+C 101 ; WX 405 ; N u1D58A ; B 46 -14 401 519 ;
+C 102 ; WX 366 ; N u1D58B ; B 40 -160 342 684 ;
+C 103 ; WX 465 ; N u1D58C ; B 40 -161 454 515 ;
+C 104 ; WX 504 ; N u1D58D ; B 34 -162 461 684 ;
+C 105 ; WX 306 ; N u1D58E ; B 20 -15 298 684 ;
+C 106 ; WX 316 ; N u1D58F ; B 32 -162 286 684 ;
+C 107 ; WX 366 ; N u1D590 ; B 48 -14 339 684 ;
+C 108 ; WX 306 ; N u1D591 ; B 48 -16 300 682 ;
+C 109 ; WX 791 ; N u1D592 ; B 25 -15 771 515 ;
+C 110 ; WX 524 ; N u1D593 ; B 1 -12 526 518 ;
+C 111 ; WX 465 ; N u1D594 ; B 37 -13 443 527 ;
+C 112 ; WX 534 ; N u1D595 ; B 33 -160 491 521 ;
+C 113 ; WX 475 ; N u1D596 ; B 50 -159 446 528 ;
+C 114 ; WX 405 ; N u1D597 ; B 38 -14 404 521 ;
+C 115 ; WX 455 ; N u1D598 ; B 56 -10 419 522 ;
+C 116 ; WX 316 ; N u1D599 ; B 21 -16 312 671 ;
+C 117 ; WX 513 ; N u1D59A ; B 22 -18 514 521 ;
+C 118 ; WX 504 ; N u1D59B ; B 26 -10 464 513 ;
+C 119 ; WX 721 ; N u1D59C ; B 29 -13 685 525 ;
+C 120 ; WX 415 ; N u1D59D ; B 19 -14 407 515 ;
+C 121 ; WX 465 ; N u1D59E ; B 23 -163 436 514 ;
+C 122 ; WX 365 ; N u1D59F ; B 33 -162 339 519 ;
+C 123 ; WX 306 ; N u1D58E.dtls ; B 20 -15 298 520 ;
+C 124 ; WX 316 ; N u1D58F.dtls ; B 32 -162 286 520 ;
C 127 ; WX 265 ; N tie ; B 214 516 626 678 ;
-C 129 ; WX 822 ; N bbA ; B 15 0 806 674 ;
-C 130 ; WX 777 ; N bbB ; B 17 0 703 662 ;
-C 131 ; WX 667 ; N bbC ; B 28 -14 633 676 ;
-C 132 ; WX 822 ; N bbD ; B 16 0 785 662 ;
-C 133 ; WX 711 ; N bbE ; B 12 0 697 662 ;
-C 134 ; WX 656 ; N bbF ; B 12 0 646 662 ;
-C 135 ; WX 722 ; N bbG ; B 32 -14 709 676 ;
-C 136 ; WX 822 ; N bbH ; B 19 0 802 662 ;
-C 137 ; WX 433 ; N bbI ; B 18 0 415 662 ;
-C 138 ; WX 489 ; N bbJ ; B 10 -14 470 662 ;
-C 139 ; WX 822 ; N bbK ; B 34 0 823 662 ;
-C 140 ; WX 711 ; N bbL ; B 12 0 698 662 ;
-C 141 ; WX 989 ; N bbM ; B 12 0 963 662 ;
-C 142 ; WX 822 ; N bbN ; B 12 -11 807 662 ;
-C 143 ; WX 722 ; N bbO ; B 34 -14 688 676 ;
-C 144 ; WX 656 ; N bbP ; B 16 0 642 662 ;
-C 145 ; WX 722 ; N bbQ ; B 34 -178 701 676 ;
-C 146 ; WX 767 ; N bbR ; B 17 0 759 662 ;
-C 147 ; WX 556 ; N bbS ; B 42 -14 491 676 ;
-C 148 ; WX 711 ; N bbT ; B 17 0 693 662 ;
-C 149 ; WX 822 ; N bbU ; B 14 -15 805 662 ;
-C 150 ; WX 822 ; N bbV ; B 16 -11 797 662 ;
-C 151 ; WX 1044 ; N bbW ; B 5 -11 1032 662 ;
-C 152 ; WX 822 ; N bbX ; B 10 0 804 662 ;
-C 153 ; WX 722 ; N bbY ; B 22 0 703 662 ;
-C 154 ; WX 731 ; N bbZ ; B 9 0 717 662 ;
-C 171 ; WX 600 ; N bbk ; B 7 0 605 683 ;
+C 129 ; WX 822 ; N u1D538 ; B 15 0 806 674 ;
+C 130 ; WX 777 ; N u1D539 ; B 17 0 703 662 ;
+C 131 ; WX 667 ; N uni2102 ; B 28 -14 633 676 ;
+C 132 ; WX 822 ; N u1D53B ; B 16 0 785 662 ;
+C 133 ; WX 711 ; N u1D53C ; B 12 0 697 662 ;
+C 134 ; WX 656 ; N u1D53D ; B 12 0 646 662 ;
+C 135 ; WX 722 ; N u1D53E ; B 32 -14 709 676 ;
+C 136 ; WX 822 ; N uni210D ; B 19 0 802 662 ;
+C 137 ; WX 433 ; N u1D540 ; B 18 0 415 662 ;
+C 138 ; WX 489 ; N u1D541 ; B 10 -14 470 662 ;
+C 139 ; WX 822 ; N u1D542 ; B 34 0 823 662 ;
+C 140 ; WX 711 ; N u1D543 ; B 12 0 698 662 ;
+C 141 ; WX 989 ; N u1D544 ; B 12 0 963 662 ;
+C 142 ; WX 822 ; N uni2115 ; B 12 -11 807 662 ;
+C 143 ; WX 722 ; N u1D546 ; B 34 -14 688 676 ;
+C 144 ; WX 656 ; N uni2119 ; B 16 0 642 662 ;
+C 145 ; WX 722 ; N uni211A ; B 34 -178 701 676 ;
+C 146 ; WX 767 ; N uni211D ; B 17 0 759 662 ;
+C 147 ; WX 556 ; N u1D54A ; B 42 -14 491 676 ;
+C 148 ; WX 711 ; N u1D54B ; B 17 0 693 662 ;
+C 149 ; WX 822 ; N u1D54C ; B 14 -15 805 662 ;
+C 150 ; WX 822 ; N u1D54D ; B 16 -11 797 662 ;
+C 151 ; WX 1044 ; N u1D54E ; B 5 -11 1032 662 ;
+C 152 ; WX 822 ; N u1D54F ; B 10 0 804 662 ;
+C 153 ; WX 722 ; N u1D550 ; B 22 0 703 662 ;
+C 154 ; WX 731 ; N uni2124 ; B 9 0 717 662 ;
+C 165 ; WX 600 ; N u1D55C ; B 7 0 605 683 ;
C 186 ; WX 333 ; N caron ; B -2 528 335 704 ;
C 187 ; WX 333 ; N breve ; B 15 528 318 691 ;
+C 188 ; WX 752 ; N uni2AEB ; B 62 0 690 550 ;
+C 189 ; WX 752 ; N uni2AEB.not ; B 62 -99 690 611 ;
+C 190 ; WX 283 ; N u1D6A4.bup ; B 25 -2 258 442 ;
+C 191 ; WX 332 ; N u1D6A5.bup ; B 12 -223 256 442 ;
C 219 ; WX 333 ; N tilde ; B -16 547 349 674 ;
C 221 ; WX 333 ; N macron ; B 1 565 331 637 ;
C 222 ; WX 333 ; N ring ; B 60 537 273 750 ;
C 223 ; WX 333 ; N circumflex ; B -2 528 335 704 ;
-C 251 ; WX 561 ; N dblbracketleft ; B 88 -193 527 717 ;
-C 252 ; WX 561 ; N dblbracketright ; B 34 -193 473 717 ;
+C 251 ; WX 611 ; N dblbracketleft ; B 88 -193 527 717 ;
+C 252 ; WX 631 ; N dblbracketright ; B 54 -193 493 717 ;
C 253 ; WX 570 ; N plus ; B 33 0 537 506 ;
C 254 ; WX 333 ; N grave ; B 8 528 246 713 ;
C 255 ; WX 333 ; N acute ; B 86 528 324 713 ;
diff --git a/fonts/newtx/afm/txbsys.afm b/fonts/newtx/afm/txbsys.afm
index 782f51e963..3b3afff4a2 100644
--- a/fonts/newtx/afm/txbsys.afm
+++ b/fonts/newtx/afm/txbsys.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20161003
-Comment Creation Date: Wed May 31 19:21:00 2017
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 12 14:28:04 2019
FontName txbsys
FullName txbsys
FamilyName txbsys
@@ -14,7 +14,7 @@ Version 3.0
EncodingScheme FontSpecific
FontBBox -20 -929 1460 904
CapHeight 692
-StartCharMetrics 189
+StartCharMetrics 205
C 0 ; WX 676 ; N minus ; B 62 209 614 305 ;
C 1 ; WX 250 ; N periodcentered ; B 41 173 210 342 ;
C 2 ; WX 676 ; N multiply ; B 62 -17 614 531 ;
@@ -170,15 +170,36 @@ C 151 ; WX 519 ; N uni2A16.upsm ; B 52 -166 472 721 ;
C 152 ; WX 733 ; N product.sm ; B 21 0 711 662 ;
C 153 ; WX 700 ; N summation.sm ; B 43 0 650 662 ;
C 154 ; WX 587 ; N nexists ; B 44 -134 543 794 ;
-C 155 ; WX 552 ; N emptysetAlt ; B 30 -77 520 512 ;
-C 156 ; WX 737 ; N emptysetAlt2 ; B 62 -41 675 590 ;
+C 155 ; WX 552 ; N emptyset.alt1 ; B 30 -77 520 512 ;
+C 156 ; WX 737 ; N emptyset.alt2 ; B 62 -41 675 590 ;
C 157 ; WX 482 ; N slash ; B 62 -192 420 707 ;
+C 158 ; WX 333 ; N grave ; B 8 528 246 713 ;
+C 159 ; WX 333 ; N acute ; B 86 528 324 713 ;
+C 160 ; WX 333 ; N circumflex ; B -2 528 335 704 ;
+C 161 ; WX 333 ; N tilde ; B -16 547 349 674 ;
+C 162 ; WX 333 ; N macron ; B 1 565 331 637 ;
+C 163 ; WX 333 ; N breve ; B 15 528 318 691 ;
+C 164 ; WX 333 ; N dotacc ; B 103 537 232 666 ;
+C 165 ; WX 333 ; N ddotacc ; B -2 537 337 666 ;
+C 166 ; WX 333 ; N ring ; B 60 537 273 750 ;
+C 167 ; WX 333 ; N caron ; B -2 528 335 704 ;
+C 168 ; WX 548 ; N dddotacc ; B 40 537 508 647 ;
C 169 ; WX 454 ; N lvec ; B 17 574 437 784 ;
C 170 ; WX 454 ; N harpoonacc ; B 17 643 437 784 ;
C 171 ; WX 454 ; N lharpoonacc ; B 17 643 437 784 ;
C 172 ; WX 474 ; N lrvec ; B 17 574 457 784 ;
C 173 ; WX 454 ; N lrharpoonacc ; B 17 643 437 784 ;
C 174 ; WX 454 ; N vec ; B 17 574 437 784 ;
+C 175 ; WX 290 ; N uni20D7.rt ; B 0 -69 320 141 ;
+C 176 ; WX 215 ; N uni20D7.ex ; B 0 0 215 71 ;
+C 177 ; WX 334 ; N periodcentered.B ; B 71 141 262 332 ;
+C 178 ; WX 389 ; N periodcentered.BB ; B 91 136 297 342 ;
+C 179 ; WX 601 ; N openbullet.S ; B 77 12 524 459 ;
+C 180 ; WX 327 ; N bullet.SSS ; B 49 107 278 337 ;
+C 181 ; WX 412 ; N bullet.SS ; B 59 76 353 368 ;
+C 182 ; WX 504 ; N bullet.S ; B 74 44 430 400 ;
+C 183 ; WX 337 ; N prime.var ; B 49 40 291 470 ;
+C 184 ; WX 570 ; N plus ; B 33 0 537 506 ;
C 185 ; WX 378 ; N parenleft ; B 68 -202 338 717 ;
C 186 ; WX 378 ; N parenright ; B 68 -202 338 717 ;
C 187 ; WX 339 ; N bracketleft ; B 88 -193 299 707 ;
@@ -192,17 +213,12 @@ C 194 ; WX 333 ; N tildehat ; B -16 547 349 904 ;
C 195 ; WX 333 ; N hatbar ; B -2 528 335 837 ;
C 196 ; WX 333 ; N hattilde ; B -16 528 349 884 ;
C 197 ; WX 333 ; N hathat ; B -2 528 335 884 ;
-C 203 ; WX 410 ; N transpose ; B -20 0 390 536 ;
-C 208 ; WX 334 ; N cdotB ; B 71 141 262 332 ;
-C 209 ; WX 389 ; N cdotBB ; B 91 136 297 342 ;
-C 210 ; WX 601 ; N smcompB ; B 77 12 524 459 ;
-C 211 ; WX 327 ; N bulletSSS ; B 49 107 278 337 ;
-C 212 ; WX 412 ; N bulletSS ; B 59 76 353 368 ;
-C 213 ; WX 504 ; N bulletS ; B 74 44 430 400 ;
-C 214 ; WX 337 ; N prime2 ; B 49 40 291 470 ;
-C 219 ; WX 347 ; N dotacc ; B 105 542 243 680 ;
-C 220 ; WX 412 ; N ddotacc ; B 40 542 372 680 ;
-C 221 ; WX 606 ; N dddotacc ; B 40 542 566 680 ;
-C 222 ; WX 800 ; N ddddotacc ; B 40 542 760 680 ;
+C 198 ; WX 729 ; N ddddotacc ; B 40 537 689 647 ;
+C 199 ; WX 410 ; N transpose ; B -20 0 390 536 ;
+C 200 ; WX 611 ; N dblbracketleft ; B 88 -193 527 717 ;
+C 201 ; WX 631 ; N dblbracketright ; B 54 -193 493 717 ;
+C 202 ; WX 410 ; N hermitconj ; B -20 0 390 536 ;
+C 203 ; WX 752 ; N uni2AEB ; B 62 0 690 550 ;
+C 204 ; WX 752 ; N nPerp ; B 62 -99 690 611 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/newtx/afm/txexas.afm b/fonts/newtx/afm/txexas.afm
index b7dfea6da2..82bd03cefe 100644
--- a/fonts/newtx/afm/txexas.afm
+++ b/fonts/newtx/afm/txexas.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20161003
-Comment Creation Date: Fri Feb 10 19:13:05 2017
+Comment Generated by FontForge 20190801
+Comment Creation Date: Sun Aug 25 13:30:28 2019
FontName txexas
FullName txexas
FamilyName txexas
@@ -12,12 +12,9 @@ UnderlinePosition -100
UnderlineThickness 50
Version 3.0
EncodingScheme FontSpecific
-FontBBox -47 -3825 2223 533
-CapHeight 533
-XHeight 533
-Ascender 533
-Descender 0
-StartCharMetrics 87
+FontBBox -47 -3825 2223 204
+CapHeight 0
+StartCharMetrics 85
C 0 ; WX 853 ; N intersectmultitext ; B 82 -780 771 0 ;
C 1 ; WX 1255 ; N intersectmultidisplay ; B 82 -1240 1173 0 ;
C 2 ; WX 853 ; N unionsqmultitext ; B 82 -780 771 0 ;
@@ -57,7 +54,6 @@ C 35 ; WX 528 ; N uni2A0F.up ; B 0 -1261 516 0 ;
C 36 ; WX 576 ; N uni2A0F.updsp ; B 4 -2208 704 0 ;
C 37 ; WX 513 ; N uni2A16.up ; B 31 -1261 481 0 ;
C 38 ; WX 557 ; N uni2A16.updsp ; B 37 -2207 664 0 ;
-C 39 ; WX 500 ; N .notdef ; B 50 0 450 533 ;
C 40 ; WX 853 ; N intersectmultitext.1 ; B 82 -892 771 0 ;
C 41 ; WX 1255 ; N intersectmultidisplay.1 ; B 82 -1540 1173 0 ;
C 42 ; WX 853 ; N unionsqmultitext.1 ; B 82 -880 771 0 ;
@@ -104,6 +100,5 @@ C 82 ; WX 485 ; N groupatipdownleft ; B -47 -114 494 143 ;
C 83 ; WX 485 ; N groupatipdownright ; B -9 -114 532 143 ;
C 84 ; WX 485 ; N groupatipupleft ; B -47 -53 494 204 ;
C 85 ; WX 485 ; N groupatipupright ; B -9 -53 532 204 ;
-C 255 ; WX 500 ; N .notdef ; B 50 0 450 533 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/newtx/afm/txexs.afm b/fonts/newtx/afm/txexs.afm
index c50f471b76..1a6514b320 100644
--- a/fonts/newtx/afm/txexs.afm
+++ b/fonts/newtx/afm/txexs.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
Comment Generated by FontForge 20150526
-Comment Creation Date: Wed Aug 3 11:03:29 2016
+Comment Creation Date: Mon Aug 8 17:21:11 2016
FontName txexs
FullName txexs
FamilyName txexs
@@ -171,22 +171,22 @@ C 172 ; WX 450 ; N parenrightbtA ; B 30 0 400 1444 ;
C 173 ; WX 450 ; N parenleftexA ; B 50 -21 144 625 ;
C 174 ; WX 450 ; N parenrightexA ; B 306 -21 400 625 ;
C 175 ; WX 438 ; N uni222B ; B 31 -1261 657 0 ;
-C 176 ; WX 748 ; N uni222C ; B 31 -1261 967 0 ;
+C 176 ; WX 748 ; N uni222C ; B 31 -1261 965 0 ;
C 177 ; WX 1056 ; N uni222D ; B 31 -1261 1277 0 ;
C 178 ; WX 530 ; N uni222E ; B 31 -1261 657 0 ;
C 179 ; WX 808 ; N uni222F ; B 31 -1261 967 0 ;
C 180 ; WX 423 ; N uni222B.up ; B 58 -1261 466 0 ;
-C 181 ; WX 733 ; N uni222C.up ; B 58 -1261 776 0 ;
-C 182 ; WX 1043 ; N uni222D.up ; B 58 -1261 1086 0 ;
+C 181 ; WX 726 ; N uni222C.up ; B 58 -1261 776 0 ;
+C 182 ; WX 1027 ; N uni222D.up ; B 58 -1261 1083 0 ;
C 183 ; WX 456 ; N uni222E.up ; B 35 -1261 491 0 ;
C 184 ; WX 714 ; N uni222F.up ; B 35 -1261 781 0 ;
C 185 ; WX 620 ; N uni222B.dsp ; B 55 -2207 1023 0 ;
-C 186 ; WX 1020 ; N uni222C.dsp ; B 55 -2207 1423 0 ;
-C 187 ; WX 1424 ; N uni222D.dsp ; B 55 -2207 1823 0 ;
+C 186 ; WX 1020 ; N uni222C.dsp ; B 55 -2207 1420 0 ;
+C 187 ; WX 1424 ; N uni222D.dsp ; B 55 -2207 1816 0 ;
C 188 ; WX 711 ; N uni222E.dsp ; B 55 -2207 1023 0 ;
C 189 ; WX 1096 ; N uni222F.dsp ; B 55 -2207 1423 0 ;
C 190 ; WX 563 ; N uni222B.updsp ; B 57 -2207 649 0 ;
-C 191 ; WX 951 ; N uni222C.updsp ; B 57 -2207 1049 0 ;
+C 191 ; WX 961 ; N uni222C.updsp ; B 57 -2207 1047 0 ;
C 192 ; WX 1369 ; N uni222D.updsp ; B 57 -2207 1449 0 ;
C 193 ; WX 557 ; N uni222E.updsp ; B 34 -2207 660 0 ;
C 194 ; WX 953 ; N uni222F.updsp ; B 57 -2207 1049 0 ;
diff --git a/fonts/newtx/afm/txmiaSTbb.afm b/fonts/newtx/afm/txmiaSTbb.afm
new file mode 100644
index 0000000000..b64050804b
--- /dev/null
+++ b/fonts/newtx/afm/txmiaSTbb.afm
@@ -0,0 +1,87 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20170730
+Comment Creation Date: Sat Jun 1 15:33:34 2019
+FontName txmiaSTbb
+FullName txmiaST
+FamilyName txmiaST
+Weight Regular
+Notice (Copyright (c) 2001-2011 by the STI Pub Companies, consisting of the American Chemical Society, the American Institute of Physics, the American Mathematical Society, the American Physical Society, Else)
+Comment vier, Inc., and The Institute of Electrical and Electronic Engineers, Inc. Portions copyright (c) 1998-2003 by MicroPress, Inc. Portions copyright (c) 1990 by Elsevier, Inc. All rights reserved.
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -50
+UnderlineThickness 50
+Version Version 1.1-beta1
+EncodingScheme FontSpecific
+FontBBox -15 -218 949 693
+StartCharMetrics 68
+C 0 ; WX 469 ; N uni213E ; B 70 0 567 662 ;
+C 5 ; WX 718 ; N uni213F ; B 70 0 648 662 ;
+C 13 ; WX 540 ; N uni213D ; B 0 -218 526 460 ;
+C 25 ; WX 673 ; N uni213C ; B 25 -12 645 450 ;
+C 48 ; WX 540 ; N u1D7D8 ; B 28 -14 512 676 ;
+C 49 ; WX 540 ; N u1D7D9 ; B 91 0 355 693 ;
+C 50 ; WX 547 ; N u1D7DA ; B 48 0 514 676 ;
+C 51 ; WX 540 ; N u1D7DB ; B 49 -14 478 676 ;
+C 52 ; WX 540 ; N u1D7DC ; B 20 0 524 676 ;
+C 53 ; WX 540 ; N u1D7DD ; B 35 -14 489 662 ;
+C 54 ; WX 540 ; N u1D7DE ; B 28 -14 512 676 ;
+C 55 ; WX 540 ; N u1D7DF ; B 24 0 511 662 ;
+C 56 ; WX 540 ; N u1D7E0 ; B 28 -14 512 676 ;
+C 57 ; WX 540 ; N u1D7E1 ; B 28 -12 512 676 ;
+C 65 ; WX 741 ; N u1D538 ; B 50 0 691 662 ;
+C 66 ; WX 676 ; N u1D539 ; B 70 0 626 662 ;
+C 67 ; WX 705 ; N uni2102 ; B 45 -14 663 676 ;
+C 68 ; WX 722 ; N u1D53B ; B 70 0 677 662 ;
+C 69 ; WX 622 ; N u1D53C ; B 70 0 567 662 ;
+C 70 ; WX 469 ; N u1D53D ; B 70 0 567 662 ;
+C 71 ; WX 706 ; N u1D53E ; B 45 -13 664 676 ;
+C 72 ; WX 718 ; N uni210D ; B 70 0 648 662 ;
+C 73 ; WX 322 ; N u1D540 ; B 78 0 244 662 ;
+C 74 ; WX 560 ; N u1D541 ; B 40 -14 495 662 ;
+C 75 ; WX 735 ; N u1D542 ; B 70 0 729 674 ;
+C 76 ; WX 591 ; N u1D543 ; B 70 0 571 662 ;
+C 77 ; WX 855 ; N u1D544 ; B 70 0 785 662 ;
+C 78 ; WX 698 ; N uni2115 ; B 70 0 628 662 ;
+C 79 ; WX 760 ; N u1D546 ; B 45 -14 715 676 ;
+C 80 ; WX 678 ; N uni2119 ; B 70 0 628 662 ;
+C 81 ; WX 765 ; N uni211A ; B 45 -65 715 676 ;
+C 82 ; WX 747 ; N uni211D ; B 70 0 712 662 ;
+C 83 ; WX 636 ; N u1D54A ; B 35 -14 597 676 ;
+C 84 ; WX 527 ; N u1D54B ; B 20 0 622 662 ;
+C 85 ; WX 698 ; N u1D54C ; B 65 -14 633 662 ;
+C 86 ; WX 568 ; N u1D54D ; B 12 0 653 662 ;
+C 87 ; WX 920 ; N u1D54E ; B 12 0 949 662 ;
+C 88 ; WX 768 ; N u1D54F ; B 35 0 733 662 ;
+C 89 ; WX 563 ; N u1D550 ; B 12 0 685 662 ;
+C 90 ; WX 727 ; N uni2124 ; B 50 0 677 662 ;
+C 97 ; WX 561 ; N u1D552 ; B 45 -10 506 460 ;
+C 98 ; WX 565 ; N u1D553 ; B 50 -10 524 683 ;
+C 99 ; WX 520 ; N u1D554 ; B 45 -10 475 460 ;
+C 100 ; WX 574 ; N u1D555 ; B 45 -10 519 683 ;
+C 101 ; WX 523 ; N u1D556 ; B 45 -10 478 460 ;
+C 102 ; WX 368 ; N u1D557 ; B 25 0 431 683 ;
+C 103 ; WX 574 ; N u1D558 ; B 45 -218 519 460 ;
+C 104 ; WX 544 ; N u1D559 ; B 55 0 489 683 ;
+C 105 ; WX 258 ; N u1D55A ; B 55 0 203 683 ;
+C 106 ; WX 305 ; N u1D55B ; B -15 -217 250 683 ;
+C 107 ; WX 551 ; N u1D55C ; B 50 0 539 683 ;
+C 108 ; WX 258 ; N u1D55D ; B 55 0 203 683 ;
+C 109 ; WX 830 ; N u1D55E ; B 55 0 775 460 ;
+C 110 ; WX 544 ; N u1D55F ; B 55 0 489 460 ;
+C 111 ; WX 553 ; N u1D560 ; B 45 -12 508 458 ;
+C 112 ; WX 574 ; N u1D561 ; B 55 -218 529 460 ;
+C 113 ; WX 574 ; N u1D562 ; B 45 -218 519 460 ;
+C 114 ; WX 301 ; N u1D563 ; B 55 0 407 463 ;
+C 115 ; WX 519 ; N u1D564 ; B 36 -10 483 460 ;
+C 116 ; WX 329 ; N u1D565 ; B 20 -10 297 633 ;
+C 117 ; WX 544 ; N u1D566 ; B 55 -10 489 450 ;
+C 118 ; WX 443 ; N u1D567 ; B 20 0 479 450 ;
+C 119 ; WX 676 ; N u1D568 ; B 20 0 695 450 ;
+C 120 ; WX 560 ; N u1D569 ; B 30 0 530 450 ;
+C 121 ; WX 468 ; N u1D56A ; B 20 -218 510 450 ;
+C 122 ; WX 519 ; N u1D56B ; B 43 0 476 450 ;
+C 123 ; WX 258 ; N u1D55A.dtls ; B 55 0 203 450 ;
+C 124 ; WX 305 ; N u1D55B.dtls ; B -15 -217 250 450 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/fonts/newtx/afm/txmiaX.afm b/fonts/newtx/afm/txmiaX.afm
index 2c26fe5247..8638702364 100644
--- a/fonts/newtx/afm/txmiaX.afm
+++ b/fonts/newtx/afm/txmiaX.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20170730
-Comment Creation Date: Tue Apr 17 15:59:17 2018
+Comment Generated by FontForge 20190801
+Comment Creation Date: Tue Sep 10 17:28:56 2019
FontName txmiaX
FullName txmiaX
FamilyName txmiaX
@@ -12,53 +12,53 @@ UnderlinePosition -100
UnderlineThickness 50
Version 3.1
EncodingScheme FontSpecific
-FontBBox -400 -243 975 794
+FontBBox -400 -243 1032 871
CapHeight 671
-XHeight 451
-Ascender 637
-Descender -212
-StartCharMetrics 192
-C 0 ; WX 556 ; N Gamma ; B 12 0 546 662 ;
-C 1 ; WX 643 ; N Delta ; B 24 0 618 677 ;
-C 2 ; WX 722 ; N Theta ; B 34 -14 688 676 ;
-C 3 ; WX 722 ; N Lambda ; B 16 0 697 673 ;
-C 4 ; WX 643 ; N Xi ; B 39 0 604 662 ;
-C 5 ; WX 722 ; N Pi ; B 18 0 704 662 ;
-C 6 ; WX 582 ; N Sigma ; B 16 0 556 662 ;
-C 7 ; WX 696 ; N Upsilon ; B 41 0 677 672 ;
-C 8 ; WX 731 ; N Phi ; B 35 0 696 662 ;
-C 9 ; WX 738 ; N Psi ; B 12 0 727 670 ;
-C 10 ; WX 743 ; N Omega ; B 29 0 714 677 ;
-C 11 ; WX 587 ; N alpha ; B 41 -10 558 461 ;
-C 12 ; WX 534 ; N beta ; B 59 -224 492 705 ;
-C 13 ; WX 480 ; N gamma ; B 19 -224 461 461 ;
-C 14 ; WX 534 ; N delta ; B 44 -10 490 705 ;
-C 15 ; WX 390 ; N uni03F5 ; B 25 -3 387 458 ;
-C 16 ; WX 480 ; N zeta ; B 41 -173 458 711 ;
-C 17 ; WX 534 ; N eta ; B 19 -224 475 461 ;
-C 18 ; WX 534 ; N theta ; B 51 -10 483 672 ;
-C 19 ; WX 267 ; N iota ; B 59 -10 265 451 ;
-C 20 ; WX 527 ; N kappa ; B 32 0 536 481 ;
-C 21 ; WX 480 ; N lambda ; B 26 -10 466 705 ;
-C 22 ; WX 534 ; N mu ; B 59 -224 515 451 ;
-C 23 ; WX 480 ; N nu ; B 15 0 455 461 ;
-C 24 ; WX 480 ; N xi ; B 25 -184 455 711 ;
-C 25 ; WX 587 ; N pi ; B 35 -10 552 470 ;
-C 26 ; WX 534 ; N rho ; B 44 -221 481 461 ;
-C 27 ; WX 534 ; N sigma ; B 41 -10 525 479 ;
-C 28 ; WX 426 ; N tau ; B 9 -10 402 468 ;
-C 29 ; WX 534 ; N upsilon ; B 19 -10 465 461 ;
-C 30 ; WX 640 ; N phi ; B 43 -224 597 662 ;
-C 31 ; WX 480 ; N chi ; B 19 -209 461 461 ;
-C 32 ; WX 658 ; N psi ; B 12 -199 646 471 ;
-C 33 ; WX 693 ; N omega ; B 41 -10 652 461 ;
-C 34 ; WX 426 ; N epsilon ; B 41 -10 399 461 ;
-C 35 ; WX 587 ; N uni03D1 ; B 17 -10 569 705 ;
-C 36 ; WX 684 ; N uni03D6 ; B 18 -10 653 521 ;
-C 37 ; WX 534 ; N uni03F1 ; B 41 -224 481 461 ;
-C 38 ; WX 473 ; N uni03C2 ; B 24 -178 447 457 ;
-C 39 ; WX 640 ; N uni03D5 ; B 40 -224 600 461 ;
-C 40 ; WX 460 ; N nu.alt ; B 25 -12 427 442 ;
+XHeight 450
+Ascender 570
+Descender -217
+StartCharMetrics 180
+C 0 ; WX 587 ; N uni0393 ; B 11 0 577 662 ;
+C 1 ; WX 722 ; N uni0394 ; B 48 0 675 674 ;
+C 2 ; WX 722 ; N uni0398 ; B 34 -14 688 676 ;
+C 3 ; WX 702 ; N uni039B ; B 15 0 687 674 ;
+C 4 ; WX 643 ; N uni039E ; B 29 0 614 662 ;
+C 5 ; WX 722 ; N uni03A0 ; B 18 0 703 662 ;
+C 6 ; WX 624 ; N uni03A3 ; B 30 0 600 662 ;
+C 7 ; WX 722 ; N uni03A5 ; B 29 0 703 674 ;
+C 8 ; WX 763 ; N uni03A6 ; B 35 0 728 662 ;
+C 9 ; WX 746 ; N uni03A8 ; B 22 0 724 690 ;
+C 10 ; WX 744 ; N uni03A9 ; B 29 0 715 676 ;
+C 11 ; WX 543 ; N uni03B1 ; B 29 -10 529 460 ;
+C 12 ; WX 496 ; N uni03B2 ; B 55 -217 466 683 ;
+C 13 ; WX 474 ; N uni03B3 ; B 10 -218 444 457 ;
+C 14 ; WX 500 ; N uni03B4 ; B 29 -10 470 683 ;
+C 15 ; WX 439 ; N uni03F5 ; B 25 -10 407 460 ;
+C 16 ; WX 441 ; N uni03B6 ; B 35 -218 407 683 ;
+C 17 ; WX 512 ; N uni03B7 ; B 10 -217 452 460 ;
+C 18 ; WX 496 ; N uni03B8 ; B 27 -10 468 683 ;
+C 19 ; WX 275 ; N uni03B9 ; B 20 -10 267 460 ;
+C 20 ; WX 500 ; N uni03BA ; B 7 0 503 460 ;
+C 21 ; WX 497 ; N uni03BB ; B 12 -11 492 683 ;
+C 22 ; WX 528 ; N uni03BC ; B 55 -217 516 450 ;
+C 23 ; WX 455 ; N uni03BD ; B 20 -14 443 460 ;
+C 24 ; WX 441 ; N uni03BE ; B 35 -218 407 683 ;
+C 25 ; WX 501 ; N uni03C0 ; B 9 -14 482 450 ;
+C 26 ; WX 496 ; N uni03C1 ; B 55 -217 466 460 ;
+C 27 ; WX 548 ; N uni03C3 ; B 29 -10 518 450 ;
+C 28 ; WX 477 ; N uni03C4 ; B 3 -10 442 450 ;
+C 29 ; WX 524 ; N uni03C5 ; B 16 -10 494 460 ;
+C 30 ; WX 623 ; N uni03D5 ; B 29 -217 593 683 ;
+C 31 ; WX 500 ; N uni03C7 ; B 11 -220 486 460 ;
+C 32 ; WX 694 ; N uni03C8 ; B 20 -217 684 460 ;
+C 33 ; WX 625 ; N uni03C9 ; B 29 -10 595 460 ;
+C 34 ; WX 439 ; N uni03B5 ; B 25 -10 407 460 ;
+C 35 ; WX 554 ; N uni03D1 ; B 0 -10 544 683 ;
+C 36 ; WX 762 ; N uni03D6 ; B 6 -10 726 450 ;
+C 37 ; WX 500 ; N uni03F1 ; B 29 -215 470 460 ;
+C 38 ; WX 441 ; N uni03C2 ; B 35 -218 432 460 ;
+C 39 ; WX 623 ; N uni03C6 ; B 29 -217 593 460 ;
+C 40 ; WX 460 ; N uni03BD.alt ; B 25 -12 427 442 ;
C 41 ; WX 534 ; N u1D718 ; B 5 -10 481 461 ;
C 42 ; WX 534 ; N uni03F0 ; B 27 -10 500 461 ;
C 43 ; WX 643 ; N uni2207 ; B 24 0 618 677 ;
@@ -66,129 +66,117 @@ C 44 ; WX 278 ; N colon ; B 81 -11 192 459 ;
C 45 ; WX 278 ; N semicolon ; B 80 -141 219 459 ;
C 46 ; WX 278 ; N slash ; B -9 -14 287 676 ;
C 47 ; WX 444 ; N question ; B 68 -8 414 676 ;
-C 49 ; WX 480 ; N g1 ; B 24 -207 448 439 ;
-C 50 ; WX 460 ; N y1 ; B 22 -207 442 441 ;
-C 51 ; WX 393 ; N v1 ; B 42 -11 375 441 ;
-C 52 ; WX 626 ; N w1 ; B 42 -11 608 441 ;
-C 54 ; WX 636 ; N npropersubset ; B 52 -102 584 616 ;
-C 55 ; WX 636 ; N npropersuperset ; B 52 -102 584 616 ;
-C 56 ; WX 536 ; N nelement ; B 52 -102 484 616 ;
-C 57 ; WX 536 ; N nowner ; B 52 -102 484 616 ;
-C 58 ; WX 847 ; N colonequal ; B 81 22 785 492 ;
-C 59 ; WX 847 ; N equalcolon ; B 62 22 766 492 ;
-C 60 ; WX 636 ; N nequal ; B 62 -52 574 566 ;
+C 49 ; WX 454 ; N u1D454 ; B -1 -207 478 439 ;
+C 50 ; WX 460 ; N u1D466 ; B -4 -207 473 441 ;
+C 51 ; WX 393 ; N u1D463 ; B 42 -11 375 441 ;
+C 52 ; WX 530 ; N uni019B.alt ; B 16 -10 527 680 ;
+C 54 ; WX 636 ; N uni2284 ; B 52 -102 584 616 ;
+C 55 ; WX 636 ; N uni2285 ; B 52 -102 584 616 ;
+C 56 ; WX 536 ; N uni2209 ; B 52 -102 484 616 ;
+C 57 ; WX 536 ; N uni220C ; B 52 -102 484 616 ;
+C 58 ; WX 847 ; N uni2254 ; B 81 22 785 492 ;
+C 59 ; WX 847 ; N uni2255 ; B 62 22 766 492 ;
+C 60 ; WX 636 ; N uni2260 ; B 62 -52 574 566 ;
C 61 ; WX 592 ; N equal ; B 40 127 552 386 ;
-C 64 ; WX 512 ; N partialdiff.up ; B 9 -16 448 692 ;
-C 65 ; WX 696 ; N u1D504 ; B 20 -19 673 704 ;
-C 66 ; WX 800 ; N u1D505 ; B 60 -22 746 703 ;
-C 67 ; WX 644 ; N uni212D ; B 52 -19 628 702 ;
-C 68 ; WX 800 ; N u1D507 ; B 69 -19 744 692 ;
-C 69 ; WX 644 ; N u1D508 ; B 54 -19 628 702 ;
-C 70 ; WX 696 ; N u1D509 ; B 74 -171 662 698 ;
-C 71 ; WX 800 ; N u1D50A ; B 88 -19 738 704 ;
-C 72 ; WX 696 ; N uni210C ; B 29 -181 655 702 ;
-C 73 ; WX 644 ; N Ifraktur ; B 12 -19 592 704 ;
-C 74 ; WX 644 ; N u1D50D ; B -1 -177 585 702 ;
-C 75 ; WX 696 ; N u1D50E ; B 2 -19 657 699 ;
-C 76 ; WX 644 ; N u1D50F ; B 37 -19 602 702 ;
-C 77 ; WX 955 ; N u1D510 ; B 10 -19 933 697 ;
-C 78 ; WX 747 ; N u1D511 ; B 16 -21 714 699 ;
-C 79 ; WX 800 ; N u1D512 ; B 42 -19 752 691 ;
-C 80 ; WX 800 ; N u1D513 ; B 37 -178 713 704 ;
-C 81 ; WX 800 ; N u1D514 ; B 41 -19 798 690 ;
-C 82 ; WX 747 ; N Rfraktur ; B 17 -19 700 700 ;
-C 83 ; WX 800 ; N u1D516 ; B 103 -19 755 690 ;
-C 84 ; WX 696 ; N u1D517 ; B 42 -19 687 691 ;
-C 85 ; WX 696 ; N u1D518 ; B 49 -19 681 703 ;
-C 86 ; WX 800 ; N u1D519 ; B 48 -19 704 697 ;
-C 87 ; WX 955 ; N u1D51A ; B 25 -13 928 696 ;
-C 88 ; WX 644 ; N u1D51B ; B 29 -19 628 702 ;
-C 89 ; WX 747 ; N u1D51C ; B 19 -180 639 702 ;
-C 90 ; WX 696 ; N uni2128 ; B -7 -185 607 693 ;
-C 91 ; WX 269 ; N u1D526.dtls ; B 32 -19 257 485 ;
-C 92 ; WX 269 ; N u1D527.dtls ; B 32 -184 229 488 ;
-C 97 ; WX 477 ; N u1D51E ; B 67 -21 468 488 ;
-C 98 ; WX 477 ; N u1D51F ; B 23 -24 435 666 ;
-C 99 ; WX 373 ; N u1D520 ; B 85 -19 355 484 ;
-C 100 ; WX 477 ; N u1D521 ; B 54 -19 446 679 ;
-C 101 ; WX 426 ; N u1D522 ; B 78 -20 391 487 ;
-C 102 ; WX 322 ; N u1D523 ; B 27 -177 292 702 ;
-C 103 ; WX 477 ; N u1D524 ; B 54 -178 442 489 ;
-C 104 ; WX 477 ; N u1D525 ; B 25 -180 437 679 ;
-C 105 ; WX 269 ; N u1D526 ; B 32 -19 257 686 ;
-C 106 ; WX 269 ; N u1D527 ; B 32 -184 229 689 ;
-C 107 ; WX 322 ; N u1D528 ; B 21 -19 308 685 ;
-C 108 ; WX 269 ; N u1D529 ; B 42 -20 265 679 ;
-C 109 ; WX 800 ; N u1D52A ; B 24 -19 772 483 ;
-C 110 ; WX 529 ; N u1D52B ; B 16 -19 517 483 ;
-C 111 ; WX 477 ; N u1D52C ; B 69 -19 446 486 ;
-C 112 ; WX 529 ; N u1D52D ; B 68 -176 495 489 ;
-C 113 ; WX 477 ; N u1D52E ; B 66 -183 454 483 ;
-C 114 ; WX 373 ; N u1D52F ; B 17 -19 361 488 ;
-C 115 ; WX 426 ; N u1D530 ; B 56 -21 408 484 ;
-C 116 ; WX 322 ; N u1D531 ; B 19 -21 292 679 ;
-C 117 ; WX 529 ; N u1D532 ; B 25 -19 511 485 ;
-C 118 ; WX 477 ; N u1D533 ; B 28 -19 433 480 ;
-C 119 ; WX 747 ; N u1D534 ; B 46 -19 707 485 ;
-C 120 ; WX 426 ; N u1D535 ; B 30 -19 401 487 ;
-C 121 ; WX 529 ; N u1D536 ; B 36 -178 464 489 ;
-C 122 ; WX 373 ; N u1D537 ; B 39 -180 343 489 ;
+C 62 ; WX 536 ; N braceleft ; B 123 -114 461 726 ;
+C 63 ; WX 536 ; N braceright ; B 123 -112 461 728 ;
+C 64 ; WX 512 ; N partialdiff ; B 9 -16 448 692 ;
+C 65 ; WX 715 ; N u1D504 ; B 20 -35 693 709 ;
+C 66 ; WX 819 ; N u1D505 ; B 60 -25 766 712 ;
+C 67 ; WX 664 ; N uni212D ; B 52 -22 649 711 ;
+C 68 ; WX 820 ; N u1D507 ; B 69 -22 764 695 ;
+C 69 ; WX 663 ; N u1D508 ; B 54 -22 648 711 ;
+C 70 ; WX 715 ; N u1D509 ; B 74 -174 682 701 ;
+C 71 ; WX 820 ; N u1D50A ; B 88 -22 758 715 ;
+C 72 ; WX 715 ; N uni210C ; B 29 -197 675 713 ;
+C 73 ; WX 664 ; N Ifraktur ; B 11 -22 612 707 ;
+C 74 ; WX 663 ; N u1D50D ; B -1 -180 605 705 ;
+C 75 ; WX 715 ; N u1D50E ; B 2 -30 677 702 ;
+C 76 ; WX 663 ; N u1D50F ; B 37 -23 622 705 ;
+C 77 ; WX 975 ; N u1D510 ; B 10 -30 953 700 ;
+C 78 ; WX 766 ; N u1D511 ; B 16 -33 734 702 ;
+C 79 ; WX 819 ; N u1D512 ; B 42 -22 772 702 ;
+C 80 ; WX 820 ; N u1D513 ; B 37 -181 733 707 ;
+C 81 ; WX 819 ; N u1D514 ; B 41 -22 818 701 ;
+C 82 ; WX 766 ; N Rfraktur ; B 17 -28 720 708 ;
+C 83 ; WX 819 ; N u1D516 ; B 103 -22 775 693 ;
+C 84 ; WX 715 ; N u1D517 ; B 42 -22 707 693 ;
+C 85 ; WX 715 ; N u1D518 ; B 49 -33 701 713 ;
+C 86 ; WX 819 ; N u1D519 ; B 48 -22 724 700 ;
+C 87 ; WX 975 ; N u1D51A ; B 25 -16 948 699 ;
+C 88 ; WX 663 ; N u1D51B ; B 29 -29 648 711 ;
+C 89 ; WX 767 ; N u1D51C ; B 19 -189 660 705 ;
+C 90 ; WX 716 ; N uni2128 ; B -7 -187 628 696 ;
+C 91 ; WX 500 ; N uni210F ; B 19 -9 478 683 ;
+C 92 ; WX 500 ; N uni210F.var ; B 19 -9 478 683 ;
+C 93 ; WX 530 ; N uni019B ; B 16 -11 574 655 ;
+C 94 ; WX 612 ; N uni01B5 ; B 10 0 598 662 ;
+C 95 ; WX 722 ; N uni212B ; B 15 0 707 871 ;
+C 96 ; WX 505 ; N uni2107 ; B 34 -14 470 672 ;
+C 97 ; WX 497 ; N u1D51E ; B 67 -30 488 497 ;
+C 98 ; WX 496 ; N u1D51F ; B 23 -33 455 670 ;
+C 99 ; WX 392 ; N u1D520 ; B 85 -27 375 495 ;
+C 100 ; WX 497 ; N u1D521 ; B 54 -28 466 687 ;
+C 101 ; WX 446 ; N u1D522 ; B 78 -27 411 494 ;
+C 102 ; WX 342 ; N u1D523 ; B 27 -180 312 705 ;
+C 103 ; WX 497 ; N u1D524 ; B 54 -181 462 501 ;
+C 104 ; WX 496 ; N u1D525 ; B 25 -183 457 683 ;
+C 105 ; WX 289 ; N u1D526 ; B 32 -29 277 689 ;
+C 106 ; WX 289 ; N u1D527 ; B 32 -188 249 691 ;
+C 107 ; WX 342 ; N u1D528 ; B 21 -29 328 688 ;
+C 108 ; WX 288 ; N u1D529 ; B 42 -33 285 682 ;
+C 109 ; WX 819 ; N u1D52A ; B 24 -26 792 493 ;
+C 110 ; WX 548 ; N u1D52B ; B 16 -26 537 493 ;
+C 111 ; WX 497 ; N u1D52C ; B 69 -29 466 493 ;
+C 112 ; WX 549 ; N u1D52D ; B 68 -178 515 496 ;
+C 113 ; WX 497 ; N u1D52E ; B 66 -186 474 494 ;
+C 114 ; WX 392 ; N u1D52F ; B 17 -28 381 497 ;
+C 115 ; WX 445 ; N u1D530 ; B 56 -32 428 496 ;
+C 116 ; WX 342 ; N u1D531 ; B 19 -32 312 682 ;
+C 117 ; WX 548 ; N u1D532 ; B 25 -32 531 491 ;
+C 118 ; WX 496 ; N u1D533 ; B 28 -29 453 489 ;
+C 119 ; WX 767 ; N u1D534 ; B 46 -31 727 492 ;
+C 120 ; WX 445 ; N u1D535 ; B 30 -28 421 496 ;
+C 121 ; WX 549 ; N u1D536 ; B 36 -181 484 497 ;
+C 122 ; WX 393 ; N u1D537 ; B 39 -183 363 496 ;
+C 123 ; WX 289 ; N u1D526.dtls ; B 32 -29 277 495 ;
+C 124 ; WX 289 ; N u1D527.dtls ; B 32 -188 249 499 ;
C 127 ; WX 260 ; N tie ; B 222 492 613 650 ;
-C 129 ; WX 759 ; N u1D538 ; B 51 0 707 678 ;
-C 130 ; WX 692 ; N u1D539 ; B 71 0 641 678 ;
-C 131 ; WX 722 ; N uni2102 ; B 46 -15 679 692 ;
-C 132 ; WX 739 ; N u1D53B ; B 71 0 693 678 ;
-C 133 ; WX 637 ; N u1D53C ; B 71 0 580 678 ;
-C 134 ; WX 600 ; N u1D53D ; B 71 0 580 678 ;
-C 135 ; WX 723 ; N u1D53E ; B 46 -14 680 692 ;
-C 136 ; WX 735 ; N uni210D ; B 71 0 663 678 ;
-C 137 ; WX 329 ; N u1D540 ; B 80 0 250 678 ;
-C 138 ; WX 573 ; N u1D541 ; B 41 -15 507 678 ;
-C 139 ; WX 752 ; N u1D542 ; B 71 0 746 690 ;
-C 140 ; WX 605 ; N u1D543 ; B 71 0 584 678 ;
-C 141 ; WX 875 ; N u1D544 ; B 71 0 804 678 ;
-C 142 ; WX 715 ; N uni2115 ; B 71 0 643 678 ;
-C 143 ; WX 778 ; N u1D546 ; B 46 -15 732 692 ;
-C 144 ; WX 694 ; N uni2119 ; B 71 0 643 678 ;
-C 145 ; WX 783 ; N uni211A ; B 46 -67 732 692 ;
-C 146 ; WX 765 ; N uni211D ; B 71 0 729 678 ;
-C 147 ; WX 651 ; N u1D54A ; B 36 -15 611 692 ;
-C 148 ; WX 657 ; N u1D54B ; B 20 0 637 678 ;
-C 149 ; WX 715 ; N u1D54C ; B 66 -15 648 678 ;
-C 150 ; WX 676 ; N u1D54D ; B 10 0 666 678 ;
-C 151 ; WX 990 ; N u1D54E ; B 15 0 975 678 ;
-C 152 ; WX 786 ; N u1D54F ; B 36 0 750 678 ;
-C 153 ; WX 719 ; N u1D550 ; B 15 0 704 678 ;
-C 154 ; WX 744 ; N uni2124 ; B 51 0 693 678 ;
-C 155 ; WX 574 ; N u1D552 ; B 46 -10 518 471 ;
-C 156 ; WX 578 ; N u1D553 ; B 51 -10 536 699 ;
-C 157 ; WX 532 ; N u1D554 ; B 46 -10 486 471 ;
-C 158 ; WX 588 ; N u1D555 ; B 46 -10 531 699 ;
-C 159 ; WX 535 ; N u1D556 ; B 46 -10 489 471 ;
-C 160 ; WX 449 ; N u1D557 ; B 25 0 441 699 ;
-C 161 ; WX 588 ; N u1D558 ; B 46 -223 531 471 ;
-C 162 ; WX 557 ; N u1D559 ; B 56 0 500 699 ;
-C 163 ; WX 264 ; N u1D55A ; B 56 0 208 699 ;
-C 164 ; WX 312 ; N u1D55B ; B -16 -222 256 699 ;
-C 165 ; WX 564 ; N u1D55C ; B 51 0 552 699 ;
-C 166 ; WX 264 ; N u1D55D ; B 56 0 208 699 ;
-C 167 ; WX 850 ; N u1D55E ; B 56 0 793 471 ;
-C 168 ; WX 557 ; N u1D55F ; B 56 0 500 471 ;
-C 169 ; WX 566 ; N u1D560 ; B 46 -13 520 469 ;
-C 170 ; WX 588 ; N u1D561 ; B 56 -223 541 471 ;
-C 171 ; WX 588 ; N u1D562 ; B 46 -223 531 471 ;
-C 172 ; WX 432 ; N u1D563 ; B 56 0 417 474 ;
-C 173 ; WX 531 ; N u1D564 ; B 37 -10 494 471 ;
-C 174 ; WX 337 ; N u1D565 ; B 20 -10 304 648 ;
-C 175 ; WX 557 ; N u1D566 ; B 56 -10 500 461 ;
-C 176 ; WX 504 ; N u1D567 ; B 20 0 490 461 ;
-C 177 ; WX 724 ; N u1D568 ; B 20 0 711 461 ;
-C 178 ; WX 573 ; N u1D569 ; B 30 0 542 461 ;
-C 179 ; WX 538 ; N u1D56A ; B 20 -223 522 461 ;
-C 180 ; WX 531 ; N u1D56B ; B 44 0 487 461 ;
+C 129 ; WX 822 ; N u1D538 ; B 15 0 806 674 ;
+C 130 ; WX 777 ; N u1D539 ; B 17 0 703 662 ;
+C 131 ; WX 667 ; N uni2102 ; B 28 -14 633 676 ;
+C 132 ; WX 822 ; N u1D53B ; B 16 0 785 662 ;
+C 133 ; WX 711 ; N u1D53C ; B 12 0 697 662 ;
+C 134 ; WX 656 ; N u1D53D ; B 12 0 646 662 ;
+C 135 ; WX 722 ; N u1D53E ; B 32 -14 709 676 ;
+C 136 ; WX 822 ; N uni210D ; B 19 0 802 662 ;
+C 137 ; WX 433 ; N u1D540 ; B 18 0 415 662 ;
+C 138 ; WX 489 ; N u1D541 ; B 10 -14 470 662 ;
+C 139 ; WX 822 ; N u1D542 ; B 34 0 823 662 ;
+C 140 ; WX 711 ; N u1D543 ; B 12 0 698 662 ;
+C 141 ; WX 989 ; N u1D544 ; B 12 0 963 662 ;
+C 142 ; WX 822 ; N uni2115 ; B 12 -11 807 662 ;
+C 143 ; WX 722 ; N u1D546 ; B 34 -14 688 676 ;
+C 144 ; WX 656 ; N uni2119 ; B 16 0 642 662 ;
+C 145 ; WX 722 ; N uni211A ; B 34 -178 701 676 ;
+C 146 ; WX 767 ; N uni211D ; B 17 0 759 662 ;
+C 147 ; WX 556 ; N u1D54A ; B 42 -14 491 676 ;
+C 148 ; WX 711 ; N u1D54B ; B 17 0 693 662 ;
+C 149 ; WX 822 ; N u1D54C ; B 14 -15 805 662 ;
+C 150 ; WX 822 ; N u1D54D ; B 16 -11 797 662 ;
+C 151 ; WX 1044 ; N u1D54E ; B 5 -11 1032 662 ;
+C 152 ; WX 822 ; N u1D54F ; B 10 0 804 662 ;
+C 153 ; WX 722 ; N u1D550 ; B 22 0 703 662 ;
+C 154 ; WX 731 ; N uni2124 ; B 9 0 717 662 ;
+C 165 ; WX 600 ; N u1D55C ; B 7 0 605 683 ;
C 186 ; WX 333 ; N caron ; B 11 507 322 674 ;
C 187 ; WX 333 ; N breve ; B 26 507 307 664 ;
+C 188 ; WX 712 ; N uni2AEB ; B 62 0 650 550 ;
+C 189 ; WX 712 ; N uni2AEB.not ; B 62 -74 650 616 ;
+C 190 ; WX 283 ; N u1D6A4.up ; B 25 -2 258 442 ;
+C 191 ; WX 332 ; N u1D6A5.up ; B 12 -223 256 442 ;
C 219 ; WX 333 ; N tilde ; B 1 532 331 638 ;
+C 220 ; WX 0 ; N dotaccent ; B -286 551 -174 660 ;
C 221 ; WX 333 ; N macron ; B 11 547 322 601 ;
C 222 ; WX 333 ; N ring ; B 67 512 266 711 ;
C 223 ; WX 333 ; N circumflex ; B 11 507 322 674 ;
@@ -205,8 +193,8 @@ C 233 ; WX 0 ; N uni0309 ; B -307 521 -125 729 ;
C 234 ; WX 0 ; N uni030A ; B -333 530 -128 729 ;
C 235 ; WX 0 ; N uni030B ; B -325 521 -35 674 ;
C 236 ; WX 0 ; N uni030C ; B -371 525 -89 678 ;
-C 251 ; WX 478 ; N dblbracketleft ; B 88 -243 444 757 ;
-C 252 ; WX 476 ; N dblbracketright ; B 34 -243 388 757 ;
+C 251 ; WX 528 ; N dblbracketleft ; B 88 -243 444 757 ;
+C 252 ; WX 546 ; N dblbracketright ; B 54 -243 408 757 ;
C 253 ; WX 564 ; N plus ; B 30 0 534 506 ;
C 254 ; WX 333 ; N grave ; B 19 507 242 678 ;
C 255 ; WX 333 ; N acute ; B 93 507 317 678 ;
diff --git a/fonts/newtx/afm/txsys.afm b/fonts/newtx/afm/txsys.afm
index 3d7c9a7779..11cc2b58d7 100644
--- a/fonts/newtx/afm/txsys.afm
+++ b/fonts/newtx/afm/txsys.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20161003
-Comment Creation Date: Wed May 31 19:22:45 2017
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 12 14:29:00 2019
FontName txsys
FullName txsys
FamilyName txsys
@@ -13,10 +13,9 @@ UnderlineThickness 50
Version 3.0
EncodingScheme FontSpecific
FontBBox -47 -944 2835 838
-CapHeight 691
-StartCharMetrics 191
+StartCharMetrics 205
C 0 ; WX 636 ; N minus ; B 62 229 574 285 ;
-C 1 ; WX 250 ; N periodcentered ; B 70 203 181 314 ;
+C 1 ; WX 250 ; N periodcentered ; B 70 202 181 313 ;
C 2 ; WX 636 ; N multiply ; B 56 -5 580 520 ;
C 3 ; WX 471 ; N asteriskmath ; B 62 63 409 450 ;
C 4 ; WX 636 ; N divide ; B 62 0 574 514 ;
@@ -70,7 +69,7 @@ C 51 ; WX 536 ; N owner ; B 52 8 484 506 ;
C 52 ; WX 634 ; N triangle ; B 42 0 592 548 ;
C 53 ; WX 634 ; N triangleinv ; B 42 0 592 548 ;
C 54 ; WX 0 ; N negationslash ; B 124 -162 512 676 ;
-C 55 ; WX 0 ; N mapsto ; B 62 52 170 462 ;
+C 55 ; WX 0 ; N uni21A6.endl ; B 62 52 170 462 ;
C 56 ; WX 587 ; N universal ; B 25 -14 562 663 ;
C 57 ; WX 587 ; N existential ; B 44 0 543 662 ;
C 58 ; WX 640 ; N logicalnot ; B 62 84 578 342 ;
@@ -170,17 +169,36 @@ C 151 ; WX 440 ; N uni2A16.upsm ; B 45 -159 406 715 ;
C 152 ; WX 727 ; N product.sm ; B 24 0 703 662 ;
C 153 ; WX 670 ; N summation.sm ; B 43 0 626 662 ;
C 154 ; WX 587 ; N nexists ; B 44 -134 543 794 ;
-C 155 ; WX 500 ; N emptysetAlt ; B 24 -48 476 488 ;
-C 156 ; WX 697 ; N emptysetAlt2 ; B 62 -12 635 561 ;
+C 155 ; WX 500 ; N emptyset.alt1 ; B 24 -48 476 488 ;
+C 156 ; WX 697 ; N emptyset.alt2 ; B 62 -12 635 561 ;
C 157 ; WX 460 ; N slash ; B 62 -193 398 707 ;
-C 158 ; WX 532 ; N dddot ; B 18 523 515 622 ;
-C 159 ; WX 731 ; N ddddot ; B 18 523 714 622 ;
+C 158 ; WX 333 ; N grave ; B 19 507 242 678 ;
+C 159 ; WX 333 ; N acute ; B 93 507 317 678 ;
+C 160 ; WX 333 ; N circumflex ; B 11 507 322 674 ;
+C 161 ; WX 333 ; N tilde ; B 1 532 331 638 ;
+C 162 ; WX 333 ; N macron ; B 11 547 322 601 ;
+C 163 ; WX 333 ; N breve ; B 26 507 307 664 ;
+C 164 ; WX 333 ; N dotacc ; B 112 519 222 629 ;
+C 165 ; WX 370 ; N ddotacc ; B 40 519 330 629 ;
+C 166 ; WX 333 ; N ring ; B 67 512 266 711 ;
+C 167 ; WX 333 ; N caron ; B 11 507 322 674 ;
+C 168 ; WX 548 ; N dddotacc ; B 40 519 508 629 ;
C 169 ; WX 454 ; N lvec ; B 17 549 437 759 ;
C 170 ; WX 454 ; N harpoonacc ; B 17 626 437 759 ;
C 171 ; WX 454 ; N lharpoonacc ; B 17 626 437 759 ;
C 172 ; WX 454 ; N lrvec ; B 17 549 437 759 ;
C 173 ; WX 454 ; N lrharpoonacc ; B 17 626 437 759 ;
C 174 ; WX 454 ; N vec ; B 17 549 437 759 ;
+C 175 ; WX 280 ; N uni20D7.rt ; B 0 -77 310 133 ;
+C 176 ; WX 175 ; N uni20D7.ex ; B 0 0 175 55 ;
+C 177 ; WX 334 ; N periodcentered.B ; B 101 171 232 302 ;
+C 178 ; WX 389 ; N periodcentered.BB ; B 118 163 270 315 ;
+C 179 ; WX 421 ; N openbullet.S ; B 45 70 376 401 ;
+C 180 ; WX 275 ; N bullet.SSS ; B 31 115 244 329 ;
+C 181 ; WX 350 ; N bullet.SS ; B 39 87 311 358 ;
+C 182 ; WX 425 ; N bullet.S ; B 48 57 377 387 ;
+C 183 ; WX 334 ; N prime.var ; B 50 45 284 471 ;
+C 184 ; WX 564 ; N plus ; B 30 0 534 506 ;
C 185 ; WX 333 ; N parenleft ; B 48 -202 304 717 ;
C 186 ; WX 333 ; N parenright ; B 29 -202 285 717 ;
C 187 ; WX 333 ; N bracketleft ; B 88 -193 299 707 ;
@@ -194,17 +212,12 @@ C 194 ; WX 333 ; N tildehat ; B 1 532 331 814 ;
C 195 ; WX 333 ; N hatbar ; B 11 507 322 751 ;
C 196 ; WX 333 ; N hattilde ; B 1 507 331 788 ;
C 197 ; WX 333 ; N hathat ; B 11 507 322 814 ;
-C 203 ; WX 410 ; N transpose ; B -18 0 392 536 ;
-C 208 ; WX 334 ; N cdotB ; B 101 171 232 302 ;
-C 209 ; WX 389 ; N cdotBB ; B 118 163 270 315 ;
-C 210 ; WX 421 ; N smcompB ; B 45 70 376 401 ;
-C 211 ; WX 275 ; N bulletSSS ; B 31 115 244 329 ;
-C 212 ; WX 350 ; N bulletSS ; B 39 87 311 358 ;
-C 213 ; WX 425 ; N bulletS ; B 48 57 377 387 ;
-C 214 ; WX 334 ; N prime2 ; B 50 45 284 471 ;
-C 219 ; WX 333 ; N dotacc ; B 112 519 222 629 ;
-C 220 ; WX 370 ; N ddotacc ; B 40 519 330 629 ;
-C 221 ; WX 548 ; N dddotacc ; B 40 519 508 629 ;
-C 222 ; WX 728 ; N ddddotacc ; B 40 519 688 629 ;
+C 198 ; WX 728 ; N ddddotacc ; B 40 519 688 629 ;
+C 199 ; WX 410 ; N transpose ; B -18 0 392 536 ;
+C 200 ; WX 528 ; N dblbracketleft ; B 88 -243 444 757 ;
+C 201 ; WX 546 ; N dblbracketright ; B 54 -243 408 757 ;
+C 202 ; WX 410 ; N hermitconj ; B -18 0 392 536 ;
+C 203 ; WX 712 ; N uni2AEB ; B 62 0 650 550 ;
+C 204 ; WX 712 ; N nPerp ; B 62 -74 650 616 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/newtx/doc/newtxdoc.pdf b/fonts/newtx/doc/newtxdoc.pdf
index 0aee9d9ef8..c0614f0aca 100644
--- a/fonts/newtx/doc/newtxdoc.pdf
+++ b/fonts/newtx/doc/newtxdoc.pdf
Binary files differ
diff --git a/fonts/newtx/doc/newtxdoc.tex b/fonts/newtx/doc/newtxdoc.tex
index df822db02c..5ee34386c6 100644
--- a/fonts/newtx/doc/newtxdoc.tex
+++ b/fonts/newtx/doc/newtxdoc.tex
@@ -2,9 +2,17 @@
\documentclass[11pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage[parfill]{parskip}% Begin paragraphs with an empty line rather than an indent
+\pdfmapfile{=newtx.map}
+\pdfcompresslevel=0
+\pdfgentounicode=1
+\input glyphtounicode.tex
+\usepackage{pdfx} % v 1.6.4 or higher
+\InputIfFileExists{glyphtounicode-cmr.tex}{}{}
+\InputIfFileExists{glyphtounicode-ntx.tex}{}{}
\usepackage{graphicx}
\usepackage{url}
\usepackage{trace}
+\usepackage{fonttable}
%SetFonts
% newtxtext text and newtxmath
\usepackage{amsthm}
@@ -45,7 +53,9 @@
\section{Introduction}
This package is meant to be a replacement for Young Ryu's {\tt txfonts}. It is a complete text ({\tt newtxtext}) and math ({\tt newtxmath}) package with roman text font provided by a Times clone, sans serif based on a \textsf{Helvetica} clone, typewriter faces, plus math symbol fonts whose math italic letters are from a Times Italic clone. As of version 1.4, {\tt newtxtext} no longer depends on {\tt txfonts} but is based on the richer source \textsf{TeXGyre Termes}, but {\tt newtxmath} continues to use the {\tt txfonts} math glyphs with many metric adjustments and some wholesale modifications.
-\textsc{Very Important:} The math package changed substantially as of version 1.5, changing a number of glyphs, adding an option to reduce the sizes of large operators, and changing the integral signs to a choice of upright and slanted forms, each available in twelve variants. The new options are {\tt upint} (upright integrals) and {\tt smallerops} (smaller large operators.) Some previously available options may no longer have any effect. The changes are described in detail in the section on math mode options. A summary of the changes in version 1.5 is given in the Appendix.
+\textsc{Very Important:} The math package changed substantially as of version 1.5, changing a number of glyphs, adding an option to reduce the sizes of large operators, and changing the integral signs to a choice of upright and slanted forms, each available in twelve variants. The new options are {\tt upint} (upright integrals) and {\tt smallerops} (smaller large operators.) Some previously available options may no longer have any effect. The changes are described in detail in the section on math mode options. A summary of the changes in version 1.5 is given in Appendix 1.
+
+Version 1.60 likewise has many additions and changes that are summarized in Appendix 2. Most important is that {\tt newtx} is now able to output PDF/A-1b compliant pdf using {\tt pdflatex}.
@@ -638,7 +648,7 @@ The font files {\tt ntxexmods.pfb} and {\tt ntxbexmods.pfb} were derived from {\
The last two entries provide us with a way to access custom-encoded versions of {\tt fxlri.pfb} and {\tt fxlbi.map} in order to access some of the unencoded alternate characters---eg, Greek letters, {\tt J.alt} and {\tt v.alt}. The font file \textsf{LibertineTheta-Regular.pfb} was created from the Theta symbol in {\tt fxlri.pfb}, which requires some FontForge help to look correct.
This version contains optical versions of the math italic and symbol fonts at 7\texttt{pt} and 5\texttt{pt}, allowing better rendering in \verb|\scriptstyle| and \verb|\scriptscriptstyle|.
-\section{Appendix: Changes made in version 1.5}
+\section{Appendix 1: Changes made in version 1.5}
\begin{itemize}
\item
The large delimiters have been modified so match the heights in common usage by \texttt{cmex10} and other packages. (Those formerly used by \texttt{newtxmath} were somewhat shorter, resulting in unexpected behavior of \verb|\Big|, \verb|\bigg|, etc.)
@@ -716,4 +726,114 @@ $\smallointctrclockwise$ & \verb|$\smallointctrclockwise$|& $\ointctrclockwise$
\item New macros \verb|\setSYdimens| and \verb|\setEXdimens| allow experts to modify some math font dimensions.
\end{itemize}
+
+\def\jj{\mkern-3mu j}
+
+\section{Appendix 2: Changes made in version 1.60}
+Versions of {\tt newtx} dated from September, 2019 (1.60 for {\tt newtxmath} make some quite substantial changes, mostly to math mode.
+
+\section{Goals}
+Spurred by work of Ross Moore to provide means of generating archivable pdf using {\tt pdflatex}, the main goal was to change {\tt newtx} and {\tt newpx} to meet the requirements for satisfying the {\tt PDF/A-1b} standards by using an appropriate preamble involving the {\tt pdfx} package and other unicode mapping files. Making these changes gave me the opportunity to organize the source files to make them more manageable in future revisions.
+
+A further goal whose time seemed ripe was to rework the spacing of math letters, both Roman and Greek, so they behaved better in superscripts and subscripts. This did not turn out to be so easy. The problem is illustrated by math italic j. If you don't give it enough extra space on the left, it will likely collide with the D in rendering \verb|$D^j$|. On the other hand, if you do give it enough space on the left, it will look bad as a subscript, appearing too far right.
+
+A final goal was to make better use of the remaining space in some of the math fonts by placing some math alphabets in them, avoiding perhaps a waste of those precious sixteen math families.
+
+\section{The important changes}
+The following changes were made to both {\tt newtx} and {\tt newpx}.
+
+\subsection{Archivability}
+Some of the individual font files from which the math fonts are built turned out to have some fairly minor structural issues. These have all been corrected. The more major issue was the lack of unicode mapping for all characters in the fonts. For the symbol and math extension fonts, this issue was largely solved by Ross Moore's {\tt glyphtounicode} files that are now accessible as part of TeXLive and MiKTeX. The main problem was the math alphabets like math italic, bold math italic, upright Greek and slanted Greek, all of which have now been assigned their own unicode points. For all of these, I constructed new fonts using unicode names for the glyphs, then made \textsf{fontinst} scripts that renamed those unicode values to the original simple names as used in the encoding files so that I could use my old encoding and adjustment files. This exercise has now been carried out for {\tt newtxmath}, {\tt newpxmath}, {\tt newtxmath/libertine} and {\tt newtxmath/xcharter.} Each of these can now be considered to have an ``enhanced'' status that allows them to share all the new assets described below. The other packages which may be specified as an option to {\tt newtxmath} (e.g., {\tt cochineal, baskervillef}) must be considered for the moment to be ``unenhanced'' and able to share only some of the new assets. In particular, only the enhanced items can generate archivable pdf.
+
+Also modified were the {\tt sups} fonts in {newtxtext}, where the main issue was unicode mapping. Superior number and some superior letters do have assigned unicode values, but in may cases a more creative approach was needed, and provided once again by Ross Moore. I rebuilt the superior font files using those unicode names, solving that particular problem.
+
+Here is a sample preamble showing the elements you will need to specify to generate a pdf satisfying the PDF/A-1b standards, as verified by Adobe Acrobat Pro. (Other verification processes may yield different outcomes.)
+\begin{verbatim}
+\documentclass[noamsfonts]{amsart} % save 2 math families
+\pdfcompresslevel=0
+\pdfgentounicode=1
+\input glyphtounicode.tex
+\usepackage{pdfx} % v 1.6.4 or higher
+\InputIfFileExists{glyphtounicode-cmr.tex}{}{}
+\InputIfFileExists{glyphtounicode-ntx.tex}{}{}
+\usepackage{newtxtext} %T1 is default encoding
+\usepackage[scaled=0.95]{inconsolata} % typewriter
+%\usepackage[leqno]{amsmath}
+\usepackage{amsthm}
+\usepackage[vvarbb]{newtxmath} % vvarbb gives STIX Bbb
+\end{verbatim}
+
+Version 1.6.3 of {\tt pdfx} from February 2019 mishandles math accents. A fix is now available and will become part of the upcoming {\tt pdfx} v1.6.4.
+
+\subsection{Glyph spacing changes} \textbf{(For enhanced packages only)}I reworked the math italics to improve the rendering of some superscripts. This affects (a) parentheses, brackets and braces to inhibit clashes; (b) glyphs like j, f, p, y, \verb|\rho|, \verb|\beta| and \verb|\mu| where a long tail could pose problems intersecting with other glyphs; (c) glyphs like such as D, Q and \verb|\Phi| that are round on the right, where interference is most likely to occur with a superscript. Increasing the left side-bearing of j, etc., helps with superscripts but creates an ugly gap when used as subscripts.
+
+
+ The {\tt subscriptcorrection} option to {\tt newtxmath} has been corrected and enhanced so that it now offers a partial solution the subscript spacing problem. I regret that this option is incompatible with xy-pic, both depending on making \verb|_| an active character. {\tt Newtxmath} will detect if the {\tt xy} package is loaded and disable {\tt subscriptcorrection} if so. You would have to correct such issues by manually inserting a negative \verb|\mkern|. For example, you might put in your preamble something like
+ \begin{verbatim}
+\def\jj{\mkern-3mu j}
+\end{verbatim}
+and then use \verb|$x_{\jj}$| instead of \verb|$x_j$|, turning $x_j$ into $x_{\jj}$.
+
+If you do enable {\tt subscriptcorrection}, there is a default correction table in the {\tt sty} file, but the sty file also looks for a file named, e.g., {\tt newtx.subs} if you are using the {\tt newtx} default math letters. There is already such a file located in the {\tt newtx} distribution in the \verb|/tex/latex/| folder. If you wish to make changes to this file, copy the file to your home TeX folder where it will be found by TeX before the one in the distribution. The entries in the file are lines like
+\begin{verbatim}
+{j}{-3}
+\end{verbatim}
+each of which will have the same effect as the above macro if the first item in the subscript is j. You can also specify Greek letters with lines like
+\begin{verbatim}
+{\beta}{-1.5}
+\end{verbatim}
+The complete list of file names recognized for specifying subscript corrections is:
+\begin{verbatim}
+newtx.subs
+libertine.subs
+xcharter.subs
+cochineal.subs
+baskervillef.subs
+stickstoo.subs
+garamond.subs
+baskervald.subs
+utopia.subs
+minion.subs
+\end{verbatim}
+
+\subsection{New glyphs added} \textbf{(For enhanced packages only)} Math family 1 {\tt (letters)} has been extended from 128 slots to 256, retaining the {\tt OML} encoding of the first 128. Most of additional slots have been allocated to a script font from the old STIX collection and an upright modification of that font.
+By default, \verb|$\mathscr{F}$| will produce $\mathscr{F}$.\\
+$\bullet$ option {\tt uprightscript} changes the output to {\usefont{OML}{ntxmi}{m}{it}\char201}.\\
+In both cases, there are full upper-case and lower-case and {\tt dotlessi}, {\tt dotlessj}. To insert the latter, you can write either \verb|$\mathscr{\imath}$| or \verb|$\imathscr$|, rendered as $\mathscr{\imath}$ in the slanted script case.
+
+The secondary letters font {\tt (lettersA)} and math family 2 {\tt(symbols)} have been rearranged. The first of these continues to have a Fraktur alphabet, but it a modification of its original one, having wider vertical stems and a blacker appearance more in keeping with the weight Times. {\tt Dotlessi} and {\tt dotlessj} have been added and can be specified in math mode by \verb|$\imathfrak$| and \verb|$\jmathfrak$|---\verb|$\mathfrak{\imath}$| also works. There are in addition two subsidiary Bbb alphabets in {\tt lettersA}, specified by the respective options {\tt vmathbb}, {\tt vvmathbb}, and there are corresponding {\tt dotlessi}, {\tt dotlessj} activated by \verb|$\imathbb$|, \verb|$\jmathbb$|, which always render as $\imathbb$, $\jmathbb$ mo matter the choice of which Blackboard Bold Alphabet. If you select one of the options {\tt vmathbb}, {\tt vvmathbb}, you will have Bbb digits 0..9 using, e.g., \verb|$\mathbb{1}$| to get~$\mathbb{1}$.
+
+Among the new symbols added are:\\
+$\bullet$ \verb|\hslash|, \verb|\hbar|, \verb|\lambdaslash|, \verb|\lambdabar|, \verb|\Zbar|, \verb|\Angstrom| are now constructed from the native glyphs, but only in the enhanced families.\\
+$\bullet$ Euler's constant \verb|$\Euler$| ($\Euler$).\\
+$\bullet$ Hermitian transpose \verb|\hermtransp| or \verb|\htransp| is used like \verb|$\mathbf{A}^{\htransp}$| ($\mathbf{A}^{\htransp}$). This usage is similar to simple transpose \verb|$\mathbf{A}^{\transp}$| ($\mathbf{A}^{\transp}$).\\
+$\bullet$ Independence can use \verb|\Perp|, $\Perp$, and there is a new \verb|\nPerp|, $\nPerp$ for the negation.
+
+\subsection{Adaptive vector accent} The \LaTeX\ macro \verb|\overrightarrow| provides a right arrow with adaptive width, but not matching the vector head of {\tt newtxmath}. Likewise, the {\tt esvect} provides a similar service with a choice of vector heads, none of which match {\tt newtxmath}. I've added code to provide a matching adaptive vector accent and which uses the same macro name, \verb|\vv|, as {\tt esvect}.
+For a comparison of thse vector accents, \verb|$\vec{XY} \vv{XY} \overrightarrow{XY}$| renders as\\
+$\vec{XY} \vv{XY} \overrightarrow{XY}$.\\
+$\bullet$ \verb|$\vv{AB}$| renders as $\vv{AB}$.\\
+$\bullet$ \verb|$\vv*{AB}{x}$| renders as $\vv*{AB}{x}$. This provides better horizontal spacing of subscripts than \verb|$\vv{AB}_{x}$|, $\vv{AB}_{x}$.\\
+$\bullet$ You can also do \verb|$\vv*{AB}{\vv{CD}}$|, which renders as $\vv*{AB}{\vv{CD}}$.\\
+$\bullet$ You can change the vertical space between the arrow and the accentee by means of the package option {\tt vecsep}, whose default value is {\tt .25ex}.
+
+\subsection{Miscellaneous Changes}
+\begin{itemize}
+\item
+The superior letters fonts in {\tt newtx}
+have been extended and all glyphs now have appropriate unicode mappings.
+\item
+The AMS fonts replacement, {\tt ntxsym} corrects the former misplacement of \verb|\kbbb|, \verb|\daleth|, \verb|\circledR| and \verb|\circledS|.)
+\end{itemize}
+\newpage
+\section{Changed Font Tables}
+\subsection{letters}
+\fonttable{ntxmi}
+\newpage
+\subsection{lettersA}
+\fonttable{ntxmia}
+\newpage
+\subsection{symbols}
+\fonttable{ntxsy}
+\newpage
\end{document} \ No newline at end of file
diff --git a/fonts/newtx/enc/ntxsups_ly1.enc b/fonts/newtx/enc/ntxsups_ly1.enc
new file mode 100644
index 0000000000..724aae13dd
--- /dev/null
+++ b/fonts/newtx/enc/ntxsups_ly1.enc
@@ -0,0 +1,297 @@
+% A version of the LY1 encoding, intended for use with otftotfm.
+% CODINGSCHEME TEX TYPEWRITER AND WINDOWS ANSI
+/ntxsupsLY1Encoding [
+% 0x00
+/.notdef.sup
+/Euro.sup
+/.notdef.sup
+/.notdef.sup
+/fraction.sup
+/dotaccent.sup
+/hungarumlaut.sup
+/ogonek.sup
+% 0x08.sup
+/.notdef.sup
+/.notdef.sup
+/cwm.sup
+/.notdef % was /ff.sup
+/.notdef % was /fi.sup
+/.notdef % was /fl.sup
+/.notdef % was /ffi.sup
+/.notdef % was /ffl.sup
+% 0x10.sup
+/dotlessi.sup
+/dotlessj.sup
+/grave.sup
+/acute.sup
+/caron.sup
+/breve.sup
+/macron.sup
+/ring.sup
+% 0x18.sup
+/cedilla.sup
+/germandbls.sup
+/ae.sup
+/oe.sup
+/oslash.sup
+/AE.sup
+/OE.sup
+/Oslash.sup
+% 0x20.sup
+/space.sup
+/exclam.sup
+/quotedbl.sup
+/numbersign.sup
+/dollar.sup
+/percent.sup
+/ampersand.sup
+/quoteright.sup
+% 0x28.sup
+/parenleft.sup
+/parenright.sup
+/asterisk.sup
+/plus.sup
+/comma.sup
+/hyphen.sup
+/period.sup
+/slash.sup
+% 0x30.sup
+/zero.sup
+/one.sup
+/two.sup
+/three.sup
+/four.sup
+/five.sup
+/six.sup
+/seven.sup
+% 0x38.sup
+/eight.sup
+/nine.sup
+/colon.sup
+/semicolon.sup
+/less.sup
+/equal.sup
+/greater.sup
+/question.sup
+% 0x40.sup
+/at.sup
+/A.sup
+/B.sup
+/C.sup
+/D.sup
+/E.sup
+/F.sup
+/G.sup
+% 0x48.sup
+/H.sup
+/I.sup
+/J.sup
+/K.sup
+/L.sup
+/M.sup
+/N.sup
+/O.sup
+% 0x50.sup
+/P.sup
+/Q.sup
+/R.sup
+/S.sup
+/T.sup
+/U.sup
+/V.sup
+/W.sup
+% 0x58.sup
+/X.sup
+/Y.sup
+/Z.sup
+/bracketleft.sup
+/backslash.sup
+/bracketright.sup
+/circumflex.sup
+/underscore.sup
+% 0x60.sup
+/quoteleft.sup
+/a.sup
+/b.sup
+/c.sup
+/d.sup
+/e.sup
+/f.sup
+/g.sup
+% 0x68.sup
+/h.sup
+/i.sup
+/j.sup
+/k.sup
+/l.sup
+/m.sup
+/n.sup
+/o.sup
+% 0x70.sup
+/p.sup
+/q.sup
+/r.sup
+/s.sup
+/t.sup
+/u.sup
+/v.sup
+/w.sup
+% 0x78.sup
+/x.sup
+/y.sup
+/z.sup
+/braceleft.sup
+/bar.sup
+/braceright.sup
+/tilde.sup
+/dieresis.sup
+% 0x80.sup
+/Lslash.sup
+/quotesingle.sup
+/quotesinglbase.sup
+/florin.sup
+/quotedblbase.sup
+/ellipsis.sup
+/dagger.sup
+/daggerdbl.sup
+% 0x88.sup
+/circumflex.sup
+/perthousand.sup
+/Scaron.sup
+/guilsinglleft.sup
+/OE.sup
+/Zcaron.sup
+/asciicircum.sup
+/minus.sup
+% 0x90.sup
+/lslash.sup
+/quoteleft.sup
+/quoteright.sup
+/quotedblleft.sup
+/quotedblright.sup
+/bullet.sup
+/endash.sup
+/emdash.sup
+% 0x98.sup
+/tilde.sup
+/trademark.sup
+/scaron.sup
+/guilsinglright.sup
+/oe.sup
+/zcaron.sup
+/asciitilde.sup
+/Ydieresis.sup
+% 0xA0.sup
+/cwm.sup
+/exclamdown.sup
+/cent.sup
+/sterling.sup
+/currency.sup
+/yen.sup
+/brokenbar.sup
+/section.sup
+% 0xA8.sup
+/dieresis.sup
+/copyright.sup
+/ordfeminine.sup
+/guillemotleft.sup
+/logicalnot.sup
+/sfthyphen.sup
+/registered.sup
+/macron.sup
+% 0xB0.sup
+/degree.sup
+/plusminus.sup
+/twosuperior.sup
+/threesuperior.sup
+/acute.sup
+/mu.sup
+/paragraph.sup
+/periodcentered.sup
+% 0xB8.sup
+/cedilla.sup
+/onesuperior.sup
+/ordmasculine.sup
+/guillemotright.sup
+/onequarter.sup
+/onehalf.sup
+/threequarters.sup
+/questiondown.sup
+% 0xC0.sup
+/Agrave.sup
+/Aacute.sup
+/Acircumflex.sup
+/Atilde.sup
+/Adieresis.sup
+/Aring.sup
+/AE.sup
+/Ccedilla.sup
+% 0xC8.sup
+/Egrave.sup
+/Eacute.sup
+/Ecircumflex.sup
+/Edieresis.sup
+/Igrave.sup
+/Iacute.sup
+/Icircumflex.sup
+/Idieresis.sup
+% 0xD0.sup
+/Eth.sup
+/Ntilde.sup
+/Ograve.sup
+/Oacute.sup
+/Ocircumflex.sup
+/Otilde.sup
+/Odieresis.sup
+/multiply.sup
+% 0xD8.sup
+/Oslash.sup
+/Ugrave.sup
+/Uacute.sup
+/Ucircumflex.sup
+/Udieresis.sup
+/Yacute.sup
+/Thorn.sup
+/germandbls.sup
+% 0xE0.sup
+/agrave.sup
+/aacute.sup
+/acircumflex.sup
+/atilde.sup
+/adieresis.sup
+/aring.sup
+/ae.sup
+/ccedilla.sup
+% 0xE8.sup
+/egrave.sup
+/eacute.sup
+/ecircumflex.sup
+/edieresis.sup
+/igrave.sup
+/iacute.sup
+/icircumflex.sup
+/idieresis.sup
+% 0xF0.sup
+/eth.sup
+/ntilde.sup
+/ograve.sup
+/oacute.sup
+/ocircumflex.sup
+/otilde.sup
+/odieresis.sup
+/divide.sup
+% 0xF8.sup
+/oslash.sup
+/ugrave.sup
+/uacute.sup
+/ucircumflex.sup
+/udieresis.sup
+/yacute.sup
+/thorn.sup
+/ydieresis.sup
+] def
+%
+% LIGKERN exclam.sup quoteleft.sup =: exclamdown.sup;
+%
+% LIGKERN || = 32;
+
diff --git a/fonts/newtx/enc/ntxsups_ot1.enc b/fonts/newtx/enc/ntxsups_ot1.enc
new file mode 100644
index 0000000000..8982fb1310
--- /dev/null
+++ b/fonts/newtx/enc/ntxsups_ot1.enc
@@ -0,0 +1,297 @@
+% A version of the OT1 encoding specific to ntxsups
+% CODINGSCHEME TEX TEXT
+/ntxsupsOT1Encoding [
+% 0x00
+/Gamma
+/Delta
+/Theta
+/Lambda
+/Xi
+/Pi
+/Sigma
+/Upsilon
+% 0x08
+/Phi
+/Psi
+/Omega
+/.notdef % was /ff
+/.notdef % was /fi
+/.notdef % was /fl
+/.notdef % was /ffi
+/.notdef % was /ffl
+% 0x10
+/dotlessi
+/dotlessj
+/grave
+/acute
+/caron
+/breve
+/macron
+/ring
+% 0x18
+/cedilla
+/germandbls
+/ae
+/oe
+/oslash
+/AE
+/OE
+/Oslash
+% 0x20
+/space
+/exclam.sup
+/quotedblright.sup
+/numbersign.sup
+/dollar.sup
+/percent.sup
+/ampersand.sup
+/quoteright.sup
+% 0x28
+/parenleft.sup
+/parenright.sup
+/asterisk.sup
+/plus.sup
+/comma.sup
+/hyphen.sup
+/period.sup
+/slash.sup
+% 0x30
+/zero.sup
+/one.sup
+/two.sup
+/three.sup
+/four.sup
+/five.sup
+/six.sup
+/seven.sup
+% 0x38
+/eight.sup
+/nine.sup
+/colon.sup
+/semicolon.sup
+/exclamdown.sup
+/equal.sup
+/questiondown.sup
+/question.sup
+% 0x40
+/at.sup
+/A.sup
+/B.sup
+/C.sup
+/D.sup
+/E.sup
+/F.sup
+/G.sup
+% 0x48
+/H.sup
+/I.sup
+/J.sup
+/K.sup
+/L.sup
+/M.sup
+/N.sup
+/O.sup
+% 0x50
+/P.sup
+/Q.sup
+/R.sup
+/S.sup
+/T.sup
+/U.sup
+/V.sup
+/W.sup
+% 0x58
+/X.sup
+/Y.sup
+/Z.sup
+/bracketleft.sup
+/quotedblleft.sup
+/bracketright.sup
+/circumflex.sup
+/dotaccent.sup
+% 0x60
+/quoteleft.sup
+/a.sup
+/b.sup
+/c.sup
+/d.sup
+/e.sup
+/f.sup
+/g.sup
+% 0x68
+/h.sup
+/i.sup
+/j.sup
+/k.sup
+/l.sup
+/m.sup
+/n.sup
+/o.sup
+% 0x70
+/p.sup
+/q.sup
+/r.sup
+/s.sup
+/t.sup
+/u.sup
+/v.sup
+/w.sup
+% 0x78
+/x.sup
+/y.sup
+/z.sup
+/endash.sup
+/emdash.sup
+/hungarumlaut.sup
+/tilde.sup
+/dieresis.sup
+% 0x80
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x88
+/.notdef
+/.notdef
+/Lslash
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x90
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x98
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xA0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xA8
+/.notdef
+/.notdef
+/lslash
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xB0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xB8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xC0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xC8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xD0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xD8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xE0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xE8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xF0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xF8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
+%
+% LIGKERN exclam.sup quoteleft.sup =: exclamdown.sup;
+%
+% LIGKERN || = 32;
+
diff --git a/fonts/newtx/enc/ntxsups_t1.enc b/fonts/newtx/enc/ntxsups_t1.enc
new file mode 100644
index 0000000000..2582fdc35d
--- /dev/null
+++ b/fonts/newtx/enc/ntxsups_t1.enc
@@ -0,0 +1,297 @@
+% A version of the T1 encoding specific to ntxsups.
+% CODINGSCHEME EXTENDED TEX FONT ENCODING - LATIN
+/ntxsupsT1Encoding [
+% 0x00
+/grave.sup
+/acute.sup
+/circumflex.sup
+/tilde.sup
+/dieresis.sup
+/hungarumlaut.sup
+/ring.sup
+/caron.sup
+% 0x08.sup
+/breve.sup
+/macron.sup
+/dotaccent.sup
+/cedilla.sup
+/ogonek.sup
+/quotesinglbase.sup
+/guilsinglleft.sup
+/guilsinglright.sup
+% 0x10.sup
+/quotedblleft.sup
+/quotedblright.sup
+/quotedblbase.sup
+/guillemotleft.sup
+/guillemotright.sup
+/endash.sup
+/emdash.sup
+/cwm.sup
+% 0x18.sup
+/perthousandzero.sup
+/dotlessi.sup
+/dotlessj.sup
+/.notdef % was /ff.sup
+/.notdef % was /fi.sup
+/.notdef % was /fl.sup
+/.notdef % was /ffi.sup
+/.notdef % was /ffl.sup
+% 0x20.sup
+/space.sup
+/exclam.sup
+/quotedbl.sup
+/numbersign.sup
+/dollar.sup
+/percent.sup
+/ampersand.sup
+/quoteright.sup
+% 0x28.sup
+/parenleft.sup
+/parenright.sup
+/asterisk.sup
+/plus.sup
+/comma.sup
+/hyphen.sup
+/period.sup
+/slash.sup
+% 0x30.sup
+/zero.sup
+/one.sup
+/two.sup
+/three.sup
+/four.sup
+/five.sup
+/six.sup
+/seven.sup
+% 0x38.sup
+/eight.sup
+/nine.sup
+/colon.sup
+/semicolon.sup
+/less.sup
+/equal.sup
+/greater.sup
+/question.sup
+% 0x40.sup
+/at.sup
+/A.sup
+/B.sup
+/C.sup
+/D.sup
+/E.sup
+/F.sup
+/G.sup
+% 0x48.sup
+/H.sup
+/I.sup
+/J.sup
+/K.sup
+/L.sup
+/M.sup
+/N.sup
+/O.sup
+% 0x50.sup
+/P.sup
+/Q.sup
+/R.sup
+/S.sup
+/T.sup
+/U.sup
+/V.sup
+/W.sup
+% 0x58.sup
+/X.sup
+/Y.sup
+/Z.sup
+/bracketleft.sup
+/backslash.sup
+/bracketright.sup
+/asciicircum.sup
+/underscore.sup
+% 0x60.sup
+/quoteleft.sup
+/a.sup
+/b.sup
+/c.sup
+/d.sup
+/e.sup
+/f.sup
+/g.sup
+% 0x68.sup
+/h.sup
+/i.sup
+/j.sup
+/k.sup
+/l.sup
+/m.sup
+/n.sup
+/o.sup
+% 0x70.sup
+/p.sup
+/q.sup
+/r.sup
+/s.sup
+/t.sup
+/u.sup
+/v.sup
+/w.sup
+% 0x78.sup
+/x.sup
+/y.sup
+/z.sup
+/braceleft.sup
+/bar.sup
+/braceright.sup
+/asciitilde.sup
+/hyphenchar.sup
+% 0x80.sup
+/Abreve.sup
+/Aogonek.sup
+/Cacute.sup
+/Ccaron.sup
+/Dcaron.sup
+/Ecaron.sup
+/Eogonek.sup
+/Gbreve.sup
+% 0x88.sup
+/Lacute.sup
+/Lcaron.sup
+/Lslash.sup
+/Nacute.sup
+/Ncaron.sup
+/Eng.sup
+/Ohungarumlaut.sup
+/Racute.sup
+% 0x90.sup
+/Rcaron.sup
+/Sacute.sup
+/Scaron.sup
+/Scedilla.sup
+/Tcaron.sup
+/Tcedilla.sup
+/Uhungarumlaut.sup
+/Uring.sup
+% 0x98.sup
+/Ydieresis.sup
+/Zacute.sup
+/Zcaron.sup
+/Zdotaccent.sup
+/IJ.sup
+/Idotaccent.sup
+/dbar.sup
+/section.sup
+% 0xA0.sup
+/abreve.sup
+/aogonek.sup
+/cacute.sup
+/ccaron.sup
+/dcaron.sup
+/ecaron.sup
+/eogonek.sup
+/gbreve.sup
+% 0xA8.sup
+/lacute.sup
+/lcaron.sup
+/lslash.sup
+/nacute.sup
+/ncaron.sup
+/eng.sup
+/ohungarumlaut.sup
+/racute.sup
+% 0xB0.sup
+/rcaron.sup
+/sacute.sup
+/scaron.sup
+/scedilla.sup
+/tcaron.sup
+/tcedilla.sup
+/uhungarumlaut.sup
+/uring.sup
+% 0xB8.sup
+/ydieresis.sup
+/zacute.sup
+/zcaron.sup
+/zdotaccent.sup
+/ij.sup
+/exclamdown.sup
+/questiondown.sup
+/sterling.sup
+% 0xC0.sup
+/Agrave.sup
+/Aacute.sup
+/Acircumflex.sup
+/Atilde.sup
+/Adieresis.sup
+/Aring.sup
+/AE.sup
+/Ccedilla.sup
+% 0xC8.sup
+/Egrave.sup
+/Eacute.sup
+/Ecircumflex.sup
+/Edieresis.sup
+/Igrave.sup
+/Iacute.sup
+/Icircumflex.sup
+/Idieresis.sup
+% 0xD0.sup
+/Eth.sup
+/Ntilde.sup
+/Ograve.sup
+/Oacute.sup
+/Ocircumflex.sup
+/Otilde.sup
+/Odieresis.sup
+/OE.sup
+% 0xD8.sup
+/Oslash.sup
+/Ugrave.sup
+/Uacute.sup
+/Ucircumflex.sup
+/Udieresis.sup
+/Yacute.sup
+/Thorn.sup
+/SS.sup
+% 0xE0.sup
+/agrave.sup
+/aacute.sup
+/acircumflex.sup
+/atilde.sup
+/adieresis.sup
+/aring.sup
+/ae.sup
+/ccedilla.sup
+% 0xE8.sup
+/egrave.sup
+/eacute.sup
+/ecircumflex.sup
+/edieresis.sup
+/igrave.sup
+/iacute.sup
+/icircumflex.sup
+/idieresis.sup
+% 0xF0.sup
+/eth.sup
+/ntilde.sup
+/ograve.sup
+/oacute.sup
+/ocircumflex.sup
+/otilde.sup
+/odieresis.sup
+/oe.sup
+% 0xF8.sup
+/oslash.sup
+/ugrave.sup
+/uacute.sup
+/ucircumflex.sup
+/udieresis.sup
+/yacute.sup
+/thorn.sup
+/germandbls.sup
+] def
+%
+% LIGKERN exclam.sup quoteleft.sup =: exclamdown.sup;
+%
+% LIGKERN || = 32 ;
+
diff --git a/fonts/newtx/map/newtx.map b/fonts/newtx/map/newtx.map
index c7bbe5efb6..eba51652f1 100644
--- a/fonts/newtx/map/newtx.map
+++ b/fonts/newtx/map/newtx.map
@@ -191,18 +191,20 @@ ntx-Italic-tlf-sc-ot1 TeXGyreTermes-Italic " encntx-ot1-tlf-sc ReEncodeFont " <[
ntx-Italic-osf-sc-ot1 TeXGyreTermes-Italic " encntx-ot1-osf-sc ReEncodeFont " <[ntx-ot1-osf-sc.enc <qtmri.pfb
ntx-Italic-lf-sc-ot1 TeXGyreTermes-Italic " encntx-ot1-lf-sc ReEncodeFont " <[ntx-ot1-lf-sc.enc <qtmri.pfb
ntx-Italic-tosf-sc-ot1 TeXGyreTermes-Italic " encntx-ot1-tosf-sc ReEncodeFont " <[ntx-ot1-tosf-sc.enc <qtmri.pfb
-ntxsups-Bold-t1 ntxsups-Bold " ECEncoding ReEncodeFont " <[ec.enc <ntxsups-Bold.pfb
-ntxsups-BoldItalic-t1 ntxsups-BoldItalic " ECEncoding ReEncodeFont " <[ec.enc <ntxsups-BoldItalic.pfb
-ntxsups-Italic-t1 ntxsups-Italic " ECEncoding ReEncodeFont " <[ec.enc <ntxsups-Italic.pfb
-ntxsups-Regular-t1 ntxsups-Regular " ECEncoding ReEncodeFont " <[ec.enc <ntxsups-Regular.pfb
-ntxsups-Regular-ly1 ntxsups-Regular " TeXnANSIEncoding ReEncodeFont " <[texnansx.enc <ntxsups-Regular.pfb
-ntxsups-Italic-ly1 ntxsups-Italic " TeXnANSIEncoding ReEncodeFont " <[texnansx.enc <ntxsups-Italic.pfb
-ntxsups-BoldItalic-ly1 ntxsups-BoldItalic " TeXnANSIEncoding ReEncodeFont " <[texnansx.enc <ntxsups-BoldItalic.pfb
-ntxsups-Bold-ly1 ntxsups-Bold " TeXnANSIEncoding ReEncodeFont " <[texnansx.enc <ntxsups-Bold.pfb
-ntxsups-Bold-ot1 ntxsups-Bold " encntx-ot1-tlf ReEncodeFont " <[ntx-ot1-tlf.enc <ntxsups-Bold.pfb
-ntxsups-BoldItalic-ot1 ntxsups-BoldItalic " encntx-ot1-tlf ReEncodeFont " <[ntx-ot1-tlf.enc <ntxsups-BoldItalic.pfb
-ntxsups-Italic-ot1 ntxsups-Italic " encntx-ot1-tlf ReEncodeFont " <[ntx-ot1-tlf.enc <ntxsups-Italic.pfb
-ntxsups-Regular-ot1 ntxsups-Regular " encntx-ot1-tlf ReEncodeFont " <[ntx-ot1-tlf.enc <ntxsups-Regular.pfb
+
+ntxsups-Regular-ot1 ntxsups-Regular " ntxsupsOT1Encoding ReEncodeFont " <[ntxsups_OT1.enc <ntxsups-Regular.pfb
+ntxsups-Regular-t1 ntxsups-Regular " ntxsupsT1Encoding ReEncodeFont " <[ntxsups_T1.enc <ntxsups-Regular.pfb
+ntxsups-Regular-ly1 ntxsups-Regular " ntxsupsLY1Encoding ReEncodeFont " <[ntxsups_LY1.enc <ntxsups-Regular.pfb
+ntxsups-Italic-ot1 ntxsups-Italic " ntxsupsOT1Encoding ReEncodeFont " <[ntxsups_OT1.enc <ntxsups-Italic.pfb
+ntxsups-Italic-t1 ntxsups-Italic " ntxsupsT1Encoding ReEncodeFont " <[ntxsups_T1.enc <ntxsups-Italic.pfb
+ntxsups-Italic-ly1 ntxsups-Italic " ntxsupsLY1Encoding ReEncodeFont " <[ntxsups_LY1.enc <ntxsups-Italic.pfb
+ntxsups-Bold-ot1 ntxsups-Bold " ntxsupsOT1Encoding ReEncodeFont " <[ntxsups_OT1.enc <ntxsups-Bold.pfb
+ntxsups-Bold-t1 ntxsups-Bold " ntxsupsT1Encoding ReEncodeFont " <[ntxsups_T1.enc <ntxsups-Bold.pfb
+ntxsups-Bold-ly1 ntxsups-Bold " ntxsupsLY1Encoding ReEncodeFont " <[ntxsups_LY1.enc <ntxsups-Bold.pfb
+ntxsups-BoldItalic-ot1 ntxsups-BoldItalic " ntxsupsOT1Encoding ReEncodeFont " <[ntxsups_OT1.enc <ntxsups-BoldItalic.pfb
+ntxsups-BoldItalic-t1 ntxsups-BoldItalic " ntxsupsT1Encoding ReEncodeFont " <[ntxsups_T1.enc <ntxsups-BoldItalic.pfb
+ntxsups-BoldItalic-ly1 ntxsups-BoldItalic " ntxsupsLY1Encoding ReEncodeFont " <ntxsups_LY1.enc <ntxsups-BoldItalic.pfb
+
ntx-Bold-tlf-scl-ot1 ntxtmb " encntx-ot1-tlf-sc ReEncodeFont " <[ntx-ot1-tlf-sc.enc <ntxtmb.pfb
ntx-Bold-osf-scl-ot1 ntxtmb " encntx-ot1-osf-sc ReEncodeFont " <[ntx-ot1-osf-sc.enc <ntxtmb.pfb
ntx-Bold-lf-scl-ot1 ntxtmb " encntx-ot1-lf-sc ReEncodeFont " <[ntx-ot1-lf-sc.enc <ntxtmb.pfb
@@ -257,3 +259,20 @@ ntx-Italic-tlf-th-ot1 ntxtmri " encntx-ot1-th-tlf ReEncodeFont " <[ntx-ot1-th-tl
ntx-Italic-osf-th-ot1 ntxtmri " encntx-ot1-th-osf ReEncodeFont " <[ntx-ot1-th-osf.enc <ntxtmri.pfb
ntx-Italic-tlf-th-ly1 ntxtmri " encntx-texnansi-th-tlf ReEncodeFont " <[ntx-texnansi-th-tlf.enc <ntxtmri.pfb
ntx-Italic-osf-th-ly1 ntxtmri " encntx-texnansi-th-osf ReEncodeFont " <[ntx-texnansi-th-osf.enc <ntxtmri.pfb
+NewTXMI NewTXMI <NewTXMI.pfb
+NewTXMI7 NewTXMI7 <NewTXMI7.pfb
+NewTXMI5 NewTXMI5 <NewTXMI5.pfb
+NewTXBMI NewTXBMI <NewTXBMI.pfb
+NewTXBMI7 NewTXBMI7 <NewTXBMI7.pfb
+NewTXBMI5 NewTXBMI5 <NewTXBMI5.pfb
+txmiaSTbb txmiaSTbb <txmiaSTbb.pfb
+txbmiaSTbb txbmiaSTbb <txbmiaSTbb.pfb
+LibertineMathRM LibertineMathRM <LibertineMathRM.pfb
+LibertineMathBRM LibertineMathBRM <LibertineMathBRM.pfb
+LibertineMathBMI LibertineMathBMI <LibertineMathBMI.pfb
+LibertineMathMI LibertineMathMI <LibertineMathMI.pfb
+LibertineMathMI7 LibertineMathMI7 <LibertineMathMI7.pfb
+LibertineMathMI5 LibertineMathMI5 <LibertineMathMI5.pfb
+LibertineMathBMI5 LibertineMathBMI5 <LibertineMathBMI5.pfb
+LibertineMathBMI7 LibertineMathBMI7 <LibertineMathBMI7.pfb
+stxscr stxscr <stxscr.pfb
diff --git a/fonts/newtx/opentype/ntxsups-Bold.otf b/fonts/newtx/opentype/ntxsups-Bold.otf
new file mode 100644
index 0000000000..27ed9789d5
--- /dev/null
+++ b/fonts/newtx/opentype/ntxsups-Bold.otf
Binary files differ
diff --git a/fonts/newtx/opentype/ntxsups-BoldItalic.otf b/fonts/newtx/opentype/ntxsups-BoldItalic.otf
new file mode 100644
index 0000000000..17d6ceb765
--- /dev/null
+++ b/fonts/newtx/opentype/ntxsups-BoldItalic.otf
Binary files differ
diff --git a/fonts/newtx/opentype/ntxsups-Italic.otf b/fonts/newtx/opentype/ntxsups-Italic.otf
new file mode 100644
index 0000000000..3653ffd982
--- /dev/null
+++ b/fonts/newtx/opentype/ntxsups-Italic.otf
Binary files differ
diff --git a/fonts/newtx/opentype/ntxsups-Regular.otf b/fonts/newtx/opentype/ntxsups-Regular.otf
new file mode 100644
index 0000000000..b2ef415b88
--- /dev/null
+++ b/fonts/newtx/opentype/ntxsups-Regular.otf
Binary files differ
diff --git a/fonts/newtx/tex/libertine.subs b/fonts/newtx/tex/libertine.subs
new file mode 100644
index 0000000000..818147701e
--- /dev/null
+++ b/fonts/newtx/tex/libertine.subs
@@ -0,0 +1,17 @@
+{f}{-1.5}
+{j}{-1}
+{p}{-.5}
+{y}{-1}
+{A}{-1.5}
+{B}{-1}
+{D}{-1}
+{H}{-1}
+{I}{-1}
+{K}{-1}
+{L}{-1}
+{M}{-1}
+{N}{-0.5}
+{P}{-1}
+{X}{-1}
+{\rho}{-1}
+{\beta}{-1} \ No newline at end of file
diff --git a/fonts/newtx/tex/newtxmath.sty b/fonts/newtx/tex/newtxmath.sty
index 8861a37ac4..a7ad97ac76 100644
--- a/fonts/newtx/tex/newtxmath.sty
+++ b/fonts/newtx/tex/newtxmath.sty
@@ -10,8 +10,8 @@
% of glyph collisions.
% These modifications are by Michael Sharpe, msharpe at ucsd dot edu
-\def\fileversion{1.553}
-\def\filedate{2018/05/15}
+\def\fileversion{1.60}
+\def\filedate{2019/09/20}
\ProvidesPackage{newtxmath}[\filedate\space v\fileversion ]
\@ifundefined{newtxmathLoaded}{}{\endinput}
@@ -21,8 +21,10 @@
\let\newtxmathLoaded\endinput
\RequirePackage{amsmath} % improves extendable delimiter handling
\RequirePackage{etoolbox}
+\RequirePackage{trimspaces} % for trim@pre@space
+
%\RequirePackage{etextools} % for \ifiscs, conflicts with biblatex
-% replacement for \ifiscs
+% Replacement for \ifiscs is not comprehensive, but adequate to distinguish a letter like j from a macro like \rhox, not necessarily existent.
\def\ifiscseq#1{\ifcat$\expandafter\@gobble\string#1$\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}
\RequirePackage{ifxetex,ifluatex,xkeyval}
@@ -34,15 +36,18 @@
\xl@otftrue
\fi
\fi
-\newif\iftx@noopt
+\newif\iftx@noopt \newif\iftx@upscr
\def\cmr@default{lmr} % changed from cmr 20170911
\def\ly@one{LY1}
\def\t@one{T1}
\def\ot@one{OT1}
\newcount\tx@cntz
\input{binhex}
+
\let\ntxmath@scaled\@empty
\define@key{ntxmath}{scaled}[1.0]{\def\ntxmath@scaled{s*[#1]}}
+\def\ntxmath@vecsep{.25ex}
+\define@key{ntxmath}{vecsep}[.25ex]{\def\ntxmath@vecsep{#1}}
%\define@key{ntxmath}{scalesubdrop}[1.0]{\DeclareRobustCommand{\ntx@scalesub}{%
%\fontdimen16\font=#1\fontdimen16\font\fontdimen17\font=#1\fontdimen17\font}}
\DeclareOption*{%
@@ -56,7 +61,9 @@
\newcount\tx@IsAlNum
\newif\iftx@ams \newif\iftx@slantedG \newif\iftx@cmint \newif\iftx@braces
\newif\iftx@libertine \newif\iftx@varbb \newif\iftx@vvarbb \newif\iftx@symbolsC
-\newif\iftx@gm \newif\iftx@bigdelims
+\newif\iftx@gm
+\newif\iftx@ebgm
+\newif\iftx@bigdelims
\newif\iftx@liby \newif\iftx@tma % use Times math accents
\tx@symbolsCtrue
\newif\iftx@altnu
@@ -73,6 +80,10 @@
\newif\iftx@ptm
\newif\iftx@nozchvw
\newif\iftx@stxtwo
+\newif\iftx@sbc
+%\newif\iftx@spc
+\newif\iftx@isenh % the math style is enhanced and can make use of new macros
+% Currently (2019-0921) only txmath, libertine and XCharter have been enhanced.
%\show\rmdefault
\edef\tx@rmdefault{\rmdefault}
\edef\tx@encdefault{\encodingdefault}
@@ -83,10 +94,95 @@
\@ifundefined{ver@tgtermes.sty}{}{\tx@hastmtrue}
\iftx@hastm\def\rmdefaultB{ntxtlf}\fi
%
-\newcommand\enablesbcorrection{\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax}}
-\newcommand\disablesbcorrection{\catcode`\_=8\relax}
-\DeclareOption{nosubscriptcorrection}{\disablesbcorrection}
-\DeclareOption{subscriptcorrection} {\enablesbcorrection}
+%\newcommand\enablesbcorrection{\tx@sbctrue\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax}}
+%\newcommand\disablesbcorrection{\tx@sbcfalse\catcode`\_=8\relax}
+%\newcommand\enablespcorrection{\tx@spctrue\AtBeginDocument{\mathcode`\^=\string"8000 \catcode`\^=12\relax}}
+%\newcommand\disablespcorrection{\tx@spcfalse\catcode`\^=7\relax}
+%\@onlypreamble\enablesbcorrection
+%\@onlypreamble\disablesbcorrection
+%\@onlypreamble\enablespcorrection
+%\@onlypreamble\disablespcorrection
+
+% Should test for which math italic font and customize these numbers.
+\def\tx@sb@dflt{% default subscript kerns, usually negative
+ \if\next f\mkern-3mu\else
+ \if\next j\mkern-3mu\else
+ \if\next p\mkern-\@ne mu\else
+ \if\next y\mkern-\@ne mu\else
+ \if\next A\mkern-\tw@ mu\else
+ \if\next B\mkern-\@ne mu\else
+ \if\next D\mkern-\@ne mu\else
+ \if\next H\mkern-\@ne mu\else
+ \if\next I\mkern-\@ne mu\else
+ \if\next K\mkern-\@ne mu\else
+ \if\next L\mkern-\@ne mu\else
+ \if\next M\mkern-\@ne mu\else
+ \if\next N\mkern-0.5mu\else
+ \if\next P\mkern-\@ne mu\else
+ \if\next X\mkern-\@ne mu\else
+ \ifx\next \rho\mkern-1.5mu\else
+ \ifx\next \mu\mkern-1 mu\else
+ \fi
+ \fi
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi}
+%\def\tx@sp@dflt{% default superscript kerns, usually positive
+% \if\tx@next f\mkern\tw@ mu\else
+% \if\tx@next j\mkern\tw@ mu\else
+% \if\tx@next p\mkern\@ne mu\else
+% \if\tx@next y\mkern\tw@ mu\else
+% \if\tx@next \rho\mkern\tw@ mu\else
+% \if\tx@next \mu\mkern\tw@ mu\else
+% \fi
+% \fi
+% \fi%
+% \fi%
+% \fi%
+% \fi}
+\newtoks\tx@tA
+\newtoks\tx@tB
+\newcommand*{\loadsubfile}[1]{\readsufile{#1}%creates toks tx@tA. tx@tB
+\tx@tA\expandafter{\the\expandafter\tx@tA\the\tx@tB}
+\expandafter\def\expandafter\tx@sb\expandafter{\the\tx@tA}}
+
+%\def\tx@sb{\the\tx@tA \the\tx@tB}\enablesbcorrection}
+%\newcommand*{\loadsupfile}[1]{\readsufile{#1}%creates toks tx@tA. tx@tB
+%\def\tx@sp{\the\tx@tA \the\tx@tB}\enablespcorrection}
+\newread\tx@su
+
+\def\readsufile#1{%
+ \tx@tA={}
+ \tx@tB={}
+ \openin\tx@su=#1
+ \loop\unless\ifeof\tx@su
+ \read\tx@su to \tx@line
+ \if\tx@line\par\else
+ \expandafter\tx@addrec\tx@line
+ \fi
+ \repeat
+}
+\def\tx@addrec#1#2{%
+\ifiscseq{#1}{\tx@tA\expandafter{\the\tx@tA\ifx}}{\tx@tA\expandafter{\the\tx@tA\if}}
+\tx@tA\expandafter{\the\tx@tA\next #1\mkern #2 mu\else}
+\tx@tB\expandafter{\the\tx@tB\fi}}
+
+\DeclareOption{nosubscriptcorrection}{\tx@sbcfalse}
+\DeclareOption{subscriptcorrection}{\tx@sbctrue}
+%\DeclareOption{nosuperscriptcorrection}{\disablespcorrection}
+%\DeclareOption{superscriptcorrection} {\enablespcorrection}
\DeclareOption{timesmathacc}{\tx@tmatrue}
\DeclareOption{bigdelims}{\tx@bigdelimstrue}
\DeclareOption{varbb}{\tx@varbbtrue}
@@ -97,6 +193,7 @@
\DeclareOption{minion}{\tx@miniontrue\tx@ntxmathfalse\tx@otfalse}
\DeclareOption{cochineal}{\tx@cochtrue\tx@ntxmathfalse}
\DeclareOption{garamondx}{\tx@gmtrue\tx@ntxmathfalse\tx@otfalse}
+\DeclareOption{ebgaramond}{\tx@ebgmtrue\tx@ntxmathfalse\tx@otfalse}
\DeclareOption{baskerville}{\tx@batrue\tx@ntxmathfalse}
\DeclareOption{Baskerville}{\tx@batrue\tx@ntxmathfalse}
\DeclareOption{baskervillef}{\tx@batrue\tx@ntxmathfalse}
@@ -114,6 +211,7 @@
\DeclareOption{cmbraces}{\tx@bracestrue}
\DeclareOption{noamssymbols}{\tx@amsfalse}
\DeclareOption{amssymbols}{\tx@amstrue}
+\DeclareOption{uprightscript}{\tx@upscrtrue}
\DeclareOption{uprightGreek}{\tx@slantedGfalse}
\DeclareOption{slantedGreek}{\tx@slantedGtrue}
\DeclareOption{altnu}{\tx@altnutrue}
@@ -127,11 +225,31 @@
\DeclareOption{useBImacros}{\tx@BItrue}
\DeclareOption{noxchvw}{\tx@nozchvwtrue}
\DeclareOption{noXchvw}{\tx@nozchvwtrue}
-\DeclareOption{stix2}{\tx@stxtwotrue} % added in 1.55
-\DeclareOption{stickstoo}{\tx@stxtwotrue} % added in 1.55
+\DeclareOption{stix2}{\tx@stxtwotrue\tx@ntxmathfalse} % added in 1.55
+\DeclareOption{stickstoo}{\tx@stxtwotrue\tx@ntxmathfalse} % added in 1.55
\ExecuteOptions{%
amssymbols,uprightGreek,nosubscriptcorrection}
-\ProcessOptions*
+\ProcessOptions*
+% Check whether math face is enhanced
+\iftx@ntxmath\tx@isenhtrue\else
+ \iftx@libertine\tx@isenhtrue\else
+ \iftx@ch\tx@isenhtrue\else
+ \fi
+ \fi
+\fi
+\AtEndPreamble{%
+%\traceon
+\iftx@sbc
+ \expandafter\ifx\csname xyversion\endcsname\relax \else
+ \PackageError{newtxmath}{xy package is not compatible with the subscriptcorrection macros}{Either remove xy or disable
+ subscriptcorrection by means of package option nosubscriptcorrection}
+ \fi
+ \IfFileExists{\tx@subs}{\loadsubfile{\tx@subs}}%
+ {\def\tx@sb{\tx@sb@dflt}\message{File \tx@subs\space not found. Using internal defaults for subscript correction.^^J}}
+\fi
+%\traceoff
+}
+
% stix2 forces timesmathacc and no optical sizes
\iftx@stxtwo\tx@tmatrue \tx@noopttrue\fi
% frenchmath implies uprightGreek
@@ -146,6 +264,7 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\iftx@ch\let\X@s@v@rg\@undefined\fi
\iftx@coch\let\X@s@v@rg\@undefined\fi
\iftx@gm\let\X@s@v@rg\@undefined\fi
+\iftx@ebgm\let\X@s@v@rg\@undefined\fi
\iftx@bv\let\X@s@v@rg\@undefined\fi
\iftx@ba\let\X@s@v@rg\@undefined\fi
\iftx@stxtwo\let\X@s@v@rg\@undefined\fi
@@ -187,59 +306,73 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\SetMathAlphabet{\mathtt}{bold}{\encodingdefault}{\ttdefault}{b}{n}
% change default def of \hbar in case noamssymbols
-\ifx\tx@encdefault\t@one
- \renewcommand{\hbar}{\raisebox{-.13ex}{\mbox{$\mathchar'11$}}\mkern-8mu h}%
-\else
- \renewcommand{\hbar}{\raisebox{-.13ex}{\mbox{$\mathchar'26$}}\mkern-8mu h}%
-\fi
+%\iftx@ams
+%\else
+% \ifx\tx@encdefault\t@one
+% \renewcommand{\hbar}{\raisebox{-.13ex}{\mbox{$\mathchar'11$}} \mkern-8mu h}%
+% \else
+% \renewcommand{\hbar}{\raisebox{-.13ex}{\mbox{$\mathchar'26$}}\mkern-8mu h}%
+% \fi%
+%\fi
+
%%%%%%%%%%%%%%%
% Math Italic %
%%%%%%%%%%%%%%%
\iftx@libertine
+ \def\tx@subs{libertine.subs}
\DeclareSymbolFont{letters}{OML}{nxlmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{nxlmi}{b}{it}
\DeclareFontSubstitution{OML}{nxlmi}{m}{it}
\else
\iftx@minion
+ \def\tx@subs{minion.subs}
\DeclareSymbolFont{letters}{OML}{zmnmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{zmnmi}{b}{it}
\DeclareFontSubstitution{OML}{zmnmi}{m}{it}
\else
\iftx@gm
+ \def\tx@subs{garamond.subs}
\DeclareSymbolFont{letters}{OML}{zgmmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{zgmmi}{b}{it}
\DeclareFontSubstitution{OML}{zgmmi}{m}{it}
\else
\iftx@bv
- \DeclareSymbolFont{letters}{OML}{zbvmi}{m}{it}
+ \def\tx@subs{baskervald.subs}
+ \DeclareSymbolFont{letters}{OML}{zbvmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{zbvmi}{b}{it}
\DeclareFontSubstitution{OML}{zbvmi}{m}{it}
\else
\iftx@ut
+ \def\tx@subs{utopia.subs}
\DeclareSymbolFont{letters}{OML}{zutmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{zutmi}{b}{it}
\DeclareFontSubstitution{OML}{zutmi}{m}{it}
\else
\iftx@ch
+ \def\tx@subs{xcharter.subs}
\DeclareSymbolFont{letters}{OML}{zchmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{zchmi}{b}{it}
\DeclareFontSubstitution{OML}{zchmi}{m}{it}
\else
\iftx@coch
+ \def\tx@subs{cochineal.subs}
\DeclareSymbolFont{letters}{OML}{zcochmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{zcochmi}{b}{it}
\DeclareFontSubstitution{OML}{zcochmi}{m}{it}
\else
\iftx@ba
+ \def\tx@subs{baskervillef.subs}
\DeclareSymbolFont{letters}{OML}{zbami}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{zbami}{b}{it}
\DeclareFontSubstitution{OML}{zbami}{m}{it}
\else
\iftx@stxtwo
+ \def\tx@subs{stickstoo.subs}
\DeclareSymbolFont{letters}{OML}{ntxstx2mi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{ntxstx2mi}{b}{it}
\DeclareFontSubstitution{OML}{ntxstx2mi}{m}{it}
\else
+ \def\tx@subs{newtx.subs}
\DeclareSymbolFont{letters}{OML}{ntxmi}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{ntxmi}{b}{it}
\DeclareFontSubstitution{OML}{ntxmi}{m}{it}
@@ -252,6 +385,18 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\fi
\fi
\fi
+
+\iftx@isenh
+\iftx@upscr
+ \DeclareRobustCommand{\mathscr}[1]{\ntx@alfa{#1}{196}{222}{248}{249}{}{letters}}
+ \DeclareMathSymbol{\imathscr}{\mathord}{letters}{248}
+ \DeclareMathSymbol{\jmathscr}{\mathord}{letters}{249}
+\else
+ \DeclareRobustCommand{\mathscr}[1]{\ntx@alfa{#1}{142}{168}{194}{195}{}{letters}}
+ \DeclareMathSymbol{\imathscr}{\mathord}{letters}{194}
+ \DeclareMathSymbol{\jmathscr}{\mathord}{letters}{195}
+\fi
+\fi
%%%%%%%%%%%%%%%%%
% Math Italic A %
%%%%%%%%%%%%%%%%%
@@ -380,63 +525,6 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\DeclareMathSymbol{#1}{#2}{#3}{#4}
\advance #4 by1}
-\DeclareRobustCommand{\BI@}[1]{%
-\begingroup\text{\mathversion{bold}$#1$}\endgroup}
-\iftx@BI
-\DeclareRobustCommand{\BIA}{\BI@{A}}
-\DeclareRobustCommand{\BIB}{\BI@{B}}
-\DeclareRobustCommand{\BIC}{\BI@{C}}
-\DeclareRobustCommand{\BID}{\BI@{D}}
-\DeclareRobustCommand{\BIE}{\BI@{E}}
-\DeclareRobustCommand{\BIF}{\BI@{F}}
-\DeclareRobustCommand{\BIG}{\BI@{G}}
-\DeclareRobustCommand{\BIH}{\BI@{H}}
-\DeclareRobustCommand{\BII}{\BI@{I}}
-\DeclareRobustCommand{\BIJ}{\BI@{J}}
-\DeclareRobustCommand{\BIK}{\BI@{K}}
-\DeclareRobustCommand{\BIL}{\BI@{L}}
-\DeclareRobustCommand{\BIM}{\BI@{M}}
-\DeclareRobustCommand{\BIN}{\BI@{N}}
-\DeclareRobustCommand{\BIO}{\BI@{O}}
-\DeclareRobustCommand{\BIP}{\BI@{P}}
-\DeclareRobustCommand{\BIQ}{\BI@{Q}}
-\DeclareRobustCommand{\BIR}{\BI@{R}}
-\DeclareRobustCommand{\BIS}{\BI@{S}}
-\DeclareRobustCommand{\BIT}{\BI@{T}}
-\DeclareRobustCommand{\BIU}{\BI@{U}}
-\DeclareRobustCommand{\BIV}{\BI@{V}}
-\DeclareRobustCommand{\BIW}{\BI@{W}}
-\DeclareRobustCommand{\BIX}{\BI@{X}}
-\DeclareRobustCommand{\BIY}{\BI@{Y}}
-\DeclareRobustCommand{\BIZ}{\BI@{Z}}
-\DeclareRobustCommand{\BIa}{\BI@{a}}
-\DeclareRobustCommand{\BIb}{\BI@{b}}
-\DeclareRobustCommand{\BIc}{\BI@{c}}
-\DeclareRobustCommand{\BId}{\BI@{d}}
-\DeclareRobustCommand{\BIe}{\BI@{e}}
-\DeclareRobustCommand{\BIf}{\BI@{f}}
-\DeclareRobustCommand{\BIg}{\BI@{g}}
-\DeclareRobustCommand{\BIh}{\BI@{h}}
-\DeclareRobustCommand{\BIi}{\BI@{i}}
-\DeclareRobustCommand{\BIj}{\BI@{j}}
-\DeclareRobustCommand{\BIk}{\BI@{k}}
-\DeclareRobustCommand{\BIl}{\BI@{l}}
-\DeclareRobustCommand{\BIm}{\BI@{m}}
-\DeclareRobustCommand{\BIn}{\BI@{n}}
-\DeclareRobustCommand{\BIo}{\BI@{o}}
-\DeclareRobustCommand{\BIp}{\BI@{p}}
-\DeclareRobustCommand{\BIq}{\BI@{q}}
-\DeclareRobustCommand{\BIr}{\BI@{r}}
-\DeclareRobustCommand{\BIs}{\BI@{s}}
-\DeclareRobustCommand{\BIt}{\BI@{t}}
-\DeclareRobustCommand{\BIu}{\BI@{u}}
-\DeclareRobustCommand{\BIv}{\BI@{v}}
-\DeclareRobustCommand{\BIw}{\BI@{w}}
-\DeclareRobustCommand{\BIx}{\BI@{x}}
-\DeclareRobustCommand{\BIy}{\BI@{y}}
-\DeclareRobustCommand{\BIz}{\BI@{z}}
-\fi% end \iftx@BI
-
\def\tx@isdigit#1{% #1 should be a single character
\tx@Isdigit=\z@ %
\tx@cntz=\number`#1\relax%
@@ -467,48 +555,120 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\fi
\fi
}
-
%\def\tx@XXX#1#2\@nil{% #1=first character, #2=rest of string
%\tx@isdigit{#1}%
%\ifnum\tx@Isdigit>\z@ $#1$\else#1\fi%
%\if\relax\detokenize{#2}\relax \else
%\edef\tx@XXXcmd{\noexpand\tx@XXX #2\noexpand\@nil}\tx@XXXcmd \fi}
%
+\newcommand{\tx@unbrace}[1]{#1}
+\def\tx@XXX#1#2\@nil{#1}% #1=first character, #2=rest of string
+%\tx@isdigit{#1}%
+%\ifnum\tx@Isdigit>\z@ $#1$\else#1\fi%
+%\if\relax\detokenize{#2}\relax \else
+%\edef\tx@XXXcmd{\noexpand\tx@XXX #2\noexpand\@nil}\tx@XXXcmd \fi}
+
%\def\equalht#1{\tx@XXX #1\@nil}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Subscript correction code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begingroup
+\newtoks\tx@sbptoks
+% next 2 macros borrowed from TeX by Topic
+\def\tx@Pop#1(into:)#2{%
+ \edef\tx@act{\noexpand\tx@SplitOff\the#1%
+ (tx@head:)\noexpand#2(tx@tail:)\noexpand#1}%
+ \tx@act}
+\def\tx@SplitOff#1#2(tx@head:)#3(tx@tail:)#4{\def#3{\noexpand #1}#4={#2}}
+
+\iftx@sbc
+\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax} \begingroup
\catcode`\_=13
- \gdef_{\futurelet\next\s@@b}
+ \gdef_{\expandafter\s@@b@}
\endgroup
-\def\s@@b{\ifcat\relax\noexpand\next\expandafter\sb\else
- \expandafter\s@@b@\fi}
-\def\s@@b@#1{\sb{\futurelet\next\sb@#1}}
-\def\sb@{%
- \ifx\next\space@\def\next@. {\futurelet\next\sb@}\else
- \def\next@.{%
- \ifx\next f\mkern-\tw@ mu\else
- \ifx\next j\mkern-\tw@ mu\else
- \ifx\next p\mkern-\@ne mu\else
- %\ifx\next t\mkern\@ne mu\else
- \ifx\next y\mkern-\@ne mu\else
- \ifx\next A\mkern-\tw@ mu\else
- \ifx\next B\mkern-\@ne mu\else
- \ifx\next D\mkern-\@ne mu\else
- \ifx\next H\mkern-\@ne mu\else
- \ifx\next I\mkern-\@ne mu\else
- \ifx\next K\mkern-\@ne mu\else
- \ifx\next L\mkern-\@ne mu\else
- \ifx\next M\mkern-\@ne mu\else
- \ifx\next N\mkern-0.5mu\else
- \ifx\next P\mkern-\@ne mu\else
- \ifx\next X\mkern-\@ne mu\else
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}%
- \fi
- \next@.}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\def\s@@b{\expandafter\s@@b@}
+\def\s@@b@#1{\def\tx@next@{#1}%
+\tx@sbptoks={#1}%
+\tx@Pop\tx@sbptoks(into:)\next% first token is \next
+\sb{\tx@sb \tx@next@}} % \tx@sb provides mkern to insert before first tok
+\fi
+%%%%%% Code that seems to work well except for unprotected spacing commands
+%\def\space@.{\futurelet\space@\relax}
+%\space@. %
+%
+%\iftx@sbc
+% \begingroup
+% \catcode`\_=13
+% \gdef_{\futurelet\tx@next\s@@b}
+%\endgroup
+%\def\s@@b{\expandafter\s@@b@}
+%\def\s@@b@#1{\sb{\futurelet\tx@next\sb@#1}}
+%\def\sb@{%
+% \ifx\tx@next\space@\def\tx@next@{\futurelet\tx@next\sb@}\else
+% \def\tx@next@{\tx@sb}
+% \fi
+% \tx@next@}
+%\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax}
+%\fi % iftx@sbc
+
+%%%%%Code that works except for unprotected spacing commands, like \,
+%\iftx@sbc
+%\begingroup
+% \catcode`\_=13
+% \gdef_{\futurelet\next\s@@b}
+%\endgroup
+%\def\s@@b{\expandafter\s@@b@}
+%\def\s@@b@#1{\sb{\futurelet\next\sb@#1}}
+%\def\sb@{%
+% \ifx\next\space@\def\next@. {\futurelet\next\sb@}\else%
+% \def\next@.{\tx@sb@dflt}\fi\next@.}
+%\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax}
+%\fi
+%%%% End working code
+
+%
+%\def\s@@b{\expandafter\s@@b@}
+%\def\s@@b@#1{\def\tx@next@{#1}%
+%\tx@sbptoks={\tx@next@}%
+%\tx@Pop\tx@sbptoks(into:)\tx@next% first token
+%\show\tx@next
+%\sb{\tx@sb \tx@next@}}
+%%
+%\iftx@sbc
+%\begingroup
+% \catcode`\_=13 % active
+% \gdef_{\s@@b}
+%\endgroup
+%\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax}
+%\fi
+%%\fi
+%\def\s@@b{\iftx@sbc\expandafter\s@@b@\else\expandafter\sb\fi}
+%\def\s@@b@#1{\def\next@@@@{#1}%
+%\expandafter\def\expandafter\next@\expandafter{\detokenize{#1}}%
+%\if\relax\next@\def\next{}
+%\else
+%\edef\tx@XXXcmd{\noexpand\tx@XXX \next@\noexpand\@nil}
+%\edef\next{\tx@XXXcmd}% first character
+%\fi%
+%\sb{\tx@sb \next@@@@}}
+%\def\s@@b{\iftx@sbc\expandafter\s@@b@\else\expandafter\sb\fi}
+%\def\tx@sb{\tx@sb@dflt}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Superscript correction code
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begingroup
+% \catcode`\^=13 % active
+% \gdef^{\s@@p}
+%\endgroup
+%\def\s@@p{\iftx@spc\expandafter\s@@p@\else\expandafter\sp\fi}
+%\def\s@@p@#1{\def\tx@next@{#1}%
+%\tx@sbptoks={#1}%
+%\tx@Pop\tx@sbptoks(into:)\tx@next% first token
+%\sp{\tx@sp \tx@next@}}
+
+%%%%%%%%%%%%%%
% Math Symbols & Notations Definitions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -574,15 +734,21 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\let\|=\Vert
\DeclareMathDelimiter{\updownarrow}{\mathrel}{symbols}{108}{largesymbols}{63}
\DeclareMathDelimiter{\Updownarrow}{\mathrel}{symbols}{109}{largesymbols}{119}
- \DeclareMathDelimiter{\llbracket}{\mathopen}{lettersA}{251}{largesymbolsTXA}{18}
+ \DeclareMathDelimiter{\llbracket}{\mathopen}{symbols}{201}{largesymbolsTXA}{18}
\let\lBrack=\llbracket
- \DeclareMathDelimiter{\rrbracket}{\mathclose}{lettersA}{252}{largesymbolsTXA}{19}
+ \DeclareMathDelimiter{\rrbracket}{\mathclose}{symbols}{202}{largesymbolsTXA}{19}
\let\rBrack=\rrbracket
\DeclareMathDelimiter{\lvert} {\mathopen} {symbols}{106}{largesymbols}{12}
\DeclareMathDelimiter{\rvert} {\mathclose} {symbols}{106}{largesymbols}{12}
\DeclareMathDelimiter{\lVert} {\mathopen} {symbols}{107}{largesymbols}{13}
\DeclareMathDelimiter{\rVert} {\mathclose} {symbols}{107}{largesymbols}{13}
+\DeclareMathDelimiter{\smlbrace}{\mathopen}{lettersA}{62}{largesymbols}{8}
+\DeclareMathDelimiter{\smrbrace}{\mathclose}{lettersA}{63}{largesymbols}{9}
+
+\re@DeclareMathSymbol{\Perp}{\mathrel}{symbols}{205} % was symbolsC
+\re@DeclareMathSymbol{\nPerp}{\mathrel}{symbols}{206} % was symbolsC
+
%\else
% \iftx@braces
% \DeclareMathDelimiter{\lbrace}{\mathopen}{lettersA}{62}{largesymbols}{142}
@@ -599,12 +765,26 @@ amssymbols,uprightGreek,nosubscriptcorrection}
% \fi
%\fi
%\DeclareMathSymbol{+}{\mathbin}{operators}{43}
-\DeclareMathSymbol{+}{\mathbin}{lettersA}{253}
+\DeclareMathSymbol{+}{\mathbin}{symbols}{207}
%\DeclareMathDelimiter{/}{\mathord}{operators}{47}{largesymbols}{14}
%\DeclareMathSymbol{:}{\mathrel}{operators}{58}
%\DeclareMathSymbol{\colon}{\mathpunct}{operators}{58}
%\DeclareMathSymbol{;}{\mathpunct}{operators}{59}
\DeclareMathSymbol{=}{\mathrel}{lettersA}{61}
+\iftx@isenh
+ \re@DeclareMathSymbol{\hslash}{\mathord}{lettersA}{91}
+ \re@DeclareMathSymbol{\hbar}{\mathord}{lettersA}{92}
+ \re@DeclareMathSymbol{\lambdabar}{\mathord}{lettersA}{93}
+ \re@DeclareMathSymbol{\lambdaslash}{\mathord}{lettersA}{251}
+ \DeclareMathSymbol{\Zbar}{\mathord}{lettersA}{94}
+ \DeclareMathSymbol{\Angstrom}{\mathord}{lettersA}{95}
+ \DeclareMathSymbol{\Euler}{\mathord}{lettersA}{96}
+\else
+ \re@DeclareMathSymbol{\hslash}{\mathord}{AMSm}{125}
+ \re@DeclareMathSymbol{\hbar}{\mathord}{AMSm}{126}
+ \re@DeclareMathSymbol{\lambdaslash}{\mathord}{symbolsC}{110}
+ \re@DeclareMathSymbol{\lambdabar}{\mathord}{symbolsC}{111}
+\fi
%\DeclareMathSymbol{?}{\mathclose}{operators}{63}
%change the following two for better sizing
%\DeclareMathDelimiter{[}{\mathopen}{operators}{91}{largesymbols}{2}
@@ -612,21 +792,21 @@ amssymbols,uprightGreek,nosubscriptcorrection}
%\DeclareMathAccent{\hat}{\mathalpha}{operators}{94}
%\DeclareMathAccent{\tilde}{\mathalpha}{operators}{126}
\DeclareMathSymbol{\transp}{\mathord}{symbols}{203}
-\re@DeclareMathAccent{\dot}{\mathalpha}{symbols}{219}
-\re@DeclareMathAccent{\ddot}{\mathalpha}{symbols}{220}
-\re@DeclareMathAccent{\dddot}{\mathord}{symbols}{221}
-\re@DeclareMathAccent{\ddddot}{\mathord}{symbols}{222}
+\DeclareMathSymbol{\hermtransp}{\mathord}{symbols}{204}
+ \let\htransp=\hermtransp
+\re@DeclareMathAccent{\dot}{\mathalpha}{symbols}{164}
+\re@DeclareMathAccent{\ddot}{\mathalpha}{symbols}{165}
+\re@DeclareMathAccent{\dddot}{\mathord}{symbols}{168}
+\re@DeclareMathAccent{\ddddot}{\mathord}{symbols}{200}
\iftx@tma
- \re@DeclareMathAccent{\grave}{\mathord}{lettersA}{254}
- \re@DeclareMathAccent{\acute}{\mathord}{lettersA}{255}
- \re@DeclareMathAccent{\check}{\mathord}{lettersA}{186}
- \re@DeclareMathAccent{\breve}{\mathord}{lettersA}{187}
- \re@DeclareMathAccent{\bar}{\mathord}{lettersA}{221}
- \re@DeclareMathAccent{\mathring}{\mathord}{lettersA}{222}
- \re@DeclareMathAccent{\hat}{\mathord}{lettersA}{223}
-% \re@DeclareMathAccent{\dot}{\mathord}{lettersA}{224}
- \re@DeclareMathAccent{\tilde}{\mathord}{lettersA}{219}
-% \re@DeclareMathAccent{\ddot}{\mathord}{lettersA}{220}
+ \re@DeclareMathAccent{\grave}{\mathord}{symbols}{158}
+ \re@DeclareMathAccent{\acute}{\mathord}{symbols}{159}
+ \re@DeclareMathAccent{\hat}{\mathord}{symbols}{160}
+ \re@DeclareMathAccent{\tilde}{\mathord}{symbols}{161}
+ \re@DeclareMathAccent{\bar}{\mathord}{symbols}{162}
+ \re@DeclareMathAccent{\breve}{\mathord}{symbols}{163}
+ \re@DeclareMathAccent{\mathring}{\mathord}{symbols}{166}
+ \re@DeclareMathAccent{\check}{\mathord}{symbols}{167}
\else
\iftx@ot %no change needed if using OT1 for operators
\else
@@ -638,13 +818,10 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\re@DeclareMathAccent{\bar}{\mathalpha}{operators}{9}
\re@DeclareMathAccent{\mathring}{\mathalpha}{operators}{6}
\re@DeclareMathAccent{\hat}{\mathalpha}{operators}{2}
-% \re@DeclareMathAccent{\dot}{\mathalpha}{operators}{10}
\re@DeclareMathAccent{\tilde}{\mathalpha}{operators}{3}
-% \re@DeclareMathAccent{\ddot}{\mathalpha}{operators}{4}
\else\ifx\encodingdefault\ly@one
\re@DeclareMathAccent{\bar}{\mathalpha}{operators}{175}
\re@DeclareMathAccent{\hat}{\mathalpha}{operators}{94}
-% \re@DeclareMathAccent{\dot}{\mathalpha}{operators}{5}
\DeclareMathAccent{\tilde}{\mathalpha}{operators}{152}
\fi\fi\fi
\fi
@@ -835,12 +1012,33 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\DeclareMathSymbol{\grouprda}{\mathord}{largesymbolsTXA}{83}
\DeclareMathSymbol{\grouplua}{\mathord}{largesymbolsTXA}{84}
\DeclareMathSymbol{\grouprua}{\mathord}{largesymbolsTXA}{85}
+%\def\rVecmp@h{\mathrel{\mathpalette\mathsm@sh\rVec@h}}
+%\def\rVecmp@x{\mathrel{\mathpalette\mathsm@sh\rVec@x}}
% Override default definitions of \widehat and \widetilde
\xdef\widehat#1{\mathaccent"0\hexnumber@\symlargesymbols 62{#1}}
%\DeclareMathAccent{\widehat}{\mathord}{largesymbols}{98}
\xdef\widetilde#1{\mathaccent"0\hexnumber@\symlargesymbols 65{#1}}
%\re@DeclareMathAccent{\widetilde}{\mathord}{largesymbols}{101}
+%%%%%%% Begin txvec code 2019-07-31 (adaptive vec)
+\DeclareMathSymbol{\rVec@h}{\mathrel}{symbols}{198}% vector head
+\DeclareMathSymbol{\rVec@x}{\mathrel}{symbols}{199}% vector extension
+%% borrow interfacefrom esvect
+\def\vv{\@ifstar{\vvstar}{\txvec}}
+\def\vvstar#1#2{{\txvec{#1}}_{\mkern-1mu\relax#2}}
+%%
+\newcommand{\txvec}{\mathpalette{\overVec@\Vecfill@}}
+%
+\def\Vecfill@{\@rrowfill@\rVec@x\rVec@h}
+%
+\def\@rrowfill@#1#2#3{$\m@th\mkern2mu%
+\relax#3#1\mkern-1.5mu\cleaders\hbox{$#3\mkern-.4mu#1\mkern-.4mu$}\hfill\mkern-1.5mu#2$}
+%
+\def\overVec@#1#2#3{\mathop{\vbox{\ialign{##\crcr\noalign{\kern-.2ex}%
+#1#2\crcr\noalign{\kern\ntxmath@vecsep\nointerlineskip}% kern controls sep to arrow
+$\m@th\hfil #2#3\hfil$\crcr}}}}
+%%%%%%%% End txvec code
+
\def\overgroup#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern.4\p@}%
\downgroupfill\crcr\noalign{\kern1.5\p@\nointerlineskip}%
$\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
@@ -1325,7 +1523,7 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\eqsim}{\mathrel}{AMSm}{104}
\re@DeclareMathSymbol{\beth}{\mathord}{AMSm}{105}
\re@DeclareMathSymbol{\gimel}{\mathord}{AMSm}{106}
-\re@DeclareMathSymbol{\daleth}{\mathord}{AMSm}{107}
+\re@DeclareMathSymbol{\daleth}{\mathord}{AMSm}{124} % was 107
\re@DeclareMathSymbol{\lessdot}{\mathbin}{AMSm}{108}
\re@DeclareMathSymbol{\gtrdot}{\mathbin}{AMSm}{109}
\re@DeclareMathSymbol{\ltimes}{\mathbin}{AMSm}{110}
@@ -1342,9 +1540,9 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\curvearrowright}{\mathrel}{AMSm}{121}
\re@DeclareMathSymbol{\digamma}{\mathord}{AMSm}{122}
%\re@DeclareMathSymbol{\varkappa}{\mathord}{AMSm}{123}
-\re@DeclareMathSymbol{\Bbbk}{\mathord}{AMSm}{124}
-\re@DeclareMathSymbol{\hslash}{\mathord}{AMSm}{125}
-\re@DeclareMathSymbol{\hbar}{\mathord}{AMSm}{126}
+\re@DeclareMathSymbol{\Bbbk}{\mathord}{AMSm}{107} % was 124
+%\re@DeclareMathSymbol{\hslash}{\mathord}{AMSm}{125}
+%\re@DeclareMathSymbol{\hbar}{\mathord}{AMSm}{126}
\re@DeclareMathSymbol{\backepsilon}{\mathrel}{AMSm}{127}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1494,7 +1692,7 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\Swarrow}{\mathrel}{symbolsC}{119}
\re@DeclareMathSymbol{\Top}{\mathord}{symbolsC}{120}
\re@DeclareMathSymbol{\Bot}{\mathord}{symbolsC}{121}
-\re@DeclareMathSymbol{\Perp}{\mathrel}{symbolsC}{121}
+%\re@DeclareMathSymbol{\Perp}{\mathrel}{symbolsC}{121}
\re@DeclareMathSymbol\leadstoext{\mathrel}{symbolsC}{122}
\re@DeclareMathSymbol\leadsto{\mathrel}{symbolsC}{123}
\re@DeclareMathSymbol{\sqcupplus}{\mathbin}{symbolsC}{124}
@@ -1586,7 +1784,13 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathSymbol{\eqcolon}{\mathrel}{lettersA}{59}
\re@DeclareMathSymbol{\neq}{\mathrel}{lettersA}{60}
\let\ne=\neq
-
+%Additional imath and jmath
+\DeclareMathSymbol{\imathfrak}{\mathord}{lettersA}{123}
+\DeclareMathSymbol{\jmathfrak}{\mathord}{lettersA}{124}
+\DeclareMathSymbol{\imathbb}{\mathord}{lettersA}{125}
+\DeclareMathSymbol{\jmathbb}{\mathord}{lettersA}{126}
+\DeclareMathSymbol{\imathup}{\mathord}{lettersA}{188}
+\DeclareMathSymbol{\jmathup}{\mathord}{lettersA}{189}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Math Italic (ntxmi) Definition % letters
@@ -1678,15 +1882,15 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Math Italic A (ntxmia) Definition % lettersA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\iftx@minion
-% \re@DeclareMathSymbol{\varkappa}{\mathord}{AMSm}{123}
-% \re@DeclareMathSymbol{\varkappaup}{\mathord}{AMSm}{123}
-%\else
+\iftx@isenh
+ \re@DeclareMathSymbol{\varkappait}{\mathord}{letters}{129}
+ \re@DeclareMathSymbol{\varkappaup}{\mathord}{lettersA}{129}
+\else
\re@DeclareMathSymbol{\varkappait}{\mathord}{lettersA}{41}
\let\varkappa\varkappait
\re@DeclareMathSymbol{\varkappaup}{\mathord}{lettersA}{42}
-
-%\fi
+\fi
+ \let\varkappa\varkappait
% upright Greek
\re@DeclareMathSymbol{\Gammaup}{\mathalpha}{lettersA}{0}
\re@DeclareMathSymbol{\Deltaup}{\mathalpha}{lettersA}{1}
@@ -1832,10 +2036,18 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\DeclareMathSymbol{Y}{\mathalpha}{operators}{89}
\DeclareMathSymbol{Z}{\mathalpha}{operators}{90}
\fi
-\re@DeclareMathSymbol{\varg}{\mathord}{lettersA}{49}
-\re@DeclareMathSymbol{\vary}{\mathord}{lettersA}{50}
-\re@DeclareMathSymbol{\varv}{\mathord}{lettersA}{51}
-\re@DeclareMathSymbol{\varw}{\mathord}{lettersA}{52}
+\re@DeclareMathSymbol{\varg}{\mathord}{lettersA}{181} % was 49
+\re@DeclareMathSymbol{\vary}{\mathord}{lettersA}{182} % was 50
+\re@DeclareMathSymbol{\varv}{\mathord}{lettersA}{183} % was 51
+\re@DeclareMathSymbol{\varw}{\mathord}{lettersA}{184} % was 52
+%\DeclareMathSymbol{\imathfrak}{\mathord}{lettersA}{123}
+%\DeclareMathSymbol{\jmathfrak}{\mathord}{lettersA}{124}
+%\DeclareMathSymbol{\imathbb}{\mathord}{lettersA}{125}
+%\DeclareMathSymbol{\jmathbb}{\mathord}{lettersA}{126}
+%\DeclareMathSymbol{\imathup}{\mathord}{lettersA}{188}
+%\DeclareMathSymbol{\jmathup}{\mathord}{lettersA}{189}
+
+
\re@DeclareMathSymbol{\nexists}{\mathord}{symbols}{"9A}
\let\nexistsAlt=\nexists
%\re@DeclareMathSymbol{\exists}{\mathord}{lettersA}{92}
@@ -1912,11 +2124,11 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\re@DeclareMathAccent{\hat}{\mathord}{lettersA}{239}
\re@DeclareMathAccent{\tilde}{\mathord}{lettersA}{240}
\re@DeclareMathAccent{\bar}{\mathord}{lettersA}{241}
- \re@DeclareMathAccent{\breve}{\mathord}{lettersA}{242}
+ \re@DeclareMathAccent{\breve}{\mathord}{lettersA}{87} %{242}
\re@DeclareMathAccent{\dot}{\mathord}{lettersA}{243}
\re@DeclareMathAccent{\ddot}{\mathord}{lettersA}{244}
\re@DeclareMathAccent{\mathring}{\mathord}{lettersA}{245}
- \re@DeclareMathAccent{\check}{\mathord}{lettersA}{246}
+ \re@DeclareMathAccent{\check}{\mathord}{lettersA}{186} %{246}
\fi
%\def\ntx@UC{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}
@@ -1925,35 +2137,34 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
%\@for\ntx@x:=\ntx@UC\do{\edef\ntx@tmp{\edef\csname
-\DeclareMathSymbol{\m@thbbch@rA}{\mathord}{lettersA}{129}
-\DeclareMathSymbol{\m@thbbch@rA}{\mathord}{lettersA}{129}
-\DeclareMathSymbol{\m@thbbch@rB}{\mathord}{lettersA}{130}
-\DeclareMathSymbol{\m@thbbch@rC}{\mathord}{lettersA}{131}
-\DeclareMathSymbol{\m@thbbch@rD}{\mathord}{lettersA}{132}
-\DeclareMathSymbol{\m@thbbch@rE}{\mathord}{lettersA}{133}
-\DeclareMathSymbol{\m@thbbch@rF}{\mathord}{lettersA}{134}
-\DeclareMathSymbol{\m@thbbch@rG}{\mathord}{lettersA}{135}
-\DeclareMathSymbol{\m@thbbch@rH}{\mathord}{lettersA}{136}
-\DeclareMathSymbol{\m@thbbch@rI}{\mathord}{lettersA}{137}
-\DeclareMathSymbol{\m@thbbch@rJ}{\mathord}{lettersA}{138}
-\DeclareMathSymbol{\m@thbbch@rK}{\mathord}{lettersA}{139}
-\DeclareMathSymbol{\m@thbbch@rL}{\mathord}{lettersA}{140}
-\DeclareMathSymbol{\m@thbbch@rM}{\mathord}{lettersA}{141}
-\DeclareMathSymbol{\m@thbbch@rN}{\mathord}{lettersA}{142}
-\DeclareMathSymbol{\m@thbbch@rO}{\mathord}{lettersA}{143}
-\DeclareMathSymbol{\m@thbbch@rP}{\mathord}{lettersA}{144}
-\DeclareMathSymbol{\m@thbbch@rQ}{\mathord}{lettersA}{145}
-\DeclareMathSymbol{\m@thbbch@rR}{\mathord}{lettersA}{146}
-\DeclareMathSymbol{\m@thbbch@rS}{\mathord}{lettersA}{147}
-\DeclareMathSymbol{\m@thbbch@rT}{\mathord}{lettersA}{148}
-\DeclareMathSymbol{\m@thbbch@rU}{\mathord}{lettersA}{149}
-\DeclareMathSymbol{\m@thbbch@rV}{\mathord}{lettersA}{150}
-\DeclareMathSymbol{\m@thbbch@rW}{\mathord}{lettersA}{151}
-\DeclareMathSymbol{\m@thbbch@rX}{\mathord}{lettersA}{152}
-\DeclareMathSymbol{\m@thbbch@rY}{\mathord}{lettersA}{153}
-\DeclareMathSymbol{\m@thbbch@rZ}{\mathord}{lettersA}{154}
-
-\DeclareMathSymbol{\m@thbbch@rk}{\mathord}{lettersA}{169}
+\DeclareMathSymbol{\m@thbbch@rA}{\mathord}{lettersA}{132}
+\DeclareMathSymbol{\m@thbbch@rB}{\mathord}{lettersA}{133}
+\DeclareMathSymbol{\m@thbbch@rC}{\mathord}{lettersA}{134}
+\DeclareMathSymbol{\m@thbbch@rD}{\mathord}{lettersA}{135}
+\DeclareMathSymbol{\m@thbbch@rE}{\mathord}{lettersA}{136}
+\DeclareMathSymbol{\m@thbbch@rF}{\mathord}{lettersA}{137}
+\DeclareMathSymbol{\m@thbbch@rG}{\mathord}{lettersA}{138}
+\DeclareMathSymbol{\m@thbbch@rH}{\mathord}{lettersA}{139}
+\DeclareMathSymbol{\m@thbbch@rI}{\mathord}{lettersA}{140}
+\DeclareMathSymbol{\m@thbbch@rJ}{\mathord}{lettersA}{141}
+\DeclareMathSymbol{\m@thbbch@rK}{\mathord}{lettersA}{142}
+\DeclareMathSymbol{\m@thbbch@rL}{\mathord}{lettersA}{143}
+\DeclareMathSymbol{\m@thbbch@rM}{\mathord}{lettersA}{144}
+\DeclareMathSymbol{\m@thbbch@rN}{\mathord}{lettersA}{145}
+\DeclareMathSymbol{\m@thbbch@rO}{\mathord}{lettersA}{146}
+\DeclareMathSymbol{\m@thbbch@rP}{\mathord}{lettersA}{147}
+\DeclareMathSymbol{\m@thbbch@rQ}{\mathord}{lettersA}{148}
+\DeclareMathSymbol{\m@thbbch@rR}{\mathord}{lettersA}{149}
+\DeclareMathSymbol{\m@thbbch@rS}{\mathord}{lettersA}{150}
+\DeclareMathSymbol{\m@thbbch@rT}{\mathord}{lettersA}{151}
+\DeclareMathSymbol{\m@thbbch@rU}{\mathord}{lettersA}{152}
+\DeclareMathSymbol{\m@thbbch@rV}{\mathord}{lettersA}{153}
+\DeclareMathSymbol{\m@thbbch@rW}{\mathord}{lettersA}{154}
+\DeclareMathSymbol{\m@thbbch@rX}{\mathord}{lettersA}{155}
+\DeclareMathSymbol{\m@thbbch@rY}{\mathord}{lettersA}{156}
+\DeclareMathSymbol{\m@thbbch@rZ}{\mathord}{lettersA}{157}
+
+\DeclareMathSymbol{\m@thbbch@rk}{\mathord}{lettersA}{168}
% Original \varmathbb macro, slightly polished
\def\DoFutureLet{%
\def\@FutureLetDecide{%
@@ -2074,9 +2285,13 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\DeclareRobustCommand{\vvmathbb}[1]{\ntx@alfa{#1}{129}{155}{181}{182}{48}{lettersA}}
\DeclareRobustCommand{\vmathbb}[1]{\ntx@alfa{#1}{183}{209}{235}{236}{48}{lettersA}}
\else
- \DeclareRobustCommand{\vmathbb}[1]{\ntx@alfa{#1}{129}{159}{}{}{}{lettersA}}
- \DeclareRobustCommand{\vvmathbb}[1]{\ntx@alfa{#1}{193}{225}{}{}{176}{lettersA}}
- %\DeclareRobustCommand{\vvmathbbb}[1]{\ntx@alfa{#1}{193}{225}{}{}{48}{boldlettersA}}
+ \iftx@isenh
+ \DeclareRobustCommand{\vmathbb}[1]{\ntx@alfa{#1}{132}{158}{186}{187}{43}{lettersA}}
+ \DeclareRobustCommand{\vvmathbb}[1]{\ntx@alfa{#1}{193}{225}{186}{187}{43}{lettersA}}
+ \else % the old mia layout
+ \DeclareRobustCommand{\vmathbb}[1]{\ntx@alfa{#1}{129}{159}{}{}{176}{lettersA}}
+ \DeclareRobustCommand{\vvmathbb}[1]{\ntx@alfa{#1}{193}{225}{}{}{176}{lettersA}}
+ \fi
\fi
%%%%%%%%%%%
%End experimental code
@@ -2241,70 +2456,6 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\bracerd\braceld%
\mkern-1mu\cleaders\hbox{$\mkern-.5mu\br@cext\mkern-.5mu$}\hfill\mkern-1mu\braceru$}
-%\iftx@libertine%
-% \iftx@largelibfigs%
-% \DeclareMathSymbol{0}{\mathalpha}{lettersA}{155}
-% \DeclareMathSymbol{1}{\mathalpha}{lettersA}{156}
-% \DeclareMathSymbol{2}{\mathalpha}{lettersA}{157}
-% \DeclareMathSymbol{3}{\mathalpha}{lettersA}{158}
-% \DeclareMathSymbol{4}{\mathalpha}{lettersA}{159}
-% \DeclareMathSymbol{5}{\mathalpha}{lettersA}{160}
-% \DeclareMathSymbol{6}{\mathalpha}{lettersA}{161}
-% \DeclareMathSymbol{7}{\mathalpha}{lettersA}{162}
-% \DeclareMathSymbol{8}{\mathalpha}{lettersA}{163}
-% \DeclareMathSymbol{9}{\mathalpha}{lettersA}{164}
-% \else
-% \DeclareMathSymbol{0}{\mathalpha}{letters}{48}
-% \DeclareMathSymbol{1}{\mathalpha}{letters}{49}
-% \DeclareMathSymbol{2}{\mathalpha}{letters}{50}
-% \DeclareMathSymbol{3}{\mathalpha}{letters}{51}
-% \DeclareMathSymbol{4}{\mathalpha}{letters}{52}
-% \DeclareMathSymbol{5}{\mathalpha}{letters}{53}
-% \DeclareMathSymbol{6}{\mathalpha}{letters}{54}
-% \DeclareMathSymbol{7}{\mathalpha}{letters}{55}
-% \DeclareMathSymbol{8}{\mathalpha}{letters}{56}
-% \DeclareMathSymbol{9}{\mathalpha}{letters}{57}
-% \fi
-% \DeclareMathSymbol{\Libzero}{\mathord}{lettersA}{155}
-% \DeclareMathSymbol{\Libone}{\mathalpha}{lettersA}{156}
-% \DeclareMathSymbol{\Libtwo}{\mathalpha}{lettersA}{157}
-% \DeclareMathSymbol{\Libthree}{\mathalpha}{lettersA}{158}
-% \DeclareMathSymbol{\Libfour}{\mathalpha}{lettersA}{159}
-% \DeclareMathSymbol{\Libfive}{\mathalpha}{lettersA}{160}
-% \DeclareMathSymbol{\Libsix}{\mathalpha}{lettersA}{161}
-% \DeclareMathSymbol{\Libseven}{\mathalpha}{lettersA}{162}
-% \DeclareMathSymbol{\Libeight}{\mathalpha}{lettersA}{163}
-% \DeclareMathSymbol{\Libnine}{\mathalpha}{lettersA}{164}
-%%
-% \DeclareMathSymbol{\libzero}{\mathalpha}{letters}{48}
-% \DeclareMathSymbol{\libone}{\mathalpha}{letters}{49}
-% \DeclareMathSymbol{\libtwo}{\mathalpha}{letters}{50}
-% \DeclareMathSymbol{\libthree}{\mathalpha}{letters}{51}
-% \DeclareMathSymbol{\libfour}{\mathalpha}{letters}{52}
-% \DeclareMathSymbol{\libfive}{\mathalpha}{letters}{53}
-% \DeclareMathSymbol{\libsix}{\mathalpha}{letters}{54}
-% \DeclareMathSymbol{\libseven}{\mathalpha}{letters}{55}
-% \DeclareMathSymbol{\libeight}{\mathalpha}{letters}{56}
-% \DeclareMathSymbol{\libnine}{\mathalpha}{letters}{57}
-% \else
-% \iftx@gm
-% \else
-% \iftx@minion
-% \else % newtxtext
-%% \DeclareMathSymbol{0}{\mathalpha}{letters}{48}
-%% \DeclareMathSymbol{1}{\mathalpha}{letters}{49}
-%% \DeclareMathSymbol{2}{\mathalpha}{letters}{50}
-%% \DeclareMathSymbol{3}{\mathalpha}{letters}{51}
-%% \DeclareMathSymbol{4}{\mathalpha}{letters}{52}
-%% \DeclareMathSymbol{5}{\mathalpha}{letters}{53}
-%% \DeclareMathSymbol{6}{\mathalpha}{letters}{54}
-%% \DeclareMathSymbol{7}{\mathalpha}{letters}{55}
-%% \DeclareMathSymbol{8}{\mathalpha}{letters}{56}
-%% \DeclareMathSymbol{9}{\mathalpha}{letters}{57}
-% \fi
-% \fi
-% \fi
-%%\fi
% Changed again 20171121 to prevent possible damage due pandoc
%%% \not redefined:
@@ -2358,6 +2509,64 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
%\DeclareRobustCommand{\textsquare}{\begingroup \usefont{U}{ntxsya}{m}{n}\thr@@\endgroup}
%\DeclareRobustCommand{\openbox}{\begingroup \usefont{U}{ntxsya}{m}{n}\thr@@\endgroup}
+\DeclareRobustCommand{\BI@}[1]{%
+\begingroup\text{\mathversion{bold}$#1$}\endgroup}
+\iftx@BI
+\DeclareRobustCommand{\BIA}{\BI@{A}}
+\DeclareRobustCommand{\BIB}{\BI@{B}}
+\DeclareRobustCommand{\BIC}{\BI@{C}}
+\DeclareRobustCommand{\BID}{\BI@{D}}
+\DeclareRobustCommand{\BIE}{\BI@{E}}
+\DeclareRobustCommand{\BIF}{\BI@{F}}
+\DeclareRobustCommand{\BIG}{\BI@{G}}
+\DeclareRobustCommand{\BIH}{\BI@{H}}
+\DeclareRobustCommand{\BII}{\BI@{I}}
+\DeclareRobustCommand{\BIJ}{\BI@{J}}
+\DeclareRobustCommand{\BIK}{\BI@{K}}
+\DeclareRobustCommand{\BIL}{\BI@{L}}
+\DeclareRobustCommand{\BIM}{\BI@{M}}
+\DeclareRobustCommand{\BIN}{\BI@{N}}
+\DeclareRobustCommand{\BIO}{\BI@{O}}
+\DeclareRobustCommand{\BIP}{\BI@{P}}
+\DeclareRobustCommand{\BIQ}{\BI@{Q}}
+\DeclareRobustCommand{\BIR}{\BI@{R}}
+\DeclareRobustCommand{\BIS}{\BI@{S}}
+\DeclareRobustCommand{\BIT}{\BI@{T}}
+\DeclareRobustCommand{\BIU}{\BI@{U}}
+\DeclareRobustCommand{\BIV}{\BI@{V}}
+\DeclareRobustCommand{\BIW}{\BI@{W}}
+\DeclareRobustCommand{\BIX}{\BI@{X}}
+\DeclareRobustCommand{\BIY}{\BI@{Y}}
+\DeclareRobustCommand{\BIZ}{\BI@{Z}}
+\DeclareRobustCommand{\BIa}{\BI@{a}}
+\DeclareRobustCommand{\BIb}{\BI@{b}}
+\DeclareRobustCommand{\BIc}{\BI@{c}}
+\DeclareRobustCommand{\BId}{\BI@{d}}
+\DeclareRobustCommand{\BIe}{\BI@{e}}
+\DeclareRobustCommand{\BIf}{\BI@{f}}
+\DeclareRobustCommand{\BIg}{\BI@{g}}
+\DeclareRobustCommand{\BIh}{\BI@{h}}
+\DeclareRobustCommand{\BIi}{\BI@{i}}
+\DeclareRobustCommand{\BIj}{\BI@{j}}
+\DeclareRobustCommand{\BIk}{\BI@{k}}
+\DeclareRobustCommand{\BIl}{\BI@{l}}
+\DeclareRobustCommand{\BIm}{\BI@{m}}
+\DeclareRobustCommand{\BIn}{\BI@{n}}
+\DeclareRobustCommand{\BIo}{\BI@{o}}
+\DeclareRobustCommand{\BIp}{\BI@{p}}
+\DeclareRobustCommand{\BIq}{\BI@{q}}
+\DeclareRobustCommand{\BIr}{\BI@{r}}
+\DeclareRobustCommand{\BIs}{\BI@{s}}
+\DeclareRobustCommand{\BIt}{\BI@{t}}
+\DeclareRobustCommand{\BIu}{\BI@{u}}
+\DeclareRobustCommand{\BIv}{\BI@{v}}
+\DeclareRobustCommand{\BIw}{\BI@{w}}
+\DeclareRobustCommand{\BIx}{\BI@{x}}
+\DeclareRobustCommand{\BIy}{\BI@{y}}
+\DeclareRobustCommand{\BIz}{\BI@{z}}
+\fi% end \iftx@BI
+
+
\def\defaultscriptratio{.73} % default is .7
\def\defaultscriptscriptratio{.55} % default is .5
\DeclareMathSizes{5} {5.5} {5.5} {5.5}
@@ -2406,5 +2615,17 @@ $\hfil\displaystyle{#1}\hfil$\crcr%
\advance\count@\@ne
\repeat
\typeout{***}}
-
+%%%%%%% Additional pdf to unicode values not in Ross Moore's collection
+\pdfglyphtounicode{nPerp}{2AEB 2215}% .. ..
+\pdfglyphtounicode{periodcentered.B}{00B7}
+\pdfglyphtounicode{periodcentered.BB}{22C5}
+\pdfglyphtounicode{openbullet.S}{25CB}
+\pdfglyphtounicode{bullet.S}{25C5}
+\pdfglyphtounicode{bullet.SS}{2022}
+\pdfglyphtounicode{bullet.SSS}{2219}
+\pdfglyphtounicode{emptyset.alt1}{2300}
+\pdfglyphtounicode{emptyset.alt2}{2205}
+\pdfglyphtounicode{transpose}{1D40}
+\pdfglyphtounicode{hermitconj}{22B9}
+
\endinput
diff --git a/fonts/newtx/tfm/LibertineI-5nu.tfm b/fonts/newtx/tfm/LibertineI-5nu.tfm
index 002949df88..b4eefee0a0 100644
--- a/fonts/newtx/tfm/LibertineI-5nu.tfm
+++ b/fonts/newtx/tfm/LibertineI-5nu.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineMathBMI.tfm b/fonts/newtx/tfm/LibertineMathBMI.tfm
new file mode 100644
index 0000000000..2a4f23d783
--- /dev/null
+++ b/fonts/newtx/tfm/LibertineMathBMI.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineMathBMI5.tfm b/fonts/newtx/tfm/LibertineMathBMI5.tfm
new file mode 100644
index 0000000000..34edd72224
--- /dev/null
+++ b/fonts/newtx/tfm/LibertineMathBMI5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineMathBMI7.tfm b/fonts/newtx/tfm/LibertineMathBMI7.tfm
new file mode 100644
index 0000000000..b1d9ad6bd6
--- /dev/null
+++ b/fonts/newtx/tfm/LibertineMathBMI7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineMathBRM.tfm b/fonts/newtx/tfm/LibertineMathBRM.tfm
new file mode 100644
index 0000000000..acf7724853
--- /dev/null
+++ b/fonts/newtx/tfm/LibertineMathBRM.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineMathMI.tfm b/fonts/newtx/tfm/LibertineMathMI.tfm
new file mode 100644
index 0000000000..e75eec2873
--- /dev/null
+++ b/fonts/newtx/tfm/LibertineMathMI.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineMathMI5.tfm b/fonts/newtx/tfm/LibertineMathMI5.tfm
new file mode 100644
index 0000000000..34c67c9eee
--- /dev/null
+++ b/fonts/newtx/tfm/LibertineMathMI5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineMathMI7.tfm b/fonts/newtx/tfm/LibertineMathMI7.tfm
new file mode 100644
index 0000000000..d1b70fe768
--- /dev/null
+++ b/fonts/newtx/tfm/LibertineMathMI7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineMathRM.tfm b/fonts/newtx/tfm/LibertineMathRM.tfm
new file mode 100644
index 0000000000..15cd902f18
--- /dev/null
+++ b/fonts/newtx/tfm/LibertineMathRM.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/LibertineZI-5nu.tfm b/fonts/newtx/tfm/LibertineZI-5nu.tfm
index fea94d2e05..aad50a6610 100644
--- a/fonts/newtx/tfm/LibertineZI-5nu.tfm
+++ b/fonts/newtx/tfm/LibertineZI-5nu.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/NewTXBMI.tfm b/fonts/newtx/tfm/NewTXBMI.tfm
new file mode 100644
index 0000000000..4af0e10aeb
--- /dev/null
+++ b/fonts/newtx/tfm/NewTXBMI.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/NewTXBMI5.tfm b/fonts/newtx/tfm/NewTXBMI5.tfm
new file mode 100644
index 0000000000..42e2448845
--- /dev/null
+++ b/fonts/newtx/tfm/NewTXBMI5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/NewTXBMI7.tfm b/fonts/newtx/tfm/NewTXBMI7.tfm
new file mode 100644
index 0000000000..7c789cf282
--- /dev/null
+++ b/fonts/newtx/tfm/NewTXBMI7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/NewTXMI.tfm b/fonts/newtx/tfm/NewTXMI.tfm
new file mode 100644
index 0000000000..852fc94296
--- /dev/null
+++ b/fonts/newtx/tfm/NewTXMI.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/NewTXMI5.tfm b/fonts/newtx/tfm/NewTXMI5.tfm
new file mode 100644
index 0000000000..a94b5d6e6f
--- /dev/null
+++ b/fonts/newtx/tfm/NewTXMI5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/NewTXMI7.tfm b/fonts/newtx/tfm/NewTXMI7.tfm
new file mode 100644
index 0000000000..037c47fdf2
--- /dev/null
+++ b/fonts/newtx/tfm/NewTXMI7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbexx.tfm b/fonts/newtx/tfm/ntxbexx.tfm
index 1375900b43..75e709bd73 100644
--- a/fonts/newtx/tfm/ntxbexx.tfm
+++ b/fonts/newtx/tfm/ntxbexx.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi.tfm b/fonts/newtx/tfm/ntxbmi.tfm
index e28a12aa22..755e5c7f1b 100644
--- a/fonts/newtx/tfm/ntxbmi.tfm
+++ b/fonts/newtx/tfm/ntxbmi.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi0.tfm b/fonts/newtx/tfm/ntxbmi0.tfm
index 236d5497dc..b898160be2 100644
--- a/fonts/newtx/tfm/ntxbmi0.tfm
+++ b/fonts/newtx/tfm/ntxbmi0.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi05.tfm b/fonts/newtx/tfm/ntxbmi05.tfm
index ae439a4be3..d9ff9203fa 100644
--- a/fonts/newtx/tfm/ntxbmi05.tfm
+++ b/fonts/newtx/tfm/ntxbmi05.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi07.tfm b/fonts/newtx/tfm/ntxbmi07.tfm
index 56f6a54380..d2d5ec155a 100644
--- a/fonts/newtx/tfm/ntxbmi07.tfm
+++ b/fonts/newtx/tfm/ntxbmi07.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi1.tfm b/fonts/newtx/tfm/ntxbmi1.tfm
index dc07b356d0..0f181e8b46 100644
--- a/fonts/newtx/tfm/ntxbmi1.tfm
+++ b/fonts/newtx/tfm/ntxbmi1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi15.tfm b/fonts/newtx/tfm/ntxbmi15.tfm
index 98ff98a70f..0455b258e1 100644
--- a/fonts/newtx/tfm/ntxbmi15.tfm
+++ b/fonts/newtx/tfm/ntxbmi15.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi17.tfm b/fonts/newtx/tfm/ntxbmi17.tfm
index 96c2dd0c77..06fb22be02 100644
--- a/fonts/newtx/tfm/ntxbmi17.tfm
+++ b/fonts/newtx/tfm/ntxbmi17.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi5.tfm b/fonts/newtx/tfm/ntxbmi5.tfm
index 1c5c916da1..ec2ed0fe89 100644
--- a/fonts/newtx/tfm/ntxbmi5.tfm
+++ b/fonts/newtx/tfm/ntxbmi5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmi7.tfm b/fonts/newtx/tfm/ntxbmi7.tfm
index 65283aa24e..8619325a0a 100644
--- a/fonts/newtx/tfm/ntxbmi7.tfm
+++ b/fonts/newtx/tfm/ntxbmi7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbmia.tfm b/fonts/newtx/tfm/ntxbmia.tfm
index 890a5bccff..af49cc11d9 100644
--- a/fonts/newtx/tfm/ntxbmia.tfm
+++ b/fonts/newtx/tfm/ntxbmia.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbsy.tfm b/fonts/newtx/tfm/ntxbsy.tfm
index c738a22e51..9ccfbbb803 100644
--- a/fonts/newtx/tfm/ntxbsy.tfm
+++ b/fonts/newtx/tfm/ntxbsy.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbsy5.tfm b/fonts/newtx/tfm/ntxbsy5.tfm
index c738a22e51..5bfbae96da 100644
--- a/fonts/newtx/tfm/ntxbsy5.tfm
+++ b/fonts/newtx/tfm/ntxbsy5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbsy7.tfm b/fonts/newtx/tfm/ntxbsy7.tfm
index ce7f9d8d51..6f89bfd859 100644
--- a/fonts/newtx/tfm/ntxbsy7.tfm
+++ b/fonts/newtx/tfm/ntxbsy7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxbsym.tfm b/fonts/newtx/tfm/ntxbsym.tfm
index 04e98f13d8..4d14f5b67c 100644
--- a/fonts/newtx/tfm/ntxbsym.tfm
+++ b/fonts/newtx/tfm/ntxbsym.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxexx.tfm b/fonts/newtx/tfm/ntxexx.tfm
index 948f302e55..3aff61cdf6 100644
--- a/fonts/newtx/tfm/ntxexx.tfm
+++ b/fonts/newtx/tfm/ntxexx.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi.tfm b/fonts/newtx/tfm/ntxmi.tfm
index 120c0e4e12..d403d8b880 100644
--- a/fonts/newtx/tfm/ntxmi.tfm
+++ b/fonts/newtx/tfm/ntxmi.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi0.tfm b/fonts/newtx/tfm/ntxmi0.tfm
index 302b52e56d..9d96efbf9e 100644
--- a/fonts/newtx/tfm/ntxmi0.tfm
+++ b/fonts/newtx/tfm/ntxmi0.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi05.tfm b/fonts/newtx/tfm/ntxmi05.tfm
index 22ef5a5287..b585ab1c34 100644
--- a/fonts/newtx/tfm/ntxmi05.tfm
+++ b/fonts/newtx/tfm/ntxmi05.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi07.tfm b/fonts/newtx/tfm/ntxmi07.tfm
index a4e9051d1a..e6d93d9387 100644
--- a/fonts/newtx/tfm/ntxmi07.tfm
+++ b/fonts/newtx/tfm/ntxmi07.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi1.tfm b/fonts/newtx/tfm/ntxmi1.tfm
index 62dc5c0466..534125b869 100644
--- a/fonts/newtx/tfm/ntxmi1.tfm
+++ b/fonts/newtx/tfm/ntxmi1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi15.tfm b/fonts/newtx/tfm/ntxmi15.tfm
index a85ed27d21..61e32fbef6 100644
--- a/fonts/newtx/tfm/ntxmi15.tfm
+++ b/fonts/newtx/tfm/ntxmi15.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi17.tfm b/fonts/newtx/tfm/ntxmi17.tfm
index 4bc9e06937..a9da334269 100644
--- a/fonts/newtx/tfm/ntxmi17.tfm
+++ b/fonts/newtx/tfm/ntxmi17.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi5.tfm b/fonts/newtx/tfm/ntxmi5.tfm
index ff7759c66a..bf0917af08 100644
--- a/fonts/newtx/tfm/ntxmi5.tfm
+++ b/fonts/newtx/tfm/ntxmi5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi7.tfm b/fonts/newtx/tfm/ntxmi7.tfm
index 05a32f554b..580f88a9fe 100644
--- a/fonts/newtx/tfm/ntxmi7.tfm
+++ b/fonts/newtx/tfm/ntxmi7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmia.tfm b/fonts/newtx/tfm/ntxmia.tfm
index d9b4cd3b40..ef679b3337 100644
--- a/fonts/newtx/tfm/ntxmia.tfm
+++ b/fonts/newtx/tfm/ntxmia.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Bold-ly1.tfm b/fonts/newtx/tfm/ntxsups-Bold-ly1.tfm
index 5a761f0789..8a247bf187 100644
--- a/fonts/newtx/tfm/ntxsups-Bold-ly1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Bold-ly1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Bold-ot1.tfm b/fonts/newtx/tfm/ntxsups-Bold-ot1.tfm
index ec6013c84b..ed7f947953 100644
--- a/fonts/newtx/tfm/ntxsups-Bold-ot1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Bold-ot1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Bold-t1.tfm b/fonts/newtx/tfm/ntxsups-Bold-t1.tfm
index b8518761b9..d87ee465c0 100644
--- a/fonts/newtx/tfm/ntxsups-Bold-t1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Bold-t1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Bold.tfm b/fonts/newtx/tfm/ntxsups-Bold.tfm
deleted file mode 100644
index 55edb8b778..0000000000
--- a/fonts/newtx/tfm/ntxsups-Bold.tfm
+++ /dev/null
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-BoldItalic-ly1.tfm b/fonts/newtx/tfm/ntxsups-BoldItalic-ly1.tfm
index 8d5b991eee..fd46e05fb8 100644
--- a/fonts/newtx/tfm/ntxsups-BoldItalic-ly1.tfm
+++ b/fonts/newtx/tfm/ntxsups-BoldItalic-ly1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-BoldItalic-ot1.tfm b/fonts/newtx/tfm/ntxsups-BoldItalic-ot1.tfm
index 566c023fae..739144f72c 100644
--- a/fonts/newtx/tfm/ntxsups-BoldItalic-ot1.tfm
+++ b/fonts/newtx/tfm/ntxsups-BoldItalic-ot1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-BoldItalic-t1.tfm b/fonts/newtx/tfm/ntxsups-BoldItalic-t1.tfm
index 04324a208d..a6c1bd786d 100644
--- a/fonts/newtx/tfm/ntxsups-BoldItalic-t1.tfm
+++ b/fonts/newtx/tfm/ntxsups-BoldItalic-t1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-BoldItalic.tfm b/fonts/newtx/tfm/ntxsups-BoldItalic.tfm
deleted file mode 100644
index 9b91cacfe4..0000000000
--- a/fonts/newtx/tfm/ntxsups-BoldItalic.tfm
+++ /dev/null
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Italic-ly1.tfm b/fonts/newtx/tfm/ntxsups-Italic-ly1.tfm
index a23b5fa8a7..5770889066 100644
--- a/fonts/newtx/tfm/ntxsups-Italic-ly1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Italic-ly1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Italic-ot1.tfm b/fonts/newtx/tfm/ntxsups-Italic-ot1.tfm
index cd6cca964e..bbece5c4a0 100644
--- a/fonts/newtx/tfm/ntxsups-Italic-ot1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Italic-ot1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Italic-t1.tfm b/fonts/newtx/tfm/ntxsups-Italic-t1.tfm
index 87943168c7..76ce2f4b73 100644
--- a/fonts/newtx/tfm/ntxsups-Italic-t1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Italic-t1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Italic.tfm b/fonts/newtx/tfm/ntxsups-Italic.tfm
deleted file mode 100644
index 79f5ae8b64..0000000000
--- a/fonts/newtx/tfm/ntxsups-Italic.tfm
+++ /dev/null
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Regular-ly1.tfm b/fonts/newtx/tfm/ntxsups-Regular-ly1.tfm
index a0a34c7421..385d0ca73a 100644
--- a/fonts/newtx/tfm/ntxsups-Regular-ly1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Regular-ly1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Regular-ot1.tfm b/fonts/newtx/tfm/ntxsups-Regular-ot1.tfm
index 482b6db4cd..bc40e9f596 100644
--- a/fonts/newtx/tfm/ntxsups-Regular-ot1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Regular-ot1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Regular-t1.tfm b/fonts/newtx/tfm/ntxsups-Regular-t1.tfm
index 36d6e98830..e256a052b4 100644
--- a/fonts/newtx/tfm/ntxsups-Regular-t1.tfm
+++ b/fonts/newtx/tfm/ntxsups-Regular-t1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsups-Regular.tfm b/fonts/newtx/tfm/ntxsups-Regular.tfm
deleted file mode 100644
index 117ae70b25..0000000000
--- a/fonts/newtx/tfm/ntxsups-Regular.tfm
+++ /dev/null
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsy.tfm b/fonts/newtx/tfm/ntxsy.tfm
index 5e80ee734a..245e74db9d 100644
--- a/fonts/newtx/tfm/ntxsy.tfm
+++ b/fonts/newtx/tfm/ntxsy.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsy5.tfm b/fonts/newtx/tfm/ntxsy5.tfm
index 381ceb281d..4d49b73bb7 100644
--- a/fonts/newtx/tfm/ntxsy5.tfm
+++ b/fonts/newtx/tfm/ntxsy5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsy7.tfm b/fonts/newtx/tfm/ntxsy7.tfm
index 0cf04a2e04..8e4b32c91e 100644
--- a/fonts/newtx/tfm/ntxsy7.tfm
+++ b/fonts/newtx/tfm/ntxsy7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxsym.tfm b/fonts/newtx/tfm/ntxsym.tfm
index 55e5f00489..64964dd037 100644
--- a/fonts/newtx/tfm/ntxsym.tfm
+++ b/fonts/newtx/tfm/ntxsym.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi.tfm b/fonts/newtx/tfm/nxlbmi.tfm
index 1e7ca08f25..c124e0ed6d 100644
--- a/fonts/newtx/tfm/nxlbmi.tfm
+++ b/fonts/newtx/tfm/nxlbmi.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi0.tfm b/fonts/newtx/tfm/nxlbmi0.tfm
index 23be7cc4be..3533a36b66 100644
--- a/fonts/newtx/tfm/nxlbmi0.tfm
+++ b/fonts/newtx/tfm/nxlbmi0.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi01.tfm b/fonts/newtx/tfm/nxlbmi01.tfm
index fa3cfb6358..2e5d525343 100644
--- a/fonts/newtx/tfm/nxlbmi01.tfm
+++ b/fonts/newtx/tfm/nxlbmi01.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi015.tfm b/fonts/newtx/tfm/nxlbmi015.tfm
index e013cbd64f..da63e6d49f 100644
--- a/fonts/newtx/tfm/nxlbmi015.tfm
+++ b/fonts/newtx/tfm/nxlbmi015.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi017.tfm b/fonts/newtx/tfm/nxlbmi017.tfm
index de7550b35a..6a77f6c22d 100644
--- a/fonts/newtx/tfm/nxlbmi017.tfm
+++ b/fonts/newtx/tfm/nxlbmi017.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi02.tfm b/fonts/newtx/tfm/nxlbmi02.tfm
index eb889ee939..a5a1117d56 100644
--- a/fonts/newtx/tfm/nxlbmi02.tfm
+++ b/fonts/newtx/tfm/nxlbmi02.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi025.tfm b/fonts/newtx/tfm/nxlbmi025.tfm
index 28f4e05a37..ba56cc506e 100644
--- a/fonts/newtx/tfm/nxlbmi025.tfm
+++ b/fonts/newtx/tfm/nxlbmi025.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi027.tfm b/fonts/newtx/tfm/nxlbmi027.tfm
index 63350f8e56..dd0cb4cb48 100644
--- a/fonts/newtx/tfm/nxlbmi027.tfm
+++ b/fonts/newtx/tfm/nxlbmi027.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi03.tfm b/fonts/newtx/tfm/nxlbmi03.tfm
index dd915ca5d1..bcd190146e 100644
--- a/fonts/newtx/tfm/nxlbmi03.tfm
+++ b/fonts/newtx/tfm/nxlbmi03.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi035.tfm b/fonts/newtx/tfm/nxlbmi035.tfm
index 9797b44b27..3bb2b40413 100644
--- a/fonts/newtx/tfm/nxlbmi035.tfm
+++ b/fonts/newtx/tfm/nxlbmi035.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi037.tfm b/fonts/newtx/tfm/nxlbmi037.tfm
index b866248066..73135603e2 100644
--- a/fonts/newtx/tfm/nxlbmi037.tfm
+++ b/fonts/newtx/tfm/nxlbmi037.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi05.tfm b/fonts/newtx/tfm/nxlbmi05.tfm
index 93837dffc6..058629f93a 100644
--- a/fonts/newtx/tfm/nxlbmi05.tfm
+++ b/fonts/newtx/tfm/nxlbmi05.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi07.tfm b/fonts/newtx/tfm/nxlbmi07.tfm
index 55a92e5ae0..7541ff1269 100644
--- a/fonts/newtx/tfm/nxlbmi07.tfm
+++ b/fonts/newtx/tfm/nxlbmi07.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi1.tfm b/fonts/newtx/tfm/nxlbmi1.tfm
index 19a0cb8cfe..74fdddce5d 100644
--- a/fonts/newtx/tfm/nxlbmi1.tfm
+++ b/fonts/newtx/tfm/nxlbmi1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi15.tfm b/fonts/newtx/tfm/nxlbmi15.tfm
index c16a4028a9..f651d5ba22 100644
--- a/fonts/newtx/tfm/nxlbmi15.tfm
+++ b/fonts/newtx/tfm/nxlbmi15.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi17.tfm b/fonts/newtx/tfm/nxlbmi17.tfm
index 61873568a8..a750665831 100644
--- a/fonts/newtx/tfm/nxlbmi17.tfm
+++ b/fonts/newtx/tfm/nxlbmi17.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi2.tfm b/fonts/newtx/tfm/nxlbmi2.tfm
index 1b350ba9af..67a561ee74 100644
--- a/fonts/newtx/tfm/nxlbmi2.tfm
+++ b/fonts/newtx/tfm/nxlbmi2.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi25.tfm b/fonts/newtx/tfm/nxlbmi25.tfm
index d0d1785728..19ab42fe07 100644
--- a/fonts/newtx/tfm/nxlbmi25.tfm
+++ b/fonts/newtx/tfm/nxlbmi25.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi27.tfm b/fonts/newtx/tfm/nxlbmi27.tfm
index 3f4efd7e63..c61602b8ee 100644
--- a/fonts/newtx/tfm/nxlbmi27.tfm
+++ b/fonts/newtx/tfm/nxlbmi27.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi3.tfm b/fonts/newtx/tfm/nxlbmi3.tfm
index 3bbe7a6ea2..2427596a5b 100644
--- a/fonts/newtx/tfm/nxlbmi3.tfm
+++ b/fonts/newtx/tfm/nxlbmi3.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi35.tfm b/fonts/newtx/tfm/nxlbmi35.tfm
index 3cfe1423e9..19ab42fe07 100644
--- a/fonts/newtx/tfm/nxlbmi35.tfm
+++ b/fonts/newtx/tfm/nxlbmi35.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi37.tfm b/fonts/newtx/tfm/nxlbmi37.tfm
index 2e6d05d656..c61602b8ee 100644
--- a/fonts/newtx/tfm/nxlbmi37.tfm
+++ b/fonts/newtx/tfm/nxlbmi37.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi5.tfm b/fonts/newtx/tfm/nxlbmi5.tfm
index 7d4872d3e4..4af30e3877 100644
--- a/fonts/newtx/tfm/nxlbmi5.tfm
+++ b/fonts/newtx/tfm/nxlbmi5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmi7.tfm b/fonts/newtx/tfm/nxlbmi7.tfm
index 1b496ff46a..b8b6ebcf1e 100644
--- a/fonts/newtx/tfm/nxlbmi7.tfm
+++ b/fonts/newtx/tfm/nxlbmi7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlbmia.tfm b/fonts/newtx/tfm/nxlbmia.tfm
index 98d4fcae8c..04347d806e 100644
--- a/fonts/newtx/tfm/nxlbmia.tfm
+++ b/fonts/newtx/tfm/nxlbmia.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi.tfm b/fonts/newtx/tfm/nxlmi.tfm
index ebab60e681..d1741f1931 100644
--- a/fonts/newtx/tfm/nxlmi.tfm
+++ b/fonts/newtx/tfm/nxlmi.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi0.tfm b/fonts/newtx/tfm/nxlmi0.tfm
index b0b2e2fe76..af1027a632 100644
--- a/fonts/newtx/tfm/nxlmi0.tfm
+++ b/fonts/newtx/tfm/nxlmi0.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi01.tfm b/fonts/newtx/tfm/nxlmi01.tfm
index 01d7dd44c4..d0bf62b057 100644
--- a/fonts/newtx/tfm/nxlmi01.tfm
+++ b/fonts/newtx/tfm/nxlmi01.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi015.tfm b/fonts/newtx/tfm/nxlmi015.tfm
index 8d312d26a2..4025552fbb 100644
--- a/fonts/newtx/tfm/nxlmi015.tfm
+++ b/fonts/newtx/tfm/nxlmi015.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi017.tfm b/fonts/newtx/tfm/nxlmi017.tfm
index 875fbcd318..1487fe0b33 100644
--- a/fonts/newtx/tfm/nxlmi017.tfm
+++ b/fonts/newtx/tfm/nxlmi017.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi02.tfm b/fonts/newtx/tfm/nxlmi02.tfm
index f4c2083e0e..53a5778059 100644
--- a/fonts/newtx/tfm/nxlmi02.tfm
+++ b/fonts/newtx/tfm/nxlmi02.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi025.tfm b/fonts/newtx/tfm/nxlmi025.tfm
index 2a9854eb5d..057cd70775 100644
--- a/fonts/newtx/tfm/nxlmi025.tfm
+++ b/fonts/newtx/tfm/nxlmi025.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi027.tfm b/fonts/newtx/tfm/nxlmi027.tfm
index 139b78b6b7..c84607428f 100644
--- a/fonts/newtx/tfm/nxlmi027.tfm
+++ b/fonts/newtx/tfm/nxlmi027.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi03.tfm b/fonts/newtx/tfm/nxlmi03.tfm
index 39c4173230..57035b5e60 100644
--- a/fonts/newtx/tfm/nxlmi03.tfm
+++ b/fonts/newtx/tfm/nxlmi03.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi035.tfm b/fonts/newtx/tfm/nxlmi035.tfm
index a87db967e4..4025552fbb 100644
--- a/fonts/newtx/tfm/nxlmi035.tfm
+++ b/fonts/newtx/tfm/nxlmi035.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi037.tfm b/fonts/newtx/tfm/nxlmi037.tfm
index 820d74d80a..1487fe0b33 100644
--- a/fonts/newtx/tfm/nxlmi037.tfm
+++ b/fonts/newtx/tfm/nxlmi037.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi05.tfm b/fonts/newtx/tfm/nxlmi05.tfm
index 4577ecbfa2..1f326aeeda 100644
--- a/fonts/newtx/tfm/nxlmi05.tfm
+++ b/fonts/newtx/tfm/nxlmi05.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi07.tfm b/fonts/newtx/tfm/nxlmi07.tfm
index 163ddb41f9..d1785b0551 100644
--- a/fonts/newtx/tfm/nxlmi07.tfm
+++ b/fonts/newtx/tfm/nxlmi07.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi1.tfm b/fonts/newtx/tfm/nxlmi1.tfm
index 012bb63774..30ecb0271a 100644
--- a/fonts/newtx/tfm/nxlmi1.tfm
+++ b/fonts/newtx/tfm/nxlmi1.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi15.tfm b/fonts/newtx/tfm/nxlmi15.tfm
index 904bd877ad..d3ecd2a210 100644
--- a/fonts/newtx/tfm/nxlmi15.tfm
+++ b/fonts/newtx/tfm/nxlmi15.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi17.tfm b/fonts/newtx/tfm/nxlmi17.tfm
index a4891e9da6..cc89e6e467 100644
--- a/fonts/newtx/tfm/nxlmi17.tfm
+++ b/fonts/newtx/tfm/nxlmi17.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi2.tfm b/fonts/newtx/tfm/nxlmi2.tfm
index 7219c926ea..33ea267af4 100644
--- a/fonts/newtx/tfm/nxlmi2.tfm
+++ b/fonts/newtx/tfm/nxlmi2.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi25.tfm b/fonts/newtx/tfm/nxlmi25.tfm
index 4f6c8aeb87..1383d5e214 100644
--- a/fonts/newtx/tfm/nxlmi25.tfm
+++ b/fonts/newtx/tfm/nxlmi25.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi27.tfm b/fonts/newtx/tfm/nxlmi27.tfm
index 10c713a3b9..dadb97cd60 100644
--- a/fonts/newtx/tfm/nxlmi27.tfm
+++ b/fonts/newtx/tfm/nxlmi27.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi3.tfm b/fonts/newtx/tfm/nxlmi3.tfm
index 93797e28ef..3775337aec 100644
--- a/fonts/newtx/tfm/nxlmi3.tfm
+++ b/fonts/newtx/tfm/nxlmi3.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi35.tfm b/fonts/newtx/tfm/nxlmi35.tfm
index 09332bcb86..67e8655291 100644
--- a/fonts/newtx/tfm/nxlmi35.tfm
+++ b/fonts/newtx/tfm/nxlmi35.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi37.tfm b/fonts/newtx/tfm/nxlmi37.tfm
index 04d1c8526e..160b6ced4f 100644
--- a/fonts/newtx/tfm/nxlmi37.tfm
+++ b/fonts/newtx/tfm/nxlmi37.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi5.tfm b/fonts/newtx/tfm/nxlmi5.tfm
index 37eb9dceba..e0f0df86d5 100644
--- a/fonts/newtx/tfm/nxlmi5.tfm
+++ b/fonts/newtx/tfm/nxlmi5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmi7.tfm b/fonts/newtx/tfm/nxlmi7.tfm
index 757e660083..9a2727b768 100644
--- a/fonts/newtx/tfm/nxlmi7.tfm
+++ b/fonts/newtx/tfm/nxlmi7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/nxlmia.tfm b/fonts/newtx/tfm/nxlmia.tfm
index 6c43503406..e334d4b159 100644
--- a/fonts/newtx/tfm/nxlmia.tfm
+++ b/fonts/newtx/tfm/nxlmia.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/rtxbmi5.tfm b/fonts/newtx/tfm/rtxbmi5.tfm
index 0002fe34a6..a34e41e873 100644
--- a/fonts/newtx/tfm/rtxbmi5.tfm
+++ b/fonts/newtx/tfm/rtxbmi5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/rtxbmi7.tfm b/fonts/newtx/tfm/rtxbmi7.tfm
index e8ecc98c04..b1b350ad82 100644
--- a/fonts/newtx/tfm/rtxbmi7.tfm
+++ b/fonts/newtx/tfm/rtxbmi7.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/stxscr.tfm b/fonts/newtx/tfm/stxscr.tfm
new file mode 100644
index 0000000000..680a69449f
--- /dev/null
+++ b/fonts/newtx/tfm/stxscr.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/txbex-bar.tfm b/fonts/newtx/tfm/txbex-bar.tfm
index d549058995..accc75f8d3 100644
--- a/fonts/newtx/tfm/txbex-bar.tfm
+++ b/fonts/newtx/tfm/txbex-bar.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/txbmiaSTbb.tfm b/fonts/newtx/tfm/txbmiaSTbb.tfm
new file mode 100644
index 0000000000..e2cd4d9476
--- /dev/null
+++ b/fonts/newtx/tfm/txbmiaSTbb.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/txbmiaX.tfm b/fonts/newtx/tfm/txbmiaX.tfm
index e97aea9696..583d0d0951 100644
--- a/fonts/newtx/tfm/txbmiaX.tfm
+++ b/fonts/newtx/tfm/txbmiaX.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/txbsys.tfm b/fonts/newtx/tfm/txbsys.tfm
index 2929603132..b2c60623da 100644
--- a/fonts/newtx/tfm/txbsys.tfm
+++ b/fonts/newtx/tfm/txbsys.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/txexas.tfm b/fonts/newtx/tfm/txexas.tfm
index 69c0eff637..4439cfe0db 100644
--- a/fonts/newtx/tfm/txexas.tfm
+++ b/fonts/newtx/tfm/txexas.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/txmiaSTbb.tfm b/fonts/newtx/tfm/txmiaSTbb.tfm
new file mode 100644
index 0000000000..5e6b941bb8
--- /dev/null
+++ b/fonts/newtx/tfm/txmiaSTbb.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/txmiaX.tfm b/fonts/newtx/tfm/txmiaX.tfm
index 4d079d495d..c0f4d807cf 100644
--- a/fonts/newtx/tfm/txmiaX.tfm
+++ b/fonts/newtx/tfm/txmiaX.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/txsys.tfm b/fonts/newtx/tfm/txsys.tfm
index 9341aa75ac..6298a9b500 100644
--- a/fonts/newtx/tfm/txsys.tfm
+++ b/fonts/newtx/tfm/txsys.tfm
Binary files differ
diff --git a/fonts/newtx/type1/LibertineI-5nu.pfb b/fonts/newtx/type1/LibertineI-5nu.pfb
index a19eb7a44d..a477b13abf 100644
--- a/fonts/newtx/type1/LibertineI-5nu.pfb
+++ b/fonts/newtx/type1/LibertineI-5nu.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineMathBMI.pfb b/fonts/newtx/type1/LibertineMathBMI.pfb
new file mode 100644
index 0000000000..98de425ec8
--- /dev/null
+++ b/fonts/newtx/type1/LibertineMathBMI.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineMathBMI5.pfb b/fonts/newtx/type1/LibertineMathBMI5.pfb
new file mode 100644
index 0000000000..85c217b6ca
--- /dev/null
+++ b/fonts/newtx/type1/LibertineMathBMI5.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineMathBMI7.pfb b/fonts/newtx/type1/LibertineMathBMI7.pfb
new file mode 100644
index 0000000000..add55ca0bd
--- /dev/null
+++ b/fonts/newtx/type1/LibertineMathBMI7.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineMathBRM.pfb b/fonts/newtx/type1/LibertineMathBRM.pfb
new file mode 100644
index 0000000000..67c3626a1a
--- /dev/null
+++ b/fonts/newtx/type1/LibertineMathBRM.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineMathMI.pfb b/fonts/newtx/type1/LibertineMathMI.pfb
new file mode 100644
index 0000000000..cf240e9ef1
--- /dev/null
+++ b/fonts/newtx/type1/LibertineMathMI.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineMathMI5.pfb b/fonts/newtx/type1/LibertineMathMI5.pfb
new file mode 100644
index 0000000000..44d9055a0e
--- /dev/null
+++ b/fonts/newtx/type1/LibertineMathMI5.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineMathMI7.pfb b/fonts/newtx/type1/LibertineMathMI7.pfb
new file mode 100644
index 0000000000..a5507da7d5
--- /dev/null
+++ b/fonts/newtx/type1/LibertineMathMI7.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineMathRM.pfb b/fonts/newtx/type1/LibertineMathRM.pfb
new file mode 100644
index 0000000000..f6e7013165
--- /dev/null
+++ b/fonts/newtx/type1/LibertineMathRM.pfb
Binary files differ
diff --git a/fonts/newtx/type1/LibertineZI-5nu.pfb b/fonts/newtx/type1/LibertineZI-5nu.pfb
index 37857bdcca..85b822f0db 100644
--- a/fonts/newtx/type1/LibertineZI-5nu.pfb
+++ b/fonts/newtx/type1/LibertineZI-5nu.pfb
Binary files differ
diff --git a/fonts/newtx/type1/NewTXBMI.pfb b/fonts/newtx/type1/NewTXBMI.pfb
new file mode 100644
index 0000000000..8b6831201d
--- /dev/null
+++ b/fonts/newtx/type1/NewTXBMI.pfb
Binary files differ
diff --git a/fonts/newtx/type1/NewTXBMI5.pfb b/fonts/newtx/type1/NewTXBMI5.pfb
new file mode 100644
index 0000000000..5beeae06c4
--- /dev/null
+++ b/fonts/newtx/type1/NewTXBMI5.pfb
Binary files differ
diff --git a/fonts/newtx/type1/NewTXBMI7.pfb b/fonts/newtx/type1/NewTXBMI7.pfb
new file mode 100644
index 0000000000..8d7aa461c0
--- /dev/null
+++ b/fonts/newtx/type1/NewTXBMI7.pfb
Binary files differ
diff --git a/fonts/newtx/type1/NewTXMI.pfb b/fonts/newtx/type1/NewTXMI.pfb
new file mode 100644
index 0000000000..100832e66b
--- /dev/null
+++ b/fonts/newtx/type1/NewTXMI.pfb
Binary files differ
diff --git a/fonts/newtx/type1/NewTXMI5.pfb b/fonts/newtx/type1/NewTXMI5.pfb
new file mode 100644
index 0000000000..b1f628c2e9
--- /dev/null
+++ b/fonts/newtx/type1/NewTXMI5.pfb
Binary files differ
diff --git a/fonts/newtx/type1/NewTXMI7.pfb b/fonts/newtx/type1/NewTXMI7.pfb
new file mode 100644
index 0000000000..78734a1fee
--- /dev/null
+++ b/fonts/newtx/type1/NewTXMI7.pfb
Binary files differ
diff --git a/fonts/newtx/type1/XCharterMathBMI.pfb b/fonts/newtx/type1/XCharterMathBMI.pfb
new file mode 100644
index 0000000000..e77b256d14
--- /dev/null
+++ b/fonts/newtx/type1/XCharterMathBMI.pfb
Binary files differ
diff --git a/fonts/newtx/type1/XCharterMathBRM.pfb b/fonts/newtx/type1/XCharterMathBRM.pfb
new file mode 100644
index 0000000000..4cdfb00df7
--- /dev/null
+++ b/fonts/newtx/type1/XCharterMathBRM.pfb
Binary files differ
diff --git a/fonts/newtx/type1/XCharterMathMI.pfb b/fonts/newtx/type1/XCharterMathMI.pfb
new file mode 100644
index 0000000000..bb002d8376
--- /dev/null
+++ b/fonts/newtx/type1/XCharterMathMI.pfb
Binary files differ
diff --git a/fonts/newtx/type1/XCharterMathRM.pfb b/fonts/newtx/type1/XCharterMathRM.pfb
new file mode 100644
index 0000000000..6519febc89
--- /dev/null
+++ b/fonts/newtx/type1/XCharterMathRM.pfb
Binary files differ
diff --git a/fonts/newtx/type1/ntxsups-Bold.pfb b/fonts/newtx/type1/ntxsups-Bold.pfb
index f9c2764404..3a5e5f13ca 100644
--- a/fonts/newtx/type1/ntxsups-Bold.pfb
+++ b/fonts/newtx/type1/ntxsups-Bold.pfb
Binary files differ
diff --git a/fonts/newtx/type1/ntxsups-BoldItalic.pfb b/fonts/newtx/type1/ntxsups-BoldItalic.pfb
index 23307a604b..e9c58da4d0 100644
--- a/fonts/newtx/type1/ntxsups-BoldItalic.pfb
+++ b/fonts/newtx/type1/ntxsups-BoldItalic.pfb
Binary files differ
diff --git a/fonts/newtx/type1/ntxsups-Italic.pfb b/fonts/newtx/type1/ntxsups-Italic.pfb
index 82d4bb432b..2ac0600491 100644
--- a/fonts/newtx/type1/ntxsups-Italic.pfb
+++ b/fonts/newtx/type1/ntxsups-Italic.pfb
Binary files differ
diff --git a/fonts/newtx/type1/ntxsups-Regular.pfb b/fonts/newtx/type1/ntxsups-Regular.pfb
index 3456767056..5f11ea9aa9 100644
--- a/fonts/newtx/type1/ntxsups-Regular.pfb
+++ b/fonts/newtx/type1/ntxsups-Regular.pfb
Binary files differ
diff --git a/fonts/newtx/type1/rtxbmi5.pfb b/fonts/newtx/type1/rtxbmi5.pfb
index e3ba3b20ae..e1ca3b4d40 100644
--- a/fonts/newtx/type1/rtxbmi5.pfb
+++ b/fonts/newtx/type1/rtxbmi5.pfb
Binary files differ
diff --git a/fonts/newtx/type1/rtxbmi7.pfb b/fonts/newtx/type1/rtxbmi7.pfb
index 20de5fcdbc..e18c1a1ad5 100644
--- a/fonts/newtx/type1/rtxbmi7.pfb
+++ b/fonts/newtx/type1/rtxbmi7.pfb
Binary files differ
diff --git a/fonts/newtx/type1/stxscr.pfb b/fonts/newtx/type1/stxscr.pfb
new file mode 100644
index 0000000000..de3f961f61
--- /dev/null
+++ b/fonts/newtx/type1/stxscr.pfb
Binary files differ
diff --git a/fonts/newtx/type1/txbex-bar.pfb b/fonts/newtx/type1/txbex-bar.pfb
index b34423bba8..ecf35354a7 100644
--- a/fonts/newtx/type1/txbex-bar.pfb
+++ b/fonts/newtx/type1/txbex-bar.pfb
Binary files differ
diff --git a/fonts/newtx/type1/txbmiaSTbb.pfb b/fonts/newtx/type1/txbmiaSTbb.pfb
new file mode 100644
index 0000000000..4788a4bc6c
--- /dev/null
+++ b/fonts/newtx/type1/txbmiaSTbb.pfb
Binary files differ
diff --git a/fonts/newtx/type1/txbmiaX.pfb b/fonts/newtx/type1/txbmiaX.pfb
index c22d44f901..5c0f3c07e5 100644
--- a/fonts/newtx/type1/txbmiaX.pfb
+++ b/fonts/newtx/type1/txbmiaX.pfb
Binary files differ
diff --git a/fonts/newtx/type1/txbsys.pfb b/fonts/newtx/type1/txbsys.pfb
index 88bdafc6fe..f19ef9d7f4 100644
--- a/fonts/newtx/type1/txbsys.pfb
+++ b/fonts/newtx/type1/txbsys.pfb
Binary files differ
diff --git a/fonts/newtx/type1/txexas.pfb b/fonts/newtx/type1/txexas.pfb
index 0adcf6889e..fc54035fd0 100644
--- a/fonts/newtx/type1/txexas.pfb
+++ b/fonts/newtx/type1/txexas.pfb
Binary files differ
diff --git a/fonts/newtx/type1/txmiaSTbb.pfb b/fonts/newtx/type1/txmiaSTbb.pfb
new file mode 100644
index 0000000000..f919d19cc7
--- /dev/null
+++ b/fonts/newtx/type1/txmiaSTbb.pfb
Binary files differ
diff --git a/fonts/newtx/type1/txmiaX.pfb b/fonts/newtx/type1/txmiaX.pfb
index bd530e39a8..4df348903b 100644
--- a/fonts/newtx/type1/txmiaX.pfb
+++ b/fonts/newtx/type1/txmiaX.pfb
Binary files differ
diff --git a/fonts/newtx/type1/txsys.pfb b/fonts/newtx/type1/txsys.pfb
index f4d4904b7c..4e0637ffaf 100644
--- a/fonts/newtx/type1/txsys.pfb
+++ b/fonts/newtx/type1/txsys.pfb
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi.vf b/fonts/newtx/vf/ntxbmi.vf
index d0d9b1ee9b..10afcd2091 100644
--- a/fonts/newtx/vf/ntxbmi.vf
+++ b/fonts/newtx/vf/ntxbmi.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi0.vf b/fonts/newtx/vf/ntxbmi0.vf
index 788f40843c..54f06989f7 100644
--- a/fonts/newtx/vf/ntxbmi0.vf
+++ b/fonts/newtx/vf/ntxbmi0.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi05.vf b/fonts/newtx/vf/ntxbmi05.vf
index 4b43656d3c..5a4fa3eb96 100644
--- a/fonts/newtx/vf/ntxbmi05.vf
+++ b/fonts/newtx/vf/ntxbmi05.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi07.vf b/fonts/newtx/vf/ntxbmi07.vf
index d2cbd69225..68ea19c894 100644
--- a/fonts/newtx/vf/ntxbmi07.vf
+++ b/fonts/newtx/vf/ntxbmi07.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi1.vf b/fonts/newtx/vf/ntxbmi1.vf
index c208613be9..0c24be519a 100644
--- a/fonts/newtx/vf/ntxbmi1.vf
+++ b/fonts/newtx/vf/ntxbmi1.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi15.vf b/fonts/newtx/vf/ntxbmi15.vf
index 1c8415caca..eb7bb2244a 100644
--- a/fonts/newtx/vf/ntxbmi15.vf
+++ b/fonts/newtx/vf/ntxbmi15.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi17.vf b/fonts/newtx/vf/ntxbmi17.vf
index 8da7ed4048..2c2ae0fbcd 100644
--- a/fonts/newtx/vf/ntxbmi17.vf
+++ b/fonts/newtx/vf/ntxbmi17.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi5.vf b/fonts/newtx/vf/ntxbmi5.vf
index c5b53b37c7..37e54e21cb 100644
--- a/fonts/newtx/vf/ntxbmi5.vf
+++ b/fonts/newtx/vf/ntxbmi5.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmi7.vf b/fonts/newtx/vf/ntxbmi7.vf
index fd79bb853a..7d64cd894b 100644
--- a/fonts/newtx/vf/ntxbmi7.vf
+++ b/fonts/newtx/vf/ntxbmi7.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbmia.vf b/fonts/newtx/vf/ntxbmia.vf
index 372751f043..31f9055fd0 100644
--- a/fonts/newtx/vf/ntxbmia.vf
+++ b/fonts/newtx/vf/ntxbmia.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbsy.vf b/fonts/newtx/vf/ntxbsy.vf
index 5ef0ab088c..869548cc84 100644
--- a/fonts/newtx/vf/ntxbsy.vf
+++ b/fonts/newtx/vf/ntxbsy.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbsy5.vf b/fonts/newtx/vf/ntxbsy5.vf
index 5ef0ab088c..f319d0c7fc 100644
--- a/fonts/newtx/vf/ntxbsy5.vf
+++ b/fonts/newtx/vf/ntxbsy5.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbsy7.vf b/fonts/newtx/vf/ntxbsy7.vf
index 51df4f1929..8d349b253e 100644
--- a/fonts/newtx/vf/ntxbsy7.vf
+++ b/fonts/newtx/vf/ntxbsy7.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxbsym.vf b/fonts/newtx/vf/ntxbsym.vf
index eacb995ce5..7cc1c06541 100644
--- a/fonts/newtx/vf/ntxbsym.vf
+++ b/fonts/newtx/vf/ntxbsym.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi.vf b/fonts/newtx/vf/ntxmi.vf
index 37ccde62cb..c53f52c427 100644
--- a/fonts/newtx/vf/ntxmi.vf
+++ b/fonts/newtx/vf/ntxmi.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi0.vf b/fonts/newtx/vf/ntxmi0.vf
index 02b0a76bdb..81077eab32 100644
--- a/fonts/newtx/vf/ntxmi0.vf
+++ b/fonts/newtx/vf/ntxmi0.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi05.vf b/fonts/newtx/vf/ntxmi05.vf
index 0c596dd63b..81ceb03afd 100644
--- a/fonts/newtx/vf/ntxmi05.vf
+++ b/fonts/newtx/vf/ntxmi05.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi07.vf b/fonts/newtx/vf/ntxmi07.vf
index 81b1eb3fb2..c24c90342d 100644
--- a/fonts/newtx/vf/ntxmi07.vf
+++ b/fonts/newtx/vf/ntxmi07.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi1.vf b/fonts/newtx/vf/ntxmi1.vf
index 936856599c..fe999c5c9e 100644
--- a/fonts/newtx/vf/ntxmi1.vf
+++ b/fonts/newtx/vf/ntxmi1.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi15.vf b/fonts/newtx/vf/ntxmi15.vf
index f927292a1b..36e1e89909 100644
--- a/fonts/newtx/vf/ntxmi15.vf
+++ b/fonts/newtx/vf/ntxmi15.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi17.vf b/fonts/newtx/vf/ntxmi17.vf
index 6a7d9e98a8..817113a34c 100644
--- a/fonts/newtx/vf/ntxmi17.vf
+++ b/fonts/newtx/vf/ntxmi17.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi5.vf b/fonts/newtx/vf/ntxmi5.vf
index 6444702de2..123b7f9c1b 100644
--- a/fonts/newtx/vf/ntxmi5.vf
+++ b/fonts/newtx/vf/ntxmi5.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi7.vf b/fonts/newtx/vf/ntxmi7.vf
index 5ac95549fa..2e955e87ff 100644
--- a/fonts/newtx/vf/ntxmi7.vf
+++ b/fonts/newtx/vf/ntxmi7.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmia.vf b/fonts/newtx/vf/ntxmia.vf
index 3847c0dc70..27fecde8a9 100644
--- a/fonts/newtx/vf/ntxmia.vf
+++ b/fonts/newtx/vf/ntxmia.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxsy.vf b/fonts/newtx/vf/ntxsy.vf
index c89be54861..ca7f271124 100644
--- a/fonts/newtx/vf/ntxsy.vf
+++ b/fonts/newtx/vf/ntxsy.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxsy5.vf b/fonts/newtx/vf/ntxsy5.vf
index 1c861f385c..cb3422382b 100644
--- a/fonts/newtx/vf/ntxsy5.vf
+++ b/fonts/newtx/vf/ntxsy5.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxsy7.vf b/fonts/newtx/vf/ntxsy7.vf
index 7dbaf58354..dec3a0f969 100644
--- a/fonts/newtx/vf/ntxsy7.vf
+++ b/fonts/newtx/vf/ntxsy7.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxsym.vf b/fonts/newtx/vf/ntxsym.vf
index 9474200579..2755fecd77 100644
--- a/fonts/newtx/vf/ntxsym.vf
+++ b/fonts/newtx/vf/ntxsym.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi.vf b/fonts/newtx/vf/nxlbmi.vf
index ad20806841..9153e55095 100644
--- a/fonts/newtx/vf/nxlbmi.vf
+++ b/fonts/newtx/vf/nxlbmi.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi0.vf b/fonts/newtx/vf/nxlbmi0.vf
index 75c3e4ecfe..3f3f726247 100644
--- a/fonts/newtx/vf/nxlbmi0.vf
+++ b/fonts/newtx/vf/nxlbmi0.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi01.vf b/fonts/newtx/vf/nxlbmi01.vf
index 9f604d1d13..531a4760be 100644
--- a/fonts/newtx/vf/nxlbmi01.vf
+++ b/fonts/newtx/vf/nxlbmi01.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi015.vf b/fonts/newtx/vf/nxlbmi015.vf
index dfaabdecc8..359a37b1ff 100644
--- a/fonts/newtx/vf/nxlbmi015.vf
+++ b/fonts/newtx/vf/nxlbmi015.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi017.vf b/fonts/newtx/vf/nxlbmi017.vf
index fdb764f80a..1df74b0dc0 100644
--- a/fonts/newtx/vf/nxlbmi017.vf
+++ b/fonts/newtx/vf/nxlbmi017.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi02.vf b/fonts/newtx/vf/nxlbmi02.vf
index cda455edc3..61b84b23f7 100644
--- a/fonts/newtx/vf/nxlbmi02.vf
+++ b/fonts/newtx/vf/nxlbmi02.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi025.vf b/fonts/newtx/vf/nxlbmi025.vf
index 5bae5efe3a..78860f4f45 100644
--- a/fonts/newtx/vf/nxlbmi025.vf
+++ b/fonts/newtx/vf/nxlbmi025.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi027.vf b/fonts/newtx/vf/nxlbmi027.vf
index ff37dba9b9..773074f039 100644
--- a/fonts/newtx/vf/nxlbmi027.vf
+++ b/fonts/newtx/vf/nxlbmi027.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi03.vf b/fonts/newtx/vf/nxlbmi03.vf
index 1f918a8280..8039448cc9 100644
--- a/fonts/newtx/vf/nxlbmi03.vf
+++ b/fonts/newtx/vf/nxlbmi03.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi035.vf b/fonts/newtx/vf/nxlbmi035.vf
index 00a4920da1..47c0ea90fb 100644
--- a/fonts/newtx/vf/nxlbmi035.vf
+++ b/fonts/newtx/vf/nxlbmi035.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi037.vf b/fonts/newtx/vf/nxlbmi037.vf
index ddfe835b57..7c33ab0be0 100644
--- a/fonts/newtx/vf/nxlbmi037.vf
+++ b/fonts/newtx/vf/nxlbmi037.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi05.vf b/fonts/newtx/vf/nxlbmi05.vf
index 7573da3341..301e4c61dc 100644
--- a/fonts/newtx/vf/nxlbmi05.vf
+++ b/fonts/newtx/vf/nxlbmi05.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi07.vf b/fonts/newtx/vf/nxlbmi07.vf
index de665aa0d4..0dbef528d3 100644
--- a/fonts/newtx/vf/nxlbmi07.vf
+++ b/fonts/newtx/vf/nxlbmi07.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi1.vf b/fonts/newtx/vf/nxlbmi1.vf
index 3df26f0a15..f5e265ddbb 100644
--- a/fonts/newtx/vf/nxlbmi1.vf
+++ b/fonts/newtx/vf/nxlbmi1.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi15.vf b/fonts/newtx/vf/nxlbmi15.vf
index 6cd9e43c59..2462868af6 100644
--- a/fonts/newtx/vf/nxlbmi15.vf
+++ b/fonts/newtx/vf/nxlbmi15.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi17.vf b/fonts/newtx/vf/nxlbmi17.vf
index 6b481648a5..50ec28810e 100644
--- a/fonts/newtx/vf/nxlbmi17.vf
+++ b/fonts/newtx/vf/nxlbmi17.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi2.vf b/fonts/newtx/vf/nxlbmi2.vf
index 2487bd1859..c4a041814c 100644
--- a/fonts/newtx/vf/nxlbmi2.vf
+++ b/fonts/newtx/vf/nxlbmi2.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi25.vf b/fonts/newtx/vf/nxlbmi25.vf
index 71158d5b20..6cec63f5f0 100644
--- a/fonts/newtx/vf/nxlbmi25.vf
+++ b/fonts/newtx/vf/nxlbmi25.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi27.vf b/fonts/newtx/vf/nxlbmi27.vf
index 4aa5f7dd5d..6f16ce61a1 100644
--- a/fonts/newtx/vf/nxlbmi27.vf
+++ b/fonts/newtx/vf/nxlbmi27.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi3.vf b/fonts/newtx/vf/nxlbmi3.vf
index 5c2a38670e..f6794fd944 100644
--- a/fonts/newtx/vf/nxlbmi3.vf
+++ b/fonts/newtx/vf/nxlbmi3.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi35.vf b/fonts/newtx/vf/nxlbmi35.vf
index 2d1863b751..6cec63f5f0 100644
--- a/fonts/newtx/vf/nxlbmi35.vf
+++ b/fonts/newtx/vf/nxlbmi35.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi37.vf b/fonts/newtx/vf/nxlbmi37.vf
index 9a84962ff1..6f16ce61a1 100644
--- a/fonts/newtx/vf/nxlbmi37.vf
+++ b/fonts/newtx/vf/nxlbmi37.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi5.vf b/fonts/newtx/vf/nxlbmi5.vf
index 1906562b42..750da576bc 100644
--- a/fonts/newtx/vf/nxlbmi5.vf
+++ b/fonts/newtx/vf/nxlbmi5.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmi7.vf b/fonts/newtx/vf/nxlbmi7.vf
index e19beebb76..ace9f9f744 100644
--- a/fonts/newtx/vf/nxlbmi7.vf
+++ b/fonts/newtx/vf/nxlbmi7.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlbmia.vf b/fonts/newtx/vf/nxlbmia.vf
index c9dd25509c..775b2f3acf 100644
--- a/fonts/newtx/vf/nxlbmia.vf
+++ b/fonts/newtx/vf/nxlbmia.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi.vf b/fonts/newtx/vf/nxlmi.vf
index 22f6e74304..ac15ef7dd7 100644
--- a/fonts/newtx/vf/nxlmi.vf
+++ b/fonts/newtx/vf/nxlmi.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi0.vf b/fonts/newtx/vf/nxlmi0.vf
index e35320dc83..1b6ed33b85 100644
--- a/fonts/newtx/vf/nxlmi0.vf
+++ b/fonts/newtx/vf/nxlmi0.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi01.vf b/fonts/newtx/vf/nxlmi01.vf
index 5d37684bcb..84c9f66c7c 100644
--- a/fonts/newtx/vf/nxlmi01.vf
+++ b/fonts/newtx/vf/nxlmi01.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi015.vf b/fonts/newtx/vf/nxlmi015.vf
index ef0f4f9ac6..309be942fb 100644
--- a/fonts/newtx/vf/nxlmi015.vf
+++ b/fonts/newtx/vf/nxlmi015.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi017.vf b/fonts/newtx/vf/nxlmi017.vf
index 2bd6679425..b223fdcb10 100644
--- a/fonts/newtx/vf/nxlmi017.vf
+++ b/fonts/newtx/vf/nxlmi017.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi02.vf b/fonts/newtx/vf/nxlmi02.vf
index 2142240cbe..77b2bc629f 100644
--- a/fonts/newtx/vf/nxlmi02.vf
+++ b/fonts/newtx/vf/nxlmi02.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi025.vf b/fonts/newtx/vf/nxlmi025.vf
index 3c78194812..46380bd011 100644
--- a/fonts/newtx/vf/nxlmi025.vf
+++ b/fonts/newtx/vf/nxlmi025.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi027.vf b/fonts/newtx/vf/nxlmi027.vf
index 1d54528c9f..7fc2d8598b 100644
--- a/fonts/newtx/vf/nxlmi027.vf
+++ b/fonts/newtx/vf/nxlmi027.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi03.vf b/fonts/newtx/vf/nxlmi03.vf
index 3ad18fb23f..e9767e71df 100644
--- a/fonts/newtx/vf/nxlmi03.vf
+++ b/fonts/newtx/vf/nxlmi03.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi035.vf b/fonts/newtx/vf/nxlmi035.vf
index 40d9c3a24d..309be942fb 100644
--- a/fonts/newtx/vf/nxlmi035.vf
+++ b/fonts/newtx/vf/nxlmi035.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi037.vf b/fonts/newtx/vf/nxlmi037.vf
index a4bf0ce397..b223fdcb10 100644
--- a/fonts/newtx/vf/nxlmi037.vf
+++ b/fonts/newtx/vf/nxlmi037.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi05.vf b/fonts/newtx/vf/nxlmi05.vf
index 9372e21280..507d48c83b 100644
--- a/fonts/newtx/vf/nxlmi05.vf
+++ b/fonts/newtx/vf/nxlmi05.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi07.vf b/fonts/newtx/vf/nxlmi07.vf
index 906431c356..966e8188a6 100644
--- a/fonts/newtx/vf/nxlmi07.vf
+++ b/fonts/newtx/vf/nxlmi07.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi1.vf b/fonts/newtx/vf/nxlmi1.vf
index d10a76cc04..e7e495c8e2 100644
--- a/fonts/newtx/vf/nxlmi1.vf
+++ b/fonts/newtx/vf/nxlmi1.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi15.vf b/fonts/newtx/vf/nxlmi15.vf
index 81328de9a3..9dfa28f743 100644
--- a/fonts/newtx/vf/nxlmi15.vf
+++ b/fonts/newtx/vf/nxlmi15.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi17.vf b/fonts/newtx/vf/nxlmi17.vf
index 1593f9c3fe..c10452f40d 100644
--- a/fonts/newtx/vf/nxlmi17.vf
+++ b/fonts/newtx/vf/nxlmi17.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi2.vf b/fonts/newtx/vf/nxlmi2.vf
index 2169909a83..f6164afae8 100644
--- a/fonts/newtx/vf/nxlmi2.vf
+++ b/fonts/newtx/vf/nxlmi2.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi25.vf b/fonts/newtx/vf/nxlmi25.vf
index 416d6c29a9..cb0667db9e 100644
--- a/fonts/newtx/vf/nxlmi25.vf
+++ b/fonts/newtx/vf/nxlmi25.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi27.vf b/fonts/newtx/vf/nxlmi27.vf
index 6da408ce0f..4a6de07a37 100644
--- a/fonts/newtx/vf/nxlmi27.vf
+++ b/fonts/newtx/vf/nxlmi27.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi3.vf b/fonts/newtx/vf/nxlmi3.vf
index 5bf2f9aed7..00ad8b5636 100644
--- a/fonts/newtx/vf/nxlmi3.vf
+++ b/fonts/newtx/vf/nxlmi3.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi35.vf b/fonts/newtx/vf/nxlmi35.vf
index 478d3d5e0b..b6e71b07a2 100644
--- a/fonts/newtx/vf/nxlmi35.vf
+++ b/fonts/newtx/vf/nxlmi35.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi37.vf b/fonts/newtx/vf/nxlmi37.vf
index 74ced3a3a9..95548feea5 100644
--- a/fonts/newtx/vf/nxlmi37.vf
+++ b/fonts/newtx/vf/nxlmi37.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi5.vf b/fonts/newtx/vf/nxlmi5.vf
index 73410f9138..1739c402a0 100644
--- a/fonts/newtx/vf/nxlmi5.vf
+++ b/fonts/newtx/vf/nxlmi5.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmi7.vf b/fonts/newtx/vf/nxlmi7.vf
index 7214c71ccc..4f65faf801 100644
--- a/fonts/newtx/vf/nxlmi7.vf
+++ b/fonts/newtx/vf/nxlmi7.vf
Binary files differ
diff --git a/fonts/newtx/vf/nxlmia.vf b/fonts/newtx/vf/nxlmia.vf
index dcd75d81cd..1ddf7d78d8 100644
--- a/fonts/newtx/vf/nxlmia.vf
+++ b/fonts/newtx/vf/nxlmia.vf
Binary files differ
diff --git a/fonts/xcharter/README b/fonts/xcharter/README
index 1dbe0e5390..d10af8bc87 100644
--- a/fonts/xcharter/README
+++ b/fonts/xcharter/README
@@ -22,7 +22,10 @@ Original Bitstream Free font license:
Portions of the font modifications are Copyright (c) 2009--2012, Andrey Panov; Copyright (c) 2013--2018, Michael Sharpe.
-Current version: 1.122 2019-08-17
+Current version: 1.20 2019-09-27
+
+Changes in version 1.20
+The mathematical parts of fonts have been enhanced so that, when used with newtxmath, they can produce pdf files that satisfy PDF/A-1b. See the newtxmath documentation for details. Note that \hslash, \hbar, \lambdaslsh and \lambdabar are now built from Charter glyphs.
Changes in version 1.122
1. Added many accented glyphs, so that XCharter can now be used to produce Romanized forms of Sanskrit, Tamil and Vietnamize, as well as other European languages.
diff --git a/fonts/xcharter/afm/XCharterMathBMI.afm b/fonts/xcharter/afm/XCharterMathBMI.afm
index 2d7cd3e0ee..e11f324973 100644
--- a/fonts/xcharter/afm/XCharterMathBMI.afm
+++ b/fonts/xcharter/afm/XCharterMathBMI.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20170730
-Comment Creation Date: Fri May 31 14:34:24 2019
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 19 17:02:12 2019
FontName XCharterMathBMI
FullName XCharter Math Bold Italic
FamilyName XCharterMath
@@ -13,14 +13,13 @@ UnderlinePosition -100
UnderlineThickness 50
Version 001.000
EncodingScheme FontSpecific
-FontBBox -154 -225 963 898
-XHeight 493
-StartCharMetrics 125
+FontBBox -154 -240 980 898
+StartCharMetrics 166
C 0 ; WX 329 ; N degree ; B 27 434 303 710 ;
-C 1 ; WX 318 ; N dotlessi ; B 29 -7 293 493 ;
+C 1 ; WX 318 ; N u1D6A4.bit ; B 29 -7 293 493 ;
C 2 ; WX 659 ; N uni019B ; B 55 -10 626 748 ;
C 3 ; WX 586 ; N uni01B5 ; B 45 0 539 671 ;
-C 4 ; WX 297 ; N dotlessj ; B -146 -214 249 493 ;
+C 4 ; WX 297 ; N u1D6A5.bit ; B -146 -214 249 493 ;
C 5 ; WX 221 ; N gravecomb ; B 0 552 221 742 ;
C 6 ; WX 221 ; N acutecomb ; B 0 552 221 742 ;
C 7 ; WX 308 ; N uni0302 ; B 0 552 308 742 ;
@@ -85,8 +84,7 @@ C 65 ; WX 659 ; N uni019B.alt ; B 55 -10 626 744 ;
C 66 ; WX 623 ; N uni210F ; B 50 -6 590 738 ;
C 67 ; WX 623 ; N uni210F.alt ; B 50 -6 590 736 ;
C 68 ; WX 654 ; N u1D752 ; B 17 -9 614 491 ;
-C 69 ; WX 623 ; N NameMe.53 ; B 50 -6 590 736 ;
-C 70 ; WX 659 ; N NameMe.54 ; B 55 -10 626 744 ;
+C 70 ; WX 659 ; N uni019B.bit ; B 55 -10 626 744 ;
C 71 ; WX 634 ; N u1D468 ; B -68 0 612 677 ;
C 72 ; WX 628 ; N u1D469 ; B -23 0 579 671 ;
C 73 ; WX 625 ; N u1D46A ; B 37 -13 636 684 ;
@@ -141,5 +139,47 @@ C 121 ; WX 494 ; N u1D49A ; B -78 -216 513 494 ;
C 122 ; WX 465 ; N u1D49B ; B -20 -14 461 502 ;
C 123 ; WX 547 ; N u1D497.alt ; B 22 -1 502 494 ;
C 124 ; WX 809 ; N u1D498.alt ; B 22 0 764 494 ;
+C 125 ; WX 590 ; N zero.oldstyle ; B 40 -9 548 498 ;
+C 126 ; WX 415 ; N one.oldstyle ; B 49 0 366 509 ;
+C 127 ; WX 477 ; N two.oldstyle ; B 33 0 429 509 ;
+C 128 ; WX 540 ; N three.oldstyle ; B 31 -157 482 499 ;
+C 129 ; WX 538 ; N four.oldstyle ; B 27 -156 511 498 ;
+C 130 ; WX 518 ; N five.oldstyle ; B 31 -163 447 488 ;
+C 131 ; WX 572 ; N six.oldstyle ; B 44 -12 522 674 ;
+C 132 ; WX 483 ; N seven.oldstyle ; B 39 -153 462 490 ;
+C 133 ; WX 558 ; N eight.oldstyle ; B 40 -14 513 651 ;
+C 134 ; WX 566 ; N nine.oldstyle ; B 42 -186 511 499 ;
+C 135 ; WX 556 ; N zero ; B 41 -12 515 683 ;
+C 136 ; WX 556 ; N one ; B 94 0 459 683 ;
+C 137 ; WX 556 ; N two ; B 42 0 505 683 ;
+C 138 ; WX 556 ; N three ; B 41 -11 492 683 ;
+C 139 ; WX 556 ; N four ; B 27 -37 539 677 ;
+C 140 ; WX 556 ; N five ; B 50 -9 489 671 ;
+C 141 ; WX 556 ; N six ; B 50 -12 525 714 ;
+C 142 ; WX 556 ; N seven ; B 71 -37 531 671 ;
+C 143 ; WX 556 ; N eight ; B 44 -16 506 685 ;
+C 144 ; WX 556 ; N nine ; B 43 -52 512 681 ;
+C 145 ; WX 289 ; N period ; B 66 -8 224 151 ;
+C 146 ; WX 289 ; N comma ; B 31 -175 220 129 ;
+C 147 ; WX 964 ; N uni21BC ; B 67 227 980 534 ;
+C 148 ; WX 964 ; N uni21BD ; B 67 25 980 332 ;
+C 149 ; WX 964 ; N uni21C0 ; B 67 227 980 534 ;
+C 150 ; WX 964 ; N uni21C1 ; B 67 25 980 332 ;
+C 151 ; WX 359 ; N uni21A9 ; B 67 227 323 554 ;
+C 152 ; WX 359 ; N uni21AA ; B 67 227 323 554 ;
+C 153 ; WX 601 ; N uni22B2 ; B 24 -27 629 588 ;
+C 154 ; WX 601 ; N uni22B3 ; B 24 -27 629 588 ;
+C 155 ; WX 676 ; N less ; B 67 -27 667 586 ;
+C 156 ; WX 482 ; N slash ; B 67 -191 457 753 ;
+C 157 ; WX 676 ; N greater ; B 67 -27 667 586 ;
+C 158 ; WX 820 ; N uni2605 ; B 48 -51 844 660 ;
+C 159 ; WX 396 ; N uni266D ; B 35 -23 407 801 ;
+C 160 ; WX 374 ; N uni266E ; B 35 -240 372 782 ;
+C 161 ; WX 419 ; N uni266F ; B 35 -225 421 837 ;
+C 162 ; WX 951 ; N uni2323 ; B 67 142 966 435 ;
+C 163 ; WX 951 ; N uni2322 ; B 67 142 966 435 ;
+C 164 ; WX 666 ; N uni2118 ; B 58 -210 678 521 ;
+C 165 ; WX 492 ; N uni20D7 ; B 148 551 622 863 ;
+C 166 ; WX 265 ; N uni2040 ; B 233 561 680 737 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/xcharter/afm/XCharterMathBRM.afm b/fonts/xcharter/afm/XCharterMathBRM.afm
index c823e8d960..d5f3da1680 100644
--- a/fonts/xcharter/afm/XCharterMathBRM.afm
+++ b/fonts/xcharter/afm/XCharterMathBRM.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20170730
-Comment Creation Date: Wed Jun 5 21:44:58 2019
+Comment Generated by FontForge 20190801
+Comment Creation Date: Fri Sep 20 14:25:55 2019
FontName XCharterMathBRM
FullName XCharter Math Bold Roman
FamilyName XCharterMath
@@ -14,7 +14,7 @@ UnderlineThickness 50
Version 001.000
EncodingScheme FontSpecific
FontBBox -80 -225 944 898
-StartCharMetrics 124
+StartCharMetrics 120
C 0 ; WX 576 ; N u1D6AA ; B 27 0 529 671 ;
C 1 ; WX 658 ; N u1D6AB ; B 47 0 611 678 ;
C 2 ; WX 748 ; N u1D6AF ; B 36 -16 712 686 ;
@@ -68,76 +68,72 @@ C 49 ; WX 586 ; N uni01B5 ; B 45 0 539 671 ;
C 50 ; WX 814 ; N uni2126 ; B 27 0 787 684 ;
C 51 ; WX 814 ; N uni2127 ; B 27 0 787 684 ;
C 52 ; WX 598 ; N uni2107 ; B 38 -14 576 687 ;
-C 53 ; WX 622 ; N NameMe.53 ; B 19 -10 602 744 ;
-C 54 ; WX 597 ; N NameMe.54 ; B 16 0 586 739 ;
-C 55 ; WX 521 ; N NameMe.55 ; B 98 372 386 748 ;
-C 56 ; WX 221 ; N uni0300 ; B 0 552 221 742 ;
-C 57 ; WX 221 ; N uni0301 ; B 0 552 221 742 ;
-C 58 ; WX 308 ; N uni0302 ; B 0 552 308 742 ;
-C 59 ; WX 324 ; N uni0303 ; B 0 576 324 716 ;
-C 60 ; WX 331 ; N uni0304 ; B 0 604 331 675 ;
-C 61 ; WX 305 ; N uni0306 ; B 0 567 305 719 ;
-C 62 ; WX 130 ; N uni0307 ; B 0 579 130 713 ;
-C 63 ; WX 333 ; N uni0308 ; B 0 579 333 710 ;
-C 64 ; WX 237 ; N uni030A ; B 0 546 237 783 ;
-C 65 ; WX 308 ; N uni030C ; B 0 551 308 741 ;
-C 66 ; WX 539 ; N uni20DB ; B 0 579 539 710 ;
-C 67 ; WX 745 ; N uni20DC ; B 0 579 745 710 ;
-C 68 ; WX 329 ; N degree ; B 27 434 303 710 ;
-C 69 ; WX 564 ; N NameMe.69 ; B 34 534 345 604 ;
-C 70 ; WX 305 ; N u1D6A4.bup ; B 30 0 292 496 ;
-C 71 ; WX 297 ; N u1D6A5.bup ; B -80 -214 231 496 ;
-C 72 ; WX 651 ; N u1D400 ; B -11 0 669 678 ;
-C 73 ; WX 628 ; N u1D401 ; B 29 0 590 671 ;
-C 74 ; WX 638 ; N u1D402 ; B 41 -12 601 683 ;
-C 75 ; WX 716 ; N u1D403 ; B 29 0 681 671 ;
-C 76 ; WX 596 ; N u1D404 ; B 29 0 566 671 ;
-C 77 ; WX 552 ; N u1D405 ; B 26 0 528 671 ;
-C 78 ; WX 710 ; N u1D406 ; B 40 -12 690 682 ;
-C 79 ; WX 760 ; N u1D407 ; B 30 0 733 671 ;
-C 80 ; WX 354 ; N u1D408 ; B 30 0 329 671 ;
-C 81 ; WX 465 ; N u1D409 ; B 12 -12 464 671 ;
-C 82 ; WX 650 ; N u1D40A ; B 30 0 672 671 ;
-C 83 ; WX 543 ; N u1D40B ; B 27 0 532 671 ;
-C 84 ; WX 883 ; N u1D40C ; B 25 0 863 671 ;
-C 85 ; WX 727 ; N u1D40D ; B 25 0 710 671 ;
-C 86 ; WX 752 ; N u1D40E ; B 41 -16 717 686 ;
-C 87 ; WX 587 ; N u1D40F ; B 25 0 568 671 ;
-C 88 ; WX 752 ; N u1D410 ; B 39 -178 720 687 ;
-C 89 ; WX 671 ; N u1D411 ; B 31 -7 692 671 ;
-C 90 ; WX 568 ; N u1D412 ; B 59 -11 517 683 ;
-C 91 ; WX 603 ; N u1D413 ; B 16 0 593 671 ;
-C 92 ; WX 705 ; N u1D414 ; B 20 -12 694 671 ;
-C 93 ; WX 635 ; N u1D415 ; B -21 -2 660 671 ;
-C 94 ; WX 946 ; N u1D416 ; B 2 0 944 671 ;
-C 95 ; WX 637 ; N u1D417 ; B 0 0 644 671 ;
-C 96 ; WX 610 ; N u1D418 ; B -11 0 627 671 ;
-C 97 ; WX 592 ; N u1D419 ; B 44 0 550 671 ;
-C 98 ; WX 544 ; N u1D41A ; B 40 -9 534 499 ;
-C 99 ; WX 577 ; N u1D41B ; B 9 -1 547 739 ;
-C 100 ; WX 476 ; N u1D41C ; B 35 -8 464 497 ;
-C 101 ; WX 596 ; N u1D41D ; B 37 -9 576 739 ;
-C 102 ; WX 524 ; N u1D41E ; B 37 -9 492 500 ;
-C 103 ; WX 341 ; N u1D41F ; B 30 0 412 743 ;
-C 104 ; WX 551 ; N u1D420 ; B 34 -217 555 497 ;
-C 105 ; WX 597 ; N u1D421 ; B 16 0 586 739 ;
-C 106 ; WX 305 ; N u1D422 ; B 30 0 292 724 ;
-C 107 ; WX 297 ; N u1D423 ; B -80 -214 242 724 ;
-C 108 ; WX 553 ; N u1D424 ; B 18 0 571 739 ;
-C 109 ; WX 304 ; N u1D425 ; B 23 0 291 739 ;
-C 110 ; WX 892 ; N u1D426 ; B 31 0 883 500 ;
-C 111 ; WX 605 ; N u1D427 ; B 28 0 593 498 ;
-C 112 ; WX 577 ; N u1D428 ; B 37 -8 547 499 ;
-C 113 ; WX 591 ; N u1D429 ; B 22 -219 560 499 ;
-C 114 ; WX 575 ; N u1D42A ; B 37 -218 571 499 ;
-C 115 ; WX 421 ; N u1D42B ; B 24 0 420 498 ;
-C 116 ; WX 447 ; N u1D42C ; B 41 -11 410 500 ;
-C 117 ; WX 358 ; N u1D42D ; B 19 -5 356 598 ;
-C 118 ; WX 600 ; N u1D42E ; B 23 -9 582 499 ;
-C 119 ; WX 513 ; N u1D42F ; B -6 0 534 487 ;
-C 120 ; WX 799 ; N u1D430 ; B -1 0 811 487 ;
-C 121 ; WX 531 ; N u1D431 ; B 11 0 531 487 ;
-C 122 ; WX 515 ; N u1D432 ; B -4 -219 536 486 ;
-C 123 ; WX 495 ; N u1D433 ; B 46 0 465 486 ;
+C 53 ; WX 221 ; N uni0300 ; B 0 552 221 742 ;
+C 54 ; WX 221 ; N uni0301 ; B 0 552 221 742 ;
+C 55 ; WX 308 ; N uni0302 ; B 0 552 308 742 ;
+C 56 ; WX 324 ; N uni0303 ; B 0 576 324 716 ;
+C 57 ; WX 331 ; N uni0304 ; B 0 604 331 675 ;
+C 58 ; WX 305 ; N uni0306 ; B 0 567 305 719 ;
+C 59 ; WX 130 ; N uni0307 ; B 0 579 130 713 ;
+C 60 ; WX 333 ; N uni0308 ; B 0 579 333 710 ;
+C 61 ; WX 237 ; N uni030A ; B 0 546 237 783 ;
+C 62 ; WX 308 ; N uni030C ; B 0 551 308 741 ;
+C 63 ; WX 539 ; N uni20DB ; B 0 579 539 710 ;
+C 64 ; WX 745 ; N uni20DC ; B 0 579 745 710 ;
+C 65 ; WX 329 ; N degree ; B 27 434 303 710 ;
+C 66 ; WX 305 ; N u1D6A4.bup ; B 30 0 292 496 ;
+C 67 ; WX 297 ; N u1D6A5.bup ; B -80 -214 231 496 ;
+C 68 ; WX 651 ; N u1D400 ; B -11 0 669 678 ;
+C 69 ; WX 628 ; N u1D401 ; B 29 0 590 671 ;
+C 70 ; WX 638 ; N u1D402 ; B 41 -12 601 683 ;
+C 71 ; WX 716 ; N u1D403 ; B 29 0 681 671 ;
+C 72 ; WX 596 ; N u1D404 ; B 29 0 566 671 ;
+C 73 ; WX 552 ; N u1D405 ; B 26 0 528 671 ;
+C 74 ; WX 710 ; N u1D406 ; B 40 -12 690 682 ;
+C 75 ; WX 760 ; N u1D407 ; B 30 0 733 671 ;
+C 76 ; WX 354 ; N u1D408 ; B 30 0 329 671 ;
+C 77 ; WX 465 ; N u1D409 ; B 12 -12 464 671 ;
+C 78 ; WX 650 ; N u1D40A ; B 30 0 672 671 ;
+C 79 ; WX 543 ; N u1D40B ; B 27 0 532 671 ;
+C 80 ; WX 883 ; N u1D40C ; B 25 0 863 671 ;
+C 81 ; WX 727 ; N u1D40D ; B 25 0 710 671 ;
+C 82 ; WX 752 ; N u1D40E ; B 41 -16 717 686 ;
+C 83 ; WX 587 ; N u1D40F ; B 25 0 568 671 ;
+C 84 ; WX 752 ; N u1D410 ; B 39 -178 720 687 ;
+C 85 ; WX 671 ; N u1D411 ; B 31 -7 692 671 ;
+C 86 ; WX 568 ; N u1D412 ; B 59 -11 517 683 ;
+C 87 ; WX 603 ; N u1D413 ; B 16 0 593 671 ;
+C 88 ; WX 705 ; N u1D414 ; B 20 -12 694 671 ;
+C 89 ; WX 635 ; N u1D415 ; B -21 -2 660 671 ;
+C 90 ; WX 946 ; N u1D416 ; B 2 0 944 671 ;
+C 91 ; WX 637 ; N u1D417 ; B 0 0 644 671 ;
+C 92 ; WX 610 ; N u1D418 ; B -11 0 627 671 ;
+C 93 ; WX 592 ; N u1D419 ; B 44 0 550 671 ;
+C 94 ; WX 544 ; N u1D41A ; B 40 -9 534 499 ;
+C 95 ; WX 577 ; N u1D41B ; B 9 -1 547 739 ;
+C 96 ; WX 476 ; N u1D41C ; B 35 -8 464 497 ;
+C 97 ; WX 596 ; N u1D41D ; B 37 -9 576 739 ;
+C 98 ; WX 524 ; N u1D41E ; B 37 -9 492 500 ;
+C 99 ; WX 341 ; N u1D41F ; B 30 0 412 743 ;
+C 100 ; WX 551 ; N u1D420 ; B 34 -217 555 497 ;
+C 101 ; WX 597 ; N u1D421 ; B 16 0 586 739 ;
+C 102 ; WX 305 ; N u1D422 ; B 30 0 292 724 ;
+C 103 ; WX 297 ; N u1D423 ; B -80 -214 242 724 ;
+C 104 ; WX 553 ; N u1D424 ; B 18 0 571 739 ;
+C 105 ; WX 304 ; N u1D425 ; B 23 0 291 739 ;
+C 106 ; WX 892 ; N u1D426 ; B 31 0 883 500 ;
+C 107 ; WX 605 ; N u1D427 ; B 28 0 593 498 ;
+C 108 ; WX 577 ; N u1D428 ; B 37 -8 547 499 ;
+C 109 ; WX 591 ; N u1D429 ; B 22 -219 560 499 ;
+C 110 ; WX 575 ; N u1D42A ; B 37 -218 571 499 ;
+C 111 ; WX 421 ; N u1D42B ; B 24 0 420 498 ;
+C 112 ; WX 447 ; N u1D42C ; B 41 -11 410 500 ;
+C 113 ; WX 358 ; N u1D42D ; B 19 -5 356 598 ;
+C 114 ; WX 600 ; N u1D42E ; B 23 -9 582 499 ;
+C 115 ; WX 513 ; N u1D42F ; B -6 0 534 487 ;
+C 116 ; WX 799 ; N u1D430 ; B -1 0 811 487 ;
+C 117 ; WX 531 ; N u1D431 ; B 11 0 531 487 ;
+C 118 ; WX 515 ; N u1D432 ; B -4 -219 536 486 ;
+C 119 ; WX 495 ; N u1D433 ; B 46 0 465 486 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/xcharter/afm/XCharterMathMI.afm b/fonts/xcharter/afm/XCharterMathMI.afm
index dfb03b5768..753ef8e018 100644
--- a/fonts/xcharter/afm/XCharterMathMI.afm
+++ b/fonts/xcharter/afm/XCharterMathMI.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20170730
-Comment Creation Date: Fri May 31 14:18:47 2019
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 19 17:02:25 2019
FontName XCharterMathMI
FullName XCharter Math Italic
FamilyName XCharterMath
@@ -14,8 +14,7 @@ UnderlineThickness 50
Version 001.000
EncodingScheme FontSpecific
FontBBox -151 -223 951 898
-XHeight 482
-StartCharMetrics 125
+StartCharMetrics 167
C 0 ; WX 329 ; N degree ; B 27 434 303 710 ;
C 1 ; WX 515 ; N uni019B ; B -10 -7 505 744 ;
C 2 ; WX 586 ; N uni01B5 ; B 45 0 539 671 ;
@@ -118,7 +117,7 @@ C 98 ; WX 553 ; N u1D709 ; B 35 -222 513 744 ;
C 99 ; WX 671 ; N u1D70B ; B 32 -11 617 481 ;
C 100 ; WX 576 ; N u1D70C ; B -17 -218 521 492 ;
C 101 ; WX 521 ; N u1D70D ; B 35 -222 476 492 ;
-C 102 ; WX 632 ; N u1D70E ; B 40 -11 582 481 ;
+C 102 ; WX 572 ; N u1D70E ; B 40 -11 582 481 ;
C 103 ; WX 559 ; N u1D70F ; B 20 -11 509 481 ;
C 104 ; WX 548 ; N u1D710 ; B 30 -11 501 491 ;
C 105 ; WX 779 ; N u1D711 ; B 50 -218 724 491 ;
@@ -135,11 +134,53 @@ C 115 ; WX 901 ; N u1D71B ; B 30 -11 851 481 ;
C 116 ; WX 515 ; N uni019B.alt ; B -10 -7 505 744 ;
C 117 ; WX 551 ; N uni210F ; B 23 -6 505 739 ;
C 118 ; WX 551 ; N uni210F.alt ; B 23 -6 505 736 ;
-C 119 ; WX 551 ; N NameMe.53 ; B 23 -6 505 736 ;
-C 120 ; WX 595 ; N NameMe.54 ; B 50 -7 565 744 ;
-C 121 ; WX 287 ; N dotlessi ; B 33 -7 254 482 ;
-C 122 ; WX 269 ; N dotlessj ; B -128 -216 213 482 ;
+C 120 ; WX 595 ; N uni019B.ital ; B 50 -7 565 744 ;
+C 121 ; WX 287 ; N u1D6A4 ; B 33 -7 254 482 ;
+C 122 ; WX 269 ; N u1D6A5 ; B -128 -216 213 482 ;
C 123 ; WX 499 ; N u1D463.alt ; B 15 0 457 484 ;
C 124 ; WX 743 ; N u1D464.alt ; B 15 0 703 485 ;
+C 125 ; WX 572 ; N zero.oldstyle ; B 48 -10 522 497 ;
+C 126 ; WX 396 ; N one.oldstyle ; B 46 0 349 503 ;
+C 127 ; WX 429 ; N two.oldstyle ; B 38 0 389 502 ;
+C 128 ; WX 511 ; N three.oldstyle ; B 40 -149 456 491 ;
+C 129 ; WX 516 ; N four.oldstyle ; B 21 -151 483 493 ;
+C 130 ; WX 497 ; N five.oldstyle ; B 35 -150 444 484 ;
+C 131 ; WX 533 ; N six.oldstyle ; B 46 -11 487 660 ;
+C 132 ; WX 483 ; N seven.oldstyle ; B 45 -154 459 482 ;
+C 133 ; WX 538 ; N eight.oldstyle ; B 52 -15 486 643 ;
+C 134 ; WX 539 ; N nine.oldstyle ; B 56 -179 481 487 ;
+C 136 ; WX 556 ; N zero ; B 41 -12 515 683 ;
+C 137 ; WX 556 ; N one ; B 94 0 459 683 ;
+C 138 ; WX 556 ; N two ; B 42 0 505 683 ;
+C 139 ; WX 556 ; N three ; B 41 -11 492 683 ;
+C 140 ; WX 556 ; N four ; B 27 -37 539 677 ;
+C 141 ; WX 556 ; N five ; B 50 -9 489 671 ;
+C 142 ; WX 556 ; N six ; B 50 -12 525 714 ;
+C 143 ; WX 556 ; N seven ; B 71 -37 531 671 ;
+C 144 ; WX 556 ; N eight ; B 44 -16 506 685 ;
+C 145 ; WX 556 ; N nine ; B 43 -52 512 681 ;
+C 146 ; WX 454 ; N u1D454.alt ; B -1 -207 478 439 ;
+C 147 ; WX 278 ; N period ; B 75 -9 202 118 ;
+C 148 ; WX 278 ; N comma ; B 39 -169 208 106 ;
+C 149 ; WX 964 ; N uni21BC ; B 62 229 902 462 ;
+C 150 ; WX 964 ; N uni21BD ; B 62 52 902 285 ;
+C 151 ; WX 964 ; N uni21C0 ; B 62 229 902 462 ;
+C 152 ; WX 964 ; N uni21C1 ; B 62 52 902 285 ;
+C 153 ; WX 319 ; N uni21A9 ; B 62 229 257 489 ;
+C 154 ; WX 319 ; N uni21AA ; B 62 229 257 489 ;
+C 155 ; WX 418 ; N uni22B2 ; B 20 65 398 446 ;
+C 156 ; WX 418 ; N uni22B3 ; B 20 68 398 449 ;
+C 157 ; WX 636 ; N less ; B 62 6 574 508 ;
+C 158 ; WX 441 ; N slash ; B 62 -161 379 678 ;
+C 159 ; WX 636 ; N greater ; B 62 6 574 508 ;
+C 160 ; WX 672 ; N uni2605 ; B 44 -6 628 550 ;
+C 161 ; WX 415 ; N uni266D ; B 66 -21 368 730 ;
+C 162 ; WX 377 ; N uni266E ; B 60 -214 330 712 ;
+C 163 ; WX 402 ; N uni266F ; B 50 -197 365 762 ;
+C 164 ; WX 964 ; N uni2323 ; B 62 101 902 342 ;
+C 165 ; WX 964 ; N uni2322 ; B 62 158 902 399 ;
+C 166 ; WX 624 ; N uni2118 ; B 55 -193 586 479 ;
+C 167 ; WX 486 ; N uni20D7 ; B 170 456 594 745 ;
+C 168 ; WX 260 ; N uni2040 ; B 222 492 613 650 ;
EndCharMetrics
EndFontMetrics
diff --git a/fonts/xcharter/afm/XCharterMathRM.afm b/fonts/xcharter/afm/XCharterMathRM.afm
index 0a0240bb88..41b8a3bc52 100644
--- a/fonts/xcharter/afm/XCharterMathRM.afm
+++ b/fonts/xcharter/afm/XCharterMathRM.afm
@@ -1,6 +1,6 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20170730
-Comment Creation Date: Wed Jun 5 21:45:38 2019
+Comment Generated by FontForge 20190801
+Comment Creation Date: Thu Sep 19 12:20:57 2019
FontName XCharterMathRM
FullName XCharter Math Roman
FamilyName XCharterMath
@@ -18,7 +18,7 @@ CapHeight 671
XHeight 481
Ascender 618
Descender -218
-StartCharMetrics 69
+StartCharMetrics 68
C 0 ; WX 532 ; N uni0393 ; B 15 0 495 671 ;
C 1 ; WX 644 ; N uni0394 ; B 47 0 597 679 ;
C 2 ; WX 714 ; N uni0398 ; B 34 -16 680 688 ;
@@ -74,7 +74,6 @@ C 51 ; WX 774 ; N uni2127 ; B 29 0 745 688 ;
C 52 ; WX 598 ; N uni2107 ; B 38 -14 576 687 ;
C 53 ; WX 280 ; N u1D6A4.up ; B 35 0 260 486 ;
C 54 ; WX 266 ; N u1D6A5.up ; B -78 -218 192 486 ;
-C 55 ; WX 521 ; N NameMe.55 ; B 98 392 386 748 ;
C 56 ; WX 196 ; N uni0300 ; B 0 546 196 736 ;
C 57 ; WX 196 ; N uni0301 ; B 0 546 196 736 ;
C 58 ; WX 284 ; N uni0302 ; B 0 546 284 736 ;
diff --git a/fonts/xcharter/doc/xcharter-doc.pdf b/fonts/xcharter/doc/xcharter-doc.pdf
index c0306c4887..eb28315703 100644
--- a/fonts/xcharter/doc/xcharter-doc.pdf
+++ b/fonts/xcharter/doc/xcharter-doc.pdf
Binary files differ
diff --git a/fonts/xcharter/doc/xcharter-doc.tex b/fonts/xcharter/doc/xcharter-doc.tex
index 6663edf8b5..99b0e4b360 100644
--- a/fonts/xcharter/doc/xcharter-doc.tex
+++ b/fonts/xcharter/doc/xcharter-doc.tex
@@ -1,9 +1,16 @@
% !TEX TS-program = pdflatexmk
\documentclass[11pt]{article}
+\pdfcompresslevel=0
+\pdfgentounicode=1
+\input glyphtounicode.tex
+\InputIfFileExists{glyphtounicode-cmr.tex}{}{}
+\InputIfFileExists{glyphtounicode-ntx.tex}{}{}
+\usepackage[a-1b]{pdfx} % version 1.6.4 or higher
\usepackage[margin=1in]{geometry}
\usepackage[parfill]{parskip}
\usepackage{graphicx}
\pdfmapfile{=XCharter.map}
+\pdfmapfile{=newtx.map}
\usepackage[scaled=1.03,varqu,varl]{inconsolata}
\usepackage[type1]{cabin}
\usepackage[scaled=.98,osf]{XCharter}
@@ -78,7 +85,7 @@ Three math packages seem to provide reasonable companions for \textsf{XCharter}.
\usepackage[scaled=.98,sups,osf]{XCharter}% lining figures in math, osf in text
\usepackage[scaled=1.04,varqu,varl]{inconsolata}% inconsolata typewriter
\usepackage[type1]{cabin}% sans serif
-\usepackage[libertine,vvarbb,scaled=1.07]{newtxmath}
+\usepackage[libertine,vvarbb,scaled=1.05]{newtxmath}
\usepackage[cal=boondoxo]{mathalfa}
\linespread{1.04}
\end{verbatim}
@@ -88,7 +95,7 @@ Three math packages seem to provide reasonable companions for \textsf{XCharter}.
\usepackage[scaled=.98,sups,osf]{XCharter}% lining figures in math, osf in text
\usepackage[scaled=1.04,varqu,varl]{inconsolata}% inconsolata typewriter
\usepackage[type1]{cabin}% sans serif
-\usepackage[charter,vvarbb,scaled=1.07]{newtxmath}
+\usepackage[charter,vvarbb,scaled=1.05]{newtxmath}
\usepackage[cal=boondoxo]{mathalfa}
\linespread{1.04}
\end{verbatim}
@@ -98,11 +105,30 @@ Three math packages seem to provide reasonable companions for \textsf{XCharter}.
\usepackage[scaled=.98,sups,osf]{XCharter}% osf in text, lining figures in math
\usepackage[scaled=1.04,varqu,varl]{inconsolata}% inconsolata typewriter
\usepackage[type1]{cabin}% sans serif
-\usepackage[charter,vvarbb,scaled=1.07]{newtxmath}
+\usepackage[charter,vvarbb,scaled=1.05]{newtxmath}
+\usepackage[cal=boondoxo]{mathalfa}
+\linespread{1.04}
+\end{verbatim}
+
+\textsc{Example 5:}
+\begin{verbatim}
+% Adds instructions to produce a pdf conforming tp PDF/A-1b
+\pdfcompresslevel=0
+\pdfgentounicode=1
+\input glyphtounicode.tex
+\InputIfFileExists{glyphtounicode-cmr.tex}{}{}
+\InputIfFileExists{glyphtounicode-ntx.tex}{}{}
+\usepackage[a-1b]{pdfx} % version 1.6.4 or higher
+\usepackage[<specify babel languages>]{babel}% load before XCharter
+\usepackage[scaled=.98,sups,osf]{XCharter}% osf in text, lining figures in math
+\usepackage[scaled=1.04,varqu,varl]{inconsolata}% inconsolata typewriter
+\usepackage[type1]{cabin}% sans serif
+\usepackage[charter,vvarbb,scaled=1.05]{newtxmath}
\usepackage[cal=boondoxo]{mathalfa}
\linespread{1.04}
\end{verbatim}
+
Here is a short sample based on the preamble of \textsc{Example 3}:\\[4pt]
\def\Pr{\ensuremath{\mathbb{P}}}
\def\rmd{\mathrm{d}}
@@ -159,7 +185,7 @@ and variance $1$ on a probability space $(\Omega,\mathcal{F},\Pr)$. Then}
\testlowgreekiu\testlowgreekiiu\testlowgreekiiiu}
\def\test#1{\; #1}
-\newpage
+%\newpage
\textbf{Greek letters in version 1.11:} \[\testupgreek\]
\[\testupgreekit\]
\[\testlowgreek\]
diff --git a/fonts/xcharter/map/XCharter.map b/fonts/xcharter/map/XCharter.map
index 156562c5a9..1ec4befdb9 100644
--- a/fonts/xcharter/map/XCharter.map
+++ b/fonts/xcharter/map/XCharter.map
@@ -297,3 +297,4 @@ XCharter-Italic-tlf-ot2 XCharter-Italic " xcharterOT2enc ReEncodeFont " <[xchart
XCharter-Bold-tlf-ot2 XCharter-Bold " xcharterOT2enc ReEncodeFont " <[xcharter-ot2.enc <XCharter-Bold.pfb
XCharter-BoldSlanted-tlf-ot2 XCharter-BoldSlanted " xcharterOT2enc ReEncodeFont " <[xcharter-ot2.enc <XCharter-BoldSlanted.pfb
XCharter-BoldItalic-tlf-ot2 XCharter-BoldItalic " xcharterOT2enc ReEncodeFont " <[xcharter-ot2.enc <XCharter-BoldItalic.pfb
+
diff --git a/fonts/xcharter/tex/xcharter.subs b/fonts/xcharter/tex/xcharter.subs
new file mode 100644
index 0000000000..e88ea8eb7c
--- /dev/null
+++ b/fonts/xcharter/tex/xcharter.subs
@@ -0,0 +1,17 @@
+{f}{-2}
+{j}{-2}
+{p}{-1.5}
+{y}{-1.5}
+{A}{-1.5}
+{B}{-1}
+{D}{-1}
+{H}{-1}
+{I}{-1}
+{K}{-1}
+{L}{-1}
+{M}{-1}
+{N}{-0.5}
+{P}{-1}
+{X}{-1}
+{\rho}{-1}
+{\beta}{-1} \ No newline at end of file
diff --git a/fonts/xcharter/tfm/XCharterMathBMI.tfm b/fonts/xcharter/tfm/XCharterMathBMI.tfm
index e20f19b665..7ee126eb63 100644
--- a/fonts/xcharter/tfm/XCharterMathBMI.tfm
+++ b/fonts/xcharter/tfm/XCharterMathBMI.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/XCharterMathBRM.tfm b/fonts/xcharter/tfm/XCharterMathBRM.tfm
index 15315aaf2b..5523dd7505 100644
--- a/fonts/xcharter/tfm/XCharterMathBRM.tfm
+++ b/fonts/xcharter/tfm/XCharterMathBRM.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/XCharterMathMI.tfm b/fonts/xcharter/tfm/XCharterMathMI.tfm
index cae173eeef..43a0829987 100644
--- a/fonts/xcharter/tfm/XCharterMathMI.tfm
+++ b/fonts/xcharter/tfm/XCharterMathMI.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/XCharterMathRM.tfm b/fonts/xcharter/tfm/XCharterMathRM.tfm
index 49aa172c88..6f6abd7159 100644
--- a/fonts/xcharter/tfm/XCharterMathRM.tfm
+++ b/fonts/xcharter/tfm/XCharterMathRM.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/zchbmi.tfm b/fonts/xcharter/tfm/zchbmi.tfm
index 1ca5bc491e..f9365b3389 100644
--- a/fonts/xcharter/tfm/zchbmi.tfm
+++ b/fonts/xcharter/tfm/zchbmi.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/zchbmi0.tfm b/fonts/xcharter/tfm/zchbmi0.tfm
index 9b925ade2d..2d670bcca2 100644
--- a/fonts/xcharter/tfm/zchbmi0.tfm
+++ b/fonts/xcharter/tfm/zchbmi0.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/zchbmia.tfm b/fonts/xcharter/tfm/zchbmia.tfm
index 6594459c6f..a517f0d632 100644
--- a/fonts/xcharter/tfm/zchbmia.tfm
+++ b/fonts/xcharter/tfm/zchbmia.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/zchmi.tfm b/fonts/xcharter/tfm/zchmi.tfm
index 1589e15632..78e95e7bca 100644
--- a/fonts/xcharter/tfm/zchmi.tfm
+++ b/fonts/xcharter/tfm/zchmi.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/zchmi0.tfm b/fonts/xcharter/tfm/zchmi0.tfm
index ef795c93e7..fa8c928b4b 100644
--- a/fonts/xcharter/tfm/zchmi0.tfm
+++ b/fonts/xcharter/tfm/zchmi0.tfm
Binary files differ
diff --git a/fonts/xcharter/tfm/zchmia.tfm b/fonts/xcharter/tfm/zchmia.tfm
index b2ad2fc375..8789cf6cd2 100644
--- a/fonts/xcharter/tfm/zchmia.tfm
+++ b/fonts/xcharter/tfm/zchmia.tfm
Binary files differ
diff --git a/fonts/xcharter/type1/XCharterMathBMI.pfb b/fonts/xcharter/type1/XCharterMathBMI.pfb
index 0d0ab2f657..67e25755df 100644
--- a/fonts/xcharter/type1/XCharterMathBMI.pfb
+++ b/fonts/xcharter/type1/XCharterMathBMI.pfb
Binary files differ
diff --git a/fonts/xcharter/type1/XCharterMathBRM.pfb b/fonts/xcharter/type1/XCharterMathBRM.pfb
index e33f51e916..fa7a778e26 100644
--- a/fonts/xcharter/type1/XCharterMathBRM.pfb
+++ b/fonts/xcharter/type1/XCharterMathBRM.pfb
Binary files differ
diff --git a/fonts/xcharter/type1/XCharterMathMI.pfb b/fonts/xcharter/type1/XCharterMathMI.pfb
index 86fe991a79..60c80615f9 100644
--- a/fonts/xcharter/type1/XCharterMathMI.pfb
+++ b/fonts/xcharter/type1/XCharterMathMI.pfb
Binary files differ
diff --git a/fonts/xcharter/type1/XCharterMathRM.pfb b/fonts/xcharter/type1/XCharterMathRM.pfb
index ffeee83b8d..c3d6307042 100644
--- a/fonts/xcharter/type1/XCharterMathRM.pfb
+++ b/fonts/xcharter/type1/XCharterMathRM.pfb
Binary files differ
diff --git a/fonts/xcharter/vf/zchbmi.vf b/fonts/xcharter/vf/zchbmi.vf
index feb339f77c..3c25c85f21 100644
--- a/fonts/xcharter/vf/zchbmi.vf
+++ b/fonts/xcharter/vf/zchbmi.vf
Binary files differ
diff --git a/fonts/xcharter/vf/zchbmi0.vf b/fonts/xcharter/vf/zchbmi0.vf
index 5ee3c82920..9baac871a0 100644
--- a/fonts/xcharter/vf/zchbmi0.vf
+++ b/fonts/xcharter/vf/zchbmi0.vf
Binary files differ
diff --git a/fonts/xcharter/vf/zchbmia.vf b/fonts/xcharter/vf/zchbmia.vf
index ba917a036f..44b7c527ca 100644
--- a/fonts/xcharter/vf/zchbmia.vf
+++ b/fonts/xcharter/vf/zchbmia.vf
Binary files differ
diff --git a/fonts/xcharter/vf/zchmi.vf b/fonts/xcharter/vf/zchmi.vf
index e3bdab71ad..99db9515eb 100644
--- a/fonts/xcharter/vf/zchmi.vf
+++ b/fonts/xcharter/vf/zchmi.vf
Binary files differ
diff --git a/fonts/xcharter/vf/zchmi0.vf b/fonts/xcharter/vf/zchmi0.vf
index 4dad9f7dc7..fe74e663c0 100644
--- a/fonts/xcharter/vf/zchmi0.vf
+++ b/fonts/xcharter/vf/zchmi0.vf
Binary files differ
diff --git a/fonts/xcharter/vf/zchmia.vf b/fonts/xcharter/vf/zchmia.vf
index 26cb44401f..40d7b81809 100644
--- a/fonts/xcharter/vf/zchmia.vf
+++ b/fonts/xcharter/vf/zchmia.vf
Binary files differ
diff --git a/graphics/asymptote/ChangeLog b/graphics/asymptote/ChangeLog
index e329086041..0730b26ab4 100644
--- a/graphics/asymptote/ChangeLog
+++ b/graphics/asymptote/ChangeLog
@@ -1,3 +1,1395 @@
+commit 1c26011ea8a7fdfba9725ae52ac308970bf2df24
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 29 03:04:36 2019 -0600
+
+ Silence Apple's OpenGL deprecation warning.
+
+commit bd6cef0ac6a2e4bce49c92a8ecc792473286b7d9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 29 03:02:07 2019 -0600
+
+ Silence Apple's OpenGL deprecation warning.
+
+commit 908bfa8c1114af3098367b8a87866f3a08951d02
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 29 02:41:34 2019 -0600
+
+ If lighting is enabled, ignore specified vertex colors for PRC. To override
+ this backwards incompatibility and recover the previous behaviour,
+ manually disable lighting when drawing a surface s:
+ draw(s,prc() ? nolight : currentlight);
+
+commit 5beec3197c5692b45dfe487d55a1d6eaddeb0a6f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 29 01:22:14 2019 -0600
+
+ Ignore null surfaces; restore example.
+
+commit 7e2cf9efabb7506649c401ece5f80c4178177b73
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 28 23:09:43 2019 -0600
+
+ Port to MSDOS.
+
+commit bcf31e3f3e9ed3fb876312f793d89543f2e70d17
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 28 02:42:53 2019 -0600
+
+ Install webgl files; clean up GUI files on uninstall.
+
+commit 1b6150e70bc601c65af304d12f286cc64363557f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 28 01:54:30 2019 -0600
+
+ Document WebGL interface.
+
+commit 8c94986e48dcb1d4ec88ff7c0c87f4ac4d5757d3
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 28 00:13:44 2019 -0600
+
+ Use aspect ratio for fitting; adjust arcball radius to account for viewportmargin; make interaction constants asy settings.
+
+commit 5c5ce0424f990db9fa8da644bab334b4b74cbe0c
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 28 00:13:16 2019 -0600
+
+ Update asygl.
+
+commit 3d1242fc2f31aac1d4e5e297feb403b8e1ca1a51
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 27 18:12:02 2019 -0600
+
+ Define absolute in gl.js.
+
+commit 77deba7f33213ae0cba2c34b0d26878d0baf28ce
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 27 18:10:49 2019 -0600
+
+ Update asygl.
+
+commit 9c4690bf1114f9d0526c72619826176c74ad82da
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 27 17:47:01 2019 -0600
+
+ Reduce size of asygl by including only required subset of gl-matrix.
+
+commit 1208b33104c5b5b7a2a6fc3f3ad9165dfea92909
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 27 17:43:13 2019 -0600
+
+ Update asygl.
+
+commit 77206a8af882bd1f7388df810c9c9c30e6b56f06
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 27 13:04:09 2019 -0600
+
+ Expand webgl viewport to fit window; remove webglscale; rename devicepixel to absolute; add WindowTrim.
+
+commit 0ca3d60f01986f0ea89ccfd328bf361f29d73680
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 27 13:02:49 2019 -0600
+
+ Update asygl.
+
+commit 34977d2b4808156d276bcbb976ed9c9ec5a8b97b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 27 02:55:05 2019 -0600
+
+ Add webglscale and devicepixels options; implement shrink/expand viewport keys.
+
+commit 1ddada67255f9e61349bb5d7f2ce667108bba9db
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 27 02:54:17 2019 -0600
+
+ Update asygl.
+
+commit 9b0f5a6ae6cd37d337ae2637d1c71d289f239c15
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 26 03:32:37 2019 -0600
+
+ Avoid dvipdf dependency for building documentation.
+
+commit ff4b38c9e101ece6d2c6ba21e93bc1f7d8c15364
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 26 03:10:01 2019 -0600
+
+ Support --disable-gl again; ignore settings.render for WebGL output; account for devicePixelRatio; increase default viewportmargin to 0.5.
+
+commit ff25ef4b12699218459b62273c775b421f8f0fe9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 26 03:06:38 2019 -0600
+
+ Update asygl.
+
+commit 19528ced5dec8cdb502fcb63ffa6ae0b457b2f04
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 25 22:52:43 2019 -0600
+
+ Replace arcball with simpler version backported from webgl; fix RotateX and Y.
+
+commit b1f630df463467db272330d9136915681bf1e30c
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 25 21:06:36 2019 -0600
+
+ Fix segmentation fault.
+
+commit b232cc52137473a9db16f56c2d275c96b9d7f748
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 25 19:22:57 2019 -0600
+
+ Change rotation matrix back to 4x4.
+
+commit 848376cb50be96143325607f05e0d7a081f0867c
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 25 11:45:33 2019 -0600
+
+ Move webgl files to base directory.
+
+commit 0224793b9a347e5d2ca7985e76783bdee2bb598b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 25 11:15:59 2019 -0600
+
+ Fix vector length in normMouse; improve build-asygl.
+
+commit 8388736d5dffa20d4a10886de99a08a3e18dc6b5
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 25 03:32:59 2019 -0600
+
+ Add offline WebGL option.
+
+commit 37425ee28f676e2da11d9be7052b0dab28ea4c36
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 25 03:03:22 2019 -0600
+
+ Combine javascript libaries for faster loading; remove obsolete files;
+ add asygl environment variable to specify asygl library.
+
+commit 9e815e6e659fa873ae5b665566ae3691c8caa57f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 25 02:59:36 2019 -0600
+
+ Add LGPL license; avoid multiple matrix creations; simplify arcball.
+
+commit 0f30a12889852d3d9dc83437ed0e19d048128230
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 24 14:48:39 2019 -0600
+
+ Simplify webgl output of indexed triangles.
+
+commit 994c14bb4ac4c6bc00b986b5297c267cdb98bb92
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 24 10:43:25 2019 -0600
+
+ By default, use vertex indices for normal and color indices of indexed triangles.
+
+commit f5c79f97e5dc64a3183e1e6fd0a8f2a7417c1f7b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 24 01:06:04 2019 -0600
+
+ Include html comments.
+
+commit ca37df6f334784f278ac0edf708670c2bdcf49b9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 24 00:12:45 2019 -0600
+
+ Add viewportmargin setting.
+
+commit e2aca7045e65c11e4a1250f99eb9002803ebcdf9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 23:20:01 2019 -0600
+
+ Add missing offscreen checks.
+
+commit 6defe942af805b4ff7659f56ea43784a5193ef7b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 23:03:31 2019 -0600
+
+ Simplify code.
+
+commit 6fe7fc69fe8e49eed45b6acaa59bc2b1dee7ddc2
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 22:48:09 2019 -0600
+
+ Add offscreen detection to indexed triangles.
+
+commit a8bc5263f72d87ca005d3d97f2a13037770b56ee
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 21:54:04 2019 -0600
+
+ Simplify code.
+
+commit 25b87d0dedc04180e36678963f59d6d0ed075cd2
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 21:37:21 2019 -0600
+
+ Fix tiling.
+
+commit 1c442690870ffe6499012f799b97a41f6f6a8efc
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 21:23:17 2019 -0600
+
+ Implement webgl indexed triangles.
+
+commit a05450337791d59966d12fedecb19e73bebc2415
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 03:11:35 2019 -0600
+
+ Implement faster WebGL and OpenGL rendering, with improved offscreen detection.
+
+commit 07ee50be15e9968de2e1a6f70c00392785bb5028
+Merge: 4dcd549b 5e911430
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 01:27:26 2019 -0600
+
+ Merge branch 'master' into webgl.
+
+commit 5e91143045a807b6c6ba60a125b4220dad6a65bd
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 23 01:11:37 2019 -0600
+
+ Fix default value of file word() and documentation.
+
+commit 4dcd549b91ff8afe8855ddc20e6756b1e9c9d42e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 20 23:01:28 2019 -0600
+
+ Simplify code.
+
+commit fe2cab3b8086e3de638efc1008f69325f6bac8de
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 20 22:57:39 2019 -0600
+
+ Minor optimization.
+
+commit 6c30c8662563b66a724a1a0dddae20e60bd497ad
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 20 08:11:05 2019 -0600
+
+ Don't test for pow and sqrt which are sometimes implemented in hardware.
+
+commit 150d007d0a0c9e5fc40fd85f660a0377aab67b1f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 19 10:19:21 2019 -0600
+
+ Simplify code.
+
+commit 902fc9bf7e01b270492a2f51260646b3fdef06f1
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 19 09:32:18 2019 -0600
+
+ Optimize bbox2; rename norender to remesh and add missing return value.
+
+commit 077d8fd4e631da44cc93fb4a8c94f55841989dac
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 19 02:49:28 2019 -0600
+
+ Fix offscreen detection; discard rendered data once it goes offscreen.
+
+commit 49e21b13812931778e1385d82412373723b3b1bf
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 17 23:39:07 2019 -0600
+
+ Shrink nonbillboard material buffer by 7%.
+
+commit 9177fba6a47e79f9e2c21c5f1f76c483e55a4d02
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 16 16:46:26 2019 -0600
+
+ Conditionally view html file.
+
+commit a2bb8be9c68dc825477dd03db772b9a0abbeae02
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 16 16:18:43 2019 -0600
+
+ Optimize bounding box computation.
+
+commit a0f04aa0c2971e89161e6c459829edb0aefdca7d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 16 13:52:35 2019 -0600
+
+ Improve OpenGL straight optimization for curves.
+
+commit 25a04e41dc579c5a2ef66110500aea587abd09b6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 16 13:21:21 2019 -0600
+
+ Fix order of PRC and webgl quad colors.
+
+commit 73b8974d343dc370ec459acf0bc2718165313b71
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 16 00:03:39 2019 -0600
+
+ Optimize offscreen in bezierpatch.h; remove unused code.
+
+commit b9866ef6ab0faa0c713cab7b03fe276257cb5217
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 22:24:41 2019 -0600
+
+ Add interface to html viewer.
+
+commit 24a3e54cd3e06d89869444eb6c8e07487dafe911
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 21:43:45 2019 -0600
+
+ Reformat webgl header and footer.
+
+commit 573369c22e52e2b4d3424ef1e0e8e4607572f7b4
+Merge: e6580bf3 221e1542
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 18:52:46 2019 -0600
+
+ Merge branch 'webgl'.
+
+commit 221e154209664025595ab423df0220649c084b5f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 18:50:45 2019 -0600
+
+ Optimize straight webgl lines.
+
+commit 7b36db5c4d07a7632a613c9652e5480ecaf022cb
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 18:33:14 2019 -0600
+
+ Fix webgl quad normal.
+
+commit 712af1c6a75d2d19d85e8b5a4cd71604bc5feb33
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 18:14:40 2019 -0600
+
+ Add straight optimization to webgl.
+
+commit a33ade59a16fea0df08ee9b7bbc1d06440b0b859
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 16:28:34 2019 -0600
+
+ Implement webgl pixel shader.
+
+commit 75ec09fc0bb7195580b57e40657ec0e00d46064e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 12:20:22 2019 -0600
+
+ Remove duplicate code.
+
+commit e6580bf30d1ecd8f96a4b7e48adfcaa2a5d24fd5
+Merge: f40bd919 cc4115dd
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 15 01:03:28 2019 -0600
+
+ Merge branch 'webgl'.
+
+commit cc4115dd23fd4fb69951d5053ce615551b07cc86
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 23:50:33 2019 -0600
+
+ Pass asy lighting parameters; don't composite canvas with background.
+
+commit f55f0def02b723db059ddc790d29db077986e1ea
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 23:46:31 2019 -0600
+
+ Use 4x4 viewMat again (for correct lighting under rotation).
+
+commit a9146b8722a727d1daa11580609189e2ba3a8bf0
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 18:17:41 2019 -0600
+
+ Fix ViewPosition; use a 3x3 view matrix.
+
+commit 31d49e55e82774285ac015b16f8969579c43d7c3
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 11:09:55 2019 -0600
+
+ Add settings.digits to control default output file precision.
+
+commit bd8cd4877ebb7c73cb83a767721dfc858dfe8d57
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 01:00:33 2019 -0600
+
+ Standardize matrix names.
+
+commit 5ea4aaeae21c21e86535e5d5552a181be7222552
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 00:51:19 2019 -0600
+
+ Replace var by let.
+
+commit a1fdac350066487d3ffd66733ca59ce6dc11f6ea
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 00:49:53 2019 -0600
+
+ Further optimize Split3.
+
+commit a1a7a736a2e5ea3baaf66eec2d4df27984b2ba36
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 00:46:40 2019 -0600
+
+ Optimize split.
+
+commit 8b46c31c8ae3d5d681f49d546e1bc8165ac96f0c
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 14 00:31:23 2019 -0600
+
+ Add webgl support for Bezier curves.
+
+commit 3975ba5416d9708e4c208ef508490571e7bdf985
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 13 17:42:45 2019 -0600
+
+ Detect navigator.vibrate.
+
+commit 381f82e9a2e7f220945d83b721832c157d4f4ac6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 13 02:51:20 2019 -0600
+
+ Indicate shift mode with vibration.
+
+commit 9d8b6c4f188ccc7539fb1ab4a6db2439e78567de
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 12 09:59:01 2019 -0600
+
+ Remove unused arguments.
+
+commit f40bd919b1a2772f8ea696c0004b447ef6f21b11
+Merge: a6b55307 76978127
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 12 09:08:25 2019 -0600
+
+ Merge branch 'webgl'.
+
+commit 76978127a7d8b3dd68eb44e10ecf5c9c05c53972
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 12 09:07:57 2019 -0600
+
+ Allow for negative dot product.
+
+commit a6b5530720e91c8aa3b8ef2798ac24b0e814afec
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 12 00:58:34 2019 -0600
+
+ Restore example.
+
+commit 56936ea472caf20f8e3d5e5420f35e8d35d62451
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 12 00:48:50 2019 -0600
+
+ Fix arcball radius; improve mobile interaction.
+
+commit 3b3b1b2efae71b494eadb4eb4b41fd0f1476d353
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 12 00:26:20 2019 -0600
+
+ Fix arcball numerical precision issues.
+
+commit e519ea37e36e4c1027b1b296b28a8d2e946c9f1d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 11 23:16:09 2019 -0600
+
+ Add mobile shift; fix arcball normalization.
+
+commit 79abc5f0b321befc032d4eb7d15b75329d202b3a
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 11 19:34:02 2019 -0600
+
+ Improve zoom.
+
+commit 25e234d15a8ce05874f0951952aed0122532def8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 11 11:32:34 2019 -0600
+
+ Override scroll bar.
+
+commit 86de97f2460dc8a125e18772c31e750251481b22
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 11 11:08:39 2019 -0600
+
+ Implement pinch zoom.
+
+commit a9069b5771cf62effa2b6a5f46ac30b5766eb4ca
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 11 00:20:36 2019 -0600
+
+ Fix initial projection.
+
+commit f37794e9c12fbdd588f9afa8e2400f4c4cae3acd
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 23:59:16 2019 -0600
+
+ Disable mobile scaling.
+
+commit 605c952986ab864f2d6ca8bea0b11fc5cd4ccb0f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 23:58:03 2019 -0600
+
+ Disable mobile scaling.
+
+commit 2d0ed08cb4fabff9f7b5621feb3853902865d422
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 11:20:46 2019 -0600
+
+ Remove scroll bar.
+
+commit a3a319b856e16a71b228090ecf24dc735cc7248e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 10:44:59 2019 -0600
+
+ Remove webgl directory prefix from link to gl.js; add symbolic link.
+
+commit fcc609805e810ffe8e4775cc114297c60319a1de
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 10:03:32 2019 -0600
+
+ Implement Bezier triangles in webgl.
+
+commit c532199499eec51b79c33a8a23d19daddceeeb93
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 08:42:02 2019 -0600
+
+ Fix epsilon; move derivative and normal into BezierPatch.
+
+commit fa59a4840c2dcbdb54e8188f905460a32745576d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 08:27:53 2019 -0600
+
+ Fix undefined variable.
+
+commit 1341bf7f83a82780b98826c83f1619794a08a027
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 08:25:53 2019 -0600
+
+ Factor code.
+
+commit 99b00e26147feae6aff24b94ae83a5ac99c817e7
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 01:20:07 2019 -0600
+
+ Begin porting Bezier triangle code to webgl.
+
+commit 033ba1eb3a0aca3a46de957c89fad9c33ce8da4b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 00:45:52 2019 -0600
+
+ Fix lighting after mode change.
+
+commit 2a174661224adc2fbc229b786baef60924761d74
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 10 00:12:22 2019 -0600
+
+ Accumulate onscreen and partially offscreen triangles separately to avoid duplicate rendering.
+
+commit 49ea03ddbf861df3edcb3dcdae3922761cb5d785
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 9 19:40:59 2019 -0600
+
+ Clear buffers on construction.
+
+commit e3bd396ed745dae9171e44b89d2554ce67e5b0cb
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 9 18:30:00 2019 -0600
+
+ Simplify code.
+
+commit 5b1b569f3fb253000e7728419d2f9f9612fdc7e8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 9 14:07:35 2019 -0600
+
+ Fix transparency bug; optimize colorShader and implement generalSHader.
+
+commit 61049a4ccd87e0aacd7498dd5c4d3c84960a7d18
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 9 11:51:27 2019 -0600
+
+ Sort transparent webgl triangles (based on centroid; to be improved).
+
+commit 0ec8f1841797c62a9a1ea83372f4fcb0880f3c00
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 9 09:34:28 2019 -0600
+
+ Fix missing initialization.
+
+commit 40ab227ba04a7e8ea1464af6864a074860e6fc3d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Sep 9 09:22:53 2019 -0600
+
+ Add transparent buffers.
+
+commit a401de1b5d3532f6d30c133eed0f4d07a0d8b182
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 23:40:43 2019 -0600
+
+ Fix webgl billboard labels.
+
+commit 503ba73bb4605ba5030f3d78c71f378ce654031b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 23:17:56 2019 -0600
+
+ Avoid depth check in offscreen computations.
+
+commit 5c4dcb69f3908b57333ee90af3408cbe857b891a
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 21:50:08 2019 -0600
+
+ Optimize transpose away.
+
+commit a6132b5e1d7a93c43c37d4eb2e238900bc93ff0e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 17:47:34 2019 -0600
+
+ Update temporary hard-wired teapot light parameters.
+
+commit f2ffc7b52ed3d4a7e375d66fc827f25973afac39
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 17:29:20 2019 -0600
+
+ Standardize code.
+
+commit f008f017aa1cfce1bb9bb34d91ca8857a20cea7b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 16:12:12 2019 -0600
+
+ Remove unwanted code.
+
+commit f8c22220b7dee93b97bca2a793df59e6e83ef664
+Merge: 4972f905 f1254f8d
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Sun Sep 8 14:39:32 2019 -0600
+
+ Merge branch 'webgl' of github.com:vectorgraphics/asymptote into webgl
+
+commit 4972f90530c591c09030ae84e1f3118dff2d047d
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Sun Sep 8 14:39:27 2019 -0600
+
+ Clean up gl.js again.
+
+commit f1254f8d7fa19053fc483231053d16103679a2e9
+Merge: cc7eb276 bad6b6d5
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 14:34:04 2019 -0600
+
+ Merge branch 'webgl' of github.com:vectorgraphics/asymptote into webgl.
+
+commit cc7eb276596404eba061fee63da9440db518ad03
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 14:28:30 2019 -0600
+
+ Optimize bounding box computation; simplify code.
+
+commit bad6b6d57c23cddbe4fd823d6ca480997dab65c6
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Sun Sep 8 14:25:09 2019 -0600
+
+ Minor fixes to norm matrix.
+
+commit 0c1da0e0dad92876e6254fec9d4625afb09c9614
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 02:36:18 2019 -0600
+
+ Batch calls to drawElements.
+
+commit 2106227eb55336e1189d99092258730b7583d403
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 8 01:03:59 2019 -0600
+
+ Prepare for batch drawing.
+
+commit 108509b7b304267883ac24081f8c7b8149773bab
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 7 21:11:57 2019 -0600
+
+ Fix -noautobillboard.
+
+commit a9e980f35e2955ec58891850bac3258bb7b9b880
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 7 20:47:42 2019 -0600
+
+ Fix typos.
+
+commit 7ffa52cafeed9ff412a4c8dd79f894f6c001de5d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 7 19:23:48 2019 -0600
+
+ Use separate material and center index for each vertex again (to support batch drawing and sorting).
+
+commit 17566e437c18c5cba8af049b03e064a0471006a3
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 7 14:24:13 2019 -0600
+
+ Use a 3x3 rotation matrix.
+
+commit b57b6298818cb7c561258c5f8f8e8d4724b1f0b2
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Sep 7 03:52:50 2019 -0600
+
+ Simply billboard code and port to webgl.
+
+commit 9c34d1e914fc8033f0dce670db80017c40244f66
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 6 15:08:28 2019 -0600
+
+ Enable webgl keyboard input.
+
+commit 4cddee557a7ee99117398522b64d532f8e34e9fc
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 6 14:31:46 2019 -0600
+
+ Standardize code.
+
+commit 3ad3e9447237dba8d2cbd643ecec931ce1c88aef
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 6 13:05:09 2019 -0600
+
+ Fix conditional.
+
+commit b157bb70ab46e4e67060c838a7aa986c96a9a8a1
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 6 12:59:21 2019 -0600
+
+ Change shaders only when needed; remove duplicate code; improve OpenGL framerate calculation.
+
+commit 2b5a4e583a912357b95dd922a414590eae1ec421
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 6 10:57:51 2019 -0600
+
+ Remove extension requirement.
+
+commit 52e3053c3b2d9a78e54d24a456b5ac74f1f7f71b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 6 10:56:36 2019 -0600
+
+ Simplify code.
+
+commit 309bfd90f3d274d7763de078772faacd7151292a
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Sep 6 03:27:03 2019 -0600
+
+ Reduce size of webgl data buffers.
+
+commit c33716757576e0534bad2615b1a608bed98059f8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 5 10:24:18 2019 -0600
+
+ Fix material index for explicit colors; standardize code.
+
+commit 1bd14971f286c5c83e0f1732523923d3da08b37f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 5 03:02:03 2019 -0600
+
+ Simplify code.
+
+commit f40c3eda4725acecd410cac7243e84053a78d233
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Sep 5 02:53:35 2019 -0600
+
+ Support vertex shading.
+
+commit f2e5df6d331708c01f374feef5f70f0d75999c7d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Sep 4 18:19:47 2019 -0600
+
+ Optimize webgl buffers.
+
+commit ef1cd85d7183d8399e150fdd8d4633fa8cb7adfd
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 3 22:09:30 2019 -0600
+
+ Simplify and optimize code.
+
+commit 7b3cd7101983c837c866eaa5540f26718b797d76
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 3 18:58:12 2019 -0600
+
+ Recompute offscreen limits at every render.
+
+commit ee547cbd9facf472ea5ef6a504f7103f1aaec51b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 3 08:26:47 2019 -0600
+
+ Optimize shader communication.
+
+commit 68f921caf3a603603616f82175916eb768c2161b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 3 01:11:20 2019 -0600
+
+ Reimplement billboard labels to allow remesh suppression.
+
+commit 1e2d7c8f77dcd4dbf9cc0e3f7147ef1c492b51f6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Sep 3 01:02:10 2019 -0600
+
+ Fix typo.
+
+commit 7192656cca9bb3607ed5b62b7330e6a7e4e0e97e
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Mon Sep 2 15:19:19 2019 -0600
+
+ Fix almost all problem, except for offscreen glitch.
+
+commit 173a2c40056c9a23470d2ad8e931a97251471a6e
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Mon Sep 2 14:17:37 2019 -0600
+
+ Also reset ship.
+
+commit 1bde5bc6489562642c4eaf6e68ac92413ef4fcae
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Mon Sep 2 14:16:54 2019 -0600
+
+ Fix zoom clipping issue alongside translation.
+
+commit fe8e538c7109073442967cb638af94279788fc86
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Mon Sep 2 14:01:30 2019 -0600
+
+ Add in revised zoom from asy.
+
+commit 78044058c643aa5e66bed5c70b0db55a5953b919
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 1 23:50:54 2019 -0600
+
+ Simplify code.
+
+commit 144f4615291a6486fdd7c2f16026240f18216538
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 1 22:02:22 2019 -0600
+
+ Output field-of-view angle.
+
+commit 1c116f53a002b66b43b315fd2e2730dc1eed6d3e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 1 20:10:49 2019 -0600
+
+ Add missing offscreen code.
+
+commit c255024cc0a6d66dd3ce2e5279e1a65fb0b0e828
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 1 11:57:17 2019 -0600
+
+ Compute pMatrix from b and B bounds.
+
+commit faf496185b9b48688f9e68b0882f16ec01d5b806
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 1 11:36:40 2019 -0600
+
+ Fix duplicate multiply.
+
+commit eb75489e0f7d739b6f2ce707ae3ae7a9176ded19
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 1 11:35:04 2019 -0600
+
+ Port offscreen code to webgl.
+
+commit 7a2fe8d7e409f33d19f860083ee71060866d8304
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Sep 1 03:53:55 2019 -0600
+
+ Re-enable remesh suppression with offscreen check.
+
+commit fb3e1aa648c78d0c8f3c156b8f68971049c77085
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Aug 31 19:14:37 2019 -0600
+
+ Improve zoom.
+
+commit aa2f9e5bcdb6aaf4fc960a0448bbd04c6c174e53
+Merge: 11577411 11b7f3b4
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Aug 31 14:21:25 2019 -0600
+
+ Merge branch 'master' into webgl.
+
+commit 11b7f3b4400f6c648ad2ccabe9ab06c275fd1f3f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Aug 31 14:21:16 2019 -0600
+
+ Fix pipeclose (cf. 0d057d35cb30d52f33db9f155c880ed8f8a1d7d2).
+
+commit 115774110bd39a7609620600999c63eb0823ffb9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Aug 31 13:17:52 2019 -0600
+
+ Remove unused argument.
+
+commit 389543c6b829bab8b8aa1c3f852263d41101079c
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Aug 31 12:57:29 2019 -0600
+
+ Optimize and simplify OpenGL shaders.
+
+commit 9ce5cfef9a1c6ea054b1d141d8b7d766c0b8f3cb
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Aug 31 03:13:24 2019 -0600
+
+ Port to webgl1.0.
+
+commit 26f329d066b8b291adf7b63b61301b6f69e288a0
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Aug 31 00:45:49 2019 -0600
+
+ Remove duplicate constants.
+
+commit 16a912ce5563f6436094a0f8e2bbb878cadccd9b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Aug 31 00:39:34 2019 -0600
+
+ Support rendering on mobile devices.
+
+commit d0e14808336642f9eabc38d66d357bbf13486f4d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 30 14:38:21 2019 -0600
+
+ Fix normals.
+
+commit cbccb294ccc2f27a4d0924b3f7337c432e3b98b0
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 30 14:04:45 2019 -0600
+
+ Standardize code.
+
+commit 3d4ded0b3b871a6331dd14ae3479ebb1c15ceb8f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 30 13:40:45 2019 -0600
+
+ Simplify normal code.
+
+commit b5a083516a854317e9e88e7def584a3f9a907c57
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 30 01:35:03 2019 -0600
+
+ Update normal code.
+
+commit 78e4ac384d904e09c05684da6d0eb723878f73bb
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 30 01:18:09 2019 -0600
+
+ Remove unused variable.
+
+commit 699dd53413ad111d211ed2f616bab85f6162f0cc
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 30 01:16:47 2019 -0600
+
+ Update subdivision crack code.
+
+commit 9958d795eead1be55e3014fec378695682b5b202
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 30 00:05:08 2019 -0600
+
+ Support webgl output with -V -threads.
+
+commit 385c61e1b211b019641c5cd50ce54b71551f7943
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Aug 29 21:33:58 2019 -0600
+
+ Simplify code.
+
+commit 35442f0834befc227b88c26ed7deb79e14f7628a
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Aug 29 21:12:10 2019 -0600
+
+ Fix nMaterials; remove generated file.
+
+commit 1839307bfa3cb7521293ccdd05ec1507cf7ebe53
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Aug 29 19:47:01 2019 -0600
+
+ Revert broken commit "Add back nMaterials."
+
+ This reverts commit ef0b19a7d1ccd37b80705c0cbaf42f8eb5470b1c.
+
+commit ef0b19a7d1ccd37b80705c0cbaf42f8eb5470b1c
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 19:24:02 2019 -0600
+
+ Add back nMaterials.
+
+commit 71d59116a67658e8bb078c79f6f1e59fcf6e1060
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 19:15:54 2019 -0600
+
+ Update Author's name.
+
+commit 8964dd0782bff658a3f2d475e10c3c38964ef607
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 19:14:55 2019 -0600
+
+ Add in authors names.
+
+commit afc2a146dd755fc19adbdba7f7aa28aab5a9b45d
+Merge: 04feea56 306f6df4
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 19:08:19 2019 -0600
+
+ Merge branch 'webgl' of github.com:vectorgraphics/asymptote into webgl
+
+commit 04feea5687b53250825e77356b5aad4961f17884
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 19:08:14 2019 -0600
+
+ Fix vViewPosition.
+
+commit 306f6df4e77d854c9890d4a14f8679e7e16f4ebf
+Merge: 63fb75af ff8cc6d3
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Aug 29 19:07:05 2019 -0600
+
+ Merge branch 'webgl' of github.com:vectorgraphics/asymptote into webgl
+
+commit 63fb75aff713b84b005076aa50d141b2c7d88f3d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Aug 29 19:06:55 2019 -0600
+
+ Move further parameters into BezierPatch class; fix index.
+
+commit ff8cc6d326d163de250f28a2557f61701788037c
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 19:05:07 2019 -0600
+
+ Add in orthographic/persp view directions.
+
+commit acb3196c4d37930b0ef6d3fb2bee214222789593
+Merge: 60dd5701 ce412f94
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 18:49:49 2019 -0600
+
+ Merge conflict.
+
+commit 60dd5701d70540245e36d6f3d39594db39f2def6
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 18:49:15 2019 -0600
+
+ Make res per class.
+
+commit ce412f946f8b4736bcabe6bf2b462dd76bd933e2
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Aug 29 18:46:40 2019 -0600
+
+ Fix resolution.
+
+commit 80c920eb626193a2aec793c01a7fb81f405466c2
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Aug 29 17:58:12 2019 -0600
+
+ Pass resolution data to webgl.
+
+commit f494c725fb05f8245d1d3833028edb74a23cd184
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 15:46:50 2019 -0600
+
+ Remove cpy2web.
+
+commit 3037b5620c6263a1b001c45c1bcc029f1e29ed0b
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Thu Aug 29 15:04:23 2019 -0600
+
+ Allow for custom vertex structures.
+
+commit 88d8ea20543c476bde8d41d8c9132e03b64078c7
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Aug 29 11:06:17 2019 -0600
+
+ Support webgl output with threads.
+
+commit 5f47e4e35ddd76d7bcae651aa1ef956e200cb12f
+Author: Supakorn Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 23:23:29 2019 -0600
+
+ Add in blend func.
+
+commit 072db3837ccd0526f6bbc3437ec411f1a12fab5d
+Author: Supakorn Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 23:18:33 2019 -0600
+
+ Add in preliminary transparency.
+
+commit d1fdc0c19df823ab6bd79420b457197ffc6abcec
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 23:10:25 2019 -0600
+
+ Remove diagnostic.
+
+commit 51c17fc6062f43818eb0e7456bd4e52941875fba
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 23:03:01 2019 -0600
+
+ Add material index.
+
+commit c63b11b282a018eab64aebb87a22e96dbe1d6394
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 21:40:20 2019 -0600
+
+ Begin material support.
+
+commit 9a31b248de24ad18dc988ca9cbbcc536f4bc9f58
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 17:54:03 2019 -0600
+
+ FIx gitignore.
+
+commit 864ec8c2519da4a4576be291a554342a0eddd332
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 17:52:35 2019 -0600
+
+ Minor cleanups and enable emissive.
+
+commit ac2aa94fa9d59a879d84025ca74804812bcf7fa1
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 17:32:58 2019 -0600
+
+ Fix float arrays flag.
+
+commit 3de4371ce380c2185d7f483f02e2abd48abc55f1
+Merge: dc9692dd 2ad31cb3
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 17:31:23 2019 -0600
+
+ Merge branch 'webgl' of github.com:vectorgraphics/asymptote into webgl
+
+commit dc9692dde857f1e57fc097adee2041443a2b1134
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 17:31:10 2019 -0600
+
+ Only create array when needed.
+
+commit 2ad31cb325dc8106ce4dc8f711dd1864f3f1ddda
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 17:29:42 2019 -0600
+
+ Simplify code; remove generated file.
+
+commit 3b7616ab660d553032d4f0d35a21d0a4c47ca39d
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 17:03:15 2019 -0600
+
+ Add a DrawableObject for general drawables.
+
+commit 4c06bf02ebba1bd20d30fb00edea9afac2e1e408
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 16:59:05 2019 -0600
+
+ Even more refractoring of code.
+
+commit 3c831c65c004549b1ad50cf21aae0bb0bf658074
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 16:51:44 2019 -0600
+
+ More refractorings of gl.js.
+
+commit 00bda50add1752053360384b34a80b519060ee4b
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 16:31:59 2019 -0600
+
+ Refractor gl.js code.
+
+commit c62534e2dac23166a0905bff68a2956f64cc7600
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 15:50:45 2019 -0600
+
+ Clean up gl.js.
+
+commit f5068d75f0891a5968c98cfe53e352b4def86aef
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 15:01:52 2019 -0600
+
+ Expose model Matrix transformation and more docs.
+
+commit 3d48b756c0f593fb63e54a991ce5e4b1bd0da9ed
+Author: Supakorn Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 02:50:00 2019 -0600
+
+ Add in zooming back.
+
+commit 2d362a692aa7105cc7020bba15bde86508dc9006
+Author: Supakorn Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 28 02:20:09 2019 -0600
+
+ Reglue back translation routine.
+
+commit 53c16fcd22a2f19cbea8f07c7054d1d9519d4806
+Merge: 4c9342e9 df4b5699
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 01:41:15 2019 -0600
+
+ Merge branch 'master' of github.com:vectorgraphics/asymptote.
+
+commit 4c9342e9dd114f4baeb94612f7bc85755aaba0f9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 01:40:03 2019 -0600
+
+ Fix last commit.
+
+commit df4b5699744d668ae4cb4367d2ab5f5cf039cc1b
+Merge: 5b876724 52d3e4d6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 01:36:05 2019 -0600
+
+ Merge branch 'master' of github.com:vectorgraphics/asymptote
+
+commit 5b87672473974e5dc32c2f11b2afd81ffdc22372
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 01:35:54 2019 -0600
+
+ Simplify glew compilation.
+
+commit b2a6fff4e97192c5bd42b5eed689d3aa0e0c7b14
+Merge: 64d3f620 52d3e4d6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 01:07:42 2019 -0600
+
+ Remove DOS line terminators.
+
+commit 52d3e4d670a8ca843302280c7b02462eb672945d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 28 01:04:23 2019 -0600
+
+ Remove spurious DOS line terminators from shader files.
+
+commit 64d3f620dc2d49924b1ac9a14cc5c520d2d43d9b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Aug 27 22:44:54 2019 -0600
+
+ Output canvas dimensions; support threads.
+
+commit 78e5646fc84ec2609bbe22850ccb82eb568ee8d7
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Tue Aug 27 17:32:12 2019 -0600
+
+ Add in temporary canvas height/width.
+
+commit ac8cbda3cc382a0ceb632fe3930cb5351a50468f
+Merge: 8f7b2711 97e03e6d
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Tue Aug 27 17:27:08 2019 -0600
+
+ Merge branch 'webgl' of github.com:vectorgraphics/asymptote into webgl
+
+commit 8f7b271188a337569ed5510434cdef82c5c19503
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Tue Aug 27 17:27:03 2019 -0600
+
+ Allow dynamic setting of canvas size.
+
+commit 97e03e6de3b7599dc4d78f28438f956c327b94aa
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Aug 27 17:26:32 2019 -0600
+
+ Output target to webgl.
+
+commit 601ebbadadb2ef652ec4b9062443e412b7a1f314
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Aug 27 16:52:06 2019 -0600
+
+ Fix warning message.
+
+commit bff8f83e6b6b72a977a63576e27672d4cb445b8b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Aug 27 16:36:30 2019 -0600
+
+ Compile glew library with -O1 to help out clang compiler.
+
+commit ebe09e1b398b244c3a1163e2dea804829fe2d63f
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Tue Aug 27 16:36:22 2019 -0600
+
+ Split jsfile into its own cc file.
+
+commit d7cfc3e099ff4b094a2b864c3f43559d7257b8ba
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Fri Aug 23 17:27:53 2019 -0600
+
+ Change jsfile to handle new p properly.
+
+commit 6fc0875e2ed6c3ef9108d0103615d8f1f5264ca7
+Merge: 2fe6c372 fa9cfab0
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Fri Aug 23 17:22:06 2019 -0600
+
+ Merge in jsfile changes.
+
+commit 2fe6c372d13a67e4da203aeeffec99c0a5725fd2
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Fri Aug 23 17:20:41 2019 -0600
+
+ Add multiple materials detection and shader generation.
+
+commit fa9cfab02ccda80ffae9de90f0dcd5291d1a6d14
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 23 17:16:32 2019 -0600
+
+ Add multiple patch support.
+
+commit 40aeca47850dd5dd3295abb77d8c3d5c06347624
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Fri Aug 23 16:10:38 2019 -0600
+
+ Add arcball rotation.
+
+commit 7325cd22c2ae15edc47dbc3685ea7bed775b1c86
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Fri Aug 23 14:45:42 2019 -0600
+
+ Add in material index data.
+
+commit 23846f565b4575b0ac410a9ec2d795ecb2978442
+Author: Supakorn Rassameemasmuang <rassamee@ualberta.ca>
+Date: Fri Aug 23 00:08:40 2019 -0600
+
+ Change resolution and minor cleanups.
+
+commit 85b3fd03061bcf3e8d0703295ec32d24a8792111
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 21 16:37:20 2019 -0600
+
+ Add webgl option to glrender.
+
+commit 9bfd0c90ef80dfcbd28422cc6348f1bf943a5cd7
+Merge: 05461c69 3d714156
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 21 16:28:09 2019 -0600
+
+ Merge branch 'webgl' of github.com:vectorgraphics/asymptote into webgl
+
+commit 05461c6965b795aec295c3d40bbdcb766b652bbf
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 21 16:27:10 2019 -0600
+
+ Update settings to prevent autoformat.
+
+commit 3d714156611362e7a919c7bdedee31eb52f51ef3
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 21 16:27:10 2019 -0600
+
+ Update .gitignore.
+
+commit 3ca5d56f78d8c559cd76f5e3b76b147e58203425
+Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
+Date: Wed Aug 21 16:23:42 2019 -0600
+
+ Fix gl.js vertex function.
+
+commit 98a67e304b975c141ff16011fa9ea5eee15c671f
+Merge: 56076839 7f1fba23
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 21 15:58:08 2019 -0600
+
+ Update webgl files.
+
+commit 7f1fba235a28189d306312c09b43352e1d047932
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 21 10:47:38 2019 -0600
+
+ Generalize popcount to systems that lack 64-bit integers.
+
+commit 4500dd6b84fae216df649a32c57b70f225883fd1
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 21 02:53:55 2019 -0600
+
+ Update HOWTO-MSWindows.
+
+commit c9ee6dc1dbb22d65311639c28ceb5c7bb1391431
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 21 01:36:17 2019 -0600
+
+ Increment version to 2.54.
+
commit 35867d43297d07045d52916bcd3d906f62f7b023
Author: John Bowman <bowman@ualberta.ca>
Date: Tue Aug 20 22:50:54 2019 -0600
@@ -52,12 +1444,25 @@ Date: Thu Aug 15 23:22:19 2019 -0600
Disable bulky and leaky OpenImageIO library by default.
+commit 56076839adb43e1a0bc99aa0019a4ff4c275f86b
+Merge: 46461352 94ac15f8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 14 14:51:57 2019 -0600
+
+ Begin multiple patch support.
+
commit d84dd8cb79c8b0b85211643427eaa6ad1dba0a99
Author: Supakorn "Jamie" Rassameemasmuang <rassamee@ualberta.ca>
Date: Wed Aug 14 12:15:13 2019 -0600
Add in development WebGL version.
+commit 4646135212088ec1c2572481c628b58f671b7ac8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 14 12:06:51 2019 -0600
+
+ Import webgl development files.
+
commit 94ac15f88e5723e38d4e4f3231944b538d8c17ec
Author: John Bowman <bowman@ualberta.ca>
Date: Wed Aug 14 01:36:04 2019 -0600
@@ -1766,6 +3171,12 @@ Date: Sat Sep 1 17:16:25 2018 -0600
Allow for proper buffer data transfer.
+commit 83c2b62df0132a310ce3d234fcc7be463b7795d6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 31 22:11:50 2018 -0600
+
+ Begin development of webgl output.
+
commit adbb32fdd380304839cb401c76ea2ab662edfe65
Merge: 23c4bd2d df015058
Author: John Bowman <bowman@ualberta.ca>
diff --git a/graphics/asymptote/GUI/icons_rc.py b/graphics/asymptote/GUI/icons_rc.py
index d1b18d19f4..a49f69a1fd 100644
--- a/graphics/asymptote/GUI/icons_rc.py
+++ b/graphics/asymptote/GUI/icons_rc.py
@@ -9,160 +9,6 @@
from PyQt5 import QtCore
qt_resource_data = b"\
-\x00\x00\x03\x0c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\
-\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\
-\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
-\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\
-\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
-\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\
-\x2e\x34\x33\x35\x2c\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\
-\x30\x33\x2d\x31\x2e\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\
-\x2e\x36\x31\x2c\x31\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\
-\x35\x2d\x30\x2e\x36\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\
-\x34\x38\x36\x2c\x30\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0d\x0a\
-\x09\x63\x30\x2e\x36\x31\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\
-\x34\x38\x38\x2d\x30\x2e\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\
-\x30\x2e\x32\x37\x6c\x32\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\
-\x6c\x35\x2e\x39\x31\x31\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\
-\x30\x37\x2d\x30\x2e\x36\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\
-\x2e\x38\x35\x32\x2c\x31\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\
-\x0d\x0a\x09\x63\x30\x2e\x36\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\
-\x30\x2e\x38\x35\x34\x2c\x31\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\
-\x36\x2c\x31\x2e\x39\x32\x4c\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\
-\x33\x34\x63\x2d\x30\x2e\x32\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\
-\x30\x2e\x36\x36\x31\x2c\x30\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\
-\x2c\x30\x2e\x36\x35\x36\x43\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\
-\x39\x39\x38\x2c\x38\x2e\x33\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\
-\x2c\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x00\x6c\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
-\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
-\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x03\x26\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x33\x38\
-\x38\x63\x2d\x37\x32\x2e\x35\x39\x37\x2c\x30\x2d\x31\x33\x32\x2d\
-\x35\x39\x2e\x34\x30\x35\x2d\x31\x33\x32\x2d\x31\x33\x32\x63\x30\
-\x2d\x37\x32\x2e\x36\x30\x31\x2c\x35\x39\x2e\x34\x30\x33\x2d\x31\
-\x33\x32\x2c\x31\x33\x32\x2d\x31\x33\x32\x63\x33\x36\x2e\x33\x2c\
-\x30\x2c\x36\x39\x2e\x32\x39\x39\x2c\x31\x35\x2e\x34\x2c\x39\x32\
-\x2e\x34\x30\x36\x2c\x33\x39\x2e\x36\x30\x31\x4c\x32\x37\x38\x2c\
-\x32\x33\x34\x68\x31\x35\x34\x56\x38\x30\x0d\x0a\x09\x09\x6c\x2d\
-\x35\x31\x2e\x36\x39\x38\x2c\x35\x31\x2e\x37\x30\x32\x43\x33\x34\
-\x38\x2e\x34\x30\x36\x2c\x39\x39\x2e\x37\x39\x38\x2c\x33\x30\x34\
-\x2e\x34\x30\x36\x2c\x38\x30\x2c\x32\x35\x36\x2c\x38\x30\x63\x2d\
-\x39\x36\x2e\x37\x39\x37\x2c\x30\x2d\x31\x37\x36\x2c\x37\x39\x2e\
-\x32\x30\x33\x2d\x31\x37\x36\x2c\x31\x37\x36\x73\x37\x38\x2e\x30\
-\x39\x34\x2c\x31\x37\x36\x2c\x31\x37\x36\x2c\x31\x37\x36\x0d\x0a\
-\x09\x09\x63\x38\x31\x2e\x30\x34\x35\x2c\x30\x2c\x31\x34\x38\x2e\
-\x32\x38\x37\x2d\x35\x34\x2e\x31\x33\x34\x2c\x31\x36\x39\x2e\x34\
-\x30\x31\x2d\x31\x32\x38\x48\x33\x37\x38\x2e\x38\x35\x43\x33\x36\
-\x30\x2e\x31\x30\x35\x2c\x33\x35\x33\x2e\x35\x36\x31\x2c\x33\x31\
-\x31\x2e\x37\x31\x32\x2c\x33\x38\x38\x2c\x32\x35\x36\x2c\x33\x38\
-\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
-\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\x6c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x53\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\
-\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
-\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\
-\x31\x35\x2e\x31\x37\x33\x2c\x32\x48\x34\x43\x32\x2e\x38\x39\x39\
-\x2c\x32\x2c\x32\x2c\x32\x2e\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\
-\x30\x2c\x31\x2e\x31\x2c\x30\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\
-\x32\x68\x31\x32\x63\x31\x2e\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\
-\x2e\x39\x2c\x32\x2d\x32\x56\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\
-\x31\x37\x33\x2c\x32\x7a\x20\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\
-\x2e\x35\x34\x39\x2d\x30\x2e\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\
-\x37\x0d\x0a\x09\x43\x36\x2e\x34\x35\x2c\x39\x2c\x36\x2c\x38\x2e\
-\x35\x34\x39\x2c\x36\x2c\x38\x56\x33\x68\x38\x56\x38\x7a\x20\x4d\
-\x31\x33\x2c\x34\x68\x2d\x32\x76\x34\x68\x32\x56\x34\x7a\x22\x2f\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x05\xca\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -258,85 +104,238 @@ qt_resource_data = b"\
\x36\x35\x2e\x32\x36\x36\x2c\x32\x38\x38\x2e\x30\x38\x2c\x34\x35\
\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x7a\x22\x2f\x3e\x0d\
\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x04\xca\
+\x00\x00\x02\x7d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x09\x20\x69\x64\x3d\
-\x22\x73\x76\x67\x34\x36\x31\x39\x22\x20\x69\x6e\x6b\x73\x63\x61\
-\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x31\
-\x2b\x64\x65\x76\x65\x6c\x2b\x6f\x73\x78\x6d\x65\x6e\x75\x20\x72\
-\x31\x32\x39\x31\x31\x22\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\
-\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x74\x72\x69\x61\x6e\x67\x6c\
-\x65\x2d\x73\x74\x72\x6f\x6b\x65\x64\x2d\x31\x35\x2e\x73\x76\x67\
-\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\
-\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\x22\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\
-\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\
-\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\
-\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\
-\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\
-\x61\x70\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\
+\x37\x2c\x32\x33\x34\x2e\x36\x32\x35\x48\x31\x36\x37\x2e\x32\x39\
+\x36\x6c\x31\x31\x39\x2e\x37\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\
+\x32\x4c\x32\x35\x36\x2c\x38\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\
+\x31\x37\x31\x2c\x31\x37\x31\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\
+\x39\x2e\x39\x32\x34\x4c\x31\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\
+\x37\x2e\x33\x37\x35\x48\x34\x32\x37\x56\x32\x33\x34\x2e\x36\x32\
+\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\x65\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x34\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x68\x65\x69\x67\x68\
+\x74\x3d\x27\x31\x38\x2e\x37\x35\x70\x74\x27\x20\x76\x65\x72\x73\
+\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\x38\x35\
+\x38\x33\x20\x31\x38\x2e\x37\x35\x20\x31\x38\x2e\x37\x35\x27\x20\
+\x77\x69\x64\x74\x68\x3d\x27\x31\x38\x2e\x37\x35\x70\x74\x27\x20\
+\x78\x6d\x6c\x6e\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
+\x67\x27\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\
\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
-\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\
-\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\
-\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\
-\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\
-\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
-\x30\x30\x2f\x73\x76\x67\x22\x0a\x09\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x3e\x0a\x3c\
+\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\x67\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
+\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\
+\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x35\x2e\x37\x38\x34\x34\
+\x20\x36\x33\x2e\x32\x33\x33\x33\x29\x27\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x27\x4d\x20\x2d\x38\x2e\x36\x35\x37\x33\x34\x20\
+\x38\x2e\x36\x35\x37\x33\x34\x4c\x20\x38\x2e\x36\x35\x37\x33\x34\
+\x20\x38\x2e\x36\x35\x37\x33\x34\x4c\x20\x38\x2e\x36\x35\x37\x33\
+\x34\x20\x2d\x38\x2e\x36\x35\x37\x33\x34\x4c\x20\x2d\x38\x2e\x36\
+\x35\x37\x33\x34\x20\x2d\x38\x2e\x36\x35\x37\x33\x34\x4c\x20\x2d\
+\x38\x2e\x36\x35\x37\x33\x34\x20\x38\x2e\x36\x35\x37\x33\x34\x5a\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\
+\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
+\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\
+\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x77\x69\x64\x74\x68\x3d\x27\x31\x2e\x35\x30\x35\x36\x32\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\
+\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\
+\x36\x34\x20\x36\x35\x2e\x37\x38\x34\x34\x20\x36\x33\x2e\x32\x33\
+\x33\x33\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
+\x20\x34\x2e\x33\x32\x38\x36\x37\x20\x30\x43\x20\x34\x2e\x33\x32\
+\x38\x36\x37\x20\x2d\x32\x2e\x33\x39\x30\x36\x36\x20\x32\x2e\x33\
+\x39\x30\x36\x36\x20\x2d\x34\x2e\x33\x32\x38\x36\x37\x20\x30\x20\
+\x2d\x34\x2e\x33\x32\x38\x36\x37\x43\x20\x2d\x32\x2e\x33\x39\x30\
+\x36\x36\x20\x2d\x34\x2e\x33\x32\x38\x36\x37\x20\x2d\x34\x2e\x33\
+\x32\x38\x36\x37\x20\x2d\x32\x2e\x33\x39\x30\x36\x36\x20\x2d\x34\
+\x2e\x33\x32\x38\x36\x37\x20\x2d\x30\x43\x20\x2d\x34\x2e\x33\x32\
+\x38\x36\x37\x20\x32\x2e\x33\x39\x30\x36\x36\x20\x2d\x32\x2e\x33\
+\x39\x30\x36\x36\x20\x34\x2e\x33\x32\x38\x36\x37\x20\x30\x20\x34\
+\x2e\x33\x32\x38\x36\x37\x43\x20\x32\x2e\x33\x39\x30\x36\x36\x20\
+\x34\x2e\x33\x32\x38\x36\x37\x20\x34\x2e\x33\x32\x38\x36\x37\x20\
+\x32\x2e\x33\x39\x30\x36\x36\x20\x34\x2e\x33\x32\x38\x36\x37\x20\
+\x30\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\
+\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\
+\x00\x00\x02\xbd\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x69\x72\x63\x6c\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
-\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\
-\x35\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x35\x70\
-\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x31\x35\x20\x31\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\
-\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
-\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x31\x35\x20\x31\x35\x3b\
-\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\
-\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x69\x64\
-\x3d\x22\x72\x65\x63\x74\x33\x33\x33\x38\x22\x20\x69\x6e\x6b\x73\
-\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\
-\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x73\x6f\x64\
-\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\
-\x22\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x22\x20\x64\
-\x3d\x22\x4d\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\
-\x0a\x09\x43\x37\x2e\x32\x34\x32\x39\x2c\x31\x2e\x34\x39\x31\x33\
-\x2c\x36\x2e\x39\x37\x38\x37\x2c\x31\x2e\x36\x34\x32\x33\x2c\x36\
-\x2e\x38\x33\x33\x36\x2c\x31\x2e\x38\x39\x35\x32\x6c\x2d\x35\x2e\
-\x35\x2c\x39\x2e\x38\x36\x39\x32\x43\x31\x2e\x30\x32\x31\x38\x2c\
-\x31\x32\x2e\x33\x30\x37\x38\x2c\x31\x2e\x33\x39\x35\x2c\x31\x32\
-\x2e\x39\x39\x39\x39\x2c\x32\x2c\x31\x33\x68\x31\x31\x0a\x09\x63\
-\x30\x2e\x36\x30\x35\x2d\x30\x2e\x30\x30\x30\x31\x2c\x30\x2e\x39\
-\x37\x38\x32\x2d\x30\x2e\x36\x39\x32\x32\x2c\x30\x2e\x36\x36\x36\
-\x34\x2d\x31\x2e\x32\x33\x35\x35\x6c\x2d\x35\x2e\x35\x2d\x39\x2e\
-\x38\x36\x39\x32\x43\x38\x2e\x30\x33\x30\x32\x2c\x31\x2e\x36\x35\
-\x37\x39\x2c\x37\x2e\x37\x38\x38\x34\x2c\x31\x2e\x35\x30\x39\x32\
-\x2c\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\x7a\x20\
-\x4d\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x6c\x34\x2e\x31\x32\
-\x36\x37\x2c\x37\x2e\x34\x37\x30\x34\x0a\x09\x48\x33\x2e\x33\x37\
-\x33\x33\x4c\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x7a\x22\x2f\
-\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\
+\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\
+\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x22\x4d\x31\x30\x2c\x30\x2e\x34\x43\x34\x2e\x36\x39\x38\x2c\x30\
+\x2e\x34\x2c\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\
+\x2c\x31\x30\x43\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x32\x2c\x34\
+\x2e\x36\x39\x38\x2c\x31\x39\x2e\x36\x2c\x31\x30\x2c\x31\x39\x2e\
+\x36\x63\x35\x2e\x33\x30\x31\x2c\x30\x2c\x39\x2e\x36\x2d\x34\x2e\
+\x32\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x30\x31\x0d\x0a\x09\
+\x43\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\x33\
+\x30\x31\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\
+\x31\x30\x2c\x31\x37\x2e\x35\x39\x39\x63\x2d\x34\x2e\x31\x39\x37\
+\x2c\x30\x2d\x37\x2e\x36\x2d\x33\x2e\x34\x30\x32\x2d\x37\x2e\x36\
+\x2d\x37\x2e\x36\x53\x35\x2e\x38\x30\x32\x2c\x32\x2e\x34\x2c\x31\
+\x30\x2c\x32\x2e\x34\x63\x34\x2e\x31\x39\x37\x2c\x30\x2c\x37\x2e\
+\x36\x30\x31\x2c\x33\x2e\x34\x30\x32\x2c\x37\x2e\x36\x30\x31\x2c\
+\x37\x2e\x36\x0d\x0a\x09\x53\x31\x34\x2e\x31\x39\x37\x2c\x31\x37\
+\x2e\x35\x39\x39\x2c\x31\x30\x2c\x31\x37\x2e\x35\x39\x39\x7a\x22\
+\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\x46\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x33\x37\x2e\x35\
+\x2c\x33\x38\x36\x2e\x36\x4c\x33\x30\x36\x2e\x39\x2c\x32\x35\x36\
+\x6c\x31\x33\x30\x2e\x36\x2d\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\
+\x31\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\
+\x2c\x30\x2d\x35\x30\x2e\x39\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\
+\x2e\x31\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\
+\x39\x2c\x30\x4c\x32\x35\x36\x2c\x32\x30\x35\x2e\x31\x4c\x31\x32\
+\x35\x2e\x34\x2c\x37\x34\x2e\x35\x0d\x0a\x09\x63\x2d\x31\x34\x2e\
+\x31\x2d\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\
+\x2d\x35\x30\x2e\x39\x2c\x30\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\
+\x2e\x31\x2d\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\
+\x30\x2e\x39\x4c\x32\x30\x35\x2e\x31\x2c\x32\x35\x36\x4c\x37\x34\
+\x2e\x35\x2c\x33\x38\x36\x2e\x36\x63\x2d\x31\x34\x2e\x31\x2c\x31\
+\x34\x2e\x31\x2d\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\
+\x35\x30\x2e\x39\x0d\x0a\x09\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\
+\x31\x2c\x33\x36\x2e\x38\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\
+\x2c\x30\x4c\x32\x35\x36\x2c\x33\x30\x36\x2e\x39\x6c\x31\x33\x30\
+\x2e\x36\x2c\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\x31\x2c\x31\x34\
+\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\
+\x39\x2c\x30\x43\x34\x35\x31\x2e\x35\x2c\x34\x32\x33\x2e\x34\x2c\
+\x34\x35\x31\x2e\x35\x2c\x34\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\
+\x35\x2c\x33\x38\x36\x2e\x36\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
+\x00\x00\x01\xdd\
+\x00\
+\x00\x06\xe4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\x13\x29\xff\
+\x61\xba\xb7\x4a\xec\x17\xc4\xd4\xa6\xa6\x51\xfd\x21\xcb\x52\x9a\
+\x58\x6a\xea\xaa\xa7\x0a\xc3\x16\x50\x28\x20\x58\xc0\xce\xaf\xef\
+\xee\x92\x54\x51\x95\xfa\x18\xfb\xb0\x33\xda\x79\x6f\xde\xbc\x65\
+\x24\xa6\xd7\xfb\xdf\x39\x74\xa2\x6e\xb2\xb2\x08\x10\x27\x0c\x81\
+\x28\xa2\x32\xce\x8a\x24\x40\xad\xfc\x85\xc7\xe8\xfa\xd3\xe5\xc5\
+\xf4\x1d\xc6\xb0\x12\x85\xa8\x43\x59\xd6\x3e\x7c\x8e\xcb\x9d\x80\
+\x75\x9e\xb7\x8d\x34\x25\xe0\x1e\x71\x08\xb7\xe1\xeb\x76\x05\xcb\
+\x7d\x55\xd6\x12\x36\x79\x9b\xe0\x75\x01\xc4\x14\xb7\xc3\x10\x1f\
+\x3c\xc2\x18\xcc\xda\x2c\x8f\x81\xbd\x07\xc0\xd8\xe8\x2f\xee\xe6\
+\xf7\x3f\x36\x4b\x68\xba\x04\x36\xdf\x66\x37\xeb\x39\x20\x4c\xe9\
+\x77\x77\x4e\xe9\xe2\x7e\x61\x24\x38\xe1\x94\x2e\x6f\x11\xa0\x54\
+\xca\xca\xa7\xb4\xef\x7b\xd2\xbb\xa4\xac\x13\xba\xaa\xc3\x2a\xcd\
+\xa2\x86\x2a\x22\xd5\x44\xd5\x44\x95\x18\xe7\x24\x96\x31\xd2\x33\
+\xb4\xf4\x8b\xa7\x72\x04\x59\x1c\xa0\x9b\xf0\x20\xea\x9f\xea\xa2\
+\xbe\x44\xd1\x04\xaf\x48\x3b\x8c\x31\x2d\xf5\x44\xf1\xf7\x79\x56\
+\x3c\xbc\x46\xe4\x93\xc9\x84\x1a\x54\x51\x03\xc4\xaa\x3d\x82\xc3\
+\x90\x2f\x2f\x2c\xe8\xb3\x58\xa6\x01\x1a\x71\x47\x03\xa9\xc8\x92\
+\x54\xfe\xbd\x76\x99\xe8\x67\xa5\xee\x02\x06\xaa\xa6\x0f\x82\x46\
+\x1e\x72\x11\x20\x51\x84\xbb\x5c\xe0\x5d\x18\x3d\x24\x75\xd9\x16\
+\xb1\x5f\x88\x1e\x5e\x30\x3f\x1a\x6f\x7e\x53\x85\x91\xa2\x57\xb5\
+\x68\x44\xdd\x09\xf3\xea\x44\x05\x6b\x88\xd6\xb4\x0a\x65\x0a\xea\
+\xd1\x5f\xb8\xc7\x6c\x3e\x72\x89\x1b\x31\xdb\x25\x1f\xb0\x6b\x7b\
+\x2a\xaa\xa3\x73\x8a\x47\x8c\x8c\x22\xac\x00\x9b\xe9\x22\x76\xf1\
+\x13\xdc\x0d\x10\x33\x98\xfb\xdc\xa0\x73\x6a\x00\xd3\xa2\x4b\xb6\
+\x51\xd4\x67\x6b\xe6\x3c\xea\x4f\x60\x59\xf4\x1f\x1f\xce\x78\x7c\
+\x16\x3e\xae\xb8\x77\x3a\x1f\x53\xfa\xff\x25\x39\x63\xfe\x26\xa6\
+\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x71\x6c\x49\x57\x6c\
+\xf2\x26\xa6\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x31\x2c\
+\xe9\x39\xaa\x7f\xb6\xca\x7f\x00\x99\x18\x96\x19\
\x00\x00\x03\x6c\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -467,7 +466,7 @@ qt_resource_data = b"\
\x33\x33\x33\x7a\x0d\x0a\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x3c\
\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
\x3e\x0d\x0a\
-\x00\x00\x04\x22\
+\x00\x00\x04\xbd\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
@@ -488,55 +487,64 @@ qt_resource_data = b"\
\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\
-\x37\x36\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\x29\x27\x3e\x0a\
+\x37\x36\x35\x35\x20\x36\x39\x2e\x37\x36\x38\x38\x29\x27\x3e\x0a\
\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x2d\x39\x2e\x33\x39\
-\x31\x31\x38\x20\x2d\x30\x4c\x20\x2d\x36\x2e\x36\x34\x30\x35\x37\
-\x20\x2d\x31\x32\x2e\x30\x34\x35\x4c\x20\x38\x2e\x36\x37\x36\x33\
-\x32\x20\x2d\x36\x2e\x35\x31\x38\x37\x31\x4c\x20\x33\x2e\x33\x32\
-\x30\x32\x38\x20\x36\x2e\x30\x32\x32\x35\x27\x20\x66\x69\x6c\x6c\
-\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\
-\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
-\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\
-\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\
-\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
-\x3d\x27\x31\x2e\x37\x35\x36\x35\x36\x27\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
-\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
-\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\
-\x37\x36\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\x29\x27\x3e\x0a\
-\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x2d\x39\x2e\x33\
-\x39\x31\x31\x38\x27\x20\x63\x79\x3d\x27\x2d\x30\x27\x20\x72\x3d\
+\x31\x31\x38\x20\x2d\x30\x43\x20\x2d\x39\x2e\x39\x36\x38\x36\x31\
+\x20\x2d\x33\x2e\x38\x33\x30\x30\x34\x20\x2d\x38\x2e\x35\x35\x37\
+\x30\x36\x20\x2d\x37\x2e\x35\x31\x39\x34\x34\x20\x2d\x36\x2e\x36\
+\x34\x30\x35\x37\x20\x2d\x31\x30\x2e\x32\x31\x37\x31\x43\x20\x2d\
+\x30\x2e\x34\x39\x31\x30\x38\x39\x20\x2d\x31\x38\x2e\x38\x37\x33\
+\x33\x20\x38\x2e\x33\x35\x36\x37\x36\x20\x2d\x31\x35\x2e\x31\x39\
+\x30\x36\x20\x38\x2e\x36\x37\x36\x33\x32\x20\x2d\x35\x2e\x35\x32\
+\x39\x34\x38\x43\x20\x38\x2e\x38\x33\x36\x20\x2d\x30\x2e\x37\x30\
+\x32\x30\x30\x38\x20\x36\x2e\x32\x33\x39\x36\x38\x20\x32\x2e\x39\
+\x34\x32\x30\x37\x20\x33\x2e\x33\x32\x30\x32\x38\x20\x35\x2e\x31\
+\x30\x38\x35\x37\x43\x20\x2d\x31\x2e\x39\x36\x38\x39\x31\x20\x39\
+\x2e\x30\x33\x33\x37\x31\x20\x2d\x38\x2e\x32\x36\x38\x39\x35\x20\
+\x37\x2e\x34\x34\x33\x37\x20\x2d\x39\x2e\x33\x39\x31\x31\x38\x20\
+\x2d\x30\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\
+\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\
+\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x31\x2e\x37\x35\x36\
+\x35\x36\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
+\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\
+\x39\x36\x32\x36\x34\x20\x36\x38\x2e\x37\x36\x35\x35\x20\x36\x39\
+\x2e\x37\x36\x38\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\
+\x20\x63\x78\x3d\x27\x2d\x39\x2e\x33\x39\x31\x31\x38\x27\x20\x63\
+\x79\x3d\x27\x2d\x30\x27\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\
+\x35\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
+\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\
+\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\
+\x32\x36\x34\x20\x36\x38\x2e\x37\x36\x35\x35\x20\x36\x39\x2e\x37\
+\x36\x38\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\
+\x78\x3d\x27\x2d\x36\x2e\x36\x34\x30\x35\x37\x27\x20\x63\x79\x3d\
+\x27\x2d\x31\x30\x2e\x32\x31\x37\x31\x27\x20\x72\x3d\x27\x33\x2e\
+\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\
+\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\
+\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\
+\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\
+\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\x37\x36\x35\x35\x20\
+\x36\x39\x2e\x37\x36\x38\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\
+\x6c\x65\x20\x63\x78\x3d\x27\x38\x2e\x36\x37\x36\x33\x32\x27\x20\
+\x63\x79\x3d\x27\x2d\x35\x2e\x35\x32\x39\x34\x38\x27\x20\x72\x3d\
\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\x6c\x3d\x27\
\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\x37\x36\
-\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\x29\x27\x3e\x0a\x3c\x63\
-\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x2d\x36\x2e\x36\x34\x30\
-\x35\x37\x27\x20\x63\x79\x3d\x27\x2d\x31\x32\x2e\x30\x34\x35\x27\
-\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\
-\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
-\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\
-\x2e\x37\x36\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\x29\x27\x3e\
-\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x38\x2e\x36\
-\x37\x36\x33\x32\x27\x20\x63\x79\x3d\x27\x2d\x36\x2e\x35\x31\x38\
-\x37\x31\x27\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\
-\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\
-\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
-\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x36\x38\x2e\x37\x36\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\
-\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
-\x33\x2e\x33\x32\x30\x32\x38\x27\x20\x63\x79\x3d\x27\x36\x2e\x30\
-\x32\x32\x35\x27\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\
-\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\
-\x3e\x0a\x3c\x2f\x67\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
-\x3e\
-\x00\x00\x03\x4c\
+\x35\x35\x20\x36\x39\x2e\x37\x36\x38\x38\x29\x27\x3e\x0a\x3c\x63\
+\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x33\x32\x30\x32\
+\x38\x27\x20\x63\x79\x3d\x27\x35\x2e\x31\x30\x38\x35\x37\x27\x20\
+\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\x6c\
+\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x02\xfc\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -568,75 +576,24 @@ qt_resource_data = b"\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x32\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
+\x22\x49\x63\x6f\x6e\x5f\x32\x30\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
-\x35\x36\x2c\x31\x35\x32\x63\x2d\x35\x37\x2e\x32\x2c\x30\x2d\x31\
-\x30\x34\x2c\x34\x36\x2e\x38\x2d\x31\x30\x34\x2c\x31\x30\x34\x73\
-\x34\x36\x2e\x38\x2c\x31\x30\x34\x2c\x31\x30\x34\x2c\x31\x30\x34\
-\x73\x31\x30\x34\x2d\x34\x36\x2e\x38\x2c\x31\x30\x34\x2d\x31\x30\
-\x34\x53\x33\x31\x33\x2e\x32\x2c\x31\x35\x32\x2c\x32\x35\x36\x2c\
-\x31\x35\x32\x7a\x20\x4d\x32\x35\x36\x2c\x34\x38\x0d\x0a\x09\x09\
-\x09\x43\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x34\x38\x2c\
-\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\x35\x36\x73\x39\
-\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\x38\x2c\x32\x30\
-\x38\x73\x32\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\
-\x2d\x32\x30\x38\x53\x33\x37\x30\x2e\x33\x39\x39\x2c\x34\x38\x2c\
-\x32\x35\x36\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x32\x32\
-\x2e\x34\x0d\x0a\x09\x09\x09\x63\x2d\x39\x31\x2e\x35\x31\x38\x2c\
-\x30\x2d\x31\x36\x36\x2e\x34\x2d\x37\x34\x2e\x38\x38\x33\x2d\x31\
-\x36\x36\x2e\x34\x2d\x31\x36\x36\x2e\x34\x53\x31\x36\x34\x2e\x34\
-\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\x35\x36\x2c\x38\x39\x2e\x36\
-\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\x34\x2e\x34\x38\x32\x2c\x34\
-\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\x33\x34\x37\x2e\x35\x31\x38\
-\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\
+\x35\x36\x2c\x34\x38\x43\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\
+\x2c\x34\x38\x2c\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\
+\x35\x36\x73\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\
+\x38\x2c\x32\x30\x38\x73\x32\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\
+\x2c\x32\x30\x38\x2d\x32\x30\x38\x53\x33\x37\x30\x2e\x33\x39\x39\
+\x2c\x34\x38\x2c\x32\x35\x36\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\
+\x2c\x34\x32\x32\x2e\x33\x39\x39\x0d\x0a\x09\x09\x09\x63\x2d\x39\
+\x31\x2e\x35\x31\x38\x2c\x30\x2d\x31\x36\x36\x2e\x33\x39\x39\x2d\
+\x37\x34\x2e\x38\x38\x32\x2d\x31\x36\x36\x2e\x33\x39\x39\x2d\x31\
+\x36\x36\x2e\x33\x39\x39\x53\x31\x36\x34\x2e\x34\x38\x32\x2c\x38\
+\x39\x2e\x36\x2c\x32\x35\x36\x2c\x38\x39\x2e\x36\x53\x34\x32\x32\
+\x2e\x34\x2c\x31\x36\x34\x2e\x34\x38\x32\x2c\x34\x32\x32\x2e\x34\
+\x2c\x32\x35\x36\x53\x33\x34\x37\x2e\x35\x31\x38\x2c\x34\x32\x32\
+\x2e\x33\x39\x39\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\x39\
\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xbd\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x69\x72\x63\x6c\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
-\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
-\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
-\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
-\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
-\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
-\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\
-\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\
-\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x22\x4d\x31\x30\x2c\x30\x2e\x34\x43\x34\x2e\x36\x39\x38\x2c\x30\
-\x2e\x34\x2c\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\
-\x2c\x31\x30\x43\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x32\x2c\x34\
-\x2e\x36\x39\x38\x2c\x31\x39\x2e\x36\x2c\x31\x30\x2c\x31\x39\x2e\
-\x36\x63\x35\x2e\x33\x30\x31\x2c\x30\x2c\x39\x2e\x36\x2d\x34\x2e\
-\x32\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x30\x31\x0d\x0a\x09\
-\x43\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\x33\
-\x30\x31\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\
-\x31\x30\x2c\x31\x37\x2e\x35\x39\x39\x63\x2d\x34\x2e\x31\x39\x37\
-\x2c\x30\x2d\x37\x2e\x36\x2d\x33\x2e\x34\x30\x32\x2d\x37\x2e\x36\
-\x2d\x37\x2e\x36\x53\x35\x2e\x38\x30\x32\x2c\x32\x2e\x34\x2c\x31\
-\x30\x2c\x32\x2e\x34\x63\x34\x2e\x31\x39\x37\x2c\x30\x2c\x37\x2e\
-\x36\x30\x31\x2c\x33\x2e\x34\x30\x32\x2c\x37\x2e\x36\x30\x31\x2c\
-\x37\x2e\x36\x0d\x0a\x09\x53\x31\x34\x2e\x31\x39\x37\x2c\x31\x37\
-\x2e\x35\x39\x39\x2c\x31\x30\x2c\x31\x37\x2e\x35\x39\x39\x7a\x22\
-\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x05\xb7\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -731,7 +688,7 @@ qt_resource_data = b"\
\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x31\x2e\x37\x35\
\x36\x35\x36\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x3c\x2f\x67\x3e\x0a\
\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x02\xb7\
+\x00\x00\x02\xf7\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -758,26 +715,109 @@ qt_resource_data = b"\
\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x35\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
-\x6e\x74\x73\x3d\x22\x34\x30\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\
-\x20\x33\x37\x35\x2e\x32\x30\x32\x2c\x31\x30\x37\x20\x32\x35\x36\
-\x2c\x32\x32\x36\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
-\x2c\x31\x30\x37\x20\x31\x30\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\
-\x20\x32\x32\x36\x2e\x32\x30\x32\x2c\x32\x35\x36\x20\x31\x30\x37\
-\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
-\x2c\x34\x30\x35\x20\x32\x35\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\
-\x20\x0d\x0a\x09\x09\x09\x33\x37\x35\x2e\x32\x30\x32\x2c\x34\x30\
-\x35\x20\x34\x30\x35\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x32\x38\
-\x35\x2e\x37\x39\x38\x2c\x32\x35\x36\x20\x09\x09\x22\x2f\x3e\x0d\
-\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\
+\x2c\x32\x32\x34\x48\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\
+\x31\x36\x2e\x39\x2d\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\
+\x32\x2d\x33\x30\x2e\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\
+\x32\x2c\x31\x33\x2e\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\
+\x32\x34\x48\x39\x34\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\
+\x2c\x36\x34\x2c\x32\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\
+\x0d\x0a\x09\x63\x30\x2c\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\
+\x33\x32\x2c\x33\x30\x2e\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\
+\x32\x39\x2e\x34\x63\x30\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\
+\x2c\x33\x30\x2e\x36\x2c\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\
+\x2e\x37\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\
+\x33\x30\x2e\x36\x56\x32\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\
+\x36\x2e\x39\x2c\x30\x2c\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\
+\x33\x30\x2e\x36\x2d\x33\x32\x0d\x0a\x09\x43\x34\x34\x38\x2c\x32\
+\x33\x38\x2e\x33\x2c\x34\x33\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\
+\x31\x37\x2e\x34\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\
\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xfc\
+\x00\x00\x04\xca\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x09\x20\x69\x64\x3d\
+\x22\x73\x76\x67\x34\x36\x31\x39\x22\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x31\
+\x2b\x64\x65\x76\x65\x6c\x2b\x6f\x73\x78\x6d\x65\x6e\x75\x20\x72\
+\x31\x32\x39\x31\x31\x22\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\
+\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x74\x72\x69\x61\x6e\x67\x6c\
+\x65\x2d\x73\x74\x72\x6f\x6b\x65\x64\x2d\x31\x35\x2e\x73\x76\x67\
+\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\
+\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\
+\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\
+\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\
+\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\
+\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\
+\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x0a\x09\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\
+\x35\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x35\x70\
+\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x31\x35\x20\x31\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\
+\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
+\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x31\x35\x20\x31\x35\x3b\
+\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\
+\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x69\x64\
+\x3d\x22\x72\x65\x63\x74\x33\x33\x33\x38\x22\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\
+\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x73\x6f\x64\
+\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\
+\x22\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x22\x20\x64\
+\x3d\x22\x4d\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\
+\x0a\x09\x43\x37\x2e\x32\x34\x32\x39\x2c\x31\x2e\x34\x39\x31\x33\
+\x2c\x36\x2e\x39\x37\x38\x37\x2c\x31\x2e\x36\x34\x32\x33\x2c\x36\
+\x2e\x38\x33\x33\x36\x2c\x31\x2e\x38\x39\x35\x32\x6c\x2d\x35\x2e\
+\x35\x2c\x39\x2e\x38\x36\x39\x32\x43\x31\x2e\x30\x32\x31\x38\x2c\
+\x31\x32\x2e\x33\x30\x37\x38\x2c\x31\x2e\x33\x39\x35\x2c\x31\x32\
+\x2e\x39\x39\x39\x39\x2c\x32\x2c\x31\x33\x68\x31\x31\x0a\x09\x63\
+\x30\x2e\x36\x30\x35\x2d\x30\x2e\x30\x30\x30\x31\x2c\x30\x2e\x39\
+\x37\x38\x32\x2d\x30\x2e\x36\x39\x32\x32\x2c\x30\x2e\x36\x36\x36\
+\x34\x2d\x31\x2e\x32\x33\x35\x35\x6c\x2d\x35\x2e\x35\x2d\x39\x2e\
+\x38\x36\x39\x32\x43\x38\x2e\x30\x33\x30\x32\x2c\x31\x2e\x36\x35\
+\x37\x39\x2c\x37\x2e\x37\x38\x38\x34\x2c\x31\x2e\x35\x30\x39\x32\
+\x2c\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\x7a\x20\
+\x4d\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x6c\x34\x2e\x31\x32\
+\x36\x37\x2c\x37\x2e\x34\x37\x30\x34\x0a\x09\x48\x33\x2e\x33\x37\
+\x33\x33\x4c\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x7a\x22\x2f\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x52\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -808,46 +848,32 @@ qt_resource_data = b"\
\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x32\x30\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
-\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
-\x35\x36\x2c\x34\x38\x43\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\
-\x2c\x34\x38\x2c\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\
-\x35\x36\x73\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\
-\x38\x2c\x32\x30\x38\x73\x32\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\
-\x2c\x32\x30\x38\x2d\x32\x30\x38\x53\x33\x37\x30\x2e\x33\x39\x39\
-\x2c\x34\x38\x2c\x32\x35\x36\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\
-\x2c\x34\x32\x32\x2e\x33\x39\x39\x0d\x0a\x09\x09\x09\x63\x2d\x39\
-\x31\x2e\x35\x31\x38\x2c\x30\x2d\x31\x36\x36\x2e\x33\x39\x39\x2d\
-\x37\x34\x2e\x38\x38\x32\x2d\x31\x36\x36\x2e\x33\x39\x39\x2d\x31\
-\x36\x36\x2e\x33\x39\x39\x53\x31\x36\x34\x2e\x34\x38\x32\x2c\x38\
-\x39\x2e\x36\x2c\x32\x35\x36\x2c\x38\x39\x2e\x36\x53\x34\x32\x32\
-\x2e\x34\x2c\x31\x36\x34\x2e\x34\x38\x32\x2c\x34\x32\x32\x2e\x34\
-\x2c\x32\x35\x36\x53\x33\x34\x37\x2e\x35\x31\x38\x2c\x34\x32\x32\
-\x2e\x33\x39\x39\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\x39\
-\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x01\x20\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\x2e\x36\x36\x41\
-\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\x30\x20\x30\x20\
-\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\x56\x38\x68\x34\
-\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\x31\x20\x31\x20\
-\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\x76\x37\x2e\x39\
-\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\x30\x20\
-\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\x2d\x31\x2e\x34\
-\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\x2d\x32\x2e\x38\
-\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\x20\x30\x20\x30\
-\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\x31\x20\x31\x34\
-\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\x34\x32\x20\x31\
-\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\x31\x20\x30\x20\
-\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\x30\x20\x30\x20\
-\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x07\x80\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\
+\x32\x35\x36\x2e\x30\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\
+\x34\x38\x48\x37\x34\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\
+\x2c\x39\x36\x2c\x33\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\
+\x32\x2c\x31\x33\x38\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\
+\x36\x43\x33\x32\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\
+\x31\x39\x37\x2c\x34\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\
+\x31\x36\x68\x33\x36\x32\x2e\x36\x36\x38\x0d\x0a\x09\x43\x34\x36\
+\x30\x2e\x38\x30\x33\x2c\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\
+\x36\x2e\x38\x30\x32\x2c\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\
+\x33\x56\x31\x38\x36\x2e\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\
+\x33\x2e\x31\x39\x38\x2c\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\
+\x34\x2c\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\
+\x34\x34\x38\x2c\x33\x37\x33\x2e\x33\x33\x33\x0d\x0a\x09\x63\x30\
+\x2c\x35\x2e\x37\x38\x32\x2d\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\
+\x36\x36\x37\x2d\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
+\x37\x48\x37\x34\x2e\x36\x36\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\
+\x33\x38\x34\x2c\x36\x34\x2c\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\
+\x34\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x37\x36\x68\x33\x37\
+\x33\x2e\x33\x33\x34\x63\x35\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\
+\x2e\x36\x36\x36\x2c\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\
+\x36\x2c\x31\x30\x2e\x36\x36\x37\x0d\x0a\x09\x56\x33\x37\x33\x2e\
+\x33\x33\x33\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
+\x0a\
+\x00\x00\x03\x26\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -879,97 +905,28 @@ qt_resource_data = b"\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\
-\x2c\x32\x34\x39\x2e\x30\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\
-\x2e\x36\x37\x2c\x37\x2e\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\
-\x31\x31\x2e\x35\x38\x36\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\
-\x2e\x39\x32\x34\x2c\x32\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\
-\x63\x34\x2e\x35\x30\x33\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\
-\x2e\x36\x31\x37\x2c\x31\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\
-\x34\x0d\x0a\x09\x09\x63\x31\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\
-\x33\x2c\x33\x33\x2e\x33\x34\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\
-\x33\x33\x2e\x33\x34\x35\x2d\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\
-\x30\x2e\x38\x32\x32\x76\x2d\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\
-\x32\x34\x2e\x38\x33\x32\x2d\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\
-\x34\x38\x34\x2d\x34\x36\x2e\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\
-\x36\x0d\x0a\x09\x09\x63\x2d\x31\x35\x2e\x39\x33\x31\x2d\x32\x2e\
-\x36\x32\x34\x2d\x33\x39\x2e\x32\x35\x38\x2d\x33\x2e\x38\x32\x37\
-\x2d\x35\x35\x2e\x30\x38\x39\x2d\x33\x2e\x37\x34\x39\x63\x2d\x31\
-\x35\x2e\x38\x32\x39\x2c\x30\x2e\x30\x38\x36\x2d\x33\x30\x2e\x39\
-\x38\x31\x2c\x31\x2e\x34\x30\x34\x2d\x34\x34\x2e\x32\x37\x37\x2c\
-\x33\x2e\x37\x34\x39\x43\x31\x36\x37\x2e\x31\x34\x33\x2c\x37\x34\
-\x2e\x35\x37\x36\x2c\x31\x36\x30\x2c\x38\x38\x2e\x39\x32\x38\x2c\
-\x31\x36\x30\x2c\x31\x31\x35\x2e\x33\x35\x39\x56\x31\x34\x34\x68\
-\x39\x36\x0d\x0a\x09\x09\x76\x31\x36\x48\x31\x32\x38\x2e\x38\x32\
-\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\x30\x2d\x36\x34\x2e\x35\x33\
-\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\x36\x34\x2e\x38\x31\x33\x2c\
-\x39\x35\x2e\x32\x34\x32\x43\x36\x34\x2e\x30\x30\x35\x2c\x32\x35\
-\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\x32\x35\x35\x2e\x37\x34\x37\
-\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x39\x2e\x35\x32\x33\x2c\
-\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\x32\x2c\x32\x2e\x36\x38\x35\
-\x2c\x32\x37\x2e\x34\x30\x34\x0d\x0a\x09\x09\x43\x37\x34\x2e\x36\
-\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\x39\x39\x2e\x34\x35\x31\
-\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\x32\x2c\x33\x35\x32\x48\
-\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\x76\x2d\x34\x33\x2e\x32\
-\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\x2e\x32\x33\x38\x2c\x31\
-\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\x2e\x33\x33\x32\x2c\x31\
-\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\x35\x36\x7a\x20\x4d\
-\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x0d\
-\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\x30\x2d\x31\x37\x2e\
-\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\x37\x2e\x33\x38\x34\
-\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\x2e\x36\x36\x34\x2c\
-\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\x2c\x31\x37\x2e\x33\
-\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\x35\x37\x34\x2c\x30\
-\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\x35\x35\x2c\x31\x37\
-\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0d\x0a\x09\x09\x43\x32\
-\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\x31\x37\x2c\x32\
-\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x2c\x32\
-\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x7a\x22\
-\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
-\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\x33\x43\x34\
-\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\x2c\x34\x31\
-\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\x2e\x31\x38\
-\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\x36\x76\x33\
-\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\x35\x2d\x32\
-\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\x34\x39\x2e\
-\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0d\x0a\x09\x09\x63\x2d\
-\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\x34\x38\
-\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\x30\x2e\
-\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\x2e\x35\
-\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\x38\x34\
-\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\x31\x37\
-\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\x36\x30\
-\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\x2e\x32\
-\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0d\x0a\x09\x09\x76\x35\x34\
-\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\x34\
-\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\x34\
-\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\x37\
-\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\x30\
-\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\x32\
-\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\x32\
-\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\x34\
-\x2e\x34\x36\x33\x56\x33\x36\x38\x0d\x0a\x09\x09\x68\x2d\x39\x36\
-\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
-\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
-\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
-\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
-\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
-\x32\x35\x36\x0d\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\
-\x32\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\
-\x39\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\
-\x35\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\
-\x32\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\
-\x38\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\
-\x31\x37\x2e\x34\x0d\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\
-\x37\x2e\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\
-\x33\x38\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\
-\x37\x2c\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\
-\x2d\x31\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\
-\x39\x30\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\
-\x38\x2e\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\
-\x2e\x38\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0d\
-\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\x7d\
+\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x33\x38\
+\x38\x63\x2d\x37\x32\x2e\x35\x39\x37\x2c\x30\x2d\x31\x33\x32\x2d\
+\x35\x39\x2e\x34\x30\x35\x2d\x31\x33\x32\x2d\x31\x33\x32\x63\x30\
+\x2d\x37\x32\x2e\x36\x30\x31\x2c\x35\x39\x2e\x34\x30\x33\x2d\x31\
+\x33\x32\x2c\x31\x33\x32\x2d\x31\x33\x32\x63\x33\x36\x2e\x33\x2c\
+\x30\x2c\x36\x39\x2e\x32\x39\x39\x2c\x31\x35\x2e\x34\x2c\x39\x32\
+\x2e\x34\x30\x36\x2c\x33\x39\x2e\x36\x30\x31\x4c\x32\x37\x38\x2c\
+\x32\x33\x34\x68\x31\x35\x34\x56\x38\x30\x0d\x0a\x09\x09\x6c\x2d\
+\x35\x31\x2e\x36\x39\x38\x2c\x35\x31\x2e\x37\x30\x32\x43\x33\x34\
+\x38\x2e\x34\x30\x36\x2c\x39\x39\x2e\x37\x39\x38\x2c\x33\x30\x34\
+\x2e\x34\x30\x36\x2c\x38\x30\x2c\x32\x35\x36\x2c\x38\x30\x63\x2d\
+\x39\x36\x2e\x37\x39\x37\x2c\x30\x2d\x31\x37\x36\x2c\x37\x39\x2e\
+\x32\x30\x33\x2d\x31\x37\x36\x2c\x31\x37\x36\x73\x37\x38\x2e\x30\
+\x39\x34\x2c\x31\x37\x36\x2c\x31\x37\x36\x2c\x31\x37\x36\x0d\x0a\
+\x09\x09\x63\x38\x31\x2e\x30\x34\x35\x2c\x30\x2c\x31\x34\x38\x2e\
+\x32\x38\x37\x2d\x35\x34\x2e\x31\x33\x34\x2c\x31\x36\x39\x2e\x34\
+\x30\x31\x2d\x31\x32\x38\x48\x33\x37\x38\x2e\x38\x35\x43\x33\x36\
+\x30\x2e\x31\x30\x35\x2c\x33\x35\x33\x2e\x35\x36\x31\x2c\x33\x31\
+\x31\x2e\x37\x31\x32\x2c\x33\x38\x38\x2c\x32\x35\x36\x2c\x33\x38\
+\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\xc9\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -996,22 +953,27 @@ qt_resource_data = b"\
\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\
-\x37\x2c\x32\x33\x34\x2e\x36\x32\x35\x48\x31\x36\x37\x2e\x32\x39\
-\x36\x6c\x31\x31\x39\x2e\x37\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\
-\x32\x4c\x32\x35\x36\x2c\x38\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\
-\x31\x37\x31\x2c\x31\x37\x31\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\
-\x39\x2e\x39\x32\x34\x4c\x31\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\
-\x37\x2e\x33\x37\x35\x48\x34\x32\x37\x56\x32\x33\x34\x2e\x36\x32\
-\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xf7\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
+\x3d\x22\x34\x38\x30\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\
+\x30\x20\x33\x38\x34\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\
+\x36\x20\x32\x37\x36\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\
+\x38\x20\x32\x35\x36\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\
+\x20\x32\x33\x36\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\
+\x20\x31\x32\x38\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\
+\x20\x33\x32\x2c\x32\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\
+\x0d\x0a\x09\x31\x32\x38\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\
+\x37\x36\x20\x32\x33\x36\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\
+\x38\x34\x20\x32\x35\x36\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\
+\x38\x34\x20\x32\x37\x35\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\
+\x2e\x34\x2c\x32\x37\x35\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\
+\x2e\x38\x20\x33\x38\x34\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0d\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\x7f\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1043,24 +1005,58 @@ qt_resource_data = b"\
\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\
-\x2c\x32\x32\x34\x48\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\
-\x31\x36\x2e\x39\x2d\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\
-\x32\x2d\x33\x30\x2e\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\
-\x32\x2c\x31\x33\x2e\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\
-\x32\x34\x48\x39\x34\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\
-\x2c\x36\x34\x2c\x32\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\
-\x0d\x0a\x09\x63\x30\x2c\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\
-\x33\x32\x2c\x33\x30\x2e\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\
-\x32\x39\x2e\x34\x63\x30\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\
-\x2c\x33\x30\x2e\x36\x2c\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\
-\x2e\x37\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\
-\x33\x30\x2e\x36\x56\x32\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\
-\x36\x2e\x39\x2c\x30\x2c\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\
-\x33\x30\x2e\x36\x2d\x33\x32\x0d\x0a\x09\x43\x34\x34\x38\x2c\x32\
-\x33\x38\x2e\x33\x2c\x34\x33\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\
-\x31\x37\x2e\x34\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\
-\x73\x76\x67\x3e\x0d\x0a\
+\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
+\x3d\x22\x32\x38\x38\x2c\x39\x36\x20\x33\x33\x37\x2e\x39\x2c\x31\
+\x34\x35\x2e\x39\x20\x32\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x32\
+\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x31\x34\x35\x2e\x39\x2c\x33\
+\x33\x37\x2e\x39\x20\x39\x36\x2c\x32\x38\x38\x20\x39\x36\x2c\x34\
+\x31\x36\x20\x32\x32\x34\x2c\x34\x31\x36\x20\x31\x37\x34\x2e\x31\
+\x2c\x33\x36\x36\x2e\x31\x20\x33\x35\x37\x2e\x34\x2c\x31\x38\x32\
+\x2e\x39\x20\x33\x36\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0d\
+\x0a\x09\x34\x31\x36\x2c\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\
+\x20\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\x79\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x67\x3e\x0d\x0a\x09\x09\x09\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x38\x36\
+\x2e\x33\x30\x31\x2c\x33\x33\x39\x2e\x38\x39\x33\x20\x39\x36\x2c\
+\x32\x34\x39\x2e\x34\x36\x31\x20\x36\x34\x2c\x32\x37\x39\x2e\x39\
+\x36\x38\x20\x31\x38\x36\x2e\x33\x30\x31\x2c\x34\x30\x32\x20\x34\
+\x34\x38\x2c\x31\x34\x30\x2e\x35\x30\x36\x20\x34\x31\x36\x2c\x31\
+\x31\x30\x20\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x09\x3c\x2f\x67\
+\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x03\x93\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -1121,13 +1117,13 @@ qt_resource_data = b"\
\x34\x2c\x31\x30\x2e\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\x38\
\x2e\x32\x38\x37\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\
\x0d\x0a\
-\x00\x00\x03\x22\
+\x00\x00\x03\xc4\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
@@ -1139,42 +1135,143 @@ qt_resource_data = b"\
\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x22\x32\x35\x36\x22\
-\x20\x63\x79\x3d\x22\x32\x38\x30\x22\x20\x72\x3d\x22\x36\x33\x22\
-\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
-\x34\x30\x2c\x39\x36\x68\x2d\x38\x38\x6c\x2d\x33\x32\x2d\x33\x32\
-\x48\x31\x39\x32\x6c\x2d\x33\x32\x2c\x33\x32\x48\x37\x32\x63\x2d\
-\x32\x32\x2e\x30\x39\x32\x2c\x30\x2d\x34\x30\x2c\x31\x37\x2e\x39\
-\x30\x38\x2d\x34\x30\x2c\x34\x30\x76\x32\x37\x32\x63\x30\x2c\x32\
-\x32\x2e\x30\x39\x32\x2c\x31\x37\x2e\x39\x30\x38\x2c\x34\x30\x2c\
-\x34\x30\x2c\x34\x30\x68\x33\x36\x38\x63\x32\x32\x2e\x30\x39\x32\
-\x2c\x30\x2c\x34\x30\x2d\x31\x37\x2e\x39\x30\x38\x2c\x34\x30\x2d\
-\x34\x30\x0d\x0a\x09\x09\x56\x31\x33\x36\x43\x34\x38\x30\x2c\x31\
-\x31\x33\x2e\x39\x30\x38\x2c\x34\x36\x32\x2e\x30\x39\x32\x2c\x39\
-\x36\x2c\x34\x34\x30\x2c\x39\x36\x7a\x20\x4d\x32\x35\x36\x2c\x33\
-\x39\x32\x63\x2d\x36\x31\x2e\x38\x35\x35\x2c\x30\x2d\x31\x31\x32\
-\x2d\x35\x30\x2e\x31\x34\x35\x2d\x31\x31\x32\x2d\x31\x31\x32\x73\
-\x35\x30\x2e\x31\x34\x35\x2d\x31\x31\x32\x2c\x31\x31\x32\x2d\x31\
-\x31\x32\x73\x31\x31\x32\x2c\x35\x30\x2e\x31\x34\x35\x2c\x31\x31\
-\x32\x2c\x31\x31\x32\x0d\x0a\x09\x09\x53\x33\x31\x37\x2e\x38\x35\
-\x35\x2c\x33\x39\x32\x2c\x32\x35\x36\x2c\x33\x39\x32\x7a\x22\x2f\
-\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
-\x0a\
-\x00\x00\x05\x27\
+\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
+\x64\x5f\x6c\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\
+\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
+\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\
+\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\x37\x36\x63\x2d\x30\x2e\
+\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\x2e\x35\x31\x35\x2d\
+\x30\x2e\x31\x39\x37\x2d\x30\x2e\x37\x31\x2c\x30\x4c\x37\x2e\x37\
+\x38\x35\x2c\x39\x2e\x36\x34\x31\x63\x2d\x30\x2e\x31\x39\x36\x2c\
+\x30\x2e\x31\x39\x39\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\
+\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x32\x2e\x38\x30\x37\x2c\x32\
+\x2e\x38\x36\x34\x0d\x0a\x09\x63\x30\x2e\x31\x39\x35\x2c\x30\x2e\
+\x31\x39\x39\x2c\x30\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2c\
+\x30\x2e\x37\x31\x2c\x30\x63\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\
+\x39\x37\x2c\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\
+\x2d\x30\x2e\x37\x31\x37\x4c\x39\x2c\x31\x30\x6c\x32\x2e\x33\x30\
+\x32\x2d\x32\x2e\x35\x30\x36\x43\x31\x31\x2e\x34\x39\x38\x2c\x37\
+\x2e\x32\x39\x36\x2c\x31\x31\x2e\x34\x39\x38\x2c\x36\x2e\x39\x37\
+\x36\x2c\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\x37\x36\x7a\x0d\
+\x0a\x09\x20\x4d\x31\x30\x2c\x30\x2e\x34\x63\x2d\x35\x2e\x33\x30\
+\x32\x2c\x30\x2d\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2d\x39\x2e\
+\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\x2c\x34\x2e\
+\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x73\
+\x39\x2e\x36\x2d\x34\x2e\x32\x39\x37\x2c\x39\x2e\x36\x2d\x39\x2e\
+\x36\x43\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\
+\x33\x30\x32\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\
+\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x2d\x34\
+\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\
+\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\
+\x34\x2e\x36\x31\x34\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\x33\x35\
+\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x34\x2e\
+\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\
+\x2c\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\
+\x31\x38\x2e\x33\x35\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\x34\
+\x2e\x36\x31\x33\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\
+\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
+\x3e\x0d\x0a\
+\x00\x00\x00\x6c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
+\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
+\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\xb5\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
+\x64\x5f\x72\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\
+\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\
+\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
+\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\
+\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
+\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x31\x31\x2c\x31\x30\x4c\x38\x2e\x36\x39\x38\x2c\x37\x2e\x34\
+\x39\x34\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x38\x2d\
+\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x39\x2c\x30\x2d\x30\x2e\
+\x37\x31\x38\x63\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\
+\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x37\x31\
+\x2c\x30\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\x0a\
+\x09\x63\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\
+\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\
+\x6c\x2d\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x63\x2d\x30\
+\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2d\x30\x2e\x35\x31\x34\
+\x2c\x30\x2e\x31\x39\x38\x2d\x30\x2e\x37\x31\x2c\x30\x63\x2d\x30\
+\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\x2e\x31\x39\x36\
+\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x31\
+\x31\x2c\x31\x30\x7a\x20\x4d\x31\x30\x2c\x30\x2e\x34\x0d\x0a\x09\
+\x63\x35\x2e\x33\x30\x32\x2c\x30\x2c\x39\x2e\x36\x2c\x34\x2e\x32\
+\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\
+\x30\x33\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\
+\x2c\x39\x2e\x36\x53\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x33\x2c\
+\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\
+\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\
+\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\x0d\x0a\x09\
+\x63\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2d\x33\
+\x2e\x37\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
+\x30\x2d\x34\x2e\x36\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\x38\x2e\
+\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
+\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2c\x33\
+\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0d\
+\x0a\x09\x43\x31\x2e\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\x2c\
+\x35\x2e\x33\x38\x35\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\
+\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\
+\x67\x3e\x0d\x0a\
+\x00\x00\x01\x20\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\x2e\x36\x36\x41\
+\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\x30\x20\x30\x20\
+\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\x56\x38\x68\x34\
+\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\x31\x20\x31\x20\
+\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\x76\x37\x2e\x39\
+\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\x30\x20\
+\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\x2d\x31\x2e\x34\
+\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\x2d\x32\x2e\x38\
+\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\x20\x30\x20\x30\
+\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\x31\x20\x31\x34\
+\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\x34\x32\x20\x31\
+\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\x31\x20\x30\x20\
+\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\x30\x20\x30\x20\
+\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\xeb\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1201,65 +1298,45 @@ qt_resource_data = b"\
\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x31\x32\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
-\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
-\x35\x36\x2c\x36\x34\x43\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\
-\x2c\x36\x34\x2c\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\
-\x35\x36\x63\x30\x2c\x31\x30\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\
-\x34\x30\x31\x2c\x31\x39\x32\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\
-\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\
-\x36\x34\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\
-\x38\x2e\x35\x33\x31\x2d\x33\x2e\x31\x39\x38\x2d\x31\x36\x2d\x38\
-\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x33\x63\x2d\x35\x2e\x33\
-\x33\x33\x2d\x35\x2e\x33\x33\x34\x2d\x38\x2e\x35\x33\x31\x2d\x31\
-\x32\x2e\x38\x30\x33\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\
-\x33\x34\x63\x30\x2d\x31\x38\x2e\x31\x33\x35\x2c\x31\x33\x2e\x38\
-\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x68\x33\x38\x2e\x33\
-\x39\x36\x0d\x0a\x09\x09\x09\x63\x35\x38\x2e\x36\x36\x37\x2c\x30\
-\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x34\x38\x2c\x31\x30\x36\x2e\
-\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\x36\x36\x43\x34\x34\x38\x2c\
-\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\x36\x31\x2e\x36\x30\x34\x2c\
-\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\x7a\x20\x4d\x31\x33\x38\x2e\
-\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\x31\x38\x2e\x31\x33\x36\x2c\
-\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\
-\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\
-\x32\x0d\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
-\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x53\
-\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\x36\x2c\x31\x33\x38\x2e\
-\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\x32\x30\x32\x2e\x36\x36\
-\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\x2e\x31\x33\
-\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\
-\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\
-\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\
-\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\
-\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x32\x33\x34\x2e\x36\
-\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x32\x30\x2e\x38\
-\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x32\x30\x32\x2e\x36\
-\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\x33\x30\x39\
-\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\
-\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\
-\x2d\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\x31\x38\
-\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\
-\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\
-\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x33\x34\
-\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x33\x32\
-\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x33\x30\
-\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\
-\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0d\x0a\x09\x09\x09\
-\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\
-\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\
-\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\
-\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\
-\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\x35\x36\x2c\
-\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\x2f\x3e\x0d\
-\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xc9\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x32\x35\x36\x2c\x31\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\
+\x2d\x31\x34\x35\x2e\x37\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\
+\x31\x32\x38\x63\x36\x37\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\
+\x34\x2c\x31\x32\x38\x2c\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\
+\x2e\x39\x2c\x30\x2c\x31\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\
+\x32\x32\x34\x2d\x31\x32\x36\x2e\x36\x0d\x0a\x09\x09\x43\x34\x32\
+\x38\x2e\x32\x2c\x31\x39\x38\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\
+\x31\x32\x38\x2c\x32\x35\x36\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\
+\x36\x2c\x33\x34\x37\x2e\x33\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\
+\x38\x39\x2e\x36\x2d\x34\x31\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\
+\x33\x63\x30\x2d\x35\x30\x2e\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\
+\x2e\x33\x2c\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\
+\x36\x2c\x34\x31\x2c\x38\x39\x2e\x36\x2c\x39\x31\x2e\x33\x0d\x0a\
+\x09\x09\x43\x33\x34\x35\x2e\x36\x2c\x33\x30\x36\x2e\x34\x2c\x33\
+\x30\x35\x2e\x34\x2c\x33\x34\x37\x2e\x33\x2c\x32\x35\x36\x2c\x33\
+\x34\x37\x2e\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x67\x3e\x0d\x0a\
+\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\
+\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\x32\x2e\x39\x2d\x31\x35\
+\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\x37\x63\x2d\x32\x2e\x35\
+\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\x2d\x37\x2e\x36\x2d\x30\
+\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\x2d\x35\x32\x2e\x33\x2c\
+\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x63\x30\
+\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\x2c\x35\x33\x2e\x33\x2c\
+\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0d\x0a\x09\x09\x09\x73\x35\
+\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\x2e\x33\x2d\x35\x33\
+\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\x32\x2d\x34\x2e\x36\
+\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\x2e\x35\x2c\x34\x2e\
+\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\x31\x39\x2e\x38\x2c\
+\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\x35\x36\x2c\x32\x35\
+\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\x2c\x32\x32\x34\x7a\
+\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\
+\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\x7d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1286,26 +1363,21 @@ qt_resource_data = b"\
\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
-\x3d\x22\x34\x38\x30\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\
-\x30\x20\x33\x38\x34\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\
-\x36\x20\x32\x37\x36\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\
-\x38\x20\x32\x35\x36\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\
-\x20\x32\x33\x36\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\
-\x20\x31\x32\x38\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\
-\x20\x33\x32\x2c\x32\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\
-\x0d\x0a\x09\x31\x32\x38\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\
-\x37\x36\x20\x32\x33\x36\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\
-\x38\x34\x20\x32\x35\x36\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\
-\x38\x34\x20\x32\x37\x35\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\
-\x2e\x34\x2c\x32\x37\x35\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\
-\x2e\x38\x20\x33\x38\x34\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0d\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\
+\x2c\x32\x37\x37\x2e\x33\x37\x35\x68\x32\x35\x39\x2e\x37\x30\x34\
+\x4c\x32\x32\x35\x2e\x30\x30\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\
+\x4c\x32\x35\x36\x2c\x34\x32\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\
+\x4c\x32\x35\x36\x2c\x38\x35\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\
+\x32\x39\x2e\x39\x32\x34\x6c\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\
+\x31\x39\x2e\x37\x30\x31\x48\x38\x35\x56\x32\x37\x37\x2e\x33\x37\
+\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x03\x36\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -1360,6 +1432,250 @@ qt_resource_data = b"\
\x2c\x34\x34\x38\x20\x31\x39\x32\x2c\x33\x39\x36\x2e\x37\x39\x35\
\x20\x09\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
\x76\x67\x3e\x0d\x0a\
+\x00\x00\x00\xdd\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x22\
+\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x38\x22\x20\x76\x69\x65\x77\
+\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x38\x20\x38\x22\x3e\x0a\x20\
+\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x30\x20\x30\x76\x32\
+\x68\x2e\x35\x63\x30\x2d\x2e\x35\x35\x2e\x34\x35\x2d\x31\x20\x31\
+\x2d\x31\x68\x31\x2e\x35\x76\x35\x2e\x35\x63\x30\x20\x2e\x32\x38\
+\x2d\x2e\x32\x32\x2e\x35\x2d\x2e\x35\x2e\x35\x68\x2d\x2e\x35\x76\
+\x31\x68\x34\x76\x2d\x31\x68\x2d\x2e\x35\x63\x2d\x2e\x32\x38\x20\
+\x30\x2d\x2e\x35\x2d\x2e\x32\x32\x2d\x2e\x35\x2d\x2e\x35\x76\x2d\
+\x35\x2e\x35\x68\x31\x2e\x35\x63\x2e\x35\x35\x20\x30\x20\x31\x20\
+\x2e\x34\x35\x20\x31\x20\x31\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\
+\x7a\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\x4c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x32\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
+\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
+\x35\x36\x2c\x31\x35\x32\x63\x2d\x35\x37\x2e\x32\x2c\x30\x2d\x31\
+\x30\x34\x2c\x34\x36\x2e\x38\x2d\x31\x30\x34\x2c\x31\x30\x34\x73\
+\x34\x36\x2e\x38\x2c\x31\x30\x34\x2c\x31\x30\x34\x2c\x31\x30\x34\
+\x73\x31\x30\x34\x2d\x34\x36\x2e\x38\x2c\x31\x30\x34\x2d\x31\x30\
+\x34\x53\x33\x31\x33\x2e\x32\x2c\x31\x35\x32\x2c\x32\x35\x36\x2c\
+\x31\x35\x32\x7a\x20\x4d\x32\x35\x36\x2c\x34\x38\x0d\x0a\x09\x09\
+\x09\x43\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x34\x38\x2c\
+\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\x35\x36\x73\x39\
+\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\x38\x2c\x32\x30\
+\x38\x73\x32\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\
+\x2d\x32\x30\x38\x53\x33\x37\x30\x2e\x33\x39\x39\x2c\x34\x38\x2c\
+\x32\x35\x36\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x32\x32\
+\x2e\x34\x0d\x0a\x09\x09\x09\x63\x2d\x39\x31\x2e\x35\x31\x38\x2c\
+\x30\x2d\x31\x36\x36\x2e\x34\x2d\x37\x34\x2e\x38\x38\x33\x2d\x31\
+\x36\x36\x2e\x34\x2d\x31\x36\x36\x2e\x34\x53\x31\x36\x34\x2e\x34\
+\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\x35\x36\x2c\x38\x39\x2e\x36\
+\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\x34\x2e\x34\x38\x32\x2c\x34\
+\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\x33\x34\x37\x2e\x35\x31\x38\
+\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\
+\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x07\x80\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\
+\x2c\x32\x34\x39\x2e\x30\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\
+\x2e\x36\x37\x2c\x37\x2e\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\
+\x31\x31\x2e\x35\x38\x36\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\
+\x2e\x39\x32\x34\x2c\x32\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\
+\x63\x34\x2e\x35\x30\x33\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\
+\x2e\x36\x31\x37\x2c\x31\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\
+\x34\x0d\x0a\x09\x09\x63\x31\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\
+\x33\x2c\x33\x33\x2e\x33\x34\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\
+\x33\x33\x2e\x33\x34\x35\x2d\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\
+\x30\x2e\x38\x32\x32\x76\x2d\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\
+\x32\x34\x2e\x38\x33\x32\x2d\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\
+\x34\x38\x34\x2d\x34\x36\x2e\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\
+\x36\x0d\x0a\x09\x09\x63\x2d\x31\x35\x2e\x39\x33\x31\x2d\x32\x2e\
+\x36\x32\x34\x2d\x33\x39\x2e\x32\x35\x38\x2d\x33\x2e\x38\x32\x37\
+\x2d\x35\x35\x2e\x30\x38\x39\x2d\x33\x2e\x37\x34\x39\x63\x2d\x31\
+\x35\x2e\x38\x32\x39\x2c\x30\x2e\x30\x38\x36\x2d\x33\x30\x2e\x39\
+\x38\x31\x2c\x31\x2e\x34\x30\x34\x2d\x34\x34\x2e\x32\x37\x37\x2c\
+\x33\x2e\x37\x34\x39\x43\x31\x36\x37\x2e\x31\x34\x33\x2c\x37\x34\
+\x2e\x35\x37\x36\x2c\x31\x36\x30\x2c\x38\x38\x2e\x39\x32\x38\x2c\
+\x31\x36\x30\x2c\x31\x31\x35\x2e\x33\x35\x39\x56\x31\x34\x34\x68\
+\x39\x36\x0d\x0a\x09\x09\x76\x31\x36\x48\x31\x32\x38\x2e\x38\x32\
+\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\x30\x2d\x36\x34\x2e\x35\x33\
+\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\x36\x34\x2e\x38\x31\x33\x2c\
+\x39\x35\x2e\x32\x34\x32\x43\x36\x34\x2e\x30\x30\x35\x2c\x32\x35\
+\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\x32\x35\x35\x2e\x37\x34\x37\
+\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x39\x2e\x35\x32\x33\x2c\
+\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\x32\x2c\x32\x2e\x36\x38\x35\
+\x2c\x32\x37\x2e\x34\x30\x34\x0d\x0a\x09\x09\x43\x37\x34\x2e\x36\
+\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\x39\x39\x2e\x34\x35\x31\
+\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\x32\x2c\x33\x35\x32\x48\
+\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\x76\x2d\x34\x33\x2e\x32\
+\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\x2e\x32\x33\x38\x2c\x31\
+\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\x2e\x33\x33\x32\x2c\x31\
+\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\x35\x36\x7a\x20\x4d\
+\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x0d\
+\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\x30\x2d\x31\x37\x2e\
+\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\x37\x2e\x33\x38\x34\
+\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\x2e\x36\x36\x34\x2c\
+\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\x2c\x31\x37\x2e\x33\
+\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\x35\x37\x34\x2c\x30\
+\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\x35\x35\x2c\x31\x37\
+\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0d\x0a\x09\x09\x43\x32\
+\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\x31\x37\x2c\x32\
+\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x2c\x32\
+\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x7a\x22\
+\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\x33\x43\x34\
+\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\x2c\x34\x31\
+\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\x2e\x31\x38\
+\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\x36\x76\x33\
+\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\x35\x2d\x32\
+\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\x34\x39\x2e\
+\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0d\x0a\x09\x09\x63\x2d\
+\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\x34\x38\
+\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\x30\x2e\
+\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\x2e\x35\
+\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\x38\x34\
+\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\x31\x37\
+\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\x36\x30\
+\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\x2e\x32\
+\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0d\x0a\x09\x09\x76\x35\x34\
+\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\x34\
+\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\x34\
+\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\x37\
+\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\x30\
+\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\x32\
+\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\x32\
+\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\x34\
+\x2e\x34\x36\x33\x56\x33\x36\x38\x0d\x0a\x09\x09\x68\x2d\x39\x36\
+\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
+\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
+\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
+\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
+\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
+\x32\x35\x36\x0d\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\
+\x32\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\
+\x39\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\
+\x35\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\
+\x32\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\
+\x38\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\
+\x31\x37\x2e\x34\x0d\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\
+\x37\x2e\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\
+\x33\x38\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\
+\x37\x2c\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\
+\x2d\x31\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\
+\x39\x30\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\
+\x38\x2e\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\
+\x2e\x38\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0d\
+\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\x0c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\
+\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\
+\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
+\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\
+\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
+\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\
+\x2e\x34\x33\x35\x2c\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\
+\x30\x33\x2d\x31\x2e\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\
+\x2e\x36\x31\x2c\x31\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\
+\x35\x2d\x30\x2e\x36\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\
+\x34\x38\x36\x2c\x30\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0d\x0a\
+\x09\x63\x30\x2e\x36\x31\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\
+\x34\x38\x38\x2d\x30\x2e\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\
+\x30\x2e\x32\x37\x6c\x32\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\
+\x6c\x35\x2e\x39\x31\x31\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\
+\x30\x37\x2d\x30\x2e\x36\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\
+\x2e\x38\x35\x32\x2c\x31\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\
+\x0d\x0a\x09\x63\x30\x2e\x36\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\
+\x30\x2e\x38\x35\x34\x2c\x31\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\
+\x36\x2c\x31\x2e\x39\x32\x4c\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\
+\x33\x34\x63\x2d\x30\x2e\x32\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\
+\x30\x2e\x36\x36\x31\x2c\x30\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\
+\x2c\x30\x2e\x36\x35\x36\x43\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\
+\x39\x39\x38\x2c\x38\x2e\x33\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\
+\x2c\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x04\x8d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -1435,135 +1751,6 @@ qt_resource_data = b"\
\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\x6c\
\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\
\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x03\x46\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x33\x37\x2e\x35\
-\x2c\x33\x38\x36\x2e\x36\x4c\x33\x30\x36\x2e\x39\x2c\x32\x35\x36\
-\x6c\x31\x33\x30\x2e\x36\x2d\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\
-\x31\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\
-\x2c\x30\x2d\x35\x30\x2e\x39\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\
-\x2e\x31\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\
-\x39\x2c\x30\x4c\x32\x35\x36\x2c\x32\x30\x35\x2e\x31\x4c\x31\x32\
-\x35\x2e\x34\x2c\x37\x34\x2e\x35\x0d\x0a\x09\x63\x2d\x31\x34\x2e\
-\x31\x2d\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\
-\x2d\x35\x30\x2e\x39\x2c\x30\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\
-\x2e\x31\x2d\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\
-\x30\x2e\x39\x4c\x32\x30\x35\x2e\x31\x2c\x32\x35\x36\x4c\x37\x34\
-\x2e\x35\x2c\x33\x38\x36\x2e\x36\x63\x2d\x31\x34\x2e\x31\x2c\x31\
-\x34\x2e\x31\x2d\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\
-\x35\x30\x2e\x39\x0d\x0a\x09\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\
-\x31\x2c\x33\x36\x2e\x38\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\
-\x2c\x30\x4c\x32\x35\x36\x2c\x33\x30\x36\x2e\x39\x6c\x31\x33\x30\
-\x2e\x36\x2c\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\x31\x2c\x31\x34\
-\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\
-\x39\x2c\x30\x43\x34\x35\x31\x2e\x35\x2c\x34\x32\x33\x2e\x34\x2c\
-\x34\x35\x31\x2e\x35\x2c\x34\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\
-\x35\x2c\x33\x38\x36\x2e\x36\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\
-\x76\x67\x3e\x0d\x0a\
-\x00\x00\x04\x79\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\
-\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
-\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\
-\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\x35\x63\x2d\x30\x2e\x32\
-\x33\x36\x2c\x30\x2d\x30\x2e\x34\x37\x34\x2d\x30\x2e\x30\x38\x33\
-\x2d\x30\x2e\x36\x36\x34\x2d\x30\x2e\x32\x35\x32\x4c\x2d\x30\x2e\
-\x30\x30\x35\x2c\x31\x30\x6c\x35\x2e\x33\x34\x31\x2d\x34\x2e\x37\
-\x34\x38\x43\x35\x2e\x37\x34\x38\x2c\x34\x2e\x38\x38\x37\x2c\x36\
-\x2e\x33\x38\x2c\x34\x2e\x39\x32\x32\x2c\x36\x2e\x37\x34\x37\x2c\
-\x35\x2e\x33\x33\x35\x0d\x0a\x09\x63\x30\x2e\x33\x36\x37\x2c\x30\
-\x2e\x34\x31\x33\x2c\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2d\
-\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x4c\x33\x2e\x30\x30\
-\x35\x2c\x31\x30\x6c\x33\x2e\x33\x37\x38\x2c\x33\x2e\x30\x30\x32\
-\x63\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\
-\x35\x2c\x30\x2e\x39\x39\x39\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\
-\x34\x31\x32\x0d\x0a\x09\x43\x36\x2e\x32\x36\x39\x2c\x31\x34\x2e\
-\x36\x33\x37\x2c\x35\x2e\x39\x39\x34\x2c\x31\x34\x2e\x37\x35\x2c\
-\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\x35\x7a\x20\x4d\x31\x34\
-\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x4c\x32\x30\x2e\x30\
-\x30\x35\x2c\x31\x30\x6c\x2d\x35\x2e\x30\x36\x2d\x34\x2e\x34\x39\
-\x38\x63\x2d\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\x36\x37\x2d\x31\
-\x2e\x30\x34\x35\x2d\x30\x2e\x33\x33\x2d\x31\x2e\x34\x31\x31\x2c\
-\x30\x2e\x30\x38\x33\x0d\x0a\x09\x63\x2d\x30\x2e\x33\x36\x37\x2c\
-\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\
-\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x4c\x31\x36\x2e\
-\x39\x39\x35\x2c\x31\x30\x6c\x2d\x33\x2e\x36\x35\x39\x2c\x33\x2e\
-\x32\x35\x32\x63\x2d\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\x37\
-\x2d\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2d\x30\x2e\x30\x38\
-\x33\x2c\x31\x2e\x34\x31\x32\x43\x31\x33\x2e\x34\x35\x2c\x31\x34\
-\x2e\x38\x38\x37\x2c\x31\x33\x2e\x37\x32\x35\x2c\x31\x35\x2c\x31\
-\x34\x2c\x31\x35\x0d\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\x2c\x31\
-\x35\x2c\x31\x34\x2e\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\x37\x2c\
-\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\x20\x4d\
-\x39\x2e\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\x2d\x31\
-\x32\x63\x30\x2e\x30\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\x30\x2e\
-\x32\x37\x37\x2d\x31\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\x2d\x31\
-\x2e\x31\x35\x31\x0d\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\x30\
-\x2e\x30\x39\x32\x2d\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\x37\
-\x2d\x31\x2e\x31\x35\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\x31\
-\x32\x63\x2d\x30\x2e\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\x30\
-\x2e\x32\x37\x37\x2c\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\x2c\
-\x31\x2e\x31\x35\x31\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\x39\
-\x39\x36\x2c\x38\x2e\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\x30\
-\x31\x2c\x31\x37\x0d\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\
-\x2c\x39\x2e\x39\x30\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\
-\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0d\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x04\x30\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -1633,210 +1820,7 @@ qt_resource_data = b"\
\x35\x27\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\
\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\
\x3c\x2f\x67\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x01\xdd\
-\x00\
-\x00\x06\xe4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\x13\x29\xff\
-\x61\xba\xb7\x4a\xec\x17\xc4\xd4\xa6\xa6\x51\xfd\x21\xcb\x52\x9a\
-\x58\x6a\xea\xaa\xa7\x0a\xc3\x16\x50\x28\x20\x58\xc0\xce\xaf\xef\
-\xee\x92\x54\x51\x95\xfa\x18\xfb\xb0\x33\xda\x79\x6f\xde\xbc\x65\
-\x24\xa6\xd7\xfb\xdf\x39\x74\xa2\x6e\xb2\xb2\x08\x10\x27\x0c\x81\
-\x28\xa2\x32\xce\x8a\x24\x40\xad\xfc\x85\xc7\xe8\xfa\xd3\xe5\xc5\
-\xf4\x1d\xc6\xb0\x12\x85\xa8\x43\x59\xd6\x3e\x7c\x8e\xcb\x9d\x80\
-\x75\x9e\xb7\x8d\x34\x25\xe0\x1e\x71\x08\xb7\xe1\xeb\x76\x05\xcb\
-\x7d\x55\xd6\x12\x36\x79\x9b\xe0\x75\x01\xc4\x14\xb7\xc3\x10\x1f\
-\x3c\xc2\x18\xcc\xda\x2c\x8f\x81\xbd\x07\xc0\xd8\xe8\x2f\xee\xe6\
-\xf7\x3f\x36\x4b\x68\xba\x04\x36\xdf\x66\x37\xeb\x39\x20\x4c\xe9\
-\x77\x77\x4e\xe9\xe2\x7e\x61\x24\x38\xe1\x94\x2e\x6f\x11\xa0\x54\
-\xca\xca\xa7\xb4\xef\x7b\xd2\xbb\xa4\xac\x13\xba\xaa\xc3\x2a\xcd\
-\xa2\x86\x2a\x22\xd5\x44\xd5\x44\x95\x18\xe7\x24\x96\x31\xd2\x33\
-\xb4\xf4\x8b\xa7\x72\x04\x59\x1c\xa0\x9b\xf0\x20\xea\x9f\xea\xa2\
-\xbe\x44\xd1\x04\xaf\x48\x3b\x8c\x31\x2d\xf5\x44\xf1\xf7\x79\x56\
-\x3c\xbc\x46\xe4\x93\xc9\x84\x1a\x54\x51\x03\xc4\xaa\x3d\x82\xc3\
-\x90\x2f\x2f\x2c\xe8\xb3\x58\xa6\x01\x1a\x71\x47\x03\xa9\xc8\x92\
-\x54\xfe\xbd\x76\x99\xe8\x67\xa5\xee\x02\x06\xaa\xa6\x0f\x82\x46\
-\x1e\x72\x11\x20\x51\x84\xbb\x5c\xe0\x5d\x18\x3d\x24\x75\xd9\x16\
-\xb1\x5f\x88\x1e\x5e\x30\x3f\x1a\x6f\x7e\x53\x85\x91\xa2\x57\xb5\
-\x68\x44\xdd\x09\xf3\xea\x44\x05\x6b\x88\xd6\xb4\x0a\x65\x0a\xea\
-\xd1\x5f\xb8\xc7\x6c\x3e\x72\x89\x1b\x31\xdb\x25\x1f\xb0\x6b\x7b\
-\x2a\xaa\xa3\x73\x8a\x47\x8c\x8c\x22\xac\x00\x9b\xe9\x22\x76\xf1\
-\x13\xdc\x0d\x10\x33\x98\xfb\xdc\xa0\x73\x6a\x00\xd3\xa2\x4b\xb6\
-\x51\xd4\x67\x6b\xe6\x3c\xea\x4f\x60\x59\xf4\x1f\x1f\xce\x78\x7c\
-\x16\x3e\xae\xb8\x77\x3a\x1f\x53\xfa\xff\x25\x39\x63\xfe\x26\xa6\
-\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x71\x6c\x49\x57\x6c\
-\xf2\x26\xa6\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x31\x2c\
-\xe9\x39\xaa\x7f\xb6\xca\x7f\x00\x99\x18\x96\x19\
-\x00\x00\x04\xbd\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x34\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x68\x65\x69\x67\x68\
-\x74\x3d\x27\x32\x34\x70\x74\x27\x20\x76\x65\x72\x73\x69\x6f\x6e\
-\x3d\x27\x31\x2e\x31\x27\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x27\
-\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\x38\x35\x38\x33\x20\
-\x32\x34\x20\x32\x34\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x32\x34\
-\x70\x74\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\
-\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
-\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\
-\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\
-\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
-\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
-\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\
-\x37\x36\x35\x35\x20\x36\x39\x2e\x37\x36\x38\x38\x29\x27\x3e\x0a\
-\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x2d\x39\x2e\x33\x39\
-\x31\x31\x38\x20\x2d\x30\x43\x20\x2d\x39\x2e\x39\x36\x38\x36\x31\
-\x20\x2d\x33\x2e\x38\x33\x30\x30\x34\x20\x2d\x38\x2e\x35\x35\x37\
-\x30\x36\x20\x2d\x37\x2e\x35\x31\x39\x34\x34\x20\x2d\x36\x2e\x36\
-\x34\x30\x35\x37\x20\x2d\x31\x30\x2e\x32\x31\x37\x31\x43\x20\x2d\
-\x30\x2e\x34\x39\x31\x30\x38\x39\x20\x2d\x31\x38\x2e\x38\x37\x33\
-\x33\x20\x38\x2e\x33\x35\x36\x37\x36\x20\x2d\x31\x35\x2e\x31\x39\
-\x30\x36\x20\x38\x2e\x36\x37\x36\x33\x32\x20\x2d\x35\x2e\x35\x32\
-\x39\x34\x38\x43\x20\x38\x2e\x38\x33\x36\x20\x2d\x30\x2e\x37\x30\
-\x32\x30\x30\x38\x20\x36\x2e\x32\x33\x39\x36\x38\x20\x32\x2e\x39\
-\x34\x32\x30\x37\x20\x33\x2e\x33\x32\x30\x32\x38\x20\x35\x2e\x31\
-\x30\x38\x35\x37\x43\x20\x2d\x31\x2e\x39\x36\x38\x39\x31\x20\x39\
-\x2e\x30\x33\x33\x37\x31\x20\x2d\x38\x2e\x32\x36\x38\x39\x35\x20\
-\x37\x2e\x34\x34\x33\x37\x20\x2d\x39\x2e\x33\x39\x31\x31\x38\x20\
-\x2d\x30\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
-\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\
-\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
-\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\
-\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\
-\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x31\x2e\x37\x35\x36\
-\x35\x36\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
-\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\
-\x39\x36\x32\x36\x34\x20\x36\x38\x2e\x37\x36\x35\x35\x20\x36\x39\
-\x2e\x37\x36\x38\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\
-\x20\x63\x78\x3d\x27\x2d\x39\x2e\x33\x39\x31\x31\x38\x27\x20\x63\
-\x79\x3d\x27\x2d\x30\x27\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\
-\x35\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
-\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
-\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\
-\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\
-\x32\x36\x34\x20\x36\x38\x2e\x37\x36\x35\x35\x20\x36\x39\x2e\x37\
-\x36\x38\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\
-\x78\x3d\x27\x2d\x36\x2e\x36\x34\x30\x35\x37\x27\x20\x63\x79\x3d\
-\x27\x2d\x31\x30\x2e\x32\x31\x37\x31\x27\x20\x72\x3d\x27\x33\x2e\
-\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\
-\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\
-\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\
-\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\
-\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\x37\x36\x35\x35\x20\
-\x36\x39\x2e\x37\x36\x38\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\
-\x6c\x65\x20\x63\x78\x3d\x27\x38\x2e\x36\x37\x36\x33\x32\x27\x20\
-\x63\x79\x3d\x27\x2d\x35\x2e\x35\x32\x39\x34\x38\x27\x20\x72\x3d\
-\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
-\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\x37\x36\
-\x35\x35\x20\x36\x39\x2e\x37\x36\x38\x38\x29\x27\x3e\x0a\x3c\x63\
-\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x33\x32\x30\x32\
-\x38\x27\x20\x63\x79\x3d\x27\x35\x2e\x31\x30\x38\x35\x37\x27\x20\
-\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\x6c\
-\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x02\x20\
-\x00\
-\x00\x07\x7f\x78\x9c\xdd\x55\x3b\x6f\xdb\x30\x10\xde\xfb\x2b\xae\
-\xe8\xc0\x76\x20\x45\x52\x24\x45\x06\x51\x02\xd4\x40\xa7\x74\x4b\
-\x96\x6e\x6a\xcc\x48\x6c\x6c\xc9\x90\x54\xcb\xfd\xf7\x3d\xc5\xd6\
-\xc3\x56\xd0\x29\x43\x11\x69\xd0\x3d\x78\x77\xdf\x7d\xc7\x83\xae\
-\x6f\x0f\xdb\x0d\xec\x7d\xdd\x84\xaa\x4c\x89\x60\x9c\x80\x2f\x1f\
-\xab\x75\x28\xf3\x94\x3c\xdc\x7f\xa3\x96\xdc\xde\x7c\xb8\xfe\x48\
-\x29\xdc\x17\xa1\x81\xa7\xb0\xf1\xd0\x65\x0d\xe4\xbe\xf4\x75\xd6\
-\xfa\x35\xfc\xfc\x03\xeb\x7d\x68\xf6\xf9\x16\x24\x53\x40\x29\x9e\
-\x47\x0d\x0a\x1f\xf2\xa2\x4d\x89\x54\xbb\x96\xcc\x6b\x08\xd4\x82\
-\xef\xbe\x56\x87\x94\x68\xc3\x14\x77\x0a\x74\xcc\xac\xb6\x31\x08\
-\xcb\x54\x9c\x68\x90\x8a\x40\x17\xd6\x6d\x81\x01\x47\x53\x9f\x04\
-\xc1\x96\x4d\x4a\x8a\xb6\xdd\x5d\x45\x51\xd7\x75\xac\x8b\x59\x55\
-\xe7\x91\xe4\x9c\x47\x58\xf4\x74\xe4\xea\xb0\x09\xe5\xf3\x6b\x07\
-\x85\x73\x2e\x7a\xf1\x12\x84\x99\x43\x58\xa7\x64\x97\xe5\x5e\x1c\
-\xd5\xb6\xce\xca\xe6\xa9\xaa\xb7\x29\xd9\x66\x6d\x1d\x0e\x9f\x39\
-\x73\xce\x48\xa3\x80\xf7\xef\xa0\x18\xcd\x8c\xb4\x12\x12\xc5\x24\
-\x97\x5f\xfa\xe0\x5d\xd6\x16\x80\xd9\xbe\x03\xb5\x0c\xf1\x72\xa4\
-\x42\x33\x2e\x35\x97\x77\x33\x13\x9f\x2b\x02\x9b\x76\x26\xf6\x54\
-\xe8\xd5\x99\x59\xc6\x2e\xd1\xbd\x79\x66\x35\x4c\x38\x9b\x24\x68\
-\x35\xf3\x7c\xb3\x40\xc1\xb4\x12\x16\xa8\x42\x70\x28\xe1\x38\x12\
-\x27\x8c\x45\xe0\x27\x69\x05\x97\xae\x8b\xd0\x41\x45\x94\xaf\x88\
-\x53\x3f\x13\x54\xce\x38\x62\x9f\x74\x4c\xe4\x30\xd1\x50\x87\x0a\
-\xc9\xac\x12\x09\x62\x18\xc4\xd5\x04\x70\xf4\xd2\x45\x02\x7a\x5e\
-\xe2\x6e\xc9\xea\x0f\xd2\xdf\xc6\x4d\x4a\x3e\x59\xde\xbf\x24\xc2\
-\x29\x44\xf9\xdb\xcd\x71\x8e\x49\x18\x93\xcc\xdb\x44\xfe\xb8\xd5\
-\xb3\x36\x63\xe6\xb4\x55\x2f\x6d\x1e\xc5\xb3\x36\x4f\x5e\xba\x48\
-\x40\x97\x45\x26\x93\xc3\x78\xe5\xe4\x2c\xd1\x38\x94\x51\x9c\x46\
-\x3a\x3a\x17\xf1\x97\x35\x46\xe6\xca\xaa\xf4\x04\x9a\xb6\xae\x9e\
-\x3d\xf2\xc8\x5f\x9e\xc1\x40\x71\x4b\xfc\x63\xb6\x4b\x49\x5d\xfd\
-\x2e\xd7\x67\xe6\x5f\x55\x28\x2f\xed\xdb\xd0\xfa\x7a\x13\xf0\x83\
-\x3b\x8b\x33\xc3\x9a\xa3\x6f\x58\x65\x96\x68\xa3\xcd\x9b\x4f\x6a\
-\xc1\xe2\xbb\xd9\xb8\x53\x3f\xef\x6d\x60\xff\x5a\x2d\x8d\x44\x49\
-\x31\x5b\x2d\x77\x64\x8a\x8f\xe2\xd9\x6a\x9d\xbc\x74\x91\x60\x71\
-\x29\xfe\x13\x12\x8f\x44\xf6\x7f\xab\x9b\xbf\x3f\x45\xd8\x3d\
-\x00\x00\x03\x65\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x34\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x68\x65\x69\x67\x68\
-\x74\x3d\x27\x31\x38\x2e\x37\x35\x70\x74\x27\x20\x76\x65\x72\x73\
-\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\x38\x35\
-\x38\x33\x20\x31\x38\x2e\x37\x35\x20\x31\x38\x2e\x37\x35\x27\x20\
-\x77\x69\x64\x74\x68\x3d\x27\x31\x38\x2e\x37\x35\x70\x74\x27\x20\
-\x78\x6d\x6c\x6e\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
-\x67\x27\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x3e\x0a\x3c\
-\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\x67\
-\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
-\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\
-\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x35\x2e\x37\x38\x34\x34\
-\x20\x36\x33\x2e\x32\x33\x33\x33\x29\x27\x3e\x0a\x3c\x70\x61\x74\
-\x68\x20\x64\x3d\x27\x4d\x20\x2d\x38\x2e\x36\x35\x37\x33\x34\x20\
-\x38\x2e\x36\x35\x37\x33\x34\x4c\x20\x38\x2e\x36\x35\x37\x33\x34\
-\x20\x38\x2e\x36\x35\x37\x33\x34\x4c\x20\x38\x2e\x36\x35\x37\x33\
-\x34\x20\x2d\x38\x2e\x36\x35\x37\x33\x34\x4c\x20\x2d\x38\x2e\x36\
-\x35\x37\x33\x34\x20\x2d\x38\x2e\x36\x35\x37\x33\x34\x4c\x20\x2d\
-\x38\x2e\x36\x35\x37\x33\x34\x20\x38\x2e\x36\x35\x37\x33\x34\x5a\
-\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\
-\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\
-\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\
-\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
-\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
-\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\
-\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\
-\x2d\x77\x69\x64\x74\x68\x3d\x27\x31\x2e\x35\x30\x35\x36\x32\x27\
-\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
-\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\
-\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\
-\x36\x34\x20\x36\x35\x2e\x37\x38\x34\x34\x20\x36\x33\x2e\x32\x33\
-\x33\x33\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
-\x20\x34\x2e\x33\x32\x38\x36\x37\x20\x30\x43\x20\x34\x2e\x33\x32\
-\x38\x36\x37\x20\x2d\x32\x2e\x33\x39\x30\x36\x36\x20\x32\x2e\x33\
-\x39\x30\x36\x36\x20\x2d\x34\x2e\x33\x32\x38\x36\x37\x20\x30\x20\
-\x2d\x34\x2e\x33\x32\x38\x36\x37\x43\x20\x2d\x32\x2e\x33\x39\x30\
-\x36\x36\x20\x2d\x34\x2e\x33\x32\x38\x36\x37\x20\x2d\x34\x2e\x33\
-\x32\x38\x36\x37\x20\x2d\x32\x2e\x33\x39\x30\x36\x36\x20\x2d\x34\
-\x2e\x33\x32\x38\x36\x37\x20\x2d\x30\x43\x20\x2d\x34\x2e\x33\x32\
-\x38\x36\x37\x20\x32\x2e\x33\x39\x30\x36\x36\x20\x2d\x32\x2e\x33\
-\x39\x30\x36\x36\x20\x34\x2e\x33\x32\x38\x36\x37\x20\x30\x20\x34\
-\x2e\x33\x32\x38\x36\x37\x43\x20\x32\x2e\x33\x39\x30\x36\x36\x20\
-\x34\x2e\x33\x32\x38\x36\x37\x20\x34\x2e\x33\x32\x38\x36\x37\x20\
-\x32\x2e\x33\x39\x30\x36\x36\x20\x34\x2e\x33\x32\x38\x36\x37\x20\
-\x30\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\
-\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\
-\x73\x76\x67\x3e\
-\x00\x00\x02\x7d\
+\x00\x00\x05\x27\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1868,79 +1852,66 @@ qt_resource_data = b"\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\
-\x2c\x32\x37\x37\x2e\x33\x37\x35\x68\x32\x35\x39\x2e\x37\x30\x34\
-\x4c\x32\x32\x35\x2e\x30\x30\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\
-\x4c\x32\x35\x36\x2c\x34\x32\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\
-\x4c\x32\x35\x36\x2c\x38\x35\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\
-\x32\x39\x2e\x39\x32\x34\x6c\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\
-\x31\x39\x2e\x37\x30\x31\x48\x38\x35\x56\x32\x37\x37\x2e\x33\x37\
-\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x52\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\
-\x32\x35\x36\x2e\x30\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\
-\x34\x38\x48\x37\x34\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\
-\x2c\x39\x36\x2c\x33\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\
-\x32\x2c\x31\x33\x38\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\
-\x36\x43\x33\x32\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\
-\x31\x39\x37\x2c\x34\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\
-\x31\x36\x68\x33\x36\x32\x2e\x36\x36\x38\x0d\x0a\x09\x43\x34\x36\
-\x30\x2e\x38\x30\x33\x2c\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\
-\x36\x2e\x38\x30\x32\x2c\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\
-\x33\x56\x31\x38\x36\x2e\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\
-\x33\x2e\x31\x39\x38\x2c\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\
-\x34\x2c\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\
-\x34\x34\x38\x2c\x33\x37\x33\x2e\x33\x33\x33\x0d\x0a\x09\x63\x30\
-\x2c\x35\x2e\x37\x38\x32\x2d\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\
-\x36\x36\x37\x2d\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
-\x37\x48\x37\x34\x2e\x36\x36\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\
-\x33\x38\x34\x2c\x36\x34\x2c\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\
-\x34\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x37\x36\x68\x33\x37\
-\x33\x2e\x33\x33\x34\x63\x35\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\
-\x2e\x36\x36\x36\x2c\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\
-\x36\x2c\x31\x30\x2e\x36\x36\x37\x0d\x0a\x09\x56\x33\x37\x33\x2e\
-\x33\x33\x33\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
-\x0a\
-\x00\x00\x03\xc4\
+\x22\x49\x63\x6f\x6e\x5f\x31\x32\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
+\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
+\x35\x36\x2c\x36\x34\x43\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\
+\x2c\x36\x34\x2c\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\
+\x35\x36\x63\x30\x2c\x31\x30\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\
+\x34\x30\x31\x2c\x31\x39\x32\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\
+\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\
+\x36\x34\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\
+\x38\x2e\x35\x33\x31\x2d\x33\x2e\x31\x39\x38\x2d\x31\x36\x2d\x38\
+\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x33\x63\x2d\x35\x2e\x33\
+\x33\x33\x2d\x35\x2e\x33\x33\x34\x2d\x38\x2e\x35\x33\x31\x2d\x31\
+\x32\x2e\x38\x30\x33\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\
+\x33\x34\x63\x30\x2d\x31\x38\x2e\x31\x33\x35\x2c\x31\x33\x2e\x38\
+\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x68\x33\x38\x2e\x33\
+\x39\x36\x0d\x0a\x09\x09\x09\x63\x35\x38\x2e\x36\x36\x37\x2c\x30\
+\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x34\x38\x2c\x31\x30\x36\x2e\
+\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\x36\x36\x43\x34\x34\x38\x2c\
+\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\x36\x31\x2e\x36\x30\x34\x2c\
+\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\x7a\x20\x4d\x31\x33\x38\x2e\
+\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\
+\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\
+\x32\x0d\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
+\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x53\
+\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\x36\x2c\x31\x33\x38\x2e\
+\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\x32\x30\x32\x2e\x36\x36\
+\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\x2e\x31\x33\
+\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\
+\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\
+\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\
+\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\
+\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x32\x33\x34\x2e\x36\
+\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x32\x30\x2e\x38\
+\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x32\x30\x32\x2e\x36\
+\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\x33\x30\x39\
+\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\
+\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\
+\x2d\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\x31\x38\
+\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\
+\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\
+\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x33\x34\
+\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x33\x32\
+\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x33\x30\
+\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\
+\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0d\x0a\x09\x09\x09\
+\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\
+\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\
+\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\
+\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\
+\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\x35\x36\x2c\
+\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\x2f\x3e\x0d\
+\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x04\x79\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
@@ -1952,68 +1923,63 @@ qt_resource_data = b"\
\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
-\x64\x5f\x6c\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x3d\x22\x43\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\
\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\
\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\
\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\
-\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\x37\x36\x63\x2d\x30\x2e\
-\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\x2e\x35\x31\x35\x2d\
-\x30\x2e\x31\x39\x37\x2d\x30\x2e\x37\x31\x2c\x30\x4c\x37\x2e\x37\
-\x38\x35\x2c\x39\x2e\x36\x34\x31\x63\x2d\x30\x2e\x31\x39\x36\x2c\
-\x30\x2e\x31\x39\x39\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\
-\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x32\x2e\x38\x30\x37\x2c\x32\
-\x2e\x38\x36\x34\x0d\x0a\x09\x63\x30\x2e\x31\x39\x35\x2c\x30\x2e\
-\x31\x39\x39\x2c\x30\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2c\
-\x30\x2e\x37\x31\x2c\x30\x63\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\
-\x39\x37\x2c\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\
-\x2d\x30\x2e\x37\x31\x37\x4c\x39\x2c\x31\x30\x6c\x32\x2e\x33\x30\
-\x32\x2d\x32\x2e\x35\x30\x36\x43\x31\x31\x2e\x34\x39\x38\x2c\x37\
-\x2e\x32\x39\x36\x2c\x31\x31\x2e\x34\x39\x38\x2c\x36\x2e\x39\x37\
-\x36\x2c\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\x37\x36\x7a\x0d\
-\x0a\x09\x20\x4d\x31\x30\x2c\x30\x2e\x34\x63\x2d\x35\x2e\x33\x30\
-\x32\x2c\x30\x2d\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2d\x39\x2e\
-\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\x2c\x34\x2e\
-\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x73\
-\x39\x2e\x36\x2d\x34\x2e\x32\x39\x37\x2c\x39\x2e\x36\x2d\x39\x2e\
-\x36\x43\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\
-\x33\x30\x32\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\
-\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x2d\x34\
-\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\
-\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\
-\x34\x2e\x36\x31\x34\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\x33\x35\
-\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x34\x2e\
-\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\
-\x2c\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\
-\x31\x38\x2e\x33\x35\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\x34\
-\x2e\x36\x31\x33\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\
-\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
-\x3e\x0d\x0a\
-\x00\x00\x00\xdd\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x22\
-\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x38\x22\x20\x76\x69\x65\x77\
-\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x38\x20\x38\x22\x3e\x0a\x20\
-\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x30\x20\x30\x76\x32\
-\x68\x2e\x35\x63\x30\x2d\x2e\x35\x35\x2e\x34\x35\x2d\x31\x20\x31\
-\x2d\x31\x68\x31\x2e\x35\x76\x35\x2e\x35\x63\x30\x20\x2e\x32\x38\
-\x2d\x2e\x32\x32\x2e\x35\x2d\x2e\x35\x2e\x35\x68\x2d\x2e\x35\x76\
-\x31\x68\x34\x76\x2d\x31\x68\x2d\x2e\x35\x63\x2d\x2e\x32\x38\x20\
-\x30\x2d\x2e\x35\x2d\x2e\x32\x32\x2d\x2e\x35\x2d\x2e\x35\x76\x2d\
-\x35\x2e\x35\x68\x31\x2e\x35\x63\x2e\x35\x35\x20\x30\x20\x31\x20\
-\x2e\x34\x35\x20\x31\x20\x31\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\
-\x7a\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x03\xeb\
+\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\x35\x63\x2d\x30\x2e\x32\
+\x33\x36\x2c\x30\x2d\x30\x2e\x34\x37\x34\x2d\x30\x2e\x30\x38\x33\
+\x2d\x30\x2e\x36\x36\x34\x2d\x30\x2e\x32\x35\x32\x4c\x2d\x30\x2e\
+\x30\x30\x35\x2c\x31\x30\x6c\x35\x2e\x33\x34\x31\x2d\x34\x2e\x37\
+\x34\x38\x43\x35\x2e\x37\x34\x38\x2c\x34\x2e\x38\x38\x37\x2c\x36\
+\x2e\x33\x38\x2c\x34\x2e\x39\x32\x32\x2c\x36\x2e\x37\x34\x37\x2c\
+\x35\x2e\x33\x33\x35\x0d\x0a\x09\x63\x30\x2e\x33\x36\x37\x2c\x30\
+\x2e\x34\x31\x33\x2c\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2d\
+\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x4c\x33\x2e\x30\x30\
+\x35\x2c\x31\x30\x6c\x33\x2e\x33\x37\x38\x2c\x33\x2e\x30\x30\x32\
+\x63\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\
+\x35\x2c\x30\x2e\x39\x39\x39\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\
+\x34\x31\x32\x0d\x0a\x09\x43\x36\x2e\x32\x36\x39\x2c\x31\x34\x2e\
+\x36\x33\x37\x2c\x35\x2e\x39\x39\x34\x2c\x31\x34\x2e\x37\x35\x2c\
+\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\x35\x7a\x20\x4d\x31\x34\
+\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x4c\x32\x30\x2e\x30\
+\x30\x35\x2c\x31\x30\x6c\x2d\x35\x2e\x30\x36\x2d\x34\x2e\x34\x39\
+\x38\x63\x2d\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\x36\x37\x2d\x31\
+\x2e\x30\x34\x35\x2d\x30\x2e\x33\x33\x2d\x31\x2e\x34\x31\x31\x2c\
+\x30\x2e\x30\x38\x33\x0d\x0a\x09\x63\x2d\x30\x2e\x33\x36\x37\x2c\
+\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\
+\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x4c\x31\x36\x2e\
+\x39\x39\x35\x2c\x31\x30\x6c\x2d\x33\x2e\x36\x35\x39\x2c\x33\x2e\
+\x32\x35\x32\x63\x2d\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\x37\
+\x2d\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2d\x30\x2e\x30\x38\
+\x33\x2c\x31\x2e\x34\x31\x32\x43\x31\x33\x2e\x34\x35\x2c\x31\x34\
+\x2e\x38\x38\x37\x2c\x31\x33\x2e\x37\x32\x35\x2c\x31\x35\x2c\x31\
+\x34\x2c\x31\x35\x0d\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\x2c\x31\
+\x35\x2c\x31\x34\x2e\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\x37\x2c\
+\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\x20\x4d\
+\x39\x2e\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\x2d\x31\
+\x32\x63\x30\x2e\x30\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\x30\x2e\
+\x32\x37\x37\x2d\x31\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\x2d\x31\
+\x2e\x31\x35\x31\x0d\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\x30\
+\x2e\x30\x39\x32\x2d\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\x37\
+\x2d\x31\x2e\x31\x35\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\x31\
+\x32\x63\x2d\x30\x2e\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\x30\
+\x2e\x32\x37\x37\x2c\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\x2c\
+\x31\x2e\x31\x35\x31\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\x39\
+\x39\x36\x2c\x38\x2e\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\x30\
+\x31\x2c\x31\x37\x0d\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\
+\x2c\x39\x2e\x39\x30\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\
+\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0d\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\xb7\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -2040,45 +2006,26 @@ qt_resource_data = b"\
\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x32\x35\x36\x2c\x31\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\
-\x2d\x31\x34\x35\x2e\x37\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\
-\x31\x32\x38\x63\x36\x37\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\
-\x34\x2c\x31\x32\x38\x2c\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\
-\x2e\x39\x2c\x30\x2c\x31\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\
-\x32\x32\x34\x2d\x31\x32\x36\x2e\x36\x0d\x0a\x09\x09\x43\x34\x32\
-\x38\x2e\x32\x2c\x31\x39\x38\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\
-\x31\x32\x38\x2c\x32\x35\x36\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\
-\x36\x2c\x33\x34\x37\x2e\x33\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\
-\x38\x39\x2e\x36\x2d\x34\x31\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\
-\x33\x63\x30\x2d\x35\x30\x2e\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\
-\x2e\x33\x2c\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\
-\x36\x2c\x34\x31\x2c\x38\x39\x2e\x36\x2c\x39\x31\x2e\x33\x0d\x0a\
-\x09\x09\x43\x33\x34\x35\x2e\x36\x2c\x33\x30\x36\x2e\x34\x2c\x33\
-\x30\x35\x2e\x34\x2c\x33\x34\x37\x2e\x33\x2c\x32\x35\x36\x2c\x33\
-\x34\x37\x2e\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x67\x3e\x0d\x0a\
-\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\
-\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\x32\x2e\x39\x2d\x31\x35\
-\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\x37\x63\x2d\x32\x2e\x35\
-\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\x2d\x37\x2e\x36\x2d\x30\
-\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\x2d\x35\x32\x2e\x33\x2c\
-\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x63\x30\
-\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\x2c\x35\x33\x2e\x33\x2c\
-\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0d\x0a\x09\x09\x09\x73\x35\
-\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\x2e\x33\x2d\x35\x33\
-\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\x32\x2d\x34\x2e\x36\
-\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\x2e\x35\x2c\x34\x2e\
-\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\x31\x39\x2e\x38\x2c\
-\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\x35\x36\x2c\x32\x35\
-\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\x2c\x32\x32\x34\x7a\
-\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\
-\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xa2\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x35\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x34\x30\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\
+\x20\x33\x37\x35\x2e\x32\x30\x32\x2c\x31\x30\x37\x20\x32\x35\x36\
+\x2c\x32\x32\x36\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
+\x2c\x31\x30\x37\x20\x31\x30\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\
+\x20\x32\x32\x36\x2e\x32\x30\x32\x2c\x32\x35\x36\x20\x31\x30\x37\
+\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
+\x2c\x34\x30\x35\x20\x32\x35\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\
+\x20\x0d\x0a\x09\x09\x09\x33\x37\x35\x2e\x32\x30\x32\x2c\x34\x30\
+\x35\x20\x34\x30\x35\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x32\x38\
+\x35\x2e\x37\x39\x38\x2c\x32\x35\x36\x20\x09\x09\x22\x2f\x3e\x0d\
+\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\x22\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -2110,61 +2057,96 @@ qt_resource_data = b"\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x32\x38\x2c\x34\x30\
-\x35\x2e\x34\x32\x39\x43\x31\x32\x38\x2c\x34\x32\x38\x2e\x38\x34\
-\x36\x2c\x31\x34\x37\x2e\x31\x39\x38\x2c\x34\x34\x38\x2c\x31\x37\
-\x30\x2e\x36\x36\x37\x2c\x34\x34\x38\x68\x31\x37\x30\x2e\x36\x36\
-\x37\x43\x33\x36\x34\x2e\x38\x30\x32\x2c\x34\x34\x38\x2c\x33\x38\
-\x34\x2c\x34\x32\x38\x2e\x38\x34\x36\x2c\x33\x38\x34\x2c\x34\x30\
-\x35\x2e\x34\x32\x39\x56\x31\x36\x30\x48\x31\x32\x38\x56\x34\x30\
-\x35\x2e\x34\x32\x39\x7a\x20\x4d\x34\x31\x36\x2c\x39\x36\x0d\x0a\
-\x09\x09\x68\x2d\x38\x30\x6c\x2d\x32\x36\x2e\x37\x38\x35\x2d\x33\
-\x32\x48\x32\x30\x32\x2e\x37\x38\x36\x4c\x31\x37\x36\x2c\x39\x36\
-\x48\x39\x36\x76\x33\x32\x68\x33\x32\x30\x56\x39\x36\x7a\x22\x2f\
+\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x22\x32\x35\x36\x22\
+\x20\x63\x79\x3d\x22\x32\x38\x30\x22\x20\x72\x3d\x22\x36\x33\x22\
+\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x34\x30\x2c\x39\x36\x68\x2d\x38\x38\x6c\x2d\x33\x32\x2d\x33\x32\
+\x48\x31\x39\x32\x6c\x2d\x33\x32\x2c\x33\x32\x48\x37\x32\x63\x2d\
+\x32\x32\x2e\x30\x39\x32\x2c\x30\x2d\x34\x30\x2c\x31\x37\x2e\x39\
+\x30\x38\x2d\x34\x30\x2c\x34\x30\x76\x32\x37\x32\x63\x30\x2c\x32\
+\x32\x2e\x30\x39\x32\x2c\x31\x37\x2e\x39\x30\x38\x2c\x34\x30\x2c\
+\x34\x30\x2c\x34\x30\x68\x33\x36\x38\x63\x32\x32\x2e\x30\x39\x32\
+\x2c\x30\x2c\x34\x30\x2d\x31\x37\x2e\x39\x30\x38\x2c\x34\x30\x2d\
+\x34\x30\x0d\x0a\x09\x09\x56\x31\x33\x36\x43\x34\x38\x30\x2c\x31\
+\x31\x33\x2e\x39\x30\x38\x2c\x34\x36\x32\x2e\x30\x39\x32\x2c\x39\
+\x36\x2c\x34\x34\x30\x2c\x39\x36\x7a\x20\x4d\x32\x35\x36\x2c\x33\
+\x39\x32\x63\x2d\x36\x31\x2e\x38\x35\x35\x2c\x30\x2d\x31\x31\x32\
+\x2d\x35\x30\x2e\x31\x34\x35\x2d\x31\x31\x32\x2d\x31\x31\x32\x73\
+\x35\x30\x2e\x31\x34\x35\x2d\x31\x31\x32\x2c\x31\x31\x32\x2d\x31\
+\x31\x32\x73\x31\x31\x32\x2c\x35\x30\x2e\x31\x34\x35\x2c\x31\x31\
+\x32\x2c\x31\x31\x32\x0d\x0a\x09\x09\x53\x33\x31\x37\x2e\x38\x35\
+\x35\x2c\x33\x39\x32\x2c\x32\x35\x36\x2c\x33\x39\x32\x7a\x22\x2f\
\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
\x0a\
-\x00\x00\x02\x7f\
+\x00\x00\x04\x22\
\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
-\x3d\x22\x32\x38\x38\x2c\x39\x36\x20\x33\x33\x37\x2e\x39\x2c\x31\
-\x34\x35\x2e\x39\x20\x32\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x32\
-\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x31\x34\x35\x2e\x39\x2c\x33\
-\x33\x37\x2e\x39\x20\x39\x36\x2c\x32\x38\x38\x20\x39\x36\x2c\x34\
-\x31\x36\x20\x32\x32\x34\x2c\x34\x31\x36\x20\x31\x37\x34\x2e\x31\
-\x2c\x33\x36\x36\x2e\x31\x20\x33\x35\x37\x2e\x34\x2c\x31\x38\x32\
-\x2e\x39\x20\x33\x36\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0d\
-\x0a\x09\x34\x31\x36\x2c\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\
-\x20\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x34\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x68\x65\x69\x67\x68\
+\x74\x3d\x27\x32\x34\x70\x74\x27\x20\x76\x65\x72\x73\x69\x6f\x6e\
+\x3d\x27\x31\x2e\x31\x27\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x27\
+\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\x38\x35\x38\x33\x20\
+\x32\x34\x20\x32\x34\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x32\x34\
+\x70\x74\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\
+\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
+\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\
+\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\
+\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
+\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
+\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\
+\x37\x36\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\x29\x27\x3e\x0a\
+\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x2d\x39\x2e\x33\x39\
+\x31\x31\x38\x20\x2d\x30\x4c\x20\x2d\x36\x2e\x36\x34\x30\x35\x37\
+\x20\x2d\x31\x32\x2e\x30\x34\x35\x4c\x20\x38\x2e\x36\x37\x36\x33\
+\x32\x20\x2d\x36\x2e\x35\x31\x38\x37\x31\x4c\x20\x33\x2e\x33\x32\
+\x30\x32\x38\x20\x36\x2e\x30\x32\x32\x35\x27\x20\x66\x69\x6c\x6c\
+\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\
+\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\
+\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\
+\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
+\x3d\x27\x31\x2e\x37\x35\x36\x35\x36\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
+\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
+\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\
+\x37\x36\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\x29\x27\x3e\x0a\
+\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x2d\x39\x2e\x33\
+\x39\x31\x31\x38\x27\x20\x63\x79\x3d\x27\x2d\x30\x27\x20\x72\x3d\
+\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
+\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\x2e\x37\x36\
+\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\x29\x27\x3e\x0a\x3c\x63\
+\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x2d\x36\x2e\x36\x34\x30\
+\x35\x37\x27\x20\x63\x79\x3d\x27\x2d\x31\x32\x2e\x30\x34\x35\x27\
+\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\x66\x69\x6c\
+\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x36\x38\
+\x2e\x37\x36\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\x29\x27\x3e\
+\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x38\x2e\x36\
+\x37\x36\x33\x32\x27\x20\x63\x79\x3d\x27\x2d\x36\x2e\x35\x31\x38\
+\x37\x31\x27\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\x20\
+\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
+\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x36\x38\x2e\x37\x36\x35\x35\x20\x36\x38\x2e\x38\x35\x38\x33\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x33\x2e\x33\x32\x30\x32\x38\x27\x20\x63\x79\x3d\x27\x36\x2e\x30\
+\x32\x32\x35\x27\x20\x72\x3d\x27\x33\x2e\x30\x31\x31\x32\x35\x27\
+\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\
\x00\x00\x04\x10\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -2232,7 +2214,43 @@ qt_resource_data = b"\
\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
\x64\x74\x68\x3d\x27\x31\x2e\x35\x30\x35\x36\x32\x27\x2f\x3e\x0a\
\x3c\x2f\x67\x3e\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x02\x79\
+\x00\x00\x02\x20\
+\x00\
+\x00\x07\x7f\x78\x9c\xdd\x55\x3b\x6f\xdb\x30\x10\xde\xfb\x2b\xae\
+\xe8\xc0\x76\x20\x45\x52\x24\x45\x06\x51\x02\xd4\x40\xa7\x74\x4b\
+\x96\x6e\x6a\xcc\x48\x6c\x6c\xc9\x90\x54\xcb\xfd\xf7\x3d\xc5\xd6\
+\xc3\x56\xd0\x29\x43\x11\x69\xd0\x3d\x78\x77\xdf\x7d\xc7\x83\xae\
+\x6f\x0f\xdb\x0d\xec\x7d\xdd\x84\xaa\x4c\x89\x60\x9c\x80\x2f\x1f\
+\xab\x75\x28\xf3\x94\x3c\xdc\x7f\xa3\x96\xdc\xde\x7c\xb8\xfe\x48\
+\x29\xdc\x17\xa1\x81\xa7\xb0\xf1\xd0\x65\x0d\xe4\xbe\xf4\x75\xd6\
+\xfa\x35\xfc\xfc\x03\xeb\x7d\x68\xf6\xf9\x16\x24\x53\x40\x29\x9e\
+\x47\x0d\x0a\x1f\xf2\xa2\x4d\x89\x54\xbb\x96\xcc\x6b\x08\xd4\x82\
+\xef\xbe\x56\x87\x94\x68\xc3\x14\x77\x0a\x74\xcc\xac\xb6\x31\x08\
+\xcb\x54\x9c\x68\x90\x8a\x40\x17\xd6\x6d\x81\x01\x47\x53\x9f\x04\
+\xc1\x96\x4d\x4a\x8a\xb6\xdd\x5d\x45\x51\xd7\x75\xac\x8b\x59\x55\
+\xe7\x91\xe4\x9c\x47\x58\xf4\x74\xe4\xea\xb0\x09\xe5\xf3\x6b\x07\
+\x85\x73\x2e\x7a\xf1\x12\x84\x99\x43\x58\xa7\x64\x97\xe5\x5e\x1c\
+\xd5\xb6\xce\xca\xe6\xa9\xaa\xb7\x29\xd9\x66\x6d\x1d\x0e\x9f\x39\
+\x73\xce\x48\xa3\x80\xf7\xef\xa0\x18\xcd\x8c\xb4\x12\x12\xc5\x24\
+\x97\x5f\xfa\xe0\x5d\xd6\x16\x80\xd9\xbe\x03\xb5\x0c\xf1\x72\xa4\
+\x42\x33\x2e\x35\x97\x77\x33\x13\x9f\x2b\x02\x9b\x76\x26\xf6\x54\
+\xe8\xd5\x99\x59\xc6\x2e\xd1\xbd\x79\x66\x35\x4c\x38\x9b\x24\x68\
+\x35\xf3\x7c\xb3\x40\xc1\xb4\x12\x16\xa8\x42\x70\x28\xe1\x38\x12\
+\x27\x8c\x45\xe0\x27\x69\x05\x97\xae\x8b\xd0\x41\x45\x94\xaf\x88\
+\x53\x3f\x13\x54\xce\x38\x62\x9f\x74\x4c\xe4\x30\xd1\x50\x87\x0a\
+\xc9\xac\x12\x09\x62\x18\xc4\xd5\x04\x70\xf4\xd2\x45\x02\x7a\x5e\
+\xe2\x6e\xc9\xea\x0f\xd2\xdf\xc6\x4d\x4a\x3e\x59\xde\xbf\x24\xc2\
+\x29\x44\xf9\xdb\xcd\x71\x8e\x49\x18\x93\xcc\xdb\x44\xfe\xb8\xd5\
+\xb3\x36\x63\xe6\xb4\x55\x2f\x6d\x1e\xc5\xb3\x36\x4f\x5e\xba\x48\
+\x40\x97\x45\x26\x93\xc3\x78\xe5\xe4\x2c\xd1\x38\x94\x51\x9c\x46\
+\x3a\x3a\x17\xf1\x97\x35\x46\xe6\xca\xaa\xf4\x04\x9a\xb6\xae\x9e\
+\x3d\xf2\xc8\x5f\x9e\xc1\x40\x71\x4b\xfc\x63\xb6\x4b\x49\x5d\xfd\
+\x2e\xd7\x67\xe6\x5f\x55\x28\x2f\xed\xdb\xd0\xfa\x7a\x13\xf0\x83\
+\x3b\x8b\x33\xc3\x9a\xa3\x6f\x58\x65\x96\x68\xa3\xcd\x9b\x4f\x6a\
+\xc1\xe2\xbb\xd9\xb8\x53\x3f\xef\x6d\x60\xff\x5a\x2d\x8d\x44\x49\
+\x31\x5b\x2d\x77\x64\x8a\x8f\xe2\xd9\x6a\x9d\xbc\x74\x91\x60\x71\
+\x29\xfe\x13\x12\x8f\x44\xf6\x7f\xab\x9b\xbf\x3f\x45\xd8\x3d\
+\x00\x00\x02\xa2\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -2263,18 +2281,21 @@ qt_resource_data = b"\
\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x67\x3e\x0d\x0a\x09\x09\x09\x3c\x70\x6f\x6c\
-\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x38\x36\
-\x2e\x33\x30\x31\x2c\x33\x33\x39\x2e\x38\x39\x33\x20\x39\x36\x2c\
-\x32\x34\x39\x2e\x34\x36\x31\x20\x36\x34\x2c\x32\x37\x39\x2e\x39\
-\x36\x38\x20\x31\x38\x36\x2e\x33\x30\x31\x2c\x34\x30\x32\x20\x34\
-\x34\x38\x2c\x31\x34\x30\x2e\x35\x30\x36\x20\x34\x31\x36\x2c\x31\
-\x31\x30\x20\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x09\x3c\x2f\x67\
-\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\xb5\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x32\x38\x2c\x34\x30\
+\x35\x2e\x34\x32\x39\x43\x31\x32\x38\x2c\x34\x32\x38\x2e\x38\x34\
+\x36\x2c\x31\x34\x37\x2e\x31\x39\x38\x2c\x34\x34\x38\x2c\x31\x37\
+\x30\x2e\x36\x36\x37\x2c\x34\x34\x38\x68\x31\x37\x30\x2e\x36\x36\
+\x37\x43\x33\x36\x34\x2e\x38\x30\x32\x2c\x34\x34\x38\x2c\x33\x38\
+\x34\x2c\x34\x32\x38\x2e\x38\x34\x36\x2c\x33\x38\x34\x2c\x34\x30\
+\x35\x2e\x34\x32\x39\x56\x31\x36\x30\x48\x31\x32\x38\x56\x34\x30\
+\x35\x2e\x34\x32\x39\x7a\x20\x4d\x34\x31\x36\x2c\x39\x36\x0d\x0a\
+\x09\x09\x68\x2d\x38\x30\x6c\x2d\x32\x36\x2e\x37\x38\x35\x2d\x33\
+\x32\x48\x32\x30\x32\x2e\x37\x38\x36\x4c\x31\x37\x36\x2c\x39\x36\
+\x48\x39\x36\x76\x33\x32\x68\x33\x32\x30\x56\x39\x36\x7a\x22\x2f\
+\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
+\x0a\
+\x00\x00\x02\x6c\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -2292,50 +2313,29 @@ qt_resource_data = b"\
\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
-\x64\x5f\x72\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\
-\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\
-\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
-\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\
-\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
-\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x31\x31\x2c\x31\x30\x4c\x38\x2e\x36\x39\x38\x2c\x37\x2e\x34\
-\x39\x34\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x38\x2d\
-\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x39\x2c\x30\x2d\x30\x2e\
-\x37\x31\x38\x63\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\
-\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x37\x31\
-\x2c\x30\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\x0a\
-\x09\x63\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\
-\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\
-\x6c\x2d\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x63\x2d\x30\
-\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2d\x30\x2e\x35\x31\x34\
-\x2c\x30\x2e\x31\x39\x38\x2d\x30\x2e\x37\x31\x2c\x30\x63\x2d\x30\
-\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\x2e\x31\x39\x36\
-\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x31\
-\x31\x2c\x31\x30\x7a\x20\x4d\x31\x30\x2c\x30\x2e\x34\x0d\x0a\x09\
-\x63\x35\x2e\x33\x30\x32\x2c\x30\x2c\x39\x2e\x36\x2c\x34\x2e\x32\
-\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\
-\x30\x33\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\
-\x2c\x39\x2e\x36\x53\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x33\x2c\
-\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\
-\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\
-\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\x0d\x0a\x09\
-\x63\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2d\x33\
-\x2e\x37\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
-\x30\x2d\x34\x2e\x36\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\x38\x2e\
-\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
-\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2c\x33\
-\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0d\
-\x0a\x09\x43\x31\x2e\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\x2c\
-\x35\x2e\x33\x38\x35\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\
-\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\
-\x67\x3e\x0d\x0a\
+\x3d\x22\x53\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\
+\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
+\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\
+\x31\x35\x2e\x31\x37\x33\x2c\x32\x48\x34\x43\x32\x2e\x38\x39\x39\
+\x2c\x32\x2c\x32\x2c\x32\x2e\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\
+\x30\x2c\x31\x2e\x31\x2c\x30\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\
+\x32\x68\x31\x32\x63\x31\x2e\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\
+\x2e\x39\x2c\x32\x2d\x32\x56\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\
+\x31\x37\x33\x2c\x32\x7a\x20\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\
+\x2e\x35\x34\x39\x2d\x30\x2e\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\
+\x37\x0d\x0a\x09\x43\x36\x2e\x34\x35\x2c\x39\x2c\x36\x2c\x38\x2e\
+\x35\x34\x39\x2c\x36\x2c\x38\x56\x33\x68\x38\x56\x38\x7a\x20\x4d\
+\x31\x33\x2c\x34\x68\x2d\x32\x76\x34\x68\x32\x56\x34\x7a\x22\x2f\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
"
qt_resource_name = b"\
@@ -2343,33 +2343,31 @@ qt_resource_name = b"\
\x00\x6f\xa6\x53\
\x00\x69\
\x00\x63\x00\x6f\x00\x6e\x00\x73\
-\x00\x09\
-\x0b\x9e\x89\x07\
-\x00\x63\
-\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x15\
-\x0f\xc4\x59\xe7\
-\x00\x73\
-\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
-\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x13\
-\x03\x24\x75\x47\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\
-\x00\x76\x00\x67\
-\x00\x08\
-\x08\xc8\x55\xe7\
-\x00\x73\
-\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x10\
\x06\xe3\xaf\xe7\
\x00\x61\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x17\
-\x06\xc6\x02\xa7\
-\x00\x74\
-\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
-\x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x16\
+\x01\xfb\x76\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
+\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\xc8\x62\x67\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\x2d\x1b\xc7\
+\x00\x63\
+\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x09\x76\x60\xc7\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xf7\x57\x07\
+\x00\x67\
+\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x08\
\x0b\x07\x57\xa7\
\x00\x65\
@@ -2380,198 +2378,200 @@ qt_resource_name = b"\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
\x00\x67\
\x00\x0f\
-\x07\x0e\xc4\x87\
-\x00\x6f\
-\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x1b\
-\x0e\xb5\x68\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
-\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x0a\x2d\x1b\xc7\
+\x04\xf2\xa7\x87\
\x00\x63\
-\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x01\xca\x6d\x87\
-\x00\x62\
-\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x0c\xdb\x38\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x1c\
\x08\x8a\x79\x07\
\x00\x61\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0a\
-\x0f\x68\x53\xe7\
-\x00\x61\
-\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x01\x60\xbc\x47\
-\x00\x73\
-\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
-\x00\x16\
-\x01\xfb\x76\x27\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
-\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x01\xca\x6d\x87\
+\x00\x62\
+\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0e\
\x0f\xcb\xd5\xc7\
\x00\x70\
\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x06\xc6\x02\xa7\
+\x00\x74\
+\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
+\x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x07\x87\x48\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
+\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x13\
+\x03\x24\x75\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\
+\x00\x76\x00\x67\
+\x00\x0e\
+\x05\xed\x38\x67\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x0c\x57\x65\x47\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\xe4\xaf\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x14\
\x0f\xa5\xe0\xc7\
\x00\x6d\
\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x08\x79\x97\xe7\
+\x00\x1c\
+\x04\x66\xe1\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x15\
+\x0f\xc4\x59\xe7\
+\x00\x73\
+\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
+\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1d\
+\x06\xec\xf4\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0f\x68\x53\xe7\
\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
+\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x07\
+\x0c\xf8\x5a\x07\
+\x00\x65\
+\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x19\
-\x0f\xef\x7b\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x70\x00\x61\x00\x6c\
-\x00\x65\x00\x74\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0e\
-\x05\xed\x38\x67\
+\x0a\x43\x45\xc7\
\x00\x61\
-\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
+\x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x12\
\x04\xb2\x21\x47\
\x00\x61\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x65\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\
\x00\x67\
+\x00\x08\
+\x0c\xf7\x55\x87\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1b\
+\x0e\xb5\x68\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
+\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x01\x60\xbc\x47\
+\x00\x73\
+\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x09\
+\x0b\x9e\x89\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0d\
\x05\x20\xce\x87\
\x00\x6f\
\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0f\
-\x09\x76\x60\xc7\
+\x00\x11\
+\x0c\xa7\xc7\x47\
\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x19\
+\x0f\xef\x7b\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x70\x00\x61\x00\x6c\
+\x00\x65\x00\x74\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x08\
\x05\xa8\x57\x87\
\x00\x63\
\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x11\
-\x0c\xa7\xc7\x47\
-\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x0c\xdb\x38\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\
-\x00\x08\
-\x08\xf7\x57\x07\
+\x00\x12\
+\x08\x79\x97\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
\x00\x67\
-\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0f\
-\x04\xf2\xa7\x87\
+\x07\x0e\xc4\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\x89\xfa\x47\
\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x10\
\x04\xa9\x22\xc7\
\x00\x66\
\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x64\x00\x62\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x0a\xc8\x62\x67\
-\x00\x63\
-\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x19\
-\x0a\x43\x45\xc7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
-\x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x17\
-\x07\x87\x48\x27\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
-\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x1c\
-\x04\x66\xe1\x67\
-\x00\x63\
-\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
-\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x0c\xf7\x55\x87\
-\x00\x74\
-\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x07\
-\x0c\xf8\x5a\x07\
-\x00\x65\
-\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x12\
\x08\x55\xef\xc7\
\x00\x61\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
\x00\x67\
-\x00\x10\
-\x0c\x57\x65\x47\
-\x00\x61\
-\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x08\x89\xfa\x47\
-\x00\x63\
-\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x08\xe4\xaf\x47\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x1d\
-\x06\xec\xf4\xc7\
-\x00\x63\
-\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
-\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xc8\x55\xe7\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
"
qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x29\x00\x00\x00\x02\
-\x00\x00\x02\x48\x00\x00\x00\x00\x00\x01\x00\x00\x32\x5f\
-\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x25\xc5\
-\x00\x00\x02\x70\x00\x00\x00\x00\x00\x01\x00\x00\x39\xe3\
-\x00\x00\x00\x58\x00\x00\x00\x00\x00\x01\x00\x00\x03\x80\
-\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x73\xe0\
-\x00\x00\x04\x5c\x00\x01\x00\x00\x00\x01\x00\x00\x68\x7c\
-\x00\x00\x03\x76\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x14\
-\x00\x00\x04\x38\x00\x00\x00\x00\x00\x01\x00\x00\x63\xbb\
-\x00\x00\x03\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x51\x4e\
-\x00\x00\x03\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x59\x29\
-\x00\x00\x03\x54\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x47\
-\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xe8\
-\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x09\x1a\
-\x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x88\x32\
-\x00\x00\x01\x34\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x8e\
-\x00\x00\x04\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x70\x8a\
-\x00\x00\x05\x70\x00\x00\x00\x00\x00\x01\x00\x00\x7c\x78\
-\x00\x00\x02\xf2\x00\x00\x00\x00\x00\x01\x00\x00\x42\xf6\
-\x00\x00\x05\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x81\xa1\
-\x00\x00\x01\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x2e\x3b\
-\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x06\xaa\
-\x00\x00\x05\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x85\xb5\
-\x00\x00\x04\x22\x00\x01\x00\x00\x00\x01\x00\x00\x61\xda\
-\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x55\xdf\
-\x00\x00\x01\x94\x00\x00\x00\x00\x00\x01\x00\x00\x23\x04\
-\x00\x00\x04\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x6e\x09\
-\x00\x00\x04\x82\x00\x00\x00\x00\x00\x01\x00\x00\x6a\xa0\
-\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x13\xb6\
+\x00\x00\x04\x74\x00\x00\x00\x00\x00\x01\x00\x00\x59\x95\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x23\x3d\
+\x00\x00\x00\x36\x00\x00\x00\x00\x00\x01\x00\x00\x05\xce\
+\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x34\x17\
+\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x42\xa5\
+\x00\x00\x05\xe6\x00\x01\x00\x00\x00\x01\x00\x00\x84\xb1\
+\x00\x00\x03\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x52\x2a\
+\x00\x00\x01\x16\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x7c\
+\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x64\x29\
+\x00\x00\x05\x34\x00\x00\x00\x00\x00\x01\x00\x00\x72\x19\
+\x00\x00\x02\x48\x00\x00\x00\x00\x00\x01\x00\x00\x37\x41\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xf3\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x1e\
-\x00\x00\x01\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x17\x26\
-\x00\x00\x03\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x5d\xa6\
-\x00\x00\x01\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x80\
-\x00\x00\x05\x46\x00\x00\x00\x00\x00\x01\x00\x00\x77\xa8\
-\x00\x00\x05\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x78\x89\
-\x00\x00\x01\x58\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xb4\
-\x00\x00\x02\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x31\x3b\
-\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x5f\
-\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x03\x10\
-\x00\x00\x02\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x64\
-\x00\x00\x03\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x46\x1c\
+\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x46\xdd\
+\x00\x00\x05\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x7c\x77\
+\x00\x00\x01\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x30\xc1\
+\x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x86\xd5\
+\x00\x00\x05\x72\x00\x00\x00\x00\x00\x01\x00\x00\x79\x51\
+\x00\x00\x05\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x80\x9d\
+\x00\x00\x01\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x20\x3d\
+\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x89\x7b\
+\x00\x00\x02\x90\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x91\
+\x00\x00\x00\xc0\x00\x01\x00\x00\x00\x01\x00\x00\x11\xc3\
+\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x79\
+\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xb8\
+\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x4f\xa9\
+\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x08\x4f\
+\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x13\xa4\
+\x00\x00\x04\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x61\x19\
+\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3a\x0e\
+\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\x17\x14\
+\x00\x00\x04\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x68\xba\
+\x00\x00\x05\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x76\x96\
+\x00\x00\x04\x22\x00\x00\x00\x00\x00\x01\x00\x00\x55\x64\
+\x00\x00\x03\xac\x00\x00\x00\x00\x00\x01\x00\x00\x4b\xba\
+\x00\x00\x04\x38\x00\x00\x00\x00\x00\x01\x00\x00\x56\x45\
+\x00\x00\x03\x92\x00\x00\x00\x00\x00\x01\x00\x00\x4a\x96\
+\x00\x00\x02\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x0e\
+\x00\x00\x03\x22\x00\x00\x00\x00\x00\x01\x00\x00\x46\x6d\
+\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x28\xf8\
+\x00\x00\x04\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x6c\xee\
"
qt_resource_struct_v2 = b"\
@@ -2579,88 +2579,88 @@ qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x29\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x02\x48\x00\x00\x00\x00\x00\x01\x00\x00\x32\x5f\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x25\xc5\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x02\x70\x00\x00\x00\x00\x00\x01\x00\x00\x39\xe3\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
-\x00\x00\x00\x58\x00\x00\x00\x00\x00\x01\x00\x00\x03\x80\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x73\xe0\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x04\x5c\x00\x01\x00\x00\x00\x01\x00\x00\x68\x7c\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x03\x76\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x14\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
-\x00\x00\x04\x38\x00\x00\x00\x00\x00\x01\x00\x00\x63\xbb\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x03\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x51\x4e\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x03\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x59\x29\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x03\x54\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x47\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xe8\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf7\
-\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x09\x1a\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x88\x32\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x01\x34\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x8e\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x04\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x70\x8a\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x05\x70\x00\x00\x00\x00\x00\x01\x00\x00\x7c\x78\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
-\x00\x00\x02\xf2\x00\x00\x00\x00\x00\x01\x00\x00\x42\xf6\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
-\x00\x00\x05\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x81\xa1\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x01\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x2e\x3b\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x06\xaa\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x05\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x85\xb5\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
-\x00\x00\x04\x22\x00\x01\x00\x00\x00\x01\x00\x00\x61\xda\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x55\xdf\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x01\x94\x00\x00\x00\x00\x00\x01\x00\x00\x23\x04\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x04\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x6e\x09\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
-\x00\x00\x04\x82\x00\x00\x00\x00\x00\x01\x00\x00\x6a\xa0\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x13\xb6\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
+\x00\x00\x04\x74\x00\x00\x00\x00\x00\x01\x00\x00\x59\x95\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x23\x3d\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x00\x36\x00\x00\x00\x00\x00\x01\x00\x00\x05\xce\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x34\x17\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x42\xa5\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x05\xe6\x00\x01\x00\x00\x00\x01\x00\x00\x84\xb1\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x03\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x52\x2a\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x01\x16\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x7c\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x64\x29\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x05\x34\x00\x00\x00\x00\x00\x01\x00\x00\x72\x19\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x02\x48\x00\x00\x00\x00\x00\x01\x00\x00\x37\x41\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xf3\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x1e\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x01\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x17\x26\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x03\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x5d\xa6\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf5\
-\x00\x00\x01\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x80\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
-\x00\x00\x05\x46\x00\x00\x00\x00\x00\x01\x00\x00\x77\xa8\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x05\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x78\x89\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x01\x58\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xb4\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf4\
-\x00\x00\x02\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x31\x3b\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
-\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x5f\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x03\x10\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x02\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x64\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf6\
-\x00\x00\x03\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x46\x1c\
-\x00\x00\x01\x6c\xb2\x83\xbd\xf3\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x46\xdd\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x05\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x7c\x77\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x01\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x30\xc1\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x86\xd5\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x05\x72\x00\x00\x00\x00\x00\x01\x00\x00\x79\x51\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x05\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x80\x9d\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x01\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x20\x3d\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x89\x7b\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x02\x90\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x91\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x00\xc0\x00\x01\x00\x00\x00\x01\x00\x00\x11\xc3\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x79\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xb8\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x4f\xa9\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x08\x4f\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x13\xa4\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x04\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x61\x19\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3a\x0e\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\x17\x14\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x04\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x68\xba\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x05\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x76\x96\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x04\x22\x00\x00\x00\x00\x00\x01\x00\x00\x55\x64\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x03\xac\x00\x00\x00\x00\x00\x01\x00\x00\x4b\xba\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x04\x38\x00\x00\x00\x00\x00\x01\x00\x00\x56\x45\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x03\x92\x00\x00\x00\x00\x00\x01\x00\x00\x4a\x96\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
+\x00\x00\x02\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x0e\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x03\x22\x00\x00\x00\x00\x00\x01\x00\x00\x46\x6d\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x28\xf8\
+\x00\x00\x01\x6d\x7c\x52\x86\xbd\
+\x00\x00\x04\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x6c\xee\
+\x00\x00\x01\x6d\x7c\x52\x86\xbc\
"
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
diff --git a/graphics/asymptote/Makefile.in b/graphics/asymptote/Makefile.in
index 5728027c2d..4255146c89 100644
--- a/graphics/asymptote/Makefile.in
+++ b/graphics/asymptote/Makefile.in
@@ -43,7 +43,7 @@ COREFILES = $(CAMP) $(SYMBOL_FILES) env genv stm dec errormsg \
fftw++asy simpson coder coenv impdatum \
@getopt@ locate parser program application varinit fundec refaccess \
envcompleter process constructor array Delaunay predicates \
- $(PRC) glrender tr arcball algebra3 quaternion shaders
+ $(PRC) glrender tr shaders jsfile
FILES = $(COREFILES) main
@@ -69,7 +69,7 @@ ASY = ./asy -dir base -config "" -render=0
DEFS = @DEFS@ @OPTIONS@ @PTHREAD_CFLAGS@ -DFFTWPP_SINGLE_THREAD
CFLAGS = @CFLAGS@
OPTS = $(DEFS) @CPPFLAGS@ @CXXFLAGS@ $(CFLAGS)
-GLEWOPTS = $(DEFS) @CPPFLAGS@ $(CFLAGS) -D GLEW_NO_GLU
+GLEWOPTS = $(DEFS) @CPPFLAGS@ $(CFLAGS) -DGLEW_NO_GLU -DGLEW_BUILD -O1
# Options for compiling the object files for the shared library.
# gc has to be configured with the option --disable-threads in order to make a
@@ -95,6 +95,7 @@ datadir = $(DESTDIR)@datadir@
asydir = $(datadir)/asymptote
GUIdir = $(asydir)/GUI
shaderdir = $(asydir)/shaders
+webgldir = $(asydir)/webgl
docdir = $(DESTDIR)@docdir@
exampledir = $(docdir)/examples
animationsdir = $(exampledir)/animations
@@ -245,7 +246,8 @@ install-texhash: install-asy
install-asy: asy sty
${INSTALL} -d $(bindir) $(asydir) $(exampledir) $(animationsdir)
${INSTALL} -d $(GUIdir) $(GUIdir)/pyUIClass $(GUIdir)/configs \
- $(GUIdir)/res $(GUIdir)/res/icons $(shaderdir)
+ $(GUIdir)/res $(GUIdir)/res/icons $(shaderdir) \
+ $(webgldir)
-${INSTALL} -d $(latexdir)
-${INSTALL} -d $(contextdir)
${INSTALL} -p -m 755 $(NAME) $(bindir)
@@ -253,6 +255,7 @@ install-asy: asy sty
asy-keywords.el $(asydir)
${INSTALL} -p -m 755 GUI/*.py $(GUIdir)
${INSTALL} -p -m 755 base/shaders/*.glsl $(shaderdir)
+ ${INSTALL} -p -m 644 base/webgl/*.html base/webgl/*.js $(webgldir)
-${INSTALL} -p -m 644 GUI/pyUIClass/*.py $(GUIdir)/pyUIClass
${INSTALL} -p -m 644 GUI/configs/*.cson $(GUIdir)/configs
${INSTALL} -p -m 644 GUI/res/icons.qrc $(GUIdir)/res
@@ -285,9 +288,19 @@ uninstall-asy:
-cd $(exampledir) && rm -f $(EXEXTRA) $(DOCEXTRA)
-rmdir $(exampledir)
-cd $(GUIdir) && rm -f *.py
+ -cd $(GUIdir)/pyUIClass && rm -f *.py
+ -rmdir $(GUIdir)/pyUIClass
+ -cd $(GUIdir)/configs && rm -f *.cson
+ -rmdir $(GUIdir)/configs
+ -cd $(GUIdir)/res/icons && rm -f *.svg
+ -rmdir $(GUIdir)/res/icons
+ -cd $(GUIdir)/res && rm -f icons.qrc
+ -rmdir $(GUIdir)/res
-rmdir $(GUIdir)
-cd $(shaderdir) && rm -f *.glsl
-rmdir $(shaderdir)
+ -cd $(webgldir) && rm -f *.html *.js
+ -rmdir $(webgldir)
-cd $(asydir) && rm -f asy-keywords.el *.asy $(EXTRA)
-rmdir $(asydir)
-cd $(latexdir) && rm -f $(LATEXFILES)
@@ -338,11 +351,7 @@ check-all: asy FORCE
$(MAKE) -C tests all
glew.o: glew.c GL/glew.h
- if test -n "$(MSDOS)"; then \
- $(CC) -I. $(GLEWOPTS) -o glew.o -D_WIN32 -D GLEW_BUILD -c glew.c; \
- else \
- $(CC) -I. $(GLEWOPTS) -o glew.o -c glew.c; \
- fi
+ $(CC) -I. $(GLEWOPTS) -o glew.o -c glew.c
.SUFFIXES: .c .cc .o .d .ui .py
%.o: %.cc
diff --git a/graphics/asymptote/README b/graphics/asymptote/README
index 77e7edfb59..f153da76a8 100644
--- a/graphics/asymptote/README
+++ b/graphics/asymptote/README
@@ -60,7 +60,3 @@ under the CC-BY-SA 4.0 license:
http://www.entypo.com/
and under a CC license:
http://www.zondicons.com/zondicons.zip
-
-Uses OpenImageIO, which the source is available at
-https://github.com/OpenImageIO/oiio.
-Copyright 2008-2018 Larry Gritz et al. All Rights Reserved. \ No newline at end of file
diff --git a/graphics/asymptote/ReleaseNotes b/graphics/asymptote/ReleaseNotes
index 773543ee81..534427c362 100644
--- a/graphics/asymptote/ReleaseNotes
+++ b/graphics/asymptote/ReleaseNotes
@@ -1,3 +1,18 @@
+Release Notes for Version 2.54
+
+Support for generating and embedding interactive 3D WebGL vector graphics
+within an HTML file has been added, allowing Asymptote figures
+to be displayed on modern mobile and desktop browsers. The OpenGL rendering
+routines were further optimized, yielding higher frame rates and
+lower memory usage. The view position for perspective projection was fixed.
+The default value of file word() was fixed. Installation issues were
+addressed. A new digits setting controls the default output file precision.
+A hanging pipe was fixed. The popcount function was extended to
+systems that lack 64-bit integers. The order of PRC quad colours was fixed.
+If lighting is enabled, vertex colors are now ignored in PRC images;
+when drawing a surface s, use draw(s,prc() ? nolight : currentlight);
+to disable lighting manually and recover the old behaviour.
+
Release Notes for Version 2.53
A memory leak and antialiasing artifacts in the 3D rendering engine were fixed.
diff --git a/graphics/asymptote/algebra3.cc b/graphics/asymptote/algebra3.cc
deleted file mode 100644
index 4b76942815..0000000000
--- a/graphics/asymptote/algebra3.cc
+++ /dev/null
@@ -1,1610 +0,0 @@
-/*
-
- algebra3.cpp, algebra3.h - C++ Vector and Matrix Algebra routines
-
- GLUI User Interface Toolkit (LGPL)
- Copyright (c) 1998 Paul Rademacher
-
- WWW: http://sourceforge.net/projects/glui/
- Forums: http://sourceforge.net/forum/?group_id=92496
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-/**************************************************************************
-
- There are three vector classes and two matrix classes: vec2, vec3,
- vec4, mat3, and mat4.
-
- All the standard arithmetic operations are defined, with '*'
- for dot product of two vectors and multiplication of two matrices,
- and '^' for cross product of two vectors.
-
- Additional functions include length(), normalize(), homogenize for
- vectors, and print(), set(), apply() for all classes.
-
- There is a function transpose() for matrices, but note that it
- does not actually change the matrix,
-
- When multiplied with a matrix, a vector is treated as a row vector
- if it precedes the matrix (v*M), and as a column vector if it
- follows the matrix (M*v).
-
- Matrices are stored in row-major form.
-
- A vector of one dimension (2d, 3d, or 4d) can be cast to a vector
- of a higher or lower dimension. If casting to a higher dimension,
- the new component is set by default to 1.0, unless a value is
- specified:
- vec3 a(1.0, 2.0, 3.0 );
- vec4 b( a, 4.0 ); // now b == {1.0, 2.0, 3.0, 4.0};
- When casting to a lower dimension, the vector is homogenized in
- the lower dimension. E.g., if a 4d {X,Y,Z,W} is cast to 3d, the
- resulting vector is {X/W, Y/W, Z/W}. It is up to the user to
- insure the fourth component is not zero before casting.
-
- There are also the following function for building matrices:
- identity2D(), translation2D(), rotation2D(),
- scaling2D(), identity3D(), translation3D(),
- rotation3D(), rotation3Drad(), scaling3D(),
- perspective3D()
-
-
- ---------------------------------------------------------------------
-
- Author: Jean-Francois DOUEg
- Revised: Paul Rademacher
- Version 3.2 - Feb 1998
- Revised: Nigel Stewart (GLUI Code Cleaning)
-
-**************************************************************************/
-
-#include "algebra3.h"
-#include <cmath>
-
-static const double radians=std::acos(-1)/180.0;
-
-#ifdef VEC_ERROR_FATAL
-#ifndef VEC_ERROR
-#define VEC_ERROR(E) { printf( "VERROR %s\n", E ); exit(1); }
-#endif
-#else
-#ifndef VEC_ERROR
-#define VEC_ERROR(E) { printf( "VERROR %s\n", E ); }
-#endif
-#endif
-
-/****************************************************************
- * *
- * vec2 Member functions *
- * *
- ****************************************************************/
-
-/******************** vec2 CONSTRUCTORS ********************/
-
-vec2::vec2()
-{
- n[VX] = n[VY] = 0.0;
-}
-
-vec2::vec2(float x, float y)
-{
- n[VX] = x;
- n[VY] = y;
-}
-
-vec2::vec2(const vec2 &v)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
-}
-
-vec2::vec2(const vec3 &v) // it is up to caller to avoid divide-by-zero
-{
- n[VX] = v.n[VX]/v.n[VZ];
- n[VY] = v.n[VY]/v.n[VZ];
-}
-
-vec2::vec2(const vec3 &v, int dropAxis)
-{
- switch (dropAxis)
- {
- case VX: n[VX] = v.n[VY]; n[VY] = v.n[VZ]; break;
- case VY: n[VX] = v.n[VX]; n[VY] = v.n[VZ]; break;
- default: n[VX] = v.n[VX]; n[VY] = v.n[VY]; break;
- }
-}
-
-/******************** vec2 ASSIGNMENT OPERATORS ******************/
-
-vec2 & vec2::operator=(const vec2 &v)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
- return *this;
-}
-
-vec2 & vec2::operator+=(const vec2 &v)
-{
- n[VX] += v.n[VX];
- n[VY] += v.n[VY];
- return *this;
-}
-
-vec2 & vec2::operator-=(const vec2 &v)
-{
- n[VX] -= v.n[VX];
- n[VY] -= v.n[VY];
- return *this;
-}
-
-vec2 &vec2::operator*=(float d)
-{
- n[VX] *= d;
- n[VY] *= d;
- return *this;
-}
-
-vec2 &vec2::operator/=(float d)
-{
- float d_inv = 1.0f/d;
- n[VX] *= d_inv;
- n[VY] *= d_inv;
- return *this;
-}
-
-float &vec2::operator[](int i)
-{
- if (i < VX || i > VY)
- //VEC_ERROR("vec2 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("vec2 [] operator: illegal access" );
- return n[i];
-}
-
-const float &vec2::operator[](int i) const
-{
- if (i < VX || i > VY)
- //VEC_ERROR("vec2 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("vec2 [] operator: illegal access" );
-
- return n[i];
-}
-
-/******************** vec2 SPECIAL FUNCTIONS ********************/
-
-float vec2::length() const
-{
- return (float) sqrt(length2());
-}
-
-float vec2::length2() const
-{
- return n[VX]*n[VX] + n[VY]*n[VY];
-}
-
-vec2 &vec2::normalize() // it is up to caller to avoid divide-by-zero
-{
- *this /= length();
- return *this;
-}
-
-vec2 &vec2::apply(V_FCT_PTR fct)
-{
- n[VX] = (*fct)(n[VX]);
- n[VY] = (*fct)(n[VY]);
- return *this;
-}
-
-void vec2::set( float x, float y )
-{
- n[VX] = x; n[VY] = y;
-}
-
-/******************** vec2 FRIENDS *****************************/
-
-vec2 operator-(const vec2 &a)
-{
- return vec2(-a.n[VX],-a.n[VY]);
-}
-
-vec2 operator+(const vec2 &a, const vec2& b)
-{
- return vec2(a.n[VX]+b.n[VX], a.n[VY]+b.n[VY]);
-}
-
-vec2 operator-(const vec2 &a, const vec2& b)
-{
- return vec2(a.n[VX]-b.n[VX], a.n[VY]-b.n[VY]);
-}
-
-vec2 operator*(const vec2 &a, float d)
-{
- return vec2(d*a.n[VX], d*a.n[VY]);
-}
-
-vec2 operator*(float d, const vec2 &a)
-{
- return a*d;
-}
-
-vec2 operator*(const mat3 &a, const vec2 &v)
-{
- vec3 av;
-
- av.n[VX] = a.v[0].n[VX]*v.n[VX] + a.v[0].n[VY]*v.n[VY] + a.v[0].n[VZ];
- av.n[VY] = a.v[1].n[VX]*v.n[VX] + a.v[1].n[VY]*v.n[VY] + a.v[1].n[VZ];
- av.n[VZ] = a.v[2].n[VX]*v.n[VX] + a.v[2].n[VY]*v.n[VY] + a.v[2].n[VZ];
-
- return av;
-}
-
-vec2 operator*(const vec2 &v, const mat3 &a)
-{
- return a.transpose() * v;
-}
-
-vec3 operator*(const mat3 &a, const vec3 &v)
-{
- vec3 av;
-
- av.n[VX] = a.v[0].n[VX]*v.n[VX] + a.v[0].n[VY]*v.n[VY] + a.v[0].n[VZ]*v.n[VZ];
- av.n[VY] = a.v[1].n[VX]*v.n[VX] + a.v[1].n[VY]*v.n[VY] + a.v[1].n[VZ]*v.n[VZ];
- av.n[VZ] = a.v[2].n[VX]*v.n[VX] + a.v[2].n[VY]*v.n[VY] + a.v[2].n[VZ]*v.n[VZ];
-
- return av;
-}
-
-vec3 operator*(const vec3 &v, const mat3 &a)
-{
- return a.transpose() * v;
-}
-
-float operator*(const vec2 &a, const vec2 &b)
-{
- return a.n[VX]*b.n[VX] + a.n[VY]*b.n[VY];
-}
-
-vec2 operator/(const vec2 &a, float d)
-{
- float d_inv = 1.0f/d;
- return vec2(a.n[VX]*d_inv, a.n[VY]*d_inv);
-}
-
-vec3 operator^(const vec2 &a, const vec2 &b)
-{
- return vec3(0.0, 0.0, a.n[VX] * b.n[VY] - b.n[VX] * a.n[VY]);
-}
-
-int operator==(const vec2 &a, const vec2 &b)
-{
- return (a.n[VX] == b.n[VX]) && (a.n[VY] == b.n[VY]);
-}
-
-int operator!=(const vec2 &a, const vec2 &b)
-{
- return !(a == b);
-}
-
-/*ostream& operator << (ostream& s, vec2& v)
-{ return s << "| " << v.n[VX] << ' ' << v.n[VY] << " |"; }
-*/
-
-/*istream& operator >> (istream& s, vec2& v) {
- vec2 v_tmp;
- char c = ' ';
-
- while (isspace(c))
- s >> c;
- // The vectors can be formatted either as x y or | x y |
- if (c == '|') {
- s >> v_tmp[VX] >> v_tmp[VY];
- while (s >> c && isspace(c)) ;
- if (c != '|')
- ;//s.set(_bad);
- }
- else {
- s.putback(c);
- s >> v_tmp[VX] >> v_tmp[VY];
- }
- if (s)
- v = v_tmp;
- return s;
-}
-*/
-
-void swap(vec2 &a, vec2 &b)
-{
- vec2 tmp(a);
- a = b;
- b = tmp;
-}
-
-vec2 min_vec(const vec2 &a, const vec2 &b)
-{
- return vec2(MIN(a.n[VX], b.n[VX]), MIN(a.n[VY], b.n[VY]));
-}
-
-vec2 max_vec(const vec2 &a, const vec2 &b)
-{
- return vec2(MAX(a.n[VX], b.n[VX]), MAX(a.n[VY], b.n[VY]));
-}
-
-vec2 prod(const vec2 &a, const vec2 &b)
-{
- return vec2(a.n[VX] * b.n[VX], a.n[VY] * b.n[VY]);
-}
-
-/****************************************************************
- * *
- * vec3 Member functions *
- * *
- ****************************************************************/
-
-// CONSTRUCTORS
-
-vec3::vec3()
-{
- n[VX] = n[VY] = n[VZ] = 0.0;
-}
-
-vec3::vec3(float x, float y, float z)
-{
- n[VX] = x;
- n[VY] = y;
- n[VZ] = z;
-}
-
-vec3::vec3(const vec3 &v)
-{
- n[VX] = v.n[VX]; n[VY] = v.n[VY]; n[VZ] = v.n[VZ];
-}
-
-vec3::vec3(const vec2 &v)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
- n[VZ] = 1.0;
-}
-
-vec3::vec3(const vec2 &v, float d)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
- n[VZ] = d;
-}
-
-vec3::vec3(const vec4 &v) // it is up to caller to avoid divide-by-zero
-{
- n[VX] = v.n[VX] / v.n[VW];
- n[VY] = v.n[VY] / v.n[VW];
- n[VZ] = v.n[VZ] / v.n[VW];
-}
-
-vec3::vec3(const vec4 &v, int dropAxis)
-{
- switch (dropAxis)
- {
- case VX: n[VX] = v.n[VY]; n[VY] = v.n[VZ]; n[VZ] = v.n[VW]; break;
- case VY: n[VX] = v.n[VX]; n[VY] = v.n[VZ]; n[VZ] = v.n[VW]; break;
- case VZ: n[VX] = v.n[VX]; n[VY] = v.n[VY]; n[VZ] = v.n[VW]; break;
- default: n[VX] = v.n[VX]; n[VY] = v.n[VY]; n[VZ] = v.n[VZ]; break;
- }
-}
-
-
-// ASSIGNMENT OPERATORS
-
-vec3 &vec3::operator=(const vec3 &v)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
- n[VZ] = v.n[VZ];
- return *this;
-}
-
-vec3 &vec3::operator+=(const vec3 &v)
-{
- n[VX] += v.n[VX];
- n[VY] += v.n[VY];
- n[VZ] += v.n[VZ];
- return *this;
-}
-
-vec3 &vec3::operator-=(const vec3& v)
-{
- n[VX] -= v.n[VX];
- n[VY] -= v.n[VY];
- n[VZ] -= v.n[VZ];
- return *this;
-}
-
-vec3 &vec3::operator*=(float d)
-{
- n[VX] *= d;
- n[VY] *= d;
- n[VZ] *= d;
- return *this;
-}
-
-vec3 &vec3::operator/=(float d)
-{
- float d_inv = 1.0f/d;
- n[VX] *= d_inv;
- n[VY] *= d_inv;
- n[VZ] *= d_inv;
- return *this;
-}
-
-float &vec3::operator[](int i)
-{
- if (i < VX || i > VZ)
- //VEC_ERROR("vec3 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("vec3 [] operator: illegal access" );
-
- return n[i];
-}
-
-const float &vec3::operator[](int i) const
-{
- if (i < VX || i > VZ)
- //VEC_ERROR("vec3 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("vec3 [] operator: illegal access" );
-
- return n[i];
-}
-
-// SPECIAL FUNCTIONS
-
-float vec3::length() const
-{
- return (float) sqrt(length2());
-}
-
-float vec3::length2() const
-{
- return n[VX]*n[VX] + n[VY]*n[VY] + n[VZ]*n[VZ];
-}
-
-vec3 &vec3::normalize() // it is up to caller to avoid divide-by-zero
-{
- *this /= length();
- return *this;
-}
-
-vec3 &vec3::homogenize(void) // it is up to caller to avoid divide-by-zero
-{
- n[VX] /= n[VZ];
- n[VY] /= n[VZ];
- n[VZ] = 1.0;
- return *this;
-}
-
-vec3 &vec3::apply(V_FCT_PTR fct)
-{
- n[VX] = (*fct)(n[VX]);
- n[VY] = (*fct)(n[VY]);
- n[VZ] = (*fct)(n[VZ]);
- return *this;
-}
-
-void vec3::set(float x, float y, float z) // set vector
-{
- n[VX] = x;
- n[VY] = y;
- n[VZ] = z;
-}
-
-void vec3::print(FILE *file, const char *name) const // print vector to a file
-{
- fprintf( file, "%s: <%f, %f, %f>\n", name, n[VX], n[VY], n[VZ] );
-}
-
-// FRIENDS
-
-vec3 operator-(const vec3 &a)
-{
- return vec3(-a.n[VX],-a.n[VY],-a.n[VZ]);
-}
-
-vec3 operator+(const vec3 &a, const vec3 &b)
-{
- return vec3(a.n[VX]+ b.n[VX], a.n[VY] + b.n[VY], a.n[VZ] + b.n[VZ]);
-}
-
-vec3 operator-(const vec3 &a, const vec3 &b)
-{
- return vec3(a.n[VX]-b.n[VX], a.n[VY]-b.n[VY], a.n[VZ]-b.n[VZ]);
-}
-
-vec3 operator*(const vec3 &a, float d)
-{
- return vec3(d*a.n[VX], d*a.n[VY], d*a.n[VZ]);
-}
-
-vec3 operator*(float d, const vec3 &a)
-{
- return a*d;
-}
-
-vec3 operator*(const mat4 &a, const vec3 &v)
-{
- return a*vec4(v);
-}
-
-vec3 operator*(const vec3 &v, mat4 &a)
-{
- return a.transpose()*v;
-}
-
-float operator*(const vec3 &a, const vec3 &b)
-{
- return a.n[VX]*b.n[VX] + a.n[VY]*b.n[VY] + a.n[VZ]*b.n[VZ];
-}
-
-vec3 operator/(const vec3 &a, float d)
-{
- float d_inv = 1.0f/d;
- return vec3(a.n[VX]*d_inv, a.n[VY]*d_inv, a.n[VZ]*d_inv);
-}
-
-vec3 operator^(const vec3 &a, const vec3 &b)
-{
- return
- vec3(a.n[VY]*b.n[VZ] - a.n[VZ]*b.n[VY],
- a.n[VZ]*b.n[VX] - a.n[VX]*b.n[VZ],
- a.n[VX]*b.n[VY] - a.n[VY]*b.n[VX]);
-}
-
-int operator==(const vec3 &a, const vec3 &b)
-{
- return (a.n[VX] == b.n[VX]) && (a.n[VY] == b.n[VY]) && (a.n[VZ] == b.n[VZ]);
-}
-
-int operator!=(const vec3 &a, const vec3 &b)
-{
- return !(a == b);
-}
-
-/*ostream& operator << (ostream& s, vec3& v)
-{ return s << "| " << v.n[VX] << ' ' << v.n[VY] << ' ' << v.n[VZ] << " |"; }
-
-istream& operator >> (istream& s, vec3& v) {
- vec3 v_tmp;
- char c = ' ';
-
- while (isspace(c))
- s >> c;
- // The vectors can be formatted either as x y z or | x y z |
- if (c == '|') {
- s >> v_tmp[VX] >> v_tmp[VY] >> v_tmp[VZ];
- while (s >> c && isspace(c)) ;
- if (c != '|')
- ;//s.set(_bad);
- }
- else {
- s.putback(c);
- s >> v_tmp[VX] >> v_tmp[VY] >> v_tmp[VZ];
- }
- if (s)
- v = v_tmp;
- return s;
-}
-*/
-
-void swap(vec3 &a, vec3 &b)
-{
- vec3 tmp(a);
- a = b;
- b = tmp;
-}
-
-vec3 min_vec(const vec3 &a, const vec3 &b)
-{
- return vec3(
- MIN(a.n[VX], b.n[VX]),
- MIN(a.n[VY], b.n[VY]),
- MIN(a.n[VZ], b.n[VZ]));
-}
-
-vec3 max_vec(const vec3 &a, const vec3 &b)
-{
- return vec3(
- MAX(a.n[VX], b.n[VX]),
- MAX(a.n[VY], b.n[VY]),
- MAX(a.n[VZ], b.n[VZ]));
-}
-
-vec3 prod(const vec3 &a, const vec3 &b)
-{
- return vec3(a.n[VX]*b.n[VX], a.n[VY]*b.n[VY], a.n[VZ]*b.n[VZ]);
-}
-
-/****************************************************************
- * *
- * vec4 Member functions *
- * *
- ****************************************************************/
-
-// CONSTRUCTORS
-
-vec4::vec4()
-{
- n[VX] = n[VY] = n[VZ] = 0.0;
- n[VW] = 1.0;
-}
-
-vec4::vec4(float x, float y, float z, float w)
-{
- n[VX] = x;
- n[VY] = y;
- n[VZ] = z;
- n[VW] = w;
-}
-
-vec4::vec4(const vec4 &v)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
- n[VZ] = v.n[VZ];
- n[VW] = v.n[VW];
-}
-
-vec4::vec4(const vec3 &v)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
- n[VZ] = v.n[VZ];
- n[VW] = 1.0;
-}
-
-vec4::vec4(const vec3 &v, float d)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
- n[VZ] = v.n[VZ];
- n[VW] = d;
-}
-
-// ASSIGNMENT OPERATORS
-
-vec4 &vec4::operator=(const vec4 &v)
-{
- n[VX] = v.n[VX];
- n[VY] = v.n[VY];
- n[VZ] = v.n[VZ];
- n[VW] = v.n[VW];
- return *this;
-}
-
-vec4 &vec4::operator+=(const vec4 &v)
-{
- n[VX] += v.n[VX];
- n[VY] += v.n[VY];
- n[VZ] += v.n[VZ];
- n[VW] += v.n[VW];
- return *this;
-}
-
-vec4 &vec4::operator-=(const vec4 &v)
-{
- n[VX] -= v.n[VX];
- n[VY] -= v.n[VY];
- n[VZ] -= v.n[VZ];
- n[VW] -= v.n[VW];
- return *this;
-}
-
-vec4 &vec4::operator*=(float d)
-{
- n[VX] *= d;
- n[VY] *= d;
- n[VZ] *= d;
- n[VW] *= d;
- return *this;
-}
-
-vec4 &vec4::operator/=(float d)
-{
- float d_inv = 1.0f/d;
- n[VX] *= d_inv;
- n[VY] *= d_inv;
- n[VZ] *= d_inv;
- n[VW] *= d_inv;
- return *this;
-}
-
-float &vec4::operator[](int i)
-{
- if (i < VX || i > VW)
- //VEC_ERROR("vec4 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("vec4 [] operator: illegal access" );
-
- return n[i];
-}
-
-const float &vec4::operator[](int i) const
-{
- if (i < VX || i > VW)
- //VEC_ERROR("vec4 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("vec4 [] operator: illegal access" );
-
- return n[i];
-}
-
-// SPECIAL FUNCTIONS
-
-float vec4::length() const
-{
- return (float) sqrt(length2());
-}
-
-float vec4::length2() const
-{
- return n[VX]*n[VX] + n[VY]*n[VY] + n[VZ]*n[VZ] + n[VW]*n[VW];
-}
-
-vec4 &vec4::normalize() // it is up to caller to avoid divide-by-zero
-{
- *this /= length();
- return *this;
-}
-
-vec4 &vec4::homogenize() // it is up to caller to avoid divide-by-zero
-{
- n[VX] /= n[VW];
- n[VY] /= n[VW];
- n[VZ] /= n[VW];
- n[VW] = 1.0;
- return *this;
-}
-
-vec4 &vec4::apply(V_FCT_PTR fct)
-{
- n[VX] = (*fct)(n[VX]);
- n[VY] = (*fct)(n[VY]);
- n[VZ] = (*fct)(n[VZ]);
- n[VW] = (*fct)(n[VW]);
- return *this;
-}
-
-void vec4::print(FILE *file, const char *name) const // print vector to a file
-{
- fprintf( file, "%s: <%f, %f, %f, %f>\n", name, n[VX], n[VY], n[VZ], n[VW]);
-}
-
-void vec4::set(float x, float y, float z, float a)
-{
- n[0] = x;
- n[1] = y;
- n[2] = z;
- n[3] = a;
-}
-
-
-// FRIENDS
-
-vec4 operator-(const vec4 &a)
-{
- return vec4(-a.n[VX],-a.n[VY],-a.n[VZ],-a.n[VW]);
-}
-
-vec4 operator+(const vec4 &a, const vec4 &b)
-{
- return vec4(
- a.n[VX] + b.n[VX],
- a.n[VY] + b.n[VY],
- a.n[VZ] + b.n[VZ],
- a.n[VW] + b.n[VW]);
-}
-
-vec4 operator-(const vec4 &a, const vec4 &b)
-{
- return vec4(
- a.n[VX] - b.n[VX],
- a.n[VY] - b.n[VY],
- a.n[VZ] - b.n[VZ],
- a.n[VW] - b.n[VW]);
-}
-
-vec4 operator*(const vec4 &a, float d)
-{
- return vec4(d*a.n[VX], d*a.n[VY], d*a.n[VZ], d*a.n[VW]);
-}
-
-vec4 operator*(float d, const vec4 &a)
-{
- return a*d;
-}
-
-vec4 operator*(const mat4 &a, const vec4 &v)
-{
- #define ROWCOL(i) \
- a.v[i].n[0]*v.n[VX] + \
- a.v[i].n[1]*v.n[VY] + \
- a.v[i].n[2]*v.n[VZ] + \
- a.v[i].n[3]*v.n[VW]
-
- return vec4(ROWCOL(0), ROWCOL(1), ROWCOL(2), ROWCOL(3));
-
- #undef ROWCOL
-}
-
-vec4 operator*(const vec4 &v, const mat4 &a)
-{
- return a.transpose()*v;
-}
-
-float operator*(const vec4 &a, const vec4 &b)
-{
- return
- a.n[VX]*b.n[VX] +
- a.n[VY]*b.n[VY] +
- a.n[VZ]*b.n[VZ] +
- a.n[VW]*b.n[VW];
-}
-
-vec4 operator/(const vec4 &a, float d)
-{
- float d_inv = 1.0f/d;
- return vec4(
- a.n[VX]*d_inv,
- a.n[VY]*d_inv,
- a.n[VZ]*d_inv,
- a.n[VW]*d_inv);
-}
-
-int operator==(const vec4 &a, const vec4 &b)
-{
- return
- (a.n[VX] == b.n[VX]) &&
- (a.n[VY] == b.n[VY]) &&
- (a.n[VZ] == b.n[VZ]) &&
- (a.n[VW] == b.n[VW]);
-}
-
-int operator!=(const vec4 &a, const vec4 &b)
-{
- return !(a == b);
-}
-
-/*ostream& operator << (ostream& s, vec4& v)
-{ return s << "| " << v.n[VX] << ' ' << v.n[VY] << ' ' << v.n[VZ] << ' '
- << v.n[VW] << " |"; }
-
-istream& operator >> (istream& s, vec4& v) {
- vec4 v_tmp;
- char c = ' ';
-
- while (isspace(c))
- s >> c;
- // The vectors can be formatted either as x y z w or | x y z w |
- if (c == '|') {
- s >> v_tmp[VX] >> v_tmp[VY] >> v_tmp[VZ] >> v_tmp[VW];
- while (s >> c && isspace(c)) ;
- if (c != '|')
- ;//s.set(_bad);
- }
- else {
- s.putback(c);
- s >> v_tmp[VX] >> v_tmp[VY] >> v_tmp[VZ] >> v_tmp[VW];
- }
- if (s)
- v = v_tmp;
- return s;
-}
-*/
-
-void swap(vec4 &a, vec4 &b)
-{
- vec4 tmp(a);
- a = b;
- b = tmp;
-}
-
-vec4 min_vec(const vec4 &a, const vec4 &b)
-{
- return vec4(
- MIN(a.n[VX], b.n[VX]),
- MIN(a.n[VY], b.n[VY]),
- MIN(a.n[VZ], b.n[VZ]),
- MIN(a.n[VW], b.n[VW]));
-}
-
-vec4 max_vec(const vec4 &a, const vec4 &b)
-{
- return vec4(
- MAX(a.n[VX], b.n[VX]),
- MAX(a.n[VY], b.n[VY]),
- MAX(a.n[VZ], b.n[VZ]),
- MAX(a.n[VW], b.n[VW]));
-}
-
-vec4 prod(const vec4 &a, const vec4 &b)
-{
- return vec4(
- a.n[VX] * b.n[VX],
- a.n[VY] * b.n[VY],
- a.n[VZ] * b.n[VZ],
- a.n[VW] * b.n[VW]);
-}
-
-/****************************************************************
- * *
- * mat3 member functions *
- * *
- ****************************************************************/
-
-// CONSTRUCTORS
-
-mat3::mat3()
-{
- *this = identity2D();
-}
-
-mat3::mat3(const vec3 &v0, const vec3 &v1, const vec3 &v2)
-{
- set(v0, v1, v2);
-}
-
-mat3::mat3(const mat3 &m)
-{
- v[0] = m.v[0];
- v[1] = m.v[1];
- v[2] = m.v[2];
-}
-
-// ASSIGNMENT OPERATORS
-
-mat3 &mat3::operator=(const mat3 &m)
-{
- v[0] = m.v[0];
- v[1] = m.v[1];
- v[2] = m.v[2];
- return *this;
-}
-
-mat3 &mat3::operator+=(const mat3& m)
-{
- v[0] += m.v[0];
- v[1] += m.v[1];
- v[2] += m.v[2];
- return *this;
-}
-
-mat3 &mat3::operator-=(const mat3& m)
-{
- v[0] -= m.v[0];
- v[1] -= m.v[1];
- v[2] -= m.v[2];
- return *this;
-}
-
-mat3 &mat3::operator*=(float d)
-{
- v[0] *= d;
- v[1] *= d;
- v[2] *= d;
- return *this;
-}
-
-mat3 &mat3::operator/=(float d)
-{
- v[0] /= d;
- v[1] /= d;
- v[2] /= d;
- return *this;
-}
-
-vec3 &mat3::operator[](int i)
-{
- if (i < VX || i > VZ)
- //VEC_ERROR("mat3 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("mat3 [] operator: illegal access" );
-
- return v[i];
-}
-
-const vec3 &mat3::operator[](int i) const
-{
- if (i < VX || i > VZ)
- //VEC_ERROR("mat3 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("mat3 [] operator: illegal access" );
-
- return v[i];
-}
-
-void mat3::set(const vec3 &v0, const vec3 &v1, const vec3 &v2)
-{
- v[0] = v0;
- v[1] = v1;
- v[2] = v2;
-}
-
-// SPECIAL FUNCTIONS
-
-mat3 mat3::transpose() const
-{
- return mat3(
- vec3(v[0][0], v[1][0], v[2][0]),
- vec3(v[0][1], v[1][1], v[2][1]),
- vec3(v[0][2], v[1][2], v[2][2]));
-}
-
-mat3 mat3::inverse() const // Gauss-Jordan elimination with partial pivoting
-{
- mat3 a(*this); // As a evolves from original mat into identity
- mat3 b(identity2D()); // b evolves from identity into inverse(a)
- int i, j, i1;
-
- // Loop over cols of a from left to right, eliminating above and below diag
- for (j=0; j<3; j++) // Find largest pivot in column j among rows j..2
- {
- i1 = j; // Row with largest pivot candidate
- for (i=j+1; i<3; i++)
- if (fabs(a.v[i].n[j]) > fabs(a.v[i1].n[j]))
- i1 = i;
-
- // Swap rows i1 and j in a and b to put pivot on diagonal
- swap(a.v[i1], a.v[j]);
- swap(b.v[i1], b.v[j]);
-
- // Scale row j to have a unit diagonal
- if (a.v[j].n[j]==0.)
- VEC_ERROR("mat3::inverse: singular matrix; can't invert\n");
-
- b.v[j] /= a.v[j].n[j];
- a.v[j] /= a.v[j].n[j];
-
- // Eliminate off-diagonal elems in col j of a, doing identical ops to b
- for (i=0; i<3; i++)
- if (i!=j)
- {
- b.v[i] -= a.v[i].n[j]*b.v[j];
- a.v[i] -= a.v[i].n[j]*a.v[j];
- }
- }
-
- return b;
-}
-
-mat3 &mat3::apply(V_FCT_PTR fct)
-{
- v[VX].apply(fct);
- v[VY].apply(fct);
- v[VZ].apply(fct);
- return *this;
-}
-
-
-// FRIENDS
-
-mat3 operator-(const mat3 &a)
-{
- return mat3(-a.v[0], -a.v[1], -a.v[2]);
-}
-
-mat3 operator+(const mat3 &a, const mat3 &b)
-{
- return mat3(a.v[0]+b.v[0], a.v[1]+b.v[1], a.v[2]+b.v[2]);
-}
-
-mat3 operator-(const mat3 &a, const mat3 &b)
-{
- return mat3(a.v[0]-b.v[0], a.v[1]-b.v[1], a.v[2]-b.v[2]);
-}
-
-mat3 operator*(const mat3 &a, const mat3 &b)
-{
- #define ROWCOL(i, j) \
- a.v[i].n[0]*b.v[0][j] + a.v[i].n[1]*b.v[1][j] + a.v[i].n[2]*b.v[2][j]
-
- return mat3(
- vec3(ROWCOL(0,0), ROWCOL(0,1), ROWCOL(0,2)),
- vec3(ROWCOL(1,0), ROWCOL(1,1), ROWCOL(1,2)),
- vec3(ROWCOL(2,0), ROWCOL(2,1), ROWCOL(2,2)));
-
- #undef ROWCOL
-}
-
-mat3 operator*(const mat3 &a, float d)
-{
- return mat3(a.v[0]*d, a.v[1]*d, a.v[2]*d);
-}
-
-mat3 operator*(float d, const mat3 &a)
-{
- return a*d;
-}
-
-mat3 operator/(const mat3 &a, float d)
-{
- return mat3(a.v[0]/d, a.v[1]/d, a.v[2]/d);
-}
-
-int operator==(const mat3 &a, const mat3 &b)
-{
- return
- (a.v[0] == b.v[0]) &&
- (a.v[1] == b.v[1]) &&
- (a.v[2] == b.v[2]);
-}
-
-int operator!=(const mat3 &a, const mat3 &b)
-{
- return !(a == b);
-}
-
-/*ostream& operator << (ostream& s, mat3& m)
-{ return s << m.v[VX] << '\n' << m.v[VY] << '\n' << m.v[VZ]; }
-
-istream& operator >> (istream& s, mat3& m) {
- mat3 m_tmp;
-
- s >> m_tmp[VX] >> m_tmp[VY] >> m_tmp[VZ];
- if (s)
- m = m_tmp;
- return s;
-}
-*/
-
-void swap(mat3 &a, mat3 &b)
-{
- mat3 tmp(a);
- a = b;
- b = tmp;
-}
-
-void mat3::print(FILE *file, const char *name) const
-{
- int i, j;
-
- fprintf( stderr, "%s:\n", name );
-
- for( i = 0; i < 3; i++ )
- {
- fprintf( stderr, " " );
- for( j = 0; j < 3; j++ )
- {
- fprintf( stderr, "%f ", v[i][j] );
- }
- fprintf( stderr, "\n" );
- }
-}
-
-
-
-/****************************************************************
- * *
- * mat4 member functions *
- * *
- ****************************************************************/
-
-// CONSTRUCTORS
-
-mat4::mat4()
-{
- *this = identity3D();
-}
-
-mat4::mat4(const vec4& v0, const vec4& v1, const vec4& v2, const vec4& v3)
-{
- v[0] = v0;
- v[1] = v1;
- v[2] = v2;
- v[3] = v3;
-}
-
-mat4::mat4(const mat4 &m)
-{
- v[0] = m.v[0];
- v[1] = m.v[1];
- v[2] = m.v[2];
- v[3] = m.v[3];
-}
-
-mat4::mat4(
- float a00, float a01, float a02, float a03,
- float a10, float a11, float a12, float a13,
- float a20, float a21, float a22, float a23,
- float a30, float a31, float a32, float a33 )
-{
- v[0][0] = a00; v[0][1] = a01; v[0][2] = a02; v[0][3] = a03;
- v[1][0] = a10; v[1][1] = a11; v[1][2] = a12; v[1][3] = a13;
- v[2][0] = a20; v[2][1] = a21; v[2][2] = a22; v[2][3] = a23;
- v[3][0] = a30; v[3][1] = a31; v[3][2] = a32; v[3][3] = a33;
-}
-
-// ASSIGNMENT OPERATORS
-
-mat4 &mat4::operator=(const mat4 &m)
-{
- v[0] = m.v[0];
- v[1] = m.v[1];
- v[2] = m.v[2];
- v[3] = m.v[3];
- return *this;
-}
-
-mat4 &mat4::operator+=(const mat4 &m)
-{
- v[0] += m.v[0];
- v[1] += m.v[1];
- v[2] += m.v[2];
- v[3] += m.v[3];
- return *this;
-}
-
-mat4 &mat4::operator-=(const mat4 &m)
-{
- v[0] -= m.v[0];
- v[1] -= m.v[1];
- v[2] -= m.v[2];
- v[3] -= m.v[3];
- return *this;
-}
-
-mat4 &mat4::operator*=(float d)
-{
- v[0] *= d;
- v[1] *= d;
- v[2] *= d;
- v[3] *= d;
- return *this;
-}
-
-mat4 &mat4::operator/=(float d)
-{
- v[0] /= d;
- v[1] /= d;
- v[2] /= d;
- v[3] /= d;
- return *this;
-}
-
-vec4 &mat4::operator[](int i)
-{
- if (i < VX || i > VW)
- //VEC_ERROR("mat4 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("mat4 [] operator: illegal access" );
- return v[i];
-}
-
-const vec4 &mat4::operator[](int i) const
-{
- if (i < VX || i > VW)
- //VEC_ERROR("mat4 [] operator: illegal access; index = " << i << '\n')
- VEC_ERROR("mat4 [] operator: illegal access" );
- return v[i];
-}
-
-// SPECIAL FUNCTIONS;
-
-mat4 mat4::transpose() const
-{
- return mat4(
- vec4(v[0][0], v[1][0], v[2][0], v[3][0]),
- vec4(v[0][1], v[1][1], v[2][1], v[3][1]),
- vec4(v[0][2], v[1][2], v[2][2], v[3][2]),
- vec4(v[0][3], v[1][3], v[2][3], v[3][3]));
-}
-
-mat4 mat4::inverse() const // Gauss-Jordan elimination with partial pivoting
-{
- mat4 a(*this); // As a evolves from original mat into identity
- mat4 b(identity3D()); // b evolves from identity into inverse(a)
- int i, j, i1;
-
- // Loop over cols of a from left to right, eliminating above and below diag
- for (j=0; j<4; j++) // Find largest pivot in column j among rows j..3
- {
- i1 = j; // Row with largest pivot candidate
- for (i=j+1; i<4; i++)
- if (fabs(a.v[i].n[j]) > fabs(a.v[i1].n[j]))
- i1 = i;
-
- // Swap rows i1 and j in a and b to put pivot on diagonal
- swap(a.v[i1], a.v[j]);
- swap(b.v[i1], b.v[j]);
-
- // Scale row j to have a unit diagonal
- if (a.v[j].n[j]==0.)
- VEC_ERROR("mat4::inverse: singular matrix; can't invert\n");
-
- b.v[j] /= a.v[j].n[j];
- a.v[j] /= a.v[j].n[j];
-
- // Eliminate off-diagonal elems in col j of a, doing identical ops to b
- for (i=0; i<4; i++)
- if (i!=j)
- {
- b.v[i] -= a.v[i].n[j]*b.v[j];
- a.v[i] -= a.v[i].n[j]*a.v[j];
- }
- }
-
- return b;
-}
-
-mat4 &mat4::apply(V_FCT_PTR fct)
-{
- v[VX].apply(fct);
- v[VY].apply(fct);
- v[VZ].apply(fct);
- v[VW].apply(fct);
- return *this;
-}
-
-void mat4::print(FILE *file, const char *name) const
-{
- int i, j;
-
- fprintf( stderr, "%s:\n", name );
-
- for( i = 0; i < 4; i++ )
- {
- fprintf( stderr, " " );
- for( j = 0; j < 4; j++ )
- {
- fprintf( stderr, "%f ", v[i][j] );
- }
- fprintf( stderr, "\n" );
- }
-}
-
-void mat4::swap_rows(int i, int j)
-{
- vec4 t;
-
- t = v[i];
- v[i] = v[j];
- v[j] = t;
-}
-
-void mat4::swap_cols(int i, int j)
-{
- float t;
- int k;
-
- for (k=0; k<4; k++)
- {
- t = v[k][i];
- v[k][i] = v[k][j];
- v[k][j] = t;
- }
-}
-
-
-// FRIENDS
-
-mat4 operator-(const mat4 &a)
-{
- return mat4(-a.v[0],-a.v[1],-a.v[2],-a.v[3]);
-}
-
-mat4 operator+(const mat4 &a, const mat4 &b)
-{
- return mat4(
- a.v[0] + b.v[0],
- a.v[1] + b.v[1],
- a.v[2] + b.v[2],
- a.v[3] + b.v[3]);
-}
-
-mat4 operator-(const mat4 &a, const mat4 &b)
-{
- return mat4(
- a.v[0] - b.v[0],
- a.v[1] - b.v[1],
- a.v[2] - b.v[2],
- a.v[3] - b.v[3]);
-}
-
-mat4 operator*(const mat4 &a, const mat4 &b)
-{
- #define ROWCOL(i, j) \
- a.v[i].n[0]*b.v[0][j] + \
- a.v[i].n[1]*b.v[1][j] + \
- a.v[i].n[2]*b.v[2][j] + \
- a.v[i].n[3]*b.v[3][j]
-
- return mat4(
- vec4(ROWCOL(0,0), ROWCOL(0,1), ROWCOL(0,2), ROWCOL(0,3)),
- vec4(ROWCOL(1,0), ROWCOL(1,1), ROWCOL(1,2), ROWCOL(1,3)),
- vec4(ROWCOL(2,0), ROWCOL(2,1), ROWCOL(2,2), ROWCOL(2,3)),
- vec4(ROWCOL(3,0), ROWCOL(3,1), ROWCOL(3,2), ROWCOL(3,3))
- );
-
- #undef ROWCOL
-}
-
-mat4 operator*(const mat4 &a, float d)
-{
- return mat4(a.v[0]*d, a.v[1]*d, a.v[2]*d, a.v[3]*d);
-}
-
-mat4 operator*(float d, const mat4 &a)
-{
- return a*d;
-}
-
-mat4 operator/(const mat4 &a, float d)
-{
- return mat4(a.v[0]/d, a.v[1]/d, a.v[2]/d, a.v[3]/d);
-}
-
-int operator==(const mat4 &a, const mat4 &b)
-{
- return
- (a.v[0] == b.v[0]) &&
- (a.v[1] == b.v[1]) &&
- (a.v[2] == b.v[2]) &&
- (a.v[3] == b.v[3]);
-}
-
-int operator!=(const mat4 &a, const mat4 &b)
-{
- return !(a == b);
-}
-
-/*ostream& operator << (ostream& s, mat4& m)
-{ return s << m.v[VX] << '\n' << m.v[VY] << '\n' << m.v[VZ] << '\n' << m.v[VW]; }
-
-istream& operator >> (istream& s, mat4& m)
-{
- mat4 m_tmp;
-
- s >> m_tmp[VX] >> m_tmp[VY] >> m_tmp[VZ] >> m_tmp[VW];
- if (s)
- m = m_tmp;
- return s;
-}
-*/
-
-void swap(mat4 &a, mat4 &b)
-{
- mat4 tmp(a);
- a = b;
- b = tmp;
-}
-
-/****************************************************************
- * *
- * 2D functions and 3D functions *
- * *
- ****************************************************************/
-
-mat3 identity2D()
-{
- return mat3(
- vec3(1.0, 0.0, 0.0),
- vec3(0.0, 1.0, 0.0),
- vec3(0.0, 0.0, 1.0));
-}
-
-mat3 translation2D(const vec2 &v)
-{
- return mat3(
- vec3(1.0, 0.0, v[VX]),
- vec3(0.0, 1.0, v[VY]),
- vec3(0.0, 0.0, 1.0));
-}
-
-mat3 rotation2D(const vec2 &Center, float angleDeg)
-{
- float angleRad = (float) (angleDeg * radians);
- float c = (float) cos(angleRad);
- float s = (float) sin(angleRad);
-
- return mat3(
- vec3(c, -s, Center[VX] * (1.0f-c) + Center[VY] * s),
- vec3(s, c, Center[VY] * (1.0f-c) - Center[VX] * s),
- vec3(0.0, 0.0, 1.0));
-}
-
-mat3 scaling2D(const vec2 &scaleVector)
-{
- return mat3(
- vec3(scaleVector[VX], 0.0, 0.0),
- vec3(0.0, scaleVector[VY], 0.0),
- vec3(0.0, 0.0, 1.0));
-}
-
-mat4 identity3D()
-{
- return mat4(
- vec4(1.0, 0.0, 0.0, 0.0),
- vec4(0.0, 1.0, 0.0, 0.0),
- vec4(0.0, 0.0, 1.0, 0.0),
- vec4(0.0, 0.0, 0.0, 1.0));
-}
-
-mat4 translation3D(const vec3 &v)
-{
- return mat4(
- vec4(1.0, 0.0, 0.0, v[VX]),
- vec4(0.0, 1.0, 0.0, v[VY]),
- vec4(0.0, 0.0, 1.0, v[VZ]),
- vec4(0.0, 0.0, 0.0, 1.0));
-}
-
-mat4 rotation3D(const vec3 &Axis, float angleDeg)
-{
- float angleRad = (float) (angleDeg * radians);
- float c = (float) cos(angleRad);
- float s = (float) sin(angleRad);
- float t = 1.0f - c;
-
- vec3 axis(Axis);
- axis.normalize();
-
- return mat4(
- vec4(t * axis[VX] * axis[VX] + c,
- t * axis[VX] * axis[VY] - s * axis[VZ],
- t * axis[VX] * axis[VZ] + s * axis[VY],
- 0.0),
- vec4(t * axis[VX] * axis[VY] + s * axis[VZ],
- t * axis[VY] * axis[VY] + c,
- t * axis[VY] * axis[VZ] - s * axis[VX],
- 0.0),
- vec4(t * axis[VX] * axis[VZ] - s * axis[VY],
- t * axis[VY] * axis[VZ] + s * axis[VX],
- t * axis[VZ] * axis[VZ] + c,
- 0.0),
- vec4(0.0, 0.0, 0.0, 1.0));
-}
-
-mat4 rotation3Drad(const vec3 &Axis, float angleRad)
-{
- float c = (float) cos(angleRad);
- float s = (float) sin(angleRad);
- float t = 1.0f - c;
-
- vec3 axis(Axis);
- axis.normalize();
-
- return mat4(
- vec4(t * axis[VX] * axis[VX] + c,
- t * axis[VX] * axis[VY] - s * axis[VZ],
- t * axis[VX] * axis[VZ] + s * axis[VY],
- 0.0),
- vec4(t * axis[VX] * axis[VY] + s * axis[VZ],
- t * axis[VY] * axis[VY] + c,
- t * axis[VY] * axis[VZ] - s * axis[VX],
- 0.0),
- vec4(t * axis[VX] * axis[VZ] - s * axis[VY],
- t * axis[VY] * axis[VZ] + s * axis[VX],
- t * axis[VZ] * axis[VZ] + c,
- 0.0),
- vec4(0.0, 0.0, 0.0, 1.0));
-}
-
-mat4 scaling3D(const vec3 &scaleVector)
-{
- return mat4(
- vec4(scaleVector[VX], 0.0, 0.0, 0.0),
- vec4(0.0, scaleVector[VY], 0.0, 0.0),
- vec4(0.0, 0.0, scaleVector[VZ], 0.0),
- vec4(0.0, 0.0, 0.0, 1.0));
-}
-
-mat4 perspective3D(float d)
-{
- return mat4(
- vec4(1.0f, 0.0f, 0.0f, 0.0f),
- vec4(0.0f, 1.0f, 0.0f, 0.0f),
- vec4(0.0f, 0.0f, 1.0f, 0.0f),
- vec4(0.0f, 0.0f, 1.0f/d, 0.0f));
-}
diff --git a/graphics/asymptote/algebra3.h b/graphics/asymptote/algebra3.h
deleted file mode 100644
index 7043ff3c75..0000000000
--- a/graphics/asymptote/algebra3.h
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
-
- algebra3.cc, algebra3.h - C++ Vector and Matrix Algebra routines
-
- GLUI User Interface Toolkit (LGPL)
- Copyright (c) 1998 Paul Rademacher
-
- WWW: http://sourceforge.net/projects/glui/
- Forums: http://sourceforge.net/forum/?group_id=92496
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-/**************************************************************************
-
- There are three vector classes and two matrix classes: vec2, vec3,
- vec4, mat3, and mat4.
-
- All the standard arithmetic operations are defined, with '*'
- for dot product of two vectors and multiplication of two matrices,
- and '^' for cross product of two vectors.
-
- Additional functions include length(), normalize(), homogenize for
- vectors, and print(), set(), apply() for all classes.
-
- There is a function transpose() for matrices, but note that it
- does not actually change the matrix,
-
- When multiplied with a matrix, a vector is treated as a row vector
- if it precedes the matrix (v*M), and as a column vector if it
- follows the matrix (M*v).
-
- Matrices are stored in row-major form.
-
- A vector of one dimension (2d, 3d, or 4d) can be cast to a vector
- of a higher or lower dimension. If casting to a higher dimension,
- the new component is set by default to 1.0, unless a value is
- specified:
- vec3 a(1.0, 2.0, 3.0 );
- vec4 b( a, 4.0 ); // now b == {1.0, 2.0, 3.0, 4.0};
- When casting to a lower dimension, the vector is homogenized in
- the lower dimension. E.g., if a 4d {X,Y,Z,W} is cast to 3d, the
- resulting vector is {X/W, Y/W, Z/W}. It is up to the user to
- insure the fourth component is not zero before casting.
-
- There are also the following function for building matrices:
- identity2D(), translation2D(), rotation2D(),
- scaling2D(), identity3D(), translation3D(),
- rotation3D(), rotation3Drad(), scaling3D(),
- perspective3D()
-
- NOTE: When compiling for Windows, include this file first, to avoid
- certain name conflicts
-
- ---------------------------------------------------------------------
-
- Author: Jean-Francois DOUEg
- Revised: Paul Rademacher
- Version 3.2 - Feb 1998
- Revised: Nigel Stewart (GLUI Code Cleaning)
-
-**************************************************************************/
-
-#ifndef GLUI_ALGEBRA3_H
-#define GLUI_ALGEBRA3_H
-
-#include <cmath>
-#include <cstdio>
-#include <cstdlib>
-
-#ifndef MAX
-#define MAX(a,b) ((a)>(b) ? (a) : (b))
-#define MIN(a,b) ((a)<(b) ? (a) : (b))
-#endif
-
-#define FUDGE .00001
-
-// this line defines a new type: pointer to a function which returns a
-// float and takes as argument a float
-typedef float (*V_FCT_PTR)(float);
-
-class vec2;
-class vec3;
-class vec4;
-class mat3;
-class mat4;
-
-enum axes {VX, VY, VZ, VW};
-/*
-enum planes {PA, PB, PC, PD};
-enum colors {RED, GREEN, BLUE, ALPHA};
-enum phong {KA, KD, KS, ES};
-*/
-
-/****************************************************************
- * *
- * 2D Vector *
- * *
- ****************************************************************/
-
-class vec2
-{
- friend class vec3;
-
-protected:
-
- float n[2];
-
-public:
-
- // Constructors
-
- vec2();
- vec2(float x, float y);
- vec2(const vec2 &v); // copy constructor
- vec2(const vec3 &v); // cast v3 to v2
- vec2(const vec3 &v, int dropAxis); // cast v3 to v2
-
- // Assignment operators
-
- vec2 &operator = (const vec2 &v); // assignment of a vec2
- vec2 &operator += (const vec2 &v); // incrementation by a vec2
- vec2 &operator -= (const vec2 &v); // decrementation by a vec2
- vec2 &operator *= (float d); // multiplication by a constant
- vec2 &operator /= (float d); // division by a constant
-
- // special functions
-
- float length() const; // length of a vec2
- float length2() const; // squared length of a vec2
- vec2 &normalize(); // normalize a vec2
- vec2 &apply(V_FCT_PTR fct); // apply a func. to each component
- void set(float x, float y); // set vector
-
- float &operator [] (int i); // indexing
- const float &operator [] (int i) const; // indexing
-
- // friends
-
- friend vec2 operator - (const vec2 &v); // -v1
- friend vec2 operator + (const vec2 &a, const vec2 &b); // v1 + v2
- friend vec2 operator - (const vec2 &a, const vec2 &b); // v1 - v2
- friend vec2 operator * (const vec2 &a, float d); // v1 * 3.0
- friend vec2 operator * (float d, const vec2 &a); // 3.0 * v1
- friend vec2 operator * (const mat3 &a, const vec2 &v); // M . v
- friend vec2 operator * (const vec2 &v, const mat3 &a); // v . M
- friend float operator * (const vec2 &a, const vec2 &b); // dot product
- friend vec2 operator / (const vec2 &a, float d); // v1 / 3.0
- friend vec3 operator ^ (const vec2 &a, const vec2 &b); // cross product
- friend int operator == (const vec2 &a, const vec2 &b); // v1 == v2 ?
- friend int operator != (const vec2 &a, const vec2 &b); // v1 != v2 ?
- //friend ostream& operator << (ostream& s, vec2& v); // output to stream
- //friend istream& operator >> (istream& s, vec2& v); // input from strm.
- friend void swap(vec2 &a, vec2 &b); // swap v1 & v2
- friend vec2 min_vec(const vec2 &a, const vec2 &b); // min(v1, v2)
- friend vec2 max_vec(const vec2 &a, const vec2 &b); // max(v1, v2)
- friend vec2 prod (const vec2 &a, const vec2 &b); // term by term *
-};
-
-/****************************************************************
- * *
- * 3D Vector *
- * *
- ****************************************************************/
-
-class vec3
-{
- friend class vec2;
- friend class vec4;
- friend class mat3;
-
-protected:
-
- float n[3];
-
-public:
-
- // Constructors
-
- vec3();
- vec3(float x, float y, float z);
- vec3(const vec3 &v); // copy constructor
- vec3(const vec2 &v); // cast v2 to v3
- vec3(const vec2 &v, float d); // cast v2 to v3
- vec3(const vec4 &v); // cast v4 to v3
- vec3(const vec4 &v, int dropAxis); // cast v4 to v3
-
- // Assignment operators
-
- vec3 &operator = (const vec3 &v); // assignment of a vec3
- vec3 &operator += (const vec3 &v); // incrementation by a vec3
- vec3 &operator -= (const vec3 &v); // decrementation by a vec3
- vec3 &operator *= (float d); // multiplication by a constant
- vec3 &operator /= (float d); // division by a constant
-
- // special functions
-
- float length() const; // length of a vec3
- float length2() const; // squared length of a vec3
- vec3& normalize(); // normalize a vec3
- vec3& homogenize(); // homogenize (div by Z)
- vec3& apply(V_FCT_PTR fct); // apply a func. to each component
- void set(float x, float y, float z); // set vector
-
- void print(FILE *file, const char *name) const; // print vector to a file
-
-
- float &operator [] (int i); // indexing
- const float &operator [] (int i) const; // indexing
-
- // friends
-
- friend vec3 operator - (const vec3 &v); // -v1
- friend vec3 operator + (const vec3 &a, const vec3 &b); // v1 + v2
- friend vec3 operator - (const vec3 &a, const vec3 &b); // v1 - v2
- friend vec3 operator * (const vec3 &a, float d); // v1 * 3.0
- friend vec3 operator * (float d, const vec3 &a); // 3.0 * v1
- friend vec3 operator * (const mat4 &a, const vec3 &v); // M . v
- friend vec3 operator * (const vec3 &v, const mat4 &a); // v . M
- friend float operator * (const vec3 &a, const vec3 &b); // dot product
- friend vec3 operator / (const vec3 &a, float d); // v1 / 3.0
- friend vec3 operator ^ (const vec3 &a, const vec3 &b); // cross product
- friend int operator == (const vec3 &a, const vec3 &b); // v1 == v2 ?
- friend int operator != (const vec3 &a, const vec3 &b); // v1 != v2 ?
- //friend ostream& operator << (ostream& s, vec3& v); // output to stream
- //friend istream& operator >> (istream& s, vec3& v); // input from strm.
- friend void swap(vec3 &a, vec3 &b); // swap v1 & v2
- friend vec3 min_vec(const vec3 &a, const vec3 &b); // min(v1, v2)
- friend vec3 max_vec(const vec3 &a, const vec3 &b); // max(v1, v2)
- friend vec3 prod(const vec3 &a, const vec3 &b); // term by term *
-
- // necessary friend declarations
-
- friend vec2 operator * (const mat3 &a, const vec2 &v); // linear transform
- friend vec3 operator * (const mat3 &a, const vec3 &v); // linear transform
- friend mat3 operator * (const mat3 &a, const mat3 &b); // matrix 3 product
-};
-
-/****************************************************************
- * *
- * 4D Vector *
- * *
- ****************************************************************/
-
-class vec4
-{
- friend class vec3;
- friend class mat4;
-
-protected:
-
- float n[4];
-
-public:
-
- // Constructors
-
- vec4();
- vec4(float x, float y, float z, float w);
- vec4(const vec4 &v); // copy constructor
- vec4(const vec3 &v); // cast vec3 to vec4
- vec4(const vec3 &v, float d); // cast vec3 to vec4
-
- // Assignment operators
-
- vec4 &operator = (const vec4 &v); // assignment of a vec4
- vec4 &operator += (const vec4 &v); // incrementation by a vec4
- vec4 &operator -= (const vec4 &v); // decrementation by a vec4
- vec4 &operator *= (float d); // multiplication by a constant
- vec4 &operator /= (float d); // division by a constant
-
- // special functions
-
- float length() const; // length of a vec4
- float length2() const; // squared length of a vec4
- vec4 &normalize(); // normalize a vec4
- vec4 &apply(V_FCT_PTR fct); // apply a func. to each component
- vec4 &homogenize();
-
- void print(FILE *file, const char *name) const; // print vector to a file
-
- void set(float x, float y, float z, float a);
-
- float &operator [] (int i); // indexing
- const float &operator [] (int i) const; // indexing
-
- // friends
-
- friend vec4 operator - (const vec4 &v); // -v1
- friend vec4 operator + (const vec4 &a, const vec4 &b); // v1 + v2
- friend vec4 operator - (const vec4 &a, const vec4 &b); // v1 - v2
- friend vec4 operator * (const vec4 &a, float d); // v1 * 3.0
- friend vec4 operator * (float d, const vec4 &a); // 3.0 * v1
- friend vec4 operator * (const mat4 &a, const vec4 &v); // M . v
- friend vec4 operator * (const vec4 &v, const mat4 &a); // v . M
- friend float operator * (const vec4 &a, const vec4 &b); // dot product
- friend vec4 operator / (const vec4 &a, float d); // v1 / 3.0
- friend int operator == (const vec4 &a, const vec4 &b); // v1 == v2 ?
- friend int operator != (const vec4 &a, const vec4 &b); // v1 != v2 ?
- //friend ostream& operator << (ostream& s, vec4& v); // output to stream
- //friend istream& operator >> (istream& s, vec4& v); // input from strm.
- friend void swap(vec4 &a, vec4 &b); // swap v1 & v2
- friend vec4 min_vec(const vec4 &a, const vec4 &b); // min(v1, v2)
- friend vec4 max_vec(const vec4 &a, const vec4 &b); // max(v1, v2)
- friend vec4 prod (const vec4 &a, const vec4 &b); // term by term *
-
- // necessary friend declarations
-
- friend vec3 operator * (const mat4 &a, const vec3 &v); // linear transform
- friend mat4 operator * (const mat4 &a, const mat4 &b); // matrix 4 product
-};
-
-/****************************************************************
- * *
- * 3x3 Matrix *
- * *
- ****************************************************************/
-
-class mat3
-{
-protected:
-
- vec3 v[3];
-
-public:
-
- // Constructors
-
- mat3();
- mat3(const vec3 &v0, const vec3 &v1, const vec3 &v2);
- mat3(const mat3 &m);
-
- // Assignment operators
-
- mat3 &operator = (const mat3 &m); // assignment of a mat3
- mat3 &operator += (const mat3 &m); // incrementation by a mat3
- mat3 &operator -= (const mat3 &m); // decrementation by a mat3
- mat3 &operator *= (float d); // multiplication by a constant
- mat3 &operator /= (float d); // division by a constant
-
- // special functions
-
- mat3 transpose() const; // transpose
- mat3 inverse() const; // inverse
- mat3 &apply(V_FCT_PTR fct); // apply a func. to each element
-
- void print(FILE *file, const char *name ) const; // print matrix to a file
-
- void set(const vec3 &v0, const vec3 &v1, const vec3 &v2);
-
- vec3 &operator [] (int i); // indexing
- const vec3 &operator [] (int i) const; // indexing
-
- // friends
-
- friend mat3 operator - (const mat3 &a); // -m1
- friend mat3 operator + (const mat3 &a, const mat3 &b); // m1 + m2
- friend mat3 operator - (const mat3 &a, const mat3 &b); // m1 - m2
- friend mat3 operator * (const mat3 &a, const mat3 &b); // m1 * m2
- friend mat3 operator * (const mat3 &a, float d); // m1 * 3.0
- friend mat3 operator * (float d, const mat3 &a); // 3.0 * m1
- friend mat3 operator / (const mat3 &a, float d); // m1 / 3.0
- friend int operator == (const mat3 &a, const mat3 &b); // m1 == m2 ?
- friend int operator != (const mat3 &a, const mat3 &b); // m1 != m2 ?
- //friend ostream& operator << (ostream& s, mat3& m); // output to stream
- //friend istream& operator >> (istream& s, mat3& m); // input from strm.
- friend void swap(mat3 &a, mat3 &b); // swap m1 & m2
-
- // necessary friend declarations
-
- friend vec3 operator * (const mat3 &a, const vec3 &v); // linear transform
- friend vec2 operator * (const mat3 &a, const vec2 &v); // linear transform
-};
-
-/****************************************************************
- * *
- * 4x4 Matrix *
- * *
- ****************************************************************/
-
-class mat4
-{
-protected:
-
- vec4 v[4];
-
-public:
-
- // Constructors
-
- mat4();
- mat4(const vec4 &v0, const vec4 &v1, const vec4 &v2, const vec4 &v3);
- mat4(const mat4 &m);
- mat4(float a00, float a01, float a02, float a03,
- float a10, float a11, float a12, float a13,
- float a20, float a21, float a22, float a23,
- float a30, float a31, float a32, float a33 );
-
-
- // Assignment operators
-
- mat4 &operator = (const mat4 &m); // assignment of a mat4
- mat4 &operator += (const mat4 &m); // incrementation by a mat4
- mat4 &operator -= (const mat4 &m); // decrementation by a mat4
- mat4 &operator *= (float d); // multiplication by a constant
- mat4 &operator /= (float d); // division by a constant
-
- // special functions
-
- mat4 transpose() const; // transpose
- mat4 inverse() const; // inverse
- mat4 &apply(V_FCT_PTR fct); // apply a func. to each element
-
- void print(FILE *file, const char *name) const; // print matrix to a file
-
- vec4 &operator [] (int i); // indexing
- const vec4 &operator [] (int i) const; // indexing
-
- void swap_rows(int i, int j); // swap rows i and j
- void swap_cols(int i, int j); // swap cols i and j
-
- // friends
-
- friend mat4 operator - (const mat4 &a); // -m1
- friend mat4 operator + (const mat4 &a, const mat4 &b); // m1 + m2
- friend mat4 operator - (const mat4 &a, const mat4 &b); // m1 - m2
- friend mat4 operator * (const mat4 &a, const mat4 &b); // m1 * m2
- friend mat4 operator * (const mat4 &a, float d); // m1 * 4.0
- friend mat4 operator * (float d, const mat4 &a); // 4.0 * m1
- friend mat4 operator / (const mat4 &a, float d); // m1 / 3.0
- friend int operator == (const mat4 &a, const mat4 &b); // m1 == m2 ?
- friend int operator != (const mat4 &a, const mat4 &b); // m1 != m2 ?
- //friend ostream& operator << (ostream& s, mat4& m); // output to stream
- //friend istream& operator >> (istream& s, mat4& m); // input from strm.
- friend void swap(mat4 &a, mat4 &b); // swap m1 & m2
-
- // necessary friend declarations
-
- friend vec4 operator * (const mat4 &a, const vec4 &v); // linear transform
- //friend vec4 operator * (const vec4& v, const mat4& a); // linear transform
- friend vec3 operator * (const mat4 &a, const vec3 &v); // linear transform
- friend vec3 operator * (const vec3 &v, const mat4 &a); // linear transform
-};
-
-/****************************************************************
- * *
- * 2D functions and 3D functions *
- * *
- ****************************************************************/
-
-mat3 identity2D (); // identity 2D
-mat3 translation2D(const vec2 &v); // translation 2D
-mat3 rotation2D (const vec2 &Center, float angleDeg); // rotation 2D
-mat3 scaling2D (const vec2 &scaleVector); // scaling 2D
-mat4 identity3D (); // identity 3D
-mat4 translation3D(const vec3 &v); // translation 3D
-mat4 rotation3D (const vec3 &Axis, float angleDeg); // rotation 3D
-mat4 rotation3Drad(const vec3 &Axis, float angleRad); // rotation 3D
-mat4 scaling3D (const vec3 &scaleVector); // scaling 3D
-mat4 perspective3D(float d); // perspective 3D
-
-vec3 operator * (const vec3 &v, const mat3 &a);
-vec2 operator * (const vec2 &v, const mat3 &a);
-vec3 operator * (const vec3 &v, const mat4 &a);
-vec4 operator * (const vec4 &v, const mat4 &a);
-
-#endif
diff --git a/graphics/asymptote/arcball.cc b/graphics/asymptote/arcball.cc
deleted file mode 100644
index 358195597a..0000000000
--- a/graphics/asymptote/arcball.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-/**********************************************************************
-
- arcball.cc
-
-
- --------------------------------------------------
-
- GLUI User Interface Toolkit (LGPL)
- Copyright (c) 1998 Paul Rademacher
- Feb 1998, Paul Rademacher (rademach@cs.unc.edu)
- Oct 2003, Nigel Stewart - GLUI Code Cleaning
-
- WWW: http://sourceforge.net/projects/glui/
- Forums: http://sourceforge.net/forum/?group_id=92496
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-**********************************************************************/
-
-#include "arcball.h"
-
-#include <cstdio>
-
-
-/**************************************** Arcball::Arcball() ****/
-/* Default (void) constructor for Arcball */
-
-Arcball::Arcball()
-{
- rot_ptr = &rot;
- init();
-}
-
-/**************************************** Arcball::Arcball() ****/
-/* Takes as argument a mat4 to use instead of the internal rot */
-
-Arcball::Arcball(mat4 *mtx)
-{
- rot_ptr = mtx;
-}
-
-
-/**************************************** Arcball::Arcball() ****/
-/* A constructor that accepts the screen center and arcball radius*/
-
-Arcball::Arcball(const vec2 &_center, float _radius)
-{
- rot_ptr = &rot;
- init();
- set_params(_center, _radius);
-}
-
-
-/************************************** Arcball::set_params() ****/
-
-void Arcball::set_params(const vec2 &_center, float _radius)
-{
- center = _center;
- radius = _radius;
-}
-
-/*************************************** Arcball::init() **********/
-
-void Arcball::init()
-{
- center.set( 0.0, 0.0 );
- radius = 1.0;
- q_now = quat_identity();
- *rot_ptr = identity3D();
- q_increment = quat_identity();
- rot_increment = identity3D();
- is_mouse_down = false;
- is_spinning = false;
- damp_factor = 0.0;
- zero_increment = true;
-}
-
-/*********************************** Arcball::mouse_to_sphere() ****/
-
-vec3 Arcball::mouse_to_sphere(const vec2 &p)
-{
- float mag;
- vec2 v2 = (p - center) / radius;
- vec3 v3( v2[0], v2[1], 0.0 );
-
- mag = v2*v2;
-
- if ( mag > 1.0 )
- v3.normalize();
- else
- v3[VZ] = (float) sqrt( 1.0 - mag );
-
- /* Now we add constraints - X takes precedence over Y */
- if ( constraint_x )
- {
- v3 = constrain_vector( v3, vec3( 1.0, 0.0, 0.0 ));
- }
- else if ( constraint_y )
- {
- v3 = constrain_vector( v3, vec3( 0.0, 1.0, 0.0 ));
- }
-
- return v3;
-}
-
-
-/************************************ Arcball::constrain_vector() ****/
-
-vec3 Arcball::constrain_vector(const vec3 &vector, const vec3 &axis)
-{
- return (vector-(vector*axis)*axis).normalize();
-}
-
-/************************************ Arcball::mouse_down() **********/
-
-void Arcball::mouse_down(int x, int y)
-{
- down_pt.set( (float)x, (float) y );
- is_mouse_down = true;
-
- q_increment = quat_identity();
- rot_increment = identity3D();
- zero_increment = true;
-}
-
-
-/************************************ Arcball::mouse_up() **********/
-
-void Arcball::mouse_up()
-{
- q_now = q_drag * q_now;
- is_mouse_down = false;
-}
-
-
-/********************************** Arcball::mouse_motion() **********/
-
-void Arcball::mouse_motion(int x, int y, int shift, int ctrl, int alt)
-{
- /* Set the X constraint if CONTROL key is pressed, Y if ALT key */
- set_constraints( ctrl != 0, alt != 0 );
-
- vec2 new_pt( (float)x, (float) y );
- vec3 v0 = mouse_to_sphere( down_pt );
- vec3 v1 = mouse_to_sphere( new_pt );
-
- vec3 cross = v0^v1;
-
- q_drag.set( cross, v0 * v1 );
-
- // *rot_ptr = (q_drag * q_now).to_mat4();
- mat4 temp = q_drag.to_mat4();
- *rot_ptr = *rot_ptr * temp;
-
- down_pt = new_pt;
-
- /* We keep a copy of the current incremental rotation (= q_drag) */
- q_increment = q_drag;
- rot_increment = q_increment.to_mat4();
-
- set_constraints(false, false);
-
- if ( q_increment.s < .999999 )
- {
- is_spinning = true;
- zero_increment = false;
- }
- else
- {
- is_spinning = false;
- zero_increment = true;
- }
-}
-
-
-/********************************** Arcball::mouse_motion() **********/
-
-void Arcball::mouse_motion(int x, int y)
-{
- mouse_motion(x, y, 0, 0, 0);
-}
-
-
-/***************************** Arcball::set_constraints() **********/
-
-void Arcball::set_constraints(bool _constraint_x, bool _constraint_y)
-{
- constraint_x = _constraint_x;
- constraint_y = _constraint_y;
-}
-
-/***************************** Arcball::idle() *********************/
-
-void Arcball::idle()
-{
- if (is_mouse_down)
- {
- is_spinning = false;
- zero_increment = true;
- }
-
- if (damp_factor < 1.0f)
- q_increment.scale_angle(1.0f - damp_factor);
-
- rot_increment = q_increment.to_mat4();
-
- if (q_increment.s >= .999999f)
- {
- is_spinning = false;
- zero_increment = true;
- }
-}
-
-
-/************************ Arcball::set_damping() *********************/
-
-void Arcball::set_damping(float d)
-{
- damp_factor = d;
-}
-
-
-
-
-
diff --git a/graphics/asymptote/arcball.h b/graphics/asymptote/arcball.h
deleted file mode 100644
index 58bc3a8c6a..0000000000
--- a/graphics/asymptote/arcball.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/**********************************************************************
-
- arcball.h
-
- GLUI User Interface Toolkit (LGPL)
- Copyright (c) 1998 Paul Rademacher
- Feb 1998, Paul Rademacher (rademach@cs.unc.edu)
- Oct 2003, Nigel Stewart - GLUI Code Cleaning
-
-
- WWW: http://sourceforge.net/projects/glui/
- Forums: http://sourceforge.net/forum/?group_id=92496
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- ---------------------------------------------------------------------
-
- A C++ class that implements the Arcball, as described by Ken
- Shoemake in Graphics Gems IV.
- This class takes as input mouse events (mouse down, mouse drag,
- mouse up), and creates the appropriate quaternions and 4x4 matrices
- to represent the rotation given by the mouse.
-
- This class is used as follows:
- - initialize [either in the constructor or with set_params()], the
- center position (x,y) of the arcball on the screen, and the radius
- - on mouse down, call mouse_down(x,y) with the mouse position
- - as the mouse is dragged, repeatedly call mouse_motion() with the
- current x and y positions. One can optionally pass in the current
- state of the SHIFT, ALT, and CONTROL keys (passing zero if keys
- are not pressed, non-zero otherwise), which constrains
- the rotation to certain axes (X for CONTROL, Y for ALT).
- - when the mouse button is released, call mouse_up()
-
- Axis constraints can also be explicitly set with the
- set_constraints() function.
-
- The current rotation is stored in the 4x4 float matrix 'rot'.
- It is also stored in the quaternion 'q_now'.
-
-**********************************************************************/
-
-#ifndef GLUI_ARCBALL_H
-#define GLUI_ARCBALL_H
-
-#include "algebra3.h"
-#include "quaternion.h"
-
-class Arcball
-{
-public:
- Arcball();
- Arcball(mat4 *mtx);
- Arcball(const vec2 &center, float radius);
-
- void set_damping(float d);
- void idle();
- void mouse_down(int x, int y);
- void mouse_up();
- void mouse_motion(int x, int y, int shift, int ctrl, int alt);
- void mouse_motion(int x, int y);
- void set_constraints(bool constrain_x, bool constrain_y);
- void set_params(const vec2 &center, float radius);
- void init();
-
- vec3 constrain_vector(const vec3 &vector, const vec3 &axis);
- vec3 mouse_to_sphere(const vec2 &p);
-
- //public:
- int is_mouse_down; /* true for down, false for up */
- int is_spinning;
- quat q_now, q_down, q_drag, q_increment;
- vec2 down_pt;
- mat4 rot, rot_increment;
- mat4 *rot_ptr;
-
- bool constraint_x, constraint_y;
- vec2 center;
- float radius, damp_factor;
- int zero_increment;
-};
-
-#endif
diff --git a/graphics/asymptote/asy-keywords.el b/graphics/asymptote/asy-keywords.el
index 5cf87e595b..c54382a2b5 100644
--- a/graphics/asymptote/asy-keywords.el
+++ b/graphics/asymptote/asy-keywords.el
@@ -2,7 +2,7 @@
;; This file is automatically generated by asy-list.pl.
;; Changes will be overwritten.
;;
-(defvar asy-keywords-version "2.53")
+(defvar asy-keywords-version "2.54")
(defvar asy-keyword-name '(
and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
diff --git a/graphics/asymptote/asy.list b/graphics/asymptote/asy.list
index 566f365a90..1394da858e 100644
--- a/graphics/asymptote/asy.list
+++ b/graphics/asymptote/asy.list
@@ -294,8 +294,8 @@ string getc(file f);
bool debugging;
void shipout(string prefix=<default>, frame f, string format=<default>, bool wait=<default>, bool view=<default>, string options=<default>, string script=<default>, light light=<default>, projection P=<default>, transform t=<default>);
void shipout(string prefix=<default>, picture pic=<default>, frame orientation(frame)=<default>, string format=<default>, bool wait=<default>, bool view=<default>, string options=<default>, string script=<default>, light light=<default>, projection P=<default>);
-void shipout3(string prefix, frame f, string format=<default>, real width, real height, real angle, real zoom, triple m, triple m, pair shift, real[][] t, real[] background, triple[] lights, real[][] diffuse, real[][] specular, bool view=<default>);
-void shipout3(string prefix, frame f);
+void shipout3(string prefix, frame f, string format=<default>, real width, real height, real angle, real zoom, triple m, triple m, pair shift, pair margin, real[][] t, real[] background, triple[] lights, real[][] diffuse, real[][] specular, bool view=<default>);
+void shipout3(string prefix, frame f, string format=<default>);
string getstring(string name=<default>, string default=<default>, string prompt=<default>, bool store=<default>);
int debuggerlines;
frame bbox(picture pic=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>);
@@ -403,8 +403,8 @@ real[] fabs(real[] a);
bool labels(frame f);
light light(pen diffuse=<default>, pen specular=<default>, pen background=<default>, real x, real y, real z);
light light(pen diffuse=<default>, pen specular=<default>, pen background=<default>, real specularfactor=<default> ... triple[] position);
-light light(explicit light light);
light light(pen[] diffuse, pen[] specular=<default>, pen background=<default>, real specularfactor=<default>, triple[] position);
+light light(explicit light light);
real remainder(real x, real y);
int byte(real x);
real camerafactor;
@@ -705,13 +705,13 @@ void add(picture dest=<default>, frame src, pair position, pair align, bool grou
void add(frame dest, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture pic=<default>, void d(frame f, transform t), bool exact=<default>);
+void add(picture pic=<default>, void d(frame f, real[][] t, picture pic, projection P), bool exact=<default>);
void add(picture pic=<default>, void d(picture, real[][]), bool exact=<default>);
void add(picture dest, picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture dest, picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture dest=<default>, object F, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(frame dest, frame src, filltype filltype, bool above=<default>);
void add(frame dest, frame src, bool group, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, void d(frame f, real[][] t, picture pic, projection P), bool exact=<default>);
void add(frame dest, frame src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture pic=<default>, Label L);
@@ -974,28 +974,28 @@ bool alias(pair[][] a, pair[][] b);
bool alias(guide[] a, guide[] b);
bool alias(marginT a, marginT b);
bool alias(coord[] a, coord[] b);
-bool alias(autoscaleT a, autoscaleT b);
+bool alias(light a, light b);
bool alias(align a, align b);
bool alias(Legend[] a, Legend[] b);
bool alias(processtime a, processtime b);
bool alias(pair[] a, pair[] b);
bool alias(scaling a, scaling b);
bool alias(coord a, coord b);
-bool alias(transformation a, transformation b);
+bool alias(scaleT a, scaleT b);
bool alias(node a, node b);
bool alias(Label a, Label b);
bool alias(int[] a, int[] b);
bool alias(string[][] a, string[][] b);
bool alias(slice a, slice b);
bool alias(freezableBounds a, freezableBounds b);
-bool alias(projection a, projection b);
-bool alias(coords3 a, coords3 b);
+bool alias(transformation a, transformation b);
+bool alias(autoscaleT a, autoscaleT b);
bool alias(object[] a, object[] b);
bool alias(marker a, marker b);
bool alias(real[][] a, real[][] b);
bool alias(bool3 a, bool3 b);
bool alias(bool3[] a, bool3[] b);
-bool alias(light a, light b);
+bool alias(coords3 a, coords3 b);
bool alias(ScaleT a, ScaleT b);
bool alias(side a, side b);
bool alias(cputime a, cputime b);
@@ -1012,7 +1012,7 @@ bool alias(pen[][] a, pen[][] b);
bool alias(filltype a, filltype b);
bool alias(simplex a, simplex b);
bool alias(coord[] a, coord[] b);
-bool alias(scaleT a, scaleT b);
+bool alias(projection a, projection b);
bool alias(Label[] a, Label[] b);
bool alias(arrowhead a, arrowhead b);
bool alias(path[] a, path[] b);
@@ -1390,16 +1390,16 @@ pen operator init();
frame operator init();
file operator init();
marginT operator init();
-autoscaleT operator init();
+light operator init();
align operator init();
processtime operator init();
filltype operator init();
simplex operator init();
-scaleT operator init();
+projection operator init();
arrowhead operator init();
slice operator init();
-projection operator init();
-coords3 operator init();
+transformation operator init();
+autoscaleT operator init();
marker operator init();
hsv operator init();
coords2 operator init();
@@ -1410,7 +1410,7 @@ pairOrTriple operator init();
object operator init();
scaling operator init();
coord operator init();
-transformation operator init();
+scaleT operator init();
node operator init();
Label operator init();
coord operator init();
@@ -1418,7 +1418,7 @@ bounds operator init();
Legend operator init();
position operator init();
bool3 operator init();
-light operator init();
+coords3 operator init();
ScaleT operator init();
side operator init();
cputime operator init();
@@ -1594,7 +1594,7 @@ bool operator ==(file a, file b);
bool operator ==(path a, path b);
bool operator ==(path3 a, path3 b);
bool operator ==(bool3 a, bool3 b);
-bool operator ==(light a, light b);
+bool operator ==(coords3 a, coords3 b);
bool operator ==(ScaleT a, ScaleT b);
bool operator ==(side a, side b);
bool operator ==(cputime a, cputime b);
@@ -1604,7 +1604,7 @@ bool operator ==(pairOrTriple a, pairOrTriple b);
bool operator ==(object a, object b);
bool operator ==(filltype a, filltype b);
bool operator ==(simplex a, simplex b);
-bool operator ==(scaleT a, scaleT b);
+bool operator ==(projection a, projection b);
bool operator ==(arrowhead a, arrowhead b);
bool operator ==(coord a, coord b);
bool operator ==(bounds a, bounds b);
@@ -1615,19 +1615,19 @@ bool operator ==(coords2 a, coords2 b);
bool operator ==(picture a, picture b);
bool operator ==(bool3 a, bool b);
bool operator ==(marginT a, marginT b);
-bool operator ==(autoscaleT a, autoscaleT b);
+bool operator ==(light a, light b);
bool operator ==(align a, align b);
bool operator ==(processtime a, processtime b);
bool operator ==(scaling a, scaling b);
bool operator ==(coord a, coord b);
-bool operator ==(transformation a, transformation b);
+bool operator ==(scaleT a, scaleT b);
bool operator ==(node a, node b);
bool operator ==(Label a, Label b);
bool operator ==(bool a, bool3 b);
bool operator ==(slice a, slice b);
bool operator ==(freezableBounds a, freezableBounds b);
-bool operator ==(projection a, projection b);
-bool operator ==(coords3 a, coords3 b);
+bool operator ==(transformation a, transformation b);
+bool operator ==(autoscaleT a, autoscaleT b);
bool operator ==(marker a, marker b);
bool operator !=(bool a, bool b);
bool[] operator !=(bool a, bool[] b);
@@ -1666,7 +1666,7 @@ bool operator !=(file a, file b);
bool operator !=(path a, path b);
bool operator !=(path3 a, path3 b);
bool operator !=(bool3 a, bool3 b);
-bool operator !=(light a, light b);
+bool operator !=(coords3 a, coords3 b);
bool operator !=(ScaleT a, ScaleT b);
bool operator !=(side a, side b);
bool operator !=(cputime a, cputime b);
@@ -1676,7 +1676,7 @@ bool operator !=(pairOrTriple a, pairOrTriple b);
bool operator !=(object a, object b);
bool operator !=(filltype a, filltype b);
bool operator !=(simplex a, simplex b);
-bool operator !=(scaleT a, scaleT b);
+bool operator !=(projection a, projection b);
bool operator !=(arrowhead a, arrowhead b);
bool operator !=(coord a, coord b);
bool operator !=(bounds a, bounds b);
@@ -1687,19 +1687,19 @@ bool operator !=(coords2 a, coords2 b);
bool operator !=(picture a, picture b);
bool operator !=(bool3 a, bool b);
bool operator !=(marginT a, marginT b);
-bool operator !=(autoscaleT a, autoscaleT b);
+bool operator !=(light a, light b);
bool operator !=(align a, align b);
bool operator !=(processtime a, processtime b);
bool operator !=(scaling a, scaling b);
bool operator !=(coord a, coord b);
-bool operator !=(transformation a, transformation b);
+bool operator !=(scaleT a, scaleT b);
bool operator !=(node a, node b);
bool operator !=(Label a, Label b);
bool operator !=(bool a, bool3 b);
bool operator !=(slice a, slice b);
bool operator !=(freezableBounds a, freezableBounds b);
-bool operator !=(projection a, projection b);
-bool operator !=(coords3 a, coords3 b);
+bool operator !=(transformation a, transformation b);
+bool operator !=(autoscaleT a, autoscaleT b);
bool operator !=(marker a, marker b);
bool operator <(int a, int b);
bool[] operator <(int a, int[] b);
@@ -2550,8 +2550,8 @@ line complementary(explicit line l);
line[] complementary(explicit segment s);
arc complementary(arc a);
point ppoint(arc a, real x);
-path fromFocus(conic co, real angle1, real angle2, int n, bool direction);
bool between(point M, point O, point N);
+path fromFocus(conic co, real angle1, real angle2, int n, bool direction);
bool sameside(point M, point N, point O);
bool sameside(point M, point P, line l);
point[] sameside(point M, line l1, line l2);
@@ -2788,11 +2788,11 @@ real degrees(vector v, coordsys R=<default>, bool warn=<default>);
real degrees(line l, coordsys R=<default>);
real degrees(line l1, line l2);
real degrees(arc a);
-real linemargin;
-real linemargin();
segment segment(point A, point B);
segment segment(line l);
segment segment(explicit side side);
+real linemargin;
+real linemargin();
line Oy(coordsys R=<default>);
line Oy;
path fromCenter(conic co, real angle1, real angle2, int n, bool direction);
@@ -2873,10 +2873,10 @@ triangle tangential(triangle t);
triangle pedal(triangle t, point M);
line pedal(side side, point M);
string massformat(string format=<default>, string s, mass M);
-int relativesystem;
triangle cevian(triangle t, point P);
point cevian(side side, point P);
line cevian(vertex V, point P);
+int relativesystem;
void drawline(picture pic=<default>, triangle t, pen p=<default>);
void addMargins(picture pic=<default>, real lmargin=<default>, real bmargin=<default>, real rmargin=<default>, real tmargin=<default>, bool rigid=<default>, bool allObject=<default>);
triangle medial(triangle t);
@@ -3001,8 +3001,8 @@ pair Scale(picture pic=<default>, pair z);
real ScaleX(picture pic=<default>, real x);
real ScaleY(picture pic=<default>, real y);
void xaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
-tickvalues generateticks(int sign, Label F=<default>, string ticklabel(real)=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, real Size=<default>, real size=<default>, transform T, pair side, path g, real limit, pen p, ticklocate locate, int[] divisor, bool opposite);
void yaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
+tickvalues generateticks(int sign, Label F=<default>, string ticklabel(real)=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, real Size=<default>, real size=<default>, transform T, pair side, path g, real limit, pen p, ticklocate locate, int[] divisor, bool opposite);
void xaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
void yaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool autorotate=<default>);
void checkconditionlength(int x, int y);
@@ -3542,15 +3542,15 @@ pen titlepen;
real titleskip;
pair dateskip;
pair titlealign;
-pen titlepagepen;
pen authorpen;
+pen titlepagepen;
void titlepage(string title, string author, string institution=<default>, string date=<default>, string url=<default>, bool newslide=<default>);
pair titlepageposition;
pen codepen;
void erasestep(int erasenode);
bool checkposition();
-void setpens(pen red=<default>, pen blue=<default>, pen steppen=<default>);
string cropcode(string s);
+void setpens(pen red=<default>, pen blue=<default>, pen steppen=<default>);
void code(bool center=<default>, string s, pen p=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>);
transform tinv;
pair urlskip;
@@ -3727,8 +3727,8 @@ pen ForestGreen;
pen BurntOrange;
pen Tan;
pen Aquamarine;
-pen Brown;
pen Lavender;
+pen Brown;
pen RubineRed;
pen TealBlue;
pen White;
@@ -3848,8 +3848,8 @@ pen IndianRed;
pen Aqua;
pen Crimson;
pen Azure;
-pen LawnGreen;
pen Lavender;
+pen LawnGreen;
pen Brown;
pen BurlyWood;
pen Moccasin;
diff --git a/graphics/asymptote/asymptote.spec b/graphics/asymptote/asymptote.spec
index 87cabb3ff6..7df46acdb2 100644
--- a/graphics/asymptote/asymptote.spec
+++ b/graphics/asymptote/asymptote.spec
@@ -3,7 +3,7 @@
%global __python %{__python3}
Name: asymptote
-Version: 2.53
+Version: 2.54
Release: 1%{?dist}
Summary: Descriptive vector graphics language
diff --git a/graphics/asymptote/base/plain_prethree.asy b/graphics/asymptote/base/plain_prethree.asy
index bc40792cf0..968ae2943a 100644
--- a/graphics/asymptote/base/plain_prethree.asy
+++ b/graphics/asymptote/base/plain_prethree.asy
@@ -1,6 +1,6 @@
// Critical definitions for transform3 needed by projection and picture.
-pair viewportmargin=(0.1,0.1); // Horizontal and vertical 3D viewport margins.
+pair viewportmargin=settings.viewportmargin;
typedef real[][] transform3;
restricted transform3 identity4=identity(4);
diff --git a/graphics/asymptote/base/shaders/fragment.glsl b/graphics/asymptote/base/shaders/fragment.glsl
index 38a6a53fbb..b914f7f35a 100644
--- a/graphics/asymptote/base/shaders/fragment.glsl
+++ b/graphics/asymptote/base/shaders/fragment.glsl
@@ -1,237 +1,227 @@
-struct Material
-{
- vec4 diffuse,emissive,specular;
- vec4 parameters;
-};
-
-struct Light
-{
- vec4 direction;
- vec4 diffuse,specular;
-};
-
-uniform int nlights;
-uniform Light lights[Nlights];
-
-uniform MaterialBuffer {
- Material Materials[Nmaterials];
-};
-
-
-#ifdef NORMAL
-in vec3 Normal;
-vec3 normal;
-#endif
-
-#ifdef EXPLICIT_COLOR
-in vec4 Color;
-#endif
-
-flat in int materialIndex;
-out vec4 outColor;
-
-// PBR material parameters
-vec3 PBRBaseColor; // Diffuse for nonmetals, reflectance for metals.
-vec3 PBRSpecular; // Specular tint for nonmetals
-float PBRMetallic; // Metallic/Nonmetals switch flag
-float PBRF0; // Fresnel at zero for nonmetals
-float PBRRoughness; // Roughness.
-float PBRRoughnessSq; // used value of roughness, for a little bit more "smoothing"
-
-uniform sampler2D environmentMap;
-const float PI = acos(-1.0);
-#ifdef ENABLE_TEXTURE
-const float twopi=2*PI;
-const float halfpi=PI/2;
-
-const int numSamples=7;
-
-// (x,y,z) -> (r, theta, phi);
-// theta -> [0,\pi], "height" angle
-// phi -> [0, 2\pi], rotation agnle
-vec3 cart2spher(vec3 cart) {
- float x = cart.z;
- float y = cart.x;
- float z = cart.y;
-
- float r = length(cart);
- float phi = atan(y,x);
- float theta = acos(z/r);
-
- return vec3(r,phi,theta);
-}
-
-vec2 normalizedAngle(vec3 cartVec) {
- vec3 sphericalVec = cart2spher(cartVec);
- sphericalVec.y = sphericalVec.y / (2 * PI) - 0.25;
- sphericalVec.z = sphericalVec.z / PI;
- // sphericalVec.z = - sphericalVec.z;
- return sphericalVec.yz;
-}
-#endif
-
-#ifdef NORMAL
-// h is the halfway vector between normal and light direction
-// GGX Trowbridge-Reitz Approximation
-float NDF_TRG(vec3 h, float roughness) {
- float ndoth = max(dot(normal, h), 0);
- float alpha2 = PBRRoughnessSq * PBRRoughnessSq;
-
- float denom = pow(ndoth * ndoth * (alpha2-1) + 1, 2);
- return alpha2/denom;
-}
-
-float GGX_Geom(vec3 v) {
- float ndotv = max(dot(v,normal), 0);
- float ap = pow((1+PBRRoughness),2);
- float k = ap/8;
-
- return ndotv/((ndotv * (1-k)) + k);
-}
-
-float Geom(vec3 v, vec3 l) {
- return GGX_Geom(v) * GGX_Geom(l);
-}
-
-// Schlick's approximation
-float Fresnel(vec3 h, vec3 v, float F0) {
- float hdotv = max(dot(h,v), 0.0);
-
- return F0 + (1-F0)*pow((1-hdotv),5);
-}
-
-vec3 BRDF(vec3 viewDirection, vec3 lightDirection) {
- // Lambertian diffuse
- vec3 lambertian = PBRBaseColor;
- // Cook-Torrance model
- vec3 h = normalize(lightDirection + viewDirection);
-
- float omegain = max(dot(viewDirection, normal),0);
- float omegaln = max(dot(lightDirection, normal),0);
-
- float D = NDF_TRG(h, PBRRoughness);
- float G = Geom(viewDirection, lightDirection);
- float F = Fresnel(h, viewDirection, PBRF0);
-
- float denom=4*omegain*omegaln;
- float rawReflectance=denom > 0 ? (D*G)/denom : 0;
-
- vec3 dielectric = mix(lambertian, rawReflectance * PBRSpecular, F);
- vec3 metal = rawReflectance * PBRBaseColor;
-
- return mix(dielectric, metal, PBRMetallic);
-}
-#endif
-
-void main()
-{
-vec4 Diffuse;
-vec4 Emissive;
-vec4 Specular;
-vec4 parameters;
-
-#ifdef EXPLICIT_COLOR
- if(materialIndex < 0) {
- int index=-materialIndex-1;
- Material m=Materials[index];
- Diffuse=Color;
- Emissive=vec4(0);
- Specular=m.specular;
- parameters=m.parameters;
- } else {
- Material m=Materials[materialIndex];
- Diffuse=m.diffuse;
- Emissive=m.emissive;
- Specular=m.specular;
- parameters=m.parameters;
- }
-#else
- Material m=Materials[materialIndex];
- Diffuse=m.diffuse;
- Emissive=m.emissive;
- Specular=m.specular;
- parameters=m.parameters;
-#endif
-
- PBRRoughness=1-parameters[0];
- PBRMetallic=parameters[1];
- PBRF0=parameters[2];
-
- PBRBaseColor = Diffuse.rgb;
- PBRRoughnessSq = PBRRoughness * PBRRoughness;
- PBRSpecular = Specular.rgb;
-
- // Formally, the formula given a point x and direction \omega,
- // L_i = \int_{\Omega} f(x, \omega_i, \omega) L(x,\omega_i) (\hat{n}\cdot \omega_i) d \omega_i
- // where \Omega is the hemisphere covering a point, f is the BRDF function
- // L is the radiance from a given angle and position.
-
- vec3 color=Emissive.rgb;
-#ifdef NORMAL
- vec3 Z=vec3(0,0,1);
- vec3 pointLightRadiance=vec3(0,0,0);
-
- normal=normalize(Normal);
- normal=gl_FrontFacing ? normal : -normal;
- // as a finite point light, we have some simplification to the rendering equation.
- if(nlights > 0) {
- for(int i=0; i < nlights; ++i) {
- vec3 L = normalize(lights[i].direction.xyz);
- // what if we use the acutal view from (0,0,0) instead?
- // vec3 viewDirection = Z;
- vec3 viewDirection = -normalize(Z);
- float cosTheta = max(dot(normal, L), 0); // $\omega_i \cdot n$ term
- float attn = 1; // if we have a good light position.
- vec3 radiance = cosTheta * attn * lights[i].diffuse.rgb;
- pointLightRadiance += BRDF(Z, L) * radiance;
- }
- color += pointLightRadiance.rgb;
-
-#ifdef ENABLE_TEXTURE
-#ifndef EXPLICIT_COLOR
- // Experimental environment radiance using Riemann sums;
- // can also do importance sampling.
- vec3 envRadiance=vec3(0,0,0);
-
- vec3 normalPerp = vec3(-normal.y, normal.x, 0);
- if (length(normalPerp) == 0) { // x, y = 0.
-
- normalPerp = vec3(1, 0, 0);
- }
- // we now have a normal basis;
- normalPerp = normalize(normalPerp);
- vec3 normalPerp2 = normalize(cross(normal, normalPerp));
-
- const float step=1.0/numSamples;
- const float phistep=twopi*step;
- const float thetastep=halfpi*step;
- for (int iphi=0; iphi < numSamples; ++iphi) {
- float phi=iphi*phistep;
- for (int itheta=0; itheta < numSamples; ++itheta) {
- float theta=itheta*thetastep;
-
- vec3 azimuth=cos(phi)*normalPerp+sin(phi)*normalPerp2;
- vec3 L=sin(theta)*azimuth+cos(theta)*normal;
-
- vec3 rawRadiance=texture(environmentMap,normalizedAngle(L)).rgb;
- vec3 surfRefl=BRDF(Z,L);
- envRadiance += surfRefl*rawRadiance*sin(2.0*theta);
- }
- }
- envRadiance *= halfpi*step*step;
-
- // vec3 lightVector = normalize(reflect(-Z, normal));
- // vec2 anglemap = normalizedAngle(lightVector);
- // vec3 color = texture(environmentMap, anglemap).rgb;
- color += envRadiance.rgb;
-#endif
-#endif
- outColor=vec4(color,Diffuse.a);
- } else {
- outColor=Diffuse;
- }
-#else
- outColor=Emissive;
-#endif
-}
-
+struct Material
+{
+ vec4 diffuse,emissive,specular;
+ vec4 parameters;
+};
+
+struct Light
+{
+ vec3 direction;
+ vec3 color;
+};
+
+uniform int nlights;
+uniform Light lights[Nlights];
+
+uniform MaterialBuffer {
+ Material Materials[Nmaterials];
+};
+
+#ifdef NORMAL
+#ifndef ORTHOGRAPHIC
+in vec3 ViewPosition;
+#endif
+in vec3 Normal;
+vec3 normal;
+#endif
+
+#ifdef COLOR
+in vec4 Color;
+#endif
+
+flat in int materialIndex;
+out vec4 outColor;
+
+// PBR material parameters
+vec3 Diffuse; // Diffuse for nonmetals, reflectance for metals.
+vec3 Specular; // Specular tint for nonmetals
+float Metallic; // Metallic/Nonmetals parameter
+float Fresnel0; // Fresnel at zero for nonmetals
+float Roughness2; // roughness squared, for smoothing
+
+#ifdef ENABLE_TEXTURE
+uniform sampler2D environmentMap;
+const float PI=acos(-1.0);
+const float twopi=2*PI;
+const float halfpi=PI/2;
+
+const int numSamples=7;
+
+// (x,y,z) -> (r,theta,phi);
+// theta -> [0,\pi]: colatitude
+// phi -> [0, 2\pi]: longitude
+vec3 cart2sphere(vec3 cart)
+{
+ float x=cart.z;
+ float y=cart.x;
+ float z=cart.y;
+
+ float r=length(cart);
+ float phi=atan(y,x);
+ float theta=acos(z/r);
+
+ return vec3(r,phi,theta);
+}
+
+vec2 normalizedAngle(vec3 cartVec)
+{
+ vec3 sphericalVec=cart2sphere(cartVec);
+ sphericalVec.y=sphericalVec.y/(2*PI)-0.25;
+ sphericalVec.z=sphericalVec.z/PI;
+ return sphericalVec.yz;
+}
+#endif
+
+#ifdef NORMAL
+// h is the halfway vector between normal and light direction
+// GGX Trowbridge-Reitz Approximation
+float NDF_TRG(vec3 h)
+{
+ float ndoth=max(dot(normal,h),0.0);
+ float alpha2=Roughness2*Roughness2;
+ float denom=ndoth*ndoth*(alpha2-1.0)+1.0;
+ return denom != 0.0 ? alpha2/(denom*denom) : 0.0;
+}
+
+float GGX_Geom(vec3 v)
+{
+ float ndotv=max(dot(v,normal),0.0);
+ float ap=1.0+Roughness2;
+ float k=0.125*ap*ap;
+ return ndotv/((ndotv*(1.0-k))+k);
+}
+
+float Geom(vec3 v, vec3 l)
+{
+ return GGX_Geom(v)*GGX_Geom(l);
+}
+
+// Schlick's approximation
+float Fresnel(vec3 h, vec3 v, float fresnel0)
+{
+ float a=1.0-max(dot(h,v),0.0);
+ float b=a*a;
+ return fresnel0+(1.0-fresnel0)*b*b*a;
+}
+
+vec3 BRDF(vec3 viewDirection, vec3 lightDirection)
+{
+ vec3 lambertian=Diffuse;
+ // Cook-Torrance model
+ vec3 h=normalize(lightDirection+viewDirection);
+
+ float omegain=max(dot(viewDirection,normal),0.0);
+ float omegaln=max(dot(lightDirection,normal),0.0);
+
+ float D=NDF_TRG(h);
+ float G=Geom(viewDirection,lightDirection);
+ float F=Fresnel(h,viewDirection,Fresnel0);
+
+ float denom=4.0*omegain*omegaln;
+ float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;
+
+ vec3 dielectric=mix(lambertian,rawReflectance*Specular,F);
+ vec3 metal=rawReflectance*Diffuse;
+
+ return mix(dielectric,metal,Metallic);
+}
+#endif
+
+void main()
+{
+ vec4 diffuse;
+ vec4 emissive;
+ vec4 parameters;
+
+ Material m;
+#ifdef TRANSPARENT
+ m=Materials[abs(materialIndex)-1];
+ if(materialIndex >= 0) {
+ diffuse=m.diffuse;
+ emissive=m.emissive;
+ } else {
+ diffuse=Color;
+ emissive=vec4(0.0);
+ }
+#else
+ m=Materials[int(materialIndex)];
+#ifdef COLOR
+ diffuse=Color;
+ emissive=vec4(0.0);
+#else
+ diffuse=m.diffuse;
+ emissive=m.emissive;
+#endif
+#endif
+ Specular=m.specular.rgb;
+ parameters=m.parameters;
+ Roughness2=1.0-parameters[0];
+ Roughness2=Roughness2*Roughness2;
+ Metallic=parameters[1];
+ Fresnel0=parameters[2];
+ Diffuse=diffuse.rgb;
+
+ // Given a point x and direction \omega,
+ // L_i=\int_{\Omega}f(x,\omega_i,\omega) L(x,\omega_i)(\hat{n}\cdot \omega_i)
+ // d\omega_i, where \Omega is the hemisphere covering a point,
+ // f is the BRDF function, L is the radiance from a given angle and position.
+
+ vec3 color=emissive.rgb;
+#ifdef NORMAL
+ normal=normalize(Normal);
+ normal=gl_FrontFacing ? normal : -normal;
+#ifdef ORTHOGRAPHIC
+ vec3 viewDir=vec3(0.0,0.0,1.0);
+#else
+ vec3 viewDir=-normalize(ViewPosition);
+#endif
+ // For a finite point light, the rendering equation simplifies.
+ if(nlights > 0) {
+ for(int i=0; i < nlights; ++i) {
+ Light Li=lights[i];
+ vec3 L=Li.direction;
+ float cosTheta=max(dot(normal,L),0.0); // $\omega_i \cdot n$ term
+ vec3 radiance=cosTheta*Li.color;
+ color += BRDF(viewDir,L)*radiance;
+ }
+
+#ifdef ENABLE_TEXTURE
+#ifndef COLOR
+ // Experimental environment radiance using Riemann sums;
+ // can also do importance sampling.
+ vec3 envRadiance=vec3(0.0,0.0,0.0);
+
+ vec3 normalPerp=vec3(-normal.y,normal.x,0.0);
+ if(length(normalPerp) == 0.0)
+ normalPerp=vec3(1.0,0.0,0.0);
+
+ // we now have a normal basis;
+ normalPerp=normalize(normalPerp);
+ vec3 normalPerp2=normalize(cross(normal,normalPerp));
+
+ const float step=1.0/numSamples;
+ const float phistep=twopi*step;
+ const float thetastep=halfpi*step;
+ for (int iphi=0; iphi < numSamples; ++iphi) {
+ float phi=iphi*phistep;
+ for (int itheta=0; itheta < numSamples; ++itheta) {
+ float theta=itheta*thetastep;
+
+ vec3 azimuth=cos(phi)*normalPerp+sin(phi)*normalPerp2;
+ vec3 L=sin(theta)*azimuth+cos(theta)*normal;
+
+ vec3 rawRadiance=texture(environmentMap,normalizedAngle(L)).rgb;
+ vec3 surfRefl=BRDF(Z,L);
+ envRadiance += surfRefl*rawRadiance*sin(2.0*theta);
+ }
+ }
+ envRadiance *= halfpi*step*step;
+ color += envRadiance.rgb;
+#endif
+#endif
+ outColor=vec4(color,diffuse.a);
+ } else outColor=diffuse;
+#else
+ outColor=emissive;
+#endif
+}
diff --git a/graphics/asymptote/base/shaders/vertex.glsl b/graphics/asymptote/base/shaders/vertex.glsl
index 815145461e..9a54d3211c 100644
--- a/graphics/asymptote/base/shaders/vertex.glsl
+++ b/graphics/asymptote/base/shaders/vertex.glsl
@@ -1,49 +1,49 @@
-in vec3 position;
-
-#ifdef NORMAL
-in vec3 normal;
-#endif
-
-#ifdef EXPLICIT_COLOR
-in uint color;
-#endif
-
-#ifdef WIDTH
-in float width;
-#endif
-
-in int material;
-
-uniform mat4 projViewMat;
-uniform mat4 viewMat;
-uniform mat4 normMat;
-
-out vec3 ViewPosition;
-#ifdef NORMAL
-out vec3 Normal;
-#endif
-
-#ifdef EXPLICIT_COLOR
-out vec4 Color;
-#endif
-
-flat out int materialIndex;
-
-void main()
-{
- gl_Position=projViewMat*vec4(position,1.0);
- ViewPosition=(viewMat*vec4(position,1.0)).xyz;
-#ifdef NORMAL
- Normal=(normMat*vec4(normal,0)).xyz;
-#endif
-
-#ifdef EXPLICIT_COLOR
- Color=unpackUnorm4x8(color);
-#endif
-
-#ifdef WIDTH
- gl_PointSize=width;
-#endif
-
- materialIndex=material;
-}
+in vec3 position;
+
+uniform mat3 normMat;
+
+#ifdef NORMAL
+#ifndef ORTHOGRAPHIC
+out vec3 ViewPosition;
+#endif
+in vec3 normal;
+out vec3 Normal;
+#endif
+
+in int material;
+
+#ifdef COLOR
+in vec4 color;
+out vec4 Color;
+#endif
+
+#ifdef WIDTH
+in float width;
+#endif
+
+uniform mat4 projViewMat;
+uniform mat4 viewMat;
+
+flat out int materialIndex;
+
+void main()
+{
+ vec4 v=vec4(position,1.0);
+ gl_Position=projViewMat*v;
+#ifdef NORMAL
+#ifndef ORTHOGRAPHIC
+ ViewPosition=(viewMat*v).xyz;
+#endif
+ Normal=normal*normMat;
+#endif
+
+#ifdef COLOR
+ Color=color;
+#endif
+
+#ifdef WIDTH
+ gl_PointSize=width;
+#endif
+
+ materialIndex=material;
+}
diff --git a/graphics/asymptote/base/three.asy b/graphics/asymptote/base/three.asy
index 866137b1db..2b32fd1612 100644
--- a/graphics/asymptote/base/three.asy
+++ b/graphics/asymptote/base/three.asy
@@ -2887,10 +2887,13 @@ object embed(string prefix=outprefix(), string label=prefix,
m -= margin;
} else if(M.z >= 0) abort("camera too close");
+ if(settings.outformat == "html")
+ format="html";
+
shipout3(prefix,f,preview ? nativeformat() : format,
S.width-defaultrender.margin,S.height-defaultrender.margin,
P.infinity ? 0 : 2aTan(Tan(0.5*P.angle)*P.zoom),
- P.zoom,m,M,P.viewportshift,
+ P.zoom,m,M,P.viewportshift,S.viewportmargin,
tinv*inv*shift(0,0,zcenter),Light.background(),Light.position,
Light.diffuse,Light.specular,
view && !preview);
diff --git a/graphics/asymptote/base/three_surface.asy b/graphics/asymptote/base/three_surface.asy
index bdb56cb0ca..4ad31d6d2d 100644
--- a/graphics/asymptote/base/three_surface.asy
+++ b/graphics/asymptote/base/three_surface.asy
@@ -1402,15 +1402,20 @@ void draw3D(frame f, int type=0, patch s, triple center=O, material m,
light light=currentlight, interaction interaction=Embedded,
bool prc=true)
{
- if(s.colors.length > 0)
+ bool straight=s.straight && s.planar;
+ bool prc=prc();
+ if(s.colors.length > 0) {
+ if(prc && light.on())
+ straight=false; // PRC vertex colors (for quads only) ignore lighting
m=mean(s.colors);
+ }
m=material(m,light);
- real PRCshininess;
- if(prc())
- PRCshininess=PRCshininess(m.shininess);
+ real PRCshininess;
+ if(prc) PRCshininess=PRCshininess(m.shininess);
+
(s.triangular ? drawbeziertriangle : draw)
- (f,s.P,center,s.straight && s.planar,m.p,m.opacity,m.shininess,
+ (f,s.P,center,straight,m.p,m.opacity,m.shininess,
m.metallic,m.fresnel0,PRCshininess,s.colors,interaction.type,prc);
}
@@ -1435,7 +1440,7 @@ void draw(frame f, triple[] v, int[][] vi,
triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
int[][] pi={}, light light=currentlight)
{
- bool normals=ni.length > 0;
+ bool normals=n.length > 0;
if(!normals) {
ni=new int[vi.length][3];
normals=computeNormals(v,vi,n,ni) > 0;
@@ -1455,7 +1460,8 @@ void draw(picture pic=currentpicture, triple[] v, int[][] vi,
triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
int[][] pi={}, light light=currentlight)
{
- bool normals=ni.length > 0;
+ bool prc=prc();
+ bool normals=n.length > 0;
if(!normals) {
ni=new int[vi.length][3];
normals=computeNormals(v,vi,n,ni) > 0;
@@ -1501,7 +1507,7 @@ void draw(picture pic=currentpicture, triple[] v, int[][] vi,
project(v[vii[2]],P)--cycle;
pen p=color(n[ni[i][0]],m,light);
fill(pic,g,p);
- if(opacity(m.diffuse()) == 1) // Fill subdivision cracks
+ if(prc && opacity(m.diffuse()) == 1) // Fill subdivision cracks
draw(pic,g,p);
}
}
@@ -1843,6 +1849,7 @@ void label(frame f, Label L, triple position, align align=NoAlign,
interaction interaction=LabelInteraction(),
projection P=currentprojection)
{
+ bool prc=prc();
Label L=L.copy();
L.align(align);
L.p(p);
@@ -1873,7 +1880,7 @@ void label(frame f, Label L, triple position, align align=NoAlign,
S=centering*S;
draw3D(f3,S,position,L.p,light,interaction);
// Fill subdivision cracks
- if(render.labelfill && opacity(L.p) == 1 && !lighton)
+ if(prc && render.labelfill && opacity(L.p) == 1 && !lighton)
_draw(f3,S.external(),position,L.p,interaction.type);
}
endgroup3(f3);
@@ -1893,7 +1900,7 @@ void label(frame f, Label L, triple position, align align=NoAlign,
position;
draw3D(f,S,V,L.p,light,interaction);
// Fill subdivision cracks
- if(render.labelfill && opacity(L.p) == 1 && !lighton)
+ if(prc && render.labelfill && opacity(L.p) == 1 && !lighton)
_draw(f,S.external(),V,L.p,interaction.type);
}
endgroup3(f);
@@ -1927,6 +1934,7 @@ void label(picture pic=currentpicture, Label L, triple position,
pic.add(new void(frame f, transform3 t, picture pic2, projection P) {
// Handle relative projected 3D alignments.
+ bool prc=prc();
Label L=L.copy();
triple v=t*position;
if(!align.is3D && L.align.relative && L.align.dir3 != O &&
@@ -1942,44 +1950,46 @@ void label(picture pic=currentpicture, Label L, triple position,
if(is3D()) {
bool lighton=light.on();
if(name == "") name=L.s;
- if(prc() && interaction.type == Billboard.type) {
+ if(prc && interaction.type == Billboard.type) {
surface s=surface(texpath(L,bbox=P.bboxonly));
- transform3 centering=L.align.is3D ?
- alignshift(s,L.T3,v,L.align.dir3) : identity4;
- transform3 positioning=
- shift(L.align.is3D ? v+L.align.dir3*labelmargin(L.p) : v);
- frame f1,f2,f3;
- begingroup3(f1,name,render);
- if(L.defaulttransform3)
- begingroup3(f3,render,v,interaction.type);
- else {
- begingroup3(f2,render,v,interaction.type);
- begingroup3(f3,render,v);
- }
- for(patch S : s.s) {
- S=centering*S;
- draw3D(f3,S,v,L.p,light,interaction);
- // Fill subdivision cracks
- if(render.labelfill && opacity(L.p) == 1 && !lighton)
- _draw(f3,S.external(),v,L.p,interaction.type);
- }
- endgroup3(f3);
- if(L.defaulttransform3)
- add(f1,T*f3);
- else {
- add(f2,inverse(T)*L.T3*f3);
- endgroup3(f2);
- add(f1,T*f2);
+ if(s.s.length > 0) {
+ transform3 centering=L.align.is3D ?
+ alignshift(s,L.T3,v,L.align.dir3) : identity4;
+ transform3 positioning=
+ shift(L.align.is3D ? v+L.align.dir3*labelmargin(L.p) : v);
+ frame f1,f2,f3;
+ begingroup3(f1,name,render);
+ if(L.defaulttransform3)
+ begingroup3(f3,render,v,interaction.type);
+ else {
+ begingroup3(f2,render,v,interaction.type);
+ begingroup3(f3,render,v);
+ }
+ for(patch S : s.s) {
+ S=centering*S;
+ draw3D(f3,S,v,L.p,light,interaction);
+ // Fill subdivision cracks
+ if(prc && render.labelfill && opacity(L.p) == 1 && !lighton)
+ _draw(f3,S.external(),v,L.p,interaction.type);
+ }
+ endgroup3(f3);
+ if(L.defaulttransform3)
+ add(f1,T*f3);
+ else {
+ add(f2,inverse(T)*L.T3*f3);
+ endgroup3(f2);
+ add(f1,T*f2);
+ }
+ endgroup3(f1);
+ add(f,positioning*f1);
}
- endgroup3(f1);
- add(f,positioning*f1);
} else {
begingroup3(f,name,render);
for(patch S : surface(L,v,bbox=P.bboxonly).s) {
triple V=L.align.is3D ? v+L.align.dir3*labelmargin(L.p) : v;
draw3D(f,S,V,L.p,light,interaction);
// Fill subdivision cracks
- if(render.labelfill && opacity(L.p) == 1 && !lighton)
+ if(prc && render.labelfill && opacity(L.p) == 1 && !lighton)
_draw(f,S.external(),V,L.p,interaction.type);
}
endgroup3(f);
diff --git a/graphics/asymptote/base/webgl/WebGLfooter.html b/graphics/asymptote/base/webgl/WebGLfooter.html
new file mode 100644
index 0000000000..4aba96372e
--- /dev/null
+++ b/graphics/asymptote/base/webgl/WebGLfooter.html
@@ -0,0 +1,10 @@
+</script>
+
+</head>
+
+
+<body style="overflow: hidden;" onload="webGLStart();">
+<canvas id="Asymptote" style="border: none;" width="0" height="0" />
+</body>
+
+</html>
diff --git a/graphics/asymptote/base/webgl/WebGLheader.html b/graphics/asymptote/base/webgl/WebGLheader.html
new file mode 100644
index 0000000000..6eea5fd1be
--- /dev/null
+++ b/graphics/asymptote/base/webgl/WebGLheader.html
@@ -0,0 +1,180 @@
+<html>
+
+<head>
+<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+<meta name="viewport" content="user-scalable=no"/>
+
+<script id="vertex" type="x-shader/x-vertex">
+attribute vec3 position;
+#ifdef WIDTH
+attribute float width;
+#endif
+#ifdef NORMAL
+attribute vec3 normal;
+#endif
+attribute float materialIndex;
+#ifdef COLOR
+attribute vec4 color;
+#endif
+
+uniform mat3 normMat;
+uniform mat4 viewMat;
+uniform mat4 projViewMat;
+
+#ifdef NORMAL
+#ifndef ORTHOGRAPHIC
+varying vec3 ViewPosition;
+#endif
+varying vec3 Normal;
+#endif
+varying vec4 diffuse;
+varying vec3 specular;
+varying float roughness,metallic,fresnel0;
+varying vec4 emissive;
+
+struct Material {
+ vec4 diffuse,emissive,specular;
+ float shininess,metallic,fresnel0;
+};
+
+uniform Material Materials[nMaterials];
+
+void main(void)
+{
+ vec4 v=vec4(position,1.0);
+ gl_Position=projViewMat*v;
+#ifdef NORMAL
+#ifndef ORTHOGRAPHIC
+ ViewPosition=(viewMat*v).xyz;
+#endif
+ Normal=normal*normMat;
+
+ Material m;
+#ifdef TRANSPARENT
+ m=Materials[int(abs(materialIndex))-1];
+ if(materialIndex >= 0.0) {
+ diffuse=m.diffuse;
+ emissive=m.emissive;
+ } else {
+ diffuse=color;
+ emissive=vec4(0.0);
+ }
+#else
+ m=Materials[int(materialIndex)];
+#ifdef COLOR
+ diffuse=color;
+ emissive=vec4(0.0);
+#else
+ diffuse=m.diffuse;
+ emissive=m.emissive;
+#endif
+#endif
+ specular=m.specular.rgb;
+ roughness=1.0-m.shininess;
+ metallic=m.metallic;
+ fresnel0=m.fresnel0;
+#else
+ emissive=Materials[int(materialIndex)].emissive;
+#endif
+#ifdef WIDTH
+ gl_PointSize=width;
+#endif
+}
+</script>
+
+<script id="fragment" type="x-shader/x-fragment">
+#ifdef NORMAL
+#ifndef ORTHOGRAPHIC
+varying vec3 ViewPosition;
+#endif
+varying vec3 Normal;
+varying vec4 diffuse;
+varying vec3 specular;
+varying float roughness,metallic,fresnel0;
+
+float Roughness2;
+vec3 normal;
+
+struct Light {
+ vec3 direction;
+ vec3 color;
+};
+uniform Light Lights[nLights];
+
+float NDF_TRG(vec3 h)
+{
+ float ndoth=max(dot(normal,h),0.0);
+ float alpha2=Roughness2*Roughness2;
+ float denom=ndoth*ndoth*(alpha2-1.0)+1.0;
+ return denom != 0.0 ? alpha2/(denom*denom) : 0.0;
+}
+
+float GGX_Geom(vec3 v)
+{
+ float ndotv=max(dot(v,normal),0.0);
+ float ap=1.0+Roughness2;
+ float k=0.125*ap*ap;
+ return ndotv/((ndotv*(1.0-k))+k);
+}
+
+float Geom(vec3 v, vec3 l)
+{
+ return GGX_Geom(v)*GGX_Geom(l);
+}
+
+float Fresnel(vec3 h, vec3 v, float fresnel0)
+{
+ float a=1.0-max(dot(h,v),0.0);
+ float b=a*a;
+ return fresnel0+(1.0-fresnel0)*b*b*a;
+}
+
+// physical based shading using UE4 model.
+vec3 BRDF(vec3 viewDirection, vec3 lightDirection)
+{
+ vec3 lambertian=diffuse.rgb;
+ vec3 h=normalize(lightDirection+viewDirection);
+
+ float omegain=max(dot(viewDirection,normal),0.0);
+ float omegali=max(dot(lightDirection,normal),0.0);
+
+ float D=NDF_TRG(h);
+ float G=Geom(viewDirection,lightDirection);
+ float F=Fresnel(h,viewDirection,fresnel0);
+
+ float denom=4.0*omegain*omegali;
+ float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;
+
+ vec3 dielectric=mix(lambertian,rawReflectance*specular,F);
+ vec3 metal=rawReflectance*diffuse.rgb;
+
+ return mix(dielectric,metal,metallic);
+}
+#endif
+varying vec4 emissive;
+
+void main(void)
+{
+#ifdef NORMAL
+ normal=normalize(Normal);
+ normal=gl_FrontFacing ? normal : -normal;
+#ifdef ORTHOGRAPHIC
+ vec3 viewDir=vec3(0.0,0.0,1.0);
+#else
+ vec3 viewDir=-normalize(ViewPosition);
+#endif
+ Roughness2=roughness*roughness;
+ vec3 color=emissive.rgb;
+ for (int i=0; i < nLights; ++i) {
+ Light Li=Lights[i];
+ vec3 L=Li.direction;
+ float cosTheta=max(dot(normal,L),0.0);
+ vec3 radiance=cosTheta*Li.color;
+ color += BRDF(viewDir,L)*radiance;
+ }
+ gl_FragColor=vec4(color,diffuse.a);
+#else
+ gl_FragColor=emissive;
+#endif
+}
+</script>
diff --git a/graphics/asymptote/base/webgl/asygl-1.00.js b/graphics/asymptote/base/webgl/asygl-1.00.js
new file mode 100644
index 0000000000..cf29f41c21
--- /dev/null
+++ b/graphics/asymptote/base/webgl/asygl-1.00.js
@@ -0,0 +1,39 @@
+/*@license
+ gl.js: Render Bezier patches via subdivision with WebGL.
+ Copyright 2019: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
+ University of Alberta
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+let gl,canvas,canvasWidth,canvasHeight,halfCanvasWidth,halfCanvasHeight;!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var r in i)("object"==typeof exports?exports:t)[r]=i[r]}}("undefined"!=typeof self?self:this,function(){return function(t){function e(r){if(i[r])return i[r].exports;var a=i[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,r){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*a},e.equals=function(t,e){return Math.abs(t-e)<=r*Math.max(1,Math.abs(t),Math.abs(e))};var r=e.EPSILON=1e-6,a=(e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random,Math.PI/180)},function(t,e,i){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var a=r(i(2)),s=r(i(3));e.mat3=a,e.mat4=s},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new r.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],r=e[1],a=e[2],s=e[3],n=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*n-o*l,m=-c*s+o*h,u=l*s-n*h,f=i*d+r*m+a*u;return f?(f=1/f,t[0]=d*f,t[1]=(-c*r+a*l)*f,t[2]=(o*r-a*n)*f,t[3]=m*f,t[4]=(c*i-a*h)*f,t[5]=(-o*i+a*s)*f,t[6]=u*f,t[7]=(-l*i+r*h)*f,t[8]=(n*i-r*s)*f,t):null};var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new r.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],r=e[1],a=e[2],s=e[3],n=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],u=e[11],f=e[12],v=e[13],p=e[14],g=e[15],x=i*o-r*n,M=i*h-a*n,w=i*l-s*n,A=r*h-a*o,S=r*l-s*o,b=a*l-s*h,P=c*v-d*f,z=c*p-m*f,R=c*g-u*f,y=d*p-m*v,D=d*g-u*v,T=m*g-u*p,E=x*T-M*D+w*y+A*R-S*z+b*P;return E?(E=1/E,t[0]=(o*T-h*D+l*y)*E,t[1]=(a*D-r*T-s*y)*E,t[2]=(v*b-p*S+g*A)*E,t[3]=(m*S-d*b-u*A)*E,t[4]=(h*R-n*T-l*z)*E,t[5]=(i*T-a*R+s*z)*E,t[6]=(p*w-f*b-g*M)*E,t[7]=(c*b-m*w+u*M)*E,t[8]=(n*D-o*R+l*P)*E,t[9]=(r*R-i*D-s*P)*E,t[10]=(f*S-v*w+g*x)*E,t[11]=(d*w-c*S-u*x)*E,t[12]=(o*z-n*y-h*P)*E,t[13]=(i*y-r*z+a*P)*E,t[14]=(v*M-f*A-p*x)*E,t[15]=(c*A-d*M+m*x)*E,t):null},e.multiply=function(t,e,i){var r=e[0],a=e[1],s=e[2],n=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],u=e[10],f=e[11],v=e[12],p=e[13],g=e[14],x=e[15],M=i[0],w=i[1],A=i[2],S=i[3];return t[0]=M*r+w*o+A*d+S*v,t[1]=M*a+w*h+A*m+S*p,t[2]=M*s+w*l+A*u+S*g,t[3]=M*n+w*c+A*f+S*x,M=i[4],w=i[5],A=i[6],S=i[7],t[4]=M*r+w*o+A*d+S*v,t[5]=M*a+w*h+A*m+S*p,t[6]=M*s+w*l+A*u+S*g,t[7]=M*n+w*c+A*f+S*x,M=i[8],w=i[9],A=i[10],S=i[11],t[8]=M*r+w*o+A*d+S*v,t[9]=M*a+w*h+A*m+S*p,t[10]=M*s+w*l+A*u+S*g,t[11]=M*n+w*c+A*f+S*x,M=i[12],w=i[13],A=i[14],S=i[15],t[12]=M*r+w*o+A*d+S*v,t[13]=M*a+w*h+A*m+S*p,t[14]=M*s+w*l+A*u+S*g,t[15]=M*n+w*c+A*f+S*x,t},e.translate=function(t,e,i){var r=i[0],a=i[1],s=i[2],n=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,u=void 0,f=void 0,v=void 0,p=void 0,g=void 0;return e===t?(t[12]=e[0]*r+e[4]*a+e[8]*s+e[12],t[13]=e[1]*r+e[5]*a+e[9]*s+e[13],t[14]=e[2]*r+e[6]*a+e[10]*s+e[14],t[15]=e[3]*r+e[7]*a+e[11]*s+e[15]):(n=e[0],o=e[1],h=e[2],l=e[3],c=e[4],d=e[5],m=e[6],u=e[7],f=e[8],v=e[9],p=e[10],g=e[11],t[0]=n,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=u,t[8]=f,t[9]=v,t[10]=p,t[11]=g,t[12]=n*r+c*a+f*s+e[12],t[13]=o*r+d*a+v*s+e[13],t[14]=h*r+m*a+p*s+e[14],t[15]=l*r+u*a+g*s+e[15]),t},e.rotate=function(t,e,i,a){var s=a[0],n=a[1],o=a[2],h=Math.sqrt(s*s+n*n+o*o),l=void 0,c=void 0,d=void 0,m=void 0,u=void 0,f=void 0,v=void 0,p=void 0,g=void 0,x=void 0,M=void 0,w=void 0,A=void 0,S=void 0,b=void 0,P=void 0,z=void 0,R=void 0,y=void 0,D=void 0,T=void 0,E=void 0,I=void 0,O=void 0;return Math.abs(h)<r.EPSILON?null:(s*=h=1/h,n*=h,o*=h,l=Math.sin(i),d=1-(c=Math.cos(i)),m=e[0],u=e[1],f=e[2],v=e[3],p=e[4],g=e[5],x=e[6],M=e[7],w=e[8],A=e[9],S=e[10],b=e[11],P=s*s*d+c,z=n*s*d+o*l,R=o*s*d-n*l,y=s*n*d-o*l,D=n*n*d+c,T=o*n*d+s*l,E=s*o*d+n*l,I=n*o*d-s*l,O=o*o*d+c,t[0]=m*P+p*z+w*R,t[1]=u*P+g*z+A*R,t[2]=f*P+x*z+S*R,t[3]=v*P+M*z+b*R,t[4]=m*y+p*D+w*T,t[5]=u*y+g*D+A*T,t[6]=f*y+x*D+S*T,t[7]=v*y+M*D+b*T,t[8]=m*E+p*I+w*O,t[9]=u*E+g*I+A*O,t[10]=f*E+x*I+S*O,t[11]=v*E+M*I+b*O,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var a=i[0],s=i[1],n=i[2],o=Math.sqrt(a*a+s*s+n*n),h=void 0,l=void 0,c=void 0;return Math.abs(o)<r.EPSILON?null:(a*=o=1/o,s*=o,n*=o,h=Math.sin(e),c=1-(l=Math.cos(e)),t[0]=a*a*c+l,t[1]=s*a*c+n*h,t[2]=n*a*c-s*h,t[3]=0,t[4]=a*s*c-n*h,t[5]=s*s*c+l,t[6]=n*s*c+a*h,t[7]=0,t[8]=a*n*c+s*h,t[9]=s*n*c-a*h,t[10]=n*n*c+l,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)},e.frustum=function(t,e,i,r,a,s,n){var o=1/(i-e),h=1/(a-r),l=1/(s-n);return t[0]=2*s*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*s*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(a+r)*h,t[10]=(n+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=n*s*2*l,t[15]=0,t},e.ortho=function(t,e,i,r,a,s,n){var o=1/(e-i),h=1/(r-a),l=1/(s-n);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(a+r)*h,t[14]=(n+s)*l,t[15]=1,t};var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))}])});let Zoom,Zoom0,pixel=.75,BezierFactor=.4,FillFactor=.1,maxViewportWidth=window.innerWidth,maxViewportHeight=window.innerHeight,viewportmargin=0;const windowTrim=10;let zoomFactor,zoomPinchFactor,zoomPinchCap,zoomStep,shiftHoldDistance,shiftWaitTime,vibrateTime,lastzoom,H,zmin,zmax,size2,ArcballFactor,b,B,positionBuffer,materialBuffer,colorBuffer,indexBuffer,resizeStep=1.2,Fuzz2=1e3*Number.EPSILON,Fuzz4=Fuzz2*Fuzz2,third=1/3,P=[],Materials=[],Lights=[],Centers=[],absolute=!1,rotMat=mat4.create(),projMat=mat4.create(),viewMat=mat4.create(),projViewMat=mat4.create(),normMat=mat3.create(),viewMat3=mat3.create(),rotMats=mat4.create(),cjMatInv=mat4.create(),translMat=mat4.create(),center={x:0,y:0,z:0},shift={x:0,y:0},viewParam={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},redraw=!0,remesh=!0,mouseDownOrTouchActive=!1,lastMouseX=null,lastMouseY=null,touchID=null,Positions=[],Normals=[],Colors=[],Indices=[];class Material{constructor(t,e,i,r,a,s){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=r,this.metallic=a,this.fresnel0=s}setUniform(t,e,i=null){let r;r=null===i?i=>gl.getUniformLocation(t,e+"."+i):r=>gl.getUniformLocation(t,e+"["+i+"]."+r),gl.uniform4fv(r("diffuse"),new Float32Array(this.diffuse)),gl.uniform4fv(r("emissive"),new Float32Array(this.emissive)),gl.uniform4fv(r("specular"),new Float32Array(this.specular)),gl.uniform1f(r("shininess"),this.shininess),gl.uniform1f(r("metallic"),this.metallic),gl.uniform1f(r("fresnel0"),this.fresnel0)}}let enumPointLight=1,enumDirectionalLight=2;class Light{constructor(t,e){this.direction=t,this.color=e}setUniform(t,e,i){let r=r=>gl.getUniformLocation(t,e+"["+i+"]."+r);gl.uniform3fv(r("direction"),new Float32Array(this.direction)),gl.uniform3fv(r("color"),new Float32Array(this.color))}}function initGL(){try{gl=canvas.getContext("webgl",{alpha:!1})}catch(t){}gl||alert("Could not initialize WebGL")}function getShader(t,e,i=[]){let r=document.getElementById(e);if(!r)return null;let a=`#version 100\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n#else\n precision mediump float;\n#endif\n const int nLights=${Lights.length};\n const int nMaterials=${Materials.length};\n`;orthographic&&(a+="#define ORTHOGRAPHIC\n"),i.forEach(t=>a+="#define "+t+"\n");let s,n=r.firstChild;for(;n;)3==n.nodeType&&(a+=n.textContent),n=n.nextSibling;if("x-shader/x-fragment"==r.type)s=t.createShader(t.FRAGMENT_SHADER);else{if("x-shader/x-vertex"!=r.type)return null;s=t.createShader(t.VERTEX_SHADER)}return t.shaderSource(s,a),t.compileShader(s),t.getShaderParameter(s,t.COMPILE_STATUS)?s:(alert(t.getShaderInfoLog(s)),null)}function drawBuffer(t,e,i=t.indices){if(0==t.indices.length)return;let r=e==pixelShader,a=!r&&e!=noNormalShader;setUniforms(e),gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(t.vertices),gl.STATIC_DRAW),gl.vertexAttribPointer(e.vertexPositionAttribute,3,gl.FLOAT,!1,a?24:r?16:12,0),a?gl.vertexAttribPointer(e.vertexNormalAttribute,3,gl.FLOAT,!1,24,12):r&&gl.vertexAttribPointer(e.vertexWidthAttribute,1,gl.FLOAT,!1,16,12),gl.bindBuffer(gl.ARRAY_BUFFER,materialBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Int16Array(t.materials),gl.STATIC_DRAW),gl.vertexAttribPointer(e.vertexMaterialAttribute,1,gl.SHORT,!1,2,0),e!=colorShader&&e!=transparentShader||(gl.bindBuffer(gl.ARRAY_BUFFER,colorBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Uint8Array(t.colors),gl.STATIC_DRAW),gl.vertexAttribPointer(e.vertexColorAttribute,4,gl.UNSIGNED_BYTE,!0,0,0)),gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indexBuffer),gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indexExt?new Uint32Array(i):new Uint16Array(i),gl.STATIC_DRAW),gl.drawElements(a?gl.TRIANGLES:r?gl.POINTS:gl.LINES,i.length,indexExt?gl.UNSIGNED_INT:gl.UNSIGNED_SHORT,0)}class vertexBuffer{constructor(){this.clear()}clear(){this.vertices=[],this.materials=[],this.colors=[],this.indices=[],this.nvertices=0}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materials.push(materialIndex),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materials.push(materialIndex),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex1(t){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.materials.push(materialIndex),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materials.push(materialIndex),this.nvertices++}iVertex(t,e,i,r=[0,0,0,0]){let a=6*t;this.vertices[a]=e[0],this.vertices[a+1]=e[1],this.vertices[a+2]=e[2],this.vertices[a+3]=i[0],this.vertices[a+4]=i[1],this.vertices[a+5]=i[2],this.materials[t]=materialIndex;let s=4*t;this.colors[s]=r[0],this.colors[s+1]=r[1],this.colors[s+2]=r[2],this.colors[s+3]=r[3],this.indices.push(t)}append(t){append(this.vertices,t.vertices),append(this.materials,t.materials),append(this.colors,t.colors),appendOffset(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}let materialIndex,material0Data=new vertexBuffer,material1Data=new vertexBuffer,materialData=new vertexBuffer,colorData=new vertexBuffer,transparentData=new vertexBuffer,triangleData=new vertexBuffer;function append(t,e){let i=t.length,r=e.length;t.length+=r;for(let a=0;a<r;++a)t[i+a]=e[a]}function appendOffset(t,e,i){let r=t.length,a=e.length;t.length+=e.length;for(let s=0;s<a;++s)t[r+s]=e[s]+i}class Geometry{constructor(){this.data=new vertexBuffer,this.Onscreen=!1,this.m=[]}offscreen(t){let e=projViewMat,i=t[0],r=i[0],a=i[1],s=i[2],n=1/(e[3]*r+e[7]*a+e[11]*s+e[15]);this.x=this.X=(e[0]*r+e[4]*a+e[8]*s+e[12])*n,this.y=this.Y=(e[1]*r+e[5]*a+e[9]*s+e[13])*n;for(let i=1,r=t.length;i<r;++i){let r=t[i],a=r[0],s=r[1],n=r[2],o=1/(e[3]*a+e[7]*s+e[11]*n+e[15]),h=(e[0]*a+e[4]*s+e[8]*n+e[12])*o,l=(e[1]*a+e[5]*s+e[9]*n+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],r=this.c[2],a=t[0]-e,s=t[1]-i,n=t[2]-r;return[a*normMat[0]+s*normMat[3]+n*normMat[6]+e,a*normMat[1]+s*normMat[4]+n*normMat[7]+i,a*normMat[2]+s*normMat[5]+n*normMat[8]+r]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}render(){let t;if(0==this.CenterIndex?t=corners(this.Min,this.Max):(this.c=Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return void this.data.clear();let e,i=this.controlpoints;if(0==this.CenterIndex){if(!remesh&&this.Onscreen)return void this.append();e=i}else{let t=i.length;e=Array(t);for(let r=0;r<t;++r)e[r]=this.T(i[r])}materialIndex=this.MaterialIndex;let r=orthographic?1:this.Min[2]/B[2],a=pixel*Math.hypot(r*(viewParam.xmax-viewParam.xmin),r*(viewParam.ymax-viewParam.ymin))/size2;this.res2=a*a,this.Epsilon=FillFactor*a,this.data.clear(),this.Onscreen=!0,this.process(e)}}class BezierPatch extends Geometry{constructor(t,e,i,r,a,s){super(),this.controlpoints=t,this.Min=r,this.Max=a,this.color=s,this.CenterIndex=e;let n=t.length;if(s){let t=s[0][3]+s[1][3]+s[2][3];this.transparent=16==n||4==n?t+s[3][3]<1020:t<765}else this.transparent=Materials[i].diffuse[3]<1;this.transparent?(this.MaterialIndex=s?-1-i:1+i,this.vertex=this.data.Vertex.bind(this.data)):(this.MaterialIndex=i,this.vertex=this.data.vertex.bind(this.data)),this.L2norm(this.controlpoints)}L2norm(t){let e=t[0];this.epsilon=0;let i=t.length;for(let r=1;r<i;++r)this.epsilon=Math.max(this.epsilon,abs2([t[r][0]-e[0],t[r][1]-e[1],t[r][2]-e[2]]));this.epsilon*=Fuzz4}processTriangle(t){let e=t[0],i=t[1],r=t[2],a=unit(cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]));this.offscreen([e,i,r])||(this.color?(this.data.indices.push(this.data.Vertex(e,a,this.color[0])),this.data.indices.push(this.data.Vertex(i,a,this.color[1])),this.data.indices.push(this.data.Vertex(r,a,this.color[2]))):(this.data.indices.push(this.vertex(e,a)),this.data.indices.push(this.vertex(i,a)),this.data.indices.push(this.vertex(r,a))),this.append())}processQuad(t){let e=t[0],i=t[1],r=t[2],a=t[3],s=cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[r[0]-i[0],r[1]-i[1],r[2]-i[2]]),n=cross([r[0]-a[0],r[1]-a[1],r[2]-a[2]],[a[0]-e[0],a[1]-e[1],a[2]-e[2]]),o=unit([s[0]+n[0],s[1]+n[1],s[2]+n[2]]);if(!this.offscreen([e,i,r,a])){let t,s,n,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),s=this.data.Vertex(i,o,this.color[1]),n=this.data.Vertex(r,o,this.color[2]),h=this.data.Vertex(a,o,this.color[3])):(t=this.vertex(e,o),s=this.vertex(i,o),n=this.vertex(r,o),h=this.vertex(a,o)),this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(n),this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(h),this.append()}}process(t){if(10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);let e=t[0],i=t[3],r=t[12],a=t[15],s=this.normal(i,t[2],t[1],e,t[4],t[8],r);iszero(s)&&iszero(s=this.normal(i,t[2],t[1],e,t[13],t[14],a))&&(s=this.normal(a,t[11],t[7],i,t[4],t[8],r));let n=this.normal(e,t[4],t[8],r,t[13],t[14],a);iszero(n)&&iszero(n=this.normal(e,t[4],t[8],r,t[11],t[7],i))&&(n=this.normal(i,t[2],t[1],e,t[13],t[14],a));let o=this.normal(r,t[13],t[14],a,t[11],t[7],i);iszero(o)&&iszero(o=this.normal(r,t[13],t[14],a,t[2],t[1],e))&&(o=this.normal(e,t[4],t[8],r,t[11],t[7],i));let h=this.normal(a,t[11],t[7],i,t[2],t[1],e);if(iszero(h)&&iszero(h=this.normal(a,t[11],t[7],i,t[4],t[8],r))&&(h=this.normal(r,t[13],t[14],a,t[2],t[1],e)),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],u=this.data.Vertex(e,s,l),f=this.data.Vertex(r,n,c),v=this.data.Vertex(a,o,d),p=this.data.Vertex(i,h,m);this.Render(t,u,f,v,p,e,r,a,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,s),c=this.vertex(r,n),d=this.vertex(a,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,r,a,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):this.color?colorData.append(this.data):materialData.append(this.data)}Render(t,e,i,r,a,s,n,o,h,l,c,d,m,u,f,v,p){if(this.Distance(t)<this.res2)this.offscreen([s,n,o])||(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(r)),this.offscreen([s,o,h])||(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(a));else{if(this.offscreen(t))return;let g=t[0],x=t[3],M=t[12],w=t[15],A=new Split3(g,t[1],t[2],x),S=new Split3(t[4],t[5],t[6],t[7]),b=new Split3(t[8],t[9],t[10],t[11]),P=new Split3(M,t[13],t[14],w),z=new Split3(g,t[4],t[8],M),R=new Split3(A.m0,S.m0,b.m0,P.m0),y=new Split3(A.m3,S.m3,b.m3,P.m3),D=new Split3(A.m5,S.m5,b.m5,P.m5),T=new Split3(A.m4,S.m4,b.m4,P.m4),E=new Split3(A.m2,S.m2,b.m2,P.m2),I=new Split3(x,t[7],t[11],w),O=[g,A.m0,A.m3,A.m5,z.m0,R.m0,y.m0,D.m0,z.m3,R.m3,y.m3,D.m3,z.m5,R.m5,y.m5,D.m5],_=[z.m5,R.m5,y.m5,D.m5,z.m4,R.m4,y.m4,D.m4,z.m2,R.m2,y.m2,D.m2,M,P.m0,P.m3,P.m5],B=[D.m5,T.m5,E.m5,I.m5,D.m4,T.m4,E.m4,I.m4,D.m2,T.m2,E.m2,I.m2,P.m5,P.m4,P.m2,w],C=[A.m5,A.m4,A.m2,x,D.m0,T.m0,E.m0,I.m0,D.m3,T.m3,E.m3,I.m3,D.m5,T.m5,E.m5,I.m5],F=O[15],L=this.normal(O[0],O[4],O[8],O[12],O[13],O[14],O[15]);iszero(L)&&iszero(L=this.normal(O[0],O[4],O[8],O[12],O[11],O[7],O[3]))&&(L=this.normal(O[3],O[2],O[1],O[0],O[13],O[14],O[15]));let V=this.normal(_[12],_[13],_[14],_[15],_[11],_[7],_[3]);iszero(V)&&iszero(V=this.normal(_[12],_[13],_[14],_[15],_[2],_[1],_[0]))&&(V=this.normal(_[0],_[4],_[8],_[12],_[11],_[7],_[3]));let N=this.normal(B[15],B[11],B[7],B[3],B[2],B[1],B[0]);iszero(N)&&iszero(N=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12]))&&(N=this.normal(B[12],B[13],B[14],B[15],B[2],B[1],B[0]));let H=this.normal(C[3],C[2],C[1],C[0],C[4],C[8],C[12]);iszero(H)&&iszero(H=this.normal(C[3],C[2],C[1],C[0],C[13],C[14],C[15]))&&(H=this.normal(C[15],C[11],C[7],C[3],C[4],C[8],C[12]));let U=this.normal(B[3],B[2],B[1],F,B[4],B[8],B[12]),W=this.Epsilon,Y=[.5*(s[0]+n[0]),.5*(s[1]+n[1]),.5*(s[2]+n[2])];if(!l)if(l=Straightness(g,t[4],t[8],M)<this.res2){let t=unit(this.derivative(_[0],_[1],_[2],_[3]));Y=[Y[0]-W*t[0],Y[1]-W*t[1],Y[2]-W*t[2]]}else Y=O[12];let j=[.5*(n[0]+o[0]),.5*(n[1]+o[1]),.5*(n[2]+o[2])];if(!c)if(c=Straightness(M,t[13],t[14],w)<this.res2){let t=unit(this.derivative(B[12],B[8],B[4],B[0]));j=[j[0]-W*t[0],j[1]-W*t[1],j[2]-W*t[2]]}else j=_[15];let G=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Straightness(w,t[11],t[7],x)<this.res2){let t=unit(this.derivative(C[15],B[14],B[13],_[12]));G=[G[0]-W*t[0],G[1]-W*t[1],G[2]-W*t[2]]}else G=B[3];let k=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=Straightness(g,t[1],t[2],x)<this.res2){let t=unit(this.derivative(O[3],O[7],O[11],O[15]));k=[k[0]-W*t[0],k[1]-W*t[1],k[2]-W*t[2]]}else k=C[0];if(u){let t=Array(4),g=Array(4),x=Array(4),M=Array(4),w=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+f[e]),g[e]=.5*(f[e]+v[e]),x[e]=.5*(v[e]+p[e]),M[e]=.5*(p[e]+u[e]),w[e]=.5*(t[e]+x[e]);let A=this.data.Vertex(Y,L,t),S=this.data.Vertex(j,V,g),b=this.data.Vertex(G,N,x),P=this.data.Vertex(k,H,M),z=this.data.Vertex(F,U,w);this.Render(O,e,A,z,P,s,Y,F,k,l,!1,!1,m,u,t,w,M),this.Render(_,A,i,S,z,Y,n,j,F,l,c,!1,!1,t,f,g,w),this.Render(B,z,S,r,b,F,j,o,G,!1,c,d,!1,w,g,v,x),this.Render(C,P,z,b,a,k,F,G,h,!1,!1,d,m,M,w,x,p)}else{let t=this.vertex(Y,L),u=this.vertex(j,V),f=this.vertex(G,N),v=this.vertex(k,H),p=this.vertex(F,U);this.Render(O,e,t,p,v,s,Y,F,k,l,!1,!1,m),this.Render(_,t,i,u,p,Y,n,j,F,l,c,!1,!1),this.Render(B,p,u,r,f,F,j,o,G,!1,c,d,!1),this.Render(C,v,p,f,a,k,F,G,h,!1,!1,d,m)}}}process3(t){this.Res2=BezierFactor*BezierFactor*this.res2;let e=t[0],i=t[6],r=t[9],a=this.normal(r,t[5],t[2],e,t[1],t[3],i),s=this.normal(e,t[1],t[3],i,t[7],t[8],r),n=this.normal(i,t[7],t[8],r,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,a,o),d=this.data.Vertex(i,s,h),m=this.data.Vertex(r,n,l);this.Render3(t,c,d,m,e,i,r,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,a),h=this.vertex(i,s),l=this.vertex(r,n);this.Render3(t,o,h,l,e,i,r,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,r,a,s,n,o,h,l,c,d,m){if(this.Distance3(t)<this.Res2)this.offscreen([a,s,n])||(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(r));else{if(this.offscreen(t))return;let u=t[0],f=t[1],v=t[2],p=t[3],g=t[4],x=t[5],M=t[6],w=t[7],A=t[8],S=t[9],b=[.5*(S[0]+x[0]),.5*(S[1]+x[1]),.5*(S[2]+x[2])],P=[.5*(S[0]+A[0]),.5*(S[1]+A[1]),.5*(S[2]+A[2])],z=[.5*(x[0]+v[0]),.5*(x[1]+v[1]),.5*(x[2]+v[2])],R=[.5*(A[0]+g[0]),.5*(A[1]+g[1]),.5*(A[2]+g[2])],y=[.5*(A[0]+w[0]),.5*(A[1]+w[1]),.5*(A[2]+w[2])],D=[.5*(v[0]+g[0]),.5*(v[1]+g[1]),.5*(v[2]+g[2])],T=[.5*(v[0]+u[0]),.5*(v[1]+u[1]),.5*(v[2]+u[2])],E=[.5*(g[0]+p[0]),.5*(g[1]+p[1]),.5*(g[2]+p[2])],I=[.5*(w[0]+M[0]),.5*(w[1]+M[1]),.5*(w[2]+M[2])],O=[.5*(u[0]+f[0]),.5*(u[1]+f[1]),.5*(u[2]+f[2])],_=[.5*(f[0]+p[0]),.5*(f[1]+p[1]),.5*(f[2]+p[2])],B=[.5*(p[0]+M[0]),.5*(p[1]+M[1]),.5*(p[2]+M[2])],C=[.5*(b[0]+z[0]),.5*(b[1]+z[1]),.5*(b[2]+z[2])],F=[.5*(P[0]+y[0]),.5*(P[1]+y[1]),.5*(P[2]+y[2])],L=[.5*(z[0]+T[0]),.5*(z[1]+T[1]),.5*(z[2]+T[2])],V=[.5*R[0]+.25*(g[0]+f[0]),.5*R[1]+.25*(g[1]+f[1]),.5*R[2]+.25*(g[2]+f[2])],N=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],H=[.5*D[0]+.25*(g[0]+w[0]),.5*D[1]+.25*(g[1]+w[1]),.5*D[2]+.25*(g[2]+w[2])],U=[.25*(x[0]+g[0])+.5*E[0],.25*(x[1]+g[1])+.5*E[1],.25*(x[2]+g[2])+.5*E[2]],W=[.5*(O[0]+_[0]),.5*(O[1]+_[1]),.5*(O[2]+_[2])],Y=[.5*(_[0]+B[0]),.5*(_[1]+B[1]),.5*(_[2]+B[2])],j=[.5*(H[0]+W[0]),.5*(H[1]+W[1]),.5*(H[2]+W[2])],G=[.5*(H[0]+Y[0]),.5*(H[1]+Y[1]),.5*(H[2]+Y[2])],k=[.5*(W[0]+Y[0]),.5*(W[1]+Y[1]),.5*(W[2]+Y[2])],X=[.5*(U[0]+N[0]),.5*(U[1]+N[1]),.5*(U[2]+N[2])],Z=[.5*(F[0]+U[0]),.5*(F[1]+U[1]),.5*(F[2]+U[2])],q=[.5*(F[0]+N[0]),.5*(F[1]+N[1]),.5*(F[2]+N[2])],K=[.5*(C[0]+V[0]),.5*(C[1]+V[1]),.5*(C[2]+V[2])],Q=[.5*(L[0]+V[0]),.5*(L[1]+V[1]),.5*(L[2]+V[2])],$=[.5*(C[0]+L[0]),.5*(C[1]+L[1]),.5*(C[2]+L[2])],J=[u,O,T,W,[.5*(D[0]+O[0]),.5*(D[1]+O[1]),.5*(D[2]+O[2])],L,k,j,Q,$],tt=[k,Y,G,B,[.5*(E[0]+I[0]),.5*(E[1]+I[1]),.5*(E[2]+I[2])],X,M,I,N,q],et=[$,K,C,Z,[.5*(b[0]+R[0]),.5*(b[1]+R[1]),.5*(b[2]+R[2])],b,q,F,P,S],it=[q,Z,X,K,[.25*(z[0]+y[0]+_[0]+g[0]),.25*(z[1]+y[1]+_[1]+g[1]),.25*(z[2]+y[2]+_[2]+g[2])],G,$,Q,j,k],rt=this.normal(k,G,X,q,Z,K,$),at=this.normal(q,Z,K,$,Q,j,k),st=this.normal($,Q,j,k,G,X,q),nt=this.Epsilon,ot=[.5*(s[0]+n[0]),.5*(s[1]+n[1]),.5*(s[2]+n[2])];if(!o)if(o=Straightness(M,w,A,S)<this.res2){let t=unit(this.sumderivative(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-nt*t[0],ot[1]-nt*t[1],ot[2]-nt*t[2]]}else ot=q;let ht=[.5*(n[0]+a[0]),.5*(n[1]+a[1]),.5*(n[2]+a[2])];if(!h)if(h=Straightness(u,v,x,S)<this.res2){let t=unit(this.sumderivative(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-nt*t[0],ht[1]-nt*t[1],ht[2]-nt*t[2]]}else ht=$;let lt=[.5*(a[0]+s[0]),.5*(a[1]+s[1]),.5*(a[2]+s[2])];if(!l)if(l=Straightness(u,f,p,M)<this.res2){let t=unit(this.sumderivative(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-nt*t[0],lt[1]-nt*t[1],lt[2]-nt*t[2]]}else lt=k;if(c){let t=Array(4),u=Array(4),f=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),u[e]=.5*(m[e]+c[e]),f[e]=.5*(c[e]+d[e]);let v=this.data.Vertex(ot,rt,t),p=this.data.Vertex(ht,at,u),g=this.data.Vertex(lt,st,f);this.Render3(J,e,g,p,a,lt,ht,!1,h,l,c,f,u),this.Render3(tt,g,i,v,lt,s,ot,o,!1,l,f,d,t),this.Render3(et,p,v,r,ht,ot,n,o,h,!1,u,t,m),this.Render3(it,v,p,g,ot,ht,lt,!1,!1,!1,t,u,f)}else{let t=this.vertex(ot,rt),c=this.vertex(ht,at),d=this.vertex(lt,st);this.Render3(J,e,d,c,a,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,s,ot,o,!1,l),this.Render3(et,c,t,r,ht,ot,n,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],r=t[12],a=t[15],s=Distance2(a,e,this.normal(i,t[2],t[1],e,t[4],t[8],r));return s=Math.max(s,Straightness(e,t[1],t[2],i)),s=Math.max(s,Straightness(e,t[4],t[8],r)),s=Math.max(s,Straightness(i,t[7],t[11],a)),s=Math.max(s,Straightness(r,t[13],t[14],a)),s=Math.max(s,Straightness(t[4],t[5],t[6],t[7])),s=Math.max(s,Straightness(t[8],t[9],t[10],t[11])),s=Math.max(s,Straightness(t[1],t[5],t[9],t[13])),Math.max(s,Straightness(t[2],t[6],t[10],t[14]))}Distance3(t){let e=t[0],i=t[4],r=t[6],a=t[9],s=abs2([(e[0]+r[0]+a[0])*third-i[0],(e[1]+r[1]+a[1])*third-i[1],(e[2]+r[2]+a[2])*third-i[2]]);return s=Math.max(s,Straightness(e,t[1],t[3],r)),s=Math.max(s,Straightness(e,t[2],t[5],a)),Math.max(s,Straightness(r,t[7],t[8],a))}derivative(t,e,i,r){let a=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];if(abs2(a)>this.epsilon)return a;let s=bezierPP(t,e,i);return abs2(s)>this.epsilon?s:bezierPPP(t,e,i,r)}sumderivative(t,e,i,r,a,s,n){let o=this.derivative(t,e,i,r),h=this.derivative(t,a,s,n);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,r,a,s,n){let o=a[0]-r[0],h=a[1]-r[1],l=a[2]-r[2],c=i[0]-r[0],d=i[1]-r[1],m=i[2]-r[2],u=[h*m-l*d,l*c-o*m,o*d-h*c];if(abs2(u)>this.epsilon)return unit(u);let f=[c,d,m],v=[o,h,l],p=bezierPP(r,i,e),g=bezierPP(r,a,s),x=cross(g,f),M=cross(v,p);if(abs2(u=[x[0]+M[0],x[1]+M[1],x[2]+M[2]])>this.epsilon)return unit(u);let w=bezierPPP(r,i,e,t),A=bezierPPP(r,a,s,n);x=cross(g,p),M=cross(v,w);let S=cross(A,f),b=cross(A,p),P=cross(g,w),z=cross(A,w);return unit([9*x[0]+3*(M[0]+S[0]+b[0]+P[0])+z[0],9*x[1]+3*(M[1]+S[1]+b[1]+P[1])+z[1],9*x[2]+3*(M[2]+S[2]+b[2]+P[2])+z[2]])}}class BezierCurve extends Geometry{constructor(t,e,i,r,a){super(),this.controlpoints=t,this.Min=r,this.Max=a,this.CenterIndex=e,this.MaterialIndex=i}processLine(t){let e=t[0],i=t[1];this.offscreen([e,i])||(this.data.indices.push(this.data.vertex1(e)),this.data.indices.push(this.data.vertex1(i)),this.append())}process(t){if(2==t.length)return this.processLine(t);let e=this.data.vertex1(t[0]),i=this.data.vertex1(t[3]);this.Render(t,e,i),this.data.indices.length>0&&this.append()}append(){material1Data.append(this.data)}Render(t,e,i){let r=t[0],a=t[1],s=t[2],n=t[3];if(Straightness(r,a,s,n)<this.res2)this.offscreen([r,n])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(r[0]+a[0]),.5*(r[1]+a[1]),.5*(r[2]+a[2])],h=[.5*(a[0]+s[0]),.5*(a[1]+s[1]),.5*(a[2]+s[2])],l=[.5*(s[0]+n[0]),.5*(s[1]+n[1]),.5*(s[2]+n[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],u=[r,o,c,m],f=[m,d,l,n],v=this.data.vertex1(m);this.Render(u,e,v),this.Render(f,v,i)}}}class Pixel extends Geometry{constructor(t,e,i,r,a){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=r,this.Max=a}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){material0Data.append(this.data)}}class Triangles extends Geometry{constructor(t,e,i){super(),this.CenterIndex=0,this.MaterialIndex=t,this.Min=e,this.Max=i,this.Positions=Positions,this.Normals=Normals,this.Colors=Colors,this.Indices=Indices,Positions=[],Normals=[],Colors=[],Indices=[],this.transparent=Materials[t].diffuse[3]<1}process(t){for(let t=0,e=this.Indices.length;t<e;++t){let e=this.Indices[t],i=e[0],r=this.Positions[i[0]],a=this.Positions[i[1]],s=this.Positions[i[2]];if(!this.offscreen([r,a,s])){let t=e.length>1?e[1]:i;if(t&&0!=t.length||(t=i),this.Colors.length>0){let n=e.length>2?e[2]:i;n&&0!=n.length||(n=i);let o=this.Colors[n[0]],h=this.Colors[n[1]],l=this.Colors[n[2]];this.transparent|=o[3]+h[3]+l[3]<765,materialIndex=-1-this.MaterialIndex,this.data.iVertex(i[0],r,this.Normals[t[0]],o),this.data.iVertex(i[1],a,this.Normals[t[1]],h),this.data.iVertex(i[2],s,this.Normals[t[2]],l)}else materialIndex=1+this.MaterialIndex,this.data.iVertex(i[0],r,this.Normals[t[0]]),this.data.iVertex(i[1],a,this.Normals[t[1]]),this.data.iVertex(i[2],s,this.Normals[t[2]])}}this.data.nvertices=this.Positions.length,this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):triangleData.append(this.data)}}function home(){mat4.identity(rotMat),initProjection(),setProjection(),redraw=!0}function initShader(t=[]){let e=getShader(gl,"fragment",t),i=getShader(gl,"vertex",t),r=gl.createProgram();return gl.attachShader(r,i),gl.attachShader(r,e),gl.linkProgram(r),gl.getProgramParameter(r,gl.LINK_STATUS)||alert("Could not initialize shaders"),r}class Split3{constructor(t,e,i,r){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let a=.5*(e[0]+i[0]),s=.5*(e[1]+i[1]),n=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+r[0]),.5*(i[1]+r[1]),.5*(i[2]+r[2])],this.m3=[.5*(this.m0[0]+a),.5*(this.m0[1]+s),.5*(this.m0[2]+n)],this.m4=[.5*(a+this.m2[0]),.5*(s+this.m2[1]),.5*(n+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}function iszero(t){return 0==t[0]&&0==t[1]&&0==t[2]}function unit(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function abs2(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function dot(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function cross(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function bezierPP(t,e,i){return[t[0]+i[0]-2*e[0],t[1]+i[1]-2*e[1],t[2]+i[2]-2*e[2]]}function bezierPPP(t,e,i,r){return[r[0]-t[0]+3*(e[0]-i[0]),r[1]-t[1]+3*(e[1]-i[1]),r[2]-t[2]+3*(e[2]-i[2])]}function Straightness(t,e,i,r){let a=[third*(r[0]-t[0]),third*(r[1]-t[1]),third*(r[2]-t[2])];return Math.max(abs2([e[0]-a[0]-t[0],e[1]-a[1]-t[1],e[2]-a[2]-t[2]]),abs2([r[0]-a[0]-i[0],r[1]-a[1]-i[1],r[2]-a[2]-i[2]]))}function Distance2(t,e,i){let r=dot([t[0]-e[0],t[1]-e[1],t[2]-e[2]],i);return r*r}function corners(t,e){return[t,[t[0],t[1],e[2]],[t[0],e[1],t[2]],[t[0],e[1],e[2]],[e[0],t[1],t[2]],[e[0],t[1],e[2]],[e[0],e[1],t[2]],e]}function COBTarget(t,e){mat4.fromTranslation(translMat,[center.x,center.y,center.z]),mat4.invert(cjMatInv,translMat),mat4.multiply(t,e,cjMatInv),mat4.multiply(t,translMat,t)}function setUniforms(t){let e=t==pixelShader;gl.useProgram(t),t.vertexPositionAttribute=gl.getAttribLocation(t,"position"),gl.enableVertexAttribArray(t.vertexPositionAttribute),e&&(t.vertexWidthAttribute=gl.getAttribLocation(t,"width"),gl.enableVertexAttribArray(t.vertexWidthAttribute)),t==noNormalShader||e||(t.vertexNormalAttribute=gl.getAttribLocation(t,"normal"),gl.enableVertexAttribArray(t.vertexNormalAttribute)),t.vertexMaterialAttribute=gl.getAttribLocation(t,"materialIndex"),gl.enableVertexAttribArray(t.vertexMaterialAttribute),t.projViewMatUniform=gl.getUniformLocation(t,"projViewMat"),t.viewMatUniform=gl.getUniformLocation(t,"viewMat"),t.normMatUniform=gl.getUniformLocation(t,"normMat"),t!=colorShader&&t!=transparentShader||(t.vertexColorAttribute=gl.getAttribLocation(t,"color"),gl.enableVertexAttribArray(t.vertexColorAttribute));for(let e=0;e<Materials.length;++e)Materials[e].setUniform(t,"Materials",e);for(let e=0;e<Lights.length;++e)Lights[e].setUniform(t,"Lights",e);gl.uniformMatrix4fv(t.projViewMatUniform,!1,projViewMat),gl.uniformMatrix4fv(t.viewMatUniform,!1,viewMat),gl.uniformMatrix3fv(t.normMatUniform,!1,normMat)}function handleMouseDown(t){mouseDownOrTouchActive=!0,lastMouseX=t.clientX,lastMouseY=t.clientY}let pinchStart,touchStartTime,pinch=!1;function pinchDistance(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function handleTouchStart(t){t.preventDefault();let e=t.targetTouches;swipe=rotate=pinch=!1,zooming||(1!=e.length||mouseDownOrTouchActive||(touchStartTime=(new Date).getTime(),touchId=e[0].identifier,lastMouseX=e[0].pageX,lastMouseY=e[0].pageY),2!=e.length||mouseDownOrTouchActive||(touchId=e[0].identifier,pinchStart=pinchDistance(e),pinch=!0))}function handleMouseUpOrTouchEnd(t){mouseDownOrTouchActive=!1}function rotateScene(t,e,i,r,a){if(t==i&&e==r)return;let[s,n]=arcball([t,-e],[i,-r]);mat4.fromRotation(rotMats,2*a*ArcballFactor*s/lastzoom,n),mat4.multiply(rotMat,rotMats,rotMat)}function shiftScene(t,e,i,r){let a=1/lastzoom;shift.x+=(i-t)*a*halfCanvasWidth,shift.y-=(r-e)*a*halfCanvasHeight}function panScene(t,e,i,r){orthographic?shiftScene(t,e,i,r):(center.x+=(i-t)*(viewParam.xmax-viewParam.xmin),center.y-=(r-e)*(viewParam.ymax-viewParam.ymin))}function updateViewMatrix(){COBTarget(viewMat,rotMat),mat4.translate(viewMat,viewMat,[center.x,center.y,0]),mat3.fromMat4(viewMat3,viewMat),mat3.invert(normMat,viewMat3),mat4.multiply(projViewMat,projMat,viewMat)}function capzoom(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;Zoom<=e&&(Zoom=e),Zoom>=t&&(Zoom=t),Zoom!=lastzoom&&(remesh=!0),lastzoom=Zoom}function zoomImage(t){let e=zoomStep*halfCanvasHeight*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(zoomFactor);Math.abs(e)<i&&(Zoom*=zoomFactor**e,capzoom())}function normMouse(t){let e=t[0],i=t[1],r=Math.hypot(e,i);return r>1&&(denom=1/r,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function arcball(t,e){let i=normMouse(t),r=normMouse(e),a=dot(i,r);return a>1?a=1:a<-1&&(a=-1),[Math.acos(a),unit(cross(i,r))]}function zoomScene(t,e,i,r){zoomImage(e-r)}const DRAGMODE_ROTATE=1,DRAGMODE_SHIFT=2,DRAGMODE_ZOOM=3,DRAGMODE_PAN=4;function processDrag(t,e,i,r=1){let a;switch(i){case DRAGMODE_ROTATE:a=rotateScene;break;case DRAGMODE_SHIFT:a=shiftScene;break;case DRAGMODE_ZOOM:a=zoomScene;break;case DRAGMODE_PAN:a=panScene;break;default:a=((t,e,i,r)=>{})}a((lastMouseX-halfCanvasWidth)/halfCanvasWidth,(lastMouseY-halfCanvasHeight)/halfCanvasHeight,(t-halfCanvasWidth)/halfCanvasWidth,(e-halfCanvasHeight)/halfCanvasHeight,r),lastMouseX=t,lastMouseY=e,setProjection(),redraw=!0}function handleKey(t){let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":home();break;case"+":case"=":case">":expand();break;case"-":case"_":case"<":shrink()}e.length>0&&(mat4.rotate(rotMat,rotMat,.1,e),updateViewMatrix(),redraw=!0)}function handleMouseWheel(t){t.deltaY<0?Zoom*=zoomFactor:Zoom/=zoomFactor,capzoom(),setProjection(),redraw=!0}function handleMouseMove(t){if(!mouseDownOrTouchActive)return;let e;processDrag(t.clientX,t.clientY,e=t.getModifierState("Control")?DRAGMODE_SHIFT:t.getModifierState("Shift")?DRAGMODE_ZOOM:t.getModifierState("Alt")?DRAGMODE_PAN:DRAGMODE_ROTATE)}let indexExt,zooming=!1,swipe=!1,rotate=!1;function handleTouchMove(t){if(t.preventDefault(),zooming)return;let e=t.targetTouches;if(!pinch&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,r=t-lastMouseX,a=i-lastMouseY,s=r*r+a*a<=shiftHoldDistance*shiftHoldDistance;if(s&&!swipe&&!rotate&&(new Date).getTime()-touchStartTime>shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(vibrateTime),swipe=!0),swipe)processDrag(t,i,DRAGMODE_SHIFT);else if(!s){rotate=!0,processDrag(e[0].pageX,e[0].pageY,DRAGMODE_ROTATE,.5)}}if(pinch&&!swipe&&2==e.length&&touchId==e[0].identifier){let t=pinchDistance(e),i=t-pinchStart;zooming=!0,(i*=zoomPinchFactor)>zoomPinchCap&&(i=zoomPinchCap),i<-zoomPinchCap&&(i=-zoomPinchCap),zoomImage(i/size2),pinchStart=t,swipe=rotate=zooming=!1,setProjection(),redraw=!0}}function setBuffer(){positionBuffer=gl.createBuffer(),materialBuffer=gl.createBuffer(),colorBuffer=gl.createBuffer(),indexBuffer=gl.createBuffer(),indexExt=gl.getExtension("OES_element_index_uint")}let pixelShader,noNormalShader,materialShader,colorShader,transparentShader,zbuffer=[];function transformVertices(t){let e=viewMat[2],i=viewMat[6],r=viewMat[10];zbuffer.length=t.length;for(let a=0;a<t.length;++a){let s=6*a;zbuffer[a]=e*t[s]+i*t[s+1]+r*t[s+2]}}function draw(){gl.clearColor(1,1,1,1),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT),material0Data.clear(),material1Data.clear(),materialData.clear(),colorData.clear(),triangleData.clear(),transparentData.clear(),P.forEach(function(t){t.render()}),drawBuffer(material0Data,pixelShader),drawBuffer(material1Data,noNormalShader),drawBuffer(materialData,materialShader),drawBuffer(colorData,colorShader),drawBuffer(triangleData,transparentShader);let t=transparentData.indices;if(t.length>0){transformVertices(transparentData.vertices);let e=t.length/3,i=Array(e).fill().map((t,e)=>e);i.sort(function(e,i){let r=3*e;Ia=t[r],Ib=t[r+1],Ic=t[r+2];let a=3*i;return IA=t[a],IB=t[a+1],IC=t[a+2],zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic]<zbuffer[IA]+zbuffer[IB]+zbuffer[IC]?-1:1});let r=Array(t.length);for(let a=0;a<e;++a){let e=3*i[a];r[3*a]=t[e],r[3*a+1]=t[e+1],r[3*a+2]=t[e+2]}gl.depthMask(!1),drawBuffer(transparentData,transparentShader,r),gl.depthMask(!0)}remesh=!1}function tick(){requestAnimationFrame(tick),redraw&&(draw(),redraw=!1)}function setDimensions(t,e,i,r){let a=t/e,s=1/lastzoom,n=i/t*lastzoom,o=r/e*lastzoom;if(orthographic){let t=B[0]-b[0],e=B[1]-b[1];if(t<e*a){let t=.5*e*a*s,i=2*t*n,r=e*s*o;viewParam.xmin=-t-i,viewParam.xmax=t-i,viewParam.ymin=b[1]*s-r,viewParam.ymax=B[1]*s-r}else{let e=.5*t/(a*Zoom),i=t*s*n,r=2*e*o;viewParam.xmin=b[0]*s-i,viewParam.xmax=B[0]*s-i,viewParam.ymin=-e-r,viewParam.ymax=e-r}}else{let t=H*s,e=t*a,i=2*e*n,r=2*t*o;viewParam.xmin=-e-i,viewParam.xmax=e-i,viewParam.ymin=-t-r,viewParam.ymax=t-r}}function setProjection(){setDimensions(canvasWidth,canvasHeight,shift.x,shift.y),(orthographic?mat4.ortho:mat4.frustum)(projMat,viewParam.xmin,viewParam.xmax,viewParam.ymin,viewParam.ymax,-viewParam.zmax,-viewParam.zmin),updateViewMatrix()}function initProjection(){H=-Math.tan(.5*angle)*B[2],center.x=center.y=0,center.z=.5*(b[2]+B[2]),lastzoom=Zoom=Zoom0,viewParam.zmin=b[2],viewParam.zmax=B[2],shift.x=shift.y=0}function setViewport(){gl.viewportWidth=canvasWidth,gl.viewportHeight=canvasHeight,gl.viewport(0,0,gl.viewportWidth,gl.viewportHeight),home()}function setCanvas(){canvas.width=canvasWidth,canvas.height=canvasHeight,size2=Math.hypot(canvasWidth,canvasHeight),halfCanvasWidth=.5*canvasWidth,halfCanvasHeight=.5*canvasHeight}function setsize(t,e){t>maxViewportWidth&&(t=maxViewportWidth),e>maxViewportHeight&&(e=maxViewportHeight),shift.x*=t/canvasWidth,shift.y*=e/canvasHeight,canvasWidth=t,canvasHeight=e,setCanvas(),setViewport()}function expand(){setsize(canvasWidth*resizeStep+.5,canvasHeight*resizeStep+.5)}function shrink(){setsize(Math.max(canvasWidth/resizeStep+.5,1),Math.max(canvasHeight/resizeStep+.5,1))}function webGLStart(){if(canvas=document.getElementById("Asymptote"),absolute)canvasWidth*=window.devicePixelRatio,canvasHeight*=window.devicePixelRatio;else{0==canvas.width&&(canvas.width=Math.max(window.innerWidth-windowTrim,windowTrim)),0==canvas.height&&(canvas.height=Math.max(window.innerHeight-windowTrim,windowTrim));let t=canvasWidth/canvasHeight;canvas.width>canvas.height*t?canvas.width=Math.min(canvas.height*t,canvas.width):canvas.height=Math.min(canvas.width/t,canvas.height),canvas.width>0&&(canvasWidth=canvas.width),canvas.height>0&&(canvasHeight=canvas.height)}setCanvas(),ArcballFactor=1+8*Math.hypot(viewportmargin[0],viewportmargin[1])/size2,initGL(),gl.enable(gl.BLEND),gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA),gl.enable(gl.DEPTH_TEST),setViewport(),noNormalShader=initShader(),pixelShader=initShader(["WIDTH"]),materialShader=initShader(["NORMAL"]),colorShader=initShader(["NORMAL","COLOR"]),transparentShader=initShader(["NORMAL","COLOR","TRANSPARENT"]),setBuffer(),canvas.onmousedown=handleMouseDown,document.onmouseup=handleMouseUpOrTouchEnd,document.onmousemove=handleMouseMove,canvas.onkeydown=handleKey,document.onwheel=handleMouseWheel,canvas.addEventListener("touchstart",handleTouchStart,!1),canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchmove",handleTouchMove,!1),document.addEventListener("keydown",handleKey,!1),tick()}
+/*@license for gl-matrix mat3 and mat4 functions:
+Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
+
+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.*/ \ No newline at end of file
diff --git a/graphics/asymptote/bbox3.h b/graphics/asymptote/bbox3.h
index b531be4e91..aa50251637 100644
--- a/graphics/asymptote/bbox3.h
+++ b/graphics/asymptote/bbox3.h
@@ -10,6 +10,10 @@
#include "triple.h"
+// For CYGWIN
+#undef near
+#undef far
+
namespace camp {
// The box that encloses a path
@@ -17,43 +21,43 @@ struct bbox3 {
bool empty;
double left;
double bottom;
- double lower;
+ double near;
double right;
double top;
- double upper;
+ double far;
// Start bbox3 about the origin
bbox3()
- : empty(true), left(0.0), bottom(0.0), lower(0.0),
- right(0.0), top(0.0), upper(0.0)
+ : empty(true), left(0.0), bottom(0.0), near(0.0),
+ right(0.0), top(0.0), far(0.0)
{
}
- bbox3(double left, double bottom, double lower,
- double right, double top, double upper)
- : empty(false), left(left), bottom(bottom), lower(lower),
- right(right), top(top), upper(upper)
+ bbox3(double left, double bottom, double near,
+ double right, double top, double far)
+ : empty(false), left(left), bottom(bottom), near(near),
+ right(right), top(top), far(far)
{
}
// Start a bbox3 with a point
bbox3(double x, double y, double z)
- : empty(false), left(x), bottom(y), lower(z), right(x), top(y), upper(z)
+ : empty(false), left(x), bottom(y), near(z), right(x), top(y), far(z)
{
}
// Start a bbox3 with a point
bbox3(const triple& v)
- : empty(false), left(v.getx()), bottom(v.gety()), lower(v.getz()),
- right(v.getx()), top(v.gety()), upper(v.getz())
+ : empty(false), left(v.getx()), bottom(v.gety()), near(v.getz()),
+ right(v.getx()), top(v.gety()), far(v.getz())
{
}
// Start a bbox3 with 2 points
bbox3(const triple& m, const triple& M)
: empty(false),
- left(m.getx()), bottom(m.gety()), lower(m.getz()),
- right(M.getx()), top(M.gety()), upper(M.getz())
+ left(m.getx()), bottom(m.gety()), near(m.getz()),
+ right(M.getx()), top(M.gety()), far(M.getz())
{
}
@@ -68,7 +72,7 @@ struct bbox3 {
if (empty) {
left = right = x;
top = bottom = y;
- lower = upper = z;
+ near = far = z;
empty = false;
}
else {
@@ -80,10 +84,10 @@ struct bbox3 {
bottom = y;
else if(y > top)
top = y;
- if(z < lower)
- lower = z;
- else if(z > upper)
- upper = z;
+ if(z < near)
+ near = z;
+ else if(z > far)
+ far = z;
}
}
@@ -98,10 +102,25 @@ struct bbox3 {
bottom = y;
else if(y > top)
top = y;
- if(z < lower)
- lower = z;
- else if(z > upper)
- upper = z;
+ if(z < near)
+ near = z;
+ else if(z > far)
+ far = z;
+ }
+
+ // Add (x,y) pair to a nonempty bbox3
+ void addnonempty(pair v)
+ {
+ double x=v.getx();
+ if(x < left)
+ left = x;
+ else if(x > right)
+ right = x;
+ double y=v.gety();
+ if(y < bottom)
+ bottom = y;
+ else if(y > top)
+ top = y;
}
// Add a point to a nonempty bbox3
@@ -131,13 +150,13 @@ struct bbox3 {
top = y;
times.top = t;
}
- if(z < lower) {
- lower = z;
- times.lower=t;
+ if(z < near) {
+ near = z;
+ times.near=t;
}
- else if(z > upper) {
- upper = z;
- times.upper=t;
+ else if(z > far) {
+ far = z;
+ times.far=t;
}
}
@@ -148,32 +167,19 @@ struct bbox3 {
}
triple Min() const {
- return triple(left,bottom,lower);
+ return triple(left,bottom,near);
}
triple Max() const {
- return triple(right,top,upper);
+ return triple(right,top,far);
}
- // transform bbox3 by 4x4 matrix
- void transform(const double* m)
- {
- const double xmin = left;
- const double ymin = bottom;
- const double zmin = lower;
- const double xmax = right;
- const double ymax = top;
- const double zmax = upper;
-
- empty = true;
- add(m*triple(xmin,ymin,zmin));
- addnonempty(m*triple(xmin,ymin,zmax));
- addnonempty(m*triple(xmin,ymax,zmin));
- addnonempty(m*triple(xmin,ymax,zmax));
- addnonempty(m*triple(xmax,ymin,zmin));
- addnonempty(m*triple(xmax,ymin,zmax));
- addnonempty(m*triple(xmax,ymax,zmin));
- addnonempty(m*triple(xmax,ymax,zmax));
+ pair Min2() const {
+ return pair(left,bottom);
+ }
+
+ pair Max2() const {
+ return pair(right,top);
}
friend ostream& operator << (ostream& out, const bbox3& b)
diff --git a/graphics/asymptote/beziercurve.cc b/graphics/asymptote/beziercurve.cc
index ccf3267e6e..2b33d552a3 100644
--- a/graphics/asymptote/beziercurve.cc
+++ b/graphics/asymptote/beziercurve.cc
@@ -10,28 +10,30 @@
namespace camp {
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
-std::vector<vertexData1> BezierCurve::vertexbuffer;
-std::vector<GLuint> BezierCurve::indices;
-
-std::vector<pixelData> Pixel::vertexbuffer;
-
-GLuint BezierCurve::vertsBufferIndex;
-GLuint BezierCurve::elemBufferIndex;
-
-void BezierCurve::init(double res, const triple& Min, const triple& Max)
+void BezierCurve::init(double res)
{
this->res=res;
res2=res*res;
- this->Min=Min;
- this->Max=Max;
-
- const size_t nbuffer=10000;
- vertexbuffer.reserve(nbuffer);
- indices.reserve(nbuffer);
+
+ MaterialIndex=materialIndex;
}
+void BezierCurve::render(const triple *p, bool straight)
+{
+ GLuint i0=data.vertex1(p[0]);
+ GLuint i3=data.vertex1(p[3]);
+
+ if(straight) {
+ std::vector<GLuint> &q=data.indices;
+ q.push_back(i0);
+ q.push_back(i3);
+ } else
+ render(p,i0,i3);
+ append();
+}
+
// Use a uniform partition to draw a Bezier patch.
// p is an array of 4 triples representing the control points.
// Ii are the vertices indices.
@@ -41,11 +43,12 @@ void BezierCurve::render(const triple *p, GLuint I0, GLuint I1)
triple p1=p[1];
triple p2=p[2];
triple p3=p[3];
- if(Distance1(p0,p1,p2,p3) < res2) { // Segment is flat
+ if(Straightness(p0,p1,p2,p3) < res2) { // Segment is flat
triple P[]={p0,p3};
if(!offscreen(2,P)) {
- indices.push_back(I0);
- indices.push_back(I1);
+ std::vector<GLuint> &q=data.indices;
+ q.push_back(I0);
+ q.push_back(I1);
}
} else { // Segment is not flat
if(offscreen(4,p)) return;
@@ -59,123 +62,13 @@ void BezierCurve::render(const triple *p, GLuint I0, GLuint I1)
triple s0[]={p0,m0,m3,m5};
triple s1[]={m5,m4,m2,p3};
- GLuint i0=vertex(m5);
+ GLuint i0=data.vertex1(m5);
render(s0,I0,i0);
render(s1,i0,I1);
}
}
-void BezierCurve::render(const triple *p, bool straight)
-{
- GLuint i0=vertex(p[0]);
- GLuint i3=vertex(p[3]);
-
- if(straight) {
- indices.push_back(i0);
- indices.push_back(i3);
- } else
- render(p,i0,i3);
-}
-
-void BezierCurve::draw()
-{
- if(indices.size() == 0)
- return;
-
- const size_t size=sizeof(GLfloat);
- static const size_t bytestride=sizeof(vertexData1);
-
- GLuint vao;
- glGenVertexArrays(1,&vao);
- glBindVertexArray(vao);
- createBuffers();
-
- glBindBuffer(GL_ARRAY_BUFFER,vertsBufferIndex);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elemBufferIndex);
-
- camp::setUniforms(noNormalShader);
-
- const GLint posAttrib=glGetAttribLocation(noNormalShader, "position");
- const GLint materialAttrib=glGetAttribLocation(noNormalShader,"material");
-
- glVertexAttribPointer(posAttrib,3,GL_FLOAT,GL_FALSE,bytestride,(void *) 0);
- glEnableVertexAttribArray(posAttrib);
-
- glVertexAttribIPointer(materialAttrib,1,GL_INT,bytestride,(void *) (3*size));
- glEnableVertexAttribArray(materialAttrib);
-
- glFlush(); // Workaround broken MSWindows drivers for Intel GPU
- glDrawElements(GL_LINES,indices.size(),GL_UNSIGNED_INT,(void*)(0));
-
- glDisableVertexAttribArray(posAttrib);
- glDisableVertexAttribArray(materialAttrib);
-
- deleteUniforms();
-
- glBindBuffer(GL_ARRAY_BUFFER,0);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
-
- glBindVertexArray(0);
- glDeleteVertexArrays(1,&vao);
-
- glDeleteBuffers(1,&vertsBufferIndex);
- glDeleteBuffers(1,&elemBufferIndex);
-}
-
-void Pixel::queue(const triple& p, double width)
-{
- vertex(p,width);
-}
-
-void Pixel::draw()
-{
- if(vertexbuffer.size() == 0)
- return;
-
- const size_t size=sizeof(GLfloat);
- static const size_t bytestride=sizeof(pixelData);
-
- GLuint vbo;
- glGenBuffers(1,&vbo);
-
- GLuint vao;
- glGenVertexArrays(1,&vao);
- glBindVertexArray(vao);
-
- glBindBuffer(GL_ARRAY_BUFFER,vbo);
- glBufferData(GL_ARRAY_BUFFER,bytestride*vertexbuffer.size(),
- vertexbuffer.data(),GL_STATIC_DRAW);
-
- camp::setUniforms(pixelShader);
-
- const GLint posAttrib=glGetAttribLocation(pixelShader, "position");
- const GLint materialAttrib=glGetAttribLocation(pixelShader,"material");
- const GLint widthAttrib=glGetAttribLocation(pixelShader,"width");
-
- glVertexAttribPointer(posAttrib,3,GL_FLOAT,GL_FALSE,bytestride,(void*)(0));
- glEnableVertexAttribArray(posAttrib);
-
- glVertexAttribIPointer(materialAttrib,1,GL_INT,bytestride,(void *) (3*size));
- glEnableVertexAttribArray(materialAttrib);
-
- glVertexAttribPointer(widthAttrib,1,GL_FLOAT,GL_FALSE,bytestride,(void *) (4*size));
- glEnableVertexAttribArray(widthAttrib);
-
- glDrawArrays(GL_POINTS,0,vertexbuffer.size());
-
- glDisableVertexAttribArray(posAttrib);
- glDisableVertexAttribArray(materialAttrib);
- glDisableVertexAttribArray(widthAttrib);
-
- deleteUniforms();
-
- glBindBuffer(GL_ARRAY_BUFFER,0);
-
- glBindVertexArray(0);
- glDeleteVertexArrays(1,&vao);
-}
-
#endif
} //namespace camp
diff --git a/graphics/asymptote/beziercurve.h b/graphics/asymptote/beziercurve.h
index 573b48a792..e3c460e315 100644
--- a/graphics/asymptote/beziercurve.h
+++ b/graphics/asymptote/beziercurve.h
@@ -17,116 +17,66 @@ namespace camp {
extern const double Fuzz;
extern const double Fuzz2;
-class vertexData1 {
-public:
- GLfloat position[3];
- GLint material;
- vertexData1() {};
- vertexData1(const triple& v) {
- position[0]=v.getx();
- position[1]=v.gety();
- position[2]=v.getz();
- material=drawElement::materialIndex;
- }
-};
-
-class pixelData {
-public:
- GLfloat position[3];
- GLint material;
- GLfloat width;
- pixelData() {};
- pixelData(const triple& v, double width) : width(width) {
- position[0]=v.getx();
- position[1]=v.gety();
- position[2]=v.getz();
- material=drawElement::materialIndex;
- }
-};
-
struct BezierCurve
{
- static std::vector<vertexData1> vertexbuffer;
- static std::vector<GLuint> indices;
+ vertexBuffer data;
double res,res2;
- triple Min,Max;
-
- static GLuint vertsBufferIndex;
- static GLuint elemBufferIndex;
+ bool Onscreen;
- void init(double res, const triple& Min, const triple& Max);
+ void init(double res);
-// Store the vertex v in the buffer.
- static GLuint vertex(const triple &v) {
- size_t nvertices=vertexbuffer.size();
- vertexbuffer.push_back(vertexData1(v));
- return nvertices;
+ // Approximate bounds by bounding box of control polyhedron.
+ bool offscreen(size_t n, const triple *v) {
+ if(bbox2(n,v).offscreen()) {
+ Onscreen=false;
+ return true;
+ }
+ return false;
}
-
- void createBuffers() {
- glGenBuffers(1,&vertsBufferIndex);
- glGenBuffers(1,&elemBufferIndex);
- //vbo
- registerBuffer(vertexbuffer,vertsBufferIndex);
-
- //ebo
- registerBuffer(indices,elemBufferIndex);
- }
+ void render(const triple *p, bool straight);
+ void render(const triple *p, GLuint I0, GLuint I1);
-// Approximate bounds by bounding box of control polyhedron.
- bool offscreen(size_t n, const triple *v) {
- double x,y,z;
- double X,Y,Z;
+ void append() {
+ material1Data.append1(data);
- boundstriples(x,y,z,X,Y,Z,n,v);
- return
- X < Min.getx() || x > Max.getx() ||
- Y < Min.gety() || y > Max.gety() ||
- Z < Min.getz() || z > Max.getz();
- }
-
- static void clear() {
- vertexbuffer.clear();
- indices.clear();
+ if(material1Data.vertices1.size() >= gl::maxvertices) {
+ drawBuffer(material1Data,noNormalShader);
+ material1Data.clear();
+ gl::forceRemesh=true;
+ }
}
- ~BezierCurve() {}
-
- void render(const triple *p, GLuint I0, GLuint I1);
- void render(const triple *p, bool straight);
-
- void queue(const triple *g, bool straight, double ratio,
- const triple& Min, const triple& Max) {
- init(pixel*ratio,Min,Max);
+ void queue(const triple *g, bool straight, double ratio) {
+ data.clear();
+ Onscreen=true;
+ init(pixel*ratio);
render(g,straight);
}
- void draw();
- void draw(const triple *g, bool straight, double ratio,
- const triple& Min, const triple& Max) {
- queue(g,straight,ratio,Min,Max);
- draw();
- }
};
struct Pixel
{
- static std::vector<pixelData> vertexbuffer;
+ vertexBuffer data;
-// Store the vertex v in the buffer.
- static void vertex(const triple &v, double width) {
- vertexbuffer.push_back(pixelData(v,width));
+ void append() {
+ material0Data.append0(data);
+
+ if(material0Data.vertices0.size() >= gl::maxvertices) {
+ drawBuffer(material0Data,pixelShader);
+ material0Data.clear();
+ gl::forceRemesh=true;
+ }
}
- static void clear() {
- vertexbuffer.clear();
+ void queue(const triple& p, double width) {
+ data.clear();
+ MaterialIndex=materialIndex;
+ data.indices.push_back(data.vertex0(p,width));
+ append();
}
- Pixel() {}
- ~Pixel() {}
-
- void queue(const triple& p, double width);
void draw();
};
diff --git a/graphics/asymptote/bezierpatch.cc b/graphics/asymptote/bezierpatch.cc
index c97887ef64..e0cbf4788e 100644
--- a/graphics/asymptote/bezierpatch.cc
+++ b/graphics/asymptote/bezierpatch.cc
@@ -13,31 +13,20 @@ namespace camp {
using ::orient2d;
using ::orient3d;
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
-const size_t nbuffer=10000; // Initial size of dynamic buffers
+int MaterialIndex;
-std::vector<vertexData> BezierPatch::vertexbuffer;
-std::vector<VertexData> BezierPatch::Vertexbuffer;
-std::vector<VertexData> BezierPatch::tVertexbuffer;
-std::vector<GLuint> BezierPatch::indices;
-std::vector<GLuint> BezierPatch::Indices;
-std::vector<GLuint> BezierPatch::tIndices;
-
-GLuint BezierPatch::nvertices=0;
-GLuint BezierPatch::Nvertices=0;
-GLuint BezierPatch::Ntvertices=0;
-
-//std::vector<GLuint>& I=BezierPatch::tIndices;
-//std::vector<VertexData>& V=BezierPatch::tVertexbuffer;
+//std::vector<GLuint>& I=transparentData.Indices;
+//std::vector<VertexData>& V=transparentData.Vertices;
bool colors;
std::vector<GLfloat> zbuffer;
std::vector<GLfloat> xbuffer;
std::vector<GLfloat> ybuffer;
-std::vector<GLfloat> xmin,ymin,zmin;
-std::vector<GLfloat> xmax,ymax,zmax;
+//std::vector<GLfloat> xmin,ymin,zmin;
+//std::vector<GLfloat> xmax,ymax,zmax;
std::vector<GLfloat> zsum;
inline double min(double a, double b, double c)
@@ -272,11 +261,11 @@ void split(unsigned i3, GLuint ia, GLuint ib, GLuint ic,
interp(cd,ca,cb,td);
interp(ce,ca,cc,te);
- id=BezierPatch::tVertex(d,nd,cd);
- ie=BezierPatch::tVertex(e,ne,ce);
+ id=data.Vertex(d,nd,cd);
+ ie=data.Vertex(e,ne,ce);
} else {
- id=BezierPatch::tVertex(d,nd);
- ie=BezierPatch::tVertex(e,ne);
+ id=data.Vertex(d,nd);
+ ie=data.Vertex(e,ne);
}
I[i3]=ia;
@@ -293,37 +282,96 @@ void split(unsigned i3, GLuint ia, GLuint ib, GLuint ic,
}
#endif
-void BezierPatch::init(double res, const triple& Min, const triple& Max,
- bool transparent, GLfloat *colors)
+void BezierPatch::init(double res)
{
res2=res*res;
Res2=BezierFactor*BezierFactor*res2;
Epsilon=FillFactor*res;
- this->Min=Min;
- this->Max=Max;
+ MaterialIndex=transparent ?
+ (color ? -1-materialIndex : 1+materialIndex) : materialIndex;
+
+ pvertex=transparent ? &vertexBuffer::tvertex : &vertexBuffer::vertex;
+}
+
+void BezierPatch::render(const triple *p, bool straight, GLfloat *c0)
+{
+ triple p0=p[0];
+ epsilon=0;
+ for(unsigned i=1; i < 16; ++i)
+ epsilon=max(epsilon,abs2(p[i]-p0));
+ epsilon *= Fuzz4;
+
+ triple p3=p[3];
+ triple p12=p[12];
+ triple p15=p[15];
- if(transparent) {
- tVertexbuffer.reserve(nbuffer);
- tIndices.reserve(nbuffer);
- pindices=&tIndices;
- pvertex=&tvertex;
- pVertex=&tVertex;
+ triple n0=normal(p3,p[2],p[1],p0,p[4],p[8],p12);
+ if(n0 == 0.0) {
+ n0=normal(p3,p[2],p[1],p0,p[13],p[14],p15);
+ if(n0 == 0.0) n0=normal(p15,p[11],p[7],p3,p[4],p[8],p12);
+ }
+
+ triple n1=normal(p0,p[4],p[8],p12,p[13],p[14],p15);
+ if(n1 == 0.0) {
+ n1=normal(p0,p[4],p[8],p12,p[11],p[7],p3);
+ if(n1 == 0.0) n1=normal(p3,p[2],p[1],p0,p[13],p[14],p15);
+ }
+
+ triple n2=normal(p12,p[13],p[14],p15,p[11],p[7],p3);
+ if(n2 == 0.0) {
+ n2=normal(p12,p[13],p[14],p15,p[2],p[1],p0);
+ if(n2 == 0.0) n2=normal(p0,p[4],p[8],p12,p[11],p[7],p3);
+ }
+
+ triple n3=normal(p15,p[11],p[7],p3,p[2],p[1],p0);
+ if(n3 == 0.0) {
+ n3=normal(p15,p[11],p[7],p3,p[4],p[8],p12);
+ if(n3 == 0.0) n3=normal(p12,p[13],p[14],p15,p[2],p[1],p0);
+ }
+
+ GLuint i0,i1,i2,i3;
+ if(color) {
+ GLfloat *c1=c0+4;
+ GLfloat *c2=c0+8;
+ GLfloat *c3=c0+12;
+
+ i0=data.Vertex(p0,n0,c0);
+ i1=data.Vertex(p12,n1,c1);
+ i2=data.Vertex(p15,n2,c2);
+ i3=data.Vertex(p3,n3,c3);
+
+ if(!straight)
+ render(p,i0,i1,i2,i3,p0,p12,p15,p3,false,false,false,false,
+ c0,c1,c2,c3);
} else {
- if(colors) {
- Vertexbuffer.reserve(nbuffer);
- Indices.reserve(nbuffer);
- pindices=&Indices;
- pVertex=&Vertex;
- } else {
- vertexbuffer.reserve(nbuffer);
- indices.reserve(nbuffer);
- pindices=&indices;
- pvertex=&vertex;
+ i0=(data.*pvertex)(p0,n0);
+ i1=(data.*pvertex)(p12,n1);
+ i2=(data.*pvertex)(p15,n2);
+ i3=(data.*pvertex)(p3,n3);
+
+ if(!straight)
+ render(p,i0,i1,i2,i3,p0,p12,p15,p3,false,false,false,false);
+ }
+
+ if(straight) {
+ std::vector<GLuint> &q=data.indices;
+ triple Pa[]={p0,p12,p15};
+ if(!offscreen(3,Pa)) {
+ q.push_back(i0);
+ q.push_back(i1);
+ q.push_back(i2);
+ }
+ triple Pb[]={p0,p15,p3};
+ if(!offscreen(3,Pb)) {
+ q.push_back(i0);
+ q.push_back(i2);
+ q.push_back(i3);
}
}
+ append();
}
-
+
// Use a uniform partition to draw a Bezier patch.
// p is an array of 16 triples representing the control points.
// Pi are the (possibly) adjusted vertices indexed by Ii.
@@ -334,19 +382,22 @@ void BezierPatch::render(const triple *p,
bool flat0, bool flat1, bool flat2, bool flat3,
GLfloat *C0, GLfloat *C1, GLfloat *C2, GLfloat *C3)
{
- if(Distance(p) < res2) { // Patch is flat
- triple P[]={P0,P1,P2,P3};
- if(!offscreen(4,P)) {
- std::vector<GLuint> &p=*pindices;
- p.push_back(I0);
- p.push_back(I1);
- p.push_back(I2);
- p.push_back(I0);
- p.push_back(I2);
- p.push_back(I3);
+ if(Distance(p) < res2) { // Bezier patch is flat
+ triple Pa[]={P0,P1,P2};
+ std::vector<GLuint> &q=data.indices;
+ if(!offscreen(3,Pa)) {
+ q.push_back(I0);
+ q.push_back(I1);
+ q.push_back(I2);
+ }
+ triple Pb[]={P0,P2,P3};
+ if(!offscreen(3,Pb)) {
+ q.push_back(I0);
+ q.push_back(I2);
+ q.push_back(I3);
}
} else { // Patch is not flat
- if(offscreen(16,p)) return;
+ if(offscreen(16,p)) return;
/* Control points are indexed as follows:
Coordinate
@@ -480,7 +531,7 @@ void BezierPatch::render(const triple *p,
else m3=s3[0];
}
- if(C0) {
+ if(color) {
GLfloat c0[4],c1[4],c2[4],c3[4],c4[4];
for(size_t i=0; i < 4; ++i) {
c0[i]=0.5*(C0[i]+C1[i]);
@@ -490,11 +541,12 @@ void BezierPatch::render(const triple *p,
c4[i]=0.5*(c0[i]+c2[i]);
}
- GLuint i0=pVertex(m0,n0,c0);
- GLuint i1=pVertex(m1,n1,c1);
- GLuint i2=pVertex(m2,n2,c2);
- GLuint i3=pVertex(m3,n3,c3);
- GLuint i4=pVertex(m4,n4,c4);
+ GLuint i0=data.Vertex(m0,n0,c0);
+ GLuint i1=data.Vertex(m1,n1,c1);
+ GLuint i2=data.Vertex(m2,n2,c2);
+ GLuint i3=data.Vertex(m3,n3,c3);
+ GLuint i4=data.Vertex(m4,n4,c4);
+
render(s0,I0,i0,i4,i3,P0,m0,m4,m3,flat0,false,false,flat3,
C0,c0,c4,c3);
render(s1,i0,I1,i1,i4,m0,P1,m1,m4,flat0,flat1,false,false,
@@ -504,11 +556,12 @@ void BezierPatch::render(const triple *p,
render(s3,i3,i4,i2,I3,m3,m4,m2,P3,false,false,flat2,flat3,
c3,c4,c2,C3);
} else {
- GLuint i0=pvertex(m0,n0);
- GLuint i1=pvertex(m1,n1);
- GLuint i2=pvertex(m2,n2);
- GLuint i3=pvertex(m3,n3);
- GLuint i4=pvertex(m4,n4);
+ GLuint i0=(data.*pvertex)(m0,n0);
+ GLuint i1=(data.*pvertex)(m1,n1);
+ GLuint i2=(data.*pvertex)(m2,n2);
+ GLuint i3=(data.*pvertex)(m3,n3);
+ GLuint i4=(data.*pvertex)(m4,n4);
+
render(s0,I0,i0,i4,i3,P0,m0,m4,m3,flat0,false,false,flat3);
render(s1,i0,I1,i1,i4,m0,P1,m1,m4,flat0,flat1,false,false);
render(s2,i4,i1,I2,i2,m4,m1,P2,m2,false,flat1,flat2,false);
@@ -517,68 +570,52 @@ void BezierPatch::render(const triple *p,
}
}
-void BezierPatch::render(const triple *p, bool straight, GLfloat *c0)
+void BezierTriangle::render(const triple *p, bool straight, GLfloat *c0)
{
triple p0=p[0];
epsilon=0;
- for(unsigned i=1; i < 16; ++i)
+ for(int i=1; i < 10; ++i)
epsilon=max(epsilon,abs2(p[i]-p0));
epsilon *= Fuzz4;
- triple p3=p[3];
- triple p12=p[12];
- triple p15=p[15];
-
- triple n0=normal(p3,p[2],p[1],p0,p[4],p[8],p12);
- if(n0 == 0.0) n0=normal(p3,p[2],p[1],p0,p[13],p[14],p15);
- if(n0 == 0.0) n0=normal(p15,p[11],p[7],p3,p[4],p[8],p12);
-
- triple n1=normal(p0,p[4],p[8],p12,p[13],p[14],p15);
- if(n1 == 0.0) n1=normal(p0,p[4],p[8],p12,p[11],p[7],p3);
- if(n1 == 0.0) n1=normal(p3,p[2],p[1],p0,p[13],p[14],p15);
-
- triple n2=normal(p12,p[13],p[14],p15,p[11],p[7],p3);
- if(n2 == 0.0) n2=normal(p12,p[13],p[14],p15,p[2],p[1],p0);
- if(n2 == 0.0) n2=normal(p0,p[4],p[8],p12,p[11],p[7],p3);
-
- triple n3=normal(p15,p[11],p[7],p3,p[2],p[1],p0);
- if(n3 == 0.0) n3=normal(p15,p[11],p[7],p3,p[4],p[8],p12);
- if(n3 == 0.0) n3=normal(p12,p[13],p[14],p15,p[2],p[1],p0);
+ triple p6=p[6];
+ triple p9=p[9];
- GLuint I0,I1,I2,I3;
+ triple n0=normal(p9,p[5],p[2],p0,p[1],p[3],p6);
+ triple n1=normal(p0,p[1],p[3],p6,p[7],p[8],p9);
+ triple n2=normal(p6,p[7],p[8],p9,p[5],p[2],p0);
- if(c0) {
+ GLuint i0,i1,i2;
+ if(color) {
GLfloat *c1=c0+4;
GLfloat *c2=c0+8;
- GLfloat *c3=c0+12;
- I0=pVertex(p0,n0,c0);
- I1=pVertex(p12,n1,c1);
- I2=pVertex(p15,n2,c2);
- I3=pVertex(p3,n3,c3);
-
+ i0=data.Vertex(p0,n0,c0);
+ i1=data.Vertex(p6,n1,c1);
+ i2=data.Vertex(p9,n2,c2);
+
if(!straight)
- render(p,I0,I1,I2,I3,p0,p12,p15,p3,false,false,false,false,
- c0,c1,c2,c3);
+ render(p,i0,i1,i2,p0,p6,p9,false,false,false,c0,c1,c2);
} else {
- I0=pvertex(p0,n0);
- I1=pvertex(p12,n1);
- I2=pvertex(p15,n2);
- I3=pvertex(p3,n3);
+ i0=(data.*pvertex)(p0,n0);
+ i1=(data.*pvertex)(p6,n1);
+ i2=(data.*pvertex)(p9,n2);
if(!straight)
- render(p,I0,I1,I2,I3,p0,p12,p15,p3,false,false,false,false);
+ render(p,i0,i1,i2,p0,p6,p9,false,false,false);
}
if(straight) {
- pindices->push_back(I0);
- pindices->push_back(I1);
- pindices->push_back(I2);
- pindices->push_back(I0);
- pindices->push_back(I2);
- pindices->push_back(I3);
+ triple P[]={p0,p6,p9};
+ if(!offscreen(3,P)) {
+ std::vector<GLuint> &q=data.indices;
+ q.push_back(i0);
+ q.push_back(i1);
+ q.push_back(i2);
+ }
}
+ append();
}
// Use a uniform partition to draw a Bezier triangle.
@@ -591,13 +628,13 @@ void BezierTriangle::render(const triple *p,
bool flat0, bool flat1, bool flat2,
GLfloat *C0, GLfloat *C1, GLfloat *C2)
{
- if(Distance(p) < Res2) { // Triangle is flat
+ if(Distance(p) < Res2) { // Bezier triangle is flat
triple P[]={P0,P1,P2};
if(!offscreen(3,P)) {
- std::vector<GLuint> &p=*pindices;
- p.push_back(I0);
- p.push_back(I1);
- p.push_back(I2);
+ std::vector<GLuint> &q=data.indices;
+ q.push_back(I0);
+ q.push_back(I1);
+ q.push_back(I2);
}
} else { // Triangle is not flat
if(offscreen(10,p)) return;
@@ -723,103 +760,59 @@ void BezierTriangle::render(const triple *p,
// A kludge to remove subdivision cracks, only applied the first time
// an edge is found to be flat before the rest of the subpatch is.
- triple p0=0.5*(P1+P2);
+ triple m0=0.5*(P1+P2);
if(!flat0) {
if((flat0=Straightness(r300,p210,p120,u030) < res2))
- p0 -= Epsilon*unit(derivative(c[0],c[2],c[5],c[9])+
+ m0 -= Epsilon*unit(derivative(c[0],c[2],c[5],c[9])+
derivative(c[0],c[1],c[3],c[6]));
- else p0=r030;
+ else m0=r030;
}
- triple p1=0.5*(P2+P0);
+ triple m1=0.5*(P2+P0);
if(!flat1) {
if((flat1=Straightness(l003,p012,p021,u030) < res2))
- p1 -= Epsilon*unit(derivative(c[6],c[3],c[1],c[0])+
+ m1 -= Epsilon*unit(derivative(c[6],c[3],c[1],c[0])+
derivative(c[6],c[7],c[8],c[9]));
- else p1=l030;
+ else m1=l030;
}
- triple p2=0.5*(P0+P1);
+ triple m2=0.5*(P0+P1);
if(!flat2) {
if((flat2=Straightness(l003,p102,p201,r300) < res2))
- p2 -= Epsilon*unit(derivative(c[9],c[8],c[7],c[6])+
+ m2 -= Epsilon*unit(derivative(c[9],c[8],c[7],c[6])+
derivative(c[9],c[5],c[2],c[0]));
- else p2=l300;
+ else m2=l300;
}
- if(C0) {
+ if(color) {
GLfloat c0[4],c1[4],c2[4];
for(int i=0; i < 4; ++i) {
c0[i]=0.5*(C1[i]+C2[i]);
- c1[i]=0.5*(C0[i]+C2[i]);
+ c1[i]=0.5*(C2[i]+C0[i]);
c2[i]=0.5*(C0[i]+C1[i]);
}
- GLuint i0=pVertex(p0,n0,c0);
- GLuint i1=pVertex(p1,n1,c1);
- GLuint i2=pVertex(p2,n2,c2);
+ GLuint i0=data.Vertex(m0,n0,c0);
+ GLuint i1=data.Vertex(m1,n1,c1);
+ GLuint i2=data.Vertex(m2,n2,c2);
- render(l,I0,i2,i1,P0,p2,p1,false,flat1,flat2,C0,c2,c1);
- render(r,i2,I1,i0,p2,P1,p0,flat0,false,flat2,c2,C1,c0);
- render(u,i1,i0,I2,p1,p0,P2,flat0,flat1,false,c1,c0,C2);
- render(c,i0,i1,i2,p0,p1,p2,false,false,false,c0,c1,c2);
+ render(l,I0,i2,i1,P0,m2,m1,false,flat1,flat2,C0,c2,c1);
+ render(r,i2,I1,i0,m2,P1,m0,flat0,false,flat2,c2,C1,c0);
+ render(u,i1,i0,I2,m1,m0,P2,flat0,flat1,false,c1,c0,C2);
+ render(c,i0,i1,i2,m0,m1,m2,false,false,false,c0,c1,c2);
} else {
- GLuint i0=pvertex(p0,n0);
- GLuint i1=pvertex(p1,n1);
- GLuint i2=pvertex(p2,n2);
+ GLuint i0=(data.*pvertex)(m0,n0);
+ GLuint i1=(data.*pvertex)(m1,n1);
+ GLuint i2=(data.*pvertex)(m2,n2);
- render(l,I0,i2,i1,P0,p2,p1,false,flat1,flat2);
- render(r,i2,I1,i0,p2,P1,p0,flat0,false,flat2);
- render(u,i1,i0,I2,p1,p0,P2,flat0,flat1,false);
- render(c,i0,i1,i2,p0,p1,p2,false,false,false);
+ render(l,I0,i2,i1,P0,m2,m1,false,flat1,flat2);
+ render(r,i2,I1,i0,m2,P1,m0,flat0,false,flat2);
+ render(u,i1,i0,I2,m1,m0,P2,flat0,flat1,false);
+ render(c,i0,i1,i2,m0,m1,m2,false,false,false);
}
}
}
-void BezierTriangle::render(const triple *p, bool straight, GLfloat *c0)
-{
- triple p0=p[0];
- epsilon=0;
- for(int i=1; i < 10; ++i)
- epsilon=max(epsilon,abs2(p[i]-p0));
-
- epsilon *= Fuzz4;
-
- GLuint I0,I1,I2;
-
- triple p6=p[6];
- triple p9=p[9];
-
- triple n0=normal(p9,p[5],p[2],p0,p[1],p[3],p6);
- triple n1=normal(p0,p[1],p[3],p6,p[7],p[8],p9);
- triple n2=normal(p6,p[7],p[8],p9,p[5],p[2],p0);
-
- if(c0) {
- GLfloat *c1=c0+4;
- GLfloat *c2=c0+8;
-
- I0=pVertex(p0,n0,c0);
- I1=pVertex(p6,n1,c1);
- I2=pVertex(p9,n2,c2);
-
- if(!straight)
- render(p,I0,I1,I2,p0,p6,p9,false,false,false,c0,c1,c2);
- } else {
- I0=pvertex(p0,n0);
- I1=pvertex(p6,n1);
- I2=pvertex(p9,n2);
-
- if(!straight)
- render(p,I0,I1,I2,p0,p6,p9,false,false,false);
- }
-
- if(straight) {
- pindices->push_back(I0);
- pindices->push_back(I1);
- pindices->push_back(I2);
- }
-}
-
void transform(const std::vector<VertexData>& b)
{
unsigned n=b.size();
@@ -829,12 +822,11 @@ void transform(const std::vector<VertexData>& b)
for(unsigned i=0; i < n; ++i) {
const GLfloat *v=b[i].position;
-// xbuffer[i]=Tx[0]*b[j]+Tx[1]*b[j+1]+Tx[2]*b[j+2];
-// ybuffer[i]=Ty[0]*b[j]+Ty[1]*b[j+1]+Ty[2]*b[j+2];
- zbuffer[i]=Tz[0]*v[0]+Tz[1]*v[1]+Tz[2]*v[2];
+ zbuffer[i]=TransformZ(triple(v[0],v[1],v[2]),gl::dprojView);
}
}
+#if 0
// precompute min and max bounds of each triangle
void bounds(const std::vector<GLuint>& I)
{
@@ -882,224 +874,72 @@ void bounds(const std::vector<GLuint>& I)
zmax[i]=max(za,zb,zc);
}
}
+#endif
-void BezierPatch::drawMaterials()
+void sortTriangles()
{
- if(indices.size() == 0)
- return;
-
- static const size_t size=sizeof(GLfloat);
- static const size_t bytestride=sizeof(vertexData);
-
- GLuint vertsBufferIndex;
- GLuint elemBufferIndex;
-
- GLuint vao;
-
- glGenVertexArrays(1,&vao);
- glBindVertexArray(vao);
-
- glGenBuffers(1,&vertsBufferIndex);
- glGenBuffers(1,&elemBufferIndex);
-
- registerBuffer(vertexbuffer,vertsBufferIndex);
- registerBuffer(indices,elemBufferIndex);
-
- glBindBuffer(GL_ARRAY_BUFFER,vertsBufferIndex);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elemBufferIndex);
-
- camp::setUniforms(materialShader);
-
- const GLint posAttrib=glGetAttribLocation(materialShader,"position");
- const GLint normalAttrib=glGetAttribLocation(materialShader,"normal");
- const GLint materialAttrib=glGetAttribLocation(materialShader,"material");
-
- glVertexAttribPointer(posAttrib,3,GL_FLOAT,GL_FALSE,bytestride,(void *) 0);
- glEnableVertexAttribArray(posAttrib);
-
- glVertexAttribPointer(normalAttrib,3,GL_FLOAT,GL_FALSE,bytestride,
- (void *) (3*size));
- glEnableVertexAttribArray(normalAttrib);
-
- glVertexAttribIPointer(materialAttrib,1,GL_INT,bytestride,
- (void *) (6*size));
- glEnableVertexAttribArray(materialAttrib);
-
- glFlush(); // Workaround broken MSWindows drivers for Intel GPU
- glDrawElements(GL_TRIANGLES,indices.size(),GL_UNSIGNED_INT,(void *) 0);
-
- glDisableVertexAttribArray(posAttrib);
- glDisableVertexAttribArray(normalAttrib);
- glDisableVertexAttribArray(materialAttrib);
-
- deleteUniforms();
-
- glBindBuffer(GL_ARRAY_BUFFER,0);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
-
- glBindVertexArray(0);
- glDeleteVertexArrays(1,&vao);
-
- glDeleteBuffers(1,&vertsBufferIndex);
- glDeleteBuffers(1,&elemBufferIndex);
+ if(!transparentData.indices.empty()) {
+ transform(transparentData.Vertices);
+// bounds(tIndices);
+ qsort(&transparentData.indices[0],transparentData.indices.size()/3,
+ 3*sizeof(GLuint),compare);
+ }
}
-void BezierPatch::drawColors(GLuint& Nvertices,
- std::vector<VertexData>& Vertexbuffer,
- std::vector<GLuint>& Indices)
+void Triangles::queue(size_t nP, const triple* P, size_t nN, const triple* N,
+ size_t nC, const prc::RGBAColour* C, size_t nI,
+ const uint32_t (*PP)[3], const uint32_t (*NN)[3],
+ const uint32_t (*CC)[3], bool Transparent)
{
- if(Indices.size() == 0)
- return;
-
- static const size_t size=sizeof(GLfloat);
- static const size_t bytestride=sizeof(VertexData);
-
- GLuint vertsBufferIndex;
- GLuint elemBufferIndex;
-
- GLuint vao;
-
- glGenVertexArrays(1,&vao);
- glBindVertexArray(vao);
-
- glGenBuffers(1,&vertsBufferIndex);
- glGenBuffers(1,&elemBufferIndex);
-
- registerBuffer(Vertexbuffer,vertsBufferIndex);
- registerBuffer(Indices,elemBufferIndex);
+ if(!nN) return;
- glBindBuffer(GL_ARRAY_BUFFER,vertsBufferIndex);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elemBufferIndex);
-
- camp::setUniforms(colorShader);
-
- const GLint posAttrib=glGetAttribLocation(colorShader,"position");
- const GLint normalAttrib=glGetAttribLocation(colorShader,"normal");
- const GLint colorAttrib=glGetAttribLocation(colorShader,"color");
- const GLint materialAttrib=glGetAttribLocation(colorShader,"material");
+ data.clear();
+ Onscreen=true;
+ transparent=Transparent;
- glVertexAttribPointer(posAttrib,3,GL_FLOAT,GL_FALSE,bytestride,
- (void *) 0);
- glEnableVertexAttribArray(posAttrib);
-
- glVertexAttribPointer(normalAttrib,3,GL_FLOAT,GL_FALSE,bytestride,
- (void *) (3*size));
- glEnableVertexAttribArray(normalAttrib);
-
- glVertexAttribIPointer(colorAttrib,1,GL_UNSIGNED_INT,bytestride,
- (void *) (6*size));
- glEnableVertexAttribArray(colorAttrib);
-
- glVertexAttribIPointer(materialAttrib,1,GL_INT,bytestride,
- (void *) (6*size+sizeof(GLuint)));
- glEnableVertexAttribArray(materialAttrib);
-
- glFlush(); // Workaround broken MSWindows drivers for Intel GPU
- glDrawElements(GL_TRIANGLES,Indices.size(),GL_UNSIGNED_INT,(void *) 0);
-
- glDisableVertexAttribArray(posAttrib);
- glDisableVertexAttribArray(normalAttrib);
- glDisableVertexAttribArray(colorAttrib);
- glDisableVertexAttribArray(materialAttrib);
-
- deleteUniforms();
-
- glBindBuffer(GL_ARRAY_BUFFER,0);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
-
- glBindVertexArray(0);
- glDeleteVertexArrays(1,&vao);
+ data.Vertices.resize(nP);
+ data.indices.resize(3*nI);
- glDeleteBuffers(1,&vertsBufferIndex);
- glDeleteBuffers(1,&elemBufferIndex);
-}
-
-void BezierPatch::sortTriangles()
-{
- if(Ntvertices > 0) {
- transform(tVertexbuffer);
- bounds(tIndices);
- qsort(&tIndices[0],tIndices.size()/3,3*sizeof(GLuint),compare);
- }
-}
-
-void Triangles::queue(size_t nP, triple* P, size_t nN, triple* N,
- size_t nC, prc::RGBAColour* C, size_t nI,
- uint32_t (*PI)[3], uint32_t (*NI)[3], uint32_t (*CI)[3],
- bool transparent)
-{
- if(!nN) return;
- const size_t indexstride=3;
- size_t nindices=indexstride*nI;
- size_t index0;
-
- if(transparent) {
- tVertexbuffer.reserve(nbuffer);
- tVertexbuffer.resize(Ntvertices+nP);
- tIndices.reserve(nbuffer);
- index0=tIndices.size();
- tIndices.resize(index0+nindices);
- } else {
- if(nC) {
- Vertexbuffer.reserve(nbuffer);
- Vertexbuffer.resize(Nvertices+nP);
- Indices.reserve(nbuffer);
- index0=Indices.size();
- Indices.resize(index0+nindices);
- } else {
- vertexbuffer.reserve(nbuffer);
- vertexbuffer.resize(nvertices+nP);
- indices.reserve(nbuffer);
- index0=indices.size();
- indices.resize(index0+nindices);
- }
- }
-
- uint32_t *P0=(uint32_t *) PI;
- uint32_t *N0=(uint32_t *) NI;
- uint32_t *C0=(uint32_t *) CI;
-
- if(transparent) {
- if(nC) {
- for(size_t i=0; i < nindices; ++i) {
- uint32_t i0=P0[i];
- prc::RGBAColour c=C[C0[i]];
- GLfloat c0[]={(GLfloat) c.R,(GLfloat) c.G,(GLfloat) c.B,(GLfloat) c.A};
- GLuint index=Ntvertices+i0;
- tVertexbuffer[index]=VertexData(P[i0],N[N0[i]],c0);
- tIndices[index0+i]=index;
- }
- } else {
- for(size_t i=0; i < nindices; ++i) {
- uint32_t i0=P0[i];
- GLuint index=Ntvertices+i0;
- tVertexbuffer[index]=VertexData(P[i0],N[N0[i]]);
- tIndices[index0+i]=index;
- }
- }
- Ntvertices += nP;
- } else {
- if(nC) {
- for(size_t i=0; i < nindices; ++i) {
- uint32_t i0=P0[i];
- prc::RGBAColour c=C[C0[i]];
- GLfloat c0[]={(GLfloat) c.R,(GLfloat) c.G,(GLfloat) c.B,
- (GLfloat) c.A};
- GLuint index=Nvertices+i0;
- Vertexbuffer[index]=VertexData(P[i0],N[N0[i]],c0);
- Indices[index0+i]=index;
- }
- Nvertices += nP;
- } else {
- for(size_t i=0; i < nindices; ++i) {
- uint32_t i0=P0[i];
- GLuint index=nvertices+i0;
- vertexbuffer[index]=vertexData(P[i0],N[N0[i]]);
- indices[index0+i]=index;
+ MaterialIndex=nC ? -1-materialIndex : 1+materialIndex;
+
+ for(size_t i=0; i < nI; ++i) {
+ const uint32_t *PI=PP[i];
+ uint32_t PI0=PI[0];
+ uint32_t PI1=PI[1];
+ uint32_t PI2=PI[2];
+ triple P0=P[PI0];
+ triple P1=P[PI1];
+ triple P2=P[PI2];
+ triple Q[]={P0,P1,P2};
+ if(!offscreen(3,Q)) {
+ const uint32_t *NI=NN[i];
+ if(nC) {
+ const uint32_t *CI=CC[i];
+ prc::RGBAColour C0=C[CI[0]];
+ prc::RGBAColour C1=C[CI[1]];
+ prc::RGBAColour C2=C[CI[2]];
+ GLfloat c0[]={(GLfloat) C0.R,(GLfloat) C0.G,(GLfloat) C0.B,
+ (GLfloat) C0.A};
+ GLfloat c1[]={(GLfloat) C1.R,(GLfloat) C1.G,(GLfloat) C1.B,
+ (GLfloat) C1.A};
+ GLfloat c2[]={(GLfloat) C2.R,(GLfloat) C2.G,(GLfloat) C2.B,
+ (GLfloat) C2.A};
+ transparent |= c0[3]+c1[3]+c2[3] < 765;
+ data.Vertices[PI0]=VertexData(P0,N[NI[0]],c0);
+ data.Vertices[PI1]=VertexData(P1,N[NI[1]],c1);
+ data.Vertices[PI2]=VertexData(P2,N[NI[2]],c2);
+ } else {
+ data.Vertices[PI0]=VertexData(P0,N[NI[0]]);
+ data.Vertices[PI1]=VertexData(P1,N[NI[1]]);
+ data.Vertices[PI2]=VertexData(P2,N[NI[2]]);
}
- nvertices += nP;
+ size_t i3=3*i;
+ data.indices[i3]=PI0;
+ data.indices[i3+1]=PI1;
+ data.indices[i3+2]=PI2;
}
}
+ append();
}
#endif
diff --git a/graphics/asymptote/bezierpatch.h b/graphics/asymptote/bezierpatch.h
index b8c23574d7..e637eef467 100644
--- a/graphics/asymptote/bezierpatch.h
+++ b/graphics/asymptote/bezierpatch.h
@@ -16,112 +16,23 @@ namespace camp {
extern const double Fuzz4;
-class vertexData {
-public:
- GLfloat position[3];
- GLfloat normal[3];
- GLint material;
- vertexData() {};
- vertexData(const triple& v, const triple& n) {
- position[0]=v.getx();
- position[1]=v.gety();
- position[2]=v.getz();
- normal[0]=n.getx();
- normal[1]=n.gety();
- normal[2]=n.getz();
- material=drawElement::materialIndex;
- }
-};
-
-class VertexData {
-public:
- GLfloat position[3];
- GLfloat normal[3];
- GLuint color;
- GLint material;
- VertexData() {};
- VertexData(const triple& v, const triple& n) {
- position[0]=v.getx();
- position[1]=v.gety();
- position[2]=v.getz();
- normal[0]=n.getx();
- normal[1]=n.gety();
- normal[2]=n.getz();
- color=0;
- material=drawElement::materialIndex;
- }
- VertexData(const triple& v, const triple& n, GLfloat *c) {
- position[0]=v.getx();
- position[1]=v.gety();
- position[2]=v.getz();
- normal[0]=n.getx();
- normal[1]=n.gety();
- normal[2]=n.getz();
- color=glm::packUnorm4x8(glm::vec4(c[0],c[1],c[2],c[3]));
- material=-(int) drawElement::materialIndex-1; // request explicit color
- }
-
-};
-
struct BezierPatch
{
- static std::vector<vertexData> vertexbuffer;
- static std::vector<VertexData> Vertexbuffer;
- static std::vector<VertexData> tVertexbuffer; // for transparent surfaces
- static std::vector<GLuint> indices;
- static std::vector<GLuint> Indices;
- static std::vector<GLuint> tIndices;
- static GLuint nvertices;
- static GLuint Nvertices;
- static GLuint Ntvertices;
-
- static GLuint vertsBufferIndex;
- static GLuint VertsBufferIndex;
- static GLuint tVertsBufferIndex;
-
- static GLuint elemBufferIndex;
- static GLuint ElemBufferIndex;
- static GLuint tElemBufferIndex;
-
- std::vector<GLuint> *pindices;
- triple u,v,w;
+ vertexBuffer data;
+
+ bool transparent;
+ bool color;
double epsilon;
double Epsilon;
double res2;
double Res2; // Reduced resolution for Bezier triangles flatness test.
- triple Min,Max;
- typedef GLuint vertexFunction(const triple &v, const triple& n);
- typedef GLuint VertexFunction(const triple &v, const triple& n, GLfloat *c);
- vertexFunction *pvertex;
- VertexFunction *pVertex;
-
- BezierPatch() {}
-
- void init(double res, const triple& Min, const triple& Max,
- bool transparent, GLfloat *colors=NULL);
+ typedef GLuint (vertexBuffer::*vertexFunction)(const triple &v,
+ const triple& n);
+ vertexFunction pvertex;
+ bool Onscreen;
+
+ void init(double res);
-// Store the vertex v and its normal vector n in the buffer.
- static GLuint vertex(const triple &v, const triple& n) {
- vertexbuffer.push_back(vertexData(v,n));
- return nvertices++;
- }
-
-// Store the vertex v and its normal vector n and colour c in the buffer.
- static GLuint Vertex(const triple& v, const triple& n, GLfloat *c) {
- Vertexbuffer.push_back(VertexData(v,n,c));
- return Nvertices++;
- }
-
- static GLuint tvertex(const triple &v, const triple& n) {
- tVertexbuffer.push_back(VertexData(v,n));
- return Ntvertices++;
- }
-
- static GLuint tVertex(const triple& v, const triple& n, GLfloat *c) {
- tVertexbuffer.push_back(VertexData(v,n,c));
- return Ntvertices++;
- }
-
triple normal(triple left3, triple left2, triple left1, triple middle,
triple right1, triple right2, triple right3) {
triple rp=right1-middle;
@@ -165,7 +76,7 @@ struct BezierPatch
triple p12=p[12];
triple p15=p[15];
- // Check the flatness of the quad.
+ // Check the flatness of a Bezier patch.
double d=Distance2(p15,p0,normal(p3,p[2],p[1],p0,p[4],p[8],p12));
// Determine how straight the edges are.
@@ -194,78 +105,52 @@ struct BezierPatch
}
};
-// Approximate bounds by bounding box of control polyhedron.
+ // Approximate bounds by bounding box of control polyhedron.
bool offscreen(size_t n, const triple *v) {
- double x,y,z;
- double X,Y,Z;
-
- boundstriples(x,y,z,X,Y,Z,n,v);
- return
- X < Min.getx() || x > Max.getx() ||
- Y < Min.gety() || y > Max.gety() ||
- Z < Min.getz() || z > Max.getz();
+ if(bbox2(n,v).offscreen()) {
+ Onscreen=false;
+ return true;
+ }
+ return false;
}
- static void clear() {
- nvertices=0;
- vertexbuffer.clear();
- indices.clear();
- }
-
- static void Clear() {
- Nvertices=0;
- Vertexbuffer.clear();
- Indices.clear();
- }
-
- static void tClear() {
- Ntvertices=0;
- tVertexbuffer.clear();
- tIndices.clear();
- }
-
- ~BezierPatch() {}
-
+ virtual void render(const triple *p, bool straight, GLfloat *c0=NULL);
void render(const triple *p,
GLuint I0, GLuint I1, GLuint I2, GLuint I3,
triple P0, triple P1, triple P2, triple P3,
bool flat0, bool flat1, bool flat2, bool flat3,
GLfloat *C0=NULL, GLfloat *C1=NULL, GLfloat *C2=NULL,
GLfloat *C3=NULL);
- virtual void render(const triple *p, bool straight, GLfloat *c0=NULL);
- void queue(const triple *g, bool straight, double ratio,
- const triple& Min, const triple& Max, bool transparent,
- GLfloat *colors=NULL) {
- init(pixel*ratio,Min,Max,transparent,colors);
- render(g,straight,colors);
- }
-
- void drawMaterials();
- void drawColors(GLuint& Nvertices,
- std::vector<VertexData>& Vertexbuffer,
- std::vector<GLuint>& Indices);
- void sortTriangles();
-
- void drawColors() {
- drawColors(Nvertices,Vertexbuffer,Indices);
- }
-
- void drawOpaque() {
- drawMaterials();
- drawColors();
- }
-
- void drawTransparent() {
- glDepthMask(GL_FALSE);
- sortTriangles();
- drawColors(Ntvertices,tVertexbuffer,tIndices);
- glDepthMask(GL_TRUE);
+ void append() {
+ if(transparent)
+ transparentData.Append(data);
+ else if(color) {
+ colorData.Append(data);
+ if(colorData.Vertices.size() >= gl::maxvertices) {
+ drawBuffer(colorData,colorShader);
+ colorData.clear();
+ gl::forceRemesh=true;
+ }
+ }
+ else {
+ materialData.append(data);
+ if(materialData.vertices.size() >= gl::maxvertices) {
+ drawBuffer(materialData,materialShader);
+ materialData.clear();
+ gl::forceRemesh=true;
+ }
+ }
}
- void draw() {
- drawOpaque();
- drawTransparent();
+ void queue(const triple *g, bool straight, double ratio, bool Transparent,
+ GLfloat *colors=NULL) {
+ data.clear();
+ Onscreen=true;
+ transparent=Transparent;
+ color=colors;
+ init(pixel*ratio);
+ render(g,straight,colors);
}
};
@@ -288,25 +173,39 @@ public:
return max(d,Straightness(p6,p[7],p[8],p9));
}
+ void render(const triple *p, bool straight, GLfloat *c0=NULL);
void render(const triple *p,
GLuint I0, GLuint I1, GLuint I2,
triple P0, triple P1, triple P2,
bool flat0, bool flat1, bool flat2,
GLfloat *C0=NULL, GLfloat *C1=NULL, GLfloat *C2=NULL);
- void render(const triple *p, bool straight, GLfloat *c0=NULL);
};
-
struct Triangles : public BezierPatch {
public:
Triangles() : BezierPatch() {}
- void queue(size_t nP, triple* P, size_t nN, triple* N,
- size_t nC, prc::RGBAColour* C, size_t nI,
- uint32_t (*PI)[3], uint32_t (*NI)[3], uint32_t (*CI)[3],
- bool transparent);
+ void queue(size_t nP, const triple* P, size_t nN, const triple* N,
+ size_t nC, const prc::RGBAColour* C, size_t nI,
+ const uint32_t (*PI)[3], const uint32_t (*NI)[3],
+ const uint32_t (*CI)[3], bool transparent);
+
+ void append() {
+ if(transparent)
+ transparentData.Append(data);
+ else {
+ triangleData.Append(data);
+ if(triangleData.Vertices.size() >= gl::maxvertices) {
+ drawBuffer(triangleData,transparentShader);
+ triangleData.clear();
+ gl::forceRemesh=true;
+ }
+ }
+ }
+
};
+extern void sortTriangles();
#endif
diff --git a/graphics/asymptote/binaries/i386-windows/README b/graphics/asymptote/binaries/i386-windows/README
index 77e7edfb59..f153da76a8 100644
--- a/graphics/asymptote/binaries/i386-windows/README
+++ b/graphics/asymptote/binaries/i386-windows/README
@@ -60,7 +60,3 @@ under the CC-BY-SA 4.0 license:
http://www.entypo.com/
and under a CC license:
http://www.zondicons.com/zondicons.zip
-
-Uses OpenImageIO, which the source is available at
-https://github.com/OpenImageIO/oiio.
-Copyright 2008-2018 Larry Gritz et al. All Rights Reserved. \ No newline at end of file
diff --git a/graphics/asymptote/binaries/x86_64-windows/README b/graphics/asymptote/binaries/x86_64-windows/README
index 77e7edfb59..f153da76a8 100644
--- a/graphics/asymptote/binaries/x86_64-windows/README
+++ b/graphics/asymptote/binaries/x86_64-windows/README
@@ -60,7 +60,3 @@ under the CC-BY-SA 4.0 license:
http://www.entypo.com/
and under a CC license:
http://www.zondicons.com/zondicons.zip
-
-Uses OpenImageIO, which the source is available at
-https://github.com/OpenImageIO/oiio.
-Copyright 2008-2018 Larry Gritz et al. All Rights Reserved. \ No newline at end of file
diff --git a/graphics/asymptote/build-scripts/HOWTO-MSWindows b/graphics/asymptote/build-scripts/HOWTO-MSWindows
index 609c6fd769..977501d658 100644
--- a/graphics/asymptote/build-scripts/HOWTO-MSWindows
+++ b/graphics/asymptote/build-scripts/HOWTO-MSWindows
@@ -50,12 +50,14 @@ cp /usr/bin/cygwin1.dll ~/dll/cygwin
mkdir ~/CTAN
cp -a ~/asymptote/build-scripts/README-binaries ~/CTAN
+cd ~/
GCVERSION=7.6.2
+ATOMICVERSION=7.6.10
wget http://hboehm.info/gc/gc_source/gc-$GCVERSION.tar.gz
-wget http://www.ivmaisoft.com/_bin/atomic_ops/libatomic_ops-$GCVERSION.tar.gz
+wget http://www.ivmaisoft.com/_bin/atomic_ops/libatomic_ops-$ATOMICVERSION.tar.gz
tar -zxf gc-$GCVERSION.tar.gz
-tar -zxf libatomic_ops-$GCVERSION.tar.gz
-mv libatomic_ops-$GCVERSION gc-$GCVERSION/libatomic_ops
+tar -zxf libatomic_ops-$ATOMICVERSION.tar.gz
+mv libatomic_ops-$ATOMICVERSION gc-$GCVERSION/libatomic_ops
cd gc-$GCVERSION
./configure --disable-shared
make check
diff --git a/graphics/asymptote/build-scripts/build-asygl b/graphics/asymptote/build-scripts/build-asygl
new file mode 100755
index 0000000000..d28bb85fa9
--- /dev/null
+++ b/graphics/asymptote/build-scripts/build-asygl
@@ -0,0 +1,21 @@
+#!/bin/sh
+if [ ! $# = 1 ]; then echo Usage: "$0 AsyGLVersion"; exit 1; fi
+GL_MATRIX_VERSION=2.4.0
+GL_MATRIX_DIR=gl-matrix-$GL_MATRIX_VERSION
+GL_MATRIX_DIR_PRUNED=$GL_MATRIX_DIR-pruned
+if test ! -r $GL_MATRIX_DIR_PRUNED; then \
+ TEMPDIR=`mktemp -d`
+ TARFILE=$TEMPDIR/$GL_MATRIX_DIR.tar.gz
+ wget https://github.com/toji/gl-matrix/archive/v$GL_MATRIX_VERSION.tar.gz --output-document=$TARFILE
+tar -zxf $TARFILE
+mv $GL_MATRIX_DIR $GL_MATRIX_DIR_PRUNED
+rm -r $TEMPDIR
+cd $GL_MATRIX_DIR_PRUNED
+patch -p1 < ../patches/$GL_MATRIX_DIR_PRUNED.patch
+npm install
+npm run build-all
+echo "/*@license for gl-matrix mat3 and mat4 functions:" > LICENSE.js
+echo "*/"| cat LICENSE.md - >> LICENSE.js
+cd ..
+fi
+cat $GL_MATRIX_DIR_PRUNED/dist/gl-matrix-min.js webgl/gl.js $GL_MATRIX_DIR_PRUNED/LICENSE.js | uglifyjs -m -c -o base/webgl/asygl-$1.js --comments
diff --git a/graphics/asymptote/build-scripts/build-freeglut b/graphics/asymptote/build-scripts/build-freeglut
deleted file mode 100755
index 95d4cbfb4b..0000000000
--- a/graphics/asymptote/build-scripts/build-freeglut
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh -x
-#Be sure to remove /usr/include/GL
-wget http://prdownloads.sourceforge.net/freeglut/freeglut-2.8.1.tar.gz
-ln -sf /usr/bin/cyggcc_s-1.dll /usr/lib/libgcc_s.a
-tar -zxf freeglut-2.8.1.tar.gz
-cd freeglut-2.8.1
-patch -p1 < ~/asymptote/patches/cygwin_freeglut-2.8.1.patch
-./configure --prefix=/usr --without-x
-make
-cd src
-gcc -s -static -shared -o freeglut.dll *.o -Wl,--out-implib=libfreeglut.a -lglu32 -lopengl32 -lgdi32 -lwinmm
-cp freeglut.dll /lib
-mkdir -p ~/dll
-cp freeglut.dll ~/dll
-gcc -s -shared -o freeglut.dll *.o -Wl,--out-implib=libfreeglut.a -lglu32 -lopengl32 -lgdi32 -lwinmm
-cp libfreeglut.a /lib
-cd ..
-cp -a include/GL/*.h /usr/include/w32api/GL/
-
-#OPTIONAL: To compile manually in src:
-#gcc -O2 -c -D_WIN32 -DHAVE_CONFIG_H -DFREEGLUT_EXPORTS *.c -I.. -I../include
-
diff --git a/graphics/asymptote/config.h.in b/graphics/asymptote/config.h.in
index a178b67d1c..0ef1ec3717 100644
--- a/graphics/asymptote/config.h.in
+++ b/graphics/asymptote/config.h.in
@@ -39,6 +39,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
+/* Define to 1 if you have the `lgamma' function. */
+#undef HAVE_LGAMMA
+
/* Define to 1 if you have the `ncurses' library (-lncurses). */
#undef HAVE_LIBCURSES
@@ -108,9 +111,6 @@
/* Define to 1 if you have the <ncurses.h> header file. */
#undef HAVE_NCURSES_H
-/* Define to 1 if you have the `pow' function. */
-#undef HAVE_POW
-
/* Define if you have POSIX threads libraries and header files. */
#undef HAVE_PTHREAD
@@ -123,9 +123,6 @@
/* Define to 1 if you have a working <tirpc/rpc/rpc.h> header. */
#undef HAVE_RPC_RPC_H
-/* Define to 1 if you have the `sqrt' function. */
-#undef HAVE_SQRT
-
/* Define to 1 if you have the <stddef.h> header file. */
#undef HAVE_STDDEF_H
diff --git a/graphics/asymptote/configure b/graphics/asymptote/configure
index e1cbe29de1..ea835748ff 100755
--- a/graphics/asymptote/configure
+++ b/graphics/asymptote/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Asymptote 2.53.
+# Generated by GNU Autoconf 2.69 for Asymptote 2.54.
#
# Report bugs to <http://sourceforge.net/projects/asymptote>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Asymptote'
PACKAGE_TARNAME='asymptote'
-PACKAGE_VERSION='2.53'
-PACKAGE_STRING='Asymptote 2.53'
+PACKAGE_VERSION='2.54'
+PACKAGE_STRING='Asymptote 2.54'
PACKAGE_BUGREPORT='http://sourceforge.net/projects/asymptote'
PACKAGE_URL=''
@@ -1285,7 +1285,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Asymptote 2.53 to adapt to many kinds of systems.
+\`configure' configures Asymptote 2.54 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1350,7 +1350,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Asymptote 2.53:";;
+ short | recursive ) echo "Configuration of Asymptote 2.54:";;
esac
cat <<\_ACEOF
@@ -1467,7 +1467,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Asymptote configure 2.53
+Asymptote configure 2.54
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2053,7 +2053,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Asymptote $as_me 2.53, which was
+It was created by Asymptote $as_me 2.54, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -7492,18 +7492,19 @@ if test "${enable_OpenImageIO+set}" = set; then :
fi
-if test "x$enable_gl" != "xno"; then
ac_fn_cxx_check_header_mongrel "$LINENO" "glm/glm.hpp" "ac_cv_header_glm_glm_hpp" "$ac_includes_default"
if test "x$ac_cv_header_glm_glm_hpp" = xyes; then :
$as_echo "#define HAVE_LIBGLM 1" >>confdefs.h
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: *** Could not find glm header files: will compile without OpenGL support ***" >&5
-$as_echo "$as_me: *** Could not find glm header files: will compile without OpenGL support ***" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** Could not find glm header files: will compile without WebGL or OpenGL support ***" >&5
+$as_echo "$as_me: *** Could not find glm header files: will compile without WebGL or OpenGL support ***" >&6;}
fi
+
+if test "x$enable_gl" != "xno"; then
for ac_header in ncurses/curses.h ncurses.h curses.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -7804,8 +7805,8 @@ _ACEOF
LIBS="-lglut $LIBS"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: *** Could not find libglut: will compile without GLUT support ***" >&5
-$as_echo "$as_me: *** Could not find libglut: will compile without GLUT support ***" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** Could not find libglut: will compile without OpenGL support ***" >&5
+$as_echo "$as_me: *** Could not find libglut: will compile without OpenGL support ***" >&6;}
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glDepthMask in -lGL" >&5
@@ -8333,7 +8334,7 @@ $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
fi
-for ac_func in dup2 floor memset pow sqrt strchr tgamma memrchr
+for ac_func in dup2 floor memset strchr tgamma lgamma memrchr
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -9029,7 +9030,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Asymptote $as_me 2.53, which was
+This file was extended by Asymptote $as_me 2.54, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9091,7 +9092,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-Asymptote config.status 2.53
+Asymptote config.status 2.54
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/graphics/asymptote/configure.ac b/graphics/asymptote/configure.ac
index 92dd1ded2b..5b7e118645 100644
--- a/graphics/asymptote/configure.ac
+++ b/graphics/asymptote/configure.ac
@@ -3,7 +3,7 @@
# this file.
AC_PREREQ(2)
-AC_INIT([Asymptote],[2.53],[http://sourceforge.net/projects/asymptote])
+AC_INIT([Asymptote],[2.54],[http://sourceforge.net/projects/asymptote])
VERSION=$PACKAGE_VERSION
AC_SUBST(VERSION)
m4_include([ax_pthread.m4])
@@ -362,10 +362,11 @@ AC_ARG_ENABLE(offscreen,
AC_ARG_ENABLE(OpenImageIO,
[AS_HELP_STRING(--enable-openimageio[[[=no]]],enable experimental OpenImageIO Library)])
-if test "x$enable_gl" != "xno"; then
AC_CHECK_HEADER(glm/glm.hpp,
[AC_DEFINE(HAVE_LIBGLM,1,
- DEFINE([the <glm/glm.hpp> header]))],AC_MSG_NOTICE([*** Could not find glm header files: will compile without OpenGL support ***]))
+ DEFINE([the <glm/glm.hpp> header]))],AC_MSG_NOTICE([*** Could not find glm header files: will compile without WebGL or OpenGL support ***]))
+
+if test "x$enable_gl" != "xno"; then
AC_CHECK_HEADERS([ncurses/curses.h ncurses.h curses.h],[break])
if test "x$enable_openimageio" = "xyes"; then
AC_CHECK_HEADER([OpenEXR/ImathVec.h],
@@ -400,7 +401,7 @@ case "$OSTYPE" in
*)
AC_CHECK_LIB([gccpp],[GC_throw_bad_alloc])
AC_CHECK_LIB([glut], [glutMainLoop],,
- AC_MSG_NOTICE([*** Could not find libglut: will compile without GLUT support ***]))
+ AC_MSG_NOTICE([*** Could not find libglut: will compile without OpenGL support ***]))
AC_CHECK_LIB([GL], [glDepthMask],
[AC_DEFINE(HAVE_LIBGL,1,
DEFINE_LIB([GL]))
@@ -429,7 +430,7 @@ AC_DEFUN([ac_FUNC_STRPTIME], [
# Checks for library functions.
AC_FUNC_FORK
-AC_CHECK_FUNCS([dup2 floor memset pow sqrt strchr tgamma memrchr])
+AC_CHECK_FUNCS([dup2 floor memset strchr tgamma lgamma memrchr])
AC_FUNC_STRFTIME
ac_FUNC_STRPTIME
AC_FUNC_ERROR_AT_LINE
diff --git a/graphics/asymptote/doc/CAD.pdf b/graphics/asymptote/doc/CAD.pdf
index 84fbc4399e..08f0a0b4eb 100644
--- a/graphics/asymptote/doc/CAD.pdf
+++ b/graphics/asymptote/doc/CAD.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/FAQ/asy-faq.info b/graphics/asymptote/doc/FAQ/asy-faq.info
index 717734ca0b..543feac215 100644
--- a/graphics/asymptote/doc/FAQ/asy-faq.info
+++ b/graphics/asymptote/doc/FAQ/asy-faq.info
@@ -10,7 +10,7 @@ END-INFO-DIR-ENTRY
File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
ASYMPTOTE FREQUENTLY ASKED QUESTIONS
- 20 Aug 2019
+ 29 Sep 2019
This is the list of Frequently Asked Questions about Asymptote (asy).
diff --git a/graphics/asymptote/doc/Makefile.in b/graphics/asymptote/doc/Makefile.in
index 58dfc179df..8888df0145 100644
--- a/graphics/asymptote/doc/Makefile.in
+++ b/graphics/asymptote/doc/Makefile.in
@@ -24,7 +24,7 @@ asymptote.sty:
dvi: doc asymptote.dvi
-doc: $(DOCFILES) asy.1 faq latexusage.eps
+doc: $(DOCFILES) asy.1 faq
cd png && $(MAKE) all
manpage: $(MANFILES)
@@ -41,19 +41,13 @@ faq:
%.pdf: %.asy
$(ASY) -f pdf -noprc $<
-latexusage.dvi: latexusage.tex asymptote.sty
+latexusage.pdf: latexusage.tex asymptote.sty
rm -f latexusage-*
rm -f latexusage.pre
rm -f latexusage.aux
- latex latexusage
+ pdflatex latexusage
$(ASY) -noprc latexusage-*.asy
- latex latexusage
-
-latexusage.eps: latexusage.dvi
- dvips -o latexusage.eps latexusage
-
-latexusage.pdf: latexusage.dvi
- dvipdf -P latexusage
+ pdflatex latexusage
options: ../settings.cc
$(ASY) -h 2>&1 | grep -iv Asymptote > options
@@ -72,19 +66,16 @@ asymptote.pdf: $(SOURCE) $(ASYFILES:.asy=.pdf) latexusage.pdf
-$(TEXI2DVI) --pdf asymptote.texi
CAD.pdf: CAD.tex CAD1.eps
- latex CAD
- latex CAD
- latex CAD
- dvipdf -P CAD
+ pdflatex CAD
+ pdflatex CAD
+ pdflatex CAD
TeXShopAndAsymptote.pdf: TeXShopAndAsymptote.tex
- latex TeXShopAndAsymptote
- latex TeXShopAndAsymptote
- dvipdf -P TeXShopAndAsymptote
+ pdflatex TeXShopAndAsymptote
+ pdflatex TeXShopAndAsymptote
asyRefCard.pdf: asyRefCard.tex
- tex asyRefCard
- dvipdf -P asyRefCard
+ pdftex asyRefCard
clean: FORCE
-rm -f asy-latex.{aux,idx,ins,log,toc}
@@ -112,7 +103,7 @@ install-prebuilt: install-man options
cd png && $(MAKE) install
cd FAQ && $(MAKE) install-prebuilt
-install-all: $(DOCFILES) $(MANFILES) faq latexusage.eps install-man
+install-all: $(DOCFILES) $(MANFILES) faq install-man
cd png && $(MAKE) install-all
cd FAQ && $(MAKE) install-info
diff --git a/graphics/asymptote/doc/TeXShopAndAsymptote.pdf b/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
index 75708beb4e..a6387890ed 100644
--- a/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
+++ b/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asy-latex.pdf b/graphics/asymptote/doc/asy-latex.pdf
index 4d861a4e54..8458cebbf2 100644
--- a/graphics/asymptote/doc/asy-latex.pdf
+++ b/graphics/asymptote/doc/asy-latex.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asy.1 b/graphics/asymptote/doc/asy.1
index d9380da919..563f8a3cd6 100644
--- a/graphics/asymptote/doc/asy.1
+++ b/graphics/asymptote/doc/asy.1
@@ -34,6 +34,9 @@ description, see the Info files.
.B \-V,\-View
View output; command-line only.
.TP
+.B \-absolute
+Use absolute WebGL dimensions [false].
+.TP
.B \-a,\-align C|B|T|Z
Center, Bottom, Top, or Zero page alignment [C].
.TP
@@ -43,9 +46,6 @@ Directional page alignment (overrides align) [(0,0)].
.B \-antialias n
Antialiasing width for rasterized output [2].
.TP
-.B \-arcballradius pixels
-Arcball radius [750].
-.TP
.B \-auto3D
Automatically activate 3D scene [true].
.TP
@@ -91,12 +91,12 @@ Conserve memory at the expense of speed [false].
.B \-d,\-debug
Enable debugging messages [false].
.TP
+.B \-digits n
+Default output file precision [6].
+.TP
.B \-divisor n
Garbage collect using purge(divisor=n) [2].
.TP
-.B \-doubleclick ms
-Emulated double-click timeout [200].
-.TP
.B \-embed
Embed rendered preview image [true].
.TP
@@ -184,6 +184,9 @@ View output from multiple batch-mode files [false].
.B \-multisample n
Multisampling width for screen images [4].
.TP
+.B \-offline
+Produce offline html files [false].
+.TP
.B \-offscreen
Use offscreen rendering [false].
.TP
@@ -238,6 +241,12 @@ Disable system call [true].
.B \-scroll n
Scroll standard output n lines at a time [0].
.TP
+.B \-shiftHoldDistance n
+WebGL touch screen distance limit for shift mode [20].
+.TP
+.B \-shiftWaitTime ms
+WebGL touch screen shift mode delay [200].
+.TP
.B \-spinstep deg/s
Spin speed [60].
.TP
@@ -280,6 +289,12 @@ Increase verbosity level (can specify multiple times) [0].
.B \-version
Show version; command-line only.
.TP
+.B \-vibrateTime ms
+WebGL shift mode vibrate duration [25].
+.TP
+.B \-viewportmargin pair
+Horizontal and vertical 3D viewport margin [(0.5,0.5)].
+.TP
.B \-wait
Wait for child processes to finish before exiting [false].
.TP
@@ -292,6 +307,12 @@ Show where listed variables are declared [false].
.B \-xasy
Special interactive mode for xasy [false].
.TP
+.B \-zoomPinchCap limit
+WebGL maximum zoom pinch [100].
+.TP
+.B \-zoomPinchFactor n
+WebGL zoom pinch sensitivity [10].
+.TP
.B \-zoomfactor factor
Zoom step factor [1.05].
.TP
diff --git a/graphics/asymptote/doc/asyRefCard.pdf b/graphics/asymptote/doc/asyRefCard.pdf
index b439ce9f9a..65ff3e817f 100644
--- a/graphics/asymptote/doc/asyRefCard.pdf
+++ b/graphics/asymptote/doc/asyRefCard.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asymptote.pdf b/graphics/asymptote/doc/asymptote.pdf
index 06c2a69fc4..d6f6ecab14 100644
--- a/graphics/asymptote/doc/asymptote.pdf
+++ b/graphics/asymptote/doc/asymptote.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asymptote.texi b/graphics/asymptote/doc/asymptote.texi
index d231d55cd0..4a630d45e5 100644
--- a/graphics/asymptote/doc/asymptote.texi
+++ b/graphics/asymptote/doc/asymptote.texi
@@ -84,7 +84,7 @@ Installation
Tutorial
* Drawing in batch mode:: Run @code{Asymptote} on a text file
-* Drawing in interactive mode:: Running @code{Asymptote} interactively
+* Drawing in interactive mode:: Running @code{Asymptote} interactively
* Figure size:: Specifying the figure size
* Labels:: Adding @code{LaTeX} labels
* Paths:: Drawing lines and curves
@@ -221,6 +221,9 @@ as @TeX{}/@code{LaTeX} is the de-facto standard for typesetting equations.
@item @code{LaTeX} typesetting of labels, for overall document consistency;
+@item the ability to generate and embed 3D vector @acronym{WebGL}
+graphics within @acronym{HTML} files;
+
@item the ability to generate and embed 3D vector @acronym{PRC}
graphics within @acronym{PDF} files;
@@ -254,7 +257,7 @@ Many of the features of @code{Asymptote} are written in the
@code{Asymptote} language itself. While the stock version of
@code{Asymptote} is designed for mathematics typesetting needs, one can
write @code{Asymptote} modules that tailor it to specific
-applications. A scientific graphing module has already been written
+applications; for example, a scientific graphing module is available
(@pxref{graph}). Examples of @code{Asymptote} code and output,
including animations, are available at
@quotation
@@ -382,7 +385,7 @@ The @code{ImageMagick} package from
@url{http://www.imagemagick.org/script/binary-releases.php}
@noindent
-is required to support output formats other than @acronym{EPS},
+is required to support output formats other than @acronym{HTML},
@acronym{PDF}, @acronym{SVG}, and @acronym{PNG} (@pxref{convert}).
The @code{Python 3} interpreter from @url{http://www.python.org} is only required
if you wish to try out the graphical user interface (@pxref{GUI}).
@@ -396,15 +399,11 @@ subdirectory of the installation directory (by default,
@section Configuring
@cindex configuring
@cindex @code{-V}
-@cindex @code{psviewer}
-@cindex @code{pdfviewer}
-@cindex @code{gs}
In interactive mode, or when given the @code{-V} option (the default
when running @code{Asymptote} on a single file under @code{MSDOS}),
@code{Asymptote} will automatically invoke the @code{PostScript}
viewer @code{gv} (under @code{UNIX}) or @code{gsview} (under
-@code{MSDOS} to display graphical output. These defaults may be
-overridden with the configuration variable @code{psviewer}.
+@code{MSDOS} to display graphical output.
The @code{PostScript} viewer should be capable of automatically
redrawing whenever the output file is updated. The default @code{UNIX}
@code{PostScript} viewer @code{gv} supports this (via a @code{SIGHUP}
@@ -418,40 +417,58 @@ Users of @code{gsview} will need to enable @code{Options/Auto Redisplay}
@code{gsview} window; under @code{UNIX} one must manually redisplay by
pressing the @code{r} key).
+@cindex @code{psviewer}
+@cindex @code{pdfviewer}
+@cindex @code{htmlviewer}
+@cindex @code{gs}
+@cindex @code{display}
+@cindex @code{animate}
@cindex @code{settings}
@cindex configuration file
Configuration variables are most easily set as @code{Asymptote}
variables in an optional configuration file @code{config.asy}
@pxref{configuration file}).
-Here are the default values of several important configuration
-variables under @code{UNIX}:
+For example, the setting @code{pdfviewer} specifies the location of
+the @acronym{PDF} viewer. Here are the default values of several
+important configuration variables under @code{UNIX}:
@noindent
@verbatim
import settings;
-psviewer="gv";
pdfviewer="acroread";
+htmlviewer="google-chrome";
+psviewer="gv";
+display="display";
+animate="animate";
gs="gs";
+libgs="";
@end verbatim
@noindent
@cindex @code{cmd}
-Under @code{MSDOS}, the (installation-dependent) default values of
-these configuration variables are determined automatically from the
-@code{Microsoft Windows} registry. Viewer settings (such as
-@code{psviewer} and @code{pdfviewer}) can be set to the string
-@code{cmd} to request the application normally associated with the
-corresponding file type.
-
-For @acronym{PDF} format output, the @code{gs} setting specifies the
-location of the @code{PostScript}-to-@acronym{PDF} processor @code{Ghostscript},
-available from @url{http://downloads.ghostscript.com/public}.
-
-The setting @code{pdfviewer} specifies the location of the @acronym{PDF}
-viewer. On @code{UNIX} systems, to support automatic document
-reloading in @code{Adobe Reader}, we recommend copying the file
-@code{reload.js} from the @code{Asymptote} system directory (by default,
-@code{@value{Datadir}/asymptote} under @code{UNIX} to
+Under @code{MSDOS}, the viewer settings
+@code{htmlviewer}, @code{pdfviewer}, @code{psviewer},
+@code{display}, and @code{animate} default to the string @code{cmd},
+requesting the application normally associated with each file type.
+The (installation-dependent) default values of @code{gs}
+and @code{libgs} are determined automatically from the @code{Microsoft
+Windows} registry. The @code{gs} setting specifies the location of the
+@code{PostScript} processor @code{Ghostscript}, available from
+@url{https://www.ghostscript.com/}.
+
+@noindent
+@cindex @code{htmlviewer}
+The configuration variable @code{htmlviewer} specifies the
+browser to use to display 3D @code{WebGL} output.
+The default setting is @code{google-chrome} under @code{UNIX} and
+@code{cmd} under @code{Microsoft Windows}. Note that @code{Internet Explorer}
+does not support @code{WebGL}; @code{Microsoft Windows} users should set their
+default html browser to @code{chrome} or @code{microsoft-edge}.
+
+On @code{UNIX} systems, to support automatic document
+reloading of @code{PDF} files in @code{Adobe Reader}, we recommend
+copying the file @code{reload.js} from the @code{Asymptote} system
+directory (by default, @code{@value{Datadir}/asymptote} under @code{UNIX} to
@code{~/.adobe/Acrobat/x.x/JavaScripts/},
where @code{x.x} represents the appropriate @code{Adobe Reader}
version number. The automatic document reload feature must then be
@@ -485,22 +502,17 @@ configuration variables @code{paperwidth} and @code{paperheight}.
@cindex @code{texcommand}
@cindex @code{dvips}
@cindex @code{dvisvgm}
-@cindex @code{libgs}
@cindex @code{convert}
-@cindex @code{display}
-@cindex @code{animate}
@cindex @code{ImageMagick}
-The following configuration variables normally do not require adjustment:
+@cindex @code{asygl}
+These additional configuration variables normally do not require adjustment:
@verbatim
config
texpath
texcommand
dvips
dvisvgm
-libgs
convert
-display
-animate
@end verbatim
@noindent
@@ -777,7 +789,7 @@ make uninstall
@menu
* Drawing in batch mode:: Run @code{Asymptote} on a text file
-* Drawing in interactive mode:: Running @code{Asymptote} interactively
+* Drawing in interactive mode:: Running @code{Asymptote} interactively
* Figure size:: Specifying the figure size
* Labels:: Adding @code{LaTeX} labels
* Paths:: Drawing lines and curves
@@ -4384,7 +4396,7 @@ type of the result:
addition
@cindex @code{-}
@item -
-subtractiona
+subtraction
@cindex @code{*}
@item *
multiplication
@@ -5585,7 +5597,7 @@ real[] A=fin;
Another useful mode is comma-separated-value mode,
@code{file csv(bool b=true)}, which causes reads to respect comma delimiters:
@verbatim
-file fin=csv(input("test.txt"));
+file fin=input("test.txt").csv();
real[] A=fin;
@end verbatim
@@ -5594,7 +5606,7 @@ To restrict the number of values read, use the @code{file dimension(int)}
function:
@verbatim
file fin=input("test.txt");
-real[] A=dimension(fin,10);
+real[] A=fin.dimension(10);
@end verbatim
This reads 10 values into A, unless end-of-file (or end-of-line in line mode)
@@ -7863,14 +7875,16 @@ normals or vertex colors:
@cindex @code{tessellation}
@verbatim
void draw(picture pic=currentpicture, triple[] v, int[][] vi,
- triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
- int[][] pi={}, light light=currentlight);
+ triple[] n={}, int[][] ni=vi, material m=currentpen, pen[] p={},
+ int[][] pi=vi, light light=currentlight);
@end verbatim
-Here, the triple array @code{v} lists the distinct vertices, while
-the array @code{vi} lists integer arrays of length 3 containing
-the indices of @code{v} corresponding to the vertices of each
+Here, the triple array @code{v} lists the (typically distinct) vertices, while
+the array @code{vi} contains integer arrays of length 3 containing
+the indices of the elements in @code{v} that form the vertices of each
triangle. Similarly, the arguments @code{n} and @code{ni} contain
-optional normal data and @code{p} and @code{pi} contain optional pen vertex data.
+optional normal data and @code{p} and @code{pi} contain optional pen
+vertex data. If more than one normal or pen is specified for a vertex, the
+last one specified is used.
An example of this tessellation facility is given in @code{@uref{http://asymptote.sourceforge.net/gallery/triangles.pdf,,triangles}@uref{http://asymptote.sourceforge.net/gallery/triangles.asy,,.asy}}.
@cindex @code{thin}
@@ -7897,18 +7911,17 @@ parameter or the setting @code{thin} is set to @code{false}. The pens
also be used to override these defaults for specific draw commands.
@noindent
-There are four choices for viewing 3D @code{Asymptote} output:
+There are five choices for viewing 3D @code{Asymptote} output:
@enumerate
+
@cindex @code{OpenGL}
@cindex @code{render}
@cindex @code{outformat}
@cindex @code{multisample}
@item Use the native @code{Asymptote} adaptive @code{OpenGL}-based
renderer (with the command-line option @code{-V} and the default settings
-@code{outformat=""} and @code{render=-1}). If you encounter warnings
-from your graphics card driver, try specifying @code{-glOptions=-indirect}
-on the command line. On @code{UNIX} systems with graphics support for
-multisampling, the sample width can be
+@code{outformat=""} and @code{render=-1}). On @code{UNIX} systems with
+graphics support for multisampling, the sample width can be
controlled with the setting @code{multisample}. An initial screen
position can be specified with the pair setting @code{position}, where
negative values are interpreted as relative to the corresponding
@@ -7961,6 +7974,40 @@ The keyboard shortcuts are:
@item Ctrl-q: exit
@end itemize
+@cindex @code{WebGL}
+@cindex @code{HTML5}
+@cindex @code{mobile browser}
+@item Generate @code{WebGL} interactive vector graphics
+output with the the command-line option and @code{-f html}
+(or the setting @code{outformat="html"}). The resulting
+3D @acronym{HTML} file can then be viewed directly in any modern desktop or
+mobile browser, or even embedded within another web page:
+@verbatim
+<div>
+<object data="logo3.html"
+ style="width:210;height:140;position:relative;top:0;left:0;">
+</object>
+</div>
+@end verbatim
+
+Normally, @code{WebGL} files generated by @code{Asymptote} are
+dynamically remeshed to fit the browser window dimensions.
+However, the setting @code{absolute=true} can be used to force the image to be
+rendered at its designed size (accounting for multiple device pixels
+per @code{css} pixel). This setting should not be used when
+embedding a @code{WebGL} file within another @acronym{HTML} document.
+
+The interactive @code{WebGL} files produced by @code{Asymptote} use the
+default mouse and (many of the same) key bindings as the @code{OpenGL}
+renderer.
+
+By default, viewing the 3D @acronym{HTML} files generated by Asymptote requires
+network access to download the @code{asygl} rendering library, which
+is normally cached by the browser for future use.
+However, the setting @code{offline=true} can be used to embed this
+small (about 42kB) library within a stand-alone @acronym{HTML} file
+that can be viewed offline.
+
@cindex @code{antialias}
@cindex @code{maxviewport}
@cindex @code{maxtile}
@@ -7985,8 +8032,6 @@ setting @code{maxviewport}, which restricts the maximum width and
height of the viewport. On @code{UNIX} systems some graphics
drivers support batch mode (@code{-noV}) rendering in an
iconified window; this can be enabled with the setting @code{iconify=true}.
-Some (broken) @code{UNIX} graphics drivers may require the command line setting
-@code{-glOptions=-indirect}, which requests (slower) indirect rendering.
@cindex @code{prc}
@cindex @code{views}
@@ -8033,7 +8078,7 @@ void size3(picture pic=currentpicture, real x, real y=x, real z=y,
@cindex margins
@cindex @code{viewportmargin}
@cindex @code{viewportsize}
-The resulting simplex linear programming problem is then solved to
+A simplex linear programming problem is then solved to
produce a 3D version of a frame (actually implemented as a 3D picture).
The result is then fit with another application of deferred drawing
to the viewport dimensions corresponding to the usual two-dimensional
@@ -9227,6 +9272,7 @@ variables may also be changed at runtime.
@cindex @code{hyperrefOptions}
@cindex @code{convertOptions}
@cindex @code{gsOptions}
+@cindex @code{htmlviewerOptions}
@cindex @code{psviewerOptions}
@cindex @code{pdfviewerOptions}
@cindex @code{pdfreloadOptions}
@@ -9234,7 +9280,8 @@ variables may also be changed at runtime.
@cindex @code{dvisvgmOptions}
The advanced configuration variables @code{dvipsOptions},
@code{hyperrefOptions}, @code{convertOptions}, @code{gsOptions},
-@code{psviewerOptions}, @code{pdfviewerOptions}, @code{pdfreloadOptions},
+@code{htmlviewerOptions}, @code{psviewerOptions},
+@code{pdfviewerOptions}, @code{pdfreloadOptions},
@code{glOptions}, and @code{dvisvgmOptions} allow specialized options
to be passed as a string to the respective applications or
libraries. The default value of @code{hyperrefOptions} is
@@ -9510,7 +9557,7 @@ pip3 install cson numpy pyqt5 PyQt5.sip
@end verbatim
Pictures are deconstructed into the @acronym{SVG} image format.
-Since @code{Qt5} does not suport @code{SVG} clipping, you will need
+Since @code{Qt5} does not support @code{SVG} clipping, you will need
the @code{rsvg-convert} utility, which is part of the
@code{librsvg2-tools} package on @code{UNIX} systems
and the @code{librsvg} package on @code{MacOS}; under
@@ -9945,10 +9992,21 @@ Martin Wiebusch, Stefan Knorr, and Supakorn ``Jamie'' Rassameemasmuang.
@c LocalWords: 5unit 144x144 aligndir smoothcontour3 's 3D 2D cmake
@c LocalWords: 'load 'asy 'lasy 'auto 5bp 1cm 4g 2S 100pt 3t nan 3x
@c LocalWords: 12pt 5mm 25cm 5x 3y 602e 2x 2y 3sin 10cm 204e 10x Ai
-@c LocalWords: Ai Ai Ai Ai Ai Ai Ai 5E 5cm 2N 2E 2n 100d 5z 5y nz
+@c LocalWords: Ai Ai Ai Ai Ai Ai Ai 5E 5cm 2N 2E 2n 100d 5z 5y nz '
@c LocalWords: 5unit Staats implicitsurface overlapedges maxdepth
@c LocalWords: through'' genustwo 144x144 0pt 1filll 's 3D 2D 'load
@c LocalWords: 'asy 'lasy 'auto 5bp 1cm 4g 2S 100pt 3t 12pt 5mm 3x
@c LocalWords: 25cm 5x 3y 602e 2x 2y 3sin 10cm 204e 10x Ai Ai Ai Ai
@c LocalWords: Ai Ai Ai Ai 5E 5cm 2N 2E 2n 100d 5z 5y 5unit 144x144
-@c LocalWords: Frohlich
+@c LocalWords: Frohlich codequoteundirected center 0pt 1filll 's 3D
+@c LocalWords: acknowledgments Colors 2D Color WebGL uref x86 dnf
+@c LocalWords: htmlviewer asygl CPPFLAGS 'load 'asy 'lasy 'auto 5bp
+@c LocalWords: 1cm labeling dotfilltype 4g color colors centered 2S
+@c LocalWords: 100pt 3t forcemath gray colorless miter 12pt 5mm 3x
+@c LocalWords: zeroTransform 25cm Python3 popcount bitreverse 5x 3y
+@c LocalWords: 602e 2x 2y 3sin 10cm 204e 10x Ai Ai Ai Ai Ai Ai Ai
+@c LocalWords: Ai findall ax 5a centers 5E 5cm 2N 2E 2n HTML5 html
+@c LocalWords: logo3 remeshed css 42kB 100d 5z 5y 5unit colored Qt5
+@c LocalWords: behavior beveled usetriangles htmlviewerOptions cson
+@c LocalWords: 144x144 pyqt5 numpy pip3 PyQt5 rsvg librsvg2
+@c LocalWords: librsvg Supakorn Jamie'' Rassameemasmuang
diff --git a/graphics/asymptote/doc/png/Makefile.in b/graphics/asymptote/doc/png/Makefile.in
index 44e3fbdf4a..fc36836b01 100644
--- a/graphics/asymptote/doc/png/Makefile.in
+++ b/graphics/asymptote/doc/png/Makefile.in
@@ -13,9 +13,9 @@ all: html info
%.png: ../%.asy
cd .. && $(ASY) -f png -o png/ $(notdir $<)
-latexusage.png: ../latexusage.eps
+latexusage.png: ../latexusage.pdf
gs -q -dNOPAUSE -dBATCH -sDEVICE=pngalpha -dEPSCrop -dSAFER -r72x72 \
- -sOutputFile=latexusage.png ../latexusage.eps
+ -sOutputFile=latexusage.png ../latexusage.pdf
index.html: $(SOURCE) $(ASYFILES:.asy=.png) latexusage.png
makeinfo --html ../asymptote -o .
diff --git a/graphics/asymptote/doc/png/asymptote.info b/graphics/asymptote/doc/png/asymptote.info
index eefb40a447..3dc55bfaab 100644
--- a/graphics/asymptote/doc/png/asymptote.info
+++ b/graphics/asymptote/doc/png/asymptote.info
@@ -1,7 +1,7 @@
This is asymptote.info, produced by makeinfo version 6.5 from
asymptote.texi.
-This file documents 'Asymptote', version 2.53.
+This file documents 'Asymptote', version 2.54.
<http://asymptote.sourceforge.net>
@@ -22,7 +22,7 @@ File: asymptote.info, Node: Top, Next: Description, Prev: (dir), Up: (dir)
Asymptote
*********
-This file documents 'Asymptote', version 2.53.
+This file documents 'Asymptote', version 2.54.
<http://asymptote.sourceforge.net>
@@ -68,7 +68,7 @@ Installation
Tutorial
* Drawing in batch mode:: Run 'Asymptote' on a text file
-* Drawing in interactive mode:: Running 'Asymptote' interactively
+* Drawing in interactive mode:: Running 'Asymptote' interactively
* Figure size:: Specifying the figure size
* Labels:: Adding 'LaTeX' labels
* Paths:: Drawing lines and curves
@@ -203,6 +203,9 @@ weaker syntax and capabilities) called 'MetaPost'.
* 'LaTeX' typesetting of labels, for overall document consistency;
+ * the ability to generate and embed 3D vector WebGL graphics within
+ HTML files;
+
* the ability to generate and embed 3D vector PRC graphics within PDF
files;
@@ -234,8 +237,8 @@ weaker syntax and capabilities) called 'MetaPost'.
Many of the features of 'Asymptote' are written in the 'Asymptote'
language itself. While the stock version of 'Asymptote' is designed for
mathematics typesetting needs, one can write 'Asymptote' modules that
-tailor it to specific applications. A scientific graphing module has
-already been written (*note graph::). Examples of 'Asymptote' code and
+tailor it to specific applications; for example, a scientific graphing
+module is available (*note graph::). Examples of 'Asymptote' code and
output, including animations, are available at
<http://asymptote.sourceforge.net/gallery/>
Clicking on an example file name in this manual, like 'Pythagoras', will
@@ -338,7 +341,7 @@ available from <http://www.cs.wisc.edu/~ghost/gsview/>.
The 'ImageMagick' package from
<http://www.imagemagick.org/script/binary-releases.php>
-is required to support output formats other than EPS, PDF, SVG, and PNG
+is required to support output formats other than HTML, PDF, SVG, and PNG
(*note convert::). The 'Python 3' interpreter from
<http://www.python.org> is only required if you wish to try out the
graphical user interface (*note GUI::).
@@ -356,43 +359,51 @@ File: asymptote.info, Node: Configuring, Next: Search paths, Prev: Microsoft
In interactive mode, or when given the '-V' option (the default when
running 'Asymptote' on a single file under 'MSDOS'), 'Asymptote' will
automatically invoke the 'PostScript' viewer 'gv' (under 'UNIX') or
-'gsview' (under 'MSDOS' to display graphical output. These defaults may
-be overridden with the configuration variable 'psviewer'. The
-'PostScript' viewer should be capable of automatically redrawing
-whenever the output file is updated. The default 'UNIX' 'PostScript'
-viewer 'gv' supports this (via a 'SIGHUP' signal). Version 'gv-3.6.3'
-or later (from <http://ftp.gnu.org/gnu/gv/>) is required for interactive
-mode to work properly. Users of 'ggv' will need to enable 'Watch file'
-under 'Edit/Postscript Viewer Preferences'. Users of 'gsview' will need
-to enable 'Options/Auto Redisplay' (however, under 'MSDOS' it is still
+'gsview' (under 'MSDOS' to display graphical output. The 'PostScript'
+viewer should be capable of automatically redrawing whenever the output
+file is updated. The default 'UNIX' 'PostScript' viewer 'gv' supports
+this (via a 'SIGHUP' signal). Version 'gv-3.6.3' or later (from
+<http://ftp.gnu.org/gnu/gv/>) is required for interactive mode to work
+properly. Users of 'ggv' will need to enable 'Watch file' under
+'Edit/Postscript Viewer Preferences'. Users of 'gsview' will need to
+enable 'Options/Auto Redisplay' (however, under 'MSDOS' it is still
necessary to click on the 'gsview' window; under 'UNIX' one must
manually redisplay by pressing the 'r' key).
Configuration variables are most easily set as 'Asymptote' variables
in an optional configuration file 'config.asy' *note configuration
-file::). Here are the default values of several important configuration
-variables under 'UNIX':
+file::). For example, the setting 'pdfviewer' specifies the location of
+the PDF viewer. Here are the default values of several important
+configuration variables under 'UNIX':
import settings;
-psviewer="gv";
pdfviewer="acroread";
+htmlviewer="google-chrome";
+psviewer="gv";
+display="display";
+animate="animate";
gs="gs";
-
-Under 'MSDOS', the (installation-dependent) default values of these
-configuration variables are determined automatically from the 'Microsoft
-Windows' registry. Viewer settings (such as 'psviewer' and 'pdfviewer')
-can be set to the string 'cmd' to request the application normally
-associated with the corresponding file type.
-
- For PDF format output, the 'gs' setting specifies the location of the
-'PostScript'-to-PDF processor 'Ghostscript', available from
-<http://downloads.ghostscript.com/public>.
-
- The setting 'pdfviewer' specifies the location of the PDF viewer. On
-'UNIX' systems, to support automatic document reloading in 'Adobe
-Reader', we recommend copying the file 'reload.js' from the 'Asymptote'
-system directory (by default, '/usr/local/share/asymptote' under 'UNIX'
-to '~/.adobe/Acrobat/x.x/JavaScripts/', where 'x.x' represents the
+libgs="";
+
+Under 'MSDOS', the viewer settings 'htmlviewer', 'pdfviewer',
+'psviewer', 'display', and 'animate' default to the string 'cmd',
+requesting the application normally associated with each file type. The
+(installation-dependent) default values of 'gs' and 'libgs' are
+determined automatically from the 'Microsoft Windows' registry. The
+'gs' setting specifies the location of the 'PostScript' processor
+'Ghostscript', available from <https://www.ghostscript.com/>.
+
+The configuration variable 'htmlviewer' specifies the browser to use to
+display 3D 'WebGL' output. The default setting is 'google-chrome' under
+'UNIX' and 'cmd' under 'Microsoft Windows'. Note that 'Internet
+Explorer' does not support 'WebGL'; 'Microsoft Windows' users should set
+their default html browser to 'chrome' or 'microsoft-edge'.
+
+ On 'UNIX' systems, to support automatic document reloading of 'PDF'
+files in 'Adobe Reader', we recommend copying the file 'reload.js' from
+the 'Asymptote' system directory (by default,
+'/usr/local/share/asymptote' under 'UNIX' to
+'~/.adobe/Acrobat/x.x/JavaScripts/', where 'x.x' represents the
appropriate 'Adobe Reader' version number. The automatic document
reload feature must then be explicitly enabled by putting
import settings;
@@ -411,17 +422,14 @@ changed to 'a4' with the configuration variable 'papertype'. Alignment
to other paper sizes can be obtained by setting the configuration
variables 'paperwidth' and 'paperheight'.
- The following configuration variables normally do not require
+ These additional configuration variables normally do not require
adjustment:
config
texpath
texcommand
dvips
dvisvgm
-libgs
convert
-display
-animate
Warnings (such as "unbounded" and "offaxis") may be enabled or
disabled with the functions
@@ -634,7 +642,7 @@ File: asymptote.info, Node: Tutorial, Next: Drawing commands, Prev: Installat
* Menu:
* Drawing in batch mode:: Run 'Asymptote' on a text file
-* Drawing in interactive mode:: Running 'Asymptote' interactively
+* Drawing in interactive mode:: Running 'Asymptote' interactively
* Figure size:: Specifying the figure size
* Labels:: Adding 'LaTeX' labels
* Paths:: Drawing lines and curves
@@ -3447,7 +3455,7 @@ same type, which will also be the type of the result:
'+'
addition
'-'
- subtractiona
+ subtraction
'*'
multiplication
'/'
@@ -4320,13 +4328,13 @@ real[] A=fin;
Another useful mode is comma-separated-value mode, 'file csv(bool
b=true)', which causes reads to respect comma delimiters:
-file fin=csv(input("test.txt"));
+file fin=input("test.txt").csv();
real[] A=fin;
To restrict the number of values read, use the 'file dimension(int)'
function:
file fin=input("test.txt");
-real[] A=dimension(fin,10);
+real[] A=fin.dimension(10);
This reads 10 values into A, unless end-of-file (or end-of-line in
line mode) occurs first. Attempting to read beyond the end of the file
@@ -6847,14 +6855,15 @@ bounded by cyclic paths of length '4' or less.
composed of many 3D triangles, with specified vertices, and optional
normals or vertex colors:
void draw(picture pic=currentpicture, triple[] v, int[][] vi,
- triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
- int[][] pi={}, light light=currentlight);
- Here, the triple array 'v' lists the distinct vertices, while the
-array 'vi' lists integer arrays of length 3 containing the indices of
-'v' corresponding to the vertices of each triangle. Similarly, the
-arguments 'n' and 'ni' contain optional normal data and 'p' and 'pi'
-contain optional pen vertex data. An example of this tessellation
-facility is given in 'triangles.asy'.
+ triple[] n={}, int[][] ni=vi, material m=currentpen, pen[] p={},
+ int[][] pi=vi, light light=currentlight);
+ Here, the triple array 'v' lists the (typically distinct) vertices,
+while the array 'vi' contains integer arrays of length 3 containing the
+indices of the elements in 'v' that form the vertices of each triangle.
+Similarly, the arguments 'n' and 'ni' contain optional normal data and
+'p' and 'pi' contain optional pen vertex data. If more than one normal
+or pen is specified for a vertex, the last one specified is used. An
+example of this tessellation facility is given in 'triangles.asy'.
Arbitrary thick three-dimensional curves and line caps (which the
'OpenGL' standard does not require implementations to provide) are
@@ -6872,17 +6881,16 @@ given in the pen parameter or the setting 'thin' is set to 'false'. The
pens 'thin()' and 'thick()' defined in 'plain_pens.asy' can also be used
to override these defaults for specific draw commands.
-There are four choices for viewing 3D 'Asymptote' output:
+There are five choices for viewing 3D 'Asymptote' output:
+
1. Use the native 'Asymptote' adaptive 'OpenGL'-based renderer (with
the command-line option '-V' and the default settings
- 'outformat=""' and 'render=-1'). If you encounter warnings from
- your graphics card driver, try specifying '-glOptions=-indirect' on
- the command line. On 'UNIX' systems with graphics support for
- multisampling, the sample width can be controlled with the setting
- 'multisample'. An initial screen position can be specified with
- the pair setting 'position', where negative values are interpreted
- as relative to the corresponding maximum screen dimension. The
- default settings
+ 'outformat=""' and 'render=-1'). On 'UNIX' systems with graphics
+ support for multisampling, the sample width can be controlled with
+ the setting 'multisample'. An initial screen position can be
+ specified with the pair setting 'position', where negative values
+ are interpreted as relative to the corresponding maximum screen
+ dimension. The default settings
import settings;
leftbutton=new string[] {"rotate","zoom","shift","pan"};
middlebutton=new string[] {""};
@@ -6923,7 +6931,36 @@ There are four choices for viewing 3D 'Asymptote' output:
* q: exit
* Ctrl-q: exit
- 2. Render the scene to a specified rasterized format 'outformat' at
+ 2. Generate 'WebGL' interactive vector graphics output with the the
+ command-line option and '-f html' (or the setting
+ 'outformat="html"'). The resulting 3D HTML file can then be viewed
+ directly in any modern desktop or mobile browser, or even embedded
+ within another web page:
+ <div>
+ <object data="logo3.html"
+ style="width:210;height:140;position:relative;top:0;left:0;">
+ </object>
+ </div>
+
+ Normally, 'WebGL' files generated by 'Asymptote' are dynamically
+ remeshed to fit the browser window dimensions. However, the
+ setting 'absolute=true' can be used to force the image to be
+ rendered at its designed size (accounting for multiple device
+ pixels per 'css' pixel). This setting should not be used when
+ embedding a 'WebGL' file within another HTML document.
+
+ The interactive 'WebGL' files produced by 'Asymptote' use the
+ default mouse and (many of the same) key bindings as the 'OpenGL'
+ renderer.
+
+ By default, viewing the 3D HTML files generated by Asymptote
+ requires network access to download the 'asygl' rendering library,
+ which is normally cached by the browser for future use. However,
+ the setting 'offline=true' can be used to embed this small (about
+ 42kB) library within a stand-alone HTML file that can be viewed
+ offline.
+
+ 3. Render the scene to a specified rasterized format 'outformat' at
the resolution of 'n' pixels per 'bp', as specified by the setting
'render=n'. A negative value of 'n' is interpreted as '|2n|' for
EPS and PDF formats and '|n|' for other formats. The default value
@@ -6939,12 +6976,9 @@ There are four choices for viewing 3D 'Asymptote' output:
limited by the setting 'maxviewport', which restricts the maximum
width and height of the viewport. On 'UNIX' systems some graphics
drivers support batch mode ('-noV') rendering in an iconified
- window; this can be enabled with the setting 'iconify=true'. Some
- (broken) 'UNIX' graphics drivers may require the command line
- setting '-glOptions=-indirect', which requests (slower) indirect
- rendering.
+ window; this can be enabled with the setting 'iconify=true'.
- 3. Embed the 3D PRC format in a PDF file and view the resulting PDF
+ 4. Embed the 3D PRC format in a PDF file and view the resulting PDF
file with version '9.0' or later of 'Adobe Reader'. In addition to
the default 'settings.prc=true', this requires
'settings.outformat="pdf"', which can be specified by the command
@@ -6965,7 +6999,7 @@ There are four choices for viewing 3D 'Asymptote' output:
The open-source PRC specification is available from
<http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/API_References/PRCReference/PRC_Format_Specification/>.
- 4. Project the scene to a two-dimensional vector (EPS or PDF) format
+ 5. Project the scene to a two-dimensional vector (EPS or PDF) format
with 'render=0'. Only limited hidden surface removal facilities
are currently available with this approach (*note PostScript3D::).
@@ -6975,12 +7009,12 @@ each of the three dimensions can optionally be specified with the
routine
void size3(picture pic=currentpicture, real x, real y=x, real z=y,
bool keepAspect=pic.keepAspect);
-The resulting simplex linear programming problem is then solved to
-produce a 3D version of a frame (actually implemented as a 3D picture).
-The result is then fit with another application of deferred drawing to
-the viewport dimensions corresponding to the usual two-dimensional
-picture 'size' parameters. The global pair 'viewportmargin' may be used
-to add horizontal and vertical margins to the viewport dimensions.
+A simplex linear programming problem is then solved to produce a 3D
+version of a frame (actually implemented as a 3D picture). The result
+is then fit with another application of deferred drawing to the viewport
+dimensions corresponding to the usual two-dimensional picture 'size'
+parameters. The global pair 'viewportmargin' may be used to add
+horizontal and vertical margins to the viewport dimensions.
Alternatively, a minimum 'viewportsize' may be specified. A 3D picture
'pic' can be explicitly fit to a 3D frame by calling
frame pic.fit3(projection P=currentprojection);
@@ -8053,10 +8087,10 @@ Usage: ../asy [options] [file ...]
Options (negate by replacing - with -no):
-V,-View View output; command-line only
+-absolute Use absolute WebGL dimensions [false]
-a,-align C|B|T|Z Center, Bottom, Top, or Zero page alignment [C]
-aligndir pair Directional page alignment (overrides align) [(0,0)]
-antialias n Antialiasing width for rasterized output [2]
--arcballradius pixels Arcball radius [750]
-auto3D Automatically activate 3D scene [true]
-autobillboard 3D labels always face viewer by default [true]
-autoimport string Module to automatically import
@@ -8072,8 +8106,8 @@ Options (negate by replacing - with -no):
-c,-command string Command to autoexecute
-compact Conserve memory at the expense of speed [false]
-d,-debug Enable debugging messages [false]
+-digits n Default output file precision [6]
-divisor n Garbage collect using purge(divisor=n) [2]
--doubleclick ms Emulated double-click timeout [200]
-embed Embed rendered preview image [true]
-envmap Enable environment map image-based lighting (Experimental) [false]
-exitonEOF Exit interactive mode on EOF [true]
@@ -8103,6 +8137,7 @@ Options (negate by replacing - with -no):
-multiline Input code over multiple lines at the prompt [false]
-multipleView View output from multiple batch-mode files [false]
-multisample n Multisampling width for screen images [4]
+-offline Produce offline html files [false]
-offscreen Use offscreen rendering [false]
-O,-offset pair PostScript offset [(0,0)]
-f,-outformat format Convert each output file to specified format
@@ -8121,6 +8156,8 @@ Options (negate by replacing - with -no):
-rgb Convert cmyk colors to rgb [false]
-safe Disable system call [true]
-scroll n Scroll standard output n lines at a time [0]
+-shiftHoldDistance n WebGL touch screen distance limit for shift mode [20]
+-shiftWaitTime ms WebGL touch screen shift mode delay [200]
-spinstep deg/s Spin speed [60]
-svgemulation Emulate unimplemented SVG shading [false]
-tabcompletion Interactive prompt auto-completion [true]
@@ -8135,10 +8172,14 @@ Options (negate by replacing - with -no):
-u,-user string General purpose user string
-v,-verbose Increase verbosity level (can specify multiple times) [0]
-version Show version; command-line only
+-vibrateTime ms WebGL shift mode vibrate duration [25]
+-viewportmargin pair Horizontal and vertical 3D viewport margin [(0.5,0.5)]
-wait Wait for child processes to finish before exiting [false]
-warn string Enable warning; command-line only
-where Show where listed variables are declared [false]
-xasy Special interactive mode for xasy [false]
+-zoomPinchCap limit WebGL maximum zoom pinch [100]
+-zoomPinchFactor n WebGL zoom pinch sensitivity [10]
-zoomfactor factor Zoom step factor [1.05]
-zoomstep step Mouse motion zoom step [0.1]
@@ -8177,11 +8218,11 @@ interactiveMask=true;
Command-line options override these defaults. Most configuration
variables may also be changed at runtime. The advanced configuration
variables 'dvipsOptions', 'hyperrefOptions', 'convertOptions',
-'gsOptions', 'psviewerOptions', 'pdfviewerOptions', 'pdfreloadOptions',
-'glOptions', and 'dvisvgmOptions' allow specialized options to be passed
-as a string to the respective applications or libraries. The default
-value of 'hyperrefOptions' is 'setpagesize=false,unicode,pdfborder=0 0
-0'.
+'gsOptions', 'htmlviewerOptions', 'psviewerOptions', 'pdfviewerOptions',
+'pdfreloadOptions', 'glOptions', and 'dvisvgmOptions' allow specialized
+options to be passed as a string to the respective applications or
+libraries. The default value of 'hyperrefOptions' is
+'setpagesize=false,unicode,pdfborder=0 0 0'.
If you insert
import plain;
@@ -8377,7 +8418,7 @@ packages 'pyqt5', 'cson', and 'numpy':
pip3 install cson numpy pyqt5 PyQt5.sip
Pictures are deconstructed into the SVG image format. Since 'Qt5'
-does not suport 'SVG' clipping, you will need the 'rsvg-convert'
+does not support 'SVG' clipping, you will need the 'rsvg-convert'
utility, which is part of the 'librsvg2-tools' package on 'UNIX' systems
and the 'librsvg' package on 'MacOS'; under 'Microsoft Windows', it is
available as
@@ -8595,9 +8636,9 @@ Index
* ---: Bezier curves. (line 84)
* -=: Self & prefix operators.
(line 6)
-* -c: Options. (line 186)
-* -l: Options. (line 205)
-* -u: Options. (line 196)
+* -c: Options. (line 193)
+* -l: Options. (line 212)
+* -u: Options. (line 203)
* -V: Configuring. (line 6)
* -V <1>: Drawing in batch mode.
(line 16)
@@ -8610,7 +8651,7 @@ Index
* 2D graphs: graph. (line 6)
* 3D graphs: graph3. (line 6)
* 3D grids: grid3. (line 6)
-* 3D PostScript: three. (line 580)
+* 3D PostScript: three. (line 606)
* :: Arithmetic & logical.
(line 61)
* ::: Bezier curves. (line 70)
@@ -8638,14 +8679,14 @@ Index
(line 53)
* ||: Arithmetic & logical.
(line 51)
-* a4: Configuring. (line 58)
+* a4: Configuring. (line 66)
* abort: Data types. (line 363)
* abs: Data types. (line 65)
* abs <1>: Mathematical functions.
(line 35)
* accel: Paths and guides. (line 126)
* accel <1>: Paths and guides. (line 132)
-* accel <2>: three. (line 481)
+* accel <2>: three. (line 507)
* access: Import. (line 6)
* acknowledgments: Credits. (line 6)
* acos: Mathematical functions.
@@ -8658,8 +8699,8 @@ Index
(line 212)
* add <1>: Frames and pictures.
(line 228)
-* add <2>: three. (line 253)
-* addViews: three. (line 374)
+* add <2>: three. (line 279)
+* addViews: three. (line 400)
* adjust: Pens. (line 123)
* Ai: Mathematical functions.
(line 48)
@@ -8670,35 +8711,35 @@ Index
* alias: Structures. (line 62)
* alias <1>: Arrays. (line 174)
* Align: label. (line 12)
-* aligndir: Options. (line 178)
+* aligndir: Options. (line 185)
* all: Arrays. (line 325)
* Allow: Pens. (line 347)
* and: Bezier curves. (line 56)
* AND: Arithmetic & logical.
(line 68)
* angle: Data types. (line 73)
-* animate: Configuring. (line 64)
+* animate: Configuring. (line 20)
* animate <1>: Files. (line 155)
* animate <2>: animation. (line 12)
* animation: animation. (line 6)
* animation <1>: animation. (line 6)
* annotate: annotate. (line 6)
-* antialias: three. (line 192)
-* antialias <1>: Options. (line 149)
+* antialias: three. (line 221)
+* antialias <1>: Options. (line 156)
* append: Files. (line 36)
* append <1>: Arrays. (line 39)
* arc: Paths and guides. (line 24)
* Arc: Paths and guides. (line 37)
-* arc <1>: three. (line 264)
+* arc <1>: three. (line 290)
* ArcArrow: draw. (line 26)
-* ArcArrow3: three. (line 547)
+* ArcArrow3: three. (line 573)
* ArcArrows: draw. (line 26)
-* ArcArrows3: three. (line 547)
+* ArcArrows3: three. (line 573)
* arclength: Paths and guides. (line 153)
-* arclength <1>: three. (line 481)
+* arclength <1>: three. (line 507)
* arcpoint: Paths and guides. (line 163)
* arctime: Paths and guides. (line 157)
-* arctime <1>: three. (line 481)
+* arctime <1>: three. (line 507)
* arguments: Default arguments. (line 6)
* arithmetic operators: Arithmetic & logical.
(line 6)
@@ -8712,10 +8753,10 @@ Index
* arrow keys: Drawing in interactive mode.
(line 11)
* arrow keys <1>: GUI usage. (line 6)
-* Arrow3: three. (line 547)
+* Arrow3: three. (line 573)
* arrows: draw. (line 26)
* Arrows: draw. (line 26)
-* Arrows3: three. (line 547)
+* Arrows3: three. (line 573)
* as: Import. (line 67)
* ascii: Data types. (line 308)
* ascii <1>: Data types. (line 308)
@@ -8733,10 +8774,11 @@ Index
* asy <1>: Import. (line 101)
* asy-mode: Editing modes. (line 6)
* asy.vim: Editing modes. (line 32)
+* asygl: Configuring. (line 72)
* asyinclude: LaTeX usage. (line 45)
* asymptote.sty: LaTeX usage. (line 6)
* asymptote.xml: Editing modes. (line 48)
-* ASYMPTOTE_CONFIG: Options. (line 120)
+* ASYMPTOTE_CONFIG: Options. (line 127)
* atan: Mathematical functions.
(line 6)
* aTan: Mathematical functions.
@@ -8750,8 +8792,8 @@ Index
(line 273)
* attach <1>: LaTeX usage. (line 50)
* attach <2>: graph. (line 407)
-* autoadjust: three. (line 339)
-* autoimport: Options. (line 116)
+* autoadjust: three. (line 365)
+* autoimport: Options. (line 123)
* automatic scaling: graph. (line 691)
* automatic scaling <1>: graph. (line 691)
* axialshade: fill. (line 43)
@@ -8763,11 +8805,11 @@ Index
* babel: babel. (line 6)
* background color: Frames and pictures.
(line 180)
-* BackView: three. (line 367)
+* BackView: three. (line 393)
* Bar: draw. (line 19)
-* Bar3: three. (line 547)
+* Bar3: three. (line 573)
* Bars: draw. (line 19)
-* Bars3: three. (line 547)
+* Bars3: three. (line 573)
* barsize: draw. (line 19)
* base modules: Base modules. (line 6)
* basealign: Pens. (line 181)
@@ -8776,18 +8818,18 @@ Index
(line 6)
* beep: Data types. (line 381)
* BeginArcArrow: draw. (line 26)
-* BeginArcArrow3: three. (line 547)
+* BeginArcArrow3: three. (line 573)
* BeginArrow: draw. (line 26)
-* BeginArrow3: three. (line 547)
+* BeginArrow3: three. (line 573)
* BeginBar: draw. (line 19)
-* BeginBar3: three. (line 547)
+* BeginBar3: three. (line 573)
* BeginDotMargin: draw. (line 42)
-* BeginDotMargin3: three. (line 563)
+* BeginDotMargin3: three. (line 589)
* BeginMargin: draw. (line 42)
-* BeginMargin3: three. (line 563)
+* BeginMargin3: three. (line 589)
* BeginPenMargin: draw. (line 42)
-* BeginPenMargin2: three. (line 563)
-* BeginPenMargin3: three. (line 563)
+* BeginPenMargin2: three. (line 589)
+* BeginPenMargin3: three. (line 589)
* BeginPoint: label. (line 55)
* Bessel: Mathematical functions.
(line 48)
@@ -8799,7 +8841,7 @@ Index
* bezulate: three. (line 106)
* Bi: Mathematical functions.
(line 48)
-* Billboard: three. (line 451)
+* Billboard: three. (line 477)
* binary: Files. (line 76)
* binary format: Files. (line 76)
* binary operators: Arithmetic & logical.
@@ -8807,7 +8849,7 @@ Index
* binarytree: binarytree. (line 6)
* Bi_deriv: Mathematical functions.
(line 48)
-* black stripes: three. (line 192)
+* black stripes: three. (line 221)
* Blank: draw. (line 26)
* block.bottom: flowchart. (line 19)
* block.bottomleft: flowchart. (line 19)
@@ -8826,7 +8868,7 @@ Index
(line 6)
* Bottom: graph. (line 132)
* BottomTop: graph. (line 138)
-* BottomView: three. (line 367)
+* BottomView: three. (line 393)
* bounding box: Frames and pictures.
(line 180)
* Bounds: graph3. (line 21)
@@ -8834,8 +8876,8 @@ Index
(line 25)
* box <1>: Frames and pictures.
(line 130)
-* box <2>: three. (line 286)
-* box <3>: three. (line 288)
+* box <2>: three. (line 312)
+* box <3>: three. (line 314)
* bp: Drawing in batch mode.
(line 23)
* brace: Paths and guides. (line 51)
@@ -8853,7 +8895,7 @@ Index
* CAD: CAD. (line 6)
* calculateTransform: Frames and pictures.
(line 118)
-* camera: three. (line 333)
+* camera: three. (line 359)
* casts: Casts. (line 6)
* cbrt: Mathematical functions.
(line 6)
@@ -8861,7 +8903,7 @@ Index
* ceil: Mathematical functions.
(line 26)
* Center: label. (line 60)
-* center: three. (line 316)
+* center: three. (line 342)
* checker: Pens. (line 269)
* Chinese: unicode. (line 12)
* choose: Mathematical functions.
@@ -8870,7 +8912,7 @@ Index
(line 48)
* circle: Paths and guides. (line 10)
* Circle: Paths and guides. (line 18)
-* circle <1>: three. (line 260)
+* circle <1>: three. (line 286)
* circle <2>: flowchart. (line 61)
* circlebarframe: markers. (line 18)
* CJK: unicode. (line 12)
@@ -8881,7 +8923,7 @@ Index
* CLZ: Arithmetic & logical.
(line 68)
* cm: Figure size. (line 18)
-* cmd: Configuring. (line 31)
+* cmd: Configuring. (line 35)
* cmyk: Pens. (line 38)
* colatitude: Data types. (line 158)
* color: Pens. (line 23)
@@ -8892,7 +8934,7 @@ Index
* colors: Pens. (line 54)
* comma: Files. (line 61)
* comma-separated-value mode: Arrays. (line 357)
-* command-line options: Configuring. (line 83)
+* command-line options: Configuring. (line 88)
* command-line options <1>: Options. (line 6)
* comment character: Files. (line 16)
* compass directions: Labels. (line 18)
@@ -8903,14 +8945,14 @@ Index
* conditional: Programming. (line 26)
* conditional <1>: Arithmetic & logical.
(line 61)
-* config: Configuring. (line 64)
-* config <1>: Options. (line 120)
-* configuration file: Configuring. (line 21)
-* configuration file <1>: Options. (line 120)
+* config: Configuring. (line 72)
+* config <1>: Options. (line 127)
+* configuration file: Configuring. (line 20)
+* configuration file <1>: Options. (line 127)
* configuring: Configuring. (line 6)
* conj: Data types. (line 62)
* constructors: Structures. (line 91)
-* context: Options. (line 149)
+* context: Options. (line 156)
* continue: Programming. (line 48)
* continue <1>: Debugger. (line 31)
* contour: contour. (line 6)
@@ -8918,11 +8960,11 @@ Index
* controls: Bezier curves. (line 45)
* controls <1>: three. (line 6)
* controlSpecifier: Paths and guides. (line 396)
-* convert: Configuring. (line 64)
+* convert: Configuring. (line 72)
* convert <1>: Files. (line 155)
* convert <2>: animation. (line 6)
-* convert <3>: Options. (line 149)
-* convertOptions: Options. (line 135)
+* convert <3>: Options. (line 156)
+* convertOptions: Options. (line 142)
* Coons shading: fill. (line 77)
* copy: Arrays. (line 167)
* cos: Mathematical functions.
@@ -8947,7 +8989,7 @@ Index
* curl <1>: three. (line 6)
* curlSpecifier: Paths and guides. (line 408)
* currentpen: Pens. (line 6)
-* currentprojection: three. (line 364)
+* currentprojection: three. (line 390)
* curve: slopefield. (line 20)
* custom axis types: graph. (line 141)
* custom mark routine: graph. (line 578)
@@ -8959,7 +9001,7 @@ Index
* cyclic: Paths and guides. (line 85)
* cyclic <1>: Paths and guides. (line 376)
* cyclic <2>: Arrays. (line 39)
-* cyclic <3>: three. (line 481)
+* cyclic <3>: three. (line 507)
* Cyrillic: unicode. (line 7)
* dashdotted: Pens. (line 102)
* dashed: Pens. (line 102)
@@ -8973,7 +9015,7 @@ Index
* default arguments: Default arguments. (line 6)
* defaultformat: graph. (line 175)
* DefaultHead: draw. (line 26)
-* DefaultHead3: three. (line 547)
+* DefaultHead3: three. (line 573)
* defaultpen: Pens. (line 49)
* defaultpen <1>: Pens. (line 122)
* defaultpen <2>: Pens. (line 127)
@@ -8998,12 +9040,12 @@ Index
* dir <1>: Data types. (line 90)
* dir <2>: Data types. (line 180)
* dir <3>: Paths and guides. (line 109)
-* dir <4>: three. (line 481)
+* dir <4>: three. (line 507)
* direction specifier: Bezier curves. (line 6)
* directory: Files. (line 25)
* dirSpecifier: Paths and guides. (line 390)
* dirtime: Paths and guides. (line 166)
-* display: Configuring. (line 64)
+* display: Configuring. (line 20)
* do: Programming. (line 48)
* DOSendl: Files. (line 61)
* DOSnewl: Files. (line 61)
@@ -9013,11 +9055,11 @@ Index
* dot <3>: Arrays. (line 254)
* dot <4>: Arrays. (line 257)
* DotMargin: draw. (line 42)
-* DotMargin3: three. (line 563)
+* DotMargin3: three. (line 589)
* DotMargins: draw. (line 42)
-* DotMargins3: three. (line 563)
+* DotMargins3: three. (line 589)
* dotted: Pens. (line 102)
-* double deferred drawing: three. (line 238)
+* double deferred drawing: three. (line 264)
* double precision: Files. (line 76)
* draw: Drawing commands. (line 31)
* draw <1>: draw. (line 6)
@@ -9029,11 +9071,11 @@ Index
* drawing commands: Drawing commands. (line 6)
* drawline: math. (line 9)
* drawtree: drawtree. (line 6)
-* dvips: Configuring. (line 64)
-* dvipsOptions: Options. (line 135)
-* dvisvgm: Configuring. (line 64)
-* dvisvgm <1>: Options. (line 154)
-* dvisvgmOptions: Options. (line 135)
+* dvips: Configuring. (line 72)
+* dvipsOptions: Options. (line 142)
+* dvisvgm: Configuring. (line 72)
+* dvisvgm <1>: Options. (line 161)
+* dvisvgmOptions: Options. (line 142)
* E: Labels. (line 18)
* E <1>: Mathematical functions.
(line 48)
@@ -9048,33 +9090,33 @@ Index
* else: Programming. (line 26)
* emacs: Editing modes. (line 6)
* embed: embed. (line 6)
-* Embedded: three. (line 451)
+* Embedded: three. (line 477)
* empty: Frames and pictures.
(line 7)
* EndArcArrow: draw. (line 26)
-* EndArcArrow3: three. (line 547)
+* EndArcArrow3: three. (line 573)
* EndArrow: draw. (line 26)
-* EndArrow3: three. (line 547)
+* EndArrow3: three. (line 573)
* EndBar: draw. (line 19)
-* EndBar3: three. (line 547)
+* EndBar3: three. (line 573)
* EndDotMargin: draw. (line 42)
-* EndDotMargin3: three. (line 563)
+* EndDotMargin3: three. (line 589)
* endl: Files. (line 61)
* EndMargin: draw. (line 42)
-* EndMargin3: three. (line 563)
+* EndMargin3: three. (line 589)
* EndPenMargin: draw. (line 42)
-* EndPenMargin2: three. (line 563)
-* EndPenMargin3: three. (line 563)
+* EndPenMargin2: three. (line 589)
+* EndPenMargin3: three. (line 589)
* EndPoint: label. (line 55)
* envelope: Frames and pictures.
(line 25)
-* environment variables: Configuring. (line 87)
+* environment variables: Configuring. (line 92)
* eof: Files. (line 93)
* eof <1>: Arrays. (line 339)
* eol: Files. (line 93)
* eol <1>: Arrays. (line 339)
* EPS: label. (line 78)
-* EPS <1>: Options. (line 149)
+* EPS <1>: Options. (line 156)
* erase: Drawing in interactive mode.
(line 11)
* erase <1>: Data types. (line 256)
@@ -9111,12 +9153,12 @@ Index
* extension: Paths and guides. (line 246)
* extension <1>: MetaPost. (line 10)
* external: embed. (line 11)
-* extrude: three. (line 475)
+* extrude: three. (line 501)
* F: Mathematical functions.
(line 48)
* fabs: Mathematical functions.
(line 6)
-* face: three. (line 588)
+* face: three. (line 614)
* factorial: Mathematical functions.
(line 39)
* Fedora: UNIX binary distributions.
@@ -9146,7 +9188,7 @@ Index
* firstcut: Paths and guides. (line 262)
* fit: Frames and pictures.
(line 113)
-* fit3: three. (line 251)
+* fit3: three. (line 277)
* fixedscaling: Frames and pictures.
(line 81)
* floor: Mathematical functions.
@@ -9162,12 +9204,12 @@ Index
* fontsize: Pens. (line 192)
* for: Programming. (line 26)
* format: Data types. (line 289)
-* format <1>: Options. (line 149)
+* format <1>: Options. (line 156)
* forum: Help. (line 6)
* frame: Frames and pictures.
(line 7)
* from: Import. (line 16)
-* FrontView: three. (line 367)
+* FrontView: three. (line 393)
* function declarations: Functions. (line 79)
* Function shading: fill. (line 99)
* function shading: fill. (line 99)
@@ -9186,8 +9228,8 @@ Index
* getstring: Files. (line 118)
* gettriple: Files. (line 118)
* git: Git. (line 6)
-* glOptions: three. (line 192)
-* glOptions <1>: Options. (line 135)
+* glOptions: three. (line 221)
+* glOptions <1>: Options. (line 142)
* GNU Scientific Library: Mathematical functions.
(line 48)
* gouraudshade: fill. (line 62)
@@ -9203,12 +9245,12 @@ Index
* grid: Pens. (line 269)
* grid <1>: graph. (line 747)
* grid3: grid3. (line 6)
-* gs: Configuring. (line 6)
+* gs: Configuring. (line 20)
* GSL: Compiling from UNIX source.
(line 63)
* gsl: Mathematical functions.
(line 48)
-* gsOptions: Options. (line 135)
+* gsOptions: Options. (line 142)
* GUI: GUI. (line 6)
* GUI installation: GUI installation. (line 6)
* GUI usage: GUI usage. (line 6)
@@ -9225,34 +9267,38 @@ Index
* hex <1>: Pens. (line 64)
* hexadecimal: Data types. (line 305)
* hexadecimal <1>: Pens. (line 62)
-* hidden surface removal: three. (line 588)
+* hidden surface removal: three. (line 614)
* histogram: Mathematical functions.
(line 39)
* history: Files. (line 143)
* history <1>: Interactive mode. (line 54)
* historylines: Interactive mode. (line 57)
* HookHead: draw. (line 26)
-* HookHead3: three. (line 547)
+* HookHead3: three. (line 573)
* Horizontal: flowchart. (line 77)
-* hyperrefOptions: Options. (line 135)
+* HTML5: three. (line 192)
+* htmlviewer: Configuring. (line 20)
+* htmlviewer <1>: Configuring. (line 43)
+* htmlviewerOptions: Options. (line 142)
+* hyperrefOptions: Options. (line 142)
* hypot: Mathematical functions.
(line 6)
* I: Mathematical functions.
(line 48)
-* iconify: three. (line 192)
+* iconify: three. (line 221)
* identity: Transforms. (line 24)
* identity <1>: Mathematical functions.
(line 6)
* identity <2>: Arrays. (line 296)
-* identity4: three. (line 419)
+* identity4: three. (line 445)
* if: Programming. (line 26)
* IgnoreAspect: Frames and pictures.
(line 63)
* image: palette. (line 33)
* image <1>: palette. (line 58)
-* ImageMagick: Configuring. (line 64)
+* ImageMagick: Configuring. (line 72)
* ImageMagick <1>: animation. (line 6)
-* ImageMagick <2>: Options. (line 149)
+* ImageMagick <2>: Options. (line 156)
* images: palette. (line 6)
* implicit casts: Casts. (line 6)
* implicit linear solver: MetaPost. (line 10)
@@ -9280,7 +9326,7 @@ Index
* inside: Paths and guides. (line 294)
* inside <1>: Paths and guides. (line 299)
* inside <2>: Paths and guides. (line 305)
-* insphere: three. (line 510)
+* insphere: three. (line 536)
* inst: Debugger. (line 35)
* installation: Installation. (line 6)
* int: Data types. (line 30)
@@ -9300,23 +9346,23 @@ Index
* interpolate: interpolate. (line 6)
* intersect: Paths and guides. (line 195)
* intersect <1>: math. (line 13)
-* intersect <2>: three. (line 481)
+* intersect <2>: three. (line 507)
* intersectionpoint: Paths and guides. (line 238)
* intersectionpoint <1>: math. (line 17)
-* intersectionpoint <2>: three. (line 481)
+* intersectionpoint <2>: three. (line 507)
* intersectionpoints: Paths and guides. (line 242)
-* intersectionpoints <1>: three. (line 481)
-* intersectionpoints <2>: three. (line 494)
+* intersectionpoints <1>: three. (line 507)
+* intersectionpoints <2>: three. (line 520)
* intersections: Paths and guides. (line 206)
* intersections <1>: Paths and guides. (line 213)
-* intersections <2>: three. (line 481)
-* intersections <3>: three. (line 487)
+* intersections <2>: three. (line 507)
+* intersections <3>: three. (line 513)
* InTicks: graph3. (line 35)
* intMax: Data types. (line 30)
* intMin: Data types. (line 30)
* inverse: Transforms. (line 16)
* inverse <1>: Arrays. (line 302)
-* invert: three. (line 409)
+* invert: three. (line 435)
* invisible: Pens. (line 43)
* isnan: Data types. (line 35)
* i_scaled: Mathematical functions.
@@ -9348,7 +9394,7 @@ Index
* label <1>: label. (line 6)
* Label <1>: label. (line 14)
* Label <2>: graph. (line 330)
-* label <2>: three. (line 445)
+* label <2>: three. (line 471)
* labelpath: labelpath. (line 6)
* labelpath3: labelpath3. (line 6)
* labelx: graph. (line 330)
@@ -9357,7 +9403,7 @@ Index
(line 104)
* lastcut: Paths and guides. (line 266)
* lasy-mode: Editing modes. (line 6)
-* latex: Options. (line 149)
+* latex: Options. (line 156)
* LaTeX fonts: Pens. (line 206)
* LaTeX usage: LaTeX usage. (line 6)
* latexmk: LaTeX usage. (line 30)
@@ -9372,7 +9418,7 @@ Index
* LeftSide: label. (line 60)
* LeftTicks: graph. (line 160)
* LeftTicks <1>: graph. (line 233)
-* LeftView: three. (line 367)
+* LeftView: three. (line 393)
* legend: Drawing commands. (line 31)
* legend <1>: draw. (line 64)
* legend <2>: graph. (line 425)
@@ -9384,12 +9430,11 @@ Index
* length <3>: Paths and guides. (line 76)
* length <4>: Paths and guides. (line 373)
* length <5>: Arrays. (line 39)
-* length <6>: three. (line 481)
-* letter: Configuring. (line 58)
+* length <6>: three. (line 507)
+* letter: Configuring. (line 66)
* lexorder: math. (line 67)
* lexorder <1>: math. (line 70)
-* libgs: Configuring. (line 64)
-* libgs <1>: Options. (line 154)
+* libgs: Options. (line 161)
* libm routines: Mathematical functions.
(line 6)
* libsigsegv: Functions. (line 100)
@@ -9421,19 +9466,19 @@ Index
* longdashed: Pens. (line 102)
* longitude: Data types. (line 168)
* loop: Programming. (line 26)
-* lualatex: Options. (line 149)
-* luatex: Options. (line 149)
+* lualatex: Options. (line 156)
+* luatex: Options. (line 156)
* MacOS X binary distributions: MacOS X binary distributions.
(line 6)
* makepen: Pens. (line 322)
* map: Arrays. (line 131)
* Margin: draw. (line 42)
* Margin <1>: draw. (line 42)
-* Margin3: three. (line 563)
-* Margin3 <1>: three. (line 563)
+* Margin3: three. (line 589)
+* Margin3 <1>: three. (line 589)
* Margins: draw. (line 42)
-* margins: three. (line 244)
-* Margins3: three. (line 563)
+* margins: three. (line 270)
+* Margins3: three. (line 589)
* mark: graph. (line 481)
* markangle: markers. (line 35)
* marker: graph. (line 481)
@@ -9449,12 +9494,12 @@ Index
(line 7)
* max <2>: Arrays. (line 221)
* max <3>: Arrays. (line 231)
-* max <4>: three. (line 481)
+* max <4>: three. (line 507)
* maxbound: Data types. (line 134)
* maxbound <1>: Data types. (line 204)
-* maxtile: three. (line 192)
+* maxtile: three. (line 221)
* maxtimes: Paths and guides. (line 233)
-* maxviewport: three. (line 192)
+* maxviewport: three. (line 221)
* MetaPost: MetaPost. (line 6)
* MetaPost ... : Bezier curves. (line 70)
* MetaPost cutafter: Paths and guides. (line 267)
@@ -9463,9 +9508,9 @@ Index
* MetaPost whatever: MetaPost. (line 10)
* Microsoft Windows: Microsoft Windows. (line 6)
* MidArcArrow: draw. (line 26)
-* MidArcArrow3: three. (line 547)
+* MidArcArrow3: three. (line 573)
* MidArrow: draw. (line 26)
-* MidArrow3: three. (line 547)
+* MidArrow3: three. (line 573)
* MidPoint: label. (line 55)
* midpoint: Paths and guides. (line 180)
* min: Paths and guides. (line 275)
@@ -9473,7 +9518,7 @@ Index
(line 7)
* min <2>: Arrays. (line 216)
* min <3>: Arrays. (line 226)
-* min <4>: three. (line 481)
+* min <4>: three. (line 507)
* minbound: Data types. (line 131)
* minbound <1>: Data types. (line 201)
* minipage: label. (line 116)
@@ -9482,6 +9527,7 @@ Index
* miterlimit: Pens. (line 159)
* mktemp: Files. (line 44)
* mm: Figure size. (line 18)
+* mobile browser: three. (line 192)
* mode: Files. (line 76)
* mode <1>: Files. (line 89)
* monotonic: graph. (line 36)
@@ -9490,7 +9536,7 @@ Index
* mouse wheel: GUI usage. (line 6)
* Move: Pens. (line 359)
* MoveQuiet: Pens. (line 365)
-* multisample: three. (line 142)
+* multisample: three. (line 144)
* N: Labels. (line 18)
* name: Files. (line 89)
* named arguments: Named arguments. (line 6)
@@ -9513,12 +9559,12 @@ Index
* NoFill <1>: Frames and pictures.
(line 154)
* NoMargin: draw. (line 42)
-* NoMargin3: three. (line 563)
+* NoMargin3: three. (line 589)
* None: draw. (line 19)
* None <1>: draw. (line 26)
* none: Files. (line 61)
-* normal: three. (line 467)
-* nosafe: Options. (line 173)
+* normal: three. (line 493)
+* nosafe: Options. (line 180)
* NOT: Arithmetic & logical.
(line 68)
* notaknot: graph. (line 36)
@@ -9530,22 +9576,22 @@ Index
(line 140)
* nullpen <2>: Frames and pictures.
(line 149)
-* NURBS: three. (line 343)
-* O: three. (line 256)
+* NURBS: three. (line 369)
+* O: three. (line 282)
* obj: obj. (line 6)
-* oblique: three. (line 299)
-* obliqueX: three. (line 306)
-* obliqueY: three. (line 312)
-* obliqueZ: three. (line 299)
+* oblique: three. (line 325)
+* obliqueX: three. (line 332)
+* obliqueY: three. (line 338)
+* obliqueZ: three. (line 325)
* ode: ode. (line 6)
* offset: Pens. (line 123)
-* offset <1>: Options. (line 178)
+* offset <1>: Options. (line 185)
* OmitTick: graph. (line 223)
* OmitTickInterval: graph. (line 223)
* OmitTickIntervals: graph. (line 223)
* opacity: Pens. (line 237)
* open: Files. (line 12)
-* OpenGL: three. (line 142)
+* OpenGL: three. (line 144)
* operator: User-defined operators.
(line 6)
* operator +(...string[] a).: Data types. (line 283)
@@ -9562,15 +9608,15 @@ Index
* OR: Arithmetic & logical.
(line 68)
* orient: Data types. (line 108)
-* orient <1>: three. (line 498)
+* orient <1>: three. (line 524)
* orientation: Frames and pictures.
(line 104)
-* orthographic: three. (line 316)
-* outformat: three. (line 142)
+* orthographic: three. (line 342)
+* outformat: three. (line 144)
* outprefix: Frames and pictures.
(line 91)
* output: Files. (line 36)
-* output <1>: Options. (line 149)
+* output <1>: Options. (line 156)
* OutTicks: graph3. (line 35)
* overloading functions: Functions. (line 55)
* overwrite: Pens. (line 344)
@@ -9581,9 +9627,9 @@ Index
* pair: Figure size. (line 6)
* pair <1>: Data types. (line 46)
* pairs: Arrays. (line 236)
-* paperheight: Configuring. (line 58)
-* papertype: Configuring. (line 58)
-* paperwidth: Configuring. (line 58)
+* paperheight: Configuring. (line 66)
+* papertype: Configuring. (line 66)
+* paperwidth: Configuring. (line 66)
* parallelogram: flowchart. (line 47)
* parametric surface: graph3. (line 99)
* parametrized curve: graph. (line 640)
@@ -9600,37 +9646,37 @@ Index
* path[]: Paths. (line 23)
* patterns: Pens. (line 255)
* patterns <1>: patterns. (line 6)
-* PDF: Options. (line 149)
-* pdflatex: Options. (line 149)
-* pdfreloadOptions: Options. (line 135)
-* pdfviewer: Configuring. (line 6)
-* pdfviewerOptions: Options. (line 135)
+* PDF: Options. (line 156)
+* pdflatex: Options. (line 156)
+* pdfreloadOptions: Options. (line 142)
+* pdfviewer: Configuring. (line 20)
+* pdfviewerOptions: Options. (line 142)
* pen: Pens. (line 6)
* PenMargin: draw. (line 42)
-* PenMargin2: three. (line 563)
-* PenMargin3: three. (line 563)
+* PenMargin2: three. (line 589)
+* PenMargin3: three. (line 589)
* PenMargins: draw. (line 42)
-* PenMargins2: three. (line 563)
-* PenMargins3: three. (line 563)
+* PenMargins2: three. (line 589)
+* PenMargins3: three. (line 589)
* periodic: graph. (line 36)
* perl: LaTeX usage. (line 30)
* perpendicular: geometry. (line 6)
-* perspective: three. (line 343)
+* perspective: three. (line 369)
* picture: Frames and pictures.
(line 39)
* picture alignment: Frames and pictures.
(line 228)
* piecewisestraight: Paths and guides. (line 92)
-* pixel: three. (line 570)
+* pixel: three. (line 596)
* Pl: Mathematical functions.
(line 48)
* plain: plain. (line 6)
* planar: three. (line 88)
-* plane: three. (line 282)
-* planeproject: three. (line 464)
+* plane: three. (line 308)
+* planeproject: three. (line 490)
* point: Paths and guides. (line 95)
* point <1>: Paths and guides. (line 379)
-* point <2>: three. (line 481)
+* point <2>: three. (line 507)
* polar: Data types. (line 148)
* polargraph: graph. (line 88)
* polygon: graph. (line 481)
@@ -9638,7 +9684,7 @@ Index
* Portrait: Frames and pictures.
(line 104)
* postcontrol: Paths and guides. (line 146)
-* postcontrol <1>: three. (line 481)
+* postcontrol <1>: three. (line 507)
* postfix operators: Self & prefix operators.
(line 19)
* postscript: Frames and pictures.
@@ -9647,18 +9693,18 @@ Index
* PostScript subpath: Paths. (line 23)
* pow10: Mathematical functions.
(line 6)
-* prc: three. (line 213)
+* prc: three. (line 239)
* precision: Files. (line 93)
* precontrol: Paths and guides. (line 139)
-* precontrol <1>: three. (line 481)
+* precontrol <1>: three. (line 507)
* prefix operators: Self & prefix operators.
(line 6)
* private: Structures. (line 6)
* programming: Programming. (line 6)
* pstoedit: PostScript to Asymptote.
(line 6)
-* psviewer: Configuring. (line 6)
-* psviewerOptions: Options. (line 135)
+* psviewer: Configuring. (line 20)
+* psviewerOptions: Options. (line 142)
* pt: Figure size. (line 18)
* public: Structures. (line 6)
* push: Arrays. (line 39)
@@ -9666,7 +9712,7 @@ Index
* quadraticroots: Arrays. (line 305)
* quadraticroots <1>: Arrays. (line 310)
* quarticroots: math. (line 22)
-* quick reference: Description. (line 81)
+* quick reference: Description. (line 84)
* quit: Drawing in interactive mode.
(line 11)
* quit <1>: Interactive mode. (line 54)
@@ -9682,7 +9728,7 @@ Index
* radians: Mathematical functions.
(line 17)
* radius: Paths and guides. (line 135)
-* radius <1>: three. (line 481)
+* radius <1>: three. (line 507)
* Rainbow: palette. (line 12)
* rand: Mathematical functions.
(line 39)
@@ -9700,7 +9746,7 @@ Index
* realmult: Data types. (line 100)
* rectangle: flowchart. (line 34)
* recursion: Functions. (line 100)
-* reference: Description. (line 81)
+* reference: Description. (line 84)
* reflect: Transforms. (line 42)
* Relative: label. (line 50)
* Relative <1>: label. (line 60)
@@ -9710,8 +9756,8 @@ Index
(line 6)
* rename: Files. (line 152)
* render: three. (line 46)
-* render <1>: three. (line 142)
-* render <2>: Options. (line 149)
+* render <1>: three. (line 144)
+* render <2>: Options. (line 156)
* replace: Data types. (line 269)
* resetdefaultpen: Pens. (line 371)
* rest arguments: Rest arguments. (line 6)
@@ -9723,7 +9769,7 @@ Index
* reverse <1>: Paths and guides. (line 183)
* reverse <2>: Paths and guides. (line 382)
* reverse <3>: Arrays. (line 136)
-* reverse <4>: three. (line 481)
+* reverse <4>: three. (line 507)
* rewind: Files. (line 93)
* rfind: Data types. (line 246)
* rgb: Pens. (line 30)
@@ -9735,9 +9781,9 @@ Index
* RightSide: label. (line 60)
* RightTicks: graph. (line 160)
* RightTicks <1>: graph. (line 233)
-* RightView: three. (line 367)
+* RightView: three. (line 393)
* Rotate: label. (line 36)
-* rotate: three. (line 435)
+* rotate: three. (line 461)
* Rotate(pair z): label. (line 39)
* round: Mathematical functions.
(line 26)
@@ -9750,7 +9796,7 @@ Index
* runtime imports: Import. (line 97)
* Russian: unicode. (line 7)
* S: Labels. (line 18)
-* safe: Options. (line 173)
+* safe: Options. (line 180)
* save: Frames and pictures.
(line 285)
* saveline: Files. (line 135)
@@ -9760,8 +9806,8 @@ Index
* scale <2>: Transforms. (line 36)
* scale <3>: graph. (line 691)
* Scale <1>: graph. (line 708)
-* scale <4>: three. (line 434)
-* scale3: three. (line 432)
+* scale <4>: three. (line 460)
+* scale3: three. (line 458)
* scaled graph: graph. (line 671)
* scientific graph: graph. (line 388)
* scroll: Files. (line 109)
@@ -9781,8 +9827,8 @@ Index
* self operators: Self & prefix operators.
(line 6)
* sequence: Arrays. (line 118)
-* settings: Configuring. (line 21)
-* settings <1>: Options. (line 120)
+* settings: Configuring. (line 20)
+* settings <1>: Options. (line 127)
* sgn: Mathematical functions.
(line 26)
* shading: fill. (line 32)
@@ -9790,11 +9836,11 @@ Index
* shift: Transforms. (line 26)
* shift <1>: Transforms. (line 28)
* shift <2>: Transforms. (line 46)
-* shift <3>: three. (line 424)
+* shift <3>: three. (line 450)
* shiftless: Transforms. (line 46)
* shipout: Frames and pictures.
(line 91)
-* showtarget: three. (line 316)
+* showtarget: three. (line 342)
* Si: Mathematical functions.
(line 48)
* signedint: Files. (line 76)
@@ -9814,9 +9860,9 @@ Index
* singlereal <1>: Files. (line 89)
* sinh: Mathematical functions.
(line 6)
-* SixViews: three. (line 382)
-* SixViewsFR: three. (line 382)
-* SixViewsUS: three. (line 382)
+* SixViews: three. (line 408)
+* SixViewsFR: three. (line 408)
+* SixViewsUS: three. (line 408)
* size: Figure size. (line 6)
* size <1>: Paths and guides. (line 81)
* size <2>: Paths and guides. (line 370)
@@ -9824,9 +9870,9 @@ Index
(line 48)
* size <4>: Frames and pictures.
(line 74)
-* size <5>: three. (line 481)
-* size <6>: Options. (line 149)
-* size3: three. (line 241)
+* size <5>: three. (line 507)
+* size <6>: Options. (line 156)
+* size3: three. (line 267)
* Slant: label. (line 42)
* slant: Transforms. (line 38)
* sleep: Data types. (line 375)
@@ -9867,7 +9913,7 @@ Index
* stop: Debugger. (line 10)
* straight: Paths and guides. (line 88)
* Straight: graph. (line 30)
-* straight <1>: three. (line 481)
+* straight <1>: three. (line 507)
* strftime: Data types. (line 320)
* strftime <1>: Data types. (line 345)
* string: Data types. (line 207)
@@ -9879,7 +9925,7 @@ Index
* struct: Structures. (line 6)
* structures: Structures. (line 6)
* subpath: Paths and guides. (line 186)
-* subpath <1>: three. (line 481)
+* subpath <1>: three. (line 507)
* subpictures: Frames and pictures.
(line 113)
* substr: Data types. (line 261)
@@ -9891,9 +9937,9 @@ Index
* surface <1>: three. (line 88)
* surface <2>: three. (line 102)
* surface <3>: graph3. (line 99)
-* SVG: Options. (line 154)
+* SVG: Options. (line 161)
* system: Data types. (line 353)
-* system <1>: Options. (line 173)
+* system <1>: Options. (line 180)
* syzygy: syzygy. (line 6)
* tab: Files. (line 61)
* tab completion: Drawing in interactive mode.
@@ -9904,7 +9950,7 @@ Index
(line 20)
* tanh: Mathematical functions.
(line 6)
-* target: three. (line 316)
+* target: three. (line 342)
* tell: Files. (line 93)
* tension: Bezier curves. (line 56)
* tension <1>: three. (line 6)
@@ -9914,13 +9960,13 @@ Index
* tessellation: three. (line 114)
* tex: Frames and pictures.
(line 302)
-* tex <1>: Options. (line 149)
+* tex <1>: Options. (line 156)
* TeX fonts: Pens. (line 215)
* TeX string: Data types. (line 207)
-* texcommand: Configuring. (line 64)
+* texcommand: Configuring. (line 72)
* TeXHead: draw. (line 26)
-* TeXHead3: three. (line 547)
-* texpath: Configuring. (line 64)
+* TeXHead3: three. (line 573)
+* texpath: Configuring. (line 72)
* texpath <1>: label. (line 113)
* texpreamble: Frames and pictures.
(line 311)
@@ -9929,13 +9975,13 @@ Index
* textbook graph: graph. (line 360)
* tgz: UNIX binary distributions.
(line 6)
-* thick: three. (line 125)
-* thin: three. (line 125)
+* thick: three. (line 126)
+* thin: three. (line 126)
* this: Structures. (line 6)
* three: three. (line 6)
-* ThreeViews: three. (line 382)
-* ThreeViewsFR: three. (line 382)
-* ThreeViewsUS: three. (line 382)
+* ThreeViews: three. (line 408)
+* ThreeViewsFR: three. (line 408)
+* ThreeViewsUS: three. (line 408)
* tick: graph. (line 330)
* ticks: graph. (line 160)
* Ticks: graph. (line 160)
@@ -9950,12 +9996,12 @@ Index
* times: Paths and guides. (line 220)
* times <1>: Paths and guides. (line 224)
* Top: graph. (line 135)
-* TopView: three. (line 367)
+* TopView: three. (line 393)
* trace: Debugger. (line 50)
* trailingzero: graph. (line 175)
* transform: Transforms. (line 6)
-* transform <1>: three. (line 456)
-* transform3: three. (line 419)
+* transform <1>: three. (line 482)
+* transform3: three. (line 445)
* transparency: Pens. (line 237)
* transpose: Arrays. (line 203)
* transpose <1>: Arrays. (line 206)
@@ -9969,8 +10015,8 @@ Index
(line 48)
* triple: Data types. (line 137)
* TrueMargin: draw. (line 42)
-* TrueMargin3: three. (line 563)
-* tube: three. (line 125)
+* TrueMargin3: three. (line 589)
+* tube: three. (line 126)
* tube <1>: tube. (line 6)
* tutorial: Tutorial. (line 6)
* type1cm: Pens. (line 192)
@@ -9991,10 +10037,10 @@ Index
* unit: Data types. (line 83)
* unit <1>: Data types. (line 173)
* unitbox: Paths. (line 44)
-* unitbox <1>: three. (line 288)
+* unitbox <1>: three. (line 314)
* unitcircle: Paths. (line 17)
* unitcircle <1>: Paths. (line 17)
-* unitcircle <2>: three. (line 256)
+* unitcircle <2>: three. (line 282)
* unitrand: Mathematical functions.
(line 39)
* unitsize: Figure size. (line 39)
@@ -10004,7 +10050,7 @@ Index
(line 6)
* unpacking: Rest arguments. (line 39)
* unravel: Import. (line 29)
-* up: three. (line 316)
+* up: three. (line 342)
* update: Files. (line 36)
* UpsideDown: Frames and pictures.
(line 104)
@@ -10031,14 +10077,15 @@ Index
* vertex-dependent colors: three. (line 79)
* Vertical: flowchart. (line 77)
* viewportheight: LaTeX usage. (line 50)
-* viewportmargin: three. (line 244)
-* viewportsize: three. (line 244)
+* viewportmargin: three. (line 270)
+* viewportsize: three. (line 270)
* viewportwidth: LaTeX usage. (line 50)
-* views: three. (line 213)
+* views: three. (line 239)
* vim: Editing modes. (line 32)
* virtual functions: Structures. (line 181)
* void: Data types. (line 10)
* W: Labels. (line 18)
+* WebGL: three. (line 192)
* whatever: Paths and guides. (line 246)
* Wheel: palette. (line 22)
* wheel mouse: GUI. (line 6)
@@ -10049,11 +10096,11 @@ Index
* word: Arrays. (line 349)
* write: Files. (line 53)
* write <1>: Arrays. (line 388)
-* X: three. (line 256)
+* X: three. (line 282)
* xasy: GUI. (line 6)
* xaxis3: graph3. (line 7)
* xdr: Files. (line 76)
-* xelatex: Options. (line 149)
+* xelatex: Options. (line 156)
* XEquals: graph. (line 265)
* xequals: graph. (line 278)
* xlimits: graph. (line 640)
@@ -10062,10 +10109,10 @@ Index
* xpart: Data types. (line 94)
* xpart <1>: Data types. (line 184)
* xscale: Transforms. (line 30)
-* xscale3: three. (line 426)
+* xscale3: three. (line 452)
* xtick: graph. (line 330)
-* XY: three. (line 441)
-* XY <1>: three. (line 456)
+* XY: three. (line 467)
+* XY <1>: three. (line 482)
* XYEquals: graph3. (line 21)
* XYZero: graph3. (line 21)
* XZEquals: graph3. (line 21)
@@ -10075,7 +10122,7 @@ Index
(line 6)
* Y <1>: Mathematical functions.
(line 48)
-* Y <2>: three. (line 256)
+* Y <2>: three. (line 282)
* yaxis3: graph3. (line 7)
* YEquals: graph. (line 128)
* yequals: graph. (line 278)
@@ -10083,14 +10130,14 @@ Index
* ypart: Data types. (line 97)
* ypart <1>: Data types. (line 187)
* yscale: Transforms. (line 32)
-* yscale3: three. (line 428)
+* yscale3: three. (line 454)
* ytick: graph. (line 330)
-* YX: three. (line 456)
-* YZ: three. (line 456)
+* YX: three. (line 482)
+* YZ: three. (line 482)
* YZEquals: graph3. (line 21)
* YZero: graph. (line 123)
* YZZero: graph3. (line 21)
-* Z: three. (line 256)
+* Z: three. (line 282)
* zaxis3: graph3. (line 7)
* zeroTransform: Transforms. (line 44)
* zerowinding: Pens. (line 164)
@@ -10107,159 +10154,159 @@ Index
* zeta: Mathematical functions.
(line 48)
* zpart: Data types. (line 190)
-* zscale3: three. (line 430)
-* ZX: three. (line 456)
-* ZX <1>: three. (line 456)
-* ZY: three. (line 456)
+* zscale3: three. (line 456)
+* ZX: three. (line 482)
+* ZX <1>: three. (line 482)
+* ZY: three. (line 482)

Tag Table:
Node: Top570
-Node: Description7279
-Node: Installation11100
-Node: UNIX binary distributions12144
-Node: MacOS X binary distributions13274
-Node: Microsoft Windows13828
-Node: Configuring15032
-Node: Search paths19178
-Node: Compiling from UNIX source20017
-Node: Editing modes23077
-Node: Git25498
-Node: Uninstall25898
-Node: Tutorial26244
-Node: Drawing in batch mode27132
-Node: Drawing in interactive mode28007
-Node: Figure size29039
-Node: Labels30631
-Node: Paths31458
-Ref: unitcircle32073
-Node: Drawing commands33973
-Node: draw35688
-Ref: arrows36870
-Node: fill42383
-Ref: gradient shading43429
-Node: clip47936
-Node: label48523
-Ref: Label49123
-Node: Bezier curves54968
-Node: Programming58865
-Ref: array iteration60618
-Node: Data types60785
-Ref: format71447
-Node: Paths and guides75893
-Ref: circle76147
-Ref: extension85854
-Node: Pens92663
-Ref: fillrule100352
-Ref: basealign101256
-Ref: transparency104090
-Ref: makepen107670
-Ref: overwrite108553
-Node: Transforms109767
-Node: Frames and pictures111599
-Ref: envelope112757
-Ref: size113850
-Ref: unitsize114837
-Ref: shipout115910
-Ref: filltype118261
-Ref: add121433
-Ref: add about122439
-Ref: tex125468
-Node: Files126364
-Ref: cd127351
-Ref: scroll132036
-Node: Variable initializers134954
-Node: Structures137671
-Node: Operators145173
-Node: Arithmetic & logical145487
-Node: Self & prefix operators147858
-Node: User-defined operators148652
-Node: Implicit scaling149565
-Node: Functions150128
-Ref: stack overflow153271
-Node: Default arguments153553
-Node: Named arguments154309
-Node: Rest arguments156879
-Node: Mathematical functions160001
-Node: Arrays164664
-Ref: sort171772
-Ref: tridiagonal174397
-Ref: solve175628
-Node: Slices179767
-Node: Casts183675
-Node: Import185942
-Node: Static191200
-Node: LaTeX usage194093
-Node: Base modules200608
-Node: plain203165
-Node: simplex203839
-Node: math204113
-Node: interpolate206822
-Node: geometry207101
-Node: trembling207695
-Node: stats207964
-Node: patterns208224
-Node: markers208460
-Node: tree210320
-Node: binarytree210505
-Node: drawtree211171
-Node: syzygy211372
-Node: feynman211646
-Node: roundedpath211921
-Node: animation212204
-Ref: animate212625
-Node: embed213742
-Node: slide214697
-Node: MetaPost215038
-Node: unicode215757
-Node: latin1216631
-Node: babel217000
-Node: labelpath217230
-Node: labelpath3218051
-Node: annotate218362
-Node: CAD218832
-Node: graph219143
-Ref: ticks226304
-Ref: pathmarkers240096
-Ref: marker240567
-Ref: markuniform240921
-Ref: errorbars242729
-Ref: automatic scaling247203
-Node: palette258950
-Ref: images259068
-Ref: image263242
-Ref: logimage263762
-Ref: penimage264867
-Ref: penfunctionimage265129
-Node: three265900
-Ref: PostScript3D292907
-Node: obj294645
-Node: graph3294894
-Ref: GaussianSurface300174
-Node: grid3301323
-Node: solids302107
-Node: tube303099
-Node: flowchart305333
-Node: contour309941
-Node: contour3315256
-Node: smoothcontour3315569
-Node: slopefield317290
-Node: ode318779
-Node: Options319036
-Ref: configuration file325418
-Ref: settings325418
-Ref: texengines326661
-Ref: convert326661
-Node: Interactive mode329985
-Ref: history332135
-Node: GUI333441
-Node: GUI installation333992
-Node: GUI usage334721
-Node: PostScript to Asymptote335637
-Node: Help336395
-Node: Debugger338049
-Node: Credits339805
-Node: Index340822
+Node: Description7280
+Node: Installation11190
+Node: UNIX binary distributions12234
+Node: MacOS X binary distributions13364
+Node: Microsoft Windows13918
+Node: Configuring15123
+Node: Search paths19579
+Node: Compiling from UNIX source20418
+Node: Editing modes23478
+Node: Git25899
+Node: Uninstall26299
+Node: Tutorial26645
+Node: Drawing in batch mode27534
+Node: Drawing in interactive mode28409
+Node: Figure size29441
+Node: Labels31033
+Node: Paths31860
+Ref: unitcircle32475
+Node: Drawing commands34375
+Node: draw36090
+Ref: arrows37272
+Node: fill42785
+Ref: gradient shading43831
+Node: clip48338
+Node: label48925
+Ref: Label49525
+Node: Bezier curves55370
+Node: Programming59267
+Ref: array iteration61020
+Node: Data types61187
+Ref: format71849
+Node: Paths and guides76295
+Ref: circle76549
+Ref: extension86256
+Node: Pens93065
+Ref: fillrule100754
+Ref: basealign101658
+Ref: transparency104492
+Ref: makepen108072
+Ref: overwrite108955
+Node: Transforms110169
+Node: Frames and pictures112001
+Ref: envelope113159
+Ref: size114252
+Ref: unitsize115239
+Ref: shipout116312
+Ref: filltype118663
+Ref: add121835
+Ref: add about122841
+Ref: tex125870
+Node: Files126766
+Ref: cd127753
+Ref: scroll132438
+Node: Variable initializers135356
+Node: Structures138073
+Node: Operators145575
+Node: Arithmetic & logical145889
+Node: Self & prefix operators148259
+Node: User-defined operators149053
+Node: Implicit scaling149966
+Node: Functions150529
+Ref: stack overflow153672
+Node: Default arguments153954
+Node: Named arguments154710
+Node: Rest arguments157280
+Node: Mathematical functions160402
+Node: Arrays165065
+Ref: sort172173
+Ref: tridiagonal174798
+Ref: solve176029
+Node: Slices180169
+Node: Casts184077
+Node: Import186344
+Node: Static191602
+Node: LaTeX usage194495
+Node: Base modules201010
+Node: plain203567
+Node: simplex204241
+Node: math204515
+Node: interpolate207224
+Node: geometry207503
+Node: trembling208097
+Node: stats208366
+Node: patterns208626
+Node: markers208862
+Node: tree210722
+Node: binarytree210907
+Node: drawtree211573
+Node: syzygy211774
+Node: feynman212048
+Node: roundedpath212323
+Node: animation212606
+Ref: animate213027
+Node: embed214144
+Node: slide215099
+Node: MetaPost215440
+Node: unicode216159
+Node: latin1217033
+Node: babel217402
+Node: labelpath217632
+Node: labelpath3218453
+Node: annotate218764
+Node: CAD219234
+Node: graph219545
+Ref: ticks226706
+Ref: pathmarkers240498
+Ref: marker240969
+Ref: markuniform241323
+Ref: errorbars243131
+Ref: automatic scaling247605
+Node: palette259352
+Ref: images259470
+Ref: image263644
+Ref: logimage264164
+Ref: penimage265269
+Ref: penfunctionimage265531
+Node: three266302
+Ref: PostScript3D294487
+Node: obj296225
+Node: graph3296474
+Ref: GaussianSurface301754
+Node: grid3302903
+Node: solids303687
+Node: tube304679
+Node: flowchart306913
+Node: contour311521
+Node: contour3316836
+Node: smoothcontour3317149
+Node: slopefield318870
+Node: ode320359
+Node: Options320616
+Ref: configuration file327464
+Ref: settings327464
+Ref: texengines328728
+Ref: convert328728
+Node: Interactive mode332052
+Ref: history334202
+Node: GUI335508
+Node: GUI installation336059
+Node: GUI usage336789
+Node: PostScript to Asymptote337705
+Node: Help338463
+Node: Debugger340117
+Node: Credits341873
+Node: Index342890

End Tag Table
diff --git a/graphics/asymptote/drawelement.h b/graphics/asymptote/drawelement.h
index cea6baf3c9..4ce7504332 100644
--- a/graphics/asymptote/drawelement.h
+++ b/graphics/asymptote/drawelement.h
@@ -17,16 +17,13 @@
#include "psfile.h"
#include "texfile.h"
#include "prcfile.h"
+#include "jsfile.h"
#include "glrender.h"
#include "arrayop.h"
#include "material.h"
namespace camp {
-//extern double Tx[3]; // x-component of current transform
-//extern double Ty[3]; // y-component of current transform
-extern double* Tz; // z-component of current transform
-
static const double pixel=1.0; // Adaptive rendering constant.
// Return one-sixth of the second derivative of the Bezier curve defined
@@ -36,7 +33,7 @@ inline triple bezierPP(triple a, triple b, triple c) {
}
// Return one-third of the third derivative of the Bezier curve defined by
-// a,b,c,d.
+// a,b,c,d at 0.
inline triple bezierPPP(triple a, triple b, triple c, triple d) {
return d-a+3.0*(b-c);
}
@@ -112,6 +109,62 @@ public:
};
+class bbox2 {
+public:
+ double x,y,X,Y;
+ bbox2(size_t n, const triple *v) {
+ Bounds(v[0]);
+ for(size_t i=1; i < n; ++i)
+ bounds(v[i]);
+ }
+
+ bbox2(const triple& m, const triple& M) {
+ Bounds(m);
+ bounds(triple(m.getx(),m.gety(),M.getz()));
+ bounds(triple(m.getx(),M.gety(),m.getz()));
+ bounds(triple(m.getx(),M.gety(),M.getz()));
+ bounds(triple(M.getx(),m.gety(),m.getz()));
+ bounds(triple(M.getx(),m.gety(),M.getz()));
+ bounds(triple(M.getx(),M.gety(),m.getz()));
+ bounds(M);
+ }
+
+ bbox2(const triple& m, const triple& M, const Billboard& BB) {
+ Bounds(BB.transform(m));
+ bounds(BB.transform(triple(m.getx(),m.gety(),M.getz())));
+ bounds(BB.transform(triple(m.getx(),M.gety(),m.getz())));
+ bounds(BB.transform(triple(m.getx(),M.gety(),M.getz())));
+ bounds(BB.transform(triple(M.getx(),m.gety(),m.getz())));
+ bounds(BB.transform(triple(M.getx(),m.gety(),M.getz())));
+ bounds(BB.transform(triple(M.getx(),M.gety(),m.getz())));
+ bounds(BB.transform(M));
+ }
+
+// Is 2D bounding box formed by projecting 3d points in vector v offscreen?
+ bool offscreen() {
+ double eps=1.0e-2;
+ double min=-1.0-eps;
+ double max=1.0+eps;
+ return X < min || x > max || Y < min || y > max;
+ }
+
+ void Bounds(const triple& v) {
+ pair V=Transform2T(gl::dprojView,v);
+ x=X=V.getx();
+ y=Y=V.gety();
+ }
+
+ void bounds(const triple& v) {
+ pair V=Transform2T(gl::dprojView,v);
+ double a=V.getx();
+ double b=V.gety();
+ if(a < x) x=a;
+ else if(a > X) X=a;
+ if(b < y) y=b;
+ else if(b > Y) Y=b;
+ }
+};
+
typedef mem::vector<box> boxvector;
typedef mem::list<bbox> bboxlist;
@@ -119,26 +172,20 @@ typedef mem::list<bbox> bboxlist;
typedef mem::map<CONST string,unsigned> groupmap;
typedef mem::vector<groupmap> groupsmap;
-#ifdef HAVE_GL
-typedef mem::map<CONST Material,size_t> MaterialMap;
-#endif
-
class drawElement : public gc
{
public:
string KEY;
drawElement(const string& key="") : KEY(key == "" ? processData().KEY : key)
- {}
+ {}
virtual ~drawElement() {}
-
-#ifdef HAVE_GL
- static mem::vector<Material> material;
- static MaterialMap materialMap;
- static size_t materialIndex;
-#endif
+ static mem::vector<triple> center;
+ static size_t centerIndex;
+ static triple lastcenter;
+ static size_t lastcenterIndex;
static pen lastpen;
static const triple zero;
@@ -154,24 +201,24 @@ public:
double fuzz, bool &first) {}
virtual void minratio(const double *t, pair &b, double fuzz, bool &first) {
- ratio(t, b, camp::min, fuzz, first);
+ ratio(t,b,camp::min,fuzz,first);
}
virtual void maxratio(const double *t,pair &b, double fuzz, bool &first) {
- ratio(t, b, camp::max, fuzz, first);
+ ratio(t,b,camp::max,fuzz,first);
}
virtual void ratio(pair &b, double (*m)(double, double), double fuzz,
bool &first) {
- ratio(NULL, b, m, fuzz, first);
+ ratio(NULL,b,m,fuzz,first);
}
virtual void minratio(pair &b, double fuzz, bool &first) {
- minratio(NULL, b, fuzz, first);
+ minratio(NULL,b,fuzz,first);
}
virtual void maxratio(pair &b, double fuzz, bool &first) {
- maxratio(NULL, b, fuzz, first);
+ maxratio(NULL,b,fuzz,first);
}
virtual bool islabel() {return false;}
@@ -217,12 +264,29 @@ public:
return false;
}
+ // Output to a JS file
+ virtual bool write(jsfile *out) {
+ return false;
+ }
+
// Used to compute deviation of a surface from a quadrilateral.
virtual void displacement() {}
// Render with OpenGL
virtual void render(double size2, const triple& Min, const triple& Max,
- double perspective, bool transparent) {}
+ double perspective, bool remesh)
+ {}
+
+ virtual void meshinit() {}
+
+ size_t centerindex(const triple& center) {
+ if(drawElement::center.empty() || center != drawElement::lastcenter) {
+ drawElement::lastcenter=center;
+ drawElement::center.push_back(center);
+ drawElement::lastcenterIndex=drawElement::center.size();
+ }
+ return drawElement::lastcenterIndex;
+ }
// Transform as part of a picture.
virtual drawElement *transformed(const transform&) {
@@ -421,13 +485,18 @@ void registerBuffer(std::vector<T>& buffervector, GLuint bufferIndex) {
glBindBuffer(GL_ARRAY_BUFFER,0);
}
}
+#endif
+#ifdef HAVE_LIBGLM
void setcolors(bool colors,
const prc::RGBAColour& diffuse,
const prc::RGBAColour& emissive,
const prc::RGBAColour& specular, double shininess,
- double metallic, double fresnel0);
+ double metallic, double fresnel0, jsfile *out=NULL);
#endif
+
+
+
}
GC_DECLARE_PTRFREE(camp::box);
diff --git a/graphics/asymptote/drawpath3.cc b/graphics/asymptote/drawpath3.cc
index 55752509ff..8bdd8a35f3 100644
--- a/graphics/asymptote/drawpath3.cc
+++ b/graphics/asymptote/drawpath3.cc
@@ -8,7 +8,7 @@
#include "drawsurface.h"
#include "material.h"
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
@@ -19,13 +19,6 @@ namespace camp {
using vm::array;
using namespace prc;
-#ifdef HAVE_GL
-using gl::modelView;
-
-BezierCurve drawPath3::R;
-Pixel drawPixel::R;
-#endif
-
bool drawPath3::write(prcfile *out, unsigned int *, double, groupsmap&)
{
Int n=g.length();
@@ -57,66 +50,76 @@ bool drawPath3::write(prcfile *out, unsigned int *, double, groupsmap&)
return true;
}
-void drawPath3::render(double size2, const triple& b, const triple& B,
- double perspective, bool transparent)
+bool drawPath3::write(jsfile *out)
{
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
Int n=g.length();
- if(n == 0 || invisible || ((color.A < 1.0) ^ transparent))
- return;
-
- const bool billboard=interaction == BILLBOARD &&
- !settings::getSetting<bool>("offscreen");
- triple m,M;
-
- double f,F,s;
- if(perspective) {
- f=Min.getz()*perspective;
- F=Max.getz()*perspective;
- m=triple(min(f*b.getx(),F*b.getx()),min(f*b.gety(),F*b.gety()),b.getz());
- M=triple(max(f*B.getx(),F*B.getx()),max(f*B.gety(),F*B.gety()),B.getz());
- s=max(f,F);
- } else {
- m=b;
- M=B;
- s=1.0;
- }
-
- const pair size3(s*(B.getx()-b.getx()),s*(B.gety()-b.gety()));
-
- bbox3 box(m,M);
- box.transform(modelView.Tinv);
- m=box.Min();
- M=box.Max();
+ if(n == 0 || invisible)
+ return true;
- if(!billboard && (Max.getx() < m.getx() || Min.getx() > M.getx() ||
- Max.gety() < m.gety() || Min.gety() > M.gety() ||
- Max.getz() < m.getz() || Min.getz() > M.getz()))
- return;
+ if(billboard) {
+ meshinit();
+ drawElement::centerIndex=centerIndex;
+ } else drawElement::centerIndex=0;
RGBAColour Black(0.0,0.0,0.0,color.A);
- setcolors(false,Black,color,Black,1.0,0.0,0.04);
+ setcolors(false,Black,color,Black,1.0,0.0,0.04,out);
+ for(Int i=0; i < n; ++i) {
+ if(g.straight(i)) {
+ out->addCurve(g.point(i),g.point(i+1),Min,Max);
+ } else
+ out->addCurve(g.point(i),g.postcontrol(i),
+ g.precontrol(i+1),g.point(i+1),Min,Max);
+ }
+#endif
+ return true;
+}
+
+void drawPath3::render(double size2, const triple& b, const triple& B,
+ double perspective, bool remesh)
+{
+#ifdef HAVE_LIBGL
+ Int n=g.length();
+ if(n == 0 || invisible) return;
+
+ bool offscreen;
if(billboard) {
- for(Int i=0; i < n; ++i) {
- triple controls[]={BB.transform(g.point(i)),BB.transform(g.postcontrol(i)),
- BB.transform(g.precontrol(i+1)),
- BB.transform(g.point(i+1))};
- R.queue(controls,straight,size3.length()/size2,m,M);
- }
- } else {
+ drawElement::centerIndex=centerIndex;
BB.init(center);
- for(Int i=0; i < n; ++i) {
- triple controls[]={g.point(i),g.postcontrol(i),g.precontrol(i+1),
- g.point(i+1)};
- R.queue(controls,straight,size3.length()/size2,m,M);
- }
+ offscreen=bbox2(Min,Max,BB).offscreen();
+ } else
+ offscreen=bbox2(Min,Max).offscreen();
+
+ if(offscreen) { // Fully offscreen
+ R.Onscreen=false;
+ R.data.clear();
+ return;
}
- if(BezierCurve::vertexbuffer.size() >= (unsigned) gl::maxvertices) {
- R.draw();
- BezierCurve::clear();
- gl::forceRemesh=true;
+
+ for(Int i=0; i < n; ++i) {
+ triple controls[]={g.point(i),g.postcontrol(i),g.precontrol(i+1),
+ g.point(i+1)};
+ triple *Controls;
+ triple Controls0[4];
+ if(billboard) {
+ Controls=Controls0;
+ for(size_t i=0; i < 4; i++) {
+ Controls[i]=BB.transform(controls[i]);
+ }
+ } else
+ Controls=controls;
+
+ double s=perspective ? Min.getz()*perspective : 1.0; // Move to glrender
+
+ const pair size3(s*(B.getx()-b.getx()),s*(B.gety()-b.gety()));
+
+ RGBAColour Black(0.0,0.0,0.0,color.A);
+ setcolors(false,Black,color,Black,1.0,0.0,0.04);
+
+ R.queue(controls,g.straight(i),size3.length()/size2);
}
+
#endif
}
@@ -197,7 +200,7 @@ void drawNurbsPath3::ratio(const double* t, pair &b, double (*m)(double, double)
void drawNurbsPath3::displacement()
{
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
size_t nknots=degree+n+1;
if(Controls == NULL) {
Controls=new(UseGC) GLfloat[(weights ? 4 : 3)*n];
@@ -216,11 +219,10 @@ void drawNurbsPath3::displacement()
}
void drawNurbsPath3::render(double, const triple&, const triple&,
- double, bool transparent)
+ double, bool remesh)
{
-#ifdef HAVE_GL
- if(invisible || ((color.A < 1.0) ^ transparent))
- return;
+#ifdef HAVE_LIBGL
+ if(invisible) return;
// TODO: implement NURBS renderer
#endif
@@ -236,48 +238,35 @@ bool drawPixel::write(prcfile *out, unsigned int *, double, groupsmap&)
return true;
}
+bool drawPixel::write(jsfile *out)
+{
+#ifdef HAVE_LIBGL
+ if(invisible)
+ return true;
+
+ RGBAColour Black(0.0,0.0,0.0,color.A);
+ setcolors(false,color,color,Black,1.0,0.0,0.04,out);
+
+ out->addPixel(v,width,Min,Max);
+#endif
+ return true;
+}
+
void drawPixel::render(double size2, const triple& b, const triple& B,
- double perspective, bool transparent)
+ double perspective, bool remesh)
{
-#ifdef HAVE_GL
- if(invisible || ((color.A < 1.0) ^ transparent)) return;
- triple m,M;
+#ifdef HAVE_LIBGL
+ if(invisible) return;
- double f,F,s;
- if(perspective) {
- f=Min.getz()*perspective;
- F=Max.getz()*perspective;
- m=triple(min(f*b.getx(),F*b.getx()),min(f*b.gety(),F*b.gety()),b.getz());
- M=triple(max(f*B.getx(),F*B.getx()),max(f*B.gety(),F*B.gety()),B.getz());
- s=max(f,F);
- } else {
- m=b;
- M=B;
- s=1.0;
+ if(bbox2(Min,Max).offscreen()) { // Fully offscreen
+ R.data.clear();
+ return;
}
-
- const pair size3(s*(B.getx()-b.getx()),s*(B.gety()-b.gety()));
-
- bbox3 box(m,M);
- box.transform(modelView.Tinv);
- m=box.Min();
- M=box.Max();
- if((Max.getx() < m.getx() || Min.getx() > M.getx() ||
- Max.gety() < m.gety() || Min.gety() > M.gety() ||
- Max.getz() < m.getz() || Min.getz() > M.getz()))
- return;
-
RGBAColour Black(0.0,0.0,0.0,color.A);
setcolors(false,color,color,Black,1.0,0.0,0.04);
R.queue(v,width);
-
- if(Pixel::vertexbuffer.size() >= (unsigned) gl::maxvertices) {
- R.draw();
- Pixel::clear();
- gl::forceRemesh=true;
- }
#endif
}
diff --git a/graphics/asymptote/drawpath3.h b/graphics/asymptote/drawpath3.h
index c6515057c9..0df098e84a 100644
--- a/graphics/asymptote/drawpath3.h
+++ b/graphics/asymptote/drawpath3.h
@@ -22,20 +22,31 @@ protected:
bool invisible;
Interaction interaction;
triple Min,Max;
+ bool billboard;
+ size_t centerIndex;
public:
#ifdef HAVE_GL
- static BezierCurve R;
+ BezierCurve R;
#endif
+ void init() {
+ billboard=interaction == BILLBOARD &&
+ !settings::getSetting<bool>("offscreen");
+ centerIndex=0;
+ }
+
drawPath3(path3 g, triple center, const pen& p, Interaction interaction,
const string& key="") :
drawElement(key), g(g), center(center), straight(g.piecewisestraight()),
color(rgba(p)), invisible(p.invisible()), interaction(interaction),
- Min(g.min()), Max(g.max()) {}
+ Min(g.min()), Max(g.max()) {
+ init();
+ }
drawPath3(const double* t, const drawPath3 *s) :
drawElement(s->KEY), g(camp::transformed(t,s->g)), straight(s->straight),
color(s->color), invisible(s->invisible), interaction(s->interaction),
Min(g.min()), Max(g.max()) {
+ init();
center=t*s->center;
}
@@ -68,10 +79,16 @@ public:
} else b=pair(m(b.getx(),z.getx()),m(b.gety(),z.gety()));
}
+ void meshinit() {
+ if(billboard)
+ centerIndex=centerindex(center);
+ }
+
bool write(prcfile *out, unsigned int *, double, groupsmap&);
+ bool write(jsfile *out);
void render(double, const triple&, const triple&, double,
- bool transparent);
+ bool remesh);
drawElement *transformed(const double* t);
};
@@ -87,7 +104,7 @@ protected:
bool invisible;
triple Min,Max;
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
GLfloat *Controls;
GLfloat *Knots;
#endif
@@ -126,7 +143,7 @@ public:
run::copyArrayC(knots,knot,0,NoGC);
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
Controls=NULL;
#endif
}
@@ -138,7 +155,7 @@ public:
for(unsigned int i=0; i < n; ++i)
controls[i]=t*s->controls[i];
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
Controls=NULL;
#endif
}
@@ -156,7 +173,7 @@ public:
bool &first);
void render(double size2, const triple& Min, const triple& Max,
- double perspective, bool transparent);
+ double perspective, bool remesh);
drawElement *transformed(const double* t);
};
@@ -171,7 +188,7 @@ class drawPixel : public drawElement {
triple Min,Max;
public:
#ifdef HAVE_GL
- static Pixel R;
+ Pixel R;
#endif
drawPixel(const triple& v, const pen& p, double width, const string& key="")
: drawElement(key), v(v), p(p), color(rgba(p)), width(width),
@@ -194,9 +211,10 @@ public:
}
void render(double size2, const triple& b, const triple& B,
- double perspective, bool transparent);
+ double perspective, bool remesh);
bool write(prcfile *out, unsigned int *, double, groupsmap&);
+ bool write(jsfile *out);
drawElement *transformed(const double* t);
};
diff --git a/graphics/asymptote/drawsurface.cc b/graphics/asymptote/drawsurface.cc
index 80f7581ee3..7d23ad9308 100644
--- a/graphics/asymptote/drawsurface.cc
+++ b/graphics/asymptote/drawsurface.cc
@@ -12,7 +12,7 @@
#include <iomanip>
#include <fstream>
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
@@ -20,28 +20,19 @@
using namespace prc;
#include "material.h"
-namespace camp {
-
-#ifdef HAVE_GL
-mem::vector<Material> drawElement::material;
-MaterialMap drawElement::materialMap;
-size_t drawElement::materialIndex;
-using gl::modelView;
-//double* Tx=modelView.T; // x-component of current transform
-//double* Ty=modelView.T+4; // y-component of current transform
-double* Tz=modelView.T+8; // z-component of current transform
+namespace camp {
-#endif
+mem::vector<triple> drawElement::center;
+size_t drawElement::centerIndex=0;
+triple drawElement::lastcenter=0;
+size_t drawElement::lastcenterIndex=0;
const triple drawElement::zero;
using vm::array;
-#ifdef HAVE_GL
-BezierCurve drawSurface::C;
-BezierPatch drawBezierPatch::S;
-BezierTriangle drawBezierTriangle::S;
+#ifdef HAVE_LIBGLM
void storecolor(GLfloat *colors, int i, const vm::array &pens, int j)
{
@@ -61,48 +52,38 @@ void storecolor(GLfloat *colors, int i, const RGBAColour& p)
colors[i+3]=p.A;
}
-void clearMaterialBuffer(bool draw)
-{
- if(draw) {
- drawBezierPatch::S.draw();
- drawPath3::R.draw();
- drawPixel::R.draw();
- }
- drawElement::material.clear();
- drawElement::material.reserve(nmaterials);
- drawElement::materialMap.clear();
- drawElement::materialIndex=0;
-}
-
void setcolors(bool colors,
const RGBAColour& diffuse,
const RGBAColour& emissive,
const RGBAColour& specular, double shininess,
- double metallic, double fresnel0)
+ double metallic, double fresnel0, jsfile *out)
{
Material m;
if(colors) {
static glm::vec4 Black(0.0,0.0,0.0,diffuse.A);
m=Material(Black,Black,
glm::vec4(specular.R,specular.G,specular.B,specular.A),
- shininess, metallic, fresnel0);
- } else
+ shininess,metallic,fresnel0);
+ } else
m=Material(glm::vec4(diffuse.R,diffuse.G,diffuse.B,diffuse.A),
glm::vec4(emissive.R,emissive.G,emissive.B,emissive.A),
glm::vec4(specular.R,specular.G,specular.B,specular.A),
- shininess, metallic, fresnel0);
+ shininess,metallic,fresnel0);
- MaterialMap::iterator p=drawElement::materialMap.find(m);
- if(p != drawElement::materialMap.end())
- drawElement::materialIndex=p->second;
+ MaterialMap::iterator p=materialMap.find(m);
+ if(p != materialMap.end()) materialIndex=p->second;
else {
- drawElement::materialIndex=drawElement::material.size();
- if(drawElement::materialIndex >= nmaterials)
+ materialIndex=material.size();
+ if(materialIndex >= nmaterials)
nmaterials=min(Maxmaterials,2*nmaterials);
- if(drawElement::materialIndex >= Maxmaterials)
+#ifdef HAVE_LIBGL
+ if(!out && materialIndex >= Maxmaterials)
clearMaterialBuffer(true);
- drawElement::material.push_back(m);
- drawElement::materialMap[m]=drawElement::materialIndex;
+#endif
+ material.push_back(m);
+ materialMap[m]=materialIndex;
+ if(out)
+ out->addMaterial(materialIndex);
}
}
@@ -161,8 +142,8 @@ void drawBezierPatch::bounds(const double* t, bbox3& b)
c0=cz[0];
fuzz=Fuzz*run::norm(cz,16);
- z=bound(cz,min,b.empty ? c0 : min(c0,b.lower),fuzz,maxdepth);
- Z=bound(cz,max,b.empty ? c0 : max(c0,b.upper),fuzz,maxdepth);
+ z=bound(cz,min,b.empty ? c0 : min(c0,b.near),fuzz,maxdepth);
+ Z=bound(cz,max,b.empty ? c0 : max(c0,b.far),fuzz,maxdepth);
}
b.add(x,y,z);
@@ -238,9 +219,10 @@ bool drawBezierPatch::write(prcfile *out, unsigned int *, double, groupsmap&)
if(straight) {
triple vertices[]={controls[0],controls[12],controls[3],controls[15]};
- if(colors)
- out->addQuad(vertices,colors);
- else
+ if(colors) {
+ prc::RGBAColour Colors[]={colors[0],colors[1],colors[3],colors[2]};
+ out->addQuad(vertices,Colors);
+ } else
out->addRectangle(vertices,m);
} else
out->addPatch(controls,m);
@@ -248,84 +230,89 @@ bool drawBezierPatch::write(prcfile *out, unsigned int *, double, groupsmap&)
return true;
}
-void drawBezierPatch::render(double size2, const triple& b, const triple& B,
- double perspective, bool transparent)
+bool drawBezierPatch::write(jsfile *out)
{
-#ifdef HAVE_GL
- if(invisible ||
- ((colors ? colors[0].A+colors[1].A+colors[2].A+colors[3].A < 4.0 :
- diffuse.A < 1.0) ^ transparent)) return;
-
- const bool billboard=interaction == BILLBOARD &&
- !settings::getSetting<bool>("offscreen");
- triple m,M;
-
- double f,F,s;
- if(perspective) {
- f=Min.getz()*perspective;
- F=Max.getz()*perspective;
- m=triple(min(f*b.getx(),F*b.getx()),min(f*b.gety(),F*b.gety()),b.getz());
- M=triple(max(f*B.getx(),F*B.getx()),max(f*B.gety(),F*B.gety()),B.getz());
- s=max(f,F);
- } else {
- m=b;
- M=B;
- s=1.0;
- }
+#ifdef HAVE_LIBGLM
+ if(invisible)
+ return true;
+
+ if(billboard) {
+ meshinit();
+ drawElement::centerIndex=centerIndex;
+ } else drawElement::centerIndex=0;
- const pair size3(s*(B.getx()-b.getx()),s*(B.gety()-b.gety()));
+ setcolors(colors,diffuse,emissive,specular,shininess,metallic,fresnel0,out);
+
+ if(straight) {
+ triple Controls[]={controls[0],controls[12],controls[15],controls[3]};
+ out->addPatch(Controls,4,Min,Max,colors);
+ } else
+ out->addPatch(controls,16,Min,Max,colors);
+
+#endif
+ return true;
+}
- bbox3 box(m,M);
- box.transform(modelView.Tinv);
- m=box.Min();
- M=box.Max();
+void drawBezierPatch::render(double size2, const triple& b, const triple& B,
+ double perspective, bool remesh)
+{
+#ifdef HAVE_LIBGL
+ if(invisible) return;
+ transparent=colors ? colors[0].A+colors[1].A+colors[2].A+colors[3].A < 4.0 :
+ diffuse.A < 1.0;
- if(!billboard && (Max.getx() < m.getx() || Min.getx() > M.getx() ||
- Max.gety() < m.gety() || Min.gety() > M.gety() ||
- Max.getz() < m.getz() || Min.getz() > M.getz()))
+ bool offscreen;
+ if(billboard) {
+ drawElement::centerIndex=centerIndex;
+ BB.init(center);
+ offscreen=bbox2(Min,Max,BB).offscreen();
+ } else
+ offscreen=bbox2(Min,Max).offscreen();
+
+ if(offscreen) { // Fully offscreen
+ S.Onscreen=false;
+ S.data.clear();
return;
+ }
+
+ triple *Controls;
+ triple Controls0[16];
+ if(billboard) {
+ Controls=Controls0;
+ for(size_t i=0; i < 16; i++) {
+ Controls[i]=BB.transform(controls[i]);
+ }
+ } else {
+ Controls=controls;
+ if(!remesh && S.Onscreen) { // Fully onscreen; no need to re-render
+ S.append();
+ return;
+ }
+ }
+
+ double s=perspective ? Min.getz()*perspective : 1.0; // Move to glrender
+
+ const pair size3(s*(B.getx()-b.getx()),s*(B.gety()-b.gety()));
setcolors(colors,diffuse,emissive,specular,shininess,metallic,fresnel0);
- if(billboard) BB.init(center);
-
GLfloat c[16];
if(colors)
for(size_t i=0; i < 4; ++i)
storecolor(c,4*i,colors[i]);
- triple *Controls;
- triple Controls0[16];
- if(billboard) {
- Controls=Controls0;
- for(size_t i=0; i < 16; i++)
- Controls[i]=BB.transform(controls[i]);
- } else
- Controls=controls;
-
if(gl::outlinemode) {
triple edge0[]={Controls[0],Controls[4],Controls[8],Controls[12]};
- C.queue(edge0,straight,size3.length()/size2,m,M);
+ C.queue(edge0,straight,size3.length()/size2);
triple edge1[]={Controls[12],Controls[13],Controls[14],Controls[15]};
- C.queue(edge1,straight,size3.length()/size2,m,M);
+ C.queue(edge1,straight,size3.length()/size2);
triple edge2[]={Controls[15],Controls[11],Controls[7],Controls[3]};
- C.queue(edge2,straight,size3.length()/size2,m,M);
+ C.queue(edge2,straight,size3.length()/size2);
triple edge3[]={Controls[3],Controls[2],Controls[1],Controls[0]};
- C.queue(edge3,straight,size3.length()/size2,m,M);
- C.draw();
+ C.queue(edge3,straight,size3.length()/size2);
} else {
- S.queue(Controls,straight,size3.length()/size2,m,M,transparent,
+ S.queue(Controls,straight,size3.length()/size2,transparent,
colors ? c : NULL);
- if(BezierPatch::nvertices >= gl::maxvertices) {
- S.drawMaterials();
- BezierPatch::clear();
- gl::forceRemesh=true;
- }
- if(BezierPatch::Nvertices >= gl::maxvertices) {
- S.drawColors();
- BezierPatch::Clear();
- gl::forceRemesh=true;
- }
}
#endif
}
@@ -386,8 +373,8 @@ void drawBezierTriangle::bounds(const double* t, bbox3& b)
c0=cz[0];
fuzz=Fuzz*run::norm(cz,10);
- z=boundtri(cz,min,b.empty ? c0 : min(c0,b.lower),fuzz,maxdepth);
- Z=boundtri(cz,max,b.empty ? c0 : max(c0,b.upper),fuzz,maxdepth);
+ z=boundtri(cz,min,b.empty ? c0 : min(c0,b.near),fuzz,maxdepth);
+ Z=boundtri(cz,max,b.empty ? c0 : max(c0,b.far),fuzz,maxdepth);
}
b.add(x,y,z);
@@ -474,72 +461,87 @@ bool drawBezierTriangle::write(prcfile *out, unsigned int *, double,
return true;
}
-void drawBezierTriangle::render(double size2, const triple& b, const triple& B,
- double perspective, bool transparent)
+bool drawBezierTriangle::write(jsfile *out)
{
-#ifdef HAVE_GL
- if(invisible ||
- ((colors ? colors[0].A+colors[1].A+colors[2].A < 3.0 :
- diffuse.A < 1.0) ^ transparent)) return;
-
- const bool billboard=interaction == BILLBOARD &&
- !settings::getSetting<bool>("offscreen");
- triple m,M;
-
- double f,F,s;
- if(perspective) {
- f=Min.getz()*perspective;
- F=Max.getz()*perspective;
- m=triple(min(f*b.getx(),F*b.getx()),min(f*b.gety(),F*b.gety()),b.getz());
- M=triple(max(f*B.getx(),F*B.getx()),max(f*B.gety(),F*B.gety()),B.getz());
- s=max(f,F);
- } else {
- m=b;
- M=B;
- s=1.0;
- }
-
- const pair size3(s*(B.getx()-b.getx()),s*(B.gety()-b.gety()));
-
- bbox3 box(m,M);
- box.transform(modelView.Tinv);
- m=box.Min();
- M=box.Max();
+#ifdef HAVE_LIBGLM
+ if(invisible)
+ return true;
- if(!billboard && (Max.getx() < m.getx() || Min.getx() > M.getx() ||
- Max.gety() < m.gety() || Min.gety() > M.gety() ||
- Max.getz() < m.getz() || Min.getz() > M.getz()))
- return;
+ if(billboard) {
+ meshinit();
+ drawElement::centerIndex=centerIndex;
+ } else drawElement::centerIndex=0;
+
+ setcolors(colors,diffuse,emissive,specular,shininess,metallic,fresnel0,out);
+
+ if(straight) {
+ triple Controls[]={controls[0],controls[6],controls[9]};
+ out->addPatch(Controls,3,Min,Max,colors);
+ } else
+ out->addPatch(controls,10,Min,Max,colors);
+
+#endif
+ return true;
+}
- setcolors(colors,diffuse,emissive,specular,shininess,metallic,fresnel0);
+void drawBezierTriangle::render(double size2, const triple& b, const triple& B,
+ double perspective, bool remesh)
+{
+#ifdef HAVE_LIBGL
+ if(invisible) return;
+ transparent=colors ? colors[0].A+colors[1].A+colors[2].A < 3.0 :
+ diffuse.A < 1.0;
- if(billboard) BB.init(center);
+ bool offscreen;
+ if(billboard) {
+ drawElement::centerIndex=centerIndex;
+ BB.init(center);
+ offscreen=bbox2(Min,Max,BB).offscreen();
+ } else
+ offscreen=bbox2(Min,Max).offscreen();
- GLfloat v[12];
- if(colors)
- for(size_t i=0; i < 3; ++i)
- storecolor(v,4*i,colors[i]);
-
+ if(offscreen) { // Fully offscreen
+ S.Onscreen=false;
+ S.data.clear();
+ return;
+ }
+
triple *Controls;
triple Controls0[10];
if(billboard) {
Controls=Controls0;
- for(size_t i=0; i < 10; i++)
- Controls[i]=BB.transform(controls[i]);
- } else
+ for(size_t i=0; i < 10; i++) {
+ Controls[i]=BB.transform(controls[i]);
+ }
+ } else {
Controls=controls;
+ if(!remesh && S.Onscreen) { // Fully onscreen; no need to re-render
+ S.append();
+ return;
+ }
+ }
+
+ double s=perspective ? Min.getz()*perspective : 1.0; // Move to glrender
+
+ const pair size3(s*(B.getx()-b.getx()),s*(B.gety()-b.gety()));
+
+ setcolors(colors,diffuse,emissive,specular,shininess,metallic,fresnel0);
+ GLfloat c[12];
+ if(colors)
+ for(size_t i=0; i < 3; ++i)
+ storecolor(c,4*i,colors[i]);
+
if(gl::outlinemode) {
triple edge0[]={Controls[0],Controls[1],Controls[3],Controls[6]};
- C.queue(edge0,straight,size3.length()/size2,m,M);
+ C.queue(edge0,straight,size3.length()/size2);
triple edge1[]={Controls[6],Controls[7],Controls[8],Controls[9]};
- C.queue(edge1,straight,size3.length()/size2,m,M);
+ C.queue(edge1,straight,size3.length()/size2);
triple edge2[]={Controls[9],Controls[5],Controls[2],Controls[0]};
- C.queue(edge2,straight,size3.length()/size2,m,M);
- C.draw();
+ C.queue(edge2,straight,size3.length()/size2);
} else
- S.queue(Controls,straight,size3.length()/size2,m,M,transparent,
- colors ? v : NULL);
+ S.queue(Controls,straight,size3.length()/size2,transparent,
+ colors ? c : NULL);
#endif
}
@@ -626,7 +628,7 @@ void drawNurbs::ratio(const double *t, pair &b, double (*m)(double, double),
void drawNurbs::displacement()
{
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
size_t n=nu*nv;
size_t nuknots=udegree+nu+1;
size_t nvknots=vdegree+nv+1;
@@ -651,37 +653,10 @@ void drawNurbs::displacement()
#endif
}
-void drawNurbs::render(double size2, const triple& Min, const triple& Max,
- double perspective, bool transparent)
+void drawNurbs::render(double size2, const triple& b, const triple& B,
+ double perspective, bool remesh)
{
-#ifdef HAVE_GL
- if(invisible || ((colors ? colors[3]+colors[7]+colors[11]+colors[15] < 4.0
- : diffuse.A < 1.0) ^ transparent)) return;
-
- bbox3 B(this->Min,this->Max);
- B.transform(modelView.T);
-
- triple m=B.Min();
- triple M=B.Max();
-
- if(perspective) {
- double f=m.getz()*perspective;
- double F=M.getz()*perspective;
- if(M.getx() < min(f*Min.getx(),F*Min.getx()) ||
- m.getx() > max(f*Max.getx(),F*Max.getx()) ||
- M.gety() < min(f*Min.gety(),F*Min.gety()) ||
- m.gety() > max(f*Max.gety(),F*Max.gety()) ||
- M.getz() < Min.getz() ||
- m.getz() > Max.getz()) return;
- } else {
- if(M.getx() < Min.getx() || m.getx() > Max.getx() ||
- M.gety() < Min.gety() || m.gety() > Max.gety() ||
- M.getz() < Min.getz() || m.getz() > Max.getz()) return;
- }
-
- setcolors(colors,diffuse,emissive,specular,shininess,metallic,fresnel0);
// TODO: implement NURBS renderer
-#endif
}
void drawSphere::P(triple& t, double x, double y, double z)
@@ -910,41 +885,39 @@ bool drawTriangles::write(prcfile *out, unsigned int *, double, groupsmap&)
return true;
}
-void drawTriangles::render(double size2, const triple& Min,
- const triple& Max, double perspective,
- bool transparent)
+bool drawTriangles::write(jsfile *out)
{
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
if(invisible)
- return;
-
- if(invisible || ((diffuse.A < 1.0) ^ transparent)) return;
-
- triple m,M;
-
- bbox3 B(this->Min,this->Max);
- B.transform(modelView.T);
+ return true;
+
+ setcolors(nC,diffuse,emissive,specular,shininess,metallic,fresnel0,out);
+
+ out->addTriangles(nP,P,nN,N,nC,C,nI,PI,NI,CI,Min,Max);
+#endif
+ return true;
+}
- m=B.Min();
- M=B.Max();
+void drawTriangles::render(double size2, const triple& b,
+ const triple& B, double perspective,
+ bool remesh)
+{
+#ifdef HAVE_LIBGL
+ if(invisible) return;
+
+ transparent=diffuse.A < 1.0;
- if(perspective) {
- const double f=m.getz()*perspective;
- const double F=M.getz()*perspective;
- if((M.getx() < min(f*Min.getx(),F*Min.getx()) ||
- m.getx() > max(f*Max.getx(),F*Max.getx()) ||
- M.gety() < min(f*Min.gety(),F*Min.gety()) ||
- m.gety() > max(f*Max.gety(),F*Max.gety()) ||
- M.getz() < Min.getz() ||
- m.getz() > Max.getz()))
- return;
- } else {
- if((M.getx() < Min.getx() || m.getx() > Max.getx() ||
- M.gety() < Min.gety() || m.gety() > Max.gety() ||
- M.getz() < Min.getz() || m.getz() > Max.getz()))
- return;
+ if(bbox2(Min,Max).offscreen()) { // Fully offscreen
+ R.Onscreen=false;
+ R.data.clear();
+ return;
}
+ if(!remesh && R.Onscreen) { // Fully onscreen; no need to re-render
+ R.append();
+ return;
+ }
+
setcolors(nC,diffuse,emissive,specular,shininess,metallic,fresnel0);
R.queue(nP,P,nN,N,nC,C,nI,PI,NI,CI,transparent);
#endif
diff --git a/graphics/asymptote/drawsurface.h b/graphics/asymptote/drawsurface.h
index 226de59db7..7a8d0b71aa 100644
--- a/graphics/asymptote/drawsurface.h
+++ b/graphics/asymptote/drawsurface.h
@@ -13,9 +13,13 @@
#include "beziercurve.h"
#include "bezierpatch.h"
+namespace run {
+void inverse(double *a, size_t n);
+}
+
namespace camp {
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
void storecolor(GLfloat *colors, int i, const vm::array &pens, int j);
#endif
@@ -36,13 +40,16 @@ protected:
double PRCshininess;
bool invisible;
Interaction interaction;
+ bool billboard;
+ size_t centerIndex;
triple Min,Max;
bool prc;
public:
#ifdef HAVE_GL
- static BezierCurve C;
+ BezierCurve C;
+ bool transparent;
#endif
string wrongsize() {
@@ -50,13 +57,22 @@ public:
string(" array of triples and array of 4 pens required");
}
+ void init() {
+ billboard=interaction == BILLBOARD &&
+ !settings::getSetting<bool>("offscreen");
+ centerIndex=0;
+ }
+
drawSurface(const vm::array& g, size_t ncontrols, triple center,
bool straight, const vm::array&p, double opacity,
- double shininess, double metallic, double fresnel0, double PRCshininess, const vm::array &pens,
+ double shininess, double metallic, double fresnel0,
+ double PRCshininess, const vm::array &pens,
Interaction interaction, bool prc, const string& key="") :
drawElement(key), ncontrols(ncontrols), center(center), straight(straight),
- opacity(opacity), shininess(shininess), metallic(metallic), fresnel0(fresnel0), PRCshininess(PRCshininess),
- interaction(interaction), prc(prc) {
+ opacity(opacity), shininess(shininess), metallic(metallic),
+ fresnel0(fresnel0), PRCshininess(PRCshininess), interaction(interaction),
+ prc(prc) {
+ init();
if(checkArray(&g) != 4 || checkArray(&p) != 3)
reportError(wrongsize());
@@ -81,7 +97,7 @@ public:
size_t nodes=(ncontrols == 16 ? 4 : 3);
size_t size=checkArray(&pens);
if(size > 0) {
- if(size != nodes) reportError("4 vertex pens required");
+ if(size != nodes) reportError("one vertex pen required per node");
colors=new(UseGC) prc::RGBAColour[nodes];
for(size_t i=0; i < nodes; ++i)
colors[i]=rgba(vm::read<camp::pen>(pens,i));
@@ -96,15 +112,14 @@ public:
PRCshininess(s->PRCshininess), invisible(s->invisible),
interaction(s->interaction), prc(s->prc) {
+ init();
if(s->controls) {
controls=new(UseGC) triple[ncontrols];
for(unsigned int i=0; i < ncontrols; ++i)
controls[i]=t*s->controls[i];
} else controls=NULL;
-#ifdef HAVE_GL
center=t*s->center;
-#endif
}
virtual ~drawSurface() {}
@@ -115,7 +130,7 @@ public:
class drawBezierPatch : public drawSurface {
public:
#ifdef HAVE_GL
- static BezierPatch S;
+ BezierPatch S;
#endif
drawBezierPatch(const vm::array& g, triple center, bool straight,
@@ -124,28 +139,33 @@ public:
double PRCshininess, const vm::array &pens,
Interaction interaction, bool prc) :
drawSurface(g,16,center,straight,p,opacity,
- shininess,metallic,fresnel0,PRCshininess,pens,interaction,prc) {}
+ shininess,metallic,fresnel0,PRCshininess,pens,interaction,prc) {}
drawBezierPatch(const double* t, const drawBezierPatch *s) :
- drawSurface(t,s) {
- }
+ drawSurface(t,s) {}
void bounds(const double* t, bbox3& b);
void ratio(const double* t, pair &b, double (*m)(double, double),
double fuzz, bool &first);
+ void meshinit() {
+ if(billboard)
+ centerIndex=centerindex(center);
+ }
+
bool write(prcfile *out, unsigned int *, double, groupsmap&);
+ bool write(jsfile *out);
- void render(double, const triple& Min, const triple& Max,
- double perspective, bool transparent);
+ void render(double, const triple& b, const triple& B,
+ double perspective, bool remesh);
drawElement *transformed(const double* t);
};
class drawBezierTriangle : public drawSurface {
public:
#ifdef HAVE_GL
- static BezierTriangle S;
+ BezierTriangle S;
#endif
drawBezierTriangle(const vm::array& g, triple center, bool straight,
@@ -157,18 +177,23 @@ public:
PRCshininess,pens,interaction,prc) {}
drawBezierTriangle(const double* t, const drawBezierTriangle *s) :
- drawSurface(t,s) {
- }
+ drawSurface(t,s) {}
void bounds(const double* t, bbox3& b);
void ratio(const double* t, pair &b, double (*m)(double, double),
double fuzz, bool &first);
+ void meshinit() {
+ if(billboard)
+ centerIndex=centerindex(center);
+ }
+
bool write(prcfile *out, unsigned int *, double, groupsmap&);
+ bool write(jsfile *out);
- void render(double, const triple& Min, const triple& Max,
- double perspective, bool transparent);
+ void render(double, const triple& b, const triple& B,
+ double perspective, bool remesh);
drawElement *transformed(const double* t);
};
@@ -192,7 +217,7 @@ protected:
triple Min,Max;
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
GLfloat *colors;
GLfloat *Controls;
GLfloat *uKnots;
@@ -260,7 +285,7 @@ public:
emissive=rgba(vm::read<camp::pen>(p,1));
specular=rgba(vm::read<camp::pen>(p,2));
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
Controls=NULL;
int size=checkArray(&pens);
if(size > 0) {
@@ -287,7 +312,7 @@ public:
for(unsigned int i=0; i < n; ++i)
controls[i]=t*s->controls[i];
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
Controls=NULL;
colors=s->colors;
#endif
@@ -305,8 +330,8 @@ public:
void ratio(const double* t, pair &b, double (*m)(double, double), double,
bool &first);
- void render(double size2, const triple& Min, const triple& Max,
- double perspective, bool transparent);
+ void render(double size2, const triple& b, const triple& B,
+ double perspective, bool remesh);
drawElement *transformed(const double* t);
};
@@ -454,6 +479,7 @@ class drawBaseTriangles : public drawElement {
protected:
#ifdef HAVE_GL
Triangles R;
+ bool transparent;
#endif
size_t nP;
@@ -461,6 +487,7 @@ protected:
size_t nN;
triple* N;
size_t nI;
+ size_t Ni;
uint32_t (*PI)[3];
uint32_t (*NI)[3];
@@ -496,24 +523,29 @@ public:
for(size_t i=0; i < nN; ++i)
N[i]=vm::read<triple>(n,i);
- if(checkArray(&ni) != nI)
- reportError("Index arrays have different lengths");
- NI=new(UseGC) uint32_t[nI][3];
- for(size_t i=0; i < nI; ++i) {
- vm::array *nii=vm::read<vm::array*>(ni,i);
- if(checkArray(nii) != 3) reportError(wrongsize);
- uint32_t *NIi=NI[i];
- for(size_t j=0; j < 3; ++j) {
- size_t index=unsignedcast(vm::read<Int>(nii,j));
- if(index >= nN) reportError(outofrange);
- NIi[j]=index;
+ Ni=checkArray(&ni);
+ if(Ni == 0 && nN == nP)
+ NI=PI;
+ else {
+ if(Ni != nI)
+ reportError("Index arrays have different lengths");
+ NI=new(UseGC) uint32_t[nI][3];
+ for(size_t i=0; i < nI; ++i) {
+ vm::array *nii=vm::read<vm::array*>(ni,i);
+ if(checkArray(nii) != 3) reportError(wrongsize);
+ uint32_t *NIi=NI[i];
+ for(size_t j=0; j < 3; ++j) {
+ size_t index=unsignedcast(vm::read<Int>(nii,j));
+ if(index >= nN) reportError(outofrange);
+ NIi[j]=index;
+ }
}
}
- }
+ } else Ni=0;
}
drawBaseTriangles(const double* t, const drawBaseTriangles *s) :
- drawElement(s->KEY), nP(s->nP), nN(s->nN), nI(s->nI) {
+ drawElement(s->KEY), nP(s->nP), nN(s->nN), nI(s->nI), Ni(s->Ni) {
P=new(UseGC) triple[nP];
for(size_t i=0; i < nP; i++)
P[i]=t*s->P[i];
@@ -528,15 +560,28 @@ public:
if(nN) {
N=new(UseGC) triple[nN];
- for(size_t i=0; i < nN; i++)
- N[i]=transformNormal(t,s->N[i]);
-
- NI=new(UseGC) uint32_t[nI][3];
- for(size_t i=0; i < nI; ++i) {
- uint32_t *NIi=NI[i];
- uint32_t *sNIi=s->NI[i];
- for(size_t j=0; j < 3; ++j)
- NIi[j]=sNIi[j];
+ if(t == NULL) {
+ for(size_t i=0; i < nN; i++)
+ N[i]=s->N[i];
+ } else {
+ double T[]={t[0],t[1],t[2],
+ t[4],t[5],t[6],
+ t[8],t[9],t[10]};
+ run::inverse(T,3);
+ for(size_t i=0; i < nN; i++)
+ N[i]=unit(Transform3(s->N[i],T));
+ }
+
+ if(Ni == 0) {
+ NI=PI;
+ } else {
+ NI=new(UseGC) uint32_t[nI][3];
+ for(size_t i=0; i < nI; ++i) {
+ uint32_t *NIi=NI[i];
+ uint32_t *sNIi=s->NI[i];
+ for(size_t j=0; j < 3; ++j)
+ NIi[j]=sNIi[j];
+ }
}
}
}
@@ -559,6 +604,7 @@ class drawTriangles : public drawBaseTriangles {
size_t nC;
prc::RGBAColour*C;
uint32_t (*CI)[3];
+ size_t Ci;
// Asymptote material data
prc::RGBAColour diffuse;
@@ -597,17 +643,22 @@ public:
size_t nI=checkArray(&vi);
- if(checkArray(&ci) != nI)
- reportError("Index arrays have different lengths");
- CI=new(UseGC) uint32_t[nI][3];
- for(size_t i=0; i < nI; ++i) {
- vm::array *cii=vm::read<vm::array*>(ci,i);
- if(checkArray(cii) != 3) reportError(wrongsize);
- uint32_t *CIi=CI[i];
- for(size_t j=0; j < 3; ++j) {
- size_t index=unsignedcast(vm::read<Int>(cii,j));
- if(index >= nC) reportError(outofrange);
- CIi[j]=index;
+ Ci=checkArray(&ci);
+ if(Ci == 0 && nC == nP)
+ CI=PI;
+ else {
+ if(Ci != nI)
+ reportError("Index arrays have different lengths");
+ CI=new(UseGC) uint32_t[nI][3];
+ for(size_t i=0; i < nI; ++i) {
+ vm::array *cii=vm::read<vm::array*>(ci,i);
+ if(checkArray(cii) != 3) reportError(wrongsize);
+ uint32_t *CIi=CI[i];
+ for(size_t j=0; j < 3; ++j) {
+ size_t index=unsignedcast(vm::read<Int>(cii,j));
+ if(index >= nC) reportError(outofrange);
+ CIi[j]=index;
+ }
}
}
} else {
@@ -620,8 +671,8 @@ public:
drawBaseTriangles(t,s), nC(s->nC),
diffuse(s->diffuse), emissive(s->emissive),
specular(s->specular), opacity(s->opacity), shininess(s->shininess),
- metallic(s->metallic), fresnel0(s->fresnel0), PRCshininess(s->PRCshininess),
- invisible(s->invisible) {
+ metallic(s->metallic), fresnel0(s->fresnel0),
+ PRCshininess(s->PRCshininess), invisible(s->invisible) {
if(nC) {
C=new(UseGC) prc::RGBAColour[nC];
@@ -640,10 +691,11 @@ public:
virtual ~drawTriangles() {}
- void render(double size2, const triple& Min, const triple& Max,
- double perspective, bool transparent);
+ void render(double size2, const triple& b, const triple& B,
+ double perspective, bool remesh);
bool write(prcfile *out, unsigned int *, double, groupsmap&);
+ bool write(jsfile *out);
drawElement *transformed(const double* t) {
return new drawTriangles(t,this);
diff --git a/graphics/asymptote/examples/Klein.asy b/graphics/asymptote/examples/Klein.asy
index 99914d9043..a5e7418fe6 100644
--- a/graphics/asymptote/examples/Klein.asy
+++ b/graphics/asymptote/examples/Klein.asy
@@ -2,8 +2,6 @@ import graph3;
size(469pt);
-viewportmargin=0;
-
currentprojection=perspective(
camera=(25.0851928432063,-30.3337528952473,19.3728775115443),
up=Z,
diff --git a/graphics/asymptote/examples/Sierpinski.asy b/graphics/asymptote/examples/Sierpinski.asy
index c0ff04971d..1b9fb5555b 100644
--- a/graphics/asymptote/examples/Sierpinski.asy
+++ b/graphics/asymptote/examples/Sierpinski.asy
@@ -14,4 +14,4 @@ void Sierpinski(pair A, real s, int q, bool top=true)
}
}
-Sierpinski((0,1),1,9);
+Sierpinski((0,1),1,5);
diff --git a/graphics/asymptote/examples/SierpinskiSponge.asy b/graphics/asymptote/examples/SierpinskiSponge.asy
index c398aa511c..deaf7c1dec 100644
--- a/graphics/asymptote/examples/SierpinskiSponge.asy
+++ b/graphics/asymptote/examples/SierpinskiSponge.asy
@@ -82,18 +82,15 @@ for(int n3=0; n3 < 20; ++n3) {
for(int n2=0; n2 < 20; ++n2) {
surface s1;
for(int n1=0; n1 < 20; ++n1) {
- for(int k=0; k < 6; ++k){
- transform3 T=scale3(u)*shift(M[n1])*scale3(0.5);
+ for(int k=0; k < 6; ++k) {
if(Sponge3[n3][n2][n1][k] > 0) {
- s1.append(T*Squares[k]);
+ s1.append(scale3(u)*shift(M[n1])*scale3(0.5)*Squares[k]);
}
}
}
- transform3 T=scale3(u)*shift(M[n2])*scale3(0.5);
- s2.append(T*s1);
+ s2.append(scale3(u)*shift(M[n2])*scale3(0.5)*s1);
}
- transform3 T=scale3(u)*shift(M[n3])*scale3(0.5);
- s3.append(T*s2);
+ s3.append(scale3(u)*shift(M[n3])*scale3(0.5)*s2);
}
s3.colors(palette(s3.map(abs),Rainbow()));
draw(s3);
diff --git a/graphics/asymptote/examples/logo3.asy b/graphics/asymptote/examples/logo3.asy
index 93b5a331e9..c7947f1c41 100644
--- a/graphics/asymptote/examples/logo3.asy
+++ b/graphics/asymptote/examples/logo3.asy
@@ -1,9 +1,11 @@
import three;
-size(560,320,IgnoreAspect);
+//size(105,50,IgnoreAspect);
+size(560,320,IgnoreAspect); // Fullsize
size3(140,80,15);
currentprojection=perspective(-2,20,10,up=Y);
currentlight=White;
+viewportmargin=(0,10);
real a=-0.4;
real b=0.95;
diff --git a/graphics/asymptote/examples/pdb.asy b/graphics/asymptote/examples/pdb.asy
index 41cd29faaf..43b771fdd0 100644
--- a/graphics/asymptote/examples/pdb.asy
+++ b/graphics/asymptote/examples/pdb.asy
@@ -10,7 +10,7 @@ currentlight=White;
defaultrender.merge=true; // Fast low-quality rendering
//defaultrender.merge=false; // Slow high-quality rendering
bool pixel=false; // Set to true to draw dots as pixels.
-real width=10;
+real width=6;
size(200);
currentprojection=perspective(30,30,15);
@@ -161,4 +161,4 @@ if(!error(input(viewfilename,check=false)))
options="3Dviews="+viewfilename;
shipout(prefix,options=options);
-
+currentpicture.erase();
diff --git a/graphics/asymptote/examples/shellmethod.asy b/graphics/asymptote/examples/shellmethod.asy
index c8e541f2a6..98f88f624f 100644
--- a/graphics/asymptote/examples/shellmethod.asy
+++ b/graphics/asymptote/examples/shellmethod.asy
@@ -2,7 +2,7 @@ import graph3;
import solids;
size(400);
-currentprojection=perspective(0,-1,30,up=Y);
+currentprojection=perspective(2,3,30,up=Y);
currentlight=light(gray(0.75),(0.25,-0.25,1),(0,1,0));
pen color=green;
diff --git a/graphics/asymptote/examples/triangles.asy b/graphics/asymptote/examples/triangles.asy
index fc62c58c12..da1b93d28b 100644
--- a/graphics/asymptote/examples/triangles.asy
+++ b/graphics/asymptote/examples/triangles.asy
@@ -1,12 +1,14 @@
import three;
size(10cm);
+currentlight=Headlamp;
+
triple[] v={O,X,X+Y,Y};
triple[] n={Z,X};
int[][] vi={{0,1,2},{2,3,0}};
-int[][] ni={{0,0,0},{1,1,1}};
+int[][] ni={{1,0,1},{1,1,1}};
// Adobe Reader exhibits a PRC rendering bug for opacities:
pen[] p={red+opacity(0.5),green+opacity(0.5),blue+opacity(0.5),
diff --git a/graphics/asymptote/examples/vertexshading.asy b/graphics/asymptote/examples/vertexshading.asy
index a5555d66f7..fd5e9b2df8 100644
--- a/graphics/asymptote/examples/vertexshading.asy
+++ b/graphics/asymptote/examples/vertexshading.asy
@@ -4,9 +4,12 @@ size(200);
currentprojection=perspective(4,5,5);
+//draw(shift(2Z)*surface(O--X--Y--cycle),blue);
+
draw(surface(unitcircle3,new pen[] {red,green,blue,black}));
draw(surface(shift(Z)*unitsquare3,
- new pen[] {red,green+opacity(0.5),blue,black}));
+ new pen[] {red,green+opacity(0.5),blue,black}),
+ prc() ? nolight : currentlight);
draw(surface(shift(X)*((0,0,0)..controls (1,0,0) and (2,0,0)..(3,0,0)..
controls (2.5,sqrt(3)/2,0) and (2,sqrt(3),0)..
(1.5,3*sqrt(3)/2,0)..
diff --git a/graphics/asymptote/examples/washermethod.asy b/graphics/asymptote/examples/washermethod.asy
index c3177aa111..a61c37e5e5 100644
--- a/graphics/asymptote/examples/washermethod.asy
+++ b/graphics/asymptote/examples/washermethod.asy
@@ -18,7 +18,7 @@ real x2=1.7787;
real x3=1.8043;
path[] p={graph(F,x1,x2,Spline),
- graph(F,0.7,x1,Spline)--graph(F,x2,x3,Spline),
+ graph(F,0.7,x1,Spline)--graph(F,x2,x3,Spline)&cycle,
graph(F,0,0.7,Spline)--graph(F,x3,2,Spline)};
pen[] pn=new pen[] {color1,color2,color1};
diff --git a/graphics/asymptote/fileio.h b/graphics/asymptote/fileio.h
index d5e78cec29..1341d66b2d 100644
--- a/graphics/asymptote/fileio.h
+++ b/graphics/asymptote/fileio.h
@@ -117,7 +117,7 @@ public:
file(const string& name, bool check=true, Mode type=NOMODE, bool binary=false,
bool closed=false) :
name(name), check(check), type(type), linemode(false), csvmode(false),
- singlereal(false), singleint(true), signedint(true),
+ wordmode(false), singlereal(false), singleint(true), signedint(true),
closed(closed), standard(name.empty()),
binary(binary), nullfield(false), whitespace("") {dimension();}
@@ -423,7 +423,8 @@ public:
ifile(name,comment,true,UPDATE,std::ios::in | std::ios::out) {}
Int precision(Int p) {
- return p == 0 ? stream->precision() : stream->precision(p);
+ return p == 0 ? stream->precision(settings::getSetting<Int>("digits")) :
+ stream->precision(p);
}
void flush() {if(fstream) fstream->flush();}
@@ -463,6 +464,7 @@ public:
} else {
name=outpath(name);
stream=fstream=new std::ofstream(name.c_str(),mode | std::ios::trunc);
+ stream->precision(settings::getSetting<Int>("digits"));
index=processData().ofile.add(fstream);
Check();
}
@@ -483,7 +485,8 @@ public:
}
void clear() {stream->clear();}
Int precision(Int p) {
- return p == 0 ? stream->precision() : stream->precision(p);
+ return p == 0 ? stream->precision(settings::getSetting<Int>("digits")) :
+ stream->precision(p);
}
void flush() {stream->flush();}
diff --git a/graphics/asymptote/gl.js b/graphics/asymptote/gl.js
new file mode 120000
index 0000000000..237a568b54
--- /dev/null
+++ b/graphics/asymptote/gl.js
@@ -0,0 +1 @@
+webgl/gl.js \ No newline at end of file
diff --git a/graphics/asymptote/glew.c b/graphics/asymptote/glew.c
index bea419ea8a..4bdea46b60 100644
--- a/graphics/asymptote/glew.c
+++ b/graphics/asymptote/glew.c
@@ -2,6 +2,10 @@
#include "config.h"
#endif
+#ifdef __MSDOS__
+#define _WIN32
+#endif
+
#ifdef HAVE_LIBGL
#include "GL/glew.c"
#endif /* HAVE_LIBGL */
diff --git a/graphics/asymptote/glrender.cc b/graphics/asymptote/glrender.cc
index d864ed34de..d23307c0c9 100644
--- a/graphics/asymptote/glrender.cc
+++ b/graphics/asymptote/glrender.cc
@@ -1,6 +1,6 @@
/*****
* glrender.cc
- * John Bowman and Orest Shardt
+ * John Bowman, Orest Shardt, and Supakorn "Jamie" Rassameemasmuang
* Render 3D Bezier paths and surfaces.
*****/
@@ -13,7 +13,6 @@
#include <cstring>
#include <sys/time.h>
-
#include "common.h"
#include "locate.h"
#include "seconds.h"
@@ -21,6 +20,12 @@
#include "bezierpatch.h"
#include "beziercurve.h"
+#include "picture.h"
+#include "bbox3.h"
+#include "drawimage.h"
+#include "interact.h"
+#include "tr.h"
+
#ifdef HAVE_GL
#ifdef HAVE_LIBGLUT
@@ -36,48 +41,60 @@
#define GLUT_BUILDING_LIB
#endif // HAVE_LIBGLUT
-#include "picture.h"
-#include "arcball.h"
-#include "bbox3.h"
-#include "drawimage.h"
-#include "interact.h"
-#include "tr.h"
-
#ifdef HAVE_LIBGLUT
#ifdef FREEGLUT
#include <GL/freeglut_ext.h>
#endif
#endif
-#include <glm/glm.hpp>
-#include <glm/gtc/matrix_transform.hpp>
-#include <glm/gtc/type_ptr.hpp>
-
#include "shaders.h"
-#include "material.h"
#ifdef HAVE_LIBOPENIMAGEIO
#include <OpenImageIO/imageio.h>
#endif
using settings::locateFile;
+using utils::seconds;
+
+namespace camp {
+Billboard BB;
+
+GLint pixelShader;
+GLint noNormalShader;
+GLint materialShader;
+GLint colorShader;
+GLint transparentShader;
+
+vertexBuffer material0Data;
+vertexBuffer material1Data;
+vertexBuffer materialData;
+vertexBuffer colorData;
+vertexBuffer transparentData;
+vertexBuffer triangleData;
+
+const size_t Nbuffer=10000;
+const size_t nbuffer=1000;
+}
+
+#endif /* HAVE_GL */
+
+#ifdef HAVE_LIBGLM
using camp::Material;
using camp::Maxmaterials;
using camp::Nmaterials;
using camp::nmaterials;
-using utils::seconds;
+using camp::MaterialMap;
namespace camp {
-billboard BB;
-GLint materialShader;
-GLint colorShader;
-GLint noNormalShader;
-GLint pixelShader;
+mem::vector<Material> material;
+MaterialMap materialMap;
+size_t materialIndex;
size_t Maxmaterials;
size_t Nmaterials=1;
size_t nmaterials=48;
}
+
namespace gl {
bool outlinemode=false;
@@ -85,7 +102,7 @@ bool glthread=false;
bool initialize=true;
GLint Maxvertices;
-Int maxvertices;
+size_t maxvertices;
using camp::picture;
using camp::drawRawImage;
@@ -104,27 +121,9 @@ int Fitscreen;
bool queueExport=false;
bool readyAfterExport=false;
-
-#ifdef HAVE_LIBGLUT
-timeval lasttime;
-timeval lastframetime;
-int oldWidth,oldHeight;
-
-bool Xspin,Yspin,Zspin;
-bool Animate;
-bool Step;
bool remesh;
-bool forceRemesh=false;
-bool queueScreen=false;
-
-int x0,y0;
-string Action;
-
-double lastangle;
-Arcball arcball;
-int window;
-#endif
+int Mode;
double Aspect;
bool View;
@@ -132,8 +131,8 @@ int Oldpid;
string Prefix;
const picture* Picture;
string Format;
-int Width,Height;
int fullWidth,fullHeight;
+int Width,Height;
double oWidth,oHeight;
int screenWidth,screenHeight;
int maxWidth;
@@ -141,10 +140,6 @@ int maxHeight;
int maxTileWidth;
int maxTileHeight;
-double T[16];
-
-int Mode;
-
double Angle;
bool orthographic;
double H;
@@ -156,9 +151,12 @@ double Xmin,Xmax;
double Ymin,Ymax;
pair Shift;
+pair Margin;
double X,Y;
+int x0,y0;
double cx,cy;
double Xfactor,Yfactor;
+double ArcballFactor;
static const double pi=acos(-1.0);
static const double degrees=180.0/pi;
@@ -177,107 +175,33 @@ double Zoom;
double Zoom0;
double lastzoom;
+GLint lastshader=-1;
+
using glm::dvec3;
+using glm::dmat3;
+using glm::mat3;
using glm::mat4;
using glm::dmat4;
using glm::value_ptr;
using glm::translate;
+mat3 normMat;
+dmat3 dnormMat=dmat3();
+
mat4 projViewMat;
mat4 viewMat;
-mat4 normMat;
dmat4 dprojMat;
+dmat4 dprojViewMat;
dmat4 dviewMat;
dmat4 drotateMat;
-using utils::statistics;
-statistics S;
+const double *dprojView;
+double BBT[9];
-ModelView modelView;
GLuint ubo;
-#ifdef HAVE_LIBOPENIMAGEIO
-GLuint envMapBuf;
-
-GLuint initHDR() {
- GLuint tex;
- glGenTextures(1, &tex);
-
- auto imagein = OIIO::ImageInput::open(locateFile("res/studio006.hdr").c_str());
- OIIO::ImageSpec const& imspec = imagein->spec();
-
- // uses GL_TEXTURE1 for now.
- glActiveTexture(GL_TEXTURE1);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-
- glBindTexture(GL_TEXTURE_2D, tex);
- std::vector<float> pixels(imspec.width*imspec.height*3);
- imagein->read_image(pixels.data());
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imspec.width, imspec.height, 0,
- GL_RGB, GL_FLOAT, pixels.data());
-
- glGenerateMipmap(GL_TEXTURE_2D);
- imagein->close();
-
- glActiveTexture(GL_TEXTURE0);
- return tex;
-}
-
-#endif
-void updateModelViewData()
-{
- // Like Fortran, OpenGL uses transposed (column-major) format!
- dmat4 MV=glm::transpose(dviewMat);
- dmat4 MVinv=glm::inverse(MV);
-
- normMat=mat4(MVinv);
-
- double* T=value_ptr(MV);
- double* Tinv=value_ptr(MVinv);
-
- for(int j=0; j < 16; ++j) {
- modelView.T[j]=T[j];
- modelView.Tinv[j]=Tinv[j];
- }
-}
-
-
-GLint shaderProg,shaderProgColor;
-
-double *Rotate;
-void *glrenderWrapper(void *a);
-
-#ifdef HAVE_LIBOSMESA
-OSMesaContext ctx;
-unsigned char *osmesa_buffer;
-#endif
-
-#ifdef HAVE_PTHREAD
-pthread_t mainthread;
-
-pthread_cond_t initSignal=PTHREAD_COND_INITIALIZER;
-pthread_mutex_t initLock=PTHREAD_MUTEX_INITIALIZER;
-
-pthread_cond_t readySignal=PTHREAD_COND_INITIALIZER;
-pthread_mutex_t readyLock=PTHREAD_MUTEX_INITIALIZER;
-
-void endwait(pthread_cond_t& signal, pthread_mutex_t& lock)
-{
- pthread_mutex_lock(&lock);
- pthread_cond_signal(&signal);
- pthread_mutex_unlock(&lock);
-}
-void wait(pthread_cond_t& signal, pthread_mutex_t& lock)
-{
- pthread_mutex_lock(&lock);
- pthread_cond_signal(&signal);
- pthread_cond_wait(&signal,&lock);
- pthread_mutex_unlock(&lock);
-}
-#endif
+unsigned int framecount;
template<class T>
inline T min(T a, T b)
@@ -339,18 +263,25 @@ void setDimensions(int Width, int Height, double X, double Y)
}
}
+void updateProjection()
+{
+ dprojViewMat=dprojMat*dviewMat;
+ projViewMat=mat4(dprojViewMat);
+ dprojView=value_ptr(dprojViewMat);
+}
+
void frustum(GLdouble left, GLdouble right, GLdouble bottom,
GLdouble top, GLdouble nearVal, GLdouble farVal)
{
dprojMat=glm::frustum(left,right,bottom,top,nearVal,farVal);
- projViewMat=mat4(dprojMat*dviewMat);
+ updateProjection();
}
void ortho(GLdouble left, GLdouble right, GLdouble bottom,
GLdouble top, GLdouble nearVal, GLdouble farVal)
{
dprojMat=glm::ortho(left,right,bottom,top,nearVal,farVal);
- projViewMat=mat4(dprojMat*dviewMat);
+ updateProjection();
}
void setProjection()
@@ -358,13 +289,135 @@ void setProjection()
setDimensions(Width,Height,X,Y);
if(orthographic) ortho(xmin,xmax,ymin,ymax,-zmax,-zmin);
else frustum(xmin,xmax,ymin,ymax,-zmax,-zmin);
+}
+
+void updateModelViewData()
+{
+ // Like Fortran, OpenGL uses transposed (column-major) format!
+ dnormMat=dmat3(glm::inverse(dviewMat));
+ double *T=value_ptr(dnormMat);
+ for(size_t i=0; i < 9; ++i)
+ BBT[i]=T[i];
+ normMat=mat3(dnormMat);
+}
+
+bool Xspin,Yspin,Zspin;
+bool Animate;
+bool Step;
+
+#ifdef HAVE_LIBGLUT
+void idle()
+{
+ glutIdleFunc(NULL);
+ Xspin=Yspin=Zspin=Animate=Step=false;
+}
+#endif
+
+void home(bool webgl=false)
+{
+ X=Y=cx=cy=0.0;
+#ifdef HAVE_GL
+#ifdef HAVE_LIBGLUT
+ if(!webgl && !getSetting<bool>("offscreen"))
+ idle();
+#endif
+#endif
+ dviewMat=dmat4(1.0);
+ drotateMat=dmat4(1.0);
+ updateModelViewData();
+
+ remesh=true;
+ lastzoom=Zoom=Zoom0;
+ setDimensions(Width,Height,0,0);
+ framecount=0;
+}
+
+#ifdef HAVE_GL
+
+double T[16];
+
#ifdef HAVE_LIBGLUT
- double arcballRadius=getSetting<double>("arcballradius");
- arcball.set_params(vec2(0.5*Width,0.5*Height),arcballRadius*Zoom);
+timeval lasttime;
+timeval lastframetime;
+int oldWidth,oldHeight;
+
+bool forceRemesh=false;
+
+bool queueScreen=false;
+
+string Action;
+
+double lastangle;
+int window;
#endif
+
+using utils::statistics;
+statistics S;
+
+#ifdef HAVE_LIBOPENIMAGEIO
+GLuint envMapBuf;
+
+GLuint initHDR() {
+ GLuint tex;
+ glGenTextures(1, &tex);
+
+ auto imagein = OIIO::ImageInput::open(locateFile("res/studio006.hdr").c_str());
+ OIIO::ImageSpec const& imspec = imagein->spec();
+
+ // uses GL_TEXTURE1 for now.
+ glActiveTexture(GL_TEXTURE1);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+ glBindTexture(GL_TEXTURE_2D, tex);
+ std::vector<float> pixels(imspec.width*imspec.height*3);
+ imagein->read_image(pixels.data());
+
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imspec.width, imspec.height, 0,
+ GL_RGB, GL_FLOAT, pixels.data());
+
+ glGenerateMipmap(GL_TEXTURE_2D);
+ imagein->close();
+
+ glActiveTexture(GL_TEXTURE0);
+ return tex;
}
+#endif
+GLint shaderProg,shaderProgColor;
+
+void *glrenderWrapper(void *a);
+
+#ifdef HAVE_LIBOSMESA
+OSMesaContext ctx;
+unsigned char *osmesa_buffer;
+#endif
+
+#ifdef HAVE_PTHREAD
+pthread_t mainthread;
+
+pthread_cond_t initSignal=PTHREAD_COND_INITIALIZER;
+pthread_mutex_t initLock=PTHREAD_MUTEX_INITIALIZER;
+
+pthread_cond_t readySignal=PTHREAD_COND_INITIALIZER;
+pthread_mutex_t readyLock=PTHREAD_MUTEX_INITIALIZER;
+
+void endwait(pthread_cond_t& signal, pthread_mutex_t& lock)
+{
+ pthread_mutex_lock(&lock);
+ pthread_cond_signal(&signal);
+ pthread_mutex_unlock(&lock);
+}
+void wait(pthread_cond_t& signal, pthread_mutex_t& lock)
+{
+ pthread_mutex_lock(&lock);
+ pthread_cond_signal(&signal);
+ pthread_cond_wait(&signal,&lock);
+ pthread_mutex_unlock(&lock);
+}
+#endif
+
void drawscene(int Width, int Height)
{
#ifdef HAVE_PTHREAD
@@ -384,23 +437,20 @@ void drawscene(int Width, int Height)
double size2=hypot(Width,Height);
- if(remesh) {
- camp::BezierPatch::clear();
- camp::BezierPatch::Clear();
- camp::BezierPatch::tClear();
- camp::BezierCurve::clear();
- camp::Pixel::clear();
+ if(forceRemesh) {
+ remesh=true;
+ forceRemesh=false;
}
- // Render opaque objects
- Picture->render(size2,m,M,perspective,false,remesh);
+ camp::clearBuffers();
+
+ if(remesh)
+ camp::drawElement::center.clear();
- // Enable transparency
- glDepthMask(GL_FALSE);
+ Picture->render(size2,m,M,perspective,remesh);
- // Render transparent objects
- Picture->render(size2,m,M,perspective,true,remesh);
- glDepthMask(GL_TRUE);
+ if(!forceRemesh)
+ remesh=false;
}
// Return x divided by y rounded up to the nearest integer.
@@ -479,38 +529,6 @@ void Export()
#endif
}
-#ifdef HAVE_LIBGLUT
-void idle()
-{
- glutIdleFunc(NULL);
- Xspin=Yspin=Zspin=Animate=Step=false;
-}
-#endif
-
-void home()
-{
- X=Y=cx=cy=0.0;
-#ifdef HAVE_LIBGLUT
- if(!getSetting<bool>("offscreen")) {
- idle();
- arcball.init();
- }
-#endif
- viewMat=mat4(1.0f);
- normMat=mat4(1.0f);
-
- dviewMat=dmat4(1.0);
- drotateMat=dmat4(1.0);
-
- Rotate=value_ptr(drotateMat);
- updateModelViewData();
-
- remesh=true;
- lastzoom=Zoom=Zoom0;
- setDimensions(Width,Height,0,0);
- glClearColor(Background[0],Background[1],Background[2],Background[3]);
-}
-
void nodisplay()
{
}
@@ -567,19 +585,20 @@ void mode()
{
remesh=true;
switch(Mode) {
- case 0: // wireframe -> regular
+ case 0: // regular
outlinemode=false;
nlights=nlights0;
+ lastshader=-1;
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
++Mode;
break;
- case 1: // regular -> outline
+ case 1: // outline
outlinemode=true;
nlights=0;
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
++Mode;
break;
- case 2: // outline -> wireframe
+ case 2: // wireframe
outlinemode=false;
Mode=0;
break;
@@ -736,16 +755,20 @@ void display()
if(maxvertices == 0) maxvertices=Maxvertices;
bool fps=settings::verbose > 2;
- if(fps) seconds();
drawscene(Width,Height);
if(fps) {
- glFinish();
- double s=seconds();
- if(s > 0.0) {
- double rate=1.0/s;
- S.add(rate);
- cout << "FPS=" << rate << "\t" << S.mean() << " +/- " << S.stdev() << endl;
+ if(framecount < 10) // Measure steady-state framerate
+ seconds();
+ else {
+ double s=seconds();
+ if(s > 0.0) {
+ double rate=1.0/s;
+ S.add(rate);
+ cout << "FPS=" << rate << "\t" << S.mean() << " +/- " << S.stdev()
+ << endl;
+ }
}
+ ++framecount;
}
glutSwapBuffers();
@@ -784,12 +807,14 @@ void update()
Animate=getSetting<bool>("autoplay");
glutShowWindow();
if(Zoom != lastzoom) remesh=true;
+
lastzoom=Zoom;
double cz=0.5*(zmin+zmax);
dviewMat=translate(translate(dmat4(1.0),dvec3(cx,cy,cz))*drotateMat,
dvec3(0,0,-cz));
viewMat=mat4(dviewMat);
+
setProjection();
updateModelViewData();
@@ -836,35 +861,31 @@ void reshape(int width, int height)
void shift(int x, int y)
{
- if(x > 0 && y > 0) {
- double Zoominv=1.0/Zoom;
- X += (x-x0)*Zoominv;
- Y += (y0-y)*Zoominv;
- x0=x; y0=y;
- update();
- }
+ double Zoominv=1.0/Zoom;
+ X += (x-x0)*Zoominv;
+ Y += (y0-y)*Zoominv;
+ x0=x; y0=y;
+ update();
}
void pan(int x, int y)
{
- if(x > 0 && y > 0) {
- if(orthographic) {
- double Zoominv=1.0/Zoom;
- X += (x-x0)*Zoominv;
- Y += (y0-y)*Zoominv;
- } else {
- cx += (x-x0)*(xmax-xmin)/Width;
- cy += (y0-y)*(ymax-ymin)/Height;
- }
- x0=x; y0=y;
- update();
+ if(orthographic) {
+ double Zoominv=1.0/Zoom;
+ X += (x-x0)*Zoominv;
+ Y += (y0-y)*Zoominv;
+ } else {
+ cx += (x-x0)*(xmax-xmin)/Width;
+ cy += (y0-y)*(ymax-ymin)/Height;
}
+ x0=x; y0=y;
+ update();
}
void capzoom()
{
static double maxzoom=sqrt(DBL_MAX);
- static double minzoom=1/maxzoom;
+ static double minzoom=1.0/maxzoom;
if(Zoom <= minzoom) Zoom=minzoom;
if(Zoom >= maxzoom) Zoom=maxzoom;
@@ -875,19 +896,17 @@ void capzoom()
void zoom(int x, int y)
{
if(ignorezoom) {ignorezoom=false; y0=y; return;}
- if(x > 0 && y > 0) {
- double zoomFactor=getSetting<double>("zoomfactor");
- if(zoomFactor > 0.0) {
- double zoomStep=getSetting<double>("zoomstep");
- const double limit=log(0.1*DBL_MAX)/log(zoomFactor);
- double s=zoomStep*(y0-y);
- if(fabs(s) < limit) {
- Zoom *= pow(zoomFactor,s);
- capzoom();
- y0=y;
- setProjection();
- glutPostRedisplay();
- }
+ double zoomFactor=getSetting<double>("zoomfactor");
+ if(zoomFactor > 0.0) {
+ double zoomStep=getSetting<double>("zoomstep");
+ const double limit=log(0.1*DBL_MAX)/log(zoomFactor);
+ double stepPower=zoomStep*(y0-y);
+ if(fabs(stepPower) < limit) {
+ Zoom *= pow(zoomFactor,stepPower);
+ capzoom();
+ y0=y;
+ setProjection();
+ glutPostRedisplay();
}
}
}
@@ -906,20 +925,48 @@ void mousewheel(int wheel, int direction, int x, int y)
}
}
+struct arcball {
+ double angle;
+ triple axis;
+
+ arcball(double x0, double y0, double x, double y) {
+ triple v0=norm(x0,y0);
+ triple v1=norm(x,y);
+ double Dot=dot(v0,v1);
+ if(Dot > 1.0) Dot=1.0;
+ else if(Dot < -1.0) Dot=-1.0;
+ angle=acos(Dot);
+ axis=unit(cross(v0,v1));
+ }
+
+ triple norm(double x, double y) {
+ double norm=hypot(x,y);
+ if(norm > 1.0) {
+ double denom=1.0/norm;
+ x *= denom;
+ y *= denom;
+ }
+ return triple(x,y,sqrt(max(1.0-x*x-y*y,0.0)));
+ }
+};
+
+inline double glx(int x) {
+ return 2.0*x/Width-1.0;
+}
+
+inline double gly(int y) {
+ return 1.0-2.0*y/Height;
+}
+
void rotate(int x, int y)
{
- if(x > 0 && y > 0) {
- arcball.mouse_motion(x,Height-y,0,
- Action == "rotateX", // X rotation only
- Action == "rotateY"); // Y rotation only
-
- for(int i=0; i < 4; ++i) {
- const ::vec4& roti=arcball.rot[i];
- int i4=4*i;
- for(int j=0; j < 4; ++j)
- value_ptr(drotateMat)[i4+j]=roti[j];
- }
-
+ if(x != x0 || y != y0) {
+ arcball A(glx(x0),gly(y0),glx(x),gly(y));
+ triple v=A.axis;
+ drotateMat=glm::rotate<double>(2*A.angle/lastzoom*ArcballFactor,
+ glm::dvec3(v.getx(),v.gety(),v.getz()))*
+ drotateMat;
+ x0=x; y0=y;
update();
}
}
@@ -929,24 +976,12 @@ double Degrees(int x, int y)
return atan2(0.5*Height-y-Y,x-0.5*Width-X)*degrees;
}
-void updateArcball()
-{
- Rotate=value_ptr(drotateMat);
- for(int i=0; i < 4; ++i) {
- int i4=4*i;
- ::vec4& roti=arcball.rot[i];
- for(int j=0; j < 4; ++j)
- roti[j]=Rotate[i4+j];
- }
- update();
-}
-
void rotateX(double step)
{
dmat4 tmpRot(1.0);
tmpRot=glm::rotate(tmpRot,glm::radians(step),dvec3(1,0,0));
drotateMat=tmpRot*drotateMat;
- updateArcball();
+ update();
}
void rotateY(double step)
@@ -954,7 +989,7 @@ void rotateY(double step)
dmat4 tmpRot(1.0);
tmpRot=glm::rotate(tmpRot,glm::radians(step),dvec3(0,1,0));
drotateMat=tmpRot*drotateMat;
- updateArcball();
+ update();
}
void rotateZ(double step)
@@ -962,16 +997,28 @@ void rotateZ(double step)
dmat4 tmpRot(1.0);
tmpRot=glm::rotate(tmpRot,glm::radians(step),dvec3(0,0,1));
drotateMat=tmpRot*drotateMat;
- updateArcball();
+ update();
+}
+
+void rotateX(int x, int y)
+{
+ double angle=Degrees(x,y);
+ rotateX(angle-lastangle);
+ lastangle=angle;
+}
+
+void rotateY(int x, int y)
+{
+ double angle=Degrees(x,y);
+ rotateY(angle-lastangle);
+ lastangle=angle;
}
void rotateZ(int x, int y)
{
- if(x > 0 && y > 0) {
- double angle=Degrees(x,y);
- rotateZ(angle-lastangle);
- lastangle=angle;
- }
+ double angle=Degrees(x,y);
+ rotateZ(angle-lastangle);
+ lastangle=angle;
}
#ifndef GLUT_WHEEL_UP
@@ -1061,8 +1108,8 @@ void mouse(int button, int state, int x, int y)
}
if(state == GLUT_DOWN) {
- if(Action == "rotate" || Action == "rotateX" || Action == "rotateY") {
- arcball.mouse_down(x,Height-y);
+ if(Action == "rotate") {
+ x0=x; y0=y;
glutMotionFunc(rotate);
} else if(Action == "shift") {
x0=x; y0=y;
@@ -1073,13 +1120,18 @@ void mouse(int button, int state, int x, int y)
} else if(Action == "zoom" || Action == "zoom/menu") {
y0=y;
glutMotionFunc(zoom);
+ } else if(Action == "rotateX") {
+ lastangle=Degrees(x,y);
+ glutMotionFunc(rotateX);
+ } else if(Action == "rotateY") {
+ lastangle=Degrees(x,y);
+ glutMotionFunc(rotateY);
} else if(Action == "rotateZ") {
lastangle=Degrees(x,y);
glutMotionFunc(rotateZ);
}
} else {
- arcball.mouse_up();
- glutMotionFunc(NULL);
+ glutMotionFunc(NULL);
}
}
@@ -1157,11 +1209,6 @@ void spinz()
}
}
-void write(const char *text, const double *v)
-{
- cout << text << "=(" << v[0] << "," << v[1] << "," << v[2] << ")";
-}
-
void showCamera()
{
projection P=camera();
@@ -1279,6 +1326,8 @@ projection camera(bool user)
double cz=0.5*(zmin+zmax);
+ double *Rotate=value_ptr(drotateMat);
+
if(user) {
for(int i=0; i < 3; ++i) {
double sumCamera=0.0, sumTarget=0.0, sumUp=0.0;
@@ -1313,8 +1362,8 @@ projection camera(bool user)
return projection(orthographic,vCamera,vUp,vTarget,Zoom,
2.0*atan(tan(0.5*Angle)/Zoom)/radians,
- pair(X/Width*lastzoom+Shift.getx(),
- Y/Height*lastzoom+Shift.gety()));
+ pair(X/Width+Shift.getx(),
+ Y/Height+Shift.gety()));
}
void init()
@@ -1335,7 +1384,6 @@ void init()
glutInit(&argc,argv);
screenWidth=glutGet(GLUT_SCREEN_WIDTH);
screenHeight=glutGet(GLUT_SCREEN_HEIGHT);
-
#endif
}
@@ -1378,10 +1426,6 @@ void init_osmesa()
}
#endif // HAVE_LIBOSMESA
}
-
-GLuint vertShader,fragShader;
-GLuint vertShaderCol,fragShaderCol;
-
void initshader()
{
Nlights=max(Nlights,nlights);
@@ -1406,45 +1450,47 @@ void initshader()
std::vector<ShaderfileModePair> shaders;
shaders.push_back(ShaderfileModePair(vs.c_str(),GL_VERTEX_SHADER));
shaders.push_back(ShaderfileModePair(fs.c_str(),GL_FRAGMENT_SHADER));
+ if(orthographic)
+ shaderParams.push_back("ORTHOGRAPHIC");
- camp::noNormalShader=compileAndLinkShader(shaders,Nlights,Nmaterials,
- shaderParams);
-
shaderParams.push_back("WIDTH");
camp::pixelShader=compileAndLinkShader(shaders,Nlights,Nmaterials,
shaderParams);
shaderParams.pop_back();
-
+ camp::noNormalShader=compileAndLinkShader(shaders,Nlights,Nmaterials,
+ shaderParams);
shaderParams.push_back("NORMAL");
camp::materialShader=compileAndLinkShader(shaders,Nlights,Nmaterials,
shaderParams);
-
- shaderParams.push_back("EXPLICIT_COLOR");
+ shaderParams.push_back("COLOR");
camp::colorShader=compileAndLinkShader(shaders,Nlights,Nmaterials,
shaderParams);
+ shaderParams.push_back("TRANSPARENT");
+ camp::transparentShader=compileAndLinkShader(shaders,Nlights,Nmaterials,
+ shaderParams);
}
void deleteshader()
{
- glDeleteProgram(camp::materialShader);
+ glDeleteProgram(camp::transparentShader);
glDeleteProgram(camp::colorShader);
+ glDeleteProgram(camp::materialShader);
+ glDeleteProgram(camp::pixelShader);
glDeleteProgram(camp::noNormalShader);
}
-
+
+#endif /* HAVE_GL */
+
// angle=0 means orthographic.
void glrender(const string& prefix, const picture *pic, const string& format,
double width, double height, double angle, double zoom,
- const triple& m, const triple& M, const pair& shift, double *t,
+ const triple& m, const triple& M, const pair& shift,
+ const pair& margin, double *t,
double *background, size_t nlightsin, triple *lights,
double *diffuse, double *specular, bool view, int oldpid)
{
- remesh=true;
- bool offscreen=getSetting<bool>("offscreen");
Iconify=getSetting<bool>("iconify");
-#ifdef HAVE_PTHREAD
- static bool initializedView=false;
-#endif
width=max(width,1.0);
height=max(height,1.0);
@@ -1453,10 +1499,6 @@ void glrender(const string& prefix, const picture *pic, const string& format,
Prefix=prefix;
Picture=pic;
Format=format;
- for(int i=0; i < 16; ++i)
- T[i]=t[i];
- for(int i=0; i < 4; ++i)
- Background[i]=background[i];
nlights0=nlights=nlightsin;
@@ -1468,6 +1510,7 @@ void glrender(const string& prefix, const picture *pic, const string& format,
Zoom0=zoom;
Oldpid=oldpid;
Shift=shift;
+ Margin=margin;
Xmin=m.getx();
Xmax=M.getx();
@@ -1478,7 +1521,7 @@ void glrender(const string& prefix, const picture *pic, const string& format,
orthographic=Angle == 0.0;
H=orthographic ? 0.0 : -tan(0.5*Angle)*zmax;
-
+
ignorezoom=false;
Mode=0;
Xfactor=Yfactor=1.0;
@@ -1489,7 +1532,15 @@ void glrender(const string& prefix, const picture *pic, const string& format,
if(maxTileWidth <= 0) maxTileWidth=1024;
if(maxTileHeight <= 0) maxTileHeight=768;
- if(offscreen) {
+ bool webgl=Format == "html";
+
+#ifdef HAVE_GL
+#ifdef HAVE_PTHREAD
+ static bool initializedView=false;
+#endif
+
+ bool offscreen=getSetting<bool>("offscreen");
+ if(offscreen && !webgl) {
screenWidth=maxTileWidth;
screenHeight=maxTileHeight;
@@ -1501,18 +1552,27 @@ void glrender(const string& prefix, const picture *pic, const string& format,
}
if(glinitialize) {
- init();
+ if(!webgl) init();
Fitscreen=1;
}
+#endif
static bool initialized=false;
if(!initialized || !interact::interactive) {
antialias=getSetting<Int>("antialias") > 1;
- double expand=getSetting<double>("render");
- if(expand < 0)
- expand *= (Format.empty() || Format == "eps" || Format == "pdf")
- ? -2.0 : -1.0;
- if(antialias) expand *= 2.0;
+ double expand;
+ if(webgl)
+ expand=1.0;
+ else {
+ expand=getSetting<double>("render");
+ if(expand < 0)
+ expand *= (Format.empty() || Format == "eps" || Format == "pdf") ? -2.0 : -1.0;
+ if(antialias) expand *= 2.0;
+ }
+
+ oWidth=width;
+ oHeight=height;
+ Aspect=width/height;
// Force a hard viewport limit to work around direct rendering bugs.
// Alternatively, one can use -glOptions=-indirect (with a performance
@@ -1522,26 +1582,42 @@ void glrender(const string& prefix, const picture *pic, const string& format,
maxHeight=(int) ceil(maxViewport.gety());
if(maxWidth <= 0) maxWidth=max(maxHeight,2);
if(maxHeight <= 0) maxHeight=max(maxWidth,2);
- if(screenWidth <= 0) screenWidth=maxWidth;
- else screenWidth=min(screenWidth,maxWidth);
- if(screenHeight <= 0) screenHeight=maxHeight;
- else screenHeight=min(screenHeight,maxHeight);
-
- oWidth=width;
- oHeight=height;
- Aspect=width/height;
-
+
fullWidth=(int) ceil(expand*width);
fullHeight=(int) ceil(expand*height);
- Width=min(fullWidth,screenWidth);
- Height=min(fullHeight,screenHeight);
+ if(webgl) {
+ Width=fullWidth;
+ Height=fullHeight;
+ } else {
+ if(screenWidth <= 0) screenWidth=maxWidth;
+ else screenWidth=min(screenWidth,maxWidth);
+ if(screenHeight <= 0) screenHeight=maxHeight;
+ else screenHeight=min(screenHeight,maxHeight);
+
+ Width=min(fullWidth,screenWidth);
+ Height=min(fullHeight,screenHeight);
- if(Width > Height*Aspect)
- Width=min((int) (ceil(Height*Aspect)),screenWidth);
- else
- Height=min((int) (ceil(Width/Aspect)),screenHeight);
+ if(Width > Height*Aspect)
+ Width=min((int) (ceil(Height*Aspect)),screenWidth);
+ else
+ Height=min((int) (ceil(Width/Aspect)),screenHeight);
+ }
+
+ home(webgl);
+ setProjection();
+
+ if(webgl) return;
+
+ ArcballFactor=1+8.0*hypot(Margin.getx(),Margin.gety())/hypot(Width,Height);
+
+#ifdef HAVE_GL
+ for(int i=0; i < 16; ++i)
+ T[i]=t[i];
+ for(int i=0; i < 4; ++i)
+ Background[i]=background[i];
+ remesh=true;
Aspect=((double) Width)/Height;
if(maxTileWidth <= 0) maxTileWidth=screenWidth;
@@ -1553,8 +1629,10 @@ void glrender(const string& prefix, const picture *pic, const string& format,
if(View && settings::verbose > 1)
cout << "Rendering " << stripDir(prefix) << " as "
<< Width << "x" << Height << " image" << endl;
+#endif
}
+#ifdef HAVE_GL
bool havewindow=initialized && glthread && !offscreen;
#ifdef HAVE_LIBGLUT
@@ -1657,7 +1735,7 @@ void glrender(const string& prefix, const picture *pic, const string& format,
initshader();
}
- home();
+ glClearColor(Background[0],Background[1],Background[2],Background[3]);
#ifdef HAVE_LIBGLUT
if(!offscreen) {
@@ -1688,7 +1766,7 @@ void glrender(const string& prefix, const picture *pic, const string& format,
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutDisplayFunc(display);
-
+
glutMainLoop();
#endif // HAVE_LIBGLUT
} else {
@@ -1709,10 +1787,16 @@ void glrender(const string& prefix, const picture *pic, const string& format,
quit();
}
}
+
+#endif /* HAVE_GL */
}
} // namespace gl
+#endif
+
+#ifdef HAVE_GL
+
namespace camp {
string getLightIndex(size_t const& index, string const& fieldName) {
@@ -1721,19 +1805,53 @@ string getLightIndex(size_t const& index, string const& fieldName) {
return Strdup(buf.str());
}
+string getCenterIndex(size_t const& index) {
+ ostringstream buf;
+ buf << "Centers[" << index << "]";
+ return Strdup(buf.str());
+}
+
void setUniforms(GLint shader)
{
if(gl::nlights > gl::Nlights || nmaterials > Nmaterials) {
gl::deleteshader();
gl::initshader();
+ gl::lastshader=-1;
}
- glUseProgram(shader);
+ bool normal=shader != pixelShader && shader != noNormalShader;
+
+ if(shader != gl::lastshader) {
+ glUseProgram(shader);
+ gl::lastshader=shader;
- glUniformMatrix4fv(glGetUniformLocation(shader,"projViewMat"),1,GL_FALSE, value_ptr(gl::projViewMat));
- glUniformMatrix4fv(glGetUniformLocation(shader,"viewMat"),1,GL_FALSE, value_ptr(gl::viewMat));
- glUniformMatrix4fv(glGetUniformLocation(shader,"normMat"),1,GL_FALSE, value_ptr(gl::normMat));
+ glUniform1i(glGetUniformLocation(shader,"nlights"),gl::nlights);
+
+ for(size_t i=0; i < gl::nlights; ++i) {
+ triple Lighti=gl::Lights[i];
+ size_t i4=4*i;
+ glUniform3f(glGetUniformLocation(shader,
+ getLightIndex(i,"direction").c_str()),
+ (GLfloat) Lighti.getx(),(GLfloat) Lighti.gety(),
+ (GLfloat) Lighti.getz());
+
+ glUniform3f(glGetUniformLocation(shader,
+ getLightIndex(i,"color").c_str()),
+ (GLfloat) gl::Diffuse[i4],(GLfloat) gl::Diffuse[i4+1],
+ (GLfloat) gl::Diffuse[i4+2]);
+ }
+#if HAVE_LIBOPENIMAGEIO
+ // textures
+ if (settings::getSetting<bool>("envmap")) {
+ glActiveTexture(GL_TEXTURE1);
+ glBindBuffer(GL_TEXTURE_2D, gl::envMapBuf);
+ glUniform1i(glGetUniformLocation(shader, "environmentMap"), 1);
+ glActiveTexture(GL_TEXTURE0);
+ }
+#endif
+ }
+
GLuint binding=0;
GLint blockindex=glGetUniformBlockIndex(shader,"MaterialBuffer");
glUniformBlockBinding(shader,blockindex,binding);
@@ -1741,49 +1859,151 @@ void setUniforms(GLint shader)
glGenBuffers(1,&gl::ubo);
glBindBuffer(GL_UNIFORM_BUFFER,gl::ubo);
- glBufferData(GL_UNIFORM_BUFFER,drawElement::material.size()*sizeof(Material),
- drawElement::material.data(),GL_STATIC_DRAW);
+ glBufferData(GL_UNIFORM_BUFFER,material.size()*sizeof(Material),
+ material.data(),GL_STATIC_DRAW);
glBindBufferBase(GL_UNIFORM_BUFFER,binding,gl::ubo);
- glUniform1i(glGetUniformLocation(shader,"nlights"),gl::nlights);
-
- for(size_t i=0; i < gl::nlights; ++i) {
- triple Lighti=gl::Lights[i];
- size_t i4=4*i;
- glUniform4f(glGetUniformLocation(shader,
- getLightIndex(i,"direction").c_str()),
- (GLfloat) Lighti.getx(),(GLfloat) Lighti.gety(),
- (GLfloat) Lighti.getz(),0.0);
-
- glUniform4f(glGetUniformLocation(shader,
- getLightIndex(i,"diffuse").c_str()),
- (GLfloat) gl::Diffuse[i4],(GLfloat) gl::Diffuse[i4+1],
- (GLfloat) gl::Diffuse[i4+2],(GLfloat) gl::Diffuse[i4+3]);
-
- glUniform4f(glGetUniformLocation(shader,
- getLightIndex(i,"specular").c_str()),
- (GLfloat) gl::Specular[i4],(GLfloat) gl::Specular[i4+1],
- (GLfloat) gl::Specular[i4+2],(GLfloat) gl::Specular[i4+3]);
- }
-
-#if HAVE_LIBOPENIMAGEIO
- // textures
- if (settings::getSetting<bool>("envmap")) {
- glActiveTexture(GL_TEXTURE1);
- glBindBuffer(GL_TEXTURE_2D, gl::envMapBuf);
- glUniform1i(glGetUniformLocation(shader, "environmentMap"), 1);
- glActiveTexture(GL_TEXTURE0);
- }
-#endif
+ glUniformMatrix4fv(glGetUniformLocation(shader,"projViewMat"),1,GL_FALSE, value_ptr(gl::projViewMat));
+
+ glUniformMatrix4fv(glGetUniformLocation(shader,"viewMat"),1,GL_FALSE, value_ptr(gl::viewMat));
+
+ if(normal)
+ glUniformMatrix3fv(glGetUniformLocation(shader,"normMat"),1,GL_FALSE, value_ptr(gl::normMat));
}
void deleteUniforms()
{
glBindBuffer(GL_UNIFORM_BUFFER,0);
glDeleteBuffers(1,&gl::ubo);
- glUseProgram(0);
}
+void drawBuffer(vertexBuffer& data, GLint shader)
+{
+ if(data.indices.empty()) return;
+
+ bool pixel=shader == pixelShader;
+ bool normal=!pixel && (shader != noNormalShader);
+ bool color=shader == colorShader || shader == transparentShader;
+
+ const size_t size=sizeof(GLfloat);
+ const size_t intsize=sizeof(GLint);
+ const size_t bytestride=color ? sizeof(VertexData) :
+ (normal ? sizeof(vertexData) :
+ (pixel ? sizeof(vertexData0) : sizeof(vertexData1)));
+
+ GLuint vertsBufferIndex;
+ GLuint elemBufferIndex;
+
+ GLuint vao;
+
+ glGenVertexArrays(1,&vao);
+ glBindVertexArray(vao);
+
+ glGenBuffers(1,&vertsBufferIndex);
+ glGenBuffers(1,&elemBufferIndex);
+
+ if(color) registerBuffer(data.Vertices,vertsBufferIndex);
+ else if(normal) registerBuffer(data.vertices,vertsBufferIndex);
+ else if(pixel) registerBuffer(data.vertices0,vertsBufferIndex);
+ else registerBuffer(data.vertices1,vertsBufferIndex);
+
+ registerBuffer(data.indices,elemBufferIndex);
+
+ glBindBuffer(GL_ARRAY_BUFFER,vertsBufferIndex);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elemBufferIndex);
+
+ camp::setUniforms(shader);
+
+ const GLint posAttrib=glGetAttribLocation(shader,"position");
+ const GLint materialAttrib=glGetAttribLocation(shader,"material");
+ GLint normalAttrib,colorAttrib,widthAttrib=0;
+
+ glVertexAttribPointer(posAttrib,3,GL_FLOAT,GL_FALSE,bytestride,(void *) 0);
+ glEnableVertexAttribArray(posAttrib);
+
+ if(normal) {
+ normalAttrib=glGetAttribLocation(shader,"normal");
+ glVertexAttribPointer(normalAttrib,3,GL_FLOAT,GL_FALSE,bytestride,
+ (void *) (3*size));
+ glEnableVertexAttribArray(normalAttrib);
+ } else if(pixel) {
+ widthAttrib=glGetAttribLocation(shader,"width");
+ glVertexAttribPointer(widthAttrib,1,GL_FLOAT,GL_FALSE,bytestride,
+ (void *) (3*size));
+ glEnableVertexAttribArray(widthAttrib);
+ }
+
+ glVertexAttribIPointer(materialAttrib,1,GL_INT,bytestride,
+ (void *) ((normal ? 6 : (pixel ? 4 : 3))*size));
+ glEnableVertexAttribArray(materialAttrib);
+
+ if(color) {
+ colorAttrib=glGetAttribLocation(shader,"color");
+ glVertexAttribPointer(colorAttrib,4,GL_UNSIGNED_BYTE,GL_TRUE,bytestride,
+ (void *) (6*size+intsize));
+ glEnableVertexAttribArray(colorAttrib);
+ }
+
+ glFlush(); // Workaround broken MSWindows drivers for Intel GPU
+ glDrawElements(normal ? GL_TRIANGLES : (pixel ? GL_POINTS : GL_LINES),
+ data.indices.size(),GL_UNSIGNED_INT,(void *) 0);
+
+ glDisableVertexAttribArray(posAttrib);
+ if(normal)
+ glDisableVertexAttribArray(normalAttrib);
+ if(pixel)
+ glDisableVertexAttribArray(widthAttrib);
+ glDisableVertexAttribArray(materialAttrib);
+ if(color)
+ glDisableVertexAttribArray(colorAttrib);
+
+ deleteUniforms();
+
+ glBindBuffer(GL_ARRAY_BUFFER,0);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
+
+ glBindVertexArray(0);
+ glDeleteVertexArrays(1,&vao);
+
+ glDeleteBuffers(1,&vertsBufferIndex);
+ glDeleteBuffers(1,&elemBufferIndex);
}
-#endif
+void drawBuffers()
+{
+ drawBuffer(material0Data,pixelShader);
+ drawBuffer(material1Data,noNormalShader);
+ drawBuffer(materialData,materialShader);
+ drawBuffer(colorData,colorShader);
+ drawBuffer(triangleData,transparentShader);
+ sortTriangles();
+
+ glDepthMask(GL_FALSE); // Enable transparency
+ drawBuffer(transparentData,transparentShader);
+ glDepthMask(GL_TRUE); // Disable transparency
+}
+
+void clearBuffers()
+{
+ material0Data.clear();
+ material1Data.clear();
+ materialData.clear();
+ colorData.clear();
+ triangleData.clear();
+ transparentData.clear();
+}
+
+void clearMaterialBuffer(bool draw)
+{
+ if(draw)
+ drawBuffers();
+ material.clear();
+ material.reserve(nmaterials);
+ materialMap.clear();
+ materialIndex=0;
+}
+
+
+}
+
+#endif /* HAVE_GL */
diff --git a/graphics/asymptote/glrender.h b/graphics/asymptote/glrender.h
index 5354fa59e7..cebc13f355 100644
--- a/graphics/asymptote/glrender.h
+++ b/graphics/asymptote/glrender.h
@@ -9,6 +9,13 @@
#include "common.h"
#include "triple.h"
+#ifdef HAVE_LIBGLM
+#include <glm/glm.hpp>
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/type_ptr.hpp>
+#include <glm/gtx/transform.hpp>
+#endif
+
#ifdef HAVE_GL
#include <csignal>
@@ -47,6 +54,14 @@
#endif
#endif
+#else
+typedef float GLfloat;
+#endif
+
+#ifdef HAVE_LIBGLM
+#include "material.h"
+#endif
+
namespace camp {
class picture;
@@ -78,9 +93,22 @@ namespace gl {
extern bool outlinemode;
extern bool wireframeMode;
-extern Int maxvertices;
+extern size_t maxvertices;
extern bool forceRemesh;
-extern GLuint ubo;
+
+extern bool orthographic;
+extern double xmin,xmax;
+extern double ymin,ymax;
+extern double zmin,zmax;
+extern int fullWidth,fullHeight;
+extern double Zoom0;
+extern double Angle;
+extern double Zoom0;
+extern camp::pair Margin;
+
+extern camp::triple *Lights;
+extern size_t nlights;
+extern double *Diffuse;
struct projection
{
@@ -101,80 +129,255 @@ public:
zoom(zoom), angle(angle), viewportshift(viewportshift) {}
};
+#ifdef HAVE_GL
+extern GLuint ubo;
GLuint initHDR();
+void setUniforms(GLint shader);
+void deleteUniforms();
+#endif
+
projection camera(bool user=true);
void glrender(const string& prefix, const camp::picture* pic,
const string& format, double width, double height, double angle,
double zoom, const camp::triple& m, const camp::triple& M,
- const camp::pair& shift, double *t, double *background,
- size_t nlights, camp::triple *lights, double *diffuse,
- double *specular, bool view, int oldpid=0);
+ const camp::pair& shift, const camp::pair& margin, double *t,
+ double *background, size_t nlights, camp::triple *lights,
+ double *diffuse, double *specular, bool view, int oldpid=0);
-struct ModelView {
- double T[16];
- double Tinv[16];
-};
-
-extern ModelView modelView;
+extern const double *dprojView;
void initshader();
void deleteshader();
+extern double BBT[9];
+
}
namespace camp {
-struct billboard
-{
+struct Billboard {
double cx,cy,cz;
- triple u,v,w;
void init(const triple& center) {
cx=center.getx();
cy=center.gety();
cz=center.getz();
- gl::projection P=gl::camera(false);
- w=unit(P.camera-P.target);
- v=unit(perp(P.up,w));
- u=cross(v,w);
}
- triple transform(const triple& V) {
- double x=V.getx()-cx;
- double y=V.gety()-cy;
- double z=V.getz()-cz;
+ triple transform(const triple& v) const {
+ double x=v.getx()-cx;
+ double y=v.gety()-cy;
+ double z=v.getz()-cz;
- return triple(cx+u.getx()*x+v.getx()*y+w.getx()*z,
- cy+u.gety()*x+v.gety()*y+w.gety()*z,
- cz+u.getz()*x+v.getz()*y+w.getz()*z);
+ return triple(x*gl::BBT[0]+y*gl::BBT[3]+z*gl::BBT[6]+cx,
+ x*gl::BBT[1]+y*gl::BBT[4]+z*gl::BBT[7]+cy,
+ x*gl::BBT[2]+y*gl::BBT[5]+z*gl::BBT[8]+cz);
}
-
- void store(GLfloat* C, const triple& V) {
- double x=V.getx()-cx;
- double y=V.gety()-cy;
- double z=V.getz()-cz;
- C[0]=cx+u.getx()*x+v.getx()*y+w.getx()*z;
- C[1]=cy+u.gety()*x+v.gety()*y+w.gety()*z;
- C[2]=cz+u.getz()*x+v.getz()*y+w.getz()*z;
+};
+
+extern Billboard BB;
+
+#ifdef HAVE_LIBGLM
+typedef mem::map<CONST Material,size_t> MaterialMap;
+
+extern mem::vector<Material> material;
+extern MaterialMap materialMap;
+extern size_t materialIndex;
+extern int MaterialIndex;
+#endif
+
+#ifdef HAVE_GL
+
+extern const size_t Nbuffer; // Initial size of 2D dynamic buffers
+extern const size_t nbuffer; // Initial size of 0D & 1D dynamic buffers
+
+class vertexData
+{
+public:
+ GLfloat position[3];
+ GLfloat normal[3];
+ GLint material;
+ vertexData() {};
+ vertexData(const triple& v, const triple& n) {
+ position[0]=v.getx();
+ position[1]=v.gety();
+ position[2]=v.getz();
+ normal[0]=n.getx();
+ normal[1]=n.gety();
+ normal[2]=n.getz();
+ material=MaterialIndex;
}
};
-extern billboard BB;
+class VertexData
+{
+public:
+ GLfloat position[3];
+ GLfloat normal[3];
+ GLint material;
+ GLubyte color[4];
+ VertexData() {};
+ VertexData(const triple& v, const triple& n) {
+ position[0]=v.getx();
+ position[1]=v.gety();
+ position[2]=v.getz();
+ normal[0]=n.getx();
+ normal[1]=n.gety();
+ normal[2]=n.getz();
+ material=MaterialIndex;
+ }
+ VertexData(const triple& v, const triple& n, GLfloat *c) {
+ position[0]=v.getx();
+ position[1]=v.gety();
+ position[2]=v.getz();
+ normal[0]=n.getx();
+ normal[1]=n.gety();
+ normal[2]=n.getz();
+ material=MaterialIndex;
+ color[0]=(int)(bytescale*c[0]);
+ color[1]=(int)(bytescale*c[1]);
+ color[2]=(int)(bytescale*c[2]);
+ color[3]=(int)(bytescale*c[3]);
+ }
+};
+class vertexData1 {
+public:
+ GLfloat position[3];
+ GLint material;
+ vertexData1() {};
+ vertexData1(const triple& v) {
+ position[0]=v.getx();
+ position[1]=v.gety();
+ position[2]=v.getz();
+ material=MaterialIndex;
+ }
+};
+
+class vertexData0 {
+public:
+ GLfloat position[3];
+ GLfloat width;
+ GLint material;
+ vertexData0() {};
+ vertexData0(const triple& v, double width) : width(width) {
+ position[0]=v.getx();
+ position[1]=v.gety();
+ position[2]=v.getz();
+ material=MaterialIndex;
+ }
+};
+
+class vertexBuffer {
+public:
+ std::vector<vertexData> vertices;
+ std::vector<VertexData> Vertices;
+ std::vector<vertexData1> vertices1;
+ std::vector<vertexData0> vertices0;
+ std::vector<GLuint> indices;
+ void clear() {
+ vertices.clear();
+ Vertices.clear();
+ vertices1.clear();
+ vertices0.clear();
+ indices.clear();
+ vertices.reserve(Nbuffer);
+ Vertices.reserve(Nbuffer);
+ vertices1.reserve(nbuffer);
+ vertices0.reserve(nbuffer);
+ indices.reserve(Nbuffer);
+ }
+
+// Store the vertex v and its normal vector n.
+ GLuint vertex(const triple &v, const triple& n) {
+ size_t nvertices=vertices.size();
+ vertices.push_back(vertexData(v,n));
+ return nvertices;
+ }
+
+// Store the vertex v and its normal vector n, without an explicit color.
+ GLuint tvertex(const triple &v, const triple& n) {
+ size_t nvertices=Vertices.size();
+ Vertices.push_back(VertexData(v,n));
+ return nvertices;
+ }
+
+// Store the vertex v, its normal vector n, and colors c.
+ GLuint Vertex(const triple &v, const triple& n, GLfloat *c) {
+ size_t nvertices=Vertices.size();
+ Vertices.push_back(VertexData(v,n,c));
+ return nvertices;
+ }
+
+// Store the vertex v.
+ GLuint vertex1(const triple &v) {
+ size_t nvertices=vertices1.size();
+ vertices1.push_back(vertexData1(v));
+ return nvertices;
+ }
+
+// Store the pixel v and its width.
+ GLuint vertex0(const triple &v, double width) {
+ size_t nvertices=vertices0.size();
+ vertices0.push_back(vertexData0(v,width));
+ return nvertices;
+ }
+
+ // append array b onto array a with offset
+ void appendOffset(std::vector<GLuint>& a,
+ const std::vector<GLuint>& b, size_t offset) {
+ size_t n=a.size();
+ size_t m=b.size();
+ a.resize(n+m);
+ for(size_t i=0; i < m; ++i)
+ a[n+i]=b[i]+offset;
+ }
+
+ // append array b onto array a
+ void append(const vertexBuffer& b) {
+ appendOffset(indices,b.indices,vertices.size());
+ vertices.insert(vertices.end(),b.vertices.begin(),b.vertices.end());
+ }
+
+ void Append(const vertexBuffer& b) {
+ appendOffset(indices,b.indices,Vertices.size());
+ Vertices.insert(Vertices.end(),b.Vertices.begin(),b.Vertices.end());
+ }
+
+ void append1(const vertexBuffer& b) {
+ appendOffset(indices,b.indices,vertices1.size());
+ vertices1.insert(vertices1.end(),b.vertices1.begin(),b.vertices1.end());
+ }
+
+ void append0(const vertexBuffer& b) {
+ appendOffset(indices,b.indices,vertices0.size());
+ vertices0.insert(vertices0.end(),b.vertices0.begin(),b.vertices0.end());
+ }
+
+};
+
+extern GLint pixelShader;
+extern GLint noNormalShader;
extern GLint materialShader;
extern GLint colorShader;
-extern GLint noNormalShader;
-extern GLint pixelShader;
+extern GLint transparentShader;
-void setUniforms(GLint shader);
-void deleteUniforms();
+extern vertexBuffer material0Data; // pixels
+extern vertexBuffer material1Data; // material Bezier curves
+extern vertexBuffer materialData; // material Bezier patches & triangles
+extern vertexBuffer colorData; // colored Bezier patches & triangles
+extern vertexBuffer transparentData; // transparent patches & triangles
+extern vertexBuffer triangleData; // opaque indexed triangles
-}
+extern void drawBuffer(vertexBuffer& data, GLint shader);
+extern void drawBuffers();
+extern void clearBuffers();
+extern void clearMaterialBuffer(bool draw=false);
-#else
-typedef float GLfloat;
#endif
+}
+
#endif
diff --git a/graphics/asymptote/jsfile.cc b/graphics/asymptote/jsfile.cc
new file mode 100644
index 0000000000..f838ce14c5
--- /dev/null
+++ b/graphics/asymptote/jsfile.cc
@@ -0,0 +1,218 @@
+#include "jsfile.h"
+
+#include "settings.h"
+#include "glrender.h"
+#include "drawelement.h"
+
+#ifdef HAVE_LIBGLM
+
+using namespace settings;
+
+namespace camp {
+
+void jsfile::copy(string name) {
+ std::ifstream fin(locateFile(name).c_str());
+ string s;
+ while(getline(fin,s))
+ out << s << newl;
+}
+
+void jsfile::open(string name) {
+ out.open(name);
+ out << "<!DOCTYPE html>" << newl << newl;
+
+ bool absolute=getSetting<bool>("absolute");
+ if(!absolute)
+ out << "<!-- Use the following line to include this file within another web page:" << newl
+ << newl
+ << "<object data=\"" << name <<"\" style=\"width:"
+ << gl::fullWidth << ";height:" << gl::fullHeight
+ << ";position:relative;top:0;left:0;\"></object>" << newl << newl
+ << "-->" << newl << newl;
+
+ out.precision(getSetting<Int>("digits"));
+ copy(locateFile(WebGLheader));
+
+ if(getSetting<bool>("offline")) {
+ out << "<script>" << newl;
+ copy(locateFile(AsyGL));
+ out << "</script>" << newl;
+ } else {
+ out << "<script type=\"text/javascript\"" << newl << "src=\""
+ << getSetting<string>("asygl") << "\"></script>" << newl;
+ }
+ out << "<script type=\"text/javascript\">" << newl;
+ out << newl
+ << "canvasWidth=" << gl::fullWidth << ";" << newl
+ << "canvasHeight=" << gl::fullHeight << ";" << newl
+ << "absolute=" << std::boolalpha << absolute << ";" << newl
+ << newl
+ << "b=[" << gl::xmin << "," << gl::ymin << "," << gl::zmin << "];"
+ << newl
+ << "B=[" << gl::xmax << "," << gl::ymax << "," << gl::zmax << "];"
+ << newl
+ << "orthographic=" << gl::orthographic << ";"
+ << newl
+ << "angle=" << gl::Angle << ";"
+ << newl
+ << "Zoom0=" << gl::Zoom0 << ";" << newl
+ << "zoomFactor=" << getSetting<double>("zoomfactor") << ";" << newl
+ << "zoomPinchFactor=" << getSetting<double>("zoomPinchFactor") << ";"
+ << newl
+ << "zoomPinchCap=" << getSetting<double>("zoomPinchCap") << ";" << newl
+ << "zoomStep=" << getSetting<double>("zoomstep") << ";" << newl
+ << "shiftHoldDistance=" << getSetting<double>("shiftHoldDistance") << ";"
+ << newl
+ << "shiftWaitTime=" << getSetting<double>("shiftWaitTime") << ";"
+ << newl
+ << "vibrateTime=" << getSetting<double>("vibrateTime") << ";"
+ << newl
+ << "viewportmargin=" << gl::Margin << ";" << newl << newl
+ << "Lights=[";
+ for(size_t i=0; i < gl::nlights; ++i) {
+ size_t i4=4*i;
+ out << "new Light(" << newl
+ << "direction=" << gl::Lights[i] << "," << newl
+ << "color=[" << gl::Diffuse[i4] << "," << gl::Diffuse[i4+1]
+ << "," << gl::Diffuse[i4+2] << "])," << newl;
+ }
+ out << "];" << newl << newl;
+ size_t nmaterials=material.size();
+ out << "Materials=[";
+ for(size_t i=0; i < nmaterials; ++i)
+ out << "new Material(" << newl
+ << material[i]
+ << ")," << newl;
+ out << "];" << newl << newl;
+}
+
+jsfile::~jsfile() {
+ size_t ncenters=drawElement::center.size();
+ if(ncenters > 0) {
+ out << "Centers=[";
+ for(size_t i=0; i < ncenters; ++i)
+ out << newl << drawElement::center[i] << ",";
+ out << newl << "];" << newl;
+ }
+ copy(locateFile(WebGLfooter));
+}
+
+void jsfile::addColor(const prc::RGBAColour& c)
+{
+ out << "[" << byte(c.R) << "," << byte(c.G) << "," << byte(c.B)
+ << "," << byte(c.A) << "]";
+}
+
+void jsfile::addIndices(const uint32_t *I)
+{
+ out << "[" << I[0] << "," << I[1] << "," << I[2] << "]";
+}
+
+bool distinct(const uint32_t *I, const uint32_t *J)
+{
+ return I[0] != J[0] || I[1] != J[1] || I[2] != J[2];
+}
+
+void jsfile::addPatch(triple const* controls, size_t n,
+ const triple& Min, const triple& Max,
+ const prc::RGBAColour *c)
+{
+ out << "P.push(new BezierPatch([" << newl;
+ size_t last=n-1;
+ for(size_t i=0; i < last; ++i)
+ out << controls[i] << "," << newl;
+ out << controls[last] << newl << "],"
+ << drawElement::centerIndex << "," << materialIndex << ","
+ << Min << "," << Max;
+ if(c) {
+ out << ",[" << newl;
+ for(int i=0; i < 4; ++i) {
+ addColor(c[i]);
+ out << "," << newl;
+ }
+ out << "]";
+ }
+ out << "));" << newl << newl;
+}
+
+void jsfile::addCurve(const triple& z0, const triple& c0,
+ const triple& c1, const triple& z1,
+ const triple& Min, const triple& Max)
+{
+ out << "P.push(new BezierCurve([" << newl;
+ out << z0 << "," << newl
+ << c0 << "," << newl
+ << c1 << "," << newl
+ << z1 << newl << "],"
+ << drawElement::centerIndex << "," << materialIndex << ","
+ << Min << "," << Max << "));" << newl << newl;
+}
+
+void jsfile::addCurve(const triple& z0, const triple& z1,
+ const triple& Min, const triple& Max)
+{
+ out << "P.push(new BezierCurve([" << newl;
+ out << z0 << "," << newl
+ << z1 << newl << "],"
+ << drawElement::centerIndex << "," << materialIndex << ","
+ << Min << "," << Max << "));" << newl << newl;
+}
+
+void jsfile::addPixel(const triple& z0, double width,
+ const triple& Min, const triple& Max)
+{
+ out << "P.push(new Pixel(" << newl;
+ out << z0 << "," << width << "," << newl
+ << materialIndex << "," << Min << "," << Max << "));" << newl << newl;
+}
+
+void jsfile::addMaterial(size_t index)
+{
+ out << "Materials.push(new Material(" << newl
+ << material[index]
+ << "));" << newl << newl;
+}
+
+void jsfile::addTriangles(size_t nP, const triple* P, size_t nN,
+ const triple* N, size_t nC, const prc::RGBAColour* C,
+ size_t nI, const uint32_t (*PI)[3],
+ const uint32_t (*NI)[3], const uint32_t (*CI)[3],
+ const triple& Min, const triple& Max)
+{
+ for(size_t i=0; i < nP; ++i)
+ out << "Positions.push(" << P[i] << ");" << newl;
+
+ for(size_t i=0; i < nN; ++i)
+ out << "Normals.push(" << N[i] << ");" << newl;
+
+ for(size_t i=0; i < nC; ++i) {
+ out << "Colors.push(";
+ addColor(C[i]);
+ out << ");" << newl;
+ }
+
+ for(size_t i=0; i < nI; ++i) {
+ out << "Indices.push([";
+ const uint32_t *PIi=PI[i];
+ const uint32_t *NIi=NI[i];
+ bool keepNI=distinct(NIi,PIi);
+ bool keepCI=nC && distinct(CI[i],PIi);
+ addIndices(PIi);
+ if(keepNI || keepCI) {
+ out << ",";
+ if(keepNI) addIndices(NIi);
+ }
+ if(keepCI) {
+ out << ",";
+ addIndices(CI[i]);
+ }
+ out << "]);" << newl;
+ }
+ out << "P.push(new Triangles("
+ << materialIndex << "," << newl
+ << Min << "," << Max << "));" << newl;
+ out << newl;
+}
+
+}
+#endif
diff --git a/graphics/asymptote/jsfile.h b/graphics/asymptote/jsfile.h
new file mode 100644
index 0000000000..883cb4a70f
--- /dev/null
+++ b/graphics/asymptote/jsfile.h
@@ -0,0 +1,55 @@
+#ifndef JSFILE_H
+#define JSFILE_H
+
+#include <fstream>
+#include <glm/glm.hpp>
+
+#include "common.h"
+#include "triple.h"
+#include "locate.h"
+#include "prcfile.h"
+
+namespace gl {
+extern glm::mat4 projViewMat;
+}
+
+namespace camp {
+
+class jsfile {
+ jsofstream out;
+
+public:
+ jsfile() {}
+ ~jsfile();
+
+ void open(string name);
+ void copy(string name);
+
+ void addColor(const prc::RGBAColour& c);
+ void addIndices(const uint32_t *I);
+
+ void addPatch(const triple* controls, size_t n, const triple& Min,
+ const triple& Max, const prc::RGBAColour *colors);
+
+ void addCurve(const triple& z0, const triple& c0,
+ const triple& c1, const triple& z1,
+ const triple& Min, const triple& Max);
+
+ void addCurve(const triple& z0, const triple& z1,
+ const triple& Min, const triple& Max);
+
+ void addPixel(const triple& z0, double width,
+ const triple& Min, const triple& Max);
+
+ void addMaterial(size_t index);
+
+ void addTriangles(size_t nP, const triple* P, size_t nN, const triple* N,
+ size_t nC, const prc::RGBAColour* C, size_t nI,
+ const uint32_t (*PI)[3], const uint32_t (*NI)[3],
+ const uint32_t (*CI)[3],
+ const triple& Min, const triple& Max);
+};
+
+} //namespace camp
+
+#endif
diff --git a/graphics/asymptote/main.cc b/graphics/asymptote/main.cc
index 486e84ef78..46af145910 100644
--- a/graphics/asymptote/main.cc
+++ b/graphics/asymptote/main.cc
@@ -72,7 +72,7 @@ int sigsegv_handler (void *, int emergency)
{
if(!emergency) return 0; // Really a stack overflow
em.runtime(vm::getPos());
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
if(gl::glthread)
cerr << "Stack overflow or segmentation fault: rerun with -nothreads"
<< endl;
@@ -177,7 +177,7 @@ void *asymain(void *A)
int status;
while(wait(&status) > 0);
}
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
#ifdef HAVE_PTHREAD
if(gl::glthread && !getSetting<bool>("offscreen")) {
pthread_kill(gl::mainthread,SIGURG);
@@ -208,7 +208,7 @@ int main(int argc, char *argv[])
}
Args args(argc,argv);
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
#ifdef __APPLE__
bool usethreads=true;
#else
diff --git a/graphics/asymptote/material.h b/graphics/asymptote/material.h
index 4a07229046..d6a6084ae5 100644
--- a/graphics/asymptote/material.h
+++ b/graphics/asymptote/material.h
@@ -1,6 +1,13 @@
-#ifndef MATERIAL_STRUCT
-#define MATERIAL_STRUCT
-#ifdef HAVE_GL
+#ifndef MATERIAL_H
+#define MATERIAL_H
+
+#ifdef HAVE_LIBGLM
+
+#include <iostream>
+#include <fstream>
+
+#include "common.h"
+#include "triple.h"
#include <glm/glm.hpp>
@@ -21,6 +28,13 @@ inline glm::vec4 GLparameters(GLfloat shininess, GLfloat metallic,
return glm::vec4(shininess,metallic,fresnel0,0.0);
}
+inline ostream& operator << (ostream& out, const glm::vec4& v)
+{
+ out << "[" << v[0] << "," << v[1] << "," << v[2] << "," << v[3]
+ << "]";
+ return out;
+}
+
struct Material {
public:
glm::vec4 diffuse,emissive,specular;
@@ -45,6 +59,7 @@ public:
parameters=m.parameters;
return *this;
}
+
friend bool operator < (const Material& m1, const Material& m2) {
return m1.diffuse < m2.diffuse ||
(m1.diffuse == m2.diffuse &&
@@ -54,13 +69,23 @@ public:
(m1.specular == m2.specular &&
(m1.parameters < m2.parameters))))));
}
+
+ friend ostream& operator << (ostream& out, const Material& m) {
+ out << "diffuse=" << m.diffuse << "," << newl
+ << "emissive=" << m.emissive << "," << newl
+ << "specular=" << m.specular << "," << newl
+ << "shininess=" << m.parameters[0] << "," << newl
+ << "metallic=" << m.parameters[1] << "," << newl
+ << "fresnel0=" << m.parameters[2] << newl;
+ return out;
+ }
+
};
extern size_t Nmaterials; // Number of materials compiled in shader
extern size_t nmaterials; // Current size of materials buffer
extern size_t Maxmaterials; // Maxinum size of materials buffer
-void clearMaterialBuffer(bool draw=false);
-
}
+
#endif
#endif
diff --git a/graphics/asymptote/pair.h b/graphics/asymptote/pair.h
index 4a2ca09d68..c474600326 100644
--- a/graphics/asymptote/pair.h
+++ b/graphics/asymptote/pair.h
@@ -16,12 +16,27 @@
#include <cassert>
#include <cmath>
+#include <iostream>
+#include <fstream>
#include "common.h"
#include "angle.h"
namespace camp {
+class jsofstream : public std::ofstream {
+public:
+ jsofstream() {}
+ jsofstream(const string& name) : std::ofstream(name.c_str()) {}
+ void open(const string& name) {std::ofstream::open(name.c_str());}
+
+ template<class T>
+ jsofstream& operator << (const T& x) {
+ (std::ofstream&)(*this) << x;
+ return *this;
+ }
+};
+
class pair : public gc {
double x;
double y;
@@ -207,6 +222,12 @@ public:
return out;
}
+ friend jsofstream& operator << (jsofstream& out, const pair& z)
+ {
+ out << "[" << z.x << "," << z.y << "]";
+ return out;
+ }
+
friend class box;
};
diff --git a/graphics/asymptote/patches/README b/graphics/asymptote/patches/README
index f7e67aad98..1f1276c383 100644
--- a/graphics/asymptote/patches/README
+++ b/graphics/asymptote/patches/README
@@ -21,3 +21,6 @@ The file fixmem.reg patches the Microsoft Windows registry so that the
cygwin1.dll library can allocate more than 384MB. It is applied
automatically by the Asymptote setup.exe file but may also be applied manually:
regedit /s fixmem.reg
+
+The file gl-matrix-2.4.0-pruned.patch is used to build the required subset of
+the gl-matrix library. \ No newline at end of file
diff --git a/graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch b/graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
new file mode 100644
index 0000000000..20d7b44c01
--- /dev/null
+++ b/graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
@@ -0,0 +1,608 @@
+Only in gl-matrix-2.4.0-pruned: LICENSE.js
+diff -r -u gl-matrix-2.4.0/src/gl-matrix/mat3.js gl-matrix-2.4.0-pruned/src/gl-matrix/mat3.js
+--- gl-matrix-2.4.0/src/gl-matrix/mat3.js 2017-07-22 13:02:47.000000000 -0600
++++ gl-matrix-2.4.0-pruned/src/gl-matrix/mat3.js 2019-09-27 15:41:24.534735384 -0600
+@@ -70,7 +70,7 @@
+ * @param {mat3} a matrix to clone
+ * @returns {mat3} a new 3x3 matrix
+ */
+-export function clone(a) {
++function clone(a) {
+ let out = new glMatrix.ARRAY_TYPE(9);
+ out[0] = a[0];
+ out[1] = a[1];
+@@ -91,7 +91,7 @@
+ * @param {mat3} a the source matrix
+ * @returns {mat3} out
+ */
+-export function copy(out, a) {
++function copy(out, a) {
+ out[0] = a[0];
+ out[1] = a[1];
+ out[2] = a[2];
+@@ -118,7 +118,7 @@
+ * @param {Number} m22 Component in column 2, row 2 position (index 8)
+ * @returns {mat3} A new mat3
+ */
+-export function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {
++function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {
+ let out = new glMatrix.ARRAY_TYPE(9);
+ out[0] = m00;
+ out[1] = m01;
+@@ -147,7 +147,7 @@
+ * @param {Number} m22 Component in column 2, row 2 position (index 8)
+ * @returns {mat3} out
+ */
+-export function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {
++function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {
+ out[0] = m00;
+ out[1] = m01;
+ out[2] = m02;
+@@ -166,7 +166,7 @@
+ * @param {mat3} out the receiving matrix
+ * @returns {mat3} out
+ */
+-export function identity(out) {
++function identity(out) {
+ out[0] = 1;
+ out[1] = 0;
+ out[2] = 0;
+@@ -186,7 +186,7 @@
+ * @param {mat3} a the source matrix
+ * @returns {mat3} out
+ */
+-export function transpose(out, a) {
++function transpose(out, a) {
+ // If we are transposing ourselves we can skip a few steps but have to cache some values
+ if (out === a) {
+ let a01 = a[1], a02 = a[2], a12 = a[5];
+@@ -254,7 +254,7 @@
+ * @param {mat3} a the source matrix
+ * @returns {mat3} out
+ */
+-export function adjoint(out, a) {
++function adjoint(out, a) {
+ let a00 = a[0], a01 = a[1], a02 = a[2];
+ let a10 = a[3], a11 = a[4], a12 = a[5];
+ let a20 = a[6], a21 = a[7], a22 = a[8];
+@@ -277,7 +277,7 @@
+ * @param {mat3} a the source matrix
+ * @returns {Number} determinant of a
+ */
+-export function determinant(a) {
++function determinant(a) {
+ let a00 = a[0], a01 = a[1], a02 = a[2];
+ let a10 = a[3], a11 = a[4], a12 = a[5];
+ let a20 = a[6], a21 = a[7], a22 = a[8];
+@@ -293,7 +293,7 @@
+ * @param {mat3} b the second operand
+ * @returns {mat3} out
+ */
+-export function multiply(out, a, b) {
++function multiply(out, a, b) {
+ let a00 = a[0], a01 = a[1], a02 = a[2];
+ let a10 = a[3], a11 = a[4], a12 = a[5];
+ let a20 = a[6], a21 = a[7], a22 = a[8];
+@@ -324,7 +324,7 @@
+ * @param {vec2} v vector to translate by
+ * @returns {mat3} out
+ */
+-export function translate(out, a, v) {
++function translate(out, a, v) {
+ let a00 = a[0], a01 = a[1], a02 = a[2],
+ a10 = a[3], a11 = a[4], a12 = a[5],
+ a20 = a[6], a21 = a[7], a22 = a[8],
+@@ -352,7 +352,7 @@
+ * @param {Number} rad the angle to rotate the matrix by
+ * @returns {mat3} out
+ */
+-export function rotate(out, a, rad) {
++function rotate(out, a, rad) {
+ let a00 = a[0], a01 = a[1], a02 = a[2],
+ a10 = a[3], a11 = a[4], a12 = a[5],
+ a20 = a[6], a21 = a[7], a22 = a[8],
+@@ -382,7 +382,7 @@
+ * @param {vec2} v the vec2 to scale the matrix by
+ * @returns {mat3} out
+ **/
+-export function scale(out, a, v) {
++function scale(out, a, v) {
+ let x = v[0], y = v[1];
+
+ out[0] = x * a[0];
+@@ -410,7 +410,7 @@
+ * @param {vec2} v Translation vector
+ * @returns {mat3} out
+ */
+-export function fromTranslation(out, v) {
++function fromTranslation(out, v) {
+ out[0] = 1;
+ out[1] = 0;
+ out[2] = 0;
+@@ -434,7 +434,7 @@
+ * @param {Number} rad the angle to rotate the matrix by
+ * @returns {mat3} out
+ */
+-export function fromRotation(out, rad) {
++function fromRotation(out, rad) {
+ let s = Math.sin(rad), c = Math.cos(rad);
+
+ out[0] = c;
+@@ -462,7 +462,7 @@
+ * @param {vec2} v Scaling vector
+ * @returns {mat3} out
+ */
+-export function fromScaling(out, v) {
++function fromScaling(out, v) {
+ out[0] = v[0];
+ out[1] = 0;
+ out[2] = 0;
+@@ -484,7 +484,7 @@
+ * @param {mat2d} a the matrix to copy
+ * @returns {mat3} out
+ **/
+-export function fromMat2d(out, a) {
++function fromMat2d(out, a) {
+ out[0] = a[0];
+ out[1] = a[1];
+ out[2] = 0;
+@@ -507,7 +507,7 @@
+ *
+ * @returns {mat3} out
+ */
+-export function fromQuat(out, q) {
++function fromQuat(out, q) {
+ let x = q[0], y = q[1], z = q[2], w = q[3];
+ let x2 = x + x;
+ let y2 = y + y;
+@@ -546,7 +546,7 @@
+ *
+ * @returns {mat3} out
+ */
+-export function normalFromMat4(out, a) {
++function normalFromMat4(out, a) {
+ let a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
+ let a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
+ let a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
+@@ -596,7 +596,7 @@
+ * @param {number} height Height of gl context
+ * @returns {mat3} out
+ */
+-export function projection(out, width, height) {
++function projection(out, width, height) {
+ out[0] = 2 / width;
+ out[1] = 0;
+ out[2] = 0;
+@@ -615,7 +615,7 @@
+ * @param {mat3} a matrix to represent as a string
+ * @returns {String} string representation of the matrix
+ */
+-export function str(a) {
++function str(a) {
+ return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' +
+ a[3] + ', ' + a[4] + ', ' + a[5] + ', ' +
+ a[6] + ', ' + a[7] + ', ' + a[8] + ')';
+@@ -627,7 +627,7 @@
+ * @param {mat3} a the matrix to calculate Frobenius norm of
+ * @returns {Number} Frobenius norm
+ */
+-export function frob(a) {
++function frob(a) {
+ return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2)))
+ }
+
+@@ -639,7 +639,7 @@
+ * @param {mat3} b the second operand
+ * @returns {mat3} out
+ */
+-export function add(out, a, b) {
++function add(out, a, b) {
+ out[0] = a[0] + b[0];
+ out[1] = a[1] + b[1];
+ out[2] = a[2] + b[2];
+@@ -660,7 +660,7 @@
+ * @param {mat3} b the second operand
+ * @returns {mat3} out
+ */
+-export function subtract(out, a, b) {
++function subtract(out, a, b) {
+ out[0] = a[0] - b[0];
+ out[1] = a[1] - b[1];
+ out[2] = a[2] - b[2];
+@@ -683,7 +683,7 @@
+ * @param {Number} b amount to scale the matrix's elements by
+ * @returns {mat3} out
+ */
+-export function multiplyScalar(out, a, b) {
++function multiplyScalar(out, a, b) {
+ out[0] = a[0] * b;
+ out[1] = a[1] * b;
+ out[2] = a[2] * b;
+@@ -705,7 +705,7 @@
+ * @param {Number} scale the amount to scale b's elements by before adding
+ * @returns {mat3} out
+ */
+-export function multiplyScalarAndAdd(out, a, b, scale) {
++function multiplyScalarAndAdd(out, a, b, scale) {
+ out[0] = a[0] + (b[0] * scale);
+ out[1] = a[1] + (b[1] * scale);
+ out[2] = a[2] + (b[2] * scale);
+@@ -725,7 +725,7 @@
+ * @param {mat3} b The second matrix.
+ * @returns {Boolean} True if the matrices are equal, false otherwise.
+ */
+-export function exactEquals(a, b) {
++function exactEquals(a, b) {
+ return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] &&
+ a[3] === b[3] && a[4] === b[4] && a[5] === b[5] &&
+ a[6] === b[6] && a[7] === b[7] && a[8] === b[8];
+@@ -738,7 +738,7 @@
+ * @param {mat3} b The second matrix.
+ * @returns {Boolean} True if the matrices are equal, false otherwise.
+ */
+-export function equals(a, b) {
++function equals(a, b) {
+ let a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5], a6 = a[6], a7 = a[7], a8 = a[8];
+ let b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7], b8 = b[8];
+ return (Math.abs(a0 - b0) <= glMatrix.EPSILON*Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&
+@@ -756,10 +756,10 @@
+ * Alias for {@link mat3.multiply}
+ * @function
+ */
+-export const mul = multiply;
++const mul = multiply;
+
+ /**
+ * Alias for {@link mat3.subtract}
+ * @function
+ */
+-export const sub = subtract;
++const sub = subtract;
+diff -r -u gl-matrix-2.4.0/src/gl-matrix/mat4.js gl-matrix-2.4.0-pruned/src/gl-matrix/mat4.js
+--- gl-matrix-2.4.0/src/gl-matrix/mat4.js 2017-07-22 13:02:47.000000000 -0600
++++ gl-matrix-2.4.0-pruned/src/gl-matrix/mat4.js 2019-09-27 15:41:24.534735384 -0600
+@@ -57,7 +57,7 @@
+ * @param {mat4} a matrix to clone
+ * @returns {mat4} a new 4x4 matrix
+ */
+-export function clone(a) {
++function clone(a) {
+ let out = new glMatrix.ARRAY_TYPE(16);
+ out[0] = a[0];
+ out[1] = a[1];
+@@ -85,7 +85,7 @@
+ * @param {mat4} a the source matrix
+ * @returns {mat4} out
+ */
+-export function copy(out, a) {
++function copy(out, a) {
+ out[0] = a[0];
+ out[1] = a[1];
+ out[2] = a[2];
+@@ -126,7 +126,7 @@
+ * @param {Number} m33 Component in column 3, row 3 position (index 15)
+ * @returns {mat4} A new mat4
+ */
+-export function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
++function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
+ let out = new glMatrix.ARRAY_TYPE(16);
+ out[0] = m00;
+ out[1] = m01;
+@@ -169,7 +169,7 @@
+ * @param {Number} m33 Component in column 3, row 3 position (index 15)
+ * @returns {mat4} out
+ */
+-export function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
++function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
+ out[0] = m00;
+ out[1] = m01;
+ out[2] = m02;
+@@ -223,7 +223,7 @@
+ * @param {mat4} a the source matrix
+ * @returns {mat4} out
+ */
+-export function transpose(out, a) {
++function transpose(out, a) {
+ // If we are transposing ourselves we can skip a few steps but have to cache some values
+ if (out === a) {
+ let a01 = a[1], a02 = a[2], a03 = a[3];
+@@ -325,7 +325,7 @@
+ * @param {mat4} a the source matrix
+ * @returns {mat4} out
+ */
+-export function adjoint(out, a) {
++function adjoint(out, a) {
+ let a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
+ let a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
+ let a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
+@@ -356,7 +356,7 @@
+ * @param {mat4} a the source matrix
+ * @returns {Number} determinant of a
+ */
+-export function determinant(a) {
++function determinant(a) {
+ let a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
+ let a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
+ let a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
+@@ -465,7 +465,7 @@
+ * @param {vec3} v the vec3 to scale the matrix by
+ * @returns {mat4} out
+ **/
+-export function scale(out, a, v) {
++function scale(out, a, v) {
+ let x = v[0], y = v[1], z = v[2];
+
+ out[0] = a[0] * x;
+@@ -558,7 +558,7 @@
+ * @param {Number} rad the angle to rotate the matrix by
+ * @returns {mat4} out
+ */
+-export function rotateX(out, a, rad) {
++function rotateX(out, a, rad) {
+ let s = Math.sin(rad);
+ let c = Math.cos(rad);
+ let a10 = a[4];
+@@ -601,7 +601,7 @@
+ * @param {Number} rad the angle to rotate the matrix by
+ * @returns {mat4} out
+ */
+-export function rotateY(out, a, rad) {
++function rotateY(out, a, rad) {
+ let s = Math.sin(rad);
+ let c = Math.cos(rad);
+ let a00 = a[0];
+@@ -644,7 +644,7 @@
+ * @param {Number} rad the angle to rotate the matrix by
+ * @returns {mat4} out
+ */
+-export function rotateZ(out, a, rad) {
++function rotateZ(out, a, rad) {
+ let s = Math.sin(rad);
+ let c = Math.cos(rad);
+ let a00 = a[0];
+@@ -721,7 +721,7 @@
+ * @param {vec3} v Scaling vector
+ * @returns {mat4} out
+ */
+-export function fromScaling(out, v) {
++function fromScaling(out, v) {
+ out[0] = v[0];
+ out[1] = 0;
+ out[2] = 0;
+@@ -800,7 +800,7 @@
+ * @param {Number} rad the angle to rotate the matrix by
+ * @returns {mat4} out
+ */
+-export function fromXRotation(out, rad) {
++function fromXRotation(out, rad) {
+ let s = Math.sin(rad);
+ let c = Math.cos(rad);
+
+@@ -835,7 +835,7 @@
+ * @param {Number} rad the angle to rotate the matrix by
+ * @returns {mat4} out
+ */
+-export function fromYRotation(out, rad) {
++function fromYRotation(out, rad) {
+ let s = Math.sin(rad);
+ let c = Math.cos(rad);
+
+@@ -870,7 +870,7 @@
+ * @param {Number} rad the angle to rotate the matrix by
+ * @returns {mat4} out
+ */
+-export function fromZRotation(out, rad) {
++function fromZRotation(out, rad) {
+ let s = Math.sin(rad);
+ let c = Math.cos(rad);
+
+@@ -909,7 +909,7 @@
+ * @param {vec3} v Translation vector
+ * @returns {mat4} out
+ */
+-export function fromRotationTranslation(out, q, v) {
++function fromRotationTranslation(out, q, v) {
+ // Quaternion math
+ let x = q[0], y = q[1], z = q[2], w = q[3];
+ let x2 = x + x;
+@@ -955,7 +955,7 @@
+ * @param {mat4} mat Matrix to be decomposed (input)
+ * @return {vec3} out
+ */
+-export function getTranslation(out, mat) {
++function getTranslation(out, mat) {
+ out[0] = mat[12];
+ out[1] = mat[13];
+ out[2] = mat[14];
+@@ -973,7 +973,7 @@
+ * @param {mat4} mat Matrix to be decomposed (input)
+ * @return {vec3} out
+ */
+-export function getScaling(out, mat) {
++function getScaling(out, mat) {
+ let m11 = mat[0];
+ let m12 = mat[1];
+ let m13 = mat[2];
+@@ -1000,7 +1000,7 @@
+ * @param {mat4} mat Matrix to be decomposed (input)
+ * @return {quat} out
+ */
+-export function getRotation(out, mat) {
++function getRotation(out, mat) {
+ // Algorithm taken from http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
+ let trace = mat[0] + mat[5] + mat[10];
+ let S = 0;
+@@ -1051,7 +1051,7 @@
+ * @param {vec3} s Scaling vector
+ * @returns {mat4} out
+ */
+-export function fromRotationTranslationScale(out, q, v, s) {
++function fromRotationTranslationScale(out, q, v, s) {
+ // Quaternion math
+ let x = q[0], y = q[1], z = q[2], w = q[3];
+ let x2 = x + x;
+@@ -1111,7 +1111,7 @@
+ * @param {vec3} o The origin vector around which to scale and rotate
+ * @returns {mat4} out
+ */
+-export function fromRotationTranslationScaleOrigin(out, q, v, s, o) {
++function fromRotationTranslationScaleOrigin(out, q, v, s, o) {
+ // Quaternion math
+ let x = q[0], y = q[1], z = q[2], w = q[3];
+ let x2 = x + x;
+@@ -1164,7 +1164,7 @@
+ *
+ * @returns {mat4} out
+ */
+-export function fromQuat(out, q) {
++function fromQuat(out, q) {
+ let x = q[0], y = q[1], z = q[2], w = q[3];
+ let x2 = x + x;
+ let y2 = y + y;
+@@ -1248,7 +1248,7 @@
+ * @param {number} far Far bound of the frustum
+ * @returns {mat4} out
+ */
+-export function perspective(out, fovy, aspect, near, far) {
++function perspective(out, fovy, aspect, near, far) {
+ let f = 1.0 / Math.tan(fovy / 2);
+ let nf = 1 / (near - far);
+ out[0] = f / aspect;
+@@ -1281,7 +1281,7 @@
+ * @param {number} far Far bound of the frustum
+ * @returns {mat4} out
+ */
+-export function perspectiveFromFieldOfView(out, fov, near, far) {
++function perspectiveFromFieldOfView(out, fov, near, far) {
+ let upTan = Math.tan(fov.upDegrees * Math.PI/180.0);
+ let downTan = Math.tan(fov.downDegrees * Math.PI/180.0);
+ let leftTan = Math.tan(fov.leftDegrees * Math.PI/180.0);
+@@ -1352,7 +1352,7 @@
+ * @param {vec3} up vec3 pointing up
+ * @returns {mat4} out
+ */
+-export function lookAt(out, eye, center, up) {
++function lookAt(out, eye, center, up) {
+ let x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
+ let eyex = eye[0];
+ let eyey = eye[1];
+@@ -1439,7 +1439,7 @@
+ * @param {vec3} up vec3 pointing up
+ * @returns {mat4} out
+ */
+-export function targetTo(out, eye, target, up) {
++function targetTo(out, eye, target, up) {
+ let eyex = eye[0],
+ eyey = eye[1],
+ eyez = eye[2],
+@@ -1488,7 +1488,7 @@
+ * @param {mat4} a matrix to represent as a string
+ * @returns {String} string representation of the matrix
+ */
+-export function str(a) {
++function str(a) {
+ return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' +
+ a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' +
+ a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' +
+@@ -1501,7 +1501,7 @@
+ * @param {mat4} a the matrix to calculate Frobenius norm of
+ * @returns {Number} Frobenius norm
+ */
+-export function frob(a) {
++function frob(a) {
+ return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2) ))
+ }
+
+@@ -1513,7 +1513,7 @@
+ * @param {mat4} b the second operand
+ * @returns {mat4} out
+ */
+-export function add(out, a, b) {
++function add(out, a, b) {
+ out[0] = a[0] + b[0];
+ out[1] = a[1] + b[1];
+ out[2] = a[2] + b[2];
+@@ -1541,7 +1541,7 @@
+ * @param {mat4} b the second operand
+ * @returns {mat4} out
+ */
+-export function subtract(out, a, b) {
++function subtract(out, a, b) {
+ out[0] = a[0] - b[0];
+ out[1] = a[1] - b[1];
+ out[2] = a[2] - b[2];
+@@ -1569,7 +1569,7 @@
+ * @param {Number} b amount to scale the matrix's elements by
+ * @returns {mat4} out
+ */
+-export function multiplyScalar(out, a, b) {
++function multiplyScalar(out, a, b) {
+ out[0] = a[0] * b;
+ out[1] = a[1] * b;
+ out[2] = a[2] * b;
+@@ -1598,7 +1598,7 @@
+ * @param {Number} scale the amount to scale b's elements by before adding
+ * @returns {mat4} out
+ */
+-export function multiplyScalarAndAdd(out, a, b, scale) {
++function multiplyScalarAndAdd(out, a, b, scale) {
+ out[0] = a[0] + (b[0] * scale);
+ out[1] = a[1] + (b[1] * scale);
+ out[2] = a[2] + (b[2] * scale);
+@@ -1625,7 +1625,7 @@
+ * @param {mat4} b The second matrix.
+ * @returns {Boolean} True if the matrices are equal, false otherwise.
+ */
+-export function exactEquals(a, b) {
++function exactEquals(a, b) {
+ return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] &&
+ a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] &&
+ a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] &&
+@@ -1639,7 +1639,7 @@
+ * @param {mat4} b The second matrix.
+ * @returns {Boolean} True if the matrices are equal, false otherwise.
+ */
+-export function equals(a, b) {
++function equals(a, b) {
+ let a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];
+ let a4 = a[4], a5 = a[5], a6 = a[6], a7 = a[7];
+ let a8 = a[8], a9 = a[9], a10 = a[10], a11 = a[11];
+@@ -1672,10 +1672,10 @@
+ * Alias for {@link mat4.multiply}
+ * @function
+ */
+-export const mul = multiply;
++const mul = multiply;
+
+ /**
+ * Alias for {@link mat4.subtract}
+ * @function
+ */
+-export const sub = subtract;
++const sub = subtract;
+diff -r -u gl-matrix-2.4.0/src/gl-matrix.js gl-matrix-2.4.0-pruned/src/gl-matrix.js
+--- gl-matrix-2.4.0/src/gl-matrix.js 2017-07-22 13:02:47.000000000 -0600
++++ gl-matrix-2.4.0-pruned/src/gl-matrix.js 2019-09-27 17:04:06.477164503 -0600
+@@ -26,19 +26,9 @@
+ THE SOFTWARE. */
+ // END HEADER
+
+-import * as glMatrix from "./gl-matrix/common";
+-import * as mat2 from "./gl-matrix/mat2";
+-import * as mat2d from "./gl-matrix/mat2d";
+ import * as mat3 from "./gl-matrix/mat3";
+ import * as mat4 from "./gl-matrix/mat4";
+-import * as quat from "./gl-matrix/quat";
+-import * as vec2 from "./gl-matrix/vec2";
+-import * as vec3 from "./gl-matrix/vec3";
+-import * as vec4 from "./gl-matrix/vec4";
+
+ export {
+- glMatrix,
+- mat2, mat2d, mat3, mat4,
+- quat,
+- vec2, vec3, vec4,
+-};
+\ No newline at end of file
++ mat3,mat4
++};
diff --git a/graphics/asymptote/path3.h b/graphics/asymptote/path3.h
index 14ed3dd1ca..35eadbaf8e 100644
--- a/graphics/asymptote/path3.h
+++ b/graphics/asymptote/path3.h
@@ -17,6 +17,10 @@
#include "path.h"
#include "arrayop.h"
+// For CYGWIN
+#undef near
+#undef far
+
namespace camp {
void checkEmpty3(Int n);
@@ -283,13 +287,13 @@ public:
triple mintimes() const {
checkEmpty3(n);
bounds();
- return camp::triple(times.left,times.bottom,times.lower);
+ return camp::triple(times.left,times.bottom,times.near);
}
triple maxtimes() const {
checkEmpty3(n);
bounds();
- return camp::triple(times.right,times.top,times.upper);
+ return camp::triple(times.right,times.top,times.far);
}
template<class T>
diff --git a/graphics/asymptote/pen.h b/graphics/asymptote/pen.h
index 1208f4a60c..d9572eee5c 100644
--- a/graphics/asymptote/pen.h
+++ b/graphics/asymptote/pen.h
@@ -136,14 +136,14 @@ inline bool operator == (const Transparency& a, const Transparency& b) {
extern const char* BlendMode[];
extern const Int nBlendMode;
+const double bytescale=256.0*(1.0-DBL_EPSILON);
+
// Map [0,1] to [0,255]
inline unsigned int byte(double r)
{
if(r < 0.0) r=0.0;
else if(r > 1.0) r=1.0;
- int a=(int)(256.0*r);
- if(a == 256) a=255;
- return a;
+ return (int)(bytescale*r);
}
class pen;
diff --git a/graphics/asymptote/picture.cc b/graphics/asymptote/picture.cc
index c59c28e91b..93e5f6a6eb 100644
--- a/graphics/asymptote/picture.cc
+++ b/graphics/asymptote/picture.cc
@@ -459,17 +459,6 @@ bool picture::texprocess(const string& texname, const string& outname,
cmd.push_back("-o"+outname);
ostringstream buf;
bbox B=svgbbox(b,bboxshift);
- /*
- double height=b.top-b.bottom;
- double threshold=12.0*tex2ps;
- if(height < threshold) {
- double offset=threshold-height;
- b.top += offset;
- b.bottom += offset;
- }
- bbox B=b;
- B.shift(bboxshift+pair(1.99*cm,1.9*cm));
- */
buf << "--bbox="
<< B.left << "bp "
<< B.bottom << "bp "
@@ -746,6 +735,8 @@ bool picture::postprocess(const string& prename, const string& outname,
bool wait, bool view, bool pdftex,
bool epsformat, bool svg)
{
+ if(outputformat == "html")
+ reportError("Use svg instead of html output format for 2D pictures.");
static mem::map<CONST string,int> pids;
int status=0;
bool pdfformat=(settings::pdf(getSetting<string>("tex"))
@@ -1176,23 +1167,16 @@ bool picture::shipout(picture *preamble, const string& Prefix,
// render viewport with width x height pixels.
void picture::render(double size2, const triple& Min, const triple& Max,
- double perspective, bool transparent, bool remesh) const
+ double perspective, bool remesh) const
{
- if(remesh) {
- for(nodelist::const_iterator p=nodes.begin(); p != nodes.end(); ++p) {
- assert(*p);
- (*p)->render(size2,Min,Max,perspective,transparent);
- }
+ for(nodelist::const_iterator p=nodes.begin(); p != nodes.end(); ++p) {
+ assert(*p);
+ if(remesh) (*p)->meshinit();
+ (*p)->render(size2,Min,Max,perspective,remesh);
}
-#ifdef HAVE_GL
- if(transparent)
- drawBezierPatch::S.drawTransparent();
- else {
- drawBezierPatch::S.drawOpaque();
- drawPath3::R.draw();
- drawPixel::R.draw();
- }
+#ifdef HAVE_LIBGL
+ drawBuffers();
#endif
}
@@ -1207,6 +1191,7 @@ struct Communicate : public gc {
triple m;
triple M;
pair shift;
+ pair margin;
double *t;
double *background;
size_t nlights;
@@ -1220,31 +1205,39 @@ Communicate com;
void glrenderWrapper()
{
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
#ifdef HAVE_PTHREAD
wait(initSignal,initLock);
endwait(initSignal,initLock);
#endif
glrender(com.prefix,com.pic,com.format,com.width,com.height,com.angle,
- com.zoom,com.m,com.M,com.shift,com.t,com.background,com.nlights,
- com.lights,com.diffuse,com.specular,com.view);
+ com.zoom,com.m,com.M,com.shift,com.margin,com.t,com.background,
+ com.nlights,com.lights,com.diffuse,com.specular,com.view);
#endif
}
bool picture::shipout3(const string& prefix, const string& format,
double width, double height, double angle, double zoom,
const triple& m, const triple& M, const pair& shift,
- double *t, double *background, size_t nlights,
- triple *lights, double *diffuse, double *specular, bool view)
+ const pair& margin, double *t, double *background,
+ size_t nlights, triple *lights, double *diffuse,
+ double *specular, bool view)
{
if(getSetting<bool>("interrupt"))
return true;
-#ifndef HAVE_LIBGLUT
- if(!getSetting<bool>("offscreen"))
+ bool webgl=format == "html";
+
+#ifndef HAVE_GL
+ if(!webgl && !getSetting<bool>("offscreen"))
camp::reportError("to support onscreen rendering, please install glut library, run ./configure, and recompile");
#endif
+#ifndef HAVE_LIBGLM
+ if(webgl)
+ camp::reportError("to support WebGL rendering, please install glm header files, run ./configure, and recompile");
+#endif
+
#ifndef HAVE_LIBOSMESA
if(getSetting<bool>("offscreen"))
camp::reportError("to support offscreen rendering; please install OSMesa library, run ./configure --enable-offscreen, and recompile");
@@ -1278,71 +1271,106 @@ bool picture::shipout3(const string& prefix, const string& format,
const string outputformat=format.empty() ?
getSetting<string>("outformat") : format;
-#ifdef HAVE_GL
- bool View=settings::view() && view;
+#ifdef HAVE_LIBGLM
static int oldpid=0;
+ bool View=settings::view() && view;
+#endif
+
+#ifdef HAVE_GL
bool offscreen=getSetting<bool>("offscreen");
#ifdef HAVE_PTHREAD
bool animating=getSetting<bool>("animating");
bool Wait=!interact::interactive || !View || animating;
#endif
-#endif
+#endif
-#if defined(HAVE_LIBGLUT) && defined(HAVE_GL)
- if(glthread && !offscreen) {
+ if(!webgl) {
+#ifdef HAVE_GL
+ if(glthread && !offscreen) {
#ifdef HAVE_PTHREAD
- if(gl::initialize) {
- gl::initialize=false;
- com.prefix=prefix;
- com.pic=pic;
- com.format=outputformat;
- com.width=width;
- com.height=height;
- com.angle=angle;
- com.zoom=zoom;
- com.m=m;
- com.M=M;
- com.shift=shift;
- com.t=t;
- com.background=background;
- com.nlights=nlights;
- com.lights=lights;
- com.diffuse=diffuse;
- com.specular=specular;
- com.view=View;
- if(Wait)
- pthread_mutex_lock(&readyLock);
- wait(initSignal,initLock);
- endwait(initSignal,initLock);
- static bool initialize=true;
- if(initialize) {
+ if(gl::initialize) {
+ gl::initialize=false;
+ com.prefix=prefix;
+ com.pic=pic;
+ com.format=outputformat;
+ com.width=width;
+ com.height=height;
+ com.angle=angle;
+ com.zoom=zoom;
+ com.m=m;
+ com.M=M;
+ com.shift=shift;
+ com.margin=margin;
+ com.t=t;
+ com.background=background;
+ com.nlights=nlights;
+ com.lights=lights;
+ com.diffuse=diffuse;
+ com.specular=specular;
+ com.view=View;
+ if(Wait)
+ pthread_mutex_lock(&readyLock);
wait(initSignal,initLock);
endwait(initSignal,initLock);
- initialize=false;
+ static bool initialize=true;
+ if(initialize) {
+ wait(initSignal,initLock);
+ endwait(initSignal,initLock);
+ initialize=false;
+ }
+ if(Wait) {
+ pthread_cond_wait(&readySignal,&readyLock);
+ pthread_mutex_unlock(&readyLock);
+ }
+ return true;
}
- if(Wait) {
- pthread_cond_wait(&readySignal,&readyLock);
- pthread_mutex_unlock(&readyLock);
+ if(Wait)
+ pthread_mutex_lock(&readyLock);
+#endif
+ } else {
+ int pid=fork();
+ if(pid == -1)
+ camp::reportError("Cannot fork process");
+ if(pid != 0) {
+ oldpid=pid;
+ waitpid(pid,NULL,interact::interactive && View ? WNOHANG : 0);
+ return true;
}
- return true;
}
- if(Wait)
- pthread_mutex_lock(&readyLock);
#endif
- } else {
- int pid=fork();
- if(pid == -1)
- camp::reportError("Cannot fork process");
- if(pid != 0) {
- oldpid=pid;
- waitpid(pid,NULL,interact::interactive && View ? WNOHANG : 0);
- return true;
- }
}
+
+#if HAVE_LIBGLM
+ glrender(prefix,pic,outputformat,width,height,angle,zoom,m,M,shift,margin,t,
+ background,nlights,lights,diffuse,specular,View,oldpid);
+
+ if(webgl) {
+ jsfile js;
+ string name=buildname(prefix,format);
+ js.open(name);
+
+ for(nodelist::iterator p=pic->nodes.begin(); p != pic->nodes.end(); ++p) {
+ assert(*p);
+ (*p)->write(&js);
+ }
+ if(verbose > 0)
+ cout << "Wrote " << name << endl;
+ if(View) {
+ mem::vector<string> cmd;
+ push_command(cmd,getSetting<string>("htmlviewer"));
+#ifdef __MSDOS__
+ cmd.push_back("file://%CD%/"+name);
+#else
+ cmd.push_back(name);
#endif
+ push_split(cmd,getSetting<string>("htmlviewerOptions"));
+ System(cmd,2,false);
+ }
+ return true;
+ }
+#endif
+
#ifdef HAVE_GL
- glrender(prefix,pic,outputformat,width,height,angle,zoom,m,M,shift,t,
- background,nlights,lights,diffuse,specular,View,oldpid);
#ifdef HAVE_PTHREAD
if(glthread && !offscreen && Wait) {
pthread_cond_wait(&readySignal,&readyLock);
@@ -1351,17 +1379,17 @@ bool picture::shipout3(const string& prefix, const string& format,
return true;
#endif
#endif
-
+
return false;
}
-bool picture::shipout3(const string& prefix)
+bool picture::shipout3(const string& prefix, const string format)
{
bounds3();
- bool status = true;
+ bool status;
- string prcname=buildname(prefix,"prc");
- prcfile prc(prcname);
+ string name=buildname(prefix,"prc");
+ prcfile prc(name);
static const double limit=2.5*10.0/INT_MAX;
double compressionlimit=max(length(b3.Max()),length(b3.Min()))*limit;
@@ -1372,12 +1400,11 @@ bool picture::shipout3(const string& prefix)
(*p)->write(&prc,&billboard,compressionlimit,groups);
}
groups.pop_back();
- if(status)
- status=prc.finish();
-
+ status=prc.finish();
+
if(!status) reportError("shipout3 failed");
- if(verbose > 0) cout << "Wrote " << prcname << endl;
+ if(verbose > 0) cout << "Wrote " << name << endl;
return true;
}
diff --git a/graphics/asymptote/picture.h b/graphics/asymptote/picture.h
index 0d571d0a3b..58223caf37 100644
--- a/graphics/asymptote/picture.h
+++ b/graphics/asymptote/picture.h
@@ -87,15 +87,16 @@ public:
const string& format, bool wait=false, bool view=true);
void render(double size2, const triple &Min, const triple& Max,
- double perspective, bool transparent, bool remesh) const;
+ double perspective, bool remesh) const;
bool shipout3(const string& prefix, const string& format,
double width, double height, double angle, double zoom,
- const triple& m, const triple& M, const pair& shift, double *t,
+ const triple& m, const triple& M, const pair& shift,
+ const pair& margin, double *t,
double *background, size_t nlights, triple *lights,
double *diffuse, double *specular, bool view);
- // PRC output
- bool shipout3(const string& prefix);
+ // 3D output
+ bool shipout3(const string& prefix, const string format);
bool reloadPDF(const string& Viewer, const string& outname) const;
diff --git a/graphics/asymptote/pipestream.cc b/graphics/asymptote/pipestream.cc
index c53287c28c..f7f3006c01 100644
--- a/graphics/asymptote/pipestream.cc
+++ b/graphics/asymptote/pipestream.cc
@@ -93,7 +93,7 @@ void iopipestream::eof()
void iopipestream::pipeclose()
{
if(pipeopen) {
-// kill(pid,SIGTERM);
+ kill(pid,SIGHUP);
eof();
close(out[0]);
Running=false;
diff --git a/graphics/asymptote/prcfile.h b/graphics/asymptote/prcfile.h
index a40fb64e16..224a92f8a0 100644
--- a/graphics/asymptote/prcfile.h
+++ b/graphics/asymptote/prcfile.h
@@ -2,6 +2,7 @@
#define PRCFILE_H
#include "memory.h"
+#include "pen.h"
inline double X(const camp::triple &v) {return v.getx();}
inline double Y(const camp::triple &v) {return v.gety();}
diff --git a/graphics/asymptote/quaternion.h b/graphics/asymptote/quaternion.h
deleted file mode 100644
index f58a7445e5..0000000000
--- a/graphics/asymptote/quaternion.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-
- quaternion.h - A quaternion class
-
- GLUI User Interface Toolkit (LGPL)
- Copyright (c) 1998 Paul Rademacher
-
- ---------------------------------------------------------------------
-
- WWW: http://sourceforge.net/projects/glui/
- Forums: http://sourceforge.net/forum/?group_id=92496
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*****************************************************************************/
-
-#ifndef GLUI_QUATERNION_H
-#define GLUI_QUATERNION_H
-
-#include "algebra3.h"
-#include <cstdio>
-
-/* this line defines a new type: pointer to a function which returns a */
-/* float and takes as argument a float */
-typedef float (*V_FCT_PTR)(float);
-
-/****************************************************************
- * Quaternion *
- ****************************************************************/
-
-class quat
-{
- /*protected: */
-public:
-
- vec3 v; /* vector component */
- float s; /* scalar component */
-
- /*public: */
-
- /* Constructors */
-
- quat();
- quat(float x, float y, float z, float w);
- quat(const vec3 &v, float s);
- quat(float s, const vec3 &v);
- quat(const float *d); /* copy from four-element float array */
- quat(const double *f); /* copy from four-element double array */
- quat(const quat &q); /* copy from other quat */
-
- /* Assignment operators */
-
- quat &operator = (const quat &v); /* assignment of a quat */
- quat &operator += (const quat &v); /* incrementation by a quat */
- quat &operator -= (const quat &v); /* decrementation by a quat */
- quat &operator *= (float d); /* multiplication by a constant */
- quat &operator /= (float d); /* division by a constant */
-
- /* special functions */
-
- float length() const; /* length of a quat */
- float length2() const; /* squared length of a quat */
- quat &normalize(); /* normalize a quat */
- quat &apply(V_FCT_PTR fct); /* apply a func. to each component */
- vec3 xform(const vec3 &v ); /* q*v*q-1 */
- mat4 to_mat4() const;
- void set_angle(float f); /* set rot angle (degrees) */
- void scale_angle(float f); /* scale rot angle (degrees) */
- float get_angle() const; /* set rot angle (degrees) */
- vec3 get_axis() const; /* get axis */
-
- void print( FILE *file, const char *name ) const; /* print to a file */
-
- float &operator [] (int i); /* indexing */
- const float &operator [] (int i) const; /* indexing */
-
- void set(float x, float y, float z); /* set quat */
- void set(const vec3 &v, float s); /* set quat */
-
- /* friends */
-
- friend quat operator - (const quat &v); /* -q1 */
- friend quat operator + (const quat &a, const quat &b); /* q1 + q2 */
- friend quat operator - (const quat &a, const quat &b); /* q1 - q2 */
- friend quat operator * (const quat &a, float d); /* q1 * 3.0 */
- friend quat operator * (float d, const quat &a); /* 3.0 * q1 */
- friend quat operator * (const quat &a, const quat &b); /* q1 * q2 */
- friend quat operator / (const quat &a, float d); /* q1 / 3.0 */
- friend int operator == (const quat &a, const quat &b); /* q1 == q2 ? */
- friend int operator != (const quat &a, const quat &b); /* q1 != q2 ? */
- friend void swap(quat &a, quat &b); /* swap q1 &q2 */
- /*friend quat min(const quat &a, const quat &b); -- min(q1, q2) */
- /*friend quat max(const quat &a, const quat &b); -- max(q1, q2) */
- friend quat prod(const quat &a, const quat &b); /* term by term mult*/
-};
-
-/* Utility functions */
-
-quat quat_identity(); /* Returns quaternion identity element */
-quat quat_slerp(const quat &from, const quat &to, float t);
-
-#endif
diff --git a/graphics/asymptote/revision.cc b/graphics/asymptote/revision.cc
index 4f90aa3b17..2d99676d71 100644
--- a/graphics/asymptote/revision.cc
+++ b/graphics/asymptote/revision.cc
@@ -1 +1 @@
-const char *REVISION="2.53";
+const char *REVISION="2.54";
diff --git a/graphics/asymptote/runarray.cc b/graphics/asymptote/runarray.cc
index a0ad0675ed..d750211978 100644
--- a/graphics/asymptote/runarray.cc
+++ b/graphics/asymptote/runarray.cc
@@ -391,8 +391,44 @@ void transpose(double *a, size_t n)
}
// Invert an n x n array in place.
-void inverse(double *a, size_t n)
+void inverse(double *M, size_t n)
{
+ if(n == 2) {
+ real a=M[0];
+ real b=M[1];
+ real c=M[2];
+ real d=M[3];
+ real det=a*d-b*c;
+ if(det == 0.0)
+ error(singular);
+ det=1.0/det;
+ M[0]=d*det;
+ M[1]=-b*det;
+ M[2]=-c*det;
+ M[3]=a*det;
+ return;
+ }
+
+ if(n == 3) {
+ real a=M[0], b=M[1], c=M[2];
+ real d=M[3], e=M[4], f=M[5];
+ real g=M[6], h=M[7], i=M[8];
+
+ real A=e*i-f*h;
+ real B=f*g-d*i;
+ real C=d*h-e*g;
+
+ real det=a*A+b*B+c*C;
+ if(det == 0.0)
+ error(singular);
+ det=1.0/det;
+
+ M[0]=A*det; M[1]=(c*h-b*i)*det; M[2]=(b*f-c*e)*det;
+ M[3]=B*det; M[4]=(a*i-c*g)*det; M[5]=(c*d-a*f)*det;
+ M[6]=C*det; M[7]=(b*g-a*h)*det; M[8]=(a*e-b*d)*det;
+ return;
+ }
+
inverseAllocate(n);
for(size_t i=0; i < n; i++)
@@ -404,7 +440,7 @@ void inverse(double *a, size_t n)
real big=0.0;
// This is the outer loop of the search for a pivot element.
for(size_t j=0; j < n; j++) {
- double *aj=a+n*j;
+ double *aj=M+n*j;
if(pivot[j] != 1) {
for(size_t k=0; k < n; k++) {
if(pivot[k] == 0) {
@@ -424,9 +460,9 @@ void inverse(double *a, size_t n)
++(pivot[col]);
// Interchange rows, if needed, to put the pivot element on the diagonal.
- double *acol=a+n*col;
+ double *acol=M+n*col;
if(row != col) {
- double *arow=a+n*row;
+ double *arow=M+n*row;
for(size_t k=0; k < n; k++) {
real temp=arow[k];
arow[k]=acol[k];
@@ -451,7 +487,7 @@ void inverse(double *a, size_t n)
// Reduce all rows except for the pivoted one.
for(size_t k=0; k < n; k++) {
if(k != col) {
- double *ak=a+n*k;
+ double *ak=M+n*k;
real akcol=ak[col];
ak[col]=0.0;
for(size_t j=0; j < n; j++)
@@ -467,7 +503,7 @@ void inverse(double *a, size_t n)
size_t c=Col[k];
if(r != c) {
for(size_t j=0; j < n; j++) {
- double *aj=a+n*j;
+ double *aj=M+n*j;
real temp=aj[r];
aj[r]=aj[c];
aj[c]=temp;
@@ -597,10 +633,10 @@ void integeroverflow(size_t i)
#endif
namespace run {
// Create an empty array.
-#line 550 "runarray.in"
+#line 586 "runarray.in"
void emptyArray(stack *Stack)
{
-#line 551 "runarray.in"
+#line 587 "runarray.in"
{Stack->push<array*>(new array(0)); return;}
}
@@ -609,11 +645,11 @@ void emptyArray(stack *Stack)
// is popped off the stack, followed by each dimension in reverse order.
// The array itself is technically a one dimensional array of one
// dimension arrays and so on.
-#line 560 "runarray.in"
+#line 596 "runarray.in"
void newDeepArray(stack *Stack)
{
Int depth=vm::pop<Int>(Stack);
-#line 561 "runarray.in"
+#line 597 "runarray.in"
assert(depth > 0);
Int *dims = new Int[depth];
@@ -632,11 +668,11 @@ void newDeepArray(stack *Stack)
// Creates an array with elements already specified. First, the number
// of elements is popped off the stack, followed by each element in
// reverse order.
-#line 580 "runarray.in"
+#line 616 "runarray.in"
void newInitializedArray(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
-#line 581 "runarray.in"
+#line 617 "runarray.in"
assert(n >= 0);
array *a = new array(n);
@@ -649,12 +685,12 @@ void newInitializedArray(stack *Stack)
// Similar to newInitializedArray, but after the n elements, append another
// array to it.
-#line 594 "runarray.in"
+#line 630 "runarray.in"
void newAppendedArray(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
array* tail=vm::pop<array*>(Stack);
-#line 595 "runarray.in"
+#line 631 "runarray.in"
assert(n >= 0);
array *a = new array(n);
@@ -671,14 +707,14 @@ void newAppendedArray(stack *Stack)
// typeDepth is the true depth of the array determined at compile-time when the
// operations for the array type are added. This typeDepth argument is
// automatically pushed on the stack and is not visible to the user.
-#line 612 "runarray.in"
+#line 648 "runarray.in"
void copyArrayValue(stack *Stack)
{
Int typeDepth=vm::pop<Int>(Stack);
Int depth=vm::pop<Int>(Stack,Int_MAX);
item value=vm::pop(Stack);
Int n=vm::pop<Int>(Stack);
-#line 613 "runarray.in"
+#line 649 "runarray.in"
if(n < 0) error("cannot create a negative length array");
if(depth < 0) error("cannot copy to a negative depth");
if(depth > typeDepth) depth=typeDepth;
@@ -689,25 +725,25 @@ void copyArrayValue(stack *Stack)
// typeDepth is the true depth of the array determined at compile-time when the
// operations for the array type are added. This typeDepth argument is
// automatically pushed on the stack and is not visible to the user.
-#line 624 "runarray.in"
+#line 660 "runarray.in"
void copyArray(stack *Stack)
{
Int typeDepth=vm::pop<Int>(Stack);
Int depth=vm::pop<Int>(Stack,Int_MAX);
array * a=vm::pop<array *>(Stack);
-#line 625 "runarray.in"
+#line 661 "runarray.in"
if(depth < 0) error("cannot copy to a negative depth");
if(depth > typeDepth) depth=typeDepth;
{Stack->push<array*>(a->copyToDepth(depth)); return;}
}
// Read an element from an array. Checks for initialization & bounds.
-#line 632 "runarray.in"
+#line 668 "runarray.in"
void arrayRead(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 633 "runarray.in"
+#line 669 "runarray.in"
item& i=arrayRead(a,n);
if (i.empty()) {
ostringstream buf;
@@ -718,37 +754,37 @@ void arrayRead(stack *Stack)
}
// Slice a substring from an array.
-#line 644 "runarray.in"
+#line 680 "runarray.in"
void arraySliceRead(stack *Stack)
{
Int right=vm::pop<Int>(Stack);
Int left=vm::pop<Int>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 645 "runarray.in"
+#line 681 "runarray.in"
checkArray(a);
{Stack->push(a->slice(left, right)); return;}
}
// Slice a substring from an array. This implements the cases a[i:] and a[:]
// where the endpoint is not given, and assumed to be the length of the array.
-#line 652 "runarray.in"
+#line 688 "runarray.in"
void arraySliceReadToEnd(stack *Stack)
{
Int left=vm::pop<Int>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 653 "runarray.in"
+#line 689 "runarray.in"
size_t len=checkArray(a);
{Stack->push(a->slice(left, (Int)len)); return;}
}
// Read an element from an array of arrays. Check bounds and initialize
// as necessary.
-#line 660 "runarray.in"
+#line 696 "runarray.in"
void arrayArrayRead(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 661 "runarray.in"
+#line 697 "runarray.in"
item& i=arrayRead(a,n);
if (i.empty()) i=new array(0);
{Stack->push(i); return;}
@@ -756,13 +792,13 @@ void arrayArrayRead(stack *Stack)
// Write an element to an array. Increase size if necessary.
// TODO: Add arrayWriteAndPop
-#line 669 "runarray.in"
+#line 705 "runarray.in"
void arrayWrite(stack *Stack)
{
item value=vm::pop(Stack);
Int n=vm::pop<Int>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 670 "runarray.in"
+#line 706 "runarray.in"
size_t len=checkArray(a);
bool cyclic=a->cyclic();
if(cyclic && len > 0) n=imod(n,len);
@@ -776,27 +812,27 @@ void arrayWrite(stack *Stack)
{Stack->push(value); return;}
}
-#line 684 "runarray.in"
+#line 720 "runarray.in"
void arraySliceWrite(stack *Stack)
{
array * src=vm::pop<array *>(Stack);
Int right=vm::pop<Int>(Stack);
Int left=vm::pop<Int>(Stack);
array * dest=vm::pop<array *>(Stack);
-#line 685 "runarray.in"
+#line 721 "runarray.in"
checkArray(src);
checkArray(dest);
dest->setSlice(left, right, src);
{Stack->push<array*>(src); return;}
}
-#line 692 "runarray.in"
+#line 728 "runarray.in"
void arraySliceWriteToEnd(stack *Stack)
{
array * src=vm::pop<array *>(Stack);
Int left=vm::pop<Int>(Stack);
array * dest=vm::pop<array *>(Stack);
-#line 693 "runarray.in"
+#line 729 "runarray.in"
checkArray(src);
size_t len=checkArray(dest);
dest->setSlice(left, (Int) len, src);
@@ -804,20 +840,20 @@ void arraySliceWriteToEnd(stack *Stack)
}
// Returns the length of an array.
-#line 701 "runarray.in"
+#line 737 "runarray.in"
void arrayLength(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 702 "runarray.in"
+#line 738 "runarray.in"
{Stack->push<Int>((Int) checkArray(a)); return;}
}
// Returns an array of integers representing the keys of the array.
-#line 707 "runarray.in"
+#line 743 "runarray.in"
void arrayKeys(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 708 "runarray.in"
+#line 744 "runarray.in"
size_t size=checkArray(a);
array *keys=new array();
@@ -831,33 +867,33 @@ void arrayKeys(stack *Stack)
}
// Return the cyclic flag for an array.
-#line 722 "runarray.in"
+#line 758 "runarray.in"
void arrayCyclicFlag(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 723 "runarray.in"
+#line 759 "runarray.in"
checkArray(a);
{Stack->push<bool>(a->cyclic()); return;}
}
-#line 728 "runarray.in"
+#line 764 "runarray.in"
void arraySetCyclicFlag(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
bool b=vm::pop<bool>(Stack);
-#line 729 "runarray.in"
+#line 765 "runarray.in"
checkArray(a);
a->cyclic(b);
{Stack->push<bool>(b); return;}
}
// Check to see if an array element is initialized.
-#line 736 "runarray.in"
+#line 772 "runarray.in"
void arrayInitializedHelper(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
Int n=vm::pop<Int>(Stack);
-#line 737 "runarray.in"
+#line 773 "runarray.in"
size_t len=checkArray(a);
bool cyclic=a->cyclic();
if(cyclic && len > 0) n=imod(n,len);
@@ -867,62 +903,62 @@ void arrayInitializedHelper(stack *Stack)
}
// Returns the initialize method for an array.
-#line 747 "runarray.in"
+#line 783 "runarray.in"
void arrayInitialized(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 748 "runarray.in"
+#line 784 "runarray.in"
{Stack->push<callable*>(new thunk(new bfunc(arrayInitializedHelper),a)); return;}
}
// The helper function for the cyclic method that sets the cyclic flag.
-#line 753 "runarray.in"
+#line 789 "runarray.in"
void arrayCyclicHelper(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
bool b=vm::pop<bool>(Stack);
-#line 754 "runarray.in"
+#line 790 "runarray.in"
checkArray(a);
a->cyclic(b);
}
// Set the cyclic flag for an array.
-#line 760 "runarray.in"
+#line 796 "runarray.in"
void arrayCyclic(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 761 "runarray.in"
+#line 797 "runarray.in"
{Stack->push<callable*>(new thunk(new bfunc(arrayCyclicHelper),a)); return;}
}
// The helper function for the push method that does the actual operation.
-#line 766 "runarray.in"
+#line 802 "runarray.in"
void arrayPushHelper(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
item x=vm::pop(Stack);
-#line 767 "runarray.in"
+#line 803 "runarray.in"
checkArray(a);
a->push(x);
{Stack->push(x); return;}
}
// Returns the push method for an array.
-#line 774 "runarray.in"
+#line 810 "runarray.in"
void arrayPush(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 775 "runarray.in"
+#line 811 "runarray.in"
{Stack->push<callable*>(new thunk(new bfunc(arrayPushHelper),a)); return;}
}
// The helper function for the append method that appends b to a.
-#line 780 "runarray.in"
+#line 816 "runarray.in"
void arrayAppendHelper(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
array * b=vm::pop<array *>(Stack);
-#line 781 "runarray.in"
+#line 817 "runarray.in"
checkArray(a);
size_t size=checkArray(b);
for(size_t i=0; i < size; i++)
@@ -930,20 +966,20 @@ void arrayAppendHelper(stack *Stack)
}
// Returns the append method for an array.
-#line 789 "runarray.in"
+#line 825 "runarray.in"
void arrayAppend(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 790 "runarray.in"
+#line 826 "runarray.in"
{Stack->push<callable*>(new thunk(new bfunc(arrayAppendHelper),a)); return;}
}
// The helper function for the pop method.
-#line 795 "runarray.in"
+#line 831 "runarray.in"
void arrayPopHelper(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 796 "runarray.in"
+#line 832 "runarray.in"
size_t asize=checkArray(a);
if(asize == 0)
error("cannot pop element from empty array");
@@ -951,22 +987,22 @@ void arrayPopHelper(stack *Stack)
}
// Returns the pop method for an array.
-#line 804 "runarray.in"
+#line 840 "runarray.in"
void arrayPop(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 805 "runarray.in"
+#line 841 "runarray.in"
{Stack->push<callable*>(new thunk(new bfunc(arrayPopHelper),a)); return;}
}
// The helper function for the insert method.
-#line 810 "runarray.in"
+#line 846 "runarray.in"
void arrayInsertHelper(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
array * x=vm::pop<array *>(Stack);
Int i=vm::pop<Int>(Stack);
-#line 811 "runarray.in"
+#line 847 "runarray.in"
size_t asize=checkArray(a);
checkArray(x);
if(a->cyclic() && asize > 0) i=imod(i,asize);
@@ -976,39 +1012,39 @@ void arrayInsertHelper(stack *Stack)
}
// Returns the insert method for an array.
-#line 821 "runarray.in"
+#line 857 "runarray.in"
void arrayInsert(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 822 "runarray.in"
+#line 858 "runarray.in"
{Stack->push<callable*>(new thunk(new bfunc(arrayInsertHelper),a)); return;}
}
// Returns the delete method for an array.
-#line 827 "runarray.in"
+#line 863 "runarray.in"
void arrayDelete(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 828 "runarray.in"
+#line 864 "runarray.in"
{Stack->push<callable*>(new thunk(new bfunc(arrayDeleteHelper),a)); return;}
}
-#line 832 "runarray.in"
+#line 868 "runarray.in"
void arrayAlias(stack *Stack)
{
array * b=vm::pop<array *>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 833 "runarray.in"
+#line 869 "runarray.in"
{Stack->push<bool>(a==b); return;}
}
// Return array formed by indexing array a with elements of integer array b
-#line 838 "runarray.in"
+#line 874 "runarray.in"
void arrayIntArray(stack *Stack)
{
array * b=vm::pop<array *>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 839 "runarray.in"
+#line 875 "runarray.in"
size_t asize=checkArray(a);
size_t bsize=checkArray(b);
array *r=new array(bsize);
@@ -1026,13 +1062,13 @@ void arrayIntArray(stack *Stack)
// returns the complement of the integer array a in {0,2,...,n-1},
// so that b[complement(a,b.length)] yields the complement of b[a].
-#line 857 "runarray.in"
+#line 893 "runarray.in"
// Intarray* complement(Intarray *a, Int n);
void gen_runarray32(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
Intarray * a=vm::pop<Intarray *>(Stack);
-#line 858 "runarray.in"
+#line 894 "runarray.in"
size_t asize=checkArray(a);
array *r=new array(0);
bool *keep=new bool[n];
@@ -1049,12 +1085,12 @@ void gen_runarray32(stack *Stack)
}
// Generate the sequence {f(i) : i=0,1,...n-1} given a function f and integer n
-#line 875 "runarray.in"
+#line 911 "runarray.in"
void arraySequence(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
callable * f=vm::pop<callable *>(Stack);
-#line 876 "runarray.in"
+#line 912 "runarray.in"
if(n < 0) n=0;
array *a=new array(n);
for(Int i=0; i < n; ++i) {
@@ -1066,12 +1102,12 @@ void arraySequence(stack *Stack)
}
// Return the array {0,1,...n-1}
-#line 888 "runarray.in"
+#line 924 "runarray.in"
// Intarray* sequence(Int n);
void gen_runarray34(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
-#line 889 "runarray.in"
+#line 925 "runarray.in"
if(n < 0) n=0;
array *a=new array(n);
for(Int i=0; i < n; ++i) {
@@ -1081,12 +1117,12 @@ void gen_runarray34(stack *Stack)
}
// Apply a function to each element of an array
-#line 899 "runarray.in"
+#line 935 "runarray.in"
void arrayFunction(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
callable * f=vm::pop<callable *>(Stack);
-#line 900 "runarray.in"
+#line 936 "runarray.in"
size_t size=checkArray(a);
array *b=new array(size);
for(size_t i=0; i < size; ++i) {
@@ -1097,13 +1133,13 @@ void arrayFunction(stack *Stack)
{Stack->push<array*>(b); return;}
}
-#line 911 "runarray.in"
+#line 947 "runarray.in"
void arraySort(stack *Stack)
{
bool stable=vm::pop<bool>(Stack,true);
callable * less=vm::pop<callable *>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 912 "runarray.in"
+#line 948 "runarray.in"
array *c=copyArray(a);
compareFunc=less;
FuncStack=Stack;
@@ -1112,13 +1148,13 @@ void arraySort(stack *Stack)
{Stack->push<array*>(c); return;}
}
-#line 921 "runarray.in"
+#line 957 "runarray.in"
void arraySearch(stack *Stack)
{
callable * less=vm::pop<callable *>(Stack);
item key=vm::pop(Stack);
array * a=vm::pop<array *>(Stack);
-#line 922 "runarray.in"
+#line 958 "runarray.in"
size_t size=a->size();
compareFunc=less;
FuncStack=Stack;
@@ -1136,12 +1172,12 @@ void arraySearch(stack *Stack)
{Stack->push<Int>(0); return;}
}
-#line 940 "runarray.in"
+#line 976 "runarray.in"
// bool all(boolarray *a);
void gen_runarray38(stack *Stack)
{
boolarray * a=vm::pop<boolarray *>(Stack);
-#line 941 "runarray.in"
+#line 977 "runarray.in"
size_t size=checkArray(a);
bool c=true;
for(size_t i=0; i < size; i++)
@@ -1149,12 +1185,12 @@ void gen_runarray38(stack *Stack)
{Stack->push<bool>(c); return;}
}
-#line 949 "runarray.in"
+#line 985 "runarray.in"
// boolarray* !(boolarray* a);
void gen_runarray39(stack *Stack)
{
boolarray* a=vm::pop<boolarray*>(Stack);
-#line 950 "runarray.in"
+#line 986 "runarray.in"
size_t size=checkArray(a);
array *c=new array(size);
for(size_t i=0; i < size; i++)
@@ -1162,12 +1198,12 @@ void gen_runarray39(stack *Stack)
{Stack->push<boolarray*>(c); return;}
}
-#line 958 "runarray.in"
+#line 994 "runarray.in"
// Int sum(boolarray *a);
void gen_runarray40(stack *Stack)
{
boolarray * a=vm::pop<boolarray *>(Stack);
-#line 959 "runarray.in"
+#line 995 "runarray.in"
size_t size=checkArray(a);
Int sum=0;
for(size_t i=0; i < size; i++)
@@ -1175,11 +1211,11 @@ void gen_runarray40(stack *Stack)
{Stack->push<Int>(sum); return;}
}
-#line 967 "runarray.in"
+#line 1003 "runarray.in"
void arrayConcat(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 968 "runarray.in"
+#line 1004 "runarray.in"
// a is an array of arrays to be concatenated together.
// The signature is
// T[] concat(... T[][] a);
@@ -1206,11 +1242,11 @@ void arrayConcat(stack *Stack)
{Stack->push<array*>(result); return;}
}
-#line 995 "runarray.in"
+#line 1031 "runarray.in"
void array2Transpose(stack *Stack)
{
array * a=vm::pop<array *>(Stack);
-#line 996 "runarray.in"
+#line 1032 "runarray.in"
size_t asize=checkArray(a);
array *c=new array(0);
for(size_t i=0; i < asize; i++) {
@@ -1237,12 +1273,12 @@ void array2Transpose(stack *Stack)
// permutation (021 or 120, etc; original is 012).
// Transpose by sending respective members to the permutated locations:
// return the array obtained by putting a[i][j][k] into position perm{ijk}.
-#line 1023 "runarray.in"
+#line 1059 "runarray.in"
void array3Transpose(stack *Stack)
{
array * perm=vm::pop<array *>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 1024 "runarray.in"
+#line 1060 "runarray.in"
const size_t DIM=3;
if(checkArray(perm) != DIM) {
@@ -1326,13 +1362,13 @@ void array3Transpose(stack *Stack)
// Find the index of the nth true value in a boolean array or -1 if not found.
// If n is negative, search backwards.
-#line 1108 "runarray.in"
+#line 1144 "runarray.in"
// Int find(boolarray *a, Int n=1);
void gen_runarray44(stack *Stack)
{
Int n=vm::pop<Int>(Stack,1);
boolarray * a=vm::pop<boolarray *>(Stack);
-#line 1109 "runarray.in"
+#line 1145 "runarray.in"
size_t size=checkArray(a);
Int j=-1;
if(n > 0)
@@ -1349,12 +1385,12 @@ void gen_runarray44(stack *Stack)
}
// Find all indices of true values in a boolean array.
-#line 1126 "runarray.in"
+#line 1162 "runarray.in"
// Intarray* findall(boolarray *a);
void gen_runarray45(stack *Stack)
{
boolarray * a=vm::pop<boolarray *>(Stack);
-#line 1127 "runarray.in"
+#line 1163 "runarray.in"
size_t size=checkArray(a);
array *b=new array(0);
for(size_t i=0; i < size; i++) {
@@ -1367,13 +1403,13 @@ void gen_runarray45(stack *Stack)
// construct vector obtained by replacing those elements of b for which the
// corresponding elements of a are false by the corresponding element of c.
-#line 1140 "runarray.in"
+#line 1176 "runarray.in"
void arrayConditional(stack *Stack)
{
array * c=vm::pop<array *>(Stack);
array * b=vm::pop<array *>(Stack);
array * a=vm::pop<array *>(Stack);
-#line 1141 "runarray.in"
+#line 1177 "runarray.in"
size_t size=checkArray(a);
array *r=new array(size);
if(b && c) {
@@ -1397,22 +1433,22 @@ void arrayConditional(stack *Stack)
}
// Return an n x n identity matrix.
-#line 1165 "runarray.in"
+#line 1201 "runarray.in"
// realarray2* identity(Int n);
void gen_runarray47(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
-#line 1166 "runarray.in"
+#line 1202 "runarray.in"
{Stack->push<realarray2*>(Identity(n)); return;}
}
// Return the inverse of an n x n matrix a using Gauss-Jordan elimination.
-#line 1171 "runarray.in"
+#line 1207 "runarray.in"
// realarray2* inverse(realarray2 *a);
void gen_runarray48(stack *Stack)
{
realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1172 "runarray.in"
+#line 1208 "runarray.in"
size_t n=checkArray(a);
double *A;
copyArray2C(A,a,true,0,NoGC);
@@ -1425,14 +1461,14 @@ void gen_runarray48(stack *Stack)
// Solve the linear equation ax=b by LU decomposition, returning the
// solution x, where a is an n x n matrix and b is an array of length n.
// If no solution exists, return an empty array.
-#line 1185 "runarray.in"
+#line 1221 "runarray.in"
// realarray* solve(realarray2 *a, realarray *b, bool warn=true);
void gen_runarray49(stack *Stack)
{
bool warn=vm::pop<bool>(Stack,true);
realarray * b=vm::pop<realarray *>(Stack);
realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1186 "runarray.in"
+#line 1222 "runarray.in"
size_t n=checkArray(a);
if(n == 0) {Stack->push<realarray*>(new array(0)); return;}
@@ -1484,14 +1520,14 @@ void gen_runarray49(stack *Stack)
// Solve the linear equation ax=b by LU decomposition, returning the
// solution x, where a is an n x n matrix and b is an n x m matrix.
// If no solution exists, return an empty array.
-#line 1238 "runarray.in"
+#line 1274 "runarray.in"
// realarray2* solve(realarray2 *a, realarray2 *b, bool warn=true);
void gen_runarray50(stack *Stack)
{
bool warn=vm::pop<bool>(Stack,true);
realarray2 * b=vm::pop<realarray2 *>(Stack);
realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1239 "runarray.in"
+#line 1275 "runarray.in"
size_t n=checkArray(a);
if(n == 0) {Stack->push<realarray2*>(new array(0)); return;}
@@ -1553,12 +1589,12 @@ void gen_runarray50(stack *Stack)
}
// Compute the determinant of an n x n matrix.
-#line 1301 "runarray.in"
+#line 1337 "runarray.in"
// real determinant(realarray2 *a);
void gen_runarray51(stack *Stack)
{
realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1302 "runarray.in"
+#line 1338 "runarray.in"
real *A;
copyArray2C(A,a);
size_t n=checkArray(a);
@@ -1573,13 +1609,13 @@ void gen_runarray51(stack *Stack)
{Stack->push<real>(det); return;}
}
-#line 1317 "runarray.in"
+#line 1353 "runarray.in"
// realarray* *(realarray2 *a, realarray *b);
void gen_runarray52(stack *Stack)
{
realarray * b=vm::pop<realarray *>(Stack);
realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1318 "runarray.in"
+#line 1354 "runarray.in"
size_t n=checkArray(a);
size_t m=checkArray(b);
array *c=new array(n);
@@ -1597,13 +1633,13 @@ void gen_runarray52(stack *Stack)
{Stack->push<realarray*>(c); return;}
}
-#line 1336 "runarray.in"
+#line 1372 "runarray.in"
// realarray* *(realarray *a, realarray2 *b);
void gen_runarray53(stack *Stack)
{
realarray2 * b=vm::pop<realarray2 *>(Stack);
realarray * a=vm::pop<realarray *>(Stack);
-#line 1337 "runarray.in"
+#line 1373 "runarray.in"
size_t n=checkArray(a);
if(n != checkArray(b)) error(incommensurate);
real *A;
@@ -1631,62 +1667,62 @@ void gen_runarray53(stack *Stack)
{Stack->push<realarray*>(c); return;}
}
-#line 1365 "runarray.in"
+#line 1401 "runarray.in"
// Intarray2* *(Intarray2 *a, Intarray2 *b);
void gen_runarray54(stack *Stack)
{
Intarray2 * b=vm::pop<Intarray2 *>(Stack);
Intarray2 * a=vm::pop<Intarray2 *>(Stack);
-#line 1366 "runarray.in"
+#line 1402 "runarray.in"
{Stack->push<Intarray2*>(mult<Int>(a,b)); return;}
}
-#line 1370 "runarray.in"
+#line 1406 "runarray.in"
// realarray2* *(realarray2 *a, realarray2 *b);
void gen_runarray55(stack *Stack)
{
realarray2 * b=vm::pop<realarray2 *>(Stack);
realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1371 "runarray.in"
+#line 1407 "runarray.in"
{Stack->push<realarray2*>(mult<real>(a,b)); return;}
}
-#line 1375 "runarray.in"
+#line 1411 "runarray.in"
// pairarray2* *(pairarray2 *a, pairarray2 *b);
void gen_runarray56(stack *Stack)
{
pairarray2 * b=vm::pop<pairarray2 *>(Stack);
pairarray2 * a=vm::pop<pairarray2 *>(Stack);
-#line 1376 "runarray.in"
+#line 1412 "runarray.in"
{Stack->push<pairarray2*>(mult<pair>(a,b)); return;}
}
-#line 1380 "runarray.in"
+#line 1416 "runarray.in"
// triple *(realarray2 *t, triple v);
void gen_runarray57(stack *Stack)
{
triple v=vm::pop<triple>(Stack);
realarray2 * t=vm::pop<realarray2 *>(Stack);
-#line 1381 "runarray.in"
+#line 1417 "runarray.in"
{Stack->push<triple>(*t*v); return;}
}
-#line 1385 "runarray.in"
+#line 1421 "runarray.in"
// realarray2* AtA(realarray2 *a);
void gen_runarray58(stack *Stack)
{
realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1386 "runarray.in"
+#line 1422 "runarray.in"
{Stack->push<realarray2*>(AtA<real>(a)); return;}
}
-#line 1390 "runarray.in"
+#line 1426 "runarray.in"
// pair project(triple v, realarray2 *t);
void gen_runarray59(stack *Stack)
{
realarray2 * t=vm::pop<realarray2 *>(Stack);
triple v=vm::pop<triple>(Stack);
-#line 1391 "runarray.in"
+#line 1427 "runarray.in"
size_t n=checkArray(t);
if(n != 4) error(incommensurate);
array *t0=read<array*>(t,0);
@@ -1711,13 +1747,13 @@ void gen_runarray59(stack *Stack)
}
// Compute the dot product of vectors a and b.
-#line 1416 "runarray.in"
+#line 1452 "runarray.in"
// real dot(realarray *a, realarray *b);
void gen_runarray60(stack *Stack)
{
realarray * b=vm::pop<realarray *>(Stack);
realarray * a=vm::pop<realarray *>(Stack);
-#line 1417 "runarray.in"
+#line 1453 "runarray.in"
size_t n=checkArrays(a,b);
real sum=0.0;
for(size_t i=0; i < n; ++i)
@@ -1726,13 +1762,13 @@ void gen_runarray60(stack *Stack)
}
// Compute the complex dot product of vectors a and b.
-#line 1426 "runarray.in"
+#line 1462 "runarray.in"
// pair dot(pairarray *a, pairarray *b);
void gen_runarray61(stack *Stack)
{
pairarray * b=vm::pop<pairarray *>(Stack);
pairarray * a=vm::pop<pairarray *>(Stack);
-#line 1427 "runarray.in"
+#line 1463 "runarray.in"
size_t n=checkArrays(a,b);
pair sum=zero;
for(size_t i=0; i < n; ++i)
@@ -1747,7 +1783,7 @@ void gen_runarray61(stack *Stack)
// [ a[2] b[2] c[2] ]
// [ ... ]
// [ c[n-1] a[n-1] b[n-1] ]
-#line 1442 "runarray.in"
+#line 1478 "runarray.in"
// realarray* tridiagonal(realarray *a, realarray *b, realarray *c, realarray *f);
void gen_runarray62(stack *Stack)
{
@@ -1755,7 +1791,7 @@ void gen_runarray62(stack *Stack)
realarray * c=vm::pop<realarray *>(Stack);
realarray * b=vm::pop<realarray *>(Stack);
realarray * a=vm::pop<realarray *>(Stack);
-#line 1443 "runarray.in"
+#line 1479 "runarray.in"
size_t n=checkArrays(a,b);
checkEqual(n,checkArray(c));
checkEqual(n,checkArray(f));
@@ -1852,7 +1888,7 @@ void gen_runarray62(stack *Stack)
}
// Root solve by Newton-Raphson
-#line 1540 "runarray.in"
+#line 1576 "runarray.in"
// real newton(Int iterations=100, callableReal *f, callableReal *fprime, real x, bool verbose=false);
void gen_runarray63(stack *Stack)
{
@@ -1861,7 +1897,7 @@ void gen_runarray63(stack *Stack)
callableReal * fprime=vm::pop<callableReal *>(Stack);
callableReal * f=vm::pop<callableReal *>(Stack);
Int iterations=vm::pop<Int>(Stack,100);
-#line 1542 "runarray.in"
+#line 1578 "runarray.in"
static const real fuzz=1000.0*DBL_EPSILON;
Int i=0;
size_t oldPrec=0;
@@ -1907,7 +1943,7 @@ void gen_runarray63(stack *Stack)
// Root solve by Newton-Raphson bisection
// cf. routine rtsafe (Press et al., Numerical Recipes, 1991).
-#line 1588 "runarray.in"
+#line 1624 "runarray.in"
// real newton(Int iterations=100, callableReal *f, callableReal *fprime, real x1, real x2, bool verbose=false);
void gen_runarray64(stack *Stack)
{
@@ -1917,7 +1953,7 @@ void gen_runarray64(stack *Stack)
callableReal * fprime=vm::pop<callableReal *>(Stack);
callableReal * f=vm::pop<callableReal *>(Stack);
Int iterations=vm::pop<Int>(Stack,100);
-#line 1590 "runarray.in"
+#line 1626 "runarray.in"
static const real fuzz=1000.0*DBL_EPSILON;
size_t oldPrec=0;
if(verbose)
@@ -2003,7 +2039,7 @@ void gen_runarray64(stack *Stack)
// In this implementation, the binary search is interleaved
// with a modified version of quadratic interpolation.
// This is a C++ port of the Asymptote routine written by Charles Staats III.
-#line 1676 "runarray.in"
+#line 1712 "runarray.in"
// real _findroot(callableReal *f, real a, real b, real tolerance, real fa, real fb);
void gen_runarray65(stack *Stack)
{
@@ -2013,7 +2049,7 @@ void gen_runarray65(stack *Stack)
real b=vm::pop<real>(Stack);
real a=vm::pop<real>(Stack);
callableReal * f=vm::pop<callableReal *>(Stack);
-#line 1678 "runarray.in"
+#line 1714 "runarray.in"
if(fa == 0.0) {Stack->push<real>(a); return;}
if(fb == 0.0) {Stack->push<real>(b); return;}
@@ -2105,7 +2141,7 @@ void gen_runarray65(stack *Stack)
{Stack->push<real>(a-(b-a)/(fb-fa)*fa); return;}
}
-#line 1770 "runarray.in"
+#line 1806 "runarray.in"
// real simpson(callableReal *f, real a, real b, real acc=DBL_EPSILON, real dxmax=0);
void gen_runarray66(stack *Stack)
{
@@ -2114,7 +2150,7 @@ void gen_runarray66(stack *Stack)
real b=vm::pop<real>(Stack);
real a=vm::pop<real>(Stack);
callableReal * f=vm::pop<callableReal *>(Stack);
-#line 1772 "runarray.in"
+#line 1808 "runarray.in"
real integral;
if(dxmax <= 0) dxmax=fabs(b-a);
callable *oldFunc=Func;
@@ -2127,13 +2163,13 @@ void gen_runarray66(stack *Stack)
}
// Compute the fast Fourier transform of a pair array
-#line 1785 "runarray.in"
+#line 1821 "runarray.in"
// pairarray* fft(pairarray *a, Int sign=1);
void gen_runarray67(stack *Stack)
{
Int sign=vm::pop<Int>(Stack,1);
pairarray * a=vm::pop<pairarray *>(Stack);
-#line 1786 "runarray.in"
+#line 1822 "runarray.in"
#ifdef HAVE_LIBFFTW3
unsigned n=(unsigned) checkArray(a);
array *c=new array(n);
@@ -2162,12 +2198,12 @@ void gen_runarray67(stack *Stack)
{Stack->push<pairarray*>(c); return;}
}
-#line 1815 "runarray.in"
+#line 1851 "runarray.in"
// Intarray2* triangulate(pairarray *z);
void gen_runarray68(stack *Stack)
{
pairarray * z=vm::pop<pairarray *>(Stack);
-#line 1816 "runarray.in"
+#line 1852 "runarray.in"
size_t nv=checkArray(z);
// Call robust version of Gilles Dumoulin's port of Paul Bourke's
// triangulation code.
@@ -2201,12 +2237,12 @@ void gen_runarray68(stack *Stack)
{Stack->push<Intarray2*>(t); return;}
}
-#line 1850 "runarray.in"
+#line 1886 "runarray.in"
// real norm(realarray *a);
void gen_runarray69(stack *Stack)
{
realarray * a=vm::pop<realarray *>(Stack);
-#line 1851 "runarray.in"
+#line 1887 "runarray.in"
size_t n=checkArray(a);
real M=0.0;
for(size_t i=0; i < n; ++i) {
@@ -2216,12 +2252,12 @@ void gen_runarray69(stack *Stack)
{Stack->push<real>(M); return;}
}
-#line 1861 "runarray.in"
+#line 1897 "runarray.in"
// real norm(realarray2 *a);
void gen_runarray70(stack *Stack)
{
realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1862 "runarray.in"
+#line 1898 "runarray.in"
size_t n=checkArray(a);
real M=0.0;
for(size_t i=0; i < n; ++i) {
@@ -2235,12 +2271,12 @@ void gen_runarray70(stack *Stack)
{Stack->push<real>(M); return;}
}
-#line 1876 "runarray.in"
+#line 1912 "runarray.in"
// real norm(triplearray2 *a);
void gen_runarray71(stack *Stack)
{
triplearray2 * a=vm::pop<triplearray2 *>(Stack);
-#line 1877 "runarray.in"
+#line 1913 "runarray.in"
size_t n=checkArray(a);
real M=0.0;
for(size_t i=0; i < n; ++i) {
@@ -2254,12 +2290,12 @@ void gen_runarray71(stack *Stack)
{Stack->push<real>(sqrt(M)); return;}
}
-#line 1891 "runarray.in"
+#line 1927 "runarray.in"
// real change2(triplearray2 *a);
void gen_runarray72(stack *Stack)
{
triplearray2 * a=vm::pop<triplearray2 *>(Stack);
-#line 1892 "runarray.in"
+#line 1928 "runarray.in"
size_t n=checkArray(a);
if(n == 0) {Stack->push<real>(0.0); return;}
@@ -2280,13 +2316,13 @@ void gen_runarray72(stack *Stack)
{Stack->push<real>(M); return;}
}
-#line 1913 "runarray.in"
+#line 1949 "runarray.in"
// triple minbezier(triplearray2 *P, triple b);
void gen_runarray73(stack *Stack)
{
triple b=vm::pop<triple>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
-#line 1914 "runarray.in"
+#line 1950 "runarray.in"
size_t N;
real *A=copyTripleArray2Components(P,N);
bound_double *B=bounddouble(N);
@@ -2297,13 +2333,13 @@ void gen_runarray73(stack *Stack)
{Stack->push<triple>(b); return;}
}
-#line 1925 "runarray.in"
+#line 1961 "runarray.in"
// triple maxbezier(triplearray2 *P, triple b);
void gen_runarray74(stack *Stack)
{
triple b=vm::pop<triple>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
-#line 1926 "runarray.in"
+#line 1962 "runarray.in"
size_t N;
real *A=copyTripleArray2Components(P,N);
bound_double *B=bounddouble(N);
@@ -2314,13 +2350,13 @@ void gen_runarray74(stack *Stack)
{Stack->push<triple>(b); return;}
}
-#line 1937 "runarray.in"
+#line 1973 "runarray.in"
// pair minratio(triplearray2 *P, pair b);
void gen_runarray75(stack *Stack)
{
pair b=vm::pop<pair>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
-#line 1938 "runarray.in"
+#line 1974 "runarray.in"
size_t N;
triple *A=copyTripleArray2C(P,N);
real fuzz=Fuzz*norm(A,N);
@@ -2331,13 +2367,13 @@ void gen_runarray75(stack *Stack)
{Stack->push<pair>(b); return;}
}
-#line 1949 "runarray.in"
+#line 1985 "runarray.in"
// pair maxratio(triplearray2 *P, pair b);
void gen_runarray76(stack *Stack)
{
pair b=vm::pop<pair>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
-#line 1950 "runarray.in"
+#line 1986 "runarray.in"
size_t N;
triple *A=copyTripleArray2C(P,N);
bound_triple *B=boundtriple(N);
@@ -2348,11 +2384,11 @@ void gen_runarray76(stack *Stack)
{Stack->push<pair>(b); return;}
}
-#line 1961 "runarray.in"
+#line 1997 "runarray.in"
// realarray* _projection();
void gen_runarray77(stack *Stack)
{
-#line 1962 "runarray.in"
+#line 1998 "runarray.in"
#ifdef HAVE_GL
array *a=new array(14);
gl::projection P=gl::camera();
@@ -2389,161 +2425,161 @@ namespace trans {
void gen_runarray_venv(venv &ve)
{
-#line 549 "runarray.in"
+#line 585 "runarray.in"
REGISTER_BLTIN(run::emptyArray,"emptyArray");
-#line 555 "runarray.in"
+#line 591 "runarray.in"
REGISTER_BLTIN(run::newDeepArray,"newDeepArray");
-#line 577 "runarray.in"
+#line 613 "runarray.in"
REGISTER_BLTIN(run::newInitializedArray,"newInitializedArray");
-#line 592 "runarray.in"
+#line 628 "runarray.in"
REGISTER_BLTIN(run::newAppendedArray,"newAppendedArray");
-#line 608 "runarray.in"
+#line 644 "runarray.in"
REGISTER_BLTIN(run::copyArrayValue,"copyArrayValue");
-#line 620 "runarray.in"
+#line 656 "runarray.in"
REGISTER_BLTIN(run::copyArray,"copyArray");
-#line 631 "runarray.in"
+#line 667 "runarray.in"
REGISTER_BLTIN(run::arrayRead,"arrayRead");
-#line 643 "runarray.in"
+#line 679 "runarray.in"
REGISTER_BLTIN(run::arraySliceRead,"arraySliceRead");
-#line 650 "runarray.in"
+#line 686 "runarray.in"
REGISTER_BLTIN(run::arraySliceReadToEnd,"arraySliceReadToEnd");
-#line 658 "runarray.in"
+#line 694 "runarray.in"
REGISTER_BLTIN(run::arrayArrayRead,"arrayArrayRead");
-#line 667 "runarray.in"
+#line 703 "runarray.in"
REGISTER_BLTIN(run::arrayWrite,"arrayWrite");
-#line 684 "runarray.in"
+#line 720 "runarray.in"
REGISTER_BLTIN(run::arraySliceWrite,"arraySliceWrite");
-#line 692 "runarray.in"
+#line 728 "runarray.in"
REGISTER_BLTIN(run::arraySliceWriteToEnd,"arraySliceWriteToEnd");
-#line 700 "runarray.in"
+#line 736 "runarray.in"
REGISTER_BLTIN(run::arrayLength,"arrayLength");
-#line 706 "runarray.in"
+#line 742 "runarray.in"
REGISTER_BLTIN(run::arrayKeys,"arrayKeys");
-#line 721 "runarray.in"
+#line 757 "runarray.in"
REGISTER_BLTIN(run::arrayCyclicFlag,"arrayCyclicFlag");
-#line 728 "runarray.in"
+#line 764 "runarray.in"
REGISTER_BLTIN(run::arraySetCyclicFlag,"arraySetCyclicFlag");
-#line 735 "runarray.in"
+#line 771 "runarray.in"
REGISTER_BLTIN(run::arrayInitializedHelper,"arrayInitializedHelper");
-#line 746 "runarray.in"
+#line 782 "runarray.in"
REGISTER_BLTIN(run::arrayInitialized,"arrayInitialized");
-#line 752 "runarray.in"
+#line 788 "runarray.in"
REGISTER_BLTIN(run::arrayCyclicHelper,"arrayCyclicHelper");
-#line 759 "runarray.in"
+#line 795 "runarray.in"
REGISTER_BLTIN(run::arrayCyclic,"arrayCyclic");
-#line 765 "runarray.in"
+#line 801 "runarray.in"
REGISTER_BLTIN(run::arrayPushHelper,"arrayPushHelper");
-#line 773 "runarray.in"
+#line 809 "runarray.in"
REGISTER_BLTIN(run::arrayPush,"arrayPush");
-#line 779 "runarray.in"
+#line 815 "runarray.in"
REGISTER_BLTIN(run::arrayAppendHelper,"arrayAppendHelper");
-#line 788 "runarray.in"
+#line 824 "runarray.in"
REGISTER_BLTIN(run::arrayAppend,"arrayAppend");
-#line 794 "runarray.in"
+#line 830 "runarray.in"
REGISTER_BLTIN(run::arrayPopHelper,"arrayPopHelper");
-#line 803 "runarray.in"
+#line 839 "runarray.in"
REGISTER_BLTIN(run::arrayPop,"arrayPop");
-#line 809 "runarray.in"
+#line 845 "runarray.in"
REGISTER_BLTIN(run::arrayInsertHelper,"arrayInsertHelper");
-#line 820 "runarray.in"
+#line 856 "runarray.in"
REGISTER_BLTIN(run::arrayInsert,"arrayInsert");
-#line 826 "runarray.in"
+#line 862 "runarray.in"
REGISTER_BLTIN(run::arrayDelete,"arrayDelete");
-#line 832 "runarray.in"
+#line 868 "runarray.in"
REGISTER_BLTIN(run::arrayAlias,"arrayAlias");
-#line 837 "runarray.in"
+#line 873 "runarray.in"
REGISTER_BLTIN(run::arrayIntArray,"arrayIntArray");
-#line 855 "runarray.in"
+#line 891 "runarray.in"
addFunc(ve, run::gen_runarray32, IntArray(), SYM(complement), formal(IntArray(), SYM(a), false, false), formal(primInt(), SYM(n), false, false));
-#line 874 "runarray.in"
+#line 910 "runarray.in"
REGISTER_BLTIN(run::arraySequence,"arraySequence");
-#line 887 "runarray.in"
+#line 923 "runarray.in"
addFunc(ve, run::gen_runarray34, IntArray(), SYM(sequence), formal(primInt(), SYM(n), false, false));
-#line 898 "runarray.in"
+#line 934 "runarray.in"
REGISTER_BLTIN(run::arrayFunction,"arrayFunction");
-#line 911 "runarray.in"
+#line 947 "runarray.in"
REGISTER_BLTIN(run::arraySort,"arraySort");
-#line 921 "runarray.in"
+#line 957 "runarray.in"
REGISTER_BLTIN(run::arraySearch,"arraySearch");
-#line 940 "runarray.in"
+#line 976 "runarray.in"
addFunc(ve, run::gen_runarray38, primBoolean(), SYM(all), formal(booleanArray(), SYM(a), false, false));
-#line 949 "runarray.in"
+#line 985 "runarray.in"
addFunc(ve, run::gen_runarray39, booleanArray(), SYM_LOGNOT, formal(booleanArray(), SYM(a), false, false));
-#line 958 "runarray.in"
+#line 994 "runarray.in"
addFunc(ve, run::gen_runarray40, primInt(), SYM(sum), formal(booleanArray(), SYM(a), false, false));
-#line 967 "runarray.in"
+#line 1003 "runarray.in"
REGISTER_BLTIN(run::arrayConcat,"arrayConcat");
-#line 995 "runarray.in"
+#line 1031 "runarray.in"
REGISTER_BLTIN(run::array2Transpose,"array2Transpose");
-#line 1019 "runarray.in"
+#line 1055 "runarray.in"
REGISTER_BLTIN(run::array3Transpose,"array3Transpose");
-#line 1106 "runarray.in"
+#line 1142 "runarray.in"
addFunc(ve, run::gen_runarray44, primInt(), SYM(find), formal(booleanArray(), SYM(a), false, false), formal(primInt(), SYM(n), true, false));
-#line 1125 "runarray.in"
+#line 1161 "runarray.in"
addFunc(ve, run::gen_runarray45, IntArray(), SYM(findall), formal(booleanArray(), SYM(a), false, false));
-#line 1138 "runarray.in"
+#line 1174 "runarray.in"
REGISTER_BLTIN(run::arrayConditional,"arrayConditional");
-#line 1164 "runarray.in"
+#line 1200 "runarray.in"
addFunc(ve, run::gen_runarray47, realArray2(), SYM(identity), formal(primInt(), SYM(n), false, false));
-#line 1170 "runarray.in"
+#line 1206 "runarray.in"
addFunc(ve, run::gen_runarray48, realArray2(), SYM(inverse), formal(realArray2(), SYM(a), false, false));
-#line 1182 "runarray.in"
+#line 1218 "runarray.in"
addFunc(ve, run::gen_runarray49, realArray(), SYM(solve), formal(realArray2(), SYM(a), false, false), formal(realArray(), SYM(b), false, false), formal(primBoolean(), SYM(warn), true, false));
-#line 1235 "runarray.in"
+#line 1271 "runarray.in"
addFunc(ve, run::gen_runarray50, realArray2(), SYM(solve), formal(realArray2(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false), formal(primBoolean(), SYM(warn), true, false));
-#line 1300 "runarray.in"
+#line 1336 "runarray.in"
addFunc(ve, run::gen_runarray51, primReal(), SYM(determinant), formal(realArray2(), SYM(a), false, false));
-#line 1317 "runarray.in"
+#line 1353 "runarray.in"
addFunc(ve, run::gen_runarray52, realArray(), SYM_TIMES, formal(realArray2(), SYM(a), false, false), formal(realArray(), SYM(b), false, false));
-#line 1336 "runarray.in"
+#line 1372 "runarray.in"
addFunc(ve, run::gen_runarray53, realArray(), SYM_TIMES, formal(realArray(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false));
-#line 1365 "runarray.in"
+#line 1401 "runarray.in"
addFunc(ve, run::gen_runarray54, IntArray2(), SYM_TIMES, formal(IntArray2(), SYM(a), false, false), formal(IntArray2(), SYM(b), false, false));
-#line 1370 "runarray.in"
+#line 1406 "runarray.in"
addFunc(ve, run::gen_runarray55, realArray2(), SYM_TIMES, formal(realArray2(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false));
-#line 1375 "runarray.in"
+#line 1411 "runarray.in"
addFunc(ve, run::gen_runarray56, pairArray2(), SYM_TIMES, formal(pairArray2(), SYM(a), false, false), formal(pairArray2(), SYM(b), false, false));
-#line 1380 "runarray.in"
+#line 1416 "runarray.in"
addFunc(ve, run::gen_runarray57, primTriple(), SYM_TIMES, formal(realArray2(), SYM(t), false, false), formal(primTriple(), SYM(v), false, false));
-#line 1385 "runarray.in"
+#line 1421 "runarray.in"
addFunc(ve, run::gen_runarray58, realArray2(), SYM(AtA), formal(realArray2(), SYM(a), false, false));
-#line 1390 "runarray.in"
+#line 1426 "runarray.in"
addFunc(ve, run::gen_runarray59, primPair(), SYM(project), formal(primTriple(), SYM(v), false, false), formal(realArray2(), SYM(t), false, false));
-#line 1415 "runarray.in"
+#line 1451 "runarray.in"
addFunc(ve, run::gen_runarray60, primReal(), SYM(dot), formal(realArray(), SYM(a), false, false), formal(realArray(), SYM(b), false, false));
-#line 1425 "runarray.in"
+#line 1461 "runarray.in"
addFunc(ve, run::gen_runarray61, primPair(), SYM(dot), formal(pairArray(), SYM(a), false, false), formal(pairArray(), SYM(b), false, false));
-#line 1435 "runarray.in"
+#line 1471 "runarray.in"
addFunc(ve, run::gen_runarray62, realArray(), SYM(tridiagonal), formal(realArray(), SYM(a), false, false), formal(realArray(), SYM(b), false, false), formal(realArray(), SYM(c), false, false), formal(realArray(), SYM(f), false, false));
-#line 1539 "runarray.in"
+#line 1575 "runarray.in"
addFunc(ve, run::gen_runarray63, primReal(), SYM(newton), formal(primInt(), SYM(iterations), true, false), formal(realRealFunction(), SYM(f), false, false), formal(realRealFunction(), SYM(fprime), false, false), formal(primReal(), SYM(x), false, false), formal(primBoolean(), SYM(verbose), true, false));
-#line 1586 "runarray.in"
+#line 1622 "runarray.in"
addFunc(ve, run::gen_runarray64, primReal(), SYM(newton), formal(primInt(), SYM(iterations), true, false), formal(realRealFunction(), SYM(f), false, false), formal(realRealFunction(), SYM(fprime), false, false), formal(primReal(), SYM(x1), false, false), formal(primReal(), SYM(x2), false, false), formal(primBoolean(), SYM(verbose), true, false));
-#line 1668 "runarray.in"
+#line 1704 "runarray.in"
addFunc(ve, run::gen_runarray65, primReal(), SYM(_findroot), formal(realRealFunction(), SYM(f), false, false), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(tolerance), false, false), formal(primReal(), SYM(fa), false, false), formal(primReal(), SYM(fb), false, false));
-#line 1770 "runarray.in"
+#line 1806 "runarray.in"
addFunc(ve, run::gen_runarray66, primReal(), SYM(simpson), formal(realRealFunction(), SYM(f), false, false), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(acc), true, false), formal(primReal(), SYM(dxmax), true, false));
-#line 1784 "runarray.in"
+#line 1820 "runarray.in"
addFunc(ve, run::gen_runarray67, pairArray(), SYM(fft), formal(pairArray(), SYM(a), false, false), formal(primInt(), SYM(sign), true, false));
-#line 1815 "runarray.in"
+#line 1851 "runarray.in"
addFunc(ve, run::gen_runarray68, IntArray2(), SYM(triangulate), formal(pairArray(), SYM(z), false, false));
-#line 1850 "runarray.in"
+#line 1886 "runarray.in"
addFunc(ve, run::gen_runarray69, primReal(), SYM(norm), formal(realArray(), SYM(a), false, false));
-#line 1861 "runarray.in"
+#line 1897 "runarray.in"
addFunc(ve, run::gen_runarray70, primReal(), SYM(norm), formal(realArray2(), SYM(a), false, false));
-#line 1876 "runarray.in"
+#line 1912 "runarray.in"
addFunc(ve, run::gen_runarray71, primReal(), SYM(norm), formal(tripleArray2(), SYM(a), false, false));
-#line 1891 "runarray.in"
+#line 1927 "runarray.in"
addFunc(ve, run::gen_runarray72, primReal(), SYM(change2), formal(tripleArray2(), SYM(a), false, false));
-#line 1913 "runarray.in"
+#line 1949 "runarray.in"
addFunc(ve, run::gen_runarray73, primTriple(), SYM(minbezier), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(b), false, false));
-#line 1925 "runarray.in"
+#line 1961 "runarray.in"
addFunc(ve, run::gen_runarray74, primTriple(), SYM(maxbezier), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(b), false, false));
-#line 1937 "runarray.in"
+#line 1973 "runarray.in"
addFunc(ve, run::gen_runarray75, primPair(), SYM(minratio), formal(tripleArray2(), SYM(p), false, false), formal(primPair(), SYM(b), false, false));
-#line 1949 "runarray.in"
+#line 1985 "runarray.in"
addFunc(ve, run::gen_runarray76, primPair(), SYM(maxratio), formal(tripleArray2(), SYM(p), false, false), formal(primPair(), SYM(b), false, false));
-#line 1961 "runarray.in"
+#line 1997 "runarray.in"
addFunc(ve, run::gen_runarray77, realArray(), SYM(_projection));
}
diff --git a/graphics/asymptote/runarray.in b/graphics/asymptote/runarray.in
index 10469aac7a..b68ac0c573 100644
--- a/graphics/asymptote/runarray.in
+++ b/graphics/asymptote/runarray.in
@@ -347,8 +347,44 @@ void transpose(double *a, size_t n)
}
// Invert an n x n array in place.
-void inverse(double *a, size_t n)
+void inverse(double *M, size_t n)
{
+ if(n == 2) {
+ real a=M[0];
+ real b=M[1];
+ real c=M[2];
+ real d=M[3];
+ real det=a*d-b*c;
+ if(det == 0.0)
+ error(singular);
+ det=1.0/det;
+ M[0]=d*det;
+ M[1]=-b*det;
+ M[2]=-c*det;
+ M[3]=a*det;
+ return;
+ }
+
+ if(n == 3) {
+ real a=M[0], b=M[1], c=M[2];
+ real d=M[3], e=M[4], f=M[5];
+ real g=M[6], h=M[7], i=M[8];
+
+ real A=e*i-f*h;
+ real B=f*g-d*i;
+ real C=d*h-e*g;
+
+ real det=a*A+b*B+c*C;
+ if(det == 0.0)
+ error(singular);
+ det=1.0/det;
+
+ M[0]=A*det; M[1]=(c*h-b*i)*det; M[2]=(b*f-c*e)*det;
+ M[3]=B*det; M[4]=(a*i-c*g)*det; M[5]=(c*d-a*f)*det;
+ M[6]=C*det; M[7]=(b*g-a*h)*det; M[8]=(a*e-b*d)*det;
+ return;
+ }
+
inverseAllocate(n);
for(size_t i=0; i < n; i++)
@@ -360,7 +396,7 @@ void inverse(double *a, size_t n)
real big=0.0;
// This is the outer loop of the search for a pivot element.
for(size_t j=0; j < n; j++) {
- double *aj=a+n*j;
+ double *aj=M+n*j;
if(pivot[j] != 1) {
for(size_t k=0; k < n; k++) {
if(pivot[k] == 0) {
@@ -380,9 +416,9 @@ void inverse(double *a, size_t n)
++(pivot[col]);
// Interchange rows, if needed, to put the pivot element on the diagonal.
- double *acol=a+n*col;
+ double *acol=M+n*col;
if(row != col) {
- double *arow=a+n*row;
+ double *arow=M+n*row;
for(size_t k=0; k < n; k++) {
real temp=arow[k];
arow[k]=acol[k];
@@ -407,7 +443,7 @@ void inverse(double *a, size_t n)
// Reduce all rows except for the pivoted one.
for(size_t k=0; k < n; k++) {
if(k != col) {
- double *ak=a+n*k;
+ double *ak=M+n*k;
real akcol=ak[col];
ak[col]=0.0;
for(size_t j=0; j < n; j++)
@@ -423,7 +459,7 @@ void inverse(double *a, size_t n)
size_t c=Col[k];
if(r != c) {
for(size_t j=0; j < n; j++) {
- double *aj=a+n*j;
+ double *aj=M+n*j;
real temp=aj[r];
aj[r]=aj[c];
aj[c]=temp;
diff --git a/graphics/asymptote/runmath.cc b/graphics/asymptote/runmath.cc
index d9686dc80c..73854167c4 100644
--- a/graphics/asymptote/runmath.cc
+++ b/graphics/asymptote/runmath.cc
@@ -185,21 +185,16 @@ unsigned long long bitreverse64(unsigned long long a)
((unsigned long long) BitReverseTable8[(a >> 56)]);
}
-// From Warren, Jr., Henry S. (2013) [2002]. Hacker's Delight (2 ed.).
-// Addison Wesley - Pearson Education, Inc. pp. 81-96.
-Int popcount(Int a)
+// https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
+#define T unsignedInt
+Int popcount(T a)
{
- const uint64_t m1 = 0x5555555555555555; //binary: 0101...
- const uint64_t m2 = 0x3333333333333333; //binary: 00110011..
- const uint64_t m4 = 0x0f0f0f0f0f0f0f0f; //binary: 4 zeros, 4 ones ...
- const uint64_t h01 = 0x0101010101010101; //the sum of 256 to the power of 0,1,2,3...
-
-// This algorithm uses 12 arithmetic operations, one of which is a multiply.
- a -= (a >> 1) & m1; //put count of each 2 bits into those 2 bits
- a=(a & m2)+((a >> 2) & m2); //put count of each 4 bits into those 4 bits
- a=(a+(a >> 4)) & m4; //put count of each 8 bits into those 8 bits
- return (a * h01) >> 56; //returns left 8 bits of a+(a << 8)+(a << 16)+(a << 24)+...
+ a=a-((a >> 1) & (T)~(T)0/3);
+ a=(a & (T)~(T)0/15*3)+((a >> 2) & (T)~(T)0/15*3);
+ a=(a+(a >> 4)) & (T)~(T)0/255*15;
+return (T)(a*((T)~(T)0/255)) >> (sizeof(T)-1)*CHAR_BIT;
}
+#undef T
// Return the factorial of a non-negative integer using a lookup table.
Int factorial(Int n)
@@ -251,233 +246,233 @@ void Srand(Int seed)
#endif
namespace run {
-#line 195 "runmath.in"
+#line 190 "runmath.in"
// real ^(real x, Int y);
void gen_runmath0(stack *Stack)
{
Int y=vm::pop<Int>(Stack);
real x=vm::pop<real>(Stack);
-#line 196 "runmath.in"
+#line 191 "runmath.in"
{Stack->push<real>(pow(x,y)); return;}
}
-#line 200 "runmath.in"
+#line 195 "runmath.in"
// pair ^(pair z, Int y);
void gen_runmath1(stack *Stack)
{
Int y=vm::pop<Int>(Stack);
pair z=vm::pop<pair>(Stack);
-#line 201 "runmath.in"
+#line 196 "runmath.in"
{Stack->push<pair>(pow(z,y)); return;}
}
-#line 205 "runmath.in"
+#line 200 "runmath.in"
// Int quotient(Int x, Int y);
void gen_runmath2(stack *Stack)
{
Int y=vm::pop<Int>(Stack);
Int x=vm::pop<Int>(Stack);
-#line 206 "runmath.in"
+#line 201 "runmath.in"
{Stack->push<Int>(quotient<Int>()(x,y)); return;}
}
-#line 210 "runmath.in"
+#line 205 "runmath.in"
// Int abs(Int x);
void gen_runmath3(stack *Stack)
{
Int x=vm::pop<Int>(Stack);
-#line 211 "runmath.in"
+#line 206 "runmath.in"
{Stack->push<Int>(Abs(x)); return;}
}
-#line 215 "runmath.in"
+#line 210 "runmath.in"
// Int sgn(real x);
void gen_runmath4(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 216 "runmath.in"
+#line 211 "runmath.in"
{Stack->push<Int>(sgn(x)); return;}
}
-#line 220 "runmath.in"
+#line 215 "runmath.in"
// Int rand();
void gen_runmath5(stack *Stack)
{
-#line 221 "runmath.in"
+#line 216 "runmath.in"
if(initializeRandom)
Srand(1);
{Stack->push<Int>(random()); return;}
}
-#line 227 "runmath.in"
+#line 222 "runmath.in"
// void srand(Int seed);
void gen_runmath6(stack *Stack)
{
Int seed=vm::pop<Int>(Stack);
-#line 228 "runmath.in"
+#line 223 "runmath.in"
Srand(seed);
}
// a random number uniformly distributed in the interval [0,1]
-#line 233 "runmath.in"
+#line 228 "runmath.in"
// real unitrand();
void gen_runmath7(stack *Stack)
{
-#line 234 "runmath.in"
+#line 229 "runmath.in"
{Stack->push<real>(((real) random())/RANDOM_MAX); return;}
}
-#line 238 "runmath.in"
+#line 233 "runmath.in"
// Int ceil(real x);
void gen_runmath8(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 239 "runmath.in"
+#line 234 "runmath.in"
{Stack->push<Int>(Intcast(ceil(x))); return;}
}
-#line 243 "runmath.in"
+#line 238 "runmath.in"
// Int floor(real x);
void gen_runmath9(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 244 "runmath.in"
+#line 239 "runmath.in"
{Stack->push<Int>(Intcast(floor(x))); return;}
}
-#line 248 "runmath.in"
+#line 243 "runmath.in"
// Int round(real x);
void gen_runmath10(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 249 "runmath.in"
+#line 244 "runmath.in"
if(validInt(x)) {Stack->push<Int>(Round(x)); return;}
integeroverflow(0);
}
-#line 254 "runmath.in"
+#line 249 "runmath.in"
// Int Ceil(real x);
void gen_runmath11(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 255 "runmath.in"
+#line 250 "runmath.in"
{Stack->push<Int>(Ceil(x)); return;}
}
-#line 259 "runmath.in"
+#line 254 "runmath.in"
// Int Floor(real x);
void gen_runmath12(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 260 "runmath.in"
+#line 255 "runmath.in"
{Stack->push<Int>(Floor(x)); return;}
}
-#line 264 "runmath.in"
+#line 259 "runmath.in"
// Int Round(real x);
void gen_runmath13(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 265 "runmath.in"
+#line 260 "runmath.in"
{Stack->push<Int>(Round(Intcap(x))); return;}
}
-#line 269 "runmath.in"
+#line 264 "runmath.in"
// real fmod(real x, real y);
void gen_runmath14(stack *Stack)
{
real y=vm::pop<real>(Stack);
real x=vm::pop<real>(Stack);
-#line 270 "runmath.in"
+#line 265 "runmath.in"
if (y == 0.0) dividebyzero();
{Stack->push<real>(fmod(x,y)); return;}
}
-#line 275 "runmath.in"
+#line 270 "runmath.in"
// real atan2(real y, real x);
void gen_runmath15(stack *Stack)
{
real x=vm::pop<real>(Stack);
real y=vm::pop<real>(Stack);
-#line 276 "runmath.in"
+#line 271 "runmath.in"
{Stack->push<real>(atan2(y,x)); return;}
}
-#line 280 "runmath.in"
+#line 275 "runmath.in"
// real hypot(real x, real y);
void gen_runmath16(stack *Stack)
{
real y=vm::pop<real>(Stack);
real x=vm::pop<real>(Stack);
-#line 281 "runmath.in"
+#line 276 "runmath.in"
{Stack->push<real>(hypot(x,y)); return;}
}
-#line 285 "runmath.in"
+#line 280 "runmath.in"
// real remainder(real x, real y);
void gen_runmath17(stack *Stack)
{
real y=vm::pop<real>(Stack);
real x=vm::pop<real>(Stack);
-#line 286 "runmath.in"
+#line 281 "runmath.in"
{Stack->push<real>(remainder(x,y)); return;}
}
-#line 290 "runmath.in"
+#line 285 "runmath.in"
// real Jn(Int n, real x);
void gen_runmath18(stack *Stack)
{
real x=vm::pop<real>(Stack);
Int n=vm::pop<Int>(Stack);
-#line 291 "runmath.in"
+#line 286 "runmath.in"
{Stack->push<real>(jn(n,x)); return;}
}
-#line 295 "runmath.in"
+#line 290 "runmath.in"
// real Yn(Int n, real x);
void gen_runmath19(stack *Stack)
{
real x=vm::pop<real>(Stack);
Int n=vm::pop<Int>(Stack);
-#line 296 "runmath.in"
+#line 291 "runmath.in"
{Stack->push<real>(yn(n,x)); return;}
}
-#line 300 "runmath.in"
+#line 295 "runmath.in"
// real erf(real x);
void gen_runmath20(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 301 "runmath.in"
+#line 296 "runmath.in"
{Stack->push<real>(erf(x)); return;}
}
-#line 305 "runmath.in"
+#line 300 "runmath.in"
// real erfc(real x);
void gen_runmath21(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 306 "runmath.in"
+#line 301 "runmath.in"
{Stack->push<real>(erfc(x)); return;}
}
-#line 310 "runmath.in"
+#line 305 "runmath.in"
// Int factorial(Int n);
void gen_runmath22(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
-#line 311 "runmath.in"
+#line 306 "runmath.in"
if(n < 0) error(invalidargument);
{Stack->push<Int>(factorial(n)); return;}
}
-#line 315 "runmath.in"
+#line 310 "runmath.in"
// Int choose(Int n, Int k);
void gen_runmath23(stack *Stack)
{
Int k=vm::pop<Int>(Stack);
Int n=vm::pop<Int>(Stack);
-#line 316 "runmath.in"
+#line 311 "runmath.in"
if(n < 0 || k < 0 || k > n) error(invalidargument);
Int f=1;
Int r=n-k;
@@ -488,12 +483,12 @@ void gen_runmath23(stack *Stack)
{Stack->push<Int>(f); return;}
}
-#line 326 "runmath.in"
+#line 321 "runmath.in"
// real gamma(real x);
void gen_runmath24(stack *Stack)
{
real x=vm::pop<real>(Stack);
-#line 327 "runmath.in"
+#line 322 "runmath.in"
#ifdef HAVE_TGAMMA
{Stack->push<real>(tgamma(x)); return;}
#else
@@ -502,14 +497,14 @@ void gen_runmath24(stack *Stack)
#endif
}
-#line 336 "runmath.in"
+#line 331 "runmath.in"
// realarray* quadraticroots(real a, real b, real c);
void gen_runmath25(stack *Stack)
{
real c=vm::pop<real>(Stack);
real b=vm::pop<real>(Stack);
real a=vm::pop<real>(Stack);
-#line 337 "runmath.in"
+#line 332 "runmath.in"
quadraticroots q(a,b,c);
array *roots=new array(q.roots);
if(q.roots >= 1) (*roots)[0]=q.t1;
@@ -517,14 +512,14 @@ void gen_runmath25(stack *Stack)
{Stack->push<realarray*>(roots); return;}
}
-#line 345 "runmath.in"
+#line 340 "runmath.in"
// pairarray* quadraticroots(explicit pair a, explicit pair b, explicit pair c);
void gen_runmath26(stack *Stack)
{
pair c=vm::pop<pair>(Stack);
pair b=vm::pop<pair>(Stack);
pair a=vm::pop<pair>(Stack);
-#line 346 "runmath.in"
+#line 341 "runmath.in"
Quadraticroots q(a,b,c);
array *roots=new array(q.roots);
if(q.roots >= 1) (*roots)[0]=q.z1;
@@ -532,7 +527,7 @@ void gen_runmath26(stack *Stack)
{Stack->push<pairarray*>(roots); return;}
}
-#line 354 "runmath.in"
+#line 349 "runmath.in"
// realarray* cubicroots(real a, real b, real c, real d);
void gen_runmath27(stack *Stack)
{
@@ -540,7 +535,7 @@ void gen_runmath27(stack *Stack)
real c=vm::pop<real>(Stack);
real b=vm::pop<real>(Stack);
real a=vm::pop<real>(Stack);
-#line 355 "runmath.in"
+#line 350 "runmath.in"
cubicroots q(a,b,c,d);
array *roots=new array(q.roots);
if(q.roots >= 1) (*roots)[0]=q.t1;
@@ -551,98 +546,98 @@ void gen_runmath27(stack *Stack)
// Logical operations
-#line 366 "runmath.in"
+#line 361 "runmath.in"
// bool !(bool b);
void gen_runmath28(stack *Stack)
{
bool b=vm::pop<bool>(Stack);
-#line 367 "runmath.in"
+#line 362 "runmath.in"
{Stack->push<bool>(!b); return;}
}
-#line 372 "runmath.in"
+#line 367 "runmath.in"
void boolMemEq(stack *Stack)
{
frame * b=vm::pop<frame *>(Stack);
frame * a=vm::pop<frame *>(Stack);
-#line 373 "runmath.in"
+#line 368 "runmath.in"
{Stack->push<bool>(a == b); return;}
}
-#line 377 "runmath.in"
+#line 372 "runmath.in"
void boolMemNeq(stack *Stack)
{
frame * b=vm::pop<frame *>(Stack);
frame * a=vm::pop<frame *>(Stack);
-#line 378 "runmath.in"
+#line 373 "runmath.in"
{Stack->push<bool>(a != b); return;}
}
-#line 382 "runmath.in"
+#line 377 "runmath.in"
void boolFuncEq(stack *Stack)
{
callable * b=vm::pop<callable *>(Stack);
callable * a=vm::pop<callable *>(Stack);
-#line 383 "runmath.in"
+#line 378 "runmath.in"
{Stack->push<bool>(a->compare(b)); return;}
}
-#line 387 "runmath.in"
+#line 382 "runmath.in"
void boolFuncNeq(stack *Stack)
{
callable * b=vm::pop<callable *>(Stack);
callable * a=vm::pop<callable *>(Stack);
-#line 388 "runmath.in"
+#line 383 "runmath.in"
{Stack->push<bool>(!(a->compare(b))); return;}
}
// Bit operations
-#line 394 "runmath.in"
+#line 389 "runmath.in"
// Int AND(Int a, Int b);
void gen_runmath33(stack *Stack)
{
Int b=vm::pop<Int>(Stack);
Int a=vm::pop<Int>(Stack);
-#line 395 "runmath.in"
+#line 390 "runmath.in"
{Stack->push<Int>(a & b); return;}
}
-#line 400 "runmath.in"
+#line 395 "runmath.in"
// Int OR(Int a, Int b);
void gen_runmath34(stack *Stack)
{
Int b=vm::pop<Int>(Stack);
Int a=vm::pop<Int>(Stack);
-#line 401 "runmath.in"
+#line 396 "runmath.in"
{Stack->push<Int>(a | b); return;}
}
-#line 405 "runmath.in"
+#line 400 "runmath.in"
// Int XOR(Int a, Int b);
void gen_runmath35(stack *Stack)
{
Int b=vm::pop<Int>(Stack);
Int a=vm::pop<Int>(Stack);
-#line 406 "runmath.in"
+#line 401 "runmath.in"
{Stack->push<Int>(a ^ b); return;}
}
-#line 410 "runmath.in"
+#line 405 "runmath.in"
// Int NOT(Int a);
void gen_runmath36(stack *Stack)
{
Int a=vm::pop<Int>(Stack);
-#line 411 "runmath.in"
+#line 406 "runmath.in"
{Stack->push<Int>(~a); return;}
}
-#line 415 "runmath.in"
+#line 410 "runmath.in"
// Int CLZ(Int a);
void gen_runmath37(stack *Stack)
{
Int a=vm::pop<Int>(Stack);
-#line 416 "runmath.in"
+#line 411 "runmath.in"
if((unsigned long long) a > 0xFFFFFFFF)
{Stack->push<Int>(CLZ((uint32_t) ((unsigned long long) a >> 32))); return;}
else {
@@ -652,32 +647,32 @@ void gen_runmath37(stack *Stack)
}
}
-#line 426 "runmath.in"
+#line 421 "runmath.in"
// Int popcount(Int a);
void gen_runmath38(stack *Stack)
{
Int a=vm::pop<Int>(Stack);
-#line 427 "runmath.in"
+#line 422 "runmath.in"
{Stack->push<Int>(popcount(a)); return;}
}
-#line 431 "runmath.in"
+#line 426 "runmath.in"
// Int CTZ(Int a);
void gen_runmath39(stack *Stack)
{
Int a=vm::pop<Int>(Stack);
-#line 432 "runmath.in"
+#line 427 "runmath.in"
{Stack->push<Int>(popcount((a&-a)-1)); return;}
}
// bitreverse a within a word of length bits.
-#line 437 "runmath.in"
+#line 432 "runmath.in"
// Int bitreverse(Int a, Int bits);
void gen_runmath40(stack *Stack)
{
Int bits=vm::pop<Int>(Stack);
Int a=vm::pop<Int>(Stack);
-#line 438 "runmath.in"
+#line 433 "runmath.in"
typedef unsigned long long Bitreverse(unsigned long long a);
static Bitreverse *B[]={bitreverse8,bitreverse16,bitreverse24,bitreverse32,
bitreverse40,bitreverse48,bitreverse56,bitreverse64};
@@ -698,87 +693,87 @@ namespace trans {
void gen_runmath_venv(venv &ve)
{
-#line 195 "runmath.in"
+#line 190 "runmath.in"
addFunc(ve, run::gen_runmath0, primReal(), SYM_CARET, formal(primReal(), SYM(x), false, false), formal(primInt(), SYM(y), false, false));
-#line 200 "runmath.in"
+#line 195 "runmath.in"
addFunc(ve, run::gen_runmath1, primPair(), SYM_CARET, formal(primPair(), SYM(z), false, false), formal(primInt(), SYM(y), false, false));
-#line 205 "runmath.in"
+#line 200 "runmath.in"
addFunc(ve, run::gen_runmath2, primInt(), SYM(quotient), formal(primInt(), SYM(x), false, false), formal(primInt(), SYM(y), false, false));
-#line 210 "runmath.in"
+#line 205 "runmath.in"
addFunc(ve, run::gen_runmath3, primInt(), SYM(abs), formal(primInt(), SYM(x), false, false));
-#line 215 "runmath.in"
+#line 210 "runmath.in"
addFunc(ve, run::gen_runmath4, primInt(), SYM(sgn), formal(primReal(), SYM(x), false, false));
-#line 220 "runmath.in"
+#line 215 "runmath.in"
addFunc(ve, run::gen_runmath5, primInt(), SYM(rand));
-#line 227 "runmath.in"
+#line 222 "runmath.in"
addFunc(ve, run::gen_runmath6, primVoid(), SYM(srand), formal(primInt(), SYM(seed), false, false));
-#line 232 "runmath.in"
+#line 227 "runmath.in"
addFunc(ve, run::gen_runmath7, primReal(), SYM(unitrand));
-#line 238 "runmath.in"
+#line 233 "runmath.in"
addFunc(ve, run::gen_runmath8, primInt(), SYM(ceil), formal(primReal(), SYM(x), false, false));
-#line 243 "runmath.in"
+#line 238 "runmath.in"
addFunc(ve, run::gen_runmath9, primInt(), SYM(floor), formal(primReal(), SYM(x), false, false));
-#line 248 "runmath.in"
+#line 243 "runmath.in"
addFunc(ve, run::gen_runmath10, primInt(), SYM(round), formal(primReal(), SYM(x), false, false));
-#line 254 "runmath.in"
+#line 249 "runmath.in"
addFunc(ve, run::gen_runmath11, primInt(), SYM(Ceil), formal(primReal(), SYM(x), false, false));
-#line 259 "runmath.in"
+#line 254 "runmath.in"
addFunc(ve, run::gen_runmath12, primInt(), SYM(Floor), formal(primReal(), SYM(x), false, false));
-#line 264 "runmath.in"
+#line 259 "runmath.in"
addFunc(ve, run::gen_runmath13, primInt(), SYM(Round), formal(primReal(), SYM(x), false, false));
-#line 269 "runmath.in"
+#line 264 "runmath.in"
addFunc(ve, run::gen_runmath14, primReal(), SYM(fmod), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false));
-#line 275 "runmath.in"
+#line 270 "runmath.in"
addFunc(ve, run::gen_runmath15, primReal(), SYM(atan2), formal(primReal(), SYM(y), false, false), formal(primReal(), SYM(x), false, false));
-#line 280 "runmath.in"
+#line 275 "runmath.in"
addFunc(ve, run::gen_runmath16, primReal(), SYM(hypot), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false));
-#line 285 "runmath.in"
+#line 280 "runmath.in"
addFunc(ve, run::gen_runmath17, primReal(), SYM(remainder), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false));
-#line 290 "runmath.in"
+#line 285 "runmath.in"
addFunc(ve, run::gen_runmath18, primReal(), SYM(Jn), formal(primInt(), SYM(n), false, false), formal(primReal(), SYM(x), false, false));
-#line 295 "runmath.in"
+#line 290 "runmath.in"
addFunc(ve, run::gen_runmath19, primReal(), SYM(Yn), formal(primInt(), SYM(n), false, false), formal(primReal(), SYM(x), false, false));
-#line 300 "runmath.in"
+#line 295 "runmath.in"
addFunc(ve, run::gen_runmath20, primReal(), SYM(erf), formal(primReal(), SYM(x), false, false));
-#line 305 "runmath.in"
+#line 300 "runmath.in"
addFunc(ve, run::gen_runmath21, primReal(), SYM(erfc), formal(primReal(), SYM(x), false, false));
-#line 310 "runmath.in"
+#line 305 "runmath.in"
addFunc(ve, run::gen_runmath22, primInt(), SYM(factorial), formal(primInt(), SYM(n), false, false));
-#line 315 "runmath.in"
+#line 310 "runmath.in"
addFunc(ve, run::gen_runmath23, primInt(), SYM(choose), formal(primInt(), SYM(n), false, false), formal(primInt(), SYM(k), false, false));
-#line 326 "runmath.in"
+#line 321 "runmath.in"
addFunc(ve, run::gen_runmath24, primReal(), SYM(gamma), formal(primReal(), SYM(x), false, false));
-#line 336 "runmath.in"
+#line 331 "runmath.in"
addFunc(ve, run::gen_runmath25, realArray(), SYM(quadraticroots), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(c), false, false));
-#line 345 "runmath.in"
+#line 340 "runmath.in"
addFunc(ve, run::gen_runmath26, pairArray(), SYM(quadraticroots), formal(primPair(), SYM(a), false, true), formal(primPair(), SYM(b), false, true), formal(primPair(), SYM(c), false, true));
-#line 354 "runmath.in"
+#line 349 "runmath.in"
addFunc(ve, run::gen_runmath27, realArray(), SYM(cubicroots), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(c), false, false), formal(primReal(), SYM(d), false, false));
-#line 364 "runmath.in"
+#line 359 "runmath.in"
addFunc(ve, run::gen_runmath28, primBoolean(), SYM_LOGNOT, formal(primBoolean(), SYM(b), false, false));
-#line 372 "runmath.in"
+#line 367 "runmath.in"
REGISTER_BLTIN(run::boolMemEq,"boolMemEq");
-#line 377 "runmath.in"
+#line 372 "runmath.in"
REGISTER_BLTIN(run::boolMemNeq,"boolMemNeq");
-#line 382 "runmath.in"
+#line 377 "runmath.in"
REGISTER_BLTIN(run::boolFuncEq,"boolFuncEq");
-#line 387 "runmath.in"
+#line 382 "runmath.in"
REGISTER_BLTIN(run::boolFuncNeq,"boolFuncNeq");
-#line 392 "runmath.in"
+#line 387 "runmath.in"
addFunc(ve, run::gen_runmath33, primInt(), SYM(AND), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false));
-#line 400 "runmath.in"
+#line 395 "runmath.in"
addFunc(ve, run::gen_runmath34, primInt(), SYM(OR), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false));
-#line 405 "runmath.in"
+#line 400 "runmath.in"
addFunc(ve, run::gen_runmath35, primInt(), SYM(XOR), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false));
-#line 410 "runmath.in"
+#line 405 "runmath.in"
addFunc(ve, run::gen_runmath36, primInt(), SYM(NOT), formal(primInt(), SYM(a), false, false));
-#line 415 "runmath.in"
+#line 410 "runmath.in"
addFunc(ve, run::gen_runmath37, primInt(), SYM(CLZ), formal(primInt(), SYM(a), false, false));
-#line 426 "runmath.in"
+#line 421 "runmath.in"
addFunc(ve, run::gen_runmath38, primInt(), SYM(popcount), formal(primInt(), SYM(a), false, false));
-#line 431 "runmath.in"
+#line 426 "runmath.in"
addFunc(ve, run::gen_runmath39, primInt(), SYM(CTZ), formal(primInt(), SYM(a), false, false));
-#line 436 "runmath.in"
+#line 431 "runmath.in"
addFunc(ve, run::gen_runmath40, primInt(), SYM(bitreverse), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(bits), false, false));
}
diff --git a/graphics/asymptote/runmath.in b/graphics/asymptote/runmath.in
index fa9dbf3e69..c1068ce217 100644
--- a/graphics/asymptote/runmath.in
+++ b/graphics/asymptote/runmath.in
@@ -132,21 +132,16 @@ unsigned long long bitreverse64(unsigned long long a)
((unsigned long long) BitReverseTable8[(a >> 56)]);
}
-// From Warren, Jr., Henry S. (2013) [2002]. Hacker's Delight (2 ed.).
-// Addison Wesley - Pearson Education, Inc. pp. 81-96.
-Int popcount(Int a)
-{
- const uint64_t m1 = 0x5555555555555555; //binary: 0101...
- const uint64_t m2 = 0x3333333333333333; //binary: 00110011..
- const uint64_t m4 = 0x0f0f0f0f0f0f0f0f; //binary: 4 zeros, 4 ones ...
- const uint64_t h01 = 0x0101010101010101; //the sum of 256 to the power of 0,1,2,3...
-
-// This algorithm uses 12 arithmetic operations, one of which is a multiply.
- a -= (a >> 1) & m1; //put count of each 2 bits into those 2 bits
- a=(a & m2)+((a >> 2) & m2); //put count of each 4 bits into those 4 bits
- a=(a+(a >> 4)) & m4; //put count of each 8 bits into those 8 bits
- return (a * h01) >> 56; //returns left 8 bits of a+(a << 8)+(a << 16)+(a << 24)+...
+// https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
+#define T unsignedInt
+Int popcount(T a)
+{
+ a=a-((a >> 1) & (T)~(T)0/3);
+ a=(a & (T)~(T)0/15*3)+((a >> 2) & (T)~(T)0/15*3);
+ a=(a+(a >> 4)) & (T)~(T)0/255*15;
+return (T)(a*((T)~(T)0/255)) >> (sizeof(T)-1)*CHAR_BIT;
}
+#undef T
// Return the factorial of a non-negative integer using a lookup table.
Int factorial(Int n)
diff --git a/graphics/asymptote/runpicture.cc b/graphics/asymptote/runpicture.cc
index d800347ffd..32e5037ab0 100644
--- a/graphics/asymptote/runpicture.cc
+++ b/graphics/asymptote/runpicture.cc
@@ -156,6 +156,8 @@ array *nop(array *a)
triple Zero;
+string defaultformat3="prc";
+
// Autogenerated routines:
@@ -165,71 +167,71 @@ triple Zero;
#endif
namespace run {
-#line 126 "runpicture.in"
+#line 128 "runpicture.in"
void newPicture(stack *Stack)
{
-#line 127 "runpicture.in"
+#line 129 "runpicture.in"
{Stack->push<picture*>(new picture()); return;}
}
-#line 131 "runpicture.in"
+#line 133 "runpicture.in"
// bool empty(picture *f);
void gen_runpicture1(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 132 "runpicture.in"
+#line 134 "runpicture.in"
{Stack->push<bool>(f->null()); return;}
}
-#line 136 "runpicture.in"
+#line 138 "runpicture.in"
// void erase(picture *f);
void gen_runpicture2(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 137 "runpicture.in"
+#line 139 "runpicture.in"
f->nodes.clear();
}
-#line 141 "runpicture.in"
+#line 143 "runpicture.in"
// pair min(picture *f);
void gen_runpicture3(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 142 "runpicture.in"
+#line 144 "runpicture.in"
{Stack->push<pair>(f->bounds().Min()); return;}
}
-#line 146 "runpicture.in"
+#line 148 "runpicture.in"
// pair max(picture *f);
void gen_runpicture4(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 147 "runpicture.in"
+#line 149 "runpicture.in"
{Stack->push<pair>(f->bounds().Max()); return;}
}
-#line 151 "runpicture.in"
+#line 153 "runpicture.in"
// pair size(picture *f);
void gen_runpicture5(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 152 "runpicture.in"
+#line 154 "runpicture.in"
bbox b=f->bounds();
{Stack->push<pair>(b.Max()-b.Min()); return;}
}
-#line 157 "runpicture.in"
+#line 159 "runpicture.in"
// void _draw(picture *f, path g, pen p);
void gen_runpicture6(stack *Stack)
{
pen p=vm::pop<pen>(Stack);
path g=vm::pop<path>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 158 "runpicture.in"
+#line 160 "runpicture.in"
f->append(new drawPath(g,p));
}
-#line 162 "runpicture.in"
+#line 164 "runpicture.in"
// void fill(picture *f, patharray *g, pen p=CURRENTPEN, bool copy=true);
void gen_runpicture7(stack *Stack)
{
@@ -237,12 +239,12 @@ void gen_runpicture7(stack *Stack)
pen p=vm::pop<pen>(Stack,CURRENTPEN);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 163 "runpicture.in"
+#line 165 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
f->append(new drawFill(*copyarray(g),false,p));
}
-#line 168 "runpicture.in"
+#line 170 "runpicture.in"
// void latticeshade(picture *f, patharray *g, bool stroke=false, pen fillrule=CURRENTPEN, penarray2 *p, transform t=identity, bool copy=true);
void gen_runpicture8(stack *Stack)
{
@@ -253,13 +255,13 @@ void gen_runpicture8(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 171 "runpicture.in"
+#line 173 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
f->append(new drawLatticeShade(*copyarray(g),stroke,fillrule,*copyarray(p),
t));
}
-#line 177 "runpicture.in"
+#line 179 "runpicture.in"
// void axialshade(picture *f, patharray *g, bool stroke=false, pen pena, pair a, bool extenda=true, pen penb, pair b, bool extendb=true, bool copy=true);
void gen_runpicture9(stack *Stack)
{
@@ -273,13 +275,13 @@ void gen_runpicture9(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 180 "runpicture.in"
+#line 182 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
f->append(new drawAxialShade(*copyarray(g),stroke,pena,a,extenda,penb,b,
extendb));
}
-#line 186 "runpicture.in"
+#line 188 "runpicture.in"
// void radialshade(picture *f, patharray *g, bool stroke=false, pen pena, pair a, real ra, bool extenda=true, pen penb, pair b, real rb, bool extendb=true, bool copy=true);
void gen_runpicture10(stack *Stack)
{
@@ -295,13 +297,13 @@ void gen_runpicture10(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 189 "runpicture.in"
+#line 191 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
f->append(new drawRadialShade(*copyarray(g),stroke,pena,a,ra,extenda,
penb,b,rb,extendb));
}
-#line 195 "runpicture.in"
+#line 197 "runpicture.in"
// void gouraudshade(picture *f, patharray *g, bool stroke=false, pen fillrule=CURRENTPEN, penarray *p, pairarray *z, Intarray *edges, bool copy=true);
void gen_runpicture11(stack *Stack)
{
@@ -313,7 +315,7 @@ void gen_runpicture11(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 198 "runpicture.in"
+#line 200 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
checkArrays(p,z);
checkArrays(z,edges);
@@ -321,7 +323,7 @@ void gen_runpicture11(stack *Stack)
*copyarray(z),*copyarray(edges)));
}
-#line 206 "runpicture.in"
+#line 208 "runpicture.in"
// void gouraudshade(picture *f, patharray *g, bool stroke=false, pen fillrule=CURRENTPEN, penarray *p, Intarray *edges, bool copy=true);
void gen_runpicture12(stack *Stack)
{
@@ -332,7 +334,7 @@ void gen_runpicture12(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 209 "runpicture.in"
+#line 211 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
size_t n=checkArrays(p,edges);
size_t m=checkArray(g);
@@ -353,7 +355,7 @@ void gen_runpicture12(stack *Stack)
*z,*copyarray(edges)));
}
-#line 230 "runpicture.in"
+#line 232 "runpicture.in"
// void tensorshade(picture *f, patharray *g, bool stroke=false, pen fillrule=CURRENTPEN, penarray2 *p, patharray *b=NULL, pairarray2 *z=emptyarray, bool copy=true);
void gen_runpicture13(stack *Stack)
{
@@ -365,7 +367,7 @@ void gen_runpicture13(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 233 "runpicture.in"
+#line 235 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
array *(*copyarray2)(array *a)=copy ? copyArray2 : nop;
if(b == NULL) b=g;
@@ -377,7 +379,7 @@ void gen_runpicture13(stack *Stack)
*copyarray(b),*copyarray2(z)));
}
-#line 245 "runpicture.in"
+#line 247 "runpicture.in"
// void functionshade(picture *f, patharray *g, bool stroke=false, pen fillrule=CURRENTPEN, string shader=emptystring, bool copy=true);
void gen_runpicture14(stack *Stack)
{
@@ -387,14 +389,14 @@ void gen_runpicture14(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 248 "runpicture.in"
+#line 250 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
f->append(new drawFunctionShade(*copyarray(g),stroke,fillrule,shader));
}
// Clip a picture to a superpath using the given fill rule.
// Subsequent additions to the picture will not be affected by the clipping.
-#line 255 "runpicture.in"
+#line 257 "runpicture.in"
// void clip(picture *f, patharray *g, bool stroke=false, pen fillrule=CURRENTPEN, bool copy=true);
void gen_runpicture15(stack *Stack)
{
@@ -403,13 +405,13 @@ void gen_runpicture15(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 257 "runpicture.in"
+#line 259 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
drawClipBegin *begin=new drawClipBegin(*copyarray(g),stroke,fillrule,true);
f->enclose(begin,new drawClipEnd(true,begin));
}
-#line 263 "runpicture.in"
+#line 265 "runpicture.in"
// void beginclip(picture *f, patharray *g, bool stroke=false, pen fillrule=CURRENTPEN, bool copy=true);
void gen_runpicture16(stack *Stack)
{
@@ -418,57 +420,57 @@ void gen_runpicture16(stack *Stack)
bool stroke=vm::pop<bool>(Stack,false);
patharray * g=vm::pop<patharray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 265 "runpicture.in"
+#line 267 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
f->append(new drawClipBegin(*copyarray(g),stroke,fillrule,false));
}
-#line 270 "runpicture.in"
+#line 272 "runpicture.in"
// void endclip(picture *f);
void gen_runpicture17(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 271 "runpicture.in"
+#line 273 "runpicture.in"
f->append(new drawClipEnd(false));
}
-#line 275 "runpicture.in"
+#line 277 "runpicture.in"
// void gsave(picture *f);
void gen_runpicture18(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 276 "runpicture.in"
+#line 278 "runpicture.in"
f->append(new drawGsave());
}
-#line 280 "runpicture.in"
+#line 282 "runpicture.in"
// void grestore(picture *f);
void gen_runpicture19(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 281 "runpicture.in"
+#line 283 "runpicture.in"
f->append(new drawGrestore());
}
-#line 285 "runpicture.in"
+#line 287 "runpicture.in"
// void begingroup(picture *f);
void gen_runpicture20(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 286 "runpicture.in"
+#line 288 "runpicture.in"
f->append(new drawBegin());
}
-#line 290 "runpicture.in"
+#line 292 "runpicture.in"
// void endgroup(picture *f);
void gen_runpicture21(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 291 "runpicture.in"
+#line 293 "runpicture.in"
f->append(new drawEnd());
}
-#line 295 "runpicture.in"
+#line 297 "runpicture.in"
// void _begingroup3(picture *f, string name, real compression, real granularity, bool closed, bool tessellate, bool dobreak, bool nobreak, triple center, Int interaction);
void gen_runpicture22(stack *Stack)
{
@@ -482,62 +484,62 @@ void gen_runpicture22(stack *Stack)
real compression=vm::pop<real>(Stack);
string name=vm::pop<string>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 298 "runpicture.in"
+#line 300 "runpicture.in"
f->append(new drawBegin3(name,compression,granularity,
closed,tessellate,dobreak,nobreak,
center,(Interaction) intcast(interaction)));
}
-#line 304 "runpicture.in"
+#line 306 "runpicture.in"
// void endgroup3(picture *f);
void gen_runpicture23(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 305 "runpicture.in"
+#line 307 "runpicture.in"
f->append(new drawEnd3());
}
-#line 309 "runpicture.in"
+#line 311 "runpicture.in"
// void add(picture *dest, picture *src);
void gen_runpicture24(stack *Stack)
{
picture * src=vm::pop<picture *>(Stack);
picture * dest=vm::pop<picture *>(Stack);
-#line 310 "runpicture.in"
+#line 312 "runpicture.in"
dest->add(*src);
}
-#line 314 "runpicture.in"
+#line 316 "runpicture.in"
// void prepend(picture *dest, picture *src);
void gen_runpicture25(stack *Stack)
{
picture * src=vm::pop<picture *>(Stack);
picture * dest=vm::pop<picture *>(Stack);
-#line 315 "runpicture.in"
+#line 317 "runpicture.in"
dest->prepend(*src);
}
-#line 319 "runpicture.in"
+#line 321 "runpicture.in"
// void postscript(picture *f, string s);
void gen_runpicture26(stack *Stack)
{
string s=vm::pop<string>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 320 "runpicture.in"
+#line 322 "runpicture.in"
f->append(new drawVerbatim(PostScript,s));
}
-#line 324 "runpicture.in"
+#line 326 "runpicture.in"
// void tex(picture *f, string s);
void gen_runpicture27(stack *Stack)
{
string s=vm::pop<string>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 325 "runpicture.in"
+#line 327 "runpicture.in"
f->append(new drawVerbatim(TeX,s));
}
-#line 329 "runpicture.in"
+#line 331 "runpicture.in"
// void postscript(picture *f, string s, pair min, pair max);
void gen_runpicture28(stack *Stack)
{
@@ -545,11 +547,11 @@ void gen_runpicture28(stack *Stack)
pair min=vm::pop<pair>(Stack);
string s=vm::pop<string>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 330 "runpicture.in"
+#line 332 "runpicture.in"
f->append(new drawVerbatim(PostScript,s,min,max));
}
-#line 334 "runpicture.in"
+#line 336 "runpicture.in"
// void tex(picture *f, string s, pair min, pair max);
void gen_runpicture29(stack *Stack)
{
@@ -557,33 +559,33 @@ void gen_runpicture29(stack *Stack)
pair min=vm::pop<pair>(Stack);
string s=vm::pop<string>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 335 "runpicture.in"
+#line 337 "runpicture.in"
f->append(new drawVerbatim(TeX,s,min,max));
}
-#line 339 "runpicture.in"
+#line 341 "runpicture.in"
// void texpreamble(string s);
void gen_runpicture30(stack *Stack)
{
string s=vm::pop<string>(Stack);
-#line 340 "runpicture.in"
+#line 342 "runpicture.in"
string t=s+"\n";
processDataStruct &pd=processData();
pd.TeXpipepreamble.push_back(t);
pd.TeXpreamble.push_back(t);
}
-#line 347 "runpicture.in"
+#line 349 "runpicture.in"
// void deletepreamble();
void gen_runpicture31(stack *)
{
-#line 348 "runpicture.in"
+#line 350 "runpicture.in"
if(getSetting<bool>("inlinetex")) {
unlink(buildname(outname(),"pre").c_str());
}
}
-#line 354 "runpicture.in"
+#line 356 "runpicture.in"
// void _labelpath(picture *f, string s, string size, path g, string justify, pair offset, pen p);
void gen_runpicture32(stack *Stack)
{
@@ -594,40 +596,40 @@ void gen_runpicture32(stack *Stack)
string size=vm::pop<string>(Stack);
string s=vm::pop<string>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 356 "runpicture.in"
+#line 358 "runpicture.in"
f->append(new drawLabelPath(s,size,g,justify,offset,p));
}
-#line 360 "runpicture.in"
+#line 362 "runpicture.in"
// void texreset();
void gen_runpicture33(stack *)
{
-#line 361 "runpicture.in"
+#line 363 "runpicture.in"
processDataStruct &pd=processData();
pd.TeXpipepreamble.clear();
pd.TeXpreamble.clear();
pd.tex.pipeclose();
}
-#line 368 "runpicture.in"
+#line 370 "runpicture.in"
// void layer(picture *f);
void gen_runpicture34(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 369 "runpicture.in"
+#line 371 "runpicture.in"
f->append(new drawLayer());
}
-#line 373 "runpicture.in"
+#line 375 "runpicture.in"
// void newpage(picture *f);
void gen_runpicture35(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 374 "runpicture.in"
+#line 376 "runpicture.in"
f->append(new drawNewPage());
}
-#line 378 "runpicture.in"
+#line 380 "runpicture.in"
// void _image(picture *f, realarray2 *data, pair initial, pair final, penarray *palette=NULL, transform t=identity, bool copy=true, bool antialias=false);
void gen_runpicture36(stack *Stack)
{
@@ -639,14 +641,14 @@ void gen_runpicture36(stack *Stack)
pair initial=vm::pop<pair>(Stack);
realarray2 * data=vm::pop<realarray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 381 "runpicture.in"
+#line 383 "runpicture.in"
array *(*copyarray)(array *a)=copy ? copyArray : nop;
array *(*copyarray2)(array *a)=copy ? copyArray2 : nop;
f->append(new drawPaletteImage(*copyarray2(data),*copyarray(palette),
t*matrix(initial,final),antialias));
}
-#line 388 "runpicture.in"
+#line 390 "runpicture.in"
// void _image(picture *f, penarray2 *data, pair initial, pair final, transform t=identity, bool copy=true, bool antialias=false);
void gen_runpicture37(stack *Stack)
{
@@ -657,13 +659,13 @@ void gen_runpicture37(stack *Stack)
pair initial=vm::pop<pair>(Stack);
penarray2 * data=vm::pop<penarray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 390 "runpicture.in"
+#line 392 "runpicture.in"
array *(*copyarray2)(array *a)=copy ? copyArray2 : nop;
f->append(new drawNoPaletteImage(*copyarray2(data),t*matrix(initial,final),
antialias));
}
-#line 396 "runpicture.in"
+#line 398 "runpicture.in"
// void _image(picture *f, callablePen *F, Int width, Int height, pair initial, pair final, transform t=identity, bool antialias=false);
void gen_runpicture38(stack *Stack)
{
@@ -675,36 +677,36 @@ void gen_runpicture38(stack *Stack)
Int width=vm::pop<Int>(Stack);
callablePen * F=vm::pop<callablePen *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 398 "runpicture.in"
+#line 400 "runpicture.in"
f->append(new drawFunctionImage(Stack,F,width,height,
t*matrix(initial,final),antialias));
}
-#line 403 "runpicture.in"
+#line 405 "runpicture.in"
// string nativeformat();
void gen_runpicture39(stack *Stack)
{
-#line 404 "runpicture.in"
+#line 406 "runpicture.in"
{Stack->push<string>(nativeformat()); return;}
}
-#line 408 "runpicture.in"
+#line 410 "runpicture.in"
// bool latex();
void gen_runpicture40(stack *Stack)
{
-#line 409 "runpicture.in"
+#line 411 "runpicture.in"
{Stack->push<bool>(latex(getSetting<string>("tex"))); return;}
}
-#line 413 "runpicture.in"
+#line 415 "runpicture.in"
// bool pdf();
void gen_runpicture41(stack *Stack)
{
-#line 414 "runpicture.in"
+#line 416 "runpicture.in"
{Stack->push<bool>(pdf(getSetting<string>("tex"))); return;}
}
-#line 418 "runpicture.in"
+#line 420 "runpicture.in"
// void _shipout(string prefix=emptystring, picture *f, picture *preamble=NULL, string format=emptystring, bool wait=false, bool view=true, transform T=identity);
void gen_runpicture42(stack *Stack)
{
@@ -715,7 +717,7 @@ void gen_runpicture42(stack *Stack)
picture * preamble=vm::pop<picture *>(Stack,NULL);
picture * f=vm::pop<picture *>(Stack);
string prefix=vm::pop<string>(Stack,emptystring);
-#line 421 "runpicture.in"
+#line 423 "runpicture.in"
if(prefix.empty()) prefix=outname();
picture *result=new picture;
@@ -761,8 +763,8 @@ void gen_runpicture42(stack *Stack)
result->shipout(preamble,prefix,format,wait,view);
}
-#line 467 "runpicture.in"
-// void shipout3(string prefix, picture *f, string format=emptystring, real width, real height, real angle, real zoom, triple m, triple M, pair shift, realarray2 *t, realarray *background, triplearray *lights, realarray2 *diffuse, realarray2 *specular, bool view=true);
+#line 469 "runpicture.in"
+// void shipout3(string prefix, picture *f, string format=emptystring, real width, real height, real angle, real zoom, triple m, triple M, pair shift, pair margin, realarray2 *t, realarray *background, triplearray *lights, realarray2 *diffuse, realarray2 *specular, bool view=true);
void gen_runpicture43(stack *Stack)
{
bool view=vm::pop<bool>(Stack,true);
@@ -771,6 +773,7 @@ void gen_runpicture43(stack *Stack)
triplearray * lights=vm::pop<triplearray *>(Stack);
realarray * background=vm::pop<realarray *>(Stack);
realarray2 * t=vm::pop<realarray2 *>(Stack);
+ pair margin=vm::pop<pair>(Stack);
pair shift=vm::pop<pair>(Stack);
triple M=vm::pop<triple>(Stack);
triple m=vm::pop<triple>(Stack);
@@ -781,7 +784,7 @@ void gen_runpicture43(stack *Stack)
string format=vm::pop<string>(Stack,emptystring);
picture * f=vm::pop<picture *>(Stack);
string prefix=vm::pop<string>(Stack);
-#line 472 "runpicture.in"
+#line 474 "runpicture.in"
size_t n=checkArrays(lights,diffuse);
checkEqual(n,checkArray(specular));
@@ -794,30 +797,31 @@ void gen_runpicture43(stack *Stack)
copyArray2C(Diffuse,diffuse,false,4,UseGC);
copyArray2C(Specular,specular,false,4,UseGC);
- f->shipout3(prefix,format,width,height,angle,zoom,m,M,shift,T,Background,n,
- Lights,Diffuse,Specular,view);
+ f->shipout3(prefix,format,width,height,angle,zoom,m,M,shift,margin,T,
+ Background,n,Lights,Diffuse,Specular,view);
delete[] Background;
delete[] T;
}
-#line 492 "runpicture.in"
-// void shipout3(string prefix, picture *f);
+#line 494 "runpicture.in"
+// void shipout3(string prefix, picture *f, string format=defaultformat3);
void gen_runpicture44(stack *Stack)
{
+ string format=vm::pop<string>(Stack,defaultformat3);
picture * f=vm::pop<picture *>(Stack);
string prefix=vm::pop<string>(Stack);
-#line 493 "runpicture.in"
- f->shipout3(prefix);
+#line 495 "runpicture.in"
+ f->shipout3(prefix,format);
}
-#line 497 "runpicture.in"
+#line 499 "runpicture.in"
// void xmap(string key, transform t=identity);
void gen_runpicture45(stack *Stack)
{
transform t=vm::pop<transform>(Stack,identity);
string key=vm::pop<string>(Stack);
-#line 498 "runpicture.in"
+#line 500 "runpicture.in"
xmap_t &xmap=processData().xmap;
xmap_t::iterator p=xmap.find(key);
if(p != xmap.end())
@@ -829,14 +833,14 @@ void gen_runpicture45(stack *Stack)
}
}
-#line 510 "runpicture.in"
+#line 512 "runpicture.in"
// void deconstruct(picture *f, picture *preamble=NULL, transform T=identity);
void gen_runpicture46(stack *Stack)
{
transform T=vm::pop<transform>(Stack,identity);
picture * preamble=vm::pop<picture *>(Stack,NULL);
picture * f=vm::pop<picture *>(Stack);
-#line 511 "runpicture.in"
+#line 513 "runpicture.in"
unsigned level=0;
string prefix=outname();
@@ -931,7 +935,7 @@ void gen_runpicture46(stack *Stack)
// Three-dimensional picture and surface operations
// Bezier curve
-#line 606 "runpicture.in"
+#line 608 "runpicture.in"
// void _draw(picture *f, path3 g, triple center=Zero, pen p, Int interaction=0);
void gen_runpicture47(stack *Stack)
{
@@ -940,13 +944,13 @@ void gen_runpicture47(stack *Stack)
triple center=vm::pop<triple>(Stack,Zero);
path3 g=vm::pop<path3>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 607 "runpicture.in"
+#line 609 "runpicture.in"
if(g.size() > 0)
f->append(new drawPath3(g,center,p,(Interaction) intcast(interaction)));
}
// Bezier patch
-#line 613 "runpicture.in"
+#line 615 "runpicture.in"
// void draw(picture *f, triplearray2 *P, triple center, bool straight, penarray *p, real opacity, real shininess, real metallic, real fresnel0, real PRCshininess, penarray *colors, Int interaction, bool prc=true);
void gen_runpicture48(stack *Stack)
{
@@ -963,14 +967,14 @@ void gen_runpicture48(stack *Stack)
triple center=vm::pop<triple>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 616 "runpicture.in"
+#line 618 "runpicture.in"
f->append(new drawBezierPatch(*P,center,straight,*p,opacity,shininess,
metallic,fresnel0,PRCshininess,*colors,
(Interaction) intcast(interaction),prc));
}
// Bezier triangle
-#line 623 "runpicture.in"
+#line 625 "runpicture.in"
// void drawbeziertriangle(picture *f, triplearray2 *P, triple center, bool straight, penarray *p, real opacity, real shininess, real metallic, real fresnel0, real PRCshininess, penarray *colors, Int interaction, bool prc=true);
void gen_runpicture49(stack *Stack)
{
@@ -987,14 +991,14 @@ void gen_runpicture49(stack *Stack)
triple center=vm::pop<triple>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 627 "runpicture.in"
+#line 629 "runpicture.in"
f->append(new drawBezierTriangle(*P,center,straight,*p,opacity,shininess,
metallic,fresnel0,PRCshininess,*colors,
(Interaction) intcast(interaction),prc));
}
// General NURBS curve
-#line 634 "runpicture.in"
+#line 636 "runpicture.in"
// void draw(picture *f, triplearray *P, realarray *knot, realarray *weights=emptyarray, pen p);
void gen_runpicture50(stack *Stack)
{
@@ -1003,12 +1007,12 @@ void gen_runpicture50(stack *Stack)
realarray * knot=vm::pop<realarray *>(Stack);
triplearray * P=vm::pop<triplearray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 636 "runpicture.in"
+#line 638 "runpicture.in"
f->append(new drawNurbsPath3(*P,knot,weights,p));
}
// General NURBS surface
-#line 641 "runpicture.in"
+#line 643 "runpicture.in"
// void draw(picture *f, triplearray2 *P, realarray *uknot, realarray *vknot, realarray2 *weights=emptyarray, penarray *p, real opacity, real shininess,real metallic, real fresnel0, real PRCshininess, penarray *colors);
void gen_runpicture51(stack *Stack)
{
@@ -1024,13 +1028,13 @@ void gen_runpicture51(stack *Stack)
realarray * uknot=vm::pop<realarray *>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 645 "runpicture.in"
+#line 647 "runpicture.in"
f->append(new drawNurbs(*P,uknot,vknot,weights,*p,opacity,shininess, metallic, fresnel0,
PRCshininess,*colors));
}
// PRC unit sphere
-#line 651 "runpicture.in"
+#line 653 "runpicture.in"
// void drawPRCsphere(picture *f, realarray2 *t, bool half=false, penarray *p, real opacity, real shininess, Int type);
void gen_runpicture52(stack *Stack)
{
@@ -1041,12 +1045,12 @@ void gen_runpicture52(stack *Stack)
bool half=vm::pop<bool>(Stack,false);
realarray2 * t=vm::pop<realarray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 653 "runpicture.in"
+#line 655 "runpicture.in"
f->append(new drawSphere(*t,half,*p,opacity,shininess,intcast(type)));
}
// PRC unit cylinder
-#line 658 "runpicture.in"
+#line 660 "runpicture.in"
// void drawPRCcylinder(picture *f, realarray2 *t, penarray *p, real opacity, real shininess);
void gen_runpicture53(stack *Stack)
{
@@ -1055,12 +1059,12 @@ void gen_runpicture53(stack *Stack)
penarray * p=vm::pop<penarray *>(Stack);
realarray2 * t=vm::pop<realarray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 660 "runpicture.in"
+#line 662 "runpicture.in"
f->append(new drawCylinder(*t,*p,opacity,shininess));
}
// PRC unit disk
-#line 665 "runpicture.in"
+#line 667 "runpicture.in"
// void drawPRCdisk(picture *f, realarray2 *t, penarray *p, real opacity, real shininess);
void gen_runpicture54(stack *Stack)
{
@@ -1069,12 +1073,12 @@ void gen_runpicture54(stack *Stack)
penarray * p=vm::pop<penarray *>(Stack);
realarray2 * t=vm::pop<realarray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 667 "runpicture.in"
+#line 669 "runpicture.in"
f->append(new drawDisk(*t,*p,opacity,shininess));
}
// General PRC tube
-#line 672 "runpicture.in"
+#line 674 "runpicture.in"
// void drawPRCtube(picture *f, path3 center, path3 g, penarray *p, real opacity, real shininess);
void gen_runpicture55(stack *Stack)
{
@@ -1084,12 +1088,12 @@ void gen_runpicture55(stack *Stack)
path3 g=vm::pop<path3>(Stack);
path3 center=vm::pop<path3>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 674 "runpicture.in"
+#line 676 "runpicture.in"
f->append(new drawTube(center,g,*p,opacity,shininess));
}
// Draw pixel
-#line 679 "runpicture.in"
+#line 681 "runpicture.in"
// void drawpixel(picture *f, triple v, pen p, real width=1.0);
void gen_runpicture56(stack *Stack)
{
@@ -1097,12 +1101,12 @@ void gen_runpicture56(stack *Stack)
pen p=vm::pop<pen>(Stack);
triple v=vm::pop<triple>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 680 "runpicture.in"
+#line 682 "runpicture.in"
f->append(new drawPixel(v,p,width));
}
// Draw triangles
-#line 685 "runpicture.in"
+#line 687 "runpicture.in"
// void draw(picture *f, triplearray *v, Intarray2 *vi, triplearray *n, Intarray2 *ni, penarray *p, real opacity, real shininess, real metallic, real fresnel0, real PRCshininess, penarray *c=emptyarray, Intarray2 *ci=emptyarray);
void gen_runpicture57(stack *Stack)
{
@@ -1119,63 +1123,63 @@ void gen_runpicture57(stack *Stack)
Intarray2 * vi=vm::pop<Intarray2 *>(Stack);
triplearray * v=vm::pop<triplearray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 690 "runpicture.in"
+#line 692 "runpicture.in"
f->append(new drawTriangles(*v,*vi,*n,*ni,*p,opacity,shininess,metallic,fresnel0,PRCshininess,
*c,*ci));
}
-#line 695 "runpicture.in"
+#line 697 "runpicture.in"
// triple min3(picture *f);
void gen_runpicture58(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 696 "runpicture.in"
+#line 698 "runpicture.in"
{Stack->push<triple>(f->bounds3().Min()); return;}
}
-#line 700 "runpicture.in"
+#line 702 "runpicture.in"
// triple max3(picture *f);
void gen_runpicture59(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 701 "runpicture.in"
+#line 703 "runpicture.in"
{Stack->push<triple>(f->bounds3().Max()); return;}
}
-#line 705 "runpicture.in"
+#line 707 "runpicture.in"
// triple size3(picture *f);
void gen_runpicture60(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 706 "runpicture.in"
+#line 708 "runpicture.in"
bbox3 b=f->bounds3();
{Stack->push<triple>(b.Max()-b.Min()); return;}
}
-#line 711 "runpicture.in"
+#line 713 "runpicture.in"
// pair minratio(picture *f);
void gen_runpicture61(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 712 "runpicture.in"
+#line 714 "runpicture.in"
{Stack->push<pair>(f->ratio(::min)); return;}
}
-#line 716 "runpicture.in"
+#line 718 "runpicture.in"
// pair maxratio(picture *f);
void gen_runpicture62(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 717 "runpicture.in"
+#line 719 "runpicture.in"
{Stack->push<pair>(f->ratio(::max)); return;}
}
-#line 721 "runpicture.in"
+#line 723 "runpicture.in"
// bool is3D(picture *f);
void gen_runpicture63(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 722 "runpicture.in"
+#line 724 "runpicture.in"
{Stack->push<bool>(f->have3D()); return;}
}
@@ -1185,133 +1189,133 @@ namespace trans {
void gen_runpicture_venv(venv &ve)
{
-#line 126 "runpicture.in"
+#line 128 "runpicture.in"
REGISTER_BLTIN(run::newPicture,"newPicture");
-#line 131 "runpicture.in"
+#line 133 "runpicture.in"
addFunc(ve, run::gen_runpicture1, primBoolean(), SYM(empty), formal(primPicture(), SYM(f), false, false));
-#line 136 "runpicture.in"
+#line 138 "runpicture.in"
addFunc(ve, run::gen_runpicture2, primVoid(), SYM(erase), formal(primPicture(), SYM(f), false, false));
-#line 141 "runpicture.in"
+#line 143 "runpicture.in"
addFunc(ve, run::gen_runpicture3, primPair(), SYM(min), formal(primPicture(), SYM(f), false, false));
-#line 146 "runpicture.in"
+#line 148 "runpicture.in"
addFunc(ve, run::gen_runpicture4, primPair(), SYM(max), formal(primPicture(), SYM(f), false, false));
-#line 151 "runpicture.in"
+#line 153 "runpicture.in"
addFunc(ve, run::gen_runpicture5, primPair(), SYM(size), formal(primPicture(), SYM(f), false, false));
-#line 157 "runpicture.in"
+#line 159 "runpicture.in"
addFunc(ve, run::gen_runpicture6, primVoid(), SYM(_draw), formal(primPicture(), SYM(f), false, false), formal(primPath(), SYM(g), false, false), formal(primPen(), SYM(p), false, false));
-#line 162 "runpicture.in"
+#line 164 "runpicture.in"
addFunc(ve, run::gen_runpicture7, primVoid(), SYM(fill), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primPen(), SYM(p), true, false), formal(primBoolean(), SYM(copy), true, false));
-#line 168 "runpicture.in"
+#line 170 "runpicture.in"
addFunc(ve, run::gen_runpicture8, primVoid(), SYM(latticeshade), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(fillrule), true, false), formal(penArray2() , SYM(p), false, false), formal(primTransform(), SYM(t), true, false), formal(primBoolean(), SYM(copy), true, false));
-#line 177 "runpicture.in"
+#line 179 "runpicture.in"
addFunc(ve, run::gen_runpicture9, primVoid(), SYM(axialshade), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(pena), false, false), formal(primPair(), SYM(a), false, false), formal(primBoolean(), SYM(extenda), true, false), formal(primPen(), SYM(penb), false, false), formal(primPair(), SYM(b), false, false), formal(primBoolean(), SYM(extendb), true, false), formal(primBoolean(), SYM(copy), true, false));
-#line 186 "runpicture.in"
+#line 188 "runpicture.in"
addFunc(ve, run::gen_runpicture10, primVoid(), SYM(radialshade), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(pena), false, false), formal(primPair(), SYM(a), false, false), formal(primReal(), SYM(ra), false, false), formal(primBoolean(), SYM(extenda), true, false), formal(primPen(), SYM(penb), false, false), formal(primPair(), SYM(b), false, false), formal(primReal(), SYM(rb), false, false), formal(primBoolean(), SYM(extendb), true, false), formal(primBoolean(), SYM(copy), true, false));
-#line 195 "runpicture.in"
+#line 197 "runpicture.in"
addFunc(ve, run::gen_runpicture11, primVoid(), SYM(gouraudshade), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(fillrule), true, false), formal(penArray() , SYM(p), false, false), formal(pairArray(), SYM(z), false, false), formal(IntArray(), SYM(edges), false, false), formal(primBoolean(), SYM(copy), true, false));
-#line 206 "runpicture.in"
+#line 208 "runpicture.in"
addFunc(ve, run::gen_runpicture12, primVoid(), SYM(gouraudshade), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(fillrule), true, false), formal(penArray() , SYM(p), false, false), formal(IntArray(), SYM(edges), false, false), formal(primBoolean(), SYM(copy), true, false));
-#line 230 "runpicture.in"
+#line 232 "runpicture.in"
addFunc(ve, run::gen_runpicture13, primVoid(), SYM(tensorshade), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(fillrule), true, false), formal(penArray2() , SYM(p), false, false), formal(pathArray() , SYM(b), true, false), formal(pairArray2(), SYM(z), true, false), formal(primBoolean(), SYM(copy), true, false));
-#line 245 "runpicture.in"
+#line 247 "runpicture.in"
addFunc(ve, run::gen_runpicture14, primVoid(), SYM(functionshade), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(fillrule), true, false), formal(primString() , SYM(shader), true, false), formal(primBoolean(), SYM(copy), true, false));
-#line 253 "runpicture.in"
+#line 255 "runpicture.in"
addFunc(ve, run::gen_runpicture15, primVoid(), SYM(clip), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(fillrule), true, false), formal(primBoolean(), SYM(copy), true, false));
-#line 263 "runpicture.in"
+#line 265 "runpicture.in"
addFunc(ve, run::gen_runpicture16, primVoid(), SYM(beginclip), formal(primPicture(), SYM(f), false, false), formal(pathArray() , SYM(g), false, false), formal(primBoolean(), SYM(stroke), true, false), formal(primPen(), SYM(fillrule), true, false), formal(primBoolean(), SYM(copy), true, false));
-#line 270 "runpicture.in"
+#line 272 "runpicture.in"
addFunc(ve, run::gen_runpicture17, primVoid(), SYM(endclip), formal(primPicture(), SYM(f), false, false));
-#line 275 "runpicture.in"
+#line 277 "runpicture.in"
addFunc(ve, run::gen_runpicture18, primVoid(), SYM(gsave), formal(primPicture(), SYM(f), false, false));
-#line 280 "runpicture.in"
+#line 282 "runpicture.in"
addFunc(ve, run::gen_runpicture19, primVoid(), SYM(grestore), formal(primPicture(), SYM(f), false, false));
-#line 285 "runpicture.in"
+#line 287 "runpicture.in"
addFunc(ve, run::gen_runpicture20, primVoid(), SYM(begingroup), formal(primPicture(), SYM(f), false, false));
-#line 290 "runpicture.in"
+#line 292 "runpicture.in"
addFunc(ve, run::gen_runpicture21, primVoid(), SYM(endgroup), formal(primPicture(), SYM(f), false, false));
-#line 295 "runpicture.in"
+#line 297 "runpicture.in"
addFunc(ve, run::gen_runpicture22, primVoid(), SYM(_begingroup3), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(name), false, false), formal(primReal(), SYM(compression), false, false), formal(primReal(), SYM(granularity), false, false), formal(primBoolean(), SYM(closed), false, false), formal(primBoolean(), SYM(tessellate), false, false), formal(primBoolean(), SYM(dobreak), false, false), formal(primBoolean(), SYM(nobreak), false, false), formal(primTriple(), SYM(center), false, false), formal(primInt(), SYM(interaction), false, false));
-#line 304 "runpicture.in"
+#line 306 "runpicture.in"
addFunc(ve, run::gen_runpicture23, primVoid(), SYM(endgroup3), formal(primPicture(), SYM(f), false, false));
-#line 309 "runpicture.in"
+#line 311 "runpicture.in"
addFunc(ve, run::gen_runpicture24, primVoid(), SYM(add), formal(primPicture(), SYM(dest), false, false), formal(primPicture(), SYM(src), false, false));
-#line 314 "runpicture.in"
+#line 316 "runpicture.in"
addFunc(ve, run::gen_runpicture25, primVoid(), SYM(prepend), formal(primPicture(), SYM(dest), false, false), formal(primPicture(), SYM(src), false, false));
-#line 319 "runpicture.in"
+#line 321 "runpicture.in"
addFunc(ve, run::gen_runpicture26, primVoid(), SYM(postscript), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(s), false, false));
-#line 324 "runpicture.in"
+#line 326 "runpicture.in"
addFunc(ve, run::gen_runpicture27, primVoid(), SYM(tex), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(s), false, false));
-#line 329 "runpicture.in"
+#line 331 "runpicture.in"
addFunc(ve, run::gen_runpicture28, primVoid(), SYM(postscript), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(s), false, false), formal(primPair(), SYM(min), false, false), formal(primPair(), SYM(max), false, false));
-#line 334 "runpicture.in"
+#line 336 "runpicture.in"
addFunc(ve, run::gen_runpicture29, primVoid(), SYM(tex), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(s), false, false), formal(primPair(), SYM(min), false, false), formal(primPair(), SYM(max), false, false));
-#line 339 "runpicture.in"
+#line 341 "runpicture.in"
addFunc(ve, run::gen_runpicture30, primVoid(), SYM(texpreamble), formal(primString() , SYM(s), false, false));
-#line 347 "runpicture.in"
+#line 349 "runpicture.in"
addFunc(ve, run::gen_runpicture31, primVoid(), SYM(deletepreamble));
-#line 354 "runpicture.in"
+#line 356 "runpicture.in"
addFunc(ve, run::gen_runpicture32, primVoid(), SYM(_labelpath), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(s), false, false), formal(primString() , SYM(size), false, false), formal(primPath(), SYM(g), false, false), formal(primString() , SYM(justify), false, false), formal(primPair(), SYM(offset), false, false), formal(primPen(), SYM(p), false, false));
-#line 360 "runpicture.in"
+#line 362 "runpicture.in"
addFunc(ve, run::gen_runpicture33, primVoid(), SYM(texreset));
-#line 368 "runpicture.in"
+#line 370 "runpicture.in"
addFunc(ve, run::gen_runpicture34, primVoid(), SYM(layer), formal(primPicture(), SYM(f), false, false));
-#line 373 "runpicture.in"
+#line 375 "runpicture.in"
addFunc(ve, run::gen_runpicture35, primVoid(), SYM(newpage), formal(primPicture(), SYM(f), false, false));
-#line 378 "runpicture.in"
+#line 380 "runpicture.in"
addFunc(ve, run::gen_runpicture36, primVoid(), SYM(_image), formal(primPicture(), SYM(f), false, false), formal(realArray2(), SYM(data), false, false), formal(primPair(), SYM(initial), false, false), formal(primPair(), SYM(final), false, false), formal(penArray() , SYM(palette), true, false), formal(primTransform(), SYM(t), true, false), formal(primBoolean(), SYM(copy), true, false), formal(primBoolean(), SYM(antialias), true, false));
-#line 388 "runpicture.in"
+#line 390 "runpicture.in"
addFunc(ve, run::gen_runpicture37, primVoid(), SYM(_image), formal(primPicture(), SYM(f), false, false), formal(penArray2() , SYM(data), false, false), formal(primPair(), SYM(initial), false, false), formal(primPair(), SYM(final), false, false), formal(primTransform(), SYM(t), true, false), formal(primBoolean(), SYM(copy), true, false), formal(primBoolean(), SYM(antialias), true, false));
-#line 396 "runpicture.in"
+#line 398 "runpicture.in"
addFunc(ve, run::gen_runpicture38, primVoid(), SYM(_image), formal(primPicture(), SYM(f), false, false), formal(penFunction(), SYM(f), false, false), formal(primInt(), SYM(width), false, false), formal(primInt(), SYM(height), false, false), formal(primPair(), SYM(initial), false, false), formal(primPair(), SYM(final), false, false), formal(primTransform(), SYM(t), true, false), formal(primBoolean(), SYM(antialias), true, false));
-#line 403 "runpicture.in"
+#line 405 "runpicture.in"
addFunc(ve, run::gen_runpicture39, primString() , SYM(nativeformat));
-#line 408 "runpicture.in"
+#line 410 "runpicture.in"
addFunc(ve, run::gen_runpicture40, primBoolean(), SYM(latex));
-#line 413 "runpicture.in"
+#line 415 "runpicture.in"
addFunc(ve, run::gen_runpicture41, primBoolean(), SYM(pdf));
-#line 418 "runpicture.in"
+#line 420 "runpicture.in"
addFunc(ve, run::gen_runpicture42, primVoid(), SYM(_shipout), formal(primString() , SYM(prefix), true, false), formal(primPicture(), SYM(f), false, false), formal(primPicture(), SYM(preamble), true, false), formal(primString() , SYM(format), true, false), formal(primBoolean(), SYM(wait), true, false), formal(primBoolean(), SYM(view), true, false), formal(primTransform(), SYM(t), true, false));
-#line 467 "runpicture.in"
- addFunc(ve, run::gen_runpicture43, primVoid(), SYM(shipout3), formal(primString() , SYM(prefix), false, false), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(format), true, false), formal(primReal(), SYM(width), false, false), formal(primReal(), SYM(height), false, false), formal(primReal(), SYM(angle), false, false), formal(primReal(), SYM(zoom), false, false), formal(primTriple(), SYM(m), false, false), formal(primTriple(), SYM(m), false, false), formal(primPair(), SYM(shift), false, false), formal(realArray2(), SYM(t), false, false), formal(realArray(), SYM(background), false, false), formal(tripleArray(), SYM(lights), false, false), formal(realArray2(), SYM(diffuse), false, false), formal(realArray2(), SYM(specular), false, false), formal(primBoolean(), SYM(view), true, false));
-#line 492 "runpicture.in"
- addFunc(ve, run::gen_runpicture44, primVoid(), SYM(shipout3), formal(primString() , SYM(prefix), false, false), formal(primPicture(), SYM(f), false, false));
-#line 497 "runpicture.in"
+#line 469 "runpicture.in"
+ addFunc(ve, run::gen_runpicture43, primVoid(), SYM(shipout3), formal(primString() , SYM(prefix), false, false), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(format), true, false), formal(primReal(), SYM(width), false, false), formal(primReal(), SYM(height), false, false), formal(primReal(), SYM(angle), false, false), formal(primReal(), SYM(zoom), false, false), formal(primTriple(), SYM(m), false, false), formal(primTriple(), SYM(m), false, false), formal(primPair(), SYM(shift), false, false), formal(primPair(), SYM(margin), false, false), formal(realArray2(), SYM(t), false, false), formal(realArray(), SYM(background), false, false), formal(tripleArray(), SYM(lights), false, false), formal(realArray2(), SYM(diffuse), false, false), formal(realArray2(), SYM(specular), false, false), formal(primBoolean(), SYM(view), true, false));
+#line 494 "runpicture.in"
+ addFunc(ve, run::gen_runpicture44, primVoid(), SYM(shipout3), formal(primString() , SYM(prefix), false, false), formal(primPicture(), SYM(f), false, false), formal(primString() , SYM(format), true, false));
+#line 499 "runpicture.in"
addFunc(ve, run::gen_runpicture45, primVoid(), SYM(xmap), formal(primString() , SYM(key), false, false), formal(primTransform(), SYM(t), true, false));
-#line 510 "runpicture.in"
+#line 512 "runpicture.in"
addFunc(ve, run::gen_runpicture46, primVoid(), SYM(deconstruct), formal(primPicture(), SYM(f), false, false), formal(primPicture(), SYM(preamble), true, false), formal(primTransform(), SYM(t), true, false));
-#line 602 "runpicture.in"
+#line 604 "runpicture.in"
addFunc(ve, run::gen_runpicture47, primVoid(), SYM(_draw), formal(primPicture(), SYM(f), false, false), formal(primPath3(), SYM(g), false, false), formal(primTriple(), SYM(center), true, false), formal(primPen(), SYM(p), false, false), formal(primInt(), SYM(interaction), true, false));
-#line 612 "runpicture.in"
+#line 614 "runpicture.in"
addFunc(ve, run::gen_runpicture48, primVoid(), SYM(draw), formal(primPicture(), SYM(f), false, false), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(center), false, false), formal(primBoolean(), SYM(straight), false, false), formal(penArray() , SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(primReal(), SYM(prcshininess), false, false), formal(penArray() , SYM(colors), false, false), formal(primInt(), SYM(interaction), false, false), formal(primBoolean(), SYM(prc), true, false));
-#line 622 "runpicture.in"
+#line 624 "runpicture.in"
addFunc(ve, run::gen_runpicture49, primVoid(), SYM(drawbeziertriangle), formal(primPicture(), SYM(f), false, false), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(center), false, false), formal(primBoolean(), SYM(straight), false, false), formal(penArray() , SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(primReal(), SYM(prcshininess), false, false), formal(penArray() , SYM(colors), false, false), formal(primInt(), SYM(interaction), false, false), formal(primBoolean(), SYM(prc), true, false));
-#line 633 "runpicture.in"
+#line 635 "runpicture.in"
addFunc(ve, run::gen_runpicture50, primVoid(), SYM(draw), formal(primPicture(), SYM(f), false, false), formal(tripleArray(), SYM(p), false, false), formal(realArray(), SYM(knot), false, false), formal(realArray(), SYM(weights), true, false), formal(primPen(), SYM(p), false, false));
-#line 640 "runpicture.in"
+#line 642 "runpicture.in"
addFunc(ve, run::gen_runpicture51, primVoid(), SYM(draw), formal(primPicture(), SYM(f), false, false), formal(tripleArray2(), SYM(p), false, false), formal(realArray(), SYM(uknot), false, false), formal(realArray(), SYM(vknot), false, false), formal(realArray2(), SYM(weights), true, false), formal(penArray() , SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(primReal(), SYM(prcshininess), false, false), formal(penArray() , SYM(colors), false, false));
-#line 650 "runpicture.in"
+#line 652 "runpicture.in"
addFunc(ve, run::gen_runpicture52, primVoid(), SYM(drawPRCsphere), formal(primPicture(), SYM(f), false, false), formal(realArray2(), SYM(t), false, false), formal(primBoolean(), SYM(half), true, false), formal(penArray() , SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primInt(), SYM(type), false, false));
-#line 657 "runpicture.in"
+#line 659 "runpicture.in"
addFunc(ve, run::gen_runpicture53, primVoid(), SYM(drawPRCcylinder), formal(primPicture(), SYM(f), false, false), formal(realArray2(), SYM(t), false, false), formal(penArray() , SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false));
-#line 664 "runpicture.in"
+#line 666 "runpicture.in"
addFunc(ve, run::gen_runpicture54, primVoid(), SYM(drawPRCdisk), formal(primPicture(), SYM(f), false, false), formal(realArray2(), SYM(t), false, false), formal(penArray() , SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false));
-#line 671 "runpicture.in"
+#line 673 "runpicture.in"
addFunc(ve, run::gen_runpicture55, primVoid(), SYM(drawPRCtube), formal(primPicture(), SYM(f), false, false), formal(primPath3(), SYM(center), false, false), formal(primPath3(), SYM(g), false, false), formal(penArray() , SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false));
-#line 678 "runpicture.in"
+#line 680 "runpicture.in"
addFunc(ve, run::gen_runpicture56, primVoid(), SYM(drawpixel), formal(primPicture(), SYM(f), false, false), formal(primTriple(), SYM(v), false, false), formal(primPen(), SYM(p), false, false), formal(primReal(), SYM(width), true, false));
-#line 684 "runpicture.in"
+#line 686 "runpicture.in"
addFunc(ve, run::gen_runpicture57, primVoid(), SYM(draw), formal(primPicture(), SYM(f), false, false), formal(tripleArray(), SYM(v), false, false), formal(IntArray2(), SYM(vi), false, false), formal(tripleArray(), SYM(n), false, false), formal(IntArray2(), SYM(ni), false, false), formal(penArray() , SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(primReal(), SYM(prcshininess), false, false), formal(penArray() , SYM(c), true, false), formal(IntArray2(), SYM(ci), true, false));
-#line 695 "runpicture.in"
+#line 697 "runpicture.in"
addFunc(ve, run::gen_runpicture58, primTriple(), SYM(min3), formal(primPicture(), SYM(f), false, false));
-#line 700 "runpicture.in"
+#line 702 "runpicture.in"
addFunc(ve, run::gen_runpicture59, primTriple(), SYM(max3), formal(primPicture(), SYM(f), false, false));
-#line 705 "runpicture.in"
+#line 707 "runpicture.in"
addFunc(ve, run::gen_runpicture60, primTriple(), SYM(size3), formal(primPicture(), SYM(f), false, false));
-#line 711 "runpicture.in"
+#line 713 "runpicture.in"
addFunc(ve, run::gen_runpicture61, primPair(), SYM(minratio), formal(primPicture(), SYM(f), false, false));
-#line 716 "runpicture.in"
+#line 718 "runpicture.in"
addFunc(ve, run::gen_runpicture62, primPair(), SYM(maxratio), formal(primPicture(), SYM(f), false, false));
-#line 721 "runpicture.in"
+#line 723 "runpicture.in"
addFunc(ve, run::gen_runpicture63, primBoolean(), SYM(is3D), formal(primPicture(), SYM(f), false, false));
}
diff --git a/graphics/asymptote/runpicture.in b/graphics/asymptote/runpicture.in
index f6c0d75c07..bb2a5649a5 100644
--- a/graphics/asymptote/runpicture.in
+++ b/graphics/asymptote/runpicture.in
@@ -120,6 +120,8 @@ array *nop(array *a)
triple Zero;
+string defaultformat3="prc";
+
// Autogenerated routines:
@@ -466,7 +468,7 @@ void _shipout(string prefix=emptystring, picture *f, picture *preamble=NULL,
void shipout3(string prefix, picture *f, string format=emptystring,
real width, real height, real angle, real zoom,
- triple m, triple M, pair shift, realarray2 *t,
+ triple m, triple M, pair shift, pair margin, realarray2 *t,
realarray *background, triplearray *lights, realarray2 *diffuse,
realarray2 *specular, bool view=true)
{
@@ -482,16 +484,16 @@ void shipout3(string prefix, picture *f, string format=emptystring,
copyArray2C(Diffuse,diffuse,false,4,UseGC);
copyArray2C(Specular,specular,false,4,UseGC);
- f->shipout3(prefix,format,width,height,angle,zoom,m,M,shift,T,Background,n,
- Lights,Diffuse,Specular,view);
+ f->shipout3(prefix,format,width,height,angle,zoom,m,M,shift,margin,T,
+ Background,n,Lights,Diffuse,Specular,view);
delete[] Background;
delete[] T;
}
-void shipout3(string prefix, picture *f)
+void shipout3(string prefix, picture *f, string format=defaultformat3)
{
- f->shipout3(prefix);
+ f->shipout3(prefix,format);
}
void xmap(string key, transform t=identity)
diff --git a/graphics/asymptote/settings.cc b/graphics/asymptote/settings.cc
index c0478379cd..d3330a9677 100644
--- a/graphics/asymptote/settings.cc
+++ b/graphics/asymptote/settings.cc
@@ -74,7 +74,7 @@ namespace settings {
using camp::pair;
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGLM
const bool havegl=true;
#else
const bool havegl=false;
@@ -84,6 +84,8 @@ mode_t mask;
string systemDir=ASYMPTOTE_SYSDIR;
string defaultEPSdriver="eps2write";
+string defaultAsyGL="https://vectorgraphics.github.io/asymptote/base/webgl/asygl-"+
+ AsyGLVersion+".js";
#ifndef __MSDOS__
@@ -94,9 +96,11 @@ const char pathSeparator=':';
#ifdef __APPLE__
string defaultPSViewer="open";
string defaultPDFViewer="open";
+string defaultHTMLViewer="open";
#else
string defaultPSViewer="gv";
string defaultPDFViewer="acroread";
+string defaultHTMLViewer="google-chrome";
#endif
string defaultGhostscript="gs";
string defaultGhostscriptLibrary="";
@@ -115,6 +119,7 @@ const char pathSeparator=';';
string defaultPSViewer="cmd";
//string defaultPDFViewer="AcroRd32.exe";
string defaultPDFViewer="cmd";
+string defaultHTMLViewer="cmd";
string defaultGhostscript;
string defaultGhostscriptLibrary;
//string defaultDisplay="imdisplay";
@@ -1132,6 +1137,11 @@ void initSettings() {
"Initial 3D rendering screen position"));
addOption(new pairSetting("maxviewport", 0, "pair",
"Maximum viewport size",pair(2048,2048)));
+ addOption(new pairSetting("viewportmargin", 0, "pair",
+ "Horizontal and vertical 3D viewport margin",
+ pair(0.5,0.5)));
+ addOption(new boolSetting("absolute", 0,
+ "Use absolute WebGL dimensions", false));
addOption(new pairSetting("maxtile", 0, "pair",
"Maximum rendering tile size",pair(1024,768)));
addOption(new boolSetting("iconify", 0,
@@ -1261,6 +1271,8 @@ void initSettings() {
addOption(new boolSetting("autorotate", 0,
"Enable automatic PDF page rotation",
false));
+ addOption(new boolSetting("offline", 0,
+ "Produce offline html files",false));
addOption(new boolSetting("pdfreload", 0,
"Automatically reload document in pdfviewer",
false));
@@ -1277,19 +1289,30 @@ void initSettings() {
addOption(new IntSetting("maxvertices", 0, "n", "Maximum number of vertices to queue", 0));
addOption(new realSetting("zoomfactor", 0, "factor", "Zoom step factor",
1.05));
+ addOption(new realSetting("zoomPinchFactor", 0, "n",
+ "WebGL zoom pinch sensitivity", 10));
+ addOption(new realSetting("zoomPinchCap", 0, "limit",
+ "WebGL maximum zoom pinch", 100));
addOption(new realSetting("zoomstep", 0, "step", "Mouse motion zoom step",
0.1));
+ addOption(new realSetting("shiftHoldDistance", 0, "n",
+ "WebGL touch screen distance limit for shift mode",
+ 20));
+ addOption(new realSetting("shiftWaitTime", 0, "ms",
+ "WebGL touch screen shift mode delay",
+ 200));
+ addOption(new realSetting("vibrateTime", 0, "ms",
+ "WebGL shift mode vibrate duration",
+ 25));
addOption(new realSetting("spinstep", 0, "deg/s", "Spin speed",
60.0));
addOption(new realSetting("framerate", 0, "frames/s", "Animation speed",
30.0));
addOption(new realSetting("framedelay", 0, "ms",
"Additional frame delay", 0.0));
- addOption(new realSetting("arcballradius", 0, "pixels",
- "Arcball radius", 750.0));
addOption(new realSetting("resizestep", 0, "step", "Resize step", 1.2));
- addOption(new IntSetting("doubleclick", 0, "ms",
- "Emulated double-click timeout", 200));
+ addOption(new IntSetting("digits", 0, "n",
+ "Default output file precision", 6));
addOption(new realSetting("paperwidth", 0, "bp", ""));
addOption(new realSetting("paperheight", 0, "bp", ""));
@@ -1298,6 +1321,7 @@ void initSettings() {
addOption(new stringSetting("dvisvgmOptions", 0, "string", ""));
addOption(new stringSetting("convertOptions", 0, "string", ""));
addOption(new stringSetting("gsOptions", 0, "string", ""));
+ addOption(new stringSetting("htmlviewerOptions", 0, "string", ""));
addOption(new stringSetting("psviewerOptions", 0, "string", ""));
addOption(new stringSetting("pdfviewerOptions", 0, "string", ""));
addOption(new stringSetting("pdfreloadOptions", 0, "string", ""));
@@ -1306,11 +1330,13 @@ void initSettings() {
"","setpagesize=false,unicode,pdfborder=0 0 0"));
addOption(new envSetting("config","config."+suffix));
+ addOption(new envSetting("htmlviewer", defaultHTMLViewer));
addOption(new envSetting("pdfviewer", defaultPDFViewer));
addOption(new envSetting("psviewer", defaultPSViewer));
addOption(new envSetting("gs", defaultGhostscript));
addOption(new envSetting("libgs", defaultGhostscriptLibrary));
addOption(new envSetting("epsdriver", defaultEPSdriver));
+ addOption(new envSetting("asygl", defaultAsyGL));
addOption(new envSetting("texpath", ""));
addOption(new envSetting("texcommand", ""));
addOption(new envSetting("dvips", "dvips"));
diff --git a/graphics/asymptote/settings.h b/graphics/asymptote/settings.h
index 83db0a30a5..7b46ccd449 100644
--- a/graphics/asymptote/settings.h
+++ b/graphics/asymptote/settings.h
@@ -120,8 +120,13 @@ const double cm=inches/2.54;
const double tex2ps=72.0/72.27;
const double ps2tex=1.0/tex2ps;
+const string AsyGLVersion="1.00";
+const string AsyGL="webgl/asygl-"+ AsyGLVersion+".js";
+const string WebGLheader="webgl/WebGLheader.html";
+const string WebGLfooter="webgl/WebGLfooter.html";
}
+
extern const char *REVISION;
#endif
diff --git a/graphics/asymptote/shaders.cc b/graphics/asymptote/shaders.cc
index 1067068772..fa9239a360 100644
--- a/graphics/asymptote/shaders.cc
+++ b/graphics/asymptote/shaders.cc
@@ -3,7 +3,7 @@
#include "common.h"
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
#include <fstream>
#include <sstream>
@@ -14,7 +14,7 @@
#include "shaders.h"
GLuint compileAndLinkShader(std::vector<ShaderfileModePair> const& shaders,
- size_t NLights, size_t NMaterials,
+ size_t Nlights, size_t NMaterials,
std::vector<std::string> const& defineflags)
{
GLuint mainShader = glCreateProgram();
@@ -23,7 +23,7 @@ GLuint compileAndLinkShader(std::vector<ShaderfileModePair> const& shaders,
size_t n=shaders.size();
for(size_t i=0; i < n; ++i) {
GLint newshader=createShaderFile(shaders[i].first,shaders[i].second,
- NLights,NMaterials,defineflags);
+ Nlights,NMaterials,defineflags);
glAttachShader(mainShader,newshader);
compiledShaders.push_back(newshader);
}
@@ -86,8 +86,6 @@ GLuint createShaderFile(std::string file, int shaderType, size_t Nlights,
shaderSrc << "#version " << GLSL_VERSION << "\r\n";
shaderSrc << "#extension GL_ARB_uniform_buffer_object : enable"
<< "\r\n";
- shaderSrc << "#extension GL_ARB_shading_language_packing : enable"
- << "\r\n";
size_t n=defineflags.size();
for(size_t i=0; i < n; ++i) {
diff --git a/graphics/asymptote/shaders.h b/graphics/asymptote/shaders.h
index f92b7010ab..56b4560d6a 100644
--- a/graphics/asymptote/shaders.h
+++ b/graphics/asymptote/shaders.h
@@ -21,9 +21,8 @@
typedef std::pair<std::string, int> ShaderfileModePair;
GLuint compileAndLinkShader(
- std::vector<ShaderfileModePair> const& shaders,
- size_t NLights, size_t NMaterials,
- std::vector<std::string> const& defineflags);
+ std::vector<ShaderfileModePair> const& shaders, size_t NLights,
+ size_t NMaterials, std::vector<std::string> const& defineflags);
GLuint createShaders(GLchar const *src, int shaderType,
std::string const& filename);
diff --git a/graphics/asymptote/tr.cc b/graphics/asymptote/tr.cc
index c62301cc43..be2beaf764 100644
--- a/graphics/asymptote/tr.cc
+++ b/graphics/asymptote/tr.cc
@@ -44,7 +44,7 @@
#include "common.h"
-#ifdef HAVE_GL
+#ifdef HAVE_LIBGL
#include <assert.h>
#include <math.h>
@@ -53,11 +53,6 @@
#ifdef WIN32
#include <windows.h>
#endif
-#ifdef __APPLE__
-#include <OpenGL/gl.h>
-#else
-#include <GL/gl.h>
-#endif
#include "tr.h"
#define DEFAULT_TILE_WIDTH 256
diff --git a/graphics/asymptote/tr.h b/graphics/asymptote/tr.h
index 72d1bef0e0..5485c44859 100644
--- a/graphics/asymptote/tr.h
+++ b/graphics/asymptote/tr.h
@@ -74,6 +74,7 @@
#ifdef __APPLE__
+#define GL_SILENCE_DEPRECATION
#include <OpenGL/gl.h>
#else
#include <GL/gl.h>
diff --git a/graphics/asymptote/triple.h b/graphics/asymptote/triple.h
index de6767a29f..af42e28583 100644
--- a/graphics/asymptote/triple.h
+++ b/graphics/asymptote/triple.h
@@ -11,6 +11,7 @@
#include <cassert>
#include <iostream>
+#include <fstream>
#include <cmath>
#include <cstring>
@@ -18,11 +19,6 @@
#include "angle.h"
#include "pair.h"
-namespace run {
-void transpose(double *a, size_t n);
-void inverse(double *a, size_t n);
-}
-
namespace camp {
typedef double Triple[3];
@@ -55,36 +51,66 @@ public:
double getz() const { return z; }
// transform by row-major matrix
- friend triple operator* (const double* t, const triple& v)
- {
+ friend triple operator* (const double* t, const triple& v) {
if(t == NULL)
return v;
double f=t[12]*v.x+t[13]*v.y+t[14]*v.z+t[15];
- if(f == 0.0)
- reportError("division by 0 in transform of a triple");
+ if(f != 0.0) {
+ f=1.0/f;
+
+ return triple((t[0]*v.x+t[1]*v.y+t[2]*v.z+t[3])*f,
+ (t[4]*v.x+t[5]*v.y+t[6]*v.z+t[7])*f,
+ (t[8]*v.x+t[9]*v.y+t[10]*v.z+t[11])*f);
+ }
+ reportError("division by 0 in transform of a triple");
+ return 0.0;
+ }
+
+ friend triple operator* (const triple& v, const double* t) {
+ if(t == NULL)
+ return v;
+ double f=t[3]*v.x+t[7]*v.y+t[11]*v.z+t[15];
+ if(f != 0.0) {
+ f=1.0/f;
+ return triple((v.x*t[0]+v.y*t[4]+v.z*t[8]+t[12])*f,
+ (v.x*t[1]+v.y*t[5]+v.z*t[9]+t[13])*f,
+ (v.x*t[2]+v.y*t[6]+v.z*t[10]+t[14])*f);
+ }
+ reportError("division by 0 in transform of a triple");
+ return 0.0;
+ }
+
+ friend triple Transform3(const triple& v, const double* t) {
+ return triple((t[0]*v.x+t[1]*v.y+t[2]*v.z),
+ (t[3]*v.x+t[4]*v.y+t[5]*v.z),
+ (t[6]*v.x+t[7]*v.y+t[8]*v.z));
+ }
+
+ friend triple Transform3(const double* t, const triple& v) {
+ return triple(v.x*t[0]+v.y*t[3]+v.z*t[6],
+ v.x*t[1]+v.y*t[4]+v.z*t[7],
+ v.x*t[2]+v.y*t[5]+v.z*t[8]);
+ }
+
+ // return x and y components of v*t.
+ friend pair Transform2T(const double* t, const triple& v)
+ {
+ double f=t[3]*v.x+t[7]*v.y+t[11]*v.z+t[15];
f=1.0/f;
-
- return triple((t[0]*v.x+t[1]*v.y+t[2]*v.z+t[3])*f,
- (t[4]*v.x+t[5]*v.y+t[6]*v.z+t[7])*f,
- (t[8]*v.x+t[9]*v.y+t[10]*v.z+t[11])*f);
+ return pair((t[0]*v.x+t[4]*v.y+t[8]*v.z+t[12])*f,
+ (t[1]*v.x+t[5]*v.y+t[9]*v.z+t[13])*f);
}
- friend triple transformNormal(const double* t, const triple& v)
+ // return z component of v*t.
+ friend double TransformZ(const triple& v, const double* t)
{
- if(t == NULL)
- return v;
-
- double T[16];
- memcpy(T,t,sizeof(double)*16);
- T[3]=T[7]=T[11]=0.0;
- run::inverse(T,4);
- run::transpose(T,4);
- triple V=T*v;
- return unit(V);
+ double f=t[3]*v.x+t[7]*v.y+t[11]*v.z+t[15];
+ f=1.0/f;
+ return (t[2]*v.x+t[6]*v.y+t[10]*v.z+t[14])*f;
}
-
+
friend void transformtriples(const double* t, size_t n, triple* d,
const triple* s)
{
@@ -287,9 +313,15 @@ public:
return s;
}
- friend ostream& operator << (ostream& out, const triple& z)
+ friend ostream& operator << (ostream& out, const triple& v)
{
- out << "(" << z.x << "," << z.y << "," << z.z << ")";
+ out << "(" << v.x << "," << v.y << "," << v.z << ")";
+ return out;
+ }
+
+ friend jsofstream& operator << (jsofstream& out, const triple& v)
+ {
+ out << "[" << v.x << "," << v.y << "," << v.z << "]";
return out;
}
@@ -339,17 +371,6 @@ inline double Straightness(const triple& z0, const triple& c0,
return std::max(abs2(c0-v-z0),abs2(z1-v-c1));
}
-// return the maximum perpendicular distance squared of points c0 and c1
-// from z0--z1.
-inline double Distance1(const triple& z0, const triple& c0,
- const triple& c1, const triple& z1)
-{
- triple Z0=c0-z0;
- triple Q=unit(z1-z0);
- triple Z1=c1-z0;
- return std::max(abs2(Z0-dot(Z0,Q)*Q),abs2(Z1-dot(Z1,Q)*Q));
-}
-
// return the perpendicular distance squared of a point z from the plane
// through u with unit normal n.
inline double Distance2(const triple& z, const triple& u, const triple& n)
diff --git a/graphics/asymptote/util.h b/graphics/asymptote/util.h
index 4414a6de1b..d07c543258 100644
--- a/graphics/asymptote/util.h
+++ b/graphics/asymptote/util.h
@@ -95,7 +95,7 @@ extern "C" double atanh(double x);
extern "C" double cbrt(double x);
extern "C" double erf(double x);
extern "C" double erfc(double x);
-extern "C" double tgamma(double x);
+extern "C" double lgamma(double x);
extern "C" double remainder(double x, double y);
extern "C" double hypot(double x, double y) throw();
extern "C" double jn(Int n, double x);
diff --git a/graphics/asymptote/webgl/WebGLfooter.html b/graphics/asymptote/webgl/WebGLfooter.html
deleted file mode 100644
index 043713cd25..0000000000
--- a/graphics/asymptote/webgl/WebGLfooter.html
+++ /dev/null
@@ -1,17 +0,0 @@
- </script>
-
-</head>
-
-
-<body onload="webGLStart();">
- <script type="text/javascript" id="eventfunc">
- // forceredraw = true;
- function processloop(deltams) {
- // enter arbitrary processing event here
- // if one wants to modify the object per tick.
- }
- </script>
- <canvas id="Asymptote" style="border: none;" width="800" height="800" />
-</body>
-
-</html>
diff --git a/graphics/asymptote/webgl/WebGLheader.html b/graphics/asymptote/webgl/WebGLheader.html
deleted file mode 100644
index 98fa24ec32..0000000000
--- a/graphics/asymptote/webgl/WebGLheader.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<html>
-
-<head>
- <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-
- <script id="shader-fs" type="x-shader/x-fragment">#version 300 es
- precision mediump float;
-
- in vec4 vColor;
- in vec3 vNormal;
- out vec4 outColor;
-
- flat in int vMaterialIndex;
-
- // can also construct an alternative shader,
- // but would require more work.
- // FIXME: An ad-hoc solution is to use uniforms...
- uniform int useColor;
-
- struct Material {
- vec4 baseColor, emissive, specular;
- float roughness, metallic, f0;
- };
-
- uniform mat4 uMMatrix; // model matrix
- uniform mat4 uPMatrix; // projection matrix
- uniform mat4 uVMatrix; // view matrix
-
- uniform Material objMaterial[100]; // assuming we are doing multiple materials,
-
- // we can upload them one at a time per call.
- // but, we can also make it an array + pass in an index,
- // say uniform Material objMaterial[$nmat];
-
- // or, even use Uniform Buffer Objects...
-
- // type, for now
- #define POINT_LIGHT 1
- #define DIRECTIONAL_LIGHT 2
-
- // for direction, parameter is direction
- // for point light, parameter is position (in homoeg coords?)
- // are these given in world coords, or view coords? - I can do both
- struct Light {
- int type;
- vec3 color;
- float brightness;
- vec4 parameter;
- };
-
- uniform int unLights; // can be replaced by a constant, or even a fixed array in the final release.
- uniform Light objLights[100]; // again, can be set at will by the asy generator.
-
- float NDF_TRG(vec3 halfv, vec3 normal, float roughness) {
- float ndoth=max(dot(normal, halfv), 0.0);
- float alpha2=roughness*roughness;
-
- float denom=pow(ndoth*ndoth*(alpha2-1.0)+1.0, 2.0);
- return alpha2/denom;
- }
-
- float GGX_Geom(vec3 v, vec3 normal, float roughness) {
- float ndotv=max(dot(v, normal), 0.0);
- float ap=pow((1.0+roughness), 2.0);
- float k=ap/8.0;
-
- return ndotv/((ndotv*(1.0-k))+k);
- }
-
- float Geom(vec3 v, vec3 l, vec3 normal, float roughness) {
- return GGX_Geom(v,normal,roughness)*GGX_Geom(l,normal,roughness);
- }
-
- float Fresnel(vec3 h, vec3 v, float f0) {
- float hdotv=max(dot(h,v), 0.0);
- return f0+(1.0-f0)*pow((1.0-hdotv),5.0);
- }
-
- // physical based shading using UE4 model.
- vec3 physBDRF(Material material, vec3 normal, vec3 lightdir, vec3 lookdir) {
- vec3 lambertian=material.baseColor.rgb;
- vec3 h=normalize(lightdir+lookdir);
- float omegain=max(dot(lookdir, normal), 0.0);
- float omegali=max(dot(lightdir, normal), 0.0);
-
- float D=NDF_TRG(h, normal, material.roughness*material.roughness);
- float G=Geom(lookdir, lightdir, normal, material.roughness*material.roughness);
- float F=Fresnel(h, lookdir, material.f0);
-
- float denom=4.0*omegain*omegali;
- if (denom == 0.0) {return vec3(0,0,0); }
-
- float rawrefl=(D*G) / denom;
-
- vec3 dielectric=mix(lambertian, rawrefl*material.specular.rgb, F);
- vec3 metal=rawrefl*material.baseColor.rgb;
-
- return mix(dielectric, metal, material.metallic);
- }
-
- void main(void)
- {
- // change later.
-
- // assuming for now that the headlamp is always on.
- // light dir=+Z, viewDir=+Z,
-
- float normalSign = gl_FrontFacing ? 1.0 : -1.0;
-
- vec3 normal=normalSign*normalize(vNormal);
- vec3 Z=vec3(0,0,1.0);
- vec3 rawCol = vec3(0.0);
-
- Material m=objMaterial[vMaterialIndex];
-
- if (useColor == 1) {
- m.baseColor = vColor;
- }
-
- for (int i=0;i<unLights;++i) {
- Light Li=objLights[i];
- float cosTheta = 0.0;
- float atteunation = 1.0;
- vec3 lightDirection = vec3(0.0);
- if (Li.type == DIRECTIONAL_LIGHT) {
- lightDirection = Li.parameter.xyz;
- cosTheta = max(dot(normal, lightDirection), 0.0);
- }
- vec3 radiance = cosTheta * Li.color * Li.brightness;
- rawCol += physBDRF(m, normal, lightDirection, Z) * radiance;
- }
- outColor=vec4(rawCol,1);
- }
- </script>
-
- <script id="shader-vs" type="x-shader/x-vertex">#version 300 es
- precision mediump float;
- in vec3 aVertexPosition;
- in vec4 aVertexColor;
- in vec3 aVertexNormal;
- in int aVertexMaterialIndex;
-
- uniform mat4 uMMatrix; // model matrix
- uniform mat4 uPMatrix; // projection matrix
- uniform mat4 uVMatrix; // view matrix
-
- out vec4 vColor;
- out vec3 vNormal;
- flat out int vMaterialIndex;
-
- mat4 invdual(mat4 invec) {
- return inverse(transpose(invec));
- }
- void main(void) {
- gl_Position=uPMatrix*uVMatrix*uMMatrix*vec4(aVertexPosition,1.0);
-
- mat4 invdualmat=invdual(uVMatrix*uMMatrix);
- vec4 rawNormal=invdualmat*vec4(aVertexNormal, 0);
-
- vNormal=normalize(rawNormal.xyz);
-
- vColor=aVertexColor;
- vMaterialIndex=aVertexMaterialIndex;
- }
-
- </script>
-
- <script type="text/javascript" src="https://vectorgraphics.github.io/asymptote/webgl/gl-matrix-min-2.3.2.js"></script>
- <script type="text/javascript" src="https://vectorgraphics.github.io/asymptote/webgl/glm-js-min-2.2.2.js"></script>
- <script type="text/javascript" src="https://vectorgraphics.github.io/asymptote/webgl/arcball-min-0.01.js"></script>
- <script type="text/javascript" src="gl.js"></script>
- <script type="text/javascript">
diff --git a/graphics/asymptote/webgl/arcball-0.01.js b/graphics/asymptote/webgl/arcball-0.01.js
deleted file mode 100644
index db6da0f81a..0000000000
--- a/graphics/asymptote/webgl/arcball-0.01.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// double, double => rotation matrix
-// require https://cdn.rawgit.com/humbletim/glm-js/31fd034b/build/glm-js.min.js
-
-
-var arcballLib = {
- arcball: function(oldmouse, newmouse) {
- let oldMouseNew = [0, 0, 0];
- let newMouseNew = [0, 0, 0];
-
- let testNorm = this.twonorm(oldmouse);
- if (testNorm > 1) {
- oldMouseNew[0] = oldmouse[0] / testNorm;
- oldMouseNew[1] = oldmouse[1] / testNorm;
- } else {
- oldMouseNew[0] = oldmouse[0];
- oldMouseNew[1] = oldmouse[1];
- }
-
- let testNorm2 = this.twonorm(newmouse);
- if (testNorm2 > 1) {
- newMouseNew[0] = newmouse[0] / testNorm2;
- newMouseNew[1] = newmouse[1] / testNorm2;
- } else {
- newMouseNew[0] = newmouse[0];
- newMouseNew[1] = newmouse[1];
- }
-
- var z1squared = 1 - (oldMouseNew[1] ** 2) - (oldMouseNew[0] ** 2);
- if (z1squared < 0 && z1squared > -0.00001) {
- z1squared = 0;
- }
-
- var z2squared = 1 - (newMouseNew[1] ** 2) - (newMouseNew[0] ** 2);
- if (z2squared < 0 && z2squared > -0.00001) {
- z2squared = 0;
- }
-
-
- oldMouseNew[2] = Math.sqrt(z1squared);
- newMouseNew[2] = Math.sqrt(z2squared);
-
- if (isNaN(oldMouseNew[2]) || isNaN(newMouseNew[2])) {
-
- alert('Error!');
- }
-
-
- let oldMouseVec = glm.vec3(...oldMouseNew);
- let newMouseVec = glm.vec3(...newMouseNew);
- let axis = glm.normalize(glm.cross(oldMouseVec, newMouseVec));
-
- // console.log(axis[0], axis[1], axis[2]);
-
- let angle = Math.acos(glm.dot(oldMouseVec, newMouseVec));
-
- return [angle, axis]
-
- },
-
- twonorm: function(v) {
- let normSq = 0
- for (let i = 0; i < v.length; i++) {
- normSq += (v[i] ** 2);
- }
- return Math.sqrt(normSq);
- }
-} \ No newline at end of file
diff --git a/graphics/asymptote/webgl/arcball-min-0.01.js b/graphics/asymptote/webgl/arcball-min-0.01.js
deleted file mode 100644
index 9efc72fa4d..0000000000
--- a/graphics/asymptote/webgl/arcball-min-0.01.js
+++ /dev/null
@@ -1 +0,0 @@
-var arcballLib={arcball:function(oldmouse,newmouse){let oldMouseNew=[0,0,0];let newMouseNew=[0,0,0];let testNorm=this.twonorm(oldmouse);if(testNorm>1){oldMouseNew[0]=oldmouse[0]/testNorm;oldMouseNew[1]=oldmouse[1]/testNorm}else{oldMouseNew[0]=oldmouse[0];oldMouseNew[1]=oldmouse[1]}let testNorm2=this.twonorm(newmouse);if(testNorm2>1){newMouseNew[0]=newmouse[0]/testNorm2;newMouseNew[1]=newmouse[1]/testNorm2}else{newMouseNew[0]=newmouse[0];newMouseNew[1]=newmouse[1]}var z1squared=1-oldMouseNew[1]**2-oldMouseNew[0]**2;if(z1squared<0&&z1squared>-1e-5){z1squared=0}var z2squared=1-newMouseNew[1]**2-newMouseNew[0]**2;if(z2squared<0&&z2squared>-1e-5){z2squared=0}oldMouseNew[2]=Math.sqrt(z1squared);newMouseNew[2]=Math.sqrt(z2squared);if(isNaN(oldMouseNew[2])||isNaN(newMouseNew[2])){alert("Error!")}let oldMouseVec=glm.vec3(...oldMouseNew);let newMouseVec=glm.vec3(...newMouseNew);let axis=glm.normalize(glm.cross(oldMouseVec,newMouseVec));let angle=Math.acos(glm.dot(oldMouseVec,newMouseVec));return[angle,axis]},twonorm:function(v){let normSq=0;for(let i=0;i<v.length;i++){normSq+=v[i]**2}return Math.sqrt(normSq)}}; \ No newline at end of file
diff --git a/graphics/asymptote/webgl/arcball.js b/graphics/asymptote/webgl/arcball.js
deleted file mode 100644
index db6da0f81a..0000000000
--- a/graphics/asymptote/webgl/arcball.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// double, double => rotation matrix
-// require https://cdn.rawgit.com/humbletim/glm-js/31fd034b/build/glm-js.min.js
-
-
-var arcballLib = {
- arcball: function(oldmouse, newmouse) {
- let oldMouseNew = [0, 0, 0];
- let newMouseNew = [0, 0, 0];
-
- let testNorm = this.twonorm(oldmouse);
- if (testNorm > 1) {
- oldMouseNew[0] = oldmouse[0] / testNorm;
- oldMouseNew[1] = oldmouse[1] / testNorm;
- } else {
- oldMouseNew[0] = oldmouse[0];
- oldMouseNew[1] = oldmouse[1];
- }
-
- let testNorm2 = this.twonorm(newmouse);
- if (testNorm2 > 1) {
- newMouseNew[0] = newmouse[0] / testNorm2;
- newMouseNew[1] = newmouse[1] / testNorm2;
- } else {
- newMouseNew[0] = newmouse[0];
- newMouseNew[1] = newmouse[1];
- }
-
- var z1squared = 1 - (oldMouseNew[1] ** 2) - (oldMouseNew[0] ** 2);
- if (z1squared < 0 && z1squared > -0.00001) {
- z1squared = 0;
- }
-
- var z2squared = 1 - (newMouseNew[1] ** 2) - (newMouseNew[0] ** 2);
- if (z2squared < 0 && z2squared > -0.00001) {
- z2squared = 0;
- }
-
-
- oldMouseNew[2] = Math.sqrt(z1squared);
- newMouseNew[2] = Math.sqrt(z2squared);
-
- if (isNaN(oldMouseNew[2]) || isNaN(newMouseNew[2])) {
-
- alert('Error!');
- }
-
-
- let oldMouseVec = glm.vec3(...oldMouseNew);
- let newMouseVec = glm.vec3(...newMouseNew);
- let axis = glm.normalize(glm.cross(oldMouseVec, newMouseVec));
-
- // console.log(axis[0], axis[1], axis[2]);
-
- let angle = Math.acos(glm.dot(oldMouseVec, newMouseVec));
-
- return [angle, axis]
-
- },
-
- twonorm: function(v) {
- let normSq = 0
- for (let i = 0; i < v.length; i++) {
- normSq += (v[i] ** 2);
- }
- return Math.sqrt(normSq);
- }
-} \ No newline at end of file
diff --git a/graphics/asymptote/webgl/data.js b/graphics/asymptote/webgl/data.js
deleted file mode 100644
index 915dc35619..0000000000
--- a/graphics/asymptote/webgl/data.js
+++ /dev/null
@@ -1,47 +0,0 @@
-var p = [
- [0, 0, 1.6],
- [1, 1.333333333333333, 0],
- [0, 0.666666666666667, 0],
- [0, 1, 0],
- [0.333333333333333, 0, 0],
- [0.333333333333333, 0.333333333333333, 0],
- [0.333333333333333, 0.666666666666667, 0],
- [0.333333333333333, 1, 0],
- [0.666666666666667, 0, 0],
- [0.666666666666667, 0.333333333333333, 0],
- [0.666666666666667, 0.666666666666667, 0],
- [0.666666666666667, 1, 0],
- [1, 0, 0],
- [1, 0.333333333333333, 0],
- [1, 0.666666666666667, 0],
- [1, 1, 0.1]
- ];
-
- var materialIndex = 0;
-
- var objMaterial = new Material(
- baseColor = [1, 1, 0, 1],
- emissive = [0, 0, 0, 1],
- specular = [1, 1, 1, 1],
- roughness = 0.15,
- metallic = 0,
- f0 = 0.04
- );
-
- // Lighting parameters
- var L = [0.447735768366173, 0.497260947684137, 0.743144825477394];
- var Ambient = [0.1, 0.1, 0.1];
- var Diffuse = [0.8, 0.8, 0.8, 1];
- var Specular = [0.7, 0.7, 0.7, 1];
- var specularfactor = 3;
-
- // Material parameters
- var emissive = [0, 0, 0, 1];
- var ambient = [0, 0, 0, 1];
- var diffuse = [1, 0, 0, 1];
- var specular = [0.75, 0.75, 0.75, 1];
- var shininess = 0.5;
-
- var cameraPos = vec3.fromValues(0, 0, 2);
- var cameraLookAt = vec3.fromValues(0, 0, 0);
- var cameraUp = vec3.fromValues(1, 0, 0);
diff --git a/graphics/asymptote/webgl/gl-0.01.js b/graphics/asymptote/webgl/gl-0.01.js
deleted file mode 100644
index 079b1bb70e..0000000000
--- a/graphics/asymptote/webgl/gl-0.01.js
+++ /dev/null
@@ -1,738 +0,0 @@
-// Contains code from http: //learningwebgl.com/blog/ ? p=28#triangle-vertex-positions
-// modified to produce a subdivision algorithm for rendering Bezier
-// patches with WebGL
-var gl;
-
-function initGL(canvas) {
- try {
- gl=canvas.getContext("experimental-webgl");
- gl.viewportWidth=canvas.width;
- gl.viewportHeight=canvas.height;
- } catch(e) {}
- if(!gl) {
- alert("Could not initialise WebGL, sorry : -(");
- }
-}
-
-function getShader(gl, id) {
- var shaderScript=document.getElementById(id);
- if(!shaderScript) {
- return null;
- }
- var str="";
- var k=shaderScript.firstChild;
- while(k) {
- if(k.nodeType == 3) {
- str += k.textContent;
- }
- k=k.nextSibling;
- }
- var shader;
- if(shaderScript.type == "x-shader/x-fragment") {
- shader=gl.createShader(gl.FRAGMENT_SHADER);
- } else if(shaderScript.type == "x-shader/x-vertex") {
- shader=gl.createShader(gl.VERTEX_SHADER);
- } else {
- return null;
- }
- gl.shaderSource(shader,str);
- gl.compileShader(shader);
- if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)) {
- alert(gl.getShaderInfoLog(shader));
- return null;
- }
- return shader;
-}
-
-var shaderProgram;
-
-function initShaders() {
- var fragmentShader=getShader(gl,"shader-fs");
- var vertexShader=getShader(gl,"shader-vs");
- shaderProgram=gl.createProgram();
- gl.attachShader(shaderProgram,vertexShader);
- gl.attachShader(shaderProgram,fragmentShader);
- gl.linkProgram(shaderProgram);
- if(!gl.getProgramParameter(shaderProgram,gl.LINK_STATUS)) {
- alert("Could not initialise shaders");
- }
- gl.useProgram(shaderProgram);
- shaderProgram.vertexPositionAttribute=gl.getAttribLocation(shaderProgram,"aVertexPosition");
- gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
- shaderProgram.vertexColorAttribute=gl.getAttribLocation(shaderProgram,"aVertexColor");
- gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);
- shaderProgram.pMatrixUniform=gl.getUniformLocation(shaderProgram,"uPMatrix");
- shaderProgram.mvMatrixUniform=gl.getUniformLocation(shaderProgram,"uMVMatrix");
-}
-var mvMatrix=mat4.create();
-var pMatrix=mat4.create();
-
-function setMatrixUniforms() {
- gl.uniformMatrix4fv(shaderProgram.pMatrixUniform,false,pMatrix);
- gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform,false,mvMatrix);
-}
-
-var VertexBuffer;
-var ColorBuffer;
-
-var vertices=new Array();
-var colors=new Array();
-var indices=new Array();
-var nvertices=0;
-
-var mvMatrix=mat4.create();
-var translOffset=[0,0,0];
-var zoomFactor=1;
-
-var mvMatrixStack=[] ;
-var pMatrix=mat4.create();
-
-var localRotation=mat4.create();
-
-function mvPushMatrix() {
- var copy=mat4.create();
- mat4.set(mvMatrix,copy);
- mvMatrixStack.push(copy);
-}
-
-function mvPopMatrix() {
- if(mvMatrixStack.length == 0) {
- throw "Invalid popMatrix!";
- }
- mvMatrix=mvMatrixStack.pop();
-}
-
-function degToRad(degrees) {
- return degrees*Math.PI/180;
-}
-
-var redraw=true;
-var mouseDownOrTouchActive=false;
-var lastMouseX=null;
-var lastMouseY=null;
-var touchID=null;
-
-
-var center=[0,0,1];
-var centerInv=[0,0,-1];
-
-var rotationMatLocal=mat4.create();
-var rotationMatrix=mat4.create();
-mat4.identity(rotationMatrix);
-
-function handleMouseDown(event) {
- mouseDownOrTouchActive=true;
- lastMouseX=event.clientX;
- lastMouseY=event.clientY;
-}
-
-function handleTouchStart(evt) {
- evt.preventDefault();
- var touches=evt.targetTouches;
-
- if(touches.length == 1 && !mouseDownOrTouchActive) {
- touchId=touches[0].identifier;
- lastMouseX=touches[0].pageX,
- lastMouseY=touches[0].pageY;
- }
-}
-
-function handleMouseUpOrTouchEnd(event) {
- mouseDownOrTouchActive=false;
-}
-
-function processDrag(newX, newY, pan=false) {
- let lastX=(lastMouseX-400)/400;
- let lastY=(lastMouseY-400)/400;
-
- let rawX=(newX-400)/400;
- let rawY=(newY-400)/400;
-
- if(!pan) {
- let [angle,axis]=arcballLib.arcball([lastX,-lastY],[rawX,-rawY]);
- let tmpMatrix=mat4.create()
- mat4.identity(tmpMatrix)
- mat4.rotate(tmpMatrix,tmpMatrix,angle,[axis[0],axis[1],axis[2]])
- mat4.multiply(rotationMatrix,tmpMatrix,rotationMatrix);
- } else {
- translOffset[0] +=(rawX-lastX);
- translOffset[1] -=(rawY-lastY);
- }
- lastMouseX=newX;
- lastMouseY=newY;
- redraw=true;
-}
-
-function handleKey(key) {
- var keycode=key.key;
- var rotate=true;
- var axis=[0,0,1];
- switch(keycode) {
- case "w":
- axis=[-1,0,0];
- break;
- case "d":
- axis=[0,1,0];
- break;
- case "a":
- axis=[0,-1,0];
- break;
- case "s":
- axis=[1,0,0];
- break;
-
- default:
- rotate=false;
- break;
- }
-
- if(rotate) {
- mat4.rotate(rotationMatrix,rotationMatrix,0.1,axis);
- redraw=true;
- }
-
-}
-
-function handleMouseWheel(event) {
- zoomFactor -= event.deltaY/100;
-
- if(zoomFactor < 0) {
- zoomFactor=0;
- } else if(zoomFactor > 100) {
- zoomFactor=100;
- }
-
- res=zoomFactor*0.001;
- redraw=true;
-}
-
-function handleMouseMove(event) {
- if(!mouseDownOrTouchActive) {
- return;
- }
-
- var newX=event.clientX;
- var newY=event.clientY;
-
- processDrag(newX,newY,event.getModifierState("Alt"));
-}
-
-function handleTouchMove(evt) {
- evt.preventDefault();
- var touches=evt.targetTouches;
-
- if(touches.length == 1 && touchId == touches[0].identifier) {
- var newX=touches[0].pageX;
- var newY=touches[0].pageY;
- processDrag(newX,newY);
- }
-}
-
-// Prepare canvas for drawing
-function sceneSetup() {
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
- mat4.perspective(pMatrix,45,gl.viewportWidth/gl.viewportHeight,0.1,100.0);
- mat4.identity(mvMatrix);
-
- mat4.translate(mvMatrix,mvMatrix,centerInv);
- mat4.multiply(mvMatrix,mvMatrix,rotationMatrix);
- mat4.scale(mvMatrix,mvMatrix,[zoomFactor,zoomFactor,zoomFactor]);
- mat4.translate(mvMatrix,mvMatrix,center);
-
- mat4.translate(mvMatrix,mvMatrix,translOffset)
-}
-
-var indexExt;
-
-// Create buffer data for the patch and its subdivisions to be pushed to the graphics card
-//Takes as an argument the array of vertices that define the patch to be drawn
-// Using the vertex position buffer of the above function,draw patch.
-function setBuffer() {
- VertexBuffer=gl.createBuffer();
- VertexBuffer.itemSize=3;
-
- ColorBuffer=gl.createBuffer();
- ColorBuffer.itemSize=4;
-
- indexBuffer=gl.createBuffer();
- indexBuffer.itemSize=1;
-}
-
-function drawBuffer() {
- gl.bindBuffer(gl.ARRAY_BUFFER,VertexBuffer);
- gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW);
- gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute,
- VertexBuffer.itemSize,gl.FLOAT,false,0,0);
- VertexBuffer.numItems=nvertices;
-
- gl.bindBuffer(gl.ARRAY_BUFFER,ColorBuffer);
- gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(colors),gl.STATIC_DRAW);
- gl.vertexAttribPointer(shaderProgram.vertexColorAttribute,
- ColorBuffer.itemSize,gl.FLOAT,false,0,0);
- ColorBuffer.numItems=nvertices;
-
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indexBuffer);
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,
- indexExt ? new Uint32Array(indices) : new Uint16Array(indices),
- gl.STATIC_DRAW);
- indexBuffer.numItems=indices.length;
- gl.drawElements(gl.TRIANGLES,indexBuffer.numItems,
- indexExt ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT,0);
- vertices=[];
- colors=[];
- indices=[];
- nvertices=0;
-}
-
-var pixel=1.0; // Adaptive rendering constant.
-var FillFactor=0.1;
-var BezierFactor=0.4;
-//var res=0.0005; // Temporary
-var res=0.001; // Temporary
-var res2=res*res;
-var Epsilon=0.1*res;
-var epsilon=0;
-var Fuzz=1000*Number.EPSILON;
-var Fuzz2=Fuzz*Fuzz;
-
-function Split3(z0, c0, c1, z1) {
- this.m0=new Array(3);
- this.m2=new Array(3);
- this.m3=new Array(3);
- this.m4=new Array(3);
- this.m5=new Array(3);
- for(var i=0; i < 3; ++i) {
- this.m0[i]=0.5*(z0[i]+c0[i]);
- var m1=0.5*(c0[i]+c1[i]);
- this.m2[i]=0.5*(c1[i]+z1[i]);
- this.m3[i]=0.5*(this.m0[i]+m1);
- this.m4[i]=0.5*(m1+this.m2[i]);
- this.m5[i]=0.5*(this.m3[i]+this.m4[i]);
- }
-}
-
-function unit(v) {
- var norm=Math.sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
- norm=(norm != 0) ? 1/norm : 1;
- return [v[0]*norm,v[1]*norm,v[2]*norm];
-}
-
-// Store the vertex v and its color vector c in the buffer.
-function vertex(v,c) {
- vertices.push(v[0]);
- vertices.push(v[1]);
- vertices.push(v[2]);
-
- colors.push(c[0]);
- colors.push(c[1]);
- colors.push(c[2]);
- colors.push(c[3]);
- return nvertices++;
-}
-
-function abs2(v) {
- return v[0]*v[0]+v[1]*v[1]+v[2]*v[2];
-}
-
-function dot(u, v) {
- return u[0]*v[0]+u[1]*v[1]+u[2]*v[2];
-}
-
-function cross(u, v) {
- return [u[1]*v[2]-u[2]*v[1],
- u[2]*v[0]-u[0]*v[2],
- u[0]*v[1]-u[1]*v[0]
- ];
-}
-
-function normal(left3, left2, left1, middle, right1, right2, right3) {
- var u0=right1[0]-middle[0];
- var v0=left1[0]-middle[0];
- var u1=right1[1]-middle[1];
- var v1=left1[1]-middle[1];
- var u2=right1[2]-middle[2];
- var v2=left1[2]-middle[2];
- var n=[
- u1*v2-u2*v1,
- u2*v0-u0*v2,
- u0*v1-u1*v0
- ];
- if(abs2(n) > epsilon)
- return unit(n);
-
- var lp=[v0,v1,v2];
- var rp=[u0,u1,u2];
- var lpp=[middle[0]+left2[0]-2*left1[0],
- middle[1]+left2[1]-2*left1[1],
- middle[2]+left2[2]-2*left1[2]
- ];
- var rpp=[middle[0]+right2[0]-2*right1[0],
- middle[1]+right2[1]-2*right1[1],
- middle[2]+right2[2]-2*right1[2]
- ];
- var a=cross(rpp,lp);
- var b=cross(rp,lpp);
- n=[a[0]+b[0],
- a[1]+b[1],
- a[2]+b[2]
- ];
- if(abs2(n) > epsilon)
- return unit(n);
-
- var lppp=[left3[0]-middle[0]+3*(left1[0]-left2[0]),
- left3[1]-middle[1]+3*(left1[1]-left2[1]),
- left3[2]-middle[2]+3*(left1[2]-left2[2])
- ];
- var rppp=[right3[0]-middle[0]+3*(right1[0]-right2[0]),
- right3[1]-middle[1]+3*(right1[1]-right2[1]),
- right3[2]-middle[2]+3*(right1[2]-right2[2])
- ];
- a=cross(rpp,lpp);
- b=cross(rp,lppp);
- var c=cross(rppp,lp);
- var d=cross(rppp,lpp);
- var e=cross(rpp,lppp);
- var f=cross(rppp,lppp);
- return unit([9*a[0]+3*(b[0]+c[0]+d[0]+e[0])+f[0],
- 9*a[1]+3*(b[1]+c[1]+d[1]+e[1])+f[1],
- 9*a[2]+3*(b[2]+c[2]+d[2]+e[2])+f[2]
- ]);
-}
-
-// return the maximum distance squared of points c0 and c1 from
-// the respective internal control points of z0--z1.
-function Straightness(z0,c0,c1,z1)
-{
- var third=1.0/3.0;
- var v=[third*(z1[0]-z0[0]),third*(z1[1]-z0[1]),third*(z1[2]-z0[2])];
- return Math.max(abs2([c0[0]-v[0]-z0[0],c0[1]-v[1]-z0[1],c0[2]-v[2]-z0[2]]),
- abs2([z1[0]-v[0]-c1[0],z1[1]-v[1]-c1[1],z1[2]-v[2]-c1[2]]));
-}
-
-// return the maximum perpendicular distance squared of points c0 and c1
-// from z0--z1.
-function Distance1(z0, c0, c1, z1) {
- var Z0=[c0[0]-z0[0],c0[1]-z0[1],c0[2]-z0[2]];
- var Q=unit([z1[0]-z0[0],z1[1]-z0[1],z1[2]-z0[2]]);
- var Z1=[c1[0]-z0[0],c1[1]-z0[1],c1[2]-z0[2]];
- var p0=dot(Z0,Q);
- var p1=dot(Z1,Q);
- return Math.max(abs2([Z0[0]-p0*Q[0],Z0[1]-p0*Q[1],Z0[2]-p0*Q[2]]),
- abs2([Z1[0]-p1*Q[0],Z1[1]-p1*Q[1],Z1[2]-p1*Q[2]]));
-}
-
-// return the perpendicular distance squared of a point z from the plane
-// through u with unit normal n.
-function Distance2(z, u, n) {
- var d=dot([z[0]-u[0],z[1]-u[1],z[2]-u[2]],n);
- return d*d;
-}
-
-function Distance(p) {
- var p0=p[0];
- var p3=p[3];
- var p12=p[12];
- var p15=p[15];
-
- // Check the flatness of the quad.
- var d=Distance2(p15,p0,normal(p3,p[2],p[1],p0,p[4],p[8],p12));
-
- // Determine how straight the edges are.
- d=Math.max(d,Straightness(p0,p[1],p[2],p3));
- d=Math.max(d,Straightness(p0,p[4],p[8],p12));
- d=Math.max(d,Straightness(p3,p[7],p[11],p15));
- d=Math.max(d,Straightness(p12,p[13],p[14],p15));
-
- // Determine how straight the interior control curves are.
- d=Math.max(d,Straightness(p[4],p[5],p[6],p[7]));
- d=Math.max(d,Straightness(p[8],p[9],p[10],p[11]));
- d=Math.max(d,Straightness(p[1],p[5],p[9],p[13]));
- return Math.max(d,Straightness(p[2],p[6],p[10],p[14]));
-}
-
-var k=1;
-// Return color associated with unit normal vector n.
-function color(n) {
- var Ldotn=L[0]*n[0]+L[1]*n[1]+L[2]*n[2];
- if(Ldotn < 0) Ldotn=0;
- var p=[emissive[0]+ambient[0]*Ambient[0]+Ldotn*diffuse[0]*Diffuse[0],
- emissive[1]+ambient[1]*Ambient[1]+Ldotn*diffuse[1]*Diffuse[1],
- emissive[2]+ambient[2]*Ambient[2]+Ldotn*diffuse[2]*Diffuse[2]
- ];
- var s=shininess*128;
- var H=unit([L[0],L[1],L[2]+1]);
- var f=Math.pow(H[0]*n[0]+H[1]*n[1]+H[2]*n[2],s);
-
- if(Ldotn > 0) // Phong-Blinn model of specular reflection
- p=[p[0]+f*specular[0]*Specular[0],p[1]+f*specular[1]*Specular[1],
- p[2]+f*specular[2]*Specular[2]
- ];
-
- return [p[0],p[1],p[2],1];
-}
-
-function render(p, I0, I1, I2, I3, P0, P1, P2, P3, flat0, flat1, flat2, flat3,
- C0, C1, C2, C3) {
- if(Distance(p) < res2) { // Patch is flat
- indices.push(I0);
- indices.push(I1);
- indices.push(I2);
-
- indices.push(I0);
- indices.push(I2);
- indices.push(I3);
- return;
- }
-
- var p0=p[0];
- var p3=p[3];
- var p12=p[12];
- var p15=p[15];
-
- var c0=new Split3(p0,p[1],p[2],p3);
- var c1=new Split3(p[4],p[5],p[6],p[7]);
- var c2=new Split3(p[8],p[9],p[10],p[11]);
- var c3=new Split3(p12,p[13],p[14],p15);
- var c4=new Split3(p0,p[4],p[8],p12);
- var c5=new Split3(c0.m0,c1.m0,c2.m0,c3.m0);
- var c6=new Split3(c0.m3,c1.m3,c2.m3,c3.m3);
- var c7=new Split3(c0.m5,c1.m5,c2.m5,c3.m5);
- var c8=new Split3(c0.m4,c1.m4,c2.m4,c3.m4);
- var c9=new Split3(c0.m2,c1.m2,c2.m2,c3.m2);
- var c10=new Split3(p3,p[7],p[11],p15);
-
- var s0=[p0,c0.m0,c0.m3,c0.m5,c4.m0,c5.m0,c6.m0,c7.m0,
- c4.m3,c5.m3,c6.m3,c7.m3,c4.m5,c5.m5,c6.m5,c7.m5
- ];
- var s1=[c4.m5,c5.m5,c6.m5,c7.m5,c4.m4,c5.m4,c6.m4,c7.m4,
- c4.m2,c5.m2,c6.m2,c7.m2,p12,c3.m0,c3.m3,c3.m5
- ];
- var s2=[c7.m5,c8.m5,c9.m5,c10.m5,c7.m4,c8.m4,c9.m4,c10.m4,
- c7.m2,c8.m2,c9.m2,c10.m2,c3.m5,c3.m4,c3.m2,p15
- ];
- var s3=[c0.m5,c0.m4,c0.m2,p3,c7.m0,c8.m0,c9.m0,c10.m0,
- c7.m3,c8.m3,c9.m3,c10.m3,c7.m5,c8.m5,c9.m5,c10.m5
- ];
-
- var m4=s0[15];
-
- var n0=normal(s0[0],s0[4],s0[8],s0[12],s0[13],s0[14],s0[15]);
- if(n0 == 0.0) {
- n0=normal(s0[0],s0[4],s0[8],s0[12],s0[11],s0[7],s0[3]);
- if(n0 == 0.0) n0=normal(s0[3],s0[2],s0[1],s0[0],s0[13],s0[14],s0[15]);
- }
-
- var n1=normal(s1[12],s1[13],s1[14],s1[15],s1[11],s1[7],s1[3]);
- if(n1 == 0.0) {
- n1=normal(s1[12],s1[13],s1[14],s1[15],s1[2],s1[1],s1[0]);
- if(n1 == 0.0) n1=normal(s1[0],s1[4],s1[8],s1[12],s1[11],s1[7],s1[3]);
- }
-
- var n2=normal(s2[15],s2[11],s2[7],s2[3],s2[2],s2[1],s2[0]);
- if(n2 == 0.0) {
- n2=normal(s2[15],s2[11],s2[7],s2[3],s2[4],s2[8],s2[12]);
- if(n2 == 0.0) n2=normal(s2[12],s2[13],s2[14],s2[15],s2[2],s2[1],s2[0]);
- }
-
- var n3=normal(s3[3],s3[2],s3[1],s3[0],s3[4],s3[8],s3[12]);
- if(n3 == 0.0) {
- n3=normal(s3[3],s3[2],s3[1],s3[0],s3[13],s3[14],s3[15]);
- if(n3 == 0.0) n3=normal(s3[15],s3[11],s3[7],s3[3],s3[4],s3[8],s3[12]);
- }
-
- var n4=normal(s2[3],s2[2],s2[1],m4,s2[4],s2[8],s2[12]);
-
- var m0,m1,m2,m3;
-
- // A kludge to remove subdivision cracks, only applied the first time
- // an edge is found to be flat before the rest of the subpatch is.
- if(flat0)
- m0=[0.5*(P0[0]+P1[0]),0.5*(P0[1]+P1[1]),0.5*(P0[2]+P1[2])];
- else {
- if((flat0=Distance1(p0,p[4],p[8],p12) < res2)) {
- var u=s0[12];
- var v=s2[3];
- var e=unit([u[0]-v[0],u[1]-v[1],u[2]-v[2]]);
- m0=[0.5*(P0[0]+P1[0])+Epsilon*e[0],0.5*(P0[1]+P1[1])+Epsilon*e[1],
- 0.5*(P0[2]+P1[2])+Epsilon*e[2]
- ];
- } else
- m0=s0[12];
- }
-
- if(flat1)
- m1=[0.5*(P1[0]+P2[0]),0.5*(P1[1]+P2[1]),0.5*(P1[2]+P2[2])];
- else {
- if((flat1=Distance1(p12,p[13],p[14],p15) < res2)) {
- var u=s1[15];
- var v=s3[0];
- var e=unit([u[0]-v[0],u[1]-v[1],u[2]-v[2]]);
- m1=[0.5*(P1[0]+P2[0])+Epsilon*e[0],0.5*(P1[1]+P2[1])+Epsilon*e[1],
- 0.5*(P1[2]+P2[2])+Epsilon*e[2]
- ];
- } else
- m1=s1[15];
- }
-
- if(flat2)
- m2=[0.5*(P2[0]+P3[0]),0.5*(P2[1]+P3[1]),0.5*(P2[2]+P3[2])];
- else {
- if((flat2=Distance1(p15,p[11],p[7],p3) < res2)) {
- var u=s2[3];
- var v=s0[12];
- var e=unit([u[0]-v[0],u[1]-v[1],u[2]-v[2]]);
- m2=[0.5*(P2[0]+P3[0])+Epsilon*e[0],0.5*(P2[1]+P3[1])+Epsilon*e[1],
- 0.5*(P2[2]+P3[2])+Epsilon*e[2]
- ];
- } else
- m2=s2[3];
- }
-
- if(flat3)
- m3=[0.5*(P3[0]+P0[0]),0.5*(P3[1]+P0[1]),0.5*(P3[2]+P0[2])];
- else {
- if((flat3=Distance1(p3,p[2],p[1],p0) < res2)) {
- var u=s3[0];
- var v=s1[15];
- var e=unit([u[0]-v[0],u[1]-v[1],u[2]-v[2]]);
- m3=[0.5*(P3[0]+P0[0])+Epsilon*e[0],
- 0.5*(P3[1]+P0[1])+Epsilon*e[1],
- 0.5*(P3[2]+P0[2])+Epsilon*e[2]
- ];
- } else
- m3=s3[0];
- }
-
- // document.write(n0);
- // document.write(" < br > ");
-
- {
- /*
- var c0=new Array(4);
- var c1=new Array(4);
- var c2=new Array(4);
- var c3=new Array(4);
- var c4=new Array(4);
-
- for(var i=0; i < 4; ++i) {
- c0[i]=0.5*(C0[i]+C1[i]);
- c1[i]=0.5*(C1[i]+C2[i]);
- c2[i]=0.5*(C2[i]+C3[i]);
- c3[i]=0.5*(C3[i]+C0[i]);
- c4[i]=0.5*(c0[i]+c2[i]);
- }
- */
-
- var c0=color(n0);
- var c1=color(n1);
- var c2=color(n2);
- var c3=color(n3);
- var c4=color(n4);
-
-
- var i0=vertex(m0,c0);
- var i1=vertex(m1,c1);
- var i2=vertex(m2,c2);
- var i3=vertex(m3,c3);
- var i4=vertex(m4,c4);
-
- render(s0,I0,i0,i4,i3,P0,m0,m4,m3,flat0,false,false,flat3,
- C0,c0,c4,c3);
- render(s1,i0,I1,i1,i4,m0,P1,m1,m4,flat0,flat1,false,false,
- c0,C1,c1,c4);
- render(s2,i4,i1,I2,i2,m4,m1,P2,m2,false,flat1,flat2,false,
- c4,c1,C2,c2);
- render(s3,i3,i4,i2,I3,m3,m4,m2,P3,false,false,flat2,flat3,
- c3,c4,c2,C3);
- }
-}
-
-
-function draw(p) {
- var p0=p[0];
- var p3=p[3];
- var p12=p[12];
- var p15=p[15];
-
- epsilon=0;
- for(var i=1; i < 16; ++i)
- epsilon=Math.max(epsilon,
- abs2([p[i][0]-p0[0],p[i][1]-p0[1],p[i][2]-p0[2]]));
- epsilon *= Fuzz2;
-
- var n0=normal(p3,p[2],p[1],p0,p[4],p[8],p12);
- var n1=normal(p0,p[4],p[8],p12,p[13],p[14],p15);
- var n2=normal(p12,p[13],p[14],p15,p[11],p[7],p3);
- var n3=normal(p15,p[11],p[7],p3,p[2],p[1],p0);
-
- var c0=color(n0);
- var c1=color(n1);
- var c2=color(n2);
- var c3=color(n3);
-
- var i0=vertex(p0,c0);
- var i1=vertex(p12,c1);
- var i2=vertex(p15,c2);
- var i3=vertex(p3,c3);
-
- render(p,i0,i1,i2,i3,p0,p12,p15,p3,false,false,false,false,
- c0,c1,c2,c3);
-
- drawBuffer();
-}
-
-var p=[];
-
-function tick() {
- requestAnimationFrame(tick);
- if(redraw) {
- sceneSetup();
- mat4.translate(mvMatrix,mvMatrix,[-0.5,-0.5,-1.5]);
- setMatrixUniforms();
- for(var i=0; i < p.length; ++i)
- draw(p[i]);
- redraw=false;
- }
-}
-
-function webGLStart() {
- var canvas=document.getElementById("Asymptote");
- initGL(canvas);
- initShaders();
- gl.clearColor(0.0,0.0,0.0,1.0);
- gl.enable(gl.DEPTH_TEST);
-
- indexExt=gl.getExtension("OES_element_index_uint");
-
- gl.viewport(0,0,gl.viewportWidth,gl.viewportHeight);
- setBuffer();
-
- canvas.onmousedown=handleMouseDown;
- document.onmouseup=handleMouseUpOrTouchEnd;
- document.onmousemove=handleMouseMove;
- canvas.onkeydown=handleKey;
- document.onwheel=handleMouseWheel;
-
- canvas.addEventListener("touchstart",handleTouchStart,false);
- canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,false);
- canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,false);
- canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,false);
- canvas.addEventListener("touchmove",handleTouchMove,false);
-
- tick();
-}
-
-
-// Lighting parameters
-var L = [0.447735768366173, 0.497260947684137, 0.743144825477394];
-var Ambient = [0.1, 0.1, 0.1];
-var Diffuse = [0.8, 0.8, 0.8, 1];
-var Specular = [0.7, 0.7, 0.7, 1];
-var specularfactor = 3;
-
-// Material parameters
-var emissive = [0, 0, 0, 1];
-var ambient = [1, 1, 1, 1];
-var diffuse = [0, 1, 0, 1];
-var specular = [0.75, 0.75, 0.75, 1];
-var shininess = 0.5;
diff --git a/graphics/asymptote/webgl/gl-matrix-min-2.3.2.js b/graphics/asymptote/webgl/gl-matrix-min-2.3.2.js
deleted file mode 100644
index 84476b6061..0000000000
--- a/graphics/asymptote/webgl/gl-matrix-min-2.3.2.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * @fileoverview gl-matrix - High performance matrix and vector operations
- * @author Brandon Jones
- * @author Colin MacKenzie IV
- * @version 2.3.2
- */
-
-/* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
-
-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. */
-
-!function(t,a){if("object"==typeof exports&&"object"==typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var n=a();for(var r in n)("object"==typeof exports?exports:t)[r]=n[r]}}(this,function(){return function(t){function a(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,a),o.loaded=!0,o.exports}var n={};return a.m=t,a.c=n,a.p="",a(0)}([function(t,a,n){a.glMatrix=n(1),a.mat2=n(2),a.mat2d=n(3),a.mat3=n(4),a.mat4=n(5),a.quat=n(6),a.vec2=n(9),a.vec3=n(7),a.vec4=n(8)},function(t,a){var n={};n.EPSILON=1e-6,n.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,n.RANDOM=Math.random,n.ENABLE_SIMD=!1,n.SIMD_AVAILABLE=n.ARRAY_TYPE===Float32Array&&"SIMD"in this,n.USE_SIMD=n.ENABLE_SIMD&&n.SIMD_AVAILABLE,n.setMatrixArrayType=function(t){n.ARRAY_TYPE=t};var r=Math.PI/180;n.toRadian=function(t){return t*r},n.equals=function(t,a){return Math.abs(t-a)<=n.EPSILON*Math.max(1,Math.abs(t),Math.abs(a))},t.exports=n},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(4);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},o.clone=function(t){var a=new r.ARRAY_TYPE(4);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t},o.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},o.fromValues=function(t,a,n,o){var u=new r.ARRAY_TYPE(4);return u[0]=t,u[1]=a,u[2]=n,u[3]=o,u},o.set=function(t,a,n,r,o){return t[0]=a,t[1]=n,t[2]=r,t[3]=o,t},o.transpose=function(t,a){if(t===a){var n=a[1];t[1]=a[2],t[2]=n}else t[0]=a[0],t[1]=a[2],t[2]=a[1],t[3]=a[3];return t},o.invert=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=n*u-o*r;return l?(l=1/l,t[0]=u*l,t[1]=-r*l,t[2]=-o*l,t[3]=n*l,t):null},o.adjoint=function(t,a){var n=a[0];return t[0]=a[3],t[1]=-a[1],t[2]=-a[2],t[3]=n,t},o.determinant=function(t){return t[0]*t[3]-t[2]*t[1]},o.multiply=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=n[0],M=n[1],s=n[2],i=n[3];return t[0]=r*e+u*M,t[1]=o*e+l*M,t[2]=r*s+u*i,t[3]=o*s+l*i,t},o.mul=o.multiply,o.rotate=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=Math.sin(n),M=Math.cos(n);return t[0]=r*M+u*e,t[1]=o*M+l*e,t[2]=r*-e+u*M,t[3]=o*-e+l*M,t},o.scale=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=n[0],M=n[1];return t[0]=r*e,t[1]=o*e,t[2]=u*M,t[3]=l*M,t},o.fromRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=n,t[2]=-n,t[3]=r,t},o.fromScaling=function(t,a){return t[0]=a[0],t[1]=0,t[2]=0,t[3]=a[1],t},o.str=function(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},o.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2))},o.LDU=function(t,a,n,r){return t[2]=r[2]/r[0],n[0]=r[0],n[1]=r[1],n[3]=r[3]-t[2]*n[1],[t,a,n]},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t},o.sub=o.subtract,o.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]},o.equals=function(t,a){var n=t[0],o=t[1],u=t[2],l=t[3],e=a[0],M=a[1],s=a[2],i=a[3];return Math.abs(n-e)<=r.EPSILON*Math.max(1,Math.abs(n),Math.abs(e))&&Math.abs(o-M)<=r.EPSILON*Math.max(1,Math.abs(o),Math.abs(M))&&Math.abs(u-s)<=r.EPSILON*Math.max(1,Math.abs(u),Math.abs(s))&&Math.abs(l-i)<=r.EPSILON*Math.max(1,Math.abs(l),Math.abs(i))},o.multiplyScalar=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t},o.multiplyScalarAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t},t.exports=o},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(6);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},o.clone=function(t){var a=new r.ARRAY_TYPE(6);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a[4]=t[4],a[5]=t[5],a},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[4]=a[4],t[5]=a[5],t},o.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},o.fromValues=function(t,a,n,o,u,l){var e=new r.ARRAY_TYPE(6);return e[0]=t,e[1]=a,e[2]=n,e[3]=o,e[4]=u,e[5]=l,e},o.set=function(t,a,n,r,o,u,l){return t[0]=a,t[1]=n,t[2]=r,t[3]=o,t[4]=u,t[5]=l,t},o.invert=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=a[4],e=a[5],M=n*u-r*o;return M?(M=1/M,t[0]=u*M,t[1]=-r*M,t[2]=-o*M,t[3]=n*M,t[4]=(o*e-u*l)*M,t[5]=(r*l-n*e)*M,t):null},o.determinant=function(t){return t[0]*t[3]-t[1]*t[2]},o.multiply=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=n[0],i=n[1],c=n[2],h=n[3],S=n[4],I=n[5];return t[0]=r*s+u*i,t[1]=o*s+l*i,t[2]=r*c+u*h,t[3]=o*c+l*h,t[4]=r*S+u*I+e,t[5]=o*S+l*I+M,t},o.mul=o.multiply,o.rotate=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=Math.sin(n),i=Math.cos(n);return t[0]=r*i+u*s,t[1]=o*i+l*s,t[2]=r*-s+u*i,t[3]=o*-s+l*i,t[4]=e,t[5]=M,t},o.scale=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=n[0],i=n[1];return t[0]=r*s,t[1]=o*s,t[2]=u*i,t[3]=l*i,t[4]=e,t[5]=M,t},o.translate=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=n[0],i=n[1];return t[0]=r,t[1]=o,t[2]=u,t[3]=l,t[4]=r*s+u*i+e,t[5]=o*s+l*i+M,t},o.fromRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=n,t[2]=-n,t[3]=r,t[4]=0,t[5]=0,t},o.fromScaling=function(t,a){return t[0]=a[0],t[1]=0,t[2]=0,t[3]=a[1],t[4]=0,t[5]=0,t},o.fromTranslation=function(t,a){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=a[0],t[5]=a[1],t},o.str=function(t){return"mat2d("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"},o.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+1)},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t[4]=a[4]+n[4],t[5]=a[5]+n[5],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t[4]=a[4]-n[4],t[5]=a[5]-n[5],t},o.sub=o.subtract,o.multiplyScalar=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t[4]=a[4]*n,t[5]=a[5]*n,t},o.multiplyScalarAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t[4]=a[4]+n[4]*r,t[5]=a[5]+n[5]*r,t},o.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]},o.equals=function(t,a){var n=t[0],o=t[1],u=t[2],l=t[3],e=t[4],M=t[5],s=a[0],i=a[1],c=a[2],h=a[3],S=a[4],I=a[5];return Math.abs(n-s)<=r.EPSILON*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(o-i)<=r.EPSILON*Math.max(1,Math.abs(o),Math.abs(i))&&Math.abs(u-c)<=r.EPSILON*Math.max(1,Math.abs(u),Math.abs(c))&&Math.abs(l-h)<=r.EPSILON*Math.max(1,Math.abs(l),Math.abs(h))&&Math.abs(e-S)<=r.EPSILON*Math.max(1,Math.abs(e),Math.abs(S))&&Math.abs(M-I)<=r.EPSILON*Math.max(1,Math.abs(M),Math.abs(I))},t.exports=o},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},o.fromMat4=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[4],t[4]=a[5],t[5]=a[6],t[6]=a[8],t[7]=a[9],t[8]=a[10],t},o.clone=function(t){var a=new r.ARRAY_TYPE(9);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a[4]=t[4],a[5]=t[5],a[6]=t[6],a[7]=t[7],a[8]=t[8],a},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[8]=a[8],t},o.fromValues=function(t,a,n,o,u,l,e,M,s){var i=new r.ARRAY_TYPE(9);return i[0]=t,i[1]=a,i[2]=n,i[3]=o,i[4]=u,i[5]=l,i[6]=e,i[7]=M,i[8]=s,i},o.set=function(t,a,n,r,o,u,l,e,M,s){return t[0]=a,t[1]=n,t[2]=r,t[3]=o,t[4]=u,t[5]=l,t[6]=e,t[7]=M,t[8]=s,t},o.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},o.transpose=function(t,a){if(t===a){var n=a[1],r=a[2],o=a[5];t[1]=a[3],t[2]=a[6],t[3]=n,t[5]=a[7],t[6]=r,t[7]=o}else t[0]=a[0],t[1]=a[3],t[2]=a[6],t[3]=a[1],t[4]=a[4],t[5]=a[7],t[6]=a[2],t[7]=a[5],t[8]=a[8];return t},o.invert=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=a[4],e=a[5],M=a[6],s=a[7],i=a[8],c=i*l-e*s,h=-i*u+e*M,S=s*u-l*M,I=n*c+r*h+o*S;return I?(I=1/I,t[0]=c*I,t[1]=(-i*r+o*s)*I,t[2]=(e*r-o*l)*I,t[3]=h*I,t[4]=(i*n-o*M)*I,t[5]=(-e*n+o*u)*I,t[6]=S*I,t[7]=(-s*n+r*M)*I,t[8]=(l*n-r*u)*I,t):null},o.adjoint=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=a[4],e=a[5],M=a[6],s=a[7],i=a[8];return t[0]=l*i-e*s,t[1]=o*s-r*i,t[2]=r*e-o*l,t[3]=e*M-u*i,t[4]=n*i-o*M,t[5]=o*u-n*e,t[6]=u*s-l*M,t[7]=r*M-n*s,t[8]=n*l-r*u,t},o.determinant=function(t){var a=t[0],n=t[1],r=t[2],o=t[3],u=t[4],l=t[5],e=t[6],M=t[7],s=t[8];return a*(s*u-l*M)+n*(-s*o+l*e)+r*(M*o-u*e)},o.multiply=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=a[6],i=a[7],c=a[8],h=n[0],S=n[1],I=n[2],f=n[3],x=n[4],D=n[5],F=n[6],m=n[7],d=n[8];return t[0]=h*r+S*l+I*s,t[1]=h*o+S*e+I*i,t[2]=h*u+S*M+I*c,t[3]=f*r+x*l+D*s,t[4]=f*o+x*e+D*i,t[5]=f*u+x*M+D*c,t[6]=F*r+m*l+d*s,t[7]=F*o+m*e+d*i,t[8]=F*u+m*M+d*c,t},o.mul=o.multiply,o.translate=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=a[6],i=a[7],c=a[8],h=n[0],S=n[1];return t[0]=r,t[1]=o,t[2]=u,t[3]=l,t[4]=e,t[5]=M,t[6]=h*r+S*l+s,t[7]=h*o+S*e+i,t[8]=h*u+S*M+c,t},o.rotate=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=a[6],i=a[7],c=a[8],h=Math.sin(n),S=Math.cos(n);return t[0]=S*r+h*l,t[1]=S*o+h*e,t[2]=S*u+h*M,t[3]=S*l-h*r,t[4]=S*e-h*o,t[5]=S*M-h*u,t[6]=s,t[7]=i,t[8]=c,t},o.scale=function(t,a,n){var r=n[0],o=n[1];return t[0]=r*a[0],t[1]=r*a[1],t[2]=r*a[2],t[3]=o*a[3],t[4]=o*a[4],t[5]=o*a[5],t[6]=a[6],t[7]=a[7],t[8]=a[8],t},o.fromTranslation=function(t,a){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=a[0],t[7]=a[1],t[8]=1,t},o.fromRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=n,t[2]=0,t[3]=-n,t[4]=r,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},o.fromScaling=function(t,a){return t[0]=a[0],t[1]=0,t[2]=0,t[3]=0,t[4]=a[1],t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},o.fromMat2d=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=0,t[3]=a[2],t[4]=a[3],t[5]=0,t[6]=a[4],t[7]=a[5],t[8]=1,t},o.fromQuat=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=n+n,e=r+r,M=o+o,s=n*l,i=r*l,c=r*e,h=o*l,S=o*e,I=o*M,f=u*l,x=u*e,D=u*M;return t[0]=1-c-I,t[3]=i-D,t[6]=h+x,t[1]=i+D,t[4]=1-s-I,t[7]=S-f,t[2]=h-x,t[5]=S+f,t[8]=1-s-c,t},o.normalFromMat4=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=a[4],e=a[5],M=a[6],s=a[7],i=a[8],c=a[9],h=a[10],S=a[11],I=a[12],f=a[13],x=a[14],D=a[15],F=n*e-r*l,m=n*M-o*l,d=n*s-u*l,b=r*M-o*e,v=r*s-u*e,z=o*s-u*M,p=i*f-c*I,w=i*x-h*I,E=i*D-S*I,A=c*x-h*f,P=c*D-S*f,L=h*D-S*x,q=F*L-m*P+d*A+b*E-v*w+z*p;return q?(q=1/q,t[0]=(e*L-M*P+s*A)*q,t[1]=(M*E-l*L-s*w)*q,t[2]=(l*P-e*E+s*p)*q,t[3]=(o*P-r*L-u*A)*q,t[4]=(n*L-o*E+u*w)*q,t[5]=(r*E-n*P-u*p)*q,t[6]=(f*z-x*v+D*b)*q,t[7]=(x*d-I*z-D*m)*q,t[8]=(I*v-f*d+D*F)*q,t):null},o.str=function(t){return"mat3("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+")"},o.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2))},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t[4]=a[4]+n[4],t[5]=a[5]+n[5],t[6]=a[6]+n[6],t[7]=a[7]+n[7],t[8]=a[8]+n[8],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t[4]=a[4]-n[4],t[5]=a[5]-n[5],t[6]=a[6]-n[6],t[7]=a[7]-n[7],t[8]=a[8]-n[8],t},o.sub=o.subtract,o.multiplyScalar=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t[4]=a[4]*n,t[5]=a[5]*n,t[6]=a[6]*n,t[7]=a[7]*n,t[8]=a[8]*n,t},o.multiplyScalarAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t[4]=a[4]+n[4]*r,t[5]=a[5]+n[5]*r,t[6]=a[6]+n[6]*r,t[7]=a[7]+n[7]*r,t[8]=a[8]+n[8]*r,t},o.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]&&t[6]===a[6]&&t[7]===a[7]&&t[8]===a[8]},o.equals=function(t,a){var n=t[0],o=t[1],u=t[2],l=t[3],e=t[4],M=t[5],s=t[6],i=t[7],c=t[8],h=a[0],S=a[1],I=a[2],f=a[3],x=a[4],D=a[5],F=t[6],m=a[7],d=a[8];return Math.abs(n-h)<=r.EPSILON*Math.max(1,Math.abs(n),Math.abs(h))&&Math.abs(o-S)<=r.EPSILON*Math.max(1,Math.abs(o),Math.abs(S))&&Math.abs(u-I)<=r.EPSILON*Math.max(1,Math.abs(u),Math.abs(I))&&Math.abs(l-f)<=r.EPSILON*Math.max(1,Math.abs(l),Math.abs(f))&&Math.abs(e-x)<=r.EPSILON*Math.max(1,Math.abs(e),Math.abs(x))&&Math.abs(M-D)<=r.EPSILON*Math.max(1,Math.abs(M),Math.abs(D))&&Math.abs(s-F)<=r.EPSILON*Math.max(1,Math.abs(s),Math.abs(F))&&Math.abs(i-m)<=r.EPSILON*Math.max(1,Math.abs(i),Math.abs(m))&&Math.abs(c-d)<=r.EPSILON*Math.max(1,Math.abs(c),Math.abs(d))},t.exports=o},function(t,a,n){var r=n(1),o={scalar:{},SIMD:{}};o.create=function(){var t=new r.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.clone=function(t){var a=new r.ARRAY_TYPE(16);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a[4]=t[4],a[5]=t[5],a[6]=t[6],a[7]=t[7],a[8]=t[8],a[9]=t[9],a[10]=t[10],a[11]=t[11],a[12]=t[12],a[13]=t[13],a[14]=t[14],a[15]=t[15],a},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[8]=a[8],t[9]=a[9],t[10]=a[10],t[11]=a[11],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15],t},o.fromValues=function(t,a,n,o,u,l,e,M,s,i,c,h,S,I,f,x){var D=new r.ARRAY_TYPE(16);return D[0]=t,D[1]=a,D[2]=n,D[3]=o,D[4]=u,D[5]=l,D[6]=e,D[7]=M,D[8]=s,D[9]=i,D[10]=c,D[11]=h,D[12]=S,D[13]=I,D[14]=f,D[15]=x,D},o.set=function(t,a,n,r,o,u,l,e,M,s,i,c,h,S,I,f,x){return t[0]=a,t[1]=n,t[2]=r,t[3]=o,t[4]=u,t[5]=l,t[6]=e,t[7]=M,t[8]=s,t[9]=i,t[10]=c,t[11]=h,t[12]=S,t[13]=I,t[14]=f,t[15]=x,t},o.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.scalar.transpose=function(t,a){if(t===a){var n=a[1],r=a[2],o=a[3],u=a[6],l=a[7],e=a[11];t[1]=a[4],t[2]=a[8],t[3]=a[12],t[4]=n,t[6]=a[9],t[7]=a[13],t[8]=r,t[9]=u,t[11]=a[14],t[12]=o,t[13]=l,t[14]=e}else t[0]=a[0],t[1]=a[4],t[2]=a[8],t[3]=a[12],t[4]=a[1],t[5]=a[5],t[6]=a[9],t[7]=a[13],t[8]=a[2],t[9]=a[6],t[10]=a[10],t[11]=a[14],t[12]=a[3],t[13]=a[7],t[14]=a[11],t[15]=a[15];return t},o.SIMD.transpose=function(t,a){var n,r,o,u,l,e,M,s,i,c;return n=SIMD.Float32x4.load(a,0),r=SIMD.Float32x4.load(a,4),o=SIMD.Float32x4.load(a,8),u=SIMD.Float32x4.load(a,12),l=SIMD.Float32x4.shuffle(n,r,0,1,4,5),e=SIMD.Float32x4.shuffle(o,u,0,1,4,5),M=SIMD.Float32x4.shuffle(l,e,0,2,4,6),s=SIMD.Float32x4.shuffle(l,e,1,3,5,7),SIMD.Float32x4.store(t,0,M),SIMD.Float32x4.store(t,4,s),l=SIMD.Float32x4.shuffle(n,r,2,3,6,7),e=SIMD.Float32x4.shuffle(o,u,2,3,6,7),i=SIMD.Float32x4.shuffle(l,e,0,2,4,6),c=SIMD.Float32x4.shuffle(l,e,1,3,5,7),SIMD.Float32x4.store(t,8,i),SIMD.Float32x4.store(t,12,c),t},o.transpose=r.USE_SIMD?o.SIMD.transpose:o.scalar.transpose,o.scalar.invert=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=a[4],e=a[5],M=a[6],s=a[7],i=a[8],c=a[9],h=a[10],S=a[11],I=a[12],f=a[13],x=a[14],D=a[15],F=n*e-r*l,m=n*M-o*l,d=n*s-u*l,b=r*M-o*e,v=r*s-u*e,z=o*s-u*M,p=i*f-c*I,w=i*x-h*I,E=i*D-S*I,A=c*x-h*f,P=c*D-S*f,L=h*D-S*x,q=F*L-m*P+d*A+b*E-v*w+z*p;return q?(q=1/q,t[0]=(e*L-M*P+s*A)*q,t[1]=(o*P-r*L-u*A)*q,t[2]=(f*z-x*v+D*b)*q,t[3]=(h*v-c*z-S*b)*q,t[4]=(M*E-l*L-s*w)*q,t[5]=(n*L-o*E+u*w)*q,t[6]=(x*d-I*z-D*m)*q,t[7]=(i*z-h*d+S*m)*q,t[8]=(l*P-e*E+s*p)*q,t[9]=(r*E-n*P-u*p)*q,t[10]=(I*v-f*d+D*F)*q,t[11]=(c*d-i*v-S*F)*q,t[12]=(e*w-l*A-M*p)*q,t[13]=(n*A-r*w+o*p)*q,t[14]=(f*m-I*b-x*F)*q,t[15]=(i*b-c*m+h*F)*q,t):null},o.SIMD.invert=function(t,a){var n,r,o,u,l,e,M,s,i,c,h=SIMD.Float32x4.load(a,0),S=SIMD.Float32x4.load(a,4),I=SIMD.Float32x4.load(a,8),f=SIMD.Float32x4.load(a,12);return l=SIMD.Float32x4.shuffle(h,S,0,1,4,5),r=SIMD.Float32x4.shuffle(I,f,0,1,4,5),n=SIMD.Float32x4.shuffle(l,r,0,2,4,6),r=SIMD.Float32x4.shuffle(r,l,1,3,5,7),l=SIMD.Float32x4.shuffle(h,S,2,3,6,7),u=SIMD.Float32x4.shuffle(I,f,2,3,6,7),o=SIMD.Float32x4.shuffle(l,u,0,2,4,6),u=SIMD.Float32x4.shuffle(u,l,1,3,5,7),l=SIMD.Float32x4.mul(o,u),l=SIMD.Float32x4.swizzle(l,1,0,3,2),e=SIMD.Float32x4.mul(r,l),M=SIMD.Float32x4.mul(n,l),l=SIMD.Float32x4.swizzle(l,2,3,0,1),e=SIMD.Float32x4.sub(SIMD.Float32x4.mul(r,l),e),M=SIMD.Float32x4.sub(SIMD.Float32x4.mul(n,l),M),M=SIMD.Float32x4.swizzle(M,2,3,0,1),l=SIMD.Float32x4.mul(r,o),l=SIMD.Float32x4.swizzle(l,1,0,3,2),e=SIMD.Float32x4.add(SIMD.Float32x4.mul(u,l),e),i=SIMD.Float32x4.mul(n,l),l=SIMD.Float32x4.swizzle(l,2,3,0,1),e=SIMD.Float32x4.sub(e,SIMD.Float32x4.mul(u,l)),i=SIMD.Float32x4.sub(SIMD.Float32x4.mul(n,l),i),i=SIMD.Float32x4.swizzle(i,2,3,0,1),l=SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(r,2,3,0,1),u),l=SIMD.Float32x4.swizzle(l,1,0,3,2),o=SIMD.Float32x4.swizzle(o,2,3,0,1),e=SIMD.Float32x4.add(SIMD.Float32x4.mul(o,l),e),s=SIMD.Float32x4.mul(n,l),l=SIMD.Float32x4.swizzle(l,2,3,0,1),e=SIMD.Float32x4.sub(e,SIMD.Float32x4.mul(o,l)),s=SIMD.Float32x4.sub(SIMD.Float32x4.mul(n,l),s),s=SIMD.Float32x4.swizzle(s,2,3,0,1),l=SIMD.Float32x4.mul(n,r),l=SIMD.Float32x4.swizzle(l,1,0,3,2),s=SIMD.Float32x4.add(SIMD.Float32x4.mul(u,l),s),i=SIMD.Float32x4.sub(SIMD.Float32x4.mul(o,l),i),l=SIMD.Float32x4.swizzle(l,2,3,0,1),s=SIMD.Float32x4.sub(SIMD.Float32x4.mul(u,l),s),i=SIMD.Float32x4.sub(i,SIMD.Float32x4.mul(o,l)),l=SIMD.Float32x4.mul(n,u),l=SIMD.Float32x4.swizzle(l,1,0,3,2),M=SIMD.Float32x4.sub(M,SIMD.Float32x4.mul(o,l)),s=SIMD.Float32x4.add(SIMD.Float32x4.mul(r,l),s),l=SIMD.Float32x4.swizzle(l,2,3,0,1),M=SIMD.Float32x4.add(SIMD.Float32x4.mul(o,l),M),s=SIMD.Float32x4.sub(s,SIMD.Float32x4.mul(r,l)),l=SIMD.Float32x4.mul(n,o),l=SIMD.Float32x4.swizzle(l,1,0,3,2),M=SIMD.Float32x4.add(SIMD.Float32x4.mul(u,l),M),i=SIMD.Float32x4.sub(i,SIMD.Float32x4.mul(r,l)),l=SIMD.Float32x4.swizzle(l,2,3,0,1),M=SIMD.Float32x4.sub(M,SIMD.Float32x4.mul(u,l)),i=SIMD.Float32x4.add(SIMD.Float32x4.mul(r,l),i),c=SIMD.Float32x4.mul(n,e),c=SIMD.Float32x4.add(SIMD.Float32x4.swizzle(c,2,3,0,1),c),c=SIMD.Float32x4.add(SIMD.Float32x4.swizzle(c,1,0,3,2),c),l=SIMD.Float32x4.reciprocalApproximation(c),c=SIMD.Float32x4.sub(SIMD.Float32x4.add(l,l),SIMD.Float32x4.mul(c,SIMD.Float32x4.mul(l,l))),(c=SIMD.Float32x4.swizzle(c,0,0,0,0))?(SIMD.Float32x4.store(t,0,SIMD.Float32x4.mul(c,e)),SIMD.Float32x4.store(t,4,SIMD.Float32x4.mul(c,M)),SIMD.Float32x4.store(t,8,SIMD.Float32x4.mul(c,s)),SIMD.Float32x4.store(t,12,SIMD.Float32x4.mul(c,i)),t):null},o.invert=r.USE_SIMD?o.SIMD.invert:o.scalar.invert,o.scalar.adjoint=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=a[4],e=a[5],M=a[6],s=a[7],i=a[8],c=a[9],h=a[10],S=a[11],I=a[12],f=a[13],x=a[14],D=a[15];return t[0]=e*(h*D-S*x)-c*(M*D-s*x)+f*(M*S-s*h),t[1]=-(r*(h*D-S*x)-c*(o*D-u*x)+f*(o*S-u*h)),t[2]=r*(M*D-s*x)-e*(o*D-u*x)+f*(o*s-u*M),t[3]=-(r*(M*S-s*h)-e*(o*S-u*h)+c*(o*s-u*M)),t[4]=-(l*(h*D-S*x)-i*(M*D-s*x)+I*(M*S-s*h)),t[5]=n*(h*D-S*x)-i*(o*D-u*x)+I*(o*S-u*h),t[6]=-(n*(M*D-s*x)-l*(o*D-u*x)+I*(o*s-u*M)),t[7]=n*(M*S-s*h)-l*(o*S-u*h)+i*(o*s-u*M),t[8]=l*(c*D-S*f)-i*(e*D-s*f)+I*(e*S-s*c),t[9]=-(n*(c*D-S*f)-i*(r*D-u*f)+I*(r*S-u*c)),t[10]=n*(e*D-s*f)-l*(r*D-u*f)+I*(r*s-u*e),t[11]=-(n*(e*S-s*c)-l*(r*S-u*c)+i*(r*s-u*e)),t[12]=-(l*(c*x-h*f)-i*(e*x-M*f)+I*(e*h-M*c)),t[13]=n*(c*x-h*f)-i*(r*x-o*f)+I*(r*h-o*c),t[14]=-(n*(e*x-M*f)-l*(r*x-o*f)+I*(r*M-o*e)),t[15]=n*(e*h-M*c)-l*(r*h-o*c)+i*(r*M-o*e),t},o.SIMD.adjoint=function(t,a){var n,r,o,u,l,e,M,s,i,c,h,S,I,n=SIMD.Float32x4.load(a,0),r=SIMD.Float32x4.load(a,4),o=SIMD.Float32x4.load(a,8),u=SIMD.Float32x4.load(a,12);return i=SIMD.Float32x4.shuffle(n,r,0,1,4,5),e=SIMD.Float32x4.shuffle(o,u,0,1,4,5),l=SIMD.Float32x4.shuffle(i,e,0,2,4,6),e=SIMD.Float32x4.shuffle(e,i,1,3,5,7),i=SIMD.Float32x4.shuffle(n,r,2,3,6,7),s=SIMD.Float32x4.shuffle(o,u,2,3,6,7),M=SIMD.Float32x4.shuffle(i,s,0,2,4,6),s=SIMD.Float32x4.shuffle(s,i,1,3,5,7),i=SIMD.Float32x4.mul(M,s),i=SIMD.Float32x4.swizzle(i,1,0,3,2),c=SIMD.Float32x4.mul(e,i),h=SIMD.Float32x4.mul(l,i),i=SIMD.Float32x4.swizzle(i,2,3,0,1),c=SIMD.Float32x4.sub(SIMD.Float32x4.mul(e,i),c),h=SIMD.Float32x4.sub(SIMD.Float32x4.mul(l,i),h),h=SIMD.Float32x4.swizzle(h,2,3,0,1),i=SIMD.Float32x4.mul(e,M),i=SIMD.Float32x4.swizzle(i,1,0,3,2),c=SIMD.Float32x4.add(SIMD.Float32x4.mul(s,i),c),I=SIMD.Float32x4.mul(l,i),i=SIMD.Float32x4.swizzle(i,2,3,0,1),c=SIMD.Float32x4.sub(c,SIMD.Float32x4.mul(s,i)),I=SIMD.Float32x4.sub(SIMD.Float32x4.mul(l,i),I),I=SIMD.Float32x4.swizzle(I,2,3,0,1),i=SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,2,3,0,1),s),i=SIMD.Float32x4.swizzle(i,1,0,3,2),M=SIMD.Float32x4.swizzle(M,2,3,0,1),c=SIMD.Float32x4.add(SIMD.Float32x4.mul(M,i),c),S=SIMD.Float32x4.mul(l,i),i=SIMD.Float32x4.swizzle(i,2,3,0,1),c=SIMD.Float32x4.sub(c,SIMD.Float32x4.mul(M,i)),S=SIMD.Float32x4.sub(SIMD.Float32x4.mul(l,i),S),S=SIMD.Float32x4.swizzle(S,2,3,0,1),i=SIMD.Float32x4.mul(l,e),i=SIMD.Float32x4.swizzle(i,1,0,3,2),S=SIMD.Float32x4.add(SIMD.Float32x4.mul(s,i),S),I=SIMD.Float32x4.sub(SIMD.Float32x4.mul(M,i),I),i=SIMD.Float32x4.swizzle(i,2,3,0,1),S=SIMD.Float32x4.sub(SIMD.Float32x4.mul(s,i),S),I=SIMD.Float32x4.sub(I,SIMD.Float32x4.mul(M,i)),i=SIMD.Float32x4.mul(l,s),i=SIMD.Float32x4.swizzle(i,1,0,3,2),h=SIMD.Float32x4.sub(h,SIMD.Float32x4.mul(M,i)),S=SIMD.Float32x4.add(SIMD.Float32x4.mul(e,i),S),i=SIMD.Float32x4.swizzle(i,2,3,0,1),h=SIMD.Float32x4.add(SIMD.Float32x4.mul(M,i),h),S=SIMD.Float32x4.sub(S,SIMD.Float32x4.mul(e,i)),i=SIMD.Float32x4.mul(l,M),i=SIMD.Float32x4.swizzle(i,1,0,3,2),h=SIMD.Float32x4.add(SIMD.Float32x4.mul(s,i),h),I=SIMD.Float32x4.sub(I,SIMD.Float32x4.mul(e,i)),i=SIMD.Float32x4.swizzle(i,2,3,0,1),h=SIMD.Float32x4.sub(h,SIMD.Float32x4.mul(s,i)),I=SIMD.Float32x4.add(SIMD.Float32x4.mul(e,i),I),SIMD.Float32x4.store(t,0,c),SIMD.Float32x4.store(t,4,h),SIMD.Float32x4.store(t,8,S),SIMD.Float32x4.store(t,12,I),t},o.adjoint=r.USE_SIMD?o.SIMD.adjoint:o.scalar.adjoint,o.determinant=function(t){var a=t[0],n=t[1],r=t[2],o=t[3],u=t[4],l=t[5],e=t[6],M=t[7],s=t[8],i=t[9],c=t[10],h=t[11],S=t[12],I=t[13],f=t[14],x=t[15],D=a*l-n*u,F=a*e-r*u,m=a*M-o*u,d=n*e-r*l,b=n*M-o*l,v=r*M-o*e,z=s*I-i*S,p=s*f-c*S,w=s*x-h*S,E=i*f-c*I,A=i*x-h*I,P=c*x-h*f;return D*P-F*A+m*E+d*w-b*p+v*z},o.SIMD.multiply=function(t,a,n){var r=SIMD.Float32x4.load(a,0),o=SIMD.Float32x4.load(a,4),u=SIMD.Float32x4.load(a,8),l=SIMD.Float32x4.load(a,12),e=SIMD.Float32x4.load(n,0),M=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,0,0,0,0),r),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,1,1,1,1),o),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,2,2,2,2),u),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(e,3,3,3,3),l))));SIMD.Float32x4.store(t,0,M);var s=SIMD.Float32x4.load(n,4),i=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,0,0,0,0),r),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,1,1,1,1),o),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,2,2,2,2),u),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,3,3,3,3),l))));SIMD.Float32x4.store(t,4,i);var c=SIMD.Float32x4.load(n,8),h=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(c,0,0,0,0),r),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(c,1,1,1,1),o),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(c,2,2,2,2),u),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(c,3,3,3,3),l))));SIMD.Float32x4.store(t,8,h);var S=SIMD.Float32x4.load(n,12),I=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(S,0,0,0,0),r),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(S,1,1,1,1),o),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(S,2,2,2,2),u),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(S,3,3,3,3),l))));return SIMD.Float32x4.store(t,12,I),t},o.scalar.multiply=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=a[6],i=a[7],c=a[8],h=a[9],S=a[10],I=a[11],f=a[12],x=a[13],D=a[14],F=a[15],m=n[0],d=n[1],b=n[2],v=n[3];return t[0]=m*r+d*e+b*c+v*f,t[1]=m*o+d*M+b*h+v*x,t[2]=m*u+d*s+b*S+v*D,t[3]=m*l+d*i+b*I+v*F,m=n[4],d=n[5],b=n[6],v=n[7],t[4]=m*r+d*e+b*c+v*f,t[5]=m*o+d*M+b*h+v*x,t[6]=m*u+d*s+b*S+v*D,t[7]=m*l+d*i+b*I+v*F,m=n[8],d=n[9],b=n[10],v=n[11],t[8]=m*r+d*e+b*c+v*f,t[9]=m*o+d*M+b*h+v*x,t[10]=m*u+d*s+b*S+v*D,t[11]=m*l+d*i+b*I+v*F,m=n[12],d=n[13],b=n[14],v=n[15],t[12]=m*r+d*e+b*c+v*f,t[13]=m*o+d*M+b*h+v*x,t[14]=m*u+d*s+b*S+v*D,t[15]=m*l+d*i+b*I+v*F,t},o.multiply=r.USE_SIMD?o.SIMD.multiply:o.scalar.multiply,o.mul=o.multiply,o.scalar.translate=function(t,a,n){var r,o,u,l,e,M,s,i,c,h,S,I,f=n[0],x=n[1],D=n[2];return a===t?(t[12]=a[0]*f+a[4]*x+a[8]*D+a[12],t[13]=a[1]*f+a[5]*x+a[9]*D+a[13],t[14]=a[2]*f+a[6]*x+a[10]*D+a[14],t[15]=a[3]*f+a[7]*x+a[11]*D+a[15]):(r=a[0],o=a[1],u=a[2],l=a[3],e=a[4],M=a[5],s=a[6],i=a[7],c=a[8],h=a[9],S=a[10],I=a[11],t[0]=r,t[1]=o,t[2]=u,t[3]=l,t[4]=e,t[5]=M,t[6]=s,t[7]=i,t[8]=c,t[9]=h,t[10]=S,t[11]=I,t[12]=r*f+e*x+c*D+a[12],t[13]=o*f+M*x+h*D+a[13],t[14]=u*f+s*x+S*D+a[14],t[15]=l*f+i*x+I*D+a[15]),t},o.SIMD.translate=function(t,a,n){var r=SIMD.Float32x4.load(a,0),o=SIMD.Float32x4.load(a,4),u=SIMD.Float32x4.load(a,8),l=SIMD.Float32x4.load(a,12),e=SIMD.Float32x4(n[0],n[1],n[2],0);a!==t&&(t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[8]=a[8],t[9]=a[9],t[10]=a[10],t[11]=a[11]),r=SIMD.Float32x4.mul(r,SIMD.Float32x4.swizzle(e,0,0,0,0)),o=SIMD.Float32x4.mul(o,SIMD.Float32x4.swizzle(e,1,1,1,1)),u=SIMD.Float32x4.mul(u,SIMD.Float32x4.swizzle(e,2,2,2,2));var M=SIMD.Float32x4.add(r,SIMD.Float32x4.add(o,SIMD.Float32x4.add(u,l)));return SIMD.Float32x4.store(t,12,M),t},o.translate=r.USE_SIMD?o.SIMD.translate:o.scalar.translate,o.scalar.scale=function(t,a,n){var r=n[0],o=n[1],u=n[2];return t[0]=a[0]*r,t[1]=a[1]*r,t[2]=a[2]*r,t[3]=a[3]*r,t[4]=a[4]*o,t[5]=a[5]*o,t[6]=a[6]*o,t[7]=a[7]*o,t[8]=a[8]*u,t[9]=a[9]*u,t[10]=a[10]*u,t[11]=a[11]*u,t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15],t},o.SIMD.scale=function(t,a,n){var r,o,u,l=SIMD.Float32x4(n[0],n[1],n[2],0);return r=SIMD.Float32x4.load(a,0),SIMD.Float32x4.store(t,0,SIMD.Float32x4.mul(r,SIMD.Float32x4.swizzle(l,0,0,0,0))),o=SIMD.Float32x4.load(a,4),SIMD.Float32x4.store(t,4,SIMD.Float32x4.mul(o,SIMD.Float32x4.swizzle(l,1,1,1,1))),u=SIMD.Float32x4.load(a,8),SIMD.Float32x4.store(t,8,SIMD.Float32x4.mul(u,SIMD.Float32x4.swizzle(l,2,2,2,2))),t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15],t},o.scale=r.USE_SIMD?o.SIMD.scale:o.scalar.scale,o.rotate=function(t,a,n,o){var u,l,e,M,s,i,c,h,S,I,f,x,D,F,m,d,b,v,z,p,w,E,A,P,L=o[0],q=o[1],R=o[2],N=Math.sqrt(L*L+q*q+R*R);return Math.abs(N)<r.EPSILON?null:(N=1/N,L*=N,q*=N,R*=N,u=Math.sin(n),l=Math.cos(n),e=1-l,M=a[0],s=a[1],i=a[2],c=a[3],h=a[4],S=a[5],I=a[6],f=a[7],x=a[8],D=a[9],F=a[10],m=a[11],d=L*L*e+l,b=q*L*e+R*u,v=R*L*e-q*u,z=L*q*e-R*u,p=q*q*e+l,w=R*q*e+L*u,E=L*R*e+q*u,A=q*R*e-L*u,P=R*R*e+l,t[0]=M*d+h*b+x*v,t[1]=s*d+S*b+D*v,t[2]=i*d+I*b+F*v,t[3]=c*d+f*b+m*v,t[4]=M*z+h*p+x*w,t[5]=s*z+S*p+D*w,t[6]=i*z+I*p+F*w,t[7]=c*z+f*p+m*w,t[8]=M*E+h*A+x*P,t[9]=s*E+S*A+D*P,t[10]=i*E+I*A+F*P,t[11]=c*E+f*A+m*P,a!==t&&(t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t)},o.scalar.rotateX=function(t,a,n){var r=Math.sin(n),o=Math.cos(n),u=a[4],l=a[5],e=a[6],M=a[7],s=a[8],i=a[9],c=a[10],h=a[11];return a!==t&&(t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t[4]=u*o+s*r,t[5]=l*o+i*r,t[6]=e*o+c*r,t[7]=M*o+h*r,t[8]=s*o-u*r,t[9]=i*o-l*r,t[10]=c*o-e*r,t[11]=h*o-M*r,t},o.SIMD.rotateX=function(t,a,n){var r=SIMD.Float32x4.splat(Math.sin(n)),o=SIMD.Float32x4.splat(Math.cos(n));a!==t&&(t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]);var u=SIMD.Float32x4.load(a,4),l=SIMD.Float32x4.load(a,8);return SIMD.Float32x4.store(t,4,SIMD.Float32x4.add(SIMD.Float32x4.mul(u,o),SIMD.Float32x4.mul(l,r))),SIMD.Float32x4.store(t,8,SIMD.Float32x4.sub(SIMD.Float32x4.mul(l,o),SIMD.Float32x4.mul(u,r))),t},o.rotateX=r.USE_SIMD?o.SIMD.rotateX:o.scalar.rotateX,o.scalar.rotateY=function(t,a,n){var r=Math.sin(n),o=Math.cos(n),u=a[0],l=a[1],e=a[2],M=a[3],s=a[8],i=a[9],c=a[10],h=a[11];return a!==t&&(t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t[0]=u*o-s*r,t[1]=l*o-i*r,t[2]=e*o-c*r,t[3]=M*o-h*r,t[8]=u*r+s*o,t[9]=l*r+i*o,t[10]=e*r+c*o,t[11]=M*r+h*o,t},o.SIMD.rotateY=function(t,a,n){var r=SIMD.Float32x4.splat(Math.sin(n)),o=SIMD.Float32x4.splat(Math.cos(n));a!==t&&(t[4]=a[4],t[5]=a[5],t[6]=a[6],t[7]=a[7],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]);var u=SIMD.Float32x4.load(a,0),l=SIMD.Float32x4.load(a,8);return SIMD.Float32x4.store(t,0,SIMD.Float32x4.sub(SIMD.Float32x4.mul(u,o),SIMD.Float32x4.mul(l,r))),SIMD.Float32x4.store(t,8,SIMD.Float32x4.add(SIMD.Float32x4.mul(u,r),SIMD.Float32x4.mul(l,o))),t},o.rotateY=r.USE_SIMD?o.SIMD.rotateY:o.scalar.rotateY,o.scalar.rotateZ=function(t,a,n){var r=Math.sin(n),o=Math.cos(n),u=a[0],l=a[1],e=a[2],M=a[3],s=a[4],i=a[5],c=a[6],h=a[7];return a!==t&&(t[8]=a[8],t[9]=a[9],t[10]=a[10],t[11]=a[11],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t[0]=u*o+s*r,t[1]=l*o+i*r,t[2]=e*o+c*r,t[3]=M*o+h*r,t[4]=s*o-u*r,t[5]=i*o-l*r,t[6]=c*o-e*r,t[7]=h*o-M*r,t},o.SIMD.rotateZ=function(t,a,n){var r=SIMD.Float32x4.splat(Math.sin(n)),o=SIMD.Float32x4.splat(Math.cos(n));a!==t&&(t[8]=a[8],t[9]=a[9],t[10]=a[10],t[11]=a[11],t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]);var u=SIMD.Float32x4.load(a,0),l=SIMD.Float32x4.load(a,4);return SIMD.Float32x4.store(t,0,SIMD.Float32x4.add(SIMD.Float32x4.mul(u,o),SIMD.Float32x4.mul(l,r))),SIMD.Float32x4.store(t,4,SIMD.Float32x4.sub(SIMD.Float32x4.mul(l,o),SIMD.Float32x4.mul(u,r))),t},o.rotateZ=r.USE_SIMD?o.SIMD.rotateZ:o.scalar.rotateZ,o.fromTranslation=function(t,a){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=a[0],t[13]=a[1],t[14]=a[2],t[15]=1,t},o.fromScaling=function(t,a){return t[0]=a[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=a[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.fromRotation=function(t,a,n){var o,u,l,e=n[0],M=n[1],s=n[2],i=Math.sqrt(e*e+M*M+s*s);return Math.abs(i)<r.EPSILON?null:(i=1/i,e*=i,M*=i,s*=i,o=Math.sin(a),u=Math.cos(a),l=1-u,t[0]=e*e*l+u,t[1]=M*e*l+s*o,t[2]=s*e*l-M*o,t[3]=0,t[4]=e*M*l-s*o,t[5]=M*M*l+u,t[6]=s*M*l+e*o,t[7]=0,t[8]=e*s*l+M*o,t[9]=M*s*l-e*o,t[10]=s*s*l+u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)},o.fromXRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=r,t[6]=n,t[7]=0,t[8]=0,t[9]=-n,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.fromYRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=0,t[2]=-n,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=n,t[9]=0,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.fromZRotation=function(t,a){var n=Math.sin(a),r=Math.cos(a);return t[0]=r,t[1]=n,t[2]=0,t[3]=0,t[4]=-n,t[5]=r,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.fromRotationTranslation=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=r+r,M=o+o,s=u+u,i=r*e,c=r*M,h=r*s,S=o*M,I=o*s,f=u*s,x=l*e,D=l*M,F=l*s;return t[0]=1-(S+f),t[1]=c+F,t[2]=h-D,t[3]=0,t[4]=c-F,t[5]=1-(i+f),t[6]=I+x,t[7]=0,t[8]=h+D,t[9]=I-x,t[10]=1-(i+S),t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},o.getTranslation=function(t,a){return t[0]=a[12],t[1]=a[13],t[2]=a[14],t},o.getRotation=function(t,a){var n=a[0]+a[5]+a[10],r=0;return n>0?(r=2*Math.sqrt(n+1),t[3]=.25*r,t[0]=(a[6]-a[9])/r,t[1]=(a[8]-a[2])/r,t[2]=(a[1]-a[4])/r):a[0]>a[5]&a[0]>a[10]?(r=2*Math.sqrt(1+a[0]-a[5]-a[10]),t[3]=(a[6]-a[9])/r,t[0]=.25*r,t[1]=(a[1]+a[4])/r,t[2]=(a[8]+a[2])/r):a[5]>a[10]?(r=2*Math.sqrt(1+a[5]-a[0]-a[10]),t[3]=(a[8]-a[2])/r,t[0]=(a[1]+a[4])/r,t[1]=.25*r,t[2]=(a[6]+a[9])/r):(r=2*Math.sqrt(1+a[10]-a[0]-a[5]),t[3]=(a[1]-a[4])/r,t[0]=(a[8]+a[2])/r,t[1]=(a[6]+a[9])/r,t[2]=.25*r),t},o.fromRotationTranslationScale=function(t,a,n,r){var o=a[0],u=a[1],l=a[2],e=a[3],M=o+o,s=u+u,i=l+l,c=o*M,h=o*s,S=o*i,I=u*s,f=u*i,x=l*i,D=e*M,F=e*s,m=e*i,d=r[0],b=r[1],v=r[2];return t[0]=(1-(I+x))*d,t[1]=(h+m)*d,t[2]=(S-F)*d,t[3]=0,t[4]=(h-m)*b,t[5]=(1-(c+x))*b,t[6]=(f+D)*b,t[7]=0,t[8]=(S+F)*v,t[9]=(f-D)*v,t[10]=(1-(c+I))*v,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},o.fromRotationTranslationScaleOrigin=function(t,a,n,r,o){
-var u=a[0],l=a[1],e=a[2],M=a[3],s=u+u,i=l+l,c=e+e,h=u*s,S=u*i,I=u*c,f=l*i,x=l*c,D=e*c,F=M*s,m=M*i,d=M*c,b=r[0],v=r[1],z=r[2],p=o[0],w=o[1],E=o[2];return t[0]=(1-(f+D))*b,t[1]=(S+d)*b,t[2]=(I-m)*b,t[3]=0,t[4]=(S-d)*v,t[5]=(1-(h+D))*v,t[6]=(x+F)*v,t[7]=0,t[8]=(I+m)*z,t[9]=(x-F)*z,t[10]=(1-(h+f))*z,t[11]=0,t[12]=n[0]+p-(t[0]*p+t[4]*w+t[8]*E),t[13]=n[1]+w-(t[1]*p+t[5]*w+t[9]*E),t[14]=n[2]+E-(t[2]*p+t[6]*w+t[10]*E),t[15]=1,t},o.fromQuat=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=n+n,e=r+r,M=o+o,s=n*l,i=r*l,c=r*e,h=o*l,S=o*e,I=o*M,f=u*l,x=u*e,D=u*M;return t[0]=1-c-I,t[1]=i+D,t[2]=h-x,t[3]=0,t[4]=i-D,t[5]=1-s-I,t[6]=S+f,t[7]=0,t[8]=h+x,t[9]=S-f,t[10]=1-s-c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},o.frustum=function(t,a,n,r,o,u,l){var e=1/(n-a),M=1/(o-r),s=1/(u-l);return t[0]=2*u*e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*u*M,t[6]=0,t[7]=0,t[8]=(n+a)*e,t[9]=(o+r)*M,t[10]=(l+u)*s,t[11]=-1,t[12]=0,t[13]=0,t[14]=l*u*2*s,t[15]=0,t},o.perspective=function(t,a,n,r,o){var u=1/Math.tan(a/2),l=1/(r-o);return t[0]=u/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(o+r)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*o*r*l,t[15]=0,t},o.perspectiveFromFieldOfView=function(t,a,n,r){var o=Math.tan(a.upDegrees*Math.PI/180),u=Math.tan(a.downDegrees*Math.PI/180),l=Math.tan(a.leftDegrees*Math.PI/180),e=Math.tan(a.rightDegrees*Math.PI/180),M=2/(l+e),s=2/(o+u);return t[0]=M,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=-((l-e)*M*.5),t[9]=(o-u)*s*.5,t[10]=r/(n-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*n/(n-r),t[15]=0,t},o.ortho=function(t,a,n,r,o,u,l){var e=1/(a-n),M=1/(r-o),s=1/(u-l);return t[0]=-2*e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*M,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*s,t[11]=0,t[12]=(a+n)*e,t[13]=(o+r)*M,t[14]=(l+u)*s,t[15]=1,t},o.lookAt=function(t,a,n,u){var l,e,M,s,i,c,h,S,I,f,x=a[0],D=a[1],F=a[2],m=u[0],d=u[1],b=u[2],v=n[0],z=n[1],p=n[2];return Math.abs(x-v)<r.EPSILON&&Math.abs(D-z)<r.EPSILON&&Math.abs(F-p)<r.EPSILON?o.identity(t):(h=x-v,S=D-z,I=F-p,f=1/Math.sqrt(h*h+S*S+I*I),h*=f,S*=f,I*=f,l=d*I-b*S,e=b*h-m*I,M=m*S-d*h,f=Math.sqrt(l*l+e*e+M*M),f?(f=1/f,l*=f,e*=f,M*=f):(l=0,e=0,M=0),s=S*M-I*e,i=I*l-h*M,c=h*e-S*l,f=Math.sqrt(s*s+i*i+c*c),f?(f=1/f,s*=f,i*=f,c*=f):(s=0,i=0,c=0),t[0]=l,t[1]=s,t[2]=h,t[3]=0,t[4]=e,t[5]=i,t[6]=S,t[7]=0,t[8]=M,t[9]=c,t[10]=I,t[11]=0,t[12]=-(l*x+e*D+M*F),t[13]=-(s*x+i*D+c*F),t[14]=-(h*x+S*D+I*F),t[15]=1,t)},o.str=function(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"},o.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2)+Math.pow(t[9],2)+Math.pow(t[10],2)+Math.pow(t[11],2)+Math.pow(t[12],2)+Math.pow(t[13],2)+Math.pow(t[14],2)+Math.pow(t[15],2))},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t[4]=a[4]+n[4],t[5]=a[5]+n[5],t[6]=a[6]+n[6],t[7]=a[7]+n[7],t[8]=a[8]+n[8],t[9]=a[9]+n[9],t[10]=a[10]+n[10],t[11]=a[11]+n[11],t[12]=a[12]+n[12],t[13]=a[13]+n[13],t[14]=a[14]+n[14],t[15]=a[15]+n[15],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t[4]=a[4]-n[4],t[5]=a[5]-n[5],t[6]=a[6]-n[6],t[7]=a[7]-n[7],t[8]=a[8]-n[8],t[9]=a[9]-n[9],t[10]=a[10]-n[10],t[11]=a[11]-n[11],t[12]=a[12]-n[12],t[13]=a[13]-n[13],t[14]=a[14]-n[14],t[15]=a[15]-n[15],t},o.sub=o.subtract,o.multiplyScalar=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t[4]=a[4]*n,t[5]=a[5]*n,t[6]=a[6]*n,t[7]=a[7]*n,t[8]=a[8]*n,t[9]=a[9]*n,t[10]=a[10]*n,t[11]=a[11]*n,t[12]=a[12]*n,t[13]=a[13]*n,t[14]=a[14]*n,t[15]=a[15]*n,t},o.multiplyScalarAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t[4]=a[4]+n[4]*r,t[5]=a[5]+n[5]*r,t[6]=a[6]+n[6]*r,t[7]=a[7]+n[7]*r,t[8]=a[8]+n[8]*r,t[9]=a[9]+n[9]*r,t[10]=a[10]+n[10]*r,t[11]=a[11]+n[11]*r,t[12]=a[12]+n[12]*r,t[13]=a[13]+n[13]*r,t[14]=a[14]+n[14]*r,t[15]=a[15]+n[15]*r,t},o.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]&&t[6]===a[6]&&t[7]===a[7]&&t[8]===a[8]&&t[9]===a[9]&&t[10]===a[10]&&t[11]===a[11]&&t[12]===a[12]&&t[13]===a[13]&&t[14]===a[14]&&t[15]===a[15]},o.equals=function(t,a){var n=t[0],o=t[1],u=t[2],l=t[3],e=t[4],M=t[5],s=t[6],i=t[7],c=t[8],h=t[9],S=t[10],I=t[11],f=t[12],x=t[13],D=t[14],F=t[15],m=a[0],d=a[1],b=a[2],v=a[3],z=a[4],p=a[5],w=a[6],E=a[7],A=a[8],P=a[9],L=a[10],q=a[11],R=a[12],N=a[13],O=a[14],Y=a[15];return Math.abs(n-m)<=r.EPSILON*Math.max(1,Math.abs(n),Math.abs(m))&&Math.abs(o-d)<=r.EPSILON*Math.max(1,Math.abs(o),Math.abs(d))&&Math.abs(u-b)<=r.EPSILON*Math.max(1,Math.abs(u),Math.abs(b))&&Math.abs(l-v)<=r.EPSILON*Math.max(1,Math.abs(l),Math.abs(v))&&Math.abs(e-z)<=r.EPSILON*Math.max(1,Math.abs(e),Math.abs(z))&&Math.abs(M-p)<=r.EPSILON*Math.max(1,Math.abs(M),Math.abs(p))&&Math.abs(s-w)<=r.EPSILON*Math.max(1,Math.abs(s),Math.abs(w))&&Math.abs(i-E)<=r.EPSILON*Math.max(1,Math.abs(i),Math.abs(E))&&Math.abs(c-A)<=r.EPSILON*Math.max(1,Math.abs(c),Math.abs(A))&&Math.abs(h-P)<=r.EPSILON*Math.max(1,Math.abs(h),Math.abs(P))&&Math.abs(S-L)<=r.EPSILON*Math.max(1,Math.abs(S),Math.abs(L))&&Math.abs(I-q)<=r.EPSILON*Math.max(1,Math.abs(I),Math.abs(q))&&Math.abs(f-R)<=r.EPSILON*Math.max(1,Math.abs(f),Math.abs(R))&&Math.abs(x-N)<=r.EPSILON*Math.max(1,Math.abs(x),Math.abs(N))&&Math.abs(D-O)<=r.EPSILON*Math.max(1,Math.abs(D),Math.abs(O))&&Math.abs(F-Y)<=r.EPSILON*Math.max(1,Math.abs(F),Math.abs(Y))},t.exports=o},function(t,a,n){var r=n(1),o=n(4),u=n(7),l=n(8),e={};e.create=function(){var t=new r.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},e.rotationTo=function(){var t=u.create(),a=u.fromValues(1,0,0),n=u.fromValues(0,1,0);return function(r,o,l){var M=u.dot(o,l);return M<-.999999?(u.cross(t,a,o),u.length(t)<1e-6&&u.cross(t,n,o),u.normalize(t,t),e.setAxisAngle(r,t,Math.PI),r):M>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(u.cross(t,o,l),r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=1+M,e.normalize(r,r))}}(),e.setAxes=function(){var t=o.create();return function(a,n,r,o){return t[0]=r[0],t[3]=r[1],t[6]=r[2],t[1]=o[0],t[4]=o[1],t[7]=o[2],t[2]=-n[0],t[5]=-n[1],t[8]=-n[2],e.normalize(a,e.fromMat3(a,t))}}(),e.clone=l.clone,e.fromValues=l.fromValues,e.copy=l.copy,e.set=l.set,e.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},e.setAxisAngle=function(t,a,n){n=.5*n;var r=Math.sin(n);return t[0]=r*a[0],t[1]=r*a[1],t[2]=r*a[2],t[3]=Math.cos(n),t},e.getAxisAngle=function(t,a){var n=2*Math.acos(a[3]),r=Math.sin(n/2);return 0!=r?(t[0]=a[0]/r,t[1]=a[1]/r,t[2]=a[2]/r):(t[0]=1,t[1]=0,t[2]=0),n},e.add=l.add,e.multiply=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3],e=n[0],M=n[1],s=n[2],i=n[3];return t[0]=r*i+l*e+o*s-u*M,t[1]=o*i+l*M+u*e-r*s,t[2]=u*i+l*s+r*M-o*e,t[3]=l*i-r*e-o*M-u*s,t},e.mul=e.multiply,e.scale=l.scale,e.rotateX=function(t,a,n){n*=.5;var r=a[0],o=a[1],u=a[2],l=a[3],e=Math.sin(n),M=Math.cos(n);return t[0]=r*M+l*e,t[1]=o*M+u*e,t[2]=u*M-o*e,t[3]=l*M-r*e,t},e.rotateY=function(t,a,n){n*=.5;var r=a[0],o=a[1],u=a[2],l=a[3],e=Math.sin(n),M=Math.cos(n);return t[0]=r*M-u*e,t[1]=o*M+l*e,t[2]=u*M+r*e,t[3]=l*M-o*e,t},e.rotateZ=function(t,a,n){n*=.5;var r=a[0],o=a[1],u=a[2],l=a[3],e=Math.sin(n),M=Math.cos(n);return t[0]=r*M+o*e,t[1]=o*M-r*e,t[2]=u*M+l*e,t[3]=l*M-u*e,t},e.calculateW=function(t,a){var n=a[0],r=a[1],o=a[2];return t[0]=n,t[1]=r,t[2]=o,t[3]=Math.sqrt(Math.abs(1-n*n-r*r-o*o)),t},e.dot=l.dot,e.lerp=l.lerp,e.slerp=function(t,a,n,r){var o,u,l,e,M,s=a[0],i=a[1],c=a[2],h=a[3],S=n[0],I=n[1],f=n[2],x=n[3];return u=s*S+i*I+c*f+h*x,u<0&&(u=-u,S=-S,I=-I,f=-f,x=-x),1-u>1e-6?(o=Math.acos(u),l=Math.sin(o),e=Math.sin((1-r)*o)/l,M=Math.sin(r*o)/l):(e=1-r,M=r),t[0]=e*s+M*S,t[1]=e*i+M*I,t[2]=e*c+M*f,t[3]=e*h+M*x,t},e.sqlerp=function(){var t=e.create(),a=e.create();return function(n,r,o,u,l,M){return e.slerp(t,r,l,M),e.slerp(a,o,u,M),e.slerp(n,t,a,2*M*(1-M)),n}}(),e.invert=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=n*n+r*r+o*o+u*u,e=l?1/l:0;return t[0]=-n*e,t[1]=-r*e,t[2]=-o*e,t[3]=u*e,t},e.conjugate=function(t,a){return t[0]=-a[0],t[1]=-a[1],t[2]=-a[2],t[3]=a[3],t},e.length=l.length,e.len=e.length,e.squaredLength=l.squaredLength,e.sqrLen=e.squaredLength,e.normalize=l.normalize,e.fromMat3=function(t,a){var n,r=a[0]+a[4]+a[8];if(r>0)n=Math.sqrt(r+1),t[3]=.5*n,n=.5/n,t[0]=(a[5]-a[7])*n,t[1]=(a[6]-a[2])*n,t[2]=(a[1]-a[3])*n;else{var o=0;a[4]>a[0]&&(o=1),a[8]>a[3*o+o]&&(o=2);var u=(o+1)%3,l=(o+2)%3;n=Math.sqrt(a[3*o+o]-a[3*u+u]-a[3*l+l]+1),t[o]=.5*n,n=.5/n,t[3]=(a[3*u+l]-a[3*l+u])*n,t[u]=(a[3*u+o]+a[3*o+u])*n,t[l]=(a[3*l+o]+a[3*o+l])*n}return t},e.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},e.exactEquals=l.exactEquals,e.equals=l.equals,t.exports=e},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(3);return t[0]=0,t[1]=0,t[2]=0,t},o.clone=function(t){var a=new r.ARRAY_TYPE(3);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a},o.fromValues=function(t,a,n){var o=new r.ARRAY_TYPE(3);return o[0]=t,o[1]=a,o[2]=n,o},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t},o.set=function(t,a,n,r){return t[0]=a,t[1]=n,t[2]=r,t},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t},o.sub=o.subtract,o.multiply=function(t,a,n){return t[0]=a[0]*n[0],t[1]=a[1]*n[1],t[2]=a[2]*n[2],t},o.mul=o.multiply,o.divide=function(t,a,n){return t[0]=a[0]/n[0],t[1]=a[1]/n[1],t[2]=a[2]/n[2],t},o.div=o.divide,o.ceil=function(t,a){return t[0]=Math.ceil(a[0]),t[1]=Math.ceil(a[1]),t[2]=Math.ceil(a[2]),t},o.floor=function(t,a){return t[0]=Math.floor(a[0]),t[1]=Math.floor(a[1]),t[2]=Math.floor(a[2]),t},o.min=function(t,a,n){return t[0]=Math.min(a[0],n[0]),t[1]=Math.min(a[1],n[1]),t[2]=Math.min(a[2],n[2]),t},o.max=function(t,a,n){return t[0]=Math.max(a[0],n[0]),t[1]=Math.max(a[1],n[1]),t[2]=Math.max(a[2],n[2]),t},o.round=function(t,a){return t[0]=Math.round(a[0]),t[1]=Math.round(a[1]),t[2]=Math.round(a[2]),t},o.scale=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t},o.scaleAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t},o.distance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1],o=a[2]-t[2];return Math.sqrt(n*n+r*r+o*o)},o.dist=o.distance,o.squaredDistance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1],o=a[2]-t[2];return n*n+r*r+o*o},o.sqrDist=o.squaredDistance,o.length=function(t){var a=t[0],n=t[1],r=t[2];return Math.sqrt(a*a+n*n+r*r)},o.len=o.length,o.squaredLength=function(t){var a=t[0],n=t[1],r=t[2];return a*a+n*n+r*r},o.sqrLen=o.squaredLength,o.negate=function(t,a){return t[0]=-a[0],t[1]=-a[1],t[2]=-a[2],t},o.inverse=function(t,a){return t[0]=1/a[0],t[1]=1/a[1],t[2]=1/a[2],t},o.normalize=function(t,a){var n=a[0],r=a[1],o=a[2],u=n*n+r*r+o*o;return u>0&&(u=1/Math.sqrt(u),t[0]=a[0]*u,t[1]=a[1]*u,t[2]=a[2]*u),t},o.dot=function(t,a){return t[0]*a[0]+t[1]*a[1]+t[2]*a[2]},o.cross=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=n[0],e=n[1],M=n[2];return t[0]=o*M-u*e,t[1]=u*l-r*M,t[2]=r*e-o*l,t},o.lerp=function(t,a,n,r){var o=a[0],u=a[1],l=a[2];return t[0]=o+r*(n[0]-o),t[1]=u+r*(n[1]-u),t[2]=l+r*(n[2]-l),t},o.hermite=function(t,a,n,r,o,u){var l=u*u,e=l*(2*u-3)+1,M=l*(u-2)+u,s=l*(u-1),i=l*(3-2*u);return t[0]=a[0]*e+n[0]*M+r[0]*s+o[0]*i,t[1]=a[1]*e+n[1]*M+r[1]*s+o[1]*i,t[2]=a[2]*e+n[2]*M+r[2]*s+o[2]*i,t},o.bezier=function(t,a,n,r,o,u){var l=1-u,e=l*l,M=u*u,s=e*l,i=3*u*e,c=3*M*l,h=M*u;return t[0]=a[0]*s+n[0]*i+r[0]*c+o[0]*h,t[1]=a[1]*s+n[1]*i+r[1]*c+o[1]*h,t[2]=a[2]*s+n[2]*i+r[2]*c+o[2]*h,t},o.random=function(t,a){a=a||1;var n=2*r.RANDOM()*Math.PI,o=2*r.RANDOM()-1,u=Math.sqrt(1-o*o)*a;return t[0]=Math.cos(n)*u,t[1]=Math.sin(n)*u,t[2]=o*a,t},o.transformMat4=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=n[3]*r+n[7]*o+n[11]*u+n[15];return l=l||1,t[0]=(n[0]*r+n[4]*o+n[8]*u+n[12])/l,t[1]=(n[1]*r+n[5]*o+n[9]*u+n[13])/l,t[2]=(n[2]*r+n[6]*o+n[10]*u+n[14])/l,t},o.transformMat3=function(t,a,n){var r=a[0],o=a[1],u=a[2];return t[0]=r*n[0]+o*n[3]+u*n[6],t[1]=r*n[1]+o*n[4]+u*n[7],t[2]=r*n[2]+o*n[5]+u*n[8],t},o.transformQuat=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=n[0],e=n[1],M=n[2],s=n[3],i=s*r+e*u-M*o,c=s*o+M*r-l*u,h=s*u+l*o-e*r,S=-l*r-e*o-M*u;return t[0]=i*s+S*-l+c*-M-h*-e,t[1]=c*s+S*-e+h*-l-i*-M,t[2]=h*s+S*-M+i*-e-c*-l,t},o.rotateX=function(t,a,n,r){var o=[],u=[];return o[0]=a[0]-n[0],o[1]=a[1]-n[1],o[2]=a[2]-n[2],u[0]=o[0],u[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),u[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),t[0]=u[0]+n[0],t[1]=u[1]+n[1],t[2]=u[2]+n[2],t},o.rotateY=function(t,a,n,r){var o=[],u=[];return o[0]=a[0]-n[0],o[1]=a[1]-n[1],o[2]=a[2]-n[2],u[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),u[1]=o[1],u[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),t[0]=u[0]+n[0],t[1]=u[1]+n[1],t[2]=u[2]+n[2],t},o.rotateZ=function(t,a,n,r){var o=[],u=[];return o[0]=a[0]-n[0],o[1]=a[1]-n[1],o[2]=a[2]-n[2],u[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),u[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),u[2]=o[2],t[0]=u[0]+n[0],t[1]=u[1]+n[1],t[2]=u[2]+n[2],t},o.forEach=function(){var t=o.create();return function(a,n,r,o,u,l){var e,M;for(n||(n=3),r||(r=0),M=o?Math.min(o*n+r,a.length):a.length,e=r;e<M;e+=n)t[0]=a[e],t[1]=a[e+1],t[2]=a[e+2],u(t,t,l),a[e]=t[0],a[e+1]=t[1],a[e+2]=t[2];return a}}(),o.angle=function(t,a){var n=o.fromValues(t[0],t[1],t[2]),r=o.fromValues(a[0],a[1],a[2]);o.normalize(n,n),o.normalize(r,r);var u=o.dot(n,r);return u>1?0:Math.acos(u)},o.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},o.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]},o.equals=function(t,a){var n=t[0],o=t[1],u=t[2],l=a[0],e=a[1],M=a[2];return Math.abs(n-l)<=r.EPSILON*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(o-e)<=r.EPSILON*Math.max(1,Math.abs(o),Math.abs(e))&&Math.abs(u-M)<=r.EPSILON*Math.max(1,Math.abs(u),Math.abs(M))},t.exports=o},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},o.clone=function(t){var a=new r.ARRAY_TYPE(4);return a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3],a},o.fromValues=function(t,a,n,o){var u=new r.ARRAY_TYPE(4);return u[0]=t,u[1]=a,u[2]=n,u[3]=o,u},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t[2]=a[2],t[3]=a[3],t},o.set=function(t,a,n,r,o){return t[0]=a,t[1]=n,t[2]=r,t[3]=o,t},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t},o.sub=o.subtract,o.multiply=function(t,a,n){return t[0]=a[0]*n[0],t[1]=a[1]*n[1],t[2]=a[2]*n[2],t[3]=a[3]*n[3],t},o.mul=o.multiply,o.divide=function(t,a,n){return t[0]=a[0]/n[0],t[1]=a[1]/n[1],t[2]=a[2]/n[2],t[3]=a[3]/n[3],t},o.div=o.divide,o.ceil=function(t,a){return t[0]=Math.ceil(a[0]),t[1]=Math.ceil(a[1]),t[2]=Math.ceil(a[2]),t[3]=Math.ceil(a[3]),t},o.floor=function(t,a){return t[0]=Math.floor(a[0]),t[1]=Math.floor(a[1]),t[2]=Math.floor(a[2]),t[3]=Math.floor(a[3]),t},o.min=function(t,a,n){return t[0]=Math.min(a[0],n[0]),t[1]=Math.min(a[1],n[1]),t[2]=Math.min(a[2],n[2]),t[3]=Math.min(a[3],n[3]),t},o.max=function(t,a,n){return t[0]=Math.max(a[0],n[0]),t[1]=Math.max(a[1],n[1]),t[2]=Math.max(a[2],n[2]),t[3]=Math.max(a[3],n[3]),t},o.round=function(t,a){return t[0]=Math.round(a[0]),t[1]=Math.round(a[1]),t[2]=Math.round(a[2]),t[3]=Math.round(a[3]),t},o.scale=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t},o.scaleAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t},o.distance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1],o=a[2]-t[2],u=a[3]-t[3];return Math.sqrt(n*n+r*r+o*o+u*u)},o.dist=o.distance,o.squaredDistance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1],o=a[2]-t[2],u=a[3]-t[3];return n*n+r*r+o*o+u*u},o.sqrDist=o.squaredDistance,o.length=function(t){var a=t[0],n=t[1],r=t[2],o=t[3];return Math.sqrt(a*a+n*n+r*r+o*o)},o.len=o.length,o.squaredLength=function(t){var a=t[0],n=t[1],r=t[2],o=t[3];return a*a+n*n+r*r+o*o},o.sqrLen=o.squaredLength,o.negate=function(t,a){return t[0]=-a[0],t[1]=-a[1],t[2]=-a[2],t[3]=-a[3],t},o.inverse=function(t,a){return t[0]=1/a[0],t[1]=1/a[1],t[2]=1/a[2],t[3]=1/a[3],t},o.normalize=function(t,a){var n=a[0],r=a[1],o=a[2],u=a[3],l=n*n+r*r+o*o+u*u;return l>0&&(l=1/Math.sqrt(l),t[0]=n*l,t[1]=r*l,t[2]=o*l,t[3]=u*l),t},o.dot=function(t,a){return t[0]*a[0]+t[1]*a[1]+t[2]*a[2]+t[3]*a[3]},o.lerp=function(t,a,n,r){var o=a[0],u=a[1],l=a[2],e=a[3];return t[0]=o+r*(n[0]-o),t[1]=u+r*(n[1]-u),t[2]=l+r*(n[2]-l),t[3]=e+r*(n[3]-e),t},o.random=function(t,a){return a=a||1,t[0]=r.RANDOM(),t[1]=r.RANDOM(),t[2]=r.RANDOM(),t[3]=r.RANDOM(),o.normalize(t,t),o.scale(t,t,a),t},o.transformMat4=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=a[3];return t[0]=n[0]*r+n[4]*o+n[8]*u+n[12]*l,t[1]=n[1]*r+n[5]*o+n[9]*u+n[13]*l,t[2]=n[2]*r+n[6]*o+n[10]*u+n[14]*l,t[3]=n[3]*r+n[7]*o+n[11]*u+n[15]*l,t},o.transformQuat=function(t,a,n){var r=a[0],o=a[1],u=a[2],l=n[0],e=n[1],M=n[2],s=n[3],i=s*r+e*u-M*o,c=s*o+M*r-l*u,h=s*u+l*o-e*r,S=-l*r-e*o-M*u;return t[0]=i*s+S*-l+c*-M-h*-e,t[1]=c*s+S*-e+h*-l-i*-M,t[2]=h*s+S*-M+i*-e-c*-l,t[3]=a[3],t},o.forEach=function(){var t=o.create();return function(a,n,r,o,u,l){var e,M;for(n||(n=4),r||(r=0),M=o?Math.min(o*n+r,a.length):a.length,e=r;e<M;e+=n)t[0]=a[e],t[1]=a[e+1],t[2]=a[e+2],t[3]=a[e+3],u(t,t,l),a[e]=t[0],a[e+1]=t[1],a[e+2]=t[2],a[e+3]=t[3];return a}}(),o.str=function(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},o.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]},o.equals=function(t,a){var n=t[0],o=t[1],u=t[2],l=t[3],e=a[0],M=a[1],s=a[2],i=a[3];return Math.abs(n-e)<=r.EPSILON*Math.max(1,Math.abs(n),Math.abs(e))&&Math.abs(o-M)<=r.EPSILON*Math.max(1,Math.abs(o),Math.abs(M))&&Math.abs(u-s)<=r.EPSILON*Math.max(1,Math.abs(u),Math.abs(s))&&Math.abs(l-i)<=r.EPSILON*Math.max(1,Math.abs(l),Math.abs(i))},t.exports=o},function(t,a,n){var r=n(1),o={};o.create=function(){var t=new r.ARRAY_TYPE(2);return t[0]=0,t[1]=0,t},o.clone=function(t){var a=new r.ARRAY_TYPE(2);return a[0]=t[0],a[1]=t[1],a},o.fromValues=function(t,a){var n=new r.ARRAY_TYPE(2);return n[0]=t,n[1]=a,n},o.copy=function(t,a){return t[0]=a[0],t[1]=a[1],t},o.set=function(t,a,n){return t[0]=a,t[1]=n,t},o.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t},o.subtract=function(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t},o.sub=o.subtract,o.multiply=function(t,a,n){return t[0]=a[0]*n[0],t[1]=a[1]*n[1],t},o.mul=o.multiply,o.divide=function(t,a,n){return t[0]=a[0]/n[0],t[1]=a[1]/n[1],t},o.div=o.divide,o.ceil=function(t,a){return t[0]=Math.ceil(a[0]),t[1]=Math.ceil(a[1]),t},o.floor=function(t,a){return t[0]=Math.floor(a[0]),t[1]=Math.floor(a[1]),t},o.min=function(t,a,n){return t[0]=Math.min(a[0],n[0]),t[1]=Math.min(a[1],n[1]),t},o.max=function(t,a,n){return t[0]=Math.max(a[0],n[0]),t[1]=Math.max(a[1],n[1]),t},o.round=function(t,a){return t[0]=Math.round(a[0]),t[1]=Math.round(a[1]),t},o.scale=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t},o.scaleAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t},o.distance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1];return Math.sqrt(n*n+r*r)},o.dist=o.distance,o.squaredDistance=function(t,a){var n=a[0]-t[0],r=a[1]-t[1];return n*n+r*r},o.sqrDist=o.squaredDistance,o.length=function(t){var a=t[0],n=t[1];return Math.sqrt(a*a+n*n)},o.len=o.length,o.squaredLength=function(t){var a=t[0],n=t[1];return a*a+n*n},o.sqrLen=o.squaredLength,o.negate=function(t,a){return t[0]=-a[0],t[1]=-a[1],t},o.inverse=function(t,a){return t[0]=1/a[0],t[1]=1/a[1],t},o.normalize=function(t,a){var n=a[0],r=a[1],o=n*n+r*r;return o>0&&(o=1/Math.sqrt(o),t[0]=a[0]*o,t[1]=a[1]*o),t},o.dot=function(t,a){return t[0]*a[0]+t[1]*a[1]},o.cross=function(t,a,n){var r=a[0]*n[1]-a[1]*n[0];return t[0]=t[1]=0,t[2]=r,t},o.lerp=function(t,a,n,r){var o=a[0],u=a[1];return t[0]=o+r*(n[0]-o),t[1]=u+r*(n[1]-u),t},o.random=function(t,a){a=a||1;var n=2*r.RANDOM()*Math.PI;return t[0]=Math.cos(n)*a,t[1]=Math.sin(n)*a,t},o.transformMat2=function(t,a,n){var r=a[0],o=a[1];return t[0]=n[0]*r+n[2]*o,t[1]=n[1]*r+n[3]*o,t},o.transformMat2d=function(t,a,n){var r=a[0],o=a[1];return t[0]=n[0]*r+n[2]*o+n[4],t[1]=n[1]*r+n[3]*o+n[5],t},o.transformMat3=function(t,a,n){var r=a[0],o=a[1];return t[0]=n[0]*r+n[3]*o+n[6],t[1]=n[1]*r+n[4]*o+n[7],t},o.transformMat4=function(t,a,n){var r=a[0],o=a[1];return t[0]=n[0]*r+n[4]*o+n[12],t[1]=n[1]*r+n[5]*o+n[13],t},o.forEach=function(){var t=o.create();return function(a,n,r,o,u,l){var e,M;for(n||(n=2),r||(r=0),M=o?Math.min(o*n+r,a.length):a.length,e=r;e<M;e+=n)t[0]=a[e],t[1]=a[e+1],u(t,t,l),a[e]=t[0],a[e+1]=t[1];return a}}(),o.str=function(t){return"vec2("+t[0]+", "+t[1]+")"},o.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]},o.equals=function(t,a){var n=t[0],o=t[1],u=a[0],l=a[1];return Math.abs(n-u)<=r.EPSILON*Math.max(1,Math.abs(n),Math.abs(u))&&Math.abs(o-l)<=r.EPSILON*Math.max(1,Math.abs(o),Math.abs(l))},t.exports=o}])}); \ No newline at end of file
diff --git a/graphics/asymptote/webgl/gl.js b/graphics/asymptote/webgl/gl.js
index ab2f5fa799..f3bdf5505f 100644
--- a/graphics/asymptote/webgl/gl.js
+++ b/graphics/asymptote/webgl/gl.js
@@ -1,922 +1,2140 @@
-// Contains code from http: //learningwebgl.com/blog/ ? p=28#triangle-vertex-positions
-// modified to produce a subdivision algorithm for rendering Bezier
-// patches with WebGL
-
-var gl;
+/*@license
+ gl.js: Render Bezier patches via subdivision with WebGL.
+ Copyright 2019: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
+ University of Alberta
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+let gl;
+
+let canvas;
+let canvasWidth,canvasHeight;
+let halfCanvasWidth,halfCanvasHeight;
+
+let pixel=0.75; // Adaptive rendering constant.
+let BezierFactor=0.4;
+let FillFactor=0.1;
+let Zoom;
+let Zoom0;
+
+let maxViewportWidth=window.innerWidth;
+let maxViewportHeight=window.innerHeight;
+let viewportmargin=0;
+
+const windowTrim=10;
+let resizeStep=1.2;
+let zoomFactor;
+let zoomPinchFactor;
+let zoomPinchCap;
+let zoomStep;
+
+let shiftHoldDistance;
+let shiftWaitTime;
+let vibrateTime;
+
+let lastzoom;
+let H; // maximum camera view half-height
+
+let Fuzz2=1000*Number.EPSILON;
+let Fuzz4=Fuzz2*Fuzz2;
+let third=1/3;
+
+let P=[]; // Array of Bezier patches, triangles, curves, and pixels
+let Materials=[]; // Array of materials
+let Lights=[]; // Array of lights
+let Centers=[]; // Array of billboard centers
+
+// Don't account for device pixels when embedding in another html document
+let absolute=false;
+
+let rotMat=mat4.create();
+let projMat=mat4.create(); // projection matrix
+let viewMat=mat4.create(); // view matrix
+
+let projViewMat=mat4.create(); // projection view matrix
+let normMat=mat3.create();
+let viewMat3=mat3.create(); // 3x3 view matrix
+let rotMats=mat4.create();
+let cjMatInv=mat4.create();
+let translMat=mat4.create();
+
+let zmin,zmax;
+let center={x:0,y:0,z:0};
+let size2;
+let ArcballFactor;
+let b,B; // Scene min,max bounding box corners
+let shift={
+ x:0,y:0
+};
+
+let viewParam = {
+ xmin:0,xmax:0,
+ ymin:0,ymax:0,
+ zmin:0,zmax:0
+};
+
+let positionBuffer;
+let materialBuffer;
+let colorBuffer;
+let indexBuffer;
+
+let redraw=true;
+let remesh=true;
+let mouseDownOrTouchActive=false;
+let lastMouseX=null;
+let lastMouseY=null;
+let touchID=null;
+
+// Indexed triangles:
+let Positions=[];
+let Normals=[];
+let Colors=[];
+let Indices=[];
class Material {
- constructor(baseColor, emissive, specular, roughness, metallic, f0) {
- this.baseColor = baseColor;
- this.emissive = emissive;
- this.specular = specular;
- this.roughness = roughness;
- this.metallic = metallic;
- this.f0 = f0;
+ constructor(diffuse,emissive,specular,shininess,metallic,fresnel0) {
+ this.diffuse=diffuse;
+ this.emissive=emissive;
+ this.specular=specular;
+ this.shininess=shininess;
+ this.metallic=metallic;
+ this.fresnel0=fresnel0;
+ }
+
+ setUniform(program,stringLoc,index=null) {
+ let getLoc;
+ if (index === null)
+ getLoc =
+ param => gl.getUniformLocation(program,stringLoc+"."+param);
+ else
+ getLoc =
+ param => gl.getUniformLocation(program,stringLoc+"["+index+"]."+param);
+
+ gl.uniform4fv(getLoc("diffuse"),new Float32Array(this.diffuse));
+ gl.uniform4fv(getLoc("emissive"),new Float32Array(this.emissive));
+ gl.uniform4fv(getLoc("specular"),new Float32Array(this.specular));
+
+ gl.uniform1f(getLoc("shininess"),this.shininess);
+ gl.uniform1f(getLoc("metallic"),this.metallic);
+ gl.uniform1f(getLoc("fresnel0"),this.fresnel0);
+ }
+}
+
+let enumPointLight=1;
+let enumDirectionalLight=2;
+
+class Light {
+ constructor(direction,color) {
+ this.direction=direction;
+ this.color=color;
+ }
+
+ setUniform(program,stringLoc,index) {
+ let getLoc=
+ param => gl.getUniformLocation(program,stringLoc+"["+index+"]."+param);
+
+ gl.uniform3fv(getLoc("direction"),new Float32Array(this.direction));
+ gl.uniform3fv(getLoc("color"),new Float32Array(this.color));
+ }
+}
+
+function initGL() {
+ try {
+ gl=canvas.getContext("webgl",{alpha:false}); // Don't composite background
+ } catch(e) {}
+ if (!gl)
+ alert("Could not initialize WebGL");
+}
+
+function getShader(gl,id,options=[]) {
+ let shaderScript=document.getElementById(id);
+ if(!shaderScript)
+ return null;
+
+ let str=`#version 100
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+ precision highp float;
+#else
+ precision mediump float;
+#endif
+ const int nLights=${Lights.length};
+ const int nMaterials=${Materials.length};\n`
+
+ if(orthographic)
+ str += `#define ORTHOGRAPHIC\n`;
+
+ options.forEach(s => str += `#define `+s+`\n`);
+
+ let k=shaderScript.firstChild;
+ while(k) {
+ if(k.nodeType == 3)
+ str += k.textContent;
+ k=k.nextSibling;
+ }
+ let shader;
+ if(shaderScript.type == "x-shader/x-fragment")
+ shader = gl.createShader(gl.FRAGMENT_SHADER);
+ else if (shaderScript.type == "x-shader/x-vertex")
+ shader = gl.createShader(gl.VERTEX_SHADER);
+ else
+ return null;
+
+ gl.shaderSource(shader,str);
+ gl.compileShader(shader);
+ if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)) {
+ alert(gl.getShaderInfoLog(shader));
+ return null;
+ }
+ return shader;
+}
+
+
+function drawBuffer(data,shader,indices=data.indices)
+{
+ if(data.indices.length == 0) return;
+ let pixel=shader == pixelShader;
+ let normal=!pixel && (shader != noNormalShader);
+
+ setUniforms(shader);
+
+ gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(data.vertices),
+ gl.STATIC_DRAW);
+ gl.vertexAttribPointer(shader.vertexPositionAttribute,
+ 3,gl.FLOAT,false,normal ? 24 : (pixel ? 16 : 12),0);
+ if(normal)
+ gl.vertexAttribPointer(shader.vertexNormalAttribute,
+ 3,gl.FLOAT,false,24,12);
+ else if(pixel)
+ gl.vertexAttribPointer(shader.vertexWidthAttribute,
+ 1,gl.FLOAT,false,16,12);
+
+ gl.bindBuffer(gl.ARRAY_BUFFER,materialBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER,new Int16Array(data.materials),
+ gl.STATIC_DRAW);
+ gl.vertexAttribPointer(shader.vertexMaterialAttribute,
+ 1,gl.SHORT,false,2,0);
+
+ if(shader == colorShader || shader == transparentShader) {
+ gl.bindBuffer(gl.ARRAY_BUFFER,colorBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER,new Uint8Array(data.colors),
+ gl.STATIC_DRAW);
+ gl.vertexAttribPointer(shader.vertexColorAttribute,
+ 4,gl.UNSIGNED_BYTE,true,0,0);
+ }
+
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indexBuffer);
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,
+ indexExt ? new Uint32Array(indices) :
+ new Uint16Array(indices),gl.STATIC_DRAW);
+
+ gl.drawElements(normal ? gl.TRIANGLES : (pixel ? gl.POINTS : gl.LINES),
+ indices.length,
+ indexExt ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT,0);
+}
+
+class vertexBuffer {
+ constructor() {
+ this.clear();
+ }
+ clear() {
+ this.vertices=[];
+ this.materials=[];
+ this.colors=[];
+ this.indices=[];
+ this.nvertices=0;
+ }
+
+ // material vertex
+ vertex(v,n) {
+ this.vertices.push(v[0]);
+ this.vertices.push(v[1]);
+ this.vertices.push(v[2]);
+ this.vertices.push(n[0]);
+ this.vertices.push(n[1]);
+ this.vertices.push(n[2]);
+ this.materials.push(materialIndex);
+ return this.nvertices++;
+ }
+
+ // colored vertex
+ Vertex(v,n,c=[0,0,0,0]) {
+ this.vertices.push(v[0]);
+ this.vertices.push(v[1]);
+ this.vertices.push(v[2]);
+ this.vertices.push(n[0]);
+ this.vertices.push(n[1]);
+ this.vertices.push(n[2]);
+ this.materials.push(materialIndex);
+ this.colors.push(c[0]);
+ this.colors.push(c[1]);
+ this.colors.push(c[2]);
+ this.colors.push(c[3]);
+ return this.nvertices++;
+ }
+
+ // material vertex without normal
+ vertex1(v) {
+ this.vertices.push(v[0]);
+ this.vertices.push(v[1]);
+ this.vertices.push(v[2]);
+ this.materials.push(materialIndex);
+ return this.nvertices++;
+ }
+
+ // material vertex with width and without normal
+ vertex0(v,width) {
+ this.vertices.push(v[0]);
+ this.vertices.push(v[1]);
+ this.vertices.push(v[2]);
+ this.vertices.push(width);
+ this.materials.push(materialIndex);
+ return this.nvertices++;
+ }
+
+ // indexed colored vertex
+ iVertex(i,v,n,c=[0,0,0,0]) {
+ let i6=6*i;
+ this.vertices[i6]=v[0];
+ this.vertices[i6+1]=v[1];
+ this.vertices[i6+2]=v[2];
+ this.vertices[i6+3]=n[0];
+ this.vertices[i6+4]=n[1];
+ this.vertices[i6+5]=n[2];
+ this.materials[i]=materialIndex;
+ let i4=4*i;
+ this.colors[i4]=c[0];
+ this.colors[i4+1]=c[1];
+ this.colors[i4+2]=c[2];
+ this.colors[i4+3]=c[3];
+ this.indices.push(i);
+ }
+
+ append(data) {
+ append(this.vertices,data.vertices);
+ append(this.materials,data.materials);
+ append(this.colors,data.colors);
+ appendOffset(this.indices,data.indices,this.nvertices);
+ this.nvertices += data.nvertices;
+ }
+}
+
+let material0Data=new vertexBuffer(); // pixels
+let material1Data=new vertexBuffer(); // material Bezier curves
+let materialData=new vertexBuffer(); // material Bezier patches & triangles
+let colorData=new vertexBuffer(); // colored Bezier patches & triangles
+let transparentData=new vertexBuffer(); // transparent patches & triangles
+let triangleData=new vertexBuffer(); // opaque indexed triangles
+
+
+let materialIndex;
+
+// efficiently append array b onto array a
+function append(a,b)
+{
+ let n=a.length;
+ let m=b.length;
+ a.length += m;
+ for(let i=0; i < m; ++i)
+ a[n+i]=b[i];
+}
+
+// efficiently append array b onto array a
+function appendOffset(a,b,o)
+{
+ let n=a.length;
+ let m=b.length;
+ a.length += b.length;
+ for(let i=0; i < m; ++i)
+ a[n+i]=b[i]+o;
+}
+
+class Geometry {
+ constructor() {
+ this.data=new vertexBuffer();
+ this.Onscreen=false;
+ this.m=[];
+ }
+
+ // Is 2D bounding box formed by projecting 3d points in vector v offscreen?
+ offscreen(v) {
+ let m=projViewMat;
+ let v0=v[0];
+ let x=v0[0], y=v0[1], z=v0[2];
+ let f=1/(m[3]*x+m[7]*y+m[11]*z+m[15]);
+ this.x=this.X=(m[0]*x+m[4]*y+m[8]*z+m[12])*f;
+ this.y=this.Y=(m[1]*x+m[5]*y+m[9]*z+m[13])*f;
+ for(let i=1, n=v.length; i < n; ++i) {
+ let vi=v[i];
+ let x=vi[0], y=vi[1], z=vi[2];
+ let f=1/(m[3]*x+m[7]*y+m[11]*z+m[15]);
+ let X=(m[0]*x+m[4]*y+m[8]*z+m[12])*f;
+ let Y=(m[1]*x+m[5]*y+m[9]*z+m[13])*f;
+ if(X < this.x) this.x=X;
+ else if(X > this.X) this.X=X;
+ if(Y < this.y) this.y=Y;
+ else if(Y > this.Y) this.Y=Y;
+ }
+ let eps=1e-2;
+ let min=-1-eps;
+ let max=1+eps;
+ if(this.X < min || this.x > max || this.Y < min || this.y > max) {
+ this.Onscreen=false;
+ return true;
}
+ return false;
+ }
- setUniform(program, stringLoc, index=null) {
- var getLoc;
- if (index===null) {
- getLoc =
- param => gl.getUniformLocation(program, stringLoc + "." + param);
- } else {
- getLoc =
- param => gl.getUniformLocation(program, stringLoc + "[" + index + "]." + param);
- }
+ T(v) {
+ let c0=this.c[0];
+ let c1=this.c[1];
+ let c2=this.c[2];
+ let x=v[0]-c0;
+ let y=v[1]-c1;
+ let z=v[2]-c2;
+ return [x*normMat[0]+y*normMat[3]+z*normMat[6]+c0,
+ x*normMat[1]+y*normMat[4]+z*normMat[7]+c1,
+ x*normMat[2]+y*normMat[5]+z*normMat[8]+c2];
+ }
- gl.uniform4fv(getLoc("baseColor"), new Float32Array(this.baseColor));
- gl.uniform4fv(getLoc("emissive"), new Float32Array(this.emissive));
- gl.uniform4fv(getLoc("specular"), new Float32Array(this.specular));
+ Tcorners(m,M) {
+ return [this.T(m),this.T([m[0],m[1],M[2]]),this.T([m[0],M[1],m[2]]),
+ this.T([m[0],M[1],M[2]]),this.T([M[0],m[1],m[2]]),
+ this.T([M[0],m[1],M[2]]),this.T([M[0],M[1],m[2]]),this.T(M)];
- gl.uniform1f(getLoc("roughness"), this.roughness);
- gl.uniform1f(getLoc("metallic"), this.metallic);
- gl.uniform1f(getLoc("f0"), this.f0);
+ }
+
+ render() {
+ // First check if re-rendering is required
+ let v;
+ if(this.CenterIndex == 0)
+ v=corners(this.Min,this.Max);
+ else {
+ this.c=Centers[this.CenterIndex-1];
+ v=this.Tcorners(this.Min,this.Max);
+ }
+
+ if(this.offscreen(v)) { // Fully offscreen
+ this.data.clear();
+ return;
}
+
+ let p=this.controlpoints;
+ let P;
+
+ if(this.CenterIndex == 0) {
+ if(!remesh && this.Onscreen) {
+ // Fully onscreen; no need to re-render
+ this.append();
+ return;
+ }
+ P=p;
+ } else { // Transform billboard labels
+ let n=p.length;
+ P=Array(n);
+ for(let i=0; i < n; ++i)
+ P[i]=this.T(p[i]);
+ }
+
+ materialIndex=this.MaterialIndex;
+
+ let s=orthographic ? 1 : this.Min[2]/B[2];
+ let res=pixel*Math.hypot(s*(viewParam.xmax-viewParam.xmin),
+ s*(viewParam.ymax-viewParam.ymin))/size2;
+ this.res2=res*res;
+ this.Epsilon=FillFactor*res;
+
+ this.data.clear();
+ this.Onscreen=true;
+ this.process(P);
+ }
}
-var enumPointLight = 1;
-var enumDirectionalLight = 2;
+class BezierPatch extends Geometry {
+ /**
+ * Constructor for Bezier Patch
+ * @param {*} controlpoints array of 16 control points
+ * @param {*} CenterIndex center index of billboard labels (or 0)
+ * @param {*} MaterialIndex material index (>= 0)
+ * @param {*} Min bounding box corner
+ * @param {*} Max bounding box corner
+ * @param {*} colors array of 4 RGBA color arrays
+ */
+ constructor(controlpoints,CenterIndex,MaterialIndex,Min,Max,color) {
+ super();
+ this.controlpoints=controlpoints;
+ this.Min=Min;
+ this.Max=Max;
+ this.color=color;
+ this.CenterIndex=CenterIndex;
+ let n=controlpoints.length;
+ if(color) {
+ let sum=color[0][3]+color[1][3]+color[2][3];
+ this.transparent=(n == 16 || n == 4) ?
+ sum+color[3][3] < 1020 : sum < 765;
+ } else
+ this.transparent=Materials[MaterialIndex].diffuse[3] < 1;
+ if(this.transparent) {
+ this.MaterialIndex=color ? -1-MaterialIndex : 1+MaterialIndex;
+ this.vertex=this.data.Vertex.bind(this.data);
+ } else {
+ this.MaterialIndex=MaterialIndex;
+ this.vertex=this.data.vertex.bind(this.data);
+ }
+ this.L2norm(this.controlpoints);
+ }
-class Light {
- constructor(type, lightColor, brightness, customParam) {
- this.type = type;
- this.lightColor = lightColor;
- this.brightness = brightness;
- this.customParam = customParam;
+// Render a Bezier patch via subdivision.
+ L2norm(p) {
+ let p0=p[0];
+ this.epsilon=0;
+ let n=p.length;
+ for(let i=1; i < n; ++i)
+ this.epsilon=Math.max(this.epsilon,
+ abs2([p[i][0]-p0[0],p[i][1]-p0[1],p[i][2]-p0[2]]));
+ this.epsilon *= Fuzz4;
+ }
+
+ processTriangle(p) {
+ let p0=p[0];
+ let p1=p[1];
+ let p2=p[2];
+ let n=unit(cross([p1[0]-p0[0],p1[1]-p0[1],p1[2]-p0[2]],
+ [p2[0]-p0[0],p2[1]-p0[1],p2[2]-p0[2]]));
+ if(!this.offscreen([p0,p1,p2])) {
+ if(this.color) {
+ this.data.indices.push(this.data.Vertex(p0,n,this.color[0]));
+ this.data.indices.push(this.data.Vertex(p1,n,this.color[1]));
+ this.data.indices.push(this.data.Vertex(p2,n,this.color[2]));
+ } else {
+ this.data.indices.push(this.vertex(p0,n));
+ this.data.indices.push(this.vertex(p1,n));
+ this.data.indices.push(this.vertex(p2,n));
+ }
+ this.append();
}
+ }
- setUniform(program, stringLoc, index) {
- var getLoc =
- param => gl.getUniformLocation(program, stringLoc + "[" + index + "]." + param);
+ processQuad(p) {
+ let p0=p[0];
+ let p1=p[1];
+ let p2=p[2];
+ let p3=p[3];
+ let n1=cross([p1[0]-p0[0],p1[1]-p0[1],p1[2]-p0[2]],
+ [p2[0]-p1[0],p2[1]-p1[1],p2[2]-p1[2]]);
+ let n2=cross([p2[0]-p3[0],p2[1]-p3[1],p2[2]-p3[2]],
+ [p3[0]-p0[0],p3[1]-p0[1],p3[2]-p0[2]]);
+ let n=unit([n1[0]+n2[0],n1[1]+n2[1],n1[2]+n2[2]]);
+ if(!this.offscreen([p0,p1,p2,p3])) {
+ let i0,i1,i2,i3;
+ if(this.color) {
+ i0=this.data.Vertex(p0,n,this.color[0]);
+ i1=this.data.Vertex(p1,n,this.color[1]);
+ i2=this.data.Vertex(p2,n,this.color[2]);
+ i3=this.data.Vertex(p3,n,this.color[3]);
+ } else {
+ i0=this.vertex(p0,n);
+ i1=this.vertex(p1,n);
+ i2=this.vertex(p2,n);
+ i3=this.vertex(p3,n);
+ }
+ this.data.indices.push(i0);
+ this.data.indices.push(i1);
+ this.data.indices.push(i2);
+
+ this.data.indices.push(i0);
+ this.data.indices.push(i2);
+ this.data.indices.push(i3);
+
+ this.append();
+ }
+ }
- gl.uniform1i(getLoc("type"), this.type);
- gl.uniform3fv(getLoc("color"), new Float32Array(this.lightColor));
- gl.uniform1f(getLoc("brightness"), this.brightness);
- gl.uniform4fv(getLoc("parameter"), new Float32Array(this.customParam));
+ process(p) {
+ if(p.length == 10) return this.process3(p);
+ if(p.length == 3) return this.processTriangle(p);
+ if(p.length == 4) return this.processQuad(p);
+
+ let p0=p[0];
+ let p3=p[3];
+ let p12=p[12];
+ let p15=p[15];
+
+ let n0=this.normal(p3,p[2],p[1],p0,p[4],p[8],p12);
+ if(iszero(n0)) {
+ n0=this.normal(p3,p[2],p[1],p0,p[13],p[14],p15);
+ if(iszero(n0)) n0=this.normal(p15,p[11],p[7],p3,p[4],p[8],p12);
}
-}
-function initGL(canvas) {
- try {
- gl = canvas.getContext("webgl2");
- gl.viewportWidth = canvas.width;
- gl.viewportHeight = canvas.height;
- } catch (e) {}
- if (!gl) {
- alert("Could not initialize WebGL");
+ let n1=this.normal(p0,p[4],p[8],p12,p[13],p[14],p15);
+ if(iszero(n1)) {
+ n1=this.normal(p0,p[4],p[8],p12,p[11],p[7],p3);
+ if(iszero(n1)) n1=this.normal(p3,p[2],p[1],p0,p[13],p[14],p15);
}
-}
-function getShader(gl, id) {
- var shaderScript = document.getElementById(id);
- if (!shaderScript) {
- return null;
+ let n2=this.normal(p12,p[13],p[14],p15,p[11],p[7],p3);
+ if(iszero(n2)) {
+ n2=this.normal(p12,p[13],p[14],p15,p[2],p[1],p0);
+ if(iszero(n2)) n2=this.normal(p0,p[4],p[8],p12,p[11],p[7],p3);
}
- var str = "";
- var k = shaderScript.firstChild;
- while (k) {
- if (k.nodeType == 3) {
- str += k.textContent;
- }
- k = k.nextSibling;
+
+ let n3=this.normal(p15,p[11],p[7],p3,p[2],p[1],p0);
+ if(iszero(n3)) {
+ n3=this.normal(p15,p[11],p[7],p3,p[4],p[8],p12);
+ if(iszero(n3)) n3=this.normal(p12,p[13],p[14],p15,p[2],p[1],p0);
}
- var shader;
- if (shaderScript.type == "x-shader/x-fragment") {
- shader = gl.createShader(gl.FRAGMENT_SHADER);
- } else if (shaderScript.type == "x-shader/x-vertex") {
- shader = gl.createShader(gl.VERTEX_SHADER);
+
+ if(this.color) {
+ let c0=this.color[0];
+ let c1=this.color[1];
+ let c2=this.color[2];
+ let c3=this.color[3];
+
+ let i0=this.data.Vertex(p0,n0,c0);
+ let i1=this.data.Vertex(p12,n1,c1);
+ let i2=this.data.Vertex(p15,n2,c2);
+ let i3=this.data.Vertex(p3,n3,c3);
+
+ this.Render(p,i0,i1,i2,i3,p0,p12,p15,p3,false,false,false,false,
+ c0,c1,c2,c3);
} else {
- return null;
+ let i0=this.vertex(p0,n0);
+ let i1=this.vertex(p12,n1);
+ let i2=this.vertex(p15,n2);
+ let i3=this.vertex(p3,n3);
+
+ this.Render(p,i0,i1,i2,i3,p0,p12,p15,p3,false,false,false,false);
}
- gl.shaderSource(shader, str);
- gl.compileShader(shader);
- if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
- alert(gl.getShaderInfoLog(shader));
- return null;
+ if(this.data.indices.length > 0) this.append();
+ }
+
+ append() {
+ if(this.transparent)
+ transparentData.append(this.data);
+ else if(this.color)
+ colorData.append(this.data);
+ else
+ materialData.append(this.data);
+ }
+
+ Render(p,I0,I1,I2,I3,P0,P1,P2,P3,flat0,flat1,flat2,flat3,C0,C1,C2,C3) {
+ if(this.Distance(p) < this.res2) { // Bezier patch is flat
+ if(!this.offscreen([P0,P1,P2])) {
+ this.data.indices.push(I0);
+ this.data.indices.push(I1);
+ this.data.indices.push(I2);
+ }
+ if(!this.offscreen([P0,P2,P3])) {
+ this.data.indices.push(I0);
+ this.data.indices.push(I2);
+ this.data.indices.push(I3);
+ }
+ } else {
+ // Approximate bounds by bounding box of control polyhedron.
+ if(this.offscreen(p)) return;
+
+ /* Control points are indexed as follows:
+
+ Coordinate
+ +-----
+ Index
+
+
+ 03 13 23 33
+ +-----+-----+-----+
+ |3 |7 |11 |15
+ | | | |
+ |02 |12 |22 |32
+ +-----+-----+-----+
+ |2 |6 |10 |14
+ | | | |
+ |01 |11 |21 |31
+ +-----+-----+-----+
+ |1 |5 |9 |13
+ | | | |
+ |00 |10 |20 |30
+ +-----+-----+-----+
+ 0 4 8 12
+
+
+ Subdivision:
+ P refers to a corner
+ m refers to a midpoint
+ s refers to a subpatch
+
+ m2
+ +--------+--------+
+ |P3 | P2|
+ | | |
+ | s3 | s2 |
+ | | |
+ | |m4 |
+ m3+--------+--------+m1
+ | | |
+ | | |
+ | s0 | s1 |
+ | | |
+ |P0 | P1|
+ +--------+--------+
+ m0
+ */
+
+ // Subdivide patch:
+
+ let p0=p[0];
+ let p3=p[3];
+ let p12=p[12];
+ let p15=p[15];
+
+ let c0=new Split3(p0,p[1],p[2],p3);
+ let c1=new Split3(p[4],p[5],p[6],p[7]);
+ let c2=new Split3(p[8],p[9],p[10],p[11]);
+ let c3=new Split3(p12,p[13],p[14],p15);
+
+ let c4=new Split3(p0,p[4],p[8],p12);
+ let c5=new Split3(c0.m0,c1.m0,c2.m0,c3.m0);
+ let c6=new Split3(c0.m3,c1.m3,c2.m3,c3.m3);
+ let c7=new Split3(c0.m5,c1.m5,c2.m5,c3.m5);
+ let c8=new Split3(c0.m4,c1.m4,c2.m4,c3.m4);
+ let c9=new Split3(c0.m2,c1.m2,c2.m2,c3.m2);
+ let c10=new Split3(p3,p[7],p[11],p15);
+
+ let s0=[p0,c0.m0,c0.m3,c0.m5,c4.m0,c5.m0,c6.m0,c7.m0,
+ c4.m3,c5.m3,c6.m3,c7.m3,c4.m5,c5.m5,c6.m5,c7.m5];
+ let s1=[c4.m5,c5.m5,c6.m5,c7.m5,c4.m4,c5.m4,c6.m4,c7.m4,
+ c4.m2,c5.m2,c6.m2,c7.m2,p12,c3.m0,c3.m3,c3.m5];
+ let s2=[c7.m5,c8.m5,c9.m5,c10.m5,c7.m4,c8.m4,c9.m4,c10.m4,
+ c7.m2,c8.m2,c9.m2,c10.m2,c3.m5,c3.m4,c3.m2,p15];
+ let s3=[c0.m5,c0.m4,c0.m2,p3,c7.m0,c8.m0,c9.m0,c10.m0,
+ c7.m3,c8.m3,c9.m3,c10.m3,c7.m5,c8.m5,c9.m5,c10.m5];
+
+ let m4=s0[15];
+
+ let n0=this.normal(s0[0],s0[4],s0[8],s0[12],s0[13],s0[14],s0[15]);
+ if(iszero(n0)) {
+ n0=this.normal(s0[0],s0[4],s0[8],s0[12],s0[11],s0[7],s0[3]);
+ if(iszero(n0))
+ n0=this.normal(s0[3],s0[2],s0[1],s0[0],s0[13],s0[14],s0[15]);
+ }
+
+ let n1=this.normal(s1[12],s1[13],s1[14],s1[15],s1[11],s1[7],s1[3]);
+ if(iszero(n1)) {
+ n1=this.normal(s1[12],s1[13],s1[14],s1[15],s1[2],s1[1],s1[0]);
+ if(iszero(n1))
+ n1=this.normal(s1[0],s1[4],s1[8],s1[12],s1[11],s1[7],s1[3]);
+ }
+
+ let n2=this.normal(s2[15],s2[11],s2[7],s2[3],s2[2],s2[1],s2[0]);
+ if(iszero(n2)) {
+ n2=this.normal(s2[15],s2[11],s2[7],s2[3],s2[4],s2[8],s2[12]);
+ if(iszero(n2))
+ n2=this.normal(s2[12],s2[13],s2[14],s2[15],s2[2],s2[1],s2[0]);
+ }
+
+ let n3=this.normal(s3[3],s3[2],s3[1],s3[0],s3[4],s3[8],s3[12]);
+ if(iszero(n3)) {
+ n3=this.normal(s3[3],s3[2],s3[1],s3[0],s3[13],s3[14],s3[15]);
+ if(iszero(n3))
+ n3=this.normal(s3[15],s3[11],s3[7],s3[3],s3[4],s3[8],s3[12]);
+ }
+
+ let n4=this.normal(s2[3],s2[2],s2[1],m4,s2[4],s2[8],s2[12]);
+
+ let e=this.Epsilon;
+
+ // A kludge to remove subdivision cracks, only applied the first time
+ // an edge is found to be flat before the rest of the subpatch is.
+ let m0=[0.5*(P0[0]+P1[0]),
+ 0.5*(P0[1]+P1[1]),
+ 0.5*(P0[2]+P1[2])];
+ if(!flat0) {
+ if((flat0=Straightness(p0,p[4],p[8],p12) < this.res2)) {
+ let r=unit(this.derivative(s1[0],s1[1],s1[2],s1[3]));
+ m0=[m0[0]-e*r[0],m0[1]-e*r[1],m0[2]-e*r[2]];
+ }
+ else m0=s0[12];
+ }
+
+ let m1=[0.5*(P1[0]+P2[0]),
+ 0.5*(P1[1]+P2[1]),
+ 0.5*(P1[2]+P2[2])];
+ if(!flat1) {
+ if((flat1=Straightness(p12,p[13],p[14],p15) < this.res2)) {
+ let r=unit(this.derivative(s2[12],s2[8],s2[4],s2[0]));
+ m1=[m1[0]-e*r[0],m1[1]-e*r[1],m1[2]-e*r[2]];
+ }
+ else m1=s1[15];
+ }
+
+ let m2=[0.5*(P2[0]+P3[0]),
+ 0.5*(P2[1]+P3[1]),
+ 0.5*(P2[2]+P3[2])];
+ if(!flat2) {
+ if((flat2=Straightness(p15,p[11],p[7],p3) < this.res2)) {
+ let r=unit(this.derivative(s3[15],s2[14],s2[13],s1[12]));
+ m2=[m2[0]-e*r[0],m2[1]-e*r[1],m2[2]-e*r[2]];
+ }
+ else m2=s2[3];
+ }
+
+ let m3=[0.5*(P3[0]+P0[0]),
+ 0.5*(P3[1]+P0[1]),
+ 0.5*(P3[2]+P0[2])];
+ if(!flat3) {
+ if((flat3=Straightness(p0,p[1],p[2],p3) < this.res2)) {
+ let r=unit(this.derivative(s0[3],s0[7],s0[11],s0[15]));
+ m3=[m3[0]-e*r[0],m3[1]-e*r[1],m3[2]-e*r[2]];
+ }
+ else m3=s3[0];
+ }
+
+ if(C0) {
+ let c0=Array(4);
+ let c1=Array(4);
+ let c2=Array(4);
+ let c3=Array(4);
+ let c4=Array(4);
+ for(let i=0; i < 4; ++i) {
+ c0[i]=0.5*(C0[i]+C1[i]);
+ c1[i]=0.5*(C1[i]+C2[i]);
+ c2[i]=0.5*(C2[i]+C3[i]);
+ c3[i]=0.5*(C3[i]+C0[i]);
+ c4[i]=0.5*(c0[i]+c2[i]);
+ }
+
+ let i0=this.data.Vertex(m0,n0,c0);
+ let i1=this.data.Vertex(m1,n1,c1);
+ let i2=this.data.Vertex(m2,n2,c2);
+ let i3=this.data.Vertex(m3,n3,c3);
+ let i4=this.data.Vertex(m4,n4,c4);
+
+ this.Render(s0,I0,i0,i4,i3,P0,m0,m4,m3,flat0,false,false,flat3,
+ C0,c0,c4,c3);
+ this.Render(s1,i0,I1,i1,i4,m0,P1,m1,m4,flat0,flat1,false,false,
+ c0,C1,c1,c4);
+ this.Render(s2,i4,i1,I2,i2,m4,m1,P2,m2,false,flat1,flat2,false,
+ c4,c1,C2,c2);
+ this.Render(s3,i3,i4,i2,I3,m3,m4,m2,P3,false,false,flat2,flat3,
+ c3,c4,c2,C3);
+ } else {
+ let i0=this.vertex(m0,n0);
+ let i1=this.vertex(m1,n1);
+ let i2=this.vertex(m2,n2);
+ let i3=this.vertex(m3,n3);
+ let i4=this.vertex(m4,n4);
+
+ this.Render(s0,I0,i0,i4,i3,P0,m0,m4,m3,flat0,false,false,flat3);
+ this.Render(s1,i0,I1,i1,i4,m0,P1,m1,m4,flat0,flat1,false,false);
+ this.Render(s2,i4,i1,I2,i2,m4,m1,P2,m2,false,flat1,flat2,false);
+ this.Render(s3,i3,i4,i2,I3,m3,m4,m2,P3,false,false,flat2,flat3);
+ }
}
- return shader;
-}
+ }
-function resetCamera() {
- cameraPos = vec3.fromValues(0, 0, 2);
- cameraLookAt = vec3.fromValues(0, 0, 0);
- cameraUp = vec3.fromValues(1, 0, 0);
- sceneSetup();
- redraw=true;
-}
+// Render a Bezier triangle via subdivision.
+ process3(p) {
+ this.Res2=BezierFactor*BezierFactor*this.res2;
-var shaderProgram;
+ let p0=p[0];
+ let p6=p[6];
+ let p9=p[9];
-function initShaders() {
- var fragmentShader = getShader(gl, "shader-fs");
- var vertexShader = getShader(gl, "shader-vs");
- shaderProgram = gl.createProgram();
- gl.attachShader(shaderProgram, vertexShader);
- gl.attachShader(shaderProgram, fragmentShader);
- gl.linkProgram(shaderProgram);
- if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
- alert("Could not initialize shaders");
+ let n0=this.normal(p9,p[5],p[2],p0,p[1],p[3],p6);
+ let n1=this.normal(p0,p[1],p[3],p6,p[7],p[8],p9);
+ let n2=this.normal(p6,p[7],p[8],p9,p[5],p[2],p0);
+
+ if(this.color) {
+ let c0=this.color[0];
+ let c1=this.color[1];
+ let c2=this.color[2];
+
+ let i0=this.data.Vertex(p0,n0,c0);
+ let i1=this.data.Vertex(p6,n1,c1);
+ let i2=this.data.Vertex(p9,n2,c2);
+
+ this.Render3(p,i0,i1,i2,p0,p6,p9,false,false,false,c0,c1,c2);
+
+ } else {
+ let i0=this.vertex(p0,n0);
+ let i1=this.vertex(p6,n1);
+ let i2=this.vertex(p9,n2);
+
+ this.Render3(p,i0,i1,i2,p0,p6,p9,false,false,false);
+ }
+ if(this.data.indices.length > 0) this.append();
+ }
+
+ Render3(p,I0,I1,I2,P0,P1,P2,flat0,flat1,flat2,C0,C1,C2) {
+ if(this.Distance3(p) < this.Res2) { // Bezier triangle is flat
+ if(!this.offscreen([P0,P1,P2])) {
+ this.data.indices.push(I0);
+ this.data.indices.push(I1);
+ this.data.indices.push(I2);
+ }
+ } else {
+ // Approximate bounds by bounding box of control polyhedron.
+ if(this.offscreen(p)) return;
+
+ /* Control points are indexed as follows:
+
+ Coordinate
+ Index
+
+ 030
+ 9
+ /\
+ / \
+ / \
+ / \
+ / \
+ 021 + + 120
+ 5 / \ 8
+ / \
+ / \
+ / \
+ / \
+ 012 + + + 210
+ 2 / 111 \ 7
+ / 4 \
+ / \
+ / \
+ / \
+ /__________________________________\
+ 003 102 201 300
+ 0 1 3 6
+
+
+ Subdivision:
+ P2
+ 030
+ /\
+ / \
+ / \
+ / \
+ / \
+ / up \
+ / \
+ / \
+ p1 /________________\ p0
+ /\ / \
+ / \ / \
+ / \ / \
+ / \ center / \
+ / \ / \
+ / \ / \
+ / left \ / right \
+ / \ / \
+ /________________V_________________\
+ 003 p2 300
+ P0 P1
+ */
+
+ // Subdivide triangle:
+
+ let l003=p[0];
+ let p102=p[1];
+ let p012=p[2];
+ let p201=p[3];
+ let p111=p[4];
+ let p021=p[5];
+ let r300=p[6];
+ let p210=p[7];
+ let p120=p[8];
+ let u030=p[9];
+
+ let u021=[0.5*(u030[0]+p021[0]),
+ 0.5*(u030[1]+p021[1]),
+ 0.5*(u030[2]+p021[2])];
+ let u120=[0.5*(u030[0]+p120[0]),
+ 0.5*(u030[1]+p120[1]),
+ 0.5*(u030[2]+p120[2])];
+
+ let p033=[0.5*(p021[0]+p012[0]),
+ 0.5*(p021[1]+p012[1]),
+ 0.5*(p021[2]+p012[2])];
+ let p231=[0.5*(p120[0]+p111[0]),
+ 0.5*(p120[1]+p111[1]),
+ 0.5*(p120[2]+p111[2])];
+ let p330=[0.5*(p120[0]+p210[0]),
+ 0.5*(p120[1]+p210[1]),
+ 0.5*(p120[2]+p210[2])];
+
+ let p123=[0.5*(p012[0]+p111[0]),
+ 0.5*(p012[1]+p111[1]),
+ 0.5*(p012[2]+p111[2])];
+
+ let l012=[0.5*(p012[0]+l003[0]),
+ 0.5*(p012[1]+l003[1]),
+ 0.5*(p012[2]+l003[2])];
+ let p312=[0.5*(p111[0]+p201[0]),
+ 0.5*(p111[1]+p201[1]),
+ 0.5*(p111[2]+p201[2])];
+ let r210=[0.5*(p210[0]+r300[0]),
+ 0.5*(p210[1]+r300[1]),
+ 0.5*(p210[2]+r300[2])];
+
+ let l102=[0.5*(l003[0]+p102[0]),
+ 0.5*(l003[1]+p102[1]),
+ 0.5*(l003[2]+p102[2])];
+ let p303=[0.5*(p102[0]+p201[0]),
+ 0.5*(p102[1]+p201[1]),
+ 0.5*(p102[2]+p201[2])];
+ let r201=[0.5*(p201[0]+r300[0]),
+ 0.5*(p201[1]+r300[1]),
+ 0.5*(p201[2]+r300[2])];
+
+ let u012=[0.5*(u021[0]+p033[0]),
+ 0.5*(u021[1]+p033[1]),
+ 0.5*(u021[2]+p033[2])];
+ let u210=[0.5*(u120[0]+p330[0]),
+ 0.5*(u120[1]+p330[1]),
+ 0.5*(u120[2]+p330[2])];
+ let l021=[0.5*(p033[0]+l012[0]),
+ 0.5*(p033[1]+l012[1]),
+ 0.5*(p033[2]+l012[2])];
+ let p4xx=[0.5*p231[0]+0.25*(p111[0]+p102[0]),
+ 0.5*p231[1]+0.25*(p111[1]+p102[1]),
+ 0.5*p231[2]+0.25*(p111[2]+p102[2])];
+ let r120=[0.5*(p330[0]+r210[0]),
+ 0.5*(p330[1]+r210[1]),
+ 0.5*(p330[2]+r210[2])];
+ let px4x=[0.5*p123[0]+0.25*(p111[0]+p210[0]),
+ 0.5*p123[1]+0.25*(p111[1]+p210[1]),
+ 0.5*p123[2]+0.25*(p111[2]+p210[2])];
+ let pxx4=[0.25*(p021[0]+p111[0])+0.5*p312[0],
+ 0.25*(p021[1]+p111[1])+0.5*p312[1],
+ 0.25*(p021[2]+p111[2])+0.5*p312[2]];
+ let l201=[0.5*(l102[0]+p303[0]),
+ 0.5*(l102[1]+p303[1]),
+ 0.5*(l102[2]+p303[2])];
+ let r102=[0.5*(p303[0]+r201[0]),
+ 0.5*(p303[1]+r201[1]),
+ 0.5*(p303[2]+r201[2])];
+
+ let l210=[0.5*(px4x[0]+l201[0]),
+ 0.5*(px4x[1]+l201[1]),
+ 0.5*(px4x[2]+l201[2])]; // =c120
+ let r012=[0.5*(px4x[0]+r102[0]),
+ 0.5*(px4x[1]+r102[1]),
+ 0.5*(px4x[2]+r102[2])]; // =c021
+ let l300=[0.5*(l201[0]+r102[0]),
+ 0.5*(l201[1]+r102[1]),
+ 0.5*(l201[2]+r102[2])]; // =r003=c030
+
+ let r021=[0.5*(pxx4[0]+r120[0]),
+ 0.5*(pxx4[1]+r120[1]),
+ 0.5*(pxx4[2]+r120[2])]; // =c012
+ let u201=[0.5*(u210[0]+pxx4[0]),
+ 0.5*(u210[1]+pxx4[1]),
+ 0.5*(u210[2]+pxx4[2])]; // =c102
+ let r030=[0.5*(u210[0]+r120[0]),
+ 0.5*(u210[1]+r120[1]),
+ 0.5*(u210[2]+r120[2])]; // =u300=c003
+
+ let u102=[0.5*(u012[0]+p4xx[0]),
+ 0.5*(u012[1]+p4xx[1]),
+ 0.5*(u012[2]+p4xx[2])]; // =c201
+ let l120=[0.5*(l021[0]+p4xx[0]),
+ 0.5*(l021[1]+p4xx[1]),
+ 0.5*(l021[2]+p4xx[2])]; // =c210
+ let l030=[0.5*(u012[0]+l021[0]),
+ 0.5*(u012[1]+l021[1]),
+ 0.5*(u012[2]+l021[2])]; // =u003=c300
+
+ let l111=[0.5*(p123[0]+l102[0]),
+ 0.5*(p123[1]+l102[1]),
+ 0.5*(p123[2]+l102[2])];
+ let r111=[0.5*(p312[0]+r210[0]),
+ 0.5*(p312[1]+r210[1]),
+ 0.5*(p312[2]+r210[2])];
+ let u111=[0.5*(u021[0]+p231[0]),
+ 0.5*(u021[1]+p231[1]),
+ 0.5*(u021[2]+p231[2])];
+ let c111=[0.25*(p033[0]+p330[0]+p303[0]+p111[0]),
+ 0.25*(p033[1]+p330[1]+p303[1]+p111[1]),
+ 0.25*(p033[2]+p330[2]+p303[2]+p111[2])];
+
+ let l=[l003,l102,l012,l201,l111,l021,l300,l210,l120,l030]; // left
+ let r=[l300,r102,r012,r201,r111,r021,r300,r210,r120,r030]; // right
+ let u=[l030,u102,u012,u201,u111,u021,r030,u210,u120,u030]; // up
+ let c=[r030,u201,r021,u102,c111,r012,l030,l120,l210,l300]; // center
+
+ let n0=this.normal(l300,r012,r021,r030,u201,u102,l030);
+ let n1=this.normal(r030,u201,u102,l030,l120,l210,l300);
+ let n2=this.normal(l030,l120,l210,l300,r012,r021,r030);
+
+ let e=this.Epsilon;
+
+ // A kludge to remove subdivision cracks, only applied the first time
+ // an edge is found to be flat before the rest of the subpatch is.
+
+ let m0=[0.5*(P1[0]+P2[0]),
+ 0.5*(P1[1]+P2[1]),
+ 0.5*(P1[2]+P2[2])];
+ if(!flat0) {
+ if((flat0=Straightness(r300,p210,p120,u030) < this.res2)) {
+ let r=unit(this.sumderivative(c[0],c[2],c[5],c[9],c[1],c[3],c[6]));
+ m0=[m0[0]-e*r[0],m0[1]-e*r[1],m0[2]-e*r[2]];
+ }
+ else m0=r030;
+ }
+
+
+ let m1=[0.5*(P2[0]+P0[0]),
+ 0.5*(P2[1]+P0[1]),
+ 0.5*(P2[2]+P0[2])];
+ if(!flat1) {
+ if((flat1=Straightness(l003,p012,p021,u030) < this.res2)) {
+ let r=unit(this.sumderivative(c[6],c[3],c[1],c[0],c[7],c[8],c[9]));
+ m1=[m1[0]-e*r[0],m1[1]-e*r[1],m1[2]-e*r[2]];
+ }
+ else m1=l030;
+ }
+
+ let m2=[0.5*(P0[0]+P1[0]),
+ 0.5*(P0[1]+P1[1]),
+ 0.5*(P0[2]+P1[2])];
+ if(!flat2) {
+ if((flat2=Straightness(l003,p102,p201,r300) < this.res2)) {
+ let r=unit(this.sumderivative(c[9],c[8],c[7],c[6],c[5],c[2],c[0]));
+ m2=[m2[0]-e*r[0],m2[1]-e*r[1],m2[2]-e*r[2]];
+ }
+ else m2=l300;
+ }
+
+ if(C0) {
+ let c0=Array(4);
+ let c1=Array(4);
+ let c2=Array(4);
+ for(let i=0; i < 4; ++i) {
+ c0[i]=0.5*(C1[i]+C2[i]);
+ c1[i]=0.5*(C2[i]+C0[i]);
+ c2[i]=0.5*(C0[i]+C1[i]);
+ }
+
+ let i0=this.data.Vertex(m0,n0,c0);
+ let i1=this.data.Vertex(m1,n1,c1);
+ let i2=this.data.Vertex(m2,n2,c2);
+
+ this.Render3(l,I0,i2,i1,P0,m2,m1,false,flat1,flat2,C0,c2,c1);
+ this.Render3(r,i2,I1,i0,m2,P1,m0,flat0,false,flat2,c2,C1,c0);
+ this.Render3(u,i1,i0,I2,m1,m0,P2,flat0,flat1,false,c1,c0,C2);
+ this.Render3(c,i0,i1,i2,m0,m1,m2,false,false,false,c0,c1,c2);
+ } else {
+ let i0=this.vertex(m0,n0);
+ let i1=this.vertex(m1,n1);
+ let i2=this.vertex(m2,n2);
+
+ this.Render3(l,I0,i2,i1,P0,m2,m1,false,flat1,flat2);
+ this.Render3(r,i2,I1,i0,m2,P1,m0,flat0,false,flat2);
+ this.Render3(u,i1,i0,I2,m1,m0,P2,flat0,flat1,false);
+ this.Render3(c,i0,i1,i2,m0,m1,m2,false,false,false);
+ }
}
- gl.useProgram(shaderProgram);
+ }
- shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
- gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
- shaderProgram.vertexColorAttribute = gl.getAttribLocation(shaderProgram, "aVertexColor");
- gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);
- shaderProgram.vertexNormalAttribute = gl.getAttribLocation(shaderProgram, "aVertexNormal");
- gl.enableVertexAttribArray(shaderProgram.vertexNormalAttribute);
+ // Check the flatness of a Bezier patch
+ Distance(p) {
+ let p0=p[0];
+ let p3=p[3];
+ let p12=p[12];
+ let p15=p[15];
- shaderProgram.vertexMaterialIndexAttribute = gl.getAttribLocation(shaderProgram, "aVertexMaterialIndex");
- gl.enableVertexAttribArray(shaderProgram.vertexMaterialIndexAttribute);
+ // Check the flatness of a patch.
+ let d=Distance2(p15,p0,this.normal(p3,p[2],p[1],p0,p[4],p[8],p12));
+
+ // Determine how straight the edges are.
+ d=Math.max(d,Straightness(p0,p[1],p[2],p3));
+ d=Math.max(d,Straightness(p0,p[4],p[8],p12));
+ d=Math.max(d,Straightness(p3,p[7],p[11],p15));
+ d=Math.max(d,Straightness(p12,p[13],p[14],p15));
+ // Determine how straight the interior control curves are.
+ d=Math.max(d,Straightness(p[4],p[5],p[6],p[7]));
+ d=Math.max(d,Straightness(p[8],p[9],p[10],p[11]));
+ d=Math.max(d,Straightness(p[1],p[5],p[9],p[13]));
+ return Math.max(d,Straightness(p[2],p[6],p[10],p[14]));
+ }
- shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
- shaderProgram.mMatrixUniform = gl.getUniformLocation(shaderProgram, "uMMatrix");
- shaderProgram.vMatrixUniform = gl.getUniformLocation(shaderProgram, "uVMatrix");
- shaderProgram.nlightsUniform = gl.getUniformLocation(shaderProgram, "unLights");
- shaderProgram.useColorUniform = gl.getUniformLocation(shaderProgram, "useColor");
+ // Check the flatness of a Bezier triangle
+ Distance3(p) {
+ let p0=p[0];
+ let p4=p[4];
+ let p6=p[6];
+ let p9=p[9];
+
+ // Check how far the internal point is from the centroid of the vertices.
+ let d=abs2([(p0[0]+p6[0]+p9[0])*third-p4[0],
+ (p0[1]+p6[1]+p9[1])*third-p4[1],
+ (p0[2]+p6[2]+p9[2])*third-p4[2]]);
+
+ // Determine how straight the edges are.
+ d=Math.max(d,Straightness(p0,p[1],p[3],p6));
+ d=Math.max(d,Straightness(p0,p[2],p[5],p9));
+ return Math.max(d,Straightness(p6,p[7],p[8],p9));
+ }
+
+ derivative(p0,p1,p2,p3) {
+ let lp=[p1[0]-p0[0],p1[1]-p0[1],p1[2]-p0[2]];
+ if(abs2(lp) > this.epsilon)
+ return lp;
+
+ let lpp=bezierPP(p0,p1,p2);
+ if(abs2(lpp) > this.epsilon)
+ return lpp;
+ return bezierPPP(p0,p1,p2,p3);
+ }
+
+ sumderivative(p0,p1,p2,p3,p4,p5,p6) {
+ let d0=this.derivative(p0,p1,p2,p3);
+ let d1=this.derivative(p0,p4,p5,p6);
+ return [d0[0]+d1[0],d0[1]+d1[1],d0[2]+d1[2]];
+ }
+
+ normal(left3,left2,left1,middle,right1,right2,right3) {
+ let ux=right1[0]-middle[0];
+ let uy=right1[1]-middle[1];
+ let uz=right1[2]-middle[2];
+ let vx=left1[0]-middle[0];
+ let vy=left1[1]-middle[1];
+ let vz=left1[2]-middle[2];
+ let n=[uy*vz-uz*vy,
+ uz*vx-ux*vz,
+ ux*vy-uy*vx];
+ if(abs2(n) > this.epsilon)
+ return unit(n);
+
+ let lp=[vx,vy,vz];
+ let rp=[ux,uy,uz];
+ let lpp=bezierPP(middle,left1,left2);
+ let rpp=bezierPP(middle,right1,right2);
+ let a=cross(rpp,lp);
+ let b=cross(rp,lpp);
+ n=[a[0]+b[0],
+ a[1]+b[1],
+ a[2]+b[2]];
+ if(abs2(n) > this.epsilon)
+ return unit(n);
+
+ let lppp=bezierPPP(middle,left1,left2,left3);
+ let rppp=bezierPPP(middle,right1,right2,right3);
+ a=cross(rpp,lpp);
+ b=cross(rp,lppp);
+ let c=cross(rppp,lp);
+ let d=cross(rppp,lpp);
+ let e=cross(rpp,lppp);
+ let f=cross(rppp,lppp);
+ return unit([9*a[0]+3*(b[0]+c[0]+d[0]+e[0])+f[0],
+ 9*a[1]+3*(b[1]+c[1]+d[1]+e[1])+f[1],
+ 9*a[2]+3*(b[2]+c[2]+d[2]+e[2])+f[2]]);
+ }
}
+class BezierCurve extends Geometry {
+ constructor(controlpoints,CenterIndex,MaterialIndex,Min,Max) {
+ super();
+ this.controlpoints=controlpoints;
+ this.Min=Min;
+ this.Max=Max;
+ this.CenterIndex=CenterIndex;
+ this.MaterialIndex=MaterialIndex;
+ }
-// math aux functions
-function degToRad(degrees) {
- return degrees * Math.PI / 180;
-}
-function unit(v) {
- var norm = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
- norm = (norm != 0) ? 1 / norm : 1;
- return [v[0] * norm, v[1] * norm, v[2] * norm];
-}
+ processLine(p) {
+ let p0=p[0];
+ let p1=p[1];
+ if(!this.offscreen([p0,p1])) {
+ this.data.indices.push(this.data.vertex1(p0));
+ this.data.indices.push(this.data.vertex1(p1));
+ this.append();
+ }
+ }
-function abs2(v) {
-return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
+ process(p) {
+ if(p.length == 2) return this.processLine(p);
+
+ let i0=this.data.vertex1(p[0]);
+ let i3=this.data.vertex1(p[3]);
+
+ this.Render(p,i0,i3);
+ if(this.data.indices.length > 0) this.append();
+ }
+
+ append() {
+ material1Data.append(this.data);
+ }
+
+ Render(p,I0,I1) {
+ let p0=p[0];
+ let p1=p[1];
+ let p2=p[2];
+ let p3=p[3];
+
+ if(Straightness(p0,p1,p2,p3) < this.res2) { // Segment is flat
+ if(!this.offscreen([p0,p3])) {
+ this.data.indices.push(I0);
+ this.data.indices.push(I1);
+ }
+ } else { // Segment is not flat
+ if(this.offscreen(p)) return;
+
+ let m0=[0.5*(p0[0]+p1[0]),0.5*(p0[1]+p1[1]),0.5*(p0[2]+p1[2])];
+ let m1=[0.5*(p1[0]+p2[0]),0.5*(p1[1]+p2[1]),0.5*(p1[2]+p2[2])];
+ let m2=[0.5*(p2[0]+p3[0]),0.5*(p2[1]+p3[1]),0.5*(p2[2]+p3[2])];
+ let m3=[0.5*(m0[0]+m1[0]),0.5*(m0[1]+m1[1]),0.5*(m0[2]+m1[2])];
+ let m4=[0.5*(m1[0]+m2[0]),0.5*(m1[1]+m2[1]),0.5*(m1[2]+m2[2])];
+ let m5=[0.5*(m3[0]+m4[0]),0.5*(m3[1]+m4[1]),0.5*(m3[2]+m4[2])];
+
+ let s0=[p0,m0,m3,m5];
+ let s1=[m5,m4,m2,p3];
+
+ let i0=this.data.vertex1(m5);
+
+ this.Render(s0,I0,i0);
+ this.Render(s1,i0,I1);
+ }
+ }
}
-function dot(u, v) {
-return u[0] * v[0] + u[1] * v[1] + u[2] * v[2];
+class Pixel extends Geometry {
+ constructor(controlpoint,width,MaterialIndex,Min,Max) {
+ super();
+ this.controlpoint=controlpoint;
+ this.width=width;
+ this.CenterIndex=0;
+ this.MaterialIndex=MaterialIndex;
+ this.Min=Min;
+ this.Max=Max;
+ }
+
+ process(p) {
+ this.data.indices.push(this.data.vertex0(this.controlpoint,this.width));
+ this.append();
+ }
+
+ append() {
+ material0Data.append(this.data);
+ }
}
-function cross(u, v) {
-return [u[1] * v[2] - u[2] * v[1],
- u[2] * v[0] - u[0] * v[2],
- u[0] * v[1] - u[1] * v[0]
-];
+class Triangles extends Geometry {
+ constructor(MaterialIndex,Min,Max) {
+ super();
+ this.CenterIndex=0;
+ this.MaterialIndex=MaterialIndex;
+ this.Min=Min;
+ this.Max=Max;
+ this.Positions=Positions;
+ this.Normals=Normals;
+ this.Colors=Colors;
+ this.Indices=Indices;
+ Positions=[];
+ Normals=[];
+ Colors=[];
+ Indices=[];
+ this.transparent=Materials[MaterialIndex].diffuse[3] < 1;
+ }
+
+ process(p) {
+ for(let i=0, n=this.Indices.length; i < n; ++i) {
+ let index=this.Indices[i];
+ let PI=index[0];
+ let P0=this.Positions[PI[0]];
+ let P1=this.Positions[PI[1]];
+ let P2=this.Positions[PI[2]];
+ if(!this.offscreen([P0,P1,P2])) {
+ let NI=index.length > 1 ? index[1] : PI;
+ if(!NI || NI.length == 0) NI=PI;
+ if(this.Colors.length > 0) {
+ let CI=index.length > 2 ? index[2] : PI;
+ if(!CI || CI.length == 0) CI=PI;
+ let C0=this.Colors[CI[0]];
+ let C1=this.Colors[CI[1]];
+ let C2=this.Colors[CI[2]];
+ this.transparent |= C0[3]+C1[3]+C2[3] < 765;
+ materialIndex=-1-this.MaterialIndex;
+ this.data.iVertex(PI[0],P0,this.Normals[NI[0]],C0);
+ this.data.iVertex(PI[1],P1,this.Normals[NI[1]],C1);
+ this.data.iVertex(PI[2],P2,this.Normals[NI[2]],C2);
+ } else {
+ materialIndex=1+this.MaterialIndex;
+ this.data.iVertex(PI[0],P0,this.Normals[NI[0]]);
+ this.data.iVertex(PI[1],P1,this.Normals[NI[1]]);
+ this.data.iVertex(PI[2],P2,this.Normals[NI[2]]);
+ }
+ }
+ }
+ this.data.nvertices=this.Positions.length;
+ if(this.data.indices.length > 0) this.append();
+ }
+
+ append() {
+ if(this.transparent)
+ transparentData.append(this.data);
+ else
+ triangleData.append(this.data);
+ }
}
-// return the perpendicular distance squared of a point z from the plane
-// through u with unit normal n.
-function Distance2(z, u, n) {
- var d = dot([z[0] - u[0], z[1] - u[1], z[2] - u[2]], n);
- return d * d;
+
+function home()
+{
+ mat4.identity(rotMat);
+ initProjection();
+ setProjection();
+ redraw=true;
}
-var vMatrix = mat4.create();
-var mMatrix = mat4.create();
-var pMatrix = mat4.create();
+function initShader(options=[])
+{
+ let fragmentShader=getShader(gl,"fragment",options);
+ let vertexShader=getShader(gl,"vertex",options);
+ let shader=gl.createProgram();
+
+ gl.attachShader(shader,vertexShader);
+ gl.attachShader(shader,fragmentShader);
+ gl.linkProgram(shader);
+ if (!gl.getProgramParameter(shader,gl.LINK_STATUS)) {
+ alert("Could not initialize shaders");
+ }
-var headlamp = new Light(
- type = enumDirectionalLight,
- lightColor = [1, 0.87, 0.745],
- brightness = 1,
- customParam = [0, 0, 1, 0]
-);
+ return shader;
+}
-function setUniforms() {
- gl.uniformMatrix4fv(shaderProgram.vMatrixUniform, false, vMatrix);
- gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);
- gl.uniformMatrix4fv(shaderProgram.mMatrixUniform, false, mMatrix);
+class Split3 {
+ constructor(z0,c0,c1,z1) {
+ this.m0=[0.5*(z0[0]+c0[0]),0.5*(z0[1]+c0[1]),0.5*(z0[2]+c0[2])];
+ let m1_0=0.5*(c0[0]+c1[0]);
+ let m1_1=0.5*(c0[1]+c1[1]);
+ let m1_2=0.5*(c0[2]+c1[2]);
+ this.m2=[0.5*(c1[0]+z1[0]),0.5*(c1[1]+z1[1]),0.5*(c1[2]+z1[2])];
+ this.m3=[0.5*(this.m0[0]+m1_0),0.5*(this.m0[1]+m1_1),
+ 0.5*(this.m0[2]+m1_2)];
+ this.m4=[0.5*(m1_0+this.m2[0]),0.5*(m1_1+this.m2[1]),
+ 0.5*(m1_2+this.m2[2])];
+ this.m5=[0.5*(this.m3[0]+this.m4[0]),0.5*(this.m3[1]+this.m4[1]),
+ 0.5*(this.m3[2]+this.m4[2])];
+ }
+}
- objMaterial.setUniform(shaderProgram, "objMaterial", 0);
+function iszero(v)
+{
+ return v[0] == 0 && v[1] == 0 && v[2] == 0;
+}
- // for now, if we simulate headlamp. Can also specify custom lights later on...
- headlamp.setUniform(shaderProgram, "objLights", 0);
- gl.uniform1i(shaderProgram.nlightsUniform, 1);
- gl.uniform1i(shaderProgram.useColorUniform, 0);
+function unit(v)
+{
+ let norm=1/(Math.sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]) || 1);
+ return [v[0]*norm,v[1]*norm,v[2]*norm];
+}
+function abs2(v)
+{
+ return v[0]*v[0]+v[1]*v[1]+v[2]*v[2];
}
-var VertexBuffer;
-var ColorBuffer;
-var NormalBuffer;
+function dot(u,v)
+{
+ return u[0]*v[0]+u[1]*v[1]+u[2]*v[2];
+}
-// base buffer arrays
-var vertices = new Array();
-var colors = new Array();
-var normals = new Array();
-var indices = new Array();
-var materials = new Array();
+function cross(u,v)
+{
+ return [u[1]*v[2]-u[2]*v[1],
+ u[2]*v[0]-u[0]*v[2],
+ u[0]*v[1]-u[1]*v[0]];
+}
-// no. of verts.
-var nvertices = 0;
+// Return one-sixth of the second derivative of the Bezier curve defined
+// by a,b,c,d at 0.
+function bezierPP(a,b,c)
+{
+ return [a[0]+c[0]-2*b[0],
+ a[1]+c[1]-2*b[1],
+ a[2]+c[2]-2*b[2]];
+}
-var mMatrixStack = [];
-var pMatrix = mat4.create();
-var viewMatrix = mat4.create();
-var localRotation = mat4.create();
+// Return one-third of the third derivative of the Bezier curve defined by
+// a,b,c,d at 0.
+function bezierPPP(a,b,c,d)
+{
+ return [d[0]-a[0]+3*(b[0]-c[0]),
+ d[1]-a[1]+3*(b[1]-c[1]),
+ d[2]-a[2]+3*(b[2]-c[2])];
+}
-function mvPushMatrix() {
- var copy = mat4.create();
- mat4.set(mMatrix, copy);
- mMatrixStack.push(copy);
+/**
+ * Return the maximum distance squared of points c0 and c1 from
+ * the respective internal control points of z0--z1.
+*/
+function Straightness(z0,c0,c1,z1)
+{
+ let v=[third*(z1[0]-z0[0]),third*(z1[1]-z0[1]),third*(z1[2]-z0[2])];
+ return Math.max(abs2([c0[0]-v[0]-z0[0],c0[1]-v[1]-z0[1],c0[2]-v[2]-z0[2]]),
+ abs2([z1[0]-v[0]-c1[0],z1[1]-v[1]-c1[1],z1[2]-v[2]-c1[2]]));
}
-function mvPopMatrix() {
- if (mMatrixStack.length == 0) {
- throw "Invalid popMatrix!";
- }
- mMatrix = mMatrixStack.pop();
+/**
+ * Return the perpendicular distance squared of a point z from the plane
+ * through u with unit normal n.
+ */
+function Distance2(z,u,n)
+{
+ let d=dot([z[0]-u[0],z[1]-u[1],z[2]-u[2]],n);
+ return d*d;
}
-var redraw = true;
-var mouseDownOrTouchActive = false;
-var lastMouseX = null;
-var lastMouseY = null;
-var touchID = null;
+// Return the vertices of the box containing 3d points m and M.
+function corners(m,M)
+{
+ return [m,[m[0],m[1],M[2]],[m[0],M[1],m[2]],[m[0],M[1],M[2]],
+ [M[0],m[1],m[2]],[M[0],m[1],M[2]],[M[0],M[1],m[2]],M];
+}
+/**
+ * Perform a change of basis
+ * @param {*} out Out Matrix
+ * @param {*} mat Matrix
+ *
+ * Compute the matrix (translMatrix) * mat * (translMatrix)^{-1}
+ */
+
+function COBTarget(out,mat)
+{
+ mat4.fromTranslation(translMat,[center.x,center.y,center.z])
+ mat4.invert(cjMatInv,translMat);
+ mat4.multiply(out,mat,cjMatInv);
+ mat4.multiply(out,translMat,out);
+}
-var center = [0, 0, 1];
-var centerInv = [0, 0, -1];
+function setUniforms(shader)
+{
+ let pixel=shader == pixelShader;
-var rotationMatLocal = mat4.create();
-var rotationMatrix = mat4.create();
-mat4.identity(rotationMatrix);
+ gl.useProgram(shader);
-function handleMouseDown(event) {
- mouseDownOrTouchActive = true;
- lastMouseX = event.clientX;
- lastMouseY = event.clientY;
-}
+ shader.vertexPositionAttribute=
+ gl.getAttribLocation(shader,"position");
+ gl.enableVertexAttribArray(shader.vertexPositionAttribute);
-function handleTouchStart(evt) {
- evt.preventDefault();
- var touches = evt.targetTouches;
+ if(pixel) {
+ shader.vertexWidthAttribute=
+ gl.getAttribLocation(shader,"width");
+ gl.enableVertexAttribArray(shader.vertexWidthAttribute);
+ }
- if (touches.length == 1 && !mouseDownOrTouchActive) {
- touchId = touches[0].identifier;
- lastMouseX = touches[0].pageX,
- lastMouseY = touches[0].pageY;
+ if(shader != noNormalShader && !pixel) {
+ shader.vertexNormalAttribute=
+ gl.getAttribLocation(shader,"normal");
+ gl.enableVertexAttribArray(shader.vertexNormalAttribute);
}
-}
-function handleMouseUpOrTouchEnd(event) {
- mouseDownOrTouchActive = false;
-}
+ shader.vertexMaterialAttribute=
+ gl.getAttribLocation(shader,"materialIndex");
+ gl.enableVertexAttribArray(shader.vertexMaterialAttribute);
-function processDrag(newX, newY, pan = false) {
- let lastX = (lastMouseX - 400) / 400;
- let lastY = (lastMouseY - 400) / 400;
+ shader.projViewMatUniform=gl.getUniformLocation(shader,"projViewMat");
+ shader.viewMatUniform=gl.getUniformLocation(shader,"viewMat");
+ shader.normMatUniform=gl.getUniformLocation(shader,"normMat");
- let rawX = (newX - 400) / 400;
- let rawY = (newY - 400) / 400;
+ if(shader == colorShader || shader == transparentShader) {
+ shader.vertexColorAttribute=
+ gl.getAttribLocation(shader,"color");
+ gl.enableVertexAttribArray(shader.vertexColorAttribute);
+ }
- let viewmatInv = mat4.create();
- mat4.invert(viewmatInv, vMatrix);
+ for(let i=0; i < Materials.length; ++i)
+ Materials[i].setUniform(shader,"Materials",i);
- let tmpCameraOffset = vec3.create();
- vec3.subtract(tmpCameraOffset, cameraPos, cameraLookAt);
+ for(let i=0; i < Lights.length; ++i)
+ Lights[i].setUniform(shader,"Lights",i);
- if (!pan) {
- let [angle, axis] = arcballLib.arcball([lastX, -lastY], [rawX, -rawY]);
+ gl.uniformMatrix4fv(shader.projViewMatUniform,false,projViewMat);
+ gl.uniformMatrix4fv(shader.viewMatUniform,false,viewMat);
+ gl.uniformMatrix3fv(shader.normMatUniform,false,normMat);
+}
- if (angle == NaN || axis == NaN) {
- console.error("Angle or axis NaN!");
- return;
- }
+function handleMouseDown(event)
+{
+ mouseDownOrTouchActive=true;
+ lastMouseX=event.clientX;
+ lastMouseY=event.clientY;
+}
- let depthVec = vec3.clone(cameraLookAt);
- vec3.transformMat4(depthVec, depthVec, vMatrix);
- //vec3.transformMat4(depthVec, depthVec, pMatrix);
- vec3.add(axis, axis, depthVec);
+let pinch=false;
+let pinchStart;
- // let projMatInv=mat4.create();
- // mat4.invert(projMatInv, pMatrix);
+function pinchDistance(touches)
+{
+ return Math.hypot(
+ touches[0].pageX-touches[1].pageX,
+ touches[0].pageY-touches[1].pageY);
+}
- //vec3.transformMat4(axis,axis,projMatInv);
- vec3.transformMat4(axis, axis, viewmatInv);
- let tmpRotMat = mat4.create();
+let touchStartTime;
- mat4.fromRotation(tmpRotMat, -angle, axis);
+function handleTouchStart(evt)
+{
+ evt.preventDefault();
+ let touches=evt.targetTouches;
+ swipe=rotate=pinch=false;
+ if(zooming) return;
+
+ if(touches.length == 1 && !mouseDownOrTouchActive) {
+ touchStartTime=new Date().getTime();
+ touchId=touches[0].identifier;
+ lastMouseX=touches[0].pageX,
+ lastMouseY=touches[0].pageY;
+ }
+
+ if(touches.length == 2 && !mouseDownOrTouchActive) {
+ touchId=touches[0].identifier;
+ pinchStart=pinchDistance(touches);
+ pinch=true;
+ }
+}
- vec3.transformMat4(tmpCameraOffset, tmpCameraOffset, tmpRotMat);
- vec3.transformMat4(cameraUp, cameraUp, tmpRotMat);
+function handleMouseUpOrTouchEnd(event)
+{
+ mouseDownOrTouchActive=false;
+}
+
+function rotateScene(lastX,lastY,rawX,rawY,factor)
+{
+ if(lastX == rawX && lastY == rawY) return;
+ let [angle,axis]=arcball([lastX,-lastY],[rawX,-rawY]);
- vec3.add(cameraPos, tmpCameraOffset, cameraLookAt);
+ mat4.fromRotation(rotMats,2*factor*ArcballFactor*angle/lastzoom,axis);
+ mat4.multiply(rotMat,rotMats,rotMat);
+}
+function shiftScene(lastX,lastY,rawX,rawY)
+{
+ let zoominv=1/lastzoom;
+ shift.x += (rawX-lastX)*zoominv*halfCanvasWidth;
+ shift.y -= (rawY-lastY)*zoominv*halfCanvasHeight;
+}
+function panScene(lastX,lastY,rawX,rawY)
+{
+ if (orthographic) {
+ shiftScene(lastX,lastY,rawX,rawY);
} else {
- let xTransl = (rawX - lastX);
- let yTransl = (rawY - lastY);
- let normCameraUp = vec3.create();
- vec3.normalize(normCameraUp, cameraUp);
- vec3.scale(normCameraUp, normCameraUp, yTransl);
+ center.x += (rawX-lastX)*(viewParam.xmax-viewParam.xmin);
+ center.y -= (rawY-lastY)*(viewParam.ymax-viewParam.ymin);
+ }
+}
- let normCameraLeft = vec3.create();
- vec3.cross(normCameraLeft, tmpCameraOffset, cameraUp);
- vec3.normalize(normCameraLeft, normCameraLeft);
- vec3.scale(normCameraLeft, normCameraLeft, xTransl);
+function updateViewMatrix()
+{
+ COBTarget(viewMat,rotMat);
+ mat4.translate(viewMat,viewMat,[center.x,center.y,0]);
+ mat3.fromMat4(viewMat3,viewMat);
+ mat3.invert(normMat,viewMat3);
+ mat4.multiply(projViewMat,projMat,viewMat);
+}
+
+function capzoom()
+{
+ let maxzoom=Math.sqrt(Number.MAX_VALUE);
+ let minzoom=1/maxzoom;
+ if(Zoom <= minzoom) Zoom=minzoom;
+ if(Zoom >= maxzoom) Zoom=maxzoom;
+
+ if(Zoom != lastzoom) remesh=true;
+ lastzoom=Zoom;
+}
- let cameraShift = vec3.create();
- vec3.add(cameraShift, normCameraUp, normCameraLeft);
+function zoomImage(diff)
+{
+ let stepPower=zoomStep*halfCanvasHeight*diff;
+ const limit=Math.log(0.1*Number.MAX_VALUE)/Math.log(zoomFactor);
- vec3.add(cameraLookAt, cameraLookAt, cameraShift);
- vec3.add(cameraPos, cameraPos, cameraShift);
+ if(Math.abs(stepPower) < limit) {
+ Zoom *= zoomFactor**stepPower;
+ capzoom();
}
+}
- lastMouseX = newX;
- lastMouseY = newY;
- redraw = true;
+function normMouse(v)
+{
+ let v0=v[0];
+ let v1=v[1];
+ let norm=Math.hypot(v0,v1);
+ if(norm > 1) {
+ denom=1/norm;
+ v0 *= denom;
+ v1 *= denom;
+ }
+ return [v0,v1,Math.sqrt(Math.max(1-v1*v1-v0*v0,0))];
}
-function handleKey(key) {
- var keycode = key.key;
- var rotate = true;
- var axis = [0, 0, 1];
- switch (keycode) {
- case "w":
- axis = [-1, 0, 0];
- break;
- case "d":
- axis = [0, 1, 0];
+function arcball(oldmouse,newmouse)
+{
+ let oldMouse=normMouse(oldmouse);
+ let newMouse=normMouse(newmouse);
+ let Dot=dot(oldMouse,newMouse);
+ if(Dot > 1) Dot=1;
+ else if(Dot < -1) Dot=-1;
+ return [Math.acos(Dot),unit(cross(oldMouse,newMouse))]
+}
+
+/**
+ * Mouse Drag Zoom
+ * @param {*} lastX unused
+ * @param {*} lastY
+ * @param {*} rawX unused
+ * @param {*} rawY
+ */
+function zoomScene(lastX,lastY,rawX,rawY)
+{
+ zoomImage(lastY-rawY);
+}
+
+// mode:
+const DRAGMODE_ROTATE=1;
+const DRAGMODE_SHIFT=2;
+const DRAGMODE_ZOOM=3;
+const DRAGMODE_PAN=4
+function processDrag(newX,newY,mode,factor=1)
+{
+ let dragFunc;
+ switch (mode) {
+ case DRAGMODE_ROTATE:
+ dragFunc=rotateScene;
break;
- case "a":
- axis = [0, -1, 0];
+ case DRAGMODE_SHIFT:
+ dragFunc=shiftScene;
break;
- case "s":
- axis = [1, 0, 0];
+ case DRAGMODE_ZOOM:
+ dragFunc=zoomScene;
break;
- case "h":
- resetCamera();
+ case DRAGMODE_PAN:
+ dragFunc=panScene;
break;
default:
- rotate = false;
+ dragFunc=(_a,_b,_c,_d) => {};
break;
}
- if (rotate) {
- mat4.rotate(rotationMatrix, rotationMatrix, 0.1, axis);
- redraw = true;
- }
-
-}
-
-function handleMouseWheel(event) {
- let zoomFactor = event.deltaY / 50;
-
- // console.log(zoomFactor);
+ let lastX=(lastMouseX-halfCanvasWidth)/halfCanvasWidth;
+ let lastY=(lastMouseY-halfCanvasHeight)/halfCanvasHeight;
+ let rawX=(newX-halfCanvasWidth)/halfCanvasWidth;
+ let rawY=(newY-halfCanvasHeight)/halfCanvasHeight;
- let cameraShift = vec3.create();
- vec3.subtract(cameraShift, cameraPos, cameraLookAt);
+ dragFunc(lastX,lastY,rawX,rawY,factor);
- let cameraDir = vec3.create();
- vec3.normalize(cameraDir, cameraShift);
- vec3.scale(cameraDir, cameraDir, zoomFactor);
+ lastMouseX=newX;
+ lastMouseY=newY;
- let newCameraShift = vec3.create();
- vec3.add(newCameraShift, cameraShift, cameraDir);
-
- // not go beyond the bounds
- if (vec3.length(newCameraShift) < 0.01 && zoomFactor < 0) {
+ setProjection();
+ redraw=true;
+}
- } else if (vec3.length(newCameraShift) > 100 && zoomFactor > 0) {
+function handleKey(event)
+{
+ let keycode=event.key;
+ let axis=[];
+ switch(keycode) {
+ case 'x':
+ axis=[1,0,0];
+ break;
+ case 'y':
+ axis=[0,1,0];
+ break;
+ case 'z':
+ axis=[0,0,1];
+ break;
+ case 'h':
+ home();
+ break;
+ case '+':
+ case '=':
+ case '>':
+ expand();
+ break;
+ case '-':
+ case '_':
+ case '<':
+ shrink();
+ break;
+ default:
+ break;
+ }
- } else if (vec3.dot(newCameraShift, cameraShift) >= 0) {
- cameraShift = vec3.clone(newCameraShift);
+ if(axis.length > 0) {
+ mat4.rotate(rotMat,rotMat,0.1,axis);
+ updateViewMatrix();
+ redraw=true;
}
+}
- vec3.add(cameraPos, cameraShift, cameraLookAt);
+function handleMouseWheel(event)
+{
+ if (event.deltaY < 0) {
+ Zoom *= zoomFactor;
+ } else {
+ Zoom /= zoomFactor;
+ }
+ capzoom();
+ setProjection();
- res = 1 / (vec3.length(cameraShift) + 0.001) * 0.001;
- redraw = true;
+ redraw=true;
}
-function handleMouseMove(event) {
- if (!mouseDownOrTouchActive) {
+function handleMouseMove(event)
+{
+ if(!mouseDownOrTouchActive) {
return;
}
- var newX = event.clientX;
- var newY = event.clientY;
+ let newX=event.clientX;
+ let newY=event.clientY;
+
+ let mode;
+ if(event.getModifierState("Control")) {
+ mode=DRAGMODE_SHIFT;
+ } else if(event.getModifierState("Shift")) {
+ mode=DRAGMODE_ZOOM;
+ } else if(event.getModifierState("Alt")) {
+ mode=DRAGMODE_PAN;
+ } else {
+ mode=DRAGMODE_ROTATE;
+ }
- processDrag(newX, newY, event.getModifierState("Alt"));
+ processDrag(newX,newY,mode);
}
-function handleTouchMove(evt) {
+let zooming=false;
+let swipe=false;
+let rotate=false;
+
+function handleTouchMove(evt)
+{
evt.preventDefault();
- var touches = evt.targetTouches;
+ if(zooming) return;
+ let touches=evt.targetTouches;
+
+ if(!pinch && touches.length == 1 && touchId == touches[0].identifier) {
+ let newX=touches[0].pageX;
+ let newY=touches[0].pageY;
+ let dx=newX-lastMouseX;
+ let dy=newY-lastMouseY;
+ let stationary=dx*dx+dy*dy <= shiftHoldDistance*shiftHoldDistance;
+ if(stationary) {
+ if(!swipe && !rotate &&
+ new Date().getTime()-touchStartTime > shiftWaitTime) {
+ if(navigator.vibrate)
+ window.navigator.vibrate(vibrateTime);
+ swipe=true;
+ }
+ }
+ if(swipe)
+ processDrag(newX,newY,DRAGMODE_SHIFT);
+ else if(!stationary) {
+ rotate=true;
+ let newX=touches[0].pageX;
+ let newY=touches[0].pageY;
+ processDrag(newX,newY,DRAGMODE_ROTATE,0.5);
+ }
+ }
- if (touches.length == 1 && touchId == touches[0].identifier) {
- var newX = touches[0].pageX;
- var newY = touches[0].pageY;
- processDrag(newX, newY);
+ if(pinch && !swipe &&
+ touches.length == 2 && touchId == touches[0].identifier) {
+ let distance=pinchDistance(touches);
+ let diff=distance-pinchStart;
+ zooming=true;
+ diff *= zoomPinchFactor;
+ if(diff > zoomPinchCap) diff=zoomPinchCap;
+ if(diff < -zoomPinchCap) diff=-zoomPinchCap;
+ zoomImage(diff/size2);
+ pinchStart=distance;
+ swipe=rotate=zooming=false;
+ setProjection();
+ redraw=true;
}
}
-// Prepare canvas for drawing
-function sceneSetup() {
- gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
- mat4.perspective(pMatrix, 45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0);
+let indexExt;
- mat4.lookAt(vMatrix, cameraPos, cameraLookAt, cameraUp);
- mat4.identity(mMatrix);
+// Create buffers for the patch and its subdivisions.
+function setBuffer()
+{
+ positionBuffer=gl.createBuffer();
+ materialBuffer=gl.createBuffer();
+ colorBuffer=gl.createBuffer();
+ indexBuffer=gl.createBuffer();
+ indexExt=gl.getExtension("OES_element_index_uint");
}
-var indexExt;
+let zbuffer=[];
+
+function transformVertices(vertices)
+{
+ let Tz0=viewMat[2];
+ let Tz1=viewMat[6];
+ let Tz2=viewMat[10];
+ zbuffer.length=vertices.length;
+ for(let i=0; i < vertices.length; ++i) {
+ let i6=6*i;
+ zbuffer[i]=Tz0*vertices[i6]+Tz1*vertices[i6+1]+Tz2*vertices[i6+2];
+ }
+}
-// Create buffer data for the patch and its subdivisions to be pushed to the graphics card
-//Takes as an argument the array of vertices that define the patch to be drawn
-// Using the vertex position buffer of the above function,draw patch.
-function setBuffer() {
- VertexBuffer = gl.createBuffer();
- VertexBuffer.itemSize = 3;
+function draw()
+{
+ gl.clearColor(1,1,1,1);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
- ColorBuffer = gl.createBuffer();
- ColorBuffer.itemSize = 4;
+ material0Data.clear();
+ material1Data.clear();
+ materialData.clear();
+ colorData.clear();
+ triangleData.clear();
+ transparentData.clear();
+
+ P.forEach(function(p) {
+ p.render();
+ });
+
+ drawBuffer(material0Data,pixelShader);
+ drawBuffer(material1Data,noNormalShader);
+ drawBuffer(materialData,materialShader);
+ drawBuffer(colorData,colorShader);
+ drawBuffer(triangleData,transparentShader);
+
+ let indices=transparentData.indices;
+ if(indices.length > 0) {
+ transformVertices(transparentData.vertices);
+
+ let n=indices.length/3;
+ let triangles=Array(n).fill().map((_,i)=>i);
+
+ triangles.sort(function(a,b) {
+ let a3=3*a;
+ Ia=indices[a3];
+ Ib=indices[a3+1];
+ Ic=indices[a3+2];
+
+ let b3=3*b;
+ IA=indices[b3];
+ IB=indices[b3+1];
+ IC=indices[b3+2];
+
+ return zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic] <
+ zbuffer[IA]+zbuffer[IB]+zbuffer[IC] ? -1 : 1;
+ });
+
+ let Indices=Array(indices.length);
+
+ for(let i=0; i < n; ++i) {
+ let i3=3*i;
+ let t=3*triangles[i];
+ Indices[3*i]=indices[t];
+ Indices[3*i+1]=indices[t+1];
+ Indices[3*i+2]=indices[t+2];
+ }
- NormalBuffer = gl.createBuffer();
- NormalBuffer.itemSize = 3;
+ gl.depthMask(false); // Enable transparency
+ drawBuffer(transparentData,transparentShader,Indices);
+ gl.depthMask(true); // Disable transparency
+ }
- MaterialIndexBuffer = gl.createBuffer();
- MaterialIndexBuffer.itemSize = 1;
+ remesh=false;
+}
- indexBuffer = gl.createBuffer();
- indexBuffer.itemSize = 1;
+function tick()
+{
+ requestAnimationFrame(tick);
+ if(redraw) {
+ draw();
+ redraw=false;
+ }
+}
- setUniforms();
- indexExt = gl.getExtension("OES_element_index_uint");
+function setDimensions(width,height,X,Y)
+{
+ let Aspect=width/height;
+ let zoominv=1/lastzoom;
+ let xshift=X/width*lastzoom
+ let yshift=Y/height*lastzoom
+
+ if (orthographic) {
+ let xsize=B[0]-b[0];
+ let ysize=B[1]-b[1];
+ if (xsize < ysize*Aspect) {
+ let r=0.5*ysize*Aspect*zoominv;
+ let X0=2*r*xshift;
+ let Y0=ysize*zoominv*yshift;
+ viewParam.xmin=-r-X0;
+ viewParam.xmax=r-X0;
+ viewParam.ymin=b[1]*zoominv-Y0;
+ viewParam.ymax=B[1]*zoominv-Y0;
+ } else {
+ let r=0.5*xsize/(Aspect*Zoom);
+ let X0=xsize*zoominv*xshift;
+ let Y0=2*r*yshift;
+ viewParam.xmin=b[0]*zoominv-X0;
+ viewParam.xmax=B[0]*zoominv-X0;
+ viewParam.ymin=-r-Y0;
+ viewParam.ymax=r-Y0;
+ }
+ } else {
+ let r=H*zoominv;
+ let rAspect=r*Aspect;
+ let X0=2*rAspect*xshift;
+ let Y0=2*r*yshift;
+ viewParam.xmin=-rAspect-X0;
+ viewParam.xmax=rAspect-X0;
+ viewParam.ymin=-r-Y0;
+ viewParam.ymax=r-Y0;
+ }
}
-function drawBuffer() {
- gl.bindBuffer(gl.ARRAY_BUFFER, VertexBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
- gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute,
- VertexBuffer.itemSize, gl.FLOAT, false, 0, 0);
- VertexBuffer.numItems = nvertices;
+function setProjection()
+{
+ setDimensions(canvasWidth,canvasHeight,shift.x,shift.y);
+ let f=orthographic ? mat4.ortho : mat4.frustum;
+ f(projMat,viewParam.xmin,viewParam.xmax,
+ viewParam.ymin,viewParam.ymax,
+ -viewParam.zmax,-viewParam.zmin);
+ updateViewMatrix();
+}
- // FIXME: Some kind of a conditional here for colors???
- // along a flag of "useColors or something??? "
- gl.bindBuffer(gl.ARRAY_BUFFER, ColorBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
- gl.vertexAttribPointer(shaderProgram.vertexColorAttribute,
- ColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
- ColorBuffer.numItems = nvertices;
+function initProjection()
+{
+ H=-Math.tan(0.5*angle)*B[2];
- gl.bindBuffer(gl.ARRAY_BUFFER, NormalBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(normals), gl.STATIC_DRAW);
- gl.vertexAttribPointer(shaderProgram.vertexNormalAttribute,
- NormalBuffer.itemSize, gl.FLOAT, false, 0, 0);
- NormalBuffer.numItems = nvertices;
+ center.x=center.y=0;
+ center.z=0.5*(b[2]+B[2]);
+ lastzoom=Zoom=Zoom0;
- gl.bindBuffer(gl.ARRAY_BUFFER, MaterialIndexBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, new Int32Array(materials), gl.STATIC_DRAW);
- gl.vertexAttribIPointer(shaderProgram.vertexMaterialIndexAttribute,
- MaterialIndexBuffer.itemSize, gl.INT,false,0,0);
- MaterialIndexBuffer.numItems = nvertices;
+ viewParam.zmin=b[2];
+ viewParam.zmax=B[2];
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,
- indexExt ? new Uint32Array(indices) : new Uint16Array(indices),
- gl.STATIC_DRAW);
- indexBuffer.numItems = indices.length;
-
- gl.drawElements(gl.TRIANGLES, indexBuffer.numItems,
- indexExt ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT, 0);
- vertices = [];
- colors = [];
- normals = [];
- indices = [];
- materials = [];
- nvertices = 0;
-}
-
-var pixel = 1.0; // Adaptive rendering constant.
-var FillFactor = 0.1;
-var BezierFactor = 0.4;
-//var res=0.0005; // Temporary
-var res = 0.001; // Temporary
-var res2 = res * res;
-var Epsilon = 0.1 * res;
-var epsilon = 0;
-var Fuzz = 1000 * Number.EPSILON;
-var Fuzz2 = Fuzz * Fuzz;
-
-function Split3(z0, c0, c1, z1) {
- this.m0 = new Array(3);
- this.m2 = new Array(3);
- this.m3 = new Array(3);
- this.m4 = new Array(3);
- this.m5 = new Array(3);
- for (var i = 0; i < 3; ++i) {
- this.m0[i] = 0.5 * (z0[i] + c0[i]);
- var m1 = 0.5 * (c0[i] + c1[i]);
- this.m2[i] = 0.5 * (c1[i] + z1[i]);
- this.m3[i] = 0.5 * (this.m0[i] + m1);
- this.m4[i] = 0.5 * (m1 + this.m2[i]);
- this.m5[i] = 0.5 * (this.m3[i] + this.m4[i]);
- }
-}
-
-
-// Store the vertex v and its color vector c in the buffer.
-function vertex(v, c, n) {
- vertices.push(v[0]);
- vertices.push(v[1]);
- vertices.push(v[2]);
-
- colors.push(c[0]);
- colors.push(c[1]);
- colors.push(c[2]);
- colors.push(c[3]);
-
- normals.push(n[0]);
- normals.push(n[1]);
- normals.push(n[2]);
-
- // FIXME: Enable arbitrary materials?
- materials.push(materialIndex);
-
- return nvertices++;
-}
-
-function normal(left3, left2, left1, middle, right1, right2, right3) {
- var u0 = right1[0] - middle[0];
- var v0 = left1[0] - middle[0];
- var u1 = right1[1] - middle[1];
- var v1 = left1[1] - middle[1];
- var u2 = right1[2] - middle[2];
- var v2 = left1[2] - middle[2];
- var n = [
- u1 * v2 - u2 * v1,
- u2 * v0 - u0 * v2,
- u0 * v1 - u1 * v0
- ];
- if (abs2(n) > epsilon)
- return unit(n);
-
- var lp = [v0, v1, v2];
- var rp = [u0, u1, u2];
- var lpp = [middle[0] + left2[0] - 2 * left1[0],
- middle[1] + left2[1] - 2 * left1[1],
- middle[2] + left2[2] - 2 * left1[2]
- ];
- var rpp = [middle[0] + right2[0] - 2 * right1[0],
- middle[1] + right2[1] - 2 * right1[1],
- middle[2] + right2[2] - 2 * right1[2]
- ];
- var a = cross(rpp, lp);
- var b = cross(rp, lpp);
- n = [a[0] + b[0],
- a[1] + b[1],
- a[2] + b[2]
- ];
- if (abs2(n) > epsilon)
- return unit(n);
-
- var lppp = [left3[0] - middle[0] + 3 * (left1[0] - left2[0]),
- left3[1] - middle[1] + 3 * (left1[1] - left2[1]),
- left3[2] - middle[2] + 3 * (left1[2] - left2[2])
- ];
- var rppp = [right3[0] - middle[0] + 3 * (right1[0] - right2[0]),
- right3[1] - middle[1] + 3 * (right1[1] - right2[1]),
- right3[2] - middle[2] + 3 * (right1[2] - right2[2])
- ];
- a = cross(rpp, lpp);
- b = cross(rp, lppp);
- var c = cross(rppp, lp);
- var d = cross(rppp, lpp);
- var e = cross(rpp, lppp);
- var f = cross(rppp, lppp);
- return unit([9 * a[0] + 3 * (b[0] + c[0] + d[0] + e[0]) + f[0],
- 9 * a[1] + 3 * (b[1] + c[1] + d[1] + e[1]) + f[1],
- 9 * a[2] + 3 * (b[2] + c[2] + d[2] + e[2]) + f[2]
- ]);
-}
-
-// return the maximum distance squared of points c0 and c1 from
-// the respective internal control points of z0--z1.
-function Straightness(z0, c0, c1, z1) {
- var third = 1.0 / 3.0;
- var v = [third * (z1[0] - z0[0]), third * (z1[1] - z0[1]), third * (z1[2] - z0[2])];
- return Math.max(abs2([c0[0] - v[0] - z0[0], c0[1] - v[1] - z0[1], c0[2] - v[2] - z0[2]]),
- abs2([z1[0] - v[0] - c1[0], z1[1] - v[1] - c1[1], z1[2] - v[2] - c1[2]]));
-}
-
-// return the maximum perpendicular distance squared of points c0 and c1
-// from z0--z1.
-function Distance1(z0, c0, c1, z1) {
- var Z0 = [c0[0] - z0[0], c0[1] - z0[1], c0[2] - z0[2]];
- var Q = unit([z1[0] - z0[0], z1[1] - z0[1], z1[2] - z0[2]]);
- var Z1 = [c1[0] - z0[0], c1[1] - z0[1], c1[2] - z0[2]];
- var p0 = dot(Z0, Q);
- var p1 = dot(Z1, Q);
- return Math.max(abs2([Z0[0] - p0 * Q[0], Z0[1] - p0 * Q[1], Z0[2] - p0 * Q[2]]),
- abs2([Z1[0] - p1 * Q[0], Z1[1] - p1 * Q[1], Z1[2] - p1 * Q[2]]));
-}
-
-
-function Distance(p) {
- var p0 = p[0];
- var p3 = p[3];
- var p12 = p[12];
- var p15 = p[15];
-
- // Check the flatness of the quad.
- var d = Distance2(p15, p0, normal(p3, p[2], p[1], p0, p[4], p[8], p12));
-
- // Determine how straight the edges are.
- d = Math.max(d, Straightness(p0, p[1], p[2], p3));
- d = Math.max(d, Straightness(p0, p[4], p[8], p12));
- d = Math.max(d, Straightness(p3, p[7], p[11], p15));
- d = Math.max(d, Straightness(p12, p[13], p[14], p15));
-
- // Determine how straight the interior control curves are.
- d = Math.max(d, Straightness(p[4], p[5], p[6], p[7]));
- d = Math.max(d, Straightness(p[8], p[9], p[10], p[11]));
- d = Math.max(d, Straightness(p[1], p[5], p[9], p[13]));
- return Math.max(d, Straightness(p[2], p[6], p[10], p[14]));
-}
-
-var k = 1;
-// Return color associated with unit normal vector n.
-function color(n) {
- var Ldotn = Math.abs(L[0] * n[0] + L[1] * n[1] + L[2] * n[2]);
- var p = [emissive[0] + ambient[0] * Ambient[0] + Ldotn * diffuse[0] * Diffuse[0],
- emissive[1] + ambient[1] * Ambient[1] + Ldotn * diffuse[1] * Diffuse[1],
- emissive[2] + ambient[2] * Ambient[2] + Ldotn * diffuse[2] * Diffuse[2]
- ];
- var s = shininess * 128;
- var H = unit([L[0], L[1], L[2] + 1]);
- var f = Math.pow(H[0] * n[0] + H[1] * n[1] + H[2] * n[2], s);
-
- // Phong-Blinn model of specular reflection
- p = [p[0] + f * specular[0] * Specular[0], p[1] + f * specular[1] * Specular[1],
- p[2] + f * specular[2] * Specular[2]
- ];
-
- return [p[0], p[1], p[2], 1];
-}
-
-function render(p, I0, I1, I2, I3, P0, P1, P2, P3, flat0, flat1, flat2, flat3,
- C0, C1, C2, C3) {
- if (Distance(p) < res2) { // Patch is flat
- indices.push(I0);
- indices.push(I1);
- indices.push(I2);
-
- indices.push(I0);
- indices.push(I2);
- indices.push(I3);
- return;
- }
+ shift.x=shift.y=0;
+}
- var p0 = p[0];
- var p3 = p[3];
- var p12 = p[12];
- var p15 = p[15];
-
- var c0 = new Split3(p0, p[1], p[2], p3);
- var c1 = new Split3(p[4], p[5], p[6], p[7]);
- var c2 = new Split3(p[8], p[9], p[10], p[11]);
- var c3 = new Split3(p12, p[13], p[14], p15);
- var c4 = new Split3(p0, p[4], p[8], p12);
- var c5 = new Split3(c0.m0, c1.m0, c2.m0, c3.m0);
- var c6 = new Split3(c0.m3, c1.m3, c2.m3, c3.m3);
- var c7 = new Split3(c0.m5, c1.m5, c2.m5, c3.m5);
- var c8 = new Split3(c0.m4, c1.m4, c2.m4, c3.m4);
- var c9 = new Split3(c0.m2, c1.m2, c2.m2, c3.m2);
- var c10 = new Split3(p3, p[7], p[11], p15);
-
- var s0 = [p0, c0.m0, c0.m3, c0.m5, c4.m0, c5.m0, c6.m0, c7.m0,
- c4.m3, c5.m3, c6.m3, c7.m3, c4.m5, c5.m5, c6.m5, c7.m5
- ];
- var s1 = [c4.m5, c5.m5, c6.m5, c7.m5, c4.m4, c5.m4, c6.m4, c7.m4,
- c4.m2, c5.m2, c6.m2, c7.m2, p12, c3.m0, c3.m3, c3.m5
- ];
- var s2 = [c7.m5, c8.m5, c9.m5, c10.m5, c7.m4, c8.m4, c9.m4, c10.m4,
- c7.m2, c8.m2, c9.m2, c10.m2, c3.m5, c3.m4, c3.m2, p15
- ];
- var s3 = [c0.m5, c0.m4, c0.m2, p3, c7.m0, c8.m0, c9.m0, c10.m0,
- c7.m3, c8.m3, c9.m3, c10.m3, c7.m5, c8.m5, c9.m5, c10.m5
- ];
-
- var m4 = s0[15];
-
- var n0 = normal(s0[0], s0[4], s0[8], s0[12], s0[13], s0[14], s0[15]);
- if (n0 == 0.0) {
- n0 = normal(s0[0], s0[4], s0[8], s0[12], s0[11], s0[7], s0[3]);
- if (n0 == 0.0) n0 = normal(s0[3], s0[2], s0[1], s0[0], s0[13], s0[14], s0[15]);
- }
-
- var n1 = normal(s1[12], s1[13], s1[14], s1[15], s1[11], s1[7], s1[3]);
- if (n1 == 0.0) {
- n1 = normal(s1[12], s1[13], s1[14], s1[15], s1[2], s1[1], s1[0]);
- if (n1 == 0.0) n1 = normal(s1[0], s1[4], s1[8], s1[12], s1[11], s1[7], s1[3]);
- }
-
- var n2 = normal(s2[15], s2[11], s2[7], s2[3], s2[2], s2[1], s2[0]);
- if (n2 == 0.0) {
- n2 = normal(s2[15], s2[11], s2[7], s2[3], s2[4], s2[8], s2[12]);
- if (n2 == 0.0) n2 = normal(s2[12], s2[13], s2[14], s2[15], s2[2], s2[1], s2[0]);
- }
-
- var n3 = normal(s3[3], s3[2], s3[1], s3[0], s3[4], s3[8], s3[12]);
- if (n3 == 0.0) {
- n3 = normal(s3[3], s3[2], s3[1], s3[0], s3[13], s3[14], s3[15]);
- if (n3 == 0.0) n3 = normal(s3[15], s3[11], s3[7], s3[3], s3[4], s3[8], s3[12]);
- }
-
- var n4 = normal(s2[3], s2[2], s2[1], m4, s2[4], s2[8], s2[12]);
-
- var m0, m1, m2, m3;
-
- // A kludge to remove subdivision cracks, only applied the first time
- // an edge is found to be flat before the rest of the subpatch is.
- if (flat0)
- m0 = [0.5 * (P0[0] + P1[0]), 0.5 * (P0[1] + P1[1]), 0.5 * (P0[2] + P1[2])];
- else {
- if ((flat0 = Distance1(p0, p[4], p[8], p12) < res2)) {
- var u = s0[12];
- var v = s2[3];
- var e = unit([u[0] - v[0], u[1] - v[1], u[2] - v[2]]);
- m0 = [0.5 * (P0[0] + P1[0]) + Epsilon * e[0], 0.5 * (P0[1] + P1[1]) + Epsilon * e[1],
- 0.5 * (P0[2] + P1[2]) + Epsilon * e[2]
- ];
- } else
- m0 = s0[12];
- }
-
- if (flat1)
- m1 = [0.5 * (P1[0] + P2[0]), 0.5 * (P1[1] + P2[1]), 0.5 * (P1[2] + P2[2])];
- else {
- if ((flat1 = Distance1(p12, p[13], p[14], p15) < res2)) {
- var u = s1[15];
- var v = s3[0];
- var e = unit([u[0] - v[0], u[1] - v[1], u[2] - v[2]]);
- m1 = [0.5 * (P1[0] + P2[0]) + Epsilon * e[0], 0.5 * (P1[1] + P2[1]) + Epsilon * e[1],
- 0.5 * (P1[2] + P2[2]) + Epsilon * e[2]
- ];
- } else
- m1 = s1[15];
- }
-
- if (flat2)
- m2 = [0.5 * (P2[0] + P3[0]), 0.5 * (P2[1] + P3[1]), 0.5 * (P2[2] + P3[2])];
- else {
- if ((flat2 = Distance1(p15, p[11], p[7], p3) < res2)) {
- var u = s2[3];
- var v = s0[12];
- var e = unit([u[0] - v[0], u[1] - v[1], u[2] - v[2]]);
- m2 = [0.5 * (P2[0] + P3[0]) + Epsilon * e[0], 0.5 * (P2[1] + P3[1]) + Epsilon * e[1],
- 0.5 * (P2[2] + P3[2]) + Epsilon * e[2]
- ];
- } else
- m2 = s2[3];
- }
-
- if (flat3)
- m3 = [0.5 * (P3[0] + P0[0]), 0.5 * (P3[1] + P0[1]), 0.5 * (P3[2] + P0[2])];
- else {
- if ((flat3 = Distance1(p3, p[2], p[1], p0) < res2)) {
- var u = s3[0];
- var v = s1[15];
- var e = unit([u[0] - v[0], u[1] - v[1], u[2] - v[2]]);
- m3 = [0.5 * (P3[0] + P0[0]) + Epsilon * e[0],
- 0.5 * (P3[1] + P0[1]) + Epsilon * e[1],
- 0.5 * (P3[2] + P0[2]) + Epsilon * e[2]
- ];
- } else
- m3 = s3[0];
- }
+function setViewport()
+{
+ gl.viewportWidth=canvasWidth;
+ gl.viewportHeight=canvasHeight;
+ gl.viewport(0,0,gl.viewportWidth,gl.viewportHeight);
+ home();
+}
- // document.write(n0);
- // document.write(" < br > ");
+function setCanvas()
+{
+ canvas.width=canvasWidth;
+ canvas.height=canvasHeight;
+ size2=Math.hypot(canvasWidth,canvasHeight);
+ halfCanvasWidth=0.5*canvasWidth;
+ halfCanvasHeight=0.5*canvasHeight;
+}
- {
- /*
- var c0=new Array(4);
- var c1=new Array(4);
- var c2=new Array(4);
- var c3=new Array(4);
- var c4=new Array(4);
-
- for(var i=0; i < 4; ++i) {
- c0[i]=0.5*(C0[i]+C1[i]);
- c1[i]=0.5*(C1[i]+C2[i]);
- c2[i]=0.5*(C2[i]+C3[i]);
- c3[i]=0.5*(C3[i]+C0[i]);
- c4[i]=0.5*(c0[i]+c2[i]);
- }
- */
+function setsize(w,h)
+{
+ if(w > maxViewportWidth)
+ w=maxViewportWidth;
- var c0 = color(n0);
- var c1 = color(n1);
- var c2 = color(n2);
- var c3 = color(n3);
- var c4 = color(n4);
+ if(h > maxViewportHeight)
+ h=maxViewportHeight;
+ shift.x *= w/canvasWidth;
+ shift.y *= h/canvasHeight;
- var i0 = vertex(m0, c0, n0);
- var i1 = vertex(m1, c1, n1);
- var i2 = vertex(m2, c2, n2);
- var i3 = vertex(m3, c3, n3);
- var i4 = vertex(m4, c4, n4);
+ canvasWidth=w;
+ canvasHeight=h;
+ setCanvas();
+ setViewport();
+}
- render(s0, I0, i0, i4, i3, P0, m0, m4, m3, flat0, false, false, flat3,
- C0, c0, c4, c3);
- render(s1, i0, I1, i1, i4, m0, P1, m1, m4, flat0, flat1, false, false,
- c0, C1, c1, c4);
- render(s2, i4, i1, I2, i2, m4, m1, P2, m2, false, flat1, flat2, false,
- c4, c1, C2, c2);
- render(s3, i3, i4, i2, I3, m3, m4, m2, P3, false, false, flat2, flat3,
- c3, c4, c2, C3);
- }
+function expand()
+{
+ setsize(canvasWidth*resizeStep+0.5,canvasHeight*resizeStep+0.5);
}
-var p;
+function shrink()
+{
+ setsize(Math.max((canvasWidth/resizeStep+0.5),1),
+ Math.max((canvasHeight/resizeStep+0.5),1));
+}
-function draw() {
- sceneSetup();
- // mat4.translate(mMatrix,mMatrix,[-0.5,-0.5,-1.5]);
+let pixelShader,noNormalShader,materialShader,colorShader,transparentShader;
+
+function webGLStart()
+{
+ canvas=document.getElementById("Asymptote");
+
+ if(absolute) {
+ canvasWidth *= window.devicePixelRatio;
+ canvasHeight *= window.devicePixelRatio;
+ } else {
+ if(canvas.width == 0)
+ canvas.width=Math.max(window.innerWidth-windowTrim,windowTrim);
+
+ if(canvas.height == 0)
+ canvas.height=Math.max(window.innerHeight-windowTrim,windowTrim);
+
+ let Aspect=canvasWidth/canvasHeight;
+ if(canvas.width > canvas.height*Aspect)
+ canvas.width=Math.min(canvas.height*Aspect,canvas.width);
+ else
+ canvas.height=Math.min(canvas.width/Aspect,canvas.height);
+
+ if(canvas.width > 0)
+ canvasWidth=canvas.width;
+
+ if(canvas.height > 0)
+ canvasHeight=canvas.height;
- setBuffer();
- var p0 = p[0];
- var p3 = p[3];
- var p12 = p[12];
- var p15 = p[15];
-
- epsilon = 0;
- for (var i = 1; i < 16; ++i)
- epsilon = Math.max(epsilon,
- abs2([p[i][0] - p0[0], p[i][1] - p0[1], p[i][2] - p0[2]]));
- epsilon *= Fuzz2;
-
- var n0 = normal(p3, p[2], p[1], p0, p[4], p[8], p12);
- var n1 = normal(p0, p[4], p[8], p12, p[13], p[14], p15);
- var n2 = normal(p12, p[13], p[14], p15, p[11], p[7], p3);
- var n3 = normal(p15, p[11], p[7], p3, p[2], p[1], p0);
-
- var c0 = color(n0);
- var c1 = color(n1);
- var c2 = color(n2);
- var c3 = color(n3);
-
- var i0 = vertex(p0, c0, n0);
- var i1 = vertex(p12, c1, n1);
- var i2 = vertex(p15, c2, n2);
- var i3 = vertex(p3, c3, n3);
-
- render(p, i0, i1, i2, i3, p0, p12, p15, p3, false, false, false, false,
- c0, c1, c2, c3);
- drawBuffer();
-}
-
-var forceredraw = false;
-var lasttime;
-var newtime;
-
-function tick() {
- requestAnimationFrame(tick);
- lasttime = newtime;
- newtime = performance.now();
- // invariant: every time this loop is called, lasttime stores the
- // last time processloop was called.
- processloop(newtime - lasttime);
- draw();
-}
-function tickNoRedraw() {
- requestAnimationFrame(tickNoRedraw);
- if (redraw) {
- draw();
- redraw = false;
}
-}
-function webGLStart() {
- var canvas = document.getElementById("Asymptote");
- initGL(canvas);
- initShaders();
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ setCanvas();
+ ArcballFactor=1+8*Math.hypot(viewportmargin[0],viewportmargin[1])/size2;
+
+ initGL();
+
+ gl.enable(gl.BLEND);
+ gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);
gl.enable(gl.DEPTH_TEST);
+ setViewport();
- canvas.onmousedown = handleMouseDown;
- document.onmouseup = handleMouseUpOrTouchEnd;
- document.onmousemove = handleMouseMove;
- canvas.onkeydown = handleKey;
- document.onwheel = handleMouseWheel;
+ noNormalShader=initShader();
+ pixelShader=initShader(["WIDTH"]);
+ materialShader=initShader(["NORMAL"]);
+ colorShader=initShader(["NORMAL","COLOR"]);
+ transparentShader=initShader(["NORMAL","COLOR","TRANSPARENT"]);
- canvas.addEventListener("touchstart", handleTouchStart, false);
- canvas.addEventListener("touchend", handleMouseUpOrTouchEnd, false);
- canvas.addEventListener("touchcancel", handleMouseUpOrTouchEnd, false);
- canvas.addEventListener("touchleave", handleMouseUpOrTouchEnd, false);
- canvas.addEventListener("touchmove", handleTouchMove, false);
+ setBuffer();
+
+ canvas.onmousedown=handleMouseDown;
+ document.onmouseup=handleMouseUpOrTouchEnd;
+ document.onmousemove=handleMouseMove;
+ canvas.onkeydown=handleKey;
+ document.onwheel=handleMouseWheel;
- newtime = performance.now();
+ canvas.addEventListener("touchstart",handleTouchStart,false);
+ canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,false);
+ canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,false);
+ canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,false);
+ canvas.addEventListener("touchmove",handleTouchMove,false);
+ document.addEventListener("keydown",handleKey,false);
- if (forceredraw) {
tick();
- } else {
- tickNoRedraw();
- }
}
diff --git a/graphics/asymptote/webgl/glm-js-min-2.2.2.js b/graphics/asymptote/webgl/glm-js-min-2.2.2.js
deleted file mode 100644
index 3e11d90371..0000000000
--- a/graphics/asymptote/webgl/glm-js-min-2.2.2.js
+++ /dev/null
@@ -1,273 +0,0 @@
-/*! glm-js built 2017-03-20 16:45:23-04:00 | (c) humbletim | http://humbletim.github.io/glm-js */
-(function declare_glmjs_glmatrix(globals, $GLM_log, $GLM_console_log) { var GLM, GLMAT, GLMAT_VERSION, GLMJS_PREFIX, $GLM_console_factory, glm; ArrayBuffer.exists;
-/*
-
- --------------------------------------------------------------------------
- glm-js | (c) humbletim | http://humbletim.github.io/glm-js
- --------------------------------------------------------------------------
-
- The MIT License (MIT)
-
- Copyright (c) 2015-2016 humbletim
-
- 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.
-
- --------------------------------------------------------------------------
- gl-matrix | (c) Brandon Jones, Colin MacKenzie IV | http://glmatrix.net/
- --------------------------------------------------------------------------
-
- Copyright (c) 2013 Brandon Jones, Colin MacKenzie IV
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
-
- 2. Altered source versions must be plainly marked as such, and must not
- be misrepresented as being the original software.
-
- 3. This notice may not be removed or altered from any source distribution.
-*/
-GLMAT={};GLMAT_VERSION="2.2.2";
-(function(a){a.VERSION=GLMAT_VERSION;if(!b)var b=1E-6;if(!c)var c="undefined"!==typeof Float32Array?Float32Array:Array;if(!e)var e=Math.random;var d={setMatrixArrayType:function(y){c=y}};"undefined"!==typeof a&&(a.glMatrix=d);var h=Math.PI/180;d.toRadian=function(y){return y*h};d={create:function(){var y=new c(2);y[0]=0;y[1]=0;return y},clone:function(y){var a=new c(2);a[0]=y[0];a[1]=y[1];return a},fromValues:function(y,a){var v=new c(2);v[0]=y;v[1]=a;return v},copy:function(y,a){y[0]=a[0];y[1]=a[1];
-return y},set:function(y,a,v){y[0]=a;y[1]=v;return y},add:function(y,a,v){y[0]=a[0]+v[0];y[1]=a[1]+v[1];return y},subtract:function(y,a,v){y[0]=a[0]-v[0];y[1]=a[1]-v[1];return y}};d.sub=d.subtract;d.multiply=function(y,a,v){y[0]=a[0]*v[0];y[1]=a[1]*v[1];return y};d.mul=d.multiply;d.divide=function(y,a,v){y[0]=a[0]/v[0];y[1]=a[1]/v[1];return y};d.div=d.divide;d.min=function(y,a,v){y[0]=Math.min(a[0],v[0]);y[1]=Math.min(a[1],v[1]);return y};d.max=function(y,a,v){y[0]=Math.max(a[0],v[0]);y[1]=Math.max(a[1],
-v[1]);return y};d.scale=function(y,a,v){y[0]=a[0]*v;y[1]=a[1]*v;return y};d.scaleAndAdd=function(y,a,v,b){y[0]=a[0]+v[0]*b;y[1]=a[1]+v[1]*b;return y};d.distance=function(a,f){var v=f[0]-a[0],b=f[1]-a[1];return Math.sqrt(v*v+b*b)};d.dist=d.distance;d.squaredDistance=function(a,f){var v=f[0]-a[0],b=f[1]-a[1];return v*v+b*b};d.sqrDist=d.squaredDistance;d.length=function(a){var f=a[0];a=a[1];return Math.sqrt(f*f+a*a)};d.len=d.length;d.squaredLength=function(a){var f=a[0];a=a[1];return f*f+a*a};d.sqrLen=
-d.squaredLength;d.negate=function(a,f){a[0]=-f[0];a[1]=-f[1];return a};d.inverse=function(a,f){a[0]=1/f[0];a[1]=1/f[1];return a};d.normalize=function(a,f){var v=f[0],b=f[1],v=v*v+b*b;0<v&&(v=1/Math.sqrt(v),a[0]=f[0]*v,a[1]=f[1]*v);return a};d.dot=function(a,f){return a[0]*f[0]+a[1]*f[1]};d.cross=function(a,f,v){f=f[0]*v[1]-f[1]*v[0];a[0]=a[1]=0;a[2]=f;return a};d.lerp=function(a,f,v,b){var c=f[0];f=f[1];a[0]=c+b*(v[0]-c);a[1]=f+b*(v[1]-f);return a};d.random=function(a,f){f=f||1;var v=2*e()*Math.PI;
-a[0]=Math.cos(v)*f;a[1]=Math.sin(v)*f;return a};d.transformMat2=function(a,f,v){var b=f[0];f=f[1];a[0]=v[0]*b+v[2]*f;a[1]=v[1]*b+v[3]*f;return a};d.transformMat2d=function(a,f,v){var b=f[0];f=f[1];a[0]=v[0]*b+v[2]*f+v[4];a[1]=v[1]*b+v[3]*f+v[5];return a};d.transformMat3=function(a,f,b){var c=f[0];f=f[1];a[0]=b[0]*c+b[3]*f+b[6];a[1]=b[1]*c+b[4]*f+b[7];return a};d.transformMat4=function(a,f,b){var c=f[0];f=f[1];a[0]=b[0]*c+b[4]*f+b[12];a[1]=b[1]*c+b[5]*f+b[13];return a};var j=d.create();d.forEach=function(a,
-f,b,c,d,e){f||(f=2);b||(b=0);for(c=c?Math.min(c*f+b,a.length):a.length;b<c;b+=f)j[0]=a[b],j[1]=a[b+1],d(j,j,e),a[b]=j[0],a[b+1]=j[1];return a};d.str=function(a){return"vec2("+a[0]+", "+a[1]+")"};"undefined"!==typeof a&&(a.vec2=d);var g={create:function(){var a=new c(3);a[0]=0;a[1]=0;a[2]=0;return a},clone:function(a){var f=new c(3);f[0]=a[0];f[1]=a[1];f[2]=a[2];return f},fromValues:function(a,f,b){var P=new c(3);P[0]=a;P[1]=f;P[2]=b;return P},copy:function(a,f){a[0]=f[0];a[1]=f[1];a[2]=f[2];return a},
-set:function(a,f,b,c){a[0]=f;a[1]=b;a[2]=c;return a},add:function(a,f,b){a[0]=f[0]+b[0];a[1]=f[1]+b[1];a[2]=f[2]+b[2];return a},subtract:function(a,f,b){a[0]=f[0]-b[0];a[1]=f[1]-b[1];a[2]=f[2]-b[2];return a}};g.sub=g.subtract;g.multiply=function(a,f,b){a[0]=f[0]*b[0];a[1]=f[1]*b[1];a[2]=f[2]*b[2];return a};g.mul=g.multiply;g.divide=function(a,f,b){a[0]=f[0]/b[0];a[1]=f[1]/b[1];a[2]=f[2]/b[2];return a};g.div=g.divide;g.min=function(a,f,b){a[0]=Math.min(f[0],b[0]);a[1]=Math.min(f[1],b[1]);a[2]=Math.min(f[2],
-b[2]);return a};g.max=function(a,f,b){a[0]=Math.max(f[0],b[0]);a[1]=Math.max(f[1],b[1]);a[2]=Math.max(f[2],b[2]);return a};g.scale=function(a,f,b){a[0]=f[0]*b;a[1]=f[1]*b;a[2]=f[2]*b;return a};g.scaleAndAdd=function(a,f,b,c){a[0]=f[0]+b[0]*c;a[1]=f[1]+b[1]*c;a[2]=f[2]+b[2]*c;return a};g.distance=function(a,f){var b=f[0]-a[0],c=f[1]-a[1],d=f[2]-a[2];return Math.sqrt(b*b+c*c+d*d)};g.dist=g.distance;g.squaredDistance=function(a,f){var b=f[0]-a[0],c=f[1]-a[1],d=f[2]-a[2];return b*b+c*c+d*d};g.sqrDist=
-g.squaredDistance;g.length=function(a){var f=a[0],b=a[1];a=a[2];return Math.sqrt(f*f+b*b+a*a)};g.len=g.length;g.squaredLength=function(a){var f=a[0],b=a[1];a=a[2];return f*f+b*b+a*a};g.sqrLen=g.squaredLength;g.negate=function(a,f){a[0]=-f[0];a[1]=-f[1];a[2]=-f[2];return a};g.inverse=function(a,f){a[0]=1/f[0];a[1]=1/f[1];a[2]=1/f[2];return a};g.normalize=function(a,f){var b=f[0],c=f[1],d=f[2],b=b*b+c*c+d*d;0<b&&(b=1/Math.sqrt(b),a[0]=f[0]*b,a[1]=f[1]*b,a[2]=f[2]*b);return a};g.dot=function(a,f){return a[0]*
-f[0]+a[1]*f[1]+a[2]*f[2]};g.cross=function(a,f,b){var c=f[0],d=f[1];f=f[2];var e=b[0],l=b[1];b=b[2];a[0]=d*b-f*l;a[1]=f*e-c*b;a[2]=c*l-d*e;return a};g.lerp=function(a,f,b,c){var d=f[0],e=f[1];f=f[2];a[0]=d+c*(b[0]-d);a[1]=e+c*(b[1]-e);a[2]=f+c*(b[2]-f);return a};g.random=function(a,f){f=f||1;var b=2*e()*Math.PI,c=2*e()-1,d=Math.sqrt(1-c*c)*f;a[0]=Math.cos(b)*d;a[1]=Math.sin(b)*d;a[2]=c*f;return a};g.transformMat4=function(a,f,b){var c=f[0],d=f[1];f=f[2];var e=b[3]*c+b[7]*d+b[11]*f+b[15],e=e||1;a[0]=
-(b[0]*c+b[4]*d+b[8]*f+b[12])/e;a[1]=(b[1]*c+b[5]*d+b[9]*f+b[13])/e;a[2]=(b[2]*c+b[6]*d+b[10]*f+b[14])/e;return a};g.transformMat3=function(a,f,b){var c=f[0],d=f[1];f=f[2];a[0]=c*b[0]+d*b[3]+f*b[6];a[1]=c*b[1]+d*b[4]+f*b[7];a[2]=c*b[2]+d*b[5]+f*b[8];return a};g.transformQuat=function(a,f,b){var c=f[0],d=f[1],e=f[2];f=b[0];var l=b[1],x=b[2];b=b[3];var u=b*c+l*e-x*d,J=b*d+x*c-f*e,g=b*e+f*d-l*c,c=-f*c-l*d-x*e;a[0]=u*b+c*-f+J*-x-g*-l;a[1]=J*b+c*-l+g*-f-u*-x;a[2]=g*b+c*-x+u*-l-J*-f;return a};g.rotateX=
-function(a,f,b,c){var d=[],e=[];d[0]=f[0]-b[0];d[1]=f[1]-b[1];d[2]=f[2]-b[2];e[0]=d[0];e[1]=d[1]*Math.cos(c)-d[2]*Math.sin(c);e[2]=d[1]*Math.sin(c)+d[2]*Math.cos(c);a[0]=e[0]+b[0];a[1]=e[1]+b[1];a[2]=e[2]+b[2];return a};g.rotateY=function(a,f,b,c){var d=[],e=[];d[0]=f[0]-b[0];d[1]=f[1]-b[1];d[2]=f[2]-b[2];e[0]=d[2]*Math.sin(c)+d[0]*Math.cos(c);e[1]=d[1];e[2]=d[2]*Math.cos(c)-d[0]*Math.sin(c);a[0]=e[0]+b[0];a[1]=e[1]+b[1];a[2]=e[2]+b[2];return a};g.rotateZ=function(a,f,b,c){var d=[],e=[];d[0]=f[0]-
-b[0];d[1]=f[1]-b[1];d[2]=f[2]-b[2];e[0]=d[0]*Math.cos(c)-d[1]*Math.sin(c);e[1]=d[0]*Math.sin(c)+d[1]*Math.cos(c);e[2]=d[2];a[0]=e[0]+b[0];a[1]=e[1]+b[1];a[2]=e[2]+b[2];return a};var k=g.create();g.forEach=function(a,f,b,c,d,e){f||(f=3);b||(b=0);for(c=c?Math.min(c*f+b,a.length):a.length;b<c;b+=f)k[0]=a[b],k[1]=a[b+1],k[2]=a[b+2],d(k,k,e),a[b]=k[0],a[b+1]=k[1],a[b+2]=k[2];return a};g.str=function(a){return"vec3("+a[0]+", "+a[1]+", "+a[2]+")"};"undefined"!==typeof a&&(a.vec3=g);var i={create:function(){var a=
-new c(4);a[0]=0;a[1]=0;a[2]=0;a[3]=0;return a},clone:function(a){var f=new c(4);f[0]=a[0];f[1]=a[1];f[2]=a[2];f[3]=a[3];return f},fromValues:function(a,f,b,d){var e=new c(4);e[0]=a;e[1]=f;e[2]=b;e[3]=d;return e},copy:function(a,f){a[0]=f[0];a[1]=f[1];a[2]=f[2];a[3]=f[3];return a},set:function(a,f,b,c,d){a[0]=f;a[1]=b;a[2]=c;a[3]=d;return a},add:function(a,f,b){a[0]=f[0]+b[0];a[1]=f[1]+b[1];a[2]=f[2]+b[2];a[3]=f[3]+b[3];return a},subtract:function(a,f,b){a[0]=f[0]-b[0];a[1]=f[1]-b[1];a[2]=f[2]-b[2];
-a[3]=f[3]-b[3];return a}};i.sub=i.subtract;i.multiply=function(a,f,b){a[0]=f[0]*b[0];a[1]=f[1]*b[1];a[2]=f[2]*b[2];a[3]=f[3]*b[3];return a};i.mul=i.multiply;i.divide=function(a,f,b){a[0]=f[0]/b[0];a[1]=f[1]/b[1];a[2]=f[2]/b[2];a[3]=f[3]/b[3];return a};i.div=i.divide;i.min=function(a,f,b){a[0]=Math.min(f[0],b[0]);a[1]=Math.min(f[1],b[1]);a[2]=Math.min(f[2],b[2]);a[3]=Math.min(f[3],b[3]);return a};i.max=function(a,f,b){a[0]=Math.max(f[0],b[0]);a[1]=Math.max(f[1],b[1]);a[2]=Math.max(f[2],b[2]);a[3]=
-Math.max(f[3],b[3]);return a};i.scale=function(a,f,b){a[0]=f[0]*b;a[1]=f[1]*b;a[2]=f[2]*b;a[3]=f[3]*b;return a};i.scaleAndAdd=function(a,f,b,c){a[0]=f[0]+b[0]*c;a[1]=f[1]+b[1]*c;a[2]=f[2]+b[2]*c;a[3]=f[3]+b[3]*c;return a};i.distance=function(a,f){var b=f[0]-a[0],c=f[1]-a[1],d=f[2]-a[2],e=f[3]-a[3];return Math.sqrt(b*b+c*c+d*d+e*e)};i.dist=i.distance;i.squaredDistance=function(a,f){var b=f[0]-a[0],c=f[1]-a[1],d=f[2]-a[2],e=f[3]-a[3];return b*b+c*c+d*d+e*e};i.sqrDist=i.squaredDistance;i.length=function(a){var f=
-a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(f*f+b*b+c*c+a*a)};i.len=i.length;i.squaredLength=function(a){var f=a[0],b=a[1],c=a[2];a=a[3];return f*f+b*b+c*c+a*a};i.sqrLen=i.squaredLength;i.negate=function(a,f){a[0]=-f[0];a[1]=-f[1];a[2]=-f[2];a[3]=-f[3];return a};i.inverse=function(a,f){a[0]=1/f[0];a[1]=1/f[1];a[2]=1/f[2];a[3]=1/f[3];return a};i.normalize=function(a,f){var b=f[0],c=f[1],d=f[2],e=f[3],b=b*b+c*c+d*d+e*e;0<b&&(b=1/Math.sqrt(b),a[0]=f[0]*b,a[1]=f[1]*b,a[2]=f[2]*b,a[3]=f[3]*b);return a};
-i.dot=function(a,f){return a[0]*f[0]+a[1]*f[1]+a[2]*f[2]+a[3]*f[3]};i.lerp=function(a,f,b,c){var d=f[0],e=f[1],l=f[2];f=f[3];a[0]=d+c*(b[0]-d);a[1]=e+c*(b[1]-e);a[2]=l+c*(b[2]-l);a[3]=f+c*(b[3]-f);return a};i.random=function(a,f){f=f||1;a[0]=e();a[1]=e();a[2]=e();a[3]=e();i.normalize(a,a);i.scale(a,a,f);return a};i.transformMat4=function(a,f,b){var c=f[0],d=f[1],e=f[2];f=f[3];a[0]=b[0]*c+b[4]*d+b[8]*e+b[12]*f;a[1]=b[1]*c+b[5]*d+b[9]*e+b[13]*f;a[2]=b[2]*c+b[6]*d+b[10]*e+b[14]*f;a[3]=b[3]*c+b[7]*d+
-b[11]*e+b[15]*f;return a};i.transformQuat=function(a,b,c){var d=b[0],e=b[1],n=b[2];b=c[0];var l=c[1],x=c[2];c=c[3];var u=c*d+l*n-x*e,J=c*e+x*d-b*n,g=c*n+b*e-l*d,d=-b*d-l*e-x*n;a[0]=u*c+d*-b+J*-x-g*-l;a[1]=J*c+d*-l+g*-b-u*-x;a[2]=g*c+d*-x+u*-l-J*-b;return a};var w=i.create();i.forEach=function(a,b,c,d,e,n){b||(b=4);c||(c=0);for(d=d?Math.min(d*b+c,a.length):a.length;c<d;c+=b)w[0]=a[c],w[1]=a[c+1],w[2]=a[c+2],w[3]=a[c+3],e(w,w,n),a[c]=w[0],a[c+1]=w[1],a[c+2]=w[2],a[c+3]=w[3];return a};i.str=function(a){return"vec4("+
-a[0]+", "+a[1]+", "+a[2]+", "+a[3]+")"};"undefined"!==typeof a&&(a.vec4=i);d={create:function(){var a=new c(4);a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},clone:function(a){var b=new c(4);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},copy:function(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];return a},identity:function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(a===b){var c=b[1];a[1]=b[2];a[2]=c}else a[0]=b[0],a[1]=b[2],a[2]=b[1],a[3]=b[3];return a},invert:function(a,b){var c=
-b[0],d=b[1],e=b[2],n=b[3],l=c*n-e*d;if(!l)return null;l=1/l;a[0]=n*l;a[1]=-d*l;a[2]=-e*l;a[3]=c*l;return a},adjoint:function(a,b){var c=b[0];a[0]=b[3];a[1]=-b[1];a[2]=-b[2];a[3]=c;return a},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},multiply:function(a,b,c){var d=b[0],e=b[1],n=b[2];b=b[3];var l=c[0],x=c[1],u=c[2];c=c[3];a[0]=d*l+n*x;a[1]=e*l+b*x;a[2]=d*u+n*c;a[3]=e*u+b*c;return a}};d.mul=d.multiply;d.rotate=function(a,b,c){var d=b[0],e=b[1],n=b[2];b=b[3];var l=Math.sin(c);c=Math.cos(c);a[0]=
-d*c+n*l;a[1]=e*c+b*l;a[2]=d*-l+n*c;a[3]=e*-l+b*c;return a};d.scale=function(a,b,c){var d=b[1],e=b[2],n=b[3],l=c[0];c=c[1];a[0]=b[0]*l;a[1]=d*l;a[2]=e*c;a[3]=n*c;return a};d.str=function(a){return"mat2("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+")"};d.frob=function(a){return Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)+Math.pow(a[2],2)+Math.pow(a[3],2))};d.LDU=function(a,b,c,d){a[2]=d[2]/d[0];c[0]=d[0];c[1]=d[1];c[3]=d[3]-a[2]*c[1];return[a,b,c]};"undefined"!==typeof a&&(a.mat2=d);d={create:function(){var a=
-new c(6);a[0]=1;a[1]=0;a[2]=0;a[3]=1;a[4]=0;a[5]=0;return a},clone:function(a){var b=new c(6);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];return b},copy:function(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a},identity:function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=1;a[4]=0;a[5]=0;return a},invert:function(a,b){var c=b[0],d=b[1],e=b[2],n=b[3],l=b[4],x=b[5],u=c*n-d*e;if(!u)return null;u=1/u;a[0]=n*u;a[1]=-d*u;a[2]=-e*u;a[3]=c*u;a[4]=(e*x-n*l)*u;a[5]=(d*l-c*x)*u;return a},
-determinant:function(a){return a[0]*a[3]-a[1]*a[2]},multiply:function(a,b,c){var d=b[0],e=b[1],n=b[2],l=b[3],x=b[4];b=b[5];var u=c[0],g=c[1],h=c[2],K=c[3],j=c[4];c=c[5];a[0]=d*u+n*g;a[1]=e*u+l*g;a[2]=d*h+n*K;a[3]=e*h+l*K;a[4]=d*j+n*c+x;a[5]=e*j+l*c+b;return a}};d.mul=d.multiply;d.rotate=function(a,b,c){var d=b[0],e=b[1],n=b[2],l=b[3],x=b[4];b=b[5];var u=Math.sin(c);c=Math.cos(c);a[0]=d*c+n*u;a[1]=e*c+l*u;a[2]=d*-u+n*c;a[3]=e*-u+l*c;a[4]=x;a[5]=b;return a};d.scale=function(a,b,c){var d=b[1],e=b[2],
-n=b[3],l=b[4],x=b[5],u=c[0];c=c[1];a[0]=b[0]*u;a[1]=d*u;a[2]=e*c;a[3]=n*c;a[4]=l;a[5]=x;return a};d.translate=function(a,b,c){var d=b[0],e=b[1],n=b[2],l=b[3],x=b[4];b=b[5];var u=c[0];c=c[1];a[0]=d;a[1]=e;a[2]=n;a[3]=l;a[4]=d*u+n*c+x;a[5]=e*u+l*c+b;return a};d.str=function(a){return"mat2d("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+")"};d.frob=function(a){return Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)+Math.pow(a[2],2)+Math.pow(a[3],2)+Math.pow(a[4],2)+Math.pow(a[5],2)+1)};"undefined"!==
-typeof a&&(a.mat2d=d);d={create:function(){var a=new c(9);a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},fromMat4:function(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[4];a[4]=b[5];a[5]=b[6];a[6]=b[8];a[7]=b[9];a[8]=b[10];return a},clone:function(a){var b=new c(9);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return b},copy:function(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];a[6]=b[6];a[7]=b[7];a[8]=b[8];return a},
-identity:function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,b){if(a===b){var c=b[1],d=b[2],e=b[5];a[1]=b[3];a[2]=b[6];a[3]=c;a[5]=b[7];a[6]=d;a[7]=e}else a[0]=b[0],a[1]=b[3],a[2]=b[6],a[3]=b[1],a[4]=b[4],a[5]=b[7],a[6]=b[2],a[7]=b[5],a[8]=b[8];return a},invert:function(a,b){var c=b[0],d=b[1],e=b[2],n=b[3],l=b[4],x=b[5],u=b[6],g=b[7],h=b[8],K=h*l-x*g,j=-h*n+x*u,m=g*n-l*u,i=c*K+d*j+e*m;if(!i)return null;i=1/i;a[0]=K*i;a[1]=(-h*d+e*g)*i;a[2]=(x*
-d-e*l)*i;a[3]=j*i;a[4]=(h*c-e*u)*i;a[5]=(-x*c+e*n)*i;a[6]=m*i;a[7]=(-g*c+d*u)*i;a[8]=(l*c-d*n)*i;return a},adjoint:function(a,b){var c=b[0],d=b[1],e=b[2],n=b[3],l=b[4],x=b[5],u=b[6],g=b[7],h=b[8];a[0]=l*h-x*g;a[1]=e*g-d*h;a[2]=d*x-e*l;a[3]=x*u-n*h;a[4]=c*h-e*u;a[5]=e*n-c*x;a[6]=n*g-l*u;a[7]=d*u-c*g;a[8]=c*l-d*n;return a},determinant:function(a){var b=a[3],c=a[4],d=a[5],e=a[6],n=a[7],l=a[8];return a[0]*(l*c-d*n)+a[1]*(-l*b+d*e)+a[2]*(n*b-c*e)},multiply:function(a,b,c){var d=b[0],e=b[1],n=b[2],l=b[3],
-x=b[4],u=b[5],g=b[6],h=b[7];b=b[8];var j=c[0],m=c[1],i=c[2],k=c[3],q=c[4],t=c[5],s=c[6],r=c[7];c=c[8];a[0]=j*d+m*l+i*g;a[1]=j*e+m*x+i*h;a[2]=j*n+m*u+i*b;a[3]=k*d+q*l+t*g;a[4]=k*e+q*x+t*h;a[5]=k*n+q*u+t*b;a[6]=s*d+r*l+c*g;a[7]=s*e+r*x+c*h;a[8]=s*n+r*u+c*b;return a}};d.mul=d.multiply;d.translate=function(a,b,c){var d=b[0],e=b[1],n=b[2],l=b[3],x=b[4],u=b[5],g=b[6],h=b[7];b=b[8];var j=c[0];c=c[1];a[0]=d;a[1]=e;a[2]=n;a[3]=l;a[4]=x;a[5]=u;a[6]=j*d+c*l+g;a[7]=j*e+c*x+h;a[8]=j*n+c*u+b;return a};d.rotate=
-function(a,b,c){var d=b[0],e=b[1],n=b[2],l=b[3],x=b[4],u=b[5],g=b[6],h=b[7];b=b[8];var j=Math.sin(c);c=Math.cos(c);a[0]=c*d+j*l;a[1]=c*e+j*x;a[2]=c*n+j*u;a[3]=c*l-j*d;a[4]=c*x-j*e;a[5]=c*u-j*n;a[6]=g;a[7]=h;a[8]=b;return a};d.scale=function(a,b,c){var d=c[0];c=c[1];a[0]=d*b[0];a[1]=d*b[1];a[2]=d*b[2];a[3]=c*b[3];a[4]=c*b[4];a[5]=c*b[5];a[6]=b[6];a[7]=b[7];a[8]=b[8];return a};d.fromMat2d=function(a,b){a[0]=b[0];a[1]=b[1];a[2]=0;a[3]=b[2];a[4]=b[3];a[5]=0;a[6]=b[4];a[7]=b[5];a[8]=1;return a};d.fromQuat=
-function(a,b){var c=b[0],d=b[1],e=b[2],n=b[3],l=c+c,x=d+d,u=e+e,c=c*l,g=d*l,d=d*x,h=e*l,j=e*x,e=e*u,l=n*l,x=n*x,n=n*u;a[0]=1-d-e;a[3]=g-n;a[6]=h+x;a[1]=g+n;a[4]=1-c-e;a[7]=j-l;a[2]=h-x;a[5]=j+l;a[8]=1-c-d;return a};d.normalFromMat4=function(a,b){var c=b[0],d=b[1],e=b[2],n=b[3],l=b[4],x=b[5],u=b[6],g=b[7],h=b[8],j=b[9],m=b[10],i=b[11],k=b[12],q=b[13],t=b[14],s=b[15],r=c*x-d*l,z=c*u-e*l,w=c*g-n*l,A=d*u-e*x,E=d*g-n*x,F=e*g-n*u,G=h*q-j*k,H=h*t-m*k,h=h*s-i*k,I=j*t-m*q,j=j*s-i*q,m=m*s-i*t,i=r*m-z*j+w*I+
-A*h-E*H+F*G;if(!i)return null;i=1/i;a[0]=(x*m-u*j+g*I)*i;a[1]=(u*h-l*m-g*H)*i;a[2]=(l*j-x*h+g*G)*i;a[3]=(e*j-d*m-n*I)*i;a[4]=(c*m-e*h+n*H)*i;a[5]=(d*h-c*j-n*G)*i;a[6]=(q*F-t*E+s*A)*i;a[7]=(t*w-k*F-s*z)*i;a[8]=(k*E-q*w+s*r)*i;return a};d.str=function(a){return"mat3("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+")"};d.frob=function(a){return Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)+Math.pow(a[2],2)+Math.pow(a[3],2)+Math.pow(a[4],2)+Math.pow(a[5],2)+Math.pow(a[6],
-2)+Math.pow(a[7],2)+Math.pow(a[8],2))};"undefined"!==typeof a&&(a.mat3=d);var r={create:function(){var a=new c(16);a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},clone:function(a){var b=new c(16);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},copy:function(a,b){a[0]=b[0];a[1]=b[1];a[2]=
-b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];a[6]=b[6];a[7]=b[7];a[8]=b[8];a[9]=b[9];a[10]=b[10];a[11]=b[11];a[12]=b[12];a[13]=b[13];a[14]=b[14];a[15]=b[15];return a},identity:function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,b){if(a===b){var c=b[1],d=b[2],e=b[3],n=b[6],l=b[7],g=b[11];a[1]=b[4];a[2]=b[8];a[3]=b[12];a[4]=c;a[6]=b[9];a[7]=b[13];a[8]=d;a[9]=n;a[11]=b[14];a[12]=e;a[13]=l;a[14]=g}else a[0]=
-b[0],a[1]=b[4],a[2]=b[8],a[3]=b[12],a[4]=b[1],a[5]=b[5],a[6]=b[9],a[7]=b[13],a[8]=b[2],a[9]=b[6],a[10]=b[10],a[11]=b[14],a[12]=b[3],a[13]=b[7],a[14]=b[11],a[15]=b[15];return a},invert:function(a,b){var c=b[0],d=b[1],e=b[2],n=b[3],l=b[4],g=b[5],u=b[6],h=b[7],j=b[8],m=b[9],i=b[10],k=b[11],q=b[12],t=b[13],s=b[14],r=b[15],z=c*g-d*l,w=c*u-e*l,B=c*h-n*l,A=d*u-e*g,E=d*h-n*g,F=e*h-n*u,G=j*t-m*q,H=j*s-i*q,I=j*r-k*q,L=m*s-i*t,M=m*r-k*t,O=i*r-k*s,D=z*O-w*M+B*L+A*I-E*H+F*G;if(!D)return null;D=1/D;a[0]=(g*O-u*
-M+h*L)*D;a[1]=(e*M-d*O-n*L)*D;a[2]=(t*F-s*E+r*A)*D;a[3]=(i*E-m*F-k*A)*D;a[4]=(u*I-l*O-h*H)*D;a[5]=(c*O-e*I+n*H)*D;a[6]=(s*B-q*F-r*w)*D;a[7]=(j*F-i*B+k*w)*D;a[8]=(l*M-g*I+h*G)*D;a[9]=(d*I-c*M-n*G)*D;a[10]=(q*E-t*B+r*z)*D;a[11]=(m*B-j*E-k*z)*D;a[12]=(g*H-l*L-u*G)*D;a[13]=(c*L-d*H+e*G)*D;a[14]=(t*w-q*A-s*z)*D;a[15]=(j*A-m*w+i*z)*D;return a},adjoint:function(a,b){var c=b[0],d=b[1],e=b[2],n=b[3],l=b[4],g=b[5],h=b[6],j=b[7],m=b[8],i=b[9],k=b[10],q=b[11],t=b[12],s=b[13],r=b[14],z=b[15];a[0]=g*(k*z-q*r)-
-i*(h*z-j*r)+s*(h*q-j*k);a[1]=-(d*(k*z-q*r)-i*(e*z-n*r)+s*(e*q-n*k));a[2]=d*(h*z-j*r)-g*(e*z-n*r)+s*(e*j-n*h);a[3]=-(d*(h*q-j*k)-g*(e*q-n*k)+i*(e*j-n*h));a[4]=-(l*(k*z-q*r)-m*(h*z-j*r)+t*(h*q-j*k));a[5]=c*(k*z-q*r)-m*(e*z-n*r)+t*(e*q-n*k);a[6]=-(c*(h*z-j*r)-l*(e*z-n*r)+t*(e*j-n*h));a[7]=c*(h*q-j*k)-l*(e*q-n*k)+m*(e*j-n*h);a[8]=l*(i*z-q*s)-m*(g*z-j*s)+t*(g*q-j*i);a[9]=-(c*(i*z-q*s)-m*(d*z-n*s)+t*(d*q-n*i));a[10]=c*(g*z-j*s)-l*(d*z-n*s)+t*(d*j-n*g);a[11]=-(c*(g*q-j*i)-l*(d*q-n*i)+m*(d*j-n*g));a[12]=
--(l*(i*r-k*s)-m*(g*r-h*s)+t*(g*k-h*i));a[13]=c*(i*r-k*s)-m*(d*r-e*s)+t*(d*k-e*i);a[14]=-(c*(g*r-h*s)-l*(d*r-e*s)+t*(d*h-e*g));a[15]=c*(g*k-h*i)-l*(d*k-e*i)+m*(d*h-e*g);return a},determinant:function(a){var b=a[0],c=a[1],d=a[2],e=a[3],n=a[4],l=a[5],g=a[6],h=a[7],j=a[8],i=a[9],m=a[10],k=a[11],q=a[12],s=a[13],t=a[14];a=a[15];return(b*l-c*n)*(m*a-k*t)-(b*g-d*n)*(i*a-k*s)+(b*h-e*n)*(i*t-m*s)+(c*g-d*l)*(j*a-k*q)-(c*h-e*l)*(j*t-m*q)+(d*h-e*g)*(j*s-i*q)},multiply:function(a,b,c){var d=b[0],e=b[1],n=b[2],
-l=b[3],g=b[4],h=b[5],j=b[6],i=b[7],m=b[8],k=b[9],q=b[10],s=b[11],t=b[12],r=b[13],z=b[14];b=b[15];var w=c[0],C=c[1],B=c[2],A=c[3];a[0]=w*d+C*g+B*m+A*t;a[1]=w*e+C*h+B*k+A*r;a[2]=w*n+C*j+B*q+A*z;a[3]=w*l+C*i+B*s+A*b;w=c[4];C=c[5];B=c[6];A=c[7];a[4]=w*d+C*g+B*m+A*t;a[5]=w*e+C*h+B*k+A*r;a[6]=w*n+C*j+B*q+A*z;a[7]=w*l+C*i+B*s+A*b;w=c[8];C=c[9];B=c[10];A=c[11];a[8]=w*d+C*g+B*m+A*t;a[9]=w*e+C*h+B*k+A*r;a[10]=w*n+C*j+B*q+A*z;a[11]=w*l+C*i+B*s+A*b;w=c[12];C=c[13];B=c[14];A=c[15];a[12]=w*d+C*g+B*m+A*t;a[13]=
-w*e+C*h+B*k+A*r;a[14]=w*n+C*j+B*q+A*z;a[15]=w*l+C*i+B*s+A*b;return a}};r.mul=r.multiply;r.translate=function(a,b,c){var d=c[0],e=c[1];c=c[2];var n,l,g,h,j,i,m,k,q,s,t,r;b===a?(a[12]=b[0]*d+b[4]*e+b[8]*c+b[12],a[13]=b[1]*d+b[5]*e+b[9]*c+b[13],a[14]=b[2]*d+b[6]*e+b[10]*c+b[14],a[15]=b[3]*d+b[7]*e+b[11]*c+b[15]):(n=b[0],l=b[1],g=b[2],h=b[3],j=b[4],i=b[5],m=b[6],k=b[7],q=b[8],s=b[9],t=b[10],r=b[11],a[0]=n,a[1]=l,a[2]=g,a[3]=h,a[4]=j,a[5]=i,a[6]=m,a[7]=k,a[8]=q,a[9]=s,a[10]=t,a[11]=r,a[12]=n*d+j*e+q*c+
-b[12],a[13]=l*d+i*e+s*c+b[13],a[14]=g*d+m*e+t*c+b[14],a[15]=h*d+k*e+r*c+b[15]);return a};r.scale=function(a,b,c){var d=c[0],e=c[1];c=c[2];a[0]=b[0]*d;a[1]=b[1]*d;a[2]=b[2]*d;a[3]=b[3]*d;a[4]=b[4]*e;a[5]=b[5]*e;a[6]=b[6]*e;a[7]=b[7]*e;a[8]=b[8]*c;a[9]=b[9]*c;a[10]=b[10]*c;a[11]=b[11]*c;a[12]=b[12];a[13]=b[13];a[14]=b[14];a[15]=b[15];return a};r.rotate=function(a,c,d,e){var g=e[0],n=e[1];e=e[2];var l=Math.sqrt(g*g+n*n+e*e),h,j,i,m,k,q,s,t,r,z,w,Q,C,B,A,E,F,G,H,I;if(Math.abs(l)<b)return null;l=1/l;g*=
-l;n*=l;e*=l;h=Math.sin(d);j=Math.cos(d);i=1-j;d=c[0];l=c[1];m=c[2];k=c[3];q=c[4];s=c[5];t=c[6];r=c[7];z=c[8];w=c[9];Q=c[10];C=c[11];B=g*g*i+j;A=n*g*i+e*h;E=e*g*i-n*h;F=g*n*i-e*h;G=n*n*i+j;H=e*n*i+g*h;I=g*e*i+n*h;g=n*e*i-g*h;n=e*e*i+j;a[0]=d*B+q*A+z*E;a[1]=l*B+s*A+w*E;a[2]=m*B+t*A+Q*E;a[3]=k*B+r*A+C*E;a[4]=d*F+q*G+z*H;a[5]=l*F+s*G+w*H;a[6]=m*F+t*G+Q*H;a[7]=k*F+r*G+C*H;a[8]=d*I+q*g+z*n;a[9]=l*I+s*g+w*n;a[10]=m*I+t*g+Q*n;a[11]=k*I+r*g+C*n;c!==a&&(a[12]=c[12],a[13]=c[13],a[14]=c[14],a[15]=c[15]);return a};
-r.rotateX=function(a,b,c){var d=Math.sin(c);c=Math.cos(c);var e=b[4],g=b[5],l=b[6],h=b[7],j=b[8],i=b[9],m=b[10],k=b[11];b!==a&&(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]);a[4]=e*c+j*d;a[5]=g*c+i*d;a[6]=l*c+m*d;a[7]=h*c+k*d;a[8]=j*c-e*d;a[9]=i*c-g*d;a[10]=m*c-l*d;a[11]=k*c-h*d;return a};r.rotateY=function(a,b,c){var d=Math.sin(c);c=Math.cos(c);var e=b[0],g=b[1],l=b[2],h=b[3],j=b[8],i=b[9],m=b[10],k=b[11];b!==a&&(a[4]=b[4],a[5]=b[5],a[6]=b[6],a[7]=b[7],
-a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]);a[0]=e*c-j*d;a[1]=g*c-i*d;a[2]=l*c-m*d;a[3]=h*c-k*d;a[8]=e*d+j*c;a[9]=g*d+i*c;a[10]=l*d+m*c;a[11]=h*d+k*c;return a};r.rotateZ=function(a,b,c){var d=Math.sin(c);c=Math.cos(c);var e=b[0],g=b[1],l=b[2],h=b[3],j=b[4],i=b[5],m=b[6],k=b[7];b!==a&&(a[8]=b[8],a[9]=b[9],a[10]=b[10],a[11]=b[11],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]);a[0]=e*c+j*d;a[1]=g*c+i*d;a[2]=l*c+m*d;a[3]=h*c+k*d;a[4]=j*c-e*d;a[5]=i*c-g*d;a[6]=m*c-l*d;a[7]=k*c-h*d;return a};r.fromRotationTranslation=
-function(a,b,c){var d=b[0],e=b[1],g=b[2],h=b[3],j=d+d,i=e+e,m=g+g;b=d*j;var k=d*i,d=d*m,q=e*i,e=e*m,g=g*m,j=h*j,i=h*i,h=h*m;a[0]=1-(q+g);a[1]=k+h;a[2]=d-i;a[3]=0;a[4]=k-h;a[5]=1-(b+g);a[6]=e+j;a[7]=0;a[8]=d+i;a[9]=e-j;a[10]=1-(b+q);a[11]=0;a[12]=c[0];a[13]=c[1];a[14]=c[2];a[15]=1;return a};r.fromQuat=function(a,b){var c=b[0],d=b[1],e=b[2],g=b[3],h=c+c,j=d+d,i=e+e,c=c*h,m=d*h,d=d*j,k=e*h,q=e*j,e=e*i,h=g*h,j=g*j,g=g*i;a[0]=1-d-e;a[1]=m+g;a[2]=k-j;a[3]=0;a[4]=m-g;a[5]=1-c-e;a[6]=q+h;a[7]=0;a[8]=k+j;
-a[9]=q-h;a[10]=1-c-d;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a};r.frustum=function(a,b,c,d,e,g,h){var j=1/(c-b),i=1/(e-d),m=1/(g-h);a[0]=2*g*j;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=2*g*i;a[6]=0;a[7]=0;a[8]=(c+b)*j;a[9]=(e+d)*i;a[10]=(h+g)*m;a[11]=-1;a[12]=0;a[13]=0;a[14]=2*(h*g)*m;a[15]=0;return a};r.perspective=function(a,b,c,d,e){b=1/Math.tan(b/2);var g=1/(d-e);a[0]=b/c;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=b;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=(e+d)*g;a[11]=-1;a[12]=0;a[13]=0;a[14]=2*e*d*g;a[15]=0;
-return a};r.ortho=function(a,b,c,d,e,g,h){var j=1/(b-c),i=1/(d-e),m=1/(g-h);a[0]=-2*j;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=-2*i;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=2*m;a[11]=0;a[12]=(b+c)*j;a[13]=(e+d)*i;a[14]=(h+g)*m;a[15]=1;return a};r.lookAt=function(a,c,d,e){var g,h,j,i,m,k,q,s,t=c[0],z=c[1];c=c[2];j=e[0];i=e[1];h=e[2];q=d[0];e=d[1];g=d[2];if(Math.abs(t-q)<b&&Math.abs(z-e)<b&&Math.abs(c-g)<b)return r.identity(a);d=t-q;e=z-e;q=c-g;s=1/Math.sqrt(d*d+e*e+q*q);d*=s;e*=s;q*=s;g=i*q-h*e;h=h*d-j*q;j=j*e-i*
-d;(s=Math.sqrt(g*g+h*h+j*j))?(s=1/s,g*=s,h*=s,j*=s):j=h=g=0;i=e*j-q*h;m=q*g-d*j;k=d*h-e*g;(s=Math.sqrt(i*i+m*m+k*k))?(s=1/s,i*=s,m*=s,k*=s):k=m=i=0;a[0]=g;a[1]=i;a[2]=d;a[3]=0;a[4]=h;a[5]=m;a[6]=e;a[7]=0;a[8]=j;a[9]=k;a[10]=q;a[11]=0;a[12]=-(g*t+h*z+j*c);a[13]=-(i*t+m*z+k*c);a[14]=-(d*t+e*z+q*c);a[15]=1;return a};r.str=function(a){return"mat4("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+
-a[15]+")"};r.frob=function(a){return Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)+Math.pow(a[2],2)+Math.pow(a[3],2)+Math.pow(a[4],2)+Math.pow(a[5],2)+Math.pow(a[6],2)+Math.pow(a[7],2)+Math.pow(a[8],2)+Math.pow(a[9],2)+Math.pow(a[10],2)+Math.pow(a[11],2)+Math.pow(a[12],2)+Math.pow(a[13],2)+Math.pow(a[14],2)+Math.pow(a[15],2))};"undefined"!==typeof a&&(a.mat4=r);var m={create:function(){var a=new c(4);a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},q=g.create(),s=g.fromValues(1,0,0),t=g.fromValues(0,1,0);m.rotationTo=
-function(a,b,c){var d=g.dot(b,c);if(-0.999999>d)return g.cross(q,s,b),1E-6>g.length(q)&&g.cross(q,t,b),g.normalize(q,q),m.setAxisAngle(a,q,Math.PI),a;if(0.999999<d)return a[0]=0,a[1]=0,a[2]=0,a[3]=1,a;g.cross(q,b,c);a[0]=q[0];a[1]=q[1];a[2]=q[2];a[3]=1+d;return m.normalize(a,a)};var z=d.create();m.setAxes=function(a,b,c,d){z[0]=c[0];z[3]=c[1];z[6]=c[2];z[1]=d[0];z[4]=d[1];z[7]=d[2];z[2]=-b[0];z[5]=-b[1];z[8]=-b[2];return m.normalize(a,m.fromMat3(a,z))};m.clone=i.clone;m.fromValues=i.fromValues;m.copy=
-i.copy;m.set=i.set;m.identity=function(a){a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.setAxisAngle=function(a,b,c){c*=0.5;var d=Math.sin(c);a[0]=d*b[0];a[1]=d*b[1];a[2]=d*b[2];a[3]=Math.cos(c);return a};m.add=i.add;m.multiply=function(a,b,c){var d=b[0],e=b[1],g=b[2];b=b[3];var h=c[0],j=c[1],i=c[2];c=c[3];a[0]=d*c+b*h+e*i-g*j;a[1]=e*c+b*j+g*h-d*i;a[2]=g*c+b*i+d*j-e*h;a[3]=b*c-d*h-e*j-g*i;return a};m.mul=m.multiply;m.scale=i.scale;m.rotateX=function(a,b,c){c*=0.5;var d=b[0],e=b[1],g=b[2];b=b[3];var h=Math.sin(c);
-c=Math.cos(c);a[0]=d*c+b*h;a[1]=e*c+g*h;a[2]=g*c-e*h;a[3]=b*c-d*h;return a};m.rotateY=function(a,b,c){c*=0.5;var d=b[0],e=b[1],g=b[2];b=b[3];var h=Math.sin(c);c=Math.cos(c);a[0]=d*c-g*h;a[1]=e*c+b*h;a[2]=g*c+d*h;a[3]=b*c-e*h;return a};m.rotateZ=function(a,b,c){c*=0.5;var d=b[0],e=b[1],g=b[2];b=b[3];var h=Math.sin(c);c=Math.cos(c);a[0]=d*c+e*h;a[1]=e*c-d*h;a[2]=g*c+b*h;a[3]=b*c-g*h;return a};m.calculateW=function(a,b){var c=b[0],d=b[1],e=b[2];a[0]=c;a[1]=d;a[2]=e;a[3]=Math.sqrt(Math.abs(1-c*c-d*d-
-e*e));return a};m.dot=i.dot;m.lerp=i.lerp;m.slerp=function(a,b,c,d){var e=b[0],g=b[1],h=b[2];b=b[3];var j=c[0],i=c[1],m=c[2];c=c[3];var k,q,s;q=e*j+g*i+h*m+b*c;0>q&&(q=-q,j=-j,i=-i,m=-m,c=-c);1E-6<1-q?(k=Math.acos(q),s=Math.sin(k),q=Math.sin((1-d)*k)/s,d=Math.sin(d*k)/s):q=1-d;a[0]=q*e+d*j;a[1]=q*g+d*i;a[2]=q*h+d*m;a[3]=q*b+d*c;return a};m.invert=function(a,b){var c=b[0],d=b[1],e=b[2],g=b[3],h=c*c+d*d+e*e+g*g,h=h?1/h:0;a[0]=-c*h;a[1]=-d*h;a[2]=-e*h;a[3]=g*h;return a};m.conjugate=function(a,b){a[0]=
--b[0];a[1]=-b[1];a[2]=-b[2];a[3]=b[3];return a};m.length=i.length;m.len=m.length;m.squaredLength=i.squaredLength;m.sqrLen=m.squaredLength;m.normalize=i.normalize;m.fromMat3=function(a,b){var c=b[0]+b[4]+b[8];if(0<c)c=Math.sqrt(c+1),a[3]=0.5*c,c=0.5/c,a[0]=(b[5]-b[7])*c,a[1]=(b[6]-b[2])*c,a[2]=(b[1]-b[3])*c;else{var d=0;b[4]>b[0]&&(d=1);b[8]>b[3*d+d]&&(d=2);var e=(d+1)%3,g=(d+2)%3,c=Math.sqrt(b[3*d+d]-b[3*e+e]-b[3*g+g]+1);a[d]=0.5*c;c=0.5/c;a[3]=(b[3*e+g]-b[3*g+e])*c;a[e]=(b[3*e+d]+b[3*d+e])*c;a[g]=
-(b[3*g+d]+b[3*d+g])*c}return a};m.str=function(a){return"quat("+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+")"};"undefined"!==typeof a&&(a.quat=m)})(GLMAT);try{module.exports=GLMAT}catch(e$$10){}try{glm.exists&&alert("glm.common.js loaded over exist glm instance: "+glm)}catch(e$$11){}glm=null;GLMJS_PREFIX="glm-js: ";
-GLM={$DEBUG:"undefined"!==typeof $GLM_DEBUG&&$GLM_DEBUG,version:"0.0.6b",GLM_VERSION:96,$outer:{polyfills:GLM_polyfills(),functions:{},intern:function(a,b){if(a)if(void 0===b&&"object"===typeof a)for(var c in a)GLM.$outer.intern(c,a[c]);else return GLM.$DEBUG&&GLM.$outer.console.debug("intern "+a,b&&(b.name||typeof b)),GLM.$outer[a]=b},$import:function(a){GLM.$outer.$import=function(){throw Error("glm.$outer.$import already called...");};GLM.$outer.intern(a.statics);GLM.$template.extend(GLM,GLM.$template["declare<T,V,number>"](a["declare<T,V,number>"]),
-GLM.$template["declare<T,V,...>"](a["declare<T,V,...>"]),GLM.$template["declare<T,...>"](a["declare<T,...>"]),GLM.$template["declare<T>"](a["declare<T>"]));GLM.$init(a)},console:$GLM_reset_logging(),quat_array_from_xyz:function(a){var b=glm.quat(),c=glm.mat3(1);b["*="](glm.angleAxis(a.x,c[0]));b["*="](glm.angleAxis(a.y,c[1]));b["*="](glm.angleAxis(a.z,c[2]));return b.elements},Array:Array,ArrayBuffer:ArrayBuffer,Float32Array:Float32Array,Float64Array:Float64Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,
-Uint32Array:Uint32Array,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,DataView:"undefined"!==typeof DataView&&DataView,$rebindTypedArrays:function(a){var b=Object.keys(GLM.$outer).filter(RegExp.prototype.test.bind(/.Array$|^ArrayBuffer$|^DataView$/)).map(function(b){var e=a.call(this,b,GLM.$outer[b]);e!==GLM.$outer[b]&&(GLM.$outer.console.warn("$rebindTypedArrays("+b+")... replacing"),GLM.$outer[b]=e);return e});GLM.$subarray=GLM.patch_subarray();return b}},$extern:$GLM_extern,$log:$GLM_log,
-GLMJSError:$GLM_GLMJSError("GLMJSError"),_radians:function(a){return a*this.PI/180}.bind(Math),_degrees:function(a){return 180*a/this.PI}.bind(Math),normalize:$GLM_extern("normalize"),inverse:$GLM_extern("inverse"),distance:$GLM_extern("distance"),length:$GLM_extern("length"),length2:$GLM_extern("length2"),transpose:$GLM_extern("transpose"),slerp:$GLM_extern("slerp"),mix:$GLM_extern("mix"),clamp:$GLM_extern("clamp"),angleAxis:$GLM_extern("angleAxis"),rotate:$GLM_extern("rotate"),scale:$GLM_extern("scale"),
-translate:$GLM_extern("translate"),lookAt:$GLM_extern("lookAt"),cross:$GLM_extern("cross"),dot:$GLM_extern("dot"),perspective:function(a,b,c,e){return GLM.$outer.mat4_perspective(a,b,c,e)},ortho:function(a,b,c,e,d,h){return GLM.$outer.mat4_ortho(a,b,c,e,d,h)},_eulerAngles:function(a){return GLM.$outer.vec3_eulerAngles(a)},angle:function(a){return 2*Math.acos(a.w)},axis:function(a){var b=1-a.w*a.w;if(0>=b)return glm.vec3(0,0,1);b=1/Math.sqrt(b);return glm.vec3(a.x*b,a.y*b,a.z*b)},$from_ptr:function(a,
-b,c){if(this!==GLM)throw new GLM.GLMJSError("... use glm.make_<type>() (not new glm.make<type>())");b=new GLM.$outer.Float32Array(b.buffer||b,c||0,a.componentLength);b=new GLM.$outer.Float32Array(b);return new a(b)},make_vec2:function(a,b){return GLM.$from_ptr.call(this,GLM.vec2,a,2===arguments.length?b:a.byteOffset)},make_vec3:function(a,b){return GLM.$from_ptr.call(this,GLM.vec3,a,2===arguments.length?b:a.byteOffset)},make_vec4:function(a,b){return GLM.$from_ptr.call(this,GLM.vec4,a,2===arguments.length?
-b:a.byteOffset)},make_quat:function(a,b){return GLM.$from_ptr.call(this,GLM.quat,a,2===arguments.length?b:a.byteOffset)},make_mat3:function(a,b){return GLM.$from_ptr.call(this,GLM.mat3,a,2===arguments.length?b:a.byteOffset)},make_mat4:function(a,b){return GLM.$from_ptr.call(this,GLM.mat4,a,2===arguments.length?b:a.byteOffset)},diagonal4x4:function(a){if("vec4"!==GLM.$typeof(a))throw new GLM.GLMJSError("unsupported argtype to GLM.diagonal4x4: "+["type:"+GLM.$typeof(a)]);a=a.elements;return new GLM.mat4([a[0],
-0,0,0,0,a[1],0,0,0,0,a[2],0,0,0,0,a[3]])},diagonal3x3:function(a){if("vec3"!==GLM.$typeof(a))throw new GLM.GLMJSError("unsupported argtype to GLM.diagonal3x3: "+["type:"+GLM.$typeof(a)]);a=a.elements;return new GLM.mat3([a[0],0,0,0,a[1],0,0,0,a[2]])},_toMat4:function(a){return new GLM.mat4(GLM.$outer.mat4_array_from_quat(a))},FAITHFUL:!0,to_string:function(a,b){try{var c=a.$type||typeof a;if(!GLM[c])throw new GLM.GLMJSError("unsupported argtype to GLM.to_string: "+["type:"+c,a]);return GLM.FAITHFUL?
-GLM.$to_string(a,b).replace(/[\t\n]/g,""):GLM.$to_string(a,b)}catch(e){return GLM.$DEBUG&&GLM.$outer.console.error("to_string error: ",c,a+"",e),e+""}},$sizeof:function(a){return a.BYTES_PER_ELEMENT},$types:[],$isGLMConstructor:function(a){return!!(a&&a.prototype instanceof GLM.$GLMBaseType)},$getGLMType:function(a){return a instanceof GLM.$GLMBaseType&&a.constructor||"string"===typeof a&&GLM[a]},$isGLMObject:function(a){return!!(a instanceof GLM.$GLMBaseType&&a.$type)},$typeof:function(a){return a instanceof
-GLM.$GLMBaseType?a.$type:"undefined"},$to_array:function(a){return[].slice.call(a.elements)},$to_json:function(a,b,c){this instanceof GLM.$GLMBaseType&&(c=b,b=a,a=this);return JSON.stringify(GLM.$to_object(a),b,c)},$inspect:function(a){this instanceof GLM.$GLMBaseType&&(a=this);return GLM.$to_json(a,null,2)},_clamp:function(a,b,c){return a<b?b:a>c?c:a},_abs:function(a){return Math.abs(a)},_equal:function(a,b){return a===b},_epsilonEqual:function(a,b,c){return Math.abs(a-b)<c},_fract:function(a){return a-
-Math.floor(a)},_frexp:function(){function a(b,c){var e=GLM.$outer.DataView||a._DataView;if(0==b)return c&&Array.isArray(c)?c[0]=c[1]=0:[0,0];e=new e(new GLM.$outer.ArrayBuffer(8));e.setFloat64(0,b);var d=e.getUint32(0)>>>20&2047;0===d&&(e.setFloat64(0,b*Math.pow(2,64)),d=(e.getUint32(0)>>>20&2047)-64);e=d-1022;d=GLM.ldexp(b,-e);return c&&Array.isArray(c)?(c[0]=e,c[1]=d):[d,e]}a._DataView=function(a){this.buffer=a;this.setFloat64=function(a,b){if(0!==a)throw Error("...this is a very limited DataView emulator");
-(new Uint8Array(this.buffer)).set([].reverse.call(new Uint8Array((new Float64Array([b])).buffer)),a)};this.getUint32=function(a){if(0!==a)throw Error("...this is a very limited DataView emulator");return(new Uint32Array((new Uint8Array([].slice.call(new Uint8Array(this.buffer)).reverse())).buffer))[1]}};return a}(),_ldexp:function(a,b){return 1023<b?a*Math.pow(2,1023)*Math.pow(2,b-1023):-1074>b?a*Math.pow(2,-1074)*Math.pow(2,b+1074):a*Math.pow(2,b)},_max:Math.max,_min:Math.min,sqrt:Math.sqrt,__sign:function(a){return 0<
-a?1:0>a?-1:+a},$constants:{epsilon:1E-6,euler:0.5772156649015329,e:Math.E,ln_ten:Math.LN10,ln_two:Math.LN2,pi:Math.PI,half_pi:Math.PI/2,quarter_pi:Math.PI/4,one_over_pi:1/Math.PI,two_over_pi:2/Math.PI,root_pi:Math.sqrt(Math.PI),root_two:Math.sqrt(2),root_three:Math.sqrt(3),two_over_root_pi:2/Math.sqrt(Math.PI),one_over_root_two:Math.SQRT1_2,root_two:Math.SQRT2},FIXEDPRECISION:6,$toFixedString:function(a,b,c,e){void 0===e&&(e=GLM.FIXEDPRECISION);if(!c||!c.map)throw Error("unsupported argtype to $toFixedString(..,..,props="+
-typeof c+")");try{var d="";c.map(function(c){c=b[d=c];if(!c.toFixed)throw Error("!toFixed in w"+[c,a,JSON.stringify(b)]);return c.toFixed(0)})}catch(h){throw GLM.$DEBUG&&GLM.$outer.console.error("$toFixedString error",a,typeof b,Object.prototype.toString.call(b),d),GLM.$DEBUG&&glm.$log("$toFixedString error",a,typeof b,Object.prototype.toString.call(b),d),new GLM.GLMJSError(h);}c=c.map(function(a){return b[a].toFixed(e)});return a+"("+c.join(", ")+")"}};GLM._sign=Math.sign||GLM.__sign;
-for(var p in GLM.$constants)(function(a,b){GLM[b]=function(){return a};GLM[b].valueOf=GLM[b]})(GLM.$constants[p],p);
-GLM.$GLMBaseType=function(){function a(a,c){var e=a.$||{};this.$type=c;this.$type_name=e.name||"<"+c+">";e.components&&(this.$components=e.components[0]);this.$len=this.components=a.componentLength;this.constructor=a;this.byteLength=a.BYTES_PER_ELEMENT;GLM.$types.push(c)}a.prototype={clone:function(){return new this.constructor(new this.elements.constructor(this.elements))},toString:function(){return GLM.$to_string(this)},inspect:function(){return GLM.$inspect(this)},toJSON:function(){return GLM.$to_object(this)}};
-Object.defineProperty(a.prototype,"address",{get:function(){var a=this.elements.byteOffset.toString(16);return"0x00000000".substr(0,10-a.length)+a}});return a}();
-(function(){function a(a,b,c){return a.subarray(b,c||a.length)}function b(a,b,c){var e=a.constructor;c=c||a.length;return new e(a.buffer,a.byteOffset+b*e.BYTES_PER_ELEMENT,c-b)}function c(){var a=new GLM.$outer.Float32Array([0,0]);a.subarray(1).subarray(0)[0]=1;var b=c.result=[a[1],(new GLM.$outer.Float32Array(16)).subarray(12,16).length];return!(a[1]!==b[0]||4!==b[1])}function e(a){var b=new GLM.$outer.Float32Array([0,0]);a(a(b,1),0)[0]=1;a=e.result=[b[1],a(new GLM.$outer.Float32Array(16),12,16).length];
-return!(b[1]!==a[0]||4!==a[1])}Object.defineProperty(GLM,"patch_subarray",{configurable:!0,value:function(){var d=!c()?b:a;d.workaround_broken_spidermonkey_subarray=b;d.native_subarray=a;if(!e(d))throw Error("failed to resolve working TypedArray.subarray implementation... "+e.result);return d}})})();GLM.$subarray=GLM.patch_subarray();
-var GLM_template=GLM.$template={_genArgError:function(a,b,c,e){~e.indexOf(void 0)&&(e=e.slice(0,e.indexOf(void 0)));var d=RegExp.prototype.test.bind(/^[^$_]/);return new GLM.GLMJSError("unsupported argtype to "+b+" "+a.$sig+": [typ="+c+"] :: got arg types: "+e.map(GLM.$template.jstypes.get)+" // supported types: "+Object.keys(a).filter(d).join("||"))},jstypes:{get:function(a){return null===a?"null":void 0===a?"undefined":a.$type||GLM.$template.jstypes[typeof a]||GLM.$template.jstypes[a+""]||function(a){if("object"===
-typeof a){if(a instanceof GLM.$outer.Float32Array)return"Float32Array";if(a instanceof GLM.$outer.ArrayBuffer)return"ArrayBuffer";if(Array.isArray(a))return"array"}return"<unknown "+[typeof a,a]+">"}(a)},"0":"float","boolean":"bool",number:"float",string:"string","[object Float32Array]":"Float32Array","[object ArrayBuffer]":"ArrayBuffer","function":"function"},_add_overrides:function(a,b){for(var c in b)b[c]&&GLM[c].override(a,b[c])},_add_inline_override:function(a,b,c){this[b]=eval(GLM.$template._traceable("glm_"+
-a+"_"+b,c))();return this},_inline_helpers:function(a,b){Object.defineProperty(a,"GLM",{value:GLM});return{$type:"built-in",$type_name:b,$template:a,F:a,dbg:b,override:this._add_inline_override.bind(a,b),link:function(c){var e=a[c];e||(e=a[[c,"undefined"]]);if(!e)throw new GLM.GLMJSError("error linking direct function for "+b+"<"+c+"> or "+b+"<"+[c,void 0]+">");return/\bthis[\[.]/.test(e+"")?e.bind(a):e}}},"template<T>":function(a,b){a.$sig="template<T>";var c=GLM.$template.jstypes,e=GLM.$template._genArgError,
-d=GLM.$GLMBaseType;return this.slingshot(this._inline_helpers(a,b),eval(this._traceable("Tglm_"+b,function(b){this instanceof d&&(b=this);var j=[b&&b.$type||c[typeof b]||c.get(b)||"null"];if(!a[j])throw e(a,arguments.callee.dbg,j,[b]);return a[j](b)}))())},"template<T,...>":function(a,b){a.$sig="template<T,...>";var c=GLM.$template.jstypes,e=GLM.$template._genArgError,d=GLM.$GLMBaseType;return this.slingshot(this._inline_helpers(a,b),eval(this._traceable("Tdotglm_"+b,function(b){for(var j=Array(arguments.length),
-g=0;g<j.length;g++)j[g]=arguments[g];this instanceof d&&j.unshift(b=this);g=[b&&b.$type||c[typeof b]||c.get(b)||"null"];if(!a[g])throw e(a,arguments.callee.dbg,g,j);return a[g].apply(a,j)}))())},"template<T,V,number>":function(a,b){a.$sig="template<T,V,number>";var c=GLM.$template.jstypes,e=GLM.$template._genArgError,d=GLM.GLMJSError,h=GLM.$GLMBaseType;return this.slingshot(this._inline_helpers(a,b),eval(this._traceable("TVnglm_"+b,function(){for(var b=Array(arguments.length),g=0;g<b.length;g++)b[g]=
-arguments[g];this instanceof h&&b.unshift(this);var g=b[0],k=b[1],b=b[2],i=[g&&g.$type||c[typeof g]||c[g+""]||"<unknown "+g+">",k&&k.$type||c[typeof k]||c[k+""]||"<unknown "+k+">"];if(!a[i])throw e(a,arguments.callee.dbg,i,[g,k,b]);if("number"!==typeof b)throw new d(arguments.callee.dbg+a.$sig+": unsupported n type: "+[typeof b,b]);return a[i](g,k,b)}))())},"template<T,V,...>":function(a,b){a.$sig="template<T,V,...>";var c=GLM.$template.jstypes,e=GLM.$GLMBaseType,d=GLM.$template._genArgError,h=GLM.$outer.Array;
-return this.slingshot(this._inline_helpers(a,b),eval(this._traceable("TVglm_"+b,function(){for(var b=new h(arguments.length),g=0;g<b.length;g++)b[g]=arguments[g];this instanceof e&&b.unshift(this);var g=b[0],k=b[1],g=[g&&g.$type||c[typeof g],k&&k.$type||c[typeof k]||c[k+""]||h.isArray(k)&&"array"+k.length+""||""+k+""];if(!a[g])throw d(a,arguments.callee.dbg,g,b);return a[g].apply(a,b)}))())},override:function(a,b,c,e,d){function h(a,c){GLM.$outer.console.debug("glm.$template.override: "+b+" ... "+
-Object.keys(a.$template).filter(function(a){return!~a.indexOf("$")}).map(function(a){return!~c.indexOf(a)?"*"+a+"*":a}).join(" | "))}GLM.$DEBUG&&GLM.$outer.console.debug("glm.$template.override: ",a,b,c.$op?'$op: ["'+c.$op+'"]':"");if(!e)throw Error("unspecified target group "+e+' (expected override(<TV>, "p", {TSP}, ret={GROUP}))');var j=e[b];if(j&&j.$op!==c.$op)throw Error('glm.$template.override: mismatch merging existing override: .$op "'+[j.$op,"!=",c.$op].join(" ")+'" p='+[b,j.$op,c.$op,"||"+
-Object.keys(j.$template).join("||")]);var g=GLM.$template[a](GLM.$template.deNify(c,b),b);if(j&&j.F.$sig!==g.F.$sig)throw Error('glm.$template.override: mismatch merging existing override: .$sig "'+[j&&j.F.$sig,"!=",g.F.$sig].join(" ")+'" p='+[b,j&&j.F.$sig,g.F.$sig,"||"+Object.keys(j&&j.$template||{}).join("||")]);g.$op=c.$op;if(j){for(var k in g.$template)"$op"===k||"$sig"===k||(a=k in j.$template,!a||!0===d?(GLM.$DEBUG&&GLM.$outer.console.debug("glm.$template.override: "+b+" ... "+k+" merged"),
-j.$template[k]=g.$template[k]):a&&GLM.$DEBUG&&GLM.$outer.console.debug("glm.$template.override: "+b+" ... "+k+" skipped"));if(GLM.$DEBUG){var i=[];Object.keys(j.$template).forEach(function(a){a in g.$template||(GLM.$DEBUG&&GLM.$outer.console.debug("glm.$template.override: "+b+" ... "+a+" carried-forward"),i.push(a))});h(e[b],i)}}else e[b]=g,GLM.$DEBUG&&h(e[b],[]);return e},_override:function(a,b,c){for(var e in b){if("mat4_scale"!==e&&"object"!==typeof b[e])throw new GLM.GLMJSError("expect object property overrides"+
-[e,b[e],Object.keys(c)]);"object"===typeof b[e]?this.override(a,e,b[e],c,!0):ret_scale=5}return c},slingshot:function(){return this.extend.apply(this,[].reverse.call(arguments))},extend:function(a,b){[].slice.call(arguments,1).forEach(function(b){if(b)for(var e in b)b.hasOwnProperty(e)&&(a[e]=b[e])});return a},"declare<T,V,...>":function(a){return!a?{}:this._override("template<T,V,...>",a,GLM.$outer.functions)},"declare<T>":function(a){return!a?{}:this._override("template<T>",a,GLM.$outer.functions)},
-"declare<T,...>":function(a){return!a?{}:this._override("template<T,...>",a,GLM.$outer.functions)},"declare<T,V,number>":function(a){return!a?{}:this._override("template<T,V,number>",a,GLM.$outer.functions)},_tojsname:function(a){return(a||"_").replace(/[^$a-zA-Z0-9_]/g,"_")},_traceable:function(a,b){var c=b;if("function"!==typeof c)throw new GLM.GLMJSError("_traceable expects tidy function as second arg "+c);if(!a)throw new GLM.GLMJSError("_traceable expects hint or what's the point"+[c,a]);a=this._tojsname(a||
-"_traceable");c=c.toString().replace(/^(\s*var\s*(\w+)\s*=\s*)__VA_ARGS__;/mg,function(a,b,c){return b+"new Array(arguments.length);for(var I=0;I<varname.length;I++)varname[I]=arguments[I];".replace(/I/g,"__VA_ARGS__I").replace(/varname/g,c)}).replace(/\barguments[.]callee\b/g,a);if(/^function _traceable/.test(c))throw new GLM.GLMJSError("already wrapped in a _traceable: "+[c,a]);c='function _traceable(){ "use strict"; SRC; return HINT; }'.replace("HINT",a.replace(/[$]/g,"$$$$")).replace("SRC",c.replace(/[$]/g,
-"$$$$").replace(/^function\s*\(/,"function "+a+"("));c="1,"+c;if(GLM.$DEBUG)try{eval(c)}catch(e){throw console.error("_traceable error",a,c,b,e),e;}return c},deNify:function(a,b){var c={vec:[2,3,4],mat:[3,4]},e=this._tojsname.bind(this),d;for(d in a){var h=!1;d.replace(/([vV]ec|[mM]at)(?:\w*)<N>/,function(j,g){h=!0;var k=a[d];delete a[d];c[g.toLowerCase()].forEach(function(c){var g=d.replace(/<N[*]N>/g,c*c).replace(/<N>/g,c);if(!(g in a)){var h=e("glm_"+b+"_"+g);a[g]=eval("'use strict'; 1,"+(k+"").replace(/^function\s*\(/,
-"function "+h+"(").replace(/N[*]N/g,c*c).replace(/N/g,c))}})}.bind(this));/^[$]/.test(d)?GLM.$DEBUG&&GLM.$outer.console.debug("@ NOT naming "+d):!h&&("function"===typeof a[d]&&!a[d].name)&&(GLM.$DEBUG&&GLM.$outer.console.debug("naming "+e(b+"_"+d)),a[d]=eval(this._traceable("glm_"+b+"_"+d,a[d]))())}return a},$_module_stamp:+new Date,_iso:"/[*][^/*]*[*]/",_get_argnames:function(a){return(a+"").replace(/\s+/g,"").replace(RegExp(this._iso,"g"),"").split("){",1)[0].replace(/^[^(]*[(]/,"").replace(/=[^,]+/g,
-"").split(",").filter(Boolean)},_fix_$_names:function(a,b){Object.keys(b).filter(function(a){return"function"===typeof b[a]&&!b[a].name}).map(function(c){var e=a+"_"+c;GLM.$DEBUG&&GLM.$outer.console.debug("naming $."+c+" == "+e,this._traceable(e,b[c]));b[c]=eval(this._traceable("glm_"+e,b[c]))()}.bind(this));return b},_typedArrayMaker:function(a,b){return function(c){if(c.length===a)return new b(c);var e=new b(a);e.set(c);return e}},GLMType:function(a,b){var c=this._fix_$_names(a,b),e=c.identity.length,
-d,h=Object,j=GLM.$template._get_argnames.bind(GLM.$template),g=GLM.GLMJSError,k={},i;for(i in c)"function"===typeof c[i]&&function(a){k[i]=function(b){return a.apply(c,b)}}(c[i]);d=function(b){var d=k[typeof b[0]+b.length];if(!d){var e="glm."+a;b=e+"("+b.map(function(a){return typeof a})+")";d=h.keys(c).filter(function(a){return"function"===typeof c[a]&&/^\w+\d+$/.test(a)}).map(function(a){return e+"("+j(c[a])+")"});throw new g("no constructor found for: "+b+"\nsupported signatures:\n\t"+d.join("\n\t"));
-}return d};var w,r=GLM;GLM.$template._get_argnames.bind(GLM.$template);w=function(b,c){2<r.$DEBUG&&r.$outer.console.info("adopting elements...",typeof b);if(b.length!=e){if(!1===c)return c;r.$outer.console.error(a+" elements size mismatch: "+["wanted:"+e,"handed:"+b.length]);var d=r.$subarray(b,0,e);throw new r.GLMJSError(a+" elements size mismatch: "+["wanted:"+e,"handed:"+b.length,"theoreticaly-correctable?:"+(d.length===e)]);}return b};var m=this._typedArrayMaker(e,GLM.$outer.Float32Array),q,s=
-GLM.$outer;q=function(a){return a instanceof s.Float32Array};var t=function(a,b,c,g,h,i,j,k){return eval(k("glm_"+h+"$class",function(c){for(var f=new a(arguments.length),g=0;g<f.length;g++)f[g]=arguments[g];var h=d(f),g=t;if(this instanceof g)f=q(c)?w(c):m(h(f)),b.defineProperty(this,"elements",{enumerable:!1,configurable:!0,value:f});else return f=q(c)&&c.length===e?m(c):h(f),new g(f)}))()}(Array,Object,GLM,c,a,GLM.$template._get_argnames.bind(GLM.$template),GLM.GLMJSError,GLM.$template._traceable.bind(GLM.$template));
-c.components=c.components?c.components.map(function(a){return"string"===typeof a?a.split(""):a}):[];t.$=c;t.componentLength=e;t.BYTES_PER_ELEMENT=e*GLM.$outer.Float32Array.BYTES_PER_ELEMENT;t.prototype=new GLM.$GLMBaseType(t,a);t.toJSON=function(){var b={glm$type:a,glm$class:t.prototype.$type_name,glm$eg:(new t).object},c;for(c in t)/function |^[$]/.test(c+t[c])||(b[c]=t[c]);return b};return t}};
-GLM.$template["declare<T,V,...>"]({cross:{"vec2,vec2":function(a,b){return this.GLM.vec3(0,0,a.x*b.y-a.y*b.x)}},distance:{"vec<N>,vec<N>":function(a,b){return this.GLM.length(b.sub(a))}}});
-GLM.$template["declare<T,V,number>"]({mix:{"float,float":function(a,b,c){return b*c+a*(1-c)},"vec<N>,vec<N>":function(a,b,c){var e=1-c,d=new this.GLM.vecN(new a.elements.constructor(N)),h=d.elements;a=a.elements;b=b.elements;for(var j=0;j<N;j++)h[j]=b[j]*c+a[j]*e;return d}},clamp:{"float,float":function(a,b,c){return GLM._clamp(a,b,c)},"vec<N>,float":function(a,b,c){return new GLM.vecN(GLM.$to_array(a).map(function(a){return GLM._clamp(a,b,c)}))}},epsilonEqual:{"float,float":GLM._epsilonEqual,"vec<N>,vec<N>":function(a,
-b,c){for(var e=this["float,float"],d=glm.bvecN(),h=0;h<N;h++)d[h]=e(a[h],b[h],c);return d},"ivec<N>,ivec<N>":function(a,b,c){return this["vecN,vecN"](a,b,c)},"uvec<N>,uvec<N>":function(a,b,c){return this["vecN,vecN"](a,b,c)},"quat,quat":function(a,b,c){for(var e=this["float,float"],d=glm.bvec4(),h=0;4>h;h++)d[h]=e(a[h],b[h],c);return d},"mat<N>,mat<N>":function(){throw new GLM.GLMJSError("error: 'epsilonEqual' only accept floating-point and integer scalar or vector inputs");}}});
-GLM.$template.extend(GLM,GLM.$template["declare<T>"]({degrees:{"float":function(a){return this.GLM._degrees(a)},"vec<N>":function(a){return new this.GLM.vecN(this.GLM.$to_array(a).map(this.GLM._degrees))}},radians:{"float":function(a){return this.GLM._radians(a)},"vec<N>":function(a){return new this.GLM.vecN(this.GLM.$to_array(a).map(this.GLM._radians))}},sign:{"null":function(){return 0},undefined:function(){return NaN},string:function(){return NaN},"float":function(a){return GLM._sign(a)},"vec<N>":function(a){return new GLM.vecN(GLM.$to_array(a).map(GLM._sign))},
-"ivec<N>":function(a){return new GLM.ivecN(GLM.$to_array(a).map(GLM._sign))}},abs:{"float":function(a){return GLM._abs(a)},"vec<N>":function(a){return new GLM.vecN(GLM.$to_array(a).map(GLM._abs))}},fract:{"float":function(a){return GLM._fract(a)},"vec<N>":function(a){return new GLM.vecN(GLM.$to_array(a).map(GLM._fract))}},all:{"vec<N>":function(a){return N===GLM.$to_array(a).filter(Boolean).length},"bvec<N>":function(a){return N===GLM.$to_array(a).filter(Boolean).length},"ivec<N>":function(a){return N===
-GLM.$to_array(a).filter(Boolean).length},"uvec<N>":function(a){return N===GLM.$to_array(a).filter(Boolean).length},quat:function(a){return 4===GLM.$to_array(a).filter(Boolean).length}},$to_object:{vec2:function(a){return{x:a.x,y:a.y}},vec3:function(a){return{x:a.x,y:a.y,z:a.z}},vec4:function(a){return{x:a.x,y:a.y,z:a.z,w:a.w}},uvec2:function(a){return{x:a.x,y:a.y}},uvec3:function(a){return{x:a.x,y:a.y,z:a.z}},uvec4:function(a){return{x:a.x,y:a.y,z:a.z,w:a.w}},ivec2:function(a){return{x:a.x,y:a.y}},
-ivec3:function(a){return{x:a.x,y:a.y,z:a.z}},ivec4:function(a){return{x:a.x,y:a.y,z:a.z,w:a.w}},bvec2:function(a){return{x:!!a.x,y:!!a.y}},bvec3:function(a){return{x:!!a.x,y:!!a.y,z:!!a.z}},bvec4:function(a){return{x:!!a.x,y:!!a.y,z:!!a.z,w:!!a.w}},quat:function(a){return{w:a.w,x:a.x,y:a.y,z:a.z}},mat3:function(a){return{"0":this.vec3(a[0]),1:this.vec3(a[1]),2:this.vec3(a[2])}},mat4:function(a){return{"0":this.vec4(a[0]),1:this.vec4(a[1]),2:this.vec4(a[2]),3:this.vec4(a[3])}}},roll:{$atan2:Math.atan2,
-quat:function(a){return this.$atan2(2*(a.x*a.y+a.w*a.z),a.w*a.w+a.x*a.x-a.y*a.y-a.z*a.z)}},pitch:{$atan2:Math.atan2,quat:function(a){return this.$atan2(2*(a.y*a.z+a.w*a.x),a.w*a.w-a.x*a.x-a.y*a.y+a.z*a.z)}},yaw:{$asin:Math.asin,quat:function(a){return this.$asin(this.GLM.clamp(-2*(a.x*a.z-a.w*a.y),-1,1))}},eulerAngles:{quat:function(a){return this.GLM.vec3(this.GLM.pitch(a),this.GLM.yaw(a),this.GLM.roll(a))}}}),GLM.$template["declare<T,...>"]({$from_glsl:{string:function(a,b){var c;a.replace(/^([$\w]+)\(([-.0-9ef, ]+)\)$/,
-function(a,d,h){a=glm[d]||glm["$"+d];if(!a)throw new GLM.GLMJSError("glsl decoding issue: unknown type '"+d+"'");c=h.split(",").map(parseFloat);if(!b||b===a)c=a.apply(glm,c);else{if(!0===b||b===Array){for(;c.length<a.componentLength;)c.push(c[c.length-1]);return c}throw new GLM.GLMJSError("glsl decoding issue: second argument expected to be undefined|true|Array");}});return c}},$to_glsl:{"vec<N>":function(a,b){var c=GLM.$to_array(a);b&&("object"===typeof b&&"precision"in b)&&(c=c.map(function(a){return a.toFixed(b.precision)}));
-for(;c.length&&c[c.length-2]===c[c.length-1];)c.pop();return a.$type+"("+c+")"},"uvec<N>":function(a,b){return this.vecN(a,b)},"ivec<N>":function(a,b){return this.vecN(a,b)},"bvec<N>":function(a,b){return this.vecN(a,b)},quat:function(a,b){var c;b&&("object"===typeof b&&"precision"in b)&&(c=b.precision);return 0===a.x+a.y+a.z?"quat("+(void 0===c?a.w:a.w.toFixed(c))+")":this.vec4(a,b)},"mat<N>":function(a,b){var c;b&&("object"===typeof b&&"precision"in b)&&(c=b.precision);var e=GLM.$to_array(a);void 0!==
-c&&(e=e.map(function(a){return a.toFixed(c)}));return e.reduce(function(a,b){return a+1*b},0)===e[0]*N?"matN("+e[0]+")":"matN("+e+")"}},frexp:{"float":function(a,b){return 1===arguments.length?this["float,undefined"](a):this["float,array"](a,b)},"vec<N>":function(a,b){if(2>arguments.length)throw new GLM.GLMJSError("frexp(vecN, ivecN) expected ivecN as second parameter");return GLM.vecN(GLM.$to_array(a).map(function(a,e){var d=GLM._frexp(a);b[e]=d[1];return d[0]}))},"float,undefined":function(a){return GLM._frexp(a)},
-"float,array":function(a,b){return GLM._frexp(a,b)}},ldexp:{"float":GLM._ldexp,"vec<N>":function(a,b){return GLM.vecN(GLM.$to_array(a).map(function(a,e){return GLM._ldexp(a,b[e])}))}}}));
-GLM.$template["declare<T,V,...>"]({rotate:{"float,vec3":function(a,b){return this.GLM.$outer.mat4_angleAxis(a,b)},"mat4,float":function(a,b,c){return a.mul(this.GLM.$outer.mat4_angleAxis(b,c))}},scale:{$outer:GLM.$outer,"mat4,vec3":function(a,b){return a.mul(this.$outer.mat4_scale(b))},"vec3,undefined":function(a){return this.$outer.mat4_scale(a)}},translate:{"mat4,vec3":function(a,b){return a.mul(this.GLM.$outer.mat4_translation(b))},"vec3,undefined":function(a){return this.GLM.$outer.mat4_translation(a)}},
-angleAxis:{"float,vec3":function(a,b){return this.GLM.$outer.quat_angleAxis(a,b)}},min:{"float,float":function(a,b){return this.GLM._min(a,b)},"vec<N>,float":function(a,b){return new this.GLM.vecN(this.GLM.$to_array(a).map(function(a){return this.GLM._min(a,b)}.bind(this)))}},max:{"float,float":function(a,b){return this.GLM._max(a,b)},"vec<N>,float":function(a,b){return new this.GLM.vecN(this.GLM.$to_array(a).map(function(a){return this.GLM._max(a,b)}.bind(this)))}},equal:{"float,float":GLM._equal,
-"vec<N>,vec<N>":function(a,b){for(var c=this["float,float"],e=glm.bvecN(),d=0;d<N;d++)e[d]=c(a[d],b[d]);return e},"bvec<N>,bvec<N>":function(a,b){return this["vecN,vecN"](a,b)},"ivec<N>,ivec<N>":function(a,b){return this["vecN,vecN"](a,b)},"uvec<N>,uvec<N>":function(a,b){return this["vecN,vecN"](a,b)},"quat,quat":function(a,b){for(var c=this["float,float"],e=glm.bvec4(),d=0;4>d;d++)e[d]=c(a[d],b[d]);return e}},_slerp:{"quat,quat":function(a,b,c){var e=b,d=glm.dot(glm.vec4(a),glm.vec4(b));0>d&&(e=
-b.mul(-1),d=-d);if(d>1-glm.epsilon())return glm.quat(glm.mix(a.w,e.w,c),glm.mix(a.x,e.x,c),glm.mix(a.y,e.y,c),glm.mix(a.z,e.z,c));b=Math.acos(d);return(a.mul(Math.sin((1-c)*b))+e.mul(Math.sin(c*b)))/Math.sin(b)}},rotation:{"vec3,vec3":function(a,b){var c=this.$dot(a,b),e=new a.constructor(new a.elements.constructor(3));if(c>=1-this.$epsilon)return this.$quat();if(c<-1+this.$epsilon)return e=this.$cross(this.$m[2],a),this.$length2(e)<this.$epsilon&&(e=this.$cross(this.$m[0],a)),e=this.$normalize(e),
-this.$angleAxis(this.$pi,e);var e=this.$cross(a,b),c=this.$sqrt(2*(1+c)),d=1/c;return this.$quat(0.5*c,e.x*d,e.y*d,e.z*d)}},project:{"vec3,mat4":function(a,b,c,e){a=glm.vec4(a,1);a=b["*"](a);a=c["*"](a);a["/="](a.w);a=a["*"](0.5)["+"](0.5);a[0]=a[0]*e[2]+e[0];a[1]=a[1]*e[3]+e[1];return glm.vec3(a)}},unProject:{"vec3,mat4":function(a,b,c,e){b=glm.inverse(c["*"](b));a=glm.vec4(a,1);a.x=(a.x-e[0])/e[2];a.y=(a.y-e[1])/e[3];a=a["*"](2)["-"](glm.vec4(1));e=b["*"](a);e["/="](e.w);return glm.vec3(e)}},orientedAngle:{"vec3,vec3":function(a,
-b,c){var e=Math.acos(glm.clamp(glm.dot(a,b),0,1));return glm.mix(e,-e,0>glm.dot(c,glm.cross(a,b))?1:0)}}});
-GLM.$to_string=GLM.$template["declare<T,...>"]({$to_string:{"function":function(a){return"[function "+(a.name||"anonymous")+"]"},ArrayBuffer:function(a){return"[object ArrayBuffer "+JSON.stringify({byteLength:a.byteLength})+"]"},Float32Array:function(a){return"[object Float32Array "+JSON.stringify({length:a.length,byteOffset:a.byteOffset,byteLength:a.byteLength,BPE:a.BYTES_PER_ELEMENT})+"]"},"float":function(a,b){return GLM.$toFixedString("float",{value:a},["value"],b&&b.precision)},string:function(a){return a},
-bool:function(a){return"bool("+a+")"},"vec<N>":function(a,b){return GLM.$toFixedString(a.$type_name,a,a.$components,b&&b.precision)},"uvec<N>":function(a,b){return GLM.$toFixedString(a.$type_name,a,a.$components,b&&"object"===typeof b&&b.precision||0)},"ivec<N>":function(a,b){return GLM.$toFixedString(a.$type_name,a,a.$components,b&&"object"===typeof b&&b.precision||0)},"bvec<N>":function(a){return a.$type_name+"("+GLM.$to_array(a).map(Boolean).join(", ")+")"},"mat<N>":function(a,b){var c=[0,1,2,
-3].slice(0,N).map(function(b){return a[b]}).map(function(a){return GLM.$toFixedString("\t",a,a.$components,b&&b.precision)});return a.$type_name+"(\n"+c.join(", \n")+"\n)"},quat:function(a,b){a=GLM.degrees(GLM.eulerAngles(a));return GLM.$toFixedString("<quat>"+a.$type_name,a,["x","y","z"],b&&b.precision)}}}).$to_string;
-GLM.$template["declare<T,V,...>"]({copy:{$op:"=","vec<N>,vec<N>":function(a,b){a.elements.set(b.elements);return a},"vec<N>,array<N>":function(a,b){a.elements.set(b);return a},"vec<N>,uvec<N>":function(a,b){a.elements.set(b.elements);return a},"vec<N>,ivec<N>":function(a,b){a.elements.set(b.elements);return a},"vec<N>,bvec<N>":function(a,b){a.elements.set(b.elements);return a},"uvec<N>,uvec<N>":function(a,b){a.elements.set(b.elements);return a},"uvec<N>,array<N>":function(a,b){a.elements.set(b);return a},
-"uvec<N>,vec<N>":function(a,b){a.elements.set(b.elements);return a},"uvec<N>,ivec<N>":function(a,b){a.elements.set(b.elements);return a},"uvec<N>,bvec<N>":function(a,b){a.elements.set(b.elements);return a},"ivec<N>,ivec<N>":function(a,b){a.elements.set(b.elements);return a},"ivec<N>,array<N>":function(a,b){a.elements.set(b);return a},"ivec<N>,vec<N>":function(a,b){a.elements.set(b.elements);return a},"ivec<N>,uvec<N>":function(a,b){a.elements.set(b.elements);return a},"ivec<N>,bvec<N>":function(a,
-b){a.elements.set(b.elements);return a},"bvec<N>,ivec<N>":function(a,b){a.elements.set(b.elements);return a},"bvec<N>,array<N>":function(a,b){a.elements.set(b);return a},"bvec<N>,vec<N>":function(a,b){a.elements.set(b.elements);return a},"bvec<N>,uvec<N>":function(a,b){a.elements.set(b.elements);return a},"bvec<N>,bvec<N>":function(a,b){a.elements.set(b.elements);return a},"quat,quat":function(a,b){a.elements.set(b.elements);return a},"mat<N>,mat<N>":function(a,b){a.elements.set(b.elements);return a},
-"mat<N>,array<N>":function(a,b){b=b.reduce(function(a,b){if(!a.concat)throw new GLM.GLMJSError("matN,arrayN -- [[.length===4] x 4] expected");return a.concat(b)});if(b===N)throw new GLM.GLMJSError("matN,arrayN -- [[N],[N],[N],[N]] expected");return a["="](b)},"mat<N>,array<N*N>":function(a,b){a.elements.set(b);return a},"mat4,array9":function(a,b){a.elements.set((new GLM.mat4(b)).elements);return a}},sub:{$op:"-",_sub:function(a,b){return this.GLM.$to_array(a).map(function(a,e){return a-b[e]})},"vec<N>,vec<N>":function(a,
-b){return new this.GLM.vecN(this._sub(a,b))},"vec<N>,uvec<N>":function(a,b){return new this.GLM.vecN(this._sub(a,b))},"uvec<N>,uvec<N>":function(a,b){return new this.GLM.uvecN(this._sub(a,b))},"uvec<N>,ivec<N>":function(a,b){return new this.GLM.uvecN(this._sub(a,b))},"vec<N>,ivec<N>":function(a,b){return new this.GLM.vecN(this._sub(a,b))},"ivec<N>,uvec<N>":function(a,b){return new this.GLM.ivecN(this._sub(a,b))},"ivec<N>,ivec<N>":function(a,b){return new this.GLM.ivecN(this._sub(a,b))}},sub_eq:{$op:"-=",
-"vec<N>,vec<N>":function(a,b){for(var c=a.elements,e=b.elements,d=0;d<N;d++)c[d]-=e[d];return a},"vec<N>,uvec<N>":function(a,b){return this["vecN,vecN"](a,b)},"uvec<N>,uvec<N>":function(a,b){return this["vecN,vecN"](a,b)},"uvec<N>,ivec<N>":function(a,b){return this["vecN,vecN"](a,b)},"vec<N>,ivec<N>":function(a,b){return this["vecN,vecN"](a,b)},"ivec<N>,ivec<N>":function(a,b){return this["vecN,vecN"](a,b)},"ivec<N>,uvec<N>":function(a,b){return this["vecN,vecN"](a,b)}},add:{$op:"+",_add:function(a,
-b){return this.GLM.$to_array(a).map(function(a,e){return a+b[e]})},"vec<N>,float":function(a,b){return new this.GLM.vecN(this._add(a,[b,b,b,b]))},"vec<N>,vec<N>":function(a,b){return new this.GLM.vecN(this._add(a,b))},"vec<N>,uvec<N>":function(a,b){return new this.GLM.vecN(this._add(a,b))},"uvec<N>,uvec<N>":function(a,b){return new this.GLM.uvecN(this._add(a,b))},"uvec<N>,ivec<N>":function(a,b){return new this.GLM.uvecN(this._add(a,b))},"vec<N>,ivec<N>":function(a,b){return new this.GLM.vecN(this._add(a,
-b))},"ivec<N>,ivec<N>":function(a,b){return new this.GLM.ivecN(this._add(a,b))},"ivec<N>,uvec<N>":function(a,b){return new this.GLM.ivecN(this._add(a,b))}},add_eq:{$op:"+=","vec<N>,vec<N>":function(a,b){for(var c=a.elements,e=b.elements,d=0;d<N;d++)c[d]+=e[d];return a},"vec<N>,uvec<N>":function(a,b){return this["vecN,vecN"](a,b)},"uvec<N>,uvec<N>":function(a,b){return this["vecN,vecN"](a,b)},"uvec<N>,ivec<N>":function(a,b){return this["vecN,vecN"](a,b)},"vec<N>,ivec<N>":function(a,b){return this["vecN,vecN"](a,
-b)},"ivec<N>,ivec<N>":function(a,b){return this["vecN,vecN"](a,b)},"ivec<N>,uvec<N>":function(a,b){return this["vecN,vecN"](a,b)}},div:{$op:"/","vec<N>,float":function(a,b){return new this.GLM.vecN(this.GLM.$to_array(a).map(function(a){return a/b}))}},div_eq:{$op:"/=","vec<N>,float":function(a,b){for(var c=0;c<N;c++)a.elements[c]/=b;return a}},mul:{$op:"*","vec<N>,vec<N>":function(a,b){return new this.GLM.vecN(this.GLM.$to_array(a).map(function(a,e){return a*b[e]}))}},eql_epsilon:function(a){return{$op:"~=",
-"vec<N>,vec<N>":a,"mat<N>,mat<N>":a,"quat,quat":a,"uvec<N>,uvec<N>":a,"ivec<N>,ivec<N>":a}}(function(a,b){return this.GLM.all(this.GLM.epsilonEqual(a,b,this.GLM.epsilon()))}),eql:function(a){return{$op:"==","mat<N>,mat<N>":function(a,c){return c.elements.length===glm.$to_array(a).filter(function(a,b){return a===c.elements[b]}).length},"vec<N>,vec<N>":a,"quat,quat":a,"uvec<N>,uvec<N>":a,"ivec<N>,ivec<N>":a,"bvec<N>,bvec<N>":a}}(function(a,b){return GLM.all(GLM.equal(a,b))})});
-GLM.string={$type_name:"string",$:{}};GLM.number={$type_name:"float",$:{}};GLM["boolean"]={$type:"bool",$type_name:"bool",$:{}};
-GLM.vec2=GLM.$template.GLMType("vec2",{name:"fvec2",identity:[0,0],components:["xy","01"],undefined0:function(){return this.identity},number1:function(a){return[a,a]},number2:function(a,b){return[a,b]},object1:function(a){if(null!==a)switch(a.length){case 4:case 3:case 2:return[a[0],a[1]];default:if("y"in a&&"x"in a){if(typeof a.x!==typeof a.y)throw new GLM.GLMJSError("unrecognized .x-ish object passed to GLM.vec2: "+a);return"string"===typeof a.x?[1*a.x,1*a.y]:[a.x,a.y]}}throw new GLM.GLMJSError("unrecognized object passed to GLM.vec2: "+
-a);}});
-GLM.uvec2=GLM.$template.GLMType("uvec2",{name:"uvec2",identity:[0,0],components:["xy","01"],_clamp:function(a){return~~a},undefined0:function(){return this.identity},number1:function(a){a=this._clamp(a);return[a,a]},number2:function(a,b){a=this._clamp(a);b=this._clamp(b);return[a,b]},object1:function(a){switch(a.length){case 4:case 3:case 2:return[a[0],a[1]].map(this._clamp);default:if("y"in a&&"x"in a){if(typeof a.x!==typeof a.y)throw new GLM.GLMJSError("unrecognized .x-ish object passed to GLM."+this.name+
-": "+a);return[a.x,a.y].map(this._clamp)}}throw new GLM.GLMJSError("unrecognized object passed to GLM."+this.name+": "+a);}});
-GLM.vec3=GLM.$template.GLMType("vec3",{name:"fvec3",identity:[0,0,0],components:["xyz","012","rgb"],undefined0:function(){return GLM.vec3.$.identity},number1:function(a){return[a,a,a]},number2:function(a,b){return[a,b,b]},number3:function(a,b,c){return[a,b,c]},Error:GLM.GLMJSError,object1:function(a){if(a)switch(a.length){case 4:case 3:return[a[0],a[1],a[2]];case 2:return[a[0],a[1],a[1]];default:if("z"in a&&"x"in a){if(typeof a.x!==typeof a.y)throw new this.Error("unrecognized .x-ish object passed to GLM.vec3: "+
-a);return"string"===typeof a.x?[1*a.x,1*a.y,1*a.z]:[a.x,a.y,a.z]}}throw new this.Error("unrecognized object passed to GLM.vec3: "+a);},object2:function(a,b){if(a instanceof GLM.vec2||a instanceof GLM.uvec2||a instanceof GLM.ivec2||a instanceof GLM.bvec2)return[a.x,a.y,b];throw new GLM.GLMJSError("unrecognized object passed to GLM.vec3(o,z): "+[a,b]);}});
-GLM.uvec3=GLM.$template.GLMType("uvec3",{name:"uvec3",identity:[0,0,0],components:["xyz","012"],_clamp:GLM.uvec2.$._clamp,undefined0:function(){return this.identity},number1:function(a){a=this._clamp(a);return[a,a,a]},number2:function(a,b){a=this._clamp(a);b=this._clamp(b);return[a,b,b]},number3:function(a,b,c){a=this._clamp(a);b=this._clamp(b);c=this._clamp(c);return[a,b,c]},object1:function(a){if(a)switch(a.length){case 4:case 3:return[a[0],a[1],a[2]].map(this._clamp);case 2:return[a[0],a[1],a[1]].map(this._clamp);
-default:if("z"in a&&"x"in a){if(typeof a.x!==typeof a.y)throw new GLM.GLMJSError("unrecognized .x-ish object passed to GLM."+this.name+": "+a);return[a.x,a.y,a.z].map(this._clamp)}}throw new GLM.GLMJSError("unrecognized object passed to GLM."+this.name+": "+a);},object2:function(a,b){if(a instanceof GLM.vec2)return[a.x,a.y,b].map(this._clamp);if(a instanceof GLM.uvec2||a instanceof GLM.ivec2||a instanceof GLM.bvec2)return[a.x,a.y,this._clamp(b)];throw new GLM.GLMJSError("unrecognized object passed to GLM."+
-this.name+"(o,z): "+[a,b]);}});
-GLM.vec4=GLM.$template.GLMType("vec4",{name:"fvec4",identity:[0,0,0,0],components:["xyzw","0123","rgba"],undefined0:function(){return this.identity},number1:function(a){return[a,a,a,a]},number2:function(a,b){return[a,b,b,b]},number3:function(a,b,c){return[a,b,c,c]},number4:function(a,b,c,e){return[a,b,c,e]},Error:GLM.GLMJSError,object1:function(a){if(a)switch(a.length){case 4:return[a[0],a[1],a[2],a[3]];case 3:return[a[0],a[1],a[2],a[2]];case 2:return[a[0],a[1],a[1],a[1]];default:if("w"in a&&"x"in
-a){if(typeof a.x!==typeof a.w)throw new this.Error("unrecognized .x-ish object passed to GLM.vec4: "+a);return"string"===typeof a.x?[1*a.x,1*a.y,1*a.z,1*a.w]:[a.x,a.y,a.z,a.w]}}throw new this.Error("unrecognized object passed to GLM.vec4: "+[a,a&&a.$type]);},$GLM:GLM,object2:function(a,b){if(a instanceof this.$GLM.vec3||a instanceof this.$GLM.uvec3||a instanceof this.$GLM.ivec3||a instanceof this.$GLM.bvec3)return[a.x,a.y,a.z,b];throw new this.$GLM.GLMJSError("unrecognized object passed to GLM.vec4(o,w): "+
-[a,b]);},object3:function(a,b,c){if(a instanceof this.$GLM.vec2||a instanceof this.$GLM.uvec2||a instanceof this.$GLM.ivec2||a instanceof this.$GLM.bvec2)return[a.x,a.y,b,c];throw new this.$GLM.GLMJSError("unrecognized object passed to GLM.vec4(o,z,w): "+[a,b,c]);}});
-GLM.uvec4=GLM.$template.GLMType("uvec4",{name:"uvec4",identity:[0,0,0,0],components:["xyzw","0123"],_clamp:GLM.uvec2.$._clamp,undefined0:function(){return this.identity},number1:function(a){a=this._clamp(a);return[a,a,a,a]},number2:function(a,b){a=this._clamp(a);b=this._clamp(b);return[a,b,b,b]},number3:function(a,b,c){a=this._clamp(a);b=this._clamp(b);c=this._clamp(c);return[a,b,c,c]},number4:function(a,b,c,e){return[a,b,c,e].map(this._clamp)},Error:GLM.GLMJSError,object1:function(a){if(a)switch(a.length){case 4:return[a[0],
-a[1],a[2],a[3]].map(this._clamp);case 3:return[a[0],a[1],a[2],a[2]].map(this._clamp);case 2:return[a[0],a[1],a[1],a[1]].map(this._clamp);default:if("w"in a&&"x"in a){if(typeof a.x!==typeof a.y)throw new this.Error("unrecognized .x-ish object passed to GLM."+this.name+": "+a);return[a.x,a.y,a.z,a.w].map(this._clamp)}}throw new GLM.GLMJSError("unrecognized object passed to GLM."+this.name+": "+[a,a&&a.$type]);},object2:function(a,b){if(a instanceof GLM.vec3)return[a.x,a.y,a.z,b].map(this._clamp);if(a instanceof
-GLM.uvec3||a instanceof GLM.ivec3||a instanceof GLM.bvec3)return[a.x,a.y,a.z,this._clamp(b)];throw new GLM.GLMJSError("unrecognized object passed to GLM."+this.name+"(o,w): "+[a,b]);},object3:function(a,b,c){if(a instanceof GLM.vec2)return[a.x,a.y,b,c].map(this._clamp);if(a instanceof GLM.uvec2||a instanceof GLM.ivec2||a instanceof GLM.bvec2)return[a.x,a.y,this._clamp(b),this._clamp(c)];throw new GLM.GLMJSError("unrecognized object passed to GLM."+this.name+"(o,z,w): "+[a,b,c]);}});
-GLM.ivec2=GLM.$template.GLMType("ivec2",GLM.$template.extend({},GLM.uvec2.$,{name:"ivec2"}));GLM.ivec3=GLM.$template.GLMType("ivec3",GLM.$template.extend({},GLM.uvec3.$,{name:"ivec3"}));GLM.ivec4=GLM.$template.GLMType("ivec4",GLM.$template.extend({},GLM.uvec4.$,{name:"ivec4"}));GLM.bvec2=GLM.$template.GLMType("bvec2",GLM.$template.extend({},GLM.uvec2.$,{name:"bvec2",boolean1:GLM.uvec2.$.number1,boolean2:GLM.uvec2.$.number2}));
-GLM.bvec3=GLM.$template.GLMType("bvec3",GLM.$template.extend({},GLM.uvec3.$,{name:"bvec3",boolean1:GLM.uvec3.$.number1,boolean2:GLM.uvec3.$.number2,boolean3:GLM.uvec3.$.number3}));GLM.bvec4=GLM.$template.GLMType("bvec4",GLM.$template.extend({},GLM.uvec4.$,{name:"bvec4",boolean1:GLM.uvec4.$.number1,boolean2:GLM.uvec4.$.number2,boolean3:GLM.uvec4.$.number3,boolean4:GLM.uvec4.$.number4}));GLM.bvec2.$._clamp=GLM.bvec3.$._clamp=GLM.bvec4.$._clamp=function(a){return!!a};
-GLM.mat3=GLM.$template.GLMType("mat3",{name:"mat3x3",identity:[1,0,0,0,1,0,0,0,1],undefined0:function(){return this.identity},number1:function(a){return 1===a?this.identity:[a,0,0,0,a,0,0,0,a]},number9:function(a,b,c,e,d,h,j,g,k){return arguments},Error:GLM.GLMJSError,$vec3:GLM.vec3,object1:function(a){if(a){var b=a.elements||a;if(16===b.length)return[b[0],b[1],b[2],b[4],b[5],b[6],b[8],b[9],b[10]];if(9===b.length)return b;if(0 in b&&1 in b&&2 in b&&!(3 in b)&&"object"===typeof b[2])return[b[0],b[1],
-b[2]].map(this.$vec3.$.object1).reduce(function(a,b){return a.concat(b)})}throw new this.Error("unrecognized object passed to GLM.mat3: "+a);},object3:function(a,b,c){return[a,b,c].map(glm.$to_array).reduce(function(a,b){return a.concat(b)})}});
-GLM.mat4=GLM.$template.GLMType("mat4",{name:"mat4x4",identity:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],undefined0:function(){return this.identity},number16:function(a,b,c,e,d,h,j,g,k,i,w,r,m,q,s,t){return arguments},number1:function(a){return 1===a?this.identity:[a,0,0,0,0,a,0,0,0,0,a,0,0,0,0,a]},Error:GLM.GLMJSError,$vec4:GLM.vec4,object1:function(a){var b;if(a){b=a.elements||a;if(9===b.length)return[b[0],b[1],b[2],0,b[3],b[4],b[5],0,b[6],b[7],b[8],0,0,0,0,1];if(4===b.length&&b[0]&&4===b[0].length)return b[0].concat(b[1],
-b[2],b[3]);if(16===b.length)return b;if(0 in b&&1 in b&&2 in b&&3 in b&&!(4 in b)&&"object"===typeof b[3])return[b[0],b[1],b[2],b[3]].map(this.$vec4.$.object1).reduce(function(a,b){return a.concat(b)})}throw new this.Error("unrecognized object passed to GLM.mat4: "+[a,b&&b.length]);},object4:function(a,b,c,e){return[a,b,c,e].map(glm.$to_array).reduce(function(a,b){return a.concat(b)})}});
-GLM.quat=GLM.$template.GLMType("quat",{identity:[0,0,0,1],components:["xyzw","0123"],undefined0:function(){return this.identity},number1:function(a){if(1!==a)throw Error("only quat(1) syntax supported for quat(number1 args)...");return this.identity},number4:function(a,b,c,e){return[b,c,e,a]},$GLM:GLM,$M3:GLM.mat3(),$quat_array_from_zyx:function(a){var b=this.$M3;return this.$GLM.$outer.quat_angleAxis(a.z,b[2]).mul(this.$GLM.$outer.quat_angleAxis(a.y,b[1])).mul(this.$GLM.$outer.quat_angleAxis(a.x,
-b[0])).elements},object1:function(a){if(a){if(a instanceof this.$GLM.mat4)return this.$GLM.$outer.quat_array_from_mat4(a);if(4===a.length)return[a[0],a[1],a[2],a[3]];if(a instanceof this.$GLM.quat)return[a.x,a.y,a.z,a.w];if(a instanceof this.$GLM.vec3)return this.$quat_array_from_zyx(a);if("w"in a&&"x"in a)return"string"===typeof a.x?[1*a.x,1*a.y,1*a.z,1*a.w]:[a.x,a.y,a.z,a.w]}throw new this.$GLM.GLMJSError("unrecognized object passed to GLM.quat.object1: "+[a,a&&a.$type,typeof a,a&&a.constructor]);
-}});
-(function(){var a=function(a,b,c,e){var k={def:function(b,c){this[b]=c;Object.defineProperty(a.prototype,b,c)}};a.$properties=a.$properties||k;var i=a.$properties.def.bind(a.$properties),w=[0,1,2,3].map(function(a){return{enumerable:c,get:function(){return this.elements[a]},set:function(b){this.elements[a]=b}}});b.forEach(function(a,b){i(a,w[b])});if(isNaN(b[0])&&!/^_/.test(b[0])){var k=b.slice(),r=GLM.$subarray;do(function(a,b,c){"quat"===b&&(b="vec"+c);var d=GLM[b];i(a,{enumerable:!1,get:function(){return new d(r(this.elements,0*
-c,1*c))},set:function(a){return(new d(r(this.elements,0*c,1*c)))["="](a)}})})(k.join(""),a.prototype.$type.replace(/[1-9]$/,k.length),k.length);while(k[1]!=k.pop());if(e)return a.$properties;k=b.slice();if(b={xyz:{yz:1},xyzw:{yzw:1,yz:1,zw:2}}[k.join("")])for(var m in b)(function(a,b,c,d){i(a,{enumerable:!1,get:function(){return new GLM[b](GLM.$subarray(this.elements,0*c+d,1*c+d))},set:function(a){return(new GLM[b](GLM.$subarray(this.elements,0*c+d,1*c+d)))["="](a)}})})(m,a.prototype.$type.replace(/[1-9]$/,
-m.length),m.length,b[m])}return a.$properties};a(GLM.vec2,GLM.vec2.$.components[0],!0);a(GLM.vec2,GLM.vec2.$.components[1]);a(GLM.vec3,GLM.vec3.$.components[0],!0);a(GLM.vec3,GLM.vec3.$.components[1]);a(GLM.vec3,GLM.vec3.$.components[2]);a(GLM.vec4,GLM.vec4.$.components[0],!0);a(GLM.vec4,GLM.vec4.$.components[1]);a(GLM.vec4,GLM.vec4.$.components[2]);a(GLM.quat,GLM.quat.$.components[0],!0,"noswizzles");a(GLM.quat,GLM.quat.$.components[1]);GLM.quat.$properties.def("wxyz",{enumerable:!1,get:function(){return new GLM.vec4(this.w,
-this.x,this.y,this.z)},set:function(a){a=GLM.vec4(a);return this["="](GLM.quat(a.x,a.y,a.z,a.w))}});"uvec2 uvec3 uvec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4".split(" ").forEach(function(b){a(GLM[b],GLM[b].$.components[0],!0);a(GLM[b],GLM[b].$.components[1])});Object.defineProperty(GLM.quat.prototype,"_x",{get:function(){throw Error("erroneous quat._x access");}});var b={2:{yx:{enumerable:!1,get:function(){return new GLM.vec2(this.y,this.x)},set:function(a){a=GLM.vec2(a);this.y=a[0];this.x=a[1]}}},3:{xz:{enumerable:!1,
-get:function(){return new GLM.vec2(this.x,this.z)},set:function(a){a=GLM.vec2(a);this.x=a[0];this.z=a[1]}},zx:{enumerable:!1,get:function(){return new GLM.vec2(this.z,this.x)},set:function(a){a=GLM.vec2(a);this.z=a[0];this.x=a[1]}},xzy:{enumerable:!1,get:function(){return new GLM.vec3(this.x,this.z,this.y)},set:function(a){a=GLM.vec3(a);this.x=a[0];this.z=a[1];this.y=a[2]}}},4:{xw:{enumerable:!1,get:function(){return new GLM.vec2(this.x,this.w)},set:function(a){a=GLM.vec2(a);this.x=a[0];this.w=a[1]}},
-wz:{enumerable:!1,get:function(){return new GLM.vec2(this.w,this.z)},set:function(a){a=GLM.vec2(a);this.w=a[0];this.z=a[1]}},wxz:{enumerable:!1,get:function(){return new GLM.vec3(this.w,this.x,this.z)},set:function(a){a=GLM.vec3(a);this.w=a[0];this.x=a[1];this.z=a[2];return this}},xyw:{enumerable:!1,get:function(){return new GLM.vec3(this.x,this.y,this.w)},set:function(a){a=GLM.vec3(a);this.x=a[0];this.y=a[1];this.w=a[2];return this}},xzw:{enumerable:!1,get:function(){return new GLM.vec3(this.x,this.z,
-this.w)},set:function(a){a=GLM.vec3(a);this.x=a[0];this.z=a[1];this.w=a[2]}},wxyz:{enumerable:!1,get:function(){return new GLM.vec4(this.w,this.x,this.y,this.z)},set:function(a){a=GLM.vec4(a);this.w=a[0];this.x=a[1];this.y=a[2];this.z=a[3];return this}}}},c;for(c in b)for(var e in b[c])2>=c&&GLM.vec2.$properties.def(e,b[c][e]),3>=c&&GLM.vec3.$properties.def(e,b[c][e]),4>=c&&GLM.vec4.$properties.def(e,b[c][e]);GLM.$partition=function(a,b,c,e){if(void 0===c)throw new GLM.GLMJSError("nrows is undefined");
-var k=b.$.identity.length;c=c||k;for(var i=function(a){3<GLM.$DEBUG&&GLM.$outer.console.debug("CACHEDBG: "+a)},w=0;w<c;w++)(function(c){var j=e&&e+c,q=c*k;Object.defineProperty(a,c,{configurable:!0,enumerable:!0,set:function(e){if(e instanceof b)this.elements.set(e.elements,q);else if(e&&e.length===k)this.elements.set(e,q);else throw new GLM.GLMJSError("unsupported argtype to "+(a&&a.$type)+"["+c+"] setter: "+[typeof e,e]);},get:function(){if(e){if(this[j])return c||i("cache hit "+j),this[j];c||i("cache miss "+
-j)}var a,d=new b(a=GLM.$subarray(this.elements,q,q+k));if(d.elements!==a)throw new GLM.GLMJSError("v.elements !== t "+[GLM.$subarray,d.elements.constructor===a.constructor,d.elements.buffer===a.buffer]);e&&Object.defineProperty(this,j,{configurable:!0,enumerable:!1,value:d});return d}})})(w)};GLM.$partition(GLM.mat4.prototype,GLM.vec4,4,"_cache_");GLM.$partition(GLM.mat3.prototype,GLM.vec3,3,"_cache_")})();
-GLM.$dumpTypes=function(a){GLM.$types.forEach(function(b){GLM[b].componentLength&&a("GLM."+b,JSON.stringify({"#type":GLM[b].prototype.$type_name,"#floats":GLM[b].componentLength,"#bytes":GLM[b].BYTES_PER_ELEMENT}))})};
-GLM.$init=function(a){a.prefix&&(GLMJS_PREFIX=a.prefix);GLM.$prefix=GLMJS_PREFIX;var b=a.log||function(){};try{b("GLM-js: ENV: "+_ENV._VERSION)}catch(c){}b("GLM-JS: initializing: "+JSON.stringify(a,0,2));b(JSON.stringify({functions:Object.keys(GLM.$outer.functions)}));var e=GLM.mat4,d=GLM.$outer;GLM.toMat4=function(a){return new e(d.mat4_array_from_quat(a))};GLM.$template.extend(GLM.rotation.$template,{$quat:GLM.quat,$dot:GLM.dot.link("vec3,vec3"),$epsilon:GLM.epsilon(),$m:GLM.mat3(),$pi:GLM.pi(),
-$length2:GLM.length2.link("vec3"),$cross:GLM.cross.link("vec3,vec3"),$normalize:GLM.normalize.link("vec3"),$angleAxis:GLM.angleAxis.link("float,vec3"),$sqrt:GLM.sqrt});GLM.$symbols=[];for(var h in GLM)"function"===typeof GLM[h]&&/^[a-z]/.test(h)&&GLM.$symbols.push(h);GLM.$types.forEach(function(a){var b=GLM[a].prototype.$type,c;for(c in GLM.$outer.functions){var d=GLM.$outer.functions[c];d.$op&&(GLM.$DEBUG&&GLM.$outer.console.debug("mapping operator<"+b+"> "+c+" / "+d.$op),GLM[a].prototype[c]=d,GLM[a].prototype[d.$op]=
-d)}});b("GLM-JS: "+GLM.version+" emulating GLM_VERSION="+GLM.GLM_VERSION+" vendor_name="+a.vendor_name+" vendor_version="+a.vendor_version);glm.vendor=a};
-GLM.using_namespace=function(a){GLM.$DEBUG&&GLM.$outer.console.debug("GLM.using_namespace munges globals; it should probably not be used!");GLM.using_namespace.$tmp={ret:void 0,tpl:a,names:GLM.$symbols,saved:{},evals:[],restore:[],before:[],after:[]};eval(GLM.using_namespace.$tmp.names.map(function(a,c){return"GLM.using_namespace.$tmp.saved['"+a+"'] = GLM.using_namespace.$tmp.before["+c+"] = 'undefined' !== typeof "+a+";"}).join("\n"));GLM.$DEBUG&&console.warn("GLM.using_namespace before #globals: "+
-GLM.using_namespace.$tmp.before.length);GLM.using_namespace.$tmp.names.map(function(a){GLM.using_namespace.$tmp.restore.push(a+"=GLM.using_namespace.$tmp.saved['"+a+"'];"+("GLM.using_namespace.$tmp.saved['"+a+"']=undefined;delete GLM.using_namespace.$tmp.saved['"+a+"'];"));GLM.using_namespace.$tmp.evals.push(a+"=GLM."+a+";")});eval(GLM.using_namespace.$tmp.evals.join("\n"));GLM.using_namespace.$tmp.ret=a();eval(GLM.using_namespace.$tmp.restore.join("\n"));eval(GLM.using_namespace.$tmp.names.map(function(a,
-c){return"GLM.using_namespace.$tmp.after["+c+"] = 'undefined' !== typeof "+a+";"}).join("\n"));GLM.$DEBUG&&console.warn("GLM.using_namespace after #globals: "+GLM.using_namespace.$tmp.after.length);a=GLM.using_namespace.$tmp.ret;delete GLM.using_namespace.$tmp;return a};
-function $GLM_extern(a,b){b=b||a;return function(){GLM[b]=GLM.$outer.functions[a]||GLM.$outer[a];if(!GLM[b])throw new GLM.GLMJSError("$GLM_extern: unresolved external symbol: "+a);GLM.$DEBUG&&GLM.$outer.console.debug("$GLM_extern: resolved external symbol "+a+" "+typeof GLM[b]);return GLM[b].apply(this,arguments)}}
-function GLM_polyfills(){var a={};"bind"in Function.prototype||(a.bind=Function.prototype.bind=function(a){function c(){}if("function"!==typeof this)throw new TypeError("not callable");var e=[].slice,d=e.call(arguments,1),h=this,j=function(){return h.apply(this instanceof c?this:a||global,d.concat(e.call(arguments)))};c.prototype=this.prototype||c.prototype;j.prototype=new c;return j});return a}
-$GLM_reset_logging.current=function(){return{$GLM_log:"undefined"!==typeof $GLM_log&&$GLM_log,$GLM_console_log:"undefined"!==typeof $GLM_console_log&&$GLM_console_log,$GLM_console_prefixed:"undefined"!==typeof $GLM_console_prefixed&&$GLM_console_prefixed,console:GLM.$outer.console}};
-function $GLM_reset_logging(a){a&&"object"===typeof a&&($GLM_log=a.$GLM_log,$GLM_console_log=a.$GLM_console_log,$GLM_console_factory=a.$GLM_console_factory,GLM.$outer.console=a.console,a=!1);if(a||"undefined"===typeof $GLM_log)$GLM_log=function(a,b){GLM.$outer.console.log.apply(GLM.$outer.console,[].slice.call(arguments).map(function(a){var b=typeof a;return"xboolean"===b||"string"===b?a+"":GLM.$isGLMObject(a)||!isNaN(a)?GLM.to_string(a):a+""}))};if(a||"undefined"===typeof $GLM_console_log)$GLM_console_log=
-function(a,b){(console[a]||function(){}).apply(console,[].slice.call(arguments,1))};if(a||"undefined"===typeof $GLM_console_factory)$GLM_console_factory=function(a){return $GLM_console_log.bind($GLM_console_log,a)};var b=$GLM_console_factory,c={};"debug,warn,info,error,log,write".replace(/\w+/g,function(a){c[a]=b(a)});"object"===typeof GLM&&(GLM.$outer&&(GLM.$outer.console=c),GLM.$log=$GLM_log);return c}try{window.$GLM_reset_logging=this.$GLM_reset_logging=$GLM_reset_logging}catch(e$$19){}
-GLM.$reset_logging=$GLM_reset_logging;GLM.$log=GLM.$log||$GLM_log;function $GLM_GLMJSError(a,b){function c(c){this.name=a;this.stack=Error().stack;Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);this.message=c;b&&b.apply(this,arguments)}c.prototype=Error();c.prototype.name=a;return c.prototype.constructor=c}GLMAT.mat4.exists;glm=GLM;var DLL={_version:"0.0.2",_name:"glm.gl-matrix.js",_glm_version:glm.version,prefix:"glm-js[glMatrix]: ",vendor_version:GLMAT.VERSION,vendor_name:"glMatrix"};
-DLL.statics={$outer:GLM.$outer,$typeArray:function(a){return new this.$outer.Float32Array(a)},$mat4:GLM.mat4,$quat:GLM.quat,$mat4$perspective:GLMAT.mat4.perspective,$mat4$ortho:GLMAT.mat4.ortho,mat4_perspective:function(a,b,c,e){return new this.$mat4(this.$mat4$perspective(this.$typeArray(16),a,b,c,e))},mat4_ortho:function(a,b,c,e,d,h){return new this.$mat4(this.$mat4$ortho(this.$typeArray(16),a,b,c,e,d||-1,h||1))},$quat$setAxisAngle:GLMAT.quat.setAxisAngle,$mat4$fromQuat:GLMAT.mat4.fromQuat,mat4_angleAxis:function(a,
-b){var c=this.$quat$setAxisAngle(this.$typeArray(4),b,a);return new this.$mat4(this.$mat4$fromQuat(this.$typeArray(16),c))},quat_angleAxis:function(a,b){return new this.$quat(this.$quat$setAxisAngle(this.$typeArray(4),b,a))},$mat4$translate:GLMAT.mat4.translate,mat4_translation:function(a){var b=new this.$mat4;this.$mat4$translate(b.elements,b.elements,a.elements);return b},$mat4$scale:GLMAT.mat4.scale,mat4_scale:function(a){var b=new this.$mat4;this.$mat4$scale(b.elements,b.elements,a.elements);
-return b},toJSON:function(){var a={},b;for(b in this)0!==b.indexOf("$")&&(a[b]=this[b]);return a},$vec3:GLM.vec3,$clamp:GLM.clamp,mat4_array_from_quat:function(a){return this.$mat4$fromQuat(this.$typeArray(16),a.elements)},$qtmp:new GLM.$outer.Float32Array(9),$quat$fromMat3:GLMAT.quat.fromMat3,$mat3$fromMat4:GLMAT.mat3.fromMat4,quat_array_from_mat4:function(a){return this.$quat$fromMat3(this.$typeArray(4),this.$mat3$fromMat4(this.$qtmp,a.elements))}};
-DLL["declare<T,V,...>"]={mul:{$op:"*",$typeArray:function(a){return new this.GLM.$outer.Float32Array(a)},$vec3$transformQuat:GLMAT.vec3.transformQuat,"quat,vec3":function(a,b){return new this.GLM.vec3(this.$vec3$transformQuat(this.$typeArray(3),b.elements,a.elements))},"vec3,quat":function(a,b){return this["quat,vec3"](this.GLM.inverse(b),a)},"quat,vec4":function(a,b){return this["mat4,vec4"](this.GLM.toMat4(a),b)},"vec4,quat":function(a,b){return this["quat,vec4"](this.GLM.inverse(b),a)},"$vec<N>$scale":"GLMAT.vecN.scale",
-"vec<N>,float":function(a,b){return new this.GLM.vecN(this.$vecN$scale(this.$typeArray(N),a.elements,b))},"quat,float":function(a,b){return new a.constructor(this["vec4,float"](a,b).elements)},$vec4$transformMat4:GLMAT.vec4.transformMat4,"mat4,vec4":function(a,b){return new GLM.vec4(this.$vec4$transformMat4(this.$typeArray(4),b.elements,a.elements))},"vec4,mat4":function(a,b){return this["mat4,vec4"](GLM.inverse(b),a)},"$mat<N>mul":"GLMAT.matN.mul","mat<N>,mat<N>":function(a,b){return new a.constructor(this.$matNmul(this.$typeArray(N*
-N),a.elements,b.elements))},$quat$multiply:GLMAT.quat.multiply,"quat,quat":function(a,b){return new a.constructor(this.$quat$multiply(this.$typeArray(4),a.elements,b.elements))}},mul_eq:{$op:"*=","$mat<N>$multiply":"GLMAT.matN.multiply","mat<N>,mat<N>":function(a,b){this.$matN$multiply(a.elements,a.elements,b.elements);return a},"$vec<N>$scale":"GLMAT.vecN.scale","vec<N>,float":function(a,b){this.$vecN$scale(a.elements,a.elements,b);return a},$quat$multiply:GLMAT.quat.multiply,"quat,quat":function(a,
-b){this.$quat$multiply(a.elements,a.elements,b.elements);return a},$quat$invert:GLMAT.quat.invert,$vec3$transformQuat:GLMAT.vec3.transformQuat,"inplace:vec3,quat":function(a,b){var c=this.$quat$invert(new this.GLM.$outer.Float32Array(4),b.elements);this.$vec3$transformQuat(a.elements,a.elements,c);return a},$mat4$invert:GLMAT.mat4.invert,$vec4$transformMat4:GLMAT.vec4.transformMat4,"inplace:vec4,mat4":function(a,b){var c=this.$mat4$invert(new this.GLM.$outer.Float32Array(16),b.elements);this.$vec4$transformMat4(a.elements,
-a.elements,c);return a}},cross:{$vec2$cross:GLMAT.vec2.cross,"vec2,vec2":function(a,b){return new this.GLM.vec3(this.$vec2$cross(new this.GLM.$outer.Float32Array(3),a,b))},$vec3$cross:GLMAT.vec3.cross,"vec3,vec3":function(a,b){return new this.GLM.vec3(this.$vec3$cross(new this.GLM.$outer.Float32Array(3),a,b))}},dot:{"$vec<N>$dot":"GLMAT.vecN.dot","vec<N>,vec<N>":function(a,b){return this.$vecN$dot(a,b)}},lookAt:{$mat4$lookAt:GLMAT.mat4.lookAt,"vec3,vec3":function(a,b,c){return new this.GLM.mat4(this.$mat4$lookAt(new this.GLM.$outer.Float32Array(16),
-a.elements,b.elements,c.elements))}}};DLL["declare<T,V,number>"]={mix:{$quat$slerp:GLMAT.quat.slerp,"quat,quat":function(a,b,c){return new GLM.quat(this.$quat$slerp(new GLM.$outer.Float32Array(4),a.elements,b.elements,c))}}};DLL["declare<T,V,number>"].slerp=DLL["declare<T,V,number>"].mix;
-DLL["declare<T>"]={normalize:{"$vec<N>normalize":"GLMAT.vecN.normalize",$typeArray:function(a){return new this.GLM.$outer.Float32Array(a)},"vec<N>":function(a){return new this.GLM.vecN(this.$vecNnormalize(this.$typeArray(N),a))},$quat$normalize:GLMAT.quat.normalize,quat:function(a){return new this.GLM.quat(this.$quat$normalize(new this.GLM.$outer.Float32Array(4),a.elements))}},length:{$quat$length:GLMAT.quat.length,quat:function(a){return this.$quat$length(a.elements)},"$vec<N>$length":"GLMAT.vecN.length",
-"vec<N>":function(a){return this.$vecN$length(a.elements)}},length2:{$quat$squaredLength:GLMAT.quat.squaredLength,quat:function(a){return this.$quat$squaredLength(a.elements)},"$vec<N>$squaredLength":"GLMAT.vecN.squaredLength","vec<N>":function(a){return this.$vecN$squaredLength(a.elements)}},inverse:{$quatinvert:GLMAT.quat.invert,quat:function(a){return this.GLM.quat(this.$quatinvert(new this.GLM.$outer.Float32Array(4),a.elements))},$mat4invert:GLMAT.mat4.invert,mat4:function(a){a=a.clone();return null===
-this.$mat4invert(a.elements,a.elements)?a["="](this.GLM.mat4()):a}},transpose:{$mat4$transpose:GLMAT.mat4.transpose,mat4:function(a){a=a.clone();this.$mat4$transpose(a.elements,a.elements);return a}}};glm.$outer.$import(DLL);try{module.exports=glm}catch(e$$20){}
-function $GLMVector(a,b,c){this.typearray=c=c||GLM.$outer.Float32Array;if(!(this instanceof $GLMVector))throw new GLM.GLMJSError("use new");if("function"!==typeof a||!GLM.$isGLMConstructor(a))throw new GLM.GLMJSError("expecting typ to be GLM.$isGLMConstructor: "+[typeof a,a?a.$type:a]+" // "+GLM.$isGLMConstructor(a));if(1===a.componentLength&&GLM[a.prototype.$type.replace("$","$$v")])throw new GLM.GLMJSError("unsupported argtype to glm.$vectorType - for single-value types use glm."+a.prototype.$type.replace("$",
-"$$v")+"..."+a.prototype.$type);this.glmtype=a;if(!this.glmtype.componentLength)throw Error("need .componentLength "+[a,b,c]);this.componentLength=this.glmtype.componentLength;this.BYTES_PER_ELEMENT=this.glmtype.BYTES_PER_ELEMENT;this._set_$elements=function(a){Object.defineProperty(this,"$elements",{enumerable:!1,configurable:!0,value:a});return this.$elements};Object.defineProperty(this,"elements",{enumerable:!0,configurable:!0,get:function(){return this.$elements},set:function(a){this._kv&&!this._kv.dynamic&&
-GLM.$DEBUG&&GLM.$outer.console.warn("WARNING: setting .elements on frozen (non-dynamic) GLMVector...");if(a){var b=this.length;this.length=a.length/this.componentLength;this.byteLength=a.length*this.BYTES_PER_ELEMENT;if(this.length!==Math.round(this.length))throw new GLM.GLMJSError("$vectorType.length alignment mismatch "+JSON.stringify({componentLength:this.componentLength,length:this.length,rounded_length:Math.round(this.length),elements_length:a.length,old_length:b}));}else this.length=this.byteLength=
-0;return this._set_$elements(a)}});this.elements=b&&new c(b*a.componentLength)}GLM.$vectorType=$GLMVector;GLM.$vectorType.version="0.0.2";
-$GLMVector.prototype=GLM.$template.extend(new GLM.$GLMBaseType($GLMVector,"$vectorType"),{toString:function(){return"[$GLMVector .elements=#"+(this.elements&&this.elements.length)+" .elements[0]="+(this.elements&&this.elements[0])+" ->[0]"+(this["->"]&&this["->"][0])+"]"},"=":function(a){if(a instanceof this.constructor||glm.$isGLMObject(a))a=a.elements;return this._set(new this.typearray(a))},_typed_concat:function(a,b,c){var e=a.length+b.length;c=c||new a.constructor(e);c.set(a);c.set(b,a.length);
-return c},"+":function(a){if(a instanceof this.constructor||glm.$isGLMObject(a))a=a.elements;return new this.constructor(this._typed_concat(this.elements,a))},"+=":function(a){if(a instanceof this.constructor||glm.$isGLMObject(a))a=a.elements;return this._set(this._typed_concat(this.elements,a))},_set:function(a){a instanceof this.constructor&&(a=new this.typearray(a.elements));if(!(a instanceof this.typearray))throw new GLM.GLMJSError("unsupported argtype to $GLMVector._set "+(a&&a.constructor));
-GLM.$DEBUG&&GLM.$outer.console.debug("$GLMVector.prototype.set...this.elements:"+[this.elements&&this.elements.constructor.name,this.elements&&this.elements.length]+"elements:"+[a.constructor.name,a.length]);var b=this._kv;this._kv=void 0;this.elements=a;if(this.elements!==a)throw new GLM.GLMJSError("err with .elements: "+[this.glmtype.prototype.$type,this.elements,a]);b&&this._setup(b);return this},arrayize:function(a,b){return this._setup({dynamic:b,setters:a},this.length)},$destroy:function(a){if(a){for(var b=
-Array.isArray(a),c=function(c){Object.defineProperty(a,c,{enumerable:!0,configurable:!0,value:void 0});delete a[c];b||(a[c]=void 0,delete a[c])},e=0;e<a.length;e++)e in a&&c(e);for(;e in a;)GLM.$DEBUG&&GLM.$outer.console.debug("$destroy",this.name,e),c(e++);b&&(a.length=0)}},_arrlike_toJSON:function(){return this.slice(0)},_mixinArray:function(a){a.toJSON=this._arrlike_toJSON;"forEach map slice filter join reduce".split(" ").forEach(function(b){a[b]=Array.prototype[b]});return a},_setup:function(a,
-b){var c=this.glmtype,e=this.typearray,d=this.length;this._kv=a;var h=a.stride||this.glmtype.BYTES_PER_ELEMENT,j=a.offset||this.elements.byteOffset,g=a.elements||this.elements,k=a.container||this.arr||[],i=a.setters||!1,w=a.dynamic||!1;"self"===k&&(k=this);if(!g)throw new GLMJSError("GLMVector._setup - neither kv.elements nor this.elements...");this.$destroy(this.arr,b);var r=this.arr=this["->"]=k;Array.isArray(r)||this._mixinArray(r);var m=this.componentLength;if(!m)throw new GLM.GLMJSError("no componentLength!?"+
-Object.keys(this));for(var q=g.buffer.byteLength,s=this,t=0;t<d;t++){var k=j+t*h,z=k+this.glmtype.BYTES_PER_ELEMENT,y=function(){a.i=t;a.next=z;a.last=q;a.offset=a.offset||j;a.stride=a.stride||h;return JSON.stringify(a)};if(k>q)throw Error("["+t+"] off "+k+" > last "+q+" "+y());if(z>q)throw Error("["+t+"] next "+z+" > last "+q+" "+y());r[t]=null;var f=function(a,b){var d=new c(new e(a.buffer,b,m));w&&Object.defineProperty(d,"$elements",{value:a});return d},y=f(g,k);!i&&!w?r[t]=y:function(a,b,c){Object.defineProperty(r,
-b,{enumerable:!0,configurable:!0,get:w?function(){a.$elements!==s.elements&&(GLM.$log("dynoget rebinding ti",b,c,a.$elements===s.elements),a=f(s.elements,c));return a}:function(){return a},set:i&&(w?function(d){GLM.$log("dynoset",b,c,a.$elements===s.elements);a.$elements!==s.elements&&(GLM.$log("dynoset rebinding ti",b,c,a.$elements===s.elements),a=f(s.elements,c));return a.copy(d)}:function(b){return a.copy(b)})||void 0})}(y,t,k)}return this},setFromBuffers:function(a){var b=this.elements,c=0;a.forEach(function(a){var d=
-a.length;if(c+d>b.length){d=Math.min(b.length-c,a.length);if(0>=d)return;a=glm.$subarray(a,0,d);d=a.length}if(c+d>b.length)throw new glm.GLMJSError("$vectorType.fromBuffers mismatch "+[c,d,b.length]);b.set(a,c);c+=a.length});return c},setFromPointer:function(a){if(!(a instanceof GLM.$outer.ArrayBuffer))throw new glm.GLMJSError("unsupported argtype "+[typeof a]+" - $GLMVector.setFromPointer");return this._set(new this.typearray(a))}});GLM.exists;GLM.$vectorType.exists;
-if(GLM.$toTypedArray)throw"error: glm.experimental.js double-included";
-GLM.$toTypedArray=function(a,b,c){var e=b||0,d=typeof e;if("number"===d){if("number"!==typeof c)throw new GLM.GLMJSError("GLM.$toTypedArray: unsupported argtype for componentLength ("+typeof c+")");return new a(e*c)}if("object"!==d)throw new GLM.GLMJSError("GLM.$toTypedArray: unsupported arrayType: "+[typeof a,a]);if(e instanceof a)return e;if(e instanceof GLM.$outer.ArrayBuffer||Array.isArray(e))return new a(e);GLM.$isGLMObject(e)&&(d=e.elements,e=new a(d.length),e.set(d));if(!(e instanceof a)&&
-"byteOffset"in e&&"buffer"in e)return GLM.$DEBUG&&GLM.$outer.console.warn("coercing "+e.constructor.name+".buffer into "+[a.name,e.byteOffset,e.byteLength+" bytes","~"+e.byteLength/a.BYTES_PER_ELEMENT+" coerced elements"]+"...",{byteOffset:e.byteOffset,byteLength:e.byteLength,ecount:e.byteLength/a.BYTES_PER_ELEMENT}),new a(e.buffer,e.byteOffset,e.byteLength/a.BYTES_PER_ELEMENT);if(e instanceof a)return e;throw new GLM.GLMJSError("GLM.$toTypedArray: unsupported argtype initializers: "+[a,b,c]);};
-GLM.$make_primitive=function(a,b){GLM[a]=function(c){if(!(this instanceof GLM[a]))return new GLM[a](c);"object"!==typeof c&&(c=[c]);this.elements=GLM.$toTypedArray(b,c,1)};GLM[a]=eval(GLM.$template._traceable("glm_"+a+"$class",GLM[a]))();GLM.$template._add_overrides(a,{$to_string:function(a){return a.$type.replace(/[^a-z]/g,"")+"("+a.elements[0]+")"},$to_object:function(a){return a.elements[0]},$to_glsl:function(a){return a.$type.replace(/[^a-z]/g,"")+"("+a.elements[0]+")"}});GLM.$template._add_overrides(a.substr(1),
-{$to_string:!(a.substr(1)in GLM.$to_string.$template)&&function(a){return a.$type.replace(/[^a-z]/g,"")+"("+a.elements[0]+")"},$to_object:function(a){return a},$to_glsl:function(a){return a.$type.replace(/[^a-z]/g,"")+"("+a+")"}});GLM.$template.extend(GLM[a],{componentLength:1,BYTES_PER_ELEMENT:b.BYTES_PER_ELEMENT,prototype:GLM.$template.extend(new GLM.$GLMBaseType(GLM[a],a),{copy:function(a){this.elements.set(GLM.$isGLMObject(a)?a.elements:[a]);return this},valueOf:function(){return this.elements[0]}})});
-GLM[a].prototype["="]=GLM[a].prototype.copy;return GLM[a]};GLM.$make_primitive("$bool",GLM.$outer.Int32Array);GLM.$template._add_overrides("$bool",{$to_object:function(a){return!!a}});GLM.$make_primitive("$int32",GLM.$outer.Int32Array);GLM.$make_primitive("$uint32",GLM.$outer.Uint32Array);GLM.$make_primitive("$uint16",GLM.$outer.Uint16Array);GLM.$make_primitive("$uint8",GLM.$outer.Uint8Array);GLM.$float32=GLM.$make_primitive("$float",GLM.$outer.Float32Array);
-GLM.$make_primitive_vector=function(a,b,c){c=c||(new b).elements.constructor;var e=function(d){if(!(this instanceof e))return new e(d);this.$type=a;this.$type_name="vector<"+a+">";(d=GLM.$toTypedArray(c,d,b.componentLength))&&this._set(d)},e=eval(GLM.$template._traceable("glm_"+a+"$class",e))();e.prototype=new GLM.$vectorType(b,0,c);GLM.$template._add_overrides(a,{$to_string:function(a){return"[GLM."+a.$type+" elements[0]="+(a.elements&&a.elements[0])+"]"},$to_object:function(a){return a.map(GLM.$to_object)},
-$to_glsl:function(a,b){var c=a.$type.substr(2).replace(/[^a-z]/g,"");b="string"===typeof b?b:"example";var e=[];b&&e.push(c+" "+b+"["+a.length+"]");return e.concat(a.map(function(a,c){return b+"["+c+"] = "+a})).join(";")+";"}});GLM.$types.push(a);GLM.$template.extend(e.prototype,{$type:a,constructor:e,_setup:function(){throw new GLM.GLMJSError("._setup not available on primitive vectors yet...");},_set:function(a){this.elements=a;this.length=!this.elements?0:this.elements.length/this.glmtype.componentLength;
-this.arrayize();return this},arrayize:function(){for(var a=Object.defineProperty.bind(Object,this),b=0;b<this.length;b++)(function(b){a(b,{configurable:!0,enumerable:!0,get:function(){return this.elements[b]},set:function(a){return this.elements[b]=a}})})(b);return this._mixinArray(this)},toString:function(){return"[vector<"+a+"> {"+[].slice.call(this.elements,0,5)+(5<this.elements.length?",...":"")+"}]"}});return e};GLM.$vint32=GLM.$make_primitive_vector("$vint32",GLM.$int32);
-GLM.$vfloat=GLM.$vfloat32=GLM.$make_primitive_vector("$vfloat32",GLM.$float32);GLM.$vuint8=GLM.$make_primitive_vector("$vuint8",GLM.$uint8);GLM.$vuint16=GLM.$make_primitive_vector("$vuint16",GLM.$uint16);GLM.$vuint32=GLM.$make_primitive_vector("$vuint32",GLM.$uint32);
-GLM.$make_componentized_vector=function(a,b,c){c=c||(new b).elements.constructor;var e=function(a,h){if(!(this instanceof e))return new e(a,h);this._set(GLM.$toTypedArray(c,a,b.componentLength));if(!this.elements)throw new GLM.GLMJSError("!this.elements: "+[GLM.$toTypedArray(c,a,b.componentLength)]);this._setup({setters:!0,dynamic:h,container:"self"})},e=eval(GLM.$template._traceable("glm_"+a+"$class",e))();e.prototype=new GLM.$vectorType(b,0,c);GLM.$template._add_overrides(a,{$to_string:function(a){return"[GLM."+
-a.$type+" elements[0]="+(a.elements&&a.elements[0])+"]"},$to_object:function(a){return a.map(GLM.$to_object)},$to_glsl:function(a,b){var c=a.$type.substr(2);b="string"===typeof b?b:"example";var e=[];b&&e.push(c+" "+b+"["+a.length+"]");return e.concat(a.map(GLM.$to_glsl).map(function(a,c){return b+"["+c+"] = "+a})).join(";\n ")+";"}});GLM.$types.push(a);GLM.$template.extend(e.prototype,{$type:a,constructor:e});e.prototype.componentLength||alert("!cmop "+p);return e};
-(function(){var a=GLM.$template.deNify({"$vvec<N>":function(){return GLM.$make_componentized_vector("$vvecN",GLM.vecN)},"$vuvec<N>":function(){return GLM.$make_componentized_vector("$vuvecN",GLM.uvecN)},"$vmat<N>":function(){return GLM.$make_componentized_vector("$vmatN",GLM.matN)},$vquat:function(){return GLM.$make_componentized_vector("$vquat",GLM.quat)}},"$v"),b;for(b in a)GLM[b]=a[b]()})();
-(GLM._redefine_base64_helpers=function define_base64_helpers(b,c){function e(b){return(b+"").replace(/\s/g,"")}function d(b){return new k(b.split("").map(function(b){return b.charCodeAt(0)}))}function h(b){b instanceof k||(b=new k(b));return[].map.call(b,function(b){return String.fromCharCode(b)}).join("")}function j(b){b=b instanceof i?b:d(b).buffer;return GLM.$b64.encode(b,b.byteOffset,b.byteLength)}function g(b){b=new String(h(GLM.$b64.decode(b)));b.array=d(b);b.buffer=b.array.buffer;return b}
-b=define_base64_helpers.atob=b||define_base64_helpers.atob||g;c=define_base64_helpers.btoa=c||define_base64_helpers.btoa||j;var k=GLM.$outer.Uint8Array,i=GLM.$outer.ArrayBuffer,w,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf.bind("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");w={encode:function(b,c,d){b=new k(b,c,d);d=b.length;var e="";for(c=0;c<d;c+=3)e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[b[c]>>2],e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(b[c]&
-3)<<4|b[c+1]>>4],e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(b[c+1]&15)<<2|b[c+2]>>6],e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[b[c+2]&63];2===d%3?e=e.substring(0,e.length-1)+"=":1===d%3&&(e=e.substring(0,e.length-2)+"==");return e},decode:function(b){b=e(b);var c=b.length,d=0.75*c,g=0,h,j,f,v;"="===b[c-1]&&(d--,"="===b[c-2]&&d--);for(var w=new i(d),R=new k(w),d=0;d<c;d+=4)h=r(b[d]),j=r(b[d+1]),f=r(b[d+2]),v=r(b[d+3]),R[g++]=h<<2|j>>4,R[g++]=
-(j&15)<<4|f>>2,R[g++]=(f&3)<<6|v&63;return w}};GLM.$template.extend(w,{trim:e,atob:b,btoa:c,$atob:g,$btoa:j,toCharCodes:d,fromCharCodes:h,b64_to_utf8:function(c){return decodeURIComponent(escape(b(e(c))))},utf8_to_b64:function(b){return c(unescape(encodeURIComponent(b)))}});GLM.$template.extend(GLM,{$b64:w,$to_base64:function(b){return GLM.$b64.encode(b.elements.buffer,b.elements.byteOffset,b.elements.byteLength)},$from_base64:function(b,c){var d=GLM.$b64.decode(b);if(!0===c||c==GLM.$outer.ArrayBuffer)return d;
-void 0===c&&(c=GLM.$outer.Float32Array);return new c(d);throw new GLM.GLMJSError("TODO: $from_base64 not yet supported second argument type: ("+[typeof c,c]+")");}})})("function"===typeof atob&&atob.bind(this),"function"===typeof btoa&&btoa.bind(this));
-(function(){function a(a,c){return{get:function(){return a.call(this)},set:function(a){if(this.copy)return this.copy(new this.constructor(c.call(this,a)));this.elements.set(c.call(this,a))}}}"$bool $float32 $vfloat32 $vuint8 $vuint16 $vuint32 $vvec2 $vvec3 $vvec4 $vmat3 $vmat4 $vquat vec2 vec3 vec4 mat3 mat4 uvec2 uvec3 uvec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 quat".split(" ").map(GLM.$getGLMType).forEach(function(b){Object.defineProperty(b.prototype,"array",a(function(){return GLM.$to_array(this)},
-function(a){return a}));Object.defineProperty(b.prototype,"base64",a(function(){return GLM.$to_base64(this)},function(a){return GLM.$from_base64(a,this.elements.constructor)}));Object.defineProperty(b.prototype,"buffer",a(function(){return this.elements.buffer},function(a){return new this.elements.constructor(a)}));Object.defineProperty(b.prototype,"json",a(function(){return GLM.$to_json(this)},function(a){return JSON.parse(a)}));Object.defineProperty(b.prototype,"object",a(function(){return GLM.$to_object(this)},
-function(a){return a}));Object.defineProperty(b.prototype,"glsl",a(function(){return GLM.$to_glsl(this)},function(a){return GLM.$from_glsl(a,Array)}))})})();
-glm.GLMAT = GLMAT; globals.glm = glm; try { module.exports = glm; } catch(e) { }; try { window.glm = glm; } catch(e) {} ; try { declare.amd && declare(function() { return glm; }); } catch(e) {}; return this.glm = glm; })(this, typeof $GLM_log !== "undefined" ? $GLM_log : undefined, typeof $GLM_console_log !== "undefined" ? $GLM_console_log : undefined);
diff --git a/macros/latex/contrib/algobox/LICENSE b/macros/latex/contrib/algobox/LICENSE
index 5abcef6643..139c404f65 100644
--- a/macros/latex/contrib/algobox/LICENSE
+++ b/macros/latex/contrib/algobox/LICENSE
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
algobox
- Copyright (C) 2016-2017 Julien RIVAUD
+ Copyright (C) 2016-2019 Julien RIVAUD
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
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
- algobox Copyright (C) 2016-2017 Julien RIVAUD
+ algobox Copyright (C) 2016-2019 Julien RIVAUD
This program 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.
diff --git a/macros/latex/contrib/algobox/algobox.dtx b/macros/latex/contrib/algobox/algobox.dtx
index 2e26eb79f4..068bc3a506 100644
--- a/macros/latex/contrib/algobox/algobox.dtx
+++ b/macros/latex/contrib/algobox/algobox.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
% vim: tw=80
%
-%% File: algobox.dtx (C) Copyright 2016-2017 RIVAUD Julien
+%% File: algobox.dtx (C) Copyright 2016-2019 RIVAUD Julien
%%
%% It may be distributed and/or modified under the conditions of the
%% General Public License (GPL), either version 3 of this
@@ -11,11 +11,11 @@
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\RequirePackage{expl3}[2016/01/19]
+\RequirePackage{expl3}[2018/06/19]
\def\ExplFileName{algobox}
\def\ExplFileDescription{Typeset Algobox programs}
-\def\ExplFileDate{2017/09/04}
-\def\ExplFileVersion{1.2a}
+\def\ExplFileDate{2019/09/29}
+\def\ExplFileVersion{1.3}
%</driver|package>
%<*driver>
\documentclass[full,a4paper]{l3doc}
@@ -424,7 +424,7 @@
}
\NewDocumentCommand \@@_FINALGORITHME:w {} {
- \int_while_do:nNnn \l_@@_level_int > \c_zero {
+ \int_while_do:nNnn \l_@@_level_int > \c_zero_int {
\@@_unindent:
}
\@@_block:nn {structure} {FIN_ALGORITHME}
@@ -490,7 +490,7 @@
}
\NewDocumentCommand \@@_FONCTION:w { +u{\;} } {
- \int_while_do:nNnn \l_@@_level_int > \c_one {
+ \int_while_do:nNnn \l_@@_level_int > \c_one_int {
\@@_unindent:
}
\@@_indent:nn {fonctions} {FONCTION}
@@ -532,7 +532,7 @@
}
\cs_new_protected_nopar:Nn \@@_topstructure:nn {
- \int_while_do:nNnn \l_@@_level_int > \c_zero {
+ \int_while_do:nNnn \l_@@_level_int > \c_zero_int {
\@@_unindent:
}
\@@_indent:nn {#1} {#2}
@@ -545,7 +545,7 @@
}
\cs_new_protected_nopar:Nn \@@_funcstructure:nn {
- \int_while_do:nNnn \l_@@_level_int > \c_two {
+ \int_while_do:nNnn \l_@@_level_int > { 2 } {
\@@_unindent:
}
\bool_if:nTF {#2}{\@@_indent:nn}{\@@_block:nn} {fonctions} {#1}
diff --git a/macros/latex/contrib/algobox/algobox.ins b/macros/latex/contrib/algobox/algobox.ins
index 5cd013ccbe..1f3abb0edc 100644
--- a/macros/latex/contrib/algobox/algobox.ins
+++ b/macros/latex/contrib/algobox/algobox.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File algobox.ins (C) Copyright 2016-2017 RIVAUD Julien
+File algobox.ins (C) Copyright 2016-2019 RIVAUD Julien
It may be distributed and/or modified under the conditions of the
General Public License (GPL), either version 3 of this
diff --git a/macros/latex/contrib/algobox/algobox.pdf b/macros/latex/contrib/algobox/algobox.pdf
index f8ee23f553..c2a8a7dc81 100644
--- a/macros/latex/contrib/algobox/algobox.pdf
+++ b/macros/latex/contrib/algobox/algobox.pdf
Binary files differ
diff --git a/macros/latex/contrib/cellprops/LICENSE b/macros/latex/contrib/cellprops/LICENSE
index c47740c712..82ae7cd1eb 100644
--- a/macros/latex/contrib/cellprops/LICENSE
+++ b/macros/latex/contrib/cellprops/LICENSE
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
cellprops
- Copyright (C) 2018 Julien "_FrnchFrgg_" RIVAUD
+ Copyright (C) 2016-2019 Julien "_FrnchFrgg_" RIVAUD
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
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
- cellprops Copyright (C) 2018 Julien "_FrnchFrgg_" RIVAUD
+ cellprops Copyright (C) 2016-2019 Julien "_FrnchFrgg_" RIVAUD
This program 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.
diff --git a/macros/latex/contrib/cellprops/README.md b/macros/latex/contrib/cellprops/README.md
index b09b4a5d35..740e9561b3 100644
--- a/macros/latex/contrib/cellprops/README.md
+++ b/macros/latex/contrib/cellprops/README.md
@@ -13,7 +13,7 @@ Look at the PDF documentation to see examples and detailed usage.
-Copyright (C) 2018 Julien "_FrnchFrgg_" RIVAUD
+Copyright (C) 2016-2019 Julien "_FrnchFrgg_" RIVAUD
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
diff --git a/macros/latex/contrib/cellprops/cellprops.dtx b/macros/latex/contrib/cellprops/cellprops.dtx
index 1ee1a858b5..67b4dc8cd2 100644
--- a/macros/latex/contrib/cellprops/cellprops.dtx
+++ b/macros/latex/contrib/cellprops/cellprops.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
% vim: tw=80 spl=en
%
-%% File: cellprops.dtx (C) Copyright 2018 RIVAUD Julien
+%% File: cellprops.dtx (C) Copyright 2016-2019 RIVAUD Julien
%%
%% It may be distributed and/or modified under the conditions of the
%% General Public License (GPL), either version 3 of this
@@ -11,11 +11,11 @@
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\RequirePackage{expl3}[2016/01/19]
+\RequirePackage{expl3}[2018/06/19]
\def\ExplFileName{cellprops}
\def\ExplFileDescription{CSS-like cell and table properties}
-\def\ExplFileDate{2018/07/16}
-\def\ExplFileVersion{1.4}
+\def\ExplFileDate{2019/09/29}
+\def\ExplFileVersion{1.6}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -103,12 +103,12 @@
% text-align: left;
% }
% }
-% \begin{array}{nnnn}
+% \begin{array}{nnnp{5em}}
% This is text & A_2 & A_3 & A_4 \\
% B1 & This is maths & B_3 & \\
% C1 & C_2 & X & Y \\
% D1 & D_2 & DX & v \\
-% E & F & \int_a^b f(t) dt & v \\
+% & F & \int_a^b f(t) dt & v \\
% \end{array}
% \]
% you can use:
@@ -274,17 +274,17 @@
% \end{description}
%
% Most of these properties are straight-forward. You should check a
-% CSS documentation to get more information. A very good source is the Mozilla
+% CSS documentation to get more information. A very good source is the Mozilla
% Developer Network.
%
% Here are the supported column types:
% \begin{itemize}
% \item "n": The most basic cell type, hbox, honoring all properties.
-% \item "l", "c", and "r": Same as "n" but with forced "text-align".
-% \item "M"\<coltype>: Same as \<coltype> but enforces "math-mode: math". The
-% net effect is that "Mc" will create a centered column whose contents are
-% in non-display math mode.
-% \item "T"\<coltype>: Same as \<coltype> but enforces "math-mode: text".
+% \item "l", "c" and "r": Same as "n" but with forced "text-align".
+% \item "Ml", "Mc" and "Mr": Same as column "l", "c" and "r" but enforces
+% "math-mode: math". The net effect is that "Mc" will create a centered
+% column whose contents are in non-display math mode.
+% \item "T"\<align>: Same as "M"\<align> but enforces "math-mode: text".
% \item "p{"\<width>"}", "m"\<width> and "b"\<width>: parbox cell with the
% corresponding vertical alignment (\cs{vtop}, \cs{vcenter} or \cs{vbox}).
% \item "*{"\<count>"}{"\<coltypes>"}": same as in \pkg{array} or
@@ -361,6 +361,7 @@
\RequirePackage{xparse}
\RequirePackage{xcolor}
+\RequirePackage{etoolbox}
% \end{macrocode}
%
% \subsection{Loading and fixing \pkg{mdwtab}}
@@ -458,7 +459,7 @@
\seq_map_inline:Nn \l_tmpa_seq {
\tl_if_empty:nF {##1} {
\exp_args:NNV \seq_set_split:Nnn \l_tmpb_seq \c_colon_str {##1}
- \int_compare:nNnTF {\seq_count:N \l_tmpb_seq} = \c_two {
+ \int_compare:nNnTF {\seq_count:N \l_tmpb_seq} = { 2 } {
\seq_get_left:NN \l_tmpb_seq \l_tmpa_tl
\exp_args:NNV \str_set:Nn \l_tmpa_str \l_tmpa_tl
\seq_get_right:NN \l_tmpb_seq \l_tmpa_tl
@@ -516,7 +517,7 @@
\str_if_eq:nnTF {#2} {inherit} {
\@@_generic_setter:nnn \exp_not:n {#1} {\c_@@_inherit_color_tl}
}{
- \str_case_x:nnF { \str_range:nnn {#2} {1} {4} } {
+ \str_case_e:nnF { \str_range:nnn {#2} {1} {4} } {
{rgb(} {
\@@_generic_setter:nnn \use:n {#1} {
\exp_not:n {\color[RGB]} {\str_range:nnn {#2} {5} {-2}}
@@ -904,8 +905,36 @@
\exp_args:Nx \tab@preamble
{ \exp_not:N\@@_startrow: \the\tab@preamble \exp_not:N\@@_endrow: }
}
+% \end{macrocode}
+%
+% The color inheritance is handled with \cs{l_@@_inherit_color_tl},
+% \cs{l_@@_color_tl} and \cs{l_@@_bgcolor_tl}. The role of
+% \cs{@@_update_color:Nn} is to set the inherit fallback to the already
+% existing value of \verb|#1| then set \verb|#1| to the CSS value, which can be
+% the inherit variable.
+%
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_update_color:Nn {
+ \@@_get_property:nN {#2} \l_tmpa_tl
+ \exp_args:NV \tl_if_eq:NNF \l_tmpa_tl \c_@@_inherit_color_tl {
+ \tl_set_eq:NN #1 \l_tmpa_tl
+ }
+}
-
+\cs_new_protected_nopar:Nn \@@_update_colors: {
+ \@@_update_color:Nn \l_@@_color_tl {color}
+ \@@_update_color:Nn \l_@@_bgcolor_tl {background-color}
+}
+% \end{macrocode}
+%
+% Patch the \cs{@array}, \cs{LT@array}, \cs{@mkpream}, \cs{endarray} and
+% \cs{endlongtable} commands, so that we can properly setup our line and column
+% counting system. This is the most brittle part of \pkg{cellprops}, and subject
+% to compatibility problems with other packages that patch those (\pkg{hyperref}
+% in particular).
+%
+% \begin{macrocode}
+\AtEndPreamble{%
\cs_set_eq:NN \@@_orig_array:w \@array
\cs_set_protected_nopar:Npn \@array[#1]#2 {
\@@_array_init:
@@ -926,26 +955,6 @@
\@@_orig_LTarray:w [#1]{#2}
\@@_array_startcontent:
}
-% \end{macrocode}
-%
-% The color inheritance is handled with \cs{l_@@_inherit_color_tl},
-% \cs{l_@@_color_tl} and \cs{l_@@_bgcolor_tl}. The role of
-% \cs{@@_update_color:Nn} is to set the inherit fallback to the already
-% existing value of \verb|#1| then set \verb|#1| to the CSS value, which can be
-% the inherit variable.
-%
-% \begin{macrocode}
-\cs_new_protected_nopar:Nn \@@_update_color:Nn {
- \@@_get_property:nN {#2} \l_tmpa_tl
- \exp_args:NV \tl_if_eq:NNF \l_tmpa_tl \c_@@_inherit_color_tl {
- \tl_set_eq:NN #1 \l_tmpa_tl
- }
-}
-
-\cs_new_protected_nopar:Nn \@@_update_colors: {
- \@@_update_color:Nn \l_@@_color_tl {color}
- \@@_update_color:Nn \l_@@_bgcolor_tl {background-color}
-}
\cs_new_nopar:Nn \@@_end_array:n {
\tl_if_empty:NF \g_@@_borders_tl { \\ }
@@ -971,7 +980,7 @@
\bool_if:NF \g_@@_inrow_bool {
\bool_gset_true:N \g_@@_inrow_bool
\int_gincr:N \g_@@_row_int
- \int_gset_eq:NN \g_@@_col_int \c_one
+ \int_gset_eq:NN \g_@@_col_int \c_one_int
\dim_gzero:N \g_@@_ht_dim
\dim_gzero:N \g_@@_dp_dim
}
@@ -1013,6 +1022,8 @@
}
}
+}
+
\cs_new_nopar:Nn \@@_fix_valign_end:n {
\noalign{
\dim_set:Nn \l_tmpa_dim {#1}
@@ -1020,7 +1031,7 @@
\exp_args:NV \tl_if_eq:nnTF \tab@hlstate {b} {
\dim_gadd:Nn \tab@endheight { \g_@@_dp_dim + \l_tmpa_dim }
}{
- \int_compare:nNnT \g_@@_row_int = \c_one {
+ \int_compare:nNnT \g_@@_row_int = \c_one_int {
\dim_gadd:Nn \tab@endheight { \g_@@_ht_dim }
}
}
@@ -1118,7 +1129,7 @@
\@@_begin_raw_cell:n {
#1
\hbox_set:Nw \l_@@_cell_box
- \str_case_x:nnF {\@@_get_property:n {math-mode}} {
+ \str_case_e:nnF {\@@_get_property:n {math-mode}} {
{ text } { \tab@btext }
{ math } { \tab@bmaths }
}{% any other treated as |auto|
@@ -1128,7 +1139,7 @@
}
\cs_new_protected_nopar:Nn \@@_endcell: {
- \str_case_x:nnF {\@@_get_property:n {math-mode}} {
+ \str_case_e:nnF {\@@_get_property:n {math-mode}} {
{ text } { \tab@etext }
{ math } { \tab@emaths }
}{% any other treated as |auto|
@@ -1179,7 +1190,7 @@
#1
\hbox_set_end:
\@@_end_raw_cell:
- \spewnotes\hfil
+ \spewnotes
}
\cs_new_protected_nopar:Nn \@@_begin_raw_cell:n {
@@ -1341,17 +1352,7 @@
{\g_@@_dp_dim}
{\box_dp:N \l_@@_cell_box}
}
- % Handle hpadding and halign
- \skip_set:Nn \l_tmpa_skip {
- \dim_max:nn
- {0pt}
- { (\@@_get_property:n {min-width})
- - \box_wd:N \l_@@_cell_box }
- }
- \skip_add:Nn \l_tmpa_skip {
- 0pt plus 1fil
- }
- % padding-left and border-left
+ % Handle padding-left and border-left
\@@_get_border_info:n {left}
\skip_set:Nn \l_@@_left_skip
{\@@_get_property:n {padding-left} + \l_@@_border_width_dim}
@@ -1387,7 +1388,17 @@
\exp_not:n { \kern \c_zero_dim }
}
}
- \str_case_x:nnF {\@@_get_property:n {text-align}} {
+ % Handle hpadding and halign
+ \skip_set:Nn \l_tmpa_skip {
+ \dim_max:nn
+ {0pt}
+ { (\@@_get_property:n {min-width})
+ - \box_wd:N \l_@@_cell_box }
+ }
+ \skip_add:Nn \l_tmpa_skip {
+ 1sp plus 1fil
+ }
+ \str_case_e:nnF {\@@_get_property:n {text-align}} {
{ right } {
\skip_add:Nn \l_@@_left_skip { \l_tmpa_skip }
}
@@ -1415,7 +1426,7 @@
\group_end:
}
\skip_horizontal:N \l_@@_left_skip
- \box_use_clear:N \l_@@_cell_box
+ \box_use_drop:N \l_@@_cell_box
\skip_horizontal:N \l_@@_right_skip
\kern\c_zero_dim
\group_end:
diff --git a/macros/latex/contrib/cellprops/cellprops.ins b/macros/latex/contrib/cellprops/cellprops.ins
index 6ca5339738..195394a7e7 100644
--- a/macros/latex/contrib/cellprops/cellprops.ins
+++ b/macros/latex/contrib/cellprops/cellprops.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File cellprops.ins (C) Copyright 2016-2018 RIVAUD Julien
+File cellprops.ins (C) Copyright 2016-2019 RIVAUD Julien
It may be distributed and/or modified under the conditions of the
General Public License (GPL), either version 3 of this
diff --git a/macros/latex/contrib/cellprops/cellprops.pdf b/macros/latex/contrib/cellprops/cellprops.pdf
index 20ebc28a52..18aba7b5e7 100644
--- a/macros/latex/contrib/cellprops/cellprops.pdf
+++ b/macros/latex/contrib/cellprops/cellprops.pdf
Binary files differ
diff --git a/macros/latex/contrib/filecontentsdef/INSTALL b/macros/latex/contrib/filecontentsdef/INSTALL
index 2657632382..b8685ab7ff 100644
--- a/macros/latex/contrib/filecontentsdef/INSTALL
+++ b/macros/latex/contrib/filecontentsdef/INSTALL
@@ -1,4 +1,4 @@
- Source: filecontentsdef.dtx (v1.4 2019/04/20)
+ Source: filecontentsdef.dtx (v1.5 2019/09/29)
Author: Jean-Francois Burnol
Info: filecontents + macro + verbatim
License: LPPL 1.3c
@@ -15,7 +15,7 @@ Use your installation manager.
Else, for manual installation:
- To extract the package and at the same time produce the
- documentation, execute latex twice on filecontentsdef.dtx then
+ documentation, execute latex thrice on filecontentsdef.dtx then
dvipdfmx on the dvi file.
To customize the PDF documentation (paper size, etc...): execute
diff --git a/macros/latex/contrib/filecontentsdef/README.md b/macros/latex/contrib/filecontentsdef/README.md
index 305ecfc66d..77ed11d7b7 100644
--- a/macros/latex/contrib/filecontentsdef/README.md
+++ b/macros/latex/contrib/filecontentsdef/README.md
@@ -1,6 +1,6 @@
<!-- -->
- Source: filecontentsdef.dtx (v1.4 2019/04/20)
+ Source: filecontentsdef.dtx (v1.5 2019/09/29)
Author: Jean-Francois Burnol
Info: filecontents + macro + verbatim
License: LPPL 1.3c
@@ -27,6 +27,40 @@ macro, but skips the save-to-a-file part.
CHANGE LOG
==========
+v1.5 \[2019/09/29\]
+-------------------
+
+- `\filecontentsexec` does not forcefully reset `\newlinechar`
+ to its LaTeX default after execution.
+
+- `\FCD@` as prefix for internal non public macros.
+
+- drop usage of the legacy LaTeX mechanism which issued a warning
+ in case of a form feed or horizontal tabulation character in the
+ parsed contents.
+
+- make handling of the tabulation and form feed characters
+ customizable.
+
+- treat especially the case when the `\end{filecontents...}`
+ is not on a line of its own.
+
+- add `filecontentsdefstarred` (et al.) as alias for
+ `filecontentsdef*` (et al.) for easying up encapsulation in
+ wrapping environments.
+
+- breaking change: `filecontentsdef` and `filecontentsdefmacro`
+ define a macro obeying the local scope. Use `filecontentsgdef`,
+ resp. `filecontentsgdefmacro` for definitions with global scope.
+
+- make the name of the environment used by `\filecontentsprint`
+ customizable (it defaults to `verbatim`) and allow to pass options
+ to it; has been tested with `fancyvrb` and `minted`.
+
+- add `\filecontentsprintviascan` which allows to use verbatim-like
+ environment such as `listings` which are incompatible with
+ `\filecontentsprint`.
+
v1.4 \[2019/04/20\]
-------------------
diff --git a/macros/latex/contrib/filecontentsdef/filecontentsdef.dtx b/macros/latex/contrib/filecontentsdef/filecontentsdef.dtx
index b6b722383c..7f78abe135 100644
--- a/macros/latex/contrib/filecontentsdef/filecontentsdef.dtx
+++ b/macros/latex/contrib/filecontentsdef/filecontentsdef.dtx
@@ -2,28 +2,28 @@
% N.B.: this dtx file is NOT for use with \DocInput but only docstrip.
% The latex source of the user manual isn't commented out.
%<*none>
-\def\dtxtimestamp{21-04-2019 at 15:24:14 CEST}%
+\def\dtxtimestamp{29-09-2019 at 10:46:12 CEST}%
%</none>
%<*!readme&!install>
%%
%% Package: filecontentsdef
-%% Version: 1.4 (2019/04/20)
+%% Version: 1.5 (2019/09/29)
%% License: LPPL 1.3c
%% Copyright (C) 2016-2019 Jean-Francois Burnol <jfbu at free dot fr>
%%
%</!readme&!install>
%<*none>
\def\pkgname {filecontentsdef}
-\def\pkgdate {2019/04/20}
-\def\pkgdocdate {2019/04/21}
-\def\pkgversion {v1.4}
+\def\pkgdate {2019/09/29}
+\def\pkgdocdate {2019/09/29}
+\def\pkgversion {v1.5}
\def\pkgdescription {filecontents + macro + verbatim (JFB)}
\catcode`\^ 12 \iffalse
%</none>
%<*readme|install>
<!-- -->
- Source: filecontentsdef.dtx (v1.4 2019/04/20)
+ Source: filecontentsdef.dtx (v1.5 2019/09/29)
Author: Jean-Francois Burnol
Info: filecontents + macro + verbatim
License: LPPL 1.3c
@@ -52,6 +52,40 @@ macro, but skips the save-to-a-file part.
CHANGE LOG
==========
+v1.5 \[2019/09/29\]
+-------------------
+
+- `\filecontentsexec` does not forcefully reset `\newlinechar`
+ to its LaTeX default after execution.
+
+- `\FCD@` as prefix for internal non public macros.
+
+- drop usage of the legacy LaTeX mechanism which issued a warning
+ in case of a form feed or horizontal tabulation character in the
+ parsed contents.
+
+- make handling of the tabulation and form feed characters
+ customizable.
+
+- treat especially the case when the `\end{filecontents...}`
+ is not on a line of its own.
+
+- add `filecontentsdefstarred` (et al.) as alias for
+ `filecontentsdef*` (et al.) for easying up encapsulation in
+ wrapping environments.
+
+- breaking change: `filecontentsdef` and `filecontentsdefmacro`
+ define a macro obeying the local scope. Use `filecontentsgdef`,
+ resp. `filecontentsgdefmacro` for definitions with global scope.
+
+- make the name of the environment used by `\filecontentsprint`
+ customizable (it defaults to `verbatim`) and allow to pass options
+ to it; has been tested with `fancyvrb` and `minted`.
+
+- add `\filecontentsprintviascan` which allows to use verbatim-like
+ environment such as `listings` which are incompatible with
+ `\filecontentsprint`.
+
v1.4 \[2019/04/20\]
-------------------
@@ -104,7 +138,7 @@ Use your installation manager.
Else, for manual installation:
- To extract the package and at the same time produce the documentation,
- execute latex twice on `filecontentsdef.dtx` then `dvipdfmx` on the
+ execute latex thrice on `filecontentsdef.dtx` then `dvipdfmx` on the
`dvi` file.
To customize the PDF documentation (paper size, etc...): execute `etex`
@@ -172,7 +206,7 @@ of the project using it.
\Msg{*\space\space\space\space \pkgname.sty^^J}%
\Msg{*^^J}%
\Msg{* To produce the documentation with source code included run latex^^J}%
-\Msg{* twice on file \pkgname.tex and then dvipdfmx on \pkgname.dvi^^J}%
+\Msg{* thrice on file \pkgname.tex and then dvipdfmx on \pkgname.dvi^^J}%
\Msg{*^^J}%
\Msg{* Happy TeXing!^^J}%
\Msg{*^^J}%
@@ -257,7 +291,7 @@ of the project using it.
\newcommand\fcdname{%
\texorpdfstring{{\color{joli}\ttfamily\bfseries \pkgname}}{\pkgname}\xspace}
-\DeclareRobustCommand\csa [1] {{\ttfamily\hyphenchar\font45 \char`\\ #1}}
+\DeclareRobustCommand\csa[1]{{\ttfamily\hyphenchar\font45 \char`\\ #1}}
\newcommand\csh[1]{\texorpdfstring{\csa{#1}}{\textbackslash\detokenize{#1}}}
@@ -292,25 +326,20 @@ pdfpagemode=UseOutlines}
\usepackage{filecontentsdef}
\makeatletter
-% Revert change to \smash and other macros at LaTeX 2018/12/01
-% https://github.com/latex3/latex2e/issues/108
-\let\leavevmode@ifvmode\empty % for \smash in \NewWith etc...
-\newcommand\inmarg [1]{\@bsphack
+% \hbox needed since change to \smash and other macros at LaTeX 2018/12/01
+\def\NewWith #1{\@bsphack
\vadjust{\vskip-\dp\strutbox
- \smash{\hbox to 0pt
- {\color[named]{PineGreen}\normalfont\small\bfseries
+ \hbox{\smash{\hbox to 0pt {\hss\color[named]{Thistle}%
+ \normalfont\small\bfseries
\hsize 2.5cm\rightskip.5cm minus.5cm
- \hyphenpenalty\z@\exhyphenpenalty\z@
- \doublehyphendemerits\z@\baselineskip9pt
- \hss\vtop{\noindent#1}\kern.25cm }}%
+ \vtop{\noindent New with #1}\kern.25cm }}}%
\vskip\dp\strutbox }\strut\@esphack}
-%! 24 février 2014. J'ai besoin de me débarrasser du \to
-\def\NewWith #1{\@bsphack
+\def\ChangedAt #1{\@bsphack
\vadjust{\vskip-\dp\strutbox
- \smash{\hbox to 0pt {\hss\color[named]{Thistle}%
+ \hbox{\smash{\hbox to 0pt {\hss\color[named]{Thistle}%
\normalfont\small\bfseries
\hsize 2.5cm\rightskip.5cm minus.5cm
- \vtop{\noindent New with #1}\kern.25cm }}%
+ \vtop{\noindent Changed at #1}\kern.25cm }}}%
\vskip\dp\strutbox }\strut\@esphack}
\makeatother
@@ -361,21 +390,20 @@ pdfpagemode=UseOutlines}
\href{https://ctan.org/pkg/attachfile}{attachfile}.)
\end{abstract}
-\section{Description}
+\tableofcontents
+
+\section{Environments and macros}
-This package provides the |filecontentsdef|\inmarg{|file\-contents\-def|}
-environment. It is like |filecontents| but requires a second argument. This
-argument will either be:
+\subsection{\textcolor[named]{PineGreen}{\texttt{filecontentsdef}},
+ \textcolor[named]{PineGreen}{\texttt{filecontentsgdef}}}
+
+The |filecontentsdef| environment is like |filecontents| but
+requires a second argument. This argument will either be:
\begin{itemize}
-\item a single control sequence token such as |\macro|,
-\item \mbox{}\NewWith{v1.4$\to$}or anything else which then must after expansion be
+\item a single control sequence token such as |\foo|,
+\item or anything else which then must after expansion be
usable as a macro \emph{name} (it will be handled via
|\csname...\endcsname| encapsulation).
-% Bordel, que d'emmerdements avec le LaTeX \footnote et \verb ! On ne peut même
-% pas faire \string\fi (ou \else, ou \if pas vérifié lequel des trois:
-% incomplete \ifmmode
-%\footnote{
-% Bon ben finalement pas de footnote de toute façon. Déjà fait le mark-up je laisse.
For example \texttt{\string\myitemnumber\{3\}} can be used as argument and
it will then be expanded inside \texttt{\string\csname...\string\endcsname}
to construct a control sequence, whose name will possibly contain digits or
@@ -383,13 +411,11 @@ argument will either be:
allowed as long as its expansion is
\texttt{\string\csname...\string\endcsname} compatible; the character itself
will \emph{not} be assigned a new meaning.
-%}
-%
\end{itemize}
Thus the syntax is either:
\begin{verbatim}
- \begin{filecontentsdef}{<filename>}{\macro}
+ \begin{filecontentsdef}{<filename>}{\foo}
... arbitrary contents ...
\end{filecontentsdef}
\end{verbatim}
@@ -401,22 +427,32 @@ or:
\end{verbatim}
The environment creates the file and stores its (verbatim) contents into its
-second argument |\macro| (or into the macro |\<macro name>| with given name).
+second argument |\foo| (or into the macro |\<macro name>| with given name).
+
+\begin{framed}
+ Hint: if some |\foo| contains the \emph{name} of the macro to be defined, use
+ |\empty\foo| as argument, thus avoiding |\foo| itself to get overwritten by
+ the environment.
+\end{framed}
\begin{enumerate}
-\item The starred variant acts like |filecontents*| environment regarding the
- file contents.
+\item The starred variant |filecontentsdef*| acts like
+ |filecontents*| environment regarding the file contents, i.e.
+ it drops addition of a (\TeX) commented out header.
+\item |filecontentsdefstarred| is an alias for
+ |filecontentsdef*|.\NewWith{v1.5}
\item The contents put into the macro are the same for the starred and
- non-starred environments: they do not contain the commented-out header.
-\item The scope of the macro definition is global.
+ non-starred environments: neither contains a commented-out header.
+\item The scope of the macro definition is
+ \textbf{local}.\ChangedAt{v1.5}
+\item
+ Use |filecontentsgdef| for a definition with global scope.\NewWith{v1.5}
\item No check is done on whether the defined macro pre-existed.
-% \item |filecontentshere| is a wrapper of the |filecontentsdef|
-% environment using \csa{filecontentsheremacro} as the macro where the
-% contents are stored.\inmarg{\csa{file\-contents\-here\-macro}} This macro
-% can then be reused elsewhere if wanted.
-\item The macro holds a verbatim rendering of the contents, which handles the
- Form Feed and Tabulation characters analogously to the |filecontents|
- treatment.
+\item The macro holds a verbatim rendering of the contents, with active spaces
+ and active |^^M| tokens.
+\item The handling of the\NewWith{v1.5}
+ Form Feed and Tabulation characters can be, contrarily to the |filecontents|
+ treatment, customized. See \autoref{sec:tab}.
\item Babel shorthands will be neutralized the same way they are when
encountered in a verbatim environment or in a |filecontents|
environment. Their action is reactivated if the macro (assuming the
@@ -425,13 +461,10 @@ second argument |\macro| (or into the macro |\<macro name>| with given name).
\item The environment can be used either in the preamble or the body
of the document.
\item The contents must not contain themselves a
- \texttt{\string\end}|{filecontentsdef}| (or |end{filecontentsdef*}| in the
+ \texttt{\string\end}|{filecontentsdef}| (or \texttt{\string\end}|{filecontentsdef*}| in the
starred case).
-\item If some |\macro| contains the \emph{name} of the macro to be defined,
- use then |\empty\macro| as argument, this trick will avoid the environment
- thinking it is supposed to redefine |\macro| itself.
% problème avec Emacs/AUCTeX et |\end{...}| qui fait boguer le fontlock
-% biarrement le deuxième ne pose pas de problème. 19 avril 2019.
+% bizarrement le deuxième ne pose pas de problème. 19 avril 2019.
\end{enumerate}
\begin{footnotesize}
@@ -442,8 +475,8 @@ starred case).
\item the space becomes the active character of ascii code |32|,
\item the end of line is converted into the active character |^^M| (i.e. ascii
code |13|),
-\item the tabulation character |CTRL-I| becomes the active space character,
-\item the form feed character |CTRL-L| is converted into a pair of active |^^M|,
+\item see \autoref{sec:tab} for the handling of the horizontal tabulation
+ and form feed characters,
\item the active bytes of ascii code between |128| and |255| (this is now
systematically the case with |inputenc+utf8| being default) are stored
into the produced macro ``as is'',
@@ -455,22 +488,44 @@ display as expected in a verbatim rendering, see \csa{filecontentsprint} next.
\par
\end{footnotesize}
-\medskip
+\subsection{\textcolor[named]{PineGreen}{\texttt{filecontentsdefmacro}},
+ \textcolor[named]{PineGreen}{\texttt{filecontentsgdefmacro}}}
-The \csa{filecontentsprint}\inmarg{\csa{file\-contents\-print}} macro has a
+This environment
+\begin{verbatim}
+ \begin{filecontentsdefmacro}{\foo or macro name}
+ ... arbitrary contents ...
+ \end{filecontentsdefmacro}
+\end{verbatim}
+was added at |v1.4|. It is like |filecontentsdef| without the
+``save to file'' part... and has thus a sole mandatory argument which may be
+either a control sequence or a name (or material expanding to name), as
+previously described. The macro can then be either printed verbatim via
+\csa{filecontentsprint} or, if it consists of \LaTeX\ code, be executed in
+re-tokenized form via \csa{filecontentsexec}.
+
+Its name is thus a bit paradoxical but was chosen to share an existing prefix
+with the other package macros and environments.
+
+\subsection{\textcolor[named]{PineGreen}{\csh{filecontentsprint}},
+\textcolor[named]{PineGreen}{\csh{FCDprintenvname}},
+\textcolor[named]{PineGreen}{\csh{FCDprintenvoptions}}}
+
+
+\csa{filecontentsprint} has a
unique mandatory argument which will be either:
\begin{itemize}
-\item a single control sequence token (for example |\macro|),
-\item \mbox{}\NewWith{v1.4$\to$}or anything else which then must after expansion be
+\item a single control sequence token (for example |\foo|),
+\item or anything else which then must after expansion be
usable as a macro \emph{name} (for example |macro|). It will be handled via
|\csname...\endcsname| encapsulation (see earlier explanations).%
\end{itemize}
-The |\macro| must be of the type constructed by the environment
-|filecontentsdef|. It will be then be printed exactly as
+The |\foo| must be of the type constructed by the environments
+|filecontentsdef| or |filecontentsdefmacro|. It will be then be printed exactly as
\begingroup\makeatletter\def\x{\let\@xverbatim\relax
\verbatim
\string\begin\string{verbatim\string}\par
-<contents of \string\macro>\par
+<contents of \string\foo>\par
\string\end\string{verbatim\string}\par
\endverbatim%
\endgroup}\x
@@ -483,11 +538,6 @@ This uses underneath the |verbatim| environment and has been
\href{http://www.ctan.org/pkg/verbatim}{verbatim} (whose mechanism is quite
different from the one of the default |verbatim| environment.)
-%xxx
-% MARRE DE EMACS/AUCTEX QUI SE CROIT PLUS INTELLIGENT QUE L'UTILISATEUR POUR
-% L'INDENTATION PAR FILL-PARAGRAPH (M-q)
-%xxx
-
\begin{framed}
Due to limitation of the |verbatim| environment, the
\texttt{\string\end}|{verbatim}| must not appear inside the contents... else
@@ -498,30 +548,182 @@ This uses underneath the |verbatim| environment and has been
affects \csa{filecontentsprint}, not \csa{filecontentsexec}.
\end{framed}
+The name of the used environment is held in macro
+\textcolor[named]{PineGreen}{\csa{FCDprintenvname}}.\NewWith{v1.5}
+Redefine it to modify the environment name from its default |verbatim|.
+
+Furthermore\NewWith{v1.5} the macro
+\textcolor[named]{PineGreen}{\csa{FCDprintenvoptions}} can be used to pass
+options to that environment.
+
+Here is a set-up using |fancyvrb| which I tested with success:
+\begin{verbatim}
+\documentclass{article}
+\usepackage{filecontentsdef}
+\usepackage{xcolor}
+\usepackage{fancyvrb}
+\usepackage{fvextra}
+
+% store tabs as active characters so they can be handled by fancyvrb
+{\catcode`\^^I=\active\gdef\FCDtabtomacro{\noexpand^^I}}
+
+% Use fancyvrb Verbatim environment
+\renewcommand*\FCDprintenvname{Verbatim}
+
+% with these options. This will be submitted to an \edef, so we
+% simply wrap in \unexpanded to avoid problems
+\renewcommand*\FCDprintenvoptions{%
+ \unexpanded{[fontsize=\scriptsize, highlightlines={1, 3-4},
+ numbers=both, showspaces, spacecolor=red,
+ showtabs, %tab=\rightarrowfill% incompatible with linebreaks?
+ breaklines,breakbefore=\\\space]}%
+}
+\begin{filecontentsdefmacro}{\testfancyvrb}
+some contents with long lines and tabs to test the options
+\end{filecontentsdefmacro}
+\end{verbatim}
+
+Here is now a set-up with |minted| which worked also (although the syntax
+highlighting was not handling correctly control sequences using the @ letter,
+but I am not knowledgeable enough in the Pygmentize library):
+
+\begin{verbatim}
+\documentclass{article}% needs shell-escape
+\usepackage{filecontentsdef}
+\usepackage{minted}
+\newminted{tex}{linenos}
+
+\renewcommand*\FCDprintenvname{texcode}
+
+\begin{filecontentsdefmacro}{\testminted}
+some TeX macros
+\end{filecontentsdefmacro}
+
+\begin{document}
+\filecontentsprint\testminted
+\end{document}
+\end{verbatim}
+
+\subsection{\textcolor[named]{PineGreen}{\csh{filecontentsprintviascan}}}
+
+It is not possible to use a |listings| environment via \csa{filecontentsprint}
+and \csa{FCDprintenv}, because |listings| has a special way to identify where
+it ends and this is incompatible with the \csa{filecontentsprint} approach.
+
+At |v1.5|
+\csa{filecontentsprintviascan} is added\NewWith{v1.5} which is more powerful
+than \csa{filecontentsprint} as it should work not only with verbatim
+environments known to be compatible with \csa{filecontentsprint} but
+also with environments of the |listings| type. But this requires \eTeX{}
+\csa{scantokens} (it uses \csa{filecontentsexec}, see next).%
+%
+\footnote{I know that the \LaTeX{} kernel itself requires \eTeX{} for a few
+ years now, but \fcdname could have been installed on an old machine...}
+
+Here is an example of usage which worked for me (although the syntax
+highlighting, like the one from |minted|, was not fully satisfying):
+
+\begin{verbatim}
+\documentclass{article}
+\usepackage{filecontentsdef}
+\usepackage{xcolor}
+\usepackage{listings}
+\lstnewenvironment{latexverbatim}
+ {\lstset{
+ basicstyle=\small\ttfamily,
+ breaklines=true,
+ columns=fullflexible,
+ language=[LaTeX]TeX,
+ numbers=left,
+ numbersep=1em,
+ numberstyle=\tiny\color{gray},
+ keywordstyle=\color{red}}}{}
+
+\renewcommand*\FCDprintenvname{latexverbatim}
+
+\begin{document}
+
+\begin{filecontentsdefmacro}{\testlistings}
+\gdef\filecontentsprintviascan{\FCD@get\FCD@printviascan}%
+\gdef\FCD@printviascan#1{%
+ \toks@\expandafter{#1}%
+ \edef\FCD@envwithcontents{%
+ \noexpand\begin{\FCDprintenvname}\FCDprintenvoptions\noexpand^^M%
+ \the\toks@\@backslashchar end{\FCDprintenvname}\noexpand^^M}%
+ \FCD@exec\FCD@envwithcontents}%
+\end{filecontentsdefmacro}
+
+\filecontentsprintviascan\testlistings
+\end{document}
+\end{verbatim}
+
+\subsection{\textcolor[named]{PineGreen}{\csh{filecontentsexec}}}
+
Although \fcdname itself generally does not require \eTeX, it provides as a
-convenience \csa{filecontentsexec}\inmarg{\csa{file\-contents\-exec}} which
+convenience \csa{filecontentsexec} which
does require it as it uses |\scantokens| to re-assign the current catcode
regime to the verbatimized tokens stored into its mandatory argument. Again
-the mandatory argument may have one of the two forms described previously.%
-\NewWith{v1.4$\to$}
+the mandatory argument may have one of the two forms described previously.
And of course this assumes that the tokens provide legitimate \LaTeX\ code.
\begin{footnotesize}
- \textbf{TeX-hacker note:} As an aftereffect, the |\newlinechar| will be set
- to |10| (its \LaTeX\ default) after execution; we skipped the saving and
- restoring of its value (it is temporarily set to |13| for |\scantokens|
- execution). No group is used in order to not create an extra scoping of the
- executed macro contents.
+ \textbf{TeX-hacker note:} No group is used in order to not create an extra
+ scoping of the executed macro contents.
+
+ \textbf{TeX-hacker note:} In the case of storage in a macro of some \LaTeX{}
+ contents, and re-parsing via |\filecontentsexec| which uses
+ |\scantokens|, the last line before the
+ \texttt{\string\end}|{filecontentsdef}|
+ or |\end{filecontentsdefmacro}| potentially generates an end of line
+ character, typically a space token (but this depends on the
+ \csa{endlinechar} valid at this location
+ setting). Such a space coming from the last end of line has no impact if
+ the \LaTeX{} contents get executed in vertical mode. In horizontal mode it
+ will be avoided if these contents end with a |%|
+ or also with some control sequence such as a |\relax| or
+ |\empty| (only if \csa{endlinechar} is standard).
+
+ At |v1.5|\NewWith{v1.5} a special convention is added that if the
+ \texttt{\string\end}|{filecontentsdef}| (or variants) stands on
+ the same line as the last line of the contents, rather than being on
+ a line of its own, then the stored contents will get postfixed with
+ an added \csa{empty} token. Thus execution via
+ \csa{filecontentsexec} in horizontal mode will not induce any ending
+ space token (assuming the \csa{endlinechar} is then at its standard
+ setting). This feature is to be used only with contents representing
+ \TeX{} macros, as the \csa{empty} makes sense only in that context.
+ This token will remain invisible in the PDF output from
+ \csa{filecontentsprint}.
+
+ No \csa{empty}
+ gets added to the last line of the exported file (if there is one).
+ The original |filecontents| environment issues a warning when there is
+ contents before the end of the environment on the same line, this warning is
+ now skipped.\ChangedAt{v1.5}
+
+ This extra \csa{empty}
+ added only under such special usage of the environment is not currently
+ customizable, but I can add such a feature if there is a user request.
+
+ \textbf{TeX-hacker note:} one should not think that using
+ \csa{filecontentsexec} with some stored material will behave like copying
+ pasting that material directly at that very location of the source code: for
+ example if the last line ends with a |%|
+ this does not mean that this will comment out what is next in the source
+ code on the same line after the \csa{filecontentsexec}! It is more analogous
+ to making first a macro definition with the contents and then execute that
+ macro. But it is not possible for some macro from inside these contents to
+ itself grab tokens coming next after the \csa{filecontentsexec}\csa{foo}
+ (moreover, \fcdname adds tokens of its own in order restore the
+ \csa{newlinechar}).
- \textbf{TeX-hacker note:} A space token will be present at the end of the
- expansion, due to |\scantokens|'s way of working, but may be hidden by the
- nature of the contents themselves, if for example they end with a |\relax|
- or a |%|, or from arising in vertical mode.
\end{footnotesize}
-The environment\inmarg{|file\-contents\-here|}
+\subsection{\textcolor[named]{PineGreen}{\texttt{filecontentshere}}}
+
+This environment
\begin{verbatim}
\begin{filecontentshere}{<filename>}
... arbitrary contents ...
@@ -538,84 +740,79 @@ and then immediately
\begin{verbatim}
\filecontentsprint\filecontentsheremacro
\end{verbatim}
-The |\filecontentsheremacro| remains available for reuse with |\filecontentsexec|.
+The |\filecontentsheremacro| is then available for usage as argument
+of |\filecontentsexec|. Since |v1.5| its definition has only
+local scope.
+\ChangedAt{v1.5}
+
+The environment has a starred variant
+|filecontentshere*| (also |filecontentsherestarred|) which does the
+expected thing.
For example
\begin{verbatim}
-\begin{filecontentshere}{\jobname.test}
+\begin{filecontentshere*}{\jobname.test}
\begin{framed}
\noindent
We have coded this in \LaTeX: both
$E=mc^2$ (input as \verb|$E=mc^2$|)
and $E=h\nu$ owe much to \textsc{Albert Einstein}.
\end{framed}
-\end{filecontentshere}
+\end{filecontentshere*}
\filecontentsexec\filecontentsheremacro
\end{verbatim}
-will produce the external file with extension
-|.test| and have this effect in the document (verbatim framed then real framed):
-\begin{filecontentshere}{\jobname.test}
+will produce an external file with the above contents and have this
+effect in the document (verbatim framed then real framed):
+\begin{filecontentshere*}{\jobname.test}
\begin{framed}
\noindent
We have coded this in \LaTeX: both
$E=mc^2$ (input as \verb|$E=mc^2$|)
and $E=h\nu$ owe much to \textsc{Albert Einstein}.
\end{framed}
-\end{filecontentshere}
+\end{filecontentshere*}
\filecontentsexec\filecontentsheremacro
-The environment\inmarg{|file\-contents\-def\-macro|}
-\begin{verbatim}
- \begin{filecontentsdefmacro}{\macro or macro name}
- ... arbitrary contents ...
- \end{filecontentsdefmacro}
-\end{verbatim}
-was added at |v1.4|.\NewWith{v1.4} It is like |filecontentsdef| without the
-``save to file'' part... and has thus a sole mandatory argument which may be
-either a control sequence or a name (or material expanding to name), as
-previously described. The macro can then be either printed verbatim via
-\csa{filecontentsprint} or, if it consists of \LaTeX\ code, be executed in
-re-tokenized form via \csa{filecontentsexec}.
-
-Its name is thus a bit paradoxical but was chosen to share an existing prefix
-with the other package macros and environments.
-
\section{How to wrap usage of \texttt{filecontentsdef} in another
environment}
-It is simple: don't use |\begin/\end| syntax
-% \verb|\end{filecontentsdef}|, % uniquement à cause de bug de Emacs/AUCTeX
-% % fontlocking
-but |\begingroup\filecontentsdef{..}{..}| and |\endfilecontentsdef\endgroup|.
+Don't use the |\begin/\end| syntax but directly
+|\begingroup\filecontentsdef{..}{..}| and |\endfilecontentsdef\endgroup|.
And these should come last, respectively first, in the definition of the
begin, respectively end, part of the new environment.
-The extra |\begingroup...\endgroup| is needed only to the extent that
-definitions and catcode assignments could affect the execution of the
-rest of the |end| part of the new environment. As this |end| part will
-be tokenized at time of definition, it will in general be indifferent to
-the catcode modifications done by \csa{filecontentsdef} and generally
-speaking the |\begingroup...\endgroup| can be dropped.
-
-Of course, for wrapping the starred variant one should use
-% PUTAIN DE BORDEL DE Text for \verb command ended by end of line, QU'EST-CE
-% QUE LATEX EST CHIANT. Plus le fill-paragraph de Emacs et le doctex-mode défectueux.
-|\csname filecontentsdef*\endcsname|, or make the definition with |*| having catcode
-letter. But the \verb|\endfilecontentsdef| can drop the |*|, as the starred
-environments defined by the \fcdname package use the same ending macros as
-their non-starred variants.
+The extra |\begingroup...\endgroup| are mandatory with the
+\fcdname environments making a local scope definition.\ChangedAt{v1.5}
+
+For those creating global scope macros, |\begingroup...\endgroup|
+is recommended, as the \LaTeX{} state is not completely clean
+after |\endfilecontentsgdef| (et al.) execution. Thus it is
+better to have the extra |\begingroup...\endgroup| pair always
+(which are a part of the things added by the |\begin/\end| syntax).
+
+For wrapping the starred variant one needs to use
+|\csname filecontentsdef*\endcsname|, or make the definition with |*|
+having catcode letter. A simpler way is to use the alias ending
+in |...starred|.\NewWith{v1.5} Regarding the ending macro its
+name can drop the |*|, as the starred environments defined by the
+\fcdname package use the same ending macros as their non-starred
+variants.
As exercise, let's imagine we want an environment which will be associated
to some counter, will automatically increment it at each usage, and will
-use this counter to index the files and macros created on each invocation.
+use this counter to index the files and macros created on each
+invocation.
+Except if you know how to smuggle how a macro from an environment
+you probably want to use |filecontentsgdef| in order for the
+macro to have global scope.
\begin{filecontentsdefmacro}{\pablo}
\newcounter{pablo}
\newenvironment{defexercise}
{\stepcounter{pablo}%
\begingroup
- \csname filecontentsdef*\endcsname
+ \filecontentsgdefstarred
{\jobname-ex\the\value{pablo}}{exercise-\the\value{pablo}}}%
- {\endfilecontentsdef\endgroup}
+ {\endfilecontentsgdefstarred\endgroup}
\newcommand{\printexercise}[1]{\filecontentsexec{exercise-\the\numexpr#1\relax}}
\end{filecontentsdefmacro}
\filecontentsprint\pablo
@@ -649,11 +846,155 @@ This produces in the document:
Additionally, three small files were created containing the \LaTeX\ mark-up
for each exercise.
+
+\section{How to customize handling of tabulation and form feed characters}
+\label{sec:tab}
+
+\LaTeX{} assigns catcode 10 by default to |^^I| meaning that it is handled by
+default as a space character:
+\begin{filecontentsdefmacro}{\coucou}
+\def\test{^^I}
+\ifx\test\space \textcolor{blue}{OK}\else \ERROR\fi
+\end{filecontentsdefmacro}
+\filecontentsprint\coucou
+\filecontentsexec\coucou
+
+But \fcdname like the original |filecontents| environment assigns active
+catcode to the tabulation character before parsing the contents. This allows
+special treatment.
+
+\begin{framed}
+ Attention that if input as |^^I| (in opposition to the real ascii character
+ of ascii code 9), it will end up simply as |^^I| in external file or macro,
+ because the caret loses its special meaning in the environment.
+
+ The discussion in this section about customizing \fcdname behaviour applies
+ only to a source with a real tabulation character, not one in \TeX{} notation
+ |^^I|.
+\end{framed}
+
+With
+|v1.5|, \fcdname diverges from original |filecontents| by adding the means to
+customize the handling of such tabulation character, rather than simply raising
+a warning and exporting it as a space like original |filecontents|. And also
+the handling of the form feed character can be customized.
+
+This is controlled via four control sequences whose default definitions are
+the following:\NewWith{v1.5}
+\begin{verbatim}
+\def\FCDtabtofile{ }%
+
+{\catcode32\active\gdef\FCDtabtomacro{\noexpand }}%
+
+\def\FCDformfeedtofile{^^J^^J}%
+
+{\catcode`\^^M\active\gdef\FCDformfeedtomacro{\noexpand^^M\noexpand^^M}}%
+\end{verbatim}
+
+Each of \csa{FCDtabtofile}, \csa{FCDtabtomacro},
+\csa{FCDformfeedtofile}, \csa{FCDformfeedtomacro} gets used via an
+expansion inside an \csa{edef}, hence the need for \csa{noexpand} in front
+of active characters. The |^^J| in \csa{FCDformfeedtofile} matches
+the default newline character (ascii code 10) of \LaTeX{} for
+exporting files. The active |^^M| is used for macro storage
+because this is the most suitable for verbatim printing via
+\csa{filecontentsprint} as typically in a verbatim environment end
+of lines get converted into such active |^^M| (which will create
+a |\par| token).
+
+If you want for example tabulation characters to get converted into four
+spaces, use:
+\begin{verbatim}
+\def\FCDtabtofile{\space\space\space\space}%
+{\catcode32\active\gdef\FCDtabtomacro{\noexpand \noexpand \noexpand \noexpand }}%
+\end{verbatim}
+I have here used for macro storage active spaces. The \csa{noexpand} are
+mandatory in such case, but they will disappear from stored contents in a
+macro. We could also have defined \csa{FCDtabtofile} as an alias to
+\csa{FCDtabtomacro} here because a non-expanding active space will simply give a
+space in the external file. Due to \TeX{} tokenization rules
+|\def\FCDtabtofile{ }| would be the same as with only one single space and
+thus we used |\space\space\space\space|.
+
+If you want an actual tabulation character stored to a file, use:
+\begin{verbatim}
+{\catcode`\^^I=12 \gdef\FCDtabtofile{^^I}}
+\def\FCDtabtomacro{TAB}
+\end{verbatim}
+The second line is for demonstration only as an example of how to store the
+tabulation character in a macro, use anything adequate to replace \texttt{TAB}
+as used here. For example you can store in it the actual tabulation (ascii code
+9) with catcode 12, via using rather |\let\FCDtabtomacro\FCDtabtofile| in the
+above. Or use some Unicode symbol and appropriate font configuration.
+
+Here is an example. This is rendered via |verbatim| which will treat the
+tabulation characters as spaces, but they are there in the original:
+\begin{verbatim}
+{\catcode`\^^I=12 \gdef\FCDtabtofile{^^I}}
+\let\FCDtabtomacro\FCDtabtofile
+\begin{filecontentshere}{\jobname-tab.test}
+Here is a tab and then three in a row .
+\end{filecontentshere}
+(we will see them in the PDF output via the glyph at slot 9 of the T1 encoding).
+\end{verbatim}
+Here is what the original produces indeed when executed:
+{\catcode`\^^I=12 \gdef\FCDtabtofile{^^I}}
+\let\FCDtabtomacro\FCDtabtofile
+\begin{filecontentshere}{\jobname-tab.test}
+Here is a tab and then three in a row .
+\end{filecontentshere}
+The way it looks in the PDF is due to our definition of \csa{FCDtabtomacro}
+which gives a catcode12 character of ascii code 9, and we use T1
+font-encoding. The exported file does contain on the other hand as promised a
+real tabulation character.
+
\begin{footnotesize}
+ \begin{framed}
+ \LaTeX{} since 2018 uses by default |\usepackage[utf8]{inputenc}| and
+ almost all control characters are given active catcode. Exceptions: |^^@|
+ (illegal), |^^I| (treated as space), |^^J| (for some reason it gets catcode
+ 12 and thus will if printed to PDF give the glyph at slot 10 of the font
+ encoding), and |^^M| (end of line).
+
+ Notice that such a control character which in the source gets input using
+ \TeX{} notation, for example |^^P|, causes no issue to \fcdname as the
+ caret |^| has lost its special catcode. Thus a |^^P| will be printed to
+ external file.
+
+ If one tries to use directly in the source the CTRL-P, an error will be
+ raised by \LaTeX{} triggered by the active character (\fcdname does not
+ sanitize catcodes in this ascii range, as original |filecontents|
+ environment does not either).
+
+ One can always reassign catcodes, thus you can set the catcode of |^^P| to
+ 12 for example. However, when exporting such a control character with
+ catcode 11 or 12 to a file, pdflatex uses |^^| notation in the output.
+ There are three exceptions (with |pdflatex|): the horizontal tabulation (ascii code 9,
+ |^^I|), the line feed (ascii code 10, |^^J|), and vertical tabulation
+ (ascii code 11, |^^K|) are exported to the file as the corresponding ascii
+ characters (at least this is the case with \TeX Live). \emph{These
+ exceptions do not apply with} |xelatex|.
+
+ Thus we again end up with \TeX{} notation |^^P| in the exported file. To
+ get a literal CTRL-P, you need to set the catcode of |^^P| to 11 or 12, and
+ to run |pdflatex| with the |-8bit| option. With Xe\LaTeX, this would be
+ needed even for the horizontal tabulation CTRL-I.
+ \end{framed}
+\end{footnotesize}
-\section{Custom verbatim print-outs}
+\begin{footnotesize}
-We now comment on alternatives to using \csa{filecontentsprint}. Here is
+\section{How to obtain customized verbatim in the output}
+
+Please refer first to the discussion of \csa{filecontentsprint} and
+\csa{filecontentsprintviascan} as it provides examples using |fancyvrb|,
+|minted|, or |listings| environments which may be what you are looking for.
+
+Here we make quick comments on alternatives to using \csa{filecontentsprint},
+and handling directly the contents via the configuration of active spaces and
+active end of lines.
+
+Here is
some (non-\LaTeX) text snippet.
\begin{verbatim}
\begin{filecontentsdef}{\jobname.test2}{\testactive}
@@ -726,6 +1067,20 @@ not contain \verb|\end{verbatim}|.
\end{footnotesize}
+\section{Related packages}
+
+\begin{itemize}
+\item Scott~\textsc{Pakin}'s
+ \href{http://www.ctan.org/pkg/filecontents}{filecontents}. Notice that the
+ package functionality has been integrated into \LaTeX{} release dated
+ |2019/10/01|.
+\item Pablo~\textsc{González}'s
+ \href{http://www.ctan.org/pkg/scontents}{scontents}. Make sure your version
+ is at least |v1.3| as earlier ones had a dependency on \fcdname
+ and are broken by the changes coming with |filecontentsdef v1.5|.
+\end{itemize}
+
+
\StopEventually{\end{document}}
\clearpage
@@ -777,19 +1132,62 @@ See the \texttt{README.md} file for the \texttt{CHANGE LOG}.
%
%</none>
%<*package>
-% Most of
-% the code is still identical to the one in \textsc{Scott Pakin}'s
-% \href{http://www.ctan.org/pkg/filecontents}{filecontents} hence to
-% the original one in \LaTeX's sources.
-%
-% But |v1.4| adds \cs{filecontentsdefmacro} which does not write to a file...
% \begin{macrocode}
+\let\FCD@global\global
\begingroup
\catcode`\^^M\active%
+% \end{macrocode}
+% Attention that all end of lines must now get protected due to
+% the end of line character being active.
+%
+% The \LaTeX{} default for active |^^L| was \csa{outer} up to the |2017-01-01|
+% release (got modified in |{v2.3b}{2016/11/06}| version of |ltplain.dtx|).
+% But we must still handle that possibility for usage with older formats.
+% \begin{macrocode}
\catcode`\^^L\active\let^^L\relax%
\catcode`\^^I\active%
-\gdef\filec@ntentsdef#1#2{%
- \let#2\@empty%
+% \end{macrocode}
+% \csa{FCD@main} is the core construct.
+%
+% Bulk of the code is still identical to the one in \textsc{Scott Pakin}'s
+% \href{http://www.ctan.org/pkg/filecontents}{filecontents} hence to the
+% original one in \LaTeX's sources regarding \csa{filec@ntents}, as
+% |filecontentsdef| was conceived as an extension of the original
+% |filecontents| environment, with the added feature of storing the
+% verbatimized contents in a \TeX{} macro, which can then be printed (verbatim)
+% or re-tokenized later via \csa{scantokens} and executed (if it represents
+% \LaTeX{} material). Starting with |v1.5| some renaming of internal macros
+% appears and the original coding is not only extended but starts being
+% modified at some places as well.
+%
+% |v1.4| adds \csa{filecontentsdefmacro} which does not write to a file.
+%
+% |v1.5| renames all internal macros to use |\FCD@| namespace prefix. This
+% applies here to \csa{FCD@main} whose name was still \csa{filec@ntentsdef} at
+% |v1.4|. The change also applies to the \csa{reserved@b} and \csa{reservec@c}.
+%
+% |v1.5| adds customizability of how tabulation and form feed characters are
+% handled either in file output or in macro storage.
+%
+% |v1.5| modifies |filecontentsdef| to only make a definition with local
+% scope. For this we must smuggle out of the environment both the name and the
+% meaning of the control sequence to define. We prepare for this a
+% \csa{FCD@defmacro} which gets executed via |\endfilecontentsdef| (and
+% variants). As \csa{FCD@defmacro} issues \csa{endgroup}, direct usage of
+% \csa{filecontentsdef} (not as environment) must be inside an explicit
+% \csa{begingroup}/\csa{endgroup} pair, mimicking the one which an environment
+% would insert.
+%
+% The |filecontentsgdef/filecontentsgdefmacro| environments do define
+% \csa{FCD@defmacro} but do not execute it.
+% \begin{macrocode}
+\gdef\FCD@main#1#2{%
+ \def\FCD@defmacro%
+ {\toks@\expandafter{#2}%
+ \edef\x{\endgroup\def\noexpand#2{\the\toks@}%
+ \begingroup\def\noexpand\@currenvir{\@currenvir}}%
+ \x}%
+ \FCD@global\let#2\@empty%
\if@filesw%
\openin\@inputcheck#1 %
\ifeof\@inputcheck%
@@ -800,11 +1198,11 @@ See the \texttt{README.md} file for the \texttt{CHANGE LOG}.
{Overwriting file `\@currdir#1'}%
\fi%
\closein\@inputcheck%
- \chardef\reserved@c15 %
- \ch@ck7\reserved@c\write%
- \immediate\openout\reserved@c#1\relax%
+ \chardef\FCD@reserved@c15 %
+ \ch@ck7\FCD@reserved@c\write%
+ \immediate\openout\FCD@reserved@c#1\relax%
\if@tempswa%
- \immediate\write\reserved@c{%
+ \immediate\write\FCD@reserved@c{%
\@percentchar\@percentchar\space%
\expandafter\@gobble\string\LaTeX2e file `#1'^^J%
\@percentchar\@percentchar\space generated by the %
@@ -837,18 +1235,21 @@ See the \texttt{README.md} file for the \texttt{CHANGE LOG}.
\ifnum\count@<\@cclvi%
\repeat%
% \end{macrocode}
-% The default active |^^L| is |\outer|. But |\reserved@b| will be |def'd|
-% with an active |^^L| in its replacement text.
+% The default active |^^L| was |\outer| up to |2017/01/01|.
% \begin{macrocode}
\let^^L\relax%
- \edef\E{\@backslashchar end\string{\@currenvir\string}}%
- \edef\reserved@b{\def\noexpand\reserved@b####1\E####2\E####3\relax}%
+ \edef\FCD@E{\@backslashchar end\string{\@currenvir\string}}%
+ \edef\FCD@reserved@b{\def\noexpand\FCD@reserved@b####1\FCD@E####2\FCD@E####3\relax}%
% \end{macrocode}
-% \cs{filecontentsdefmacro} sets \cs{if@filesw} to false.
+% \csa{filecontentsdefmacro} sets \csa{if@filesw} to false.
% \begin{macrocode}
- \reserved@b{%
+ \FCD@reserved@b{%
\ifx\relax##3\relax%
- \if@filesw\immediate\write\reserved@c{##1}\fi%
+ \if@filesw%
+ \let^^L\FCDformfeedtofile%
+ \let^^I\FCDtabtofile%
+ \immediate\write\FCD@reserved@c{##1}%
+ \fi%
% \end{macrocode}
% This is where the original |filecontents| is extended to store the
% parsed material in a macro (in my very first hack I simply
@@ -862,29 +1263,34 @@ See the \texttt{README.md} file for the \texttt{CHANGE LOG}.
% the characters it contains are protected from further expansion in
% the |\xdef|'s. And the single |\noexpand| is enough also for the
% |\write| done above.
-%
-% The |lccode| of the tilde is |32| when this gets executed. Multiple
-% form feeds produce the same effect in the macro (insertion of two
-% |^^M| per form feed) as in the written out file (via two |^^J|).
% \begin{macrocode}
\toks@\expandafter{#2}%
- {\def^^L{\noexpand^^M\noexpand^^M}\lowercase{\let^^I~}%
- \xdef#2{\the\toks@##1\noexpand^^M}}%
+ \let^^L\FCDformfeedtomacro%
+ \let^^I\FCDtabtomacro%
+ \FCD@global\edef#2{\the\toks@##1\noexpand^^M}%
\else%
\edef^^M{\noexpand\end{\@currenvir}}%
\ifx\relax##1\relax%
\else%
- \if@filesw%
- \@latex@warning{Writing text `##1' before %
- \string\end{\@currenvir}\MessageBreak as last line of #1}%
- \immediate\write\reserved@c{##1}%
- \fi%
+ \if@filesw%
+% \end{macrocode}
+% |v1.5| suppresses the warning issued by |filecontents| environment
+% in such case.
+% \begin{macrocode}
+ \let^^L\FCDformfeedtofile%
+ \let^^I\FCDtabtofile%
+ \immediate\write\FCD@reserved@c{##1}%
+ \fi%
% \end{macrocode}
-% Same added code as above.
+% In such case with the end of environment not being on a line of its own,
+% |v1.5| injects an extra |\empty| token at end of last line. Thus
+% usage in this form is restricted to contents representing \TeX{} macros.
+% We still need the final |^^M| for \csa{filecontentsprint} matters.
% \begin{macrocode}
\toks@\expandafter{#2}%
- {\def^^L{\noexpand^^M\noexpand^^M}\lowercase{\let^^I~}%
- \xdef#2{\the\toks@##1\noexpand^^M}}%
+ \let^^L\FCDformfeedtomacro%
+ \let^^I\FCDtabtomacro%
+ \FCD@global\edef#2{\the\toks@##1\noexpand\empty\noexpand^^M}%
\fi%
\ifx\relax##2\relax%
\else%
@@ -893,62 +1299,98 @@ See the \texttt{README.md} file for the \texttt{CHANGE LOG}.
\fi%
\fi%
^^M}%
- \catcode`\^^L\active%
% \end{macrocode}
-% |v1.4|: sync |^^L| and |^^I| with 2018/04/01 LaTeX release.
+% |v1.4|: sync |^^L| and |^^I| with |2018/04/01| \LaTeX{} release.
+%
+% |v1.5|: drop the |^^L| and |^^I| \LaTeX{} definitions in favour of
+% \csa{FCDformfeedtomacro} etc...
% \begin{macrocode}
- \let\L\@undefined%
- \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi^^J^^J}%
+ \catcode`\^^L\active%
\catcode`\^^I\active%
- \let\I\@undefined%
- \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
\catcode`\^^M\active%
- \edef^^M##1^^M{\noexpand\reserved@b##1\E\E\relax}%
+ \edef^^M##1^^M{\noexpand\FCD@reserved@b##1\FCD@E\FCD@E\relax}%
% \end{macrocode}
-% We want space characters to be active in the produced macro.
-% We only need to protect them once from expansion.
+% We need active space characters to be active in the produced macro.
+% We only need to protect them once from expansion. The definition
+% will work both for writing to a file and for storage into the macro.
% \begin{macrocode}
\catcode32\active\lccode`~32 \lowercase{\def~{\noexpand~}}%
}%
-\endgroup
+\gdef\FCDformfeedtofile{^^J^^J}%
+\gdef\FCDformfeedtomacro{\noexpand^^M\noexpand^^M}%
+\gdef\FCDtabtofile{ }%
+\catcode32\active\gdef\FCDtabtomacro{\noexpand }%
+\endgroup%
% \end{macrocode}
% The |v1.4| macros accept a name as alternative to a macro. Empty or
% ill-formed |#2| will break code. But |#2| can be using |\if|, |\else|,
% |\fi| tokens, the whole thing will end up |\csname|-expanded. An active
% character also will end up |\csname|-expanded. There is no check on
% whether |#2| or |\csname#2\endcsname| is an existing macro.
+%
+% |v1.5| replaces \csa{@tempa,b} by \csa{FCD@tempa,b}. And its
+% \csa{FCD@get@aux} directly grabs |#2| rather than issuing \csa{@firstofone}.
% \begin{macrocode}
-\long\def\filecontentsdef@aux#1\filecontentsdef@aux{\@firstofone}%
-\def\filecontentsdef@get#1#2%
+\long\def\FCD@get@aux#1\FCD@get@aux#2{#2}%
+\def\FCD@get#1#2%
{%
- \def\@tempa{#1}\def\@tempb{{#2}}%
- \expandafter\filecontentsdef@aux\@gobbletwo#2\filecontentsdef@aux
+ \def\FCD@tempa{#1}\def\FCD@tempb{{#2}}%
+ \expandafter\FCD@get@aux\@gobbletwo#2\FCD@get@aux
\@thirdofthree
- \filecontentsdef@aux
+ \FCD@get@aux
{\ifcat\relax\noexpand#2\expandafter\@gobble\else\expandafter\@firstofone\fi}%
- {\edef\@tempb{{\expandafter\noexpand\csname#2\endcsname}}}%
- \expandafter\@tempa\@tempb
+ {\edef\FCD@tempb{{\expandafter\noexpand\csname#2\endcsname}}}%
+ \expandafter\FCD@tempa\FCD@tempb
}%
% \end{macrocode}
-% |v1.4| adds \cs{filecontentsdefmacro}. I abuse the \cs{if@filesw} toggle as there
-% is no \cs{if@tempswb} available. No need for a starred version as anyhow
-% the commented-out header was not put into the macro by the existing
-% \cs{filec@ntentsdef} code. No need to reset the toggle as only usage as
-% an environment is supported. And by lazyness and to spare extra coding,
-% \cs{endfilecontentsdefmacro} emits no warning about Form Feed and Tabulation.
+% |v1.4| adds \csa{filecontentsdefmacro}. I abuse the \csa{if@filesw} toggle as
+% there is no \csa{if@tempswb} available. No need for a starred version as
+% anyhow the commented-out header was not put into the macro by the existing
+% \csa{FCD@main} code. No need to reset the toggle as documentation explains
+% direct usage of the environment begin and end macros must be inside a
+% |\begingroup\endgroup| pair.
+%
+% |v1.5| adds the ``starred''-named variants as aliases.
% \begin{macrocode}
\begingroup
\catcode`\*=11
-\gdef\filecontentsdef #1{\@tempswatrue\filecontentsdef@get{\filec@ntentsdef{#1}}}%
-\gdef\filecontentsdef*#1{\@tempswafalse\filecontentsdef@get{\filec@ntentsdef{#1}}}%
-\global\let\endfilecontentsdef \endfilecontents
-\global\let\endfilecontentsdef*\endfilecontents
-\gdef\filecontentsdefmacro{\@fileswfalse\filecontentsdef@get{\filec@ntentsdef{}}}%
-\global\let\endfilecontentsdefmacro\relax
-\gdef\filecontentshere #1{\@tempswatrue\filec@ntentsdef{#1}\filecontentsheremacro}%
-\gdef\filecontentshere*#1{\@tempswafalse\filec@ntentsdef{#1}\filecontentsheremacro}%
-\gdef\endfilecontentshere{\endfilecontentsdef\aftergroup\filecontents@here}%
+\gdef\filecontentsdef #1{\let\FCD@global\@empty
+ \@tempswatrue\FCD@get{\FCD@main{#1}}}%
+\gdef\filecontentsdef*#1{\let\FCD@global\@empty
+ \@tempswafalse\FCD@get{\FCD@main{#1}}}%
+\global\let\filecontentsdefstarred\filecontentsdef*
+\gdef\filecontentsgdef #1{\@tempswatrue\FCD@get{\FCD@main{#1}}}%
+\gdef\filecontentsgdef*#1{\@tempswafalse\FCD@get{\FCD@main{#1}}}%
+\global\let\filecontentsgdefstarred\filecontentsgdef*
+% \end{macrocode}
+% |v1.5| can not use original \csa{endfilecontents} which makes reference to
+% \csa{reserved@c} whereas \fcdname now uses in its place \csa{FCD@reserved@c}.
+% Finally I drop altogether the bulk of this macro which issued a warning in
+% case of an encountered form feed or tabulation character.
+%
+% |v1.5| adds support for definitions with local scope so we must smuggle the
+% defined macro out of the environment. This is done via \csa{FCD@defmacro}
+% which is set-up via \csa{FCD@main}.
+% \begin{macrocode}
+\gdef\endfilecontentsdef{\immediate\closeout\FCD@reserved@c\FCD@defmacro}%
+\global\let\endfilecontentsdef*\endfilecontentsdef
+\global\let\endfilecontentsdefstarred\endfilecontentsdef
+\gdef\endfilecontentsgdef{\immediate\closeout\FCD@reserved@c}%
+\global\let\endfilecontentsgdef*\endfilecontentsgdef
+\global\let\endfilecontentsgdefstarred\endfilecontentsgdef
+\gdef\filecontentsdefmacro{\let\FCD@global\@empty
+ \@fileswfalse\FCD@get{\FCD@main{}}}%
+\gdef\endfilecontentsdefmacro{\FCD@defmacro}%
+\gdef\filecontentsgdefmacro{\@fileswfalse\FCD@get{\FCD@main{}}}%
+\global\let\endfilecontentsgdefmacro\relax
+\gdef\filecontentshere #1{\let\FCD@global\@empty
+ \@tempswatrue\FCD@main{#1}\filecontentsheremacro}%
+\gdef\filecontentshere*#1{\let\FCD@global\@empty
+ \@tempswafalse\FCD@main{#1}\filecontentsheremacro}%
+\global\let\filecontentsherestarred\filecontentshere*
+\gdef\endfilecontentshere{\endfilecontentsdef\aftergroup\FCD@here}%
\global\let\endfilecontentshere*\endfilecontentshere
+\global\let\endfilecontentsherestarred\endfilecontentshere
% \end{macrocode}
% Package |verbatim.sty| modifies the standard |verbatim| environment. For
% both the original and the modified version we need to insert an active |^^M|
@@ -961,20 +1403,48 @@ See the \texttt{README.md} file for the \texttt{CHANGE LOG}.
% the code compatible with further packages (I have not looked for them)
% modifying the |verbatim| environment. For better code readibility I use
% |^^M%|'s rather than exploiting the active ends of lines here.
+%
+% |v1.5| adds \csa{FCDprintenvname} which holds the name of the environment to
+% be used. Initially configured to hold of course |verbatim|. And it also adds
+% \csa{FCDprintenvoptions}.
% \begin{macrocode}
-\gdef\filecontentsprint{\filecontentsdef@get\filecontents@print}%
+\gdef\filecontentsprint{\FCD@get\FCD@print}%
\catcode`\^^M\active%
-\gdef\filecontents@print #1{\let\filecontents@print@EOL^^M\let^^M\relax%
- \begingroup\toks@\expandafter{#1}\edef\x{\endgroup%
- \noexpand\begin{verbatim}^^M%
- \the\toks@\@backslashchar end\string{verbatim\string}}\x^^M%
- \filecontents@print@resetEOL}%
-\gdef\filecontents@print@resetEOL{\let^^M\filecontents@print@EOL}%
+\gdef\FCD@print #1{\let\FCD@print@EOL^^M\let^^M\relax%
+ \begingroup\toks@\expandafter{#1}%
+ \edef\x{\endgroup%
+ \noexpand\begin{\FCDprintenvname}\FCDprintenvoptions^^M%
+ \the\toks@\@backslashchar end\string{\FCDprintenvname\string}}%
+ \x^^M%
+ \FCD@print@resetEOL}%
+\gdef\FCD@print@resetEOL{\let^^M\FCD@print@EOL}%
+\gdef\filecontentsprintviascan{\FCD@get\FCD@printviascan}%
+% \end{macrocode}
+% |v1.5| adds \csa{filecontentsprintviascan} which uses \csa{scantokens} to wrap
+% stored contents in a verbatim-like environment. This is needed for things
+% such as |listings| (it uses an active backslash at start of lines).
+% Attention to the \csa{scantokens} subtlety with \csa{end} which would become
+% |\end<space>| and then again |listings| would not recognize the ending
+% pattern.
+% \begin{macrocode}
+\gdef\FCD@printviascan#1{%
+ \toks@\expandafter{#1}%
+ \edef\FCD@envwithcontents{%
+ \noexpand\begin{\FCDprintenvname}\FCDprintenvoptions\noexpand^^M%
+ \the\toks@\@backslashchar end{\FCDprintenvname}\noexpand^^M}%
+ \FCD@exec\FCD@envwithcontents}%
\endgroup
-\def\filecontents@here{\filecontents@print\filecontentsheremacro}%
-\def\filecontentsexec{\filecontentsdef@get\filecontents@exec}%
-\def\filecontents@exec #1{\newlinechar13
- \scantokens\expandafter{#1}\newlinechar10\relax}%
+\def\FCDprintenvname{verbatim}%
+\let\FCDprintenvoptions\@empty
+\def\FCD@here{\FCD@print\filecontentsheremacro}%
+\def\filecontentsexec{\FCD@get\FCD@exec}%
+% \end{macrocode}
+% |v1.5| restores \csa{newlinechar} to its prior value, rather than setting it
+% to the \LaTeX{} default (10).
+% \begin{macrocode}
+\def\FCD@exec #1{\edef\FCD@newlinechar{\the\newlinechar}%
+ \newlinechar13
+ \scantokens\expandafter{#1}\newlinechar\FCD@newlinechar\relax}%
\endinput
% \end{macrocode}
% \MakePercentComment
diff --git a/macros/latex/contrib/filecontentsdef/filecontentsdef.pdf b/macros/latex/contrib/filecontentsdef/filecontentsdef.pdf
index ddf56cc7ac..c0af8cdb55 100644
--- a/macros/latex/contrib/filecontentsdef/filecontentsdef.pdf
+++ b/macros/latex/contrib/filecontentsdef/filecontentsdef.pdf
Binary files differ
diff --git a/macros/latex/contrib/gatherenum/LICENSE b/macros/latex/contrib/gatherenum/LICENSE
index add821a62d..561f558bee 100644
--- a/macros/latex/contrib/gatherenum/LICENSE
+++ b/macros/latex/contrib/gatherenum/LICENSE
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
gatherenum
- Copyright (C) 2018 RIVAUD Julien
+ Copyright (C) 2018-2019 RIVAUD Julien
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
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
- gatherenum Copyright (C) 2018 RIVAUD Julien
+ gatherenum Copyright (C) 2018-2019 RIVAUD Julien
This program 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.
diff --git a/macros/latex/contrib/gatherenum/gatherenum.dtx b/macros/latex/contrib/gatherenum/gatherenum.dtx
index dec13ca1ab..8024754151 100644
--- a/macros/latex/contrib/gatherenum/gatherenum.dtx
+++ b/macros/latex/contrib/gatherenum/gatherenum.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
% vim: tw=80 spl=en
%
-%% File: gatherenum.dtx (C) Copyright 2016-2018 RIVAUD Julien
+%% File: gatherenum.dtx (C) Copyright 2016-2019 RIVAUD Julien
%%
%% It may be distributed and/or modified under the conditions of the
%% General Public License (GPL), either version 3 of this
@@ -11,11 +11,11 @@
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\RequirePackage{expl3}[2016/01/19]
+\RequirePackage{expl3}[2018/06/19]
\def\ExplFileName{gatherenum}
\def\ExplFileDescription{Crossover between align* and enumerate}
-\def\ExplFileDate{2018/06/19}
-\def\ExplFileVersion{1.7}
+\def\ExplFileDate{2019/09/29}
+\def\ExplFileVersion{1.8}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -261,7 +261,7 @@
% boxed.
% \begin{macrocode}
\penalty \predisplaypenalty
- \begin{gatherenum}[
+ \gatherenum[
itemjoin=\skip_horizontal:n{1em plus 1fil},
#1,
mode=boxed,
@@ -279,11 +279,11 @@
% less strict on widows and clubs than normal.
% \begin{macrocode}
\clist_if_in:nnTF { #1 } { gathered } {
- \end{gatherenum}
+ \endgatherenum
\unskip
\int_set_eq:NN \clubpenalty \interlinepenalty
\int_set_eq:NN \widowpenalty \interlinepenalty
- \par
+ \use:c{@ @ par}% avoid l3docstrip replacement of @
}{
\@@_save_endenumerate:w
}
diff --git a/macros/latex/contrib/gatherenum/gatherenum.pdf b/macros/latex/contrib/gatherenum/gatherenum.pdf
index 17e0975646..f7de42134f 100644
--- a/macros/latex/contrib/gatherenum/gatherenum.pdf
+++ b/macros/latex/contrib/gatherenum/gatherenum.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3build/CHANGELOG.md b/macros/latex/contrib/l3build/CHANGELOG.md
index 09a8b1a94b..e2102c8b4f 100644
--- a/macros/latex/contrib/l3build/CHANGELOG.md
+++ b/macros/latex/contrib/l3build/CHANGELOG.md
@@ -7,6 +7,18 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2019-09-29]
+
+### Fixed
+
+- Path searching if `texmfdir` is set but does not exist
+
+## [2019-09-28]
+
+### Fixed
+
+- Typesetting when using an isolated system (use of texmfdir)
+
## [2019-09-25]
### Added
@@ -337,7 +349,9 @@ this project uses date-based 'snapshot' version identifiers.
- Rationalise short option names: removed `-d`, `-E`, `-r`
- Target `cmdcheck`: specific to LaTeX3 kernel work
-[Unreleased]: https://github.com/latex3/l3build/compare/2019-09-25...HEAD
+[Unreleased]: https://github.com/latex3/l3build/compare/2019-09-29...HEAD
+[2019-09-29]: https://github.com/latex3/l3build/compare/2019-09-28...2019-09-29
+[2019-09-28]: https://github.com/latex3/l3build/compare/2019-09-25...2019-09-28
[2019-09-25]: https://github.com/latex3/l3build/compare/2019-09-18...2019-09-25
[2019-09-18]: https://github.com/latex3/l3build/compare/2019-09-14...2019-09-18
[2019-09-14]: https://github.com/latex3/l3build/compare/2019-08-24...2019-09-14
diff --git a/macros/latex/contrib/l3build/README.md b/macros/latex/contrib/l3build/README.md
index 432fd5583c..44e890e8d6 100644
--- a/macros/latex/contrib/l3build/README.md
+++ b/macros/latex/contrib/l3build/README.md
@@ -1,7 +1,7 @@
l3build: a testing and building system for LaTeX3
=================================================
-Release 2019-09-25
+Release 2019-09-29
Overview
--------
diff --git a/macros/latex/contrib/l3build/l3build-check.lua b/macros/latex/contrib/l3build/l3build-check.lua
index 731d4282ea..aad0328103 100644
--- a/macros/latex/contrib/l3build/l3build-check.lua
+++ b/macros/latex/contrib/l3build/l3build-check.lua
@@ -722,10 +722,9 @@ function runtest(name, engine, hide, ext, pdfmode, breakout)
rm(testdir,name .. logext)
local errlevels = {}
local localtexmf = ""
- if texmfdir and texmfdir ~= "" then
+ if texmfdir and texmfdir ~= "" and direxists(texmfdir) then
localtexmf = os_pathsep .. abspath(texmfdir) .. "//"
end
- local texmfdir = abspath(texmfdir) .. "//"
for i = 1, checkruns do
errlevels[i] = run(
testdir,
diff --git a/macros/latex/contrib/l3build/l3build-typesetting.lua b/macros/latex/contrib/l3build/l3build-typesetting.lua
index 8e5b17bfc4..7f588a7c23 100644
--- a/macros/latex/contrib/l3build/l3build-typesetting.lua
+++ b/macros/latex/contrib/l3build/l3build-typesetting.lua
@@ -64,11 +64,10 @@ function runcmd(cmd,dir,vars)
-- Allow for local texmf files
local env = os_setenv .. " TEXMFCNF=." .. os_pathsep
local localtexmf = ""
- if texmfdir and texmfdir ~= "" then
+ if texmfdir and texmfdir ~= "" and direxists(texmfdir) then
localtexmf = os_pathsep .. abspath(texmfdir) .. "//"
end
- local envpaths = "." .. os_pathsep
- .. localtexmf
+ local envpaths = "." .. localtexmf .. os_pathsep
.. abspath(localdir) .. os_pathsep
.. dir .. (typesetsearch and os_pathsep or "")
-- Deal with spaces in paths
diff --git a/macros/latex/contrib/l3build/l3build.1 b/macros/latex/contrib/l3build/l3build.1
index 4959f4b0e9..8812fdb603 100644
--- a/macros/latex/contrib/l3build/l3build.1
+++ b/macros/latex/contrib/l3build/l3build.1
@@ -1,4 +1,4 @@
-.TH l3build 1 "2019-09-25"
+.TH l3build 1 "2019-09-29"
.SH NAME
l3build \- Checking and building packages
.SH SYNOPSIS
diff --git a/macros/latex/contrib/l3build/l3build.dtx b/macros/latex/contrib/l3build/l3build.dtx
index 0597933557..dfaca41187 100644
--- a/macros/latex/contrib/l3build/l3build.dtx
+++ b/macros/latex/contrib/l3build/l3build.dtx
@@ -230,7 +230,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-25}
+% \date{Released 2019-09-29}
%
% \maketitle
% \tableofcontents
diff --git a/macros/latex/contrib/l3build/l3build.lua b/macros/latex/contrib/l3build/l3build.lua
index e9b47f8357..1696ef1872 100644
--- a/macros/latex/contrib/l3build/l3build.lua
+++ b/macros/latex/contrib/l3build/l3build.lua
@@ -25,7 +25,7 @@ for those people who are interested.
--]]
-- Version information
-release_date = "2019-09-25"
+release_date = "2019-09-29"
-- File operations are aided by the LuaFileSystem module
local lfs = require("lfs")
diff --git a/macros/latex/contrib/l3build/l3build.pdf b/macros/latex/contrib/l3build/l3build.pdf
index c579041252..7e9ddb0aed 100644
--- a/macros/latex/contrib/l3build/l3build.pdf
+++ b/macros/latex/contrib/l3build/l3build.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/CHANGELOG.md b/macros/latex/contrib/l3experimental/CHANGELOG.md
index a0af5b8ab3..bf5f13f9ca 100644
--- a/macros/latex/contrib/l3experimental/CHANGELOG.md
+++ b/macros/latex/contrib/l3experimental/CHANGELOG.md
@@ -7,6 +7,12 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2019-09-28]
+
+### Changed
+
+- `\sys_shell_get_pwd:N` renamed as `\sys_get_shell_pwd:N`
+
## [2019-09-19]
### Changed
@@ -118,7 +124,8 @@ this project uses date-based 'snapshot' version identifiers.
- New `l3color` module using `xcolor`-like expression syntax
- New `l3draw` module, based on `pgf` layer of the TikZ system
-[Unreleased]: https://github.com/latex3/latex3/compare/2019-09-19...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-09-28...HEAD
+[2019-09-28]: https://github.com/latex3/latex3/compare/2019-09-19...2019-09-28
[2019-09-19]: https://github.com/latex3/latex3/compare/2019-08-25...2019-09-19
[2019-08-25]: https://github.com/latex3/latex3/compare/2019-07-01...2019-08-25
[2019-07-01]: https://github.com/latex3/latex3/compare/2019-05-28...2019-07-01
diff --git a/macros/latex/contrib/l3experimental/README.md b/macros/latex/contrib/l3experimental/README.md
index ad609e6174..6b353b9504 100644
--- a/macros/latex/contrib/l3experimental/README.md
+++ b/macros/latex/contrib/l3experimental/README.md
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================
-Release 2019-09-19
+Release 2019-09-28
Overview
--------
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.dtx b/macros/latex/contrib/l3experimental/l3benchmark.dtx
index 0df034cae8..f90bd2f1c4 100644
--- a/macros/latex/contrib/l3experimental/l3benchmark.dtx
+++ b/macros/latex/contrib/l3experimental/l3benchmark.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -130,7 +130,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3benchmark}{2019-09-19}{}
+\ProvidesExplPackage{l3benchmark}{2019-09-28}{}
{L3 Experimental benchmarking}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.pdf b/macros/latex/contrib/l3experimental/l3benchmark.pdf
index c1247e2887..e5af65076d 100644
--- a/macros/latex/contrib/l3experimental/l3benchmark.pdf
+++ b/macros/latex/contrib/l3experimental/l3benchmark.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3cctab.dtx b/macros/latex/contrib/l3experimental/l3cctab.dtx
index a56585c1ff..64266fe781 100644
--- a/macros/latex/contrib/l3experimental/l3cctab.dtx
+++ b/macros/latex/contrib/l3experimental/l3cctab.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -171,7 +171,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3cctab}{2019-09-19}{}
+\ProvidesExplPackage{l3cctab}{2019-09-28}{}
{L3 Experimental category code tables}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3cctab.pdf b/macros/latex/contrib/l3experimental/l3cctab.pdf
index 1535d5bf53..b5e4c9174f 100644
--- a/macros/latex/contrib/l3experimental/l3cctab.pdf
+++ b/macros/latex/contrib/l3experimental/l3cctab.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3color.dtx b/macros/latex/contrib/l3experimental/l3color.dtx
index 0abd832212..d6dd271ee2 100644
--- a/macros/latex/contrib/l3experimental/l3color.dtx
+++ b/macros/latex/contrib/l3experimental/l3color.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -265,7 +265,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3color}{2019-09-19}{}
+\ProvidesExplPackage{l3color}{2019-09-28}{}
{L3 Experimental color support}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3color.pdf b/macros/latex/contrib/l3experimental/l3color.pdf
index bd2424c7e0..cf156af05b 100644
--- a/macros/latex/contrib/l3experimental/l3color.pdf
+++ b/macros/latex/contrib/l3experimental/l3color.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
index 9799c3238f..30b4952657 100644
--- a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-code.pdf b/macros/latex/contrib/l3experimental/l3draw-code.pdf
index ca93058ce3..fcd4063c17 100644
--- a/macros/latex/contrib/l3experimental/l3draw-code.pdf
+++ b/macros/latex/contrib/l3experimental/l3draw-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3draw-layers.dtx b/macros/latex/contrib/l3experimental/l3draw-layers.dtx
index f0b7afb1b4..c46f2489e3 100644
--- a/macros/latex/contrib/l3experimental/l3draw-layers.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-layers.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-paths.dtx b/macros/latex/contrib/l3experimental/l3draw-paths.dtx
index f4bb5eb022..b6291a3280 100644
--- a/macros/latex/contrib/l3experimental/l3draw-paths.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-paths.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-points.dtx b/macros/latex/contrib/l3experimental/l3draw-points.dtx
index 87fda4bf68..b05e29afe9 100644
--- a/macros/latex/contrib/l3experimental/l3draw-points.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-points.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
index f98947f09a..bbd5c83c66 100644
--- a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
index 12072fa678..ee228be271 100644
--- a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-state.dtx b/macros/latex/contrib/l3experimental/l3draw-state.dtx
index 91c0d48644..1137c9d179 100644
--- a/macros/latex/contrib/l3experimental/l3draw-state.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-state.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
index 2a34520ff3..17a225f597 100644
--- a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw.dtx b/macros/latex/contrib/l3experimental/l3draw.dtx
index 0a93ec16ed..5813b7edf7 100644
--- a/macros/latex/contrib/l3experimental/l3draw.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw.dtx
@@ -110,7 +110,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -1146,7 +1146,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3draw}{2019-09-19}{}
+\ProvidesExplPackage{l3draw}{2019-09-28}{}
{L3 Experimental core drawing support}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3draw.pdf b/macros/latex/contrib/l3experimental/l3draw.pdf
index a3b6c4e84a..69c481bbee 100644
--- a/macros/latex/contrib/l3experimental/l3draw.pdf
+++ b/macros/latex/contrib/l3experimental/l3draw.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3galley.dtx b/macros/latex/contrib/l3experimental/l3galley.dtx
index bdbbe9d476..06ffe81ab0 100644
--- a/macros/latex/contrib/l3experimental/l3galley.dtx
+++ b/macros/latex/contrib/l3experimental/l3galley.dtx
@@ -61,7 +61,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -687,7 +687,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3galley}{2019-09-19}{}
+\ProvidesExplPackage{l3galley}{2019-09-28}{}
{L3 Experimental galley code}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3galley.pdf b/macros/latex/contrib/l3experimental/l3galley.pdf
index 9912434768..c14696e3cf 100644
--- a/macros/latex/contrib/l3experimental/l3galley.pdf
+++ b/macros/latex/contrib/l3experimental/l3galley.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3graphics.dtx b/macros/latex/contrib/l3experimental/l3graphics.dtx
index c9e3020084..08d5ae4f63 100644
--- a/macros/latex/contrib/l3experimental/l3graphics.dtx
+++ b/macros/latex/contrib/l3experimental/l3graphics.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -241,7 +241,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3graphics}{2019-09-19}{}
+\ProvidesExplPackage{l3graphics}{2019-09-28}{}
{L3 Experimental graphics inclusion support}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3graphics.pdf b/macros/latex/contrib/l3experimental/l3graphics.pdf
index 0e0ba73a63..b821690316 100644
--- a/macros/latex/contrib/l3experimental/l3graphics.pdf
+++ b/macros/latex/contrib/l3experimental/l3graphics.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3pdf-code.pdf b/macros/latex/contrib/l3experimental/l3pdf-code.pdf
index 1f0c62ed8d..8ab758a318 100644
--- a/macros/latex/contrib/l3experimental/l3pdf-code.pdf
+++ b/macros/latex/contrib/l3experimental/l3pdf-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3pdf.dtx b/macros/latex/contrib/l3experimental/l3pdf.dtx
index a8801c7e46..d3784bb4e2 100644
--- a/macros/latex/contrib/l3experimental/l3pdf.dtx
+++ b/macros/latex/contrib/l3experimental/l3pdf.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -185,7 +185,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3pdf}{2019-09-19}{}
+\ProvidesExplPackage{l3pdf}{2019-09-28}{}
{L3 Experimental core PDF support}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3pdf.pdf b/macros/latex/contrib/l3experimental/l3pdf.pdf
index 9fa57b85df..e482f9058b 100644
--- a/macros/latex/contrib/l3experimental/l3pdf.pdf
+++ b/macros/latex/contrib/l3experimental/l3pdf.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3str-format.dtx b/macros/latex/contrib/l3experimental/l3str-format.dtx
index ab96267593..eb06238f1c 100644
--- a/macros/latex/contrib/l3experimental/l3str-format.dtx
+++ b/macros/latex/contrib/l3experimental/l3str-format.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -167,7 +167,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3str-format}{2019-09-19}{}
+\ProvidesExplPackage{l3str-format}{2019-09-28}{}
{L3 Experimental string formatting}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/l3str-format.pdf b/macros/latex/contrib/l3experimental/l3str-format.pdf
index be043eef3e..7a7858d005 100644
--- a/macros/latex/contrib/l3experimental/l3str-format.pdf
+++ b/macros/latex/contrib/l3experimental/l3str-format.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.dtx b/macros/latex/contrib/l3experimental/l3sys-shell.dtx
index 2663bce59d..18310b6584 100644
--- a/macros/latex/contrib/l3experimental/l3sys-shell.dtx
+++ b/macros/latex/contrib/l3experimental/l3sys-shell.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -100,9 +100,9 @@
% attempted.
% \end{function}
%
-% \begin{function}[added = 2018-07-28]{\sys_shell_get_pwd:N}
+% \begin{function}[added = 2018-07-28]{\sys_get_shell_pwd:N}
% \begin{syntax}
-% \cs{sys_shell_get_pwd:N} \meta{str var}
+% \cs{sys_get_shell_pwd:N} \meta{str var}
% \end{syntax}
% Sets the \meta{str var} to the present working directory (the output of
% |pwd| on Unix or |cd| on Windows). Note that on Windows this will contain
@@ -136,7 +136,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3sys-shell}{2019-09-19}{}
+\ProvidesExplPackage{l3sys-shell}{2019-09-28}{}
{L3 Experimental system shell functions}
%</package>
% \end{macrocode}
@@ -300,17 +300,17 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\sys_shell_get_pwd:N}
+% \begin{macro}{\sys_get_shell_pwd:N}
% Getting the path is easy: the main work is avoiding loosing any
% information. (This information can be obtained using the recorder file:
% that does not require shell escape. However, it's hard to see how it might
% be useful without the other file functions.)
% \begin{macrocode}
-\cs_new_protected:Npx \sys_shell_get_pwd:N #1
+\cs_new_protected:Npx \sys_get_shell_pwd:N #1
{
\sys_if_shell_unrestricted:T
{
- \exp_not:N \sys_shell_get:nnN
+ \exp_not:N \sys_get_shell:nnN
{
\sys_if_platform_unix:T { pwd }
\sys_if_platform_windows:T { cd }
@@ -340,7 +340,7 @@
{
\sys_if_shell_unrestricted:T
{
- \exp_not:N \sys_shell_get:nnN
+ \exp_not:N \sys_get_shell:nnN
{
\sys_if_platform_unix:T { ls~-1~ #1 }
\sys_if_platform_windows:T { dir~/b~ #1 }
diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.pdf b/macros/latex/contrib/l3experimental/l3sys-shell.pdf
index e00d1e4b56..e306a267cb 100644
--- a/macros/latex/contrib/l3experimental/l3sys-shell.pdf
+++ b/macros/latex/contrib/l3experimental/l3sys-shell.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/xcoffins.dtx b/macros/latex/contrib/l3experimental/xcoffins.dtx
index c3d5739f82..b4d0ce465a 100644
--- a/macros/latex/contrib/l3experimental/xcoffins.dtx
+++ b/macros/latex/contrib/l3experimental/xcoffins.dtx
@@ -56,7 +56,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -675,7 +675,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2019-09-19}{}
+\ProvidesExplPackage{xcoffins}{2019-09-28}{}
{L3 Experimental design level coffins}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/xcoffins.pdf b/macros/latex/contrib/l3experimental/xcoffins.pdf
index 8721e4d8c3..2f93f907db 100644
--- a/macros/latex/contrib/l3experimental/xcoffins.pdf
+++ b/macros/latex/contrib/l3experimental/xcoffins.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/xgalley.dtx b/macros/latex/contrib/l3experimental/xgalley.dtx
index 25c393a76c..cc6da75e0f 100644
--- a/macros/latex/contrib/l3experimental/xgalley.dtx
+++ b/macros/latex/contrib/l3experimental/xgalley.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -734,7 +734,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2019-09-19}{}
+\ProvidesExplPackage{xgalley}{2019-09-28}{}
{L3 Experimental galley}
\RequirePackage{xparse,xtemplate,l3galley}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/xgalley.pdf b/macros/latex/contrib/l3experimental/xgalley.pdf
index 482a8a94ad..0e5f3fa86c 100644
--- a/macros/latex/contrib/l3experimental/xgalley.pdf
+++ b/macros/latex/contrib/l3experimental/xgalley.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index f483c78306..4e8c9fc093 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,6 +7,40 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2019-09-28]
+
+### Changed
+
+- Speed up variants and reduce their \tracingall output
+- Debug and deprecation code are now loaded independently of expl3 core
+- `\file_compare_timestamp:nNn(TF)` now usable in expansion contexts
+- Moved to stable:
+ - `\bool_const:Nn`
+ - `\dim_sign:n`
+ - `\file_compare_timestamp:nNn(TF)`
+ - FP `logb` operator
+ - `\fp_sign:n`
+ - `fparray` module
+ - `\int_sign:n`
+ - `\intarray_const_from_clist:Nn`
+ - `\intarray_show:N`
+ - `\ior_map_variable:NNn`
+ - `\ior_str_map_variable:NNn`
+ - `\mode_leave_vertical:`
+ - `\prop_(g)set_from_clist:Nn`
+ - `\prop_const_from_clist:Nn`
+ - `\seq_const_from_clist:Nn`
+ - `\seq_(g)shuffle:N`
+ - `\sys_if_platform_unix:(TF)`
+ - `\sys_if_platform_windows:(TF)`
+ - `\sys_gset_rand_seed:`
+ - `\sys_rand_seed:`
+ - Shell access functions
+
+### Fixed
+
+- Key `.initial:n` property when combined with inherited keys (see #631)
+
## [2019-09-19]
### Fixed
@@ -23,7 +57,7 @@ this project uses date-based 'snapshot' version identifiers.
### Added
-- `\file_full_name:n`, \file_mdfive_hash:n`, `\file_size:n`,
+- `\file_full_name:n`, `\file_mdfive_hash:n`, `\file_size:n`,
`\file_timestamp:n`
- `\seq_map_tokens:Nn`, `\tl_map_tokens:nn`, `\tl_map_tokens:Nn`
@@ -493,7 +527,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step func­tions have been added for dim vari­ables,
e.g. `\dim_step_in­line:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2019-09-19...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-09-28...HEAD
+[2019-09-28]: https://github.com/latex3/latex3/compare/2019-09-19...2019-09-28
[2019-09-19]: https://github.com/latex3/latex3/compare/2019-09-08...2019-09-19
[2019-09-08]: https://github.com/latex3/latex3/compare/2019-09-05...2019-09-08
[2019-09-05]: https://github.com/latex3/latex3/compare/2019-08-25...2019-09-05
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index ea663ab1e1..1937491098 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2019-09-19
+Release 2019-09-28
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index 9aa2421de3..64cb393585 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/contrib/l3kernel/expl3.dtx
@@ -23,7 +23,7 @@
% for those people who are interested.
%
%<*driver|generic|package>
-\def\ExplFileDate{2019-09-19}%
+\def\ExplFileDate{2019-09-28}%
%</driver|generic|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -622,6 +622,16 @@
% text of an~\tn{edef}, and the expansion is passed to the function as
% a braced token list. Expansion takes place until only unexpandable
% tokens are left. |x|-type arguments cannot be nested.
+% \item[e] Fully-expanded token or braced token list which does
+% not require doubled |#| tokens. This expansions is very similar
+% to |x|-type but may be nested and does not require that |#|
+% tokens are doubled.
+% \item[f] Expanding the first token recursively in a braced token
+% list.\\ Almost the same as the |x| type except here the token list
+% is expanded fully until the first unexpandable token is found and
+% the rest is left unchanged. Note that if this function finds a
+% space at the beginning of the argument it gobbles it and does not
+% expand the next token.
% \item[o] One-level-expanded token or braced token list.\\
% This means that the argument is expanded one level, as by
% \tn{expandafter}, and the expansion is passed to the function as a
@@ -629,12 +639,6 @@
% token list then only the first token in that list is expanded.
% In general, using \texttt{V} should be preferred to using
% \texttt{o} for simple variable retrieval.
-% \item[f] Expanding the first token recursively in a braced token
-% list.\\ Almost the same as the |x| type except here the token list
-% is expanded fully until the first unexpandable token is found and
-% the rest is left unchanged. Note that if this function finds a
-% space at the beginning of the argument it gobbles it and does not
-% expand the next token.
% \end{description}
%
% \subsection{Simpler means better}
@@ -948,15 +952,10 @@
% These functions can only be used if \pkg{expl3} is loaded with the
% \texttt{enable-debug} option.
%
-% \DescribeOption{driver}
-% Selects the driver to be used for color, graphics and related operations that
-% are driver-dependent. Options available are
+% \DescribeOption{backend}
+% Selects the backend to be used for color, graphics and related operations that
+% are backend-dependent. Options available are
% \begin{itemize}[font = \texttt]
-% \item[auto] Let \LaTeX3 determine the correct driver. With DVI output, this
-% selects the \texttt{dvips} back-end for \pdfTeX{} and \LuaTeX{}, and
-% \texttt{dvipdfmx} for \pTeX{} and \upTeX{}. This is the standard setting.
-% \item[latex2e] Use the \pkg{graphics} package to select the driver, rather
-% than \LaTeX3 code.
% \item[dvips] Use the \texttt{dvips} driver.
% \item[dvipdfmx] Use the \texttt{dvipdfmx} driver.
% \item[dvisvgm] Use the \texttt{dvisvgm} driver.
@@ -1172,64 +1171,6 @@
]%
% \end{macrocode}
%
-% \begin{macro}[int]{\expl@create@bool@option}
-% \begin{variable}[int]
-% {
-% \l@expl@undo@recent@deprecations@bool ,
-% \l@expl@check@declarations@bool ,
-% \l@expl@log@functions@bool ,
-% \l@expl@enable@debug@bool
-% }
-% \begin{variable}[int]{\l@expl@options@clist}
-% Options to be set up. These have to be done by hand as there is no
-% \pkg{expl3} yet: the logging option is needed before loading
-% \pkg{l3basics}! Only a minimal set of options are handled here:
-% others are left for a proper key--value approach once the kernel is
-% loaded. After processing the options we set the
-% \texttt{enable-debug} boolean so that the options
-% \texttt{check-declarations} and \texttt{log-functions} imply
-% \texttt{enable-debug}: otherwise the necessary debugging code would
-% not be set up properly.
-% \begin{macrocode}
-\newcommand\expl@create@bool@option[2]%
- {%
- \DeclareOption{#1}{\chardef #2=1 }%
- \DeclareOption{#1=true}{\chardef #2=1 }%
- \DeclareOption{#1=false}{\chardef #2=0 }%
- \newcommand*#2{}%
- \chardef #2=0 %
- }%
-\expl@create@bool@option
- {undo-recent-deprecations}\l@expl@undo@recent@deprecations@bool
-\expl@create@bool@option{check-declarations}\l@expl@check@declarations@bool
-\expl@create@bool@option{log-functions}\l@expl@log@functions@bool
-\expl@create@bool@option{enable-debug}\l@expl@enable@debug@bool
-\let\expl@create@bool@option\@undefined
-\chardef\l@expl@enable@debug@bool=0 %
-\newcommand*\l@expl@options@clist{}%
-\DeclareOption*
- {%
- \ifx\l@expl@options@clist\@empty
- \let\l@expl@options@clist\CurrentOption
- \else
- \expandafter\expandafter\expandafter\def
- \expandafter\expandafter\expandafter\l@expl@options@clist
- \expandafter\expandafter\expandafter
- {\expandafter\l@expl@options@clist\expandafter,\CurrentOption}
- \fi
- }%
-\ProcessOptions\relax
-\ifodd\l@expl@check@declarations@bool
- \chardef\l@expl@enable@debug@bool=1 %
-\fi
-\ifodd\l@expl@log@functions@bool
- \chardef\l@expl@enable@debug@bool=1 %
-\fi
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{macro}
-%
% \begin{macro}{\ProvidesExplPackage, \ProvidesExplClass, \ProvidesExplFile}
% For other packages and classes building on this one it is convenient
% not to need \cs{ExplSyntaxOn} each time.
@@ -1266,245 +1207,86 @@
\fi
% \end{macrocode}
%
-% \begin{variable}{\l__expl_driver_tl}
-% \begin{variable}{\l__expl_native_drivers_bool}
-% With the code now loaded, options can be handled using a real key--value
-% interpreter. The \enquote{faked} options are also included so that any
-% erroneous input is mopped up (\emph{e.g.}~\texttt{log-function =
-% foo}). The checks on driver choice are set up here, so when actually
-% the driver it's a straight forward operation.
% \begin{macrocode}
-\__kernel_msg_new:nnnn { expl } { wrong-driver }
- { Driver~request~inconsistent~with~engine:~using~'#2'~driver. }
- {
- You~have~requested~driver~'#1',~but~this~is~not~suitable~for~use~with~the~
- active~engine.~LaTeX3~will~use~the~'#2'~driver~instead.
- }
-\tl_new:N \l__expl_driver_tl
-\keys_define:nn { expl }
- {
- driver .choice:,
- driver / auto .code:n =
- {
- \tl_set:Nx \l__expl_driver_tl
- {
- \sys_if_engine_xetex:TF
- { xdvipdfmx }
- {
- \sys_if_output_pdf:TF
- { pdfmode }
- {
- \bool_lazy_or:nnTF
- { \sys_if_engine_pdftex_p: }
- { \sys_if_engine_luatex_p: }
- { dvips }
- { dvipdfmx }
- }
- }
- }
- },
- driver / dvipdfmx .code:n =
- {
- \tl_set:Nn \l__expl_driver_tl { dvipdfmx }
- \sys_if_engine_xetex:TF
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { dvipdfmx } { xdvipdfmx }
- \tl_set:Nn \l__expl_driver_tl { xdvipdfmx }
- }
- {
- \sys_if_output_pdf:T
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { dvipdfmx } { pdfmode }
- \tl_set:Nn \l__expl_driver_tl { pdfmode }
- }
- }
- },
- driver / dvips .code:n =
- {
- \tl_set:Nn \l__expl_driver_tl { dvips }
- \sys_if_engine_xetex:TF
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { dvips } { xdvipdfmx }
- \tl_set:Nn \l__expl_driver_tl { xdvipdfmx }
- }
- {
- \sys_if_output_pdf:T
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { dvips } { pdfmode }
- \tl_set:Nn \l__expl_driver_tl { pdfmode }
- }
- }
- },
- driver / dvisvgm .code:n =
- {
- \tl_set:Nn \l__expl_driver_tl { dvisvgm }
- \sys_if_engine_xetex:TF
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { dvips } { xdvipdfmx }
- \tl_set:Nn \l__expl_driver_tl { xdvipdfmx }
- }
- {
- \sys_if_output_pdf:T
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { dvips } { pdfmode }
- \tl_set:Nn \l__expl_driver_tl { pdfmode }
- }
- }
- },
- driver / latex2e .code:n =
- { \tl_set:Nn \l__expl_driver_tl { latex2e } },
- driver / pdfmode .code:n =
- {
- \tl_set:Nn \l__expl_driver_tl { pdfmode }
- \sys_if_engine_xetex:TF
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { pdfmode } { xdvipdfmx }
- \tl_set:Nn \l__expl_driver_tl { xdvipdfmx }
- }
- {
- \sys_if_output_pdf:F
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { pdfmode } { dvips }
- \tl_set:Nn \l__expl_driver_tl { dvips }
- }
- }
- },
- driver / xdvipdfmx .code:n =
- {
- \tl_set:Nn \l__expl_driver_tl { xdvipdfmx }
- \sys_if_engine_xetex:F
- {
- \sys_if_output_pdf:TF
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { xdvipdfmx } { pdfmode }
- \tl_set:Nn \l__expl_driver_tl { pdfmode }
- }
- {
- \__kernel_msg_error:nnnn { expl } { wrong-driver }
- { xdvipdfmx } { dvips }
- \tl_set:Nn \l__expl_driver_tl { dvips }
- }
- }
- },
- driver .initial:n = { auto } ,
- native-drivers .choice:,
- native-drivers .default:n = { true },
- native-drivers / false .meta:n = { driver = latex2e },
- native-drivers / true .meta:n = { driver = auto }
- }
+%<@@=expl>
% \end{macrocode}
-% Mop up any incorrect settings for the other options.
+%
+% \begin{variable}{\c_@@_def_ext_tl}
+% Needed by \LaTeXe{}.
% \begin{macrocode}
-\keys_define:nn { expl }
- {
- undo-recent-deprecations .bool_set:N = \l@expl@undo@recent@deprecations@bool,
- check-declarations .bool_set:N = \l@expl@check@declarations@bool,
- log-functions .bool_set:N = \l@expl@log@functions@bool
- }
-\keys_set:nV { expl } \l@expl@options@clist
+\tl_const:Nn \c_@@_def_ext_tl { def }
% \end{macrocode}
% \end{variable}
-% \end{variable}
%
-% \begin{macro}
-% {
-% \box_rotate:Nn,
-% \box_resize_to_wd_and_ht_plus_dp:Nnn,
-% \box_resize_to_ht_plus_dp:Nn,
-% \box_resize_to_wd:Nn,
-% \box_scale:Nnn
-% }
-% For the \LaTeXe{} drivers,
-% alter various definitions to use the \pkg{graphics} package
-% instead. The package is loaded right at the start of the hook
-% as there is otherwise a potential issue with \pkg{(x)color}: see
-% \url{http://groups.google.com/group/comp.text.tex/msg/c9de8913c756ef4c}.
+% \begin{macro}{\__kernel_sys_configuration_load:n}
+% For \LaTeXe{}, option loading uses the built-in functionality: as this
+% may be a reload we have to force the issue.
% \begin{macrocode}
-\str_if_eq:VnTF \l__expl_driver_tl { latex2e }
+\cs_new_protected:Npn \__kernel_sys_configuration_load:n #1
{
- \tl_gput_left:Nn \@begindocumenthook { \RequirePackage { graphics } }
- \__kernel_msg_new:nnnn { box } { clipping-not-available }
- { Box~clipping~not~available. }
- {
- The~\box_clip:N~function~is~only~available~when~loading~expl3~
- with~the~"native-drivers"~option.
- }
- \cs_set_protected:Npn \box_clip:N #1
- {
- \hbox_set:Nn #1 { \box_use:N #1 }
- \__kernel_msg_error:nn { box } { clipping-not-available }
- }
- \cs_set_protected:Npn \box_rotate:Nn #1#2
- { \hbox_set:Nn #1 { \rotatebox {#2} { \box_use:N #1 } } }
- \cs_set_protected:Npn \box_resize_to_wd_and_ht_plus_dp:Nnn #1#2#3
- {
- \hbox_set:Nn #1
- {
- \resizebox *
- { \dim_eval:n {#2} }
- { \dim_eval:n {#3} }
- { \box_use:N #1 }
- }
- }
- \cs_set_protected:Npn \box_resize_to_ht_plus_dp:Nn #1#2
- {
- \hbox_set:Nn #1
- {
- \resizebox * { ! } { \dim_eval:n {#2} }
- { \box_use:N #1 }
- }
- }
- \cs_set_protected:Npn \box_resize_to_wd:Nn #1#2
+ \group_begin:
+ \cs_set_protected:Npn \ProvidesExplFile
{
- \hbox_set:Nn #1
- {
- \resizebox * { \dim_eval:n {#2} } { ! }
- { \box_use:N #1 }
- }
+ \char_set_catcode_space:n { `\ }
+ \ProvidesExplFileAux
}
- \cs_set_protected:Npn \__box_scale_aux:N #1
+ \cs_set_protected:Npn \ProvidesExplFileAux ##1##2##3##4
{
- \exp_last_unbraced:Nx \scalebox
- { { \fp_use:N \l__box_scale_x_fp } [ \fp_use:N \l__box_scale_y_fp ] }
- { \box_use:N #1 }
+ \group_end:
+ \ProvidesFile {##1} [ ##2~v##3~##4 ]
}
- \cs_set_protected:Npn \color_ensure_current: { \set@color }
+ \cs_undefine:c { ver@ #1 .def }
+ \@onefilewithoptions {#1} [ ] [ ]
+ \c_@@_def_ext_tl
}
% \end{macrocode}
% \end{macro}
-% For native drivers, just load the appropriate file. As \cs{expl3} syntax
-% is already on and the full mechanism is only engaged at the end of the
-% loader, \cs{ProvidesExplFile} is temporarily redefined here.
+%
+% \begin{variable}{\l_@@_options_clist}
% \begin{macrocode}
+\clist_new:N \l_@@_options_clist
+\DeclareOption*
+ { \clist_put_right:NV \l_@@_options_clist \CurrentOption }
+\ProcessOptions \relax
+% \end{macrocode}
+% \end{variable}
+%
+% Pretty standard setting creation.
+% \begin{macrocode}
+\keys_define:nn { sys }
{
- \group_begin:
- \cs_set_protected:Npn \ProvidesExplFile
+ backend .choices:nn =
+ { dvipdfmx , dvips , dvisvgm , pdfmode , xdvipdfmx }
+ { \sys_load_backend:n {#1} } ,
+ check-declarations .code:n =
{
- \char_set_catcode_space:n { `\ }
- \ProvidesExplFileAux
- }
- \cs_set_protected:Npn \ProvidesExplFileAux #1#2#3#4
+ \sys_load_debug:
+ \debug_on:n { check-declarations }
+ } ,
+ driver .meta:n = { backend = #1 } ,
+ enable-debug .code:n =
+ \sys_load_debug: ,
+ log-functions .code:n =
{
- \group_end:
- \ProvidesFile {#1} [ #2~v#3~#4 ]
+ \sys_load_debug:
+ \debug_on:n { log-functions }
+ } ,
+ undo-recent-deprecations .code:n =
+ {
+ \sys_load_deprecation:
+ \bool_gset_true:N \g__kernel_deprecation_undo_recent_bool
}
- \tl_const:Nn \c__expl_def_ext_tl { def }
- \@onefilewithoptions { l3backend- \l__expl_driver_tl } [ ] [ ]
- \c__expl_def_ext_tl
}
% \end{macrocode}
%
+% \begin{macrocode}
+\keys_set:nV { sys } \l_@@_options_clist
+\str_if_exist:NF \c_sys_backend_str
+ { \sys_load_backend:n { } }
+% \end{macrocode}
+%
% \begin{macro}{\@pushfilename, \@popfilename}
-% \begin{macro}{\__expl_status_pop:w}
+% \begin{macro}{\@@_status_pop:w}
% The idea here is to use \LaTeXe{}'s \tn{@pushfilename} and
% \tn{@popfilename} to track the current syntax status. This can be
% achieved by saving the current status flag at each push to a stack,
@@ -1541,14 +1323,14 @@
\__kernel_file_input_pop:
\tl_if_empty:NTF \l__expl_status_stack_tl
{ \ExplSyntaxOff }
- { \exp_after:wN \__expl_status_pop:w \l__expl_status_stack_tl \q_stop }
+ { \exp_after:wN \@@_status_pop:w \l__expl_status_stack_tl \q_stop }
}
% \end{macrocode}
% The pop auxiliary function removes the first item from the stack,
% saves the rest of the stack and then does the test. The flag here
% is not a proper \texttt{bool}, so a low-level test is used.
% \begin{macrocode}
-\cs_new_protected:Npn \__expl_status_pop:w #1#2 \q_stop
+\cs_new_protected:Npn \@@_status_pop:w #1#2 \q_stop
{
\tl_set:Nn \l__expl_status_stack_tl {#2}
\int_if_odd:nTF {#1}
@@ -1639,24 +1421,6 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}[int]
-% {
-% \l@expl@undo@recent@deprecations@bool ,
-% \l@expl@check@declarations@bool ,
-% \l@expl@log@functions@bool ,
-% \l@expl@enable@debug@bool
-% }
-% In generic mode, there is no convenient option handling and so instead
-% the two variables are defined to do nothing.
-% Appropriate value before input of the loader.
-% \begin{macrocode}
-\chardef \l@expl@undo@recent@deprecations@bool = 0 %
-\chardef \l@expl@check@declarations@bool = 0 %
-\chardef \l@expl@log@functions@bool = 0 %
-\chardef \l@expl@enable@debug@bool = 0 %
-% \end{macrocode}
-% \end{variable}
-%
% \begin{macro}{\AtBeginDocument}
% \begin{macro}[int]{\expl@AtBeginDocument}
% There are a few uses of \cs{AtBeginDocument} in the package code: the
@@ -1690,35 +1454,30 @@
\fi
% \end{macrocode}
%
-% For driver loading in generic mode, there are no options: pick the most
-% appropriate case! To allow this loading to take place a temporary
-% definition of \cs{ProvidesExplFile} is provided
+% \begin{macro}{\__kernel_sys_configuration_load:n}
+% Very basic.
% \begin{macrocode}
-\cs_set_protected:Npn \ProvidesExplFile
+\cs_new_protected:Npn \__kernel_sys_configuration_load:n #1
{
\group_begin:
- \char_set_catcode_space:n { `\ }
- \ProvidesExplFileAux
- }
-\cs_set_protected:Npn \ProvidesExplFileAux #1#2#3#4
- {
- \group_end:
- \iow_log:x { File:~#1~#2~v#3~#4 }
+ \cs_set_protected:Npn \ProvidesExplFile
+ {
+ \char_set_catcode_space:n { `\ }
+ \ProvidesExplFileAux
+ }
+ \cs_set_protected:Npn \ProvidesExplFileAux ##1##2##3##4
+ {
+ \group_end:
+ \iow_log:x { File:~##1~##2~v##3~##4 }
+ }
+ \tex_input:D #1 .def \scan_stop:
}
-\tex_input:D
- l3backend-
- \sys_if_engine_xetex:TF
- { xdvipdfmx }
- {
- \bool_lazy_and:nnTF
- { \cs_if_exist_p:N \tex_pdfoutput:D }
- { \int_compare_p:nNn \tex_pdfoutput:D > 0 }
- { pdfmode }
- { dvips }
- }
- .def \scan_stop:
-\cs_undefine:N \ProvidesExplFile
-\cs_undefine:N \ProvidesExplFileAux
+% \end{macrocode}
+% \end{macro}
+%
+% Load the standard back-end.
+% \begin{macrocode}
+\sys_load_backend:n { }
% \end{macrocode}
%
% For the generic loader, a few final steps to take. Turn of \cs{expl3}
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index 2dccb5f37c..9238eea6fc 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/contrib/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
index ed56cf9581..86d1535a11 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/contrib/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
index b1e51566db..98a236cb65 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -54,7 +54,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-09-19}
+\date{Released 2019-09-28}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3.ins b/macros/latex/contrib/l3kernel/l3.ins
index 8affab2c2d..343d8d7f18 100644
--- a/macros/latex/contrib/l3kernel/l3.ins
+++ b/macros/latex/contrib/l3kernel/l3.ins
@@ -106,7 +106,7 @@ and all files in that bundle must be distributed together.
\from{l3unicode.dtx} {package}
\from{l3candidates.dtx} {package}
\from{l3legacy.dtx} {package}
- \from{l3deprecation.dtx}{package}
+ \from{l3deprecation.dtx}{package,kernel}
}
}
@@ -136,6 +136,9 @@ and all files in that bundle must be distributed together.
\file{l3str-enc-iso885916.def} {\from{l3str-convert.dtx}{iso885916}}%
}
+\generate{\file{l3debug.def} {\from{l3debug.dtx} {package}}}
+\generate{\file{l3deprecation.def}{\from{l3deprecation.dtx}{package,patches}}}
+
\generate{\file{l3docstrip.tex} {\from{l3docstrip.dtx} {program}}}
\generate{\file{l3names.def} {\from{l3names.dtx} {names}}}
diff --git a/macros/latex/contrib/l3kernel/l3alloc.dtx b/macros/latex/contrib/l3kernel/l3alloc.dtx
index ea73886535..30f1859170 100644
--- a/macros/latex/contrib/l3kernel/l3alloc.dtx
+++ b/macros/latex/contrib/l3kernel/l3alloc.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index 1901447816..002e524aa8 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -1275,6 +1275,24 @@
% execute <false code>. Similar for the other functions.
% \end{function}
%
+% \section{Starting a paragraph}
+%
+% \begin{function}[added = 2017-07-04]{\mode_leave_vertical:}
+% \begin{syntax}
+% \cs{mode_leave_vertical:}
+% \end{syntax}
+% Ensures that \TeX{} is not in vertical (inter-paragraph) mode. In
+% horizontal or math mode this command has no effect, in vertical mode it
+% switches to horizontal mode, and inserts a box of width
+% \tn{parindent}, followed by the \tn{everypar} token list.
+% \begin{texnote}
+% This results in the contents of the \tn{everypar} token register being
+% inserted, after \cs{mode_leave_vertical:} is complete. Notice that in
+% contrast to the \LaTeXe{} \tn{leavevmode} approach, no box is used
+% by the method implemented here.
+% \end{texnote}
+% \end{function}
+%
% \end{documentation}
%
% \begin{implementation}
@@ -1690,447 +1708,51 @@
% \begin{macro}{\__kernel_if_debug:TF}
% A more meaningful test of whether debugging is enabled than messing
% up with guards. We can also more easily change the logic in one
-% place then. At present, debugging is disabled in the format and in
-% generic mode, while in \LaTeXe{} mode it is enabled if one of the
-% options \texttt{enable-debug}, \texttt{log-functions} or
-% \texttt{check-declarations} was given.
+% place then. This is needed primarily for deprecations.
% \begin{macrocode}
\cs_set_protected:Npn \__kernel_if_debug:TF #1#2 {#2}
-%<*package>
-\tex_ifodd:D \l@expl@enable@debug@bool
- \cs_set_protected:Npn \__kernel_if_debug:TF #1#2 {#1}
-\fi:
-%</package>
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\debug_on:n, \debug_off:n, \@@_all_on:, \@@_all_off:}
-%
+% \begin{macro}{\debug_on:n, \debug_off:n}
+% Stubs.
% \begin{macrocode}
-\__kernel_if_debug:TF
+\cs_set_protected:Npn \debug_on:n #1
{
- \cs_set_protected:Npn \debug_on:n #1
- {
- \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
- {
- \cs_if_exist_use:cF { @@_ ##1 _on: }
- { \__kernel_msg_error:nnn { kernel } { debug } {##1} }
- }
- }
- \cs_set_protected:Npn \debug_off:n #1
- {
- \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
- {
- \cs_if_exist_use:cF { @@_ ##1 _off: }
- { \__kernel_msg_error:nnn { kernel } { debug } {##1} }
- }
- }
- \cs_set_protected:Npn \@@_all_on:
- {
- \debug_on:n
- {
- check-declarations ,
- check-expressions ,
- deprecation ,
- log-functions ,
- }
- }
- \cs_set_protected:Npn \@@_all_off:
- {
- \debug_off:n
- {
- check-declarations ,
- check-expressions ,
- deprecation ,
- log-functions ,
- }
- }
+ \__kernel_msg_error:nnx { kernel } { enable-debug }
+ { \tl_to_str:n { \debug_on:n {#1} } }
}
+\cs_set_protected:Npn \debug_off:n #1
{
- \cs_set_protected:Npn \debug_on:n #1
- {
- \__kernel_msg_error:nnx { kernel } { enable-debug }
- { \tl_to_str:n { \debug_on:n {#1} } }
- }
- \cs_set_protected:Npn \debug_off:n #1
- {
- \__kernel_msg_error:nnx { kernel } { enable-debug }
- { \tl_to_str:n { \debug_off:n {#1} } }
- }
+ \__kernel_msg_error:nnx { kernel } { enable-debug }
+ { \tl_to_str:n { \debug_off:n {#1} } }
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\debug_suspend:, \debug_resume:}
-% \begin{macro}{\@@_suspended:T}
-% \begin{macro}{\l_@@_suspended_tl}
-% Suspend and resume locally all debug-related errors and logging
-% except deprecation errors. The \cs{debug_suspend:} and \cs{debug_resume:}
-% pairs can be nested. We keep track of nesting in a token list
-% containing a number of periods. At first begin with the
-% \enquote{non-suspended} version of \cs{@@_suspended:T}.
-% \begin{macrocode}
-\__kernel_if_debug:TF
- {
- \cs_set_nopar:Npn \l_@@_suspended_tl { }
- \cs_set_protected:Npn \debug_suspend:
- {
- \tl_put_right:Nn \l_@@_suspended_tl { . }
- \cs_set_eq:NN \@@_suspended:T \use:n
- }
- \cs_set_protected:Npn \debug_resume:
- {
- \tl_set:Nx \l_@@_suspended_tl
- { \tl_tail:N \l_@@_suspended_tl }
- \tl_if_empty:NT \l_@@_suspended_tl
- {
- \cs_set_eq:NN \@@_suspended:T \use_none:n
- }
- }
- \cs_set:Npn \@@_suspended:T #1 { }
- }
- {
- \cs_set_protected:Npn \debug_suspend: { }
- \cs_set_protected:Npn \debug_resume: { }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_check-declarations_on:, \@@_check-declarations_off:}
-% \begin{macro}{\__kernel_chk_var_exist:N}
-% \begin{macro}{\__kernel_chk_cs_exist:N, \__kernel_chk_cs_exist:c}
-% \begin{macro}{\__kernel_chk_var_local:N, \__kernel_chk_var_global:N}
-% \begin{macro}{\__kernel_chk_var_scope:NN}
-% When debugging is enabled these two functions set up functions that
-% test their argument (when \texttt{check-declarations} is active)
-% \begin{itemize}
-% \item \cs{__kernel_chk_var_exist:N} and \cs{__kernel_chk_cs_exist:N}, two
-% functions that test that their argument is defined;
-% \item \cs{__kernel_chk_var_scope:NN} that checks that its argument |#2|
-% has scope |#1|.
-% \item \cs{__kernel_chk_var_local:N} and \cs{__kernel_chk_var_global:N} that
-% perform both checks.
-% \end{itemize}
-% \begin{macrocode}
-\__kernel_if_debug:TF
- {
- \exp_args:Nc \cs_set_protected:Npn { @@_check-declarations_on: }
- {
- \cs_set_protected:Npn \__kernel_chk_var_exist:N ##1
- {
- \@@_suspended:T \use_none:nnn
- \cs_if_exist:NF ##1
- {
- \__kernel_msg_error:nnx { kernel } { non-declared-variable }
- { \token_to_str:N ##1 }
- }
- }
- \cs_set_protected:Npn \__kernel_chk_cs_exist:N ##1
- {
- \@@_suspended:T \use_none:nnn
- \cs_if_exist:NF ##1
- {
- \__kernel_msg_error:nnx { kernel } { command-not-defined }
- { \token_to_str:N ##1 }
- }
- }
- \cs_set_protected:Npn \__kernel_chk_var_scope:NN
- {
- \@@_suspended:T \use_none:nnn
- \@@_chk_var_scope_aux:NN
- }
- \cs_set_protected:Npn \__kernel_chk_var_local:N ##1
- {
- \@@_suspended:T \use_none:nnnnn
- \__kernel_chk_var_exist:N ##1
- \@@_chk_var_scope_aux:NN l ##1
- }
- \cs_set_protected:Npn \__kernel_chk_var_global:N ##1
- {
- \@@_suspended:T \use_none:nnnnn
- \__kernel_chk_var_exist:N ##1
- \@@_chk_var_scope_aux:NN g ##1
- }
- }
- \exp_args:Nc \cs_set_protected:Npn { @@_check-declarations_off: }
- {
- \cs_set_protected:Npn \__kernel_chk_var_exist:N ##1 { }
- \cs_set_protected:Npn \__kernel_chk_cs_exist:N ##1 { }
- \cs_set_protected:Npn \__kernel_chk_var_local:N ##1 { }
- \cs_set_protected:Npn \__kernel_chk_var_global:N ##1 { }
- \cs_set_protected:Npn \__kernel_chk_var_scope:NN ##1##2 { }
- }
- \cs_set_protected:Npn \__kernel_chk_cs_exist:c
- { \exp_args:Nc \__kernel_chk_cs_exist:N }
- \tex_ifodd:D \l@expl@check@declarations@bool
- \use:c { @@_check-declarations_on: }
- \else:
- \use:c { @@_check-declarations_off: }
- \fi:
- }
- { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_chk_var_scope_aux:NN}
-% \begin{macro}{\@@_chk_var_scope_aux:Nn}
-% \begin{macro}{\@@_chk_var_scope_aux:NNn}
-% First check whether the name of the variable |#2| starts with
-% \meta{letter}|_|. If it does then pass that letter, the
-% \meta{scope}, and the variable name to
-% \cs{@@_chk_var_scope_aux:NNn}. That function compares the two
-% letters and triggers an error if they differ (the \cs{scan_stop:}
-% case is not reachable here). If the second character was not |_|
-% then pass the same data to the same auxiliary, except for its first
-% argument which is now a control sequence. That control sequence is
-% actually a token list (but to avoid triggering the checking code we
-% manipulate it using \cs{cs_set_nopar:Npn}) containing a single
-% letter \meta{scope} according to what the first assignment to the
-% given variable was.
-% \begin{macrocode}
-\__kernel_if_debug:TF
- {
- \cs_set_protected:Npn \@@_chk_var_scope_aux:NN #1#2
- { \exp_args:NNf \@@_chk_var_scope_aux:Nn #1 { \cs_to_str:N #2 } }
- \cs_set_protected:Npn \@@_chk_var_scope_aux:Nn #1#2
- {
- \if:w _ \use_i:nn \use_i_delimit_by_q_stop:nw #2 ? ? \q_stop
- \exp_after:wN \@@_chk_var_scope_aux:NNn
- \use_i_delimit_by_q_stop:nw #2 ? \q_stop
- #1 {#2}
- \else:
- \exp_args:Nc \@@_chk_var_scope_aux:NNn
- { @@_chk_/ #2 }
- #1 {#2}
- \fi:
- }
- \cs_set_protected:Npn \@@_chk_var_scope_aux:NNn #1#2#3
- {
- \if:w #1 #2
- \else:
- \if:w #1 \scan_stop:
- \cs_gset_nopar:Npn #1 {#2}
- \else:
- \__kernel_msg_error:nnxxx { kernel } { local-global }
- {#1} {#2} { \iow_char:N \\ #3 }
- \fi:
- \fi:
- }
- }
- { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_check-expressions_on:, \@@_check-expressions_off:}
-% \begin{macro}{\__kernel_chk_expr:nNnN}
-% \begin{macro}{\@@_chk_expr_aux:nNnN}
-% When debugging is enabled these two functions set
-% \cs{__kernel_chk_expr:nNnN} to test or not whether the given
-% expression is valid. The idea is to evaluate the expression within
-% a brace group (to catch trailing \cs{use_none:nn} or similar), then
-% test that the result is what we expect. This is done by turning it
-% to an integer and hitting that with \cs{tex_romannumeral:D} after
-% replacing the first character by |-0|. If all goes well, that
-% primitive finds a non-positive integer and gives an empty output.
-% If the original expression evaluation stopped early it leaves a
-% trailing \cs{tex_relax:D}, which stops the second evaluation (used
-% to convert to integer) before it encounters the final
-% \cs{tex_relax:D}. Since \cs{tex_romannumeral:D} does not absorb
-% \cs{tex_relax:D} the output will be nonempty. Note that |#3| is
-% empty except for mu expressions for which it is \cs{tex_mutoglue:D}
-% to avoid an \enquote{incompatible glue units} error. Note also that
-% if we had omitted the first \cs{tex_relax:D} then for instance
-% |1+2\relax+3| would incorrectly be accepted as a valid integer
-% expression.
-% \begin{macrocode}
-\__kernel_if_debug:TF
- {
- \exp_args:Nc \cs_set_protected:Npn { @@_check-expressions_on: }
- {
- \cs_set:Npn \__kernel_chk_expr:nNnN ##1##2
- {
- \@@_suspended:T { ##1 \use_none:nnnnnnn }
- \exp_after:wN \@@_chk_expr_aux:nNnN
- \exp_after:wN { \tex_the:D ##2 ##1 \scan_stop: }
- ##2
- }
- }
- \exp_args:Nc \cs_set_protected:Npn { @@_check-expressions_off: }
- { \cs_set:Npn \__kernel_chk_expr:nNnN ##1##2##3##4 {##1} }
- \use:c { @@_check-expressions_off: }
- \cs_set:Npn \@@_chk_expr_aux:nNnN #1#2#3#4
- {
- \tl_if_empty:oF
- {
- \tex_romannumeral:D - 0
- \exp_after:wN \use_none:n
- \int_value:w #3 #2 #1 \scan_stop:
- }
- {
- \__kernel_msg_expandable_error:nnnn
- { kernel } { expr } {#4} {#1}
- }
- #1
- }
- }
- { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_log-functions_on:, \@@_log-functions_off:}
-% \begin{macro}{\__kernel_debug_log:x}
-% These two functions (corresponding to the \pkg{expl3} option
-% \texttt{log-functions}) control whether \cs{__kernel_debug_log:x} writes to the
-% log file or not. Since \cs{iow_log:x} does not yet have its final
-% definition we do not use \cs{cs_set_eq:NN} (not defined yet anyway).
-% Once everything is defined, turn logging on or off depending on what
-% option was given. When debugging is not enabled, simply produce an
-% error.
% \begin{macrocode}
-\__kernel_if_debug:TF
- {
- \exp_args:Nc \cs_set_protected:Npn { @@_log-functions_on: }
- {
- \cs_set_protected:Npn \__kernel_debug_log:x
- { \@@_suspended:T \use_none:nn \iow_log:x }
- }
- \exp_args:Nc \cs_set_protected:Npn { @@_log-functions_off: }
- { \cs_set_protected:Npn \__kernel_debug_log:x { \use_none:n } }
- \tex_ifodd:D \l@expl@log@functions@bool
- \use:c { @@_log-functions_on: }
- \else:
- \use:c { @@_log-functions_off: }
- \fi:
- }
- { }
+\cs_set_protected:Npn \debug_suspend: { }
+\cs_set_protected:Npn \debug_resume: { }
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\@@_deprecation_on:, \@@_deprecation_off:}
% \begin{macro}{\__kernel_deprecation_code:nn}
% \begin{variable}{\g_@@_deprecation_on_tl, \g_@@_deprecation_off_tl}
% Some commands were more recently deprecated and not yet removed;
% only make these into errors if the user requests it. This relies on
% two token lists, filled up in \pkg{l3deprecation}.
% \begin{macrocode}
-\__kernel_if_debug:TF
- {
- \cs_set_protected:Npn \@@_deprecation_on:
- { \g_@@_deprecation_on_tl }
- \cs_set_protected:Npn \@@_deprecation_off:
- { \g_@@_deprecation_off_tl }
- \cs_set_nopar:Npn \g_@@_deprecation_on_tl { }
- \cs_set_nopar:Npn \g_@@_deprecation_off_tl { }
- \cs_set_protected:Npn \__kernel_deprecation_code:nn #1#2
- {
- \tl_gput_right:Nn \g_@@_deprecation_on_tl {#1}
- \tl_gput_right:Nn \g_@@_deprecation_off_tl {#2}
- }
- }
+\cs_set_nopar:Npn \g_@@_deprecation_on_tl { }
+\cs_set_nopar:Npn \g_@@_deprecation_off_tl { }
+\cs_set_protected:Npn \__kernel_deprecation_code:nn #1#2
{
- \cs_set_protected:Npn \__kernel_deprecation_code:nn #1#2 { }
+ \tl_gput_right:Nn \g_@@_deprecation_on_tl {#1}
+ \tl_gput_right:Nn \g_@@_deprecation_off_tl {#2}
}
% \end{macrocode}
% \end{variable}
% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\__kernel_patch:nnNNpn, \__kernel_patch_conditional:nNNpnn}
-% \begin{macro}
-% {\@@_patch_aux:nnnn, \@@_patch_auxii:nnnn}
-% When debugging is not enabled, \cs{__kernel_patch:nnNNpn} and
-% \cs{__kernel_patch_conditional:nNNpnn} throw the patch away.
-% Otherwise they can be followed by \cs{cs_new:Npn} (or similar), and
-% \cs{prg_new_conditional:Npnn} (or similar), respectively. In each
-% case, grab the name of the function to be defined and its parameters
-% then insert tokens before and/or after the definition.
-% \begin{macrocode}
-\__kernel_if_debug:TF
- {
- \cs_set_protected:Npn \__kernel_patch:nnNNpn #1#2#3#4#5#
- { \@@_patch_aux:nnnn {#1} {#2} { #3 #4 #5 } }
- \cs_set_protected:Npn \__kernel_patch_conditional:nNNpnn #1#2#3#4#
- { \@@_patch_auxii:nnnn {#1} { #2 #3 #4 } }
- \cs_set_protected:Npn \@@_patch_aux:nnnn #1#2#3#4
- { #3 { #1 #4 #2 } }
- \cs_set_protected:Npn \@@_patch_auxii:nnnn #1#2#3#4
- { #2 {#3} { #1 #4 } }
- }
- {
- \cs_set_protected:Npn \__kernel_patch:nnNNpn #1#2 { }
- \cs_set_protected:Npn \__kernel_patch_conditional:nNNpnn #1 { }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\__kernel_patch_args:nNNpn, \__kernel_patch_conditional_args:nNNpnn}
-% \begin{macro}
-% {\__kernel_patch_args:nnnNNpn, \__kernel_patch_conditional_args:nnnNNpnn}
-% \begin{macro}
-% {
-% \@@_tmp:w,
-% \@@_patch_args_aux:nnnNNnn,
-% \@@_patch_args_aux:nnnNNnnn,
-% \@@_patch_args_aux:nnnn
-% }
-% See \cs{__kernel_patch:nnNNpn}. The first argument is something like
-% |{#1}{(#2)}|. Define a temporary macro using the \meta{parameters}
-% and \meta{code} of the definition that follows, then expand that
-% temporary macro in front of the first argument to obtain new
-% \meta{code}. Then perform the definition as if that new \meta{code}
-% was directly typed in the file.
-% \begin{macrocode}
-\cs_set_protected:Npn \__kernel_patch_args:nNNpn
- { \__kernel_patch_args:nnnNNpn { } { } }
-\cs_set_protected:Npn \__kernel_patch_conditional_args:nNNpnn
- { \__kernel_patch_conditional_args:nnnNNpnn { } { } }
-\__kernel_if_debug:TF
- {
- \cs_set_protected:Npn \__kernel_patch_args:nnnNNpn #1#2#3#4#5#6#
- { \@@_patch_args_aux:nnnNNnn {#1} {#2} {#3} #4 #5 {#6} }
- \cs_set_protected:Npn \__kernel_patch_conditional_args:nnnNNpnn
- #1#2#3#4#5#6#
- { \@@_patch_args_aux:nnnNNnnn {#1} {#2} {#3} #4 #5 {#6} }
- \cs_set_protected:Npn \@@_patch_args_aux:nnnNNnn #1#2#3#4#5#6#7
- {
- \cs_set:Npn \@@_tmp:w #6 {#7}
- \exp_after:wN \@@_patch_args_aux:nnnn \exp_after:wN
- { \@@_tmp:w #3 } { #4 #5 #6 } {#1} {#2}
- }
- \cs_set_protected:Npn \@@_patch_args_aux:nnnNNnnn #1#2#3#4#5#6#7#8
- {
- \cs_set:Npn \@@_tmp:w #6 {#8}
- \exp_after:wN \@@_patch_args_aux:nnnn \exp_after:wN
- { \@@_tmp:w #3 } { #4 #5 #6 {#7} } {#1} {#2}
- }
- \cs_set_protected:Npn \@@_patch_args_aux:nnnn #1#2#3#4
- { #2 { #3 #1 #4 } }
- }
- {
- \cs_set_protected:Npn \__kernel_patch_args:nnnNNpn #1#2#3 { }
- \cs_set_protected:Npn \__kernel_patch_conditional_args:nnnNNpnn
- #1#2#3 { }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
% \subsection{Conditional processing and definitions}
%
@@ -2515,20 +2137,12 @@
#5 {#1} {#2} {#3} {#4}
\@@_set_eq_conditional_loop:nnnnNw {#1} {#2} {#3} {#4} #5
}
-\__kernel_patch:nnNNpn
- { \__kernel_chk_cs_exist:c { #5 _p : #6 } } { }
\cs_set:Npn \@@_set_eq_conditional_p_form:wNnnnn #1 \q_stop #2#3#4#5#6
{ #2 { #3 _p : #4 } { #5 _p : #6 } }
-\__kernel_patch:nnNNpn
- { \__kernel_chk_cs_exist:c { #5 : #6 TF } } { }
\cs_set:Npn \@@_set_eq_conditional_TF_form:wNnnnn #1 \q_stop #2#3#4#5#6
{ #2 { #3 : #4 TF } { #5 : #6 TF } }
-\__kernel_patch:nnNNpn
- { \__kernel_chk_cs_exist:c { #5 : #6 T } } { }
\cs_set:Npn \@@_set_eq_conditional_T_form:wNnnnn #1 \q_stop #2#3#4#5#6
{ #2 { #3 : #4 T } { #5 : #6 T } }
-\__kernel_patch:nnNNpn
- { \__kernel_chk_cs_exist:c { #5 : #6 F } } { }
\cs_set:Npn \@@_set_eq_conditional_F_form:wNnnnn #1 \q_stop #2#3#4#5#6
{ #2 { #3 : #4 F } { #5 : #6 F } }
% \end{macrocode}
@@ -2889,11 +2503,6 @@
% issued. We have to make sure we don't put the argument into the
% conditional processing since it may be an |\if...| type function!
% \begin{macrocode}
-\__kernel_patch:nnNNpn { }
- {
- \__kernel_debug_log:x
- { Defining~\token_to_str:N #1~ \msg_line_context: }
- }
\cs_set_protected:Npn \__kernel_chk_if_free_cs:N #1
{
\cs_if_free:NF #1
@@ -3591,6 +3200,28 @@
% \end{macro}
% \end{macro}
%
+% \subsection{Starting a paragraph}
+%
+% \begin{macro}{\mode_leave_vertical:}
+% The approach here is different to that used by \LaTeXe{} or plain \TeX{},
+% which unbox a void box to force horizontal mode. That inserts the
+% \tn{everypar} tokens \emph{before} the re-inserted unboxing tokens. The
+% approach here uses either the \tn{quitvmode} primitive or the equivalent
+% protected macro. In vertical mode, the \tn{indent} primitive is inserted:
+% this will switch to horizontal mode and insert \tn{everypar} tokens and
+% nothing else. Unlike the \LaTeXe{} version, the availability of \eTeX{}
+% means using a mode test can be done at for example the start of an
+% \tn{halign}.
+% \begin{macrocode}
+\cs_new_protected:Npn \mode_leave_vertical:
+ {
+ \if_mode_vertical:
+ \exp_after:wN \tex_indent:D
+ \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index d694a67540..8dd79bc523 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index c72206a2b2..815f0ca6df 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -903,13 +903,6 @@
% produce an internal dimension rather than expand it into characters.
% \begin{macrocode}
\cs_new_eq:NN \@@_dim_eval:w \tex_dimexpr:D
-\__kernel_patch_args:nNNpn
- {
- {
- \__kernel_chk_expr:nNnN {#1}
- \@@_dim_eval:w { } \@@_dim_eval:n
- }
- }
\cs_new:Npn \@@_dim_eval:n #1
{ \@@_dim_eval:w #1 \scan_stop: }
% \end{macrocode}
@@ -972,10 +965,8 @@
% \testfile*
% Assigning the contents of a box to be another box.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \box_set_eq:NN #1#2
{ \tex_setbox:D #1 \tex_copy:D #2 }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \box_gset_eq:NN #1#2
{ \tex_global:D \tex_setbox:D #1 \tex_copy:D #2 }
\cs_generate_variant:Nn \box_set_eq:NN { c , Nc , cc }
@@ -997,10 +988,8 @@
% Assigning the contents of a box to be another box, then drops the
% original box.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \box_set_eq_drop:NN #1#2
{ \tex_setbox:D #1 \tex_box:D #2 }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \box_gset_eq_drop:NN #1#2
{ \tex_global:D \tex_setbox:D #1 \tex_box:D #2 }
\cs_generate_variant:Nn \box_set_eq_drop:NN { c , Nc , cc }
@@ -1165,10 +1154,8 @@
% \testfile*
% Set a box to the previous box.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \box_set_to_last:N #1
{ \tex_setbox:D #1 \tex_lastbox:D }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \box_gset_to_last:N #1
{ \tex_global:D \tex_setbox:D #1 \tex_lastbox:D }
\cs_generate_variant:Nn \box_set_to_last:N { c }
@@ -1285,13 +1272,11 @@
% \begin{macro}{\hbox_gset:Nn, \hbox_gset:cn}
% \testfile*
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \hbox_set:Nn #1#2
{
\tex_setbox:D #1 \tex_hbox:D
{ \color_group_begin: #2 \color_group_end: }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \hbox_gset:Nn #1#2
{
\tex_global:D \tex_setbox:D #1 \tex_hbox:D
@@ -1309,13 +1294,11 @@
% Storing material in a horizontal box with a specified width.
% Again, put the dimension expression in parentheses when debugging.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \hbox_set_to_wd:Nnn #1#2#3
{
\tex_setbox:D #1 \tex_hbox:D to \@@_dim_eval:n {#2}
{ \color_group_begin: #3 \color_group_end: }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \hbox_gset_to_wd:Nnn #1#2#3
{
\tex_global:D \tex_setbox:D #1 \tex_hbox:D to \@@_dim_eval:n {#2}
@@ -1334,14 +1317,12 @@
% Storing material in a horizontal box. This type is useful in
% environment definitions.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \hbox_set:Nw #1
{
\tex_setbox:D #1 \tex_hbox:D
\c_group_begin_token
\color_group_begin:
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \hbox_gset:Nw #1
{
\tex_global:D \tex_setbox:D #1 \tex_hbox:D
@@ -1365,14 +1346,12 @@
% \begin{macro}{\hbox_gset_to_wd:Nnw, \hbox_gset_to_wd:cnw}
% Combining the above ideas.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \hbox_set_to_wd:Nnw #1#2
{
\tex_setbox:D #1 \tex_hbox:D to \@@_dim_eval:n {#2}
\c_group_begin_token
\color_group_begin:
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \hbox_gset_to_wd:Nnw #1#2
{
\tex_global:D \tex_setbox:D #1 \tex_hbox:D to \@@_dim_eval:n {#2}
@@ -1473,13 +1452,11 @@
% \testfile*
% Storing material in a vertical box with a natural height.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \vbox_set:Nn #1#2
{
\tex_setbox:D #1 \tex_vbox:D
{ \color_group_begin: #2 \par \color_group_end: }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \vbox_gset:Nn #1#2
{
\tex_global:D \tex_setbox:D #1 \tex_vbox:D
@@ -1497,13 +1474,11 @@
% Storing material in a vertical box with a natural height and reference
% point at the baseline of the first object in the box.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \vbox_set_top:Nn #1#2
{
\tex_setbox:D #1 \tex_vtop:D
{ \color_group_begin: #2 \par \color_group_end: }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \vbox_gset_top:Nn #1#2
{
\tex_global:D \tex_setbox:D #1 \tex_vtop:D
@@ -1520,13 +1495,11 @@
% \testfile*
% Storing material in a vertical box with a specified height.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \vbox_set_to_ht:Nnn #1#2#3
{
\tex_setbox:D #1 \tex_vbox:D to \@@_dim_eval:n {#2}
{ \color_group_begin: #3 \par \color_group_end: }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \vbox_gset_to_ht:Nnn #1#2#3
{
\tex_global:D \tex_setbox:D #1 \tex_vbox:D to \@@_dim_eval:n {#2}
@@ -1545,14 +1518,12 @@
% Storing material in a vertical box. This type is useful in
% environment definitions.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \vbox_set:Nw #1
{
\tex_setbox:D #1 \tex_vbox:D
\c_group_begin_token
\color_group_begin:
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \vbox_gset:Nw #1
{
\tex_global:D \tex_setbox:D #1 \tex_vbox:D
@@ -1577,14 +1548,12 @@
% \begin{macro}{\vbox_gset_to_ht:Nnw, \vbox_gset_to_ht:cnw}
% A combination of the above ideas.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \vbox_set_to_ht:Nnw #1#2
{
\tex_setbox:D #1 \tex_vbox:D to \@@_dim_eval:n {#2}
\c_group_begin_token
\color_group_begin:
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \vbox_gset_to_ht:Nnw #1#2
{
\tex_global:D \tex_setbox:D #1 \tex_vbox:D to \@@_dim_eval:n {#2}
@@ -1620,11 +1589,9 @@
% \testfile*
% Splitting a vertical box in two.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \vbox_set_split_to_ht:NNn #1#2#3
{ \tex_setbox:D #1 \tex_vsplit:D #2 to \@@_dim_eval:n {#3} }
\cs_generate_variant:Nn \vbox_set_split_to_ht:NNn { c , Nc , cc }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \vbox_gset_split_to_ht:NNn #1#2#3
{
\tex_global:D \tex_setbox:D #1
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index 96dbdc5c78..d726722ad1 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -123,22 +123,6 @@
% See for instance \pkg{l3coffins}.
% \end{function}
%
-% \begin{function}[added = 2017-07-04]{\mode_leave_vertical:}
-% \begin{syntax}
-% \cs{mode_leave_vertical:}
-% \end{syntax}
-% Ensures that \TeX{} is not in vertical (inter-paragraph) mode. In
-% horizontal or math mode this command has no effect, in vertical mode it
-% switches to horizontal mode, and inserts a box of width
-% \tn{parindent}, followed by the \tn{everypar} token list.
-% \begin{texnote}
-% This results in the contents of the \tn{everypar} token register being
-% inserted, after \cs{mode_leave_vertical:} is complete. Notice that in
-% contrast to the \LaTeXe{} \tn{leavevmode} approach, no box is used
-% by the method implemented here.
-% \end{texnote}
-% \end{function}
-%
% \section{Additions to \pkg{l3box}}
%
% \subsection{Viewing part of a box}
@@ -221,31 +205,6 @@
%
% \section{Additions to \pkg{l3fp}}
%
-% \begin{function}[EXP, added = 2018-11-03]{logb}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |logb(| \meta{fpexpr} |)| \}
-% \end{syntax}
-% Determines the exponent of the \meta{fpexpr}, namely the floor of
-% the base-$10$ logarithm of its absolute value. \enquote{Division by
-% zero} occurs when evaluating $\operatorname{logb}(\pm 0) = -\infty$.
-% Other special values are $\operatorname{logb}(\pm\infty)=+\infty$
-% and $\operatorname{logb}(\nan{})=\nan{}$. If the operand is a tuple
-% or is \nan{}, then \enquote{invalid operation} occurs and the result
-% is \nan{}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-11-03]{\fp_sign:n}
-% \begin{syntax}
-% \cs{fp_sign:n} \Arg{fpexpr}
-% \end{syntax}
-% Evaluates the \meta{fpexpr} and leaves its sign in the input stream
-% using \cs{fp_eval:n} |{sign(|\meta{result}|)}|: $+1$ for positive
-% numbers and for $+\infty$, $-1$ for negative numbers and for
-% $-\infty$, $\pm 0$ for $\pm 0$. If the operand is a tuple or is
-% \nan{}, then \enquote{invalid operation} occurs and the result
-% is~$0$.
-% \end{function}
-%
% \begin{function}[pTF, added = 2019-08-25]{\fp_if_nan:n}
% \begin{syntax}
% \cs{fp_if_nan:n} \Arg{fpexpr}
@@ -255,112 +214,8 @@
% a tuple containing \nan{}.
% \end{function}
%
-% \section{Additions to \pkg{l3fparray}}
-%
-% \begin{function}[added = 2018-05-05]{\fparray_new:Nn}
-% \begin{syntax}
-% \cs{fparray_new:Nn} \meta{fparray~var} \Arg{size}
-% \end{syntax}
-% Evaluates the integer expression \meta{size} and allocates an
-% \meta{floating point array variable} with that number of (zero)
-% entries. The variable name should start with |\g_| because
-% assignments are always global.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N}
-% \begin{syntax}
-% \cs{fparray_count:N} \meta{fparray~var}
-% \end{syntax}
-% Expands to the number of entries in the \meta{floating point array
-% variable}. This is performed in constant time.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-05]{\fparray_gset:Nnn}
-% \begin{syntax}
-% \cs{fparray_gset:Nnn} \meta{fparray~var} \Arg{position} \Arg{value}
-% \end{syntax}
-% Stores the result of evaluating the floating point expression
-% \meta{value} into the \meta{floating point array variable} at the
-% (integer expression) \meta{position}. If the \meta{position} is not
-% between $1$ and the \cs{fparray_count:N}, an error occurs.
-% Assignments are always global.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-05]{\fparray_gzero:N}
-% \begin{syntax}
-% \cs{fparray_gzero:N} \meta{fparray~var}
-% \end{syntax}
-% Sets all entries of the \meta{floating point array variable} to
-% $+0$. Assignments are always global.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-05-05]
-% {\fparray_item:Nn, \fparray_item_to_tl:Nn}
-% \begin{syntax}
-% \cs{fparray_item:Nn} \meta{fparray~var} \Arg{position}
-% \end{syntax}
-% Applies \cs{fp_use:N} or \cs{fp_to_tl:N} (respectively) to the
-% floating point entry stored at the (integer expression)
-% \meta{position} in the \meta{floating point array variable}. If the
-% \meta{position} is not between $1$ and the \cs{fparray_count:N}, an
-% error occurs.
-% \end{function}
-%
% \section{Additions to \pkg{l3file}}
%
-% \begin{function}[added = 2019-05-13, TF]{\file_compare_timestamp:nNn}
-% \begin{syntax}
-% \cs{file_compare_timestamp:nNn} \Arg{file-1} \meta{comparator} \Arg{file-2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the file stamps on the two \meta{files} as indicated by
-% the \meta{comparator}, and inserts either the \meta{true code}
-% or \meta{false case} as required. A file which is not found
-% is treated as older than any file which is found.This allows for
-% example the construct
-% \begin{verbatim}
-% \file_compare_timestamp:nNnT { source-file } > { derived-file }
-% {
-% % Code to regenerate derived file
-% }
-% \end{verbatim}
-% to work when the derived file is entirely absent. The timestamp
-% of two absent files is regarded as different.
-% \end{function}
-%
-% \begin{function}[added = 2019-01-13]{\ior_map_variable:NNn}
-% \begin{syntax}
-% \cs{ior_map_variable:NNn} \meta{stream} \meta{tl~var} \Arg{code}
-% \end{syntax}
-% For each set of \meta{lines} obtained by calling \cs{ior_get:NN}
-% until reaching the end of the file, stores the \meta{lines} in the
-% \meta{tl~var} then applies the \meta{code}. The \meta{code} will
-% usually make use of the \meta{variable}, but this is not enforced.
-% The assignments to the \meta{variable} are local.
-% Its value after the loop is the last set of \meta{lines}, or its
-% original value if the \meta{stream} is empty. \TeX{} ignores
-% any trailing new-line marker from the file it reads.
-% This function is typically faster than \cs{ior_map_inline:Nn}.
-% \end{function}
-%
-% \begin{function}[added = 2019-01-13]{\ior_str_map_variable:NNn}
-% \begin{syntax}
-% \cs{ior_str_map_variable:NNn} \meta{stream} \meta{variable} \Arg{code}
-% \end{syntax}
-% For each \meta{line} in the \meta{stream}, stores the \meta{line} in
-% the \meta{variable} then applies the \meta{code}. The material is
-% read from the \meta{stream} as a series of tokens with category code
-% $12$ (other), with the exception of space characters which are given
-% category code $10$ (space). The \meta{code} will usually make use
-% of the \meta{variable}, but this is not enforced. The assignments
-% to the \meta{variable} are local. Its value after the loop is the
-% last \meta{line}, or its original value if the \meta{stream} is
-% empty. Note that \TeX{} removes trailing
-% space and tab characters (character codes 32 and 9) from every line
-% upon input. \TeX{} also ignores any trailing new-line marker from
-% the file it reads.
-% This function is typically faster than \cs{ior_str_map_inline:Nn}.
-% \end{function}
-%
% \begin{function}[added = 2018-12-29]{\iow_allow_break:}
% \begin{syntax}
% \cs{iow_allow_break:}
@@ -402,7 +257,7 @@
% If piped system calls are disabled an error is raised.
%
% For details of handling of the \meta{shell command}, see
-% \cs{sys_shell_get:nnN(TF)}.
+% \cs{sys_get_shell:nnN(TF)}.
% \end{function}
%
% \section{Additions to \pkg{l3flag}}
@@ -415,19 +270,13 @@
% locally.
% \end{function}
%
-% \section{Additions to \pkg{l3int}}
-%
-% \begin{function}[EXP, added = 2018-11-03]{\int_sign:n}
-% \begin{syntax}
-% \cs{int_sign:n} \Arg{intexpr}
-% \end{syntax}
-% Evaluates the \meta{integer expression} then leaves $1$ or $0$ or
-% $-1$ in the input stream according to the sign of the result.
-% \end{function}
-%
% \section{Additions to \pkg{l3intarray}}
%
-% \begin{function}[added = 2018-05-05]{\intarray_gset_rand:Nnn, \intarray_gset_rand:Nn}
+% \begin{function}[added = 2018-05-05]
+% {
+% \intarray_gset_rand:Nnn, \intarray_gset_rand:cnn,
+% \intarray_gset_rand:Nn, \intarray_gset_rand:cn
+% }
% \begin{syntax}
% \cs{intarray_gset_rand:Nnn} \meta{intarray~var} \Arg{minimum} \Arg{maximum}
% \cs{intarray_gset_rand:Nn} \meta{intarray~var} \Arg{maximum}
@@ -446,16 +295,6 @@
%
% \subsection{Working with contents of integer arrays}
%
-% \begin{function}[added = 2018-05-04, rEXP]{\intarray_const_from_clist:Nn}
-% \begin{syntax}
-% \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{intexpr clist}
-% \end{syntax}
-% Creates a new constant \meta{integer array variable} or raises an
-% error if the name is already taken. The \meta{integer array
-% variable} is set (globally) to contain as its items the results of
-% evaluating each \meta{integer expression} in the \meta{comma list}.
-% \end{function}
-%
% \begin{function}[added = 2018-05-04, rEXP]{\intarray_to_clist:N}
% \begin{syntax}
% \cs{intarray_to_clist:N} \meta{intarray~var}
@@ -466,15 +305,6 @@
% result has one fewer comma than the number of items.
% \end{function}
%
-% \begin{function}[added = 2018-05-04]{\intarray_show:N, \intarray_log:N}
-% \begin{syntax}
-% \cs{intarray_show:N} \meta{intarray~var}
-% \cs{intarray_log:N} \meta{intarray~var}
-% \end{syntax}
-% Displays the items in the \meta{integer array variable} in the
-% terminal or writes them in the log file.
-% \end{function}
-%
% \section{Additions to \pkg{l3msg}}
%
% In very rare cases it may be necessary to produce errors in an
@@ -566,15 +396,6 @@
%
% \section{Additions to \pkg{l3prg}}
%
-% \begin{function}[added = 2017-11-28]{\bool_const:Nn, \bool_const:cn}
-% \begin{syntax}
-% \cs{bool_const:Nn} \meta{boolean} \Arg{boolexpr}
-% \end{syntax}
-% Creates a new constant \meta{boolean} or raises an error if the name
-% is already taken. The value of the \meta{boolean} is set globally to
-% the result of evaluating the \meta{boolexpr}.
-% \end{function}
-%
% \begin{function}[added = 2018-05-10]
% {
% \bool_set_inverse:N , \bool_set_inverse:c ,
@@ -606,37 +427,6 @@
% \end{texnote}
% \end{function}
%
-% \begin{function}[added = 2017-11-28, updated = 2019-08-25]
-% {
-% \prop_set_from_keyval:Nn, \prop_set_from_keyval:cn,
-% \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn,
-% }
-% \begin{syntax}
-% \cs{prop_set_from_keyval:Nn} \meta{prop~var}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
-% \end{syntax}
-% Sets \meta{prop~var} to contain key--value pairs given in the second
-% argument. If duplicate keys appear only one of the values is kept.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-28, updated = 2019-08-25]
-% {\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn}
-% \begin{syntax}
-% \cs{prop_const_from_keyval:Nn} \meta{prop~var}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
-% \end{syntax}
-% Creates a new constant \meta{prop~var} or raises an error if the
-% name is already taken. The \meta{prop~var} is set globally to
-% contain key--value pairs given in the second argument.
-% If duplicate keys appear only one of the values is kept.
-% \end{function}
-%
% \section{Additions to \pkg{l3seq}}
%
% \begin{function}[rEXP]
@@ -690,16 +480,6 @@
% \end{texnote}
% \end{function}
%
-% \begin{function}[added = 2017-11-28]
-% {\seq_const_from_clist:Nn, \seq_const_from_clist:cn}
-% \begin{syntax}
-% \cs{seq_const_from_clist:Nn} \meta{seq~var} \Arg{comma-list}
-% \end{syntax}
-% Creates a new constant \meta{seq~var} or raises an error if the name
-% is already taken. The \meta{seq~var} is set globally to contain the
-% items in the \meta{comma list}.
-% \end{function}
-%
% \begin{function}[added = 2018-04-06]
% {\seq_set_from_function:NnN, \seq_gset_from_function:NnN}
% \begin{syntax}
@@ -738,23 +518,6 @@
% mappings.
% \end{function}
%
-% \begin{function}[added = 2018-04-29]{\seq_shuffle:N, \seq_gshuffle:N}
-% \begin{syntax}
-% \cs{seq_shuffle:N} \meta{seq~var}
-% \end{syntax}
-% Sets the \meta{seq~var} to the result of placing the items of the
-% \meta{seq~var} in a random order. Each item is (roughly) as likely
-% to end up in any given position.
-% \begin{texnote}
-% For sequences with more than $13$ items or so, only a small
-% proportion of all possible permutations can be reached, because
-% the random seed \cs{sys_rand_seed:} only has $28$-bits. The use
-% of \tn{toks} internally means that sequences with more than
-% $32767$ or $65535$ items (depending on the engine) cannot be
-% shuffled.
-% \end{texnote}
-% \end{function}
-%
% \begin{function}[added = 2018-05-03]{\seq_indexed_map_function:NN}
% \begin{syntax}
% \cs{seq_indexed_map_function:NN} \meta{seq~var} \meta{function}
@@ -775,37 +538,8 @@
% and so on) as~|#1| and the \meta{item} as~|#2|.
% \end{function}
%
-% \section{Additions to \pkg{l3skip}}
-%
-% \begin{function}[EXP, added = 2018-11-03]{\dim_sign:n}
-% \begin{syntax}
-% \cs{dim_sign:n} \Arg{dimexpr}
-% \end{syntax}
-% Evaluates the \meta{dimexpr} then leaves $1$ or $0$ or $-1$ in the
-% input stream according to the sign of the result.
-% \end{function}
-%
% \section{Additions to \pkg{l3sys}}
%
-% \begin{function}[noTF, added = 2019-01-16, updated = 2019-02-16]
-% {\sys_shell_get:nnN}
-% \begin{syntax}
-% \cs{sys_shell_get:nnN} \Arg{shell~command} \Arg{setup} \meta{tl~var}
-% \cs{sys_shell_get:nnNTF} \Arg{shell~command} \Arg{setup} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Defines \meta{tl} to the text returned by the \meta{shell command}.
-% The \meta{shell command} is converted to a string using
-% \cs{tl_to_str:n}. Category codes may need to be set appropriately
-% via the \meta{setup} argument, which is run just before running the
-% \meta{shell command} (in a group).
-% If shell escape is disabled, the \meta{tl~var} will be set to
-% \cs{q_no_value} in the non-branching version.
-% Note that quote characters (|"|) \emph{cannot} be used inside the
-% \meta{shell command}. The \cs{sys_shell_get:nnNTF} conditional
-% returns \texttt{true} if the shell is available and no quote is
-% detected, and \texttt{false} otherwise.
-% \end{function}
-%
% \begin{variable}[added = 2018-05-02]{\c_sys_engine_version_str}
% The version string of the current engine, in the same form as
% given in the banner issued when running a job. For \pdfTeX{}
@@ -836,106 +570,6 @@
% this is the case in \pdfTeX{}, \LuaTeX{}, \pTeX{} and \upTeX{}.
% \end{function}
%
-% \begin{function}[added = 2017-05-27, EXP]{\sys_rand_seed:}
-% \begin{syntax}
-% \cs{sys_rand_seed:}
-% \end{syntax}
-% Expands to the current value of the engine's random seed, a
-% non-negative integer. In engines without random number support this
-% expands to $0$.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27]{\sys_gset_rand_seed:n}
-% \begin{syntax}
-% \cs{sys_gset_rand_seed:n} \Arg{intexpr}
-% \end{syntax}
-% Globally sets the seed for the engine's pseudo-random number
-% generator to the \meta{integer expression}. This random seed
-% affects all \cs[no-index]{\ldots{}_rand} functions (such as
-% \cs{int_rand:nn} or \cs{clist_rand_item:n}) as well as other
-% packages relying on the engine's random number generator. In
-% engines without random number support this produces an error.
-% \begin{texnote}
-% While a $32$-bit (signed) integer can be given as a seed, only the
-% absolute value is used and any number beyond $2^{28}$ is divided
-% by an appropriate power of~$2$. We recommend using an integer in
-% $[0,2^{28}-1]$.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2018-07-27, EXP, pTF]
-% {
-% \sys_if_platform_unix:,
-% \sys_if_platform_windows:
-% }
-% \begin{syntax}
-% \cs{sys_if_platform_unix:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Conditionals which allow platform-specific code to be used. The names
-% follow the \Lua{} |os.type()| function, \emph{i.e.}~all Unix-like systems
-% are |unix| (including Linux and MacOS).
-% \end{function}
-%
-% \begin{variable}[added = 2018-07-27]{\c_sys_platform_str}
-% The current platform given as a lower case string: one of
-% |unix|, |windows| or |unknown|.
-% \end{variable}
-%
-% \begin{variable}[added = 2017-05-27]{\c_sys_shell_escape_int}
-% This variable exposes the internal triple of the shell escape
-% status. The possible values are
-% \begin{description}
-% \item[0] Shell escape is disabled
-% \item[1] Unrestricted shell escape is enabled
-% \item[2] Restricted shell escape is enabled
-% \end{description}
-% \end{variable}
-%
-% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell:}
-% \begin{syntax}
-% \cs{sys_if_shell_p:}
-% \cs{sys_if_shell:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Performs a check for whether shell escape is enabled. This
-% returns true if either of restricted or unrestricted shell escape
-% is enabled.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell_unrestricted:}
-% \begin{syntax}
-% \cs{sys_if_shell_unrestricted_p:}
-% \cs{sys_if_shell_unrestricted:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Performs a check for whether \emph{unrestricted} shell escape is
-% enabled.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell_restricted:}
-% \begin{syntax}
-% \cs{sys_if_shell_restricted_p:}
-% \cs{sys_if_shell_restricted:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Performs a check for whether \emph{restricted} shell escape is
-% enabled. This returns false if unrestricted shell escape is
-% enabled. Unrestricted shell escape is not considered a superset
-% of restricted shell escape in this case. To find whether any
-% shell escape is enabled use \cs{sys_if_shell:}.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27]{\sys_shell_now:n, \sys_shell_now:x}
-% \begin{syntax}
-% \cs{sys_shell_now:n} \Arg{tokens}
-% \end{syntax}
-% Execute \meta{tokens} through shell escape immediately.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27]{\sys_shell_shipout:n, \sys_shell_shipout:x}
-% \begin{syntax}
-% \cs{sys_shell_shipout:n} \Arg{tokens}
-% \end{syntax}
-% Execute \meta{tokens} through shell escape at shipout.
-% \end{function}
-%
% \section{Additions to \pkg{l3tl}}
%
% \begin{function}[EXP, added = 2014-06-30, updated = 2016-01-12]
@@ -1335,28 +969,6 @@
%<*initex|package>
% \end{macrocode}
%
-% \subsection{Additions to \pkg{l3basics}}
-%
-% \begin{macro}{\mode_leave_vertical:}
-% The approach here is different to that used by \LaTeXe{} or plain \TeX{},
-% which unbox a void box to force horizontal mode. That inserts the
-% \tn{everypar} tokens \emph{before} the re-inserted unboxing tokens. The
-% approach here uses either the \tn{quitvmode} primitive or the equivalent
-% protected macro. In vertical mode, the \tn{indent} primitive is inserted:
-% this will switch to horizontal mode and insert \tn{everypar} tokens and
-% nothing else. Unlike the \LaTeXe{} version, the availability of \eTeX{}
-% means using a mode test can be done at for example the start of an
-% \tn{halign}.
-% \begin{macrocode}
-\cs_new_protected:Npn \mode_leave_vertical:
- {
- \if_mode_vertical:
- \exp_after:wN \tex_indent:D
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
% \subsection{Additions to \pkg{l3box}}
%
% \begin{macrocode}
@@ -1519,22 +1131,6 @@
% \end{macro}
% \end{macro}
%
-% \subsection{Additions to \pkg{l3fp-convert}}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \begin{macro}{\fp_sign:n}
-% Trivial but useful. See the implementation of \cs{fp_add:Nn} for an
-% explanation of why to use \cs{@@_parse:n}, namely, for better error
-% reporting.
-% \begin{macrocode}
-\cs_new:Npn \fp_sign:n #1
- { \fp_to_decimal:n { sign \@@_parse:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
% \subsection{Additions to \pkg{l3flag}}
%
% \begin{macrocode}
@@ -1547,7 +1143,6 @@
% it if the flag is zero in case the \enquote{trap} made customizable
% in the future.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \@@_chk_exist:n {#1} } { }
\cs_new:Npn \flag_raise_if_clear:n #1
{
\if_cs_exist:w flag~#1~0 \cs_end:
@@ -1558,39 +1153,6 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Additions to \pkg{l3int}}
-%
-% \begin{macrocode}
-%<@@=int>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\int_sign:n, \@@_sign:Nw}
-% See \cs{int_abs:n}. Evaluate the expression once (and when
-% debugging is enabled, check that the expression is well-formed),
-% then test the first character to determine the sign. This is
-% wrapped in \cs{int_value:w} \ldots{} \cs{exp_stop_f:} to ensure a
-% fixed number of expansions and to avoid dealing with closing the
-% conditionals.
-% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_sign:n } }
-\cs_new:Npn \int_sign:n #1
- {
- \int_value:w \exp_after:wN \@@_sign:Nw
- \int_value:w \@@_eval:w #1 \@@_eval_end: ;
- \exp_stop_f:
- }
-\cs_new:Npn \@@_sign:Nw #1#2 ;
- {
- \if_meaning:w 0 #1
- 0
- \else:
- \if_meaning:w - #1 - \fi: 1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
% \subsection{Additions to \pkg{l3msg}}
%
% \begin{macrocode}
@@ -1701,19 +1263,6 @@
%
% \subsection{Additions to \pkg{l3prg}}
%
-% \begin{macro}[added = 2017-11-28]{\bool_const:Nn, \bool_const:cn}
-% A merger between \cs{tl_const:Nn} and \cs{bool_set:Nn}.
-% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN c #1 } { }
-\cs_new_protected:Npn \bool_const:Nn #1#2
- {
- \__kernel_chk_if_free_cs:N #1
- \tex_global:D \tex_chardef:D #1 = \bool_if_p:n {#2}
- }
-\cs_generate_variant:Nn \bool_const:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}[added = 2018-05-10]
% {\bool_set_inverse:N, \bool_set_inverse:c, \bool_gset_inverse:N, \bool_gset_inverse:c}
% Set to \texttt{false} or \texttt{true} locally or globally.
@@ -1888,85 +1437,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\seq_const_from_clist:Nn, \seq_const_from_clist:cn}
-% Almost identical to \cs{seq_set_from_clist:Nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_const_from_clist:Nn #1#2
- {
- \tl_const:Nx #1
- { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n }
- }
-\cs_generate_variant:Nn \seq_const_from_clist:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\seq_shuffle:N, \seq_gshuffle:N, \@@_shuffle:NN, \@@_shuffle_item:n}
-% \begin{variable}{\g_@@_internal_seq, \l_@@_internal_a_int, \l_@@_internal_b_int}
-% We apply the Fisher–Yates shuffle, storing items in \tn{toks}
-% registers. We use the primitive \cs{tex_uniformdeviate:D} for
-% speed reasons. Its non-uniformity is of order its argument divided
-% by $2^{28}$, not too bad for small lists. For sequences with more
-% than $13$ elements there are more possible permutations than
-% possible seeds ($13!>2^{28}$) so the question of uniformity is
-% somewhat moot.
-% \begin{macrocode}
-\cs_if_exist:NTF \tex_uniformdeviate:D
- {
- \int_new:N \l_@@_internal_a_int
- \int_new:N \l_@@_internal_b_int
- \seq_new:N \g_@@_internal_seq
- \cs_new_protected:Npn \seq_shuffle:N { \@@_shuffle:NN \seq_set_eq:NN }
- \cs_new_protected:Npn \seq_gshuffle:N { \@@_shuffle:NN \seq_gset_eq:NN }
- \cs_new_protected:Npn \@@_shuffle:NN #1#2
- {
- \int_compare:nNnTF { \seq_count:N #2 } > \c_max_register_int
- {
- \__kernel_msg_error:nnx { kernel } { shuffle-too-large }
- { \token_to_str:N #2 }
- }
- {
- \group_begin:
- \cs_set_eq:NN \@@_item:n \@@_shuffle_item:n
- \int_zero:N \l_@@_internal_a_int
- #2
- \seq_gset_from_inline_x:Nnn \g_@@_internal_seq
- { \int_step_function:nN { \l_@@_internal_a_int } }
- { \tex_the:D \tex_toks:D ##1 }
- \group_end:
- #1 #2 \g_@@_internal_seq
- \seq_gclear:N \g_@@_internal_seq
- }
- }
- \cs_new_protected:Npn \@@_shuffle_item:n
- {
- \int_incr:N \l_@@_internal_a_int
- \int_set:Nn \l_@@_internal_b_int
- { 1 + \tex_uniformdeviate:D \l_@@_internal_a_int }
- \tex_toks:D \l_@@_internal_a_int
- = \tex_toks:D \l_@@_internal_b_int
- \tex_toks:D \l_@@_internal_b_int
- }
- \__kernel_msg_new:nnnn { kernel } { shuffle-too-large }
- { The~sequence~#1~is~too~long~to~be~shuffled~by~TeX. }
- {
- TeX~has~ \int_eval:n { \c_max_register_int + 1 } ~
- toks~registers:~this~only~allows~to~shuffle~up~to~
- \int_use:N \c_max_register_int \ items.~
- The~list~will~not~be~shuffled.
- }
- }
- {
- \cs_new_protected:Npn \seq_shuffle:N #1
- {
- \__kernel_msg_error:nnn { kernel } { fp-no-random }
- { \seq_shuffle:N #1 }
- }
- \cs_new_eq:NN \seq_gshuffle:N \seq_shuffle:N
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
% \begin{macro}
% {
% \seq_indexed_map_function:NN, \seq_indexed_map_inline:Nn,
@@ -2011,42 +1481,6 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Additions to \pkg{l3skip}}
-%
-% \begin{macrocode}
-%<@@=dim>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\dim_sign:n, \@@_sign:Nw}
-% See \cs{dim_abs:n}. Contrarily to \cs{int_sign:n} the case of a
-% zero dimension cannot be distinguished from a positive dimension by
-% looking only at the first character, since |0.2pt| and |0pt| start
-% the same way. We need explicit comparisons. We start by
-% distinguishing the most common case of a positive dimension.
-% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \dim_sign:n } }
-\cs_new:Npn \dim_sign:n #1
- {
- \int_value:w \exp_after:wN \@@_sign:Nw
- \dim_use:N \@@_eval:w #1 \@@_eval_end: ;
- \exp_stop_f:
- }
-\cs_new:Npn \@@_sign:Nw #1#2 ;
- {
- \if_dim:w #1#2 > \c_zero_dim
- 1
- \else:
- \if_meaning:w - #1
- -1
- \else:
- 0
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
% \subsection{Additions to \pkg{l3sys}}
%
% \begin{macrocode}
@@ -2073,6 +1507,7 @@
{
p
\int_use:N \tex_ptexversion:D
+ .
\int_use:N \tex_ptexminorversion:D
\tex_ptexrevision:D
-
@@ -2091,6 +1526,7 @@
{
p
\int_use:N \tex_ptexversion:D
+ .
\int_use:N \tex_ptexminorversion:D
\tex_ptexrevision:D
-
@@ -2111,327 +1547,9 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}[EXP]{\sys_rand_seed:}
-% Unpack the primitive. When random numbers are not available, we
-% return zero after an error (and incidentally make sure the number of
-% expansions needed is the same as with random numbers available).
-% \begin{macrocode}
-\sys_if_rand_exist:TF
- { \cs_new:Npn \sys_rand_seed: { \tex_the:D \tex_randomseed:D } }
- {
- \cs_new:Npn \sys_rand_seed:
- {
- \int_value:w
- \__kernel_msg_expandable_error:nnn { kernel } { fp-no-random }
- { \sys_rand_seed: }
- \c_zero_int
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\sys_gset_rand_seed:n}
-% The primitive always assigns the seed globally.
-% \begin{macrocode}
-\sys_if_rand_exist:TF
- {
- \cs_new_protected:Npn \sys_gset_rand_seed:n #1
- { \tex_setrandomseed:D \int_eval:n {#1} \exp_stop_f: }
- }
- {
- \cs_new_protected:Npn \sys_gset_rand_seed:n #1
- {
- \__kernel_msg_error:nnn { kernel } { fp-no-random }
- { \sys_gset_rand_seed:n {#1} }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\c_sys_shell_escape_int}
-% Expose the engine's shell escape status to the user.
-% \begin{macrocode}
-\int_const:Nn \c_sys_shell_escape_int
- {
- \sys_if_engine_luatex:TF
- {
- \tex_directlua:D
- { tex.sprint(status.shell_escape~or~os.execute()) }
- }
- {
- \tex_shellescape:D
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_marker_tl}
-% The same idea as the marker for rescanning token lists.
-% \begin{macrocode}
-\tl_const:Nx \c_@@_marker_tl { : \token_to_str:N : }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[TF]{\sys_shell_get:nnN}
-% \begin{macro}{\sys_shell_get:nnN,\@@_get:nnN,\@@_get_do:Nw}
-% Setting using a shell is at this level just a slightly specialised file
-% operation, with an additional check for quotes, as these are not supported.
-% \begin{macrocode}
-\cs_new_protected:Npn \sys_shell_get:nnN #1#2#3
- {
- \sys_shell_get:nnNF {#1} {#2} #3
- { \tl_set:Nn #3 { \q_no_value } }
- }
-\prg_new_protected_conditional:Npnn \sys_shell_get:nnN #1#2#3 { T , F , TF }
- {
- \sys_if_shell:TF
- { \exp_args:No \@@_get:nnN { \tl_to_str:n {#1} } {#2} #3 }
- { \prg_return_false: }
- }
-\cs_new_protected:Npn \@@_get:nnN #1#2#3
- {
- \tl_if_in:nnTF {#1} { " }
- {
- \__kernel_msg_error:nnx
- { kernel } { quote-in-shell } {#1}
- \prg_return_false:
- }
- {
- \group_begin:
- \if_false: { \fi:
- \int_set_eq:NN \tex_tracingnesting:D \c_zero_int
- \exp_args:No \tex_everyeof:D { \c_@@_marker_tl }
- #2 \scan_stop:
- \exp_after:wN \@@_get_do:Nw
- \exp_after:wN #3
- \exp_after:wN \prg_do_nothing:
- \tex_input:D | "#1" \scan_stop:
- \if_false: } \fi:
- \prg_return_true:
- }
- }
-\exp_args:Nno \use:nn
- { \cs_new_protected:Npn \@@_get_do:Nw #1#2 }
- { \c_@@_marker_tl }
- {
- \group_end:
- \tl_set:No #1 {#2}
- }
-\__kernel_msg_new:nnnn { kernel } { quote-in-shell }
- { Quotes~in~shell~command~'#1'. }
- { Shell~commands~cannot~contain~quotes~("). }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\c_sys_platform_str}
-% Detecting the platform on \LuaTeX{} is easy: for other engines, we use
-% the fact that the two common cases have special null files. It is possible
-% to probe further (see package \pkg{platform}), but that requires shell
-% escape and seems unlikely to be useful.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
- \str_const:Nx \c_sys_platform_str
- { \lua_now:n { tex.print(os.type) } }
- }
- {
- \file_if_exist:nTF { nul: }
- {
- \file_if_exist:nF { /dev/null }
- { \str_const:Nn \c_sys_platform_str { windows } }
- }
- {
- \file_if_exist:nT { /dev/null }
- { \str_const:Nn \c_sys_platform_str { unix } }
- }
- }
-\cs_if_exist:NF \c_sys_platform_str
- { \str_const:Nn \c_sys_platform_str { unknown } }
-% \end{macrocode}
-% \end{variable}
-% \begin{macro}[pTF]{\sys_if_platform_unix:}
-% \begin{macro}[pTF]{\sys_if_platform_windows:}
-% We can now set up the tests.
-% \begin{macrocode}
-\clist_map_inline:nn { unix , windows }
- {
- \@@_const:nn { sys_if_platform_ #1 }
- { \str_if_eq_p:Vn \c_sys_platform_str { #1 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP, pTF]{\sys_if_shell:, \sys_if_shell_unrestricted:, \sys_if_shell_restricted:}
-% Performs a check for whether shell escape is enabled. The first set
-% of functions returns true if either of restricted or unrestricted
-% shell escape is enabled, while the other two sets of functions
-% return true in only one of these two cases.
-% \begin{macrocode}
-\@@_const:nn { sys_if_shell }
- { \int_compare_p:nNn \c_sys_shell_escape_int > 0 }
-\@@_const:nn { sys_if_shell_unrestricted }
- { \int_compare_p:nNn \c_sys_shell_escape_int = 1 }
-\@@_const:nn { sys_if_shell_restricted }
- { \int_compare_p:nNn \c_sys_shell_escape_int = 2 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_shell_stream_int}
-% This is not needed for \LuaTeX{}: shell escape there isn't done using
-% a \TeX{} interface.
-% \begin{macrocode}
-\sys_if_engine_luatex:F
- { \int_const:Nn \c_@@_shell_stream_int { 18 } }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\sys_shell_now:n}
-% Execute commands through shell escape immediately.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \sys_shell_now:n #1
- {
- \lua_now:e
- { os.execute(" \lua_escape:e { \tl_to_str:n {#1} } ") }
- }
- }
- {
- \cs_new_protected:Npn \sys_shell_now:n #1
- { \iow_now:Nn \c_@@_shell_stream_int {#1} }
- }
-\cs_generate_variant:Nn \sys_shell_now:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\sys_shell_shipout:n}
-% Execute commands through shell escape at shipout.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \sys_shell_shipout:n #1
- {
- \lua_shipout_e:n
- { os.execute(" \lua_escape:e { \tl_to_str:n {#1} } ") }
- }
- }
- {
- \cs_new_protected:Npn \sys_shell_shipout:n #1
- { \iow_shipout:Nn \c_@@_shell_stream_int {#1} }
- }
-\cs_generate_variant:Nn \sys_shell_shipout:n { x }
-% \end{macrocode}
-% \end{macro}
-%
% \subsection{Additions to \pkg{l3file}}
%
% \begin{macrocode}
-%<@@=file>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\@@_str_cmp:nn}
-% \begin{macro}[EXP]{\@@_str_escape:n}
-% As we are doing a fixed-length \enquote{big} integer comparison, it
-% is easiest to use the low-level behavior of string comparisons.
-% \begin{macrocode}
-\cs_new:Npn \@@_str_cmp:nn #1#2 { \tex_strcmp:D {#1} {#2} }
-\sys_if_engine_luatex:T
- {
- \cs_set:Npn \@@_str_cmp:nn #1#2
- {
- \lua_now:e
- {
- l3kernel.strcmp
- (
- " \@@_str_escape:n {#1}",
- " \@@_str_escape:n {#2}"
- )
- }
- }
- \cs_new:Npn \@@_str_escape:n #1
- {
- \lua_escape:e
- { \__kernel_tl_to_str:w \use:e { {#1} } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_first_tl, \l_@@_second_tl}
-% \begin{macrocode}
-\tl_new:N \l_@@_first_tl
-\tl_new:N \l_@@_second_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[TF]{\file_compare_timestamp:nNn}
-% \begin{macro}[EXP]{\@@_timestamp:n}
-% Comparison of file date can be done by using the low-level nature of the
-% string comparison functions. This could be expandable but that would
-% skip any file look-up: to stay consistent we retain that at the cost of
-% expansion.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \file_compare_timestamp:nNn #1#2#3
- { T , F , TF }
- {
- \group_begin:
- \file_get_full_name:nNTF {#1} \l_@@_first_tl
- {
- \file_get_full_name:nNTF {#3} \l_@@_second_tl
- {
- \if_int_compare:w
- \@@_str_cmp:nn
- { \@@_timestamp:n \exp_after:wN { \l_@@_first_tl } }
- { \@@_timestamp:n \exp_after:wN { \l_@@_second_tl } }
- #2 0 \exp_stop_f:
- \group_end:
- \prg_return_true:
- \else:
- \group_end:
- \prg_return_false:
- \fi:
- }
- {
- \group_end:
- \if_charcode:w #2 >
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- }
- {
- \group_end:
- \if_charcode:w #2 <
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- }
-\sys_if_engine_luatex:TF
- {
- \cs_new:Npn \@@_timestamp:n #1
- {
- \lua_now:e
- { l3kernel.filemoddate ( " \lua_escape:e {#1} " ) }
- }
- }
- { \cs_new_eq:NN \@@_timestamp:n \tex_filemoddate:D }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
%<@@=ior>
% \end{macrocode}
%
@@ -2760,14 +1878,6 @@
%<@@=tl>
% \end{macrocode}
%
-% \begin{macro}[EXP, documented-as=\tl_if_head_eq_catcode:nNTF]
-% {\tl_if_head_eq_catcode:oNTF}
-% Extra variants.
-% \begin{macrocode}
-\cs_generate_variant:Nn \tl_if_head_eq_catcode:nNTF { o }
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}[EXP]{\tl_lower_case:n, \tl_upper_case:n, \tl_mixed_case:n}
% \begin{macro}[EXP]{\tl_lower_case:nn, \tl_upper_case:nn, \tl_mixed_case:nn}
% The user level functions here are all wrappers around the internal
@@ -4112,10 +3222,8 @@
% definition does not seem useful so we just do |#3| |#1| |{}| to
% clear it locally or globally as appropriate.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_build_begin:N #1
{ \@@_build_begin:NN \cs_set_nopar:Npx #1 }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_build_gbegin:N #1
{ \@@_build_begin:NN \cs_gset_nopar:Npx #1 }
\cs_new_protected:Npn \@@_build_begin:NN #1#2
@@ -4170,25 +3278,21 @@
% implies that the assignment does not simply set the token list to an
% |x|-expansion of the second argument.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_build_put_right:Nn #1#2
{
\cs_set_nopar:Npx #1
{ \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_build_put_right:Nx #1#2
{
\cs_set_nopar:Npx #1
{ \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 } #2 }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_build_gput_right:Nn #1#2
{
\cs_gset_nopar:Npx #1
{ \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_build_gput_right:Nx #1#2
{
\cs_gset_nopar:Npx #1
@@ -4227,11 +3331,9 @@
% add the \meta{right} material after the \Arg{left} in the
% |x|-expanding assignment.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_build_put_left:Nn #1
{ \@@_build_put_left:NNn \cs_set_nopar:Npx #1 }
\cs_generate_variant:Nn \tl_build_put_left:Nn { Nx }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_build_gput_left:Nn #1
{ \@@_build_put_left:NNn \cs_gset_nopar:Npx #1 }
\cs_generate_variant:Nn \tl_build_gput_left:Nn { Nx }
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index f2664fa77f..3b3b8041ab 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index 6c084d19d9..92ee217586 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color-base.dtx b/macros/latex/contrib/l3kernel/l3color-base.dtx
index 93dae47797..3b58b7e280 100644
--- a/macros/latex/contrib/l3kernel/l3color-base.dtx
+++ b/macros/latex/contrib/l3kernel/l3color-base.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
new file mode 100644
index 0000000000..55b16ec0e2
--- /dev/null
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -0,0 +1,1447 @@
+% \iffalse meta-comment
+%
+%% File: l3debug.dtx
+%
+% Copyright (C) 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
+%
+% https://www.latex-project.org/lppl.txt
+%
+% This file is part of the "l3kernel bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+% https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver>
+\documentclass[full,kernel]{l3doc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+% The \textsf{l3debug} package\\ Debugging support^^A
+% }
+%
+% \author{^^A
+% The \LaTeX3 Project\thanks
+% {^^A
+% E-mail:
+% \href{mailto:latex-team@latex-project.org}
+% {latex-team@latex-project.org}^^A
+% }^^A
+% }
+%
+% \date{Released 2019-09-28}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% \begin{function}{\__kernel_chk_var_local:N, \__kernel_chk_var_global:N}
+% \begin{syntax}
+% \cs{__kernel_chk_var_local:N} \meta{var}
+% \cs{__kernel_chk_var_global:N} \meta{var}
+% \end{syntax}
+% Applies \cs{__kernel_chk_var_exist:N} \meta{var} as well as
+% \cs{__kernel_chk_var_scope:NN} \meta{scope} \meta{var}, where
+% \meta{scope} is |l| or~|g|.
+% \end{function}
+%
+% \begin{function}{\__kernel_chk_var_scope:NN}
+% \begin{syntax}
+% \cs{__kernel_chk_var_scope:NN} \meta{scope} \meta{var}
+% \end{syntax}
+% Checks the \meta{var} has the correct \meta{scope}, and if not
+% raises a kernel-level error. This function is only created if
+% debugging is enabled. The \meta{scope} is a single letter |l|, |g|,
+% |c| denoting local variables, global variables, or constants. More
+% precisely, if the variable name starts with a letter and an
+% underscore (normal \pkg{expl3} convention) the function checks that
+% this single letter matches the \meta{scope}. Otherwise the function
+% cannot know the scope \meta{var} the first time: instead, it defines
+% |\__debug_chk_/|\meta{var name} to store that information for the
+% next call. Thus, if a given \meta{var} is subject to assignments of
+% different scopes a kernel error will result.
+% \end{function}
+%
+% \begin{function}
+% {
+% \__kernel_chk_cs_exist:N,
+% \__kernel_chk_cs_exist:c,
+% \__kernel_chk_var_exist:N
+% }
+% \begin{syntax}
+% \cs{__kernel_chk_cs_exist:N} \meta{cs}
+% \cs{__kernel_chk_var_exist:N} \meta{var}
+% \end{syntax}
+% These functions are only created if debugging is enabled. They
+% check that their argument is defined according to the criteria for
+% \cs{cs_if_exist_p:N},
+% and if not raises a kernel-level error. Error messages are
+% different.
+% \end{function}
+%
+% \begin{function}[EXP]{\__kernel_chk_flag_exist:n}
+% \begin{syntax}
+% \cs{__kernel_chk_flag_exist:n} \Arg{flag}
+% \end{syntax}
+% This function is only created if debugging is enabled. It checks
+% that the \meta{flag} is defined according to the criterion for
+% \cs{flag_if_exist_p:n}, and if not raises a kernel-level error.
+% \end{function}
+%
+% \begin{function}{\__kernel_debug_log:x}
+% \begin{syntax}
+% \cs{__kernel_debug_log:x} \Arg{message text}
+% \end{syntax}
+% If the \texttt{log-functions} option is active, this function writes
+% the \meta{message text} to the log file using \cs{iow_log:x}.
+% Otherwise, the \meta{message text} is ignored using \cs{use_none:n}.
+% This function is only created if debugging is enabled.
+% \end{function}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3debug} Implementation}
+%
+% \begin{macrocode}
+%<*initex|package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=debug>
+% \end{macrocode}
+%
+% Standard file identification.
+% \begin{macrocode}
+\ProvidesExplFile{l3debug.def}{2019-04-06}{}{L3 Debugging support}
+% \end{macrocode}
+%
+% \begin{macro}{\debug_on:n, \debug_off:n, \@@_all_on:, \@@_all_off:}
+% \begin{macrocode}
+\cs_set_protected:Npn \debug_on:n #1
+ {
+ \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
+ {
+ \cs_if_exist_use:cF { @@_ ##1 _on: }
+ { \__kernel_msg_error:nnn { kernel } { debug } {##1} }
+ }
+ }
+\cs_set_protected:Npn \debug_off:n #1
+ {
+ \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
+ {
+ \cs_if_exist_use:cF { @@_ ##1 _off: }
+ { \__kernel_msg_error:nnn { kernel } { debug } {##1} }
+ }
+ }
+\cs_new_protected:Npn \@@_all_on:
+ {
+ \debug_on:n
+ {
+ check-declarations ,
+ check-expressions ,
+ deprecation ,
+ log-functions ,
+ }
+ }
+\cs_new_protected:Npn \@@_all_off:
+ {
+ \debug_off:n
+ {
+ check-declarations ,
+ check-expressions ,
+ deprecation ,
+ log-functions ,
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\debug_suspend:, \debug_resume:}
+% \begin{macro}{\@@_suspended:T}
+% \begin{macro}{\l_@@_suspended_tl}
+% Suspend and resume locally all debug-related errors and logging
+% except deprecation errors. The \cs{debug_suspend:} and \cs{debug_resume:}
+% pairs can be nested. We keep track of nesting in a token list
+% containing a number of periods. At first begin with the
+% \enquote{non-suspended} version of \cs{@@_suspended:T}.
+% \begin{macrocode}
+\tl_new:N \l_@@_suspended_tl { }
+\cs_set_protected:Npn \debug_suspend:
+ {
+ \tl_put_right:Nn \l_@@_suspended_tl { . }
+ \cs_set_eq:NN \@@_suspended:T \use:n
+ }
+\cs_set_protected:Npn \debug_resume:
+ {
+ \tl_set:Nx \l_@@_suspended_tl
+ { \tl_tail:N \l_@@_suspended_tl }
+ \tl_if_empty:NT \l_@@_suspended_tl
+ {
+ \cs_set_eq:NN \@@_suspended:T \use_none:n
+ }
+ }
+\cs_new_eq:NN \@@_suspended:T \use_none:n
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+% {\@@_check-declarations_on:, \@@_check-declarations_off:}
+% \begin{macro}
+% {
+% \__kernel_chk_var_exist:N,
+% \__kernel_chk_cs_exist:N,
+% \__kernel_chk_cs_exist:c
+% }
+% \begin{macro}[EXP]{\__kernel_chk_flag_exist:n}
+% \begin{macro}{\__kernel_chk_var_local:N, \__kernel_chk_var_global:N}
+% \begin{macro}{\__kernel_chk_var_scope:NN}
+% When debugging is enabled these two functions set up functions that
+% test their argument (when \texttt{check-declarations} is active)
+% \begin{itemize}
+% \item \cs{__kernel_chk_var_exist:N} and \cs{__kernel_chk_cs_exist:N}, two
+% functions that test that their argument is defined;
+% \item \cs{__kernel_chk_var_scope:NN} that checks that its argument |#2|
+% has scope |#1|.
+% \item \cs{__kernel_chk_var_local:N} and \cs{__kernel_chk_var_global:N} that
+% perform both checks.
+% \end{itemize}
+% \begin{macrocode}
+\cs_new_protected:Npn \__kernel_chk_var_exist:N #1 { }
+\cs_new_protected:Npn \__kernel_chk_cs_exist:N #1 { }
+\cs_generate_variant:Nn \__kernel_chk_cs_exist:N { c }
+\cs_new:Npn \__kernel_chk_flag_exist:n #1 { }
+\cs_new_protected:Npn \__kernel_chk_var_local:N #1 { }
+\cs_new_protected:Npn \__kernel_chk_var_global:N #1 { }
+\cs_new_protected:Npn \__kernel_chk_var_scope:NN #1#2 { }
+\cs_new_protected:cpn { @@_check-declarations_on: }
+ {
+ \cs_set_protected:Npn \__kernel_chk_var_exist:N ##1
+ {
+ \@@_suspended:T \use_none:nnn
+ \cs_if_exist:NF ##1
+ {
+ \__kernel_msg_error:nnx { kernel } { non-declared-variable }
+ { \token_to_str:N ##1 }
+ }
+ }
+ \cs_set_protected:Npn \__kernel_chk_cs_exist:N ##1
+ {
+ \@@_suspended:T \use_none:nnn
+ \cs_if_exist:NF ##1
+ {
+ \__kernel_msg_error:nnx { kernel } { command-not-defined }
+ { \token_to_str:N ##1 }
+ }
+ }
+ \cs_set:Npn \__kernel_chk_flag_exist:n ##1
+ {
+ \@@_suspended:T \use_none:nnn
+ \flag_if_exist:nF {##1}
+ {
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { bad-variable } { flag~##1~ }
+ }
+ }
+ \cs_set_protected:Npn \__kernel_chk_var_scope:NN
+ {
+ \@@_suspended:T \use_none:nnn
+ \@@_chk_var_scope_aux:NN
+ }
+ \cs_set_protected:Npn \__kernel_chk_var_local:N ##1
+ {
+ \@@_suspended:T \use_none:nnnnn
+ \__kernel_chk_var_exist:N ##1
+ \@@_chk_var_scope_aux:NN l ##1
+ }
+ \cs_set_protected:Npn \__kernel_chk_var_global:N ##1
+ {
+ \@@_suspended:T \use_none:nnnnn
+ \__kernel_chk_var_exist:N ##1
+ \@@_chk_var_scope_aux:NN g ##1
+ }
+ }
+\cs_new_protected:cpn { @@_check-declarations_off: }
+ {
+ \cs_set_protected:Npn \__kernel_chk_var_exist:N ##1 { }
+ \cs_set_protected:Npn \__kernel_chk_cs_exist:N ##1 { }
+ \cs_set:Npn \__kernel_chk_flag_exist:N ##1 { }
+ \cs_set_protected:Npn \__kernel_chk_var_local:N ##1 { }
+ \cs_set_protected:Npn \__kernel_chk_var_global:N ##1 { }
+ \cs_set_protected:Npn \__kernel_chk_var_scope:NN ##1##2 { }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_chk_var_scope_aux:NN}
+% \begin{macro}{\@@_chk_var_scope_aux:Nn}
+% \begin{macro}{\@@_chk_var_scope_aux:NNn}
+% First check whether the name of the variable |#2| starts with
+% \meta{letter}|_|. If it does then pass that letter, the
+% \meta{scope}, and the variable name to
+% \cs{@@_chk_var_scope_aux:NNn}. That function compares the two
+% letters and triggers an error if they differ (the \cs{scan_stop:}
+% case is not reachable here). If the second character was not |_|
+% then pass the same data to the same auxiliary, except for its first
+% argument which is now a control sequence. That control sequence is
+% actually a token list (but to avoid triggering the checking code we
+% manipulate it using \cs{cs_set_nopar:Npn}) containing a single
+% letter \meta{scope} according to what the first assignment to the
+% given variable was.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_chk_var_scope_aux:NN #1#2
+ { \exp_args:NNf \@@_chk_var_scope_aux:Nn #1 { \cs_to_str:N #2 } }
+\cs_new_protected:Npn \@@_chk_var_scope_aux:Nn #1#2
+ {
+ \if:w _ \use_i:nn \use_i_delimit_by_q_stop:nw #2 ? ? \q_stop
+ \exp_after:wN \@@_chk_var_scope_aux:NNn
+ \use_i_delimit_by_q_stop:nw #2 ? \q_stop
+ #1 {#2}
+ \else:
+ \exp_args:Nc \@@_chk_var_scope_aux:NNn
+ { @@_chk_/ #2 }
+ #1 {#2}
+ \fi:
+ }
+\cs_new_protected:Npn \@@_chk_var_scope_aux:NNn #1#2#3
+ {
+ \if:w #1 #2
+ \else:
+ \if:w #1 \scan_stop:
+ \cs_gset_nopar:Npn #1 {#2}
+ \else:
+ \__kernel_msg_error:nnxxx { kernel } { local-global }
+ {#1} {#2} { \iow_char:N \\ #3 }
+ \fi:
+ \fi:
+ }
+\use:c { @@_check-declarations_off: }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_log-functions_on:, \@@_log-functions_off:}
+% \begin{macro}{\__kernel_debug_log:x}
+% These two functions (corresponding to the \pkg{expl3} option
+% \texttt{log-functions}) control whether \cs{__kernel_debug_log:x}
+% writes to the log file or not. By default, logging is off.
+% \begin{macrocode}
+\cs_new_protected:cpn { @@_log-functions_on: }
+ {
+ \cs_set_protected:Npn \__kernel_debug_log:x
+ { \@@_suspended:T \use_none:nn \iow_log:x }
+ }
+\cs_new_protected:cpn { @@_log-functions_off: }
+ { \cs_set_protected:Npn \__kernel_debug_log:x { \use_none:n } }
+\cs_new_protected:Npn \__kernel_debug_log:x { \use_none:n }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+% {\@@_check-expressions_on:, \@@_check-expressions_off:}
+% \begin{macro}{\__kernel_chk_expr:nNnN}
+% \begin{macro}{\@@_chk_expr_aux:nNnN}
+% When debugging is enabled these two functions set
+% \cs{__kernel_chk_expr:nNnN} to test or not whether the given
+% expression is valid. The idea is to evaluate the expression within
+% a brace group (to catch trailing \cs{use_none:nn} or similar), then
+% test that the result is what we expect. This is done by turning it
+% to an integer and hitting that with \cs{tex_romannumeral:D} after
+% replacing the first character by |-0|. If all goes well, that
+% primitive finds a non-positive integer and gives an empty output.
+% If the original expression evaluation stopped early it leaves a
+% trailing \cs{tex_relax:D}, which stops the second evaluation (used
+% to convert to integer) before it encounters the final
+% \cs{tex_relax:D}. Since \cs{tex_romannumeral:D} does not absorb
+% \cs{tex_relax:D} the output will be nonempty. Note that |#3| is
+% empty except for mu expressions for which it is \cs{tex_mutoglue:D}
+% to avoid an \enquote{incompatible glue units} error. Note also that
+% if we had omitted the first \cs{tex_relax:D} then for instance
+% |1+2\relax+3| would incorrectly be accepted as a valid integer
+% expression.
+% \begin{macrocode}
+\cs_new_protected:cpn { @@_check-expressions_on: }
+ {
+ \cs_set:Npn \__kernel_chk_expr:nNnN ##1##2
+ {
+ \@@_suspended:T { ##1 \use_none:nnnnnnn }
+ \exp_after:wN \@@_chk_expr_aux:nNnN
+ \exp_after:wN { \tex_the:D ##2 ##1 \scan_stop: }
+ ##2
+ }
+ }
+\cs_new_protected:cpn { @@_check-expressions_off: }
+ { \cs_set:Npn \__kernel_chk_expr:nNnN ##1##2##3##4 {##1} }
+\cs_new:Npn \__kernel_chk_expr:nNnN #1#2#3#4 {#1}
+\cs_new:Npn \@@_chk_expr_aux:nNnN #1#2#3#4
+ {
+ \tl_if_empty:oF
+ {
+ \tex_romannumeral:D - 0
+ \exp_after:wN \use_none:n
+ \int_value:w #3 #2 #1 \scan_stop:
+ }
+ {
+ \__kernel_msg_expandable_error:nnnn
+ { kernel } { expr } {#4} {#1}
+ }
+ #1
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_deprecation_on:, \@@_deprecation_off:}
+% Some commands were more recently deprecated and not yet removed;
+% only make these into errors if the user requests it. This relies on
+% two token lists, filled up in \pkg{l3deprecation} by calls to
+% \cs{__kernel_deprecation_code:nn}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_deprecation_on:
+ { \g_@@_deprecation_on_tl }
+\cs_new_protected:Npn \@@_deprecation_off:
+ { \g_@@_deprecation_off_tl }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{
+% \l_@@_internal_tl,
+% \l_@@_tmpa_tl,
+% \l_@@_tmpb_tl,
+% }
+% For patching.
+% \begin{macrocode}
+\tl_new:N \l_@@_internal_tl
+\tl_new:N \l_@@_tmpa_tl
+\tl_new:N \l_@@_tmpb_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{
+% \@@_generate_parameter_list:NNN,
+% \@@_build_parm_text:n,
+% \@@_build_arg_list:n,
+% \@@_arg_list_from_signature:nNN,
+% \@@_arg_check_invalid:N,
+% \@@_parm_terminate:w,
+% \@@_arg_if_braced:n,
+% \@@_get_base_form:N,
+% \@@_arg_return:N,
+% }
+% \begin{macro}[TF]{\@@_arg_if_braced:N}
+% Some functions don't take the arguments their signature indicates.
+% For instance, \cs{clist_concat:NNN} doesn't take (directly) any
+% argument, so patching it with something that uses |#1|, |#2|, or
+% |#3| results in ``Illegal parameter number in definition of
+% \cs{clist_concat:NNN}''.
+%
+% Instead of changing \emph{the} definition of the macros, we'll
+% create a copy of such macros, say, |__debug_clist_concat:NNN| which
+% will be defined as
+% |<debug code with #1, #2 and #3>\clist_concat:NNN#1#2#3|. For that
+% we need to identify the signature of every function and build the
+% appropriate parameter list.
+%
+% \cs{@@_generate_parameter_list:NNN} takes a function in |#1| and
+% returns teo parameter lists: |#2| contains the simple |#1#2#3| as
+% would be used in the \meta{parameter~text} of the definition and
+% |#3| contains the same parameters but with braces where necessary.
+%
+% With the current implementation the resulting |#3| is, for example
+% for |\some_function:NnNn|, |#1{#2}#3{#4}|. While this is correct,
+% it might be unnecessary. Bracing everything will usually have the
+% same outcome (unless the function was misused in the first place).
+% What should be done?
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_generate_parameter_list:NNN #1#2#3
+ {
+ \tl_set:Nx \l_@@_internal_tl
+ { \exp_last_unbraced:Nf \use_ii:nnn \cs_split_function:N #1 }
+ \tl_set:Nx #2
+ { \exp_args:NV \@@_build_parm_text:n \l_@@_internal_tl }
+ \tl_set:Nx #3
+ { \exp_args:NV \@@_build_arg_list:n \l_@@_internal_tl }
+ }
+\cs_new:Npn \@@_build_parm_text:n #1
+ {
+ \@@_arg_list_from_signature:nNN { 1 } \c_false_bool #1
+ \q_recursion_tail \q_recursion_stop
+ }
+\cs_new:Npn \@@_build_arg_list:n #1
+ {
+ \@@_arg_list_from_signature:nNN { 1 } \c_true_bool #1
+ \q_recursion_tail \q_recursion_stop
+ }
+\cs_new:Npn \@@_arg_list_from_signature:nNN #1 #2 #3
+ {
+ \quark_if_recursion_tail_stop:N #3
+ \@@_arg_check_invalid:N #3
+ \bool_if:NT #2 { \@@_arg_if_braced:NT #3 { \use_none:n } }
+ \use:n { \c_hash_str \int_eval:n {#1} }
+ \exp_args:Nf \@@_arg_list_from_signature:nNN
+ { \int_eval:n {#1+1} } #2
+ }
+% \end{macrocode}
+% Argument types |w|, |p|, |T|, and |F| shouldn't be included in the
+% parameter lists, so we abort the loop if either is found.
+% \begin{macrocode}
+\cs_new:Npn \@@_arg_check_invalid:N #1
+ {
+ \if:w w #1 \@@_parm_terminate:w \else:
+ \if:w p #1 \@@_parm_terminate:w \else:
+ \if:w T #1 \@@_parm_terminate:w \else:
+ \if:w F #1 \@@_parm_terminate:w \else:
+ \exp:w
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \exp_end:
+ }
+\cs_new:Npn \@@_parm_terminate:w
+ { \exp_after:wN \use_none_delimit_by_q_recursion_stop:w \exp:w }
+\prg_new_conditional:Npnn \@@_arg_if_braced:N #1 { T }
+ { \exp_args:Nf \@@_arg_if_braced:n { \@@_get_base_form:N #1 } }
+\cs_new:Npn \@@_arg_if_braced:n #1
+ {
+ \if:w n #1 \prg_return_true: \else:
+ \if:w N #1 \prg_return_false: \else:
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { bad-arg-type } {#1}
+ \fi:
+ \fi:
+ }
+\__kernel_msg_new:nnn { kernel } { bad-arg-type }
+ { Wrong~argument~type~#1. }
+% \end{macrocode}
+% The macro below is a modifiec copy of
+% |\__cs_generate_variant_loop_base:N| to get the base form of an
+% argument type given a variant. It serves only to differentiate
+% arguments which should be braced from ones which shouldn't. If all
+% were to be braced this would be unnecessary. I moved the |n| and |N|
+% variants to the beginning of the test as the are much more common
+% here.
+% \begin{macrocode}
+\cs_new:Npn \@@_get_base_form:N #1
+ {
+ \if:w n #1 \@@_arg_return:N n \else:
+ \if:w N #1 \@@_arg_return:N N \else:
+ \if:w c #1 \@@_arg_return:N N \else:
+ \if:w o #1 \@@_arg_return:N n \else:
+ \if:w V #1 \@@_arg_return:N n \else:
+ \if:w v #1 \@@_arg_return:N n \else:
+ \if:w f #1 \@@_arg_return:N n \else:
+ \if:w e #1 \@@_arg_return:N n \else:
+ \if:w x #1 \@@_arg_return:N n \else:
+ \@@_arg_return:N \scan_stop:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \exp_stop_f:
+ }
+\cs_new:Npn \@@_arg_return:N #1
+ { \exp_after:wN #1 \exp:w \exp_end_continue_f:w }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{
+% \__kernel_patch:nnn,
+% \__kernel_patch_aux:nnn,
+% \@@_setup_debug_code:Nnn,
+% \@@_add_to_debug_code:Nnn,
+% \@@_insert_debug_code:Nnn,
+% \__kernel_patch_weird:nnn,
+% \__kernel_patch_weird_aux:nnn,
+% \@@_patch_weird:Nnn,
+% }
+% Simple patching by adding material at the start and end of (a
+% collection of) functions is straight-forward as we know the catcode
+% set up. The approach is essentially that in \pkg{etoolbox}. Notice
+% the need to worry about spaces: those are otherwise lost as normally
+% in \pkg{expl3} code they would be~|~|.
+%
+% As discussed above, some functions don't take arguments, so we can't
+% patch something that uses an argument in them. For these functions
+% \cs{__kernel_patch:nnn} is used. It starts by creating a copy of the
+% function (say, \cs{clist_concat:NNN}) with a |__debug_| prefix in
+% the name. This copy won't be changed. The code redefines the
+% original function to take the exact same arguments as advertised in
+% its signature (see \cs{@@_generate_parameter_list:NNN} above).
+% The redefined function also contains the debug code in the proper
+% position. If a function with the same name and the |__debug_| prefix
+% was already defined, then the macro patches that definition by
+% adding more debug code to it.
+% \begin{macrocode}
+\group_begin:
+ \cs_set_protected:Npn \__kernel_patch:nnn
+ {
+ \group_begin:
+ \char_set_catcode_other:N \#
+ \__kernel_patch_aux:nnn
+ }
+ \cs_set_protected:Npn \__kernel_patch_aux:nnn #1#2#3
+ {
+ \char_set_catcode_parameter:N \#
+ \char_set_catcode_space:N \ %
+ \tex_endlinechar:D -1 \scan_stop:
+ \tl_map_inline:nn {#3}
+ {
+ \cs_if_exist:cTF { __debug_ \cs_to_str:N ##1 }
+ { \@@_add_to_debug_code:Nnn }
+ { \@@_setup_debug_code:Nnn }
+ ##1 {#1} {#2}
+ }
+ \group_end:
+ }
+ \cs_set_protected:Npn \@@_setup_debug_code:Nnn #1#2#3
+ {
+ \cs_gset_eq:cN { __debug_ \cs_to_str:N #1 } #1
+ \@@_generate_parameter_list:NNN #1 \l_@@_tmpa_tl \l_@@_tmpb_tl
+ \exp_args:Nx \tex_scantokens:D
+ {
+ \tex_global:D \cs_prefix_spec:N #1
+ \tex_def:D \exp_not:N #1
+ \tl_use:N \l_@@_tmpa_tl
+ {
+ \tl_to_str:n {#2}
+ \exp_not:c { __debug_ \cs_to_str:N #1 }
+ \tl_use:N \l_@@_tmpb_tl
+ \tl_to_str:n {#3}
+ }
+ }
+ }
+ \cs_set_protected:Npn \@@_add_to_debug_code:Nnn #1#2#3
+ {
+ \use:x
+ {
+ \cs_set:Npn \exp_not:N \@@_tmp:w
+ ####1 \tl_to_str:n { macro: }
+ ####2 \tl_to_str:n { -> }
+ ####3 \c_backslash_str \tl_to_str:n { __debug_ }
+ \cs_to_str:N #1
+ ####4 \exp_not:N \q_mark
+ {
+ \exp_not:N \exp_args:Nx \exp_not:N \tex_scantokens:D
+ {
+ \tex_global:D ####1
+ \tex_def:D \exp_not:N #1 ####2
+ {
+ ####3 \tl_to_str:n {#2}
+ \c_backslash_str __debug_ \cs_to_str:N #1
+ ####4 \tl_to_str:n {#3}
+ }
+ }
+ }
+ }
+ \exp_after:wN \@@_tmp:w \cs_meaning:N #1 \q_mark
+ }
+% \end{macrocode}
+% Some functions, however, won't work with the signature reading setup
+% above because their signature contains |w|eird arguments. These
+% functions need to be patched using \cs{__kernel_patch_weird:nnn},
+% which won't make a copy of the function, rather it will patch the
+% debug code directly into it. This means that whatever argument the
+% debug code uses must be actually used by the patched function.
+% \begin{macrocode}
+ \cs_set_protected:Npn \__kernel_patch_weird:nnn
+ {
+ \group_begin:
+ \char_set_catcode_other:N \#
+ \__kernel_patch_weird_aux:nnn
+ }
+ \cs_set_protected:Npn \__kernel_patch_weird_aux:nnn #1#2#3
+ {
+ \char_set_catcode_parameter:N \#
+ \char_set_catcode_space:N \ %
+ \tex_endlinechar:D -1 \scan_stop:
+ \tl_map_inline:nn {#3}
+ { \@@_patch_weird:Nnn ##1 {#1} {#2} }
+ \group_end:
+ }
+ \cs_set_protected:Npn \@@_patch_weird:Nnn #1#2#3
+ {
+ \use:x
+ {
+ \tex_endlinechar:D -1 \scan_stop:
+ \exp_not:N \tex_scantokens:D
+ {
+ \tex_global:D \cs_prefix_spec:N #1
+ \tex_def:D \exp_not:N #1
+ \cs_argument_spec:N #1
+ {
+ \tl_to_str:n {#2}
+ \cs_replacement_spec:N #1
+ \tl_to_str:n {#3}
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Patching the second argument to ensure it exists. This happens before
+% we alter |#1| so the ordering is correct. For many variable types
+% such as \texttt{int} a low-level error occurs when |#2| is unknown, so
+% adding a check is not needed.
+% \begin{macrocode}
+ \__kernel_patch:nnn
+ { \__kernel_chk_var_exist:N #2 }
+ { }
+ {
+ \bool_set_eq:NN
+ \bool_gset_eq:NN
+ \clist_set_eq:NN
+ \clist_gset_eq:NN
+ \fp_set_eq:NN
+ \fp_gset_eq:NN
+ \prop_set_eq:NN
+ \prop_gset_eq:NN
+ \seq_set_eq:NN
+ \seq_gset_eq:NN
+ \str_set_eq:NN
+ \str_gset_eq:NN
+ \tl_set_eq:NN
+ \tl_gset_eq:NN
+ }
+% \end{macrocode}
+%
+% Patching both second and third arguments.
+% \begin{macrocode}
+% \tracingall
+ \__kernel_patch:nnn
+ {
+ \__kernel_chk_var_exist:N #2
+ \__kernel_chk_var_exist:N #3
+ }
+ { }
+ {
+ \clist_concat:NNN
+ \clist_gconcat:NNN
+ \seq_concat:NNN
+ \seq_gconcat:NNN
+ \str_concat:NNN
+ \str_gconcat:NNN
+ \tl_concat:NNN
+ \tl_gconcat:NNN
+ }
+% \tracingnone
+% \end{macrocode}
+%
+% Patching where the first argument to a function needs scope-checking:
+% either local or global (so two lists).
+% \begin{macrocode}
+ \__kernel_patch:nnn
+ { \__kernel_chk_var_local:N #1 }
+ { }
+ {
+ \bool_set:Nn
+ \bool_set_eq:NN
+ \bool_set_true:N
+ \bool_set_false:N
+ \box_set_eq:NN
+ \box_set_eq_drop:NN
+ \box_set_to_last:N
+ \clist_set_eq:NN
+ \dim_zero:N
+ \dim_set:Nn
+ \dim_set_eq:NN
+ \dim_add:Nn
+ \dim_sub:Nn
+ \fp_set_eq:NN
+ \int_zero:N
+ \int_set_eq:NN
+ \int_add:Nn
+ \int_sub:Nn
+ \int_incr:N
+ \int_decr:N
+ \int_set:Nn
+ \hbox_set:Nn
+ \hbox_set_to_wd:Nnn
+ \hbox_set:Nw
+ \hbox_set_to_wd:Nnw
+ \muskip_zero:N
+ \muskip_set:Nn
+ \muskip_add:Nn
+ \muskip_sub:Nn
+ \muskip_set_eq:NN
+ \seq_set_eq:NN
+ \skip_zero:N
+ \skip_set:Nn
+ \skip_set_eq:NN
+ \skip_add:Nn
+ \skip_sub:Nn
+ \tl_set:Nn
+ \tl_set:No
+ \tl_set:Nx
+ \tl_set_eq:NN
+ \tl_put_left:Nn
+ \tl_put_left:NV
+ \tl_put_left:No
+ \tl_put_left:Nx
+ \tl_put_right:Nn
+ \tl_put_right:NV
+ \tl_put_right:No
+ \tl_put_right:Nx
+ \tl_build_begin:N
+ \tl_build_put_right:Nn
+ \tl_build_put_right:Nx
+ \tl_build_put_left:Nn
+ \vbox_set:Nn
+ \vbox_set_top:Nn
+ \vbox_set_to_ht:Nnn
+ \vbox_set:Nw
+ \vbox_set_to_ht:Nnw
+ \vbox_set_split_to_ht:NNn
+ }
+ \__kernel_patch:nnn
+ { \__kernel_chk_var_global:N #1 }
+ { }
+ {
+ \bool_gset:Nn
+ \bool_gset_eq:NN
+ \bool_gset_true:N
+ \bool_gset_false:N
+ \box_gset_eq:NN
+ \box_gset_eq_drop:NN
+ \box_gset_to_last:N
+ \clist_gset_eq:NN
+ \dim_gset_eq:NN
+ \dim_gzero:N
+ \dim_gset:Nn
+ \dim_gadd:Nn
+ \dim_gsub:Nn
+ \fp_gset_eq:NN
+ \int_gzero:N
+ \int_gset_eq:NN
+ \int_gadd:Nn
+ \int_gsub:Nn
+ \int_gincr:N
+ \int_gdecr:N
+ \int_gset:Nn
+ \hbox_gset:Nn
+ \hbox_gset_to_wd:Nnn
+ \hbox_gset:Nw
+ \hbox_gset_to_wd:Nnw
+ \muskip_gzero:N
+ \muskip_gset:Nn
+ \muskip_gadd:Nn
+ \muskip_gsub:Nn
+ \muskip_gset_eq:NN
+ \seq_gset_eq:NN
+ \skip_gzero:N
+ \skip_gset:Nn
+ \skip_gset_eq:NN
+ \skip_gadd:Nn
+ \skip_gsub:Nn
+ \tl_gset:Nn
+ \tl_gset:No
+ \tl_gset:Nx
+ \tl_gset_eq:NN
+ \tl_gput_left:Nn
+ \tl_gput_left:NV
+ \tl_gput_left:No
+ \tl_gput_left:Nx
+ \tl_gput_right:Nn
+ \tl_gput_right:NV
+ \tl_gput_right:No
+ \tl_gput_right:Nx
+ \tl_build_gbegin:N
+ \tl_build_gput_right:Nn
+ \tl_build_gput_right:Nx
+ \tl_build_gput_left:Nn
+ \vbox_gset:Nn
+ \vbox_gset_top:Nn
+ \vbox_gset_to_ht:Nnn
+ \vbox_gset:Nw
+ \vbox_gset_to_ht:Nnw
+ \vbox_gset_split_to_ht:NNn
+ }
+% \end{macrocode}
+%
+% Scoping for constants.
+% \begin{macrocode}
+ \__kernel_patch:nnn
+ { \__kernel_chk_var_scope:NN c #1 }
+ { }
+ {
+ \bool_const:Nn
+ \dim_const:Nn
+ \int_const:Nn
+ \intarray_const_from_clist:Nn
+ \muskip_const:Nn
+ \skip_const:Nn
+ \tl_const:Nn
+ \tl_const:Nx
+ }
+% \end{macrocode}
+%
+% Flag functions.
+% \begin{macrocode}
+ \__kernel_patch:nnn
+ { \__kernel_chk_flag_exist:n {#1} }
+ { }
+ {
+ \flag_if_raised:nT
+ \flag_if_raised:nF
+ \flag_if_raised:nTF
+ \flag_if_raised_p:n
+ \flag_height:n
+ \flag_raise_if_clear:n
+ \flag_clear:n
+ }
+% \end{macrocode}
+%
+% Various one-offs.
+% \begin{macrocode}
+ \__kernel_patch:nnn
+ { \__kernel_chk_cs_exist:N #1 }
+ { }
+ { \cs_generate_variant:Nn }
+ \__kernel_patch:nnn
+ { \__kernel_chk_var_scope:NN g #1 }
+ { }
+ { \intarray_new:Nn }
+ \__kernel_patch:nnn
+ { \__kernel_chk_var_scope:NN q #1 }
+ { }
+ { \quark_new:N }
+ \__kernel_patch:nnn
+ { \__kernel_chk_var_scope:NN s #1 }
+ { }
+ { \scan_new:N }
+% \end{macrocode}
+%
+% Patch various internal commands to log definitions of functions.
+% First, a kernel internal. Then internals from the \pkg{cs},
+% \pkg{keys} and \pkg{msg} modules.
+% \begin{macrocode}
+ \__kernel_patch:nnn
+ { }
+ {
+ \__kernel_debug_log:x
+ { Defining~\token_to_str:N #1~ \msg_line_context: }
+ }
+ { \__kernel_chk_if_free_cs:N }
+%<@@=cs>
+ \__kernel_patch_weird:nnn
+ {
+ \cs_if_free:NF #4
+ {
+ \__kernel_debug_log:x
+ {
+ Variant~\token_to_str:N #4~%
+ already~defined;~ not~ changing~ it~ \msg_line_context:
+ }
+ }
+ }
+ { }
+ { \@@_generate_variant:wwNN }
+%<@@=keys>
+ \__kernel_patch:nnn
+ {
+ \cs_if_exist:cF { \c_@@_code_root_tl #1 }
+ { \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } }
+ }
+ { }
+ { \@@_cmd_set:nn }
+%<@@=msg>
+ \__kernel_patch:nnn
+ { }
+ {
+ \__kernel_debug_log:x
+ { Defining~message~ #1 / #2 ~\msg_line_context: }
+ }
+ { \@@_chk_free:nn }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=prg>
+% \end{macrocode}
+% Internal functions from \pkg{prg} module.
+% \begin{macrocode}
+ \__kernel_patch_weird:nnn
+ { \__kernel_chk_cs_exist:c { #5 _p : #6 } }
+ { }
+ { \@@_set_eq_conditional_p_form:wNnnnn }
+ \__kernel_patch_weird:nnn
+ { \__kernel_chk_cs_exist:c { #5 : #6 TF } }
+ { }
+ { \@@_set_eq_conditional_TF_form:wNnnnn }
+ \__kernel_patch_weird:nnn
+ { \__kernel_chk_cs_exist:c { #5 : #6 T } }
+ { }
+ { \@@_set_eq_conditional_T_form:wNnnnn }
+ \__kernel_patch_weird:nnn
+ { \__kernel_chk_cs_exist:c { #5 : #6 F } }
+ { }
+ { \@@_set_eq_conditional_F_form:wNnnnn }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=regex>
+% \end{macrocode}
+% Internal functions from \pkg{regex} module.
+% \begin{macrocode}
+ \__kernel_patch:nnn
+ {
+ \@@_trace_push:nnN { regex } { 1 } \@@_escape_use:nnnn
+ \group_begin:
+ \tl_set:Nx \l_@@_internal_a_tl
+ { \@@_trace_pop:nnN { regex } { 1 } \@@_escape_use:nnnn }
+ \use_none:nnn
+ }
+ { }
+ { \@@_escape_use:nnn }
+ \__kernel_patch:nnn
+ { \@@_trace_push:nnN { regex } { 1 } \@@_build:N }
+ {
+ \@@_trace_states:n { 2 }
+ \@@_trace_pop:nnN { regex } { 1 } \@@_build:N
+ }
+ { \@@_build:N }
+ \__kernel_patch:nnn
+ { \@@_trace_push:nnN { regex } { 1 } \@@_build_for_cs:n }
+ {
+ \@@_trace_states:n { 2 }
+ \@@_trace_pop:nnN { regex } { 1 } \@@_build_for_cs:n
+ }
+ { \@@_build_for_cs:n }
+ \__kernel_patch:nnn
+ {
+ \@@_trace:nnx { regex } { 2 }
+ {
+ regex~new~state~
+ L=\int_use:N \l_@@_left_state_int ~ -> ~
+ R=\int_use:N \l_@@_right_state_int ~ -> ~
+ M=\int_use:N \l_@@_max_state_int ~ -> ~
+ \int_eval:n { \l_@@_max_state_int + 1 }
+ }
+ }
+ { }
+ { \@@_build_new_state: }
+ \__kernel_patch:nnn
+ { \@@_trace_push:nnN { regex } { 1 } \@@_group_aux:nnnnN }
+ { \@@_trace_pop:nnN { regex } { 1 } \@@_group_aux:nnnnN }
+ { \@@_group_aux:nnnnN }
+ \__kernel_patch:nnn
+ { \@@_trace_push:nnN { regex } { 1 } \@@_branch:n }
+ { \@@_trace_pop:nnN { regex } { 1 } \@@_branch:n }
+ { \@@_branch:n }
+ \__kernel_patch:nnn
+ {
+ \@@_trace_push:nnN { regex } { 1 } \@@_match:n
+ \@@_trace:nnx { regex } { 1 } { analyzing~query~token~list }
+ }
+ { \@@_trace_pop:nnN { regex } { 1 } \@@_match:n }
+ { \@@_match:n }
+ \__kernel_patch:nnn
+ {
+ \@@_trace_push:nnN { regex } { 1 } \@@_match_cs:n
+ \@@_trace:nnx { regex } { 1 } { analyzing~query~token~list }
+ }
+ { \@@_trace_pop:nnN { regex } { 1 } \@@_match_cs:n }
+ { \@@_match_cs:n }
+ \__kernel_patch:nnn
+ { \@@_trace:nnx { regex } { 1 } { initializing } }
+ { }
+ { \@@_match_init: }
+ \__kernel_patch:nnn
+ {
+ \@@_trace:nnx { regex } { 2 }
+ { state~\int_use:N \l_@@_curr_state_int }
+ }
+ { }
+ { \@@_use_state: }
+ \__kernel_patch:nnn
+ { \@@_trace_push:nnN { regex } { 1 } \@@_replacement:n }
+ { \@@_trace_pop:nnN { regex } { 1 } \@@_replacement:n }
+ { \@@_replacement:n }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\group_end:
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=debug>
+% \end{macrocode}
+%
+% Patching arguments is a bit more involved: we do these one at a time.
+% The basic idea is the same, using a |#| token that is a string.
+% \begin{macrocode}
+\group_begin:
+ \cs_set_protected:Npn \__kernel_patch:Nn #1
+ {
+ \group_begin:
+ \char_set_catcode_other:N \#
+ \__kernel_patch_aux:Nn #1
+ }
+ \cs_set_protected:Npn \__kernel_patch_aux:Nn #1#2
+ {
+ \char_set_catcode_parameter:N \#
+ \tex_endlinechar:D -1 \scan_stop:
+ \exp_args:Nx \tex_scantokens:D
+ {
+ \tex_global:D \cs_prefix_spec:N #1 \tex_def:D \exp_not:N #1
+ \cs_argument_spec:N #1
+ { \exp_args:No \tl_to_str:n { #1 #2 } }
+ }
+ \group_end:
+ }
+% \end{macrocode}
+%
+% The functions here can get a bit repetitive, so we define a helper
+% which can re-use the same patch code repeatedly. The main part of the
+% patch is the same, so we just have to deal with the part which varies
+% depending on the type of expression.
+% \begin{macrocode}
+ \cs_set_protected:Npn \__kernel_patch_eval:nn #1#2
+ {
+ \tl_map_inline:nn {#1}
+ {
+ \exp_args:NNx \__kernel_patch:Nn ##1
+ {
+ { \c_hash_str 1 }
+ {
+ \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 2 }
+ \exp_not:n {#2}
+ \exp_not:N ##1
+ }
+ }
+ }
+ }
+%<@@=dim>
+ \__kernel_patch_eval:nn
+ {
+ \dim_set:Nn
+ \dim_gset:Nn
+ \dim_add:Nn
+ \dim_gadd:Nn
+ \dim_sub:Nn
+ \dim_gsub:Nn
+ \dim_const:Nn
+ }
+ { \@@_eval:w { } }
+%<@@=int>
+ \__kernel_patch_eval:nn
+ {
+ \int_set:Nn
+ \int_gset:Nn
+ \int_add:Nn
+ \int_gadd:Nn
+ \int_sub:Nn
+ \int_gsub:Nn
+ \int_const:Nn
+ }
+ { \@@_eval:w { } }
+ \__kernel_patch_eval:nn
+ {
+ \muskip_set:Nn
+ \muskip_gset:Nn
+ \muskip_add:Nn
+ \muskip_gadd:Nn
+ \muskip_sub:Nn
+ \muskip_gsub:Nn
+ \muskip_const:Nn
+ }
+ { \tex_muexpr:D { \tex_mutoglue:D } }
+ \__kernel_patch_eval:nn
+ {
+ \skip_set:Nn
+ \skip_gset:Nn
+ \skip_add:Nn
+ \skip_gadd:Nn
+ \skip_sub:Nn
+ \skip_gsub:Nn
+ \skip_const:Nn
+ }
+ { \tex_glueexpr:D { } }
+% \end{macrocode}
+%
+% Patching expandable expressions, first the one-argument versions,
+% then the two-argument ones.
+% \begin{macrocode}
+ \cs_set_protected:Npn \__kernel_patch_eval:nn #1#2
+ {
+ \tl_map_inline:nn {#1}
+ {
+ \exp_args:NNx \__kernel_patch:Nn ##1
+ {
+ {
+ \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 }
+ \exp_not:n {#2}
+ \exp_not:N ##1
+ }
+ }
+ }
+ }
+%<@@=box>
+ \__kernel_patch_eval:nn
+ { \@@_dim_eval:n }
+ { \@@_eval:w { } }
+%<@@=dim>
+ \__kernel_patch_eval:nn
+ {
+ \dim_eval:n
+ \dim_to_decimal:n
+ \dim_to_decimal_in_sp:n
+ \dim_abs:n
+ \dim_sign:n
+ }
+ { \@@_eval:w { } }
+%<@@=int>
+ \__kernel_patch_eval:nn
+ {
+ \int_eval:n
+ \int_abs:n
+ \int_sign:n
+ }
+ { \@@_eval:w { } }
+ \__kernel_patch_eval:nn
+ {
+ \skip_eval:n
+ \skip_horizontal:n
+ \skip_vertical:n
+ }
+ { \tex_glueexpr:D { } }
+ \__kernel_patch_eval:nn
+ {
+ \muskip_eval:n
+ }
+ { \tex_muexpr:D { \tex_mutoglue:D } }
+ \cs_set_protected:Npn \__kernel_patch_eval:nn #1#2
+ {
+ \tl_map_inline:nn {#1}
+ {
+ \exp_args:NNx \__kernel_patch:Nn ##1
+ {
+ {
+ \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 }
+ \exp_not:n {#2}
+ \exp_not:N ##1
+ }
+ {
+ \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 2 }
+ \exp_not:n {#2}
+ \exp_not:N ##1
+ }
+ }
+ }
+ }
+%<@@=dim>
+ \__kernel_patch_eval:nn
+ {
+ \dim_max:nn
+ \dim_min:nn
+ }
+ { \@@_eval:w { } }
+%<@@=int>
+ \__kernel_patch_eval:nn
+ {
+ \int_max:nn
+ \int_min:nn
+ \int_div_truncate:nn
+ \int_mod:nn
+ }
+ { \@@_eval:w { } }
+% \end{macrocode}
+%
+% Conditionals: three argument ones then one argument ones
+% \begin{macrocode}
+ \cs_set_protected:Npn \__kernel_patch_cond:nn #1#2
+ {
+ \clist_map_inline:nn { :nNnT , :nNnF , :nNnTF , _p:nNn }
+ {
+ \exp_args:Ncx \__kernel_patch:Nn { #1 ##1 }
+ {
+ {
+ \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 }
+ \exp_not:n {#2}
+ \exp_not:c { #1 ##1 }
+ }
+ { \c_hash_str 2 }
+ {
+ \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 3 }
+ \exp_not:n {#2}
+ \exp_not:c { #1 ##1 }
+ }
+ }
+ }
+ }
+%<@@=dim>
+ \__kernel_patch_cond:nn { dim_compare } { \@@_eval:w { } }
+%<@@=int>
+ \__kernel_patch_cond:nn { int_compare } { \@@_eval:w { } }
+ \cs_set_protected:Npn \__kernel_patch_cond:nn #1#2
+ {
+ \clist_map_inline:nn { :nT , :nF , :nTF , _p:n }
+ {
+ \exp_args:Ncx \__kernel_patch:Nn { #1 ##1 }
+ {
+ {
+ \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 }
+ \exp_not:n {#2}
+ \exp_not:c { #1 ##1 }
+ }
+ }
+ }
+ }
+%<@@=int>
+ \__kernel_patch_cond:nn { int_if_even } { \@@_eval:w { } }
+ \__kernel_patch_cond:nn { int_if_odd } { \@@_eval:w { } }
+% \end{macrocode}
+%
+% Step functions.
+% \begin{macrocode}
+%<@@=dim>
+ \__kernel_patch:Nn \dim_step_function:nnnN
+ {
+ {
+ \__kernel_chk_expr:nNnN {#1} \@@_eval:w { }
+ \dim_step_function:nnnN
+ }
+ {
+ \__kernel_chk_expr:nNnN {#2} \@@_eval:w { }
+ \dim_step_function:nnnN
+ }
+ {
+ \__kernel_chk_expr:nNnN {#3} \@@_eval:w { }
+ \dim_step_function:nnnN
+ }
+ }
+%<@@=int>
+ \__kernel_patch:Nn \int_step_function:nnnN
+ {
+ {
+ \__kernel_chk_expr:nNnN {#1} \@@_eval:w { }
+ \int_step_function:nnnN
+ }
+ {
+ \__kernel_chk_expr:nNnN {#2} \@@_eval:w { }
+ \int_step_function:nnnN
+ }
+ {
+ \__kernel_chk_expr:nNnN {#3} \@@_eval:w { }
+ \int_step_function:nnnN
+ }
+ }
+% \end{macrocode}
+%
+% Odds and ends
+% \begin{macrocode}
+ \__kernel_patch:Nn \dim_to_fp:n { { (#1) } }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\group_end:
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=skip>
+% \end{macrocode}
+% This one has catcode changes so must be done by hand.
+% \begin{macrocode}
+\cs_set_protected:Npn \@@_tmp:w #1
+ {
+ \prg_set_conditional:Npnn \skip_if_finite:n ##1 { p , T , F , TF }
+ {
+ \exp_after:wN \@@_if_finite:wwNw
+ \skip_use:N \tex_glueexpr:D
+ \__kernel_chk_expr:nNnN
+ {##1} \tex_glueexpr:D { } \skip_if_finite:n
+ ; \prg_return_false:
+ #1 ; \prg_return_true: \q_stop
+ }
+ }
+\exp_args:No \@@_tmp:w { \tl_to_str:n { fil } }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=msg>
+% \end{macrocode}
+%
+% Messages.
+% \begin{macrocode}
+\__kernel_msg_new:nnnn { kernel } { debug }
+ { The~debugging~option~'#1'~does~not~exist~\msg_line_context:. }
+ {
+ The~functions~'\iow_char:N\\debug_on:n'~and~
+ '\iow_char:N\\debug_off:n'~only~accept~the~arguments~
+ 'all',~'check-declarations',~'check-expressions',~
+ 'deprecation',~'log-functions',~not~'#1'.
+ }
+\__kernel_msg_new:nnn { kernel } { expr } { '#2'~in~#1 }
+\__kernel_msg_new:nnnn { kernel } { local-global }
+ { Inconsistent~local/global~assignment }
+ {
+ \c_@@_coding_error_text_tl
+ \if:w l #2 Local
+ \else:
+ \if:w g #2 Global \else: Constant \fi:
+ \fi:
+ \ %
+ assignment~to~a~
+ \if:w l #1 local
+ \else:
+ \if:w g #1 global \else: constant \fi:
+ \fi:
+ \ %
+ variable~'#3'.
+ }
+\__kernel_msg_new:nnnn { kernel } { non-declared-variable }
+ { The~variable~#1~has~not~been~declared~\msg_line_context:. }
+ {
+ \c_@@_coding_error_text_tl
+ Checking~is~active,~and~you~have~tried~do~so~something~like: \\
+ \ \ \tl_set:Nn ~ #1 ~ \{ ~ ... ~ \} \\
+ without~first~having: \\
+ \ \ \tl_new:N ~ #1 \\
+ \\
+ LaTeX~will~create~the~variable~and~continue.
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\__kernel_if_debug:TF}
+% Flip the switch for deprecated code.
+% \begin{macrocode}
+\cs_set_protected:Npn \__kernel_if_debug:TF #1#2 {#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</initex|package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index 41a8bed1a2..82a770ad80 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -90,6 +90,10 @@
% \end{macrocode}
%
% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \begin{macrocode}
%<@@=deprecation>
% \end{macrocode}
%
@@ -126,6 +130,12 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{variable}{\g__kernel_deprecation_undo_recent_bool}
+% \begin{macrocode}
+\bool_new:N \g__kernel_deprecation_undo_recent_bool
+% \end{macrocode}
+% \end{variable}
+%
% \begin{macro}{\@@_not_yet_deprecated:nTF, \@@_minus_six_months:w}
% Receives a deprecation \meta{date} and runs the \texttt{true}
% (\texttt{false}) branch if the \pkg{expl3} date is earlier (later)
@@ -149,7 +159,7 @@
} < {#1}
{
\bool_set_true:N \l_@@_grace_period_bool
- \bool_if:NTF \l@expl@undo@recent@deprecations@bool
+ \bool_if:NTF \g__kernel_deprecation_undo_recent_bool
}
{ \use_ii:nn }
}
@@ -242,9 +252,9 @@
{
\bool_if:nTF
{
- \cs_if_eq_p:NN #3 \cs_new_protected:Npn &&
+ \cs_if_eq_p:NN #3 \cs_gset_protected:Npn &&
\__kernel_if_debug:TF
- { \c_true_bool } { \l@expl@undo@recent@deprecations@bool }
+ { \c_true_bool } { \g__kernel_deprecation_undo_recent_bool }
}
{ \@@_warn_once:nnNnn {#1} {#2} #4 {#5} {#6} }
{ \@@_patch_aux:Nn #3 { #4 #5 {#6} } }
@@ -263,7 +273,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_warn_once:nnNnn #1#2#3#4#5
{
- \cs_new_protected:Npx #3
+ \cs_gset_protected:Npx #3
{
\__kernel_if_debug:TF
{
@@ -292,7 +302,7 @@
\cs_new_protected:Npn \@@_patch_aux:Nn #1#2
{
#1 #2
- \cs_if_eq:NNTF #1 \cs_new_protected:Npn
+ \cs_if_eq:NNTF #1 \cs_gset_protected:Npn
{ \__kernel_deprecation_code:nn { } { \cs_set_protected:Npn #2 } }
{ \__kernel_deprecation_code:nn { } { \cs_set:Npn #2 } }
}
@@ -311,7 +321,7 @@
{
\exp_not:N #4
{
- \cs_if_eq:NNTF #3 \cs_new_protected:Npn
+ \cs_if_eq:NNTF #3 \cs_gset_protected:Npn
{ \exp_not:N \__kernel_msg_error:nnnnnn }
{ \exp_not:N \__kernel_msg_expandable_error:nnnnnn }
{ kernel } { deprecated-command }
@@ -369,12 +379,12 @@
\cs_new_protected:Npn \@@_old_protected:Nnn #1#2#3
{
\__kernel_patch_deprecation:nnNNpn {#3} {#2}
- \cs_new_protected:Npn #1 { }
+ \cs_gset_protected:Npn #1 { }
}
\cs_new_protected:Npn \@@_old:Nnn #1#2#3
{
\__kernel_patch_deprecation:nnNNpn {#3} {#2}
- \cs_new:Npn #1 { }
+ \cs_gset:Npn #1 { }
}
\@@_old:Nnn \box_resize:Nnn
{ \box_resize_to_wd_and_ht_plus_dp:Nnn } { 2019-01-01 }
@@ -545,6 +555,40 @@
% \end{macro}
% \end{macro}
%
+% \subsection{Loading the patches}
+%
+% When loaded first, the patches are simply read here.
+%
+% \begin{macrocode}
+\group_begin:
+\cs_set_protected:Npn \ProvidesExplFile
+ {
+ \char_set_catcode_space:n { `\ }
+ \ProvidesExplFileAux
+ }
+\cs_set_protected:Npx \ProvidesExplFileAux #1#2#3#4
+ {
+ \group_end:
+ \cs_if_exist:NTF \ProvidesFile
+ { \exp_not:N \ProvidesFile {#1} [ #2~v#3~#4 ] }
+ { \iow_log:x { File:~#1~#2~v#3~#4 } }
+ }
+\file_input:n { l3deprecation.def }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*patches>
+% \end{macrocode}
+%
+% Standard file identification.
+% \begin{macrocode}
+\ProvidesExplFile{l3deprecation.def}{2019-04-06}{}{L3 Deprecated functions}
+% \end{macrocode}
+%
% \subsection{Deprecated \pkg{l3box} functions}
%
% \begin{macro}[deprecated = 2021-07-01]
@@ -559,10 +603,10 @@
% }
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \box_set_eq_drop:N }
-\cs_new_protected:Npn \box_set_eq_clear:NN #1#2
+\cs_gset_protected:Npn \box_set_eq_clear:NN #1#2
{ \tex_setbox:D #1 \tex_box:D #2 }
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \box_gset_eq_drop:N }
-\cs_new_protected:Npn \box_gset_eq_clear:NN #1#2
+\cs_gset_protected:Npn \box_gset_eq_clear:NN #1#2
{ \tex_global:D \tex_setbox:D #1 \tex_box:D #2 }
\cs_generate_variant:Nn \box_set_eq_clear:NN { c , Nc , cc }
\cs_generate_variant:Nn \box_gset_eq_clear:NN { c , Nc , cc }
@@ -573,7 +617,7 @@
% \begin{macro}[deprecated = 2021-07-01]{\hbox_unpack_clear:N, \hbox_unpack_clear:c}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \hbox_unpack_drop:N }
-\cs_new_protected:Npn \hbox_unpack_clear:N
+\cs_gset_protected:Npn \hbox_unpack_clear:N
{ \hbox_unpack_drop:N }
\cs_generate_variant:Nn \hbox_unpack_clear:N { c }
% \end{macrocode}
@@ -582,7 +626,7 @@
% \begin{macro}[deprecated = 2021-07-01]{\vbox_unpack_clear:N, \vbox_unpack_clear:c}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \vbox_unpack_drop:N }
-\cs_new_protected:Npn \vbox_unpack_clear:N
+\cs_gset_protected:Npn \vbox_unpack_clear:N
{ \vbox_unpack_drop:N }
\cs_generate_variant:Nn \vbox_unpack_clear:N { c }
% \end{macrocode}
@@ -610,7 +654,7 @@
% \cs{@@_constdef:Nw}, with an \cs{exp_not:N} construction because the
% constants themselves are outer at that point.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_deprecated_constants:nn #1#2
+\cs_gset_protected:Npn \@@_deprecated_constants:nn #1#2
{
#1 \c_zero { 0 } #2
#1 \c_one { 1 } #2
@@ -636,7 +680,12 @@
#1 \c_one_thousand { 1000 } #2
#1 \c_ten_thousand { 10000 } #2
}
-\@@_deprecated_constants:nn { \int_const:Nn } { }
+\cs_set_protected:Npn \@@_deprecated_constants:Nn #1#2
+ {
+ \cs_if_free:NT #1
+ { \int_const:Nn #1 {#2} }
+ }
+\@@_deprecated_constants:nn { \@@_deprecated_constants:Nn } { }
\__kernel_deprecation_code:nn
{
\@@_deprecated_constants:nn
@@ -658,7 +707,7 @@
% \begin{macro}[deprecated = 2020-07-01]{\@@_value:w}
% Made public.
% \begin{macrocode}
-\cs_new_eq:NN \@@_value:w \int_value:w
+\cs_gset_eq:NN \@@_value:w \int_value:w
% \end{macrocode}
% \end{macro}
%
@@ -672,11 +721,11 @@
% \begin{macro}[deprecated = 2020-07-01]{\lua_shipout_x:n}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \lua_now:e }
-\cs_new:Npn \lua_now_x:n #1 { \@@_now:n {#1} }
+\cs_gset:Npn \lua_now_x:n #1 { \@@_now:n {#1} }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \lua_escape:e }
-\cs_new:Npn \lua_escape_x:n #1 { \@@_escape:n {#1} }
+\cs_gset:Npn \lua_escape_x:n #1 { \@@_escape:n {#1} }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \lua_shipout_e:n }
-\cs_new_protected:Npn \lua_shipout_x:n #1 { \@@_shipout:n {#1} }
+\cs_gset_protected:Npn \lua_shipout_x:n #1 { \@@_shipout:n {#1} }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -690,14 +739,14 @@
% \begin{macro}[deprecated = 2020-07-01]{\msg_log:n, \msg_term:n}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \iow_log:n }
-\cs_new_protected:Npn \msg_log:n #1
+\cs_gset_protected:Npn \msg_log:n #1
{
\iow_log:n { ................................................. }
\iow_wrap:nnnN { . ~ #1} { . ~ } { } \iow_log:n
\iow_log:n { ................................................. }
}
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \iow_term:n }
-\cs_new_protected:Npn \msg_term:n #1
+\cs_gset_protected:Npn \msg_term:n #1
{
\iow_term:n { ************************************************* }
\iow_wrap:nnnN { * ~ #1} { * ~ } { } \iow_term:n
@@ -709,7 +758,7 @@
% \begin{macro}[deprecated = 2020-07-01]{\msg_interrupt:nnn}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { [Defined~error~message] }
-\cs_new_protected:Npn \msg_interrupt:nnn #1#2#3
+\cs_gset_protected:Npn \msg_interrupt:nnn #1#2#3
{
\tl_if_empty:nTF {#3}
{
@@ -721,12 +770,12 @@
{#1 \\\\ #2 \\\\ \c_@@_help_text_tl }
}
}
-\cs_new_protected:Npn \@@_old_interrupt_wrap:nn #1#2
+\cs_gset_protected:Npn \@@_old_interrupt_wrap:nn #1#2
{
\iow_wrap:nnnN {#1} { | ~ } { } \@@_old_interrupt_more_text:n
\iow_wrap:nnnN {#2} { ! ~ } { } \@@_old_interrupt_text:n
}
-\cs_new_protected:Npn \@@_old_interrupt_more_text:n #1
+\cs_gset_protected:Npn \@@_old_interrupt_more_text:n #1
{
\exp_args:Nx \tex_errhelp:D
{
@@ -743,7 +792,7 @@
\tex_lowercase:D
{
\group_end:
- \cs_new_protected:Npn \@@_old_interrupt_text:n #1
+ \cs_gset_protected:Npn \@@_old_interrupt_text:n #1
{
\iow_term:x
{
@@ -807,16 +856,16 @@
% definition has not yet been restored.
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_break_point:Nn }
-\cs_new:Npn \@@_break_point:Nn { \prg_break_point:Nn }
+\cs_gset:Npn \@@_break_point:Nn { \prg_break_point:Nn }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_break_point: }
-\cs_new:Npn \@@_break_point: { \prg_break_point: }
+\cs_gset:Npn \@@_break_point: { \prg_break_point: }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_map_break:Nn }
-\cs_new:Npn \@@_map_break:Nn #1 \@@_break_point:Nn
+\cs_gset:Npn \@@_map_break:Nn #1 \@@_break_point:Nn
{ \prg_map_break:Nn #1 \prg_break_point:Nn }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_break: }
-\cs_new:Npn \@@_break: #1 \@@_break_point: { }
+\cs_gset:Npn \@@_break: #1 \@@_break_point: { }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_break:n }
-\cs_new:Npn \@@_break:n #1#2 \@@_break_point: {#1}
+\cs_gset:Npn \@@_break:n #1#2 \@@_break_point: {#1}
% \end{macrocode}
% \end{macro}
%
@@ -826,21 +875,21 @@
% \begin{macro}[EXP, deprecated = 2020-07-01, pTF]{\str_if_eq_x:nn}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_case_e:nn }
-\cs_new:Npn \str_case_x:nn { \str_case_e:nn }
+\cs_gset:Npn \str_case_x:nn { \str_case_e:nn }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_case_e:nnT }
-\cs_new:Npn \str_case_x:nnT { \str_case_e:nnT }
+\cs_gset:Npn \str_case_x:nnT { \str_case_e:nnT }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_case_e:nnF }
-\cs_new:Npn \str_case_x:nnF { \str_case_e:nnF }
+\cs_gset:Npn \str_case_x:nnF { \str_case_e:nnF }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_case_e:nnTF }
-\cs_new:Npn \str_case_x:nnTF { \str_case_e:nnTF }
+\cs_gset:Npn \str_case_x:nnTF { \str_case_e:nnTF }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq_p:ee }
-\cs_new:Npn \str_if_eq_x_p:nn { \str_if_eq_p:ee }
+\cs_gset:Npn \str_if_eq_x_p:nn { \str_if_eq_p:ee }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq:eeT }
-\cs_new:Npn \str_if_eq_x:nnT { \str_if_eq:eeT }
+\cs_gset:Npn \str_if_eq_x:nnT { \str_if_eq:eeT }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq:eeF }
-\cs_new:Npn \str_if_eq_x:nnF { \str_if_eq:eeF }
+\cs_gset:Npn \str_if_eq_x:nnF { \str_if_eq:eeF }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq:eeTF }
-\cs_new:Npn \str_if_eq_x:nnTF { \str_if_eq:eeTF }
+\cs_gset:Npn \str_if_eq_x:nnTF { \str_if_eq:eeTF }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -860,11 +909,11 @@
% }
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
-\cs_new_protected:Npn \tl_set_from_file:Nnn #1#2#3
+\cs_gset_protected:Npn \tl_set_from_file:Nnn #1#2#3
{ \file_get:nnN {#3} {#2} #1 }
\cs_generate_variant:Nn \tl_set_from_file:Nnn { c }
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
-\cs_new_protected:Npn \tl_gset_from_file:Nnn #1#2#3
+\cs_gset_protected:Npn \tl_gset_from_file:Nnn #1#2#3
{
\group_begin:
\file_get:nnN {#3} {#2} \l_@@_internal_a_tl
@@ -873,7 +922,7 @@
}
\cs_generate_variant:Nn \tl_gset_from_file:Nnn { c }
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
-\cs_new_protected:Npn \tl_set_from_file_x:Nnn #1#2#3
+\cs_gset_protected:Npn \tl_set_from_file_x:Nnn #1#2#3
{
\group_begin:
\file_get:nnN {#3} {#2} \l_@@_internal_a_tl
@@ -884,7 +933,7 @@
}
\cs_generate_variant:Nn \tl_set_from_file_x:Nnn { c }
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
-\cs_new_protected:Npn \tl_gset_from_file_x:Nnn #1#2#3
+\cs_gset_protected:Npn \tl_gset_from_file_x:Nnn #1#2#3
{
\group_begin:
\file_get:nnN {#3} {#2} \l_@@_internal_a_tl
@@ -903,9 +952,9 @@
% Simple renames.
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \tl_analysis_show:N }
-\cs_new_protected:Npn \tl_show_analysis:N { \tl_analysis_show:N }
+\cs_gset_protected:Npn \tl_show_analysis:N { \tl_analysis_show:N }
\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \tl_analysis_show:n }
-\cs_new_protected:Npn \tl_show_analysis:n { \tl_analysis_show:n }
+\cs_gset_protected:Npn \tl_show_analysis:n { \tl_analysis_show:n }
% \end{macrocode}
% \end{macro}
%
@@ -919,11 +968,11 @@
% }
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \cs_prefix_spec:N }
-\cs_new:Npn \token_get_prefix_spec:N { \cs_prefix_spec:N }
+\cs_gset:Npn \token_get_prefix_spec:N { \cs_prefix_spec:N }
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \cs_argument_spec:N }
-\cs_new:Npn \token_get_arg_spec:N { \cs_argument_spec:N }
+\cs_gset:Npn \token_get_arg_spec:N { \cs_argument_spec:N }
\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \cs_replacement_spec:N }
-\cs_new:Npn \token_get_replacement_spec:N { \cs_replacement_spec:N }
+\cs_gset:Npn \token_get_replacement_spec:N { \cs_replacement_spec:N }
% \end{macrocode}
% \end{macro}
%
@@ -937,6 +986,10 @@
% \end{macro}
%
% \begin{macrocode}
+%</patches>
+% \end{macrocode}
+%
+% \begin{macrocode}
%</initex|package>
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 30270adf8a..6932483f93 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -79,7 +79,7 @@ and all files in that bundle must be distributed together.
%
% \title{The \cls{l3doc} class}
% \author{\Team}
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index fbb65b543d..0c0980060e 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index e63fb201c9..53f2a49d0d 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
index ab6ec3271b..ab72686865 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -1128,7 +1128,7 @@
\exp_after:wN { \exp:w \@@_eval_register:N #3 }
{#1} {#2}
}
-\cs_new:Npn \::v # 1\::: #2#3
+\cs_new:Npn \::v #1 \::: #2#3
{
\exp_after:wN \@@_arg_next:nnn
\exp_after:wN { \exp:w \@@_eval_register:c {#3} }
@@ -1400,99 +1400,13 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Definitions with the automated technique}
-% \label{sec:l3expan:gendef}
-%
-% Some of these could be done more efficiently, but the complexity of
-% coding then becomes an issue. Notice that the auto-generated functions
-% actually take no arguments themselves.
-%
% \begin{macro}{\exp_args:Nx}
% \begin{macrocode}
-\cs_new_protected:Npn \exp_args:Nx { \::x \::: }
+\cs_new_protected:Npn \exp_args:Nx #1#2
+ { \use:x { \exp_not:N #1 {#2} } }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]
-% {
-% \exp_args:Nnc, \exp_args:Nno, \exp_args:NnV, \exp_args:Nnv, \exp_args:Nne, \exp_args:Nnf,
-% \exp_args:Noc, \exp_args:Noo, \exp_args:Nof,
-% \exp_args:NVo, \exp_args:Nfo, \exp_args:Nff,
-% }
-% \begin{macro}
-% {
-% \exp_args:NNx, \exp_args:Ncx, \exp_args:Nnx,
-% \exp_args:Nox, \exp_args:Nxo, \exp_args:Nxx,
-% }
-% Here are the actual function definitions, using the helper functions
-% above.
-% \begin{macrocode}
-\cs_new:Npn \exp_args:Nnc { \::n \::c \::: }
-\cs_new:Npn \exp_args:Nno { \::n \::o \::: }
-\cs_new:Npn \exp_args:NnV { \::n \::V \::: }
-\cs_new:Npn \exp_args:Nnv { \::n \::v \::: }
-\cs_new:Npn \exp_args:Nne { \::n \::e \::: }
-\cs_new:Npn \exp_args:Nnf { \::n \::f \::: }
-\cs_new:Npn \exp_args:Noc { \::o \::c \::: }
-\cs_new:Npn \exp_args:Noo { \::o \::o \::: }
-\cs_new:Npn \exp_args:Nof { \::o \::f \::: }
-\cs_new:Npn \exp_args:NVo { \::V \::o \::: }
-\cs_new:Npn \exp_args:Nfo { \::f \::o \::: }
-\cs_new:Npn \exp_args:Nff { \::f \::f \::: }
-\cs_new_protected:Npn \exp_args:NNx { \::N \::x \::: }
-\cs_new_protected:Npn \exp_args:Ncx { \::c \::x \::: }
-\cs_new_protected:Npn \exp_args:Nnx { \::n \::x \::: }
-\cs_new_protected:Npn \exp_args:Nox { \::o \::x \::: }
-\cs_new_protected:Npn \exp_args:Nxo { \::x \::o \::: }
-\cs_new_protected:Npn \exp_args:Nxx { \::x \::x \::: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \exp_args:NNNv, \exp_args:NNcf,
-% \exp_args:NNno, \exp_args:NNnV, \exp_args:NNoo, \exp_args:NNVV,
-% \exp_args:Ncno, \exp_args:NcnV, \exp_args:Ncoo, \exp_args:NcVV,
-% \exp_args:Nnnc, \exp_args:Nnno, \exp_args:Nnnf, \exp_args:Nnff,
-% \exp_args:Nooo, \exp_args:Noof, \exp_args:Nffo,
-% }
-% \begin{macro}
-% {
-% \exp_args:NNNx, \exp_args:NNnx, \exp_args:NNox,
-% \exp_args:Nccx, \exp_args:Ncnx,
-% \exp_args:Nnnx, \exp_args:Nnox, \exp_args:Noox,
-% }
-% \begin{macrocode}
-\cs_new:Npn \exp_args:NNNv { \::N \::N \::v \::: }
-\cs_new:Npn \exp_args:NNcf { \::N \::c \::f \::: }
-\cs_new:Npn \exp_args:NNno { \::N \::n \::o \::: }
-\cs_new:Npn \exp_args:NNnV { \::N \::n \::V \::: }
-\cs_new:Npn \exp_args:NNoo { \::N \::o \::o \::: }
-\cs_new:Npn \exp_args:NNVV { \::N \::V \::V \::: }
-\cs_new:Npn \exp_args:Ncno { \::c \::n \::o \::: }
-\cs_new:Npn \exp_args:NcnV { \::c \::n \::V \::: }
-\cs_new:Npn \exp_args:Ncoo { \::c \::o \::o \::: }
-\cs_new:Npn \exp_args:NcVV { \::c \::V \::V \::: }
-\cs_new:Npn \exp_args:Nnnc { \::n \::n \::c \::: }
-\cs_new:Npn \exp_args:Nnno { \::n \::n \::o \::: }
-\cs_new:Npn \exp_args:Nnnf { \::n \::n \::f \::: }
-\cs_new:Npn \exp_args:Nnff { \::n \::f \::f \::: }
-\cs_new:Npn \exp_args:Nooo { \::o \::o \::o \::: }
-\cs_new:Npn \exp_args:Noof { \::o \::o \::f \::: }
-\cs_new:Npn \exp_args:Nffo { \::f \::f \::o \::: }
-\cs_new_protected:Npn \exp_args:NNNx { \::N \::N \::x \::: }
-\cs_new_protected:Npn \exp_args:NNnx { \::N \::n \::x \::: }
-\cs_new_protected:Npn \exp_args:NNox { \::N \::o \::x \::: }
-\cs_new_protected:Npn \exp_args:Nnnx { \::n \::n \::x \::: }
-\cs_new_protected:Npn \exp_args:Nnox { \::n \::o \::x \::: }
-\cs_new_protected:Npn \exp_args:Nccx { \::c \::c \::x \::: }
-\cs_new_protected:Npn \exp_args:Ncnx { \::c \::n \::x \::: }
-\cs_new_protected:Npn \exp_args:Noox { \::o \::o \::x \::: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
% \subsection{Last-unbraced versions}
%
% \begin{macro}[EXP]{\@@_arg_last_unbraced:nn}
@@ -2263,7 +2177,6 @@
% iterate through the comma list of variant argument specifiers, which
% we first convert to a string: the reason is explained later.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_cs_exist:N #1 } { }
\cs_new_protected:Npn \cs_generate_variant:Nn #1#2
{
\@@_generate_variant:N #1
@@ -2598,9 +2511,9 @@
% \begin{macrocode}
\cs_new:Npn \@@_generate_variant_same:N #1
{
- \if:w N #1 N \else:
- \if:w p #1 p \else:
- n
+ \if:w N #1 #1 \else:
+ \if:w p #1 #1 \else:
+ \token_to_str:N n
\if:w n #1 \else:
\@@_generate_variant_loop_special:NNwNNnn #1#1
\fi:
@@ -2618,18 +2531,6 @@
% \cs{cs_new_protected:Npx}. Then define the variant by
% combining the |\exp_args:N #3| variant and the base function.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- {
- \cs_if_free:NF #4
- {
- \__kernel_debug_log:x
- {
- Variant~\token_to_str:N #4~%
- already~defined;~ not~ changing~ it~ \msg_line_context:
- }
- }
- }
- { }
\cs_new_protected:Npn \@@_generate_variant:wwNN
#1 \q_mark #2 \q_stop #3#4
{
@@ -2646,38 +2547,129 @@
% \end{macro}
%
% \begin{macro}{\@@_generate_internal_variant:n}
-% \begin{macro}{\@@_generate_internal_variant:wwnw}
% \begin{macro}[rEXP]{\@@_generate_internal_variant_loop:n}
-% Test if |\exp_args:N #1| is already defined and if not define it via
-% the |\::| commands using the chars in |#1|. If |#1| contains an |x|
-% (this is the place where having converted the original comma-list
-% argument to a string is very important), the result should be
-% protected, and the next variant to be defined using that internal
-% variant should be protected.
+% First test for the presence of |x| (this is where working with
+% strings makes our lives easier), as the result should be protected,
+% and the next variant to be defined using that internal variant
+% should be protected (done by setting \cs{@@_tmp:w}). Then call
+% \cs{@@_generate_internal_variant:NNn} with arguments
+% \cs{cs_new_protected:cpn} \cs{use:x} (for protected) or
+% \cs{cs_new:cpn} \cs{tex_expanded:D} (expandable) and the signature. If |p|
+% appears in the signature, or if the function to be defined is
+% expandable and the primitive \tn{expanded} is not available, call
+% some fall-back code that just puts the appropriate |\::| commands.
+% Otherwise, call \cs{@@_generate_internal_one_go:NNn} to construct
+% the \cs[no-index]{exp_args:N\dots} function as a macro taking up to
+% $9$~arguments and expanding them using \cs{use:x} or \cs{tex_expanded:D}.
% \begin{macrocode}
\cs_new_protected:Npx \@@_generate_internal_variant:n #1
{
- \exp_not:N \@@_generate_internal_variant:wwnNwnn
+ \exp_not:N \@@_generate_internal_variant:wwnNwn
#1 \exp_not:N \q_mark
{ \cs_set_eq:NN \exp_not:N \@@_tmp:w \cs_new_protected:Npx }
- \cs_new_protected:cpx
+ \cs_new_protected:cpn
+ \use:x
\token_to_str:N x \exp_not:N \q_mark
{ }
- \cs_new:cpx
+ \cs_new:cpn
+ \exp_not:N \tex_expanded:D
\exp_not:N \q_stop
- { exp_args:N #1 }
- {
- \exp_not:N \@@_generate_internal_variant_loop:n #1
- { : \exp_not:N \use_i:nn }
- }
+ {#1}
}
\exp_last_unbraced:NNNNo
- \cs_new_protected:Npn \@@_generate_internal_variant:wwnNwnn #1
- { \token_to_str:N x } #2 \q_mark #3#4#5 \q_stop #6#7
+ \cs_new_protected:Npn \@@_generate_internal_variant:wwnNwn #1
+ { \token_to_str:N x } #2 \q_mark #3#4#5#6 \q_stop #7
{
#3
- \cs_if_free:cT {#6} { #4 {#6} {#7} }
+ \cs_if_free:cT { exp_args:N #7 }
+ { \@@_generate_internal_variant:NNn #4 #5 {#7} }
}
+\cs_set_protected:Npn \@@_tmp:w #1
+ {
+ \cs_new_protected:Npn \@@_generate_internal_variant:NNn ##1##2##3
+ {
+ \@@_generate_internal_test:Nw ##2 ##3
+ \q_mark
+ {
+ \use:x
+ {
+ ##1 { exp_args:N ##3 }
+ { \@@_generate_internal_variant_loop:n ##3 { : \use_i:nn } }
+ }
+ }
+ #1
+ \q_mark
+ { \exp_not:n { \@@_generate_internal_one_go:NNn ##1 ##2 {##3} } }
+ \q_stop
+ }
+ \cs_new_protected:Npn \@@_generate_internal_test_aux:w
+ ##1 #1 ##2 \q_mark ##3 ##4 \q_stop {##3}
+ \cs_if_exist:NTF \tex_expanded:D
+ {
+ \cs_new_eq:NN \@@_generate_internal_test:Nw
+ \@@_generate_internal_test_aux:w
+ }
+ {
+ \cs_new_protected:Npn \@@_generate_internal_test:Nw ##1
+ {
+ \if_meaning:w \tex_expanded:D ##1
+ \exp_after:wN \@@_generate_internal_test_aux:w
+ \exp_after:wN #1
+ \else:
+ \exp_after:wN \@@_generate_internal_test_aux:w
+ \fi:
+ }
+ }
+ }
+\exp_args:No \@@_tmp:w { \token_to_str:N p }
+\cs_new_protected:Npn \@@_generate_internal_one_go:NNn #1#2#3
+ {
+ \@@_generate_internal_loop:nwnnw
+ { \exp_not:N ##1 } 1 . { } { }
+ #3 { ? \@@_generate_internal_end:w } X ;
+ 23456789 { ? \@@_generate_internal_long:w } ;
+ #1 #2 {#3}
+ }
+\cs_new_protected:Npn \@@_generate_internal_loop:nwnnw #1#2 . #3#4#5#6 ; #7
+ {
+ \use_none:n #5
+ \use_none:n #7
+ \cs_if_exist_use:cF { @@_generate_internal_#5:NN }
+ { \@@_generate_internal_other:NN }
+ #5 #7
+ #7 .
+ { #3 #1 } { #4 ## #2 }
+ #6 ;
+ }
+\cs_new_protected:Npn \@@_generate_internal_N:NN #1#2
+ { \@@_generate_internal_loop:nwnnw { \exp_not:N ###2 } }
+\cs_new_protected:Npn \@@_generate_internal_c:NN #1#2
+ { \exp_args:No \@@_generate_internal_loop:nwnnw { \exp_not:c {###2} } }
+\cs_new_protected:Npn \@@_generate_internal_n:NN #1#2
+ { \@@_generate_internal_loop:nwnnw { { \exp_not:n {###2} } } }
+\cs_new_protected:Npn \@@_generate_internal_x:NN #1#2
+ { \@@_generate_internal_loop:nwnnw { {###2} } }
+\cs_new_protected:Npn \@@_generate_internal_other:NN #1#2
+ {
+ \exp_args:No \@@_generate_internal_loop:nwnnw
+ {
+ \exp_after:wN
+ {
+ \exp:w \exp_args:NNc \exp_after:wN \exp_end:
+ { exp_not:#1 } {###2}
+ }
+ }
+ }
+\cs_new_protected:Npn \@@_generate_internal_end:w #1 . #2#3#4 ; #5 ; #6#7#8
+ { #6 { exp_args:N #8 } #3 { #7 {#2} } }
+\cs_new_protected:Npn \@@_generate_internal_long:w #1 N #2#3 . #4#5#6#
+ {
+ \exp_args:Nx \@@_generate_internal_long:nnnNNn
+ { \@@_generate_internal_variant_loop:n #2 #6 { : \use_i:nn } }
+ {#4} {#5}
+ }
+\cs_new:Npn \@@_generate_internal_long:nnnNNn #1#2#3#4 ; ; #5#6#7
+ { #5 { exp_args:N #7 } #3 { #6 { \exp_not:n {#1} {#2} } } }
% \end{macrocode}
% This command grabs char by char outputting |\::#1| (not expanded
% further). We avoid tests by putting a trailing |: \use_i:nn|, which
@@ -2693,7 +2685,6 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \begin{macro}
% {
@@ -2756,15 +2747,12 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\exp_args_generate:n, \@@_args_generate:Nn}
-% \begin{macro}[EXP]{\@@_args_generate:n}
+% \begin{macro}{\exp_args_generate:n}
% This function is not used in the kernel hence we can use functions
% that are defined in later modules. It also does not need to be fast
% so use inline mappings. For each requested variant we check that
% there are no characters besides |NnpcofVvx|, in particular that
-% there are no spaces. Then we loop through the variant specifier and
-% convert each letter to \cs[no-index]{::\meta{variant letter}}, with a
-% trailing \cs{:::}.
+% there are no spaces. Then we just call the internal function.
% \begin{macrocode}
\cs_new_protected:Npn \exp_args_generate:n #1
{
@@ -2776,21 +2764,105 @@
{
\__kernel_msg_error:nnnn { kernel } { invalid-exp-args }
{####1} {##1}
- \str_map_break:n { \use_none:nnnn }
+ \str_map_break:n { \use_none:nn }
}
}
- \exp_args:Nc \@@_args_generate:Nn { exp_args:N ##1 } {##1}
+ \@@_generate_internal_variant:n {##1}
}
}
-\cs_new_protected:Npn \@@_args_generate:Nn #1#2
- {
- \cs_if_exist:NF #1
- {
- \str_if_in:nnTF {#2} { x } { \cs_new_protected:Npx } { \cs_new:Npx }
- #1 { \tl_map_function:nN { #2 : } \@@_args_generate:n }
- }
- }
-\cs_new:Npn \@@_args_generate:n #1 { \exp_not:c { :: #1 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Definitions with the automated technique}
+% \label{sec:l3expan:gendef}
+%
+% Some of these could be done more efficiently, but the complexity of
+% coding then becomes an issue. Notice that the auto-generated functions
+% actually take no arguments themselves.
+%
+% \begin{macro}[EXP]
+% {
+% \exp_args:Nnc, \exp_args:Nno, \exp_args:NnV, \exp_args:Nnv, \exp_args:Nne, \exp_args:Nnf,
+% \exp_args:Noc, \exp_args:Noo, \exp_args:Nof,
+% \exp_args:NVo, \exp_args:Nfo, \exp_args:Nff,
+% }
+% \begin{macro}
+% {
+% \exp_args:NNx, \exp_args:Ncx, \exp_args:Nnx,
+% \exp_args:Nox, \exp_args:Nxo, \exp_args:Nxx,
+% }
+% Here are the actual function definitions, using the helper
+% functions above. The group is used because
+% \cs{@@_generate_internal_variant:n} redefines \cs{@@_tmp:w} locally.
+% \begin{macrocode}
+\cs_set_protected:Npn \@@_tmp:w #1
+ {
+ \group_begin:
+ \exp_args:No \@@_generate_internal_variant:n
+ { \tl_to_str:n {#1} }
+ \group_end:
+ }
+\@@_tmp:w { nc }
+\@@_tmp:w { no }
+\@@_tmp:w { nV }
+\@@_tmp:w { nv }
+\@@_tmp:w { ne }
+\@@_tmp:w { nf }
+\@@_tmp:w { oc }
+\@@_tmp:w { oo }
+\@@_tmp:w { of }
+\@@_tmp:w { Vo }
+\@@_tmp:w { fo }
+\@@_tmp:w { ff }
+\@@_tmp:w { Nx }
+\@@_tmp:w { cx }
+\@@_tmp:w { nx }
+\@@_tmp:w { ox }
+\@@_tmp:w { xo }
+\@@_tmp:w { xx }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP]
+% {
+% \exp_args:NNcf,
+% \exp_args:NNno, \exp_args:NNnV, \exp_args:NNoo, \exp_args:NNVV,
+% \exp_args:Ncno, \exp_args:NcnV, \exp_args:Ncoo, \exp_args:NcVV,
+% \exp_args:Nnnc, \exp_args:Nnno, \exp_args:Nnnf, \exp_args:Nnff,
+% \exp_args:Nooo, \exp_args:Noof, \exp_args:Nffo,
+% }
+% \begin{macro}
+% {
+% \exp_args:NNNx, \exp_args:NNnx, \exp_args:NNox,
+% \exp_args:Nccx, \exp_args:Ncnx,
+% \exp_args:Nnnx, \exp_args:Nnox, \exp_args:Noox,
+% }
+% \begin{macrocode}
+\@@_tmp:w { Ncf }
+\@@_tmp:w { Nno }
+\@@_tmp:w { NnV }
+\@@_tmp:w { Noo }
+\@@_tmp:w { NVV }
+\@@_tmp:w { cno }
+\@@_tmp:w { cnV }
+\@@_tmp:w { coo }
+\@@_tmp:w { cVV }
+\@@_tmp:w { nnc }
+\@@_tmp:w { nno }
+\@@_tmp:w { nnf }
+\@@_tmp:w { nff }
+\@@_tmp:w { ooo }
+\@@_tmp:w { oof }
+\@@_tmp:w { ffo }
+\@@_tmp:w { NNx }
+\@@_tmp:w { Nnx }
+\@@_tmp:w { Nox }
+\@@_tmp:w { nnx }
+\@@_tmp:w { nox }
+\@@_tmp:w { ccx }
+\@@_tmp:w { cnx }
+\@@_tmp:w { oox }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index c40f61acbd..cea19957df 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -271,6 +271,40 @@
% ignores any trailing new-line marker from the file it reads.
% \end{function}
%
+% \begin{function}[added = 2019-01-13]{\ior_map_variable:NNn}
+% \begin{syntax}
+% \cs{ior_map_variable:NNn} \meta{stream} \meta{tl~var} \Arg{code}
+% \end{syntax}
+% For each set of \meta{lines} obtained by calling \cs{ior_get:NN}
+% until reaching the end of the file, stores the \meta{lines} in the
+% \meta{tl~var} then applies the \meta{code}. The \meta{code} will
+% usually make use of the \meta{variable}, but this is not enforced.
+% The assignments to the \meta{variable} are local.
+% Its value after the loop is the last set of \meta{lines}, or its
+% original value if the \meta{stream} is empty. \TeX{} ignores
+% any trailing new-line marker from the file it reads.
+% This function is typically faster than \cs{ior_map_inline:Nn}.
+% \end{function}
+%
+% \begin{function}[added = 2019-01-13]{\ior_str_map_variable:NNn}
+% \begin{syntax}
+% \cs{ior_str_map_variable:NNn} \meta{stream} \meta{variable} \Arg{code}
+% \end{syntax}
+% For each \meta{line} in the \meta{stream}, stores the \meta{line} in
+% the \meta{variable} then applies the \meta{code}. The material is
+% read from the \meta{stream} as a series of tokens with category code
+% $12$ (other), with the exception of space characters which are given
+% category code $10$ (space). The \meta{code} will usually make use
+% of the \meta{variable}, but this is not enforced. The assignments
+% to the \meta{variable} are local. Its value after the loop is the
+% last \meta{line}, or its original value if the \meta{stream} is
+% empty. Note that \TeX{} removes trailing
+% space and tab characters (character codes 32 and 9) from every line
+% upon input. \TeX{} also ignores any trailing new-line marker from
+% the file it reads.
+% This function is typically faster than \cs{ior_str_map_inline:Nn}.
+% \end{function}
+%
% \begin{function}[added = 2012-06-29]{\ior_map_break:}
% \begin{syntax}
% \cs{ior_map_break:}
@@ -735,6 +769,28 @@
% This is not available in older versions of \XeTeX{}.
% \end{function}
%
+% \begin{function}[added = 2019-05-13, updated = 2019-09-20, pTF, EXP]
+% {\file_compare_timestamp:nNn}
+% \begin{syntax}
+% \cs{file_compare_timestamp:nNn} \Arg{file-1} \meta{comparator} \Arg{file-2} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Compares the file stamps on the two \meta{files} as indicated by
+% the \meta{comparator}, and inserts either the \meta{true code}
+% or \meta{false case} as required. A file which is not found
+% is treated as older than any file which is found. This allows for
+% example the construct
+% \begin{verbatim}
+% \file_compare_timestamp:nNnT { source-file } > { derived-file }
+% {
+% % Code to regenerate derived file
+% }
+% \end{verbatim}
+% to work when the derived file is entirely absent. The timestamp
+% of two absent files is regarded as different.
+% This is not available in older versions of \XeTeX{}.
+% \end{function}
+%
+%
% \begin{function}[updated = 2017-06-26]{\file_input:n}
% \begin{syntax}
% \cs{file_input:n} \Arg{file name}
@@ -2815,6 +2871,106 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}[EXP]{\@@_str_cmp:nn}
+% \begin{macro}[EXP]{\@@_str_escape:n}
+% As we are doing a fixed-length \enquote{big} integer comparison, it
+% is easiest to use the low-level behavior of string comparisons.
+% \begin{macrocode}
+\cs_new:Npn \@@_str_cmp:nn #1#2 { \tex_strcmp:D {#1} {#2} }
+\sys_if_engine_luatex:T
+ {
+ \cs_set:Npn \@@_str_cmp:nn #1#2
+ {
+ \lua_now:e
+ {
+ l3kernel.strcmp
+ (
+ " \@@_str_escape:n {#1}",
+ " \@@_str_escape:n {#2}"
+ )
+ }
+ }
+ \cs_new:Npn \@@_str_escape:n #1
+ {
+ \lua_escape:e
+ { \__kernel_tl_to_str:w \use:e { {#1} } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP, pTF]{\file_compare_timestamp:nNn}
+% \begin{macro}[EXP]{\@@_compare_timestamp:nnN}
+% \begin{macro}[EXP]{\@@_timestamp:n}
+% Comparison of file date can be done by using the low-level nature of the
+% string comparison functions.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \file_compare_timestamp:nNn #1#2#3
+ { p , T , F , TF }
+ {
+ \exp_args:Nee \@@_compare_timestamp:nnN
+ { \file_full_name:n {#1} }
+ { \file_full_name:n {#3} }
+ #2
+ }
+\cs_new:Npn \@@_compare_timestamp:nnN #1#2#3
+ {
+ \tl_if_blank:nTF {#1}
+ {
+ \if_charcode:w #3 <
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+ {
+ \tl_if_blank:nTF {#2}
+ {
+ \if_charcode:w #3 >
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+ {
+ \if_int_compare:w
+ \@@_str_cmp:nn
+ { \@@_timestamp:n {#1} }
+ { \@@_timestamp:n {#2} }
+ #3 0 \exp_stop_f:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+ }
+ }
+\sys_if_engine_luatex:TF
+ {
+ \cs_new:Npn \@@_timestamp:n #1
+ {
+ \lua_now:e
+ { l3kernel.filemoddate ( " \lua_escape:e {#1} " ) }
+ }
+ }
+ { \cs_new_eq:NN \@@_timestamp:n \tex_filemoddate:D }
+\cs_if_exist:NF \tex_filemoddate:D
+ {
+ \prg_set_conditional:Npnn \file_compare_timestamp:nNn #1#2#3
+ { p , T , F , TF }
+ {
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { primitive-not-available }
+ { \(pdf)filemoddate }
+ \prg_return_false:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}[TF]{\file_if_exist:n}
% The test for the existence of a file is a wrapper around the function to
% add a path to a file. If the file was found, the path contains
@@ -3164,6 +3320,50 @@
}
% \end{macrocode}
%
+% \subsection{Functions delayed from earlier modules}
+%
+%<@@=sys>
+%
+% \begin{variable}{\c_sys_platform_str}
+% Detecting the platform on \LuaTeX{} is easy: for other engines, we use
+% the fact that the two common cases have special null files. It is possible
+% to probe further (see package \pkg{platform}), but that requires shell
+% escape and seems unlikely to be useful. This is set up here as it requires
+% file searching.
+% \begin{macrocode}
+\sys_if_engine_luatex:TF
+ {
+ \str_const:Nx \c_sys_platform_str
+ { \tex_directlua:D { tex.print(os.type) } }
+ }
+ {
+ \file_if_exist:nTF { nul: }
+ {
+ \file_if_exist:nF { /dev/null }
+ { \str_const:Nn \c_sys_platform_str { windows } }
+ }
+ {
+ \file_if_exist:nT { /dev/null }
+ { \str_const:Nn \c_sys_platform_str { unix } }
+ }
+ }
+\cs_if_exist:NF \c_sys_platform_str
+ { \str_const:Nn \c_sys_platform_str { unknown } }
+% \end{macrocode}
+% \end{variable}
+% \begin{macro}[pTF]{\sys_if_platform_unix:}
+% \begin{macro}[pTF]{\sys_if_platform_windows:}
+% We can now set up the tests.
+% \begin{macrocode}
+\clist_map_inline:nn { unix , windows }
+ {
+ \@@_const:nn { sys_if_platform_ #1 }
+ { \str_if_eq_p:Vn \c_sys_platform_str { #1 } }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3final.dtx b/macros/latex/contrib/l3kernel/l3final.dtx
index 4519a4639b..21534789e3 100644
--- a/macros/latex/contrib/l3kernel/l3final.dtx
+++ b/macros/latex/contrib/l3kernel/l3final.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index 90e5a012bc..6f86d193c1 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -198,8 +198,6 @@
% When the option \texttt{check-declarations} is used, check for the
% function defined by \cs{flag_new:n}.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- { \exp_args:Nc \__kernel_chk_var_exist:N { flag~#1 } } { }
\cs_new_protected:Npn \flag_clear:n #1 { \@@_clear:wn 0 ; {#1} }
\cs_new_protected:Npn \@@_clear:wn #1 ; #2
{
@@ -244,29 +242,6 @@
%
% \subsection{Expandable flag commands}
%
-% \begin{macro}[EXP]{\@@_chk_exist:n}
-% Analogue of \cs{__kernel_chk_var_exist:N} for flags, and with an
-% expandable error. We need to add checks by hand because flags are
-% not implemented in terms of other variables. Not all functions need
-% to be patched since some are defined in terms of others.
-% \begin{macrocode}
-%<*package>
-\__kernel_if_debug:TF
- {
- \cs_new:Npn \@@_chk_exist:n #1
- {
- \flag_if_exist:nF {#1}
- {
- \__kernel_msg_expandable_error:nnn
- { kernel } { bad-variable } { flag~#1~ }
- }
- }
- }
- { }
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}[EXP, pTF]{\flag_if_exist:n}
% A flag exist if the corresponding trap \cs[no-index]{flag \meta{flag
% name}:n} is defined.
@@ -282,7 +257,6 @@
% \begin{macro}[EXP, pTF]{\flag_if_raised:n}
% Test if the flag has a non-zero height, by checking the |0| control sequence.
% \begin{macrocode}
-\__kernel_patch_conditional:nNNpnn { \@@_chk_exist:n {#1} }
\prg_new_conditional:Npnn \flag_if_raised:n #1 { p , T , F , TF }
{
\if_cs_exist:w flag~#1~0 \cs_end:
@@ -299,7 +273,6 @@
% Extract the value of the flag by going through all of the
% control sequences starting from |0|.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \@@_chk_exist:n {#1} } { }
\cs_new:Npn \flag_height:n #1 { \@@_height_loop:wn 0; {#1} }
\cs_new:Npn \@@_height_loop:wn #1 ; #2
{
diff --git a/macros/latex/contrib/l3kernel/l3format.ins b/macros/latex/contrib/l3kernel/l3format.ins
index 35279ca592..bdc5516701 100644
--- a/macros/latex/contrib/l3kernel/l3format.ins
+++ b/macros/latex/contrib/l3kernel/l3format.ins
@@ -105,7 +105,7 @@ and all files in that bundle must be distributed together.
\from{l3luatex.dtx} {initex,tex}
\from{l3unicode.dtx} {initex}
\from{l3candidates.dtx} {initex}
- \from{l3deprecation.dtx}{initex}
+ \from{l3deprecation.dtx}{initex,kernel}
% ======== FORMAT ONLY =========
\from{l3final.dtx} {initex}
% ==============================
@@ -131,6 +131,9 @@ and all files in that bundle must be distributed together.
\file{l3str-enc-iso885916.def} {\from{l3str-convert.dtx}{iso885916}}%
}
+\generate{\file{l3debug.def}{\from{l3debug.dtx}{initex}}}
+\generate{\file{l3deprecation.def}{\from{l3deprecation.dtx}{initex,patches}}}
+
\generate{\file{l3docstrip.tex}{\from{l3docstrip.dtx}{program}}}
% Lua code (currently identical to the package-mode version)
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index 93ea9dedc8..6f65566c3e 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index 3402c4ed9b..a7cc9a2e95 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index 1d88df6736..03d127cc24 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index dfd052b843..cdf2868c81 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -499,7 +499,6 @@
% performed by \cs{@@_mul_npos_o:Nww}, and cancelled by
% \cs{prg_do_nothing:} here.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn { { (#1) } }
\cs_new:Npn \dim_to_fp:n #1
{
\exp_after:wN \@@_from_dim_test:ww
@@ -550,6 +549,16 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\fp_sign:n}
+% Trivial but useful. See the implementation of \cs{fp_add:Nn} for an
+% explanation of why to use \cs{@@_parse:n}, namely, for better error
+% reporting.
+% \begin{macrocode}
+\cs_new:Npn \fp_sign:n #1
+ { \fp_to_decimal:n { sign \@@_parse:n {#1} } }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[EXP]{\fp_abs:n}
% Trivial but useful. See the implementation of \cs{fp_add:Nn} for an
% explanation of why to use \cs{@@_parse:n}, namely, for better error
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index 81bb592dc0..eb764de3b8 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index a8e2dffa12..b716765b48 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index 9b63aec53b..7414c7d31c 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index aed0a3ada2..71258ad48c 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index 069b0cf360..64dc995c04 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index 9437f8e399..1ef386ad6e 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index 91b645d0ae..7e0cf605ee 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index 8927ab8978..f490649563 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index fe50141119..4c0451d726 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -72,7 +72,7 @@
% negation $\mathop{!}x$, conjunction
% $x\mathop{\&\&}y$, disjunction $x\mathop{\vert\vert}y$, ternary
% operator $x\mathop{?}y\mathop{:}z$.
-% \item Exponentials: $\exp x$, $\ln x$, $x^y$.
+% \item Exponentials: $\exp x$, $\ln x$, $x^y$, $\operatorname{logb} x$.
% \item Integer factorial: $\operatorname{fact} x$.
% \item Trigonometry: $\sin x$, $\cos x$, $\tan x$, $\cot x$, $\sec
% x$, $\csc x$ expecting their arguments in radians, and
@@ -260,6 +260,18 @@
% This function is identical to \cs{fp_to_decimal:n}.
% \end{function}
%
+% \begin{function}[EXP, added = 2018-11-03]{\fp_sign:n}
+% \begin{syntax}
+% \cs{fp_sign:n} \Arg{fpexpr}
+% \end{syntax}
+% Evaluates the \meta{fpexpr} and leaves its sign in the input stream
+% using \cs{fp_eval:n} |{sign(|\meta{result}|)}|: $+1$ for positive
+% numbers and for $+\infty$, $-1$ for negative numbers and for
+% $-\infty$, $\pm 0$ for $\pm 0$. If the operand is a tuple or is
+% \nan{}, then \enquote{invalid operation} occurs and the result
+% is~$0$.
+% \end{function}
+%
% \begin{function}[EXP, added = 2012-05-08, updated = 2012-07-08]
% {\fp_to_decimal:N, \fp_to_decimal:c, \fp_to_decimal:n}
% \begin{syntax}
@@ -1065,6 +1077,19 @@
% operation} occurs.
% \end{function}
%
+% \begin{function}[EXP, added = 2018-11-03]{logb}
+% \begin{syntax}
+% \cs{fp_eval:n} \{ |logb(| \meta{fpexpr} |)| \}
+% \end{syntax}
+% Determines the exponent of the \meta{fpexpr}, namely the floor of
+% the base-$10$ logarithm of its absolute value. \enquote{Division by
+% zero} occurs when evaluating $\operatorname{logb}(\pm 0) = -\infty$.
+% Other special values are $\operatorname{logb}(\pm\infty)=+\infty$
+% and $\operatorname{logb}(\nan{})=\nan{}$. If the operand is a tuple
+% or is \nan{}, then \enquote{invalid operation} occurs and the result
+% is \nan{}.
+% \end{function}
+%
% \begin{function}[tested = m3fp-logic002]{max, min}
% \begin{syntax}
% \cs{fp_eval:n} \{ |max(| \meta{fpexpr_1} |,| \meta{fpexpr_2} |,| \ldots{} |)| \}
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index 6238ad6ddd..4dcf58decf 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -58,8 +58,55 @@
% close to that of \pkg{l3intarray}. The size of the array is fixed and
% must be given at point of initialisation
%
-% Currently \emph{all} functions in this module are candidates. Their
-% documentation can be found in \pkg{l3candidates}.
+% \begin{function}[added = 2018-05-05]{\fparray_new:Nn}
+% \begin{syntax}
+% \cs{fparray_new:Nn} \meta{fparray~var} \Arg{size}
+% \end{syntax}
+% Evaluates the integer expression \meta{size} and allocates an
+% \meta{floating point array variable} with that number of (zero)
+% entries. The variable name should start with |\g_| because
+% assignments are always global.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N}
+% \begin{syntax}
+% \cs{fparray_count:N} \meta{fparray~var}
+% \end{syntax}
+% Expands to the number of entries in the \meta{floating point array
+% variable}. This is performed in constant time.
+% \end{function}
+%
+% \begin{function}[added = 2018-05-05]{\fparray_gset:Nnn}
+% \begin{syntax}
+% \cs{fparray_gset:Nnn} \meta{fparray~var} \Arg{position} \Arg{value}
+% \end{syntax}
+% Stores the result of evaluating the floating point expression
+% \meta{value} into the \meta{floating point array variable} at the
+% (integer expression) \meta{position}. If the \meta{position} is not
+% between $1$ and the \cs{fparray_count:N}, an error occurs.
+% Assignments are always global.
+% \end{function}
+%
+% \begin{function}[added = 2018-05-05]{\fparray_gzero:N}
+% \begin{syntax}
+% \cs{fparray_gzero:N} \meta{fparray~var}
+% \end{syntax}
+% Sets all entries of the \meta{floating point array variable} to
+% $+0$. Assignments are always global.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2018-05-05]
+% {\fparray_item:Nn, \fparray_item_to_tl:Nn}
+% \begin{syntax}
+% \cs{fparray_item:Nn} \meta{fparray~var} \Arg{position}
+% \end{syntax}
+% Applies \cs{fp_use:N} or \cs{fp_to_tl:N} (respectively) to the
+% floating point entry stored at the (integer expression)
+% \meta{position} in the \meta{floating point array variable}. If the
+% \meta{position} is not between $1$ and the \cs{fparray_count:N}, an
+% error occurs.
+% \end{function}
+
%
% \end{documentation}
%
@@ -102,7 +149,8 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\fparray_new:Nn, \@@_array_new:nNNN}
+% \begin{macro}{\fparray_new:Nn, \fparray_new:cn}
+% \begin{macro}{\@@_array_new:nNNN}
% Build a three token token list, then define all three tokens to be
% integer arrays of the same size. No need to initialize the data:
% the integer arrays start with zeros, and three zeros denote
@@ -120,6 +168,7 @@
\exp_last_unbraced:Nfo \@@_array_new:nNNNN
{ \int_eval:n {#2} } #1 #1
}
+\cs_generate_variant:Nn \fparray_new:Nn { c }
\cs_new_protected:Npn \@@_array_new:nNNNN #1#2#3#4#5
{
\int_compare:nNnTF {#1} < 0
@@ -136,8 +185,9 @@
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}[EXP]{\fparray_count:N}
+% \begin{macro}[EXP]{\fparray_count:N, \fparray_count:c}
% Size of any of the intarrays, here we pick the third.
% \begin{macrocode}
\cs_new:Npn \fparray_count:N #1
@@ -145,6 +195,7 @@
\exp_after:wN \use_i:nnn
\exp_after:wN \intarray_count:N #1
}
+\cs_generate_variant:Nn \fparray_count:N { c }
% \end{macrocode}
% \end{macro}
%
@@ -178,9 +229,10 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\fparray_gset:Nnn, \fparray_gset:cnn}
% \begin{macro}
% {
-% \fparray_gset:Nnn, \@@_array_gset:NNNNww, \@@_array_gset:w,
+% \@@_array_gset:NNNNww, \@@_array_gset:w,
% \@@_array_gset_recover:Nw, \@@_array_gset_special:nnNNN,
% \@@_array_gset_normal:w
% }
@@ -196,6 +248,7 @@
\int_value:w \int_eval:n {#2} \exp_after:wN ;
\exp:w \exp_end_continue_f:w \@@_parse:n {#3}
}
+\cs_generate_variant:Nn \fparray_gset:Nnn { c }
\cs_new_protected:Npn \@@_array_gset:NNNNww #1#2#3#4#5 ; #6 ;
{
\@@_array_bounds:NNnTF \__kernel_msg_error:nnxxx #4 {#5}
@@ -239,8 +292,9 @@
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}{\fparray_gzero:N}
+% \begin{macro}{\fparray_gzero:N, \fparray_gzero:c}
% \begin{macrocode}
\cs_new_protected:Npn \fparray_gzero:N #1
{
@@ -254,13 +308,19 @@
#1
}
}
+\cs_generate_variant:Nn \fparray_gzero:N { c }
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[EXP]
% {
% \fparray_item:Nn,
+% \fparray_item:cn,
% \fparray_item_to_tl:Nn,
+% \fparray_item_to_tl:cn,
+% }
+% \begin{macro}[EXP]
+% {
% \@@_array_item:NwN,
% \@@_array_item:NNNnN,
% \@@_array_item:N,
@@ -276,6 +336,7 @@
\int_value:w \int_eval:n {#2} ;
\@@_to_decimal:w
}
+\cs_generate_variant:Nn \fparray_item:Nn { c }
\cs_new:Npn \fparray_item_to_tl:Nn #1#2
{
\exp_after:wN \@@_array_item:NwN
@@ -283,6 +344,7 @@
\int_value:w \int_eval:n {#2} ;
\@@_to_tl:w
}
+\cs_generate_variant:Nn \fparray_item_to_tl:Nn { c }
\cs_new:Npn \@@_array_item:NwN #1#2 ; #3
{
\@@_array_bounds:NNnTF \__kernel_msg_expandable_error:nnfff #1 {#2}
@@ -323,6 +385,7 @@
{ #9 \s_@@ \@@_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} ; }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macrocode}
%</initex|package>
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index 1cd7e62c93..042f4d656c 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -134,6 +134,14 @@
% since the digit~\texttt{9} is not part of the expression.
% \end{function}
%
+% \begin{function}[EXP, added = 2018-11-03]{\int_sign:n}
+% \begin{syntax}
+% \cs{int_sign:n} \Arg{intexpr}
+% \end{syntax}
+% Evaluates the \meta{integer expression} then leaves $1$ or $0$ or
+% $-1$ in the input stream according to the sign of the result.
+% \end{function}
+%
% \begin{function}[EXP, updated = 2012-09-26]{\int_abs:n}
% \begin{syntax}
% \cs{int_abs:n} \Arg{integer expression}
@@ -1053,8 +1061,6 @@
% or directly in the input stream.
% When debugging, use parentheses to catch early termination.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_eval:n } }
\cs_new:Npn \int_eval:n #1
{ \int_value:w \@@_eval:w #1 \@@_eval_end: }
\cs_new:Npn \int_eval:w { \int_value:w \@@_eval:w }
@@ -1062,6 +1068,31 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}[EXP]{\int_sign:n, \@@_sign:Nw}
+% See \cs{int_abs:n}. Evaluate the expression once (and when
+% debugging is enabled, check that the expression is well-formed),
+% then test the first character to determine the sign. This is
+% wrapped in \cs{int_value:w} \ldots{} \cs{exp_stop_f:} to ensure a
+% fixed number of expansions and to avoid dealing with closing the
+% conditionals.
+% \begin{macrocode}
+\cs_new:Npn \int_sign:n #1
+ {
+ \int_value:w \exp_after:wN \@@_sign:Nw
+ \int_value:w \@@_eval:w #1 \@@_eval_end: ;
+ \exp_stop_f:
+ }
+\cs_new:Npn \@@_sign:Nw #1#2 ;
+ {
+ \if_meaning:w 0 #1
+ 0
+ \else:
+ \if_meaning:w - #1 - \fi: 1
+ \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[EXP]{\int_abs:n}
% \begin{macro}[EXP]{\@@_abs:N}
% \UnitTested
@@ -1074,8 +1105,6 @@
% evaluation. The absolute value is obtained by removing a leading
% sign if any. All three functions expand in two steps.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_abs:n } }
\cs_new:Npn \int_abs:n #1
{
\int_value:w \exp_after:wN \@@_abs:N
@@ -1084,11 +1113,6 @@
}
\cs_new:Npn \@@_abs:N #1
{ \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
-\__kernel_patch_args:nNNpn
- {
- { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_max:nn }
- { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_max:nn }
- }
\cs_set:Npn \int_max:nn #1#2
{
\int_value:w \exp_after:wN \@@_maxmin:wwN
@@ -1097,11 +1121,6 @@
>
\exp_stop_f:
}
-\__kernel_patch_args:nNNpn
- {
- { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_min:nn }
- { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_min:nn }
- }
\cs_set:Npn \int_min:nn #1#2
{
\int_value:w \exp_after:wN \@@_maxmin:wwN
@@ -1146,11 +1165,6 @@
% truncating behaviour that we want. The details are thanks to Heiko
% Oberdiek: getting things right in all cases is not so easy.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- {
- { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_div_truncate:nn }
- { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_div_truncate:nn }
- }
\cs_new:Npn \int_div_truncate:nn #1#2
{
\int_value:w \@@_eval:w
@@ -1180,11 +1194,6 @@
% \end{macrocode}
% Finally there's the modulus operation.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- {
- { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_mod:nn }
- { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_mod:nn }
- }
\cs_new:Npn \int_mod:nn #1#2
{
\int_value:w \@@_eval:w \exp_after:wN \@@_mod:ww
@@ -1254,10 +1263,6 @@
% We cannot use \cs{int_gset:Nn} because (when |check-declarations| is
% enabled) this runs some checks that constants would fail.
% \begin{macrocode}
-\__kernel_patch_args:nnnNNpn
- { \__kernel_chk_var_scope:NN c #1 }
- { }
- { {#1} { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_const:Nn } }
\cs_new_protected:Npn \int_const:Nn #1#2
{
\int_compare:nNnTF {#2} < \c_zero_int
@@ -1303,9 +1308,7 @@
% \UnitTested
% Functions that reset an \meta{integer} register to zero.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \int_zero:N #1 { #1 = \c_zero_int }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \int_gzero:N #1 { \tex_global:D #1 = \c_zero_int }
\cs_generate_variant:Nn \int_zero:N { c }
\cs_generate_variant:Nn \int_gzero:N { c }
@@ -1335,10 +1338,8 @@
% another. Check that assigned integer is local/global. No need to
% check that the other one is defined as \TeX{} does it for us.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \int_set_eq:NN #1#2 { #1 = #2 }
\cs_generate_variant:Nn \int_set_eq:NN { c , Nc , cc }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \int_gset_eq:NN #1#2 { \tex_global:D #1 = #2 }
\cs_generate_variant:Nn \int_gset_eq:NN { c , Nc , cc }
% \end{macrocode}
@@ -1357,22 +1358,6 @@
%
% \subsection{Setting and incrementing integers}
%
-% Several functions here have a signature |:Nn| and are such that when
-% debugging, the first argument should be checked to be a local/global
-% variable and the second should be wrapped in code for an expression.
-% The temporary function \cs{@@_tmp:w} finds the name |#3| of the
-% function being redefined and writes the appropriate patch.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \__kernel_patch_args:nnnNNpn
- { #1 ##1 }
- { }
- { {##1} { \__kernel_chk_expr:nNnN {##2} \@@_eval:w { } #3 } }
- #2 #3
- }
-% \end{macrocode}
-%
% \begin{macro}{\int_add:Nn, \int_add:cn}
% \UnitTested
% \begin{macro}{\int_gadd:Nn, \int_gadd:cn}
@@ -1381,21 +1366,14 @@
% \UnitTested
% \begin{macro}{\int_gsub:Nn, \int_gsub:cn}
% \UnitTested
-% Adding and subtracting to and from a counter. For each function,
-% the debugging code produced by \cs{@@_tmp:w} checks that the
-% assigned variable is correctly local/global and wraps the
-% expression in some checking code.
+% Adding and subtracting to and from a counter.
% \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \int_add:Nn #1#2
{ \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: }
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \int_sub:Nn #1#2
{ \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \int_gadd:Nn #1#2
{ \tex_global:D \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \int_gsub:Nn #1#2
{ \tex_global:D \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: }
\cs_generate_variant:Nn \int_add:Nn { c }
@@ -1419,16 +1397,12 @@
% Incrementing and decrementing of integer registers is done with
% the following functions.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \int_incr:N #1
{ \tex_advance:D #1 \c_one_int }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \int_decr:N #1
{ \tex_advance:D #1 - \c_one_int }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \int_gincr:N #1
{ \tex_global:D \tex_advance:D #1 \c_one_int }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \int_gdecr:N #1
{ \tex_global:D \tex_advance:D #1 - \c_one_int }
\cs_generate_variant:Nn \int_incr:N { c }
@@ -1446,14 +1420,10 @@
% \begin{macro}{\int_gset:Nn, \int_gset:cn}
% \UnitTested
% As integers are register-based \TeX{} issues an error
-% if they are not defined. Thus there is no need to check their
-% existence as for token list variables. However, the code that
-% checks whether the assignment is local or global is still needed.
+% if they are not defined.
% \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \int_set:Nn #1#2
{ #1 ~ \@@_eval:w #2 \@@_eval_end: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \int_gset:Nn #1#2
{ \tex_global:D #1 ~ \@@_eval:w #2 \@@_eval_end: }
\cs_generate_variant:Nn \int_set:Nn { c }
@@ -1657,12 +1627,6 @@
% \UnitTested
% More efficient but less natural in typing.
% \begin{macrocode}
-\__kernel_patch_conditional_args:nNNpnn
- {
- { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_compare:nNn }
- { \@@_eval_end: #2 }
- { \__kernel_chk_expr:nNnN {#3} \@@_eval:w { } \int_compare:nNn }
- }
\prg_new_conditional:Npnn \int_compare:nNn #1#2#3 { p , T , F , TF }
{
\if_int_compare:w \@@_eval:w #1 #2 \@@_eval:w #3 \@@_eval_end:
@@ -1722,8 +1686,6 @@
% \UnitTested
% A predicate function.
% \begin{macrocode}
-\__kernel_patch_conditional_args:nNNpnn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_if_odd:n } }
\prg_new_conditional:Npnn \int_if_odd:n #1 { p , T , F , TF}
{
\if_int_odd:w \@@_eval:w #1 \@@_eval_end:
@@ -1732,8 +1694,6 @@
\prg_return_false:
\fi:
}
-\__kernel_patch_conditional_args:nNNpnn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_if_even:n } }
\prg_new_conditional:Npnn \int_if_even:n #1 { p , T , F , TF}
{
\reverse_if:N \if_int_odd:w \@@_eval:w #1 \@@_eval_end:
@@ -1851,21 +1811,6 @@
% step size of zero before checking the sign, but we optimize for the
% most frequent case (positive step).
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- {
- {
- \__kernel_chk_expr:nNnN {#1} \@@_eval:w { }
- \int_step_function:nnnN
- }
- {
- \__kernel_chk_expr:nNnN {#2} \@@_eval:w { }
- \int_step_function:nnnN
- }
- {
- \__kernel_chk_expr:nNnN {#3} \@@_eval:w { }
- \int_step_function:nnnN
- }
- }
\cs_new:Npn \int_step_function:nnnN #1#2#3
{
\exp_after:wN \@@_step:wwwN
@@ -2594,6 +2539,17 @@
% \end{variable}
% \end{variable}
%
+% \subsection{Integers for earlier modules}
+%
+%<@@=seq>
+%
+% \begin{variable}{\l_@@_internal_a_int, \l_@@_internal_b_int}
+% \begin{macrocode}
+\int_new:N \l_@@_internal_a_int
+\int_new:N \l_@@_internal_b_int
+% \end{macrocode}
+% \end{variable}
+%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index 7365c9e0b8..8b998f6e0e 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -66,7 +66,7 @@
% The use of \texttt{intarray} data is therefore recommended for cases where
% the need for fast access is of paramount importance.
%
-% \begin{function}[added = 2018-03-29]{\intarray_new:Nn}
+% \begin{function}[added = 2018-03-29]{\intarray_new:Nn, \intarray_new:cn}
% \begin{syntax}
% \cs{intarray_new:Nn} \meta{intarray~var} \Arg{size}
% \end{syntax}
@@ -76,7 +76,7 @@
% always global.
% \end{function}
%
-% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N}
+% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c}
% \begin{syntax}
% \cs{intarray_count:N} \meta{intarray~var}
% \end{syntax}
@@ -84,7 +84,7 @@
% Contrarily to \cs{seq_count:N} this is performed in constant time.
% \end{function}
%
-% \begin{function}[added = 2018-03-29]{\intarray_gset:Nnn}
+% \begin{function}[added = 2018-03-29]{\intarray_gset:Nnn, \intarray_gset:cnn}
% \begin{syntax}
% \cs{intarray_gset:Nnn} \meta{intarray~var} \Arg{position} \Arg{value}
% \end{syntax}
@@ -96,7 +96,18 @@
% global.
% \end{function}
%
-% \begin{function}[added = 2018-05-04]{\intarray_gzero:N}
+% \begin{function}[added = 2018-05-04]
+% {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
+% \begin{syntax}
+% \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{intexpr clist}
+% \end{syntax}
+% Creates a new constant \meta{integer array variable} or raises an
+% error if the name is already taken. The \meta{integer array
+% variable} is set (globally) to contain as its items the results of
+% evaluating each \meta{integer expression} in the \meta{comma list}.
+% \end{function}
+%
+% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c}
% \begin{syntax}
% \cs{intarray_gzero:N} \meta{intarray~var}
% \end{syntax}
@@ -104,7 +115,7 @@
% Assignments are always global.
% \end{function}
%
-% \begin{function}[EXP, added = 2018-03-29]{\intarray_item:Nn}
+% \begin{function}[EXP, added = 2018-03-29]{\intarray_item:Nn, \intarray_item:cn}
% \begin{syntax}
% \cs{intarray_item:Nn} \meta{intarray~var} \Arg{position}
% \end{syntax}
@@ -114,7 +125,8 @@
% error occurs.
% \end{function}
%
-% \begin{function}[EXP, added = 2018-05-05]{\intarray_rand_item:N}
+% \begin{function}[EXP, added = 2018-05-05]
+% {\intarray_rand_item:N, \intarray_rand_item:c}
% \begin{syntax}
% \cs{intarray_rand_item:N} \meta{intarray~var}
% \end{syntax}
@@ -122,6 +134,16 @@
% \meta{integer array} is empty, produce an error.
% \end{function}
%
+% \begin{function}[added = 2018-05-04]
+% {\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c}
+% \begin{syntax}
+% \cs{intarray_show:N} \meta{intarray~var}
+% \cs{intarray_log:N} \meta{intarray~var}
+% \end{syntax}
+% Displays the items in the \meta{integer array variable} in the
+% terminal or writes them in the log file.
+% \end{function}
+%
% \subsection{Implementation notes}
%
% It is a wrapper around the \tn{fontdimen} primitive, used to store
@@ -187,7 +209,8 @@
{ Size~of~array~may~not~be~negative:~#1 }
% \end{macrocode}
%
-% \begin{macro}{\intarray_new:Nn, \@@_new:N}
+% \begin{macro}{\intarray_new:Nn, \intarray_new:cn}
+% \begin{macro}{\@@_new:N}
% Declare |#1| to be a font (arbitrarily |cmr10| at a never-used
% size). Store the array's size as the \tn{hyphenchar} of that font
% and make sure enough \tn{fontdimen} are allocated, by setting the
@@ -207,7 +230,6 @@
\int_step_inline:nn { 8 }
{ \__kernel_intarray_gset:Nnn #1 {##1} \c_zero_int }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN g #1 } { }
\cs_new_protected:Npn \intarray_new:Nn #1#2
{
\@@_new:N #1
@@ -220,13 +242,16 @@
\int_compare:nNnT { \intarray_count:N #1 } > 0
{ \__kernel_intarray_gset:Nnn #1 { \intarray_count:N #1 } { 0 } }
}
+\cs_generate_variant:Nn \intarray_new:Nn { c }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}[EXP]{\intarray_count:N}
+% \begin{macro}[EXP]{\intarray_count:N, \intarray_count:c}
% Size of an array.
% \begin{macrocode}
\cs_new:Npn \intarray_count:N #1 { \int_value:w \@@_count:w #1 }
+\cs_generate_variant:Nn \intarray_count:N { c }
% \end{macrocode}
% \end{macro}
%
@@ -268,7 +293,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\intarray_gset:Nnn, \__kernel_intarray_gset:Nnn}
+% \begin{macro}{\intarray_gset:Nnn, \intarray_gset:cnn, \__kernel_intarray_gset:Nnn}
% \begin{macro}{\@@_gset:Nnn, \@@_gset_overflow:Nnn}
% Set the appropriate \tn{fontdimen}. The
% \cs{__kernel_intarray_gset:Nnn} function does not use
@@ -285,6 +310,7 @@
\int_value:w \int_eval:n {#2} \exp_after:wN ;
\int_value:w \int_eval:n {#3} ;
}
+\cs_generate_variant:Nn \intarray_gset:Nnn { c }
\cs_new_protected:Npn \@@_gset:Nww #1#2 ; #3 ;
{
\@@_bounds:NNnTF \__kernel_msg_error:nnxxx #1 {#2}
@@ -321,7 +347,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\intarray_gzero:N}
+% \begin{macro}{\intarray_gzero:N, \intarray_gzero:c}
% Set the appropriate \tn{fontdimen} to zero. No bound checking
% needed. The \cs{prg_replicate:nn} possibly uses quite a lot of
% memory, but this is somewhat comparable to the size of the array,
@@ -336,10 +362,11 @@
\@@_entry:w \l_@@_loop_int #1 \c_zero_dim
}
}
+\cs_generate_variant:Nn \intarray_gzero:N { c }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\intarray_item:Nn, \__kernel_intarray_item:Nn}
+% \begin{macro}[EXP]{\intarray_item:Nn, \intarray_item:cn, \__kernel_intarray_item:Nn}
% \begin{macro}{\@@_item:Nn}
% Get the appropriate \tn{fontdimen} and perform bound checks. The
% \cs{__kernel_intarray_item:Nn} function omits bound checks and omits
@@ -354,6 +381,7 @@
\exp_after:wN #1
\int_value:w \int_eval:n {#2} ;
}
+\cs_generate_variant:Nn \intarray_item:Nn { c }
\cs_new:Npn \@@_item:Nw #1#2 ;
{
\@@_bounds:NNnTF \__kernel_msg_expandable_error:nnfff #1 {#2}
@@ -364,21 +392,19 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\intarray_rand_item:N}
+% \begin{macro}{\intarray_rand_item:N, \intarray_rand_item:c}
% Importantly, \cs{intarray_item:Nn} only evaluates its argument once.
% \begin{macrocode}
\cs_new:Npn \intarray_rand_item:N #1
{ \intarray_item:Nn #1 { \int_rand:n { \intarray_count:N #1 } } }
+\cs_generate_variant:Nn \intarray_rand_item:N { c }
% \end{macrocode}
% \end{macro}
%
% \subsection{Working with contents of integer arrays}
%
-% At the time of writing these are candidates, but we need at least
-% \cs{intarray_const_from_clist:Nn} in \pkg{l3fp} so before
-% \pkg{l3candidates}.
-%
-% \begin{macro}{\intarray_const_from_clist:Nn, \@@_const_from_clist:nN}
+% \begin{macro}{\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
+% \begin{macro}{\@@_const_from_clist:nN}
% Similar to \cs{intarray_new:Nn} (which we don't use because when
% debugging is enabled that function checks the variable name starts
% with |g_|). We make use of the fact that \TeX{} allows allocation
@@ -388,7 +414,6 @@
% big, namely \cs{@@_gset_overflow_test:nw}, but not the code that
% checks bounds. At the end, set the size of the intarray.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN c #1 } { }
\cs_new_protected:Npn \intarray_const_from_clist:Nn #1#2
{
\@@_new:N #1
@@ -397,6 +422,7 @@
{ \exp_args:Nf \@@_const_from_clist:nN { \int_eval:n {##1} } #1 }
\@@_count:w #1 \l_@@_loop_int
}
+\cs_generate_variant:Nn \intarray_const_from_clist:Nn { c }
\cs_new_protected:Npn \@@_const_from_clist:nN #1#2
{
\int_incr:N \l_@@_loop_int
@@ -405,13 +431,16 @@
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}[rEXP]{\intarray_to_clist:N, \@@_to_clist:Nn, \@@_to_clist:w}
+% \begin{macro}[rEXP]{\intarray_to_clist:N, \intarray_to_clist:c}
+% \begin{macro}[rEXP]{\@@_to_clist:Nn, \@@_to_clist:w}
% Loop through the array, putting a comma before each item. Remove
% the leading comma with |f|-expansion. We also use the auxiliary in
% \cs{intarray_show:N} with argument comma, space.
% \begin{macrocode}
\cs_new:Npn \intarray_to_clist:N #1 { \@@_to_clist:Nn #1 { , } }
+\cs_generate_variant:Nn \intarray_to_clist:N { c }
\cs_new:Npn \@@_to_clist:Nn #1#2
{
\int_compare:nNnF { \intarray_count:N #1 } = \c_zero_int
@@ -431,8 +460,9 @@
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}{\intarray_show:N, \intarray_log:N}
+% \begin{macro}{\intarray_show:N, \intarray_show:c, \intarray_log:c, \intarray_log:N}
% Convert the list to a comma list (with spaces after each comma)
% \begin{macrocode}
\cs_new_protected:Npn \intarray_show:N { \@@_show:NN \msg_show:nnxxxx }
@@ -455,10 +485,10 @@
%
% \subsection{Random arrays}
%
+% \begin{macro}{\intarray_gset_rand:Nn, \intarray_gset_rand:cn}
+% \begin{macro}{\intarray_gset_rand:Nnn, \intarray_gset_rand:cnn}
% \begin{macro}
% {
-% \intarray_gset_rand:Nn,
-% \intarray_gset_rand:Nnn,
% \@@_gset_rand:Nnn,
% \@@_gset_rand:Nff,
% \@@_gset_rand_auxi:Nnnn,
@@ -479,6 +509,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \intarray_gset_rand:Nn #1
{ \intarray_gset_rand:Nnn #1 { 1 } }
+\cs_generate_variant:Nn \intarray_gset_rand:Nn { c }
\sys_if_rand_exist:TF
{
\cs_new_protected:Npn \intarray_gset_rand:Nnn #1#2#3
@@ -542,8 +573,11 @@
{ \intarray_gset_rand:Nnn #1 {#2} {#3} }
}
}
+\cs_generate_variant:Nn \intarray_gset_rand:Nnn { c }
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macrocode}
%</initex|package>
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index 507546fa2d..e5b0ce80cd 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -90,43 +90,6 @@
% purposes.
% \end{function}
%
-% \begin{function}{\__kernel_chk_var_exist:N}
-% \begin{syntax}
-% \cs{__kernel_chk_var_exist:N} \meta{var}
-% \end{syntax}
-% This function is only created if debugging is enabled. It checks
-% that \meta{var} is defined according to the criteria for
-% \cs{cs_if_exist_p:N}, and if not raises a kernel-level error.
-% \end{function}
-%
-% \begin{function}{\__kernel_chk_var_scope:NN}
-% \begin{syntax}
-% \cs{__kernel_chk_var_scope:NN} \meta{scope} \meta{var}
-% \end{syntax}
-% Checks the \meta{var} has the correct \meta{scope}, and if not
-% raises a kernel-level error. This function is only created if
-% debugging is enabled. The \meta{scope} is a single letter |l|, |g|,
-% |c| denoting local variables, global variables, or constants. More
-% precisely, if the variable name starts with a letter and an
-% underscore (normal \pkg{expl3} convention) the function checks that
-% this single letter matches the \meta{scope}. Otherwise the function
-% cannot know the scope \meta{var} the first time: instead, it defines
-% |\__debug_chk_/|\meta{var name} to store that information for the
-% next call. Thus, if a given \meta{var} is subject to assignments of
-% different scopes a kernel error will result.
-% \end{function}
-%
-% \begin{function}{\__kernel_chk_var_local:N, \__kernel_chk_var_global:N}
-% \begin{syntax}
-% \cs{__kernel_chk_var_local:N} \meta{var}
-% \cs{__kernel_chk_var_global:N} \meta{var}
-% \end{syntax}
-% Applies \cs{__kernel_chk_var_exist:N} \meta{var}, and assuming that is
-% true applies
-% \cs{__kernel_chk_var_scope:NN} \meta{scope} \meta{var}, where
-% \meta{scope} is |l| or~|g|.
-% \end{function}
-%
% \begin{function}{\__kernel_cs_parm_from_arg_count:nnF}
% \begin{syntax}
% \cs{__kernel_cs_parm_from_arg_count:nnF} \Arg{follow-on} \Arg{args} \Arg{false code}
@@ -146,28 +109,6 @@
% such that they can be exchanged by \cs{debug_on:} and \cs{debug_off:}.
% \end{function}
%
-% \begin{function}{\__kernel_if_debug:TF}
-% \begin{syntax}
-% \cs{__kernel_if_debug:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Runs the \meta{true code} if debugging is enabled, namely only in
-% \LaTeXe{} package mode with one of the options
-% \texttt{check-declarations}, \texttt{enable-debug}, or
-% \texttt{log-functions}. Otherwise runs the \meta{false code}. The
-% |T| and |F| variants are not provided for this low-level
-% conditional.
-% \end{function}
-%
-% \begin{function}{\__kernel_debug_log:x}
-% \begin{syntax}
-% \cs{__kernel_debug_log:x} \Arg{message text}
-% \end{syntax}
-% If the \texttt{log-functions} option is active, this function writes
-% the \meta{message text} to the log file using \cs{iow_log:x}.
-% Otherwise, the \meta{message text} is ignored using \cs{use_none:n}.
-% This function is only created if debugging is enabled.
-% \end{function}
-%
% \begin{function}[EXP]{\__kernel_exp_not:w}
% \begin{syntax}
% \cs{__kernel_exp_not:w} \meta{expandable tokens} \Arg{content}
@@ -378,69 +319,6 @@
% be much shorter than a line, otherwise it is cropped.
% \end{function}
%
-% \begin{function}{\__kernel_patch:nnNNpn}
-% \begin{syntax}
-% \cs{__kernel_patch:nnNNpn} \Arg{before} \Arg{after}
-% \meta{definition} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% If debugging is not enabled, this function ignores the \meta{before}
-% and \meta{after} code and performs the \meta{definition} with no
-% patching. Otherwise it replaces \meta{code} by \meta{before}
-% \meta{code} \meta{after} (which can involve |#1| and so on) in the
-% \meta{definition} that follows. The \meta{definition} must start
-% with \cs{cs_new:Npn} or \cs{cs_set:Npn} or \cs{cs_gset:Npn} or their
-% \texttt{_protected} counterparts. Other cases can be added as
-% needed.
-% \end{function}
-%
-% \begin{function}{\__kernel_patch_conditional:nNNpnn}
-% \begin{syntax}
-% \cs{__kernel_patch_conditional:nNNpnn} \Arg{before}
-% \meta{definition} \meta{conditional} \meta{parameters} \Arg{type} \Arg{code}
-% \end{syntax}
-% Similar to \cs{__kernel_patch:nnNNpn} for conditionals, namely
-% \meta{definition} must be \cs{prg_new_conditional:Npnn} or its
-% \texttt{_protected} counterpart. There is no \meta{after} code
-% because that would interfere with the action of the conditional.
-% \end{function}
-%
-% \begin{function}
-% {\__kernel_patch_args:nNNpn, \__kernel_patch_conditional_args:nNNpnn}
-% \begin{syntax}
-% \cs{__kernel_patch_args:nNNpn} \Arg{arguments}
-% \meta{definition} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Like \cs{__kernel_patch:nnNNpn}, this tweaks the following
-% definition, but from the \enquote{inside out} (and if debugging is
-% not enabled, the \meta{arguments} are ignored). It replaces |#1|,
-% |#2| and so on in the \meta{code} of the definition as indicated by
-% the \meta{arguments}. More precisely, a temporary function is
-% defined using the \meta{definition} with the \meta{parameters} and
-% \meta{code}, then the result of expanding that function once in
-% front of the \meta{arguments} is used instead of the \meta{code}
-% when defining the actual function. For instance,
-% \begin{quote}
-% \cs{__kernel_patch_args:nNNpn} |{ { (#1) } }| \\
-% \cs{cs_new:Npn} \cs{int_eval:n} |#1| \\
-% ~~|{ \int_value:w \__int_eval:w #1 \__int_eval_end: }|
-% \end{quote}
-% would replace |#1| by |(#1)| in the definition of \cs{int_eval:n} when
-% debugging is enabled. This fails if the \meta{code} contains~|##|.
-% The \cs{__kernel_patch_conditional_args:nNNpnn} function is for use
-% before \cs{prg_new_conditional:Npnn} or its \texttt{_protected}
-% counterpart.
-% \end{function}
-%
-% \begin{function}
-% {\__kernel_patch_args:nnnNNpn, \__kernel_patch_conditional_args:nnnNNpnn}
-% \begin{syntax}
-% \cs{__kernel_patch_args:nnnNNpn} \Arg{before} \Arg{after} \Arg{arguments}
-% \meta{definition} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% A combination of \cs{__kernel_patch:nnNNpn} and
-% \cs{__kernel_patch_args:nNNpn}.
-% \end{function}
-%
% \begin{variable}{\g__kernel_prg_map_int}
% This integer is used by non-expandable mapping functions to track
% the level of nesting in force. The functions
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index f2ddc9f2c1..a7097c3d5b 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -1569,12 +1569,6 @@
% Setting the code for a key first logs if appropriate that we are
% defining a new key, then saves the code.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- {
- \cs_if_exist:cF { \c_@@_code_root_tl #1 }
- { \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } }
- }
- { }
\cs_new_protected:Npn \@@_cmd_set:nn #1#2
{ \cs_set_protected:cpn { \c_@@_code_root_tl #1 } ##1 {#2} }
\cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo }
@@ -1642,7 +1636,13 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_initialise:n #1
{
- \cs_if_exist_use:cT { \c_@@_code_root_tl \l_keys_path_tl } { {#1} }
+ \cs_if_exist:cTF
+ { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl }
+ { \@@_execute_inherit: }
+ {
+ \tl_clear:N \l_@@_inherit_tl
+ \cs_if_exist_use:cT { \c_@@_code_root_tl \l_keys_path_tl } { {#1} }
+ }
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 417723048a..87695c7601 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index b7f098649c..f499317f98 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index bbb003888b..717002aaca 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -555,11 +555,6 @@
% This auxiliary is similar to \cs{__kernel_chk_if_free_cs:N}, and is used when
% defining messages with \cs{msg_new:nnnn}.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { }
- {
- \__kernel_debug_log:x
- { Defining~message~ #1 / #2 ~\msg_line_context: }
- }
\cs_new_protected:Npn \@@_chk_free:nn #1#2
{
\msg_if_exist:nnT {#1} {#2}
@@ -1800,6 +1795,9 @@
LaTeX~has~been~asked~to~set~the~property~'#1'~for~key~'#2':~
this~property~is~not~defined.
}
+\__kernel_msg_new:nnnn { kernel } { quote-in-shell }
+ { Quotes~in~shell~command~'#1'. }
+ { Shell~commands~cannot~contain~quotes~("). }
\__kernel_msg_new:nnnn { kernel } { scanmark-already-defined }
{ Scan~mark~#1~already~defined. }
{
@@ -1807,6 +1805,14 @@
LaTeX~has~been~asked~to~create~a~new~scan~mark~'#1'~
but~this~name~has~already~been~used~for~a~scan~mark.
}
+\__kernel_msg_new:nnnn { kernel } { shuffle-too-large }
+ { The~sequence~#1~is~too~long~to~be~shuffled~by~TeX. }
+ {
+ TeX~has~ \int_eval:n { \c_max_register_int + 1 } ~
+ toks~registers:~this~only~allows~to~shuffle~up~to~
+ \int_use:N \c_max_register_int \ items.~
+ The~list~will~not~be~shuffled.
+ }
\__kernel_msg_new:nnnn { kernel } { variable-not-defined }
{ Variable~#1~undefined. }
{
@@ -1857,55 +1863,14 @@
% In format mode the error is somewhat different.
% \begin{macrocode}
%<*package>
-\__kernel_if_debug:TF
- {
- \__kernel_msg_new:nnnn { kernel } { debug }
- { The~debugging~option~'#1'~does~not~exist~\msg_line_context:. }
- {
- The~functions~'\iow_char:N\\debug_on:n'~and~
- '\iow_char:N\\debug_off:n'~only~accept~the~arguments~
- 'check-declarations',~'deprecation',~'log-functions',~not~'#1'.
- }
- \__kernel_msg_new:nnn { kernel } { expr } { '#2'~in~#1 }
- \__kernel_msg_new:nnnn { kernel } { local-global }
- { Inconsistent~local/global~assignment }
- {
- \c_@@_coding_error_text_tl
- \if:w l #2 Local
- \else:
- \if:w g #2 Global \else: Constant \fi:
- \fi:
- \ %
- assignment~to~a~
- \if:w l #1 local
- \else:
- \if:w g #1 global \else: constant \fi:
- \fi:
- \ %
- variable~'#3'.
- }
- \__kernel_msg_new:nnnn { kernel } { non-declared-variable }
- { The~variable~#1~has~not~been~declared~\msg_line_context:. }
- {
- \c_@@_coding_error_text_tl
- Checking~is~active,~and~you~have~tried~do~so~something~like: \\
- \ \ \tl_set:Nn ~ #1 ~ \{ ~ ... ~ \} \\
- without~first~having: \\
- \ \ \tl_new:N ~ #1 \\
- \\
- LaTeX~will~create~the~variable~and~continue.
- }
- }
+\__kernel_msg_new:nnnn { kernel } { enable-debug }
+ { To~use~'#1'~load~expl3~with~the~'enable-debug'~option. }
{
- \__kernel_msg_new:nnnn { kernel } { enable-debug }
- { To~use~'#1'~load~expl3~with~the~'enable-debug'~option. }
- {
- The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
- some~internal~functions~in~expl3~have~been~appropriately~
- defined.~This~only~happens~if~one~of~the~options~
- 'enable-debug',~'check-declarations'~or~'log-functions'~was~
- given~when~loading~expl3.
- }
+ The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
+ some~internal~functions~in~expl3~have~been~appropriately~
+ defined.~This~only~happens~if~one~of~the~options~
+ 'enable-debug',~'check-declarations'~or~'log-functions'~was~
+ given~when~loading~expl3.
}
%</package>
%<*initex>
@@ -1985,6 +1950,22 @@
}
% \end{macrocode}
%
+% System layer messages
+% \begin{macrocode}
+\__kernel_msg_new:nnnn { sys } { backend-set }
+ { Backend~configuration~already~set. }
+ {
+ Run-time~backend~selection~may~only~be~carried~out~once~during~a~run.~
+ This~second~attempt~to~set~them~will~be~ignored.
+ }
+\__kernel_msg_new:nnnn { sys } { wrong-backend }
+ { Backend~request~inconsistent~with~engine:~using~'#2'~backend. }
+ {
+ You~have~requested~backend~'#1',~but~this~is~not~suitable~for~use~with~the~
+ active~engine.~LaTeX3~will~use~the~'#2'~backend~instead.
+ }
+% \end{macrocode}
+%
% \subsection{Expandable errors}
%
% \begin{macro}{\@@_expandable_error:n}
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 3167e104a5..674f69815e 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/contrib/l3kernel/l3prefixes.csv
index 479d4adc5f..0054b22ed2 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.csv
+++ b/macros/latex/contrib/l3kernel/l3prefixes.csv
@@ -123,6 +123,7 @@ peek,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https
percent,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
pi,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
pkgploader,pkgploader,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
+polyglossia,polyglossia,Arthur Reutenauer,https://www.polyglossia.org/,https://github.com/reutenauer/polyglossia,https://github.com/reutenauer/polyglossia/issues,2019-09-03,,
prg,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
primargs,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,2013-03-16,2015-09-22,
prop,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index b5187e36c9..79f0770ee6 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
index 29e41e5aa0..14a9a789b6 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -252,6 +252,15 @@
% \meta{boolean} is initially \texttt{false}.
% \end{function}
%
+% \begin{function}[added = 2017-11-28]{\bool_const:Nn, \bool_const:cn}
+% \begin{syntax}
+% \cs{bool_const:Nn} \meta{boolean} \Arg{boolexpr}
+% \end{syntax}
+% Creates a new constant \meta{boolean} or raises an error if the name
+% is already taken. The value of the \meta{boolean} is set globally to
+% the result of evaluating the \meta{boolexpr}.
+% \end{function}
+%
% \begin{function}
% {
% \bool_set_false:N , \bool_set_false:c ,
@@ -823,6 +832,18 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[added = 2017-11-28]{\bool_const:Nn, \bool_const:cn}
+% A merger between \cs{tl_const:Nn} and \cs{bool_set:Nn}.
+% \begin{macrocode}
+\cs_new_protected:Npn \bool_const:Nn #1#2
+ {
+ \__kernel_chk_if_free_cs:N #1
+ \tex_global:D \tex_chardef:D #1 = \bool_if_p:n {#2}
+ }
+\cs_generate_variant:Nn \bool_const:Nn { c }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}
% {
% \bool_set_true:N, \bool_set_true:c,
@@ -836,16 +857,12 @@
% make sure the boolean exists. This is needed because booleans are
% not based on token lists nor on \TeX{} registers.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \bool_set_true:N #1
{ \cs_set_eq:NN #1 \c_true_bool }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \bool_set_false:N #1
{ \cs_set_eq:NN #1 \c_false_bool }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \bool_gset_true:N #1
{ \cs_gset_eq:NN #1 \c_true_bool }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \bool_gset_false:N #1
{ \cs_gset_eq:NN #1 \c_false_bool }
\cs_generate_variant:Nn \bool_set_true:N { c }
@@ -883,13 +900,11 @@
% primitive sets the left-hand side to \cs{scan_stop:} before looking
% for the right-hand side.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \bool_set:Nn #1#2
{
\exp_last_unbraced:NNNf
\tex_chardef:D #1 = { \bool_if_p:n {#2} }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \bool_gset:Nn #1#2
{
\exp_last_unbraced:NNNNf
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index 44fd4a82ce..a49e006089 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -110,6 +110,37 @@
% \meta{property list_2}.
% \end{function}
%
+% \begin{function}[added = 2017-11-28, updated = 2019-08-25]
+% {
+% \prop_set_from_keyval:Nn, \prop_set_from_keyval:cn,
+% \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn,
+% }
+% \begin{syntax}
+% \cs{prop_set_from_keyval:Nn} \meta{prop~var}
+% \{
+% \meta{key1} |=| \meta{value1} |,|
+% \meta{key2} |=| \meta{value2} |,| \ldots{}
+% \}
+% \end{syntax}
+% Sets \meta{prop~var} to contain key--value pairs given in the second
+% argument. If duplicate keys appear only one of the values is kept.
+% \end{function}
+%
+% \begin{function}[added = 2017-11-28, updated = 2019-08-25]
+% {\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn}
+% \begin{syntax}
+% \cs{prop_const_from_keyval:Nn} \meta{prop~var}
+% \{
+% \meta{key1} |=| \meta{value1} |,|
+% \meta{key2} |=| \meta{value2} |,| \ldots{}
+% \}
+% \end{syntax}
+% Creates a new constant \meta{prop~var} or raises an error if the
+% name is already taken. The \meta{prop~var} is set globally to
+% contain key--value pairs given in the second argument.
+% If duplicate keys appear only one of the values is kept.
+% \end{function}
+%
% \section{Adding entries to property lists}
%
% \begin{function}[updated = 2012-07-09]
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index dda51fd74f..bbeac9461b 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -367,7 +367,6 @@
% \UnitTested
% Allocate a new quark.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN q #1 } { }
\cs_new_protected:Npn \quark_new:N #1
{
\__kernel_chk_if_free_cs:N #1
@@ -594,7 +593,6 @@
% Check whether the variable is already a scan mark,
% then declare it to be equal to \cs{scan_stop:} globally.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN s #1 } { }
\cs_new_protected:Npn \scan_new:N #1
{
\tl_if_in:NnTF \g_@@_marks_tl { #1 }
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index 88c06cf660..13faf8fc86 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -1472,15 +1472,6 @@
% |#2|, or |#3| as relevant to each character (after de-escaping
% it).
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- {
- \@@_trace_push:nnN { regex } { 1 } \@@_escape_use:nnnn
- \group_begin:
- \tl_set:Nx \l_@@_internal_a_tl
- { \@@_trace_pop:nnN { regex } { 1 } \@@_escape_use:nnnn }
- \use_none:nnn
- }
- { }
\cs_new_protected:Npn \@@_escape_use:nnnn #1#2#3#4
{
\group_begin:
@@ -3779,12 +3770,6 @@
\@@_compile:n {#1}
\@@_build:N \l_@@_internal_regex
}
-\__kernel_patch:nnNNpn
- { \@@_trace_push:nnN { regex } { 1 } \@@_build:N }
- {
- \@@_trace_states:n { 2 }
- \@@_trace_pop:nnN { regex } { 1 } \@@_build:N
- }
\cs_new_protected:Npn \@@_build:N #1
{
\@@_standard_escapechar:
@@ -3825,12 +3810,6 @@
% work properly at the outer level, we need to put the appropriate
% \texttt{left} and \texttt{right} states in their sequence.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- { \@@_trace_push:nnN { regex } { 1 } \@@_build_for_cs:n }
- {
- \@@_trace_states:n { 2 }
- \@@_trace_pop:nnN { regex } { 1 } \@@_build_for_cs:n
- }
\cs_new_protected:Npn \@@_build_for_cs:n #1
{
\int_set_eq:NN \l_@@_min_state_int \l_@@_max_active_int
@@ -3898,18 +3877,6 @@
% \texttt{right} state is the new empty state, and the \texttt{left}
% state points to the previously \enquote{current} state.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- {
- \@@_trace:nnx { regex } { 2 }
- {
- regex~new~state~
- L=\int_use:N \l_@@_left_state_int ~ -> ~
- R=\int_use:N \l_@@_right_state_int ~ -> ~
- M=\int_use:N \l_@@_max_state_int ~ -> ~
- \int_eval:n { \l_@@_max_state_int + 1 }
- }
- }
- { }
\cs_new_protected:Npn \@@_build_new_state:
{
\@@_toks_clear:N \l_@@_max_state_int
@@ -4064,9 +4031,6 @@
% auxiliaries expects \texttt{left_state} and \texttt{right_state} to
% be set properly.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- { \@@_trace_push:nnN { regex } { 1 } \@@_group_aux:nnnnN }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_group_aux:nnnnN }
\cs_new_protected:Npn \@@_group_aux:nnnnN #1#2#3#4#5
{
\if_int_compare:w #3 = 0 \exp_stop_f:
@@ -4147,9 +4111,6 @@
% the group. The left and right states of the group are extracted from
% the relevant sequences.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- { \@@_trace_push:nnN { regex } { 1 } \@@_branch:n }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_branch:n }
\cs_new_protected:Npn \@@_branch:n #1
{
\@@_build_new_state:
@@ -4648,12 +4609,6 @@
% smothering an empty match at the start). Once all this is set up, we
% are ready for the ride. Find the first match.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- {
- \@@_trace_push:nnN { regex } { 1 } \@@_match:n
- \@@_trace:nnx { regex } { 1 } { analyzing~query~token~list }
- }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_match:n }
\cs_new_protected:Npn \@@_match:n #1
{
\int_zero:N \l_@@_balance_int
@@ -4667,12 +4622,6 @@
\@@_match_init:
\@@_match_once:
}
-\__kernel_patch:nnNNpn
- {
- \@@_trace_push:nnN { regex } { 1 } \@@_match_cs:n
- \@@_trace:nnx { regex } { 1 } { analyzing~query~token~list }
- }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_match_cs:n }
\cs_new_protected:Npn \@@_match_cs:n #1
{
\int_zero:N \l_@@_balance_int
@@ -4695,9 +4644,6 @@
\@@_match_init:
\@@_match_once:
}
-\__kernel_patch:nnNNpn
- { \@@_trace:nnx { regex } { 1 } { initializing } }
- { }
\cs_new_protected:Npn \@@_match_init:
{
\bool_gset_false:N \g_@@_success_bool
@@ -4885,12 +4831,6 @@
% state is marked as $\texttt{step}+1$: any thread hitting it at that
% point will be terminated.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- {
- \@@_trace:nnx { regex } { 2 }
- { state~\int_use:N \l_@@_curr_state_int }
- }
- { }
\cs_new_protected:Npn \@@_use_state:
{
\__kernel_intarray_gset:Nnn \g_@@_state_active_intarray
@@ -5267,9 +5207,6 @@
% parsed, make sure that there is no open csname. Finally, define the
% \texttt{balance_one_match} and \texttt{do_one_match} functions.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- { \@@_trace_push:nnN { regex } { 1 } \@@_replacement:n }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_replacement:n }
\cs_new_protected:Npn \@@_replacement:n #1
{
\group_begin:
@@ -6704,20 +6641,16 @@
% typically~1. If the module's current tracing level is less than
% |#2| show nothing, otherwise write |#3| to the terminal.
% \begin{macrocode}
-\__kernel_if_debug:TF
+\cs_new_protected:Npn \@@_trace_push:nnN #1#2#3
+ { \@@_trace:nnx {#1} {#2} { entering~ \token_to_str:N #3 } }
+\cs_new_protected:Npn \@@_trace_pop:nnN #1#2#3
+ { \@@_trace:nnx {#1} {#2} { leaving~ \token_to_str:N #3 } }
+\cs_new_protected:Npn \@@_trace:nnx #1#2#3
{
- \cs_new_protected:Npn \@@_trace_push:nnN #1#2#3
- { \@@_trace:nnx {#1} {#2} { entering~ \token_to_str:N #3 } }
- \cs_new_protected:Npn \@@_trace_pop:nnN #1#2#3
- { \@@_trace:nnx {#1} {#2} { leaving~ \token_to_str:N #3 } }
- \cs_new_protected:Npn \@@_trace:nnx #1#2#3
- {
- \int_compare:nNnF
- { \int_use:c { g_@@_trace_#1_int } } < {#2}
- { \iow_term:x { Trace:~#3 } }
- }
+ \int_compare:nNnF
+ { \int_use:c { g_@@_trace_#1_int } } < {#2}
+ { \iow_term:x { Trace:~#3 } }
}
- { }
% \end{macrocode}
% \end{macro}
%
@@ -6733,20 +6666,16 @@
% stored in \tn{toks} from $0$ to \cs{l_@@_max_state_int}
% (excluded).
% \begin{macrocode}
-\__kernel_if_debug:TF
+\cs_new_protected:Npn \@@_trace_states:n #1
{
- \cs_new_protected:Npn \@@_trace_states:n #1
+ \int_step_inline:nnn
+ \l_@@_min_state_int
+ { \l_@@_max_state_int - 1 }
{
- \int_step_inline:nnn
- \l_@@_min_state_int
- { \l_@@_max_state_int - 1 }
- {
- \@@_trace:nnx { regex } {#1}
- { \iow_char:N \\toks ##1 = { \@@_toks_use:w ##1 } }
- }
+ \@@_trace:nnx { regex } {#1}
+ { \iow_char:N \\toks ##1 = { \@@_toks_use:w ##1 } }
}
}
- { }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index 82c5b81ded..7dfd5d3ba6 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -114,6 +114,16 @@
% the original \meta{comma list} is unchanged.
% \end{function}
%
+% \begin{function}[added = 2017-11-28]
+% {\seq_const_from_clist:Nn, \seq_const_from_clist:cn}
+% \begin{syntax}
+% \cs{seq_const_from_clist:Nn} \meta{seq~var} \Arg{comma-list}
+% \end{syntax}
+% Creates a new constant \meta{seq~var} or raises an error if the name
+% is already taken. The \meta{seq~var} is set globally to contain the
+% items in the \meta{comma list}.
+% \end{function}
+%
% \begin{function}[added = 2011-08-15, updated = 2012-07-02]
% {
% \seq_set_split:Nnn , \seq_set_split:NnV ,
@@ -463,6 +473,24 @@
% described in Section~\ref{sec:l3sort:mech}.
% \end{function}
%
+% \begin{function}[added = 2018-04-29]
+% {\seq_shuffle:N, \seq_shuffle:c, \seq_gshuffle:N, \seq_gshuffle:c}
+% \begin{syntax}
+% \cs{seq_shuffle:N} \meta{seq~var}
+% \end{syntax}
+% Sets the \meta{seq~var} to the result of placing the items of the
+% \meta{seq~var} in a random order. Each item is (roughly) as likely
+% to end up in any given position.
+% \begin{texnote}
+% For sequences with more than $13$ items or so, only a small
+% proportion of all possible permutations can be reached, because
+% the random seed \cs{sys_rand_seed:} only has $28$-bits. The use
+% of \tn{toks} internally means that sequences with more than
+% $32767$ or $65535$ items (depending on the engine) cannot be
+% shuffled.
+% \end{texnote}
+% \end{function}
+%
% \section{Sequence conditionals}
%
% \begin{function}[EXP,pTF]{\seq_if_empty:N, \seq_if_empty:c}
@@ -1103,6 +1131,18 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\seq_const_from_clist:Nn, \seq_const_from_clist:cn}
+% Almost identical to \cs{seq_set_from_clist:Nn}.
+% \begin{macrocode}
+\cs_new_protected:Npn \seq_const_from_clist:Nn #1#2
+ {
+ \tl_const:Nx #1
+ { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n }
+ }
+\cs_generate_variant:Nn \seq_const_from_clist:Nn { c }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}
% {
% \seq_set_split:Nnn , \seq_set_split:NnV ,
@@ -1458,6 +1498,70 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\seq_shuffle:N, \seq_shuffle:c, \seq_gshuffle:N, \seq_gshuffle:c}
+% \begin{macro}{\@@_shuffle:NN}
+% \begin{macro}{\@@_shuffle_item:n}
+% \begin{variable}{\g_@@_internal_seq}
+% We apply the Fisher--Yates shuffle, storing items in \tn{toks}
+% registers. We use the primitive \cs{tex_uniformdeviate:D} for
+% speed reasons. Its non-uniformity is of order its argument divided
+% by $2^{28}$, not too bad for small lists. For sequences with more
+% than $13$ elements there are more possible permutations than
+% possible seeds ($13!>2^{28}$) so the question of uniformity is
+% somewhat moot. The integer variables are declared in \pkg{l3int}:
+% load-order issues.
+% \begin{macrocode}
+\cs_if_exist:NTF \tex_uniformdeviate:D
+ {
+ \seq_new:N \g_@@_internal_seq
+ \cs_new_protected:Npn \seq_shuffle:N { \@@_shuffle:NN \seq_set_eq:NN }
+ \cs_new_protected:Npn \seq_gshuffle:N { \@@_shuffle:NN \seq_gset_eq:NN }
+ \cs_new_protected:Npn \@@_shuffle:NN #1#2
+ {
+ \int_compare:nNnTF { \seq_count:N #2 } > \c_max_register_int
+ {
+ \__kernel_msg_error:nnx { kernel } { shuffle-too-large }
+ { \token_to_str:N #2 }
+ }
+ {
+ \group_begin:
+ \cs_set_eq:NN \@@_item:n \@@_shuffle_item:n
+ \int_zero:N \l_@@_internal_a_int
+ #2
+ \seq_gset_from_inline_x:Nnn \g_@@_internal_seq
+ { \int_step_function:nN { \l_@@_internal_a_int } }
+ { \tex_the:D \tex_toks:D ##1 }
+ \group_end:
+ #1 #2 \g_@@_internal_seq
+ \seq_gclear:N \g_@@_internal_seq
+ }
+ }
+ \cs_new_protected:Npn \@@_shuffle_item:n
+ {
+ \int_incr:N \l_@@_internal_a_int
+ \int_set:Nn \l_@@_internal_b_int
+ { 1 + \tex_uniformdeviate:D \l_@@_internal_a_int }
+ \tex_toks:D \l_@@_internal_a_int
+ = \tex_toks:D \l_@@_internal_b_int
+ \tex_toks:D \l_@@_internal_b_int
+ }
+ }
+ {
+ \cs_new_protected:Npn \seq_shuffle:N #1
+ {
+ \__kernel_msg_error:nnn { kernel } { fp-no-random }
+ { \seq_shuffle:N #1 }
+ }
+ \cs_new_eq:NN \seq_gshuffle:N \seq_shuffle:N
+ }
+\cs_generate_variant:Nn \seq_shuffle:N { c }
+\cs_generate_variant:Nn \seq_gshuffle:N { c }
+% \end{macrocode}
+% \end{variable}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}[TF]
% {
% \seq_if_in:Nn, \seq_if_in:NV, \seq_if_in:Nv, \seq_if_in:No, \seq_if_in:Nx,
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index 108a54eb12..da8a06f38b 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -457,6 +457,14 @@
% an \meta{internal dimension}.
% \end{function}
%
+% \begin{function}[EXP, added = 2018-11-03]{\dim_sign:n}
+% \begin{syntax}
+% \cs{dim_sign:n} \Arg{dimexpr}
+% \end{syntax}
+% Evaluates the \meta{dimexpr} then leaves $1$ or $0$ or $-1$ in the
+% input stream according to the sign of the result.
+% \end{function}
+%
% \begin{function}[EXP]{\dim_use:N, \dim_use:c}
% \begin{syntax}
% \cs{dim_use:N} \meta{dimension}
@@ -1103,7 +1111,6 @@
% \cs{dim_eval:n} to avoid needing a debugging patch that wraps the
% expression in checking code.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN c #1 } { }
\cs_new_protected:Npn \dim_const:Nn #1#2
{
\dim_new:N #1
@@ -1119,9 +1126,7 @@
% case where the variable passed is incorrectly a skip (for example a
% \LaTeXe{} length).
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \dim_zero:N #1 { #1 \c_zero_skip }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \dim_gzero:N #1
{ \tex_global:D #1 \c_zero_skip }
\cs_generate_variant:Nn \dim_zero:N { c }
@@ -1155,22 +1160,6 @@
%
% \subsection{Setting \texttt{dim} variables}
%
-% Several functions here have a signature |:Nn| and are such that when
-% debugging, the first argument should be checked to be a local/global
-% variable and the second should be wrapped in code for an expression.
-% The temporary function \cs{@@_tmp:w} finds the name |#3| of the
-% function being redefined and writes the appropriate patch.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \__kernel_patch_args:nnnNNpn
- { #1 ##1 }
- { }
- { {##1} { \__kernel_chk_expr:nNnN {##2} \@@_eval:w { } #3 } }
- #2 #3
- }
-% \end{macrocode}
-%
% \begin{macro}{\dim_set:Nn, \dim_set:cn}
% \begin{macro}{\dim_gset:Nn, \dim_gset:cn}
% Setting dimensions is easy enough but when debugging we want both to
@@ -1179,10 +1168,8 @@
% where the variable passed is a skip (for example a \LaTeXe{}
% length).
% \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \dim_set:Nn #1#2
{ #1 ~ \@@_eval:w #2 \@@_eval_end: \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \dim_gset:Nn #1#2
{ \tex_global:D #1 ~ \@@_eval:w #2 \@@_eval_end: \scan_stop: }
\cs_generate_variant:Nn \dim_set:Nn { c }
@@ -1197,11 +1184,9 @@
% All straightforward, with a \cs{scan_stop:} to deal with the case
% where |#1| is (incorrectly) a skip.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \dim_set_eq:NN #1#2
{ #1 = #2 \scan_stop: }
\cs_generate_variant:Nn \dim_set_eq:NN { c , Nc , cc }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \dim_gset_eq:NN #1#2
{ \tex_global:D #1 = #2 \scan_stop: }
\cs_generate_variant:Nn \dim_gset_eq:NN { c , Nc , cc }
@@ -1220,10 +1205,8 @@
% the local versions. The debugging code is inserted by
% \cs{@@_tmp:w}.
% \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \dim_add:Nn #1#2
{ \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \dim_gadd:Nn #1#2
{
\tex_global:D \tex_advance:D #1 by
@@ -1231,10 +1214,8 @@
}
\cs_generate_variant:Nn \dim_add:Nn { c }
\cs_generate_variant:Nn \dim_gadd:Nn { c }
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \dim_sub:Nn #1#2
{ \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \dim_gsub:Nn #1#2
{
\tex_global:D \tex_advance:D #1 by
@@ -1261,8 +1242,6 @@
% Functions for $\min$, $\max$, and absolute value with only one evaluation.
% The absolute value is evaluated by removing a leading~|-| if present.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \dim_abs:n } }
\cs_new:Npn \dim_abs:n #1
{
\exp_after:wN \@@_abs:N
@@ -1270,11 +1249,6 @@
}
\cs_new:Npn \@@_abs:N #1
{ \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
-\__kernel_patch_args:nNNpn
- {
- { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \dim_max:nn }
- { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \dim_max:nn }
- }
\cs_new:Npn \dim_max:nn #1#2
{
\dim_use:N \@@_eval:w \exp_after:wN \@@_maxmin:wwN
@@ -1283,11 +1257,6 @@
>
\@@_eval_end:
}
-\__kernel_patch_args:nNNpn
- {
- { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \dim_min:nn }
- { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \dim_min:nn }
- }
\cs_new:Npn \dim_min:nn #1#2
{
\dim_use:N \@@_eval:w \exp_after:wN \@@_maxmin:wwN
@@ -1331,12 +1300,6 @@
% \begin{macro}[pTF, EXP]{\dim_compare:nNn}
% Simple comparison.
% \begin{macrocode}
-\__kernel_patch_conditional_args:nNNpnn
- {
- { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \dim_compare:nNn }
- { \@@_eval_end: #2 }
- { \__kernel_chk_expr:nNnN {#3} \@@_eval:w { } \dim_compare:nNn }
- }
\prg_new_conditional:Npnn \dim_compare:nNn #1#2#3 { p , T , F , TF }
{
\if_dim:w \@@_eval:w #1 #2 \@@_eval:w #3 \@@_eval_end:
@@ -1549,21 +1512,6 @@
% step size of zero before checking the sign, but we optimize for the
% most frequent case (positive step).
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- {
- {
- \__kernel_chk_expr:nNnN {#1} \@@_eval:w { }
- \dim_step_function:nnnN
- }
- {
- \__kernel_chk_expr:nNnN {#2} \@@_eval:w { }
- \dim_step_function:nnnN
- }
- {
- \__kernel_chk_expr:nNnN {#3} \@@_eval:w { }
- \dim_step_function:nnnN
- }
- }
\cs_new:Npn \dim_step_function:nnnN #1#2#3
{
\exp_after:wN \@@_step:wwwN
@@ -1645,13 +1593,39 @@
% \begin{macro}{\dim_eval:n}
% Evaluating a dimension expression expandably.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \dim_eval:n } }
\cs_new:Npn \dim_eval:n #1
{ \dim_use:N \@@_eval:w #1 \@@_eval_end: }
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[EXP]{\dim_sign:n, \@@_sign:Nw}
+% See \cs{dim_abs:n}. Contrarily to \cs{int_sign:n} the case of a
+% zero dimension cannot be distinguished from a positive dimension by
+% looking only at the first character, since |0.2pt| and |0pt| start
+% the same way. We need explicit comparisons. We start by
+% distinguishing the most common case of a positive dimension.
+% \begin{macrocode}
+\cs_new:Npn \dim_sign:n #1
+ {
+ \int_value:w \exp_after:wN \@@_sign:Nw
+ \dim_use:N \@@_eval:w #1 \@@_eval_end: ;
+ \exp_stop_f:
+ }
+\cs_new:Npn \@@_sign:Nw #1#2 ;
+ {
+ \if_dim:w #1#2 > \c_zero_dim
+ 1
+ \else:
+ \if_meaning:w - #1
+ -1
+ \else:
+ 0
+ \fi:
+ \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\dim_use:N, \dim_use:c}
% Accessing a \meta{dim}.
% \begin{macrocode}
@@ -1673,8 +1647,6 @@
% terminating early and leaving extra tokens lying around. This is
% used a lot by low-level manipulations.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \dim_to_decimal:n } }
\cs_new:Npn \dim_to_decimal:n #1
{
\exp_after:wN
@@ -1709,13 +1681,6 @@
% Another hard-coded conversion: this one is necessary to avoid things going
% off-scale.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- {
- {
- \__kernel_chk_expr:nNnN {#1} \@@_eval:w { }
- \dim_to_decimal_in_sp:n
- }
- }
\cs_new:Npn \dim_to_decimal_in_sp:n #1
{ \int_value:w \@@_eval:w #1 \@@_eval_end: }
% \end{macrocode}
@@ -1820,7 +1785,6 @@
% even for constants. See \cs{dim_const:Nn} for why we cannot use
% \cs{skip_gset:Nn}.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN c #1 } { }
\cs_new_protected:Npn \skip_const:Nn #1#2
{
\skip_new:N #1
@@ -1834,9 +1798,7 @@
% \begin{macro}{\skip_gzero:N, \skip_gzero:c}
% Reset the register to zero.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \skip_zero:N #1 { #1 \c_zero_skip }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \skip_gzero:N #1 { \tex_global:D #1 \c_zero_skip }
\cs_generate_variant:Nn \skip_zero:N { c }
\cs_generate_variant:Nn \skip_gzero:N { c }
@@ -1869,29 +1831,12 @@
%
% \subsection{Setting \texttt{skip} variables}
%
-% Much as for \texttt{dim} variables, \cs{@@_tmp:w} prepares a patch
-% for |:Nn| function definitions in which the first argument should be
-% checked to be a local/global variable and the second should be wrapped
-% in code for an expression.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \__kernel_patch_args:nnnNNpn
- { #1 ##1 }
- { }
- { {##1} { \__kernel_chk_expr:nNnN {##2} \tex_glueexpr:D { } #3 } }
- #2 #3
- }
-% \end{macrocode}
-%
% \begin{macro}{\skip_set:Nn, \skip_set:cn}
% \begin{macro}{\skip_gset:Nn, \skip_gset:cn}
% Much the same as for dimensions.
% \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \skip_set:Nn #1#2
{ #1 ~ \tex_glueexpr:D #2 \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \skip_gset:Nn #1#2
{ \tex_global:D #1 ~ \tex_glueexpr:D #2 \scan_stop: }
\cs_generate_variant:Nn \skip_set:Nn { c }
@@ -1920,18 +1865,14 @@
% \begin{macro}{\skip_gsub:Nn, \skip_gsub:cn}
% Using |by| here deals with the (incorrect) case |\skip123|.
% \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \skip_add:Nn #1#2
{ \tex_advance:D #1 by \tex_glueexpr:D #2 \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \skip_gadd:Nn #1#2
{ \tex_global:D \tex_advance:D #1 by \tex_glueexpr:D #2 \scan_stop: }
\cs_generate_variant:Nn \skip_add:Nn { c }
\cs_generate_variant:Nn \skip_gadd:Nn { c }
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \skip_sub:Nn #1#2
{ \tex_advance:D #1 by - \tex_glueexpr:D #2 \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \skip_gsub:Nn #1#2
{ \tex_global:D \tex_advance:D #1 by - \tex_glueexpr:D #2 \scan_stop: }
\cs_generate_variant:Nn \skip_sub:Nn { c }
@@ -1969,13 +1910,6 @@
% \begin{macrocode}
\cs_set_protected:Npn \@@_tmp:w #1
{
- \__kernel_patch_conditional_args:nNNpnn
- {
- {
- \__kernel_chk_expr:nNnN
- {##1} \tex_glueexpr:D { } \skip_if_finite:n
- }
- }
\prg_new_conditional:Npnn \skip_if_finite:n ##1 { p , T , F , TF }
{
\exp_after:wN \@@_if_finite:wwNw
@@ -1994,8 +1928,6 @@
% \begin{macro}{\skip_eval:n}
% Evaluating a skip expression expandably.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- { { \__kernel_chk_expr:nNnN {#1} \tex_glueexpr:D { } \skip_eval:n } }
\cs_new:Npn \skip_eval:n #1
{ \skip_use:N \tex_glueexpr:D #1 \scan_stop: }
% \end{macrocode}
@@ -2017,23 +1949,9 @@
% Inserting skips.
% \begin{macrocode}
\cs_new_eq:NN \skip_horizontal:N \tex_hskip:D
-\__kernel_patch_args:nNNpn
- {
- {
- \__kernel_chk_expr:nNnN {#1} \tex_glueexpr:D { }
- \skip_horizontal:n
- }
- }
\cs_new:Npn \skip_horizontal:n #1
{ \skip_horizontal:N \tex_glueexpr:D #1 \scan_stop: }
\cs_new_eq:NN \skip_vertical:N \tex_vskip:D
-\__kernel_patch_args:nNNpn
- {
- {
- \__kernel_chk_expr:nNnN {#1} \tex_glueexpr:D { }
- \skip_vertical:n
- }
- }
\cs_new:Npn \skip_vertical:n #1
{ \skip_vertical:N \tex_glueexpr:D #1 \scan_stop: }
\cs_generate_variant:Nn \skip_horizontal:N { c }
@@ -2116,7 +2034,6 @@
% \begin{macro}{\muskip_const:Nn, \muskip_const:cn}
% See \cs{skip_const:Nn}.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN c #1 } { }
\cs_new_protected:Npn \muskip_const:Nn #1#2
{
\muskip_new:N #1
@@ -2130,10 +2047,8 @@
% \begin{macro}{\muskip_gzero:N, \muskip_gzero:c}
% Reset the register to zero.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \muskip_zero:N #1
{ #1 \c_zero_muskip }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \muskip_gzero:N #1
{ \tex_global:D #1 \c_zero_muskip }
\cs_generate_variant:Nn \muskip_zero:N { c }
@@ -2170,32 +2085,12 @@
%
% \subsection{Setting \texttt{muskip} variables}
%
-% See \texttt{skip} case.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \__kernel_patch_args:nnnNNpn
- { #1 ##1 }
- { }
- {
- {##1}
- {
- \__kernel_chk_expr:nNnN {##2}
- \tex_muexpr:D { \tex_mutoglue:D } #3
- }
- }
- #2 #3
- }
-% \end{macrocode}
-%
% \begin{macro}{\muskip_set:Nn, \muskip_set:cn}
% \begin{macro}{\muskip_gset:Nn, \muskip_gset:cn}
% This should be pretty familiar.
% \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \muskip_set:Nn #1#2
{ #1 ~ \tex_muexpr:D #2 \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \muskip_gset:Nn #1#2
{ \tex_global:D #1 ~ \tex_muexpr:D #2 \scan_stop: }
\cs_generate_variant:Nn \muskip_set:Nn { c }
@@ -2216,10 +2111,8 @@
% }
% All straightforward.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \muskip_set_eq:NN #1#2 { #1 = #2 }
\cs_generate_variant:Nn \muskip_set_eq:NN { c , Nc , cc }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \muskip_gset_eq:NN #1#2 { \tex_global:D #1 = #2 }
\cs_generate_variant:Nn \muskip_gset_eq:NN { c , Nc , cc }
% \end{macrocode}
@@ -2232,18 +2125,14 @@
% \begin{macro}{\muskip_gsub:Nn, \muskip_gsub:cn}
% Using |by| here deals with the (incorrect) case |\muskip123|.
% \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \muskip_add:Nn #1#2
{ \tex_advance:D #1 by \tex_muexpr:D #2 \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \muskip_gadd:Nn #1#2
{ \tex_global:D \tex_advance:D #1 by \tex_muexpr:D #2 \scan_stop: }
\cs_generate_variant:Nn \muskip_add:Nn { c }
\cs_generate_variant:Nn \muskip_gadd:Nn { c }
-\@@_tmp:w \__kernel_chk_var_local:N
\cs_new_protected:Npn \muskip_sub:Nn #1#2
{ \tex_advance:D #1 by - \tex_muexpr:D #2 \scan_stop: }
-\@@_tmp:w \__kernel_chk_var_global:N
\cs_new_protected:Npn \muskip_gsub:Nn #1#2
{ \tex_global:D \tex_advance:D #1 by - \tex_muexpr:D #2 \scan_stop: }
\cs_generate_variant:Nn \muskip_sub:Nn { c }
@@ -2259,13 +2148,6 @@
% \begin{macro}{\muskip_eval:n}
% Evaluating a muskip expression expandably.
% \begin{macrocode}
-\__kernel_patch_args:nNNpn
- {
- {
- \__kernel_chk_expr:nNnN {#1} \tex_muexpr:D
- { \tex_mutoglue:D } \muskip_eval:n
- }
- }
\cs_new:Npn \muskip_eval:n #1
{ \muskip_use:N \tex_muexpr:D #1 \scan_stop: }
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index 9d166d50ff..826117c512 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index af66ad469e..289f57f144 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index 3832fbeff6..7754289843 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -347,7 +347,7 @@
% \end{function}
%
% \begin{function}[added = 2013-07-24, updated = 2015-02-28, EXP, noTF]
-% {\str_case:nn, \str_case:on, \str_case:nV, \str_case:nv}
+% {\str_case:nn, \str_case:Vn, \str_case:on, \str_case:nV, \str_case:nv}
% \begin{syntax}
% \cs{str_case:nnTF} \Arg{test string} \\
% ~~|{| \\
@@ -1186,7 +1186,7 @@
% \end{macro}
%
% \begin{macro}[EXP, noTF]
-% {\str_case:nn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn}
+% {\str_case:nn, \str_case:Vn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn}
% \begin{macro}[EXP]{\@@_case:nnTF, \@@_case_e:nnTF}
% \begin{macro}[EXP]
% {\@@_case:nw, \@@_case_e:nw, \@@_case_end:nw}
@@ -1215,9 +1215,9 @@
}
\cs_new:Npn \@@_case:nnTF #1#2#3#4
{ \@@_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
-\cs_generate_variant:Nn \str_case:nn { o , nV , nv }
+\cs_generate_variant:Nn \str_case:nn { V , o , nV , nv }
\prg_generate_conditional_variant:Nnn \str_case:nn
- { o , nV , nv } { T , F , TF }
+ { V , o , nV , nv } { T , F , TF }
\cs_new:Npn \@@_case:nw #1#2#3
{
\str_if_eq:nnTF {#1} {#2}
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index e17b3a34d3..ad8f8ab034 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
index 19850affd8..42093dd42f 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/contrib/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-09-19}
+\date{Released 2019-09-28}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index b8e85d1642..26eb195778 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
index bc45fdad01..2742ef5ee9 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-09-19}
+\date{Released 2019-09-28}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index 2d79142577..73d4e787f7 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -126,6 +126,156 @@
% |dvi| or |pdf|.
% \end{variable}
%
+% \section{Platform}
+%
+% \begin{function}[added = 2018-07-27, EXP, pTF]
+% {
+% \sys_if_platform_unix:,
+% \sys_if_platform_windows:
+% }
+% \begin{syntax}
+% \cs{sys_if_platform_unix:TF} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Conditionals which allow platform-specific code to be used. The names
+% follow the \Lua{} |os.type()| function, \emph{i.e.}~all Unix-like systems
+% are |unix| (including Linux and MacOS).
+% \end{function}
+%
+% \begin{variable}[added = 2018-07-27]{\c_sys_platform_str}
+% The current platform given as a lower case string: one of
+% |unix|, |windows| or |unknown|.
+% \end{variable}
+%
+% \section{Random numbers}
+%
+% \begin{function}[added = 2017-05-27, EXP]{\sys_rand_seed:}
+% \begin{syntax}
+% \cs{sys_rand_seed:}
+% \end{syntax}
+% Expands to the current value of the engine's random seed, a
+% non-negative integer. In engines without random number support this
+% expands to $0$.
+% \end{function}
+%
+% \begin{function}[added = 2017-05-27]{\sys_gset_rand_seed:n}
+% \begin{syntax}
+% \cs{sys_gset_rand_seed:n} \Arg{intexpr}
+% \end{syntax}
+% Globally sets the seed for the engine's pseudo-random number
+% generator to the \meta{integer expression}. This random seed
+% affects all \cs[no-index]{\ldots{}_rand} functions (such as
+% \cs{int_rand:nn} or \cs{clist_rand_item:n}) as well as other
+% packages relying on the engine's random number generator. In
+% engines without random number support this produces an error.
+% \begin{texnote}
+% While a $32$-bit (signed) integer can be given as a seed, only the
+% absolute value is used and any number beyond $2^{28}$ is divided
+% by an appropriate power of~$2$. We recommend using an integer in
+% $[0,2^{28}-1]$.
+% \end{texnote}
+% \end{function}
+%
+% \section{Access to the shell}
+%
+% \begin{function}[noTF, added = 2019-09-20]
+% {\sys_get_shell:nnN}
+% \begin{syntax}
+% \cs{sys_get_shell:nnN} \Arg{shell~command} \Arg{setup} \meta{tl~var}
+% \cs{sys_get_shell:nnNTF} \Arg{shell~command} \Arg{setup} \meta{tl~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Defines \meta{tl} to the text returned by the \meta{shell command}.
+% The \meta{shell command} is converted to a string using
+% \cs{tl_to_str:n}. Category codes may need to be set appropriately
+% via the \meta{setup} argument, which is run just before running the
+% \meta{shell command} (in a group).
+% If shell escape is disabled, the \meta{tl~var} will be set to
+% \cs{q_no_value} in the non-branching version.
+% Note that quote characters (|"|) \emph{cannot} be used inside the
+% \meta{shell command}. The \cs{sys_get_shell:nnNTF} conditional
+% returns \texttt{true} if the shell is available and no quote is
+% detected, and \texttt{false} otherwise.
+% \end{function}
+%
+% \begin{variable}[added = 2017-05-27]{\c_sys_shell_escape_int}
+% This variable exposes the internal triple of the shell escape
+% status. The possible values are
+% \begin{description}
+% \item[0] Shell escape is disabled
+% \item[1] Unrestricted shell escape is enabled
+% \item[2] Restricted shell escape is enabled
+% \end{description}
+% \end{variable}
+%
+% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell:}
+% \begin{syntax}
+% \cs{sys_if_shell_p:}
+% \cs{sys_if_shell:TF} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Performs a check for whether shell escape is enabled. This
+% returns true if either of restricted or unrestricted shell escape
+% is enabled.
+% \end{function}
+%
+% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell_unrestricted:}
+% \begin{syntax}
+% \cs{sys_if_shell_unrestricted_p:}
+% \cs{sys_if_shell_unrestricted:TF} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Performs a check for whether \emph{unrestricted} shell escape is
+% enabled.
+% \end{function}
+%
+% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell_restricted:}
+% \begin{syntax}
+% \cs{sys_if_shell_restricted_p:}
+% \cs{sys_if_shell_restricted:TF} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Performs a check for whether \emph{restricted} shell escape is
+% enabled. This returns false if unrestricted shell escape is
+% enabled. Unrestricted shell escape is not considered a superset
+% of restricted shell escape in this case. To find whether any
+% shell escape is enabled use \cs{sys_if_shell:}.
+% \end{function}
+%
+% \begin{function}[added = 2017-05-27]{\sys_shell_now:n, \sys_shell_now:x}
+% \begin{syntax}
+% \cs{sys_shell_now:n} \Arg{tokens}
+% \end{syntax}
+% Execute \meta{tokens} through shell escape immediately.
+% \end{function}
+%
+% \begin{function}[added = 2017-05-27]{\sys_shell_shipout:n, \sys_shell_shipout:x}
+% \begin{syntax}
+% \cs{sys_shell_shipout:n} \Arg{tokens}
+% \end{syntax}
+% Execute \meta{tokens} through shell escape at shipout.
+% \end{function}
+%
+% \subsection{Loading configuration data}
+%
+% \begin{function}[added = 2019-09-12]{\sys_load_backend:n}
+% \begin{syntax}
+% \cs{sys_load_backend:n} \Arg{backend}
+% \end{syntax}
+% Loads the additional configuration file needed for backend support.
+% If the \meta{backend} is empty, the standard backend for the engine in
+% use will be loaded. This command may only be used once.
+% \end{function}
+%
+% \begin{variable}{\c_sys_backend_str}
+% Set to the name of the backend in use by \cs{sys_load_backend:n} when
+% issued.
+% \end{variable}
+%
+% \begin{function}[added = 2019-09-12]{\sys_load_debug:, \sys_load_deprecation:}
+% \begin{syntax}
+% \cs{sys_load_debug:}
+% \cs{sys_load_deprecation:}
+% \end{syntax}
+% Load the additional configuration files for debugging support and rolling
+% back deprecations, respectively.
+% \end{function}
+%
% \end{documentation}
%
% \begin{implementation}
@@ -318,6 +468,308 @@
% \end{macrocode}
% \end{macro}
%
+% \subsection{Platform}
+%
+% \begin{macro}[pTF]{\sys_if_platform_unix:, \sys_if_platform_windows:}
+% \begin{variable}{\c_sys_platform_str}
+% Setting these up requires the file module (file lookup), so is actually
+% implemented there.
+% \end{variable}
+% \end{macro}
+%
+% \subsection{Random numbers}
+%
+% \begin{macro}[EXP]{\sys_rand_seed:}
+% Unpack the primitive. When random numbers are not available, we
+% return zero after an error (and incidentally make sure the number of
+% expansions needed is the same as with random numbers available).
+% \begin{macrocode}
+\sys_if_rand_exist:TF
+ { \cs_new:Npn \sys_rand_seed: { \tex_the:D \tex_randomseed:D } }
+ {
+ \cs_new:Npn \sys_rand_seed:
+ {
+ \int_value:w
+ \__kernel_msg_expandable_error:nnn { kernel } { fp-no-random }
+ { \sys_rand_seed: }
+ \c_zero_int
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sys_gset_rand_seed:n}
+% The primitive always assigns the seed globally.
+% \begin{macrocode}
+\sys_if_rand_exist:TF
+ {
+ \cs_new_protected:Npn \sys_gset_rand_seed:n #1
+ { \tex_setrandomseed:D \int_eval:n {#1} \exp_stop_f: }
+ }
+ {
+ \cs_new_protected:Npn \sys_gset_rand_seed:n #1
+ {
+ \__kernel_msg_error:nnn { kernel } { fp-no-random }
+ { \sys_gset_rand_seed:n {#1} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Access to the shell}
+%
+% \begin{variable}{\c_sys_shell_escape_int}
+% Expose the engine's shell escape status to the user.
+% \begin{macrocode}
+\int_const:Nn \c_sys_shell_escape_int
+ {
+ \sys_if_engine_luatex:TF
+ {
+ \tex_directlua:D
+ { tex.sprint(status.shell_escape~or~os.execute()) }
+ }
+ {
+ \tex_shellescape:D
+ }
+ }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_internal_tl}
+% \begin{macrocode}
+\tl_new:N \l_@@_internal_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\c_@@_marker_tl}
+% The same idea as the marker for rescanning token lists.
+% \begin{macrocode}
+\tl_const:Nx \c_@@_marker_tl { : \token_to_str:N : }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[TF]{\sys_get_shell:nnN}
+% \begin{macro}{\sys_get_shell:nnN,\@@_get:nnN,\@@_get_do:Nw}
+% Setting using a shell is at this level just a slightly specialised file
+% operation, with an additional check for quotes, as these are not supported.
+% \begin{macrocode}
+\cs_new_protected:Npn \sys_get_shell:nnN #1#2#3
+ {
+ \sys_get_shell:nnNF {#1} {#2} #3
+ { \tl_set:Nn #3 { \q_no_value } }
+ }
+\prg_new_protected_conditional:Npnn \sys_get_shell:nnN #1#2#3 { T , F , TF }
+ {
+ \sys_if_shell:TF
+ { \exp_args:No \@@_get:nnN { \tl_to_str:n {#1} } {#2} #3 }
+ { \prg_return_false: }
+ }
+\cs_new_protected:Npn \@@_get:nnN #1#2#3
+ {
+ \tl_if_in:nnTF {#1} { " }
+ {
+ \__kernel_msg_error:nnx
+ { kernel } { quote-in-shell } {#1}
+ \prg_return_false:
+ }
+ {
+ \group_begin:
+ \if_false: { \fi:
+ \int_set_eq:NN \tex_tracingnesting:D \c_zero_int
+ \exp_args:No \tex_everyeof:D { \c_@@_marker_tl }
+ #2 \scan_stop:
+ \exp_after:wN \@@_get_do:Nw
+ \exp_after:wN #3
+ \exp_after:wN \prg_do_nothing:
+ \tex_input:D | "#1" \scan_stop:
+ \if_false: } \fi:
+ \prg_return_true:
+ }
+ }
+\exp_args:Nno \use:nn
+ { \cs_new_protected:Npn \@@_get_do:Nw #1#2 }
+ { \c_@@_marker_tl }
+ {
+ \group_end:
+ \tl_set:No #1 {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP, pTF]{\sys_if_shell:, \sys_if_shell_unrestricted:, \sys_if_shell_restricted:}
+% Performs a check for whether shell escape is enabled. The first set
+% of functions returns true if either of restricted or unrestricted
+% shell escape is enabled, while the other two sets of functions
+% return true in only one of these two cases.
+% \begin{macrocode}
+\@@_const:nn { sys_if_shell }
+ { \int_compare_p:nNn \c_sys_shell_escape_int > 0 }
+\@@_const:nn { sys_if_shell_unrestricted }
+ { \int_compare_p:nNn \c_sys_shell_escape_int = 1 }
+\@@_const:nn { sys_if_shell_restricted }
+ { \int_compare_p:nNn \c_sys_shell_escape_int = 2 }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{variable}{\c_@@_shell_stream_int}
+% This is not needed for \LuaTeX{}: shell escape there isn't done using
+% a \TeX{} interface.
+% \begin{macrocode}
+\sys_if_engine_luatex:F
+ { \int_const:Nn \c_@@_shell_stream_int { 18 } }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\sys_shell_now:n}
+% Execute commands through shell escape immediately.
+% \begin{macrocode}
+\sys_if_engine_luatex:TF
+ {
+ \cs_new_protected:Npn \sys_shell_now:n #1
+ {
+ \lua_now:e
+ { os.execute(" \lua_escape:e { \tl_to_str:n {#1} } ") }
+ }
+ }
+ {
+ \cs_new_protected:Npn \sys_shell_now:n #1
+ { \iow_now:Nn \c_@@_shell_stream_int {#1} }
+ }
+\cs_generate_variant:Nn \sys_shell_now:n { x }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sys_shell_shipout:n}
+% Execute commands through shell escape at shipout.
+% \begin{macrocode}
+\sys_if_engine_luatex:TF
+ {
+ \cs_new_protected:Npn \sys_shell_shipout:n #1
+ {
+ \lua_shipout_e:n
+ { os.execute(" \lua_escape:e { \tl_to_str:n {#1} } ") }
+ }
+ }
+ {
+ \cs_new_protected:Npn \sys_shell_shipout:n #1
+ { \iow_shipout:Nn \c_@@_shell_stream_int {#1} }
+ }
+\cs_generate_variant:Nn \sys_shell_shipout:n { x }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Configurations}
+%
+% \begin{variable}{\g_@@_backend_tl}
+% As the backend has to be checked and possibly adjusted, the approach here
+% is to create a variable and use that in a one-shot to set a constant.
+% \begin{macrocode}
+\tl_new:N \g_@@_backend_tl
+\tl_gset:Nx \g_@@_backend_tl
+ {
+ \sys_if_engine_xetex:TF
+ { xdvipdfmx }
+ {
+ \sys_if_output_pdf:TF
+ { pdfmode }
+ {
+ \bool_lazy_or:nnTF
+ { \sys_if_engine_ptex_p: }
+ { \sys_if_engine_uptex_p: }
+ { dvipdfmx }
+ { dvips }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\sys_load_backend:n}
+% \begin{macro}{\@@_load_backend_check:N}
+% \begin{variable}{\c_sys_backend_str}
+% Loading the backend code is pretty simply: check that the backend is valid,
+% then load it up.
+% \begin{macrocode}
+\cs_new_protected:Npn \sys_load_backend:n #1
+ {
+ \str_if_exist:NTF \c_sys_backend_str
+ { \__kernel_msg_error:nnxx { sys } { backend-set } }
+ {
+ \tl_if_blank:nF {#1}
+ { \tl_set:Nn \g_@@_backend_tl {#1} }
+ \@@_load_backend_check:N \g_@@_backend_tl
+ \str_const:Nx \c_sys_backend_str { \g_@@_backend_tl }
+ \__kernel_sys_configuration_load:n
+ { l3backend- \c_sys_backend_str }
+ }
+ }
+\cs_new_protected:Npn \@@_load_backend_check:N #1
+ {
+ \sys_if_engine_xetex:TF
+ {
+ \str_if_eq:VnF #1 { xdvipdfmx }
+ {
+ \__kernel_msg_error:nnxx { sys } { wrong-backend }
+ #1 { xdvipdfmx }
+ \tl_gset:Nn #1 { xdvipdfmx }
+ }
+ }
+ {
+ \sys_if_output_pdf:TF
+ {
+ \str_if_eq:VnF #1 { pdfmode }
+ {
+ \__kernel_msg_error:nnxx { sys } { wrong-backend }
+ #1 { pdfmode }
+ \tl_gset:Nn #1 { pdfmode }
+ }
+ }
+ {
+ \str_case:VnF #1
+ {
+ { dvipdfmx } { }
+ { dvips } { }
+ { dvisvgm } { }
+ }
+ {
+ \__kernel_msg_error:nnxx { sys } { wrong-backend }
+ #1 { dvips }
+ \tl_gset:Nn #1 { dvips }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{variable}
+% \end{macro}
+% \end{macro}
+%
+% \begin{variable}{\g_@@_debug_bool, \g_@@_deprecation_bool}
+% \begin{macrocode}
+\bool_new:N \g_@@_debug_bool
+\bool_new:N \g_@@_deprecation_bool
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\sys_load_debug:, \sys_load_deprecation:}
+% Simple.
+% \begin{macrocode}
+\cs_new_protected:Npn \sys_load_debug:
+ {
+ \bool_if:NF \g_@@_debug_bool
+ { \__kernel_sys_configuration_load:n { l3debug } }
+ \bool_gset_true:N \g_@@_debug_bool
+ }
+\cs_new_protected:Npn \sys_load_deprecation:
+ {
+ \bool_if:NF \g_@@_deprecation_bool
+ { \__kernel_sys_configuration_load:n { l3deprecation } }
+ \bool_gset_true:N \g_@@_deprecation_bool
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index 952cdcdb53..cc7ce4b0be 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
index 9745b13285..a499c943fb 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-09-19}
+\date{Released 2019-09-28}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index f522435876..07ed2c8f57 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index 96cfc1dfcf..c7728a33f2 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -957,7 +957,8 @@
% \end{texnote}
% \end{function}
%
-% \begin{function}[updated = 2012-07-09, EXP, pTF]{\tl_if_head_eq_catcode:nN}
+% \begin{function}[updated = 2012-07-09, EXP, pTF]
+% {\tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:oN}
% \begin{syntax}
% \cs{tl_if_head_eq_catcode_p:nN} \Arg{token list} \meta{test token}
% \cs{tl_if_head_eq_catcode:nNTF} \Arg{token list} \meta{test token}
@@ -1267,13 +1268,11 @@
% \begin{macro}{\tl_const:Nn, \tl_const:Nx, \tl_const:cn, \tl_const:cx}
% Constants are also easy to generate.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN c #1 } { }
\cs_new_protected:Npn \tl_const:Nn #1#2
{
\__kernel_chk_if_free_cs:N #1
\cs_gset_nopar:Npx #1 { \exp_not:n {#2} }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN c #1 } { }
\cs_new_protected:Npn \tl_const:Nx #1#2
{
\__kernel_chk_if_free_cs:N #1
@@ -1316,28 +1315,11 @@
%
% \begin{macro}{\tl_set_eq:NN, \tl_set_eq:Nc, \tl_set_eq:cN, \tl_set_eq:cc}
% \begin{macro}{\tl_gset_eq:NN, \tl_gset_eq:Nc, \tl_gset_eq:cN, \tl_gset_eq:cc}
-% For setting token list variables equal to each other. When checking
-% is turned on, make sure both variables exist.
+% For setting token list variables equal to each other. To allow for
+% patching, the arguments have to be explicit.
% \begin{macrocode}
-\__kernel_if_debug:TF
- {
- \cs_new_protected:Npn \tl_set_eq:NN #1#2
- {
- \__kernel_chk_var_local:N #1
- \__kernel_chk_var_exist:N #2
- \cs_set_eq:NN #1 #2
- }
- \cs_new_protected:Npn \tl_gset_eq:NN #1#2
- {
- \__kernel_chk_var_global:N #1
- \__kernel_chk_var_exist:N #2
- \cs_gset_eq:NN #1 #2
- }
- }
- {
- \cs_new_eq:NN \tl_set_eq:NN \cs_set_eq:NN
- \cs_new_eq:NN \tl_gset_eq:NN \cs_gset_eq:NN
- }
+\cs_new_protected:Npn \tl_set_eq:NN #1#2 { \cs_set_eq:NN #1 #2 }
+\cs_new_protected:Npn \tl_gset_eq:NN #1#2 { \cs_gset_eq:NN #1 #2 }
\cs_generate_variant:Nn \tl_set_eq:NN { cN, Nc, cc }
\cs_generate_variant:Nn \tl_gset_eq:NN { cN, Nc, cc }
% \end{macrocode}
@@ -1350,20 +1332,8 @@
% three arguments must be checked: a token list |#2| or |#3| equal to
% \cs{scan_stop:} would lead to problems later on.
% \begin{macrocode}
-\__kernel_patch:nnNNpn
- {
- \__kernel_chk_var_exist:N #2
- \__kernel_chk_var_exist:N #3
- }
- { }
\cs_new_protected:Npn \tl_concat:NNN #1#2#3
{ \tl_set:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } }
-\__kernel_patch:nnNNpn
- {
- \__kernel_chk_var_exist:N #2
- \__kernel_chk_var_exist:N #3
- }
- { }
\cs_new_protected:Npn \tl_gconcat:NNN #1#2#3
{ \tl_gset:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } }
\cs_generate_variant:Nn \tl_concat:NNN { ccc }
@@ -1429,26 +1399,18 @@
% By using \cs{exp_not:n} token list variables can contain |#| tokens,
% which makes the token list registers provided by \TeX{}
% more or less redundant. The \cs{tl_set:No} version is done
-% \enquote{by hand} as it is used quite a lot. Each definition is
-% prefixed by a call to \cs{__kernel_patch:nnNNpn} which adds an
-% existence check to the definition.
+% \enquote{by hand} as it is used quite a lot.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_set:Nn #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:n {#2} } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_set:No #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:o {#2} } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_set:Nx #1#2
{ \cs_set_nopar:Npx #1 {#2} }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gset:Nn #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:n {#2} } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gset:No #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:o {#2} } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gset:Nx #1#2
{ \cs_gset_nopar:Npx #1 {#2} }
\cs_generate_variant:Nn \tl_set:Nn { NV , Nv , Nf }
@@ -1473,28 +1435,20 @@
% }
% Adding to the left is done directly to gain a little performance.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_put_left:Nn #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:n {#2} \exp_not:o #1 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_put_left:NV #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:V #2 \exp_not:o #1 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_put_left:No #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:o {#2} \exp_not:o #1 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_put_left:Nx #1#2
{ \cs_set_nopar:Npx #1 { #2 \exp_not:o #1 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gput_left:Nn #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:n {#2} \exp_not:o #1 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gput_left:NV #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:V #2 \exp_not:o #1 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gput_left:No #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:o {#2} \exp_not:o #1 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gput_left:Nx #1#2
{ \cs_gset_nopar:Npx #1 { #2 \exp_not:o {#1} } }
\cs_generate_variant:Nn \tl_put_left:Nn { c }
@@ -1523,28 +1477,20 @@
% }
% The same on the right.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_put_right:Nn #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:n {#2} } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_put_right:NV #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:V #2 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_put_right:No #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:o {#2} } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
\cs_new_protected:Npn \tl_put_right:Nx #1#2
{ \cs_set_nopar:Npx #1 { \exp_not:o #1 #2 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gput_right:Nn #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:n {#2} } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gput_right:NV #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:V #2 } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gput_right:No #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:o {#2} } }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
\cs_new_protected:Npn \tl_gput_right:Nx #1#2
{ \cs_gset_nopar:Npx #1 { \exp_not:o {#1} #2 } }
\cs_generate_variant:Nn \tl_put_right:Nn { c }
@@ -3016,6 +2962,8 @@
\prg_return_false:
\fi:
}
+\prg_generate_conditional_variant:Nnn \tl_if_head_eq_catcode:nN
+ { o } { p , TF , T , F }
% \end{macrocode}
% For \cs{tl_if_head_eq_meaning:nN}, again, detect special cases. In
% the normal case, use \cs{tl_head:w}, with no \cs{exp_not:N} this
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index bc32b8813d..df41d89943 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index 7795efd6a8..c7e465576a 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index d8e2eb9683..5243735d86 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/contrib/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
index 09f6851315..c4662a7770 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/contrib/l3kernel/source3.tex
@@ -53,7 +53,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-09-19}
+\date{Released 2019-09-28}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/skdoc/README b/macros/latex/contrib/skdoc/README
index ffa816f402..8385ac97aa 100644
--- a/macros/latex/contrib/skdoc/README
+++ b/macros/latex/contrib/skdoc/README
@@ -1,6 +1,6 @@
%% skdoc documentation class
%%
-%% Copyright (C) 2012-2018 by Simon Sigurdhsson <sigurdhsson@gmail.com>
+%% Copyright (C) 2012-2019 by Simon Sigurdhsson <sigurdhsson@gmail.com>
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -17,7 +17,7 @@
%% This work consists of the files skdoc.dtx
%% and the derived filebase skdoc.cls.
-This is version 1.5a of the skdoc document class. It is designed to
+This is version 1.5b of the skdoc document class. It is designed to
generate both documentation and derivative files using only LaTeX,
i.e. without using docstrip and ins/dtx files.
diff --git a/macros/latex/contrib/skdoc/skdoc.dtx b/macros/latex/contrib/skdoc/skdoc.dtx
index d0eff7eea0..a7bfdc10d8 100644
--- a/macros/latex/contrib/skdoc/skdoc.dtx
+++ b/macros/latex/contrib/skdoc/skdoc.dtx
@@ -1,7 +1,7 @@
% \iffalse
%% skdoc documentation class
%%
-%% Copyright (C) 2012-2018 by Simon Sigurdhsson <sigurdhsson@gmail.com>
+%% Copyright (C) 2012-2019 by Simon Sigurdhsson <sigurdhsson@gmail.com>
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -73,7 +73,7 @@
%</driver>
%<class>\ProvidesExplClass{skdoc}
%<*class>
- {2018/04/18}{1.5a}{skdoc documentation class}
+ {2019/09/29}{1.5b}{skdoc documentation class}
%</class>
%
%<*driver>
@@ -132,7 +132,7 @@
% {}{\small\pagemark}
% \pagestyle{skdoc-class}
%
-% \version{1.5a}
+% \version{1.5b}
% \changes{1.0}{Initial version}
% \changes{1.1}{Added support for syntax highlighting using \pkg{minted}}
% \changes{1.1a}{Deprecate the use of \pkg{bibtex} in favour of \pkg{biblatex}}
@@ -145,6 +145,7 @@
% \changes{1.4b}{Track \pkg{expl3} changes (thanks to Joseph Wright)}
% \changes{1.5}{Fix incompatibilities with \pkg{minted}}
% \changes{1.5a}{Track \pkg{expl3} changes (thanks to Felix Faltin)}
+% \changes{1.5b}{Track \pkg{expl3} changes (thanks to Phelype Oleinik). Replace \pkg{opensans} option \opt{osfigures} with \opt{oldstyle} (\#40)}
% \iffalse
%%% Don't forget to update the version number and release date of
%%% the package declaration on line 76!
@@ -800,7 +801,7 @@
\RequirePackage[english=british]{csquotes}
\RequirePackage[font=small,labelfont=bf,textfont=it]{caption}
\RequirePackage{PTSerif,sourcecodepro}
- \RequirePackage[defaultsans,osfigures,scale=0.95]{opensans}
+ \RequirePackage[defaultsans,oldstyle,scale=0.95]{opensans}
\RequirePackage[babel]{microtype}
}
% \end{macrocode}
@@ -943,7 +944,7 @@
% if no \cs{write18} access is available, two if we have restricted
% access and one if access is unrestricted.
% \begin{macrocode}
- \if_int_compare:w\pdf@shellescape=\c_one
+ \if_int_compare:w\pdf@shellescape=\c_one_int
\prg_return_true:
\else:
\prg_return_false:
@@ -1308,7 +1309,7 @@
% Before doing anything, set create or increment a counter keeping
% track of the line number of the file we're writing to.
% \begin{macrocode}
- \int_compare:nNnT{\int_use:c{skdoc@output@##1@line}}=\c_zero%
+ \int_compare:nNnT{\int_use:c{skdoc@output@##1@line}}=\c_zero_int%
{\int_gincr:c{skdoc@output@##1@line}}%
}
% \end{macrocode}
@@ -1381,7 +1382,7 @@
\begin{minipage}[c][1ex]{\textwidth}
\bool_if:nF{
\g__skdoc_in_example_bool &&
- !\int_compare_p:nNn{\clist_count:N\l__skdoc_keys}>\c_one
+ !\int_compare_p:nNn{\clist_count:N\l__skdoc_keys}>\c_one_int
}{
\makebox[4ex]{%
\leavevmode
diff --git a/macros/latex/contrib/skdoc/skdoc.pdf b/macros/latex/contrib/skdoc/skdoc.pdf
index 432f58a336..ac78b085ea 100644
--- a/macros/latex/contrib/skdoc/skdoc.pdf
+++ b/macros/latex/contrib/skdoc/skdoc.pdf
Binary files differ
diff --git a/macros/latex/contrib/statistics/LICENSE b/macros/latex/contrib/statistics/LICENSE
index 41d500f5e7..0e88c31492 100644
--- a/macros/latex/contrib/statistics/LICENSE
+++ b/macros/latex/contrib/statistics/LICENSE
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
statistics
- Copyright (C) 2014-2018 Julien RIVAUD
+ Copyright (C) 2014-2019 Julien RIVAUD
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
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
- statistics Copyright (C) 2014-2018 Julien RIVAUD
+ statistics Copyright (C) 2014-2019 Julien RIVAUD
This program 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.
diff --git a/macros/latex/contrib/statistics/README.md b/macros/latex/contrib/statistics/README.md
index 4a98c88a4a..9d18961311 100644
--- a/macros/latex/contrib/statistics/README.md
+++ b/macros/latex/contrib/statistics/README.md
@@ -14,7 +14,7 @@ of them. Similarly `statistics` can draw only some parts of the graphs.
Every part of the generated tables or graphics is customizable.
-(C) Copyright 2014-2018 RIVAUD Julien
+(C) Copyright 2014-2019 RIVAUD Julien
This package may be distributed and/or modified under the conditions of the
General Public License (GPL), either version 3 of this license or (at your
diff --git a/macros/latex/contrib/statistics/statistics.dtx b/macros/latex/contrib/statistics/statistics.dtx
index bdb85dbff9..4dd8313381 100644
--- a/macros/latex/contrib/statistics/statistics.dtx
+++ b/macros/latex/contrib/statistics/statistics.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
% vim: tw=80 spl=en
%
-%% File: statistics.dtx (C) Copyright 2014-2018 RIVAUD Julien
+%% File: statistics.dtx (C) Copyright 2014-2019 RIVAUD Julien
%%
%% It may be distributed and/or modified under the conditions of the
%% General Public License (GPL), either version 3 of this
@@ -11,7 +11,7 @@
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\RequirePackage{expl3}[2016/01/19]
+\RequirePackage{expl3}[2018/06/19]
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -20,6 +20,7 @@
\usepackage{xparse}
\usepackage{xcolor}
\usepackage{geometry}
+\usetikzlibrary{patterns}
\geometry{
a4paper,
vmargin=2.5cm, right=1.5cm, textwidth=385pt,
@@ -30,8 +31,8 @@
%<*driver|package>
\def\ExplFileName{statistics}
\def\ExplFileDescription{Compute and typeset statistics table and graphics}
-\def\ExplFileDate{2018/07/21}
-\def\ExplFileVersion{2.0}
+\def\ExplFileDate{2019/09/29}
+\def\ExplFileVersion{2.2}
%</driver|package>
%<*driver>
\ExplSyntaxOn
@@ -108,11 +109,11 @@
\str_set:Nn \l_tmpa_str {#1}
\tl_trim_spaces:N \l_tmpa_str
\str_set:Nx \l_tmpb_str {\char_generate:nn{`\^^M}{12}}
- \str_if_eq_x:nnT \l_tmpb_str { \str_head:N \l_tmpa_str } {
+ \str_if_eq:eeT \l_tmpb_str { \str_head:N \l_tmpa_str } {
\str_set:Nx \l_tmpa_str { \str_tail:N \l_tmpa_str }
}
\tl_reverse:N \l_tmpa_str
- \str_if_eq_x:nnT \l_tmpb_str { \str_head:N \l_tmpa_str } {
+ \str_if_eq:eeT \l_tmpb_str { \str_head:N \l_tmpa_str } {
\str_set:Nx \l_tmpa_str { \str_tail:N \l_tmpa_str }
}
\tl_reverse:N \l_tmpa_str
@@ -579,14 +580,22 @@
%
% \begin{key}{maxcols}
% \begin{syntax}
-% maxcols = \meta{integer}
+% maxcols = \meta{comma-separated list of integers}
% \end{syntax}
% Setting this key to a positive integer~$n$ makes \cs{StatsTable} wrap after
% having added $n$~columns to the current table. The table is closed, and a new
% one is created with the row headers typeset anew. Setting this key to a
-% negative number or zero disables wrapping. The initial value is~$0$.
+% negative number or zero disables wrapping. If you set the key to a list of
+% integers, each one is used as the value for the corresponding subtable, with
+% the last number staying in effect for all remaining subtables. The initial
+% value is~$0$.
% \end{key}
%
+% \begin{texnote}
+% If there is a non-positive integer in the list, all subsequent integers are
+% ignored since there will be no further wrapping thus no other subtable.
+% \end{texnote}
+%
% \begin{key}{tablesep}
% \begin{syntax}
% tablesep = \meta{\TeX\ content}
@@ -881,6 +890,43 @@
% ]
% \end{demo}
%
+% \subsubsection{Styling the graph}
+%
+% \begin{key}{style, style/reset,
+% comb/style, comb/style/reset,
+% histogram/style, histogram/style/reset,
+% cumulative/style, cumulative/style/reset,}
+% \begin{syntax}
+% style = \meta{TikZ path options}
+% \meta{graph type}/style = \meta{TikZ path options}
+% style/reset, \meta{graph type}/style/reset
+% \end{syntax}
+% The \texttt{\meta{graph type}/style} keys append options to the TikZ path
+% created by the datavisualization when the corresponding graph type is used.
+% You can clear these options with \texttt{\meta{graph type}/style/reset}.
+% If you omit the graph type, this sets the label for all graph types
+% simultaneously.
+%
+% The initial values are:
+% \begin{verbatim}
+% comb/style = ultra-thick,
+% cumulative/style = %empty
+% histogram/style = {
+% every~path/.prefix~style=fill,
+% semithick, black, fill=black, fill~opacity=0.1
+% },
+% \end{verbatim}
+% \end{key}
+%
+% \begin{demo}
+% \statisticssetup[graph]{width=0.45\linewidth,
+% style=blue, cumulative/style=densely dashed }
+% \StatsGraph \facebook [ cumulative ]
+% \hfill \StatsGraph \facebook[style={
+% fill opacity=0, pattern=north west lines,
+% }]
+% \end{demo}
+%
% \subsubsection{Selecting which parts of the graph are shown}
%
% By default, the complete graph is shown; you can ask \cs{StatsGraph} to only
@@ -1051,7 +1097,7 @@
% Initial values are as follows:
% \begin{itemize}
% \item |comb/counts/axis| and |cumulative/counts/axis| are equal to\\
-% |ticks and grid={many, int about strategy, integer minor steps},|\\
+% |ticks and grid={many, int about strategy, integer minor steps*},|\\
% |label=|\meta{initial value of the label key}
% \item |cumulative/counts/axis| and |cumulative/frequencies/axis| are
% equal to\\
@@ -1092,11 +1138,13 @@
% \hfill \StatsGraph \facebook
% \end{demo}
%
-% \begin{key}{/tikz/datavisualization/integer minor steps}
+% \begin{key}{/tikz/datavisualization/integer minor steps,
+% /tikz/datavisualization/integer minor steps*}
% \begin{syntax}
% integer minor steps $[$ = \meta{integer expression} $]$
+% integer minor steps* $[$ = \meta{integer expression} $]$
% \end{syntax}
-% This is not a key in the |graph| module, but a TikZ key. It adds code to
+% These are not keys in the |graph| module, but TikZ keys. They add code to
% automatically compute |minor steps between steps| after the axis step has been
% computed with the choosen strategy, so that the following constraints are
% respected:
@@ -1105,16 +1153,19 @@
% \item at most \meta{integer expression} ticks are present on the axis (minor
% and major included, subminor not counted).
% \end{itemize}
+% In addition, the starred version ensures that the major step is never below
+% one, which makes sense for counts where sub-unit graduations are confusing at
+% best.
% \end{key}
%
% If ommited, the \meta{integer expression} defaults to~$50$.
%
-% This TikZ key should not explode if the computed step is not an integer, but
+% These TikZ keys should not explode if the computed step is not an integer, but
% will probably not give a useful result, and in particular whether the minor
% step will be integer is not defined in that case.
%
% \begin{texnote}
-% The key is independent of \pkg{statistics} and could be reused elsewhere.
+% The keys are independent of \pkg{statistics} and could be reused elsewhere.
% \end{texnote}
%
% \begin{key}{counts/format, frequencies/format, y/format,
@@ -1280,11 +1331,11 @@
% \meta{graph type}/x/axis = \meta{TikZ datavisualization axis options}
% \meta{graph type}/values/axis/reset, \meta{graph type}/x/axis/reset
% \end{syntax}
-% The \texttt{\meta{graph type}/values/axis} key append options to the TikZ
+% The \texttt{\meta{graph type}/values/axis} keys append options to the TikZ
% $x$~axis when the corresponding graph type is used. You can clear these
-% options with \texttt{\meta{graph type}/values/axis}. The keys with |x| are
-% aliases for the similar keys with |values|. If you omit the graph type, this
-% sets the label for all graph types simultaneously.
+% options with \texttt{\meta{graph type}/values/axis/reset}. The keys with |x|
+% are aliases for the similar keys with |values|. If you omit the graph type,
+% this sets the label for all graph types simultaneously.
%
% The initial value is:
% \begin{verbatim}
@@ -1760,6 +1811,9 @@
}
}
+\int_new:N \l_@@_table_maxcols_int
+\int_set:Nn \l_@@_table_maxcols_int {0}
+
\@@_keys_define:nn { table } {
showonly .value_required:n = true,
showonly .code:n = \@@_setshow:n{#1},
@@ -1780,9 +1834,9 @@
},
showonly/shown .initial:n = #1,
- maxcols .int_set:N = \l_@@_table_maxcols_int,
+ maxcols .clist_set:N = \l_@@_table_maxcols_clist,
maxcols .value_required:n = true,
- maxcols .initial:n = 0,
+ maxcols .initial:n = ,
tablesep .tl_set:N = \l_@@_table_sep_tl,
tablesep .value_required:n = true,
@@ -1933,6 +1987,8 @@
\bool_new:N \l_@@_table_firstrow_bool
+\seq_new:N \l_@@_store_values_seq
+\seq_new:N \l_@@_store_counts_seq
\cs_generate_variant:Nn \keyval_parse:NNn { NNV }
\NewDocumentCommand \StatsTable { +O{} +m +O{} } {
@@ -1975,6 +2031,18 @@
}
% \end{macrocode}
%
+% Define getters for some items of the table, to be used for instance to
+% programmatically choose the formatting.
+%
+% \begin{macrocode}
+ \cs_set_nopar:Npn \getvalue {
+ \seq_item:Nn \l_@@_store_values_seq
+ }
+ \cs_set_nopar:Npn \getcount {
+ \seq_item:Nn \l_@@_store_count_seq
+ }
+% \end{macrocode}
+%
% Compute the total population count/frequency
%
% \begin{macrocode}
@@ -2010,10 +2078,14 @@
\cs_new_protected_nopar:Nn \@@_table_start: {
% \end{macrocode}
%
-% Init column count
+% Init column count and fetch the next maxcols value (or keep the current one if
+% we reached the end of the list).
%
% \begin{macrocode}
\int_zero:N \l_@@_nbvals_int
+ \clist_pop:NNT \l_@@_table_maxcols_clist \l_tmpa_tl {
+ \int_set:Nn \l_@@_table_maxcols_int { \l_tmpa_tl }
+ }
% \end{macrocode}
%
% Start rows with headers
@@ -2120,6 +2192,7 @@
% Values
%
% \begin{macrocode}
+ \seq_put_right:Nn \l_@@_store_values_seq { #1 }
\bool_if:NT \l_@@_table_values_bool {
\tl_put_right:Nx \l_@@_table_values_tl {
\exp_not:V \l_tmpa_tl {
@@ -2134,6 +2207,7 @@
% Counts
%
% \begin{macrocode}
+ \seq_put_right:Nx \l_@@_store_counts_seq { \fp_eval:n {#2} }
\bool_if:NT \l_@@_table_counts_bool {
\tl_put_right:Nx \l_@@_table_counts_tl {
\exp_not:V \l_tmpa_tl {
@@ -2531,7 +2605,7 @@
counts/format = { \num{#1} },
counts/axis = { ticks~and~grid={
- many, int~about~strategy, integer~minor~steps,
+ many, int~about~strategy, integer~minor~steps*,
} },
comb/counts/label = \countname,
cumulative/counts/label = \ccountname,
@@ -2545,7 +2619,10 @@
histogram/y/axis = {ticks = none},
histogram/y/autostep = 1,
histogram/legend = { x=, y=0, w=\xstep },
- histogram/style = { semithick, black, fill=black, fill~opacity=0.1 },
+ histogram/style = {
+ every~path/.prefix~style=fill,
+ semithick, black, fill=black, fill~opacity=0.1
+ },
histogram/areas,
histogram/areas/style = { auto, font=\small },
@@ -2668,6 +2745,18 @@ integer~minor~steps/.style={
}
},
integer~minor~steps/.default=50,
+integer~minor~steps*/.style={
+ compute~step/.append = {
+ \tl_set_eq:NN \l_tmpa_tl \tikz@lib@dv@step
+ \tl_if_eq:NNF \l_tmpa_tl \relax {
+ \fp_compare:nT { \l_tmpa_tl < 1 } {
+ \tl_set:Nx \tikz@lib@dv@step {1}
+ }
+ }
+ },
+ integer~minor~steps=#1,
+},
+integer~minor~steps*/.default=50,
}
% \end{macrocode}
%
@@ -2718,7 +2807,7 @@ integer~minor~steps/.default=50,
\fp_gset:Nn \g_@@_graph_xstep_fp
{ \tl_use:c {\l_tmpa_tl} }
}{
- \fp_gset:Nn \g_@@_graph_xstep_fp { \c_one }
+ \fp_gset:Nn \g_@@_graph_xstep_fp { \c_one_int }
}
% \end{macrocode}
%
@@ -3030,9 +3119,8 @@ integer~minor~steps/.default=50,
\exp_not:n { , visualize~as~line = histogram,
histogram = } {
\exp_not:n { polygon, style = } {
- \exp_not:n { every~path/.append~style = } {
\exp_not:V \l_@@_graph_options_histogram_tl
- } } }
+ } }
\exp_not:n { ] data [set = histogram, format = TeX~code] } {
\exp_not:V \l_@@_graph_tikzdata_tl
}
@@ -3190,9 +3278,8 @@ integer~minor~steps/.default=50,
\exp_not:n { , visualize~as~line = bar~graph,
bar~graph = } {
\exp_not:n { style = } {
- \exp_not:n { every~path/.append~style = } {
\exp_not:V \l_@@_graph_options_comb_tl
- } } }
+ } }
\exp_not:n { ] data [set = bar~graph, format = TeX~code] } {
\exp_not:V \l_@@_graph_tikzdata_tl
}
@@ -3365,9 +3452,8 @@ integer~minor~steps/.default=50,
\exp_not:n { , visualize~as~line = cumulative,
cumulative = } {
\exp_not:n { style = } {
- \exp_not:n { every~path/.append~style = } {
\exp_not:V \l_@@_graph_options_cumulative_tl
- } } }
+ } }
\exp_not:n { ] data [set = cumulative, format = TeX~code] } {
\exp_not:V \l_@@_graph_tikzdata_tl
}
diff --git a/macros/latex/contrib/statistics/statistics.ins b/macros/latex/contrib/statistics/statistics.ins
index fb958db323..743475ec40 100644
--- a/macros/latex/contrib/statistics/statistics.ins
+++ b/macros/latex/contrib/statistics/statistics.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File statistics.ins (C) Copyright 2014-2018 RIVAUD Julien
+File statistics.ins (C) Copyright 2014-2019 RIVAUD Julien
It may be distributed and/or modified under the conditions of the
General Public License (GPL), either version 3 of this
diff --git a/macros/latex/contrib/statistics/statistics.pdf b/macros/latex/contrib/statistics/statistics.pdf
index 13ba2fb5b1..625901633b 100644
--- a/macros/latex/contrib/statistics/statistics.pdf
+++ b/macros/latex/contrib/statistics/statistics.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/CHANGES b/macros/latex/contrib/testidx/CHANGES
index c37932f084..4917d1faa6 100644
--- a/macros/latex/contrib/testidx/CHANGES
+++ b/macros/latex/contrib/testidx/CHANGES
@@ -1,3 +1,11 @@
+v1.2 (2019-09-29):
+
+ * Added options ascii and noascii
+
+ * Added lonely sub-item
+
+ * Corrected description for seal
+
v1.1 (2017-08-11):
* Added more sample text, including examples starting with some
diff --git a/macros/latex/contrib/testidx/README b/macros/latex/contrib/testidx/README
index 1671deff3c..9802c9ed45 100644
--- a/macros/latex/contrib/testidx/README
+++ b/macros/latex/contrib/testidx/README
@@ -1,6 +1,6 @@
-LaTeX Package : testidx v1.1
+LaTeX Package : testidx v1.2
-Last Modified : 2017-08-11
+Last Modified : 2019-09-29
Author : Nicola Talbot
@@ -24,7 +24,8 @@ Example document:
\end{document}
Note that the dummy indexing intentionally triggers multiple encap
-warnings for testing purposes.
+warnings for testing purposes. The package is designed to emulate
+common problems.
LICENCE
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-a4.pdf b/macros/latex/contrib/testidx/samples/sample-idx-a4.pdf
index 40d26c22e5..3ca5dc3cff 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-a4.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-a4.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-amsmath.pdf b/macros/latex/contrib/testidx/samples/sample-idx-amsmath.pdf
index b212b990cc..5cc32f4301 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-amsmath.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-amsmath.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-babel-german.pdf b/macros/latex/contrib/testidx/samples/sample-idx-babel-german.pdf
index 624a7ec024..c6c10af4b2 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-babel-german.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-babel-german.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-babel-german.tex b/macros/latex/contrib/testidx/samples/sample-idx-babel-german.tex
index 3f0719aa34..2537bc3b99 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-babel-german.tex
+++ b/macros/latex/contrib/testidx/samples/sample-idx-babel-german.tex
@@ -18,7 +18,7 @@
\usepackage{filecontents}
\usepackage{makeidx}
\usepackage{babel}
-\usepackage{testidx}
+\usepackage[ascii]{testidx}
\providecommand*\lettergroup[1]{%
\par\textbf{#1}\par
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-german.pdf b/macros/latex/contrib/testidx/samples/sample-idx-german.pdf
index 8796631b56..a63d6cd0d9 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-german.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-german.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-german.tex b/macros/latex/contrib/testidx/samples/sample-idx-german.tex
index 0a3543bbea..c8be326632 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-german.tex
+++ b/macros/latex/contrib/testidx/samples/sample-idx-german.tex
@@ -18,7 +18,7 @@
\usepackage{filecontents}
\usepackage{makeidx}
\usepackage{ngerman}
-\usepackage[german]{testidx}
+\usepackage[german,ascii]{testidx}
\providecommand*\lettergroup[1]{%
\par\textbf{#1}\par
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-hyp.pdf b/macros/latex/contrib/testidx/samples/sample-idx-hyp.pdf
index e46507fbae..85fc48dea5 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-hyp.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-hyp.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-letter.pdf b/macros/latex/contrib/testidx/samples/sample-idx-letter.pdf
index 319f33dd7b..2f85f38412 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-letter.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-letter.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-lua.pdf b/macros/latex/contrib/testidx/samples/sample-idx-lua.pdf
index 6cf3556cd3..70b9f497eb 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-lua.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-lua.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-lua.tex b/macros/latex/contrib/testidx/samples/sample-idx-lua.tex
index 39526333cd..31b7ad0339 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-lua.tex
+++ b/macros/latex/contrib/testidx/samples/sample-idx-lua.tex
@@ -12,7 +12,7 @@
% arara: lualatex
% arara: xindy: {language: english, codepage: utf8,
% arara: --> log: sample-idx-lua.ilg,
-% arara: --> modules: [basename, texindy]}
+% arara: --> modules: [sample-idx-lua, texindy]}
% arara: lualatex
\documentclass{article}
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-subset.pdf b/macros/latex/contrib/testidx/samples/sample-idx-subset.pdf
index c6045b334e..68e21fbfe3 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-subset.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-subset.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-t1.pdf b/macros/latex/contrib/testidx/samples/sample-idx-t1.pdf
index 50a176f0d4..5ca311a23e 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-t1.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-t1.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-utf8.pdf b/macros/latex/contrib/testidx/samples/sample-idx-utf8.pdf
index f35959e4b7..92c8339c56 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-utf8.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-utf8.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-utf8.tex b/macros/latex/contrib/testidx/samples/sample-idx-utf8.tex
index e4cbb529f3..836963ea27 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-utf8.tex
+++ b/macros/latex/contrib/testidx/samples/sample-idx-utf8.tex
@@ -11,7 +11,7 @@
%
% arara: pdflatex
% arara: xindy: {language: english, codepage: utf8,
-% arara: --> modules: [basename, texindy]}
+% arara: --> modules: [sample-idx-utf8, texindy]}
% arara: pdflatex
\documentclass{article}
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.pdf b/macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.pdf
index a9c6341239..820d84b896 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.tex b/macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.tex
index 7fcd40f949..d579daaabe 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.tex
+++ b/macros/latex/contrib/testidx/samples/sample-idx-xe-digraphs.tex
@@ -4,9 +4,9 @@
% with XeLaTeX and xindy using digraph glyphs.
% You can build this document using:
%
-% xelatex sample-idx-xe
-% xindy -M sample-idx-xe -M texindy -C utf8 -L english -t sample-idx-xe.ilg sample-idx-xe.idx
-% xelatex sample-idx-xe
+% xelatex sample-idx-xe-digraphs
+% xindy -M sample-idx-xe-digraphs -M texindy -C utf8 -L english -t sample-idx-xe-digraphs.ilg sample-idx-xe-digraphs.idx
+% xelatex sample-idx-xe-digraphs
%
% You may want to experiment with different languages.
%
@@ -14,7 +14,7 @@
%
% arara: xelatex
% arara: xindy: {language: english, codepage: utf8,
-% arara: --> modules: [basename, texindy]}
+% arara: --> modules: [sample-idx-xe-digraphs, texindy]}
% arara: xelatex
\documentclass{article}
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-xe.pdf b/macros/latex/contrib/testidx/samples/sample-idx-xe.pdf
index af1f8ada1e..7d5a0510e1 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-xe.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx-xe.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idx-xe.tex b/macros/latex/contrib/testidx/samples/sample-idx-xe.tex
index 4502dafe6f..f1edaa47f6 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx-xe.tex
+++ b/macros/latex/contrib/testidx/samples/sample-idx-xe.tex
@@ -13,7 +13,7 @@
%
% arara: xelatex
% arara: xindy: {language: english, codepage: utf8,
-% arara: --> modules: [basename, texindy]}
+% arara: --> modules: [sample-idx-xe, texindy]}
% arara: xelatex
\documentclass{article}
diff --git a/macros/latex/contrib/testidx/samples/sample-idx.pdf b/macros/latex/contrib/testidx/samples/sample-idx.pdf
index 61197f8097..cf24bc93dd 100644
--- a/macros/latex/contrib/testidx/samples/sample-idx.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idx.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.pdf b/macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.pdf
index e5410c3d84..5354e2194b 100644
--- a/macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls-xe.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.pdf b/macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.pdf
index 956cdf1511..9b22eb4b61 100644
--- a/macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idxgloss-bib2gls.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idxgloss-desc.pdf b/macros/latex/contrib/testidx/samples/sample-idxgloss-desc.pdf
index 764fc16f9d..7cfe8e25ec 100644
--- a/macros/latex/contrib/testidx/samples/sample-idxgloss-desc.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idxgloss-desc.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idxgloss-desc.tex b/macros/latex/contrib/testidx/samples/sample-idxgloss-desc.tex
index 34c350a27c..51bf60d169 100644
--- a/macros/latex/contrib/testidx/samples/sample-idxgloss-desc.tex
+++ b/macros/latex/contrib/testidx/samples/sample-idxgloss-desc.tex
@@ -5,7 +5,7 @@
\usepackage[T1]{fontenc}
\usepackage[hidelinks]{hyperref}
-\usepackage[desc]{testidx-glossaries}
+\usepackage[desc,ascii]{testidx-glossaries}
\tstidxmakegloss
diff --git a/macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.pdf b/macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.pdf
index ee78e9178c..ac3bd07d79 100644
--- a/macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idxgloss-xe-digraphs.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.pdf b/macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.pdf
index 582ce035b0..06816ef5f8 100644
--- a/macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idxgloss-xindy.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idxgloss.pdf b/macros/latex/contrib/testidx/samples/sample-idxgloss.pdf
index de7e98a83a..a220c9492d 100644
--- a/macros/latex/contrib/testidx/samples/sample-idxgloss.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-idxgloss.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/samples/sample-idxgloss.tex b/macros/latex/contrib/testidx/samples/sample-idxgloss.tex
index 0b7f8b6118..3fc6661563 100644
--- a/macros/latex/contrib/testidx/samples/sample-idxgloss.tex
+++ b/macros/latex/contrib/testidx/samples/sample-idxgloss.tex
@@ -6,7 +6,7 @@
\usepackage[T1]{fontenc}
\usepackage{amssymb}
\usepackage[a4paper,left=.75in,right=1.6in]{geometry}
-\usepackage[verbose]{testidx-glossaries}
+\usepackage[verbose,ascii]{testidx-glossaries}
\renewcommand*{\glstreenamefmt}[1]{#1}
\renewcommand*{\glstreegroupheaderfmt}[1]{\textbf{#1}}
diff --git a/macros/latex/contrib/testidx/samples/sample-noidxgloss.pdf b/macros/latex/contrib/testidx/samples/sample-noidxgloss.pdf
index 633472b549..9dadb10e47 100644
--- a/macros/latex/contrib/testidx/samples/sample-noidxgloss.pdf
+++ b/macros/latex/contrib/testidx/samples/sample-noidxgloss.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/testidx-code.pdf b/macros/latex/contrib/testidx/testidx-code.pdf
index 0e30ab91a9..0374b93cd1 100644
--- a/macros/latex/contrib/testidx/testidx-code.pdf
+++ b/macros/latex/contrib/testidx/testidx-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/testidx-manual.pdf b/macros/latex/contrib/testidx/testidx-manual.pdf
index 7eedfb5ba4..4c81af5790 100644
--- a/macros/latex/contrib/testidx/testidx-manual.pdf
+++ b/macros/latex/contrib/testidx/testidx-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/testidx/testidx-manual.tex b/macros/latex/contrib/testidx/testidx-manual.tex
index 5311acae3a..a08bdfe22a 100644
--- a/macros/latex/contrib/testidx/testidx-manual.tex
+++ b/macros/latex/contrib/testidx/testidx-manual.tex
@@ -27,12 +27,12 @@
\begin{document}
- \title{testidx.sty v1.1:
+ \title{testidx.sty v1.2:
dummy text for testing indexes}
\author{Nicola L.C. Talbot\\[10pt]
\url{http://www.dickimaw-books.com/}}
- \date{2017-08-11}
+ \date{2019-09-29}
\maketitle
\tableofcontents
@@ -41,7 +41,11 @@ dummy text for testing indexes}
The \styfmt{testidx} package is for testing indexes (\cs{index},
\env{theindex} and indexing applications, such as \app{makeindex}
-and \app{xindy}).
+and \app{xindy}). See also
+\href{http://tug.org/TUGboat/tb38-3/tb120talbot.pdf}{Testing
+indexes: \texttt{testidx.sty}} in
+\href{http://tug.org/TUGboat/Contents/contents38-3.html}{TUGboat issue 38:3, 2017}.
+
As with packages like \sty{lipsum} and \sty{blindtext}, this package
provides dummy text, but it's interspersed with \cs{index} commands.
The filler text is mostly English not lorum ipsum, as this makes it
@@ -112,13 +116,23 @@ equation.
\item Symbols and numbers that don't have a natural word order.
The numbers may or may not be ordered numerically, depending on the
indexing method.
+
+\item An item with just a single sub-item. (Perhaps the document
+author intended to index more sub-items but they weren't needed in
+the end.) Ideally this needs to be flagged and have the hierarchy
+removed. There are actually two lonely sub-items. The first is
+\qt{properties} as a sub-item of \qt{document}. In this case the
+parent \qt{document} has also been indexed and has a location. The
+second is \qt{lonely} as a sub-item of \qt{sub-items}. In this case
+the parent \qt{sub-items} hasn't been indexed and so doesn't have a
+location.
\end{itemize}
In addition, words containing extended Latin characters, digraphs and a
trigraph are indexed to help test various Latin alphabets, such as
Swedish, Icelandic, Welsh, Dutch, Polish and Hungarian. These may or
may not be recognised by indexing applications.
-Version 1.1 now comes with a supplementary package
+As from version 1.1, \sty{testidx} now comes with a supplementary package
\sty{testidx-glossaries} which provides a similar way of testing the
\sty{glossaries} or \sty{glossaries-extra} package.
@@ -150,6 +164,24 @@ There will be warnings about multiple encaps. This is intentional
to test how the indexing applications deal with this problem.
\end{important}
+Note that as from 2018, \LaTeX\ now automatically provides limited
+UTF-8 support even if the document doesn't load \sty{inputenc}. Therefore
+the above document will use the ASCII indexing tests with pre-2018
+\LaTeX, but will use the UTF-8 indexing tests with newer versions of
+the \LaTeX\ kernel (because \cs{inputencodingname} is now defined as
+\texttt{utf8}). If you specifically want to test ASCII indexing
+then you either need to switch to ASCII encoding:
+\begin{verbatim}
+\usepackage[ascii]{inputenc}
+\usepackage{makeidx}
+\usepackage{testidx}
+\end{verbatim}
+or use \sty{testidx}'s \pkgopt{ascii} option:
+\begin{verbatim}
+\usepackage{makeidx}
+\usepackage[ascii]{testidx}
+\end{verbatim}
+
If you want to use \app{xindy}, you'll need to define the
attributes (encaps) used in the dummy text. For example:
\begin{verbatim}
@@ -272,7 +304,7 @@ For example:
\usepackage{filecontents}
\usepackage{makeidx}
\usepackage{ngerman}
-\usepackage[german]{testidx}
+\usepackage[german,ascii]{testidx}
\begin{filecontents*}{\jobname.ist}
quote '+'
@@ -302,7 +334,7 @@ Alternatively:
\usepackage{filecontents}
\usepackage{makeidx}
\usepackage{babel}
-\usepackage{testidx}
+\usepackage[ascii]{testidx}
\begin{filecontents*}{\jobname.ist}
quote '+'
@@ -324,7 +356,7 @@ The \styfmt{testidx-glossaries} package automatically loads
\documentclass{report}
\usepackage[T1]{fontenc}
-\usepackage{testidx-glossaries}
+\usepackage[ascii]{testidx-glossaries}
\renewcommand*{\glstreenamefmt}[1]{#1}
@@ -358,6 +390,15 @@ redefined in the above example to simply do its argument.
The following package options are provided:
\begin{description}
+\item[\pkgopt{ascii}] Use only ASCII tests even if the document
+supports UTF-8. Any characters outside
+that range are produced with \LaTeX\ commands.
+
+\item[\pkgopt{noascii}] (Default.) Don't enforce ASCII tests. This option
+doesn't actually provide UTF-8 support but will simply
+determine whether or not to use ASCII tests depending on the
+document's input encoding.
+
\item[\pkgopt{german} or \pkgopt{ngerman}]
This redefines the indexing \qt{quote} character to use \texttt{+}
instead of the double-quote character. Remember to add this
@@ -412,6 +453,10 @@ This option may also be implemented using
\begin{definition}[\DescribeMacro\testidxSanitizeOff]
\cs{testidxSanitizeOff}
\end{definition}
+Note that as from \LaTeX\ 2019/10/01 UTF-8 characters are no longer
+expanded while they are written to the \texttt{.idx} file. This
+means that there may be no difference between \pkgopt{sanitize} and
+\pkgopt{nosanitize} depending on the \LaTeX\ kernel in use.
\item[\pkgopt{showmarks}]
(Default.) Show the location of the \cs{index} commands
@@ -1026,12 +1071,16 @@ The \qt{close range} character. The default is:
\label{sec:exlatin}
The dummy text includes words or phrases that have extended
-Latin characters. There are two modes:
+Latin characters. (The document encoding should be correctly set
+before loading \sty{testidx}.) There are two modes:
\begin{description}
-\item[ASCII] This mode is on \emph{unless} you are using
-\XeLaTeX\ or \LuaLaTeX, or the document has loaded
-\sty{inputenc} with the encoding set to \pkgopt{utf8}.
+\item[ASCII] This mode is on by default \emph{unless} you are using
+\XeLaTeX\ or \LuaLaTeX, or the document has the encoding set to \pkgopt{utf8}.
+Note that with new versions of \LaTeX, \cs{inputencodingname} is now
+automatically defined as \pkgopt{utf8} by the kernel. You can
+explicitly switch this mode on with the \pkgopt{ascii} package
+option.
Example that will switch on ASCII mode:
\begin{verbatim}
@@ -1049,12 +1098,30 @@ Example that will switch on ASCII mode:
\printindex
\end{document}
\end{verbatim}
+(With new versions of \LaTeX\ this document will start with
+\cs{inputencodingname} set to \texttt{utf8} and then it will be
+changed to \texttt{latin1} when \sty{inputenc} is loaded.)
+
+Alternatively use the \pkgopt{ascii} package option:
+\begin{verbatim}
+\documentclass{article}
-\item[UTF-8] This mode is on \emph{if} you are using
-\XeLaTeX\ or \LuaLaTeX, or if the document has loaded
-\sty{inputenc} with the encoding set to \pkgopt{utf8}.
+\usepackage{makeidx}
+\usepackage[ascii]{testidx}
-Example that will switch on UTF-8 mode:
+\makeindex
+
+\begin{document}
+\testidx
+
+\printindex
+\end{document}
+\end{verbatim}
+
+\item[UTF-8] This mode is on by default \emph{if} you are using
+\XeLaTeX\ or \LuaLaTeX, or if \cs{inputencodingname} is set to \pkgopt{utf8}.
+
+Example that will switch on UTF-8 mode (\XeLaTeX\ or \LuaLaTeX):
\begin{verbatim}
\documentclass{article}
@@ -1070,7 +1137,7 @@ Example that will switch on UTF-8 mode:
\printindex
\end{document}
\end{verbatim}
-Or
+Or (\sty{inputenc} sets the encoding to UTF-8):
\begin{verbatim}
\documentclass{article}
@@ -1087,13 +1154,30 @@ Or
\printindex
\end{document}
\end{verbatim}
+Or with new versions of the \LaTeX\ kernel (which automatically
+provides UTF-8 support):
+\begin{verbatim}
+\documentclass{article}
+
+\usepackage[T1]{fontenc}
+\usepackage{makeidx}
+\usepackage{testidx}
+
+\makeindex
+
+\begin{document}
+\testidx
+
+\printindex
+\end{document}
+\end{verbatim}
If the UTF-8 mode is on, you can additionally use the
\pkgopt{diglyphs} package option to replace the
\tstidxqt{ll}, \tstidxqt{ij} and \tstidxqt{dz} digraphs with
a single glyph, but you'll need a font that supports
those glyphs. (The trigraph \tstidxqt{dzw} and other digraphs,
-such as \tstidxqt{th} aren't affected by this option.) For example
+such as \tstidxqt{th} aren't affected by this option.) For example:
\begin{verbatim}
\documentclass{article}
@@ -1174,7 +1258,7 @@ above will appear in the \texttt{.idx} file as:
\end{verbatim}
(where 3 is the page number).
-Since this can confuse the indexing application,
+Since this expansion can confuse the indexing application,
\styfmt{testidx} provides a \pkgopt{sanitize} package option
which will first sanitize the UTF-8 characters before
indexing them. This option is on by default for regular \LaTeX\ and
@@ -1188,6 +1272,13 @@ if you want to test how your indexing command (whatever
\cs{tstindex} is defined as) behaves with these characters, then
switch it off.
+\begin{important}
+As from \LaTeX\ 2019/10/01 this behaviour has changed and the UTF-8
+characters are no longer expanded while they are written to the
+\texttt{.idx} file. This means that the tests may produce different
+results depending on the \LaTeX\ kernel in use.
+\end{important}
+
Note that this \pkgopt{sanitize} option isn't adjusting the
definition of \cs{index} or \cs{tstindex}, but is essentially
pretending that the user is doing something like:
diff --git a/macros/latex/contrib/testidx/testidx.dtx b/macros/latex/contrib/testidx/testidx.dtx
index 39a48ed9fe..8b743807ce 100644
--- a/macros/latex/contrib/testidx/testidx.dtx
+++ b/macros/latex/contrib/testidx/testidx.dtx
@@ -1,17 +1,17 @@
%\iffalse
% testidx.dtx generated using makedtx version 1.2 (c) Nicola Talbot
% Command line args:
-% -author "Nicola Talbot"
-% -doc "testidx-codedoc.tex"
-% -setambles ".*\.bib=>\nopreamble\nopostamble"
-% -codetitle "Main Package Code"
% -src "(testidx.sty)\Z=>\1"
% -src "(testidx-.*.sty)\Z=>\1"
% -src "(testidx-glossaries.*\.tex)\Z=>\1"
% -src "(testidx-glossaries.*\.bib)\Z=>\1"
+% -setambles ".*\.bib=>\nopreamble\nopostamble"
+% -doc "testidx-codedoc.tex"
+% -codetitle "Main Package Code"
+% -author "Nicola Talbot"
% -macrocode ".*\.bib"
% testidx
-% Created on 2017/8/11 12:58
+% Created on 2019/9/29 13:53
%\fi
%\iffalse
%<*package>
@@ -34,7 +34,7 @@
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
-% Copyright (C) 2017 Nicola Talbot, all rights reserved.
+% Copyright (C) 2019 Nicola Talbot, all rights reserved.
% \fi
% \iffalse
%<*driver>
@@ -45,6 +45,7 @@ testidx-codedoc.tex is a stub file used by makedtx to create
testidx.dtx
\fi
+\usepackage{metalogo}
\usepackage{fontspec}
\setromanfont{FreeSerif}
\setsansfont{FreeSans}[Scale=MatchLowercase]
@@ -61,7 +62,7 @@ testidx.dtx
\setcounter{IndexColumns}{2}
-\CheckSum{10076}
+\CheckSum{10168}
\begin{document}
\DocInput{testidx.dtx}
@@ -71,12 +72,12 @@ testidx.dtx
%\MakeShortVerb{"}
%\DeleteShortVerb{\|}
%
-% \title{Documented Code For testidx v1.1}
+% \title{Documented Code For testidx v1.2}
% \author{Nicola L.C. Talbot\\[10pt]
%Dickimaw Books\\
%\url{http://www.dickimaw-books.com/}}
%
-% \date{2017-08-11}
+% \date{2019-09-29}
% \maketitle
%
%\tableofcontents
@@ -106,7 +107,7 @@ testidx.dtx
%\section{Initialisation}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{testidx}[2017/08/11 v1.1 (NLCT)]
+\ProvidesPackage{testidx}[2019/09/29 v1.2 (NLCT)]
% \end{macrocode}
%To avoid as much conflict as possible, this package loads the
%bare minimum, so I'm not using useful packages like \styfmt{etoolbox} or
@@ -135,9 +136,10 @@ testidx.dtx
}
% \end{macrocode}
%\end{macro}
-%\begin{macro}{\@tstidx@ifutfviii}
+%\begin{macro}{\@@tstidx@ifutfviii}
+%\changes{1.2}{2019-09-29}{renamed from \cs{@tstidx@ifutfviii}}
% \begin{macrocode}
-\newcommand*{\@tstidx@ifutfviii}[2]{%
+\newcommand*{\@@tstidx@ifutfviii}[2]{%
\@tstidx@ifxelua{#1}
{%
\ifx\inputencodingname\@tstidx@utfviii#1\else#2\fi
@@ -146,6 +148,23 @@ testidx.dtx
\newcommand*{\@tstidx@utfviii}{utf8}
% \end{macrocode}
%\end{macro}
+%\begin{macro}{\@tstidx@ifutfviii}
+%\changes{1.2}{2019-09-29}{now let to \cs{@@tstidx@ifutfviii}}
+% \begin{macrocode}
+\let\@tstidx@ifutfviii\@@tstidx@ifutfviii
+% \end{macrocode}
+%\end{macro}
+%As from 2018, \LaTeX\ now automatically enables UTF-8 support, so provide
+%an option to use only ASCII in the test:
+%\changes{1.2}{2019-09-29}{added ascii and noascii options}
+% \begin{macrocode}
+\DeclareOption{ascii}{\let\@tstidx@ifutfviii\@secondoftwo}
+% \end{macrocode}
+%Provide option to counteract this (if document doesn't support
+%UTF-8 this won't make a difference):
+% \begin{macrocode}
+\DeclareOption{noascii}{\let\@tstidx@ifutfviii\@@tstidx@ifutfviii}
+% \end{macrocode}
%
%\begin{macro}{\tstidxprocessasciisort}
%The first argument is a control sequence in which to store the
@@ -301,6 +320,12 @@ testidx.dtx
}
% \end{macrocode}
%\end{macro}
+%Note that as from LaTeX 2019/10/01, UTF-8 characters no longer
+%expand as they are written to the indexing file. This means that
+%there won't be a difference if the sanitizing is on or off.
+%Similarly there's no difference with \XeLaTeX\ and \LuaLaTeX\ since
+%they natively support UTF-8 and don't make extended characters
+%active anyway.
%
%\begin{macro}{\iftestidxdiglyphs}
%\changes{1.1}{2017-08-11}{new}
@@ -3702,6 +3727,7 @@ testidx.dtx
%\end{macro}
%
%\begin{macro}{\@tidx@par@iii}
+%\changes{1.2}{2019-09-29}{added lonely sub-item}
% \begin{macrocode}
\tstidxnewblock
{%
@@ -3812,7 +3838,8 @@ testidx.dtx
any further sub-levels. Although \tstidxapp{xindy} allows more than
three levels (\tstidxapp{makeindex} doesn't), it's somewhat
\tstidxword{excessive} to go below a sub-sub-level.
- You'll have to add your own tests for anything deeper.%
+ You'll have to add your own tests for anything deeper.
+ Watch out for \tstidxsubword{sub-items}{lonely} sub-items.%
}
% \end{macrocode}
%\end{macro}
@@ -4676,7 +4703,7 @@ and then we can take a \tstidxword{ffotograff} of
%and then used in the dummy text.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{testidx-glossaries}[2017/08/11 v1.1 (NLCT)]
+\ProvidesPackage{testidx-glossaries}[2019/09/29 v1.2 (NLCT)]
% \end{macrocode}
%
%\begin{macro}{\tstidx@glossariespkg}
@@ -7728,9 +7755,10 @@ use the
any further sub-levels. Although \tstidxapp{xindy} allows more than
three levels (\tstidxapp{makeindex} doesn't), it's somewhat
\tstidxword{excessive} to go below a sub-sub-level.
- You'll have to add your own tests for anything deeper.%
-
+ You'll have to add your own tests for anything deeper.
+ Watch out for \tstidxsubword{sub-items}{lonely} sub-items.%
}
+
\let\@tidx@org@par@iii\@tidx@par@iii
\let\@tidx@par@iii\@tidx@gls@par@iii
% \end{macrocode}
@@ -8059,6 +8087,7 @@ design or provide new commands}
\tstidxnewword{people}{human individuals (or fictional
anthropomorphisms)}
\tstidxnewword{places}{particular areas or locations}
+\tstidxnewword{sub-items}{items that have a parent entry}
\tstidxnewword{applications}{computer programs}
\tstidxnewword{environments}{a marked-up block within the document
that requires special action or formatting}
@@ -8257,7 +8286,7 @@ something}
\tstidxnewword{thrilling}{exciting}
\tstidxnewword{quixotic}{impractically unselfish and idealist}
\tstidxnewword{sea}{large area of salt water}
-\tstidxnewword{seal}{seal-dwelling fish-eating mammal with flippers}
+\tstidxnewword{seal}{sea-dwelling fish-eating mammal with flippers}
\tstidxnewword{seaborne}{transported or travelling by sea}
\tstidxnewword{zither}{a type of stringed musical instrument}
\tstidxnewword{zealous}{having great enthusiasm for something}
@@ -8566,6 +8595,8 @@ story, especially fairy tales}
% \end{macrocode}
%Sub-entries (terms).
% \begin{macrocode}
+\tstidxnewsubword{sub-items}{lonely}{a sub-item that doesn't have
+any siblings}
\tstidxnewsubword{document}{properties}{attributes such as page size}
\tstidxnewsubword{font encoding}{OT1}{one of the original font
encodings supplied with \TeX}
@@ -10512,6 +10543,12 @@ some other languages}
description={particular areas or locations}
}
+@index{subitems,
+ category={word},
+ name={sub-items},
+ description={items that have a parent entry}
+}
+
@index{applications,
category={word},
description={computer programs}
@@ -11362,7 +11399,7 @@ something}
@index{seal,
category={word},
- description={seal-dwelling fish-eating mammal with flippers}
+ description={sea-dwelling fish-eating mammal with flippers}
}
@index{sea,
@@ -11591,6 +11628,13 @@ the sovereign}
description={attributes such as page size}
}
+@index{subitems.lonely,
+ name={lonely},
+ parent={subitems},
+ category={word},
+ description={a sub-item that doesn't have any siblings}
+}
+
@index{fontencoding.OT1,
name={OT1},
parent={fontencoding},
diff --git a/macros/latex/contrib/testidx/testidx.ins b/macros/latex/contrib/testidx/testidx.ins
index 3ec870db68..47846d5a8b 100644
--- a/macros/latex/contrib/testidx/testidx.ins
+++ b/macros/latex/contrib/testidx/testidx.ins
@@ -1,10 +1,10 @@
-% testidx.ins generated using makedtx version 1.2 2017/8/11 12:58
+% testidx.ins generated using makedtx version 1.2 2019/9/29 13:53
\input docstrip
\preamble
testidx.dtx
- Copyright 2017 Nicola Talbot
+ 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
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index e0222b7c62..6bf4c76f83 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,7 +26,7 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2019
-depend revision/52200
+depend revision/52215
name 00texlive.image
category TLCore
@@ -12094,7 +12094,7 @@ catalogue-topics pseudocode
name algobox
category Package
-revision 45223
+revision 52204
shortdesc Typeset Algobox programs
relocated 1
longdesc This LaTeX package can typeset Algobox programs almost exactly
@@ -12106,16 +12106,16 @@ longdesc documents cumbersome to customize, and has arbitrary and
longdesc inconsistent differences between the input syntax and the
longdesc program text. This package depends upon the following other
longdesc LaTeX packages: expl3, TikZ, environ, xparse, and xcolor.
-containersize 3632
-containerchecksum e139637e873a42abea92aeadd1a8c92ac29dfd30f6373e5b97b21422887d564ab1e6a8f8770d2e0847aed6e1cc9f16602367c1699e7217d0076bf9f23080a888
-doccontainersize 140576
-doccontainerchecksum 9c6e1118868d718184081a2372f4ed60cef1eed421a25a00689180ed4e510e1a86590f78a5de106089d8eb329d8f2e9903f37e9c176bb00faa3ea72ab7cd034f
-docfiles size=43
+containersize 3636
+containerchecksum 0c7b068f117a5eb591646e32faf3a9dfb6a03a218411d092afc33c7adcee30f95836a9d841444fe87a700288e293510763807d393043518ba70e64a3df82099f
+doccontainersize 123652
+doccontainerchecksum ccc96b84ea2d1c6c9dab8bd286e24f3dcb4fb9dd31904b1eef4b07a1de34a067f3cccd3d8e33785edced6dee8673e60d50ffc201643912d732660b1f14404d74
+docfiles size=39
RELOC/doc/latex/algobox/LICENSE
RELOC/doc/latex/algobox/README.md details="Readme"
RELOC/doc/latex/algobox/algobox.pdf details="Package documentation"
-srccontainersize 5512
-srccontainerchecksum e887fe85c9d48bfcad8611f96b055552dd88a0ceb92726ff7e4b149aa5c058f48cd5fbd613fee0fdc8cc80ea2f76178132a54ddb617bd6ca30ffe29c7497092c
+srccontainersize 5508
+srccontainerchecksum 49e1b417bb0df72356f5d4046826268dad628d6872732a61cc7df789bd214799ed49a4a0778eceb31369fbf8cbf21c6b142a85348e10a7ab634828108b7cf03a
srcfiles size=6
RELOC/source/latex/algobox/algobox.dtx
RELOC/source/latex/algobox/algobox.ins
@@ -12125,10 +12125,10 @@ catalogue-contact-bugs https://gitlab.com/frnchfrgg-latex/algobox/issues
catalogue-contact-home https://gitlab.com/frnchfrgg-latex/algobox/wikis/home
catalogue-contact-repository https://gitlab.com/frnchfrgg-latex/algobox
catalogue-ctan /macros/latex/contrib/algobox
-catalogue-date 2017-09-07 05:54:52 +0200
+catalogue-date 2019-09-29 19:21:54 +0200
catalogue-license gpl3+
catalogue-topics listing program-doc
-catalogue-version 1.2a
+catalogue-version 1.3
name algolrevived
category Package
@@ -45237,23 +45237,23 @@ catalogue-topics bibtex-sty
name cellprops
category Package
-revision 48227
+revision 52205
shortdesc Accept CSS-like selectors in tabular, array, ...
relocated 1
longdesc This package reworks the internals of tabular, array, and
longdesc similar constructs, and adds a \cellprops command accepting
longdesc CSS-like selectors and properties. It depends on mdwtab,
longdesc xcolor, expl3, and xparse.
-containersize 6116
-containerchecksum b265840a57793e1c3e3a0bae5b2cd64c613b35d7ee614e2b79c9f52106b1087b201050c90d12575581fe8d77a9d8b800922611e71dc0744d802f5cb95808248f
-doccontainersize 569632
-doccontainerchecksum 9cbdf7da67411316ac2a7b9cb9968878d3edbc0ea2dbbfb03af317e3d2adc25bf9e25d147e7e29e31a572c2a6da5e38501c236ba2f57fe1d3a6455ce53b1fe8c
-docfiles size=151
+containersize 6140
+containerchecksum 0dd543116fdf89a6d83c5e7a4a96b6dd627f156b13bc56db5905bdb32f2e880d9292913d6e3423e1eb248c0340fa2e9cfb73d0c7795fb4bd363f90c9d150ebc9
+doccontainersize 551312
+doccontainerchecksum 3f44b803ca78fc08732ca9971da4bfc7755cc73e0b8cae8d88ab3b4e4906271bffe9762b75b2281776f36f3813f3cf0d58c0b38bf2fbb14b25156e00c711e14b
+docfiles size=147
RELOC/doc/latex/cellprops/LICENSE
RELOC/doc/latex/cellprops/README.md details="Readme"
RELOC/doc/latex/cellprops/cellprops.pdf details="Package documentation"
-srccontainersize 10260
-srccontainerchecksum 9c3a64fd6f37f1697b9d2615604ab90c5cc540919d3014a6d734788704928def6192a383f87e201abe530a50d65e281e1d059010cf88d9619808380153085036
+srccontainersize 10432
+srccontainerchecksum aa342fe74a9e73f880db8aebcd3cccde038ce56b279d359c82d5f00bcd92bc5bde2a3bcaffed3768f3835c524c5706e695a3a46a938f4d92d352b4176606e31e
srcfiles size=13
RELOC/source/latex/cellprops/cellprops.dtx
RELOC/source/latex/cellprops/cellprops.ins
@@ -45262,10 +45262,10 @@ runfiles size=8
catalogue-contact-bugs https://gitlab.com/frnchfrgg-latex/cellprops/issues
catalogue-contact-repository https://gitlab.com/frnchfrgg-latex/cellprops
catalogue-ctan /macros/latex/contrib/cellprops
-catalogue-date 2018-07-18 22:06:07 +0200
+catalogue-date 2019-09-29 19:44:48 +0200
catalogue-license gpl3+
catalogue-topics table
-catalogue-version 1.4
+catalogue-version 1.6
name cellspace
category Package
@@ -87203,7 +87203,7 @@ catalogue-version 2.1
name ducksay
category Package
-revision 51364
+revision 52206
shortdesc Draw ASCII art of animals saying a specified message
relocated 1
longdesc The package draws ASCII art of animals saying a specified
@@ -87211,15 +87211,15 @@ longdesc message. The following macros are available: \ducksay
longdesc \duckthink \DefaultAnimal \AddAnimal \DucksayOptions Multi-line
longdesc messages are now fully supported. The package comes with two
longdesc versions, choosable with the version key.
-containersize 8452
-containerchecksum 938986993424e1504b6d2e081ef83a1aa76eb8914f7ab9e6981b741e1fae927b8cfabf8f4741b0fad296d509f211c8cfef97ffb1956a576fcee55d6362d20674
-doccontainersize 523676
-doccontainerchecksum 065b1e11e043f532acd22584b676502e8bcffe94e2bec62d69800f40062d9f16952b643b71d3b6cb0d1dab04e27d71f7d3f08a069b4ea68d918ba58fed23c56c
+containersize 8456
+containerchecksum 57deacbacac1d79bbe0f4657fb55c05eb03c93068534f2d6703cd3785f1b056289f548edd9f01f52dfb22b5c1b402e8a3809240d323bd62fddc6b69a32e27e9b
+doccontainersize 523796
+doccontainerchecksum f4b49ccc5c3044a00c55fe396cea8e63b04fa5ad8d24e894b15044c189d6f3abba4e4e8d3d2200ebcbd15e9e40efeb2ac1f29996fb41d82d47b83810260408c0
docfiles size=130
RELOC/doc/latex/ducksay/README.md details="Readme"
RELOC/doc/latex/ducksay/ducksay.pdf details="Package documentation"
-srccontainersize 19356
-srccontainerchecksum 272523c7075a4699f4760302ac89a0d82bd7f218e8ed79c65ee756e42862287a1f767f9d2ed496460b5a8cde32e20102a59b539c9aa542bd7e7bee9761cf3b41
+srccontainersize 19364
+srccontainerchecksum 8b027a2d0f11606d4469c490c8c4825cc68f147f99d1e708689cff2627e7df0b2583ab4bb4accbb2cbb7b0b8d803c2f0a7a13dec1d67036bb25330371345d515
srcfiles size=22
RELOC/source/latex/ducksay/ducksay.dtx
runfiles size=13
@@ -87230,14 +87230,14 @@ runfiles size=13
catalogue-contact-bugs https://github.com/Skillmon/ltx_ducksay/issues
catalogue-contact-repository https://github.com/Skillmon/ltx_ducksay
catalogue-ctan /macros/latex/contrib/ducksay
-catalogue-date 2019-06-11 12:59:26 +0200
+catalogue-date 2019-09-28 23:01:25 +0200
catalogue-license lppl1.3c
catalogue-topics games graphics
-catalogue-version 2.4
+catalogue-version 2.4.1
name duckuments
category Package
-revision 51308
+revision 52207
shortdesc Create duckified dummy content
relocated 1
longdesc The package provides facilities to create duckified dummy
@@ -87251,30 +87251,30 @@ longdesc \duckitemize - ducklist{itemize} \duckenumerate -
longdesc ducklist{enumerate} \duckdescription - ducklist{description}
longdesc \duckumentsCreateExampleFile \duckumentsDrawRandomDucks The
longdesc package works with pdfTeX, LuaTeX, and XeTeX.
-containersize 468360
-containerchecksum afc871187be89a35634ec1e899f560a6ff966cd8cf390e3b08ac7111880beea5b9da9f52a4b4bc6400e4581ebea8954f82f7892fe910e907eb2542be77125d8a
-doccontainersize 495256
-doccontainerchecksum b75662a28a62906acac9e60230edbef9671b2b09d955ba26e0fe5a5664e1d774b5f2c15129f02f8f7ff172197532acd68ff9e22f4f32c2ba643a2ae108b68fab
+containersize 459904
+containerchecksum 9c19677cd3aaf9d10707f8107d60804e868fb1a525d332895015b69125003655a2dbde6ca3b0d36e9b7181223f3e7c4e3d6a310efa4d19a3128bf4d251746f8d
+doccontainersize 495116
+doccontainerchecksum 30833f68239289570324e81470ee7a64cd5c0371f9b42c7605beddd23e535b6281641b042d6a9e877e13655e8fad18045d155daa66d703c9f87e15c3b122d5e5
docfiles size=124
RELOC/doc/latex/duckuments/README.md details="Readme"
RELOC/doc/latex/duckuments/duckuments.pdf details="Package documentation"
RELOC/doc/latex/duckuments/example-image-duck-portrait.tex
RELOC/doc/latex/duckuments/example-image-duck.tex
-srccontainersize 8876
-srccontainerchecksum 06b7bb6eae2c5ac0889636c4b0639e37ecb2e50d7ef573240e0ac6baa1542d57e526ee3b14fecf7166263b4ee13b03e6b7f44be29d33a0bf0adfffadffabda67
+srccontainersize 8880
+srccontainerchecksum 90b1592dd1e738951d4c1939774c55ce75df2c41b4a2f005f41c2d90650b92e2474514749af20be6af2c94504e23f250ab73e9b242f8703630d557c1b678b554
srcfiles size=10
RELOC/source/latex/duckuments/duckuments.dtx
-runfiles size=144
+runfiles size=142
RELOC/tex/latex/duckuments/duckuments.sty
RELOC/tex/latex/duckuments/example-image-duck-portrait.pdf
RELOC/tex/latex/duckuments/example-image-duck.pdf
catalogue-also lipsum tikzducks
catalogue-contact-repository https://github.com/Skillmon/ltx_duckuments
catalogue-ctan /macros/latex/contrib/duckuments
-catalogue-date 2019-06-03 00:07:00 +0200
+catalogue-date 2019-09-28 23:10:11 +0200
catalogue-license lppl1.3c
catalogue-topics macro-supp dummy-gen
-catalogue-version 0.4d
+catalogue-version 0.4e
name duerer
category Package
@@ -108830,7 +108830,7 @@ catalogue-version 1.5
name filecontentsdef
category Package
-revision 50942
+revision 52208
shortdesc filecontents + macro + verbatim
relocated 1
longdesc The package provides two environments called filecontentsdef
@@ -108844,32 +108844,33 @@ longdesc TeX code verbatim in documentation and the same time produce
longdesc the corresponding files during the LaTeX run in order to embed
longdesc them in the PDF as file attachment annotations (by using Scott
longdesc Pakin's package attachfile).
-containersize 2364
-containerchecksum e0fa23f45b6dec1dfeb0dc6c8fe53bb2ceaf7e68bf2ffcd8f09134d294bcb8714375f6f488d906d7e0fe72e285f1d0e7f7428456093c9da32dbef747564e658d
-doccontainersize 90648
-doccontainerchecksum 5b7412d379dc9d9e93dbbbe29f967ad32cf16af2d07a551627c8175068eff8777f53d717f789d6b48f8ca9231d4a73aac2cf44a632415860a56ac1b203041de6
-docfiles size=31
+containersize 2600
+containerchecksum 63b399a5e21d2d4946c195f380a0d5f269f8c978c0b504cda80c0796604dfcb66df38ca79d31078efa03c7475967bc0ebfb856e933bce6b21d12836368780e2a
+doccontainersize 129568
+doccontainerchecksum 26e7ca9971a0683325b62e2feeeb0db6ecdd3a732f07ae93515f2300ed58e97a44ff8a7504d194119c1e27d1d9bc4f367f29c17458c0e7f0b6a0a61fe18ea0ca
+docfiles size=41
RELOC/doc/latex/filecontentsdef/INSTALL
RELOC/doc/latex/filecontentsdef/INSTALL.md
RELOC/doc/latex/filecontentsdef/README.md details="Readme"
RELOC/doc/latex/filecontentsdef/filecontentsdef-ex1.tex
RELOC/doc/latex/filecontentsdef/filecontentsdef-ex2.tex
RELOC/doc/latex/filecontentsdef/filecontentsdef-ex3.tex
+ RELOC/doc/latex/filecontentsdef/filecontentsdef-tab.test
RELOC/doc/latex/filecontentsdef/filecontentsdef.pdf details="Package documentation"
RELOC/doc/latex/filecontentsdef/filecontentsdef.test
RELOC/doc/latex/filecontentsdef/filecontentsdef.tex
-srccontainersize 12252
-srccontainerchecksum e3707ed6f5351189ca89b40f415055ea53db53811d12d6b09a83e7f63e26821cc4aa348aa289d4b876df7a1fa896f30d64e50b2860adf159e19c3b33bbcb0dd5
-srcfiles size=10
+srccontainersize 17028
+srccontainerchecksum f6e822a28e074fece05b911f0bf9d262e2b925c2a73559764e1eb5131d9081b48ace0ead5f46bb250bf648eac204eb1d5d7b362be508f58b40a50f70577de534
+srcfiles size=14
RELOC/source/latex/filecontentsdef/filecontentsdef.dtx
runfiles size=2
RELOC/tex/latex/filecontentsdef/filecontentsdef.sty
catalogue-also filecontents
catalogue-ctan /macros/latex/contrib/filecontentsdef
-catalogue-date 2019-04-23 14:37:59 +0200
+catalogue-date 2019-09-29 13:17:23 +0200
catalogue-license lppl1.3
catalogue-topics file-mgmt
-catalogue-version 1.4
+catalogue-version 1.5
name filedate
category Package
@@ -117606,7 +117607,7 @@ catalogue-version 0.2
name gatherenum
category Package
-revision 48051
+revision 52209
shortdesc A crossover of align* and enumerate
relocated 1
longdesc This package (ab)uses the inline enumeration capabilities of
@@ -117620,16 +117621,16 @@ longdesc number per line. Gathered enumeration fills items in a
longdesc line-major order (instead of column-major order), which my
longdesc students found less confusing. YMMV. The package depends on
longdesc enumitem, expl3, and xparse,
-containersize 1704
-containerchecksum a9f080ae405b7ddd0bc98bb6c5388b00aa8939f6e0650cd9c7eff249f039ec179e646d57e8b940dabf8108878597b0845607f4328146e4a7ac102a28b03e90ec
-doccontainersize 423972
-doccontainerchecksum 717a114e3cfb5a3c6cee73406b393ec36eb708aead4ce1e805e96da196350cf836cddbe94f24690b5fddf1c3091a33f9da5f7a0c00051e58f6ea60cfe7599888
-docfiles size=111
+containersize 1724
+containerchecksum f0a0897ca3b306341a8af5121d09b31d9169a90e073f3d2babc2b4a32b72d33b4f7ded73f2455e5b6e7454188112440cdff97c4332f3396c948ace8b2944598d
+doccontainersize 406000
+doccontainerchecksum 9e6e1c322aa19a1c3ccaa622cf8657dd314dccc0fedeb7056e182bfc648fa21b06b67e8d1bf2d529fbf84652a0d6eec9d5a4ffeea1003dcfd2cd195ba628c6f5
+docfiles size=107
RELOC/doc/latex/gatherenum/LICENSE
RELOC/doc/latex/gatherenum/README.md details="Readme"
RELOC/doc/latex/gatherenum/gatherenum.pdf details="Package documentation"
-srccontainersize 4140
-srccontainerchecksum ccab5434f3912074c12c7a90ea546d65dc3b21b8ccb834214a617202ed45269408f05da8ad2218334ac32c173e86d53d4b810991eca59bb55297683e70f8d01b
+srccontainersize 4180
+srccontainerchecksum 5696c57b7a05132487fa04c16a577531886e8e443aef06e2b3b6418f74d2d971160cb1d95df43ae29c81ebde9459f8611bdea151895f8390e03d5ff2193fb318
srcfiles size=4
RELOC/source/latex/gatherenum/gatherenum.dtx
RELOC/source/latex/gatherenum/gatherenum.ins
@@ -117638,10 +117639,10 @@ runfiles size=1
catalogue-contact-bugs https://gitlab.com/frnchfrgg-latex/gatherenum/issues
catalogue-contact-repository https://gitlab.com/frnchfrgg-latex/gatherenum
catalogue-ctan /macros/latex/contrib/gatherenum
-catalogue-date 2018-06-24 05:03:49 +0200
+catalogue-date 2019-09-29 19:51:25 +0200
catalogue-license gpl3+
catalogue-topics list expl3
-catalogue-version 1.7
+catalogue-version 1.8
name gauss
category Package
@@ -147936,7 +147937,7 @@ catalogue-topics latex3 expl3 macro-supp pre-release
name l3build
category Package
-revision 52183
+revision 52214
shortdesc A testing and building system for (La)TeX
longdesc The build system supports testing and building LaTeX3 code, on
longdesc Linux, Mac OS X and Windows systems. The package offers: A unit
@@ -147948,9 +147949,9 @@ longdesc material released by the LaTeX3 team, and may be updated on a
longdesc different schedule.
depend l3build.ARCH
containersize 31308
-containerchecksum 480bb7758d0a03e498da67180e36ae00d70c0baf2b0c804687eee44fc15cb79d01ff9fcb88dea447794f7713ddf2665f3d10858187cf8912118aa10c7ce5cebf
-doccontainersize 720604
-doccontainerchecksum 291685f1eba816d7ec1a117baa3ce8e7705c4fd6f87001b505c339a45b6707f6113214ca160f0ee1a6031cbd8d4d7a45258e5a69d74dd184b2c8127b92165f8b
+containerchecksum a3facd1f52a9eb75244ce194a18835321f8bf950d72f47d46a11bd60ff3694d498a9da7325252ffdd65ee54d9cf97fad5046f818121d1f2be4fbd6d2639d3846
+doccontainersize 720248
+doccontainerchecksum ff458fc23e78a50de371dc3c4da6f52e60f330c24995a776452ab4555585a3ff621ecfd54a4df00e2b468ccd3dc116030a8ac2f591a17a7130bc62162423957e
docfiles size=183
texmf-dist/doc/latex/l3build/CHANGELOG.md
texmf-dist/doc/latex/l3build/CONTRIBUTING.md
@@ -147958,8 +147959,8 @@ docfiles size=183
texmf-dist/doc/latex/l3build/l3build.pdf details="Package documentation"
texmf-dist/doc/man/man1/l3build.1
texmf-dist/doc/man/man1/l3build.man1.pdf
-srccontainersize 28832
-srccontainerchecksum 9c2c4a09f7cce63e737aebd3cdc6c13ae4bd7e5b0c93ee3837740cf121e99999678919e538f75967edbb2c6fcdf3f9b2b30d2e349216d625707dc625c581f72b
+srccontainersize 28820
+srccontainerchecksum d562f87398f6404ef1fbf96759cd5201b82aa98dbe36e1459626a304e7b8cb744365979df9da521c95b46574ccf7f06596841a4ef11bba5d03d246e4f43a0655
srcfiles size=27
texmf-dist/source/latex/l3build/l3build.dtx
texmf-dist/source/latex/l3build/l3build.ins
@@ -147986,7 +147987,7 @@ catalogue-contact-bugs https://github.com/latex3/l3build/issues
catalogue-contact-home https://www.latex-project.org
catalogue-contact-repository https://github.com/latex3/l3build
catalogue-ctan /macros/latex/contrib/l3build
-catalogue-date 2019-09-25 15:38:31 +0200
+catalogue-date 2019-09-29 10:04:55 +0200
catalogue-license lppl1.3c
catalogue-topics package-devel macro-supp
@@ -148136,7 +148137,7 @@ binfiles arch=x86_64-solaris size=1
name l3experimental
category Package
-revision 52129
+revision 52214
shortdesc Experimental LaTeX3 concepts
relocated 1
longdesc The l3experimental packages are a collection of experimental
@@ -148159,11 +148160,11 @@ longdesc 'handle' positions, supplementing the simple TeX reference
longdesc point; xgalley, which controls boxes receiving text for
longdesc typesetting.
depend l3kernel
-containersize 25084
-containerchecksum 420425dda7a20359ee1b5809c34bbefafd1489a737aa1604de018a2a2c36057535661a2e2e220cb3f5c1ac71a7d30fcc009264dec26aeb3da41b56a913c6e689
-doccontainersize 3868900
-doccontainerchecksum dd634a839bf425a4d6c9195914d9475239e1200d13e3dcf5c04643ccd01cb217fe82907f458e377b7b47d30ed8138755cf31d18603d6b7318676f8388bf544d6
-docfiles size=1186
+containersize 25112
+containerchecksum 52c5ea8adcfd0f341ff92e7c8ce93dfc245946b58422e04c7efe9ff91c5a45a8764cc26be3451bcb572772c4a1b0ac142e2bb58dd220bad7a1fb267432c8c86b
+doccontainersize 3869584
+doccontainerchecksum 6f109b4c0f3d918d7cd1f4a57a992b9f975022648c9f52ed37a9f548536f31e6df6962eef8047cfa12f19542fe99073422c11370036e89edd0b95cbac86836a7
+docfiles size=1187
RELOC/doc/latex/l3experimental/CHANGELOG.md
RELOC/doc/latex/l3experimental/README.md details="Readme"
RELOC/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf details="l3benchmark documentation"
@@ -148181,8 +148182,8 @@ docfiles size=1186
RELOC/doc/latex/l3experimental/xcoffins/xcoffins.pdf details="xcoffins documentation"
RELOC/doc/latex/l3experimental/xgalley/l3galley.pdf
RELOC/doc/latex/l3experimental/xgalley/xgalley.pdf details="xgalley documentation"
-srccontainersize 84928
-srccontainerchecksum 1be19918b4d40a3ba5201387c434baff9730a768a2a9f98e749b5f605e19cb68c2674451eea34cd13a93aad13c1713008f5bc4bf964ca35639d98f91fb2740ee
+srccontainersize 84896
+srccontainerchecksum 945aac369f83f71aa88d48beeb99acbcdcdfb8a720ed5e362fdee09fe06b0ea00b0a45f7512e854f246aeb56aeddeacd355e9ce06aff9c97d8803d4f1b38f98d
srcfiles size=139
RELOC/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
RELOC/source/latex/l3experimental/l3benchmark/l3benchmark.ins
@@ -148228,13 +148229,13 @@ runfiles size=52
catalogue-also l3kernel l3packages
catalogue-contact-home http://www.latex-project.org/code.html
catalogue-ctan /macros/latex/contrib/l3experimental
-catalogue-date 2019-09-19 20:12:49 +0200
+catalogue-date 2019-09-29 08:16:39 +0200
catalogue-license lppl1.3c
catalogue-topics macro-supp layout latex3 pre-release
name l3kernel
category Package
-revision 52129
+revision 52214
shortdesc LaTeX3 programming conventions
relocated 1
longdesc The l3kernel bundle provides an implementation of the LaTeX3
@@ -148244,11 +148245,11 @@ longdesc LaTeX3 kernel and other future code are built: it is an API for
longdesc TeX programmers. The packages are set up so that the LaTeX3
longdesc conventions can be used with regular LaTeX2e packages.
depend l3backend
-containersize 144044
-containerchecksum a6db2b835ea513d7be9d279af423be8227b05d12a768333e2e7d53b7cb85e4d5694ea8f05f0d281e92ce186695037f888dc9279f47d2344b347ce7bbe5407774
-doccontainersize 7989664
-doccontainerchecksum 1b0c5e511dacaadf38ded01debfebc3ddb250642db25f050df8721a7083bffb4ca31e5da26272badfaa9062a972a1848a3bcac7b6596331e06a9073c0fd1c612
-docfiles size=2205
+containersize 145032
+containerchecksum 014ae8d94f6e756c63cf6e77998bef6ab21395a816d26be99e1918da1cb3ae0f84884a910b15c9c37b02d13794e906aff0b43f56675162e4f3fac44fd390d77e
+doccontainersize 7927956
+doccontainerchecksum 272b75c2e9cacf3957948520b24d6acb942cd430c57598294abb972b28ead40498cec21e3746cfaefa3e296259165f040465cdb8ff2be307f9562a622b244aa2
+docfiles size=2194
RELOC/doc/latex/l3kernel/CHANGELOG.md
RELOC/doc/latex/l3kernel/README.md details="Readme"
RELOC/doc/latex/l3kernel/expl3.pdf details="The LaTeX3 Programming Language"
@@ -148268,9 +148269,9 @@ docfiles size=2205
RELOC/doc/latex/l3kernel/source3.pdf
RELOC/doc/latex/l3kernel/source3.tex
RELOC/doc/latex/l3kernel/source3body.tex
-srccontainersize 522240
-srccontainerchecksum d432378cf50483e416837c21a10e6cb08fa26fe7aca486b87153baf7349b5498ce57a06eae123d731eb82bff6b00a64140c1cf1c4a04c0a1d2e8a19efb823467
-srcfiles size=802
+srccontainersize 523728
+srccontainerchecksum d17855e80dc520ef0982a9efe4acaf5a212e305a6bda3353194fa63bbb69ff067d759cd3676accec4b97bf1c0bf9ddb7b072a4be2dd3b3db451f69198aa20362
+srcfiles size=803
RELOC/source/latex/l3kernel/expl3.dtx
RELOC/source/latex/l3kernel/l3.ins
RELOC/source/latex/l3kernel/l3alloc.dtx
@@ -148281,6 +148282,7 @@ srcfiles size=802
RELOC/source/latex/l3kernel/l3clist.dtx
RELOC/source/latex/l3kernel/l3coffins.dtx
RELOC/source/latex/l3kernel/l3color-base.dtx
+ RELOC/source/latex/l3kernel/l3debug.dtx
RELOC/source/latex/l3kernel/l3deprecation.dtx
RELOC/source/latex/l3kernel/l3doc.dtx
RELOC/source/latex/l3kernel/l3docstrip.dtx
@@ -148325,11 +148327,13 @@ srcfiles size=802
RELOC/source/latex/l3kernel/l3tl.dtx
RELOC/source/latex/l3kernel/l3token.dtx
RELOC/source/latex/l3kernel/l3unicode.dtx
-runfiles size=296
+runfiles size=297
RELOC/tex/latex/l3kernel/expl3-code.tex
RELOC/tex/latex/l3kernel/expl3-generic.tex
RELOC/tex/latex/l3kernel/expl3.lua
RELOC/tex/latex/l3kernel/expl3.sty
+ RELOC/tex/latex/l3kernel/l3debug.def
+ RELOC/tex/latex/l3kernel/l3deprecation.def
RELOC/tex/latex/l3kernel/l3doc.cls
RELOC/tex/latex/l3kernel/l3docstrip.tex
RELOC/tex/latex/l3kernel/l3str-enc-iso88591.def
@@ -148352,7 +148356,7 @@ catalogue-contact-bugs https://github.com/latex3/latex3/issues
catalogue-contact-home http://www.latex-project.org/code.html
catalogue-contact-repository https://github.com/latex3/latex3
catalogue-ctan /macros/latex/contrib/l3kernel
-catalogue-date 2019-09-19 19:19:05 +0200
+catalogue-date 2019-09-29 07:54:16 +0200
catalogue-license lppl1.3c
catalogue-topics format latex3 pre-release
@@ -230203,7 +230207,7 @@ catalogue-version 1.0
name poemscol
category Package
-revision 52127
+revision 52210
shortdesc Typesetting Critical Editions of Poetry
relocated 1
longdesc The package offers LaTeX macros for typesetting critical
@@ -230214,17 +230218,17 @@ longdesc marking for cases in which page breaks occur during stanza
longdesc breaks, running headers of the form 'Notes to pp. xx-yy' for
longdesc the notes sections, index of titles and first lines, and
longdesc automatic generation of a table of contents.
-containersize 18644
-containerchecksum abd142d48874fbad09144b7e13c88c0e94f80913905ae2efc1590480816d85fdf39b2171181fd50b4ebc6790ec5c2ac38ee2625fab681469fc838e0b4eae46fe
-doccontainersize 748192
-doccontainerchecksum 4039cf16a424f05a65f6a0b291a03b837c65a1049e942c8045b21a1b4cb8e76d683a8b9bd91144b2e4ca42156e5a54f2ce48e446b01172827068e1857f1a21e4
+containersize 18672
+containerchecksum 59906e64751670ce1a00ac953db24a890b0c3388fc306c5520d62a728497203c1516106210b56b26f22ebf6e78e33a3f01bb7d897ad356f2364ac85c17819a82
+doccontainersize 748128
+doccontainerchecksum 8631041e8c3188dce9a0982b7e69e6efdf7949fbd600c5869ee84467b06b80754c86e1b54476843002a12be4a52c9f88c82441cebfb86d4eceb12605391d3477
docfiles size=191
RELOC/doc/latex/poemscol/README details="Readme"
RELOC/doc/latex/poemscol/poemscol.pdf details="Documented source"
RELOC/doc/latex/poemscol/poemscolcheatsheet.pdf details="Cheat Sheet"
RELOC/doc/latex/poemscol/poemscolcheatsheet.tex
-srccontainersize 88424
-srccontainerchecksum 21ea13d6f7c7af64205b27df2fff33df826108ed422aeda9edbf64034e8fa230c5f50e1e5402307707f7814532b5f5b645ac2831d0f8d0bdbe6248f9ce7481c5
+srccontainersize 88472
+srccontainerchecksum 6717c08c6d728f7aed959cb2ab1ded7d050241f61d878889dd838c85c4090aba602dd8b85e5c8b8f01fbf23aac7ab1562d9d33e31eccfbd508277507f5ab24ba
srcfiles size=115
RELOC/source/latex/poemscol/poemscol.dtx
RELOC/source/latex/poemscol/poemscol.ins
@@ -230232,10 +230236,10 @@ runfiles size=38
RELOC/tex/latex/poemscol/poemscol.sty
catalogue-also edmac ledmac ednotes verse
catalogue-ctan /macros/latex/contrib/poemscol
-catalogue-date 2019-09-19 09:04:21 +0200
+catalogue-date 2019-09-28 23:17:09 +0200
catalogue-license lppl1.3c
catalogue-topics crit-ed
-catalogue-version 3.13
+catalogue-version 3.14
name poetry
category Package
@@ -257361,7 +257365,7 @@ catalogue-version 0.52
name skdoc
category Package
-revision 47526
+revision 52211
shortdesc Documentation and extraction for packages and document classes
relocated 1
longdesc The class provides the functionality and implementation of
@@ -257371,24 +257375,24 @@ longdesc differences. The class defines a MacroCode environment which
longdesc offers an alternative to the usual docstrip method of
longdesc installing packages. It has the ability to generate both
longdesc documentation and code in a single run of a single file.
-containersize 9736
-containerchecksum 5fcb40b4f6bf91a1f0757f51a498b361f154f6410dd15adeca0c5579ce8d9d12aac732a8c7b740df599b5562801ffdf74e0ebf156603e75e9dbeb0c21246c3cd
-doccontainersize 271028
-doccontainerchecksum ed5bdb7318ebf7d5b736b15ce5061eb8f476b98ebc671264849e1964d7d6c04a6cabe568e524c1b325ffa55930a86cbf9694898e9b35333266db72b2218b1e89
-docfiles size=68
+containersize 9728
+containerchecksum 3f4bf340f6076f00101cc8be20d284d487672d544f0c17efe41cc1b6f469df90022455f23b790a8289151cbcc81cc3f1e846eb242321221ca290d97ead9ff2a8
+doccontainersize 292584
+doccontainerchecksum b3a4972162cf366c5db5820b0075871f651c817a36c915841717d4856b5078a9de45b7043ac1cac0bb8e4b9f02cfd0a89fdb53b0723475950c182bfe3ea6bff9
+docfiles size=73
RELOC/doc/latex/skdoc/README details="Readme"
RELOC/doc/latex/skdoc/skdoc.pdf details="Package documentation"
-srccontainersize 26964
-srccontainerchecksum 776807c0844d09eb1611fae9ca7ae48de97706c163f9731937d2d03090c9ad011976ec277ee76ce974c96833a24544ed87ed8976ffb71b8331e943c1e219dabb
+srccontainersize 27004
+srccontainerchecksum cb4f18a74cbd84e1d75f7c024746d161ef62c79a2be62fd72d33a8a2ec3c8a8594f8ded5721a390fa29b8b31f1b6e77bad65c96c82ffb2299c58a4446204de81
srcfiles size=31
RELOC/source/latex/skdoc/skdoc.dtx
runfiles size=13
RELOC/tex/latex/skdoc/skdoc.cls
catalogue-ctan /macros/latex/contrib/skdoc
-catalogue-date 2019-01-12 10:17:10 +0100
+catalogue-date 2019-09-29 19:03:14 +0200
catalogue-license lppl1.3
catalogue-topics doc-supp class
-catalogue-version 1.5a
+catalogue-version 1.5b
name skeycommand
category Package
@@ -262845,7 +262849,7 @@ catalogue-version 2.1
name statistics
category Package
-revision 48252
+revision 52212
shortdesc Compute and typeset statistics tables and graphics
relocated 1
longdesc The 'statistics' package can compute and typeset statistics
@@ -262860,20 +262864,20 @@ longdesc 'statistics' to display no result, selective results or all of
longdesc them. Similarly 'statistics' can draw only some parts of the
longdesc graphs. Every part of the generated tables or graphics is
longdesc customizable.
-containersize 8280
-containerchecksum 3af04457e211b6094cefe7453a0d549d9d74d1a9f7c001f0cecc421538a3ccc3eb7b3cdb666880348821e68e1b85631fb2aa72fca02615b1e79e31b6688d3d2e
-doccontainersize 431312
-doccontainerchecksum 0ab00ebe9eb209ca690d2e4f56ef080fe1a5897ff8e28f43f2fc263db2aab3dbf8ce9bf873d9eff0e19d8015e32b65ff6b8eac33ad77bdbb79d8ba10e34a265c
-docfiles size=115
+containersize 8416
+containerchecksum b0f2c288a57cc64c72bd2b862cd6c40b62e7404c4733b25af64b43d008b277417bc72a4398734e5620e6d2b9f97b401c1d54ee69b0a1ad5947ecba798ecfe0b2
+doccontainersize 439308
+doccontainerchecksum 9d3f7b94c6d144b89c1c947645e4e071933b402e350ef6405d533bdb0a6aed650b215a135976410fbd3a68ceb0fdaf6c877f2d7435680f8c70f3a2209c0808bc
+docfiles size=117
RELOC/doc/latex/statistics/LICENSE
RELOC/doc/latex/statistics/README.md details="Readme"
RELOC/doc/latex/statistics/statistics.pdf details="Package documentation"
-srccontainersize 23108
-srccontainerchecksum f6643b1408226b0e3f022cc89c6990b34c03eca4b223b2579d8938cce870ba6ab1dff4bca11a703556fe997458245146286d0d5e2fb7017c354f543f626150ff
-srcfiles size=31
+srccontainersize 23728
+srccontainerchecksum a0ea1a189cda9472bf87996d4c191ab84ea824f3034a66d8e23982a1824aa78221fa368b3c8bd696ce58b65280599617c5ccfe4ef97fab8227148e90cc7f3e4e
+srcfiles size=32
RELOC/source/latex/statistics/statistics.dtx
RELOC/source/latex/statistics/statistics.ins
-runfiles size=14
+runfiles size=15
RELOC/tex/latex/statistics/statistics.sty
catalogue-contact-bugs https://gitlab.com/frnchfrgg-latex/statistics/issues
catalogue-contact-development https://gitlab.com/frnchfrgg-latex/statistics
@@ -262881,10 +262885,10 @@ catalogue-contact-home https://gitlab.com/frnchfrgg-latex/statistics
catalogue-contact-repository https://gitlab.com/frnchfrgg-latex/statistics
catalogue-contact-support https://gitlab.com/frnchfrgg-latex/statistics/issues
catalogue-ctan /macros/latex/contrib/statistics
-catalogue-date 2018-07-23 05:27:45 +0200
+catalogue-date 2019-09-29 19:55:40 +0200
catalogue-license gpl3+
catalogue-topics maths statistics
-catalogue-version 2.0
+catalogue-version 2.2
name statistik
category Package
@@ -269588,7 +269592,7 @@ catalogue-version 0.7
name testidx
category Package
-revision 45021
+revision 52213
shortdesc Dummy text for testing index styles and indexing applications
relocated 1
longdesc This is a LaTeX package that provides a command to produce
@@ -269600,11 +269604,11 @@ longdesc characters, depending on the setup, to allow for testing
longdesc extended Latin alphabets. The supplementary package
longdesc testidx-glossaries.sty uses the indexing interface provided by
longdesc the glossaries package.
-containersize 27112
-containerchecksum 30ce5a38b5bd6df91b9914952f1dfa6ea337e778856a4c8768e7c34c23ce745e51ad24834bebe48b7dd8e36b99822234b1e4d2494f8acb3fe3b458f4a2584e1d
-doccontainersize 3357224
-doccontainerchecksum b47e62f1b4ad56160bcb4b85d1b9744ea23307ede9e47a8d73c27eed49f7f99944b17e2b945017bbafda4661bb767b1fdd1dd856866921e72dd5b19f2fa3fc43
-docfiles size=1358
+containersize 27180
+containerchecksum 003179c0efebe0bb84cf1ddc80db6d905af6cbbbf59753b4102e5f7a760b5e7c90057976e2d0aac138b001e2a211da8758f8e2285866ac34c8287e1d3b82d1e4
+doccontainersize 3342856
+doccontainerchecksum deab83c1eb6f77b379b38bc81e680e18b9fb02a4b147363e05646849af1fe402249c50a8eb41e6ecf60fb1cc505cd82593ae90c356cd4bf43fa5685cf5162f44
+docfiles size=1362
RELOC/doc/latex/testidx/CHANGES
RELOC/doc/latex/testidx/README details="Readme"
RELOC/doc/latex/testidx/samples/sample-idx-a4.pdf
@@ -269647,7 +269651,7 @@ docfiles size=1358
RELOC/doc/latex/testidx/samples/sample-idxgloss.tex
RELOC/doc/latex/testidx/samples/sample-noidxgloss.pdf
RELOC/doc/latex/testidx/samples/sample-noidxgloss.tex
- RELOC/doc/latex/testidx/testidx-code.pdf
+ RELOC/doc/latex/testidx/testidx-code.pdf details="Code documentation"
RELOC/doc/latex/testidx/testidx-glossaries-diglyphs-utf8.bib
RELOC/doc/latex/testidx/testidx-glossaries-diglyphs.tex
RELOC/doc/latex/testidx/testidx-glossaries-markers.bib
@@ -269660,10 +269664,10 @@ docfiles size=1358
RELOC/doc/latex/testidx/testidx-glossaries-samples-utf8.bib
RELOC/doc/latex/testidx/testidx-glossaries-samples.bib
RELOC/doc/latex/testidx/testidx-glossaries-samples.tex
- RELOC/doc/latex/testidx/testidx-manual.pdf details="Package documentation"
+ RELOC/doc/latex/testidx/testidx-manual.pdf details="User manual"
RELOC/doc/latex/testidx/testidx-manual.tex
-srccontainersize 51268
-srccontainerchecksum 4ea0c1de69643cce5153e9e70e90d8f0fe17e5b002da9487befbd5345179a50ccd535cacf657b0deaec1d7a28440be35ecfa550e242020075f12c8b0bc8b35fd
+srccontainersize 51648
+srccontainerchecksum de09a92aefaff5ad23898b7b5c4ef447280c3664eb468c433161cc82bb040f2c3fb265ec976f4d985914804a96422748b2dc20863805e066cfefb976110a1a6b
srcfiles size=98
RELOC/source/latex/testidx/testidx.dtx
RELOC/source/latex/testidx/testidx.ins
@@ -269672,10 +269676,10 @@ runfiles size=48
RELOC/tex/latex/testidx/testidx.sty
catalogue-also blindtext
catalogue-ctan /macros/latex/contrib/testidx
-catalogue-date 2017-08-11 14:31:03 +0200
+catalogue-date 2019-09-29 17:34:08 +0200
catalogue-license lppl1.3
catalogue-topics index dummy-gen
-catalogue-version 1.1
+catalogue-version 1.2
name tetex
category TLCore
@@ -272423,7 +272427,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 52163
+revision 52215
shortdesc Convert (La)TeX to HTML/XML
longdesc A converter from TeX and LaTeX to SGML-based formats such as
longdesc (X)HTML, MathML, OpenDocument, and DocBook, providing a
@@ -272438,10 +272442,10 @@ longdesc restricted-syntax systems such as hyperlatex and gellmu. Note
longdesc that CTAN no longer holds the definitive sources of the
longdesc package: see the 'Readme' file.
depend tex4ht.ARCH
-containersize 896572
-containerchecksum 3abfedfd1f831cd53efe784be8ea2c3aa1b05dfdcbf8afab0ef6a3cf37110293189a85305889d9328f9f21f0a9781e8b0c55afe1242750bfa05af76c499a7bb3
-doccontainersize 61192
-doccontainerchecksum bb1e289c3cb10b989d519d217d732c37b3c23bfa04595968b0d98569aae7a0742dec6b814c2f101dbeca9c80cf75854945cf74f06bc57966f647fd2d954a4cfc
+containersize 896780
+containerchecksum 2c80f42a3c60643377e2d164b6e4d1ffd86dbfeecce7f629d81f99325136df943b615e5a354d9b32192f7266f80ac31b7e9be0e1a13aaed41fdef23d078129a3
+doccontainersize 61188
+doccontainerchecksum 98bbd1ea736c9f6d63077cfd0d595aa63ab820afbdc0dc6eee02ea7d152e4c13196e27f2a6e1d6e4b846d211e15f4ea3907256d0bde80ad5ec649789e72ca2ba
docfiles size=195
texmf-dist/doc/generic/tex4ht/bugfixes.css
texmf-dist/doc/generic/tex4ht/bugfixes.html
@@ -280667,15 +280671,15 @@ docfiles size=572
name texlive-docindex
category TLCore
-revision 52197
+revision 52202
shortdesc top-level TeX Live doc.html, etc.
longdesc These files are regenerated as needed, which is often, so we
longdesc make them a separate package. See the tl-update-auto script
longdesc for the process.
containersize 109876
-containerchecksum 224a55f7b451d5eaa172b8f6aa18e77b9c8afc57f00f260398e945c27558c1b416a4fab79774115826106459ff40fdc274697b077465db14a7e89d945ab1e027
-doccontainersize 154856
-doccontainerchecksum d4a02e2305595308ed39e3ebc511a2d017d7b3878d580facb7f26914bf81457b364c79c4df4ac041b3551f539f2f68ccc9f643c420cd0b47913ac38870ba7e27
+containerchecksum 12849107d3ce536dbd6e8ce6a0052a7fe97f5fda940a487e1ec2dfb89a19f5716ab3e131c731fcff304e1596d5a260885d90081ca056179e87e1aab835c72eb1
+doccontainersize 154812
+doccontainerchecksum e0d77867bc6096acc34c63ee3fb04ca92fc112fec51f55fad88b46cc1b999cc6b5692bf15bda0c75ecf10696b4a0387f7ae8b9a0bd3f39a3480e7bb8b08ddbcd
docfiles size=303
doc.html
runfiles size=270
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 2306e97986..2c6799e43c 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-46cc8da547fa176fb1abebb89a3b2c6a texlive.tlpdb
+c7aba118f80bb39c34e790f440495f1c texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 42e9f20d3b..734bfc7cb5 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-eacdafc4bb335841d15bbd3cd8407e4084324d58509351d1dd65a7f8f1f43ba661d0bd738b5d115f81648a5528a0d2fea086744ea0429e9503d001b51e58d69e texlive.tlpdb
+baad21c48f6c84addf40e80e484a74b0cb7a8e4d392033e331b802a2edf57fa41ef4225f1ab8b51cf971278eb19308f4b26be8803e9b2aa21d787319443a5884 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index fd6f2571e6..f681ed7cde 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJdj/KhAAoJEEzhh34ZQ4xwgOoH/Rs6w/BnX499M2UUY4HiiF5D
-9qx3rj0cY6AtMFiUqi085uplD9WOr7pjkAApKNN2g0ezJWeCSeggjzBbiFTqmq3a
-HUxSkNI06HwfkUbTmXKqep0tmjiQgxLkpM9QDghhg+edqOyjx/AjmnfHsJ3b3UVd
-gYAoX8mxiHVrAUJwB10EPrqxN6mp5Cyza44//C2pgEMpOB57u+tYtd8B8LOj0apb
-W6URcpmjMywb9SlzOeiQkIly+zijPt+3h1TPCw/xj57A7+j0DAG0l9YeVtH7TXEz
-KLTDwhfeXf88QsM7EVuV1DUSsHhqGLP5GimwbtcUdb3KL0ubHz1Y9/JU9tsmpF0=
-=xsiJ
+iQEcBAEBCgAGBQJdkURdAAoJEEzhh34ZQ4xwmvUH/3bv6tks5QN+WdAHJkun+ILs
+zCeeFVBeh/LLVgBoV93R3PGQduqswacsmRmVkK2t2mhLyJOZ6f+57nPva50L/ud2
+k97B5NI2BhG5beu+I5RRd0kQf6aIwV0uJOrtbqwj3kBghsFRFZQe2TPTSJAuK+BK
+daHb935ndZ8G9tQMqj5oOCGu3lmpr6MH0CjRCs0XzRtkfQ+koGDwCAgqcUEY3Ano
+EFSQI6Vt/ZfGHJKYSRnmzsxVImHMJyBVkcJLm37FbugGq92u7F/M2EMR4hJfGufl
+RuC+xivt5h3UpF7i6LJN6YUsPhQTZNrG3tUGjKf+c8wo7B7vPFXy0jgiuHMRM24=
+=mHNr
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index f6779808d0..b68bcb5693 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/files.csv.lzma b/systems/win32/miktex/tm/packages/files.csv.lzma
index ee2722554e..31ea9353dc 100644
--- a/systems/win32/miktex/tm/packages/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/files.csv.lzma b/systems/win32/miktex/tm/packages/next/files.csv.lzma
index 73d4ce547e..9a24389702 100644
--- a/systems/win32/miktex/tm/packages/next/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/next/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index cd30ac5ce0..f45c86d07b 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -2,9 +2,9 @@
[repository]
-date=1569701645
+date=1569788102
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=5643bfbd49e158ebd43f2d6c21074a12
-numpkg=3752
+lstdigest=74c1ce7c8d979d1492bfd0c608078d18
+numpkg=3753
relstate=next
-version=7210
+version=7211
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 102d450ac4..5d101dfc6d 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -2,9 +2,9 @@
[repository]
-date=1569701484
-lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=3926327fbea1ec28e58d3acdfdca9615
-numpkg=3752
+date=1569787877
+lastupd=acrotex babel chemmacros datatool ducksay duckuments exsheets glossaries ketcindy luatexja nanicolle poemscol practicalreports tokcycle upmethodology miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9
+lstdigest=26aee2e6d2b3ba1033b2b16debdac762
+numpkg=3753
relstate=stable
-version=7210
+version=7211
diff --git a/timestamp b/timestamp
index 09bcf0b89b..a753fb34ca 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2019-09-29-02-02
+2019-09-30-02-02