texlive[57374] Build/source/texk/web2c: MFLua 1.0.0-alpha

commits+lscarso at tug.org commits+lscarso at tug.org
Sun Jan 10 21:13:27 CET 2021


Revision: 57374
          http://tug.org/svn/texlive?view=revision&revision=57374
Author:   lscarso
Date:     2021-01-10 21:13:26 +0100 (Sun, 10 Jan 2021)
Log Message:
-----------
MFLua 1.0.0-alpha

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/Makefile.am
    trunk/Build/source/texk/web2c/Makefile.in
    trunk/Build/source/texk/web2c/mfluadir/ChangeLog
    trunk/Build/source/texk/web2c/mfluadir/am/mflua.am
    trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch
    trunk/Build/source/texk/web2c/mfluadir/mflua_version.h
    trunk/Build/source/texk/web2c/mfluadir/mfluac.c
    trunk/Build/source/texk/web2c/mfluajitdir/am/mfluajit.am

Added Paths:
-----------
    trunk/Build/source/texk/web2c/mfluadir/am/mfluaotfcc.am
    trunk/Build/source/texk/web2c/mfluadir/otfcc/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json-builder.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sds.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sdsalloc.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/buffer.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/element.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/ownership.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/vector.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json-builder.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/sds.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/uthash.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/font.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/glyph-order.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/handle.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/logger.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/options.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt-builder.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/BASE.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CFF.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/COLR.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CPAL.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/GDEF.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/LTSH.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/OS_2.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/SVG.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/TSI5.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VDMX.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VORG.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/_TSI.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cmap.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cvt.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fpgm-prep.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fvar.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/gasp.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/glyf.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hdmx.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/head.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hhea.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hmtx.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/maxp.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/meta.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/name.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/classdef.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/coverage.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/post.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/table-common.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vhea.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vmtx.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/axis.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/region.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vf.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vq.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vv.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-font.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/json-reader.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-codecs.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-opmean.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-parser.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-string.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-util.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-writer.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/libcff.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/logger.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/otf-reader.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/otf-writer.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aliases.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/bin-io.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/buffer.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/element-impl.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/glyph-order.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/handle.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-funcs.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/options.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/otfcc-alloc.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/primitives.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/tag.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/util.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/vector-impl.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/COLR.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/COLR.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CPAL.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CPAL.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/GDEF.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/GDEF.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/LTSH.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/LTSH.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/OS_2.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/OS_2.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/SVG.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/SVG.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/TSI5.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/TSI5.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VDMX.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/_TSI.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/_TSI.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/all.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/cmap.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/cmap.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/cvt.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/cvt.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/fpgm-prep.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/fpgm-prep.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/fvar.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/fvar.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/gasp.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/gasp.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf/build.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf/glyf.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf/read.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/glyf.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hdmx.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hdmx.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/head.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/head.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hhea.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hhea.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hmtx.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/hmtx.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/maxp.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/maxp.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/build.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/dump.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/parse.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/read.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta/type.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/meta.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/name.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/name.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/build.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/classdef.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/constants.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/coverage.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/dump.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/otl.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/parse.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/private.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/read.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/common.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/chaining.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/common.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/extend.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/extend.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-common.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gpos-single.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl/subtables/gsub-single.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/otl.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/post.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/post.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vdmx/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vdmx/funcs.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vdmx/type.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vhea.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vhea.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vmtx.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/vmtx.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/vf/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/vf/axis.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/vf/region.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/vf/vq.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/aliases.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/luafunc.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/otfccbuild.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/otfccdll.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/otfccdump.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/platform.h
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/stopwatch.c
    trunk/Build/source/texk/web2c/mfluadir/otfcc/src/stopwatch.h

Modified: trunk/Build/source/texk/web2c/Makefile.am
===================================================================
--- trunk/Build/source/texk/web2c/Makefile.am	2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/Makefile.am	2021-01-10 20:13:26 UTC (rev 57374)
@@ -195,6 +195,7 @@
 
 ## MFLua
 include $(srcdir)/mfluadir/am/mflua.am
+include $(srcdir)/mfluadir/am/mfluaotfcc.am
 
 ## MFLuaJIT
 include $(srcdir)/mfluajitdir/am/mfluajit.am

Modified: trunk/Build/source/texk/web2c/Makefile.in
===================================================================
--- trunk/Build/source/texk/web2c/Makefile.in	2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/Makefile.in	2021-01-10 20:13:26 UTC (rev 57374)
@@ -990,6 +990,133 @@
 	libmfluajit_a-mfluajit-pool.$(OBJEXT)
 libmfluajit_a_OBJECTS = $(dist_libmfluajit_a_OBJECTS) \
 	$(nodist_libmfluajit_a_OBJECTS)
+libmfluajitotfcc_a_AR = $(AR) $(ARFLAGS)
+libmfluajitotfcc_a_LIBADD =
+libmfluajitotfcc_a_SOURCES = libmfluajitotfcc.c
+libmfluajitotfcc_a_OBJECTS =  \
+	libmfluajitotfcc_a-libmfluajitotfcc.$(OBJEXT)
+libmfluaotfcc_a_AR = $(AR) $(ARFLAGS)
+libmfluaotfcc_a_LIBADD =
+am_libmfluaotfcc_a_OBJECTS = mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.$(OBJEXT) \
+	mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.$(OBJEXT) \
+	mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.$(OBJEXT) \
+	mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.$(OBJEXT) \
+	mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.$(OBJEXT) \
+	mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.$(OBJEXT) \
+	mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.$(OBJEXT) \
+	mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.$(OBJEXT) \
+	mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.$(OBJEXT) \
+	mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.$(OBJEXT) \
+	mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.$(OBJEXT) \
+	mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.$(OBJEXT) \
+	mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.$(OBJEXT) \
+	mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.$(OBJEXT) \
+	mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.$(OBJEXT) \
+	mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.$(OBJEXT) \
+	mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.$(OBJEXT) \
+	mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.$(OBJEXT) \
+	mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.$(OBJEXT) \
+	mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.$(OBJEXT) \
+	mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.$(OBJEXT) \
+	mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.$(OBJEXT) \
+	mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.$(OBJEXT) \
+	mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.$(OBJEXT) \
+	mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.$(OBJEXT) \
+	mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.$(OBJEXT) \
+	mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.$(OBJEXT) \
+	mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.$(OBJEXT)
+libmfluaotfcc_a_OBJECTS = $(am_libmfluaotfcc_a_OBJECTS)
 libmplibbackends_a_AR = $(AR) $(ARFLAGS)
 libmplibbackends_a_LIBADD =
 am__objects_17 = libmplibbackends_a-pngout.$(OBJEXT)
@@ -1315,8 +1442,8 @@
 mf_nowin_DEPENDENCIES = libmf.a $(am__DEPENDENCIES_2) $(windowlib)
 dist_mflua_OBJECTS = mfluadir/mflua-mfluaextra.$(OBJEXT)
 mflua_OBJECTS = $(dist_mflua_OBJECTS)
-mflua_DEPENDENCIES = libmflua.a $(am__DEPENDENCIES_2) $(windowlib) \
-	$(am__DEPENDENCIES_9) $(am__DEPENDENCIES_6)
+mflua_DEPENDENCIES = libmflua.a libmfluaotfcc.a $(am__DEPENDENCIES_2) \
+	$(windowlib) $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_6)
 mflua_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(mflua_LDFLAGS) $(LDFLAGS) -o $@
@@ -1323,15 +1450,16 @@
 am__objects_41 = mfluadir/mflua_nowin-mfluaextra.$(OBJEXT)
 nodist_mflua_nowin_OBJECTS = $(am__objects_41)
 mflua_nowin_OBJECTS = $(nodist_mflua_nowin_OBJECTS)
-mflua_nowin_DEPENDENCIES = libmflua.a $(am__DEPENDENCIES_2) \
-	$(windowlib) $(am__DEPENDENCIES_6)
+mflua_nowin_DEPENDENCIES = libmflua.a libmfluaotfcc.a \
+	$(am__DEPENDENCIES_2) $(windowlib) $(am__DEPENDENCIES_6)
 mflua_nowin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(mflua_nowin_LDFLAGS) $(LDFLAGS) -o $@
 dist_mfluajit_OBJECTS = mfluajitdir/mfluajit-mfluajitextra.$(OBJEXT)
 mfluajit_OBJECTS = $(dist_mfluajit_OBJECTS)
-mfluajit_DEPENDENCIES = libmfluajit.a $(am__DEPENDENCIES_2) \
-	$(windowlib) $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_1)
+mfluajit_DEPENDENCIES = libmfluajit.a libmfluaotfcc.a \
+	$(am__DEPENDENCIES_2) $(windowlib) $(am__DEPENDENCIES_9) \
+	$(am__DEPENDENCIES_1)
 mfluajit_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(mfluajit_LDFLAGS) $(LDFLAGS) -o $@
@@ -1338,8 +1466,8 @@
 am__objects_42 = mfluajitdir/mfluajit_nowin-mfluajitextra.$(OBJEXT)
 nodist_mfluajit_nowin_OBJECTS = $(am__objects_42)
 mfluajit_nowin_OBJECTS = $(nodist_mfluajit_nowin_OBJECTS)
-mfluajit_nowin_DEPENDENCIES = libmfluajit.a $(am__DEPENDENCIES_2) \
-	$(windowlib) $(am__DEPENDENCIES_1)
+mfluajit_nowin_DEPENDENCIES = libmfluajit.a libmfluaotfcc.a \
+	$(am__DEPENDENCIES_2) $(windowlib) $(am__DEPENDENCIES_1)
 mfluajit_nowin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(AM_CFLAGS) $(CFLAGS) $(mfluajit_nowin_LDFLAGS) $(LDFLAGS) -o \
@@ -1640,6 +1768,7 @@
 	./$(DEPDIR)/libmfluajit_a-mfluajit-pool.Po \
 	./$(DEPDIR)/libmfluajit_a-mfluajit0.Po \
 	./$(DEPDIR)/libmfluajit_a-mfluajitini.Po \
+	./$(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po \
 	./$(DEPDIR)/libmplibbackends_a-pngout.Po \
 	./$(DEPDIR)/libmplibbackends_a-svgout.Po \
 	./$(DEPDIR)/libmplibcore_a-mp.Po \
@@ -2077,6 +2206,125 @@
 	mfluadir/$(DEPDIR)/libmfluajit_a-mfluac.Po \
 	mfluadir/$(DEPDIR)/mflua-mfluaextra.Po \
 	mfluadir/$(DEPDIR)/mflua_nowin-mfluaextra.Po \
+	mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po \
+	mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po \
+	mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po \
+	mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po \
+	mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po \
+	mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po \
+	mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po \
+	mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po \
+	mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po \
+	mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po \
+	mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po \
+	mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po \
+	mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po \
+	mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po \
+	mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po \
+	mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po \
+	mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po \
+	mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po \
+	mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po \
+	mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po \
+	mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po \
+	mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po \
+	mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po \
+	mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po \
+	mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po \
+	mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po \
+	mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po \
+	mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po \
+	mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po \
+	mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po \
+	mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po \
+	mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po \
+	mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po \
+	mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po \
+	mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po \
+	mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po \
+	mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po \
+	mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po \
+	mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po \
+	mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po \
+	mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po \
 	mfluajitdir/$(DEPDIR)/mfluajit-mfluajitextra.Po \
 	mfluajitdir/$(DEPDIR)/mfluajit_nowin-mfluajitextra.Po \
 	mplibdir/$(DEPDIR)/libmputil_a-avl.Po \
@@ -2225,7 +2473,8 @@
 	$(nodist_libluatexspecific_a_SOURCES) $(libmd5_a_SOURCES) \
 	$(nodist_libmf_a_SOURCES) $(dist_libmflua_a_SOURCES) \
 	$(nodist_libmflua_a_SOURCES) $(dist_libmfluajit_a_SOURCES) \
-	$(nodist_libmfluajit_a_SOURCES) \
+	$(nodist_libmfluajit_a_SOURCES) libmfluajitotfcc.c \
+	$(libmfluaotfcc_a_SOURCES) \
 	$(nodist_libmplibbackends_a_SOURCES) \
 	$(nodist_libmplibcore_a_SOURCES) \
 	$(nodist_libmplibextramath_a_SOURCES) $(libmputil_a_SOURCES) \
@@ -2289,7 +2538,8 @@
 	$(libluaharfbuzz_a_SOURCES) $(libluajitharfbuzz_a_SOURCES) \
 	$(dist_libluajittex_a_SOURCES) $(dist_libluatex_a_SOURCES) \
 	$(libmd5_a_SOURCES) $(dist_libmflua_a_SOURCES) \
-	$(dist_libmfluajit_a_SOURCES) $(libmputil_a_SOURCES) \
+	$(dist_libmfluajit_a_SOURCES) libmfluajitotfcc.c \
+	$(libmfluaotfcc_a_SOURCES) $(libmputil_a_SOURCES) \
 	$(am__libpdftex_a_SOURCES_DIST) $(EXTRA_libpdftex_a_SOURCES) \
 	$(libukanji_a_SOURCES) $(libunilib_a_SOURCES) \
 	$(am__libxetex_a_SOURCES_DIST) $(libsynctex_la_SOURCES) \
@@ -2559,6 +2809,7 @@
 	$(srcdir)/luatexdir/am/luasocket.am \
 	$(srcdir)/luatexdir/am/luatex.am \
 	$(srcdir)/mfluadir/am/mflua.am \
+	$(srcdir)/mfluadir/am/mfluaotfcc.am \
 	$(srcdir)/mfluajitdir/am/mfluajit.am \
 	$(srcdir)/mplibdir/am/libmplib.am \
 	$(srcdir)/mplibdir/am/libmputil.am \
@@ -2871,7 +3122,8 @@
 #EXTRA_LIBRARIES += libluamisc.a liblua53misc.a  libluajitmisc.a
 
 #EXTRA_LIBRARIES += libluaffi.a  liblua53ffi.a 
-EXTRA_LIBRARIES = libmf.a libmflua.a libmfluajit.a libmputil.a \
+EXTRA_LIBRARIES = libmf.a libmflua.a libmfluaotfcc.a libmfluaotfcc.a \
+	libmfluajitotfcc.a libmfluajit.a libmfluaotfcc.a libmputil.a \
 	libmplibcore.a libmplibextramath.a libmplibbackends.a \
 	libkanji.a libukanji.a libpdftex.a libluasocket.a \
 	libluajitsocket.a libluamisc.a libluajitmisc.a libunilib.a \
@@ -3547,11 +3799,11 @@
 call_mflua_LDADD = 
 dist_mflua_SOURCES = mfluadir/mfluaextra.c mfluadir/mfluaextra.h mfluadir/mflua_version.h
 mflua_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) $(LUA_INCLUDES)
-mflua_LDADD = libmflua.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUA_LIBS)
+mflua_LDADD = libmflua.a libmfluaotfcc.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUA_LIBS)
 mflua_LDFLAGS = -export-dynamic
 nodist_mflua_nowin_SOURCES = $(dist_mflua_SOURCES)
 mflua_nowin_CPPFLAGS = $(mflua_CPPFLAGS) -DMFNOWIN $(LUA_INCLUDES)
-mflua_nowin_LDADD = libmflua.a $(LDADD) $(windowlib) $(LUA_LIBS)
+mflua_nowin_LDADD = libmflua.a libmfluaotfcc.a $(LDADD) $(windowlib) $(LUA_LIBS)
 mflua_nowin_LDFLAGS = -export-dynamic
 
 # MFLua C sources
@@ -3572,16 +3824,299 @@
 # MFLua tests
 #
 mflua_tests = mfluadir/mfluatraptest.test
+libmfluaotfcc_a_CPPFLAGS = \
+	-D_CARYLL_USE_PRE_SERIALIZED -DMAIN_VER=0 -DSECONDARY_VER=10 -DPATCH_VER=4 \
+	-I$(top_srcdir)/mfluadir/otfcc/include \
+	-I$(top_srcdir)/mfluadir/otfcc/include/dep \
+	-I$(top_srcdir)/mfluadir/otfcc/lib \
+	 $(LUA_INCLUDES)
+
+libmfluajitotfcc_a_CPPFLAGS = \
+	-D_CARYLL_USE_PRE_SERIALIZED -DMAIN_VER=0 -DSECONDARY_VER=10 -DPATCH_VER=4 \
+	-DJIT \
+	-I$(top_srcdir)/mfluadir/otfcc/include \
+	-I$(top_srcdir)/mfluadir/otfcc/include/dep \
+	-I$(top_srcdir)/mfluadir/otfcc/lib \
+	$(LUAJIT_INCLUDES)
+
+libmfluaotfcc_a_CFLAGS = # $(WARNING_CFLAGS)
+libmfluajitotfcc_a_CFLAGS = # $(WARNING_CFLAGS)
+
+#nodist_libmfluaotfcc_a_SOURCES = $(libmfluaotfcc_sources)
+#nodist_libmfluajitotfcc_a_SOURCES = $(libmfluaotfcc_sources)
+libmfluaotfcc_a_SOURCES = \
+	mfluadir/otfcc/dep/extern/sdsalloc.h \
+	mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c \
+	mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h \
+	mfluadir/otfcc/dep/extern/json.c \
+	mfluadir/otfcc/dep/extern/json-builder.c \
+	mfluadir/otfcc/dep/extern/sds.c \
+	mfluadir/otfcc/src/aliases.h \
+	mfluadir/otfcc/src/luafunc.c \
+	mfluadir/otfcc/src/otfccbuild.c \
+	mfluadir/otfcc/src/otfccdump.c \
+	mfluadir/otfcc/src/platform.h \
+	mfluadir/otfcc/src/otfccdll.c \
+	mfluadir/otfcc/src/stopwatch.c \
+	mfluadir/otfcc/src/stopwatch.h \
+	mfluadir/otfcc/include/dep/json.h \
+	mfluadir/otfcc/include/dep/json-builder.h \
+	mfluadir/otfcc/include/dep/sds.h \
+	mfluadir/otfcc/include/dep/uthash.h \
+	mfluadir/otfcc/include/otfcc/options.h \
+	mfluadir/otfcc/include/otfcc/primitives.h \
+	mfluadir/otfcc/include/otfcc/handle.h \
+	mfluadir/otfcc/include/otfcc/vf/vf.h \
+	mfluadir/otfcc/include/otfcc/vf/vv.h \
+	mfluadir/otfcc/include/otfcc/vf/region.h \
+	mfluadir/otfcc/include/otfcc/vf/axis.h \
+	mfluadir/otfcc/include/otfcc/vf/vq.h \
+	mfluadir/otfcc/include/otfcc/sfnt.h \
+	mfluadir/otfcc/include/otfcc/glyph-order.h \
+	mfluadir/otfcc/include/otfcc/sfnt-builder.h \
+	mfluadir/otfcc/include/otfcc/logger.h \
+	mfluadir/otfcc/include/otfcc/font.h \
+	mfluadir/otfcc/include/otfcc/table/fvar.h \
+	mfluadir/otfcc/include/otfcc/table/maxp.h \
+	mfluadir/otfcc/include/otfcc/table/BASE.h \
+	mfluadir/otfcc/include/otfcc/table/post.h \
+	mfluadir/otfcc/include/otfcc/table/vmtx.h \
+	mfluadir/otfcc/include/otfcc/table/glyf.h \
+	mfluadir/otfcc/include/otfcc/table/fpgm-prep.h \
+	mfluadir/otfcc/include/otfcc/table/vhea.h \
+	mfluadir/otfcc/include/otfcc/table/gasp.h \
+	mfluadir/otfcc/include/otfcc/table/name.h \
+	mfluadir/otfcc/include/otfcc/table/hmtx.h \
+	mfluadir/otfcc/include/otfcc/table/OS_2.h \
+	mfluadir/otfcc/include/otfcc/table/CPAL.h \
+	mfluadir/otfcc/include/otfcc/table/GDEF.h \
+	mfluadir/otfcc/include/otfcc/table/TSI5.h \
+	mfluadir/otfcc/include/otfcc/table/hdmx.h \
+	mfluadir/otfcc/include/otfcc/table/table-common.h \
+	mfluadir/otfcc/include/otfcc/table/LTSH.h \
+	mfluadir/otfcc/include/otfcc/table/VORG.h \
+	mfluadir/otfcc/include/otfcc/table/cmap.h \
+	mfluadir/otfcc/include/otfcc/table/_TSI.h \
+	mfluadir/otfcc/include/otfcc/table/COLR.h \
+	mfluadir/otfcc/include/otfcc/table/CFF.h \
+	mfluadir/otfcc/include/otfcc/table/otl/coverage.h \
+	mfluadir/otfcc/include/otfcc/table/otl/classdef.h \
+	mfluadir/otfcc/include/otfcc/table/otl.h \
+	mfluadir/otfcc/include/otfcc/table/cvt.h \
+	mfluadir/otfcc/include/otfcc/table/meta.h \
+	mfluadir/otfcc/include/otfcc/table/SVG.h \
+	mfluadir/otfcc/include/otfcc/table/hhea.h \
+	mfluadir/otfcc/include/otfcc/table/VDMX.h \
+	mfluadir/otfcc/include/otfcc/table/head.h \
+	mfluadir/otfcc/include/caryll/ownership.h \
+	mfluadir/otfcc/include/caryll/element.h \
+	mfluadir/otfcc/include/caryll/buffer.h \
+	mfluadir/otfcc/include/caryll/vector.h \
+	mfluadir/otfcc/lib/consolidate/consolidate.c \
+	mfluadir/otfcc/lib/consolidate/consolidate.h \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-single.h \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-single.c \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-single.c \
+	mfluadir/otfcc/lib/consolidate/otl/chaining.c \
+	mfluadir/otfcc/lib/consolidate/otl/common.c \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-single.h \
+	mfluadir/otfcc/lib/consolidate/otl/chaining.h \
+	mfluadir/otfcc/lib/consolidate/otl/GDEF.h \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h \
+	mfluadir/otfcc/lib/consolidate/otl/mark.h \
+	mfluadir/otfcc/lib/consolidate/otl/common.h \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c \
+	mfluadir/otfcc/lib/consolidate/otl/GDEF.c \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c \
+	mfluadir/otfcc/lib/consolidate/otl/mark.c \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h \
+	mfluadir/otfcc/lib/support/options.c \
+	mfluadir/otfcc/lib/support/aliases.h \
+	mfluadir/otfcc/lib/support/tag.h \
+	mfluadir/otfcc/lib/support/bin-io.h \
+	mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c \
+	mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h \
+	mfluadir/otfcc/lib/support/handle.c \
+	mfluadir/otfcc/lib/support/otfcc-alloc.h \
+	mfluadir/otfcc/lib/support/util.h \
+	mfluadir/otfcc/lib/support/element-impl.h \
+	mfluadir/otfcc/lib/support/buffer/buffer.c \
+	mfluadir/otfcc/lib/support/vector-impl.h \
+	mfluadir/otfcc/lib/support/primitives.c \
+	mfluadir/otfcc/lib/support/glyph-order.c \
+	mfluadir/otfcc/lib/support/sha1/sha1.h \
+	mfluadir/otfcc/lib/support/sha1/sha1.c \
+	mfluadir/otfcc/lib/support/ttinstr/ttinstr.c \
+	mfluadir/otfcc/lib/support/ttinstr/ttinstr.h \
+	mfluadir/otfcc/lib/support/base64/base64.h \
+	mfluadir/otfcc/lib/support/base64/base64.c \
+	mfluadir/otfcc/lib/support/json/json-ident.c \
+	mfluadir/otfcc/lib/support/json/json-funcs.h \
+	mfluadir/otfcc/lib/support/json/json-ident.h \
+	mfluadir/otfcc/lib/support/aglfn/aglfn.c \
+	mfluadir/otfcc/lib/support/aglfn/aglfn.h \
+	mfluadir/otfcc/lib/otf-writer/stat.h \
+	mfluadir/otfcc/lib/otf-writer/stat.c \
+	mfluadir/otfcc/lib/otf-writer/otf-writer.c \
+	mfluadir/otfcc/lib/otf-reader/otf-reader.c \
+	mfluadir/otfcc/lib/otf-reader/unconsolidate.c \
+	mfluadir/otfcc/lib/otf-reader/unconsolidate.h \
+	mfluadir/otfcc/lib/vf/axis.c \
+	mfluadir/otfcc/lib/vf/region.c \
+	mfluadir/otfcc/lib/vf/vq.c \
+	mfluadir/otfcc/lib/logger/logger.c \
+	mfluadir/otfcc/lib/bk/bkblock.h \
+	mfluadir/otfcc/lib/bk/bkgraph.h \
+	mfluadir/otfcc/lib/bk/bkgraph.c \
+	mfluadir/otfcc/lib/bk/bkblock.c \
+	mfluadir/otfcc/lib/font/caryll-font.c \
+	mfluadir/otfcc/lib/font/caryll-sfnt-builder.c \
+	mfluadir/otfcc/lib/font/caryll-sfnt.c \
+	mfluadir/otfcc/lib/json-writer/json-writer.c \
+	mfluadir/otfcc/lib/json-reader/json-reader.c \
+	mfluadir/otfcc/lib/libcff/charstring-il.h \
+	mfluadir/otfcc/lib/libcff/cff-index.h \
+	mfluadir/otfcc/lib/libcff/cff-dict.h \
+	mfluadir/otfcc/lib/libcff/cff-value.h \
+	mfluadir/otfcc/lib/libcff/cff-string.c \
+	mfluadir/otfcc/lib/libcff/cff-opmean.c \
+	mfluadir/otfcc/lib/libcff/libcff.h \
+	mfluadir/otfcc/lib/libcff/charstring-il.c \
+	mfluadir/otfcc/lib/libcff/cff-fdselect.c \
+	mfluadir/otfcc/lib/libcff/cff-parser.c \
+	mfluadir/otfcc/lib/libcff/subr.c \
+	mfluadir/otfcc/lib/libcff/cff-charset.c \
+	mfluadir/otfcc/lib/libcff/cff-index.c \
+	mfluadir/otfcc/lib/libcff/cff-codecs.c \
+	mfluadir/otfcc/lib/libcff/cff-charset.h \
+	mfluadir/otfcc/lib/libcff/cff-util.h \
+	mfluadir/otfcc/lib/libcff/cff-writer.c \
+	mfluadir/otfcc/lib/libcff/subr.h \
+	mfluadir/otfcc/lib/libcff/cff-fdselect.h \
+	mfluadir/otfcc/lib/libcff/cff-dict.c \
+	mfluadir/otfcc/lib/libcff/cff-value.c \
+	mfluadir/otfcc/lib/table/vhea.c \
+	mfluadir/otfcc/lib/table/fvar.c \
+	mfluadir/otfcc/lib/table/cmap.c \
+	mfluadir/otfcc/lib/table/meta/read.c \
+	mfluadir/otfcc/lib/table/meta/type.c \
+	mfluadir/otfcc/lib/table/meta/build.c \
+	mfluadir/otfcc/lib/table/meta/parse.c \
+	mfluadir/otfcc/lib/table/meta/dump.c \
+	mfluadir/otfcc/lib/table/vdmx/type.c \
+	mfluadir/otfcc/lib/table/vdmx/funcs.c \
+	mfluadir/otfcc/lib/table/hhea.c \
+	mfluadir/otfcc/lib/table/fvar.h \
+	mfluadir/otfcc/lib/table/maxp.h \
+	mfluadir/otfcc/lib/table/BASE.h \
+	mfluadir/otfcc/lib/table/post.h \
+	mfluadir/otfcc/lib/table/post.c \
+	mfluadir/otfcc/lib/table/cvt.c \
+	mfluadir/otfcc/lib/table/CFF.c \
+	mfluadir/otfcc/lib/table/vmtx.h \
+	mfluadir/otfcc/lib/table/glyf.h \
+	mfluadir/otfcc/lib/table/gasp.c \
+	mfluadir/otfcc/lib/table/LTSH.c \
+	mfluadir/otfcc/lib/table/maxp.c \
+	mfluadir/otfcc/lib/table/fpgm-prep.h \
+	mfluadir/otfcc/lib/table/all.h \
+	mfluadir/otfcc/lib/table/COLR.c \
+	mfluadir/otfcc/lib/table/vmtx.c \
+	mfluadir/otfcc/lib/table/vhea.h \
+	mfluadir/otfcc/lib/table/gasp.h \
+	mfluadir/otfcc/lib/table/fpgm-prep.c \
+	mfluadir/otfcc/lib/table/name.h \
+	mfluadir/otfcc/lib/table/hmtx.h \
+	mfluadir/otfcc/lib/table/head.c \
+	mfluadir/otfcc/lib/table/OS_2.h \
+	mfluadir/otfcc/lib/table/CPAL.c \
+	mfluadir/otfcc/lib/table/CPAL.h \
+	mfluadir/otfcc/lib/table/GDEF.h \
+	mfluadir/otfcc/lib/table/TSI5.h \
+	mfluadir/otfcc/lib/table/hdmx.h \
+	mfluadir/otfcc/lib/table/_TSI.c \
+	mfluadir/otfcc/lib/table/LTSH.h \
+	mfluadir/otfcc/lib/table/VORG.h \
+	mfluadir/otfcc/lib/table/name.c \
+	mfluadir/otfcc/lib/table/cmap.h \
+	mfluadir/otfcc/lib/table/OS_2.c \
+	mfluadir/otfcc/lib/table/hdmx.c \
+	mfluadir/otfcc/lib/table/glyf/read.c \
+	mfluadir/otfcc/lib/table/glyf/glyf.c \
+	mfluadir/otfcc/lib/table/glyf/build.c \
+	mfluadir/otfcc/lib/table/_TSI.h \
+	mfluadir/otfcc/lib/table/GDEF.c \
+	mfluadir/otfcc/lib/table/COLR.h \
+	mfluadir/otfcc/lib/table/VORG.c \
+	mfluadir/otfcc/lib/table/CFF.h \
+	mfluadir/otfcc/lib/table/otl/coverage.c \
+	mfluadir/otfcc/lib/table/otl/read.c \
+	mfluadir/otfcc/lib/table/otl/private.h \
+	mfluadir/otfcc/lib/table/otl/classdef.c \
+	mfluadir/otfcc/lib/table/otl/build.c \
+	mfluadir/otfcc/lib/table/otl/parse.c \
+	mfluadir/otfcc/lib/table/otl/dump.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-single.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-common.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.h \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/common.h \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-single.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.h \
+	mfluadir/otfcc/lib/table/otl/subtables/common.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c \
+	mfluadir/otfcc/lib/table/otl/subtables/extend.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.h \
+	mfluadir/otfcc/lib/table/otl/subtables/extend.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.h \
+	mfluadir/otfcc/lib/table/otl/otl.c \
+	mfluadir/otfcc/lib/table/otl/constants.c \
+	mfluadir/otfcc/lib/table/hmtx.c \
+	mfluadir/otfcc/lib/table/otl.h \
+	mfluadir/otfcc/lib/table/cvt.h \
+	mfluadir/otfcc/lib/table/meta.h \
+	mfluadir/otfcc/lib/table/SVG.h \
+	mfluadir/otfcc/lib/table/hhea.h \
+	mfluadir/otfcc/lib/table/BASE.c \
+	mfluadir/otfcc/lib/table/VDMX.h \
+	mfluadir/otfcc/lib/table/SVG.c \
+	mfluadir/otfcc/lib/table/head.h \
+	mfluadir/otfcc/lib/table/TSI5.c 
+
 call_mfluajit_CPPFLAGS = -DEXEPROG=\"mfluajit.exe\"
 nodist_call_mfluajit_SOURCES = callexe.c
 call_mfluajit_LDADD = 
 dist_mfluajit_SOURCES = mfluajitdir/mfluajitextra.c mfluajitdir/mfluajitextra.h mfluadir/mflua_version.h
 mfluajit_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) $(LUAJIT_INCLUDES) $(LUAJIT_DEFINES)
-mfluajit_LDADD = libmfluajit.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUAJIT_LIBS)
+mfluajit_LDADD = libmfluajit.a libmfluaotfcc.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUAJIT_LIBS)
 mfluajit_LDFLAGS = -export-dynamic $(LUAJIT_LDEXTRA)
 nodist_mfluajit_nowin_SOURCES = $(dist_mfluajit_SOURCES)
 mfluajit_nowin_CPPFLAGS = $(mfluajit_CPPFLAGS) -DMFNOWIN $(LUAJIT_INCLUDES) $(LUAJIT_DEFINES)
-mfluajit_nowin_LDADD = libmfluajit.a $(LDADD) $(windowlib) $(LUAJIT_LIBS)
+mfluajit_nowin_LDADD = libmfluajit.a libmfluaotfcc.a $(LDADD) $(windowlib) $(LUAJIT_LIBS)
 mfluajit_nowin_LDFLAGS = -export-dynamic $(LUAJIT_LDEXTRA)
 
 # MFLuaJIT C sources
@@ -4927,7 +5462,7 @@
 .SUFFIXES: .c .cc .cin .cpp .cxx .h .hin .lo .log .mm .o .obj .p .pin .pl .pl$(EXEEXT) .test .test$(EXEEXT) .trs
 am--refresh: Makefile
 	@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluadir/am/mfluaotfcc.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -4949,7 +5484,7 @@
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
 	esac;
-$(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__empty):
+$(srcdir)/../../am/dist_hook.am $(srcdir)/am/bootstrap.am $(srcdir)/am/web.am $(srcdir)/am/cweb.am $(srcdir)/am/texmf.am $(srcdir)/mfluadir/am/mflua.am $(srcdir)/mfluadir/am/mfluaotfcc.am $(srcdir)/mfluajitdir/am/mfluajit.am $(srcdir)/mplibdir/am/mplib.am $(srcdir)/pmpostdir/am/pmpost.am $(srcdir)/mplibdir/am/libmputil.am $(srcdir)/mplibdir/am/libmplib.am $(srcdir)/etexdir/am/etex.am $(srcdir)/ptexdir/am/ptex.am $(srcdir)/eptexdir/am/eptex.am $(srcdir)/uptexdir/am/uptex.am $(srcdir)/euptexdir/am/euptex.am $(srcdir)/pdftexdir/am/libpdftex.am $(srcdir)/pdftexdir/am/pdftex.am $(srcdir)/pdftexdir/am/ttf2afm.am $(srcdir)/pdftexdir/am/pdftosrc.am $(srcdir)/luatexdir/am/luasocket.am $(srcdir)/luatexdir/am/luamisc.am $(srcdir)/luatexdir/am/libunilib.am $(srcdir)/luatexdir/am/luafontforge.am $(srcdir)/luatexdir/am/libluatex.am $(srcdir)/luatexdir/am/luaffi.am $(srcdir)/luatexdir/am/luatex.am $(srcdir)/luatexdir/am/luaharfbuzz.am $(srcdir)/xetexdir/am/xetex.am $(srcdir)/omegaware/am/omegaware.am $(srcdir)/alephdir/am/aleph.am $(srcdir)/synctexdir/am/synctex.am $(srcdir)/libmd5/am/md5.am $(srcdir)/../../am/bin_links.am $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
@@ -6439,6 +6974,541 @@
 	$(AM_V_AR)$(libmfluajit_a_AR) libmfluajit.a $(libmfluajit_a_OBJECTS) $(libmfluajit_a_LIBADD)
 	$(AM_V_at)$(RANLIB) libmfluajit.a
 
+libmfluajitotfcc.a: $(libmfluajitotfcc_a_OBJECTS) $(libmfluajitotfcc_a_DEPENDENCIES) $(EXTRA_libmfluajitotfcc_a_DEPENDENCIES) 
+	$(AM_V_at)-rm -f libmfluajitotfcc.a
+	$(AM_V_AR)$(libmfluajitotfcc_a_AR) libmfluajitotfcc.a $(libmfluajitotfcc_a_OBJECTS) $(libmfluajitotfcc_a_LIBADD)
+	$(AM_V_at)$(RANLIB) libmfluajitotfcc.a
+mfluadir/otfcc/dep/extern/emyg-dtoa/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/dep/extern/emyg-dtoa
+	@: > mfluadir/otfcc/dep/extern/emyg-dtoa/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)
+	@: > mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.$(OBJEXT):  \
+	mfluadir/otfcc/dep/extern/emyg-dtoa/$(am__dirstamp) \
+	mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/dep/extern
+	@: > mfluadir/otfcc/dep/extern/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/dep/extern/$(DEPDIR)
+	@: > mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.$(OBJEXT):  \
+	mfluadir/otfcc/dep/extern/$(am__dirstamp) \
+	mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.$(OBJEXT):  \
+	mfluadir/otfcc/dep/extern/$(am__dirstamp) \
+	mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.$(OBJEXT):  \
+	mfluadir/otfcc/dep/extern/$(am__dirstamp) \
+	mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/src
+	@: > mfluadir/otfcc/src/$(am__dirstamp)
+mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/src/$(DEPDIR)
+	@: > mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.$(OBJEXT):  \
+	mfluadir/otfcc/src/$(am__dirstamp) \
+	mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.$(OBJEXT):  \
+	mfluadir/otfcc/src/$(am__dirstamp) \
+	mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.$(OBJEXT):  \
+	mfluadir/otfcc/src/$(am__dirstamp) \
+	mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.$(OBJEXT):  \
+	mfluadir/otfcc/src/$(am__dirstamp) \
+	mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.$(OBJEXT):  \
+	mfluadir/otfcc/src/$(am__dirstamp) \
+	mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/consolidate
+	@: > mfluadir/otfcc/lib/consolidate/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/consolidate/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/consolidate/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/consolidate/otl
+	@: > mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.$(OBJEXT):  \
+	mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support
+	@: > mfluadir/otfcc/lib/support/$(am__dirstamp)
+mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/unicodeconv/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/unicodeconv
+	@: > mfluadir/otfcc/lib/support/unicodeconv/$(am__dirstamp)
+mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/unicodeconv/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/buffer/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/buffer
+	@: > mfluadir/otfcc/lib/support/buffer/$(am__dirstamp)
+mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/buffer/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/buffer/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/sha1/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/sha1
+	@: > mfluadir/otfcc/lib/support/sha1/$(am__dirstamp)
+mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/sha1/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/sha1/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/ttinstr/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/ttinstr
+	@: > mfluadir/otfcc/lib/support/ttinstr/$(am__dirstamp)
+mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/ttinstr/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/base64/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/base64
+	@: > mfluadir/otfcc/lib/support/base64/$(am__dirstamp)
+mfluadir/otfcc/lib/support/base64/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/base64/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/support/base64/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/base64/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/base64/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/json/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/json
+	@: > mfluadir/otfcc/lib/support/json/$(am__dirstamp)
+mfluadir/otfcc/lib/support/json/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/json/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/support/json/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/json/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/json/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/aglfn/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/aglfn
+	@: > mfluadir/otfcc/lib/support/aglfn/$(am__dirstamp)
+mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.$(OBJEXT):  \
+	mfluadir/otfcc/lib/support/aglfn/$(am__dirstamp) \
+	mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-writer/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/otf-writer
+	@: > mfluadir/otfcc/lib/otf-writer/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.$(OBJEXT):  \
+	mfluadir/otfcc/lib/otf-writer/$(am__dirstamp) \
+	mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.$(OBJEXT):  \
+	mfluadir/otfcc/lib/otf-writer/$(am__dirstamp) \
+	mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-reader/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/otf-reader
+	@: > mfluadir/otfcc/lib/otf-reader/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.$(OBJEXT):  \
+	mfluadir/otfcc/lib/otf-reader/$(am__dirstamp) \
+	mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.$(OBJEXT):  \
+	mfluadir/otfcc/lib/otf-reader/$(am__dirstamp) \
+	mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/vf
+	@: > mfluadir/otfcc/lib/vf/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/vf/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.$(OBJEXT):  \
+	mfluadir/otfcc/lib/vf/$(am__dirstamp) \
+	mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.$(OBJEXT):  \
+	mfluadir/otfcc/lib/vf/$(am__dirstamp) \
+	mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.$(OBJEXT):  \
+	mfluadir/otfcc/lib/vf/$(am__dirstamp) \
+	mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/logger/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/logger
+	@: > mfluadir/otfcc/lib/logger/$(am__dirstamp)
+mfluadir/otfcc/lib/logger/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/logger/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/logger/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.$(OBJEXT):  \
+	mfluadir/otfcc/lib/logger/$(am__dirstamp) \
+	mfluadir/otfcc/lib/logger/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/bk/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/bk
+	@: > mfluadir/otfcc/lib/bk/$(am__dirstamp)
+mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/bk/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.$(OBJEXT):  \
+	mfluadir/otfcc/lib/bk/$(am__dirstamp) \
+	mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.$(OBJEXT):  \
+	mfluadir/otfcc/lib/bk/$(am__dirstamp) \
+	mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/font/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/font
+	@: > mfluadir/otfcc/lib/font/$(am__dirstamp)
+mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/font/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.$(OBJEXT):  \
+	mfluadir/otfcc/lib/font/$(am__dirstamp) \
+	mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.$(OBJEXT):  \
+	mfluadir/otfcc/lib/font/$(am__dirstamp) \
+	mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.$(OBJEXT):  \
+	mfluadir/otfcc/lib/font/$(am__dirstamp) \
+	mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/json-writer/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/json-writer
+	@: > mfluadir/otfcc/lib/json-writer/$(am__dirstamp)
+mfluadir/otfcc/lib/json-writer/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/json-writer/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/json-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.$(OBJEXT):  \
+	mfluadir/otfcc/lib/json-writer/$(am__dirstamp) \
+	mfluadir/otfcc/lib/json-writer/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/json-reader/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/json-reader
+	@: > mfluadir/otfcc/lib/json-reader/$(am__dirstamp)
+mfluadir/otfcc/lib/json-reader/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/json-reader/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/json-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.$(OBJEXT):  \
+	mfluadir/otfcc/lib/json-reader/$(am__dirstamp) \
+	mfluadir/otfcc/lib/json-reader/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/libcff
+	@: > mfluadir/otfcc/lib/libcff/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/libcff/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.$(OBJEXT):  \
+	mfluadir/otfcc/lib/libcff/$(am__dirstamp) \
+	mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table
+	@: > mfluadir/otfcc/lib/table/$(am__dirstamp)
+mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/meta
+	@: > mfluadir/otfcc/lib/table/meta/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/meta/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/meta/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/vdmx
+	@: > mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp)
+mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/glyf
+	@: > mfluadir/otfcc/lib/table/glyf/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/glyf/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/glyf/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/glyf/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/otl
+	@: > mfluadir/otfcc/lib/table/otl/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/otl/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/otl/subtables
+	@: > mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/otl/subtables/chaining
+	@: > mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)
+	@: > mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.$(OBJEXT): mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/otl/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.$(OBJEXT):  \
+	mfluadir/otfcc/lib/table/$(am__dirstamp) \
+	mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+
+libmfluaotfcc.a: $(libmfluaotfcc_a_OBJECTS) $(libmfluaotfcc_a_DEPENDENCIES) $(EXTRA_libmfluaotfcc_a_DEPENDENCIES) 
+	$(AM_V_at)-rm -f libmfluaotfcc.a
+	$(AM_V_AR)$(libmfluaotfcc_a_AR) libmfluaotfcc.a $(libmfluaotfcc_a_OBJECTS) $(libmfluaotfcc_a_LIBADD)
+	$(AM_V_at)$(RANLIB) libmfluaotfcc.a
+
 libmplibbackends.a: $(libmplibbackends_a_OBJECTS) $(libmplibbackends_a_DEPENDENCIES) $(EXTRA_libmplibbackends_a_DEPENDENCIES) 
 	$(AM_V_at)-rm -f libmplibbackends.a
 	$(AM_V_AR)$(libmplibbackends_a_AR) libmplibbackends.a $(libmplibbackends_a_OBJECTS) $(libmplibbackends_a_LIBADD)
@@ -7126,6 +8196,35 @@
 	-rm -f luatexdir/unilib/*.$(OBJEXT)
 	-rm -f luatexdir/utils/*.$(OBJEXT)
 	-rm -f mfluadir/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/dep/extern/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/bk/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/consolidate/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/font/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/json-reader/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/json-writer/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/libcff/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/logger/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/otf-reader/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/otf-writer/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/support/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/support/aglfn/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/support/base64/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/support/buffer/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/support/json/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/support/sha1/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/support/ttinstr/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/support/unicodeconv/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/table/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/table/glyf/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/table/meta/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/table/otl/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/table/vdmx/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/lib/vf/*.$(OBJEXT)
+	-rm -f mfluadir/otfcc/src/*.$(OBJEXT)
 	-rm -f mfluajitdir/*.$(OBJEXT)
 	-rm -f mplibdir/*.$(OBJEXT)
 	-rm -f pdftexdir/*.$(OBJEXT)
@@ -7192,6 +8291,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmfluajit_a-mfluajit-pool.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmfluajit_a-mfluajit0.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmfluajit_a-mfluajitini.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmplibbackends_a-pngout.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmplibbackends_a-svgout.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmplibcore_a-mp.Po at am__quote@ # am--include-marker
@@ -7664,6 +8764,125 @@
 @AMDEP_TRUE@@am__include@ @am__quote at mfluadir/$(DEPDIR)/libmfluajit_a-mfluac.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at mfluadir/$(DEPDIR)/mflua-mfluaextra.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at mfluadir/$(DEPDIR)/mflua_nowin-mfluaextra.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at mfluajitdir/$(DEPDIR)/mfluajit-mfluajitextra.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at mfluajitdir/$(DEPDIR)/mfluajit_nowin-mfluajitextra.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at mplibdir/$(DEPDIR)/libmputil_a-avl.Po at am__quote@ # am--include-marker
@@ -13051,6 +14270,1686 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajit_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libmfluajit_a-mfluajit-pool.obj `if test -f 'mfluajit-pool.c'; then $(CYGPATH_W) 'mfluajit-pool.c'; else $(CYGPATH_W) '$(srcdir)/mfluajit-pool.c'; fi`
 
+libmfluajitotfcc_a-libmfluajitotfcc.o: libmfluajitotfcc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajitotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluajitotfcc_a_CFLAGS) $(CFLAGS) -MT libmfluajitotfcc_a-libmfluajitotfcc.o -MD -MP -MF $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Tpo -c -o libmfluajitotfcc_a-libmfluajitotfcc.o `test -f 'libmfluajitotfcc.c' || echo '$(srcdir)/'`libmfluajitotfcc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Tpo $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libmfluajitotfcc.c' object='libmfluajitotfcc_a-libmfluajitotfcc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajitotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluajitotfcc_a_CFLAGS) $(CFLAGS) -c -o libmfluajitotfcc_a-libmfluajitotfcc.o `test -f 'libmfluajitotfcc.c' || echo '$(srcdir)/'`libmfluajitotfcc.c
+
+libmfluajitotfcc_a-libmfluajitotfcc.obj: libmfluajitotfcc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajitotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluajitotfcc_a_CFLAGS) $(CFLAGS) -MT libmfluajitotfcc_a-libmfluajitotfcc.obj -MD -MP -MF $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Tpo -c -o libmfluajitotfcc_a-libmfluajitotfcc.obj `if test -f 'libmfluajitotfcc.c'; then $(CYGPATH_W) 'libmfluajitotfcc.c'; else $(CYGPATH_W) '$(srcdir)/libmfluajitotfcc.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Tpo $(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libmfluajitotfcc.c' object='libmfluajitotfcc_a-libmfluajitotfcc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluajitotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluajitotfcc_a_CFLAGS) $(CFLAGS) -c -o libmfluajitotfcc_a-libmfluajitotfcc.obj `if test -f 'libmfluajitotfcc.c'; then $(CYGPATH_W) 'libmfluajitotfcc.c'; else $(CYGPATH_W) '$(srcdir)/libmfluajitotfcc.c'; fi`
+
+mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o: mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o -MD -MP -MF mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Tpo -c -o mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o `test -f 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Tpo mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c' object='mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.o `test -f 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
+
+mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj: mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj -MD -MP -MF mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Tpo -c -o mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj `if test -f 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Tpo mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c' object='mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/emyg-dtoa/libmfluaotfcc_a-emyg-dtoa.obj `if test -f 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c'; fi`
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o: mfluadir/otfcc/dep/extern/json.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o `test -f 'mfluadir/otfcc/dep/extern/json.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/json.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/dep/extern/json.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.o `test -f 'mfluadir/otfcc/dep/extern/json.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/json.c
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj: mfluadir/otfcc/dep/extern/json.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj `if test -f 'mfluadir/otfcc/dep/extern/json.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/json.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/json.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/dep/extern/json.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json.obj `if test -f 'mfluadir/otfcc/dep/extern/json.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/json.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/json.c'; fi`
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o: mfluadir/otfcc/dep/extern/json-builder.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o `test -f 'mfluadir/otfcc/dep/extern/json-builder.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/json-builder.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/dep/extern/json-builder.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.o `test -f 'mfluadir/otfcc/dep/extern/json-builder.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/json-builder.c
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj: mfluadir/otfcc/dep/extern/json-builder.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj `if test -f 'mfluadir/otfcc/dep/extern/json-builder.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/json-builder.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/json-builder.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/dep/extern/json-builder.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-json-builder.obj `if test -f 'mfluadir/otfcc/dep/extern/json-builder.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/json-builder.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/json-builder.c'; fi`
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o: mfluadir/otfcc/dep/extern/sds.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o `test -f 'mfluadir/otfcc/dep/extern/sds.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/sds.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/dep/extern/sds.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.o `test -f 'mfluadir/otfcc/dep/extern/sds.c' || echo '$(srcdir)/'`mfluadir/otfcc/dep/extern/sds.c
+
+mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj: mfluadir/otfcc/dep/extern/sds.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj -MD -MP -MF mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Tpo -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj `if test -f 'mfluadir/otfcc/dep/extern/sds.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/sds.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/sds.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Tpo mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/dep/extern/sds.c' object='mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/dep/extern/libmfluaotfcc_a-sds.obj `if test -f 'mfluadir/otfcc/dep/extern/sds.c'; then $(CYGPATH_W) 'mfluadir/otfcc/dep/extern/sds.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/dep/extern/sds.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o: mfluadir/otfcc/src/luafunc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o `test -f 'mfluadir/otfcc/src/luafunc.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/luafunc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/luafunc.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.o `test -f 'mfluadir/otfcc/src/luafunc.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/luafunc.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj: mfluadir/otfcc/src/luafunc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj `if test -f 'mfluadir/otfcc/src/luafunc.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/luafunc.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/luafunc.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/luafunc.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-luafunc.obj `if test -f 'mfluadir/otfcc/src/luafunc.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/luafunc.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/luafunc.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o: mfluadir/otfcc/src/otfccbuild.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o `test -f 'mfluadir/otfcc/src/otfccbuild.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccbuild.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/otfccbuild.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.o `test -f 'mfluadir/otfcc/src/otfccbuild.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccbuild.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj: mfluadir/otfcc/src/otfccbuild.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj `if test -f 'mfluadir/otfcc/src/otfccbuild.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccbuild.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccbuild.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/otfccbuild.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccbuild.obj `if test -f 'mfluadir/otfcc/src/otfccbuild.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccbuild.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccbuild.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o: mfluadir/otfcc/src/otfccdump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o `test -f 'mfluadir/otfcc/src/otfccdump.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccdump.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/otfccdump.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.o `test -f 'mfluadir/otfcc/src/otfccdump.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccdump.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj: mfluadir/otfcc/src/otfccdump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj `if test -f 'mfluadir/otfcc/src/otfccdump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccdump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccdump.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/otfccdump.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdump.obj `if test -f 'mfluadir/otfcc/src/otfccdump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccdump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccdump.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o: mfluadir/otfcc/src/otfccdll.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o `test -f 'mfluadir/otfcc/src/otfccdll.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccdll.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/otfccdll.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.o `test -f 'mfluadir/otfcc/src/otfccdll.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/otfccdll.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj: mfluadir/otfcc/src/otfccdll.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj `if test -f 'mfluadir/otfcc/src/otfccdll.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccdll.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccdll.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/otfccdll.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-otfccdll.obj `if test -f 'mfluadir/otfcc/src/otfccdll.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/otfccdll.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/otfccdll.c'; fi`
+
+mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o: mfluadir/otfcc/src/stopwatch.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o `test -f 'mfluadir/otfcc/src/stopwatch.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/stopwatch.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/stopwatch.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.o `test -f 'mfluadir/otfcc/src/stopwatch.c' || echo '$(srcdir)/'`mfluadir/otfcc/src/stopwatch.c
+
+mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj: mfluadir/otfcc/src/stopwatch.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj -MD -MP -MF mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Tpo -c -o mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj `if test -f 'mfluadir/otfcc/src/stopwatch.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/stopwatch.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/stopwatch.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Tpo mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/src/stopwatch.c' object='mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/src/libmfluaotfcc_a-stopwatch.obj `if test -f 'mfluadir/otfcc/src/stopwatch.c'; then $(CYGPATH_W) 'mfluadir/otfcc/src/stopwatch.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/src/stopwatch.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o: mfluadir/otfcc/lib/consolidate/consolidate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Tpo -c -o mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o `test -f 'mfluadir/otfcc/lib/consolidate/consolidate.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/consolidate.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Tpo mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/consolidate.c' object='mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.o `test -f 'mfluadir/otfcc/lib/consolidate/consolidate.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/consolidate.c
+
+mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj: mfluadir/otfcc/lib/consolidate/consolidate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Tpo -c -o mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj `if test -f 'mfluadir/otfcc/lib/consolidate/consolidate.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/consolidate.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/consolidate.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Tpo mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/consolidate.c' object='mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/libmfluaotfcc_a-consolidate.obj `if test -f 'mfluadir/otfcc/lib/consolidate/consolidate.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/consolidate.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/consolidate.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o: mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-single.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj: mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-single.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-single.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o: mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-single.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj: mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-single.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-single.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o: mfluadir/otfcc/lib/consolidate/otl/chaining.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/chaining.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/chaining.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/chaining.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/chaining.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/chaining.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj: mfluadir/otfcc/lib/consolidate/otl/chaining.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/chaining.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/chaining.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/chaining.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/chaining.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-chaining.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/chaining.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/chaining.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/chaining.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o: mfluadir/otfcc/lib/consolidate/otl/common.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/common.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/common.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/common.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj: mfluadir/otfcc/lib/consolidate/otl/common.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/common.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/common.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-common.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/common.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o: mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj: mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-multi.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o: mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj: mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-reverse.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o: mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj: mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gsub-ligature.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o: mfluadir/otfcc/lib/consolidate/otl/GDEF.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/GDEF.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/GDEF.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/GDEF.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj: mfluadir/otfcc/lib/consolidate/otl/GDEF.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/GDEF.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-GDEF.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/GDEF.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o: mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj: mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-pair.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o: mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj: mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-gpos-cursive.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c'; fi`
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o: mfluadir/otfcc/lib/consolidate/otl/mark.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/mark.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/mark.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/mark.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.o `test -f 'mfluadir/otfcc/lib/consolidate/otl/mark.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/consolidate/otl/mark.c
+
+mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj: mfluadir/otfcc/lib/consolidate/otl/mark.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj -MD -MP -MF mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Tpo -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/mark.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/mark.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/mark.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Tpo mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/consolidate/otl/mark.c' object='mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/consolidate/otl/libmfluaotfcc_a-mark.obj `if test -f 'mfluadir/otfcc/lib/consolidate/otl/mark.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/consolidate/otl/mark.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/consolidate/otl/mark.c'; fi`
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o: mfluadir/otfcc/lib/support/options.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o `test -f 'mfluadir/otfcc/lib/support/options.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/options.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/options.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.o `test -f 'mfluadir/otfcc/lib/support/options.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/options.c
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj: mfluadir/otfcc/lib/support/options.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj `if test -f 'mfluadir/otfcc/lib/support/options.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/options.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/options.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/options.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-options.obj `if test -f 'mfluadir/otfcc/lib/support/options.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/options.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/options.c'; fi`
+
+mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o: mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o -MD -MP -MF mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Tpo -c -o mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o `test -f 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Tpo mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c' object='mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.o `test -f 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
+
+mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj: mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj -MD -MP -MF mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Tpo -c -o mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj `if test -f 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Tpo mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c' object='mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/unicodeconv/libmfluaotfcc_a-unicodeconv.obj `if test -f 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c'; fi`
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o: mfluadir/otfcc/lib/support/handle.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o `test -f 'mfluadir/otfcc/lib/support/handle.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/handle.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/handle.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.o `test -f 'mfluadir/otfcc/lib/support/handle.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/handle.c
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj: mfluadir/otfcc/lib/support/handle.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj `if test -f 'mfluadir/otfcc/lib/support/handle.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/handle.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/handle.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/handle.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-handle.obj `if test -f 'mfluadir/otfcc/lib/support/handle.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/handle.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/handle.c'; fi`
+
+mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o: mfluadir/otfcc/lib/support/buffer/buffer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o -MD -MP -MF mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Tpo -c -o mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o `test -f 'mfluadir/otfcc/lib/support/buffer/buffer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/buffer/buffer.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Tpo mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/buffer/buffer.c' object='mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.o `test -f 'mfluadir/otfcc/lib/support/buffer/buffer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/buffer/buffer.c
+
+mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj: mfluadir/otfcc/lib/support/buffer/buffer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj -MD -MP -MF mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Tpo -c -o mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj `if test -f 'mfluadir/otfcc/lib/support/buffer/buffer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/buffer/buffer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/buffer/buffer.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Tpo mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/buffer/buffer.c' object='mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/buffer/libmfluaotfcc_a-buffer.obj `if test -f 'mfluadir/otfcc/lib/support/buffer/buffer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/buffer/buffer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/buffer/buffer.c'; fi`
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o: mfluadir/otfcc/lib/support/primitives.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o `test -f 'mfluadir/otfcc/lib/support/primitives.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/primitives.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/primitives.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.o `test -f 'mfluadir/otfcc/lib/support/primitives.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/primitives.c
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj: mfluadir/otfcc/lib/support/primitives.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj `if test -f 'mfluadir/otfcc/lib/support/primitives.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/primitives.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/primitives.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/primitives.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-primitives.obj `if test -f 'mfluadir/otfcc/lib/support/primitives.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/primitives.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/primitives.c'; fi`
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o: mfluadir/otfcc/lib/support/glyph-order.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o `test -f 'mfluadir/otfcc/lib/support/glyph-order.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/glyph-order.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/glyph-order.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.o `test -f 'mfluadir/otfcc/lib/support/glyph-order.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/glyph-order.c
+
+mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj: mfluadir/otfcc/lib/support/glyph-order.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj -MD -MP -MF mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Tpo -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj `if test -f 'mfluadir/otfcc/lib/support/glyph-order.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/glyph-order.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/glyph-order.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Tpo mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/glyph-order.c' object='mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/libmfluaotfcc_a-glyph-order.obj `if test -f 'mfluadir/otfcc/lib/support/glyph-order.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/glyph-order.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/glyph-order.c'; fi`
+
+mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o: mfluadir/otfcc/lib/support/sha1/sha1.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o -MD -MP -MF mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Tpo -c -o mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o `test -f 'mfluadir/otfcc/lib/support/sha1/sha1.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/sha1/sha1.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Tpo mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/sha1/sha1.c' object='mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.o `test -f 'mfluadir/otfcc/lib/support/sha1/sha1.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/sha1/sha1.c
+
+mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj: mfluadir/otfcc/lib/support/sha1/sha1.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj -MD -MP -MF mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Tpo -c -o mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj `if test -f 'mfluadir/otfcc/lib/support/sha1/sha1.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/sha1/sha1.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/sha1/sha1.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Tpo mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/sha1/sha1.c' object='mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/sha1/libmfluaotfcc_a-sha1.obj `if test -f 'mfluadir/otfcc/lib/support/sha1/sha1.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/sha1/sha1.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/sha1/sha1.c'; fi`
+
+mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o: mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o -MD -MP -MF mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Tpo -c -o mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o `test -f 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Tpo mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/ttinstr/ttinstr.c' object='mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.o `test -f 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
+
+mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj: mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj -MD -MP -MF mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Tpo -c -o mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj `if test -f 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Tpo mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/ttinstr/ttinstr.c' object='mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/ttinstr/libmfluaotfcc_a-ttinstr.obj `if test -f 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c'; fi`
+
+mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o: mfluadir/otfcc/lib/support/base64/base64.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o -MD -MP -MF mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Tpo -c -o mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o `test -f 'mfluadir/otfcc/lib/support/base64/base64.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/base64/base64.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Tpo mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/base64/base64.c' object='mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.o `test -f 'mfluadir/otfcc/lib/support/base64/base64.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/base64/base64.c
+
+mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj: mfluadir/otfcc/lib/support/base64/base64.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj -MD -MP -MF mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Tpo -c -o mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj `if test -f 'mfluadir/otfcc/lib/support/base64/base64.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/base64/base64.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/base64/base64.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Tpo mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/base64/base64.c' object='mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/base64/libmfluaotfcc_a-base64.obj `if test -f 'mfluadir/otfcc/lib/support/base64/base64.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/base64/base64.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/base64/base64.c'; fi`
+
+mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o: mfluadir/otfcc/lib/support/json/json-ident.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o -MD -MP -MF mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Tpo -c -o mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o `test -f 'mfluadir/otfcc/lib/support/json/json-ident.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/json/json-ident.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Tpo mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/json/json-ident.c' object='mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.o `test -f 'mfluadir/otfcc/lib/support/json/json-ident.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/json/json-ident.c
+
+mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj: mfluadir/otfcc/lib/support/json/json-ident.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj -MD -MP -MF mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Tpo -c -o mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj `if test -f 'mfluadir/otfcc/lib/support/json/json-ident.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/json/json-ident.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/json/json-ident.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Tpo mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/json/json-ident.c' object='mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/json/libmfluaotfcc_a-json-ident.obj `if test -f 'mfluadir/otfcc/lib/support/json/json-ident.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/json/json-ident.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/json/json-ident.c'; fi`
+
+mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o: mfluadir/otfcc/lib/support/aglfn/aglfn.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o -MD -MP -MF mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Tpo -c -o mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o `test -f 'mfluadir/otfcc/lib/support/aglfn/aglfn.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/aglfn/aglfn.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Tpo mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/aglfn/aglfn.c' object='mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.o `test -f 'mfluadir/otfcc/lib/support/aglfn/aglfn.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/support/aglfn/aglfn.c
+
+mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj: mfluadir/otfcc/lib/support/aglfn/aglfn.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj -MD -MP -MF mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Tpo -c -o mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj `if test -f 'mfluadir/otfcc/lib/support/aglfn/aglfn.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/aglfn/aglfn.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/aglfn/aglfn.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Tpo mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/support/aglfn/aglfn.c' object='mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/support/aglfn/libmfluaotfcc_a-aglfn.obj `if test -f 'mfluadir/otfcc/lib/support/aglfn/aglfn.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/support/aglfn/aglfn.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/support/aglfn/aglfn.c'; fi`
+
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o: mfluadir/otfcc/lib/otf-writer/stat.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o -MD -MP -MF mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Tpo -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o `test -f 'mfluadir/otfcc/lib/otf-writer/stat.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-writer/stat.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Tpo mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/otf-writer/stat.c' object='mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.o `test -f 'mfluadir/otfcc/lib/otf-writer/stat.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-writer/stat.c
+
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj: mfluadir/otfcc/lib/otf-writer/stat.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj -MD -MP -MF mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Tpo -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj `if test -f 'mfluadir/otfcc/lib/otf-writer/stat.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-writer/stat.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-writer/stat.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Tpo mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/otf-writer/stat.c' object='mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-stat.obj `if test -f 'mfluadir/otfcc/lib/otf-writer/stat.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-writer/stat.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-writer/stat.c'; fi`
+
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o: mfluadir/otfcc/lib/otf-writer/otf-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o -MD -MP -MF mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Tpo -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o `test -f 'mfluadir/otfcc/lib/otf-writer/otf-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-writer/otf-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Tpo mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/otf-writer/otf-writer.c' object='mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.o `test -f 'mfluadir/otfcc/lib/otf-writer/otf-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-writer/otf-writer.c
+
+mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj: mfluadir/otfcc/lib/otf-writer/otf-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj -MD -MP -MF mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Tpo -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj `if test -f 'mfluadir/otfcc/lib/otf-writer/otf-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-writer/otf-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-writer/otf-writer.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Tpo mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/otf-writer/otf-writer.c' object='mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-writer/libmfluaotfcc_a-otf-writer.obj `if test -f 'mfluadir/otfcc/lib/otf-writer/otf-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-writer/otf-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-writer/otf-writer.c'; fi`
+
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o: mfluadir/otfcc/lib/otf-reader/otf-reader.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o -MD -MP -MF mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Tpo -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o `test -f 'mfluadir/otfcc/lib/otf-reader/otf-reader.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-reader/otf-reader.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Tpo mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/otf-reader/otf-reader.c' object='mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.o `test -f 'mfluadir/otfcc/lib/otf-reader/otf-reader.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-reader/otf-reader.c
+
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj: mfluadir/otfcc/lib/otf-reader/otf-reader.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj -MD -MP -MF mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Tpo -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj `if test -f 'mfluadir/otfcc/lib/otf-reader/otf-reader.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-reader/otf-reader.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-reader/otf-reader.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Tpo mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/otf-reader/otf-reader.c' object='mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-otf-reader.obj `if test -f 'mfluadir/otfcc/lib/otf-reader/otf-reader.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-reader/otf-reader.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-reader/otf-reader.c'; fi`
+
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o: mfluadir/otfcc/lib/otf-reader/unconsolidate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o -MD -MP -MF mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Tpo -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o `test -f 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-reader/unconsolidate.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Tpo mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/otf-reader/unconsolidate.c' object='mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.o `test -f 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/otf-reader/unconsolidate.c
+
+mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj: mfluadir/otfcc/lib/otf-reader/unconsolidate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj -MD -MP -MF mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Tpo -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj `if test -f 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Tpo mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/otf-reader/unconsolidate.c' object='mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/otf-reader/libmfluaotfcc_a-unconsolidate.obj `if test -f 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/otf-reader/unconsolidate.c'; fi`
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o: mfluadir/otfcc/lib/vf/axis.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o `test -f 'mfluadir/otfcc/lib/vf/axis.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/axis.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/vf/axis.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.o `test -f 'mfluadir/otfcc/lib/vf/axis.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/axis.c
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj: mfluadir/otfcc/lib/vf/axis.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj `if test -f 'mfluadir/otfcc/lib/vf/axis.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/axis.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/axis.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/vf/axis.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-axis.obj `if test -f 'mfluadir/otfcc/lib/vf/axis.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/axis.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/axis.c'; fi`
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o: mfluadir/otfcc/lib/vf/region.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o `test -f 'mfluadir/otfcc/lib/vf/region.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/region.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/vf/region.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.o `test -f 'mfluadir/otfcc/lib/vf/region.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/region.c
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj: mfluadir/otfcc/lib/vf/region.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj `if test -f 'mfluadir/otfcc/lib/vf/region.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/region.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/region.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/vf/region.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-region.obj `if test -f 'mfluadir/otfcc/lib/vf/region.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/region.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/region.c'; fi`
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o: mfluadir/otfcc/lib/vf/vq.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o `test -f 'mfluadir/otfcc/lib/vf/vq.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/vq.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/vf/vq.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.o `test -f 'mfluadir/otfcc/lib/vf/vq.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/vf/vq.c
+
+mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj: mfluadir/otfcc/lib/vf/vq.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj -MD -MP -MF mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Tpo -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj `if test -f 'mfluadir/otfcc/lib/vf/vq.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/vq.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/vq.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Tpo mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/vf/vq.c' object='mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/vf/libmfluaotfcc_a-vq.obj `if test -f 'mfluadir/otfcc/lib/vf/vq.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/vf/vq.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/vf/vq.c'; fi`
+
+mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o: mfluadir/otfcc/lib/logger/logger.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o -MD -MP -MF mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Tpo -c -o mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o `test -f 'mfluadir/otfcc/lib/logger/logger.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/logger/logger.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Tpo mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/logger/logger.c' object='mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.o `test -f 'mfluadir/otfcc/lib/logger/logger.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/logger/logger.c
+
+mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj: mfluadir/otfcc/lib/logger/logger.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj -MD -MP -MF mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Tpo -c -o mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj `if test -f 'mfluadir/otfcc/lib/logger/logger.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/logger/logger.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/logger/logger.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Tpo mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/logger/logger.c' object='mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/logger/libmfluaotfcc_a-logger.obj `if test -f 'mfluadir/otfcc/lib/logger/logger.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/logger/logger.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/logger/logger.c'; fi`
+
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o: mfluadir/otfcc/lib/bk/bkgraph.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o -MD -MP -MF mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Tpo -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o `test -f 'mfluadir/otfcc/lib/bk/bkgraph.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/bk/bkgraph.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Tpo mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/bk/bkgraph.c' object='mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.o `test -f 'mfluadir/otfcc/lib/bk/bkgraph.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/bk/bkgraph.c
+
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj: mfluadir/otfcc/lib/bk/bkgraph.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj -MD -MP -MF mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Tpo -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj `if test -f 'mfluadir/otfcc/lib/bk/bkgraph.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/bk/bkgraph.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/bk/bkgraph.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Tpo mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/bk/bkgraph.c' object='mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkgraph.obj `if test -f 'mfluadir/otfcc/lib/bk/bkgraph.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/bk/bkgraph.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/bk/bkgraph.c'; fi`
+
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o: mfluadir/otfcc/lib/bk/bkblock.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o -MD -MP -MF mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Tpo -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o `test -f 'mfluadir/otfcc/lib/bk/bkblock.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/bk/bkblock.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Tpo mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/bk/bkblock.c' object='mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.o `test -f 'mfluadir/otfcc/lib/bk/bkblock.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/bk/bkblock.c
+
+mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj: mfluadir/otfcc/lib/bk/bkblock.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj -MD -MP -MF mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Tpo -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj `if test -f 'mfluadir/otfcc/lib/bk/bkblock.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/bk/bkblock.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/bk/bkblock.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Tpo mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/bk/bkblock.c' object='mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/bk/libmfluaotfcc_a-bkblock.obj `if test -f 'mfluadir/otfcc/lib/bk/bkblock.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/bk/bkblock.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/bk/bkblock.c'; fi`
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o: mfluadir/otfcc/lib/font/caryll-font.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o `test -f 'mfluadir/otfcc/lib/font/caryll-font.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-font.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-font.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.o `test -f 'mfluadir/otfcc/lib/font/caryll-font.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-font.c
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj: mfluadir/otfcc/lib/font/caryll-font.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-font.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-font.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-font.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-font.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-font.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-font.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-font.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-font.c'; fi`
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o: mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o `test -f 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-sfnt-builder.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.o `test -f 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj: mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-sfnt-builder.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt-builder.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c'; fi`
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o: mfluadir/otfcc/lib/font/caryll-sfnt.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o `test -f 'mfluadir/otfcc/lib/font/caryll-sfnt.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-sfnt.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-sfnt.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.o `test -f 'mfluadir/otfcc/lib/font/caryll-sfnt.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/font/caryll-sfnt.c
+
+mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj: mfluadir/otfcc/lib/font/caryll-sfnt.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj -MD -MP -MF mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Tpo -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-sfnt.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-sfnt.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-sfnt.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Tpo mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/font/caryll-sfnt.c' object='mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/font/libmfluaotfcc_a-caryll-sfnt.obj `if test -f 'mfluadir/otfcc/lib/font/caryll-sfnt.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/font/caryll-sfnt.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/font/caryll-sfnt.c'; fi`
+
+mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o: mfluadir/otfcc/lib/json-writer/json-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o -MD -MP -MF mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Tpo -c -o mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o `test -f 'mfluadir/otfcc/lib/json-writer/json-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/json-writer/json-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Tpo mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/json-writer/json-writer.c' object='mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.o `test -f 'mfluadir/otfcc/lib/json-writer/json-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/json-writer/json-writer.c
+
+mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj: mfluadir/otfcc/lib/json-writer/json-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj -MD -MP -MF mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Tpo -c -o mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj `if test -f 'mfluadir/otfcc/lib/json-writer/json-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/json-writer/json-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/json-writer/json-writer.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Tpo mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/json-writer/json-writer.c' object='mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/json-writer/libmfluaotfcc_a-json-writer.obj `if test -f 'mfluadir/otfcc/lib/json-writer/json-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/json-writer/json-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/json-writer/json-writer.c'; fi`
+
+mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o: mfluadir/otfcc/lib/json-reader/json-reader.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o -MD -MP -MF mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Tpo -c -o mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o `test -f 'mfluadir/otfcc/lib/json-reader/json-reader.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/json-reader/json-reader.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Tpo mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/json-reader/json-reader.c' object='mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.o `test -f 'mfluadir/otfcc/lib/json-reader/json-reader.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/json-reader/json-reader.c
+
+mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj: mfluadir/otfcc/lib/json-reader/json-reader.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj -MD -MP -MF mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Tpo -c -o mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj `if test -f 'mfluadir/otfcc/lib/json-reader/json-reader.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/json-reader/json-reader.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/json-reader/json-reader.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Tpo mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/json-reader/json-reader.c' object='mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/json-reader/libmfluaotfcc_a-json-reader.obj `if test -f 'mfluadir/otfcc/lib/json-reader/json-reader.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/json-reader/json-reader.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/json-reader/json-reader.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o: mfluadir/otfcc/lib/libcff/cff-string.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o `test -f 'mfluadir/otfcc/lib/libcff/cff-string.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-string.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-string.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.o `test -f 'mfluadir/otfcc/lib/libcff/cff-string.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-string.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj: mfluadir/otfcc/lib/libcff/cff-string.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-string.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-string.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-string.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-string.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-string.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-string.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-string.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-string.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o: mfluadir/otfcc/lib/libcff/cff-opmean.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o `test -f 'mfluadir/otfcc/lib/libcff/cff-opmean.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-opmean.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-opmean.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.o `test -f 'mfluadir/otfcc/lib/libcff/cff-opmean.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-opmean.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj: mfluadir/otfcc/lib/libcff/cff-opmean.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-opmean.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-opmean.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-opmean.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-opmean.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-opmean.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-opmean.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-opmean.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-opmean.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o: mfluadir/otfcc/lib/libcff/charstring-il.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o `test -f 'mfluadir/otfcc/lib/libcff/charstring-il.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/charstring-il.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/charstring-il.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.o `test -f 'mfluadir/otfcc/lib/libcff/charstring-il.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/charstring-il.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj: mfluadir/otfcc/lib/libcff/charstring-il.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj `if test -f 'mfluadir/otfcc/lib/libcff/charstring-il.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/charstring-il.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/charstring-il.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/charstring-il.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-charstring-il.obj `if test -f 'mfluadir/otfcc/lib/libcff/charstring-il.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/charstring-il.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/charstring-il.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o: mfluadir/otfcc/lib/libcff/cff-fdselect.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o `test -f 'mfluadir/otfcc/lib/libcff/cff-fdselect.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-fdselect.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-fdselect.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.o `test -f 'mfluadir/otfcc/lib/libcff/cff-fdselect.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-fdselect.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj: mfluadir/otfcc/lib/libcff/cff-fdselect.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-fdselect.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-fdselect.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-fdselect.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-fdselect.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-fdselect.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-fdselect.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-fdselect.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-fdselect.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o: mfluadir/otfcc/lib/libcff/cff-parser.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o `test -f 'mfluadir/otfcc/lib/libcff/cff-parser.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-parser.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-parser.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.o `test -f 'mfluadir/otfcc/lib/libcff/cff-parser.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-parser.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj: mfluadir/otfcc/lib/libcff/cff-parser.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-parser.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-parser.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-parser.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-parser.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-parser.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-parser.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-parser.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-parser.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o: mfluadir/otfcc/lib/libcff/subr.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o `test -f 'mfluadir/otfcc/lib/libcff/subr.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/subr.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/subr.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.o `test -f 'mfluadir/otfcc/lib/libcff/subr.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/subr.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj: mfluadir/otfcc/lib/libcff/subr.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj `if test -f 'mfluadir/otfcc/lib/libcff/subr.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/subr.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/subr.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/subr.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-subr.obj `if test -f 'mfluadir/otfcc/lib/libcff/subr.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/subr.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/subr.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o: mfluadir/otfcc/lib/libcff/cff-charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o `test -f 'mfluadir/otfcc/lib/libcff/cff-charset.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-charset.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.o `test -f 'mfluadir/otfcc/lib/libcff/cff-charset.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-charset.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj: mfluadir/otfcc/lib/libcff/cff-charset.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-charset.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-charset.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-charset.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-charset.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-charset.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-charset.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-charset.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-charset.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o: mfluadir/otfcc/lib/libcff/cff-index.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o `test -f 'mfluadir/otfcc/lib/libcff/cff-index.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-index.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-index.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.o `test -f 'mfluadir/otfcc/lib/libcff/cff-index.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-index.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj: mfluadir/otfcc/lib/libcff/cff-index.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-index.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-index.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-index.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-index.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-index.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-index.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-index.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-index.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o: mfluadir/otfcc/lib/libcff/cff-codecs.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o `test -f 'mfluadir/otfcc/lib/libcff/cff-codecs.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-codecs.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-codecs.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.o `test -f 'mfluadir/otfcc/lib/libcff/cff-codecs.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-codecs.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj: mfluadir/otfcc/lib/libcff/cff-codecs.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-codecs.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-codecs.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-codecs.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-codecs.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-codecs.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-codecs.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-codecs.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-codecs.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o: mfluadir/otfcc/lib/libcff/cff-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o `test -f 'mfluadir/otfcc/lib/libcff/cff-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-writer.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.o `test -f 'mfluadir/otfcc/lib/libcff/cff-writer.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-writer.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj: mfluadir/otfcc/lib/libcff/cff-writer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-writer.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-writer.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-writer.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-writer.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-writer.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-writer.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o: mfluadir/otfcc/lib/libcff/cff-dict.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o `test -f 'mfluadir/otfcc/lib/libcff/cff-dict.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-dict.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-dict.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.o `test -f 'mfluadir/otfcc/lib/libcff/cff-dict.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-dict.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj: mfluadir/otfcc/lib/libcff/cff-dict.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-dict.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-dict.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-dict.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-dict.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-dict.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-dict.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-dict.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-dict.c'; fi`
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o: mfluadir/otfcc/lib/libcff/cff-value.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o `test -f 'mfluadir/otfcc/lib/libcff/cff-value.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-value.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-value.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.o `test -f 'mfluadir/otfcc/lib/libcff/cff-value.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/libcff/cff-value.c
+
+mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj: mfluadir/otfcc/lib/libcff/cff-value.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj -MD -MP -MF mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Tpo -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-value.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-value.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-value.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Tpo mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/libcff/cff-value.c' object='mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/libcff/libmfluaotfcc_a-cff-value.obj `if test -f 'mfluadir/otfcc/lib/libcff/cff-value.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/libcff/cff-value.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/libcff/cff-value.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o: mfluadir/otfcc/lib/table/vhea.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o `test -f 'mfluadir/otfcc/lib/table/vhea.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vhea.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/vhea.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.o `test -f 'mfluadir/otfcc/lib/table/vhea.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vhea.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj: mfluadir/otfcc/lib/table/vhea.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj `if test -f 'mfluadir/otfcc/lib/table/vhea.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vhea.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vhea.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/vhea.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vhea.obj `if test -f 'mfluadir/otfcc/lib/table/vhea.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vhea.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vhea.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o: mfluadir/otfcc/lib/table/fvar.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o `test -f 'mfluadir/otfcc/lib/table/fvar.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/fvar.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/fvar.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.o `test -f 'mfluadir/otfcc/lib/table/fvar.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/fvar.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj: mfluadir/otfcc/lib/table/fvar.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj `if test -f 'mfluadir/otfcc/lib/table/fvar.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/fvar.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/fvar.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/fvar.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fvar.obj `if test -f 'mfluadir/otfcc/lib/table/fvar.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/fvar.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/fvar.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o: mfluadir/otfcc/lib/table/cmap.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o `test -f 'mfluadir/otfcc/lib/table/cmap.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/cmap.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/cmap.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.o `test -f 'mfluadir/otfcc/lib/table/cmap.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/cmap.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj: mfluadir/otfcc/lib/table/cmap.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj `if test -f 'mfluadir/otfcc/lib/table/cmap.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/cmap.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/cmap.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/cmap.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cmap.obj `if test -f 'mfluadir/otfcc/lib/table/cmap.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/cmap.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/cmap.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o: mfluadir/otfcc/lib/table/meta/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/meta/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/read.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/meta/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/read.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj: mfluadir/otfcc/lib/table/meta/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/meta/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/read.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/read.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/meta/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/read.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o: mfluadir/otfcc/lib/table/meta/type.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o `test -f 'mfluadir/otfcc/lib/table/meta/type.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/type.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/type.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.o `test -f 'mfluadir/otfcc/lib/table/meta/type.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/type.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj: mfluadir/otfcc/lib/table/meta/type.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj `if test -f 'mfluadir/otfcc/lib/table/meta/type.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/type.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/type.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/type.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-type.obj `if test -f 'mfluadir/otfcc/lib/table/meta/type.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/type.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/type.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o: mfluadir/otfcc/lib/table/meta/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/meta/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/build.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/meta/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/build.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj: mfluadir/otfcc/lib/table/meta/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/meta/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/build.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/build.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/meta/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/build.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o: mfluadir/otfcc/lib/table/meta/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/meta/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/parse.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/meta/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/parse.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj: mfluadir/otfcc/lib/table/meta/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/meta/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/parse.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/parse.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/meta/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/parse.c'; fi`
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o: mfluadir/otfcc/lib/table/meta/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/meta/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/dump.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/meta/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/meta/dump.c
+
+mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj: mfluadir/otfcc/lib/table/meta/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj -MD -MP -MF mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/meta/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/dump.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/meta/dump.c' object='mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/meta/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/meta/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/meta/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/meta/dump.c'; fi`
+
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o: mfluadir/otfcc/lib/table/vdmx/type.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o -MD -MP -MF mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Tpo -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o `test -f 'mfluadir/otfcc/lib/table/vdmx/type.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vdmx/type.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Tpo mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/vdmx/type.c' object='mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.o `test -f 'mfluadir/otfcc/lib/table/vdmx/type.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vdmx/type.c
+
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj: mfluadir/otfcc/lib/table/vdmx/type.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj -MD -MP -MF mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Tpo -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj `if test -f 'mfluadir/otfcc/lib/table/vdmx/type.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vdmx/type.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vdmx/type.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Tpo mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/vdmx/type.c' object='mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-type.obj `if test -f 'mfluadir/otfcc/lib/table/vdmx/type.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vdmx/type.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vdmx/type.c'; fi`
+
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o: mfluadir/otfcc/lib/table/vdmx/funcs.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o -MD -MP -MF mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Tpo -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o `test -f 'mfluadir/otfcc/lib/table/vdmx/funcs.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vdmx/funcs.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Tpo mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/vdmx/funcs.c' object='mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.o `test -f 'mfluadir/otfcc/lib/table/vdmx/funcs.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vdmx/funcs.c
+
+mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj: mfluadir/otfcc/lib/table/vdmx/funcs.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj -MD -MP -MF mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Tpo -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj `if test -f 'mfluadir/otfcc/lib/table/vdmx/funcs.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vdmx/funcs.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vdmx/funcs.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Tpo mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/vdmx/funcs.c' object='mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/vdmx/libmfluaotfcc_a-funcs.obj `if test -f 'mfluadir/otfcc/lib/table/vdmx/funcs.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vdmx/funcs.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vdmx/funcs.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o: mfluadir/otfcc/lib/table/hhea.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o `test -f 'mfluadir/otfcc/lib/table/hhea.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hhea.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/hhea.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.o `test -f 'mfluadir/otfcc/lib/table/hhea.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hhea.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj: mfluadir/otfcc/lib/table/hhea.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj `if test -f 'mfluadir/otfcc/lib/table/hhea.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hhea.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hhea.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/hhea.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hhea.obj `if test -f 'mfluadir/otfcc/lib/table/hhea.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hhea.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hhea.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o: mfluadir/otfcc/lib/table/post.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o `test -f 'mfluadir/otfcc/lib/table/post.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/post.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/post.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.o `test -f 'mfluadir/otfcc/lib/table/post.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/post.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj: mfluadir/otfcc/lib/table/post.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj `if test -f 'mfluadir/otfcc/lib/table/post.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/post.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/post.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/post.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-post.obj `if test -f 'mfluadir/otfcc/lib/table/post.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/post.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/post.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o: mfluadir/otfcc/lib/table/cvt.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o `test -f 'mfluadir/otfcc/lib/table/cvt.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/cvt.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/cvt.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.o `test -f 'mfluadir/otfcc/lib/table/cvt.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/cvt.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj: mfluadir/otfcc/lib/table/cvt.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj `if test -f 'mfluadir/otfcc/lib/table/cvt.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/cvt.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/cvt.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/cvt.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-cvt.obj `if test -f 'mfluadir/otfcc/lib/table/cvt.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/cvt.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/cvt.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o: mfluadir/otfcc/lib/table/CFF.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o `test -f 'mfluadir/otfcc/lib/table/CFF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/CFF.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/CFF.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.o `test -f 'mfluadir/otfcc/lib/table/CFF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/CFF.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj: mfluadir/otfcc/lib/table/CFF.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj `if test -f 'mfluadir/otfcc/lib/table/CFF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/CFF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/CFF.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/CFF.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CFF.obj `if test -f 'mfluadir/otfcc/lib/table/CFF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/CFF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/CFF.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o: mfluadir/otfcc/lib/table/gasp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o `test -f 'mfluadir/otfcc/lib/table/gasp.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/gasp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/gasp.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.o `test -f 'mfluadir/otfcc/lib/table/gasp.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/gasp.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj: mfluadir/otfcc/lib/table/gasp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj `if test -f 'mfluadir/otfcc/lib/table/gasp.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/gasp.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/gasp.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/gasp.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-gasp.obj `if test -f 'mfluadir/otfcc/lib/table/gasp.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/gasp.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/gasp.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o: mfluadir/otfcc/lib/table/LTSH.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o `test -f 'mfluadir/otfcc/lib/table/LTSH.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/LTSH.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/LTSH.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.o `test -f 'mfluadir/otfcc/lib/table/LTSH.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/LTSH.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj: mfluadir/otfcc/lib/table/LTSH.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj `if test -f 'mfluadir/otfcc/lib/table/LTSH.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/LTSH.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/LTSH.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/LTSH.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-LTSH.obj `if test -f 'mfluadir/otfcc/lib/table/LTSH.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/LTSH.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/LTSH.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o: mfluadir/otfcc/lib/table/maxp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o `test -f 'mfluadir/otfcc/lib/table/maxp.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/maxp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/maxp.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.o `test -f 'mfluadir/otfcc/lib/table/maxp.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/maxp.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj: mfluadir/otfcc/lib/table/maxp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj `if test -f 'mfluadir/otfcc/lib/table/maxp.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/maxp.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/maxp.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/maxp.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-maxp.obj `if test -f 'mfluadir/otfcc/lib/table/maxp.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/maxp.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/maxp.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o: mfluadir/otfcc/lib/table/COLR.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o `test -f 'mfluadir/otfcc/lib/table/COLR.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/COLR.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/COLR.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.o `test -f 'mfluadir/otfcc/lib/table/COLR.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/COLR.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj: mfluadir/otfcc/lib/table/COLR.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj `if test -f 'mfluadir/otfcc/lib/table/COLR.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/COLR.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/COLR.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/COLR.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-COLR.obj `if test -f 'mfluadir/otfcc/lib/table/COLR.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/COLR.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/COLR.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o: mfluadir/otfcc/lib/table/vmtx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o `test -f 'mfluadir/otfcc/lib/table/vmtx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vmtx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/vmtx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.o `test -f 'mfluadir/otfcc/lib/table/vmtx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/vmtx.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj: mfluadir/otfcc/lib/table/vmtx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj `if test -f 'mfluadir/otfcc/lib/table/vmtx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vmtx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vmtx.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/vmtx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-vmtx.obj `if test -f 'mfluadir/otfcc/lib/table/vmtx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/vmtx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/vmtx.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o: mfluadir/otfcc/lib/table/fpgm-prep.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o `test -f 'mfluadir/otfcc/lib/table/fpgm-prep.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/fpgm-prep.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/fpgm-prep.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.o `test -f 'mfluadir/otfcc/lib/table/fpgm-prep.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/fpgm-prep.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj: mfluadir/otfcc/lib/table/fpgm-prep.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj `if test -f 'mfluadir/otfcc/lib/table/fpgm-prep.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/fpgm-prep.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/fpgm-prep.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/fpgm-prep.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-fpgm-prep.obj `if test -f 'mfluadir/otfcc/lib/table/fpgm-prep.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/fpgm-prep.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/fpgm-prep.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o: mfluadir/otfcc/lib/table/head.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o `test -f 'mfluadir/otfcc/lib/table/head.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/head.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/head.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.o `test -f 'mfluadir/otfcc/lib/table/head.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/head.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj: mfluadir/otfcc/lib/table/head.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj `if test -f 'mfluadir/otfcc/lib/table/head.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/head.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/head.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/head.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-head.obj `if test -f 'mfluadir/otfcc/lib/table/head.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/head.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/head.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o: mfluadir/otfcc/lib/table/CPAL.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o `test -f 'mfluadir/otfcc/lib/table/CPAL.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/CPAL.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/CPAL.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.o `test -f 'mfluadir/otfcc/lib/table/CPAL.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/CPAL.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj: mfluadir/otfcc/lib/table/CPAL.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj `if test -f 'mfluadir/otfcc/lib/table/CPAL.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/CPAL.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/CPAL.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/CPAL.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-CPAL.obj `if test -f 'mfluadir/otfcc/lib/table/CPAL.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/CPAL.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/CPAL.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o: mfluadir/otfcc/lib/table/_TSI.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o `test -f 'mfluadir/otfcc/lib/table/_TSI.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/_TSI.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/_TSI.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.o `test -f 'mfluadir/otfcc/lib/table/_TSI.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/_TSI.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj: mfluadir/otfcc/lib/table/_TSI.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj `if test -f 'mfluadir/otfcc/lib/table/_TSI.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/_TSI.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/_TSI.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/_TSI.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-_TSI.obj `if test -f 'mfluadir/otfcc/lib/table/_TSI.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/_TSI.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/_TSI.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o: mfluadir/otfcc/lib/table/name.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o `test -f 'mfluadir/otfcc/lib/table/name.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/name.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/name.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.o `test -f 'mfluadir/otfcc/lib/table/name.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/name.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj: mfluadir/otfcc/lib/table/name.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj `if test -f 'mfluadir/otfcc/lib/table/name.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/name.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/name.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/name.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-name.obj `if test -f 'mfluadir/otfcc/lib/table/name.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/name.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/name.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o: mfluadir/otfcc/lib/table/OS_2.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o `test -f 'mfluadir/otfcc/lib/table/OS_2.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/OS_2.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/OS_2.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.o `test -f 'mfluadir/otfcc/lib/table/OS_2.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/OS_2.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj: mfluadir/otfcc/lib/table/OS_2.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj `if test -f 'mfluadir/otfcc/lib/table/OS_2.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/OS_2.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/OS_2.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/OS_2.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-OS_2.obj `if test -f 'mfluadir/otfcc/lib/table/OS_2.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/OS_2.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/OS_2.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o: mfluadir/otfcc/lib/table/hdmx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o `test -f 'mfluadir/otfcc/lib/table/hdmx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hdmx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/hdmx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.o `test -f 'mfluadir/otfcc/lib/table/hdmx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hdmx.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj: mfluadir/otfcc/lib/table/hdmx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj `if test -f 'mfluadir/otfcc/lib/table/hdmx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hdmx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hdmx.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/hdmx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hdmx.obj `if test -f 'mfluadir/otfcc/lib/table/hdmx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hdmx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hdmx.c'; fi`
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o: mfluadir/otfcc/lib/table/glyf/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/glyf/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/read.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/glyf/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/read.c
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj: mfluadir/otfcc/lib/table/glyf/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/read.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/read.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/read.c'; fi`
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o: mfluadir/otfcc/lib/table/glyf/glyf.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o `test -f 'mfluadir/otfcc/lib/table/glyf/glyf.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/glyf.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/glyf.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.o `test -f 'mfluadir/otfcc/lib/table/glyf/glyf.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/glyf.c
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj: mfluadir/otfcc/lib/table/glyf/glyf.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/glyf.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/glyf.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/glyf.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/glyf.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-glyf.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/glyf.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/glyf.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/glyf.c'; fi`
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o: mfluadir/otfcc/lib/table/glyf/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/glyf/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/build.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/glyf/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/glyf/build.c
+
+mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj: mfluadir/otfcc/lib/table/glyf/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj -MD -MP -MF mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/build.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/glyf/build.c' object='mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/glyf/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/glyf/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/glyf/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/glyf/build.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o: mfluadir/otfcc/lib/table/GDEF.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o `test -f 'mfluadir/otfcc/lib/table/GDEF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/GDEF.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/GDEF.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.o `test -f 'mfluadir/otfcc/lib/table/GDEF.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/GDEF.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj: mfluadir/otfcc/lib/table/GDEF.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj `if test -f 'mfluadir/otfcc/lib/table/GDEF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/GDEF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/GDEF.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/GDEF.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-GDEF.obj `if test -f 'mfluadir/otfcc/lib/table/GDEF.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/GDEF.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/GDEF.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o: mfluadir/otfcc/lib/table/VORG.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o `test -f 'mfluadir/otfcc/lib/table/VORG.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/VORG.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/VORG.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.o `test -f 'mfluadir/otfcc/lib/table/VORG.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/VORG.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj: mfluadir/otfcc/lib/table/VORG.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj `if test -f 'mfluadir/otfcc/lib/table/VORG.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/VORG.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/VORG.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/VORG.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-VORG.obj `if test -f 'mfluadir/otfcc/lib/table/VORG.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/VORG.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/VORG.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o: mfluadir/otfcc/lib/table/otl/coverage.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o `test -f 'mfluadir/otfcc/lib/table/otl/coverage.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/coverage.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/coverage.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.o `test -f 'mfluadir/otfcc/lib/table/otl/coverage.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/coverage.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj: mfluadir/otfcc/lib/table/otl/coverage.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj `if test -f 'mfluadir/otfcc/lib/table/otl/coverage.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/coverage.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/coverage.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/coverage.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-coverage.obj `if test -f 'mfluadir/otfcc/lib/table/otl/coverage.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/coverage.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/coverage.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o: mfluadir/otfcc/lib/table/otl/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/otl/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/read.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/otl/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/read.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj: mfluadir/otfcc/lib/table/otl/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/otl/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/read.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/read.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/otl/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/read.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o: mfluadir/otfcc/lib/table/otl/classdef.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o `test -f 'mfluadir/otfcc/lib/table/otl/classdef.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/classdef.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/classdef.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.o `test -f 'mfluadir/otfcc/lib/table/otl/classdef.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/classdef.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj: mfluadir/otfcc/lib/table/otl/classdef.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj `if test -f 'mfluadir/otfcc/lib/table/otl/classdef.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/classdef.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/classdef.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/classdef.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-classdef.obj `if test -f 'mfluadir/otfcc/lib/table/otl/classdef.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/classdef.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/classdef.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o: mfluadir/otfcc/lib/table/otl/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/otl/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/build.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/otl/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/build.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj: mfluadir/otfcc/lib/table/otl/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/otl/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/build.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/build.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/otl/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/build.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o: mfluadir/otfcc/lib/table/otl/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/otl/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/parse.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/otl/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/parse.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj: mfluadir/otfcc/lib/table/otl/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/parse.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/parse.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/parse.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o: mfluadir/otfcc/lib/table/otl/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/otl/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/dump.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/otl/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/dump.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj: mfluadir/otfcc/lib/table/otl/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/otl/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/dump.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/dump.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/otl/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/dump.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o: mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj: mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-read.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-common.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-classifier.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-build.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-parse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o: mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
+
+mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj: mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Tpo mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c' object='mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/chaining/libmfluaotfcc_a-dump.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-ligature.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-mark-to-single.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o: mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj: mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-multi.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o: mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj: mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-reverse.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-common.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o: mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj: mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gsub-ligature.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o: mfluadir/otfcc/lib/table/otl/subtables/extend.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/extend.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/extend.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/extend.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/extend.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/extend.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj: mfluadir/otfcc/lib/table/otl/subtables/extend.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/extend.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/extend.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/extend.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/extend.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-extend.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/extend.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/extend.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/extend.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-pair.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o: mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.o `test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
+
+mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj: mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Tpo mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c' object='mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/subtables/libmfluaotfcc_a-gpos-cursive.obj `if test -f 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o: mfluadir/otfcc/lib/table/otl/otl.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o `test -f 'mfluadir/otfcc/lib/table/otl/otl.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/otl.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/otl.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.o `test -f 'mfluadir/otfcc/lib/table/otl/otl.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/otl.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj: mfluadir/otfcc/lib/table/otl/otl.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj `if test -f 'mfluadir/otfcc/lib/table/otl/otl.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/otl.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/otl.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/otl.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-otl.obj `if test -f 'mfluadir/otfcc/lib/table/otl/otl.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/otl.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/otl.c'; fi`
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o: mfluadir/otfcc/lib/table/otl/constants.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o `test -f 'mfluadir/otfcc/lib/table/otl/constants.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/constants.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/constants.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.o `test -f 'mfluadir/otfcc/lib/table/otl/constants.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/otl/constants.c
+
+mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj: mfluadir/otfcc/lib/table/otl/constants.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj -MD -MP -MF mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Tpo -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj `if test -f 'mfluadir/otfcc/lib/table/otl/constants.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/constants.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/constants.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Tpo mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/otl/constants.c' object='mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/otl/libmfluaotfcc_a-constants.obj `if test -f 'mfluadir/otfcc/lib/table/otl/constants.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/otl/constants.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/otl/constants.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o: mfluadir/otfcc/lib/table/hmtx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o `test -f 'mfluadir/otfcc/lib/table/hmtx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hmtx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/hmtx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.o `test -f 'mfluadir/otfcc/lib/table/hmtx.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/hmtx.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj: mfluadir/otfcc/lib/table/hmtx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj `if test -f 'mfluadir/otfcc/lib/table/hmtx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hmtx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hmtx.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/hmtx.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-hmtx.obj `if test -f 'mfluadir/otfcc/lib/table/hmtx.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/hmtx.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/hmtx.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o: mfluadir/otfcc/lib/table/BASE.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o `test -f 'mfluadir/otfcc/lib/table/BASE.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/BASE.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/BASE.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.o `test -f 'mfluadir/otfcc/lib/table/BASE.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/BASE.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj: mfluadir/otfcc/lib/table/BASE.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj `if test -f 'mfluadir/otfcc/lib/table/BASE.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/BASE.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/BASE.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/BASE.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-BASE.obj `if test -f 'mfluadir/otfcc/lib/table/BASE.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/BASE.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/BASE.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o: mfluadir/otfcc/lib/table/SVG.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o `test -f 'mfluadir/otfcc/lib/table/SVG.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/SVG.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/SVG.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.o `test -f 'mfluadir/otfcc/lib/table/SVG.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/SVG.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj: mfluadir/otfcc/lib/table/SVG.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj `if test -f 'mfluadir/otfcc/lib/table/SVG.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/SVG.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/SVG.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/SVG.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-SVG.obj `if test -f 'mfluadir/otfcc/lib/table/SVG.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/SVG.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/SVG.c'; fi`
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o: mfluadir/otfcc/lib/table/TSI5.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o `test -f 'mfluadir/otfcc/lib/table/TSI5.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/TSI5.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/TSI5.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.o `test -f 'mfluadir/otfcc/lib/table/TSI5.c' || echo '$(srcdir)/'`mfluadir/otfcc/lib/table/TSI5.c
+
+mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj: mfluadir/otfcc/lib/table/TSI5.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -MT mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj -MD -MP -MF mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Tpo -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj `if test -f 'mfluadir/otfcc/lib/table/TSI5.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/TSI5.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/TSI5.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Tpo mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mfluadir/otfcc/lib/table/TSI5.c' object='mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmfluaotfcc_a_CPPFLAGS) $(CPPFLAGS) $(libmfluaotfcc_a_CFLAGS) $(CFLAGS) -c -o mfluadir/otfcc/lib/table/libmfluaotfcc_a-TSI5.obj `if test -f 'mfluadir/otfcc/lib/table/TSI5.c'; then $(CYGPATH_W) 'mfluadir/otfcc/lib/table/TSI5.c'; else $(CYGPATH_W) '$(srcdir)/mfluadir/otfcc/lib/table/TSI5.c'; fi`
+
 libmplibbackends_a-pngout.o: pngout.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmplibbackends_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libmplibbackends_a-pngout.o -MD -MP -MF $(DEPDIR)/libmplibbackends_a-pngout.Tpo -c -o libmplibbackends_a-pngout.o `test -f 'pngout.c' || echo '$(srcdir)/'`pngout.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmplibbackends_a-pngout.Tpo $(DEPDIR)/libmplibbackends_a-pngout.Po
@@ -16477,6 +19376,64 @@
 	-rm -f luatexdir/utils/$(am__dirstamp)
 	-rm -f mfluadir/$(DEPDIR)/$(am__dirstamp)
 	-rm -f mfluadir/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/dep/extern/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/bk/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/consolidate/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/consolidate/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/font/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/json-reader/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/json-reader/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/json-writer/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/json-writer/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/libcff/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/logger/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/logger/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/otf-reader/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/otf-writer/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/aglfn/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/base64/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/base64/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/buffer/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/json/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/json/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/sha1/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/ttinstr/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/support/unicodeconv/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/glyf/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/meta/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/otl/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/table/vdmx/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/lib/vf/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/$(am__dirstamp)
+	-rm -f mfluadir/otfcc/src/$(am__dirstamp)
 	-rm -f mfluajitdir/$(DEPDIR)/$(am__dirstamp)
 	-rm -f mfluajitdir/$(am__dirstamp)
 	-rm -f mplibdir/$(DEPDIR)/$(am__dirstamp)
@@ -16560,6 +19517,7 @@
 	-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajit-pool.Po
 	-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajit0.Po
 	-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajitini.Po
+	-rm -f ./$(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po
 	-rm -f ./$(DEPDIR)/libmplibbackends_a-pngout.Po
 	-rm -f ./$(DEPDIR)/libmplibbackends_a-svgout.Po
 	-rm -f ./$(DEPDIR)/libmplibcore_a-mp.Po
@@ -17032,6 +19990,125 @@
 	-rm -f mfluadir/$(DEPDIR)/libmfluajit_a-mfluac.Po
 	-rm -f mfluadir/$(DEPDIR)/mflua-mfluaextra.Po
 	-rm -f mfluadir/$(DEPDIR)/mflua_nowin-mfluaextra.Po
+	-rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po
+	-rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po
+	-rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po
+	-rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po
+	-rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po
+	-rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po
+	-rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po
+	-rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po
+	-rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po
+	-rm -f mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po
+	-rm -f mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po
+	-rm -f mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po
+	-rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po
+	-rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po
+	-rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po
+	-rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po
+	-rm -f mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po
+	-rm -f mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po
+	-rm -f mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po
+	-rm -f mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po
+	-rm -f mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po
+	-rm -f mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po
+	-rm -f mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po
+	-rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po
+	-rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po
+	-rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po
+	-rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po
+	-rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po
+	-rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po
+	-rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po
+	-rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po
 	-rm -f mfluajitdir/$(DEPDIR)/mfluajit-mfluajitextra.Po
 	-rm -f mfluajitdir/$(DEPDIR)/mfluajit_nowin-mfluajitextra.Po
 	-rm -f mplibdir/$(DEPDIR)/libmputil_a-avl.Po
@@ -17212,6 +20289,7 @@
 	-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajit-pool.Po
 	-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajit0.Po
 	-rm -f ./$(DEPDIR)/libmfluajit_a-mfluajitini.Po
+	-rm -f ./$(DEPDIR)/libmfluajitotfcc_a-libmfluajitotfcc.Po
 	-rm -f ./$(DEPDIR)/libmplibbackends_a-pngout.Po
 	-rm -f ./$(DEPDIR)/libmplibbackends_a-svgout.Po
 	-rm -f ./$(DEPDIR)/libmplibcore_a-mp.Po
@@ -17684,6 +20762,125 @@
 	-rm -f mfluadir/$(DEPDIR)/libmfluajit_a-mfluac.Po
 	-rm -f mfluadir/$(DEPDIR)/mflua-mfluaextra.Po
 	-rm -f mfluadir/$(DEPDIR)/mflua_nowin-mfluaextra.Po
+	-rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json-builder.Po
+	-rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-json.Po
+	-rm -f mfluadir/otfcc/dep/extern/$(DEPDIR)/libmfluaotfcc_a-sds.Po
+	-rm -f mfluadir/otfcc/dep/extern/emyg-dtoa/$(DEPDIR)/libmfluaotfcc_a-emyg-dtoa.Po
+	-rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkblock.Po
+	-rm -f mfluadir/otfcc/lib/bk/$(DEPDIR)/libmfluaotfcc_a-bkgraph.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/$(DEPDIR)/libmfluaotfcc_a-consolidate.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-chaining.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-common.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+	-rm -f mfluadir/otfcc/lib/consolidate/otl/$(DEPDIR)/libmfluaotfcc_a-mark.Po
+	-rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-font.Po
+	-rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt-builder.Po
+	-rm -f mfluadir/otfcc/lib/font/$(DEPDIR)/libmfluaotfcc_a-caryll-sfnt.Po
+	-rm -f mfluadir/otfcc/lib/json-reader/$(DEPDIR)/libmfluaotfcc_a-json-reader.Po
+	-rm -f mfluadir/otfcc/lib/json-writer/$(DEPDIR)/libmfluaotfcc_a-json-writer.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-charset.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-codecs.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-dict.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-fdselect.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-index.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-opmean.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-parser.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-string.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-value.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-cff-writer.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-charstring-il.Po
+	-rm -f mfluadir/otfcc/lib/libcff/$(DEPDIR)/libmfluaotfcc_a-subr.Po
+	-rm -f mfluadir/otfcc/lib/logger/$(DEPDIR)/libmfluaotfcc_a-logger.Po
+	-rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-otf-reader.Po
+	-rm -f mfluadir/otfcc/lib/otf-reader/$(DEPDIR)/libmfluaotfcc_a-unconsolidate.Po
+	-rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-otf-writer.Po
+	-rm -f mfluadir/otfcc/lib/otf-writer/$(DEPDIR)/libmfluaotfcc_a-stat.Po
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-glyph-order.Po
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-handle.Po
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-options.Po
+	-rm -f mfluadir/otfcc/lib/support/$(DEPDIR)/libmfluaotfcc_a-primitives.Po
+	-rm -f mfluadir/otfcc/lib/support/aglfn/$(DEPDIR)/libmfluaotfcc_a-aglfn.Po
+	-rm -f mfluadir/otfcc/lib/support/base64/$(DEPDIR)/libmfluaotfcc_a-base64.Po
+	-rm -f mfluadir/otfcc/lib/support/buffer/$(DEPDIR)/libmfluaotfcc_a-buffer.Po
+	-rm -f mfluadir/otfcc/lib/support/json/$(DEPDIR)/libmfluaotfcc_a-json-ident.Po
+	-rm -f mfluadir/otfcc/lib/support/sha1/$(DEPDIR)/libmfluaotfcc_a-sha1.Po
+	-rm -f mfluadir/otfcc/lib/support/ttinstr/$(DEPDIR)/libmfluaotfcc_a-ttinstr.Po
+	-rm -f mfluadir/otfcc/lib/support/unicodeconv/$(DEPDIR)/libmfluaotfcc_a-unicodeconv.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-BASE.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CFF.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-COLR.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-CPAL.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-GDEF.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-LTSH.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-OS_2.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-SVG.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-TSI5.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-VORG.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-_TSI.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cmap.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-cvt.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fpgm-prep.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-fvar.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-gasp.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hdmx.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-head.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hhea.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-hmtx.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-maxp.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-name.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-post.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vhea.Po
+	-rm -f mfluadir/otfcc/lib/table/$(DEPDIR)/libmfluaotfcc_a-vmtx.Po
+	-rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-build.Po
+	-rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-glyf.Po
+	-rm -f mfluadir/otfcc/lib/table/glyf/$(DEPDIR)/libmfluaotfcc_a-read.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-build.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-read.Po
+	-rm -f mfluadir/otfcc/lib/table/meta/$(DEPDIR)/libmfluaotfcc_a-type.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-build.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-classdef.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-constants.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-coverage.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-otl.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/$(DEPDIR)/libmfluaotfcc_a-read.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-extend.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-common.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-cursive.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-ligature.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-mark-to-single.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-pair.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gpos-single.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-ligature.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-multi.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-reverse.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/$(DEPDIR)/libmfluaotfcc_a-gsub-single.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-build.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-classifier.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-common.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-dump.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-parse.Po
+	-rm -f mfluadir/otfcc/lib/table/otl/subtables/chaining/$(DEPDIR)/libmfluaotfcc_a-read.Po
+	-rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-funcs.Po
+	-rm -f mfluadir/otfcc/lib/table/vdmx/$(DEPDIR)/libmfluaotfcc_a-type.Po
+	-rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-axis.Po
+	-rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-region.Po
+	-rm -f mfluadir/otfcc/lib/vf/$(DEPDIR)/libmfluaotfcc_a-vq.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-luafunc.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccbuild.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdll.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-otfccdump.Po
+	-rm -f mfluadir/otfcc/src/$(DEPDIR)/libmfluaotfcc_a-stopwatch.Po
 	-rm -f mfluajitdir/$(DEPDIR)/mfluajit-mfluajitextra.Po
 	-rm -f mfluajitdir/$(DEPDIR)/mfluajit_nowin-mfluajitextra.Po
 	-rm -f mplibdir/$(DEPDIR)/libmputil_a-avl.Po
@@ -18159,6 +21356,16 @@
 mfluatrap-clean:
 	rm -rf mfluatrapdir
 
+#libmfluaotfcc_a_DEPENDENCIES = $(ZLIB_DEPEND)
+#libmfluajitotfcc_a_DEPENDENCIES = $(ZLIB_DEPEND)
+
+$(libmfluaotfcc_a_OBJECTS): $(LUA_DEPEND)
+$(libmfluajitotfcc_a_OBJECTS): $(LUAJIT_DEPEND)
+
+#EXTRA_DIST +=
+
+#EXTRA_DIST += 
+
 .PHONY: install-mfluajit-links uninstall-mfluajit-links
 @WIN32_TRUE at install-mfluajit-links: call_mfluajit$(EXEEXT)
 @MFLUAJITN_FALSE@@WIN32_TRUE@	$(INSTALL_PROGRAM) call_mfluajit$(EXEEXT) $(DESTDIR)$(bindir)/mfluajit-nowin$(EXEEXT)

Modified: trunk/Build/source/texk/web2c/mfluadir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/ChangeLog	2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/ChangeLog	2021-01-10 20:13:26 UTC (rev 57374)
@@ -1,3 +1,8 @@
+2021-01-05 Luigi Scarso <luigi.scarso at gmail.com>
+	
+	* MFLua 1.0.0-alpha: embedding of  otfcc (see https://github.com/caryll/otfcc)
+
+
 2020-02-16 Luigi Scarso <luigi.scarso at gmail.com>
 
 	Small clean up.

Modified: trunk/Build/source/texk/web2c/mfluadir/am/mflua.am
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/am/mflua.am	2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/am/mflua.am	2021-01-10 20:13:26 UTC (rev 57374)
@@ -42,11 +42,11 @@
 
 dist_mflua_SOURCES = mfluadir/mfluaextra.c mfluadir/mfluaextra.h mfluadir/mflua_version.h
 mflua_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) $(LUA_INCLUDES)
-mflua_LDADD = libmflua.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUA_LIBS)
+mflua_LDADD = libmflua.a libmfluaotfcc.a $(LDADD) $(windowlib) $(mf_x_libs) $(LUA_LIBS)
 mflua_LDFLAGS = -export-dynamic
 nodist_mflua_nowin_SOURCES = $(dist_mflua_SOURCES)
 mflua_nowin_CPPFLAGS = $(mflua_CPPFLAGS) -DMFNOWIN $(LUA_INCLUDES)
-mflua_nowin_LDADD = libmflua.a $(LDADD) $(windowlib) $(LUA_LIBS)
+mflua_nowin_LDADD = libmflua.a libmfluaotfcc.a $(LDADD) $(windowlib) $(LUA_LIBS)
 mflua_nowin_LDFLAGS = -export-dynamic
 
 # We must create mfluad.h and mfluadir/mflua_version.h before compiling mfluaextra.c.
@@ -55,7 +55,7 @@
 ## mflua and mflua-nowin compile mfluaextra.c with different CPPFLAGS.
 ## Automake, however, does not support CPPFLAGS for individual source files.
 ## To avoid compiling everything twice, the common objects are in a library.
-EXTRA_LIBRARIES += libmflua.a
+EXTRA_LIBRARIES += libmflua.a libmfluaotfcc.a 
 
 # MFLua C sources
 mflua_c_h = mfluaini.c mflua0.c mfluacoerce.h mfluad.h

Added: trunk/Build/source/texk/web2c/mfluadir/am/mfluaotfcc.am
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/am/mfluaotfcc.am	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/am/mfluaotfcc.am	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,306 @@
+## texk/web2c/luatexdir/am/mfluaotfcc.am: Makefile fragment for libmfluaotfcc.
+##
+## Copyright (C) 2021 Luigi Scarso <tex-live at tug.org>
+## You may freely use, modify and/or distribute this file.
+
+## mfluaotfcc
+##
+EXTRA_LIBRARIES += libmfluaotfcc.a libmfluajitotfcc.a
+
+#libmfluaotfcc_a_DEPENDENCIES = $(ZLIB_DEPEND)
+#libmfluajitotfcc_a_DEPENDENCIES = $(ZLIB_DEPEND)
+
+$(libmfluaotfcc_a_OBJECTS): $(LUA_DEPEND)
+$(libmfluajitotfcc_a_OBJECTS): $(LUAJIT_DEPEND)
+
+libmfluaotfcc_a_CPPFLAGS = \
+	-D_CARYLL_USE_PRE_SERIALIZED -DMAIN_VER=0 -DSECONDARY_VER=10 -DPATCH_VER=4 \
+	-I$(top_srcdir)/mfluadir/otfcc/include \
+	-I$(top_srcdir)/mfluadir/otfcc/include/dep \
+	-I$(top_srcdir)/mfluadir/otfcc/lib \
+	 $(LUA_INCLUDES)
+
+
+libmfluajitotfcc_a_CPPFLAGS = \
+	-D_CARYLL_USE_PRE_SERIALIZED -DMAIN_VER=0 -DSECONDARY_VER=10 -DPATCH_VER=4 \
+	-DJIT \
+	-I$(top_srcdir)/mfluadir/otfcc/include \
+	-I$(top_srcdir)/mfluadir/otfcc/include/dep \
+	-I$(top_srcdir)/mfluadir/otfcc/lib \
+	$(LUAJIT_INCLUDES)
+
+libmfluaotfcc_a_CFLAGS = # $(WARNING_CFLAGS)
+libmfluajitotfcc_a_CFLAGS = # $(WARNING_CFLAGS)
+
+#nodist_libmfluaotfcc_a_SOURCES = $(libmfluaotfcc_sources)
+#nodist_libmfluajitotfcc_a_SOURCES = $(libmfluaotfcc_sources)
+
+libmfluaotfcc_a_SOURCES = \
+	mfluadir/otfcc/dep/extern/sdsalloc.h \
+	mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c \
+	mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h \
+	mfluadir/otfcc/dep/extern/json.c \
+	mfluadir/otfcc/dep/extern/json-builder.c \
+	mfluadir/otfcc/dep/extern/sds.c \
+	mfluadir/otfcc/src/aliases.h \
+	mfluadir/otfcc/src/luafunc.c \
+	mfluadir/otfcc/src/otfccbuild.c \
+	mfluadir/otfcc/src/otfccdump.c \
+	mfluadir/otfcc/src/platform.h \
+	mfluadir/otfcc/src/otfccdll.c \
+	mfluadir/otfcc/src/stopwatch.c \
+	mfluadir/otfcc/src/stopwatch.h \
+	mfluadir/otfcc/include/dep/json.h \
+	mfluadir/otfcc/include/dep/json-builder.h \
+	mfluadir/otfcc/include/dep/sds.h \
+	mfluadir/otfcc/include/dep/uthash.h \
+	mfluadir/otfcc/include/otfcc/options.h \
+	mfluadir/otfcc/include/otfcc/primitives.h \
+	mfluadir/otfcc/include/otfcc/handle.h \
+	mfluadir/otfcc/include/otfcc/vf/vf.h \
+	mfluadir/otfcc/include/otfcc/vf/vv.h \
+	mfluadir/otfcc/include/otfcc/vf/region.h \
+	mfluadir/otfcc/include/otfcc/vf/axis.h \
+	mfluadir/otfcc/include/otfcc/vf/vq.h \
+	mfluadir/otfcc/include/otfcc/sfnt.h \
+	mfluadir/otfcc/include/otfcc/glyph-order.h \
+	mfluadir/otfcc/include/otfcc/sfnt-builder.h \
+	mfluadir/otfcc/include/otfcc/logger.h \
+	mfluadir/otfcc/include/otfcc/font.h \
+	mfluadir/otfcc/include/otfcc/table/fvar.h \
+	mfluadir/otfcc/include/otfcc/table/maxp.h \
+	mfluadir/otfcc/include/otfcc/table/BASE.h \
+	mfluadir/otfcc/include/otfcc/table/post.h \
+	mfluadir/otfcc/include/otfcc/table/vmtx.h \
+	mfluadir/otfcc/include/otfcc/table/glyf.h \
+	mfluadir/otfcc/include/otfcc/table/fpgm-prep.h \
+	mfluadir/otfcc/include/otfcc/table/vhea.h \
+	mfluadir/otfcc/include/otfcc/table/gasp.h \
+	mfluadir/otfcc/include/otfcc/table/name.h \
+	mfluadir/otfcc/include/otfcc/table/hmtx.h \
+	mfluadir/otfcc/include/otfcc/table/OS_2.h \
+	mfluadir/otfcc/include/otfcc/table/CPAL.h \
+	mfluadir/otfcc/include/otfcc/table/GDEF.h \
+	mfluadir/otfcc/include/otfcc/table/TSI5.h \
+	mfluadir/otfcc/include/otfcc/table/hdmx.h \
+	mfluadir/otfcc/include/otfcc/table/table-common.h \
+	mfluadir/otfcc/include/otfcc/table/LTSH.h \
+	mfluadir/otfcc/include/otfcc/table/VORG.h \
+	mfluadir/otfcc/include/otfcc/table/cmap.h \
+	mfluadir/otfcc/include/otfcc/table/_TSI.h \
+	mfluadir/otfcc/include/otfcc/table/COLR.h \
+	mfluadir/otfcc/include/otfcc/table/CFF.h \
+	mfluadir/otfcc/include/otfcc/table/otl/coverage.h \
+	mfluadir/otfcc/include/otfcc/table/otl/classdef.h \
+	mfluadir/otfcc/include/otfcc/table/otl.h \
+	mfluadir/otfcc/include/otfcc/table/cvt.h \
+	mfluadir/otfcc/include/otfcc/table/meta.h \
+	mfluadir/otfcc/include/otfcc/table/SVG.h \
+	mfluadir/otfcc/include/otfcc/table/hhea.h \
+	mfluadir/otfcc/include/otfcc/table/VDMX.h \
+	mfluadir/otfcc/include/otfcc/table/head.h \
+	mfluadir/otfcc/include/caryll/ownership.h \
+	mfluadir/otfcc/include/caryll/element.h \
+	mfluadir/otfcc/include/caryll/buffer.h \
+	mfluadir/otfcc/include/caryll/vector.h \
+	mfluadir/otfcc/lib/consolidate/consolidate.c \
+	mfluadir/otfcc/lib/consolidate/consolidate.h \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-single.h \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-single.c \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-single.c \
+	mfluadir/otfcc/lib/consolidate/otl/chaining.c \
+	mfluadir/otfcc/lib/consolidate/otl/common.c \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-single.h \
+	mfluadir/otfcc/lib/consolidate/otl/chaining.h \
+	mfluadir/otfcc/lib/consolidate/otl/GDEF.h \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h \
+	mfluadir/otfcc/lib/consolidate/otl/mark.h \
+	mfluadir/otfcc/lib/consolidate/otl/common.h \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c \
+	mfluadir/otfcc/lib/consolidate/otl/GDEF.c \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h \
+	mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c \
+	mfluadir/otfcc/lib/consolidate/otl/mark.c \
+	mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h \
+	mfluadir/otfcc/lib/support/options.c \
+	mfluadir/otfcc/lib/support/aliases.h \
+	mfluadir/otfcc/lib/support/tag.h \
+	mfluadir/otfcc/lib/support/bin-io.h \
+	mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c \
+	mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h \
+	mfluadir/otfcc/lib/support/handle.c \
+	mfluadir/otfcc/lib/support/otfcc-alloc.h \
+	mfluadir/otfcc/lib/support/util.h \
+	mfluadir/otfcc/lib/support/element-impl.h \
+	mfluadir/otfcc/lib/support/buffer/buffer.c \
+	mfluadir/otfcc/lib/support/vector-impl.h \
+	mfluadir/otfcc/lib/support/primitives.c \
+	mfluadir/otfcc/lib/support/glyph-order.c \
+	mfluadir/otfcc/lib/support/sha1/sha1.h \
+	mfluadir/otfcc/lib/support/sha1/sha1.c \
+	mfluadir/otfcc/lib/support/ttinstr/ttinstr.c \
+	mfluadir/otfcc/lib/support/ttinstr/ttinstr.h \
+	mfluadir/otfcc/lib/support/base64/base64.h \
+	mfluadir/otfcc/lib/support/base64/base64.c \
+	mfluadir/otfcc/lib/support/json/json-ident.c \
+	mfluadir/otfcc/lib/support/json/json-funcs.h \
+	mfluadir/otfcc/lib/support/json/json-ident.h \
+	mfluadir/otfcc/lib/support/aglfn/aglfn.c \
+	mfluadir/otfcc/lib/support/aglfn/aglfn.h \
+	mfluadir/otfcc/lib/otf-writer/stat.h \
+	mfluadir/otfcc/lib/otf-writer/stat.c \
+	mfluadir/otfcc/lib/otf-writer/otf-writer.c \
+	mfluadir/otfcc/lib/otf-reader/otf-reader.c \
+	mfluadir/otfcc/lib/otf-reader/unconsolidate.c \
+	mfluadir/otfcc/lib/otf-reader/unconsolidate.h \
+	mfluadir/otfcc/lib/vf/axis.c \
+	mfluadir/otfcc/lib/vf/region.c \
+	mfluadir/otfcc/lib/vf/vq.c \
+	mfluadir/otfcc/lib/logger/logger.c \
+	mfluadir/otfcc/lib/bk/bkblock.h \
+	mfluadir/otfcc/lib/bk/bkgraph.h \
+	mfluadir/otfcc/lib/bk/bkgraph.c \
+	mfluadir/otfcc/lib/bk/bkblock.c \
+	mfluadir/otfcc/lib/font/caryll-font.c \
+	mfluadir/otfcc/lib/font/caryll-sfnt-builder.c \
+	mfluadir/otfcc/lib/font/caryll-sfnt.c \
+	mfluadir/otfcc/lib/json-writer/json-writer.c \
+	mfluadir/otfcc/lib/json-reader/json-reader.c \
+	mfluadir/otfcc/lib/libcff/charstring-il.h \
+	mfluadir/otfcc/lib/libcff/cff-index.h \
+	mfluadir/otfcc/lib/libcff/cff-dict.h \
+	mfluadir/otfcc/lib/libcff/cff-value.h \
+	mfluadir/otfcc/lib/libcff/cff-string.c \
+	mfluadir/otfcc/lib/libcff/cff-opmean.c \
+	mfluadir/otfcc/lib/libcff/libcff.h \
+	mfluadir/otfcc/lib/libcff/charstring-il.c \
+	mfluadir/otfcc/lib/libcff/cff-fdselect.c \
+	mfluadir/otfcc/lib/libcff/cff-parser.c \
+	mfluadir/otfcc/lib/libcff/subr.c \
+	mfluadir/otfcc/lib/libcff/cff-charset.c \
+	mfluadir/otfcc/lib/libcff/cff-index.c \
+	mfluadir/otfcc/lib/libcff/cff-codecs.c \
+	mfluadir/otfcc/lib/libcff/cff-charset.h \
+	mfluadir/otfcc/lib/libcff/cff-util.h \
+	mfluadir/otfcc/lib/libcff/cff-writer.c \
+	mfluadir/otfcc/lib/libcff/subr.h \
+	mfluadir/otfcc/lib/libcff/cff-fdselect.h \
+	mfluadir/otfcc/lib/libcff/cff-dict.c \
+	mfluadir/otfcc/lib/libcff/cff-value.c \
+	mfluadir/otfcc/lib/table/vhea.c \
+	mfluadir/otfcc/lib/table/fvar.c \
+	mfluadir/otfcc/lib/table/cmap.c \
+	mfluadir/otfcc/lib/table/meta/read.c \
+	mfluadir/otfcc/lib/table/meta/type.c \
+	mfluadir/otfcc/lib/table/meta/build.c \
+	mfluadir/otfcc/lib/table/meta/parse.c \
+	mfluadir/otfcc/lib/table/meta/dump.c \
+	mfluadir/otfcc/lib/table/vdmx/type.c \
+	mfluadir/otfcc/lib/table/vdmx/funcs.c \
+	mfluadir/otfcc/lib/table/hhea.c \
+	mfluadir/otfcc/lib/table/fvar.h \
+	mfluadir/otfcc/lib/table/maxp.h \
+	mfluadir/otfcc/lib/table/BASE.h \
+	mfluadir/otfcc/lib/table/post.h \
+	mfluadir/otfcc/lib/table/post.c \
+	mfluadir/otfcc/lib/table/cvt.c \
+	mfluadir/otfcc/lib/table/CFF.c \
+	mfluadir/otfcc/lib/table/vmtx.h \
+	mfluadir/otfcc/lib/table/glyf.h \
+	mfluadir/otfcc/lib/table/gasp.c \
+	mfluadir/otfcc/lib/table/LTSH.c \
+	mfluadir/otfcc/lib/table/maxp.c \
+	mfluadir/otfcc/lib/table/fpgm-prep.h \
+	mfluadir/otfcc/lib/table/all.h \
+	mfluadir/otfcc/lib/table/COLR.c \
+	mfluadir/otfcc/lib/table/vmtx.c \
+	mfluadir/otfcc/lib/table/vhea.h \
+	mfluadir/otfcc/lib/table/gasp.h \
+	mfluadir/otfcc/lib/table/fpgm-prep.c \
+	mfluadir/otfcc/lib/table/name.h \
+	mfluadir/otfcc/lib/table/hmtx.h \
+	mfluadir/otfcc/lib/table/head.c \
+	mfluadir/otfcc/lib/table/OS_2.h \
+	mfluadir/otfcc/lib/table/CPAL.c \
+	mfluadir/otfcc/lib/table/CPAL.h \
+	mfluadir/otfcc/lib/table/GDEF.h \
+	mfluadir/otfcc/lib/table/TSI5.h \
+	mfluadir/otfcc/lib/table/hdmx.h \
+	mfluadir/otfcc/lib/table/_TSI.c \
+	mfluadir/otfcc/lib/table/LTSH.h \
+	mfluadir/otfcc/lib/table/VORG.h \
+	mfluadir/otfcc/lib/table/name.c \
+	mfluadir/otfcc/lib/table/cmap.h \
+	mfluadir/otfcc/lib/table/OS_2.c \
+	mfluadir/otfcc/lib/table/hdmx.c \
+	mfluadir/otfcc/lib/table/glyf/read.c \
+	mfluadir/otfcc/lib/table/glyf/glyf.c \
+	mfluadir/otfcc/lib/table/glyf/build.c \
+	mfluadir/otfcc/lib/table/_TSI.h \
+	mfluadir/otfcc/lib/table/GDEF.c \
+	mfluadir/otfcc/lib/table/COLR.h \
+	mfluadir/otfcc/lib/table/VORG.c \
+	mfluadir/otfcc/lib/table/CFF.h \
+	mfluadir/otfcc/lib/table/otl/coverage.c \
+	mfluadir/otfcc/lib/table/otl/read.c \
+	mfluadir/otfcc/lib/table/otl/private.h \
+	mfluadir/otfcc/lib/table/otl/classdef.c \
+	mfluadir/otfcc/lib/table/otl/build.c \
+	mfluadir/otfcc/lib/table/otl/parse.c \
+	mfluadir/otfcc/lib/table/otl/dump.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-single.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-single.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-common.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-single.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.h \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/read.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/common.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/classifier.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/build.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/common.h \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/parse.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining/dump.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-single.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.c \
+	mfluadir/otfcc/lib/table/otl/subtables/chaining.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-reverse.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-common.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-single.h \
+	mfluadir/otfcc/lib/table/otl/subtables/common.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.c \
+	mfluadir/otfcc/lib/table/otl/subtables/extend.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-pair.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-mark-to-ligature.h \
+	mfluadir/otfcc/lib/table/otl/subtables/extend.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-multi.h \
+	mfluadir/otfcc/lib/table/otl/subtables/gpos-cursive.c \
+	mfluadir/otfcc/lib/table/otl/subtables/gsub-ligature.h \
+	mfluadir/otfcc/lib/table/otl/otl.c \
+	mfluadir/otfcc/lib/table/otl/constants.c \
+	mfluadir/otfcc/lib/table/hmtx.c \
+	mfluadir/otfcc/lib/table/otl.h \
+	mfluadir/otfcc/lib/table/cvt.h \
+	mfluadir/otfcc/lib/table/meta.h \
+	mfluadir/otfcc/lib/table/SVG.h \
+	mfluadir/otfcc/lib/table/hhea.h \
+	mfluadir/otfcc/lib/table/BASE.c \
+	mfluadir/otfcc/lib/table/VDMX.h \
+	mfluadir/otfcc/lib/table/SVG.c \
+	mfluadir/otfcc/lib/table/head.h \
+	mfluadir/otfcc/lib/table/TSI5.c 
+
+##
+#EXTRA_DIST +=
+
+## Not used
+##
+#EXTRA_DIST += 

Modified: trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch	2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/mf-lua.ch	2021-01-10 20:13:26 UTC (rev 57374)
@@ -19,7 +19,7 @@
 @y
 @d METAFONT_banner=='This is METAFONT, Version 2.7182818' {printed when \MF\ starts}
 @#
- at d MFLua_version_string=='-0.9.1'
+ at d MFLua_version_string=='-1.0.0-alpha'
 @#
 @d MFLua_banner=='This is MFLua, Version 2.7182818', MFLua_version_string
   {printed when MFLua starts}

Modified: trunk/Build/source/texk/web2c/mfluadir/mflua_version.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mflua_version.h	2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/mflua_version.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -1,2 +1,2 @@
-#define MFLUA_VERSION "0.9.1"
+#define MFLUA_VERSION "1.0.0-alpha"
 #define BANNER "This is MFLua, Version 2.7182818-" MFLUA_VERSION
\ No newline at end of file

Modified: trunk/Build/source/texk/web2c/mfluadir/mfluac.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/mfluac.c	2021-01-10 17:52:29 UTC (rev 57373)
+++ trunk/Build/source/texk/web2c/mfluadir/mfluac.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -1,5 +1,8 @@
+#include <string.h>
+
 #define EXTERN extern
 
+
 #if defined(JIT)
 #include "mfluajitd.h"
 #else
@@ -14,6 +17,14 @@
 #include <luajit.h>
 #endif
 
+
+#if defined(NO_OTFCC)
+/* */
+#else
+extern int otfcc_build(int argc, char *argv[]);
+extern int otfcc_dump(int argc, char *argv[]);
+#endif
+
 /* See  shell_cmd_is_allowed below */
 int shellenabledp = 1;
 int restrictedshell = 0;
@@ -20,7 +31,7 @@
 
 /**************************************************************/
 /*                                                            */
-/* private functions                                          */
+/* MFbuiltin private functions                                */
 /*                                                            */
 /**************************************************************/
 static lua_State *Luas[1];
@@ -472,8 +483,156 @@
 }
 
 
+/**************************************************************/
+/*                                                            */
+/* otfcc private functions                                    */
+/*                                                            */
+/**************************************************************/
 
+#ifdef MFLuaJIT
+static void lua_len (lua_State *L, int i) {
+  switch (lua_type(L, i)) {
+    case LUA_TSTRING:
+      lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
+      break;
+    case LUA_TTABLE:
+      if (!luaL_callmeta(L, i, "__len"))
+        lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
+      break;
+    case LUA_TUSERDATA:
+      if (luaL_callmeta(L, i, "__len"))
+        break;
+      /* FALLTHROUGH */
+    default:
+      luaL_error(L, "attempt to get length of a %s value",
+                 lua_typename(L, lua_type(L, i)));
+  }
+}
 
+static int lua_absindex (lua_State *L, int i) {
+  if (i < 0 && i > LUA_REGISTRYINDEX)
+    i += lua_gettop(L) + 1;
+  return i;
+}
+static int lua_geti (lua_State *L, int index, lua_Integer i) {
+  index = lua_absindex(L, index);
+  lua_pushinteger(L, i);
+  lua_gettable(L, index);
+  return lua_type(L, -1);
+}
+#endif
+
+static int priv_mflua_otf_dump(lua_State *L) {
+    if (!lua_istable(L, -1)) {
+      fprintf(stderr, "! dump: expected a table\n");
+      lua_pop(L,1);
+      return 0;
+    } else {
+     /* table is in the stack at index '-1' */
+     size_t l=0;
+     int j;
+     char **av;
+
+     lua_len (L, -1);
+     l = (size_t)(lua_tonumber(L,-1));
+     lua_pop(L,1);
+     if (l==0 )
+       return 0;
+     av = malloc((l+1) * sizeof(char*));
+     if (av==NULL) { 
+       fprintf(stderr, "! dump: unable to allocate av\n");
+       return 0;
+     }
+     av[0] = malloc((strlen("/dump")+1)*sizeof(char));
+     if (av[0]==NULL) { 
+       fprintf(stderr, "! dump: unable to allocate av[0]\n");
+       return 0;
+     }
+     strcpy(av[0], "/dump");
+     /* fill the av array */
+     for(j=1;j<=l;j++){
+        const char *k;
+        lua_geti(L,-1,j);
+        k = lua_tostring(L, -1);
+        av[j] = malloc((strlen(k)+1)*sizeof(char));
+        if (av[j]==NULL) { 
+         fprintf(stderr, "! dump: unable to allocate av[%d]\n",j);
+         return 0;
+        }
+        strcpy(av[j], k);
+        lua_pop(L,1);
+     }
+#if defined(NO_OTFCC)
+/* */
+#else 
+     otfcc_dump(l+1,av);
+#endif
+     /* release the av */
+     free(av[0]);
+     for(j=1;j<=l;j++)
+         free(av[j]);
+     free(av);
+     return 0;
+   }
+}
+
+
+static int priv_mflua_otf_build(lua_State *L) {
+    if (!lua_istable(L, -1)) {
+      fprintf(stderr, "! build: expected a table\n");
+      lua_pop(L,1);
+      return 0;
+    } else {
+     /* table is in the stack at index '-1' */
+     size_t l=0;
+     int j;
+     char **av;
+
+     lua_len (L, -1);
+     l = (size_t)(lua_tonumber(L,-1)) ;
+     lua_pop(L,1);
+     if (l==0 )
+       return 0;
+     av = malloc((l+1) * sizeof(char*));
+     if (av==NULL) { 
+       fprintf(stderr, "! build: unable to allocate av\n");
+       return 0;
+     }
+     av[0] = malloc((strlen("/build")+1)*sizeof(char));
+     if (av[0]==NULL) { 
+       fprintf(stderr, "! build: unable to allocate av[0]\n");
+       return 0;
+     }
+     strcpy(av[0], "/build");
+     /* fill the av array */
+     for(j=1;j<=l;j++){
+        const char *k;
+        lua_geti(L,-1,j);
+        k = lua_tostring(L, -1);
+        av[j] = malloc((strlen(k)+1)*sizeof(char));
+        if (av[j]==NULL) { 
+         fprintf(stderr, "! build: unable to allocate av[%d]\n",j);
+         return 0;
+        }
+        strcpy(av[j], k);
+        lua_pop(L,1);
+     }
+#if defined(NO_OTFCC)
+/* */
+#else 
+     otfcc_build(l+1,av);
+#endif
+     /* release the av */
+     free(av[0]);
+     for(j=1;j<=l;j++)
+         free(av[j]);
+     free(av);
+     return 0;
+   }
+}
+
+
+
 /**************************************************************/
 /*                                                            */
 /* mflua layer                                                */
@@ -519,7 +678,13 @@
   {NULL, NULL}                /* sentinel */
 };
 
+static struct luaL_Reg mflua_otfcc[] = {
+    { "build", priv_mflua_otf_build },
+    { "dump", priv_mflua_otf_dump },
+    { NULL,        NULL}
+};
 
+
 #define lua_swap(L) lua_insert(L, -2) 
   
 #define GETGLOBALTABLEMFLUA(a)  lua_getglobal(L, "mflua");\
@@ -567,6 +732,17 @@
       luaL_newlib(L,MFbuiltin_l);
 #endif
       lua_settable(L, -3);
+      /* set the otfcc table */
+      lua_pushstring(L,"otf");
+#ifdef MFLuaJIT
+      /* 5.1 */
+      lua_newtable(L);
+      luaL_register (L,NULL,mflua_otfcc);
+#else
+      luaL_newlib(L,mflua_otfcc);
+#endif
+      lua_settable(L, -3);
+      
     }
     lua_pop(L,1);
   }

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,437 @@
+/* emyg_dtoa.c
+** Copyright (C) 2015 Doug Currie
+** based on dtoa_milo.h
+** Copyright (C) 2014 Milo Yip
+**
+** 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.
+*/
+
+/* This code is a mostly mechanical translation of Milo Yip's C++ version of
+** Grisu2 to C.  For algorithm information, see Loitsch, Florian. "Printing
+** floating-point numbers quickly and accurately with integers." ACM Sigplan
+** Notices 45.6 (2010): 233-243.
+*/
+
+#include <assert.h>
+#include <math.h>
+
+#if defined(_MSC_VER)
+#include <intrin.h>
+#endif
+
+#include <stdint.h>
+
+#include <string.h>
+
+#include "emyg-dtoa.h"
+
+#define UINT64_C2(h, l) (((uint64_t)(h) << 32) | (uint64_t)(l))
+
+typedef struct DiyFp_s {
+	uint64_t f;
+	int e;
+} DiyFp;
+
+static const int kDiySignificandSize = 64;
+static const int kDpSignificandSize = 52;
+static const int kDpExponentBias = 0x3FF + 52;
+static const int kDpMinExponent = -0x3FF - 52;
+static const uint64_t kDpExponentMask = UINT64_C2(0x7FF00000, 0x00000000);
+static const uint64_t kDpSignificandMask = UINT64_C2(0x000FFFFF, 0xFFFFFFFF);
+static const uint64_t kDpHiddenBit = UINT64_C2(0x00100000, 0x00000000);
+
+static inline DiyFp DiyFp_from_parts(uint64_t f, int e) {
+	DiyFp fp;
+	fp.f = f;
+	fp.e = e;
+	return fp;
+}
+
+static inline DiyFp DiyFp_from_double(double d) {
+	union {
+		double d;
+		uint64_t u64;
+	} u = {d};
+	DiyFp res;
+
+	int biased_e = (int)((u.u64 & kDpExponentMask) >> kDpSignificandSize);
+	uint64_t significand = (u.u64 & kDpSignificandMask);
+	if (biased_e != 0) {
+		res.f = significand + kDpHiddenBit;
+		res.e = biased_e - kDpExponentBias;
+	} else {
+		res.f = significand;
+		res.e = kDpMinExponent + 1;
+	}
+	return res;
+}
+
+static inline DiyFp DiyFp_subtract(const DiyFp lhs, const DiyFp rhs) {
+	assert(lhs.e == rhs.e);
+	assert(lhs.f >= rhs.f);
+	return DiyFp_from_parts(lhs.f - rhs.f, lhs.e);
+}
+
+static inline DiyFp DiyFp_multiply(const DiyFp lhs, const DiyFp rhs) {
+#if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__clang__)
+	uint64_t h;
+	uint64_t l = _umul128(lhs.f, rhs.f, &h);
+	if (l & ((uint64_t)(1) << 63)) { // rounding
+		h++;
+	}
+	return DiyFp_from_parts(h, lhs.e + rhs.e + 64);
+#elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__x86_64__) && !defined(_MSC_VER)
+	unsigned __int128 p = (unsigned __int128)(lhs.f) * (unsigned __int128)(rhs.f);
+	uint64_t h = p >> 64;
+	uint64_t l = (uint64_t)(p);
+	if (l & ((uint64_t)(1) << 63)) // rounding
+		h++;
+	return DiyFp_from_parts(h, lhs.e + rhs.e + 64);
+#else
+	const uint64_t M32 = 0xFFFFFFFF;
+	const uint64_t a = lhs.f >> 32;
+	const uint64_t b = lhs.f & M32;
+	const uint64_t c = rhs.f >> 32;
+	const uint64_t d = rhs.f & M32;
+	const uint64_t ac = a * c;
+	const uint64_t bc = b * c;
+	const uint64_t ad = a * d;
+	const uint64_t bd = b * d;
+	uint64_t tmp = (bd >> 32) + (ad & M32) + (bc & M32);
+	tmp += 1U << 31; /// mult_round
+	return DiyFp_from_parts(ac + (ad >> 32) + (bc >> 32) + (tmp >> 32), lhs.e + rhs.e + 64);
+#endif
+}
+
+static inline DiyFp Normalize(const DiyFp lhs) {
+#if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__clang__)
+	unsigned long index;
+	_BitScanReverse64(&index, lhs.f);
+	return DiyFp_from_parts(lhs.f << (63 - index), lhs.e - (63 - index));
+#elif defined(__GNUC__) && !defined(_MSC_VER)
+	int s = __builtin_clzll(lhs.f);
+	return DiyFp_from_parts(lhs.f << s, lhs.e - s);
+#else
+	DiyFp res = lhs;
+	while (!(res.f & kDpHiddenBit)) {
+		res.f <<= 1;
+		res.e--;
+	}
+	res.f <<= (kDiySignificandSize - kDpSignificandSize - 1);
+	res.e = res.e - (kDiySignificandSize - kDpSignificandSize - 1);
+	return res;
+#endif
+}
+
+static inline DiyFp NormalizeBoundary(const DiyFp lhs) {
+#if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__clang__)
+	unsigned long index;
+	_BitScanReverse64(&index, lhs.f);
+	return DiyFp_from_parts(lhs.f << (63 - index), lhs.e - (63 - index));
+#else
+	DiyFp res = lhs;
+	while (!(res.f & (kDpHiddenBit << 1))) {
+		res.f <<= 1;
+		res.e--;
+	}
+	res.f <<= (kDiySignificandSize - kDpSignificandSize - 2);
+	res.e = res.e - (kDiySignificandSize - kDpSignificandSize - 2);
+	return res;
+#endif
+}
+
+static inline void NormalizedBoundaries(DiyFp lhs, DiyFp *minus, DiyFp *plus) {
+	DiyFp pl = NormalizeBoundary(DiyFp_from_parts((lhs.f << 1) + 1, lhs.e - 1));
+	DiyFp mi = (lhs.f == kDpHiddenBit) ? DiyFp_from_parts((lhs.f << 2) - 1, lhs.e - 2)
+	                                   : DiyFp_from_parts((lhs.f << 1) - 1, lhs.e - 1);
+	mi.f <<= mi.e - pl.e;
+	mi.e = pl.e;
+	*plus = pl;
+	*minus = mi;
+}
+
+static inline DiyFp GetCachedPower(int e, int *K) {
+	// 10^-348, 10^-340, ..., 10^340
+	static const uint64_t kCachedPowers_F[] = {
+	    UINT64_C2(0xfa8fd5a0, 0x081c0288), UINT64_C2(0xbaaee17f, 0xa23ebf76), UINT64_C2(0x8b16fb20, 0x3055ac76),
+	    UINT64_C2(0xcf42894a, 0x5dce35ea), UINT64_C2(0x9a6bb0aa, 0x55653b2d), UINT64_C2(0xe61acf03, 0x3d1a45df),
+	    UINT64_C2(0xab70fe17, 0xc79ac6ca), UINT64_C2(0xff77b1fc, 0xbebcdc4f), UINT64_C2(0xbe5691ef, 0x416bd60c),
+	    UINT64_C2(0x8dd01fad, 0x907ffc3c), UINT64_C2(0xd3515c28, 0x31559a83), UINT64_C2(0x9d71ac8f, 0xada6c9b5),
+	    UINT64_C2(0xea9c2277, 0x23ee8bcb), UINT64_C2(0xaecc4991, 0x4078536d), UINT64_C2(0x823c1279, 0x5db6ce57),
+	    UINT64_C2(0xc2109436, 0x4dfb5637), UINT64_C2(0x9096ea6f, 0x3848984f), UINT64_C2(0xd77485cb, 0x25823ac7),
+	    UINT64_C2(0xa086cfcd, 0x97bf97f4), UINT64_C2(0xef340a98, 0x172aace5), UINT64_C2(0xb23867fb, 0x2a35b28e),
+	    UINT64_C2(0x84c8d4df, 0xd2c63f3b), UINT64_C2(0xc5dd4427, 0x1ad3cdba), UINT64_C2(0x936b9fce, 0xbb25c996),
+	    UINT64_C2(0xdbac6c24, 0x7d62a584), UINT64_C2(0xa3ab6658, 0x0d5fdaf6), UINT64_C2(0xf3e2f893, 0xdec3f126),
+	    UINT64_C2(0xb5b5ada8, 0xaaff80b8), UINT64_C2(0x87625f05, 0x6c7c4a8b), UINT64_C2(0xc9bcff60, 0x34c13053),
+	    UINT64_C2(0x964e858c, 0x91ba2655), UINT64_C2(0xdff97724, 0x70297ebd), UINT64_C2(0xa6dfbd9f, 0xb8e5b88f),
+	    UINT64_C2(0xf8a95fcf, 0x88747d94), UINT64_C2(0xb9447093, 0x8fa89bcf), UINT64_C2(0x8a08f0f8, 0xbf0f156b),
+	    UINT64_C2(0xcdb02555, 0x653131b6), UINT64_C2(0x993fe2c6, 0xd07b7fac), UINT64_C2(0xe45c10c4, 0x2a2b3b06),
+	    UINT64_C2(0xaa242499, 0x697392d3), UINT64_C2(0xfd87b5f2, 0x8300ca0e), UINT64_C2(0xbce50864, 0x92111aeb),
+	    UINT64_C2(0x8cbccc09, 0x6f5088cc), UINT64_C2(0xd1b71758, 0xe219652c), UINT64_C2(0x9c400000, 0x00000000),
+	    UINT64_C2(0xe8d4a510, 0x00000000), UINT64_C2(0xad78ebc5, 0xac620000), UINT64_C2(0x813f3978, 0xf8940984),
+	    UINT64_C2(0xc097ce7b, 0xc90715b3), UINT64_C2(0x8f7e32ce, 0x7bea5c70), UINT64_C2(0xd5d238a4, 0xabe98068),
+	    UINT64_C2(0x9f4f2726, 0x179a2245), UINT64_C2(0xed63a231, 0xd4c4fb27), UINT64_C2(0xb0de6538, 0x8cc8ada8),
+	    UINT64_C2(0x83c7088e, 0x1aab65db), UINT64_C2(0xc45d1df9, 0x42711d9a), UINT64_C2(0x924d692c, 0xa61be758),
+	    UINT64_C2(0xda01ee64, 0x1a708dea), UINT64_C2(0xa26da399, 0x9aef774a), UINT64_C2(0xf209787b, 0xb47d6b85),
+	    UINT64_C2(0xb454e4a1, 0x79dd1877), UINT64_C2(0x865b8692, 0x5b9bc5c2), UINT64_C2(0xc83553c5, 0xc8965d3d),
+	    UINT64_C2(0x952ab45c, 0xfa97a0b3), UINT64_C2(0xde469fbd, 0x99a05fe3), UINT64_C2(0xa59bc234, 0xdb398c25),
+	    UINT64_C2(0xf6c69a72, 0xa3989f5c), UINT64_C2(0xb7dcbf53, 0x54e9bece), UINT64_C2(0x88fcf317, 0xf22241e2),
+	    UINT64_C2(0xcc20ce9b, 0xd35c78a5), UINT64_C2(0x98165af3, 0x7b2153df), UINT64_C2(0xe2a0b5dc, 0x971f303a),
+	    UINT64_C2(0xa8d9d153, 0x5ce3b396), UINT64_C2(0xfb9b7cd9, 0xa4a7443c), UINT64_C2(0xbb764c4c, 0xa7a44410),
+	    UINT64_C2(0x8bab8eef, 0xb6409c1a), UINT64_C2(0xd01fef10, 0xa657842c), UINT64_C2(0x9b10a4e5, 0xe9913129),
+	    UINT64_C2(0xe7109bfb, 0xa19c0c9d), UINT64_C2(0xac2820d9, 0x623bf429), UINT64_C2(0x80444b5e, 0x7aa7cf85),
+	    UINT64_C2(0xbf21e440, 0x03acdd2d), UINT64_C2(0x8e679c2f, 0x5e44ff8f), UINT64_C2(0xd433179d, 0x9c8cb841),
+	    UINT64_C2(0x9e19db92, 0xb4e31ba9), UINT64_C2(0xeb96bf6e, 0xbadf77d9), UINT64_C2(0xaf87023b, 0x9bf0ee6b)};
+	static const int16_t kCachedPowers_E[] = {
+	    -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954, -927, -901, -874, -847,
+	    -821,  -794,  -768,  -741,  -715,  -688,  -661,  -635,  -608,  -582, -555, -529, -502, -475, -449,
+	    -422,  -396,  -369,  -343,  -316,  -289,  -263,  -236,  -210,  -183, -157, -130, -103, -77,  -50,
+	    -24,   3,     30,    56,    83,    109,   136,   162,   189,   216,  242,  269,  295,  322,  348,
+	    375,   402,   428,   455,   481,   508,   534,   561,   588,   614,  641,  667,  694,  720,  747,
+	    774,   800,   827,   853,   880,   907,   933,   960,   986,   1013, 1039, 1066};
+
+	// int k = (int )(ceil((-61 - e) * 0.30102999566398114)) + 374;
+	double dk = (-61 - e) * 0.30102999566398114 + 347; // dk must be positive, so can do ceiling in positive
+	int k = (int)(dk);
+	if (k != dk) k++;
+
+	unsigned index = (unsigned)((k >> 3) + 1);
+	*K = -(-348 + (int)(index << 3)); // decimal exponent no need lookup table
+
+	assert(index < sizeof(kCachedPowers_F) / sizeof(kCachedPowers_F[0]));
+	return DiyFp_from_parts(kCachedPowers_F[index], kCachedPowers_E[index]);
+}
+
+static inline void GrisuRound(char *buffer, int len, uint64_t delta, uint64_t rest, uint64_t ten_kappa, uint64_t wp_w) {
+	while (rest < wp_w && delta - rest >= ten_kappa && (rest + ten_kappa < wp_w || /// closer
+	                                                    wp_w - rest > rest + ten_kappa - wp_w)) {
+		buffer[len - 1]--;
+		rest += ten_kappa;
+	}
+}
+
+static inline unsigned CountDecimalDigit32(uint32_t n) {
+	// Simple pure C++ implementation was faster than __builtin_clz version in this situation.
+	if (n < 10) return 1;
+	if (n < 100) return 2;
+	if (n < 1000) return 3;
+	if (n < 10000) return 4;
+	if (n < 100000) return 5;
+	if (n < 1000000) return 6;
+	if (n < 10000000) return 7;
+	if (n < 100000000) return 8;
+	if (n < 1000000000) return 9;
+	return 10;
+}
+
+static inline void DigitGen(const DiyFp W, const DiyFp Mp, uint64_t delta, char *buffer, int *len, int *K) {
+	static const uint32_t kPow10[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
+	const DiyFp one = DiyFp_from_parts((uint64_t)(1) << -Mp.e, Mp.e);
+	const DiyFp wp_w = DiyFp_subtract(Mp, W);
+	uint32_t p1 = (uint32_t)(Mp.f >> -one.e);
+	uint64_t p2 = Mp.f & (one.f - 1);
+	int kappa = (int)(CountDecimalDigit32(p1));
+	*len = 0;
+
+	while (kappa > 0) {
+		uint32_t d = 0;
+		switch (kappa) {
+			case 10:
+				d = p1 / 1000000000;
+				p1 %= 1000000000;
+				break;
+			case 9:
+				d = p1 / 100000000;
+				p1 %= 100000000;
+				break;
+			case 8:
+				d = p1 / 10000000;
+				p1 %= 10000000;
+				break;
+			case 7:
+				d = p1 / 1000000;
+				p1 %= 1000000;
+				break;
+			case 6:
+				d = p1 / 100000;
+				p1 %= 100000;
+				break;
+			case 5:
+				d = p1 / 10000;
+				p1 %= 10000;
+				break;
+			case 4:
+				d = p1 / 1000;
+				p1 %= 1000;
+				break;
+			case 3:
+				d = p1 / 100;
+				p1 %= 100;
+				break;
+			case 2:
+				d = p1 / 10;
+				p1 %= 10;
+				break;
+			case 1:
+				d = p1;
+				p1 = 0;
+				break;
+			default:
+#if defined(_MSC_VER)
+				__assume(0);
+#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+				__builtin_unreachable();
+#else
+				d = 0;
+#endif
+		}
+		if (d || *len) buffer[(*len)++] = '0' + (char)(d);
+		kappa--;
+		uint64_t tmp = ((uint64_t)(p1) << -one.e) + p2;
+		if (tmp <= delta) {
+			*K += kappa;
+			GrisuRound(buffer, *len, delta, tmp, (uint64_t)(kPow10[kappa]) << -one.e, wp_w.f);
+			return;
+		}
+	}
+
+	// kappa = 0
+	for (;;) {
+		p2 *= 10;
+		delta *= 10;
+		char d = (char)(p2 >> -one.e);
+		if (d || *len) buffer[(*len)++] = '0' + d;
+		p2 &= one.f - 1;
+		kappa--;
+		if (p2 < delta) {
+			*K += kappa;
+			GrisuRound(buffer, *len, delta, p2, one.f, wp_w.f * kPow10[-kappa]);
+			return;
+		}
+	}
+}
+
+static inline void Grisu2(double value, char *buffer, int *length, int *K) {
+	const DiyFp v = DiyFp_from_double(value);
+	DiyFp w_m, w_p;
+	NormalizedBoundaries(v, &w_m, &w_p);
+
+	const DiyFp c_mk = GetCachedPower(w_p.e, K);
+	const DiyFp W = DiyFp_multiply(Normalize(v), c_mk);
+	DiyFp Wp = DiyFp_multiply(w_p, c_mk);
+	DiyFp Wm = DiyFp_multiply(w_m, c_mk);
+	Wm.f++;
+	Wp.f--;
+	DigitGen(W, Wp, Wp.f - Wm.f, buffer, length, K);
+}
+
+static inline const char *GetDigitsLut() {
+	static const char cDigitsLut[200] = {
+	    '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9',
+	    '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9',
+	    '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9',
+	    '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9',
+	    '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9',
+	    '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9',
+	    '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
+	    '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9',
+	    '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',
+	    '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'};
+	return cDigitsLut;
+}
+
+static inline void WriteExponent(int K, char *buffer) {
+	if (K < 0) {
+		*buffer++ = '-';
+		K = -K;
+	}
+
+	if (K >= 100) {
+		*buffer++ = '0' + (char)(K / 100);
+		K %= 100;
+		const char *d = GetDigitsLut() + K * 2;
+		*buffer++ = d[0];
+		*buffer++ = d[1];
+	} else if (K >= 10) {
+		const char *d = GetDigitsLut() + K * 2;
+		*buffer++ = d[0];
+		*buffer++ = d[1];
+	} else
+		*buffer++ = '0' + (char)(K);
+
+	*buffer = '\0';
+}
+
+static inline void Prettify(char *buffer, int length, int k) {
+	const int kk = length + k; // 10^(kk-1) <= v < 10^kk
+
+	if (length <= kk && kk <= 21) {
+		// 1234e7 -> 12340000000
+		for (int i = length; i < kk; i++)
+			buffer[i] = '0';
+		buffer[kk] = '.';
+		buffer[kk + 1] = '0';
+		buffer[kk + 2] = '\0';
+	} else if (0 < kk && kk <= 21) {
+		// 1234e-2 -> 12.34
+		memmove(&buffer[kk + 1], &buffer[kk], length - kk);
+		buffer[kk] = '.';
+		buffer[length + 1] = '\0';
+	} else if (-6 < kk && kk <= 0) {
+		// 1234e-6 -> 0.001234
+		const int offset = 2 - kk;
+		memmove(&buffer[offset], &buffer[0], length);
+		buffer[0] = '0';
+		buffer[1] = '.';
+		for (int i = 2; i < offset; i++)
+			buffer[i] = '0';
+		buffer[length + offset] = '\0';
+	} else if (length == 1) {
+		// 1e30
+		buffer[1] = 'e';
+		WriteExponent(kk - 1, &buffer[2]);
+	} else {
+		// 1234e30 -> 1.234e33
+		memmove(&buffer[2], &buffer[1], length - 1);
+		buffer[1] = '.';
+		buffer[length + 1] = 'e';
+		WriteExponent(kk - 1, &buffer[0 + length + 2]);
+	}
+}
+
+void emyg_dtoa(double value, char *buffer) {
+	// Not handling NaN and inf
+	assert(!isnan(value));
+	assert(!isinf(value));
+
+	if (value == 0) {
+		buffer[0] = '0';
+		buffer[1] = '.';
+		buffer[2] = '0';
+		buffer[3] = '\0';
+	} else {
+		if (value < 0) {
+			*buffer++ = '-';
+			value = -value;
+		}
+		int length, K;
+		Grisu2(value, buffer, &length, &K);
+		Prettify(buffer, length, K);
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/emyg-dtoa/emyg-dtoa.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,6 @@
+#ifndef CARYLL_DEP_EMYG_DTOA_H
+#define CARYLL_DEP_EMYG_DTOA_H
+
+void emyg_dtoa(double value, char *buffer);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json-builder.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json-builder.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json-builder.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,889 @@
+
+/* vim: set et ts=3 sw=3 sts=3 ft=c:
+ *
+ * Copyright (C) 2014 James McLaughlin.  All rights reserved.
+ * https://github.com/udp/json-builder
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "json-builder.h"
+#include "emyg-dtoa/emyg-dtoa.h"
+
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+#include <math.h>
+
+#ifdef _MSC_VER
+#define snprintf _snprintf
+#endif
+
+const static json_serialize_opts default_opts = {
+    json_serialize_mode_single_line, 0, 3 /* indent_size */
+};
+
+typedef struct json_builder_value {
+	json_value value;
+
+	int is_builder_value;
+
+	size_t additional_length_allocated;
+	size_t length_iterated;
+
+} json_builder_value;
+
+static int builderize(json_value *value) {
+	if (((json_builder_value *)value)->is_builder_value) return 1;
+
+	if (value->type == json_object) {
+		unsigned int i;
+
+		/* Values straight out of the parser have the names of object entries
+		 * allocated in the same allocation as the values array itself.  This is
+		 * not desirable when manipulating values because the names would be easy
+		 * to clobber.
+		 */
+		for (i = 0; i < value->u.object.length; ++i) {
+			json_char *name_copy;
+			json_object_entry *entry = &value->u.object.values[i];
+
+			if (!(name_copy = (json_char *)malloc((entry->name_length + 1) * sizeof(json_char)))) return 0;
+
+			memcpy(name_copy, entry->name, entry->name_length + 1);
+			entry->name = name_copy;
+		}
+	}
+
+	((json_builder_value *)value)->is_builder_value = 1;
+
+	return 1;
+}
+
+const size_t json_builder_extra = sizeof(json_builder_value) - sizeof(json_value);
+
+/* These flags are set up from the opts before serializing to make the
+ * serializer conditions simpler.
+ */
+const int f_spaces_around_brackets = (1 << 0);
+const int f_spaces_after_commas = (1 << 1);
+const int f_spaces_after_colons = (1 << 2);
+const int f_tabs = (1 << 3);
+
+static int get_serialize_flags(json_serialize_opts opts) {
+	int flags = 0;
+
+	if (opts.mode == json_serialize_mode_packed) return 0;
+
+	if (opts.mode == json_serialize_mode_multiline) {
+		if (opts.opts & json_serialize_opt_use_tabs) flags |= f_tabs;
+	} else {
+		if (!(opts.opts & json_serialize_opt_pack_brackets)) flags |= f_spaces_around_brackets;
+
+		if (!(opts.opts & json_serialize_opt_no_space_after_comma)) flags |= f_spaces_after_commas;
+	}
+
+	if (!(opts.opts & json_serialize_opt_no_space_after_colon)) flags |= f_spaces_after_colons;
+
+	return flags;
+}
+
+json_value *json_array_new(size_t length) {
+	json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+	if (!value) return NULL;
+
+	((json_builder_value *)value)->is_builder_value = 1;
+
+	value->type = json_array;
+
+	if (!(value->u.array.values = (json_value **)malloc(length * sizeof(json_value *)))) {
+		free(value);
+		return NULL;
+	}
+
+	((json_builder_value *)value)->additional_length_allocated = length;
+
+	return value;
+}
+
+json_value *json_array_push(json_value *array, json_value *value) {
+	assert(array->type == json_array);
+
+	if (!builderize(array) || !builderize(value)) return NULL;
+
+	if (((json_builder_value *)array)->additional_length_allocated > 0) {
+		--((json_builder_value *)array)->additional_length_allocated;
+	} else {
+		json_value **values_new =
+		    (json_value **)realloc(array->u.array.values, sizeof(json_value *) * (array->u.array.length + 1));
+
+		if (!values_new) return NULL;
+
+		array->u.array.values = values_new;
+	}
+
+	array->u.array.values[array->u.array.length] = value;
+	++array->u.array.length;
+
+	value->parent = array;
+
+	return value;
+}
+
+json_value *json_object_new(size_t length) {
+	json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+	if (!value) return NULL;
+
+	((json_builder_value *)value)->is_builder_value = 1;
+
+	value->type = json_object;
+
+	if (!(value->u.object.values = (json_object_entry *)calloc(length, sizeof(*value->u.object.values)))) {
+		free(value);
+		return NULL;
+	}
+
+	((json_builder_value *)value)->additional_length_allocated = length;
+
+	return value;
+}
+
+json_value *json_object_push(json_value *object, const json_char *name, json_value *value) {
+	return json_object_push_length(object, strlen(name), name, value);
+}
+
+json_value *json_object_push_length(json_value *object, unsigned int name_length, const json_char *name,
+                                    json_value *value) {
+	json_char *name_copy;
+
+	assert(object->type == json_object);
+
+	if (!(name_copy = (json_char *)malloc((name_length + 1) * sizeof(json_char)))) return NULL;
+
+	memcpy(name_copy, name, name_length * sizeof(json_char));
+	name_copy[name_length] = 0;
+
+	if (!json_object_push_nocopy(object, name_length, name_copy, value)) {
+		free(name_copy);
+		return NULL;
+	}
+
+	return value;
+}
+
+json_value *json_object_push_nocopy(json_value *object, unsigned int name_length, json_char *name, json_value *value) {
+	json_object_entry *entry;
+
+	assert(object->type == json_object);
+
+	if (!builderize(object) || !builderize(value)) return NULL;
+
+	if (((json_builder_value *)object)->additional_length_allocated > 0) {
+		--((json_builder_value *)object)->additional_length_allocated;
+	} else {
+		json_object_entry *values_new = (json_object_entry *)realloc(
+		    object->u.object.values, sizeof(*object->u.object.values) * (object->u.object.length + 1));
+
+		if (!values_new) return NULL;
+
+		object->u.object.values = values_new;
+	}
+
+	entry = object->u.object.values + object->u.object.length;
+
+	entry->name_length = name_length;
+	entry->name = name;
+	entry->value = value;
+
+	++object->u.object.length;
+
+	value->parent = object;
+
+	return value;
+}
+
+json_value *json_string_new(const json_char *buf) {
+	return json_string_new_length(strlen(buf), buf);
+}
+
+json_value *json_string_new_length(unsigned int length, const json_char *buf) {
+	json_value *value;
+	json_char *copy = (json_char *)malloc((length + 1) * sizeof(json_char));
+
+	if (!copy) return NULL;
+
+	memcpy(copy, buf, length * sizeof(json_char));
+	copy[length] = 0;
+
+	if (!(value = json_string_new_nocopy(length, copy))) {
+		free(copy);
+		return NULL;
+	}
+
+	return value;
+}
+
+json_value *json_string_new_nocopy(unsigned int length, json_char *buf) {
+	json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+	if (!value) return NULL;
+
+	((json_builder_value *)value)->is_builder_value = 1;
+
+	value->type = json_string;
+	value->u.string.length = length;
+	value->u.string.ptr = buf;
+
+	return value;
+}
+
+json_value *json_integer_new(json_int_t integer) {
+	json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+	if (!value) return NULL;
+
+	((json_builder_value *)value)->is_builder_value = 1;
+
+	value->type = json_integer;
+	value->u.integer = integer;
+
+	return value;
+}
+
+json_value *json_double_new(double dbl) {
+	json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+	if (!value) return NULL;
+
+	((json_builder_value *)value)->is_builder_value = 1;
+
+	value->type = json_double;
+	value->u.dbl = dbl;
+
+	return value;
+}
+
+json_value *json_boolean_new(int b) {
+	json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+	if (!value) return NULL;
+
+	((json_builder_value *)value)->is_builder_value = 1;
+
+	value->type = json_boolean;
+	value->u.boolean = b;
+
+	return value;
+}
+
+json_value *json_null_new(void) {
+	json_value *value = (json_value *)calloc(1, sizeof(json_builder_value));
+
+	if (!value) return NULL;
+
+	((json_builder_value *)value)->is_builder_value = 1;
+
+	value->type = json_null;
+
+	return value;
+}
+
+void json_object_sort(json_value *object, json_value *proto) {
+	unsigned int i, out_index = 0;
+
+	if (!builderize(object)) return; /* TODO error */
+
+	assert(object->type == json_object);
+	assert(proto->type == json_object);
+
+	for (i = 0; i < proto->u.object.length; ++i) {
+		unsigned int j;
+		json_object_entry proto_entry = proto->u.object.values[i];
+
+		for (j = 0; j < object->u.object.length; ++j) {
+			json_object_entry entry = object->u.object.values[j];
+
+			if (entry.name_length != proto_entry.name_length) continue;
+
+			if (memcmp(entry.name, proto_entry.name, entry.name_length) != 0) continue;
+
+			object->u.object.values[j] = object->u.object.values[out_index];
+			object->u.object.values[out_index] = entry;
+
+			++out_index;
+		}
+	}
+}
+
+json_value *json_object_merge(json_value *objectA, json_value *objectB) {
+	unsigned int i;
+
+	assert(objectA->type == json_object);
+	assert(objectB->type == json_object);
+	assert(objectA != objectB);
+
+	if (!builderize(objectA) || !builderize(objectB)) return NULL;
+
+	if (objectB->u.object.length <= ((json_builder_value *)objectA)->additional_length_allocated) {
+		((json_builder_value *)objectA)->additional_length_allocated -= objectB->u.object.length;
+	} else {
+		json_object_entry *values_new;
+
+		unsigned int alloc = objectA->u.object.length + ((json_builder_value *)objectA)->additional_length_allocated +
+		                     objectB->u.object.length;
+
+		if (!(values_new = (json_object_entry *)realloc(objectA->u.object.values, sizeof(json_object_entry) * alloc))) {
+			return NULL;
+		}
+
+		objectA->u.object.values = values_new;
+	}
+
+	for (i = 0; i < objectB->u.object.length; ++i) {
+		json_object_entry *entry = &objectA->u.object.values[objectA->u.object.length + i];
+
+		*entry = objectB->u.object.values[i];
+		entry->value->parent = objectA;
+	}
+
+	objectA->u.object.length += objectB->u.object.length;
+
+	free(objectB->u.object.values);
+	free(objectB);
+
+	return objectA;
+}
+
+static size_t measure_string(unsigned int length, const json_char *str) {
+	unsigned int i;
+	size_t measured_length = 0;
+
+	for (i = 0; i < length; ++i) {
+		json_char c = str[i];
+
+		switch (c) {
+			case 0:
+			case 0xb:
+				measured_length += 6;
+				break;
+			case '"':
+			case '\\':
+			case '\b':
+			case '\f':
+			case '\n':
+			case '\r':
+			case '\t':
+
+				measured_length += 2;
+				break;
+
+			default:
+
+				++measured_length;
+				break;
+		};
+	};
+
+	return measured_length;
+}
+
+#define PRINT_ESCAPED(c)                                                                                               \
+	do {                                                                                                               \
+		*buf++ = '\\';                                                                                                 \
+		*buf++ = (c);                                                                                                  \
+	} while (0);
+
+static size_t serialize_string(json_char *buf, unsigned int length, const json_char *str) {
+	json_char *orig_buf = buf;
+	unsigned int i;
+
+	for (i = 0; i < length; ++i) {
+		json_char c = str[i];
+
+		switch (c) {
+			case 0:
+				*buf++ = '\\';
+				*buf++ = 'u';
+				*buf++ = '0';
+				*buf++ = '0';
+				*buf++ = '0';
+				*buf++ = '0';
+				continue;
+			case '"':
+				PRINT_ESCAPED('\"');
+				continue;
+			case '\\':
+				PRINT_ESCAPED('\\');
+				continue;
+			case '\b':
+				PRINT_ESCAPED('b');
+				continue;
+			case '\f':
+				PRINT_ESCAPED('f');
+				continue;
+			case '\n':
+				PRINT_ESCAPED('n');
+				continue;
+			case '\r':
+				PRINT_ESCAPED('r');
+				continue;
+			case '\t':
+				PRINT_ESCAPED('t');
+				continue;
+			case 0xb:
+				*buf++ = '\\';
+				*buf++ = 'u';
+				*buf++ = '0';
+				*buf++ = '0';
+				*buf++ = '0';
+				*buf++ = 'b';
+				continue;
+
+			default:
+
+				*buf++ = c;
+				break;
+		};
+	};
+
+	return buf - orig_buf;
+}
+
+size_t json_measure(json_value *value) {
+	return json_measure_ex(value, default_opts);
+}
+
+#define MEASURE_NEWLINE()                                                                                              \
+	do {                                                                                                               \
+		++newlines;                                                                                                    \
+		indents += depth;                                                                                              \
+	} while (0);
+
+size_t json_measure_ex(json_value *value, json_serialize_opts opts) {
+	size_t total = 1; /* null terminator */
+	size_t newlines = 0;
+	size_t depth = 0;
+	size_t indents = 0;
+	int flags;
+	int bracket_size, comma_size, colon_size;
+
+	flags = get_serialize_flags(opts);
+
+	/* to reduce branching
+	 */
+	bracket_size = flags & f_spaces_around_brackets ? 2 : 1;
+	comma_size = flags & f_spaces_after_commas ? 2 : 1;
+	colon_size = flags & f_spaces_after_colons ? 2 : 1;
+
+	while (value) {
+		json_int_t integer;
+		json_object_entry *entry;
+
+		switch (value->type) {
+			case json_array:
+
+				if (((json_builder_value *)value)->length_iterated == 0) {
+					if (value->u.array.length == 0) {
+						total += 2; /* `[]` */
+						break;
+					}
+
+					total += bracket_size; /* `[` */
+
+					++depth;
+					MEASURE_NEWLINE(); /* \n after [ */
+				}
+
+				if (((json_builder_value *)value)->length_iterated == value->u.array.length) {
+					--depth;
+					MEASURE_NEWLINE();
+					total += bracket_size; /* `]` */
+
+					((json_builder_value *)value)->length_iterated = 0;
+					break;
+				}
+
+				if (((json_builder_value *)value)->length_iterated > 0) {
+					total += comma_size; /* `, ` */
+
+					MEASURE_NEWLINE();
+				}
+
+				((json_builder_value *)value)->length_iterated++;
+				value = value->u.array.values[((json_builder_value *)value)->length_iterated - 1];
+				continue;
+
+			case json_object:
+
+				if (((json_builder_value *)value)->length_iterated == 0) {
+					if (value->u.object.length == 0) {
+						total += 2; /* `{}` */
+						break;
+					}
+
+					total += bracket_size; /* `{` */
+
+					++depth;
+					MEASURE_NEWLINE(); /* \n after { */
+				}
+
+				if (((json_builder_value *)value)->length_iterated == value->u.object.length) {
+					--depth;
+					MEASURE_NEWLINE();
+					total += bracket_size; /* `}` */
+
+					((json_builder_value *)value)->length_iterated = 0;
+					break;
+				}
+
+				if (((json_builder_value *)value)->length_iterated > 0) {
+					total += comma_size; /* `, ` */
+					MEASURE_NEWLINE();
+				}
+
+				entry = value->u.object.values + (((json_builder_value *)value)->length_iterated++);
+
+				total += 2 + colon_size; /* `"": ` */
+				total += measure_string(entry->name_length, entry->name);
+
+				value = entry->value;
+				continue;
+#ifdef CARYLL_USE_PRE_SERIALIZED
+			case json_pre_serialized:
+
+				total += value->u.string.length;
+				break;
+#endif
+			case json_string:
+				total += 2; /* `""` */
+				total += measure_string(value->u.string.length, value->u.string.ptr);
+				break;
+
+			case json_integer:
+
+				integer = value->u.integer;
+
+				if (integer < 0) {
+					total += 1; /* `-` */
+					integer = -integer;
+				}
+
+				++total; /* first digit */
+
+				while (integer >= 10) {
+					++total; /* another digit */
+					integer /= 10;
+				}
+
+				break;
+
+			case json_double: {
+				char buffer[256];
+				emyg_dtoa(value->u.dbl, buffer);
+				total += strlen(buffer);
+				break;
+			}
+
+			case json_boolean:
+
+				total += value->u.boolean ? 4 : /* `true` */
+				             5;                 /* `false` */
+
+				break;
+
+			case json_null:
+
+				total += 4; /* `null` */
+				break;
+
+			default:
+				break;
+		};
+
+		value = value->parent;
+	}
+
+	if (opts.mode == json_serialize_mode_multiline) {
+		total += newlines * (((opts.opts & json_serialize_opt_CRLF) ? 2 : 1) + opts.indent_size);
+		total += indents * opts.indent_size;
+	}
+
+	return total;
+}
+
+void json_serialize(json_char *buf, json_value *value) {
+	json_serialize_ex(buf, value, default_opts);
+}
+
+#define PRINT_NEWLINE()                                                                                                \
+	do {                                                                                                               \
+		if (opts.mode == json_serialize_mode_multiline) {                                                              \
+			if (opts.opts & json_serialize_opt_CRLF) *buf++ = '\r';                                                    \
+			*buf++ = '\n';                                                                                             \
+			for (i = 0; i < indent; ++i)                                                                               \
+				*buf++ = indent_char;                                                                                  \
+		}                                                                                                              \
+	} while (0);
+
+#define PRINT_OPENING_BRACKET(c)                                                                                       \
+	do {                                                                                                               \
+		*buf++ = (c);                                                                                                  \
+		if (flags & f_spaces_around_brackets) *buf++ = ' ';                                                            \
+	} while (0);
+
+#define PRINT_CLOSING_BRACKET(c)                                                                                       \
+	do {                                                                                                               \
+		if (flags & f_spaces_around_brackets) *buf++ = ' ';                                                            \
+		*buf++ = (c);                                                                                                  \
+	} while (0);
+
+void json_serialize_ex(json_char *buf, json_value *value, json_serialize_opts opts) {
+	json_int_t integer, orig_integer;
+	json_object_entry *entry;
+	json_char *ptr;
+	int indent = 0;
+	char indent_char;
+	int i;
+	int flags;
+
+	flags = get_serialize_flags(opts);
+
+	indent_char = flags & f_tabs ? '\t' : ' ';
+
+	while (value) {
+		switch (value->type) {
+			case json_array:
+
+				if (((json_builder_value *)value)->length_iterated == 0) {
+					if (value->u.array.length == 0) {
+						*buf++ = '[';
+						*buf++ = ']';
+
+						break;
+					}
+
+					PRINT_OPENING_BRACKET('[');
+
+					indent += opts.indent_size;
+					PRINT_NEWLINE();
+				}
+
+				if (((json_builder_value *)value)->length_iterated == value->u.array.length) {
+					indent -= opts.indent_size;
+					PRINT_NEWLINE();
+					PRINT_CLOSING_BRACKET(']');
+
+					((json_builder_value *)value)->length_iterated = 0;
+					break;
+				}
+
+				if (((json_builder_value *)value)->length_iterated > 0) {
+					*buf++ = ',';
+
+					if (flags & f_spaces_after_commas) *buf++ = ' ';
+
+					PRINT_NEWLINE();
+				}
+
+				((json_builder_value *)value)->length_iterated++;
+				value = value->u.array.values[((json_builder_value *)value)->length_iterated - 1];
+				continue;
+
+			case json_object:
+
+				if (((json_builder_value *)value)->length_iterated == 0) {
+					if (value->u.object.length == 0) {
+						*buf++ = '{';
+						*buf++ = '}';
+
+						break;
+					}
+
+					PRINT_OPENING_BRACKET('{');
+
+					indent += opts.indent_size;
+					PRINT_NEWLINE();
+				}
+
+				if (((json_builder_value *)value)->length_iterated == value->u.object.length) {
+					indent -= opts.indent_size;
+					PRINT_NEWLINE();
+					PRINT_CLOSING_BRACKET('}');
+
+					((json_builder_value *)value)->length_iterated = 0;
+					break;
+				}
+
+				if (((json_builder_value *)value)->length_iterated > 0) {
+					*buf++ = ',';
+
+					if (flags & f_spaces_after_commas) *buf++ = ' ';
+
+					PRINT_NEWLINE();
+				}
+
+				entry = value->u.object.values + (((json_builder_value *)value)->length_iterated++);
+
+				*buf++ = '\"';
+				buf += serialize_string(buf, entry->name_length, entry->name);
+				*buf++ = '\"';
+				*buf++ = ':';
+
+				if (flags & f_spaces_after_colons) *buf++ = ' ';
+
+				value = entry->value;
+				continue;
+#ifdef CARYLL_USE_PRE_SERIALIZED
+			case json_pre_serialized:
+				memcpy(buf, value->u.string.ptr, value->u.string.length);
+				buf += value->u.string.length;
+				break;
+#endif
+			case json_string:
+
+				*buf++ = '\"';
+				buf += serialize_string(buf, value->u.string.length, value->u.string.ptr);
+				*buf++ = '\"';
+				break;
+
+			case json_integer:
+
+				integer = value->u.integer;
+
+				if (integer < 0) {
+					*buf++ = '-';
+					integer = -integer;
+				}
+
+				orig_integer = integer;
+
+				++buf;
+
+				while (integer >= 10) {
+					++buf;
+					integer /= 10;
+				}
+
+				integer = orig_integer;
+				ptr = buf;
+
+				do {
+					*--ptr = "0123456789"[integer % 10];
+				} while ((integer /= 10) > 0);
+
+				break;
+
+			case json_double: {
+				char tmp[256];
+				emyg_dtoa(value->u.dbl, tmp);
+				memcpy(buf, tmp, strlen(tmp));
+				buf += strlen(tmp);
+				break;
+			}
+
+			case json_boolean:
+
+				if (value->u.boolean) {
+					memcpy(buf, "true", 4);
+					buf += 4;
+				} else {
+					memcpy(buf, "false", 5);
+					buf += 5;
+				}
+
+				break;
+
+			case json_null:
+
+				memcpy(buf, "null", 4);
+				buf += 4;
+				break;
+
+			default:
+				break;
+		};
+
+		value = value->parent;
+	}
+
+	*buf = 0;
+}
+
+void json_builder_free(json_value *value) {
+	json_value *cur_value;
+
+	if (!value) return;
+
+	value->parent = 0;
+
+	while (value) {
+		switch (value->type) {
+			case json_array:
+
+				if (!value->u.array.length) {
+					free(value->u.array.values);
+					break;
+				}
+
+				value = value->u.array.values[--value->u.array.length];
+				continue;
+
+			case json_object:
+
+				if (!value->u.object.length) {
+					free(value->u.object.values);
+					break;
+				}
+
+				--value->u.object.length;
+
+				if (((json_builder_value *)value)->is_builder_value) {
+					/* Names are allocated separately for builder values.  In parser
+					 * values, they are part of the same allocation as the values array
+					 * itself.
+					 */
+					free(value->u.object.values[value->u.object.length].name);
+				}
+
+				value = value->u.object.values[value->u.object.length].value;
+				continue;
+
+			case json_string:
+#ifdef CARYLL_USE_PRE_SERIALIZED
+			case json_pre_serialized:
+#endif
+				free(value->u.string.ptr);
+				break;
+
+			default:
+				break;
+		};
+
+		cur_value = value;
+		value = value->parent;
+		free(cur_value);
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/json.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,1039 @@
+/* vim: set et ts=3 sw=3 sts=3 ft=c:
+ *
+ * Copyright (C) 2012, 2013, 2014 James McLaughlin et al.  All rights reserved.
+ * https://github.com/udp/json-parser
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "json.h"
+
+#ifdef _MSC_VER
+   #ifndef _CRT_SECURE_NO_WARNINGS
+      #define _CRT_SECURE_NO_WARNINGS
+   #endif
+#endif
+
+const struct _json_value json_value_none;
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+
+typedef unsigned int json_uchar;
+
+static unsigned char hex_value (json_char c)
+{
+   if (isdigit(c))
+      return c - '0';
+
+   switch (c) {
+      case 'a': case 'A': return 0x0A;
+      case 'b': case 'B': return 0x0B;
+      case 'c': case 'C': return 0x0C;
+      case 'd': case 'D': return 0x0D;
+      case 'e': case 'E': return 0x0E;
+      case 'f': case 'F': return 0x0F;
+      default: return 0xFF;
+   }
+}
+
+typedef struct
+{
+   unsigned long used_memory;
+
+   unsigned int uint_max;
+   unsigned long ulong_max;
+
+   json_settings settings;
+   int first_pass;
+
+   const json_char * ptr;
+   unsigned int cur_line, cur_col;
+
+} json_state;
+
+static void * default_alloc (size_t size, int zero, void * user_data)
+{
+   return zero ? calloc (1, size) : malloc (size);
+}
+
+static void default_free (void * ptr, void * user_data)
+{
+   free (ptr);
+}
+
+static void * json_alloc (json_state * state, unsigned long size, int zero)
+{
+   if ((state->ulong_max - state->used_memory) < size)
+      return 0;
+
+   if (state->settings.max_memory
+         && (state->used_memory += size) > state->settings.max_memory)
+   {
+      return 0;
+   }
+
+   return state->settings.mem_alloc (size, zero, state->settings.user_data);
+}
+
+static int new_value (json_state * state,
+                      json_value ** top, json_value ** root, json_value ** alloc,
+                      json_type type)
+{
+   json_value * value;
+   int values_size;
+
+   if (!state->first_pass)
+   {
+      value = *top = *alloc;
+      *alloc = (*alloc)->_reserved.next_alloc;
+
+      if (!*root)
+         *root = value;
+
+      switch (value->type)
+      {
+         case json_array:
+
+            if (value->u.array.length == 0)
+               break;
+
+            if (! (value->u.array.values = (json_value **) json_alloc
+               (state, value->u.array.length * sizeof (json_value *), 0)) )
+            {
+               return 0;
+            }
+
+            value->u.array.length = 0;
+            break;
+
+         case json_object:
+
+            if (value->u.object.length == 0)
+               break;
+
+            values_size = sizeof (*value->u.object.values) * value->u.object.length;
+
+            if (! (value->u.object.values = (json_object_entry *) json_alloc
+                  (state, values_size + ((uintptr_t) value->u.object.values), 0)) )
+            {
+               return 0;
+            }
+
+            value->_reserved.object_mem = (*(char **) &value->u.object.values) + values_size;
+
+            value->u.object.length = 0;
+            break;
+
+         case json_string:
+
+            if (! (value->u.string.ptr = (json_char *) json_alloc
+               (state, (value->u.string.length + 1) * sizeof (json_char), 0)) )
+            {
+               return 0;
+            }
+
+            value->u.string.length = 0;
+            break;
+
+         default:
+            break;
+      };
+
+      return 1;
+   }
+
+   if (! (value = (json_value *) json_alloc
+         (state, sizeof (json_value) + state->settings.value_extra, 1)))
+   {
+      return 0;
+   }
+
+   if (!*root)
+      *root = value;
+
+   value->type = type;
+   value->parent = *top;
+
+   #ifdef JSON_TRACK_SOURCE
+      value->line = state->cur_line;
+      value->col = state->cur_col;
+   #endif
+
+   if (*alloc)
+      (*alloc)->_reserved.next_alloc = value;
+
+   *alloc = *top = value;
+
+   return 1;
+}
+
+#define whitespace \
+   case '\n': ++ state.cur_line;  state.cur_col = 0; \
+   case ' ': case '\t': case '\r'
+
+#define string_add(b)  \
+   do { if (!state.first_pass) string [string_length] = b;  ++ string_length; } while (0);
+
+#define line_and_col \
+   state.cur_line, state.cur_col
+
+static const long
+   flag_next             = 1 << 0,
+   flag_reproc           = 1 << 1,
+   flag_need_comma       = 1 << 2,
+   flag_seek_value       = 1 << 3, 
+   flag_escaped          = 1 << 4,
+   flag_string           = 1 << 5,
+   flag_need_colon       = 1 << 6,
+   flag_done             = 1 << 7,
+   flag_num_negative     = 1 << 8,
+   flag_num_zero         = 1 << 9,
+   flag_num_e            = 1 << 10,
+   flag_num_e_got_sign   = 1 << 11,
+   flag_num_e_negative   = 1 << 12,
+   flag_line_comment     = 1 << 13,
+   flag_block_comment    = 1 << 14;
+
+json_value * json_parse_ex (json_settings * settings,
+                            const json_char * json,
+                            size_t length,
+                            char * error_buf)
+{
+   json_char error [json_error_max];
+   const json_char * end;
+   json_value * top, * root, * alloc = 0;
+   json_state state;
+   state.used_memory = 0;
+   state.uint_max = 0;
+   state.ulong_max = 0;
+   state.settings.max_memory = 0;
+   state.settings.mem_alloc = NULL;
+   state.settings.mem_free = NULL;
+   state.settings.settings = 0;
+   state.settings.user_data = NULL;
+   state.settings.value_extra = 0;
+   state.first_pass = 0;
+   state.ptr = NULL;
+   state.cur_col = 0;
+   state.cur_line = 0;
+   
+   long flags;
+   long num_digits = 0, num_e = 0;
+   json_int_t num_fraction = 0;
+
+   /* Skip UTF-8 BOM
+    */
+   if (length >= 3 && ((unsigned char) json [0]) == 0xEF
+                   && ((unsigned char) json [1]) == 0xBB
+                   && ((unsigned char) json [2]) == 0xBF)
+   {
+      json += 3;
+      length -= 3;
+   }
+
+   error[0] = '\0';
+   end = (json + length);
+
+   memcpy (&state.settings, settings, sizeof (json_settings));
+
+   if (!state.settings.mem_alloc)
+      state.settings.mem_alloc = default_alloc;
+
+   if (!state.settings.mem_free)
+      state.settings.mem_free = default_free;
+
+   memset (&state.uint_max, 0xFF, sizeof (state.uint_max));
+   memset (&state.ulong_max, 0xFF, sizeof (state.ulong_max));
+
+   state.uint_max -= 8; /* limit of how much can be added before next check */
+   state.ulong_max -= 8;
+
+   for (state.first_pass = 1; state.first_pass >= 0; -- state.first_pass)
+   {
+      json_uchar uchar;
+      unsigned char uc_b1, uc_b2, uc_b3, uc_b4;
+      json_char * string = 0;
+      unsigned int string_length = 0;
+
+      top = root = 0;
+      flags = flag_seek_value;
+
+      state.cur_line = 1;
+
+      for (state.ptr = json ;; ++ state.ptr)
+      {
+         json_char b = (state.ptr == end ? 0 : *state.ptr);
+         
+         if (flags & flag_string)
+         {
+            if (!b)
+            {  sprintf (error, "Unexpected EOF in string (at %d:%d)", line_and_col);
+               goto e_failed;
+            }
+
+            if (string_length > state.uint_max)
+               goto e_overflow;
+
+            if (flags & flag_escaped)
+            {
+               flags &= ~ flag_escaped;
+
+               switch (b)
+               {
+                  case 'b':  string_add ('\b');  break;
+                  case 'f':  string_add ('\f');  break;
+                  case 'n':  string_add ('\n');  break;
+                  case 'r':  string_add ('\r');  break;
+                  case 't':  string_add ('\t');  break;
+                  case 'u':
+
+                    if (end - state.ptr < 4 || 
+                        (uc_b1 = hex_value (*++ state.ptr)) == 0xFF ||
+                        (uc_b2 = hex_value (*++ state.ptr)) == 0xFF ||
+                        (uc_b3 = hex_value (*++ state.ptr)) == 0xFF ||
+                        (uc_b4 = hex_value (*++ state.ptr)) == 0xFF)
+                    {
+                        sprintf (error, "Invalid character value `%c` (at %d:%d)", b, line_and_col);
+                        goto e_failed;
+                    }
+
+                    uc_b1 = (uc_b1 << 4) | uc_b2;
+                    uc_b2 = (uc_b3 << 4) | uc_b4;
+                    uchar = (uc_b1 << 8) | uc_b2;
+
+                    if ((uchar & 0xF800) == 0xD800) {
+                        json_uchar uchar2;
+                        
+                        if (end - state.ptr < 6 || (*++ state.ptr) != '\\' || (*++ state.ptr) != 'u' ||
+                            (uc_b1 = hex_value (*++ state.ptr)) == 0xFF ||
+                            (uc_b2 = hex_value (*++ state.ptr)) == 0xFF ||
+                            (uc_b3 = hex_value (*++ state.ptr)) == 0xFF ||
+                            (uc_b4 = hex_value (*++ state.ptr)) == 0xFF)
+                        {
+                            sprintf (error, "Invalid character value `%c` (at %d:%d)", b, line_and_col);
+                            goto e_failed;
+                        }
+
+                        uc_b1 = (uc_b1 << 4) | uc_b2;
+                        uc_b2 = (uc_b3 << 4) | uc_b4;
+                        uchar2 = (uc_b1 << 8) | uc_b2;
+                        
+                        uchar = 0x010000 + ((uchar & 0x3FF) << 10) | (uchar2 & 0x3FF);
+                    }
+
+                    if (sizeof (json_char) >= sizeof (json_uchar) || (uchar <= 0x7F))
+                    {
+                       string_add ((json_char) uchar);
+                       break;
+                    }
+
+                    if (uchar <= 0x7FF)
+                    {
+                        if (state.first_pass)
+                           string_length += 2;
+                        else
+                        {  string [string_length ++] = 0xC0 | (uchar >> 6);
+                           string [string_length ++] = 0x80 | (uchar & 0x3F);
+                        }
+
+                        break;
+                    }
+
+                    if (uchar <= 0xFFFF) {
+                        if (state.first_pass)
+                           string_length += 3;
+                        else
+                        {  string [string_length ++] = 0xE0 | (uchar >> 12);
+                           string [string_length ++] = 0x80 | ((uchar >> 6) & 0x3F);
+                           string [string_length ++] = 0x80 | (uchar & 0x3F);
+                        }
+                        
+                        break;
+                    }
+
+                    if (state.first_pass)
+                       string_length += 4;
+                    else
+                    {  string [string_length ++] = 0xF0 | (uchar >> 18);
+                       string [string_length ++] = 0x80 | ((uchar >> 12) & 0x3F);
+                       string [string_length ++] = 0x80 | ((uchar >> 6) & 0x3F);
+                       string [string_length ++] = 0x80 | (uchar & 0x3F);
+                    }
+
+                    break;
+
+                  default:
+                     string_add (b);
+               };
+
+               continue;
+            }
+
+            if (b == '\\')
+            {
+               flags |= flag_escaped;
+               continue;
+            }
+
+            if (b == '"')
+            {
+               if (!state.first_pass)
+                  string [string_length] = 0;
+
+               flags &= ~ flag_string;
+               string = 0;
+
+               switch (top->type)
+               {
+                  case json_string:
+
+                     top->u.string.length = string_length;
+                     flags |= flag_next;
+
+                     break;
+
+                  case json_object:
+
+                     if (state.first_pass)
+                        (*(json_char **) &top->u.object.values) += string_length + 1;
+                     else
+                     {  
+                        top->u.object.values [top->u.object.length].name
+                           = (json_char *) top->_reserved.object_mem;
+
+                        top->u.object.values [top->u.object.length].name_length
+                           = string_length;
+
+                        (*(json_char **) &top->_reserved.object_mem) += string_length + 1;
+                     }
+
+                     flags |= flag_seek_value | flag_need_colon;
+                     continue;
+
+                  default:
+                     break;
+               };
+            }
+            else
+            {
+               string_add (b);
+               continue;
+            }
+         }
+
+         if (state.settings.settings & json_enable_comments)
+         {
+            if (flags & (flag_line_comment | flag_block_comment))
+            {
+               if (flags & flag_line_comment)
+               {
+                  if (b == '\r' || b == '\n' || !b)
+                  {
+                     flags &= ~ flag_line_comment;
+                     -- state.ptr;  /* so null can be reproc'd */
+                  }
+
+                  continue;
+               }
+
+               if (flags & flag_block_comment)
+               {
+                  if (!b)
+                  {  sprintf (error, "%d:%d: Unexpected EOF in block comment", line_and_col);
+                     goto e_failed;
+                  }
+
+                  if (b == '*' && state.ptr < (end - 1) && state.ptr [1] == '/')
+                  {
+                     flags &= ~ flag_block_comment;
+                     ++ state.ptr;  /* skip closing sequence */
+                  }
+
+                  continue;
+               }
+            }
+            else if (b == '/')
+            {
+               if (! (flags & (flag_seek_value | flag_done)) && top->type != json_object)
+               {  sprintf (error, "%d:%d: Comment not allowed here", line_and_col);
+                  goto e_failed;
+               }
+
+               if (++ state.ptr == end)
+               {  sprintf (error, "%d:%d: EOF unexpected", line_and_col);
+                  goto e_failed;
+               }
+
+               switch (b = *state.ptr)
+               {
+                  case '/':
+                     flags |= flag_line_comment;
+                     continue;
+
+                  case '*':
+                     flags |= flag_block_comment;
+                     continue;
+
+                  default:
+                     sprintf (error, "%d:%d: Unexpected `%c` in comment opening sequence", line_and_col, b);
+                     goto e_failed;
+               };
+            }
+         }
+
+         if (flags & flag_done)
+         {
+            if (!b)
+               break;
+
+            switch (b)
+            {
+               whitespace:
+                  continue;
+
+               default:
+
+                  sprintf (error, "%d:%d: Trailing garbage: `%c`",
+                           state.cur_line, state.cur_col, b);
+
+                  goto e_failed;
+            };
+         }
+
+         if (flags & flag_seek_value)
+         {
+            switch (b)
+            {
+               whitespace:
+                  continue;
+
+               case ']':
+
+                  if (top && top->type == json_array)
+                     flags = (flags & ~ (flag_need_comma | flag_seek_value)) | flag_next;
+                  else
+                  {  sprintf (error, "%d:%d: Unexpected ]", line_and_col);
+                     goto e_failed;
+                  }
+
+                  break;
+
+               default:
+
+                  if (flags & flag_need_comma)
+                  {
+                     if (b == ',')
+                     {  flags &= ~ flag_need_comma;
+                        continue;
+                     }
+                     else
+                     {
+                        sprintf (error, "%d:%d: Expected , before %c",
+                                 state.cur_line, state.cur_col, b);
+
+                        goto e_failed;
+                     }
+                  }
+
+                  if (flags & flag_need_colon)
+                  {
+                     if (b == ':')
+                     {  flags &= ~ flag_need_colon;
+                        continue;
+                     }
+                     else
+                     { 
+                        sprintf (error, "%d:%d: Expected : before %c",
+                                 state.cur_line, state.cur_col, b);
+
+                        goto e_failed;
+                     }
+                  }
+
+                  flags &= ~ flag_seek_value;
+
+                  switch (b)
+                  {
+                     case '{':
+
+                        if (!new_value (&state, &top, &root, &alloc, json_object))
+                           goto e_alloc_failure;
+
+                        continue;
+
+                     case '[':
+
+                        if (!new_value (&state, &top, &root, &alloc, json_array))
+                           goto e_alloc_failure;
+
+                        flags |= flag_seek_value;
+                        continue;
+
+                     case '"':
+
+                        if (!new_value (&state, &top, &root, &alloc, json_string))
+                           goto e_alloc_failure;
+
+                        flags |= flag_string;
+
+                        string = top->u.string.ptr;
+                        string_length = 0;
+
+                        continue;
+
+                     case 't':
+
+                        if ((end - state.ptr) < 3 || *(++ state.ptr) != 'r' ||
+                            *(++ state.ptr) != 'u' || *(++ state.ptr) != 'e')
+                        {
+                           goto e_unknown_value;
+                        }
+
+                        if (!new_value (&state, &top, &root, &alloc, json_boolean))
+                           goto e_alloc_failure;
+
+                        top->u.boolean = 1;
+
+                        flags |= flag_next;
+                        break;
+
+                     case 'f':
+
+                        if ((end - state.ptr) < 4 || *(++ state.ptr) != 'a' ||
+                            *(++ state.ptr) != 'l' || *(++ state.ptr) != 's' ||
+                            *(++ state.ptr) != 'e')
+                        {
+                           goto e_unknown_value;
+                        }
+
+                        if (!new_value (&state, &top, &root, &alloc, json_boolean))
+                           goto e_alloc_failure;
+
+                        flags |= flag_next;
+                        break;
+
+                     case 'n':
+
+                        if ((end - state.ptr) < 3 || *(++ state.ptr) != 'u' ||
+                            *(++ state.ptr) != 'l' || *(++ state.ptr) != 'l')
+                        {
+                           goto e_unknown_value;
+                        }
+
+                        if (!new_value (&state, &top, &root, &alloc, json_null))
+                           goto e_alloc_failure;
+
+                        flags |= flag_next;
+                        break;
+
+                     default:
+
+                        if (isdigit (b) || b == '-')
+                        {
+                           if (!new_value (&state, &top, &root, &alloc, json_integer))
+                              goto e_alloc_failure;
+
+                           if (!state.first_pass)
+                           {
+                              while (isdigit (b) || b == '+' || b == '-'
+                                        || b == 'e' || b == 'E' || b == '.')
+                              {
+                                 if ( (++ state.ptr) == end)
+                                 {
+                                    b = 0;
+                                    break;
+                                 }
+
+                                 b = *state.ptr;
+                              }
+
+                              flags |= flag_next | flag_reproc;
+                              break;
+                           }
+
+                           flags &= ~ (flag_num_negative | flag_num_e |
+                                        flag_num_e_got_sign | flag_num_e_negative |
+                                           flag_num_zero);
+
+                           num_digits = 0;
+                           num_fraction = 0;
+                           num_e = 0;
+
+                           if (b != '-')
+                           {
+                              flags |= flag_reproc;
+                              break;
+                           }
+
+                           flags |= flag_num_negative;
+                           continue;
+                        }
+                        else
+                        {  sprintf (error, "%d:%d: Unexpected %c when seeking value", line_and_col, b);
+                           goto e_failed;
+                        }
+                  };
+            };
+         }
+         else
+         {
+            switch (top->type)
+            {
+            case json_object:
+               
+               switch (b)
+               {
+                  whitespace:
+                     continue;
+
+                  case '"':
+
+                     if (flags & flag_need_comma)
+                     {  sprintf (error, "%d:%d: Expected , before \"", line_and_col);
+                        goto e_failed;
+                     }
+
+                     flags |= flag_string;
+
+                     string = (json_char *) top->_reserved.object_mem;
+                     string_length = 0;
+
+                     break;
+                  
+                  case '}':
+
+                     flags = (flags & ~ flag_need_comma) | flag_next;
+                     break;
+
+                  case ',':
+
+                     if (flags & flag_need_comma)
+                     {
+                        flags &= ~ flag_need_comma;
+                        break;
+                     }
+
+                  default:
+                     sprintf (error, "%d:%d: Unexpected `%c` in object", line_and_col, b);
+                     goto e_failed;
+               };
+
+               break;
+
+            case json_integer:
+            case json_double:
+
+               if (isdigit (b))
+               {
+                  ++ num_digits;
+
+                  if (top->type == json_integer || flags & flag_num_e)
+                  {
+                     if (! (flags & flag_num_e))
+                     {
+                        if (flags & flag_num_zero)
+                        {  sprintf (error, "%d:%d: Unexpected `0` before `%c`", line_and_col, b);
+                           goto e_failed;
+                        }
+
+                        if (num_digits == 1 && b == '0')
+                           flags |= flag_num_zero;
+                     }
+                     else
+                     {
+                        flags |= flag_num_e_got_sign;
+                        num_e = (num_e * 10) + (b - '0');
+                        continue;
+                     }
+
+                     top->u.integer = (top->u.integer * 10) + (b - '0');
+                     continue;
+                  }
+
+                  num_fraction = (num_fraction * 10) + (b - '0');
+                  continue;
+               }
+
+               if (b == '+' || b == '-')
+               {
+                  if ( (flags & flag_num_e) && !(flags & flag_num_e_got_sign))
+                  {
+                     flags |= flag_num_e_got_sign;
+
+                     if (b == '-')
+                        flags |= flag_num_e_negative;
+
+                     continue;
+                  }
+               }
+               else if (b == '.' && top->type == json_integer)
+               {
+                  if (!num_digits)
+                  {  sprintf (error, "%d:%d: Expected digit before `.`", line_and_col);
+                     goto e_failed;
+                  }
+
+                  top->type = json_double;
+                  top->u.dbl = (double) top->u.integer;
+
+                  num_digits = 0;
+                  continue;
+               }
+
+               if (! (flags & flag_num_e))
+               {
+                  if (top->type == json_double)
+                  {
+                     if (!num_digits)
+                     {  sprintf (error, "%d:%d: Expected digit after `.`", line_and_col);
+                        goto e_failed;
+                     }
+
+                     top->u.dbl += ((double) num_fraction) / (pow (10.0, (double) num_digits));
+                  }
+
+                  if (b == 'e' || b == 'E')
+                  {
+                     flags |= flag_num_e;
+
+                     if (top->type == json_integer)
+                     {
+                        top->type = json_double;
+                        top->u.dbl = (double) top->u.integer;
+                     }
+
+                     num_digits = 0;
+                     flags &= ~ flag_num_zero;
+
+                     continue;
+                  }
+               }
+               else
+               {
+                  if (!num_digits)
+                  {  sprintf (error, "%d:%d: Expected digit after `e`", line_and_col);
+                     goto e_failed;
+                  }
+
+                  top->u.dbl *= pow (10.0, (double)
+                      (flags & flag_num_e_negative ? - num_e : num_e));
+               }
+
+               if (flags & flag_num_negative)
+               {
+                  if (top->type == json_integer)
+                     top->u.integer = - top->u.integer;
+                  else
+                     top->u.dbl = - top->u.dbl;
+               }
+
+               flags |= flag_next | flag_reproc;
+               break;
+
+            default:
+               break;
+            };
+         }
+
+         if (flags & flag_reproc)
+         {
+            flags &= ~ flag_reproc;
+            -- state.ptr;
+         }
+
+         if (flags & flag_next)
+         {
+            flags = (flags & ~ flag_next) | flag_need_comma;
+
+            if (!top->parent)
+            {
+               /* root value done */
+
+               flags |= flag_done;
+               continue;
+            }
+
+            if (top->parent->type == json_array)
+               flags |= flag_seek_value;
+               
+            if (!state.first_pass)
+            {
+               json_value * parent = top->parent;
+
+               switch (parent->type)
+               {
+                  case json_object:
+
+                     parent->u.object.values
+                        [parent->u.object.length].value = top;
+
+                     break;
+
+                  case json_array:
+
+                     parent->u.array.values
+                           [parent->u.array.length] = top;
+
+                     break;
+
+                  default:
+                     break;
+               };
+            }
+
+            if ( (++ top->parent->u.array.length) > state.uint_max)
+               goto e_overflow;
+
+            top = top->parent;
+
+            continue;
+         }
+      }
+
+      alloc = root;
+   }
+
+   return root;
+
+e_unknown_value:
+
+   sprintf (error, "%d:%d: Unknown value", line_and_col);
+   goto e_failed;
+
+e_alloc_failure:
+
+   strcpy (error, "Memory allocation failure");
+   goto e_failed;
+
+e_overflow:
+
+   sprintf (error, "%d:%d: Too long (caught overflow)", line_and_col);
+   goto e_failed;
+
+e_failed:
+
+   if (error_buf)
+   {
+      if (*error)
+         strcpy (error_buf, error);
+      else
+         strcpy (error_buf, "Unknown error");
+   }
+
+   if (state.first_pass)
+      alloc = root;
+
+   while (alloc)
+   {
+      top = alloc->_reserved.next_alloc;
+      state.settings.mem_free (alloc, state.settings.user_data);
+      alloc = top;
+   }
+
+   if (!state.first_pass)
+      json_value_free_ex (&state.settings, root);
+
+   return 0;
+}
+
+json_value * json_parse (const json_char * json, size_t length)
+{
+   json_settings settings;
+   settings.max_memory = 0;
+   settings.settings = 0;
+   settings.mem_alloc = NULL;
+   settings.mem_free = NULL;
+   settings.user_data = NULL;
+   settings.value_extra = 0;
+   return json_parse_ex (&settings, json, length, 0);
+}
+
+void json_value_free_ex (json_settings * settings, json_value * value)
+{
+   json_value * cur_value;
+
+   if (!value)
+      return;
+
+   value->parent = 0;
+
+   while (value)
+   {
+      switch (value->type)
+      {
+         case json_array:
+
+            if (!value->u.array.length)
+            {
+               settings->mem_free (value->u.array.values, settings->user_data);
+               break;
+            }
+
+            value = value->u.array.values [-- value->u.array.length];
+            continue;
+
+         case json_object:
+
+            if (!value->u.object.length)
+            {
+               settings->mem_free (value->u.object.values, settings->user_data);
+               break;
+            }
+
+            value = value->u.object.values [-- value->u.object.length].value;
+            continue;
+
+         case json_string:
+#ifdef CARYLL_USE_PRE_SERIALIZED
+         case json_pre_serialized:
+#endif
+            settings->mem_free (value->u.string.ptr, settings->user_data);
+            break;
+
+         default:
+            break;
+      };
+
+      cur_value = value;
+      value = value->parent;
+      settings->mem_free (cur_value, settings->user_data);
+   }
+}
+
+void json_value_free (json_value * value)
+{
+   json_settings settings;
+   settings.max_memory = 0;
+   settings.settings = 0;
+   settings.mem_alloc = NULL;
+   settings.mem_free = NULL;
+   settings.user_data = NULL;
+   settings.value_extra = 0;
+   settings.mem_free = default_free;
+   json_value_free_ex (&settings, value);
+}
+

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sds.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sds.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sds.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,1264 @@
+/* SDSLib 2.0 -- A C dynamic strings library
+ *
+ * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2015, Redis Labs, Inc
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   * Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *   * Neither the name of Redis nor the names of its contributors may be used
+ *     to endorse or promote products derived from this software without
+ *     specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include "sds.h"
+#include "sdsalloc.h"
+
+static inline int sdsHdrSize(char type) {
+    switch(type&SDS_TYPE_MASK) {
+        case SDS_TYPE_5:
+            return sizeof(struct sdshdr5);
+        case SDS_TYPE_8:
+            return sizeof(struct sdshdr8);
+        case SDS_TYPE_16:
+            return sizeof(struct sdshdr16);
+        case SDS_TYPE_32:
+            return sizeof(struct sdshdr32);
+        case SDS_TYPE_64:
+            return sizeof(struct sdshdr64);
+    }
+    return 0;
+}
+
+static inline char sdsReqType(size_t string_size) {
+    if (string_size < 32)
+        return SDS_TYPE_5;
+    if (string_size < 0xff)
+        return SDS_TYPE_8;
+    if (string_size < 0xffff)
+        return SDS_TYPE_16;
+    if (string_size < 0xffffffff)
+        return SDS_TYPE_32;
+    return SDS_TYPE_64;
+}
+
+/* Create a new sds string with the content specified by the 'init' pointer
+ * and 'initlen'.
+ * If NULL is used for 'init' the string is initialized with zero bytes.
+ *
+ * The string is always null-termined (all the sds strings are, always) so
+ * even if you create an sds string with:
+ *
+ * mystring = sdsnewlen("abc",3);
+ *
+ * You can print the string with printf() as there is an implicit \0 at the
+ * end of the string. However the string is binary safe and can contain
+ * \0 characters in the middle, as the length is stored in the sds header. */
+sds sdsnewlen(const void *init, size_t initlen) {
+    void *sh;
+    sds s;
+    char type = sdsReqType(initlen);
+    /* Empty strings are usually created in order to append. Use type 8
+     * since type 5 is not good at this. */
+    if (type == SDS_TYPE_5 && initlen == 0) type = SDS_TYPE_8;
+    int hdrlen = sdsHdrSize(type);
+    unsigned char *fp; /* flags pointer. */
+
+    sh = s_malloc(hdrlen+initlen+1);
+    if (!init)
+        memset(sh, 0, hdrlen+initlen+1);
+    if (sh == NULL) return NULL;
+    s = (char*)sh+hdrlen;
+    fp = ((unsigned char*)s)-1;
+    switch(type) {
+        case SDS_TYPE_5: {
+            *fp = type | (initlen << SDS_TYPE_BITS);
+            break;
+        }
+        case SDS_TYPE_8: {
+            SDS_HDR_VAR(8,s);
+            sh->len = initlen;
+            sh->alloc = initlen;
+            *fp = type;
+            break;
+        }
+        case SDS_TYPE_16: {
+            SDS_HDR_VAR(16,s);
+            sh->len = initlen;
+            sh->alloc = initlen;
+            *fp = type;
+            break;
+        }
+        case SDS_TYPE_32: {
+            SDS_HDR_VAR(32,s);
+            sh->len = initlen;
+            sh->alloc = initlen;
+            *fp = type;
+            break;
+        }
+        case SDS_TYPE_64: {
+            SDS_HDR_VAR(64,s);
+            sh->len = initlen;
+            sh->alloc = initlen;
+            *fp = type;
+            break;
+        }
+    }
+    if (initlen && init)
+        memcpy(s, init, initlen);
+    s[initlen] = '\0';
+    return s;
+}
+
+/* Create an empty (zero length) sds string. Even in this case the string
+ * always has an implicit null term. */
+sds sdsempty(void) {
+    return sdsnewlen("",0);
+}
+
+/* Create a new sds string starting from a null terminated C string. */
+sds sdsnew(const char *init) {
+    size_t initlen = (init == NULL) ? 0 : strlen(init);
+    return sdsnewlen(init, initlen);
+}
+
+/* Duplicate an sds string. */
+sds sdsdup(const sds s) {
+    return sdsnewlen(s, sdslen(s));
+}
+
+/* Free an sds string. No operation is performed if 's' is NULL. */
+void sdsfree(sds s) {
+    if (s == NULL) return;
+    s_free((char*)s-sdsHdrSize(s[-1]));
+}
+
+/* Set the sds string length to the length as obtained with strlen(), so
+ * considering as content only up to the first null term character.
+ *
+ * This function is useful when the sds string is hacked manually in some
+ * way, like in the following example:
+ *
+ * s = sdsnew("foobar");
+ * s[2] = '\0';
+ * sdsupdatelen(s);
+ * printf("%d\n", sdslen(s));
+ *
+ * The output will be "2", but if we comment out the call to sdsupdatelen()
+ * the output will be "6" as the string was modified but the logical length
+ * remains 6 bytes. */
+void sdsupdatelen(sds s) {
+    int reallen = strlen(s);
+    sdssetlen(s, reallen);
+}
+
+/* Modify an sds string in-place to make it empty (zero length).
+ * However all the existing buffer is not discarded but set as free space
+ * so that next append operations will not require allocations up to the
+ * number of bytes previously available. */
+void sdsclear(sds s) {
+    sdssetlen(s, 0);
+    s[0] = '\0';
+}
+
+/* Enlarge the free space at the end of the sds string so that the caller
+ * is sure that after calling this function can overwrite up to addlen
+ * bytes after the end of the string, plus one more byte for nul term.
+ *
+ * Note: this does not change the *length* of the sds string as returned
+ * by sdslen(), but only the free buffer space we have. */
+sds sdsMakeRoomFor(sds s, size_t addlen) {
+    void *sh, *newsh;
+    size_t avail = sdsavail(s);
+    size_t len, newlen;
+    char type, oldtype = s[-1] & SDS_TYPE_MASK;
+    int hdrlen;
+
+    /* Return ASAP if there is enough space left. */
+    if (avail >= addlen) return s;
+
+    len = sdslen(s);
+    sh = (char*)s-sdsHdrSize(oldtype);
+    newlen = (len+addlen);
+    if (newlen < SDS_MAX_PREALLOC)
+        newlen *= 2;
+    else
+        newlen += SDS_MAX_PREALLOC;
+
+    type = sdsReqType(newlen);
+
+    /* Don't use type 5: the user is appending to the string and type 5 is
+     * not able to remember empty space, so sdsMakeRoomFor() must be called
+     * at every appending operation. */
+    if (type == SDS_TYPE_5) type = SDS_TYPE_8;
+
+    hdrlen = sdsHdrSize(type);
+    if (oldtype==type) {
+        newsh = s_realloc(sh, hdrlen+newlen+1);
+        if (newsh == NULL) return NULL;
+        s = (char*)newsh+hdrlen;
+    } else {
+        /* Since the header size changes, need to move the string forward,
+         * and can't use realloc */
+        newsh = s_malloc(hdrlen+newlen+1);
+        if (newsh == NULL) return NULL;
+        memcpy((char*)newsh+hdrlen, s, len+1);
+        s_free(sh);
+        s = (char*)newsh+hdrlen;
+        s[-1] = type;
+        sdssetlen(s, len);
+    }
+    sdssetalloc(s, newlen);
+    return s;
+}
+
+/* Reallocate the sds string so that it has no free space at the end. The
+ * contained string remains not altered, but next concatenation operations
+ * will require a reallocation.
+ *
+ * After the call, the passed sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdsRemoveFreeSpace(sds s) {
+    void *sh, *newsh;
+    char type, oldtype = s[-1] & SDS_TYPE_MASK;
+    int hdrlen;
+    size_t len = sdslen(s);
+    sh = (char*)s-sdsHdrSize(oldtype);
+
+    type = sdsReqType(len);
+    hdrlen = sdsHdrSize(type);
+    if (oldtype==type) {
+        newsh = s_realloc(sh, hdrlen+len+1);
+        if (newsh == NULL) return NULL;
+        s = (char*)newsh+hdrlen;
+    } else {
+        newsh = s_malloc(hdrlen+len+1);
+        if (newsh == NULL) return NULL;
+        memcpy((char*)newsh+hdrlen, s, len+1);
+        s_free(sh);
+        s = (char*)newsh+hdrlen;
+        s[-1] = type;
+        sdssetlen(s, len);
+    }
+    sdssetalloc(s, len);
+    return s;
+}
+
+/* Return the total size of the allocation of the specifed sds string,
+ * including:
+ * 1) The sds header before the pointer.
+ * 2) The string.
+ * 3) The free buffer at the end if any.
+ * 4) The implicit null term.
+ */
+size_t sdsAllocSize(sds s) {
+    size_t alloc = sdsalloc(s);
+    return sdsHdrSize(s[-1])+alloc+1;
+}
+
+/* Return the pointer of the actual SDS allocation (normally SDS strings
+ * are referenced by the start of the string buffer). */
+void *sdsAllocPtr(sds s) {
+    return (void*) (s-sdsHdrSize(s[-1]));
+}
+
+/* Increment the sds length and decrements the left free space at the
+ * end of the string according to 'incr'. Also set the null term
+ * in the new end of the string.
+ *
+ * This function is used in order to fix the string length after the
+ * user calls sdsMakeRoomFor(), writes something after the end of
+ * the current string, and finally needs to set the new length.
+ *
+ * Note: it is possible to use a negative increment in order to
+ * right-trim the string.
+ *
+ * Usage example:
+ *
+ * Using sdsIncrLen() and sdsMakeRoomFor() it is possible to mount the
+ * following schema, to cat bytes coming from the kernel to the end of an
+ * sds string without copying into an intermediate buffer:
+ *
+ * oldlen = sdslen(s);
+ * s = sdsMakeRoomFor(s, BUFFER_SIZE);
+ * nread = read(fd, s+oldlen, BUFFER_SIZE);
+ * ... check for nread <= 0 and handle it ...
+ * sdsIncrLen(s, nread);
+ */
+void sdsIncrLen(sds s, int incr) {
+    unsigned char flags = s[-1];
+    size_t len;
+    switch(flags&SDS_TYPE_MASK) {
+        case SDS_TYPE_5: {
+            unsigned char *fp = ((unsigned char*)s)-1;
+            unsigned char oldlen = SDS_TYPE_5_LEN(flags);
+            assert((incr > 0 && oldlen+incr < 32) || (incr < 0 && oldlen >= (unsigned int)(-incr)));
+            *fp = SDS_TYPE_5 | ((oldlen+incr) << SDS_TYPE_BITS);
+            len = oldlen+incr;
+            break;
+        }
+        case SDS_TYPE_8: {
+            SDS_HDR_VAR(8,s);
+            assert((incr >= 0 && sh->alloc-sh->len >= incr) || (incr < 0 && sh->len >= (unsigned int)(-incr)));
+            len = (sh->len += incr);
+            break;
+        }
+        case SDS_TYPE_16: {
+            SDS_HDR_VAR(16,s);
+            assert((incr >= 0 && sh->alloc-sh->len >= incr) || (incr < 0 && sh->len >= (unsigned int)(-incr)));
+            len = (sh->len += incr);
+            break;
+        }
+        case SDS_TYPE_32: {
+            SDS_HDR_VAR(32,s);
+            assert((incr >= 0 && sh->alloc-sh->len >= (unsigned int)incr) || (incr < 0 && sh->len >= (unsigned int)(-incr)));
+            len = (sh->len += incr);
+            break;
+        }
+        case SDS_TYPE_64: {
+            SDS_HDR_VAR(64,s);
+            assert((incr >= 0 && sh->alloc-sh->len >= (uint64_t)incr) || (incr < 0 && sh->len >= (uint64_t)(-incr)));
+            len = (sh->len += incr);
+            break;
+        }
+        default: len = 0; /* Just to avoid compilation warnings. */
+    }
+    s[len] = '\0';
+}
+
+/* Grow the sds to have the specified length. Bytes that were not part of
+ * the original length of the sds will be set to zero.
+ *
+ * if the specified length is smaller than the current length, no operation
+ * is performed. */
+sds sdsgrowzero(sds s, size_t len) {
+    size_t curlen = sdslen(s);
+
+    if (len <= curlen) return s;
+    s = sdsMakeRoomFor(s,len-curlen);
+    if (s == NULL) return NULL;
+
+    /* Make sure added region doesn't contain garbage */
+    memset(s+curlen,0,(len-curlen+1)); /* also set trailing \0 byte */
+    sdssetlen(s, len);
+    return s;
+}
+
+/* Append the specified binary-safe string pointed by 't' of 'len' bytes to the
+ * end of the specified sds string 's'.
+ *
+ * After the call, the passed sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdscatlen(sds s, const void *t, size_t len) {
+    size_t curlen = sdslen(s);
+
+    s = sdsMakeRoomFor(s,len);
+    if (s == NULL) return NULL;
+    memcpy(s+curlen, t, len);
+    sdssetlen(s, curlen+len);
+    s[curlen+len] = '\0';
+    return s;
+}
+
+/* Append the specified null termianted C string to the sds string 's'.
+ *
+ * After the call, the passed sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdscat(sds s, const char *t) {
+    return sdscatlen(s, t, strlen(t));
+}
+
+/* Append the specified sds 't' to the existing sds 's'.
+ *
+ * After the call, the modified sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdscatsds(sds s, const sds t) {
+    return sdscatlen(s, t, sdslen(t));
+}
+
+/* Destructively modify the sds string 's' to hold the specified binary
+ * safe string pointed by 't' of length 'len' bytes. */
+sds sdscpylen(sds s, const char *t, size_t len) {
+    if (sdsalloc(s) < len) {
+        s = sdsMakeRoomFor(s,len-sdslen(s));
+        if (s == NULL) return NULL;
+    }
+    memcpy(s, t, len);
+    s[len] = '\0';
+    sdssetlen(s, len);
+    return s;
+}
+
+/* Like sdscpylen() but 't' must be a null-termined string so that the length
+ * of the string is obtained with strlen(). */
+sds sdscpy(sds s, const char *t) {
+    return sdscpylen(s, t, strlen(t));
+}
+
+/* Helper for sdscatlonglong() doing the actual number -> string
+ * conversion. 's' must point to a string with room for at least
+ * SDS_LLSTR_SIZE bytes.
+ *
+ * The function returns the length of the null-terminated string
+ * representation stored at 's'. */
+#define SDS_LLSTR_SIZE 21
+static int sdsll2str(char *s, long long value) {
+    char *p, aux;
+    unsigned long long v;
+    size_t l;
+
+    /* Generate the string representation, this method produces
+     * an reversed string. */
+    v = (value < 0) ? -value : value;
+    p = s;
+    do {
+        *p++ = '0'+(v%10);
+        v /= 10;
+    } while(v);
+    if (value < 0) *p++ = '-';
+
+    /* Compute length and add null term. */
+    l = p-s;
+    *p = '\0';
+
+    /* Reverse the string. */
+    p--;
+    while(s < p) {
+        aux = *s;
+        *s = *p;
+        *p = aux;
+        s++;
+        p--;
+    }
+    return l;
+}
+
+/* Identical sdsll2str(), but for unsigned long long type. */
+static int sdsull2str(char *s, unsigned long long v) {
+    char *p, aux;
+    size_t l;
+
+    /* Generate the string representation, this method produces
+     * an reversed string. */
+    p = s;
+    do {
+        *p++ = '0'+(v%10);
+        v /= 10;
+    } while(v);
+
+    /* Compute length and add null term. */
+    l = p-s;
+    *p = '\0';
+
+    /* Reverse the string. */
+    p--;
+    while(s < p) {
+        aux = *s;
+        *s = *p;
+        *p = aux;
+        s++;
+        p--;
+    }
+    return l;
+}
+
+/* Create an sds string from a long long value. It is much faster than:
+ *
+ * sdscatprintf(sdsempty(),"%lld\n", value);
+ */
+sds sdsfromlonglong(long long value) {
+    char buf[SDS_LLSTR_SIZE];
+    int len = sdsll2str(buf,value);
+
+    return sdsnewlen(buf,len);
+}
+
+/* Like sdscatprintf() but gets va_list instead of being variadic. */
+sds sdscatvprintf(sds s, const char *fmt, va_list ap) {
+    va_list cpy;
+    char staticbuf[1024], *buf = staticbuf, *t;
+    size_t buflen = strlen(fmt)*2;
+
+    /* We try to start using a static buffer for speed.
+     * If not possible we revert to heap allocation. */
+    if (buflen > sizeof(staticbuf)) {
+        buf = s_malloc(buflen);
+        if (buf == NULL) return NULL;
+    } else {
+        buflen = sizeof(staticbuf);
+    }
+
+    /* Try with buffers two times bigger every time we fail to
+     * fit the string in the current buffer size. */
+    while(1) {
+        buf[buflen-2] = '\0';
+        va_copy(cpy,ap);
+        vsnprintf(buf, buflen, fmt, cpy);
+        va_end(cpy);
+        if (buf[buflen-2] != '\0') {
+            if (buf != staticbuf) s_free(buf);
+            buflen *= 2;
+            buf = s_malloc(buflen);
+            if (buf == NULL) return NULL;
+            continue;
+        }
+        break;
+    }
+
+    /* Finally concat the obtained string to the SDS string and return it. */
+    t = sdscat(s, buf);
+    if (buf != staticbuf) s_free(buf);
+    return t;
+}
+
+/* Append to the sds string 's' a string obtained using printf-alike format
+ * specifier.
+ *
+ * After the call, the modified sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call.
+ *
+ * Example:
+ *
+ * s = sdsnew("Sum is: ");
+ * s = sdscatprintf(s,"%d+%d = %d",a,b,a+b).
+ *
+ * Often you need to create a string from scratch with the printf-alike
+ * format. When this is the need, just use sdsempty() as the target string:
+ *
+ * s = sdscatprintf(sdsempty(), "... your format ...", args);
+ */
+sds sdscatprintf(sds s, const char *fmt, ...) {
+    va_list ap;
+    char *t;
+    va_start(ap, fmt);
+    t = sdscatvprintf(s,fmt,ap);
+    va_end(ap);
+    return t;
+}
+
+/* This function is similar to sdscatprintf, but much faster as it does
+ * not rely on sprintf() family functions implemented by the libc that
+ * are often very slow. Moreover directly handling the sds string as
+ * new data is concatenated provides a performance improvement.
+ *
+ * However this function only handles an incompatible subset of printf-alike
+ * format specifiers:
+ *
+ * %s - C String
+ * %S - SDS string
+ * %i - signed int
+ * %I - 64 bit signed integer (long long, int64_t)
+ * %u - unsigned int
+ * %U - 64 bit unsigned integer (unsigned long long, uint64_t)
+ * %% - Verbatim "%" character.
+ */
+sds sdscatfmt(sds s, char const *fmt, ...) {
+    size_t initlen = sdslen(s);
+    const char *f = fmt;
+    int i;
+    va_list ap;
+
+    va_start(ap,fmt);
+    f = fmt;    /* Next format specifier byte to process. */
+    i = initlen; /* Position of the next byte to write to dest str. */
+    while(*f) {
+        char next, *str;
+        size_t l;
+        long long num;
+        unsigned long long unum;
+
+        /* Make sure there is always space for at least 1 char. */
+        if (sdsavail(s)==0) {
+            s = sdsMakeRoomFor(s,1);
+        }
+
+        switch(*f) {
+        case '%':
+            next = *(f+1);
+            f++;
+            switch(next) {
+            case 's':
+            case 'S':
+                str = va_arg(ap,char*);
+                l = (next == 's') ? strlen(str) : sdslen(str);
+                if (sdsavail(s) < l) {
+                    s = sdsMakeRoomFor(s,l);
+                }
+                memcpy(s+i,str,l);
+                sdsinclen(s,l);
+                i += l;
+                break;
+            case 'i':
+            case 'I':
+                if (next == 'i')
+                    num = va_arg(ap,int);
+                else
+                    num = va_arg(ap,long long);
+                {
+                    char buf[SDS_LLSTR_SIZE];
+                    l = sdsll2str(buf,num);
+                    if (sdsavail(s) < l) {
+                        s = sdsMakeRoomFor(s,l);
+                    }
+                    memcpy(s+i,buf,l);
+                    sdsinclen(s,l);
+                    i += l;
+                }
+                break;
+            case 'u':
+            case 'U':
+                if (next == 'u')
+                    unum = va_arg(ap,unsigned int);
+                else
+                    unum = va_arg(ap,unsigned long long);
+                {
+                    char buf[SDS_LLSTR_SIZE];
+                    l = sdsull2str(buf,unum);
+                    if (sdsavail(s) < l) {
+                        s = sdsMakeRoomFor(s,l);
+                    }
+                    memcpy(s+i,buf,l);
+                    sdsinclen(s,l);
+                    i += l;
+                }
+                break;
+            default: /* Handle %% and generally %<unknown>. */
+                s[i++] = next;
+                sdsinclen(s,1);
+                break;
+            }
+            break;
+        default:
+            s[i++] = *f;
+            sdsinclen(s,1);
+            break;
+        }
+        f++;
+    }
+    va_end(ap);
+
+    /* Add null-term */
+    s[i] = '\0';
+    return s;
+}
+
+/* Remove the part of the string from left and from right composed just of
+ * contiguous characters found in 'cset', that is a null terminted C string.
+ *
+ * After the call, the modified sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call.
+ *
+ * Example:
+ *
+ * s = sdsnew("AA...AA.a.aa.aHelloWorld     :::");
+ * s = sdstrim(s,"Aa. :");
+ * printf("%s\n", s);
+ *
+ * Output will be just "Hello World".
+ */
+sds sdstrim(sds s, const char *cset) {
+    char *start, *end, *sp, *ep;
+    size_t len;
+
+    sp = start = s;
+    ep = end = s+sdslen(s)-1;
+    while(sp <= end && strchr(cset, *sp)) sp++;
+    while(ep > sp && strchr(cset, *ep)) ep--;
+    len = (sp > ep) ? 0 : ((ep-sp)+1);
+    if (s != sp) memmove(s, sp, len);
+    s[len] = '\0';
+    sdssetlen(s,len);
+    return s;
+}
+
+/* Turn the string into a smaller (or equal) string containing only the
+ * substring specified by the 'start' and 'end' indexes.
+ *
+ * start and end can be negative, where -1 means the last character of the
+ * string, -2 the penultimate character, and so forth.
+ *
+ * The interval is inclusive, so the start and end characters will be part
+ * of the resulting string.
+ *
+ * The string is modified in-place.
+ *
+ * Example:
+ *
+ * s = sdsnew("Hello World");
+ * sdsrange(s,1,-1); => "ello World"
+ */
+void sdsrange(sds s, int start, int end) {
+    size_t newlen, len = sdslen(s);
+
+    if (len == 0) return;
+    if (start < 0) {
+        start = len+start;
+        if (start < 0) start = 0;
+    }
+    if (end < 0) {
+        end = len+end;
+        if (end < 0) end = 0;
+    }
+    newlen = (start > end) ? 0 : (end-start)+1;
+    if (newlen != 0) {
+        if (start >= (signed)len) {
+            newlen = 0;
+        } else if (end >= (signed)len) {
+            end = len-1;
+            newlen = (start > end) ? 0 : (end-start)+1;
+        }
+    } else {
+        start = 0;
+    }
+    if (start && newlen) memmove(s, s+start, newlen);
+    s[newlen] = 0;
+    sdssetlen(s,newlen);
+}
+
+/* Apply tolower() to every character of the sds string 's'. */
+void sdstolower(sds s) {
+    int len = sdslen(s), j;
+
+    for (j = 0; j < len; j++) s[j] = tolower(s[j]);
+}
+
+/* Apply toupper() to every character of the sds string 's'. */
+void sdstoupper(sds s) {
+    int len = sdslen(s), j;
+
+    for (j = 0; j < len; j++) s[j] = toupper(s[j]);
+}
+
+/* Compare two sds strings s1 and s2 with memcmp().
+ *
+ * Return value:
+ *
+ *     positive if s1 > s2.
+ *     negative if s1 < s2.
+ *     0 if s1 and s2 are exactly the same binary string.
+ *
+ * If two strings share exactly the same prefix, but one of the two has
+ * additional characters, the longer string is considered to be greater than
+ * the smaller one. */
+int sdscmp(const sds s1, const sds s2) {
+    size_t l1, l2, minlen;
+    int cmp;
+
+    l1 = sdslen(s1);
+    l2 = sdslen(s2);
+    minlen = (l1 < l2) ? l1 : l2;
+    cmp = memcmp(s1,s2,minlen);
+    if (cmp == 0) return l1-l2;
+    return cmp;
+}
+
+/* Split 's' with separator in 'sep'. An array
+ * of sds strings is returned. *count will be set
+ * by reference to the number of tokens returned.
+ *
+ * On out of memory, zero length string, zero length
+ * separator, NULL is returned.
+ *
+ * Note that 'sep' is able to split a string using
+ * a multi-character separator. For example
+ * sdssplit("foo_-_bar","_-_"); will return two
+ * elements "foo" and "bar".
+ *
+ * This version of the function is binary-safe but
+ * requires length arguments. sdssplit() is just the
+ * same function but for zero-terminated strings.
+ */
+sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count) {
+    int elements = 0, slots = 5, start = 0, j;
+    sds *tokens;
+
+    if (seplen < 1 || len < 0) return NULL;
+
+    tokens = s_malloc(sizeof(sds)*slots);
+    if (tokens == NULL) return NULL;
+
+    if (len == 0) {
+        *count = 0;
+        return tokens;
+    }
+    for (j = 0; j < (len-(seplen-1)); j++) {
+        /* make sure there is room for the next element and the final one */
+        if (slots < elements+2) {
+            sds *newtokens;
+
+            slots *= 2;
+            newtokens = s_realloc(tokens,sizeof(sds)*slots);
+            if (newtokens == NULL) goto cleanup;
+            tokens = newtokens;
+        }
+        /* search the separator */
+        if ((seplen == 1 && *(s+j) == sep[0]) || (memcmp(s+j,sep,seplen) == 0)) {
+            tokens[elements] = sdsnewlen(s+start,j-start);
+            if (tokens[elements] == NULL) goto cleanup;
+            elements++;
+            start = j+seplen;
+            j = j+seplen-1; /* skip the separator */
+        }
+    }
+    /* Add the final element. We are sure there is room in the tokens array. */
+    tokens[elements] = sdsnewlen(s+start,len-start);
+    if (tokens[elements] == NULL) goto cleanup;
+    elements++;
+    *count = elements;
+    return tokens;
+
+cleanup:
+    {
+        int i;
+        for (i = 0; i < elements; i++) sdsfree(tokens[i]);
+        s_free(tokens);
+        *count = 0;
+        return NULL;
+    }
+}
+
+/* Free the result returned by sdssplitlen(), or do nothing if 'tokens' is NULL. */
+void sdsfreesplitres(sds *tokens, int count) {
+    if (!tokens) return;
+    while(count--)
+        sdsfree(tokens[count]);
+    s_free(tokens);
+}
+
+/* Append to the sds string "s" an escaped string representation where
+ * all the non-printable characters (tested with isprint()) are turned into
+ * escapes in the form "\n\r\a...." or "\x<hex-number>".
+ *
+ * After the call, the modified sds string is no longer valid and all the
+ * references must be substituted with the new pointer returned by the call. */
+sds sdscatrepr(sds s, const char *p, size_t len) {
+    s = sdscatlen(s,"\"",1);
+    while(len--) {
+        switch(*p) {
+        case '\\':
+        case '"':
+            s = sdscatprintf(s,"\\%c",*p);
+            break;
+        case '\n': s = sdscatlen(s,"\\n",2); break;
+        case '\r': s = sdscatlen(s,"\\r",2); break;
+        case '\t': s = sdscatlen(s,"\\t",2); break;
+        case '\a': s = sdscatlen(s,"\\a",2); break;
+        case '\b': s = sdscatlen(s,"\\b",2); break;
+        default:
+            if (isprint(*p))
+                s = sdscatprintf(s,"%c",*p);
+            else
+                s = sdscatprintf(s,"\\x%02x",(unsigned char)*p);
+            break;
+        }
+        p++;
+    }
+    return sdscatlen(s,"\"",1);
+}
+
+/* Helper function for sdssplitargs() that returns non zero if 'c'
+ * is a valid hex digit. */
+static int is_hex_digit(char c) {
+    return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') ||
+           (c >= 'A' && c <= 'F');
+}
+
+/* Helper function for sdssplitargs() that converts a hex digit into an
+ * integer from 0 to 15 */
+static int hex_digit_to_int(char c) {
+    switch(c) {
+    case '0': return 0;
+    case '1': return 1;
+    case '2': return 2;
+    case '3': return 3;
+    case '4': return 4;
+    case '5': return 5;
+    case '6': return 6;
+    case '7': return 7;
+    case '8': return 8;
+    case '9': return 9;
+    case 'a': case 'A': return 10;
+    case 'b': case 'B': return 11;
+    case 'c': case 'C': return 12;
+    case 'd': case 'D': return 13;
+    case 'e': case 'E': return 14;
+    case 'f': case 'F': return 15;
+    default: return 0;
+    }
+}
+
+/* Split a line into arguments, where every argument can be in the
+ * following programming-language REPL-alike form:
+ *
+ * foo bar "newline are supported\n" and "\xff\x00otherstuff"
+ *
+ * The number of arguments is stored into *argc, and an array
+ * of sds is returned.
+ *
+ * The caller should free the resulting array of sds strings with
+ * sdsfreesplitres().
+ *
+ * Note that sdscatrepr() is able to convert back a string into
+ * a quoted string in the same format sdssplitargs() is able to parse.
+ *
+ * The function returns the allocated tokens on success, even when the
+ * input string is empty, or NULL if the input contains unbalanced
+ * quotes or closed quotes followed by non space characters
+ * as in: "foo"bar or "foo'
+ */
+sds *sdssplitargs(const char *line, int *argc) {
+    const char *p = line;
+    char *current = NULL;
+    char **vector = NULL;
+
+    *argc = 0;
+    while(1) {
+        /* skip blanks */
+        while(*p && isspace(*p)) p++;
+        if (*p) {
+            /* get a token */
+            int inq=0;  /* set to 1 if we are in "quotes" */
+            int insq=0; /* set to 1 if we are in 'single quotes' */
+            int done=0;
+
+            if (current == NULL) current = sdsempty();
+            while(!done) {
+                if (inq) {
+                    if (*p == '\\' && *(p+1) == 'x' &&
+                                             is_hex_digit(*(p+2)) &&
+                                             is_hex_digit(*(p+3)))
+                    {
+                        unsigned char byte;
+
+                        byte = (hex_digit_to_int(*(p+2))*16)+
+                                hex_digit_to_int(*(p+3));
+                        current = sdscatlen(current,(char*)&byte,1);
+                        p += 3;
+                    } else if (*p == '\\' && *(p+1)) {
+                        char c;
+
+                        p++;
+                        switch(*p) {
+                        case 'n': c = '\n'; break;
+                        case 'r': c = '\r'; break;
+                        case 't': c = '\t'; break;
+                        case 'b': c = '\b'; break;
+                        case 'a': c = '\a'; break;
+                        default: c = *p; break;
+                        }
+                        current = sdscatlen(current,&c,1);
+                    } else if (*p == '"') {
+                        /* closing quote must be followed by a space or
+                         * nothing at all. */
+                        if (*(p+1) && !isspace(*(p+1))) goto err;
+                        done=1;
+                    } else if (!*p) {
+                        /* unterminated quotes */
+                        goto err;
+                    } else {
+                        current = sdscatlen(current,p,1);
+                    }
+                } else if (insq) {
+                    if (*p == '\\' && *(p+1) == '\'') {
+                        p++;
+                        current = sdscatlen(current,"'",1);
+                    } else if (*p == '\'') {
+                        /* closing quote must be followed by a space or
+                         * nothing at all. */
+                        if (*(p+1) && !isspace(*(p+1))) goto err;
+                        done=1;
+                    } else if (!*p) {
+                        /* unterminated quotes */
+                        goto err;
+                    } else {
+                        current = sdscatlen(current,p,1);
+                    }
+                } else {
+                    switch(*p) {
+                    case ' ':
+                    case '\n':
+                    case '\r':
+                    case '\t':
+                    case '\0':
+                        done=1;
+                        break;
+                    case '"':
+                        inq=1;
+                        break;
+                    case '\'':
+                        insq=1;
+                        break;
+                    default:
+                        current = sdscatlen(current,p,1);
+                        break;
+                    }
+                }
+                if (*p) p++;
+            }
+            /* add the token to the vector */
+            vector = s_realloc(vector,((*argc)+1)*sizeof(char*));
+            vector[*argc] = current;
+            (*argc)++;
+            current = NULL;
+        } else {
+            /* Even on empty input string return something not NULL. */
+            if (vector == NULL) vector = s_malloc(sizeof(void*));
+            return vector;
+        }
+    }
+
+err:
+    while((*argc)--)
+        sdsfree(vector[*argc]);
+    s_free(vector);
+    if (current) sdsfree(current);
+    *argc = 0;
+    return NULL;
+}
+
+/* Modify the string substituting all the occurrences of the set of
+ * characters specified in the 'from' string to the corresponding character
+ * in the 'to' array.
+ *
+ * For instance: sdsmapchars(mystring, "ho", "01", 2)
+ * will have the effect of turning the string "hello" into "0ell1".
+ *
+ * The function returns the sds string pointer, that is always the same
+ * as the input pointer since no resize is needed. */
+sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen) {
+    size_t j, i, l = sdslen(s);
+
+    for (j = 0; j < l; j++) {
+        for (i = 0; i < setlen; i++) {
+            if (s[j] == from[i]) {
+                s[j] = to[i];
+                break;
+            }
+        }
+    }
+    return s;
+}
+
+/* Join an array of C strings using the specified separator (also a C string).
+ * Returns the result as an sds string. */
+sds sdsjoin(char **argv, int argc, char *sep) {
+    sds join = sdsempty();
+    int j;
+
+    for (j = 0; j < argc; j++) {
+        join = sdscat(join, argv[j]);
+        if (j != argc-1) join = sdscat(join,sep);
+    }
+    return join;
+}
+
+/* Like sdsjoin, but joins an array of SDS strings. */
+sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen) {
+    sds join = sdsempty();
+    int j;
+
+    for (j = 0; j < argc; j++) {
+        join = sdscatsds(join, argv[j]);
+        if (j != argc-1) join = sdscatlen(join,sep,seplen);
+    }
+    return join;
+}
+
+#if defined(SDS_TEST_MAIN)
+#include <stdio.h>
+#include "testhelp.h"
+#include "limits.h"
+
+#define UNUSED(x) (void)(x)
+int sdsTest(void) {
+    {
+        sds x = sdsnew("foo"), y;
+
+        test_cond("Create a string and obtain the length",
+            sdslen(x) == 3 && memcmp(x,"foo\0",4) == 0)
+
+        sdsfree(x);
+        x = sdsnewlen("foo",2);
+        test_cond("Create a string with specified length",
+            sdslen(x) == 2 && memcmp(x,"fo\0",3) == 0)
+
+        x = sdscat(x,"bar");
+        test_cond("Strings concatenation",
+            sdslen(x) == 5 && memcmp(x,"fobar\0",6) == 0);
+
+        x = sdscpy(x,"a");
+        test_cond("sdscpy() against an originally longer string",
+            sdslen(x) == 1 && memcmp(x,"a\0",2) == 0)
+
+        x = sdscpy(x,"xyzxxxxxxxxxxyyyyyyyyyykkkkkkkkkk");
+        test_cond("sdscpy() against an originally shorter string",
+            sdslen(x) == 33 &&
+            memcmp(x,"xyzxxxxxxxxxxyyyyyyyyyykkkkkkkkkk\0",33) == 0)
+
+        sdsfree(x);
+        x = sdscatprintf(sdsempty(),"%d",123);
+        test_cond("sdscatprintf() seems working in the base case",
+            sdslen(x) == 3 && memcmp(x,"123\0",4) == 0)
+
+        sdsfree(x);
+        x = sdsnew("--");
+        x = sdscatfmt(x, "Hello %s World %I,%I--", "Hi!", LLONG_MIN,LLONG_MAX);
+        test_cond("sdscatfmt() seems working in the base case",
+            sdslen(x) == 60 &&
+            memcmp(x,"--Hello Hi! World -9223372036854775808,"
+                     "9223372036854775807--",60) == 0)
+        printf("[%s]\n",x);
+
+        sdsfree(x);
+        x = sdsnew("--");
+        x = sdscatfmt(x, "%u,%U--", UINT_MAX, ULLONG_MAX);
+        test_cond("sdscatfmt() seems working with unsigned numbers",
+            sdslen(x) == 35 &&
+            memcmp(x,"--4294967295,18446744073709551615--",35) == 0)
+
+        sdsfree(x);
+        x = sdsnew(" x ");
+        sdstrim(x," x");
+        test_cond("sdstrim() works when all chars match",
+            sdslen(x) == 0)
+
+        sdsfree(x);
+        x = sdsnew(" x ");
+        sdstrim(x," ");
+        test_cond("sdstrim() works when a single char remains",
+            sdslen(x) == 1 && x[0] == 'x')
+
+        sdsfree(x);
+        x = sdsnew("xxciaoyyy");
+        sdstrim(x,"xy");
+        test_cond("sdstrim() correctly trims characters",
+            sdslen(x) == 4 && memcmp(x,"ciao\0",5) == 0)
+
+        y = sdsdup(x);
+        sdsrange(y,1,1);
+        test_cond("sdsrange(...,1,1)",
+            sdslen(y) == 1 && memcmp(y,"i\0",2) == 0)
+
+        sdsfree(y);
+        y = sdsdup(x);
+        sdsrange(y,1,-1);
+        test_cond("sdsrange(...,1,-1)",
+            sdslen(y) == 3 && memcmp(y,"iao\0",4) == 0)
+
+        sdsfree(y);
+        y = sdsdup(x);
+        sdsrange(y,-2,-1);
+        test_cond("sdsrange(...,-2,-1)",
+            sdslen(y) == 2 && memcmp(y,"ao\0",3) == 0)
+
+        sdsfree(y);
+        y = sdsdup(x);
+        sdsrange(y,2,1);
+        test_cond("sdsrange(...,2,1)",
+            sdslen(y) == 0 && memcmp(y,"\0",1) == 0)
+
+        sdsfree(y);
+        y = sdsdup(x);
+        sdsrange(y,1,100);
+        test_cond("sdsrange(...,1,100)",
+            sdslen(y) == 3 && memcmp(y,"iao\0",4) == 0)
+
+        sdsfree(y);
+        y = sdsdup(x);
+        sdsrange(y,100,100);
+        test_cond("sdsrange(...,100,100)",
+            sdslen(y) == 0 && memcmp(y,"\0",1) == 0)
+
+        sdsfree(y);
+        sdsfree(x);
+        x = sdsnew("foo");
+        y = sdsnew("foa");
+        test_cond("sdscmp(foo,foa)", sdscmp(x,y) > 0)
+
+        sdsfree(y);
+        sdsfree(x);
+        x = sdsnew("bar");
+        y = sdsnew("bar");
+        test_cond("sdscmp(bar,bar)", sdscmp(x,y) == 0)
+
+        sdsfree(y);
+        sdsfree(x);
+        x = sdsnew("aar");
+        y = sdsnew("bar");
+        test_cond("sdscmp(bar,bar)", sdscmp(x,y) < 0)
+
+        sdsfree(y);
+        sdsfree(x);
+        x = sdsnewlen("\a\n\0foo\r",7);
+        y = sdscatrepr(sdsempty(),x,sdslen(x));
+        test_cond("sdscatrepr(...data...)",
+            memcmp(y,"\"\\a\\n\\x00foo\\r\"",15) == 0)
+
+        {
+            unsigned int oldfree;
+            char *p;
+            int step = 10, j, i;
+
+            sdsfree(x);
+            sdsfree(y);
+            x = sdsnew("0");
+            test_cond("sdsnew() free/len buffers", sdslen(x) == 1 && sdsavail(x) == 0);
+
+            /* Run the test a few times in order to hit the first two
+             * SDS header types. */
+            for (i = 0; i < 10; i++) {
+                int oldlen = sdslen(x);
+                x = sdsMakeRoomFor(x,step);
+                int type = x[-1]&SDS_TYPE_MASK;
+
+                test_cond("sdsMakeRoomFor() len", sdslen(x) == oldlen);
+                if (type != SDS_TYPE_5) {
+                    test_cond("sdsMakeRoomFor() free", sdsavail(x) >= step);
+                    oldfree = sdsavail(x);
+                }
+                p = x+oldlen;
+                for (j = 0; j < step; j++) {
+                    p[j] = 'A'+j;
+                }
+                sdsIncrLen(x,step);
+            }
+            test_cond("sdsMakeRoomFor() content",
+                memcmp("0ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ",x,101) == 0);
+            test_cond("sdsMakeRoomFor() final length",sdslen(x)==101);
+
+            sdsfree(x);
+        }
+    }
+    test_report()
+    return 0;
+}
+#endif
+
+#ifdef SDS_TEST_MAIN
+int main(void) {
+    return sdsTest();
+}
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sdsalloc.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sdsalloc.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/dep/extern/sdsalloc.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,41 @@
+/* SDSLib 2.0 -- A C dynamic strings library
+ *
+ * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2015, Redis Labs, Inc
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   * Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *   * Neither the name of Redis nor the names of its contributors may be used
+ *     to endorse or promote products derived from this software without
+ *     specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* SDS allocator selection.
+ *
+ * This file is used in order to change the SDS allocator at compile time.
+ * Just define the following defines to what you want to use. Also add
+ * the include of your alternate allocator if needed (not needed in order
+ * to use the default libc allocator). */
+
+#define s_malloc malloc
+#define s_realloc realloc
+#define s_free free

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/buffer.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/buffer.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/buffer.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,52 @@
+#ifndef CARYLL_INCLUDE_BUFFER_H
+#define CARYLL_INCLUDE_BUFFER_H
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdarg.h>
+#include "dep/sds.h"
+
+typedef struct caryll_Buffer {
+	size_t cursor;
+	size_t size;
+	size_t free;
+	uint8_t *data;
+} caryll_Buffer;
+
+caryll_Buffer *bufnew(void);
+caryll_Buffer *bufninit(uint32_t n, ...);
+void buffree(caryll_Buffer *buf);
+size_t buflen(caryll_Buffer *buf);
+size_t bufpos(caryll_Buffer *buf);
+void bufseek(caryll_Buffer *buf, size_t pos);
+void bufclear(caryll_Buffer *buf);
+
+void bufwrite8(caryll_Buffer *buf, uint8_t byte);
+void bufwrite16l(caryll_Buffer *buf, uint16_t x);
+void bufwrite16b(caryll_Buffer *buf, uint16_t x);
+void bufwrite24l(caryll_Buffer *buf, uint32_t x);
+void bufwrite24b(caryll_Buffer *buf, uint32_t x);
+void bufwrite32l(caryll_Buffer *buf, uint32_t x);
+void bufwrite32b(caryll_Buffer *buf, uint32_t x);
+void bufwrite64l(caryll_Buffer *buf, uint64_t x);
+void bufwrite64b(caryll_Buffer *buf, uint64_t x);
+
+void bufnwrite8(caryll_Buffer *buf, uint32_t n, ...);
+
+void bufwrite_sds(caryll_Buffer *buf, sds str);
+void bufwrite_str(caryll_Buffer *buf, const char *str);
+void bufwrite_bytes(caryll_Buffer *buf, size_t size, const uint8_t *str);
+void bufwrite_buf(caryll_Buffer *buf, caryll_Buffer *that);
+void bufwrite_bufdel(caryll_Buffer *buf, caryll_Buffer *that);
+
+void bufping16b(caryll_Buffer *buf, size_t *offset, size_t *cp);
+void bufping16bd(caryll_Buffer *buf, size_t *offset, size_t *shift, size_t *cp);
+void bufpingpong16b(caryll_Buffer *buf, caryll_Buffer *that, size_t *offset, size_t *cp);
+void bufpong(caryll_Buffer *buf, size_t *offset, size_t *cp);
+
+void bufprint(caryll_Buffer *buf);
+
+void buflongalign(caryll_Buffer *buf);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/element.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/element.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/element.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,67 @@
+#ifndef CARYLL_INCLUDE_ELEMENT_H
+#define CARYLL_INCLUDE_ELEMENT_H
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include "ownership.h"
+
+// We assume all T have trivial move constructors.
+#define caryll_T(T)                                                                                \
+	void (*init)(MODIFY T *);                                                                      \
+	void (*copy)(MODIFY T *, const T *);                                                           \
+	void (*move)(MODIFY T *, T *);                                                                 \
+	void (*dispose)(MOVE T *);                                                                     \
+	void (*replace)(MODIFY T *, MOVE const T);                                                     \
+	void (*copyReplace)(MODIFY T *, const T);
+
+#define caryll_VT(T)                                                                               \
+	caryll_T(T);                                                                                   \
+	T (*empty)();                                                                                  \
+	T (*dup)(const T);
+#define caryll_RT(T)                                                                               \
+	caryll_T(T);                                                                                   \
+	T *(*create)();                                                                                \
+	void (*free)(MOVE T *);
+
+#define caryll_ElementInterfaceOf(T) const struct __caryll_elementinterface_##T
+#define caryll_ElementInterface(T)                                                                 \
+	caryll_ElementInterfaceOf(T) {                                                                 \
+		caryll_T(T);                                                                               \
+	}
+#define caryll_RefElementInterface(T)                                                              \
+	caryll_ElementInterfaceOf(T) {                                                                 \
+		caryll_RT(T);                                                                              \
+	}
+#define caryll_ValElementInterface(T)                                                              \
+	caryll_ElementInterfaceOf(T) {                                                                 \
+		caryll_VT(T);                                                                              \
+	}
+
+/// Individual traits
+
+#define caryll_Show(T) void (*show)(const T);
+#define caryll_Eq(T) bool (*equal)(const T, const T);
+#define caryll_Ord(T)                                                                              \
+	caryll_Eq(T);                                                                                  \
+	int (*compare)(const T a, const T b);                                                          \
+	int (*compareRef)(const T *a, const T *b);
+#define caryll_Monoid(T)                                                                           \
+	T (*neutral)();                                                                                \
+	T (*plus)(const T a, const T b);                                                               \
+	void (*inplacePlus)(MODIFY T * a, const T b);
+#define caryll_Group(T)                                                                            \
+	caryll_Monoid(T);                                                                              \
+	void (*inplaceNegate)(MODIFY T * a);                                                           \
+	T (*negate)(const T);                                                                          \
+	void (*inplaceMinus)(MODIFY T *, const T);                                                     \
+	T (*minus)(const T, const T);
+#define caryll_Module(T, TScale)                                                                   \
+	caryll_Group(T);                                                                               \
+	void (*inplaceScale)(MODIFY T * a, TScale b);                                                  \
+	void (*inplacePlusScale)(MODIFY T * a, TScale b, const T c);                                   \
+	T (*scale)(const T a, TScale b);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/ownership.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/ownership.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/ownership.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,11 @@
+#ifndef CARYLL_INCLUDE_OWNERSHIP_H
+#define CARYLL_INCLUDE_OWNERSHIP_H
+
+#define OWNING /*owning*/
+#define MOVE   /*move*/
+#define OBSERVE /*shared*/ const
+#define MODIFY /*modify*/
+#define COPY   /*shared*/
+#define OUT    /*shared*/
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/vector.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/vector.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/caryll/vector.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,38 @@
+#ifndef CARYLL_INCLUDE_VECTOR_H
+#define CARYLL_INCLUDE_VECTOR_H
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include "element.h"
+
+// We assume all T have trivial move constructors.
+#define caryll_Vector(T)                                                                           \
+	struct {                                                                                       \
+		size_t length;                                                                             \
+		size_t capacity;                                                                           \
+		T *items;                                                                                  \
+	}
+#define caryll_VectorInterfaceTypeName(__TV) const struct __caryll_vectorinterface_##__TV
+#define caryll_VectorInterfaceTrait(__TV, __T)                                                     \
+	caryll_RT(__TV);                                                                               \
+	void (*initN)(MODIFY __TV * arr, size_t n);                                                    \
+	void (*initCapN)(MODIFY __TV * arr, size_t n);                                                 \
+	__TV *(*createN)(size_t n);                                                                    \
+	void (*fill)(MODIFY __TV * arr, size_t n);                                                     \
+	void (*clear)(MODIFY __TV * arr);                                                              \
+	void (*push)(MODIFY __TV * arr, MOVE __T obj);                                                 \
+	void (*shrinkToFit)(MODIFY __TV * arr);                                                        \
+	__T (*pop)(MODIFY __TV * arr);                                                                 \
+	void (*disposeItem)(MODIFY __TV * arr, size_t n);                                              \
+	void (*filterEnv)(MODIFY __TV * arr, bool (*fn)(const __T *x, void *env), void *env);          \
+	void (*sort)(MODIFY __TV * arr, int (*fn)(const __T *a, const __T *b));
+
+#define caryll_VectorInterface(__TV, __T)                                                          \
+	caryll_VectorInterfaceTypeName(__TV) {                                                         \
+		caryll_VectorInterfaceTrait(__TV, __T);                                                    \
+	}
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json-builder.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json-builder.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json-builder.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,139 @@
+
+/* vim: set et ts=3 sw=3 sts=3 ft=c:
+ *
+ * Copyright (C) 2014 James McLaughlin.  All rights reserved.
+ * https://github.com/udp/json-builder
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _JSON_BUILDER_H
+#define _JSON_BUILDER_H
+
+/* Requires json.h from json-parser
+ * https://github.com/udp/json-parser
+ */
+#include "json.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* IMPORTANT NOTE:  If you want to use json-builder functions with values
+ * allocated by json-parser as part of the parsing process, you must pass
+ * json_builder_extra as the value_extra setting in json_settings when
+ * parsing.  Otherwise there will not be room for the extra state and
+ * json-builder WILL invoke undefined behaviour.
+ *
+ * Also note that unlike json-parser, json-builder does not currently support
+ * custom allocators (for no particular reason other than that it doesn't have
+ * any settings or global state.)
+ */
+extern const size_t json_builder_extra;
+
+/*** Arrays
+ ***
+ * Note that all of these length arguments are just a hint to allow for
+ * pre-allocation - passing 0 is fine.
+ */
+json_value *json_array_new(size_t length);
+json_value *json_array_push(json_value *array, json_value *);
+
+/*** Objects
+ ***/
+json_value *json_object_new(size_t length);
+
+json_value *json_object_push(json_value *object, const json_char *name, json_value *);
+
+/* Same as json_object_push, but doesn't call strlen() for you.
+ */
+json_value *json_object_push_length(json_value *object, unsigned int name_length, const json_char *name, json_value *);
+
+/* Same as json_object_push_length, but doesn't copy the name buffer before
+ * storing it in the value.  Use this micro-optimisation at your own risk.
+ */
+json_value *json_object_push_nocopy(json_value *object, unsigned int name_length, json_char *name, json_value *);
+
+/* Merges all entries from objectB into objectA and frees objectB.
+ */
+json_value *json_object_merge(json_value *objectA, json_value *objectB);
+
+/* Sort the entries of an object based on the order in a prototype object.
+ * Helpful when reading JSON and writing it again to preserve user order.
+ */
+void json_object_sort(json_value *object, json_value *proto);
+
+/*** Strings
+ ***/
+json_value *json_string_new(const json_char *);
+json_value *json_string_new_length(unsigned int length, const json_char *);
+json_value *json_string_new_nocopy(unsigned int length, json_char *);
+
+/*** Everything else
+ ***/
+json_value *json_integer_new(json_int_t);
+json_value *json_double_new(double);
+json_value *json_boolean_new(int);
+json_value *json_null_new(void);
+
+/*** Serializing
+ ***/
+#define json_serialize_mode_multiline 0
+#define json_serialize_mode_single_line 1
+#define json_serialize_mode_packed 2
+
+#define json_serialize_opt_CRLF (1 << 1)
+#define json_serialize_opt_pack_brackets (1 << 2)
+#define json_serialize_opt_no_space_after_comma (1 << 3)
+#define json_serialize_opt_no_space_after_colon (1 << 4)
+#define json_serialize_opt_use_tabs (1 << 5)
+
+typedef struct json_serialize_opts {
+	int mode;
+	int opts;
+	int indent_size;
+
+} json_serialize_opts;
+
+/* Returns a length in characters that is at least large enough to hold the
+ * value in its serialized form, including a null terminator.
+ */
+size_t json_measure(json_value *);
+size_t json_measure_ex(json_value *, json_serialize_opts);
+
+/* Serializes a JSON value into the buffer given (which must already be
+ * allocated with a length of at least json_measure(value, opts))
+ */
+void json_serialize(json_char *buf, json_value *);
+void json_serialize_ex(json_char *buf, json_value *, json_serialize_opts);
+
+/*** Cleaning up
+ ***/
+void json_builder_free(json_value *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/json.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,291 @@
+
+/* vim: set et ts=3 sw=3 sts=3 ft=c:
+ *
+ * Copyright (C) 2012, 2013, 2014 James McLaughlin et al.  All rights reserved.
+ * https://github.com/udp/json-parser
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _JSON_H
+#define _JSON_H
+
+#ifndef json_char
+   #define json_char char
+#endif
+
+#ifdef _CARYLL_USE_PRE_SERIALIZED
+   #define CARYLL_USE_PRE_SERIALIZED
+#endif
+
+#ifndef json_int_t
+   #include <stdint.h>
+   #ifndef _MSC_VER
+      #include <inttypes.h>
+      #define json_int_t int64_t
+   #else
+      #define json_int_t __int64
+   #endif
+#endif
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+
+   #include <string.h>
+
+   extern "C"
+   {
+
+#endif
+
+typedef struct
+{
+   unsigned long max_memory;
+   int settings;
+
+   /* Custom allocator support (leave null to use malloc/free)
+    */
+
+   void * (* mem_alloc) (size_t, int zero, void * user_data);
+   void (* mem_free) (void *, void * user_data);
+
+   void * user_data;  /* will be passed to mem_alloc and mem_free */
+
+   size_t value_extra;  /* how much extra space to allocate for values? */
+
+} json_settings;
+
+#define json_enable_comments  0x01
+
+typedef enum
+{
+   json_none,
+   json_object,
+   json_array,
+   json_integer,
+   json_double,
+   json_string,
+   json_boolean,
+   json_null
+#ifdef CARYLL_USE_PRE_SERIALIZED
+,
+   json_pre_serialized
+#endif
+} json_type;
+
+extern const struct _json_value json_value_none;
+       
+typedef struct _json_object_entry
+{
+    json_char * name;
+    unsigned int name_length;
+    
+    struct _json_value * value;
+    
+} json_object_entry;
+
+typedef struct _json_value
+{
+   struct _json_value * parent;
+
+   json_type type;
+
+   union
+   {
+      int boolean;
+      json_int_t integer;
+      double dbl;
+
+      struct
+      {
+         unsigned int length;
+         json_char * ptr; /* null terminated */
+
+      } string;
+
+      struct
+      {
+         unsigned int length;
+
+         json_object_entry * values;
+
+         #if defined(__cplusplus) && __cplusplus >= 201103L
+         decltype(values) begin () const
+         {  return values;
+         }
+         decltype(values) end () const
+         {  return values + length;
+         }
+         #endif
+
+      } object;
+
+      struct
+      {
+         unsigned int length;
+         struct _json_value ** values;
+
+         #if defined(__cplusplus) && __cplusplus >= 201103L
+         decltype(values) begin () const
+         {  return values;
+         }
+         decltype(values) end () const
+         {  return values + length;
+         }
+         #endif
+
+      } array;
+
+   } u;
+
+   union
+   {
+      struct _json_value * next_alloc;
+      void * object_mem;
+
+   } _reserved;
+
+   #ifdef JSON_TRACK_SOURCE
+
+      /* Location of the value in the source JSON
+       */
+      unsigned int line, col;
+
+   #endif
+
+
+   /* Some C++ operator sugar */
+
+   #ifdef __cplusplus
+
+      public:
+
+         inline _json_value ()
+         {  memset (this, 0, sizeof (_json_value));
+         }
+
+         inline const struct _json_value &operator [] (int index) const
+         {
+            if (type != json_array || index < 0
+                     || ((unsigned int) index) >= u.array.length)
+            {
+               return json_value_none;
+            }
+
+            return *u.array.values [index];
+         }
+
+         inline const struct _json_value &operator [] (const char * index) const
+         { 
+            if (type != json_object)
+               return json_value_none;
+
+            for (unsigned int i = 0; i < u.object.length; ++ i)
+               if (!strcmp (u.object.values [i].name, index))
+                  return *u.object.values [i].value;
+
+            return json_value_none;
+         }
+
+         inline operator const char * () const
+         {  
+            switch (type)
+            {
+               case json_string:
+                  return u.string.ptr;
+
+               default:
+                  return "";
+            };
+         }
+
+         inline operator json_int_t () const
+         {  
+            switch (type)
+            {
+               case json_integer:
+                  return u.integer;
+
+               case json_double:
+                  return (json_int_t) u.dbl;
+
+               default:
+                  return 0;
+            };
+         }
+
+         inline operator bool () const
+         {  
+            if (type != json_boolean)
+               return false;
+
+            return u.boolean != 0;
+         }
+
+         inline operator double () const
+         {  
+            switch (type)
+            {
+               case json_integer:
+                  return (double) u.integer;
+
+               case json_double:
+                  return u.dbl;
+
+               default:
+                  return 0;
+            };
+         }
+
+   #endif
+
+} json_value;
+       
+json_value * json_parse (const json_char * json,
+                         size_t length);
+
+#define json_error_max 128
+json_value * json_parse_ex (json_settings * settings,
+                            const json_char * json,
+                            size_t length,
+                            char * error);
+
+void json_value_free (json_value *);
+
+
+/* Not usually necessary, unless you used a custom mem_alloc and now want to
+ * use a custom mem_free.
+ */
+void json_value_free_ex (json_settings * settings,
+                         json_value *);
+
+
+#ifdef __cplusplus
+   } /* extern "C" */
+#endif
+
+#endif
+
+

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/sds.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/sds.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/sds.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,259 @@
+/* SDSLib 2.0 -- A C dynamic strings library
+ *
+ * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2015, Redis Labs, Inc
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   * Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *   * Neither the name of Redis nor the names of its contributors may be used
+ *     to endorse or promote products derived from this software without
+ *     specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __SDS_H
+#define __SDS_H
+
+#define SDS_MAX_PREALLOC (1024 * 1024)
+
+#include <sys/types.h>
+#include <stdarg.h>
+#include <stdint.h>
+
+typedef char *sds;
+
+/* Note: sdshdr5 is never used, we just access the flags byte directly.
+ * However is here to document the layout of type 5 SDS strings. */
+struct __attribute__((__packed__)) sdshdr5 {
+	unsigned char flags; /* 3 lsb of type, and 5 msb of string length */
+	char buf[];
+};
+struct __attribute__((__packed__)) sdshdr8 {
+	uint8_t len;         /* used */
+	uint8_t alloc;       /* excluding the header and null terminator */
+	unsigned char flags; /* 3 lsb of type, 5 unused bits */
+	char buf[];
+};
+struct __attribute__((__packed__)) sdshdr16 {
+	uint16_t len;        /* used */
+	uint16_t alloc;      /* excluding the header and null terminator */
+	unsigned char flags; /* 3 lsb of type, 5 unused bits */
+	char buf[];
+};
+struct __attribute__((__packed__)) sdshdr32 {
+	uint32_t len;        /* used */
+	uint32_t alloc;      /* excluding the header and null terminator */
+	unsigned char flags; /* 3 lsb of type, 5 unused bits */
+	char buf[];
+};
+struct __attribute__((__packed__)) sdshdr64 {
+	uint64_t len;        /* used */
+	uint64_t alloc;      /* excluding the header and null terminator */
+	unsigned char flags; /* 3 lsb of type, 5 unused bits */
+	char buf[];
+};
+
+#define SDS_TYPE_5 0
+#define SDS_TYPE_8 1
+#define SDS_TYPE_16 2
+#define SDS_TYPE_32 3
+#define SDS_TYPE_64 4
+#define SDS_TYPE_MASK 7
+#define SDS_TYPE_BITS 3
+#define SDS_HDR_VAR(T, s) struct sdshdr##T *sh = (void *)((s) - (sizeof(struct sdshdr##T)));
+#define SDS_HDR(T, s) ((struct sdshdr##T *)((s) - (sizeof(struct sdshdr##T))))
+#define SDS_TYPE_5_LEN(f) ((f) >> SDS_TYPE_BITS)
+
+static inline size_t sdslen(const sds s) {
+	unsigned char flags = s[-1];
+	switch (flags & SDS_TYPE_MASK) {
+		case SDS_TYPE_5:
+			return SDS_TYPE_5_LEN(flags);
+		case SDS_TYPE_8:
+			return SDS_HDR(8, s)->len;
+		case SDS_TYPE_16:
+			return SDS_HDR(16, s)->len;
+		case SDS_TYPE_32:
+			return SDS_HDR(32, s)->len;
+		case SDS_TYPE_64:
+			return SDS_HDR(64, s)->len;
+	}
+	return 0;
+}
+
+static inline size_t sdsavail(const sds s) {
+	unsigned char flags = s[-1];
+	switch (flags & SDS_TYPE_MASK) {
+		case SDS_TYPE_5: {
+			return 0;
+		}
+		case SDS_TYPE_8: {
+			SDS_HDR_VAR(8, s);
+			return sh->alloc - sh->len;
+		}
+		case SDS_TYPE_16: {
+			SDS_HDR_VAR(16, s);
+			return sh->alloc - sh->len;
+		}
+		case SDS_TYPE_32: {
+			SDS_HDR_VAR(32, s);
+			return sh->alloc - sh->len;
+		}
+		case SDS_TYPE_64: {
+			SDS_HDR_VAR(64, s);
+			return sh->alloc - sh->len;
+		}
+	}
+	return 0;
+}
+
+static inline void sdssetlen(sds s, size_t newlen) {
+	unsigned char flags = s[-1];
+	switch (flags & SDS_TYPE_MASK) {
+		case SDS_TYPE_5: {
+			unsigned char *fp = ((unsigned char *)s) - 1;
+			*fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS);
+		} break;
+		case SDS_TYPE_8:
+			SDS_HDR(8, s)->len = (uint8_t)newlen;
+			break;
+		case SDS_TYPE_16:
+			SDS_HDR(16, s)->len = (uint16_t)newlen;
+			break;
+		case SDS_TYPE_32:
+			SDS_HDR(32, s)->len = (uint32_t)newlen;
+			break;
+		case SDS_TYPE_64:
+			SDS_HDR(64, s)->len = newlen;
+			break;
+	}
+}
+
+static inline void sdsinclen(sds s, size_t inc) {
+	unsigned char flags = s[-1];
+	switch (flags & SDS_TYPE_MASK) {
+		case SDS_TYPE_5: {
+			unsigned char *fp = ((unsigned char *)s) - 1;
+			unsigned char newlen = SDS_TYPE_5_LEN(flags) + inc;
+			*fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS);
+		} break;
+		case SDS_TYPE_8:
+			SDS_HDR(8, s)->len += (uint8_t)inc;
+			break;
+		case SDS_TYPE_16:
+			SDS_HDR(16, s)->len += (uint16_t)inc;
+			break;
+		case SDS_TYPE_32:
+			SDS_HDR(32, s)->len += (uint32_t)inc;
+			break;
+		case SDS_TYPE_64:
+			SDS_HDR(64, s)->len += inc;
+			break;
+	}
+}
+
+/* sdsalloc() = sdsavail() + sdslen() */
+static inline size_t sdsalloc(const sds s) {
+	unsigned char flags = s[-1];
+	switch (flags & SDS_TYPE_MASK) {
+		case SDS_TYPE_5:
+			return SDS_TYPE_5_LEN(flags);
+		case SDS_TYPE_8:
+			return SDS_HDR(8, s)->alloc;
+		case SDS_TYPE_16:
+			return SDS_HDR(16, s)->alloc;
+		case SDS_TYPE_32:
+			return SDS_HDR(32, s)->alloc;
+		case SDS_TYPE_64:
+			return SDS_HDR(64, s)->alloc;
+	}
+	return 0;
+}
+
+static inline void sdssetalloc(sds s, size_t newlen) {
+	unsigned char flags = s[-1];
+	switch (flags & SDS_TYPE_MASK) {
+		case SDS_TYPE_5:
+			/* Nothing to do, this type has no total allocation info. */
+			break;
+		case SDS_TYPE_8:
+			SDS_HDR(8, s)->alloc = (uint8_t)newlen;
+			break;
+		case SDS_TYPE_16:
+			SDS_HDR(16, s)->alloc = (uint16_t)newlen;
+			break;
+		case SDS_TYPE_32:
+			SDS_HDR(32, s)->alloc = (uint32_t)newlen;
+			break;
+		case SDS_TYPE_64:
+			SDS_HDR(64, s)->alloc = newlen;
+			break;
+	}
+}
+
+sds sdsnewlen(const void *init, size_t initlen);
+sds sdsnew(const char *init);
+sds sdsempty(void);
+sds sdsdup(const sds s);
+void sdsfree(sds s);
+sds sdsgrowzero(sds s, size_t len);
+sds sdscatlen(sds s, const void *t, size_t len);
+sds sdscat(sds s, const char *t);
+sds sdscatsds(sds s, const sds t);
+sds sdscpylen(sds s, const char *t, size_t len);
+sds sdscpy(sds s, const char *t);
+
+sds sdscatvprintf(sds s, const char *fmt, va_list ap);
+#ifdef __GNUC__
+sds sdscatprintf(sds s, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
+#else
+sds sdscatprintf(sds s, const char *fmt, ...);
+#endif
+
+sds sdscatfmt(sds s, char const *fmt, ...);
+sds sdstrim(sds s, const char *cset);
+void sdsrange(sds s, int start, int end);
+void sdsupdatelen(sds s);
+void sdsclear(sds s);
+int sdscmp(const sds s1, const sds s2);
+sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count);
+void sdsfreesplitres(sds *tokens, int count);
+void sdstolower(sds s);
+void sdstoupper(sds s);
+sds sdsfromlonglong(long long value);
+sds sdscatrepr(sds s, const char *p, size_t len);
+sds *sdssplitargs(const char *line, int *argc);
+sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen);
+sds sdsjoin(char **argv, int argc, char *sep);
+sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen);
+
+/* Low level functions exposed to the user API */
+sds sdsMakeRoomFor(sds s, size_t addlen);
+void sdsIncrLen(sds s, int incr);
+sds sdsRemoveFreeSpace(sds s);
+size_t sdsAllocSize(sds s);
+void *sdsAllocPtr(sds s);
+
+#ifdef REDIS_TEST
+int sdsTest(int argc, char *argv[]);
+#endif
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/uthash.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/uthash.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/dep/uthash.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,1208 @@
+/*
+Copyright (c) 2003-2017, Troy D. Hanson     http://troydhanson.github.com/uthash/
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef UTHASH_H
+#define UTHASH_H
+
+#define UTHASH_VERSION 2.0.2
+
+#include <string.h>   /* memcmp, memset, strlen */
+#include <stddef.h>   /* ptrdiff_t */
+#include <stdlib.h>   /* exit */
+
+/* These macros use decltype or the earlier __typeof GNU extension.
+   As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+   when compiling c++ source) this code uses whatever method is needed
+   or, for VS2008 where neither is available, uses casting workarounds. */
+#if !defined(DECLTYPE) && !defined(NO_DECLTYPE)
+#if defined(_MSC_VER)   /* MS compiler */
+#if _MSC_VER >= 1600 && defined(__cplusplus)  /* VS2010 or newer in C++ mode */
+#define DECLTYPE(x) (decltype(x))
+#else                   /* VS2008 or older (or VS2010 in C mode) */
+#define NO_DECLTYPE
+#endif
+#elif defined(__BORLANDC__) || defined(__ICCARM__) || defined(__LCC__) || defined(__WATCOMC__)
+#define NO_DECLTYPE
+#else                   /* GNU, Sun and other compilers */
+#define DECLTYPE(x) (__typeof(x))
+#endif
+#endif
+
+#ifdef NO_DECLTYPE
+#define DECLTYPE(x)
+#define DECLTYPE_ASSIGN(dst,src)                                                 \
+do {                                                                             \
+  char **_da_dst = (char**)(&(dst));                                             \
+  *_da_dst = (char*)(src);                                                       \
+} while (0)
+#else
+#define DECLTYPE_ASSIGN(dst,src)                                                 \
+do {                                                                             \
+  (dst) = DECLTYPE(dst)(src);                                                    \
+} while (0)
+#endif
+
+/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */
+#if defined(_WIN32)
+#if defined(_MSC_VER) && _MSC_VER >= 1600
+#include <stdint.h>
+#elif defined(__WATCOMC__) || defined(__MINGW32__) || defined(__CYGWIN__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+#elif defined(__GNUC__) && !defined(__VXWORKS__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+
+#ifndef uthash_malloc
+#define uthash_malloc(sz) malloc(sz)      /* malloc fcn                      */
+#endif
+#ifndef uthash_free
+#define uthash_free(ptr,sz) free(ptr)     /* free fcn                        */
+#endif
+#ifndef uthash_bzero
+#define uthash_bzero(a,n) memset(a,'\0',n)
+#endif
+#ifndef uthash_memcmp
+#define uthash_memcmp(a,b,n) memcmp(a,b,n)
+#endif
+#ifndef uthash_strlen
+#define uthash_strlen(s) strlen(s)
+#endif
+
+#ifndef uthash_noexpand_fyi
+#define uthash_noexpand_fyi(tbl)          /* can be defined to log noexpand  */
+#endif
+#ifndef uthash_expand_fyi
+#define uthash_expand_fyi(tbl)            /* can be defined to log expands   */
+#endif
+
+#ifndef HASH_NONFATAL_OOM
+#define HASH_NONFATAL_OOM 0
+#endif
+
+#if HASH_NONFATAL_OOM
+/* malloc failures can be recovered from */
+
+#ifndef uthash_nonfatal_oom
+#define uthash_nonfatal_oom(obj) do {} while (0)    /* non-fatal OOM error */
+#endif
+
+#define HASH_RECORD_OOM(oomed) do { (oomed) = 1; } while (0)
+#define IF_HASH_NONFATAL_OOM(x) x
+
+#else
+/* malloc failures result in lost memory, hash tables are unusable */
+
+#ifndef uthash_fatal
+#define uthash_fatal(msg) exit(-1)        /* fatal OOM error */
+#endif
+
+#define HASH_RECORD_OOM(oomed) uthash_fatal("out of memory")
+#define IF_HASH_NONFATAL_OOM(x)
+
+#endif
+
+/* initial number of buckets */
+#define HASH_INITIAL_NUM_BUCKETS 32U     /* initial number of buckets        */
+#define HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */
+#define HASH_BKT_CAPACITY_THRESH 10U     /* expand when bucket count reaches */
+
+/* calculate the element whose hash handle address is hhp */
+#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
+/* calculate the hash handle from element address elp */
+#define HH_FROM_ELMT(tbl,elp) ((UT_hash_handle *)(((char*)(elp)) + ((tbl)->hho)))
+
+#define HASH_ROLLBACK_BKT(hh, head, itemptrhh)                                   \
+do {                                                                             \
+  struct UT_hash_handle *_hd_hh_item = (itemptrhh);                              \
+  unsigned _hd_bkt;                                                              \
+  HASH_TO_BKT(_hd_hh_item->hashv, (head)->hh.tbl->num_buckets, _hd_bkt);         \
+  (head)->hh.tbl->buckets[_hd_bkt].count++;                                      \
+  _hd_hh_item->hh_next = NULL;                                                   \
+  _hd_hh_item->hh_prev = NULL;                                                   \
+} while (0)
+
+#define HASH_VALUE(keyptr,keylen,hashv)                                          \
+do {                                                                             \
+  HASH_FCN(keyptr, keylen, hashv);                                               \
+} while (0)
+
+#define HASH_FIND_BYHASHVALUE(hh,head,keyptr,keylen,hashval,out)                 \
+do {                                                                             \
+  (out) = NULL;                                                                  \
+  if (head) {                                                                    \
+    unsigned _hf_bkt;                                                            \
+    HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _hf_bkt);                  \
+    if (HASH_BLOOM_TEST((head)->hh.tbl, hashval) != 0) {                         \
+      HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], keyptr, keylen, hashval, out); \
+    }                                                                            \
+  }                                                                              \
+} while (0)
+
+#define HASH_FIND(hh,head,keyptr,keylen,out)                                     \
+do {                                                                             \
+  unsigned _hf_hashv;                                                            \
+  HASH_VALUE(keyptr, keylen, _hf_hashv);                                         \
+  HASH_FIND_BYHASHVALUE(hh, head, keyptr, keylen, _hf_hashv, out);               \
+} while (0)
+
+#ifdef HASH_BLOOM
+#define HASH_BLOOM_BITLEN (1UL << HASH_BLOOM)
+#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8UL) + (((HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL)
+#define HASH_BLOOM_MAKE(tbl,oomed)                                               \
+do {                                                                             \
+  (tbl)->bloom_nbits = HASH_BLOOM;                                               \
+  (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN);                 \
+  if (!(tbl)->bloom_bv) {                                                        \
+    HASH_RECORD_OOM(oomed);                                                      \
+  } else {                                                                       \
+    uthash_bzero((tbl)->bloom_bv, HASH_BLOOM_BYTELEN);                           \
+    (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE;                                     \
+  }                                                                              \
+} while (0)
+
+#define HASH_BLOOM_FREE(tbl)                                                     \
+do {                                                                             \
+  uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN);                              \
+} while (0)
+
+#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U)))
+#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U)))
+
+#define HASH_BLOOM_ADD(tbl,hashv)                                                \
+  HASH_BLOOM_BITSET((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U)))
+
+#define HASH_BLOOM_TEST(tbl,hashv)                                               \
+  HASH_BLOOM_BITTEST((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U)))
+
+#else
+#define HASH_BLOOM_MAKE(tbl,oomed)
+#define HASH_BLOOM_FREE(tbl)
+#define HASH_BLOOM_ADD(tbl,hashv)
+#define HASH_BLOOM_TEST(tbl,hashv) (1)
+#define HASH_BLOOM_BYTELEN 0U
+#endif
+
+#define HASH_MAKE_TABLE(hh,head,oomed)                                           \
+do {                                                                             \
+  (head)->hh.tbl = (UT_hash_table*)uthash_malloc(sizeof(UT_hash_table));         \
+  if (!(head)->hh.tbl) {                                                         \
+    HASH_RECORD_OOM(oomed);                                                      \
+  } else {                                                                       \
+    uthash_bzero((head)->hh.tbl, sizeof(UT_hash_table));                         \
+    (head)->hh.tbl->tail = &((head)->hh);                                        \
+    (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS;                      \
+    (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2;            \
+    (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head);                  \
+    (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc(                    \
+        HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket));               \
+    (head)->hh.tbl->signature = HASH_SIGNATURE;                                  \
+    if (!(head)->hh.tbl->buckets) {                                              \
+      HASH_RECORD_OOM(oomed);                                                    \
+      uthash_free((head)->hh.tbl, sizeof(UT_hash_table));                        \
+    } else {                                                                     \
+      uthash_bzero((head)->hh.tbl->buckets,                                      \
+          HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket));             \
+      HASH_BLOOM_MAKE((head)->hh.tbl, oomed);                                    \
+      IF_HASH_NONFATAL_OOM(                                                      \
+        if (oomed) {                                                             \
+          uthash_free((head)->hh.tbl->buckets,                                   \
+              HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket));           \
+          uthash_free((head)->hh.tbl, sizeof(UT_hash_table));                    \
+        }                                                                        \
+      )                                                                          \
+    }                                                                            \
+  }                                                                              \
+} while (0)
+
+#define HASH_REPLACE_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,replaced,cmpfcn) \
+do {                                                                             \
+  (replaced) = NULL;                                                             \
+  HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \
+  if (replaced) {                                                                \
+    HASH_DELETE(hh, head, replaced);                                             \
+  }                                                                              \
+  HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn); \
+} while (0)
+
+#define HASH_REPLACE_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add,replaced) \
+do {                                                                             \
+  (replaced) = NULL;                                                             \
+  HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \
+  if (replaced) {                                                                \
+    HASH_DELETE(hh, head, replaced);                                             \
+  }                                                                              \
+  HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add); \
+} while (0)
+
+#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced)                   \
+do {                                                                             \
+  unsigned _hr_hashv;                                                            \
+  HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv);                         \
+  HASH_REPLACE_BYHASHVALUE(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced); \
+} while (0)
+
+#define HASH_REPLACE_INORDER(hh,head,fieldname,keylen_in,add,replaced,cmpfcn)    \
+do {                                                                             \
+  unsigned _hr_hashv;                                                            \
+  HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv);                         \
+  HASH_REPLACE_BYHASHVALUE_INORDER(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced, cmpfcn); \
+} while (0)
+
+#define HASH_APPEND_LIST(hh, head, add)                                          \
+do {                                                                             \
+  (add)->hh.next = NULL;                                                         \
+  (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail);           \
+  (head)->hh.tbl->tail->next = (add);                                            \
+  (head)->hh.tbl->tail = &((add)->hh);                                           \
+} while (0)
+
+#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn)                                 \
+do {                                                                             \
+  do {                                                                           \
+    if (cmpfcn(DECLTYPE(head)(_hs_iter), add) > 0) {                             \
+      break;                                                                     \
+    }                                                                            \
+  } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next));           \
+} while (0)
+
+#ifdef NO_DECLTYPE
+#undef HASH_AKBI_INNER_LOOP
+#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn)                                 \
+do {                                                                             \
+  char *_hs_saved_head = (char*)(head);                                          \
+  do {                                                                           \
+    DECLTYPE_ASSIGN(head, _hs_iter);                                             \
+    if (cmpfcn(head, add) > 0) {                                                 \
+      DECLTYPE_ASSIGN(head, _hs_saved_head);                                     \
+      break;                                                                     \
+    }                                                                            \
+    DECLTYPE_ASSIGN(head, _hs_saved_head);                                       \
+  } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next));           \
+} while (0)
+#endif
+
+#if HASH_NONFATAL_OOM
+
+#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed)            \
+do {                                                                             \
+  if (!(oomed)) {                                                                \
+    unsigned _ha_bkt;                                                            \
+    (head)->hh.tbl->num_items++;                                                 \
+    HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt);                  \
+    HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed);    \
+    if (oomed) {                                                                 \
+      HASH_ROLLBACK_BKT(hh, head, &(add)->hh);                                   \
+      HASH_DELETE_HH(hh, head, &(add)->hh);                                      \
+      (add)->hh.tbl = NULL;                                                      \
+      uthash_nonfatal_oom(add);                                                  \
+    } else {                                                                     \
+      HASH_BLOOM_ADD((head)->hh.tbl, hashval);                                   \
+      HASH_EMIT_KEY(hh, head, keyptr, keylen_in);                                \
+    }                                                                            \
+  } else {                                                                       \
+    (add)->hh.tbl = NULL;                                                        \
+    uthash_nonfatal_oom(add);                                                    \
+  }                                                                              \
+} while (0)
+
+#else
+
+#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed)            \
+do {                                                                             \
+  unsigned _ha_bkt;                                                              \
+  (head)->hh.tbl->num_items++;                                                   \
+  HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt);                    \
+  HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed);      \
+  HASH_BLOOM_ADD((head)->hh.tbl, hashval);                                       \
+  HASH_EMIT_KEY(hh, head, keyptr, keylen_in);                                    \
+} while (0)
+
+#endif
+
+
+#define HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh,head,keyptr,keylen_in,hashval,add,cmpfcn) \
+do {                                                                             \
+  IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; )                                     \
+  (add)->hh.hashv = (hashval);                                                   \
+  (add)->hh.key = (char*) (keyptr);                                              \
+  (add)->hh.keylen = (unsigned) (keylen_in);                                     \
+  if (!(head)) {                                                                 \
+    (add)->hh.next = NULL;                                                       \
+    (add)->hh.prev = NULL;                                                       \
+    HASH_MAKE_TABLE(hh, add, _ha_oomed);                                         \
+    IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { )                                    \
+      (head) = (add);                                                            \
+    IF_HASH_NONFATAL_OOM( } )                                                    \
+  } else {                                                                       \
+    void *_hs_iter = (head);                                                     \
+    (add)->hh.tbl = (head)->hh.tbl;                                              \
+    HASH_AKBI_INNER_LOOP(hh, head, add, cmpfcn);                                 \
+    if (_hs_iter) {                                                              \
+      (add)->hh.next = _hs_iter;                                                 \
+      if (((add)->hh.prev = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev)) {     \
+        HH_FROM_ELMT((head)->hh.tbl, (add)->hh.prev)->next = (add);              \
+      } else {                                                                   \
+        (head) = (add);                                                          \
+      }                                                                          \
+      HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev = (add);                      \
+    } else {                                                                     \
+      HASH_APPEND_LIST(hh, head, add);                                           \
+    }                                                                            \
+  }                                                                              \
+  HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed);       \
+  HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE_INORDER");                    \
+} while (0)
+
+#define HASH_ADD_KEYPTR_INORDER(hh,head,keyptr,keylen_in,add,cmpfcn)             \
+do {                                                                             \
+  unsigned _hs_hashv;                                                            \
+  HASH_VALUE(keyptr, keylen_in, _hs_hashv);                                      \
+  HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, keyptr, keylen_in, _hs_hashv, add, cmpfcn); \
+} while (0)
+
+#define HASH_ADD_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,cmpfcn) \
+  HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn)
+
+#define HASH_ADD_INORDER(hh,head,fieldname,keylen_in,add,cmpfcn)                 \
+  HASH_ADD_KEYPTR_INORDER(hh, head, &((add)->fieldname), keylen_in, add, cmpfcn)
+
+#define HASH_ADD_KEYPTR_BYHASHVALUE(hh,head,keyptr,keylen_in,hashval,add)        \
+do {                                                                             \
+  IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; )                                     \
+  (add)->hh.hashv = (hashval);                                                   \
+  (add)->hh.key = (char*) (keyptr);                                              \
+  (add)->hh.keylen = (unsigned) (keylen_in);                                     \
+  if (!(head)) {                                                                 \
+    (add)->hh.next = NULL;                                                       \
+    (add)->hh.prev = NULL;                                                       \
+    HASH_MAKE_TABLE(hh, add, _ha_oomed);                                         \
+    IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { )                                    \
+      (head) = (add);                                                            \
+    IF_HASH_NONFATAL_OOM( } )                                                    \
+  } else {                                                                       \
+    (add)->hh.tbl = (head)->hh.tbl;                                              \
+    HASH_APPEND_LIST(hh, head, add);                                             \
+  }                                                                              \
+  HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed);       \
+  HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE");                            \
+} while (0)
+
+#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add)                            \
+do {                                                                             \
+  unsigned _ha_hashv;                                                            \
+  HASH_VALUE(keyptr, keylen_in, _ha_hashv);                                      \
+  HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, keyptr, keylen_in, _ha_hashv, add);      \
+} while (0)
+
+#define HASH_ADD_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add)            \
+  HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add)
+
+#define HASH_ADD(hh,head,fieldname,keylen_in,add)                                \
+  HASH_ADD_KEYPTR(hh, head, &((add)->fieldname), keylen_in, add)
+
+#define HASH_TO_BKT(hashv,num_bkts,bkt)                                          \
+do {                                                                             \
+  bkt = ((hashv) & ((num_bkts) - 1U));                                           \
+} while (0)
+
+/* delete "delptr" from the hash table.
+ * "the usual" patch-up process for the app-order doubly-linked-list.
+ * The use of _hd_hh_del below deserves special explanation.
+ * These used to be expressed using (delptr) but that led to a bug
+ * if someone used the same symbol for the head and deletee, like
+ *  HASH_DELETE(hh,users,users);
+ * We want that to work, but by changing the head (users) below
+ * we were forfeiting our ability to further refer to the deletee (users)
+ * in the patch-up process. Solution: use scratch space to
+ * copy the deletee pointer, then the latter references are via that
+ * scratch pointer rather than through the repointed (users) symbol.
+ */
+#define HASH_DELETE(hh,head,delptr)                                              \
+    HASH_DELETE_HH(hh, head, &(delptr)->hh)
+
+#define HASH_DELETE_HH(hh,head,delptrhh)                                         \
+do {                                                                             \
+  struct UT_hash_handle *_hd_hh_del = (delptrhh);                                \
+  if ((_hd_hh_del->prev == NULL) && (_hd_hh_del->next == NULL)) {                \
+    HASH_BLOOM_FREE((head)->hh.tbl);                                             \
+    uthash_free((head)->hh.tbl->buckets,                                         \
+                (head)->hh.tbl->num_buckets * sizeof(struct UT_hash_bucket));    \
+    uthash_free((head)->hh.tbl, sizeof(UT_hash_table));                          \
+    (head) = NULL;                                                               \
+  } else {                                                                       \
+    unsigned _hd_bkt;                                                            \
+    if (_hd_hh_del == (head)->hh.tbl->tail) {                                    \
+      (head)->hh.tbl->tail = HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev);     \
+    }                                                                            \
+    if (_hd_hh_del->prev != NULL) {                                              \
+      HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev)->next = _hd_hh_del->next;   \
+    } else {                                                                     \
+      DECLTYPE_ASSIGN(head, _hd_hh_del->next);                                   \
+    }                                                                            \
+    if (_hd_hh_del->next != NULL) {                                              \
+      HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->next)->prev = _hd_hh_del->prev;   \
+    }                                                                            \
+    HASH_TO_BKT(_hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt);        \
+    HASH_DEL_IN_BKT((head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del);               \
+    (head)->hh.tbl->num_items--;                                                 \
+  }                                                                              \
+  HASH_FSCK(hh, head, "HASH_DELETE_HH");                                         \
+} while (0)
+
+/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
+#define HASH_FIND_STR(head,findstr,out)                                          \
+    HASH_FIND(hh,head,findstr,(unsigned)uthash_strlen(findstr),out)
+#define HASH_ADD_STR(head,strfield,add)                                          \
+    HASH_ADD(hh,head,strfield[0],(unsigned)uthash_strlen(add->strfield),add)
+#define HASH_REPLACE_STR(head,strfield,add,replaced)                             \
+    HASH_REPLACE(hh,head,strfield[0],(unsigned)uthash_strlen(add->strfield),add,replaced)
+#define HASH_FIND_INT(head,findint,out)                                          \
+    HASH_FIND(hh,head,findint,sizeof(int),out)
+#define HASH_ADD_INT(head,intfield,add)                                          \
+    HASH_ADD(hh,head,intfield,sizeof(int),add)
+#define HASH_REPLACE_INT(head,intfield,add,replaced)                             \
+    HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
+#define HASH_FIND_PTR(head,findptr,out)                                          \
+    HASH_FIND(hh,head,findptr,sizeof(void *),out)
+#define HASH_ADD_PTR(head,ptrfield,add)                                          \
+    HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
+#define HASH_REPLACE_PTR(head,ptrfield,add,replaced)                             \
+    HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
+#define HASH_DEL(head,delptr)                                                    \
+    HASH_DELETE(hh,head,delptr)
+
+/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
+ * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
+ */
+#ifdef HASH_DEBUG
+#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
+#define HASH_FSCK(hh,head,where)                                                 \
+do {                                                                             \
+  struct UT_hash_handle *_thh;                                                   \
+  if (head) {                                                                    \
+    unsigned _bkt_i;                                                             \
+    unsigned _count = 0;                                                         \
+    char *_prev;                                                                 \
+    for (_bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; ++_bkt_i) {           \
+      unsigned _bkt_count = 0;                                                   \
+      _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head;                            \
+      _prev = NULL;                                                              \
+      while (_thh) {                                                             \
+        if (_prev != (char*)(_thh->hh_prev)) {                                   \
+          HASH_OOPS("%s: invalid hh_prev %p, actual %p\n",                       \
+              (where), (void*)_thh->hh_prev, (void*)_prev);                      \
+        }                                                                        \
+        _bkt_count++;                                                            \
+        _prev = (char*)(_thh);                                                   \
+        _thh = _thh->hh_next;                                                    \
+      }                                                                          \
+      _count += _bkt_count;                                                      \
+      if ((head)->hh.tbl->buckets[_bkt_i].count !=  _bkt_count) {                \
+        HASH_OOPS("%s: invalid bucket count %u, actual %u\n",                    \
+            (where), (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count);         \
+      }                                                                          \
+    }                                                                            \
+    if (_count != (head)->hh.tbl->num_items) {                                   \
+      HASH_OOPS("%s: invalid hh item count %u, actual %u\n",                     \
+          (where), (head)->hh.tbl->num_items, _count);                           \
+    }                                                                            \
+    _count = 0;                                                                  \
+    _prev = NULL;                                                                \
+    _thh =  &(head)->hh;                                                         \
+    while (_thh) {                                                               \
+      _count++;                                                                  \
+      if (_prev != (char*)_thh->prev) {                                          \
+        HASH_OOPS("%s: invalid prev %p, actual %p\n",                            \
+            (where), (void*)_thh->prev, (void*)_prev);                           \
+      }                                                                          \
+      _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh);                         \
+      _thh = (_thh->next ? HH_FROM_ELMT((head)->hh.tbl, _thh->next) : NULL);     \
+    }                                                                            \
+    if (_count != (head)->hh.tbl->num_items) {                                   \
+      HASH_OOPS("%s: invalid app item count %u, actual %u\n",                    \
+          (where), (head)->hh.tbl->num_items, _count);                           \
+    }                                                                            \
+  }                                                                              \
+} while (0)
+#else
+#define HASH_FSCK(hh,head,where)
+#endif
+
+/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
+ * the descriptor to which this macro is defined for tuning the hash function.
+ * The app can #include <unistd.h> to get the prototype for write(2). */
+#ifdef HASH_EMIT_KEYS
+#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)                                   \
+do {                                                                             \
+  unsigned _klen = fieldlen;                                                     \
+  write(HASH_EMIT_KEYS, &_klen, sizeof(_klen));                                  \
+  write(HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen);                        \
+} while (0)
+#else
+#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
+#endif
+
+/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
+#ifdef HASH_FUNCTION
+#define HASH_FCN HASH_FUNCTION
+#else
+#define HASH_FCN HASH_JEN
+#endif
+
+/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */
+#define HASH_BER(key,keylen,hashv)                                               \
+do {                                                                             \
+  unsigned _hb_keylen = (unsigned)keylen;                                        \
+  const unsigned char *_hb_key = (const unsigned char*)(key);                    \
+  (hashv) = 0;                                                                   \
+  while (_hb_keylen-- != 0U) {                                                   \
+    (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++;                           \
+  }                                                                              \
+} while (0)
+
+
+/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
+ * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
+#define HASH_SAX(key,keylen,hashv)                                               \
+do {                                                                             \
+  unsigned _sx_i;                                                                \
+  const unsigned char *_hs_key = (const unsigned char*)(key);                    \
+  hashv = 0;                                                                     \
+  for (_sx_i=0; _sx_i < keylen; _sx_i++) {                                       \
+    hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i];                       \
+  }                                                                              \
+} while (0)
+/* FNV-1a variation */
+#define HASH_FNV(key,keylen,hashv)                                               \
+do {                                                                             \
+  unsigned _fn_i;                                                                \
+  const unsigned char *_hf_key = (const unsigned char*)(key);                    \
+  (hashv) = 2166136261U;                                                         \
+  for (_fn_i=0; _fn_i < keylen; _fn_i++) {                                       \
+    hashv = hashv ^ _hf_key[_fn_i];                                              \
+    hashv = hashv * 16777619U;                                                   \
+  }                                                                              \
+} while (0)
+
+#define HASH_OAT(key,keylen,hashv)                                               \
+do {                                                                             \
+  unsigned _ho_i;                                                                \
+  const unsigned char *_ho_key=(const unsigned char*)(key);                      \
+  hashv = 0;                                                                     \
+  for(_ho_i=0; _ho_i < keylen; _ho_i++) {                                        \
+      hashv += _ho_key[_ho_i];                                                   \
+      hashv += (hashv << 10);                                                    \
+      hashv ^= (hashv >> 6);                                                     \
+  }                                                                              \
+  hashv += (hashv << 3);                                                         \
+  hashv ^= (hashv >> 11);                                                        \
+  hashv += (hashv << 15);                                                        \
+} while (0)
+
+#define HASH_JEN_MIX(a,b,c)                                                      \
+do {                                                                             \
+  a -= b; a -= c; a ^= ( c >> 13 );                                              \
+  b -= c; b -= a; b ^= ( a << 8 );                                               \
+  c -= a; c -= b; c ^= ( b >> 13 );                                              \
+  a -= b; a -= c; a ^= ( c >> 12 );                                              \
+  b -= c; b -= a; b ^= ( a << 16 );                                              \
+  c -= a; c -= b; c ^= ( b >> 5 );                                               \
+  a -= b; a -= c; a ^= ( c >> 3 );                                               \
+  b -= c; b -= a; b ^= ( a << 10 );                                              \
+  c -= a; c -= b; c ^= ( b >> 15 );                                              \
+} while (0)
+
+#define HASH_JEN(key,keylen,hashv)                                               \
+do {                                                                             \
+  unsigned _hj_i,_hj_j,_hj_k;                                                    \
+  unsigned const char *_hj_key=(unsigned const char*)(key);                      \
+  hashv = 0xfeedbeefu;                                                           \
+  _hj_i = _hj_j = 0x9e3779b9u;                                                   \
+  _hj_k = (unsigned)(keylen);                                                    \
+  while (_hj_k >= 12U) {                                                         \
+    _hj_i +=    (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 )                      \
+        + ( (unsigned)_hj_key[2] << 16 )                                         \
+        + ( (unsigned)_hj_key[3] << 24 ) );                                      \
+    _hj_j +=    (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 )                      \
+        + ( (unsigned)_hj_key[6] << 16 )                                         \
+        + ( (unsigned)_hj_key[7] << 24 ) );                                      \
+    hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 )                         \
+        + ( (unsigned)_hj_key[10] << 16 )                                        \
+        + ( (unsigned)_hj_key[11] << 24 ) );                                     \
+                                                                                 \
+     HASH_JEN_MIX(_hj_i, _hj_j, hashv);                                          \
+                                                                                 \
+     _hj_key += 12;                                                              \
+     _hj_k -= 12U;                                                               \
+  }                                                                              \
+  hashv += (unsigned)(keylen);                                                   \
+  switch ( _hj_k ) {                                                             \
+    case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */         \
+    case 10: hashv += ( (unsigned)_hj_key[9] << 16 );  /* FALLTHROUGH */         \
+    case 9:  hashv += ( (unsigned)_hj_key[8] << 8 );   /* FALLTHROUGH */         \
+    case 8:  _hj_j += ( (unsigned)_hj_key[7] << 24 );  /* FALLTHROUGH */         \
+    case 7:  _hj_j += ( (unsigned)_hj_key[6] << 16 );  /* FALLTHROUGH */         \
+    case 6:  _hj_j += ( (unsigned)_hj_key[5] << 8 );   /* FALLTHROUGH */         \
+    case 5:  _hj_j += _hj_key[4];                      /* FALLTHROUGH */         \
+    case 4:  _hj_i += ( (unsigned)_hj_key[3] << 24 );  /* FALLTHROUGH */         \
+    case 3:  _hj_i += ( (unsigned)_hj_key[2] << 16 );  /* FALLTHROUGH */         \
+    case 2:  _hj_i += ( (unsigned)_hj_key[1] << 8 );   /* FALLTHROUGH */         \
+    case 1:  _hj_i += _hj_key[0];                                                \
+  }                                                                              \
+  HASH_JEN_MIX(_hj_i, _hj_j, hashv);                                             \
+} while (0)
+
+/* The Paul Hsieh hash function */
+#undef get16bits
+#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__)             \
+  || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+#define get16bits(d) (*((const uint16_t *) (d)))
+#endif
+
+#if !defined (get16bits)
+#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)             \
+                       +(uint32_t)(((const uint8_t *)(d))[0]) )
+#endif
+#define HASH_SFH(key,keylen,hashv)                                               \
+do {                                                                             \
+  unsigned const char *_sfh_key=(unsigned const char*)(key);                     \
+  uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen;                                \
+                                                                                 \
+  unsigned _sfh_rem = _sfh_len & 3U;                                             \
+  _sfh_len >>= 2;                                                                \
+  hashv = 0xcafebabeu;                                                           \
+                                                                                 \
+  /* Main loop */                                                                \
+  for (;_sfh_len > 0U; _sfh_len--) {                                             \
+    hashv    += get16bits (_sfh_key);                                            \
+    _sfh_tmp  = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv;              \
+    hashv     = (hashv << 16) ^ _sfh_tmp;                                        \
+    _sfh_key += 2U*sizeof (uint16_t);                                            \
+    hashv    += hashv >> 11;                                                     \
+  }                                                                              \
+                                                                                 \
+  /* Handle end cases */                                                         \
+  switch (_sfh_rem) {                                                            \
+    case 3: hashv += get16bits (_sfh_key);                                       \
+            hashv ^= hashv << 16;                                                \
+            hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18;              \
+            hashv += hashv >> 11;                                                \
+            break;                                                               \
+    case 2: hashv += get16bits (_sfh_key);                                       \
+            hashv ^= hashv << 11;                                                \
+            hashv += hashv >> 17;                                                \
+            break;                                                               \
+    case 1: hashv += *_sfh_key;                                                  \
+            hashv ^= hashv << 10;                                                \
+            hashv += hashv >> 1;                                                 \
+  }                                                                              \
+                                                                                 \
+  /* Force "avalanching" of final 127 bits */                                    \
+  hashv ^= hashv << 3;                                                           \
+  hashv += hashv >> 5;                                                           \
+  hashv ^= hashv << 4;                                                           \
+  hashv += hashv >> 17;                                                          \
+  hashv ^= hashv << 25;                                                          \
+  hashv += hashv >> 6;                                                           \
+} while (0)
+
+#ifdef HASH_USING_NO_STRICT_ALIASING
+/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
+ * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
+ * MurmurHash uses the faster approach only on CPU's where we know it's safe.
+ *
+ * Note the preprocessor built-in defines can be emitted using:
+ *
+ *   gcc -m64 -dM -E - < /dev/null                  (on gcc)
+ *   cc -## a.c (where a.c is a simple test file)   (Sun Studio)
+ */
+#if (defined(__i386__) || defined(__x86_64__)  || defined(_M_IX86))
+#define MUR_GETBLOCK(p,i) p[i]
+#else /* non intel */
+#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 3UL) == 0UL)
+#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 3UL) == 1UL)
+#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 3UL) == 2UL)
+#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 3UL) == 3UL)
+#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
+#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
+#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
+#define MUR_TWO_TWO(p)   ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
+#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >>  8))
+#else /* assume little endian non-intel */
+#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
+#define MUR_TWO_TWO(p)   ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
+#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) <<  8))
+#endif
+#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) :           \
+                            (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \
+                             (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) :  \
+                                                      MUR_ONE_THREE(p))))
+#endif
+#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+#define MUR_FMIX(_h) \
+do {                 \
+  _h ^= _h >> 16;    \
+  _h *= 0x85ebca6bu; \
+  _h ^= _h >> 13;    \
+  _h *= 0xc2b2ae35u; \
+  _h ^= _h >> 16;    \
+} while (0)
+
+#define HASH_MUR(key,keylen,hashv)                                     \
+do {                                                                   \
+  const uint8_t *_mur_data = (const uint8_t*)(key);                    \
+  const int _mur_nblocks = (int)(keylen) / 4;                          \
+  uint32_t _mur_h1 = 0xf88D5353u;                                      \
+  uint32_t _mur_c1 = 0xcc9e2d51u;                                      \
+  uint32_t _mur_c2 = 0x1b873593u;                                      \
+  uint32_t _mur_k1 = 0;                                                \
+  const uint8_t *_mur_tail;                                            \
+  const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \
+  int _mur_i;                                                          \
+  for (_mur_i = -_mur_nblocks; _mur_i != 0; _mur_i++) {                \
+    _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i);                        \
+    _mur_k1 *= _mur_c1;                                                \
+    _mur_k1 = MUR_ROTL32(_mur_k1,15);                                  \
+    _mur_k1 *= _mur_c2;                                                \
+                                                                       \
+    _mur_h1 ^= _mur_k1;                                                \
+    _mur_h1 = MUR_ROTL32(_mur_h1,13);                                  \
+    _mur_h1 = (_mur_h1*5U) + 0xe6546b64u;                              \
+  }                                                                    \
+  _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4));          \
+  _mur_k1=0;                                                           \
+  switch ((keylen) & 3U) {                                             \
+    case 0: break;                                                     \
+    case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \
+    case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8;  /* FALLTHROUGH */ \
+    case 1: _mur_k1 ^= (uint32_t)_mur_tail[0];                         \
+    _mur_k1 *= _mur_c1;                                                \
+    _mur_k1 = MUR_ROTL32(_mur_k1,15);                                  \
+    _mur_k1 *= _mur_c2;                                                \
+    _mur_h1 ^= _mur_k1;                                                \
+  }                                                                    \
+  _mur_h1 ^= (uint32_t)(keylen);                                       \
+  MUR_FMIX(_mur_h1);                                                   \
+  hashv = _mur_h1;                                                     \
+} while (0)
+#endif  /* HASH_USING_NO_STRICT_ALIASING */
+
+/* iterate over items in a known bucket to find desired item */
+#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out)               \
+do {                                                                             \
+  if ((head).hh_head != NULL) {                                                  \
+    DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (head).hh_head));                     \
+  } else {                                                                       \
+    (out) = NULL;                                                                \
+  }                                                                              \
+  while ((out) != NULL) {                                                        \
+    if ((out)->hh.hashv == (hashval) && (out)->hh.keylen == (keylen_in)) {       \
+      if (uthash_memcmp((out)->hh.key, keyptr, keylen_in) == 0) {                \
+        break;                                                                   \
+      }                                                                          \
+    }                                                                            \
+    if ((out)->hh.hh_next != NULL) {                                             \
+      DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (out)->hh.hh_next));                \
+    } else {                                                                     \
+      (out) = NULL;                                                              \
+    }                                                                            \
+  }                                                                              \
+} while (0)
+
+/* add an item to a bucket  */
+#define HASH_ADD_TO_BKT(head,hh,addhh,oomed)                                     \
+do {                                                                             \
+  UT_hash_bucket *_ha_head = &(head);                                            \
+  _ha_head->count++;                                                             \
+  (addhh)->hh_next = _ha_head->hh_head;                                          \
+  (addhh)->hh_prev = NULL;                                                       \
+  if (_ha_head->hh_head != NULL) {                                               \
+    _ha_head->hh_head->hh_prev = (addhh);                                        \
+  }                                                                              \
+  _ha_head->hh_head = (addhh);                                                   \
+  if ((_ha_head->count >= ((_ha_head->expand_mult + 1U) * HASH_BKT_CAPACITY_THRESH)) \
+      && !(addhh)->tbl->noexpand) {                                              \
+    HASH_EXPAND_BUCKETS(addhh,(addhh)->tbl, oomed);                              \
+    IF_HASH_NONFATAL_OOM(                                                        \
+      if (oomed) {                                                               \
+        HASH_DEL_IN_BKT(head,addhh);                                             \
+      }                                                                          \
+    )                                                                            \
+  }                                                                              \
+} while (0)
+
+/* remove an item from a given bucket */
+#define HASH_DEL_IN_BKT(head,delhh)                                              \
+do {                                                                             \
+  UT_hash_bucket *_hd_head = &(head);                                            \
+  _hd_head->count--;                                                             \
+  if (_hd_head->hh_head == (delhh)) {                                            \
+    _hd_head->hh_head = (delhh)->hh_next;                                        \
+  }                                                                              \
+  if ((delhh)->hh_prev) {                                                        \
+    (delhh)->hh_prev->hh_next = (delhh)->hh_next;                                \
+  }                                                                              \
+  if ((delhh)->hh_next) {                                                        \
+    (delhh)->hh_next->hh_prev = (delhh)->hh_prev;                                \
+  }                                                                              \
+} while (0)
+
+/* Bucket expansion has the effect of doubling the number of buckets
+ * and redistributing the items into the new buckets. Ideally the
+ * items will distribute more or less evenly into the new buckets
+ * (the extent to which this is true is a measure of the quality of
+ * the hash function as it applies to the key domain).
+ *
+ * With the items distributed into more buckets, the chain length
+ * (item count) in each bucket is reduced. Thus by expanding buckets
+ * the hash keeps a bound on the chain length. This bounded chain
+ * length is the essence of how a hash provides constant time lookup.
+ *
+ * The calculation of tbl->ideal_chain_maxlen below deserves some
+ * explanation. First, keep in mind that we're calculating the ideal
+ * maximum chain length based on the *new* (doubled) bucket count.
+ * In fractions this is just n/b (n=number of items,b=new num buckets).
+ * Since the ideal chain length is an integer, we want to calculate
+ * ceil(n/b). We don't depend on floating point arithmetic in this
+ * hash, so to calculate ceil(n/b) with integers we could write
+ *
+ *      ceil(n/b) = (n/b) + ((n%b)?1:0)
+ *
+ * and in fact a previous version of this hash did just that.
+ * But now we have improved things a bit by recognizing that b is
+ * always a power of two. We keep its base 2 log handy (call it lb),
+ * so now we can write this with a bit shift and logical AND:
+ *
+ *      ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
+ *
+ */
+#define HASH_EXPAND_BUCKETS(hh,tbl,oomed)                                        \
+do {                                                                             \
+  unsigned _he_bkt;                                                              \
+  unsigned _he_bkt_i;                                                            \
+  struct UT_hash_handle *_he_thh, *_he_hh_nxt;                                   \
+  UT_hash_bucket *_he_new_buckets, *_he_newbkt;                                  \
+  _he_new_buckets = (UT_hash_bucket*)uthash_malloc(                              \
+           2UL * (tbl)->num_buckets * sizeof(struct UT_hash_bucket));            \
+  if (!_he_new_buckets) {                                                        \
+    HASH_RECORD_OOM(oomed);                                                      \
+  } else {                                                                       \
+    uthash_bzero(_he_new_buckets,                                                \
+        2UL * (tbl)->num_buckets * sizeof(struct UT_hash_bucket));               \
+    (tbl)->ideal_chain_maxlen =                                                  \
+       ((tbl)->num_items >> ((tbl)->log2_num_buckets+1U)) +                      \
+       ((((tbl)->num_items & (((tbl)->num_buckets*2U)-1U)) != 0U) ? 1U : 0U);    \
+    (tbl)->nonideal_items = 0;                                                   \
+    for (_he_bkt_i = 0; _he_bkt_i < (tbl)->num_buckets; _he_bkt_i++) {           \
+      _he_thh = (tbl)->buckets[ _he_bkt_i ].hh_head;                             \
+      while (_he_thh != NULL) {                                                  \
+        _he_hh_nxt = _he_thh->hh_next;                                           \
+        HASH_TO_BKT(_he_thh->hashv, (tbl)->num_buckets * 2U, _he_bkt);           \
+        _he_newbkt = &(_he_new_buckets[_he_bkt]);                                \
+        if (++(_he_newbkt->count) > (tbl)->ideal_chain_maxlen) {                 \
+          (tbl)->nonideal_items++;                                               \
+          _he_newbkt->expand_mult = _he_newbkt->count / (tbl)->ideal_chain_maxlen; \
+        }                                                                        \
+        _he_thh->hh_prev = NULL;                                                 \
+        _he_thh->hh_next = _he_newbkt->hh_head;                                  \
+        if (_he_newbkt->hh_head != NULL) {                                       \
+          _he_newbkt->hh_head->hh_prev = _he_thh;                                \
+        }                                                                        \
+        _he_newbkt->hh_head = _he_thh;                                           \
+        _he_thh = _he_hh_nxt;                                                    \
+      }                                                                          \
+    }                                                                            \
+    uthash_free((tbl)->buckets, (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \
+    (tbl)->num_buckets *= 2U;                                                    \
+    (tbl)->log2_num_buckets++;                                                   \
+    (tbl)->buckets = _he_new_buckets;                                            \
+    (tbl)->ineff_expands = ((tbl)->nonideal_items > ((tbl)->num_items >> 1)) ?   \
+        ((tbl)->ineff_expands+1U) : 0U;                                          \
+    if ((tbl)->ineff_expands > 1U) {                                             \
+      (tbl)->noexpand = 1;                                                       \
+      uthash_noexpand_fyi(tbl);                                                  \
+    }                                                                            \
+    uthash_expand_fyi(tbl);                                                      \
+  }                                                                              \
+} while (0)
+
+
+/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
+/* Note that HASH_SORT assumes the hash handle name to be hh.
+ * HASH_SRT was added to allow the hash handle name to be passed in. */
+#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn)
+#define HASH_SRT(hh,head,cmpfcn)                                                 \
+do {                                                                             \
+  unsigned _hs_i;                                                                \
+  unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize;               \
+  struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail;            \
+  if (head != NULL) {                                                            \
+    _hs_insize = 1;                                                              \
+    _hs_looping = 1;                                                             \
+    _hs_list = &((head)->hh);                                                    \
+    while (_hs_looping != 0U) {                                                  \
+      _hs_p = _hs_list;                                                          \
+      _hs_list = NULL;                                                           \
+      _hs_tail = NULL;                                                           \
+      _hs_nmerges = 0;                                                           \
+      while (_hs_p != NULL) {                                                    \
+        _hs_nmerges++;                                                           \
+        _hs_q = _hs_p;                                                           \
+        _hs_psize = 0;                                                           \
+        for (_hs_i = 0; _hs_i < _hs_insize; ++_hs_i) {                           \
+          _hs_psize++;                                                           \
+          _hs_q = ((_hs_q->next != NULL) ?                                       \
+            HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL);                   \
+          if (_hs_q == NULL) {                                                   \
+            break;                                                               \
+          }                                                                      \
+        }                                                                        \
+        _hs_qsize = _hs_insize;                                                  \
+        while ((_hs_psize != 0U) || ((_hs_qsize != 0U) && (_hs_q != NULL))) {    \
+          if (_hs_psize == 0U) {                                                 \
+            _hs_e = _hs_q;                                                       \
+            _hs_q = ((_hs_q->next != NULL) ?                                     \
+              HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL);                 \
+            _hs_qsize--;                                                         \
+          } else if ((_hs_qsize == 0U) || (_hs_q == NULL)) {                     \
+            _hs_e = _hs_p;                                                       \
+            if (_hs_p != NULL) {                                                 \
+              _hs_p = ((_hs_p->next != NULL) ?                                   \
+                HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL);               \
+            }                                                                    \
+            _hs_psize--;                                                         \
+          } else if ((cmpfcn(                                                    \
+                DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_p)),             \
+                DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_q))              \
+                )) <= 0) {                                                       \
+            _hs_e = _hs_p;                                                       \
+            if (_hs_p != NULL) {                                                 \
+              _hs_p = ((_hs_p->next != NULL) ?                                   \
+                HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL);               \
+            }                                                                    \
+            _hs_psize--;                                                         \
+          } else {                                                               \
+            _hs_e = _hs_q;                                                       \
+            _hs_q = ((_hs_q->next != NULL) ?                                     \
+              HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL);                 \
+            _hs_qsize--;                                                         \
+          }                                                                      \
+          if ( _hs_tail != NULL ) {                                              \
+            _hs_tail->next = ((_hs_e != NULL) ?                                  \
+              ELMT_FROM_HH((head)->hh.tbl, _hs_e) : NULL);                       \
+          } else {                                                               \
+            _hs_list = _hs_e;                                                    \
+          }                                                                      \
+          if (_hs_e != NULL) {                                                   \
+            _hs_e->prev = ((_hs_tail != NULL) ?                                  \
+              ELMT_FROM_HH((head)->hh.tbl, _hs_tail) : NULL);                    \
+          }                                                                      \
+          _hs_tail = _hs_e;                                                      \
+        }                                                                        \
+        _hs_p = _hs_q;                                                           \
+      }                                                                          \
+      if (_hs_tail != NULL) {                                                    \
+        _hs_tail->next = NULL;                                                   \
+      }                                                                          \
+      if (_hs_nmerges <= 1U) {                                                   \
+        _hs_looping = 0;                                                         \
+        (head)->hh.tbl->tail = _hs_tail;                                         \
+        DECLTYPE_ASSIGN(head, ELMT_FROM_HH((head)->hh.tbl, _hs_list));           \
+      }                                                                          \
+      _hs_insize *= 2U;                                                          \
+    }                                                                            \
+    HASH_FSCK(hh, head, "HASH_SRT");                                             \
+  }                                                                              \
+} while (0)
+
+/* This function selects items from one hash into another hash.
+ * The end result is that the selected items have dual presence
+ * in both hashes. There is no copy of the items made; rather
+ * they are added into the new hash through a secondary hash
+ * hash handle that must be present in the structure. */
+#define HASH_SELECT(hh_dst, dst, hh_src, src, cond)                              \
+do {                                                                             \
+  unsigned _src_bkt, _dst_bkt;                                                   \
+  void *_last_elt = NULL, *_elt;                                                 \
+  UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL;                         \
+  ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst));                 \
+  if ((src) != NULL) {                                                           \
+    for (_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) {    \
+      for (_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head;               \
+        _src_hh != NULL;                                                         \
+        _src_hh = _src_hh->hh_next) {                                            \
+        _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh);                         \
+        if (cond(_elt)) {                                                        \
+          IF_HASH_NONFATAL_OOM( int _hs_oomed = 0; )                             \
+          _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho);                 \
+          _dst_hh->key = _src_hh->key;                                           \
+          _dst_hh->keylen = _src_hh->keylen;                                     \
+          _dst_hh->hashv = _src_hh->hashv;                                       \
+          _dst_hh->prev = _last_elt;                                             \
+          _dst_hh->next = NULL;                                                  \
+          if (_last_elt_hh != NULL) {                                            \
+            _last_elt_hh->next = _elt;                                           \
+          }                                                                      \
+          if ((dst) == NULL) {                                                   \
+            DECLTYPE_ASSIGN(dst, _elt);                                          \
+            HASH_MAKE_TABLE(hh_dst, dst, _hs_oomed);                             \
+            IF_HASH_NONFATAL_OOM(                                                \
+              if (_hs_oomed) {                                                   \
+                uthash_nonfatal_oom(_elt);                                       \
+                (dst) = NULL;                                                    \
+                continue;                                                        \
+              }                                                                  \
+            )                                                                    \
+          } else {                                                               \
+            _dst_hh->tbl = (dst)->hh_dst.tbl;                                    \
+          }                                                                      \
+          HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt);      \
+          HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt], hh_dst, _dst_hh, _hs_oomed); \
+          (dst)->hh_dst.tbl->num_items++;                                        \
+          IF_HASH_NONFATAL_OOM(                                                  \
+            if (_hs_oomed) {                                                     \
+              HASH_ROLLBACK_BKT(hh_dst, dst, _dst_hh);                           \
+              HASH_DELETE_HH(hh_dst, dst, _dst_hh);                              \
+              _dst_hh->tbl = NULL;                                               \
+              uthash_nonfatal_oom(_elt);                                         \
+              continue;                                                          \
+            }                                                                    \
+          )                                                                      \
+          HASH_BLOOM_ADD(_dst_hh->tbl, _dst_hh->hashv);                          \
+          _last_elt = _elt;                                                      \
+          _last_elt_hh = _dst_hh;                                                \
+        }                                                                        \
+      }                                                                          \
+    }                                                                            \
+  }                                                                              \
+  HASH_FSCK(hh_dst, dst, "HASH_SELECT");                                         \
+} while (0)
+
+#define HASH_CLEAR(hh,head)                                                      \
+do {                                                                             \
+  if ((head) != NULL) {                                                          \
+    HASH_BLOOM_FREE((head)->hh.tbl);                                             \
+    uthash_free((head)->hh.tbl->buckets,                                         \
+                (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket));      \
+    uthash_free((head)->hh.tbl, sizeof(UT_hash_table));                          \
+    (head) = NULL;                                                               \
+  }                                                                              \
+} while (0)
+
+#define HASH_OVERHEAD(hh,head)                                                   \
+ (((head) != NULL) ? (                                                           \
+ (size_t)(((head)->hh.tbl->num_items   * sizeof(UT_hash_handle))   +             \
+          ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket))   +             \
+           sizeof(UT_hash_table)                                   +             \
+           (HASH_BLOOM_BYTELEN))) : 0U)
+
+#ifdef NO_DECLTYPE
+#define HASH_ITER(hh,head,el,tmp)                                                \
+for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
+  (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#else
+#define HASH_ITER(hh,head,el,tmp)                                                \
+for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL));      \
+  (el) != NULL; ((el)=(tmp)), ((tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#endif
+
+/* obtain a count of items in the hash */
+#define HASH_COUNT(head) HASH_CNT(hh,head)
+#define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U)
+
+typedef struct UT_hash_bucket {
+   struct UT_hash_handle *hh_head;
+   unsigned count;
+
+   /* expand_mult is normally set to 0. In this situation, the max chain length
+    * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
+    * the bucket's chain exceeds this length, bucket expansion is triggered).
+    * However, setting expand_mult to a non-zero value delays bucket expansion
+    * (that would be triggered by additions to this particular bucket)
+    * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
+    * (The multiplier is simply expand_mult+1). The whole idea of this
+    * multiplier is to reduce bucket expansions, since they are expensive, in
+    * situations where we know that a particular bucket tends to be overused.
+    * It is better to let its chain length grow to a longer yet-still-bounded
+    * value, than to do an O(n) bucket expansion too often.
+    */
+   unsigned expand_mult;
+
+} UT_hash_bucket;
+
+/* random signature used only to find hash tables in external analysis */
+#define HASH_SIGNATURE 0xa0111fe1u
+#define HASH_BLOOM_SIGNATURE 0xb12220f2u
+
+typedef struct UT_hash_table {
+   UT_hash_bucket *buckets;
+   unsigned num_buckets, log2_num_buckets;
+   unsigned num_items;
+   struct UT_hash_handle *tail; /* tail hh in app order, for fast append    */
+   ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
+
+   /* in an ideal situation (all buckets used equally), no bucket would have
+    * more than ceil(#items/#buckets) items. that's the ideal chain length. */
+   unsigned ideal_chain_maxlen;
+
+   /* nonideal_items is the number of items in the hash whose chain position
+    * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
+    * hash distribution; reaching them in a chain traversal takes >ideal steps */
+   unsigned nonideal_items;
+
+   /* ineffective expands occur when a bucket doubling was performed, but
+    * afterward, more than half the items in the hash had nonideal chain
+    * positions. If this happens on two consecutive expansions we inhibit any
+    * further expansion, as it's not helping; this happens when the hash
+    * function isn't a good fit for the key domain. When expansion is inhibited
+    * the hash will still work, albeit no longer in constant time. */
+   unsigned ineff_expands, noexpand;
+
+   uint32_t signature; /* used only to find hash tables in external analysis */
+#ifdef HASH_BLOOM
+   uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
+   uint8_t *bloom_bv;
+   uint8_t bloom_nbits;
+#endif
+
+} UT_hash_table;
+
+typedef struct UT_hash_handle {
+   struct UT_hash_table *tbl;
+   void *prev;                       /* prev element in app order      */
+   void *next;                       /* next element in app order      */
+   struct UT_hash_handle *hh_prev;   /* previous hh in bucket order    */
+   struct UT_hash_handle *hh_next;   /* next hh in bucket order        */
+   void *key;                        /* ptr to enclosing struct's key  */
+   unsigned keylen;                  /* enclosing struct's key len     */
+   unsigned hashv;                   /* result of hash-fcn(key)        */
+} UT_hash_handle;
+
+#endif /* UTHASH_H */
\ No newline at end of file

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/font.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/font.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/font.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,120 @@
+#ifndef CARYLL_FONT_H
+#define CARYLL_FONT_H
+
+#include "sfnt.h"
+
+struct _caryll_font;
+typedef struct _caryll_font otfcc_Font;
+
+#include "otfcc/glyph-order.h"
+
+#include "otfcc/table/fvar.h"
+
+#include "otfcc/table/head.h"
+#include "otfcc/table/glyf.h"
+#include "otfcc/table/CFF.h"
+#include "otfcc/table/maxp.h"
+#include "otfcc/table/hhea.h"
+#include "otfcc/table/hmtx.h"
+#include "otfcc/table/hdmx.h"
+#include "otfcc/table/vhea.h"
+#include "otfcc/table/vmtx.h"
+#include "otfcc/table/OS_2.h"
+#include "otfcc/table/post.h"
+#include "otfcc/table/name.h"
+#include "otfcc/table/meta.h"
+
+#include "otfcc/table/cmap.h"
+#include "otfcc/table/cvt.h"
+#include "otfcc/table/fpgm-prep.h"
+#include "otfcc/table/gasp.h"
+#include "otfcc/table/VDMX.h"
+
+#include "otfcc/table/LTSH.h"
+#include "otfcc/table/VORG.h"
+
+#include "otfcc/table/GDEF.h"
+#include "otfcc/table/BASE.h"
+#include "otfcc/table/otl.h"
+
+#include "otfcc/table/CPAL.h"
+#include "otfcc/table/COLR.h"
+#include "otfcc/table/SVG.h"
+
+#include "otfcc/table/_TSI.h"
+#include "otfcc/table/TSI5.h"
+
+typedef enum { FONTTYPE_TTF, FONTTYPE_CFF } otfcc_font_subtype;
+
+struct _caryll_font {
+	otfcc_font_subtype subtype;
+
+	table_fvar *fvar;
+
+	table_head *head;
+	table_hhea *hhea;
+	table_maxp *maxp;
+	table_OS_2 *OS_2;
+	table_hmtx *hmtx;
+	table_post *post;
+	table_hdmx *hdmx;
+
+	table_vhea *vhea;
+	table_vmtx *vmtx;
+	table_VORG *VORG;
+
+	table_CFF *CFF_;
+	table_glyf *glyf;
+	table_cmap *cmap;
+	table_name *name;
+	table_meta *meta;
+
+	table_fpgm_prep *fpgm;
+	table_fpgm_prep *prep;
+	table_cvt *cvt_;
+	table_gasp *gasp;
+	table_VDMX *VDMX;
+
+	table_LTSH *LTSH;
+
+	table_OTL *GSUB;
+	table_OTL *GPOS;
+	table_GDEF *GDEF;
+	table_BASE *BASE;
+
+	table_CPAL *CPAL;
+	table_COLR *COLR;
+	table_SVG *SVG_;
+
+	table_TSI *TSI_01;
+	table_TSI *TSI_23;
+	table_TSI5 *TSI5;
+
+	otfcc_GlyphOrder *glyph_order;
+};
+
+extern caryll_ElementInterfaceOf(otfcc_Font) {
+	caryll_RT(otfcc_Font);
+	void (*consolidate)(otfcc_Font * font, const otfcc_Options *options);
+	void *(*createTable)(otfcc_Font * font, const uint32_t tag);
+	void (*deleteTable)(otfcc_Font * font, const uint32_t tag);
+}
+otfcc_iFont;
+
+// Font builder interfaces
+typedef struct otfcc_IFontBuilder {
+	otfcc_Font *(*read)(void *source, uint32_t index, const otfcc_Options *options);
+	void (*free)(struct otfcc_IFontBuilder *self);
+} otfcc_IFontBuilder;
+otfcc_IFontBuilder *otfcc_newOTFReader(void);
+otfcc_IFontBuilder *otfcc_newJsonReader(void);
+
+// Font serializer interface
+typedef struct otfcc_IFontSerializer {
+	void *(*serialize)(otfcc_Font *font, const otfcc_Options *options);
+	void (*free)(struct otfcc_IFontSerializer *self);
+} otfcc_IFontSerializer;
+otfcc_IFontSerializer *otfcc_newJsonWriter(void);
+otfcc_IFontSerializer *otfcc_newOTFWriter(void);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/glyph-order.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/glyph-order.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/glyph-order.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,37 @@
+#ifndef CARYLL_INCLUDE_GLYPH_ORDER_H
+#define CARYLL_INCLUDE_GLYPH_ORDER_H
+
+#include "dep/sds.h"
+#include "dep/json.h"
+#include "dep/uthash.h"
+#include "caryll/ownership.h"
+#include "otfcc/primitives.h"
+#include "otfcc/handle.h"
+#include "otfcc/options.h"
+
+typedef struct {
+	glyphid_t gid;
+	sds name;
+	uint8_t orderType;
+	uint32_t orderEntry;
+	UT_hash_handle hhID;
+	UT_hash_handle hhName;
+} otfcc_GlyphOrderEntry;
+
+typedef struct {
+	otfcc_GlyphOrderEntry *byGID;
+	otfcc_GlyphOrderEntry *byName;
+} otfcc_GlyphOrder;
+
+struct otfcc_GlyphOrderPackage {
+	caryll_RT(otfcc_GlyphOrder);
+	sds (*setByGID)(otfcc_GlyphOrder *go, glyphid_t gid, sds name);
+	bool (*setByName)(otfcc_GlyphOrder *go, sds name, glyphid_t gid);
+	bool (*nameAField_Shared)(otfcc_GlyphOrder *go, glyphid_t gid, sds *field); // return a shared name pointer
+	bool (*consolidateHandle)(otfcc_GlyphOrder *go, otfcc_GlyphHandle *h);
+	bool (*lookupName)(otfcc_GlyphOrder *go, sds name);
+};
+
+extern const struct otfcc_GlyphOrderPackage otfcc_pkgGlyphOrder;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/handle.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/handle.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/handle.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,40 @@
+#ifndef CARYLL_INCLUDE_OTFCC_HANDLE_H
+#define CARYLL_INCLUDE_OTFCC_HANDLE_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include "dep/sds.h"
+#include "caryll/ownership.h"
+#include "caryll/element.h"
+#include "primitives.h"
+
+typedef enum {
+	HANDLE_STATE_EMPTY = 0,
+	HANDLE_STATE_INDEX = 1,
+	HANDLE_STATE_NAME = 2,
+	HANDLE_STATE_CONSOLIDATED = 3
+} handle_state;
+struct otfcc_Handle {
+	handle_state state;
+	glyphid_t index;
+	OWNING sds name;
+};
+
+typedef struct otfcc_Handle otfcc_Handle;
+typedef struct otfcc_Handle otfcc_GlyphHandle;
+typedef struct otfcc_Handle otfcc_FDHandle;
+typedef struct otfcc_Handle otfcc_LookupHandle;
+typedef struct otfcc_Handle otfcc_AxisHandle;
+
+struct otfcc_HandlePackage {
+	caryll_VT(otfcc_Handle);
+	struct otfcc_Handle (*fromIndex)(glyphid_t id);
+	struct otfcc_Handle (*fromName)(MOVE sds s);
+	struct otfcc_Handle (*fromConsolidated)(glyphid_t id, COPY sds s);
+	void (*consolidateTo)(struct otfcc_Handle *h, glyphid_t id, sds name);
+};
+
+extern const struct otfcc_HandlePackage otfcc_iHandle;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/logger.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/logger.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/logger.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,35 @@
+#ifndef CARYLL_INCLUDE_LOGGER_H
+#define CARYLL_INCLUDE_LOGGER_H
+
+#include "dep/sds.h"
+#include "caryll/ownership.h"
+#include "primitives.h"
+
+typedef struct otfcc_ILoggerTarget {
+	void (*dispose)(struct otfcc_ILoggerTarget *self);             // destructor
+	void (*push)(struct otfcc_ILoggerTarget *self, MOVE sds data); // push data
+} otfcc_ILoggerTarget;
+
+typedef enum { log_type_error = 0, log_type_warning = 1, log_type_info = 2, log_type_progress = 3 } otfcc_LoggerType;
+enum { log_vl_critical = 0, log_vl_important = 1, log_vl_notice = 2, log_vl_info = 5, log_vl_progress = 10 };
+
+typedef struct otfcc_ILogger {
+	void (*dispose)(struct otfcc_ILogger *self);                     // destructor
+	void (*indent)(struct otfcc_ILogger *self, const char *segment); // add a level
+	void (*indentSDS)(struct otfcc_ILogger *self, MOVE sds segment); // add a level, using SDS
+	void (*start)(struct otfcc_ILogger *self, const char *segment);  // add a level, output a progress
+	void (*startSDS)(struct otfcc_ILogger *self, MOVE sds segment);  // add a level, output a progress
+	void (*log)(struct otfcc_ILogger *self, uint8_t verbosity, otfcc_LoggerType type, const char *data); // log a data
+	void (*logSDS)(struct otfcc_ILogger *self, uint8_t verbosity, otfcc_LoggerType type, MOVE sds data); // log a data
+	void (*dedent)(struct otfcc_ILogger *self);                          // remove a level
+	void (*finish)(struct otfcc_ILogger *self);                          // remove a level, finishing a ask
+	void (*end)(struct otfcc_ILogger *self);                             // remove a level
+	void (*setVerbosity)(struct otfcc_ILogger *self, uint8_t verbosity); // remove a level
+	otfcc_ILoggerTarget *(*getTarget)(struct otfcc_ILogger *self);       // query target
+} otfcc_ILogger;
+
+otfcc_ILogger *otfcc_newLogger(otfcc_ILoggerTarget *target);
+otfcc_ILoggerTarget *otfcc_newStdErrTarget(void);
+otfcc_ILoggerTarget *otfcc_newEmptyTarget(void);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/options.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/options.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/options.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,41 @@
+#ifndef CARYLL_INCLUDE_OPTIONS_H
+#define CARYLL_INCLUDE_OPTIONS_H
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "logger.h"
+
+typedef struct {
+	bool debug_wait_on_start;
+	bool ignore_glyph_order;
+	bool ignore_hints;
+	bool has_vertical_metrics;
+	bool export_fdselect;
+	bool keep_average_char_width;
+	bool keep_unicode_ranges;
+	bool short_post;
+	bool dummy_DSIG;
+	bool keep_modified_time;
+	bool instr_as_bytes;
+	bool verbose;
+	bool quiet;
+	bool cff_short_vmtx;
+	bool merge_lookups;
+	bool merge_features;
+	bool force_cid;
+	bool cff_rollCharString;
+	bool cff_doSubroutinize;
+	bool stub_cmap4;
+	bool decimal_cmap;
+	bool name_glyphs_by_hash;
+	bool name_glyphs_by_gid;
+	char *glyph_name_prefix;
+	otfcc_ILogger *logger;
+} otfcc_Options;
+
+otfcc_Options *otfcc_newOptions(void);
+void otfcc_deleteOptions(otfcc_Options *options);
+void otfcc_Options_optimizeTo(otfcc_Options *options, uint8_t level);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,47 @@
+#ifndef CARYLL_INCLUDE_OTFCC_PRIMITIVES_H
+#define CARYLL_INCLUDE_OTFCC_PRIMITIVES_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <float.h>
+
+typedef int16_t f2dot14;  // 2.14 Fixed number, representing a value between [-1, 1].
+typedef int32_t f16dot16; // 16.16 Fixed number, usually used by intermediate coordiantes of a font.
+                          // To deal with implicit deltas in GVAR we must be very careful about it.
+                          // Arithmetic operators saturate towards positive or negative infinity.
+                          // Infinity values short circuit expressions.
+
+typedef uint16_t glyphid_t;    // Glyph index
+typedef uint16_t glyphclass_t; // Glyph class
+typedef uint16_t glyphsize_t;  // GASP glyph size
+typedef uint16_t tableid_t;    // Table/Font structure index
+typedef uint16_t colorid_t;    // Color index
+typedef uint16_t shapeid_t;    // Shape index
+typedef uint16_t cffsid_t;     // CFF/CFF2 String index
+typedef uint32_t arity_t;      // CFF Arity/Stack depth
+typedef uint32_t unicode_t;    // Unicode
+
+typedef double pos_t;   // Position
+typedef double scale_t; // transform scaling
+#define POS_MAX FLT_MAX
+#define POS_MIN FLT_MIN
+
+typedef double length_t; // Length
+
+double otfcc_from_f2dot14(const f2dot14 x);
+int16_t otfcc_to_f2dot14(const double x);
+double otfcc_from_fixed(const f16dot16 x);
+f16dot16 otfcc_to_fixed(const double x);
+
+#define f16dot16_precision 16
+#define f16dot16_k (1 << (f16dot16_precision - 1))
+#define f16dot16_infinity ((f16dot16)0x7fffffff)
+#define f16dot16_negativeIntinity ((f16dot16)0x80000000)
+
+f16dot16 otfcc_f1616_add(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_minus(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_multiply(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_divide(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_muldiv(f16dot16 a, f16dot16 b, f16dot16 c);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt-builder.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt-builder.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt-builder.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,30 @@
+#ifndef CARYLL_SFNT_BUILDER_H
+#define CARYLL_SFNT_BUILDER_H
+
+#include "primitives.h"
+#include "caryll/buffer.h"
+#include "otfcc/options.h"
+#include "dep/uthash.h"
+
+typedef struct {
+	int tag;
+	uint32_t length;
+	uint32_t checksum;
+	caryll_Buffer *buffer;
+	UT_hash_handle hh;
+} otfcc_SFNTTableEntry;
+
+typedef struct {
+	uint32_t count;
+	uint32_t header;
+	otfcc_SFNTTableEntry *tables;
+	const otfcc_Options *options;
+} otfcc_SFNTBuilder;
+
+otfcc_SFNTBuilder *otfcc_newSFNTBuilder(uint32_t header, const otfcc_Options *options);
+void otfcc_SFNTBuilder_pushTable(otfcc_SFNTBuilder *builder, uint32_t tag, caryll_Buffer *buffer);
+void otfcc_deleteSFNTBuilder(otfcc_SFNTBuilder *builder);
+
+caryll_Buffer *otfcc_SFNTBuilder_serialize(otfcc_SFNTBuilder *builder);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/sfnt.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,34 @@
+#ifndef CARYLL_INCLUDE_OTFCC_SFNT_H
+#define CARYLL_INCLUDE_OTFCC_SFNT_H
+
+#include <stdint.h>
+#include <stdio.h>
+
+typedef struct {
+	uint32_t tag;
+	uint32_t checkSum;
+	uint32_t offset;
+	uint32_t length;
+	uint8_t *data;
+} otfcc_PacketPiece;
+
+typedef struct {
+	uint32_t sfnt_version;
+	uint16_t numTables;
+	uint16_t searchRange;
+	uint16_t entrySelector;
+	uint16_t rangeShift;
+	otfcc_PacketPiece *pieces;
+} otfcc_Packet;
+
+typedef struct {
+	uint32_t type;
+	uint32_t count;
+	uint32_t *offsets;
+	otfcc_Packet *packets;
+} otfcc_SplineFontContainer;
+
+otfcc_SplineFontContainer *otfcc_readSFNT(FILE *file);
+void otfcc_deleteSFNT(otfcc_SplineFontContainer *font);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/BASE.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/BASE.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/BASE.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,30 @@
+#ifndef CARYLL_INCLUDE_TABLE_BASE_H
+#define CARYLL_INCLUDE_TABLE_BASE_H
+
+#include "otl.h"
+
+typedef struct {
+	uint32_t tag;
+	pos_t coordinate;
+} otl_BaseValue;
+
+typedef struct {
+	uint32_t tag;
+	uint32_t defaultBaselineTag;
+	tableid_t baseValuesCount;
+	OWNING otl_BaseValue *baseValues;
+} otl_BaseScriptEntry;
+
+typedef struct {
+	tableid_t scriptCount;
+	otl_BaseScriptEntry *entries;
+} otl_BaseAxis;
+
+typedef struct {
+	otl_BaseAxis *horizontal;
+	otl_BaseAxis *vertical;
+} table_BASE;
+
+extern caryll_RefElementInterface(table_BASE) table_iBASE;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CFF.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CFF.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CFF.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,90 @@
+#ifndef CARYLL_INCLUDE_TABLE_CFF_H
+#define CARYLL_INCLUDE_TABLE_CFF_H
+
+#include "table-common.h"
+#include "head.h"
+#include "glyf.h"
+
+typedef struct {
+	scale_t a;
+	scale_t b;
+	scale_t c;
+	scale_t d;
+	VQ x;
+	VQ y;
+} cff_FontMatrix;
+
+typedef struct {
+	arity_t blueValuesCount;
+	OWNING double *blueValues;
+	arity_t otherBluesCount;
+	OWNING double *otherBlues;
+	arity_t familyBluesCount;
+	OWNING double *familyBlues;
+	arity_t familyOtherBluesCount;
+	OWNING double *familyOtherBlues;
+	double blueScale;
+	double blueShift;
+	double blueFuzz;
+	double stdHW;
+	double stdVW;
+	arity_t stemSnapHCount;
+	OWNING double *stemSnapH;
+	arity_t stemSnapVCount;
+	OWNING double *stemSnapV;
+	bool forceBold;
+	uint32_t languageGroup;
+	double expansionFactor;
+	double initialRandomSeed;
+	double defaultWidthX;
+	double nominalWidthX;
+} cff_PrivateDict;
+
+typedef struct _table_CFF table_CFF;
+
+struct _table_CFF {
+	// Name
+	sds fontName;
+
+	// General properties
+	bool isCID;
+	sds version;
+	sds notice;
+	sds copyright;
+	sds fullName;
+	sds familyName;
+	sds weight;
+	bool isFixedPitch;
+	double italicAngle;
+	double underlinePosition;
+	double underlineThickness;
+	double fontBBoxTop;
+	double fontBBoxBottom;
+	double fontBBoxLeft;
+	double fontBBoxRight;
+	double strokeWidth;
+	OWNING cff_PrivateDict *privateDict;
+	OWNING cff_FontMatrix *fontMatrix;
+
+	// CID-only operators
+	sds cidRegistry;
+	sds cidOrdering;
+	uint32_t cidSupplement;
+	double cidFontVersion;
+	double cidFontRevision;
+	uint32_t cidCount;
+	uint32_t UIDBase;
+	// CID FDArray
+	tableid_t fdArrayCount;
+	OWNING table_CFF **fdArray;
+};
+
+extern caryll_RefElementInterface(table_CFF) table_iCFF;
+
+// CFF and glyf
+typedef struct {
+	OWNING table_CFF *meta;
+	OWNING table_glyf *glyphs;
+} table_CFFAndGlyf;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/COLR.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/COLR.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/COLR.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,24 @@
+#ifndef CARYLL_INCLUDE_TABLE_COLR_H
+#define CARYLL_INCLUDE_TABLE_COLR_H
+
+#include "table-common.h"
+
+// Layer and layer vector
+typedef struct {
+	otfcc_GlyphHandle glyph;
+	colorid_t paletteIndex;
+} colr_Layer;
+extern caryll_ElementInterface(colr_Layer) colr_iLayer;
+typedef caryll_Vector(colr_Layer) colr_LayerList;
+extern caryll_VectorInterface(colr_LayerList, colr_Layer) colr_iLayerList;
+
+// glyph-to-layers mapping and COLR table
+typedef struct {
+	otfcc_GlyphHandle glyph;
+	colr_LayerList layers;
+} colr_Mapping;
+extern caryll_ElementInterface(colr_Mapping) colr_iMapping;
+typedef caryll_Vector(colr_Mapping) table_COLR;
+extern caryll_VectorInterface(table_COLR, colr_Mapping) table_iCOLR;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CPAL.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CPAL.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/CPAL.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,35 @@
+#ifndef CARYLL_INCLUDE_TABLE_CPAL_H
+#define CARYLL_INCLUDE_TABLE_CPAL_H
+
+#include "table-common.h"
+
+// Color and Color list
+typedef struct {
+	uint8_t red;
+	uint8_t green;
+	uint8_t blue;
+	uint8_t alpha;
+	uint16_t label;
+} cpal_Color;
+extern caryll_ElementInterface(cpal_Color) cpal_iColor;
+typedef caryll_Vector(cpal_Color) cpal_ColorSet;
+extern caryll_VectorInterface(cpal_ColorSet, cpal_Color) cpal_iColorSet;
+
+// Palette and Palette list
+typedef struct {
+	cpal_ColorSet colorset;
+	uint32_t type;
+	uint32_t label;
+} cpal_Palette;
+extern caryll_ElementInterface(cpal_Palette) cpal_iPalette;
+typedef caryll_Vector(cpal_Palette) cpal_PaletteSet;
+extern caryll_VectorInterface(cpal_PaletteSet, cpal_Palette) cpal_iPaletteSet;
+
+// CPAL table
+typedef struct {
+	uint16_t version;
+	cpal_PaletteSet palettes;
+} table_CPAL;
+extern caryll_RefElementInterface(table_CPAL) table_iCPAL;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/GDEF.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/GDEF.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/GDEF.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,31 @@
+#ifndef CARYLL_INCLUDE_TABLE_GEDF_H
+#define CARYLL_INCLUDE_TABLE_GEDF_H
+
+#include "otl.h"
+
+typedef struct {
+	int8_t format;
+	pos_t coordiante;
+	int16_t pointIndex;
+} otl_CaretValue;
+extern caryll_ElementInterface(otl_CaretValue) otl_iCaretValue;
+typedef caryll_Vector(otl_CaretValue) otl_CaretValueList;
+extern caryll_VectorInterface(otl_CaretValueList, otl_CaretValue) otl_iCaretValueList;
+
+typedef struct {
+	otfcc_GlyphHandle glyph;
+	OWNING otl_CaretValueList carets;
+} otl_CaretValueRecord;
+extern caryll_ElementInterface(otl_CaretValueRecord) otl_iCaretValueRecord;
+typedef caryll_Vector(otl_CaretValueRecord) otl_LigCaretTable;
+extern caryll_VectorInterface(otl_LigCaretTable, otl_CaretValueRecord) otl_iLigCaretTable;
+
+typedef struct {
+	OWNING otl_ClassDef *glyphClassDef;
+	OWNING otl_ClassDef *markAttachClassDef;
+	OWNING otl_LigCaretTable ligCarets;
+} table_GDEF;
+
+extern caryll_RefElementInterface(table_GDEF) table_iGDEF;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/LTSH.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/LTSH.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/LTSH.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,13 @@
+#ifndef CARYLL_INCLUDE_TABLE_LTSH_H
+#define CARYLL_INCLUDE_TABLE_LTSH_H
+
+#include "table-common.h"
+
+typedef struct {
+	uint16_t version;
+	glyphid_t numGlyphs;
+	OWNING uint8_t *yPels;
+} table_LTSH;
+extern caryll_RefElementInterface(table_LTSH) table_iLTSH;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/OS_2.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/OS_2.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/OS_2.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,50 @@
+#ifndef CARYLL_INCLUDE_TABLE_OS_2_H
+#define CARYLL_INCLUDE_TABLE_OS_2_H
+
+#include "table-common.h"
+
+typedef struct {
+	// OS/2 and Windows specific metrics
+	uint16_t version;
+	int16_t xAvgCharWidth;
+	uint16_t usWeightClass;
+	uint16_t usWidthClass;
+	uint16_t fsType;
+	int16_t ySubscriptXSize;
+	int16_t ySubscriptYSize;
+	int16_t ySubscriptXOffset;
+	int16_t ySubscriptYOffset;
+	int16_t ySupscriptXSize;
+	int16_t ySupscriptYSize;
+	int16_t ySupscriptXOffset;
+	int16_t ySupscriptYOffset;
+	int16_t yStrikeoutSize;
+	int16_t yStrikeoutPosition;
+	int16_t sFamilyClass;
+	uint8_t panose[10];
+	uint32_t ulUnicodeRange1;
+	uint32_t ulUnicodeRange2;
+	uint32_t ulUnicodeRange3;
+	uint32_t ulUnicodeRange4;
+	uint8_t achVendID[4];
+	uint16_t fsSelection;
+	uint16_t usFirstCharIndex;
+	uint16_t usLastCharIndex;
+	int16_t sTypoAscender;
+	int16_t sTypoDescender;
+	int16_t sTypoLineGap;
+	uint16_t usWinAscent;
+	uint16_t usWinDescent;
+	uint32_t ulCodePageRange1;
+	uint32_t ulCodePageRange2;
+	int16_t sxHeight;
+	int16_t sCapHeight;
+	uint16_t usDefaultChar;
+	uint16_t usBreakChar;
+	uint16_t usMaxContext;
+	uint16_t usLowerOpticalPointSize;
+	uint16_t usUpperOpticalPointSize;
+} table_OS_2;
+extern caryll_RefElementInterface(table_OS_2) table_iOS_2;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/SVG.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/SVG.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/SVG.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,18 @@
+#ifndef CARYLL_INCLUDE_TABLE_SVG_H
+#define CARYLL_INCLUDE_TABLE_SVG_H
+
+#include "table-common.h"
+
+// SVG assignment
+typedef struct {
+	// Due to the outward references from SVG document to GID.
+	// We have to use GID here. Sorry.
+	glyphid_t start;
+	glyphid_t end;
+	caryll_Buffer *document;
+} svg_Assignment;
+extern caryll_ValElementInterface(svg_Assignment) svg_iAssignment;
+typedef caryll_Vector(svg_Assignment) table_SVG;
+extern caryll_VectorInterface(table_SVG, svg_Assignment) table_iSVG;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/TSI5.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/TSI5.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/TSI5.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_INCLUDE_TABLE_TSI5_H
+#define CARYLL_INCLUDE_TABLE_TSI5_H
+
+#include "table-common.h"
+#include "otl/classdef.h"
+
+// A TSI5 table is simply an OTL Class definition.
+typedef otl_ClassDef table_TSI5;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VDMX.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VDMX.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VDMX.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,36 @@
+#ifndef CARYLL_INCLUDE_TABLE_VDMX_H
+#define CARYLL_INCLUDE_TABLE_VDMX_H
+
+#include "table-common.h"
+
+typedef struct {
+	uint16_t yPelHeight;
+	int16_t yMax;
+	int16_t yMin;
+} vdmx_Record;
+
+extern caryll_ValElementInterface(vdmx_Record) vdmx_iRecord;
+typedef caryll_Vector(vdmx_Record) vdmx_Group;
+extern caryll_VectorInterface(vdmx_Group, vdmx_Record) vdmx_iGroup;
+
+typedef struct {
+	uint8_t bCharset;
+	uint8_t xRatio;
+	uint8_t yStartRatio;
+	uint8_t yEndRatio;
+
+	vdmx_Group records;
+} vdmx_RatioRange;
+
+extern caryll_ElementInterface(vdmx_RatioRange) vdmx_iRatioRange;
+typedef caryll_Vector(vdmx_RatioRange) vdmx_RatioRagneList;
+extern caryll_VectorInterface(vdmx_RatioRagneList, vdmx_RatioRange) vdmx_iRatioRangeList;
+
+typedef struct {
+	uint16_t version;
+	vdmx_RatioRagneList ratios;
+} table_VDMX;
+
+extern caryll_RefElementInterface(table_VDMX) table_iVDMX;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VORG.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VORG.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/VORG.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,19 @@
+#ifndef CARYLL_INCLUDE_TABLE_VORG_H
+#define CARYLL_INCLUDE_TABLE_VORG_H
+
+#include "table-common.h"
+
+typedef struct {
+	glyphid_t gid;
+	int16_t verticalOrigin;
+} VORG_entry;
+
+typedef struct {
+	glyphid_t numVertOriginYMetrics;
+	pos_t defaultVerticalOrigin;
+	OWNING VORG_entry *entries;
+} table_VORG;
+
+extern caryll_RefElementInterface(table_VORG) table_iVORG;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/_TSI.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/_TSI.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/_TSI.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,19 @@
+#ifndef CARYLL_INCLUDE_TABLE_TSI_H
+#define CARYLL_INCLUDE_TABLE_TSI_H
+
+#include "table-common.h"
+
+// TSI entries
+typedef enum { TSI_GLYPH, TSI_FPGM, TSI_PREP, TSI_CVT, TSI_RESERVED_FFFC } tsi_EntryType;
+
+typedef struct {
+	tsi_EntryType type;
+	otfcc_GlyphHandle glyph;
+	sds content;
+} tsi_Entry;
+
+extern caryll_ElementInterface(tsi_Entry) tsi_iEntry;
+typedef caryll_Vector(tsi_Entry) table_TSI;
+extern caryll_VectorInterface(table_TSI, tsi_Entry) table_iTSI;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cmap.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cmap.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cmap.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,44 @@
+#ifndef CARYLL_INCLUDE_TABLE_CMAP_H
+#define CARYLL_INCLUDE_TABLE_CMAP_H
+
+#include "table-common.h"
+
+// We will support format 0, 4, 12 and 14 of CMAP only
+typedef struct {
+	UT_hash_handle hh;
+	int unicode;
+	otfcc_GlyphHandle glyph;
+} cmap_Entry;
+
+typedef struct {
+	uint32_t unicode;
+	uint32_t selector;
+} cmap_UVS_key;
+
+typedef struct {
+	UT_hash_handle hh;
+	cmap_UVS_key key;
+	otfcc_GlyphHandle glyph;
+} cmap_UVS_Entry;
+
+typedef struct {
+	OWNING cmap_Entry *unicodes;
+	OWNING cmap_UVS_Entry *uvs;
+} table_cmap;
+
+extern caryll_ElementInterfaceOf(table_cmap) {
+	caryll_RT(table_cmap);
+	// unicode
+	bool (*encodeByIndex)(table_cmap * cmap, int c, uint16_t gid);
+	bool (*encodeByName)(table_cmap * cmap, int c, MOVE sds name);
+	bool (*unmap)(table_cmap * cmap, int c);
+	otfcc_GlyphHandle *(*lookup)(const table_cmap *cmap, int c);
+	// uvs
+	bool (*encodeUVSByIndex)(table_cmap * cmap, cmap_UVS_key c, uint16_t gid);
+	bool (*encodeUVSByName)(table_cmap * cmap, cmap_UVS_key c, MOVE sds name);
+	bool (*unmapUVS)(table_cmap * cmap, cmap_UVS_key c);
+	otfcc_GlyphHandle *(*lookupUVS)(const table_cmap *cmap, cmap_UVS_key c);
+}
+table_iCmap;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cvt.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cvt.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/cvt.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,12 @@
+#ifndef CARYLL_INCLUDE_TABLE_CVT_H
+#define CARYLL_INCLUDE_TABLE_CVT_H
+
+#include "table-common.h"
+
+typedef struct {
+	uint32_t length;
+	OWNING uint16_t *words;
+} table_cvt;
+extern caryll_RefElementInterface(table_cvt) table_iCvt;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fpgm-prep.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fpgm-prep.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fpgm-prep.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,14 @@
+#ifndef CARYLL_INCLUDE_TABLE_FPGM_PREP_H
+#define CARYLL_INCLUDE_TABLE_FPGM_PREP_H
+
+#include "table-common.h"
+
+typedef struct {
+	sds tag;
+	uint32_t length;
+	OWNING uint8_t *bytes;
+} table_fpgm_prep;
+
+extern caryll_RefElementInterface(table_fpgm_prep) table_iFpgm_prep;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fvar.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fvar.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/fvar.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,40 @@
+#ifndef CARYLL_INCLUDE_TABLE_FVAR_H
+#define CARYLL_INCLUDE_TABLE_FVAR_H
+
+#include "table-common.h"
+#include "otfcc/vf/vf.h"
+
+// vf_Axis and vf_Axes are defined in vf/vf.h
+// fvar_Instance is defined below
+typedef struct {
+	uint16_t subfamilyNameID;
+	uint16_t flags;
+	VV coordinates;
+	uint16_t postScriptNameID;
+} fvar_Instance;
+extern caryll_ElementInterface(fvar_Instance) fvar_iInstance;
+typedef caryll_Vector(fvar_Instance) fvar_InstanceList;
+extern caryll_VectorInterface(fvar_InstanceList, fvar_Instance) fvar_iInstanceList;
+
+typedef struct {
+	sds name;
+	vq_Region *region;
+	UT_hash_handle hh;
+} fvar_Master;
+
+typedef struct {
+	uint16_t majorVersion;
+	uint16_t minorVersion;
+	vf_Axes axes;
+	fvar_InstanceList instances;
+	fvar_Master *masters;
+} table_fvar;
+
+extern caryll_ElementInterfaceOf(table_fvar) {
+	caryll_RT(table_fvar);
+	const vq_Region *(*registerRegion)(table_fvar * fvar, MOVE vq_Region * region);
+	const fvar_Master *(*findMasterByRegion)(const table_fvar *fvar, const vq_Region *region);
+}
+table_iFvar;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/gasp.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/gasp.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/gasp.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,24 @@
+#ifndef CARYLL_INCLUDE_TABLE_GASP_H
+#define CARYLL_INCLUDE_TABLE_GASP_H
+
+#include "table-common.h"
+
+typedef struct {
+	glyphsize_t rangeMaxPPEM;
+	bool dogray;
+	bool gridfit;
+	bool symmetric_smoothing;
+	bool symmetric_gridfit;
+} gasp_Record;
+extern caryll_ElementInterface(gasp_Record) gasp_iRecord;
+typedef caryll_Vector(gasp_Record) gasp_RecordList;
+extern caryll_VectorInterface(gasp_RecordList, gasp_Record) gasp_iRecordList;
+
+typedef struct {
+	uint16_t version;
+	OWNING gasp_RecordList records;
+} table_gasp;
+
+extern caryll_RefElementInterface(table_gasp) table_iGasp;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/glyf.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/glyf.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/glyf.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,129 @@
+#ifndef CARYLL_INCLUDE_TABLE_GLYF_H
+#define CARYLL_INCLUDE_TABLE_GLYF_H
+
+#include "table-common.h"
+#include "head.h"
+#include "maxp.h"
+#include "fvar.h"
+
+enum GlyphType { SIMPLE, COMPOSITE };
+
+typedef struct {
+	VQ x;
+	VQ y;
+	int8_t onCurve; // a mask indicates whether a point is on-curve or off-curve
+	                // bit 0     : 1 for on-curve, 0 for off-curve. JSON field: "on"
+	                // bit 1 - 7 : unused, set to 0
+	                // in JSON, they are separated into several boolean fields.
+} glyf_Point;
+extern caryll_ValElementInterface(glyf_Point) glyf_iPoint;
+typedef caryll_Vector(glyf_Point) glyf_Contour;
+extern caryll_VectorInterface(glyf_Contour, glyf_Point) glyf_iContour;
+
+typedef caryll_Vector(glyf_Contour) glyf_ContourList;
+extern caryll_VectorInterface(glyf_ContourList, glyf_Contour) glyf_iContourList;
+
+// CFF stems and hint masks
+typedef struct {
+	pos_t position;
+	pos_t width;
+	uint16_t map;
+} glyf_PostscriptStemDef;
+extern caryll_ElementInterface(glyf_PostscriptStemDef) glyf_iPostscriptStemDef;
+typedef caryll_Vector(glyf_PostscriptStemDef) glyf_StemDefList;
+extern caryll_VectorInterface(glyf_StemDefList, glyf_PostscriptStemDef) glyf_iStemDefList;
+
+typedef struct {
+	uint16_t pointsBefore;
+	uint16_t contoursBefore;
+	bool maskH[0x100];
+	bool maskV[0x100];
+} glyf_PostscriptHintMask;
+extern caryll_ElementInterface(glyf_PostscriptHintMask) glyf_iPostscriptHintMask;
+typedef caryll_Vector(glyf_PostscriptHintMask) glyf_MaskList;
+extern caryll_VectorInterface(glyf_MaskList, glyf_PostscriptHintMask) glyf_iMaskList;
+
+typedef enum {
+	REF_XY = 0,
+	REF_ANCHOR_ANCHOR = 1,
+	REF_ANCHOR_XY = 2,
+	REF_ANCHOR_CONSOLIDATED = 3,
+	REF_ANCHOR_CONSOLIDATING_ANCHOR = 4,
+	REF_ANCHOR_CONSOLIDATING_XY = 5,
+} RefAnchorStatus;
+
+typedef struct {
+	//// NOTE: this part and below looks like a glyf_Point
+	VQ x;
+	VQ y;
+	// flags
+	bool roundToGrid;
+	bool useMyMetrics;
+	// the glyph being referenced
+	otfcc_GlyphHandle glyph;
+	// transformation term
+	scale_t a;
+	scale_t b;
+	scale_t c;
+	scale_t d;
+	// Anchorness term
+	RefAnchorStatus isAnchored;
+	shapeid_t inner;
+	shapeid_t outer;
+} glyf_ComponentReference;
+extern caryll_ValElementInterface(glyf_ComponentReference) glyf_iComponentReference;
+typedef caryll_Vector(glyf_ComponentReference) glyf_ReferenceList;
+extern caryll_VectorInterface(glyf_ReferenceList, glyf_ComponentReference) glyf_iReferenceList;
+
+typedef struct {
+	pos_t xMin;
+	pos_t xMax;
+	pos_t yMin;
+	pos_t yMax;
+	uint16_t nestDepth;
+	uint16_t nPoints;
+	uint16_t nContours;
+	uint16_t nCompositePoints;
+	uint16_t nCompositeContours;
+} glyf_GlyphStat;
+
+typedef struct {
+	sds name;
+
+	// Metrics
+	VQ horizontalOrigin;
+	VQ advanceWidth;
+	VQ verticalOrigin;
+	VQ advanceHeight;
+
+	// Outline
+	// NOTE: SFNT does not support mixed glyphs, but we do.
+	OWNING glyf_ContourList contours;
+	OWNING glyf_ReferenceList references;
+
+	// Postscript hints
+	OWNING glyf_StemDefList stemH;
+	OWNING glyf_StemDefList stemV;
+	OWNING glyf_MaskList hintMasks;
+	OWNING glyf_MaskList contourMasks;
+
+	// TTF instructions
+	uint16_t instructionsLength;
+	uint8_t *instructions;
+	// TTF Screen specific
+	uint8_t yPel;
+
+	// CID FDSelect
+	otfcc_FDHandle fdSelect;
+	glyphid_t cid; // Subset CID fonts may need this to represent the original CID entry
+
+	// Stats
+	glyf_GlyphStat stat;
+} glyf_Glyph;
+
+typedef glyf_Glyph *glyf_GlyphPtr;
+extern caryll_ElementInterface(glyf_GlyphPtr) glyf_iGlyphPtr;
+typedef caryll_Vector(glyf_GlyphPtr) table_glyf;
+extern caryll_VectorInterface(table_glyf, glyf_GlyphPtr) table_iGlyf;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hdmx.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hdmx.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hdmx.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,23 @@
+#ifndef CARYLL_INCLUDE_TABLE_HDMX_H
+#define CARYLL_INCLUDE_TABLE_HDMX_H
+
+#include "table-common.h"
+#include "maxp.h"
+
+typedef struct {
+	uint8_t pixelSize;
+	uint8_t maxWidth;
+	uint8_t *widths;
+} device_record;
+
+typedef struct {
+	// Horizontal device metrics
+	uint16_t version;
+	uint16_t numRecords;
+	uint32_t sizeDeviceRecord;
+	OWNING device_record *records;
+} table_hdmx;
+
+extern caryll_RefElementInterface(table_hdmx) table_iHdmx;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/head.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/head.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/head.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,29 @@
+#ifndef CARYLL_INCLUDE_TABLE_HEAD_H
+#define CARYLL_INCLUDE_TABLE_HEAD_H
+
+#include "table-common.h"
+
+typedef struct {
+	// Font header
+	f16dot16 version;
+	uint32_t fontRevision;
+	uint32_t checkSumAdjustment;
+	uint32_t magicNumber;
+	uint16_t flags;
+	uint16_t unitsPerEm;
+	int64_t created;
+	int64_t modified;
+	int16_t xMin;
+	int16_t yMin;
+	int16_t xMax;
+	int16_t yMax;
+	uint16_t macStyle;
+	uint16_t lowestRecPPEM;
+	int16_t fontDirectoryHint;
+	int16_t indexToLocFormat;
+	int16_t glyphDataFormat;
+} table_head;
+
+extern caryll_RefElementInterface(table_head) table_iHead;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hhea.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hhea.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hhea.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,25 @@
+#ifndef CARYLL_INCLUDE_TABLE_HHEA_H
+#define CARYLL_INCLUDE_TABLE_HHEA_H
+
+#include "table-common.h"
+
+typedef struct {
+	// Horizontal header
+	f16dot16 version;
+	int16_t ascender;
+	int16_t descender;
+	int16_t lineGap;
+	uint16_t advanceWidthMax;
+	int16_t minLeftSideBearing;
+	int16_t minRightSideBearing;
+	int16_t xMaxExtent;
+	int16_t caretSlopeRise;
+	int16_t caretSlopeRun;
+	int16_t caretOffset;
+	int16_t reserved[4];
+	int16_t metricDataFormat;
+	uint16_t numberOfMetrics;
+} table_hhea;
+extern caryll_RefElementInterface(table_hhea) table_iHhea;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hmtx.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hmtx.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/hmtx.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,21 @@
+#ifndef CARYLL_INCLUDE_TABLE_HMTX_H
+#define CARYLL_INCLUDE_TABLE_HMTX_H
+
+#include "table-common.h"
+
+#include "hhea.h"
+#include "maxp.h"
+
+typedef struct {
+	length_t advanceWidth;
+	pos_t lsb;
+} horizontal_metric;
+
+typedef struct {
+	// Horizontal metrics
+	OWNING horizontal_metric *metrics;
+	OWNING pos_t *leftSideBearing;
+} table_hmtx;
+extern caryll_RefElementInterface(table_hmtx) table_iHmtx;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/maxp.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/maxp.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/maxp.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,27 @@
+#ifndef CARYLL_INCLUDE_TABLE_MAXP_H
+#define CARYLL_INCLUDE_TABLE_MAXP_H
+
+#include "table-common.h"
+
+typedef struct {
+	// Maximum profile
+	f16dot16 version;
+	uint16_t numGlyphs;
+	uint16_t maxPoints;
+	uint16_t maxContours;
+	uint16_t maxCompositePoints;
+	uint16_t maxCompositeContours;
+	uint16_t maxZones;
+	uint16_t maxTwilightPoints;
+	uint16_t maxStorage;
+	uint16_t maxFunctionDefs;
+	uint16_t maxInstructionDefs;
+	uint16_t maxStackElements;
+	uint16_t maxSizeOfInstructions;
+	uint16_t maxComponentElements;
+	uint16_t maxComponentDepth;
+} table_maxp;
+
+extern caryll_RefElementInterface(table_maxp) table_iMaxp;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/meta.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/meta.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/meta.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,23 @@
+#ifndef CARYLL_INCLUDE_TABLE_META_H
+#define CARYLL_INCLUDE_TABLE_META_H
+
+#include "table-common.h"
+
+// Layer and layer vector
+typedef struct {
+	uint32_t tag;
+	sds data;
+} meta_Entry;
+extern caryll_ElementInterface(meta_Entry) meta_iEntry;
+typedef caryll_Vector(meta_Entry) meta_Entries;
+extern caryll_VectorInterface(meta_Entries, meta_Entry) meta_iEntries;
+
+// glyph-to-layers mapping and COLR table
+typedef struct {
+	uint32_t version;
+	uint32_t flags;
+	meta_Entries entries;
+} table_meta;
+extern caryll_RefElementInterface(table_meta) table_iMeta;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/name.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/name.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/name.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,17 @@
+#ifndef CARYLL_INCLUDE_TABLE_NAME_H
+#define CARYLL_INCLUDE_TABLE_NAME_H
+
+#include "table-common.h"
+
+typedef struct {
+	uint16_t platformID;
+	uint16_t encodingID;
+	uint16_t languageID;
+	uint16_t nameID;
+	sds nameString;
+} otfcc_NameRecord;
+extern caryll_ElementInterface(otfcc_NameRecord) otfcc_iNameRecord;
+typedef caryll_Vector(otfcc_NameRecord) table_name;
+extern caryll_VectorInterface(table_name, otfcc_NameRecord) table_iName;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/classdef.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/classdef.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/classdef.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,28 @@
+#ifndef CARYLL_INCLUDE_TABLE_OTL_CLASSDEF_H
+#define CARYLL_INCLUDE_TABLE_OTL_CLASSDEF_H
+#include "../table-common.h"
+#include "coverage.h"
+
+typedef struct {
+	glyphid_t numGlyphs;
+	uint32_t capacity;
+	glyphclass_t maxclass;
+	otfcc_GlyphHandle *glyphs;
+	glyphclass_t *classes;
+} otl_ClassDef;
+
+struct __otfcc_IClassDef {
+	caryll_RT(otl_ClassDef);
+	void (*push)(otl_ClassDef *cd, MOVE otfcc_GlyphHandle h, glyphclass_t cls);
+
+	otl_ClassDef *(*read)(const uint8_t *data, uint32_t tableLength, uint32_t offset);
+	otl_ClassDef *(*expand)(otl_Coverage *cov, otl_ClassDef *ocd);
+	json_value *(*dump)(const otl_ClassDef *cd);
+	otl_ClassDef *(*parse)(const json_value *_cd);
+	caryll_Buffer *(*build)(const otl_ClassDef *cd);
+	void (*shrink)(otl_ClassDef *cd);
+};
+
+extern const struct __otfcc_IClassDef otl_iClassDef;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/coverage.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/coverage.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl/coverage.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,25 @@
+#ifndef CARYLL_INCLUDE_TABLE_OTL_COVERAGE_H
+#define CARYLL_INCLUDE_TABLE_OTL_COVERAGE_H
+#include "../table-common.h"
+
+typedef struct {
+	glyphid_t numGlyphs;
+	uint32_t capacity;
+	otfcc_GlyphHandle *glyphs;
+} otl_Coverage;
+
+struct __otfcc_ICoverage {
+	caryll_RT(otl_Coverage);
+	void (*clear)(otl_Coverage *coverage, uint32_t n);
+	otl_Coverage *(*read)(const uint8_t *data, uint32_t tableLength, uint32_t offset);
+	json_value *(*dump)(const otl_Coverage *coverage);
+	otl_Coverage *(*parse)(const json_value *cov);
+	caryll_Buffer *(*build)(const otl_Coverage *coverage);
+	caryll_Buffer *(*buildFormat)(const otl_Coverage *coverage, uint16_t format);
+	void (*shrink)(otl_Coverage *coverage, bool dosort);
+	void (*push)(otl_Coverage *coverage, MOVE otfcc_GlyphHandle h);
+};
+
+extern const struct __otfcc_ICoverage otl_iCoverage;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/otl.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,257 @@
+#ifndef CARYLL_INCLUDE_TABLE_OTL_H
+#define CARYLL_INCLUDE_TABLE_OTL_H
+
+#include "caryll/vector.h"
+#include "table-common.h"
+#include "otl/coverage.h"
+#include "otl/classdef.h"
+
+typedef enum {
+	otl_type_unknown = 0,
+
+	otl_type_gsub_unknown = 0x10,
+	otl_type_gsub_single = 0x11,
+	otl_type_gsub_multiple = 0x12,
+	otl_type_gsub_alternate = 0x13,
+	otl_type_gsub_ligature = 0x14,
+	otl_type_gsub_context = 0x15,
+	otl_type_gsub_chaining = 0x16,
+	otl_type_gsub_extend = 0x17,
+	otl_type_gsub_reverse = 0x18,
+
+	otl_type_gpos_unknown = 0x20,
+	otl_type_gpos_single = 0x21,
+	otl_type_gpos_pair = 0x22,
+	otl_type_gpos_cursive = 0x23,
+	otl_type_gpos_markToBase = 0x24,
+	otl_type_gpos_markToLigature = 0x25,
+	otl_type_gpos_markToMark = 0x26,
+	otl_type_gpos_context = 0x27,
+	otl_type_gpos_chaining = 0x28,
+	otl_type_gpos_extend = 0x29
+} otl_LookupType;
+
+typedef union _otl_subtable otl_Subtable;
+typedef struct _otl_lookup otl_Lookup;
+
+typedef struct {
+	pos_t dx;
+	pos_t dy;
+	pos_t dWidth;
+	pos_t dHeight;
+} otl_PositionValue;
+
+// GSUB subtable formats
+typedef struct {
+	OWNING otfcc_GlyphHandle from;
+	OWNING otfcc_GlyphHandle to;
+} otl_GsubSingleEntry;
+typedef caryll_Vector(otl_GsubSingleEntry) subtable_gsub_single;
+extern caryll_VectorInterface(subtable_gsub_single, otl_GsubSingleEntry) iSubtable_gsub_single;
+
+typedef struct {
+	OWNING otfcc_GlyphHandle from;
+	OWNING otl_Coverage *to;
+} otl_GsubMultiEntry;
+typedef caryll_Vector(otl_GsubMultiEntry) subtable_gsub_multi;
+extern caryll_VectorInterface(subtable_gsub_multi, otl_GsubMultiEntry) iSubtable_gsub_multi;
+
+typedef struct {
+	OWNING otl_Coverage *from;
+	OWNING otfcc_GlyphHandle to;
+} otl_GsubLigatureEntry;
+typedef caryll_Vector(otl_GsubLigatureEntry) subtable_gsub_ligature;
+extern caryll_VectorInterface(subtable_gsub_ligature,
+                              otl_GsubLigatureEntry) iSubtable_gsub_ligature;
+
+typedef enum {
+	otl_chaining_canonical =
+	    0, // The canonical form of chaining contextual substitution, one rule per subtable.
+	otl_chaining_poly = 1, // The multi-rule form, right after reading OTF. N rule per subtable.
+	otl_chaining_classified =
+	    2 // The classified intermediate form, for building TTF with compression.
+	      // N rules, has classdefs, and coverage GID interpreted as class number.
+} otl_chaining_type;
+
+typedef struct {
+	tableid_t index;
+	otfcc_LookupHandle lookup;
+} otl_ChainLookupApplication;
+typedef struct {
+	tableid_t matchCount;
+	tableid_t inputBegins;
+	tableid_t inputEnds;
+	OWNING otl_Coverage **match;
+	tableid_t applyCount;
+	OWNING otl_ChainLookupApplication *apply;
+} otl_ChainingRule;
+typedef struct {
+	otl_chaining_type type;
+	union {
+		otl_ChainingRule rule; // for type = otl_chaining_canonical
+		struct {               // for type = otl_chaining_poly or otl_chaining_classified
+			tableid_t rulesCount;
+			OWNING otl_ChainingRule **rules;
+			OWNING otl_ClassDef *bc;
+			OWNING otl_ClassDef *ic;
+			OWNING otl_ClassDef *fc;
+		};
+	};
+} subtable_chaining;
+extern caryll_RefElementInterface(subtable_chaining) iSubtable_chaining;
+
+typedef struct {
+	tableid_t matchCount;
+	tableid_t inputIndex;
+	OWNING otl_Coverage **match;
+	OWNING otl_Coverage *to;
+} subtable_gsub_reverse;
+extern caryll_RefElementInterface(subtable_gsub_reverse) iSubtable_gsub_reverse;
+
+// GPOS subtable formats
+typedef struct {
+	OWNING otfcc_GlyphHandle target;
+	OWNING otl_PositionValue value;
+} otl_GposSingleEntry;
+typedef caryll_Vector(otl_GposSingleEntry) subtable_gpos_single;
+extern caryll_VectorInterface(subtable_gpos_single, otl_GposSingleEntry) iSubtable_gpos_single;
+
+typedef struct {
+	bool present;
+	pos_t x;
+	pos_t y;
+} otl_Anchor;
+
+typedef struct {
+	OWNING otl_ClassDef *first;
+	OWNING otl_ClassDef *second;
+	OWNING otl_PositionValue **firstValues;
+	OWNING otl_PositionValue **secondValues;
+} subtable_gpos_pair;
+extern caryll_RefElementInterface(subtable_gpos_pair) iSubtable_gpos_pair;
+
+typedef struct {
+	OWNING otfcc_GlyphHandle target;
+	OWNING otl_Anchor enter;
+	OWNING otl_Anchor exit;
+} otl_GposCursiveEntry;
+typedef caryll_Vector(otl_GposCursiveEntry) subtable_gpos_cursive;
+extern caryll_VectorInterface(subtable_gpos_cursive, otl_GposCursiveEntry) iSubtable_gpos_cursive;
+
+typedef struct {
+	OWNING otfcc_GlyphHandle glyph;
+	glyphclass_t markClass;
+	otl_Anchor anchor;
+} otl_MarkRecord;
+typedef caryll_Vector(otl_MarkRecord) otl_MarkArray;
+extern caryll_VectorInterface(otl_MarkArray, otl_MarkRecord) otl_iMarkArray;
+
+typedef struct {
+	OWNING otfcc_GlyphHandle glyph;
+	OWNING otl_Anchor *anchors;
+} otl_BaseRecord;
+typedef caryll_Vector(otl_BaseRecord) otl_BaseArray;
+extern caryll_VectorInterface(otl_BaseArray, otl_BaseRecord) otl_iBaseArray;
+
+typedef struct {
+	glyphclass_t classCount;
+	OWNING otl_MarkArray markArray;
+	otl_BaseArray baseArray;
+} subtable_gpos_markToSingle;
+extern caryll_RefElementInterface(subtable_gpos_markToSingle) iSubtable_gpos_markToSingle;
+
+typedef struct {
+	OWNING otfcc_GlyphHandle glyph;
+	glyphid_t componentCount;
+	OWNING otl_Anchor **anchors;
+} otl_LigatureBaseRecord;
+typedef caryll_Vector(otl_LigatureBaseRecord) otl_LigatureArray;
+extern caryll_VectorInterface(otl_LigatureArray, otl_LigatureBaseRecord) otl_iLigatureArray;
+
+typedef struct {
+	glyphclass_t classCount;
+	OWNING otl_MarkArray markArray;
+	otl_LigatureArray ligArray;
+} subtable_gpos_markToLigature;
+extern caryll_RefElementInterface(subtable_gpos_markToLigature) iSubtable_gpos_markToLigature;
+
+typedef struct {
+	otl_LookupType type;
+	otl_Subtable *subtable;
+} subtable_extend;
+
+typedef union _otl_subtable {
+	subtable_gsub_single gsub_single;
+	subtable_gsub_multi gsub_multi;
+	subtable_gsub_ligature gsub_ligature;
+	subtable_chaining chaining;
+	subtable_gsub_reverse gsub_reverse;
+	subtable_gpos_single gpos_single;
+	subtable_gpos_pair gpos_pair;
+	subtable_gpos_cursive gpos_cursive;
+	subtable_gpos_markToSingle gpos_markToSingle;
+	subtable_gpos_markToLigature gpos_markToLigature;
+	subtable_extend extend;
+} otl_Subtable;
+
+typedef otl_Subtable *otl_SubtablePtr;
+typedef caryll_Vector(otl_SubtablePtr) otl_SubtableList;
+extern caryll_VectorInterfaceTypeName(otl_SubtableList) {
+	caryll_VectorInterfaceTrait(otl_SubtableList, otl_SubtablePtr);
+	void (*disposeDependent)(MODIFY otl_SubtableList *, const otl_Lookup *);
+}
+otl_iSubtableList;
+
+struct _otl_lookup {
+	sds name;
+	otl_LookupType type;
+	uint32_t _offset;
+	uint16_t flags;
+	OWNING otl_SubtableList subtables;
+};
+
+// owning lookup list
+typedef OWNING otl_Lookup *otl_LookupPtr;
+extern caryll_ElementInterface(otl_LookupPtr) otl_iLookupPtr;
+typedef caryll_Vector(otl_LookupPtr) otl_LookupList;
+extern caryll_VectorInterface(otl_LookupList, otl_LookupPtr) otl_iLookupList;
+
+// observe lookup list
+typedef OBSERVE otl_Lookup *otl_LookupRef;
+extern caryll_ElementInterface(otl_LookupRef) otl_iLookupRef;
+typedef caryll_Vector(otl_LookupRef) otl_LookupRefList;
+extern caryll_VectorInterface(otl_LookupRefList, otl_LookupRef) otl_iLookupRefList;
+
+typedef struct {
+	sds name;
+	OWNING otl_LookupRefList lookups;
+} otl_Feature;
+// owning feature list
+typedef OWNING otl_Feature *otl_FeaturePtr;
+extern caryll_ElementInterface(otl_FeaturePtr) otl_iFeaturePtr;
+typedef caryll_Vector(otl_FeaturePtr) otl_FeatureList;
+extern caryll_VectorInterface(otl_FeatureList, otl_FeaturePtr) otl_iFeatureList;
+// observe feature list
+typedef OBSERVE otl_Feature *otl_FeatureRef;
+extern caryll_ElementInterface(otl_FeatureRef) otl_iFeatureRef;
+typedef caryll_Vector(otl_FeatureRef) otl_FeatureRefList;
+extern caryll_VectorInterface(otl_FeatureRefList, otl_FeatureRef) otl_iFeatureRefList;
+
+typedef struct {
+	sds name;
+	OWNING otl_FeatureRef requiredFeature;
+	OWNING otl_FeatureRefList features;
+} otl_LanguageSystem;
+typedef otl_LanguageSystem *otl_LanguageSystemPtr;
+extern caryll_ElementInterface(otl_LanguageSystemPtr) otl_iLanguageSystem;
+typedef caryll_Vector(otl_LanguageSystemPtr) otl_LangSystemList;
+extern caryll_VectorInterface(otl_LangSystemList, otl_LanguageSystemPtr) otl_iLangSystemList;
+
+typedef struct {
+	otl_LookupList lookups;
+	otl_FeatureList features;
+	otl_LangSystemList languages;
+} table_OTL;
+extern caryll_RefElementInterface(table_OTL) table_iOTL;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/post.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/post.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/post.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,22 @@
+#ifndef CARYLL_INCLUDE_TABLE_POST_H
+#define CARYLL_INCLUDE_TABLE_POST_H
+
+#include "table-common.h"
+
+typedef struct {
+	// PostScript information
+	f16dot16 version;
+	f16dot16 italicAngle;
+	int16_t underlinePosition;
+	int16_t underlineThickness;
+	uint32_t isFixedPitch;
+	uint32_t minMemType42;
+	uint32_t maxMemType42;
+	uint32_t minMemType1;
+	uint32_t maxMemType1;
+	OWNING otfcc_GlyphOrder *post_name_map;
+} table_post;
+
+extern caryll_RefElementInterface(table_post) iTable_post;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/table-common.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/table-common.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/table-common.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,18 @@
+#ifndef CARYLL_INCLUDE_TABLE_COMMON_H
+#define CARYLL_INCLUDE_TABLE_COMMON_H
+
+#include "dep/json.h"
+
+#include "caryll/buffer.h"
+#include "caryll/ownership.h"
+#include "caryll/vector.h"
+
+#include "otfcc/handle.h"
+#include "otfcc/glyph-order.h"
+#include "otfcc/primitives.h"
+#include "otfcc/sfnt.h"
+#include "otfcc/options.h"
+
+#include "otfcc/vf/vq.h"
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vhea.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vhea.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vhea.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,28 @@
+#ifndef CARYLL_INCLUDE_TABLE_VHEA_H
+#define CARYLL_INCLUDE_TABLE_VHEA_H
+
+#include "table-common.h"
+
+typedef struct {
+	f16dot16 version;
+	int16_t ascent;
+	int16_t descent;
+	int16_t lineGap;
+	int16_t advanceHeightMax;
+	int16_t minTop;
+	int16_t minBottom;
+	int16_t yMaxExtent;
+	int16_t caretSlopeRise;
+	int16_t caretSlopeRun;
+	int16_t caretOffset;
+	int16_t dummy0;
+	int16_t dummy1;
+	int16_t dummy2;
+	int16_t dummy3;
+	int16_t metricDataFormat;
+	uint16_t numOfLongVerMetrics;
+} table_vhea;
+
+extern caryll_RefElementInterface(table_vhea) table_iVhea;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vmtx.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vmtx.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/table/vmtx.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,21 @@
+#ifndef CARYLL_INCLUDE_TABLE_VMTX_H
+#define CARYLL_INCLUDE_TABLE_VMTX_H
+
+#include "table-common.h"
+
+#include "vhea.h"
+#include "maxp.h"
+
+typedef struct {
+	length_t advanceHeight;
+	pos_t tsb;
+} vertical_metric;
+
+typedef struct {
+	OWNING vertical_metric *metrics;
+	pos_t *topSideBearing;
+} table_vmtx;
+
+extern caryll_RefElementInterface(table_vmtx) table_iVmtx;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/axis.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/axis.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/axis.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,21 @@
+#ifndef CARYLL_VF_AXIS_H
+#define CARYLL_VF_AXIS_H
+
+#include "caryll/element.h"
+#include "caryll/vector.h"
+#include "otfcc/primitives.h"
+
+typedef struct {
+	uint32_t tag;
+	pos_t minValue;
+	pos_t defaultValue;
+	pos_t maxValue;
+	uint16_t flags;
+	uint16_t axisNameID;
+} vf_Axis;
+
+extern caryll_ValElementInterface(vf_Axis) vf_iAxis;
+typedef caryll_Vector(vf_Axis) vf_Axes;
+extern caryll_VectorInterface(vf_Axes, vf_Axis) vf_iAxes;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/region.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/region.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/region.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,34 @@
+#ifndef CARYLL_VF_REGION_H
+#define CARYLL_VF_REGION_H
+
+#include "caryll/element.h"
+#include "caryll/vector.h"
+#include "otfcc/primitives.h"
+
+#include "vv.h"
+
+typedef struct {
+	pos_t start;
+	pos_t peak;
+	pos_t end;
+} vq_AxisSpan;
+
+bool vq_AxisSpanIsOne(const vq_AxisSpan *a);
+
+typedef struct {
+	shapeid_t dimensions;
+	vq_AxisSpan spans[];
+} vq_Region;
+
+vq_Region *vq_createRegion(shapeid_t dimensions);
+void vq_deleteRegion(MOVE vq_Region *region);
+vq_Region *vq_copyRegion(const vq_Region *region);
+
+int vq_compareRegion(const vq_Region *a, const vq_Region *b);
+pos_t vq_regionGetWeight(const vq_Region *r, const VV *v);
+void vq_showRegion(const vq_Region *r);
+
+// function macros
+#define VQ_REGION_SIZE(n) (sizeof(vq_Region) + sizeof(vq_AxisSpan) * (n))
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vf.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vf.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vf.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,14 @@
+#ifndef CARYLL_VF_VF_H
+#define CARYLL_VF_VF_H
+
+// According to OT 1.8 specification, computing a final coordinate from a variable is a inner
+// product:
+// <x, delta | VS_AVAR | style >
+// We will treat the data representing a point coordinate or a metric as a Functional, while the
+// VS-AVAR
+// part as a Ket.
+
+#include "otfcc/vf/vq.h"
+#include "otfcc/vf/axis.h"
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vq.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vq.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vq.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,61 @@
+#ifndef CARYLL_VF_FUNCTIONAL_H
+#define CARYLL_VF_FUNCTIONAL_H
+
+#include "caryll/ownership.h"
+#include "caryll/element.h"
+#include "caryll/vector.h"
+#include "otfcc/primitives.h"
+#include "otfcc/handle.h"
+
+#include "region.h"
+
+typedef enum { VQ_STILL = 0, VQ_DELTA = 1 } VQSegType;
+typedef struct {
+	VQSegType type;
+	union {
+		pos_t still;
+		struct {
+			pos_t quantity;
+			bool touched;
+			const vq_Region *region; // non-owning : they are in FVAR
+		} delta;
+	} val;
+} vq_Segment;
+
+extern caryll_ElementInterfaceOf(vq_Segment) {
+	caryll_VT(vq_Segment);
+	caryll_Show(vq_Segment);
+	caryll_Ord(vq_Segment);
+	vq_Segment (*createStill)(pos_t x);
+	vq_Segment (*createDelta)(pos_t delta, vq_Region * region);
+}
+vq_iSegment;
+typedef caryll_Vector(vq_Segment) vq_SegList;
+extern caryll_VectorInterface(vq_SegList, vq_Segment) vq_iSegList;
+
+// VQ
+typedef struct {
+	pos_t kernel;
+	vq_SegList shift;
+} VQ;
+extern caryll_VectorInterfaceTypeName(VQ) {
+	caryll_VT(VQ);
+	caryll_Module(VQ, scale_t); // VQ forms a module (vector space)
+	caryll_Ord(VQ);             // VQs are comparable
+	caryll_Show(VQ);
+	// Getting still
+	pos_t (*getStill)(const VQ v);
+	// Creating still
+	VQ (*createStill)(pos_t x);
+	// Being still
+	bool (*isStill)(const VQ v);
+	// Being zero
+	bool (*isZero)(const VQ v, const pos_t err);
+	// util functions
+	// point linear transform
+	VQ (*pointLinearTfm)(const VQ ax, pos_t a, const VQ x, pos_t b, const VQ y);
+	void (*addDelta)(MODIFY VQ * v, const bool touched, const vq_Region *const r,
+	                 const pos_t quantity);
+}
+iVQ;
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vv.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vv.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/vf/vv.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,18 @@
+#ifndef CARYLL_VF_VV_H
+#define CARYLL_VF_VV_H
+
+#include "caryll/element.h"
+#include "caryll/vector.h"
+#include "otfcc/primitives.h"
+
+extern caryll_ValElementInterface(pos_t) vq_iPosT;
+typedef caryll_Vector(pos_t) VV;
+extern caryll_VectorInterfaceTypeName(VV) {
+	caryll_VectorInterfaceTrait(VV, pos_t);
+	// Monoid instances
+	VV (*neutral)(tableid_t dimensions);
+}
+iVV;
+// extern caryll_VectorInterface(VV, pos_t) iVV;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,132 @@
+#include "bkblock.h"
+
+static void bkblock_acells(bk_Block *b, uint32_t len) {
+	if (len <= b->length + b->free) {
+		// We have enough space
+		b->free -= len - b->length;
+		b->length = len;
+	} else {
+		// allocate space
+		b->length = len;
+		b->free = (len >> 1) & 0xFFFFFF;
+		RESIZE(b->cells, b->length + b->free);
+	}
+}
+bool bk_cellIsPointer(bk_Cell *cell) {
+	return cell->t >= p16;
+}
+
+static bk_Cell *bkblock_grow(bk_Block *b, uint32_t len) {
+	uint32_t olen = b->length;
+	bkblock_acells(b, olen + len);
+	return &(b->cells[olen]);
+}
+
+bk_Block *_bkblock_init() {
+	bk_Block *b;
+	NEW(b);
+	bkblock_acells(b, 0);
+	return b;
+}
+
+static void bkblock_pushint(bk_Block *b, bk_CellType type, uint32_t x) {
+	bk_Cell *cell = bkblock_grow(b, 1);
+	cell->t = type;
+	cell->z = x;
+}
+static void bkblock_pushptr(bk_Block *b, bk_CellType type, bk_Block *p) {
+	bk_Cell *cell = bkblock_grow(b, 1);
+	cell->t = type;
+	cell->p = p;
+}
+
+static void vbkpushitems(bk_Block *b, bk_CellType type0, va_list ap) {
+	bk_CellType curtype = type0;
+	while (curtype) {
+		if (curtype == bkcopy || curtype == bkembed) {
+			bk_Block *par = va_arg(ap, bk_Block *);
+			if (par && par->cells) {
+				for (uint32_t j = 0; j < par->length; j++) {
+					if (bk_cellIsPointer(par->cells + j)) {
+						bkblock_pushptr(b, par->cells[j].t, par->cells[j].p);
+					} else {
+						bkblock_pushint(b, par->cells[j].t, par->cells[j].z);
+					}
+				}
+			}
+			if (curtype == bkembed && par) {
+				FREE(par->cells);
+				FREE(par);
+			}
+		} else if (curtype < p16) {
+			uint32_t par = va_arg(ap, int);
+			bkblock_pushint(b, curtype, par);
+		} else {
+			bk_Block *par = va_arg(ap, bk_Block *);
+			bkblock_pushptr(b, curtype, par);
+		}
+		curtype = va_arg(ap, int);
+	}
+}
+
+bk_Block *bk_new_Block(int type0, ...) {
+	va_list ap;
+	va_start(ap, type0);
+	bk_Block *b = _bkblock_init();
+	vbkpushitems(b, type0, ap);
+	va_end(ap);
+	return b;
+}
+
+bk_Block *bk_push(bk_Block *b, int type0, ...) {
+	va_list ap;
+	va_start(ap, type0);
+	vbkpushitems(b, type0, ap);
+	va_end(ap);
+	return b;
+}
+
+bk_Block *bk_newBlockFromStringLen(size_t len, const char *str) {
+	if (!str) return NULL;
+	bk_Block *b = bk_new_Block(bkover);
+	for (size_t j = 0; j < len; j++) {
+		bkblock_pushint(b, b8, str[j]);
+	}
+	return b;
+}
+
+bk_Block *bk_newBlockFromBuffer(MOVE caryll_Buffer *buf) {
+	if (!buf) return NULL;
+	bk_Block *b = bk_new_Block(bkover);
+	for (size_t j = 0; j < buf->size; j++) {
+		bkblock_pushint(b, b8, buf->data[j]);
+	}
+	buffree(buf);
+	return b;
+}
+bk_Block *bk_newBlockFromBufferCopy(OBSERVE caryll_Buffer *buf) {
+	if (!buf) return NULL;
+	bk_Block *b = bk_new_Block(bkover);
+	for (size_t j = 0; j < buf->size; j++) {
+		bkblock_pushint(b, b8, buf->data[j]);
+	}
+	return b;
+}
+
+void bk_printBlock(bk_Block *b) {
+	fprintf(stderr, "Block size %08x\n", (uint32_t)b->length);
+	fprintf(stderr, "------------------\n");
+	for (uint32_t j = 0; j < b->length; j++) {
+		if (bk_cellIsPointer(b->cells + j)) {
+			if (b->cells[j].p) {
+				fprintf(stderr, "  %3d %p[%d]\n", b->cells[j].t, b->cells[j].p,
+				        b->cells[j].p->_index);
+			} else {
+				fprintf(stderr, "  %3d [NULL]\n", b->cells[j].t);
+			}
+		} else {
+			fprintf(stderr, "  %3d %d\n", b->cells[j].t, b->cells[j].z);
+		}
+	}
+	fprintf(stderr, "------------------\n");
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,55 @@
+#ifndef CARYLL_BK_BLOCK_H
+#define CARYLL_BK_BLOCK_H
+
+#include <stdint.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+#include "caryll/ownership.h"
+#include "support/otfcc-alloc.h"
+#include "caryll/buffer.h"
+
+struct __caryll_bkblock;
+typedef enum {
+	bkover = 0,    // nothing
+	b8 = 1,        // byte
+	b16 = 2,       // short
+	b32 = 3,       // long
+	p16 = 0x10,    // 16-bit offset, p = pointer to block
+	p32 = 0x11,    // 32-bit offset, p = pointer to block
+	sp16 = 0x80,   // 16-bit offset, p = pointer to block, marked as compact
+	sp32 = 0x81,   // 32-bit offset, p = pointer to block, marked as compact
+	bkcopy = 0xFE, // Embed another block
+	bkembed = 0xFF // Embed another block
+} bk_CellType;
+typedef enum { VISIT_WHITE, VISIT_GRAY, VISIT_BLACK } bk_cell_visit_state;
+
+typedef struct {
+	bk_CellType t;
+	union {
+		uint32_t z;
+		struct __caryll_bkblock *p;
+	};
+} bk_Cell;
+
+typedef struct __caryll_bkblock {
+	bk_cell_visit_state _visitstate;
+	uint32_t _index;
+	uint32_t _height;
+	uint32_t _depth;
+	uint32_t length;
+	uint32_t free;
+	bk_Cell *cells;
+} bk_Block;
+
+bk_Block *_bkblock_init(void);
+bk_Block *bk_new_Block(int type0, ...);
+bk_Block *bk_push(bk_Block *b, int type0, ...);
+bk_Block *bk_newBlockFromStringLen(size_t len, const char *str);
+bk_Block *bk_newBlockFromBuffer(MOVE caryll_Buffer *buf);
+bk_Block *bk_newBlockFromBufferCopy(OBSERVE caryll_Buffer *buf);
+bool bk_cellIsPointer(bk_Cell *cell);
+void bk_printBlock(bk_Block *b);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,410 @@
+#include "bkgraph.h"
+
+static bk_GraphNode *_bkgraph_grow(bk_Graph *f) {
+	if (f->free) {
+		f->length++;
+		f->free--;
+	} else {
+		f->length = f->length + 1;
+		f->free = (f->length >> 1) & 0xFFFFFF;
+		RESIZE(f->entries, f->length + f->free);
+	}
+	return &(f->entries[f->length - 1]);
+}
+
+static uint32_t dfs_insert_cells(bk_Block *b, bk_Graph *f, uint32_t *order) {
+	if (!b || b->_visitstate == VISIT_GRAY) return 0;
+	if (b->_visitstate == VISIT_BLACK) return b->_height;
+	b->_visitstate = VISIT_GRAY;
+	uint32_t height = 0;
+	for (uint32_t j = 0; j < b->length; j++) {
+		bk_Cell *cell = &(b->cells[j]);
+		if (bk_cellIsPointer(cell) && cell->p) {
+			uint32_t thatHeight = dfs_insert_cells(cell->p, f, order);
+			if (thatHeight + 1 > height) height = thatHeight + 1;
+		}
+	}
+	bk_GraphNode *e = _bkgraph_grow(f);
+	e->alias = 0;
+	e->block = b;
+	*order += 1;
+	e->order = *order;
+	e->height = b->_height = height;
+	b->_visitstate = VISIT_BLACK;
+	return height;
+}
+
+static int _by_height(const void *_a, const void *_b) {
+	const bk_GraphNode *a = _a;
+	const bk_GraphNode *b = _b;
+	return a->height == b->height ? a->order - b->order : b->height - a->height;
+}
+
+static int _by_order(const void *_a, const void *_b) {
+	const bk_GraphNode *a = _a;
+	const bk_GraphNode *b = _b;
+	return a->block && b->block && a->block->_visitstate != b->block->_visitstate // Visited first
+	           ? b->block->_visitstate - a->block->_visitstate
+	           : a->block && b->block && a->block->_depth != b->block->_depth // By depth
+	                 ? a->block->_depth - b->block->_depth
+	                 : b->order - a->order; // By order
+}
+
+bk_Graph *bk_newGraphFromRootBlock(bk_Block *b) {
+	bk_Graph *forest;
+	NEW(forest);
+	uint32_t tsOrder = 0;
+	dfs_insert_cells(b, forest, &tsOrder);
+	qsort(forest->entries, forest->length, sizeof(bk_GraphNode), _by_height);
+	for (uint32_t j = 0; j < forest->length; j++) {
+		forest->entries[j].block->_index = j;
+		forest->entries[j].alias = j;
+	}
+	return forest;
+}
+
+void bk_delete_Graph(bk_Graph *f) {
+	if (!f || !f->entries) return;
+	for (uint32_t j = 0; j < f->length; j++) {
+		bk_Block *b = f->entries[j].block;
+		if (b && b->cells) FREE(b->cells);
+		FREE(b);
+	}
+	FREE(f->entries);
+	FREE(f);
+}
+
+static uint32_t gethash(bk_Block *b) {
+	uint32_t h = 5381;
+	for (uint32_t j = 0; j < b->length; j++) {
+		h = ((h << 5) + h) + b->cells[j].t;
+		h = ((h << 5) + h);
+		switch (b->cells[j].t) {
+			case b8:
+			case b16:
+			case b32:
+				h += b->cells[j].z;
+				break;
+			case p16:
+			case p32:
+			case sp16:
+			case sp32:
+				if (b->cells[j].p) { h += b->cells[j].p->_index; }
+				break;
+			default:
+				break;
+		}
+	}
+	return h;
+}
+
+static bool compareblock(bk_Block *a, bk_Block *b) {
+	if (!a && !b) return true;
+	if (!a || !b) return false;
+	if (a->length != b->length) return false;
+	for (uint32_t j = 0; j < a->length; j++) {
+		if (a->cells[j].t != b->cells[j].t) return false;
+		switch (a->cells[j].t) {
+			case b8:
+			case b16:
+			case b32:
+				if (a->cells[j].z != b->cells[j].z) return false;
+				break;
+			case p16:
+			case p32:
+			case sp16:
+			case sp32:
+				if (a->cells[j].p != b->cells[j].p) return false;
+				break;
+			default:
+				break;
+		}
+	}
+	return true;
+}
+static bool compareEntry(bk_GraphNode *a, bk_GraphNode *b) {
+	if (a->hash != b->hash) return false;
+	return compareblock(a->block, b->block);
+}
+
+static void replaceptr(bk_Graph *f, bk_Block *b) {
+	for (uint32_t j = 0; j < b->length; j++) {
+		switch (b->cells[j].t) {
+			case p16:
+			case p32:
+			case sp16:
+			case sp32:
+				if (b->cells[j].p) {
+					uint32_t index = b->cells[j].p->_index;
+					while (f->entries[index].alias != index) {
+						index = f->entries[index].alias;
+					}
+					b->cells[j].p = f->entries[index].block;
+				}
+				break;
+			default:
+				break;
+		}
+	}
+}
+
+void bk_minimizeGraph(bk_Graph *f) {
+	uint32_t rear = (uint32_t)(f->length - 1);
+	while (rear > 0) {
+		uint32_t front = rear;
+		while (f->entries[front].height == f->entries[rear].height && front > 0) {
+			front--;
+		}
+		front++;
+		for (uint32_t j = front; j <= rear; j++) {
+			f->entries[j].hash = gethash(f->entries[j].block);
+		}
+		for (uint32_t j = front; j <= rear; j++) {
+			bk_GraphNode *a = &(f->entries[j]);
+			if (a->alias == j) {
+				for (uint32_t k = j + 1; k <= rear; k++) {
+					bk_GraphNode *b = &(f->entries[k]);
+					if (b->alias == k && compareEntry(a, b)) { b->alias = j; }
+				}
+			}
+		}
+		// replace pointers with aliased
+		for (uint32_t j = 0; j < front; j++) {
+			replaceptr(f, f->entries[j].block);
+		}
+		rear = front - 1;
+	}
+}
+
+static size_t otfcc_bkblock_size(bk_Block *b) {
+	size_t size = 0;
+	for (uint32_t j = 0; j < b->length; j++)
+		switch (b->cells[j].t) {
+			case b8:
+				size += 1;
+				break;
+			case b16:
+			case p16:
+			case sp16:
+				size += 2;
+				break;
+			case b32:
+			case p32:
+			case sp32:
+				size += 4;
+				break;
+			default:
+				break;
+		}
+	return size;
+}
+
+static uint32_t getoffset(size_t *offsets, bk_Block *ref, bk_Block *target, uint8_t bits) {
+	size_t offref = offsets[ref->_index];
+	size_t offtgt = offsets[target->_index];
+	/*
+	if (offtgt < offref || (offtgt - offref) >> bits) {
+	    fprintf(stderr, "[otfcc-fea] Warning : Unable to fit offset %d into %d bits.\n",
+	(int32_t)(offtgt - offref), bits);
+	}
+	*/
+	return (uint32_t)(offtgt - offref);
+}
+static int64_t getoffset_untangle(size_t *offsets, bk_Block *ref, bk_Block *target) {
+	size_t offref = offsets[ref->_index];
+	size_t offtgt = offsets[target->_index];
+	return (int64_t)(offtgt - offref);
+}
+static void escalate_sppointers(bk_Block *b, bk_Graph *f, uint32_t *order, uint32_t depth) {
+	if (!b) return;
+	for (uint32_t j = 0; j < b->length; j++) {
+		bk_Cell *cell = &(b->cells[j]);
+		if (bk_cellIsPointer(cell) && cell->p && cell->t >= sp16) {
+			escalate_sppointers(cell->p, f, order, depth);
+		}
+	}
+	b->_depth = depth;
+	*order += 1;
+	f->entries[b->_index].order = *order;
+}
+static void dfs_attract_cells(bk_Block *b, bk_Graph *f, uint32_t *order, uint32_t depth) {
+	if (!b) return;
+	if (b->_visitstate != VISIT_WHITE) {
+		if (b->_depth < depth) { b->_depth = depth; }
+		return;
+	}
+	b->_visitstate = VISIT_GRAY;
+	for (uint32_t j = b->length; j-- > 0;) {
+		bk_Cell *cell = &(b->cells[j]);
+		if (bk_cellIsPointer(cell) && cell->p) { dfs_attract_cells(cell->p, f, order, depth + 1); }
+	}
+	*order += 1;
+	f->entries[b->_index].order = *order;
+	escalate_sppointers(b, f, order, depth);
+	b->_visitstate = VISIT_BLACK;
+}
+
+static void attract_bkgraph(bk_Graph *f) {
+	// Clear the visit state of all blocks
+	for (uint32_t j = 0; j < f->length; j++) {
+		f->entries[j].block->_visitstate = VISIT_WHITE;
+		f->entries[j].order = 0;
+		f->entries[j].block->_index = j;
+		f->entries[j].block->_depth = 0;
+	}
+	uint32_t order = 0;
+	dfs_attract_cells(f->entries[0].block, f, &order, 0);
+	qsort(f->entries, f->length, sizeof(bk_GraphNode), _by_order);
+	for (uint32_t j = 0; j < f->length; j++) {
+		f->entries[j].block->_index = j;
+	}
+}
+
+static bool try_untabgle_block(bk_Graph *f, bk_Block *b, size_t *offsets, uint16_t passes) {
+	bool didCopy = false;
+	for (uint32_t j = 0; j < b->length; j++) {
+		switch (b->cells[j].t) {
+			case p16:
+			case sp16:
+				if (b->cells[j].p) {
+					int64_t offset = getoffset_untangle(offsets, b, b->cells[j].p);
+					if (offset < 0 || offset > 0xFFFF) {
+						bk_GraphNode *e = _bkgraph_grow(f);
+						e->order = 0;
+						e->alias = 0;
+						e->block = bk_new_Block(bkcopy, b->cells[j].p, bkover);
+						b->cells[j].t = sp16;
+						b->cells[j].p = e->block;
+						didCopy = true;
+					}
+				}
+				break;
+			default:
+				break;
+		}
+	}
+	return didCopy;
+}
+
+static bool try_untangle(bk_Graph *f, uint16_t passes) {
+	size_t *offsets;
+	NEW(offsets, f->length + 1);
+	offsets[0] = 0;
+	for (uint32_t j = 0; j < f->length; j++) {
+		if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+			offsets[j + 1] = offsets[j] + otfcc_bkblock_size(f->entries[j].block);
+		} else {
+			offsets[j + 1] = offsets[j];
+		}
+	}
+	uint32_t totalBlocks = f->length;
+	bool didUntangle = false;
+	for (uint32_t j = 0; j < totalBlocks; j++) {
+		if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+			bool didCopy = try_untabgle_block(f, f->entries[j].block, offsets, passes);
+			didUntangle = didUntangle || didCopy;
+		}
+	}
+	FREE(offsets);
+	return didUntangle;
+}
+
+static void otfcc_build_bkblock(caryll_Buffer *buf, bk_Block *b, size_t *offsets) {
+	for (uint32_t j = 0; j < b->length; j++) {
+		switch (b->cells[j].t) {
+			case b8:
+				bufwrite8(buf, b->cells[j].z);
+				break;
+			case b16:
+				bufwrite16b(buf, b->cells[j].z);
+				break;
+			case b32:
+				bufwrite32b(buf, b->cells[j].z);
+				break;
+			case p16:
+			case sp16:
+				if (b->cells[j].p) {
+					bufwrite16b(buf, getoffset(offsets, b, b->cells[j].p, 16));
+				} else {
+					bufwrite16b(buf, 0);
+				}
+				break;
+			case p32:
+			case sp32:
+				if (b->cells[j].p) {
+					bufwrite32b(buf, getoffset(offsets, b, b->cells[j].p, 32));
+				} else {
+					bufwrite32b(buf, 0);
+				}
+				break;
+			default:
+				break;
+		}
+	}
+}
+
+caryll_Buffer *bk_build_Graph(bk_Graph *f) {
+	caryll_Buffer *buf = bufnew();
+	size_t *offsets;
+	NEW(offsets, f->length + 1);
+
+	offsets[0] = 0;
+	for (uint32_t j = 0; j < f->length; j++) {
+		if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+			offsets[j + 1] = offsets[j] + otfcc_bkblock_size(f->entries[j].block);
+		} else {
+			offsets[j + 1] = offsets[j];
+		}
+	}
+	for (uint32_t j = 0; j < f->length; j++) {
+		if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+			otfcc_build_bkblock(buf, f->entries[j].block, offsets);
+		}
+	}
+	FREE(offsets);
+	return buf;
+}
+
+size_t bk_estimateSizeOfGraph(bk_Graph *f) {
+	size_t *offsets;
+	NEW(offsets, f->length + 1);
+
+	offsets[0] = 0;
+	for (uint32_t j = 0; j < f->length; j++) {
+		if (f->entries[j].block->_visitstate == VISIT_BLACK) {
+			offsets[j + 1] = offsets[j] + otfcc_bkblock_size(f->entries[j].block);
+		} else {
+			offsets[j + 1] = offsets[j];
+		}
+	}
+	size_t estimatedSize = offsets[f->length];
+	FREE(offsets);
+	return estimatedSize;
+}
+
+void bk_untangleGraph(/*BORROW*/ bk_Graph *f) {
+	uint16_t passes = 0;
+	bool tangled = false;
+	attract_bkgraph(f);
+	do {
+		tangled = try_untangle(f, passes);
+		if (tangled) { attract_bkgraph(f); }
+		passes++;
+	} while (tangled && passes < 16);
+}
+
+caryll_Buffer *bk_build_Block(/*MOVE*/ bk_Block *root) {
+	bk_Graph *f = bk_newGraphFromRootBlock(root);
+	bk_minimizeGraph(f);
+	bk_untangleGraph(f);
+	caryll_Buffer *buf = bk_build_Graph(f);
+	bk_delete_Graph(f);
+	return buf;
+}
+caryll_Buffer *bk_build_Block_noMinimize(/*MOVE*/ bk_Block *root) {
+	bk_Graph *f = bk_newGraphFromRootBlock(root);
+	bk_untangleGraph(f);
+	caryll_Buffer *buf = bk_build_Graph(f);
+	bk_delete_Graph(f);
+	return buf;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkgraph.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,35 @@
+#ifndef CARYLL_BK_BKGRAPH_H
+#define CARYLL_BK_BKGRAPH_H
+
+#include <stdint.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include "caryll/buffer.h"
+
+#include "bkblock.h"
+
+typedef struct {
+	uint32_t alias;
+	uint32_t order;
+	uint32_t height;
+	uint32_t hash;
+	bk_Block *block;
+} bk_GraphNode;
+
+typedef struct {
+	uint32_t length;
+	uint32_t free;
+	bk_GraphNode *entries;
+} bk_Graph;
+
+bk_Graph *bk_newGraphFromRootBlock(bk_Block *b);
+void bk_delete_Graph(/*MOVE*/ bk_Graph *f);
+void bk_minimizeGraph(/*BORROW*/ bk_Graph *f);
+void bk_untangleGraph(/*BORROW*/ bk_Graph *f);
+caryll_Buffer *bk_build_Graph(/*BORROW*/ bk_Graph *f);
+caryll_Buffer *bk_build_Block(/*MOVE*/ bk_Block *root);
+caryll_Buffer *bk_build_Block_noMinimize(/*MOVE*/ bk_Block *root);
+size_t bk_estimateSizeOfGraph(bk_Graph *f);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,532 @@
+#include "consolidate.h"
+
+#include "support/util.h"
+#include "table/all.h"
+
+#include "otl/gsub-single.h"
+#include "otl/gsub-multi.h"
+#include "otl/gsub-ligature.h"
+#include "otl/gsub-reverse.h"
+#include "otl/gpos-single.h"
+#include "otl/gpos-pair.h"
+#include "otl/gpos-cursive.h"
+#include "otl/chaining.h"
+#include "otl/mark.h"
+#include "otl/GDEF.h"
+
+// Consolidation
+// Replace name entries in json to ids and do some check
+static int by_stem_pos(const glyf_PostscriptStemDef *a, const glyf_PostscriptStemDef *b) {
+	if (a->position == b->position) {
+		return (int)a->map - (int)b->map;
+	} else if (a->position > b->position) {
+		return 1;
+	} else {
+		return -1;
+	}
+}
+static int by_mask_pointindex(const glyf_PostscriptHintMask *a, const glyf_PostscriptHintMask *b) {
+	return a->contoursBefore == b->contoursBefore ? a->pointsBefore - b->pointsBefore
+	                                              : a->contoursBefore - b->contoursBefore;
+}
+
+static void consolidateGlyphContours(glyf_Glyph *g, const otfcc_Options *options) {
+	shapeid_t nContoursConsolidated = 0;
+	shapeid_t skip = 0;
+	for (shapeid_t j = 0; j < g->contours.length; j++) {
+		if (g->contours.items[j].length) {
+			g->contours.items[j - skip] = g->contours.items[j];
+			nContoursConsolidated += 1;
+		} else {
+			glyf_iContourList.disposeItem(&g->contours, j);
+			logWarning("[Consolidate] Removed empty contour #%d in glyph %s.\n", j, g->name);
+			skip += 1;
+		}
+	}
+	g->contours.length = nContoursConsolidated;
+}
+static void consolidateGlyphReferences(glyf_Glyph *g, otfcc_Font *font,
+                                       const otfcc_Options *options) {
+	shapeid_t nReferencesConsolidated = 0;
+	shapeid_t skip = 0;
+	for (shapeid_t j = 0; j < g->references.length; j++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &g->references.items[j].glyph)) {
+			logWarning("[Consolidate] Ignored absent glyph component reference /%s within /%s.\n",
+			           g->references.items[j].glyph.name, g->name);
+			glyf_iReferenceList.disposeItem(&(g->references), j);
+			skip += 1;
+		} else {
+			g->references.items[j - skip] = g->references.items[j];
+			nReferencesConsolidated += 1;
+		}
+	}
+	g->references.length = nReferencesConsolidated;
+}
+static void consolidateGlyphHints(glyf_Glyph *g, const otfcc_Options *options) {
+	// sort stems
+	if (g->stemH.length) {
+		for (shapeid_t j = 0; j < g->stemH.length; j++) {
+			g->stemH.items[j].map = j;
+		}
+		glyf_iStemDefList.sort(&g->stemH, by_stem_pos);
+	}
+	if (g->stemV.length) {
+		for (shapeid_t j = 0; j < g->stemV.length; j++) {
+			g->stemV.items[j].map = j;
+		}
+		glyf_iStemDefList.sort(&g->stemV, by_stem_pos);
+	}
+	shapeid_t *hmap;
+	NEW(hmap, g->stemH.length);
+	shapeid_t *vmap;
+	NEW(vmap, g->stemV.length);
+	for (shapeid_t j = 0; j < g->stemH.length; j++) {
+		hmap[g->stemH.items[j].map] = j;
+	}
+	for (shapeid_t j = 0; j < g->stemV.length; j++) {
+		vmap[g->stemV.items[j].map] = j;
+	}
+	// sort masks
+	if (g->hintMasks.length) {
+		glyf_iMaskList.sort(&g->hintMasks, by_mask_pointindex);
+		for (shapeid_t j = 0; j < g->hintMasks.length; j++) {
+			glyf_PostscriptHintMask oldmask = g->hintMasks.items[j]; // copy
+			for (shapeid_t k = 0; k < g->stemH.length; k++) {
+				g->hintMasks.items[j].maskH[k] = oldmask.maskH[hmap[k]];
+			}
+			for (shapeid_t k = 0; k < g->stemV.length; k++) {
+				g->hintMasks.items[j].maskV[k] = oldmask.maskV[vmap[k]];
+			}
+		}
+	}
+	if (g->contourMasks.length) {
+		glyf_iMaskList.sort(&g->contourMasks, by_mask_pointindex);
+		for (shapeid_t j = 0; j < g->contourMasks.length; j++) {
+			glyf_PostscriptHintMask oldmask = g->contourMasks.items[j]; // copy
+			for (shapeid_t k = 0; k < g->stemH.length; k++) {
+				g->contourMasks.items[j].maskH[k] = oldmask.maskH[hmap[k]];
+			}
+			for (shapeid_t k = 0; k < g->stemV.length; k++) {
+				g->contourMasks.items[j].maskV[k] = oldmask.maskV[vmap[k]];
+			}
+		}
+	}
+	FREE(hmap);
+	FREE(vmap);
+}
+static void consolidateFDSelect(fd_handle *h, table_CFF *cff, const otfcc_Options *options,
+                                const sds gname) {
+	if (!cff || !cff->fdArray || !cff->fdArrayCount) return;
+	// Consolidate fdSelect
+	if (h->state == HANDLE_STATE_INDEX) {
+		if (h->index >= cff->fdArrayCount) { h->index = 0; }
+		Handle.consolidateTo(h, h->index, cff->fdArray[h->index]->fontName);
+	} else if (h->name) {
+		bool found = false;
+		for (tableid_t j = 0; j < cff->fdArrayCount; j++) {
+			if (strcmp(h->name, cff->fdArray[j]->fontName) == 0) {
+				found = true;
+				Handle.consolidateTo(h, j, cff->fdArray[j]->fontName);
+				break;
+			}
+		}
+		if (!found) {
+			logWarning("[Consolidate] CID Subfont %s is not defined. (in glyph /%s).\n", h->name,
+			           gname);
+			Handle.dispose(h);
+		}
+	} else if (h->name) {
+		Handle.dispose(h);
+	}
+}
+static void consolidateGlyph(glyf_Glyph *g, otfcc_Font *font, const otfcc_Options *options) {
+	consolidateGlyphContours(g, options);
+	consolidateGlyphReferences(g, font, options);
+	consolidateGlyphHints(g, options);
+	consolidateFDSelect(&g->fdSelect, font->CFF_, options, g->name);
+}
+
+// Anchored reference consolidation
+bool consolidateAnchorRef(table_glyf *table, glyf_ComponentReference *gr,
+                          glyf_ComponentReference *rr, const otfcc_Options *options);
+static bool getPointCoordinates(table_glyf *table, glyf_ComponentReference *gr, shapeid_t n,
+                         shapeid_t *stated, VQ *x, VQ *y, const otfcc_Options *options) {
+	glyphid_t j = gr->glyph.index;
+	glyf_Glyph *g = table->items[j];
+	for (shapeid_t c = 0; c < g->contours.length; c++) {
+		for (shapeid_t pj = 0; pj < g->contours.items[c].length; pj++) {
+			if (*stated == n) {
+				glyf_Point *p = &(g->contours.items[c].items[pj]);
+				iVQ.replace(x, iVQ.pointLinearTfm(gr->x, gr->a, p->x, gr->b, p->y));
+				iVQ.replace(y, iVQ.pointLinearTfm(gr->y, gr->c, p->x, gr->d, p->y));
+				return true;
+			}
+			*stated += 1;
+		}
+	}
+	for (shapeid_t r = 0; r < g->references.length; r++) {
+		glyf_ComponentReference *rr = &(g->references.items[r]);
+
+		consolidateAnchorRef(table, gr, rr, options);
+
+		// composite affine transformations
+		glyf_ComponentReference ref = glyf_iComponentReference.empty();
+		ref.glyph = Handle.fromIndex(g->references.items[r].glyph.index);
+		ref.a = gr->a * rr->a + rr->b * gr->c;
+		ref.b = rr->a * gr->b + rr->b * gr->d;
+		ref.c = gr->a * rr->c + gr->c * rr->d;
+		ref.d = gr->b * rr->c + rr->d * gr->d;
+		iVQ.replace(&ref.x, iVQ.pointLinearTfm(rr->x, rr->a, gr->x, rr->b, gr->y));
+		iVQ.replace(&ref.y, iVQ.pointLinearTfm(rr->y, rr->c, gr->x, rr->d, gr->y));
+
+		bool success = getPointCoordinates(table, &ref, n, stated, x, y, options);
+		glyf_iComponentReference.dispose(&ref);
+		if (success) return true;
+	}
+	return false;
+}
+
+bool consolidateAnchorRef(table_glyf *table, glyf_ComponentReference *gr,
+                          glyf_ComponentReference *rr, const otfcc_Options *options) {
+	if (rr->isAnchored == REF_ANCHOR_CONSOLIDATED || rr->isAnchored == REF_XY) return true;
+	if (rr->isAnchored == REF_ANCHOR_CONSOLIDATING_ANCHOR ||
+	    rr->isAnchored == REF_ANCHOR_CONSOLIDATING_XY) {
+		logWarning(
+		    "Found circular reference of out-of-range point reference in anchored reference.");
+		rr->isAnchored = REF_XY;
+		return false;
+	}
+	if (rr->isAnchored == REF_ANCHOR_ANCHOR) {
+		rr->isAnchored = REF_ANCHOR_CONSOLIDATING_ANCHOR;
+	} else {
+		rr->isAnchored = REF_ANCHOR_CONSOLIDATING_XY;
+	}
+	VQ innerX = iVQ.neutral(), outerX = iVQ.neutral();
+	VQ innerY = iVQ.neutral(), outerY = iVQ.neutral();
+	shapeid_t innerCounter = 0, outerCounter = 0;
+
+	glyf_ComponentReference rr1 = glyf_iComponentReference.empty();
+	rr1.glyph = Handle.fromIndex(rr->glyph.index);
+
+	bool s1 = getPointCoordinates(table, gr, rr->outer, &outerCounter, &outerX, &outerY, options);
+	bool s2 = getPointCoordinates(table, &rr1, rr->inner, &innerCounter, &innerX, &innerY, options);
+	if (!s1) { logWarning("Failed to access point %d in outer glyph.", rr->outer); }
+	if (!s2) {
+		logWarning("Failed to access point %d in reference to %s.", rr->outer, rr->glyph.name);
+	}
+
+	VQ rrx = iVQ.pointLinearTfm(outerX, -rr->a, innerX, -rr->b, innerY);
+	VQ rry = iVQ.pointLinearTfm(outerY, -rr->c, innerX, -rr->d, innerY);
+
+	if (rr->isAnchored == REF_ANCHOR_CONSOLIDATING_ANCHOR) {
+		iVQ.replace(&rr->x, rrx);
+		iVQ.replace(&rr->y, rry);
+		rr->isAnchored = REF_ANCHOR_CONSOLIDATED;
+	} else {
+		if (fabs(iVQ.getStill(rr->x) - iVQ.getStill(rrx)) > 0.5 &&
+		    fabs(iVQ.getStill(rr->y) - iVQ.getStill(rry)) > 0.5) {
+			logWarning("Anchored reference to %s does not match its X/Y offset data.",
+			           rr->glyph.name);
+		}
+		rr->isAnchored = REF_ANCHOR_CONSOLIDATED;
+		iVQ.dispose(&rrx), iVQ.dispose(&rry);
+	}
+	glyf_iComponentReference.dispose(&rr1);
+	iVQ.dispose(&innerX), iVQ.dispose(&innerY);
+	iVQ.dispose(&outerX), iVQ.dispose(&outerY);
+	return false;
+}
+
+static void consolidateGlyf(otfcc_Font *font, const otfcc_Options *options) {
+	if (!font->glyph_order || !font->glyf) return;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		if (font->glyf->items[j]) {
+			consolidateGlyph(font->glyf->items[j], font, options);
+		} else {
+			font->glyf->items[j] = otfcc_newGlyf_glyph();
+		}
+	}
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		glyf_Glyph *g = font->glyf->items[j];
+		loggedStep("%s", g->name) {
+			glyf_ComponentReference gr = glyf_iComponentReference.empty();
+			gr.glyph = Handle.fromIndex(j);
+
+			for (shapeid_t r = 0; r < g->references.length; r++) {
+				glyf_ComponentReference *rr = &(g->references.items[r]);
+				consolidateAnchorRef(font->glyf, &gr, rr, options);
+			}
+			glyf_iComponentReference.dispose(&gr);
+		}
+	}
+}
+
+static void consolidateCmap(otfcc_Font *font, const otfcc_Options *options) {
+	if (font->glyph_order && font->cmap) {
+		cmap_Entry *item;
+		foreach_hash(item, font->cmap->unicodes) {
+			if (!GlyphOrder.consolidateHandle(font->glyph_order, &item->glyph)) {
+				logWarning("[Consolidate] Ignored mapping U+%04X to non-existent glyph /%s.\n",
+				           item->unicode, item->glyph.name);
+				Handle.dispose(&item->glyph);
+			}
+		}
+	}
+	if (font->glyph_order && font->cmap) {
+		cmap_UVS_Entry *item;
+		foreach_hash(item, font->cmap->uvs) {
+			if (!GlyphOrder.consolidateHandle(font->glyph_order, &item->glyph)) {
+				logWarning("[Consolidate] Ignored UVS mapping [U+%04X U+%04X] to non-existent "
+				           "glyph /%s.\n",
+				           item->key.unicode, item->key.selector, item->glyph.name);
+				Handle.dispose(&item->glyph);
+			}
+		}
+	}
+}
+
+typedef bool (*otl_consolidation_function)(otfcc_Font *, table_OTL *, otl_Subtable *,
+                                           const otfcc_Options *);
+typedef void (*subtable_remover)(otl_Subtable *);
+#define LOOKUP_CONSOLIDATOR(llt, fn, fndel)                                                        \
+	__declare_otl_consolidation(llt, fn, (subtable_remover)fndel, font, table, lookup, options);
+
+static void __declare_otl_consolidation(otl_LookupType type, otl_consolidation_function fn,
+                                        subtable_remover fndel, otfcc_Font *font, table_OTL *table,
+                                        otl_Lookup *lookup, const otfcc_Options *options) {
+	if (!lookup || !lookup->subtables.length || lookup->type != type) return;
+	loggedStep("%s", lookup->name) {
+		for (tableid_t j = 0; j < lookup->subtables.length; j++) {
+			if (!lookup->subtables.items[j]) {
+				logWarning("[Consolidate] Ignored empty subtable %d of lookup %s.\n", j,
+				           lookup->name);
+				continue;
+			}
+			bool subtableRemoved;
+			// loggedStep("Subtable %d", j) {
+			subtableRemoved = fn(font, table, lookup->subtables.items[j], options);
+			//}
+			if (subtableRemoved) {
+				fndel(lookup->subtables.items[j]);
+				lookup->subtables.items[j] = NULL;
+				logWarning("[Consolidate] Ignored empty subtable %d of lookup %s.\n", j,
+				           lookup->name);
+			}
+		}
+		tableid_t k = 0;
+		for (tableid_t j = 0; j < lookup->subtables.length; j++) {
+			if (lookup->subtables.items[j]) {
+				lookup->subtables.items[k++] = lookup->subtables.items[j];
+			}
+		}
+		lookup->subtables.length = k;
+		if (!k) {
+			logWarning("[Consolidate] Lookup %s is empty and will be removed.\n", lookup->name);
+		}
+	}
+}
+
+static void otfcc_consolidate_lookup(otfcc_Font *font, table_OTL *table, otl_Lookup *lookup,
+                              const otfcc_Options *options) {
+	LOOKUP_CONSOLIDATOR(otl_type_gsub_single, consolidate_gsub_single, iSubtable_gsub_single.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gsub_multiple, consolidate_gsub_multi, iSubtable_gsub_multi.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gsub_alternate, consolidate_gsub_alternative,
+	                    iSubtable_gsub_multi.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gsub_ligature, consolidate_gsub_ligature,
+	                    iSubtable_gsub_ligature.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gsub_chaining, consolidate_chaining, iSubtable_chaining.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gsub_reverse, consolidate_gsub_reverse,
+	                    iSubtable_gsub_reverse.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gpos_single, consolidate_gpos_single, iSubtable_gpos_single.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gpos_pair, consolidate_gpos_pair, iSubtable_gpos_pair.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gpos_cursive, consolidate_gpos_cursive,
+	                    iSubtable_gpos_cursive.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gpos_chaining, consolidate_chaining, iSubtable_chaining.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gpos_markToBase, consolidate_mark_to_single,
+	                    iSubtable_gpos_markToSingle.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gpos_markToMark, consolidate_mark_to_single,
+	                    iSubtable_gpos_markToSingle.free);
+	LOOKUP_CONSOLIDATOR(otl_type_gpos_markToLigature, consolidate_mark_to_ligature,
+	                    iSubtable_gpos_markToLigature.free);
+}
+
+static bool lookupRefIsNotEmpty(const otl_LookupRef *rLut, void *env) {
+	return rLut && *rLut && (*rLut)->subtables.length > 0;
+}
+static bool featureRefIsNotEmpty(const otl_FeatureRef *rFeat, void *env) {
+	return rFeat && *rFeat && (*rFeat)->lookups.length > 0;
+}
+static bool lookupIsNotEmpty(const otl_LookupPtr *rLut, void *env) {
+	return rLut && *rLut && (*rLut)->subtables.length > 0;
+}
+static bool featureIsNotEmpty(const otl_FeaturePtr *rFeat, void *env) {
+	return rFeat && *rFeat && (*rFeat)->lookups.length > 0;
+}
+
+static void consolidateOTLTable(otfcc_Font *font, table_OTL *table, const otfcc_Options *options) {
+	if (!font->glyph_order || !table) return;
+	do {
+		tableid_t featN = table->features.length;
+		tableid_t lutN = table->lookups.length;
+
+		// Perform consolidation
+		for (tableid_t j = 0; j < table->lookups.length; j++) {
+			otfcc_consolidate_lookup(font, table, table->lookups.items[j], options);
+		}
+		// remove empty features
+		for (tableid_t j = 0; j < table->features.length; j++) {
+			otl_Feature *feature = table->features.items[j];
+			otl_iLookupRefList.filterEnv(&feature->lookups, lookupRefIsNotEmpty, NULL);
+		}
+		// remove empty lookups
+		for (tableid_t j = 0; j < table->languages.length; j++) {
+			otl_LanguageSystem *lang = table->languages.items[j];
+			otl_iFeatureRefList.filterEnv(&lang->features, featureRefIsNotEmpty, NULL);
+		}
+		otl_iLookupList.filterEnv(&table->lookups, lookupIsNotEmpty, NULL);
+		otl_iFeatureList.filterEnv(&table->features, featureIsNotEmpty, NULL);
+
+		tableid_t featN1 = table->features.length;
+		tableid_t lutN1 = table->lookups.length;
+		if (featN1 >= featN && lutN1 >= lutN) break;
+	} while (true);
+}
+
+static void consolidateOTL(otfcc_Font *font, const otfcc_Options *options) {
+	loggedStep("GSUB") {
+		consolidateOTLTable(font, font->GSUB, options);
+	}
+	loggedStep("GPOS") {
+		consolidateOTLTable(font, font->GPOS, options);
+	}
+	loggedStep("GDEF") {
+		consolidate_GDEF(font, font->GDEF, options);
+	}
+}
+
+static void consolidateCOLR(otfcc_Font *font, const otfcc_Options *options) {
+	if (!font || !font->COLR || !font->glyph_order) return;
+	table_COLR *consolidated = table_iCOLR.create();
+	foreach (colr_Mapping *mapping, *(font->COLR)) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &mapping->glyph)) {
+			logWarning("[Consolidate] Ignored missing glyph of /%s", mapping->glyph.name);
+			continue;
+		}
+		colr_Mapping m;
+		Handle.copy(&m.glyph, &mapping->glyph);
+		colr_iLayerList.init(&m.layers);
+		foreach (colr_Layer *layer, mapping->layers) {
+			if (!GlyphOrder.consolidateHandle(font->glyph_order, &layer->glyph)) {
+				logWarning("[Consolidate] Ignored missing glyph of /%s", layer->glyph.name);
+				continue;
+			}
+			colr_Layer layer1;
+			colr_iLayer.copy(&layer1, layer);
+			colr_iLayerList.push(&m.layers, layer1);
+		}
+		if (mapping->layers.length) {
+			table_iCOLR.push(consolidated, m);
+		} else {
+			logWarning("[Consolidate] COLR decomposition for /%s is empth", mapping->glyph.name);
+			colr_iMapping.dispose(&m);
+		}
+	}
+	table_iCOLR.free(font->COLR);
+	font->COLR = consolidated;
+}
+
+static int compareTSIEntry(const tsi_Entry *a, const tsi_Entry *b) {
+	if (a->type != b->type) return a->type - b->type;
+	return a->glyph.index - b->glyph.index;
+}
+
+static void consolidateTSI(otfcc_Font *font, table_TSI **_tsi, const otfcc_Options *options) {
+	table_TSI *tsi = *_tsi;
+	if (!font || !font->glyf || !tsi || !font->glyph_order) return;
+	table_TSI *consolidated = table_iTSI.create();
+	sds *gidEntries;
+	NEW_CLEAN_N(gidEntries, font->glyf->length);
+
+	foreach (tsi_Entry *entry, *tsi) {
+		if (entry->type == TSI_GLYPH) {
+			if (GlyphOrder.consolidateHandle(font->glyph_order, &entry->glyph)) {
+				if (gidEntries[entry->glyph.index]) sdsfree(gidEntries[entry->glyph.index]);
+				gidEntries[entry->glyph.index] = entry->content;
+				entry->content = NULL;
+			} else {
+				logWarning("[Consolidate] Ignored missing glyph of /%s", entry->glyph.name);
+			}
+		} else {
+			tsi_Entry e;
+			tsi_iEntry.copy(&e, entry);
+			table_iTSI.push(consolidated, e);
+		}
+	}
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		tsi_Entry e;
+		e.type = TSI_GLYPH;
+		e.glyph = Handle.fromIndex(j);
+		GlyphOrder.consolidateHandle(font->glyph_order, &e.glyph);
+		e.content = gidEntries[j] ? gidEntries[j] : sdsempty();
+		table_iTSI.push(consolidated, e);
+	}
+	table_iTSI.free(tsi);
+	FREE(gidEntries);
+	table_iTSI.sort(consolidated, compareTSIEntry);
+	*_tsi = consolidated;
+}
+
+void otfcc_consolidateFont(otfcc_Font *font, const otfcc_Options *options) {
+	// In case we don’t have a glyph order, make one.
+	if (font->glyf && !font->glyph_order) {
+		otfcc_GlyphOrder *go = GlyphOrder.create();
+		for (glyphid_t j = 0; j < font->glyf->length; j++) {
+			sds name;
+			sds glyfName = font->glyf->items[j]->name;
+			if (glyfName) {
+				name = sdsdup(glyfName);
+			} else {
+				name = sdscatprintf(sdsempty(), "$$gid%d", j);
+				font->glyf->items[j]->name = sdsdup(name);
+			}
+			if (!GlyphOrder.setByName(go, name, j)) {
+				logWarning("[Consolidate] Glyph name %s is already in use.", name);
+				uint32_t suffix = 2;
+				bool success = false;
+				do {
+					sds newname = sdscatfmt(sdsempty(), "%s_%u", name, suffix);
+					success = GlyphOrder.setByName(go, newname, j);
+					if (!success) {
+						sdsfree(newname);
+						suffix += 1;
+					} else {
+						logWarning("[Consolidate] Glyph %s is renamed into %s.", name, newname);
+						sdsfree(font->glyf->items[j]->name);
+						font->glyf->items[j]->name = sdsdup(newname);
+					}
+				} while (!success);
+				sdsfree(name);
+			}
+		}
+		font->glyph_order = go;
+	}
+	loggedStep("glyf") {
+		consolidateGlyf(font, options);
+	}
+	loggedStep("cmap") {
+		consolidateCmap(font, options);
+	}
+	if (font->glyf) consolidateOTL(font, options);
+	loggedStep("COLR") {
+		consolidateCOLR(font, options);
+	}
+	loggedStep("TSI_01") {
+		consolidateTSI(font, &font->TSI_01, options);
+	}
+	loggedStep("TSI_23") {
+		consolidateTSI(font, &font->TSI_23, options);
+	}
+	loggedStep("TSI5") {
+		fontop_consolidateClassDef(font, font->TSI5, options);
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/consolidate.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_CONSOLIDATE_H
+#define CARYLL_CONSOLIDATE_H
+
+#include "otfcc/font.h"
+
+extern void otfcc_consolidateFont(otfcc_Font *font, const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,67 @@
+#include "GDEF.h"
+
+typedef struct {
+	int gid;
+	sds name;
+	otl_CaretValueList carets;
+	UT_hash_handle hh;
+} GDEF_ligcaret_hash;
+static int by_gid(GDEF_ligcaret_hash *a, GDEF_ligcaret_hash *b) {
+	return a->gid - b->gid;
+}
+void consolidate_GDEF(otfcc_Font *font, table_GDEF *gdef, const otfcc_Options *options) {
+	if (!font || !font->glyph_order || !gdef) return;
+	if (gdef->glyphClassDef) {
+		fontop_consolidateClassDef(font, gdef->glyphClassDef, options);
+		otl_iClassDef.shrink(gdef->glyphClassDef);
+		if (!gdef->glyphClassDef->numGlyphs) {
+			otl_iClassDef.free(gdef->glyphClassDef);
+			gdef->glyphClassDef = NULL;
+		}
+	}
+	if (gdef->markAttachClassDef) {
+		fontop_consolidateClassDef(font, gdef->markAttachClassDef, options);
+		otl_iClassDef.shrink(gdef->markAttachClassDef);
+		if (!gdef->markAttachClassDef->numGlyphs) {
+			otl_iClassDef.free(gdef->markAttachClassDef);
+			gdef->markAttachClassDef = NULL;
+		}
+	}
+	if (gdef->ligCarets.length) {
+		GDEF_ligcaret_hash *h = NULL;
+		for (glyphid_t j = 0; j < gdef->ligCarets.length; j++) {
+			GDEF_ligcaret_hash *s;
+			if (!GlyphOrder.consolidateHandle(font->glyph_order, &gdef->ligCarets.items[j].glyph)) {
+				continue;
+			}
+			int gid = gdef->ligCarets.items[j].glyph.index;
+			sds gname = sdsdup(gdef->ligCarets.items[j].glyph.name);
+			if (gname) {
+				HASH_FIND_INT(h, &gid, s);
+				if (!s) {
+					NEW(s);
+					s->gid = gid;
+					s->name = gname;
+					otl_iCaretValueList.move(&s->carets, &gdef->ligCarets.items[j].carets);
+					HASH_ADD_INT(h, gid, s);
+				} else {
+					logWarning("[Consolidate] Detected caret value double-mapping about glyph %s",
+					           gname);
+				}
+			}
+		}
+		HASH_SORT(h, by_gid);
+		otl_iLigCaretTable.clear(&gdef->ligCarets);
+		GDEF_ligcaret_hash *s, *tmp;
+		HASH_ITER(hh, h, s, tmp) {
+			otl_CaretValueRecord v = {
+			    .glyph = Handle.fromConsolidated(s->gid, s->name),
+			};
+			otl_iCaretValueList.move(&v.carets, &s->carets);
+			otl_iLigCaretTable.push(&gdef->ligCarets, v);
+			sdsfree(s->name);
+			HASH_DEL(h, s);
+			FREE(s);
+		}
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/GDEF.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,7 @@
+#ifndef CARYLL_FONTOPS_OTL_GDEF_H
+#define CARYLL_FONTOPS_OTL_GDEF_H
+#include "common.h"
+
+void consolidate_GDEF(otfcc_Font *font, table_GDEF *gdef, const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,55 @@
+#include "chaining.h"
+
+bool consolidate_chaining(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                          const otfcc_Options *options) {
+	subtable_chaining *subtable = &(_subtable->chaining);
+	if (subtable->type) {
+		logWarning("[Consolidate] Ignoring non-canonical chaining subtable.");
+		return false;
+	}
+	otl_ChainingRule *rule = &(subtable->rule);
+	bool possible = true;
+	for (tableid_t j = 0; j < rule->matchCount; j++) {
+		fontop_consolidateCoverage(font, rule->match[j], options);
+		Coverage.shrink(rule->match[j], true);
+		possible = possible && (rule->match[j]->numGlyphs > 0);
+	}
+	if (rule->inputBegins > rule->matchCount) rule->inputBegins = rule->matchCount;
+	if (rule->inputEnds > rule->matchCount) rule->inputEnds = rule->matchCount;
+	for (tableid_t j = 0; j < rule->applyCount; j++) {
+		bool foundLookup = false;
+		lookup_handle *h = &(rule->apply[j].lookup);
+		if (h->name) {
+			for (tableid_t k = 0; k < table->lookups.length; k++) {
+				if (!table->lookups.items[k]) continue;
+				if (!table->lookups.items[k]->subtables.length) continue;
+				if (strcmp(table->lookups.items[k]->name, h->name) != 0) continue;
+				foundLookup = true;
+				Handle.consolidateTo(h, k, table->lookups.items[k]->name);
+			}
+			if (!foundLookup && rule->apply[j].lookup.name) {
+				logWarning("[Consolidate] Quoting an invalid lookup %s. This lookup application is "
+				           "ignored.",
+				           rule->apply[j].lookup.name);
+				Handle.dispose(&rule->apply[j].lookup);
+			}
+		} else if (h->state == HANDLE_STATE_INDEX) {
+			if (h->index >= table->lookups.length) {
+				logWarning("[Consolidate] Quoting an invalid lookup #%d.", h->index);
+				h->index = 0;
+			}
+			Handle.consolidateTo(h, h->index, table->lookups.items[h->index]->name);
+		}
+	}
+	// If a rule is designed to have no lookup application, it may be a ignoration
+	// otfcc will keep them.
+	if (rule->applyCount) {
+		tableid_t k = 0;
+		for (tableid_t j = 0; j < rule->applyCount; j++) {
+			if (rule->apply[j].lookup.name) { rule->apply[k++] = rule->apply[j]; }
+		}
+		rule->applyCount = k;
+		if (!rule->applyCount) { return true; }
+	}
+	return !possible;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/chaining.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,7 @@
+#ifndef CARYLL_FONTOPS_OTL_CHAINING_H
+#define CARYLL_FONTOPS_OTL_CHAINING_H
+#include "common.h"
+
+bool consolidate_chaining(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable, const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,24 @@
+#include "common.h"
+
+void fontop_consolidateCoverage(otfcc_Font *font, otl_Coverage *coverage, const otfcc_Options *options) {
+	if (!coverage) return;
+	for (glyphid_t j = 0; j < coverage->numGlyphs; j++) {
+		glyph_handle *h = &(coverage->glyphs[j]);
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, h)) {
+			logWarning("[Consolidate] Ignored missing glyph /%s.\n", h->name);
+			Handle.dispose(h);
+		}
+	}
+}
+
+void fontop_consolidateClassDef(otfcc_Font *font, otl_ClassDef *cd, const otfcc_Options *options) {
+	if (!cd) return;
+	for (glyphid_t j = 0; j < cd->numGlyphs; j++) {
+		glyph_handle *h = &(cd->glyphs[j]);
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, h)) {
+			logWarning("[Consolidate] Ignored missing glyph /%s.\n", h->name);
+			Handle.dispose(h);
+			cd->classes[j] = 0;
+		}
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/common.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_FONTOPS_OTL_COMMON_H
+#define CARYLL_FONTOPS_OTL_COMMON_H
+
+#include "otfcc/font.h"
+#include "table/otl/private.h"
+
+void fontop_consolidateCoverage(otfcc_Font *font, otl_Coverage *coverage, const otfcc_Options *options);
+void fontop_consolidateClassDef(otfcc_Font *font, otl_ClassDef *cd, const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,54 @@
+#include "gpos-cursive.h"
+
+typedef struct {
+	int fromid;
+	sds fromname;
+	otl_Anchor enter;
+	otl_Anchor exit;
+	UT_hash_handle hh;
+} gpos_cursive_hash;
+static int gpos_cursive_by_from_id(gpos_cursive_hash *a, gpos_cursive_hash *b) {
+	return a->fromid - b->fromid;
+}
+bool consolidate_gpos_cursive(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                              const otfcc_Options *options) {
+	subtable_gpos_cursive *subtable = &(_subtable->gpos_cursive);
+	gpos_cursive_hash *h = NULL;
+	for (glyphid_t k = 0; k < subtable->length; k++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].target)) {
+			logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].target.name);
+			continue;
+		}
+
+		gpos_cursive_hash *s;
+		int fromid = subtable->items[k].target.index;
+		HASH_FIND_INT(h, &fromid, s);
+		if (s) {
+			logWarning("[Consolidate] Double-mapping a glyph in a cursive positioning /%s.\n",
+			           subtable->items[k].target.name);
+		} else {
+			NEW(s);
+			s->fromid = subtable->items[k].target.index;
+			s->fromname = sdsdup(subtable->items[k].target.name);
+			s->enter = subtable->items[k].enter;
+			s->exit = subtable->items[k].exit;
+			HASH_ADD_INT(h, fromid, s);
+		}
+	}
+
+	HASH_SORT(h, gpos_cursive_by_from_id);
+	iSubtable_gpos_cursive.clear(subtable);
+
+	gpos_cursive_hash *s, *tmp;
+	HASH_ITER(hh, h, s, tmp) {
+		iSubtable_gpos_cursive.push(
+		    subtable, ((otl_GposCursiveEntry){
+		                  .target = Handle.fromConsolidated(s->fromid, s->fromname), .enter = s->enter, .exit = s->exit,
+		              }));
+		sdsfree(s->fromname);
+		HASH_DEL(h, s);
+		FREE(s);
+	}
+
+	return (subtable->length == 0);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-cursive.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GPOS_CURSIVE_H
+#define CARYLL_FONTOPS_OTL_GPOS_CURSIVE_H
+#include "common.h"
+
+bool consolidate_gpos_cursive(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                              const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#include "gpos-pair.h"
+
+bool consolidate_gpos_pair(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable, const otfcc_Options *options) {
+	subtable_gpos_pair *subtable = &(_subtable->gpos_pair);
+	fontop_consolidateClassDef(font, subtable->first, options);
+	fontop_consolidateClassDef(font, subtable->second, options);
+	ClassDef.shrink(subtable->first);
+	ClassDef.shrink(subtable->second);
+	return (subtable->first->numGlyphs == 0);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-pair.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,7 @@
+#ifndef CARYLL_FONTOPS_OTL_GPOS_PAIR_H
+#define CARYLL_FONTOPS_OTL_GPOS_PAIR_H
+#include "common.h"
+
+bool consolidate_gpos_pair(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable, const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,53 @@
+#include "gpos-single.h"
+
+typedef struct {
+	int fromid;
+	sds fromname;
+	otl_PositionValue v;
+	UT_hash_handle hh;
+} gpos_single_hash;
+static int gpos_by_from_id(gpos_single_hash *a, gpos_single_hash *b) {
+	return a->fromid - b->fromid;
+}
+
+bool consolidate_gpos_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                             const otfcc_Options *options) {
+	subtable_gpos_single *subtable = &(_subtable->gpos_single);
+	gpos_single_hash *h = NULL;
+	for (glyphid_t k = 0; k < subtable->length; k++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].target)) {
+			logWarning("[Consolidate] Ignored missing glyph /%s.\n",
+			           subtable->items[k].target.name);
+			continue;
+		}
+		gpos_single_hash *s;
+		int fromid = subtable->items[k].target.index;
+		HASH_FIND_INT(h, &fromid, s);
+		if (s) {
+			logWarning("[Consolidate] Detected glyph double-mapping about /%s.\n",
+			           subtable->items[k].target.name);
+		} else {
+			NEW(s);
+			s->fromid = subtable->items[k].target.index;
+			s->fromname = sdsdup(subtable->items[k].target.name);
+			s->v = subtable->items[k].value;
+			HASH_ADD_INT(h, fromid, s);
+		}
+	}
+
+	HASH_SORT(h, gpos_by_from_id);
+	iSubtable_gpos_single.clear(subtable);
+
+	gpos_single_hash *s, *tmp;
+	HASH_ITER(hh, h, s, tmp) {
+		iSubtable_gpos_single.push(
+		    subtable, ((otl_GposSingleEntry){
+		                  .target = Handle.fromConsolidated(s->fromid, s->fromname), .value = s->v,
+		              }));
+		sdsfree(s->fromname);
+		HASH_DEL(h, s);
+		FREE(s);
+	}
+
+	return (subtable->length == 0);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gpos-single.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GPOS_SINGLE_H
+#define CARYLL_FONTOPS_OTL_GPOS_SINGLE_H
+#include "common.h"
+
+bool consolidate_gpos_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                             const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,29 @@
+#include "gsub-ligature.h"
+
+bool consolidate_gsub_ligature(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                               const otfcc_Options *options) {
+	subtable_gsub_ligature *subtable = &(_subtable->gsub_ligature);
+	subtable_gsub_ligature nt;
+	iSubtable_gsub_ligature.init(&nt);
+	for (glyphid_t k = 0; k < subtable->length; k++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].to)) {
+			logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].to.name);
+			continue;
+		}
+		fontop_consolidateCoverage(font, subtable->items[k].from, options);
+		Coverage.shrink(subtable->items[k].from, false);
+		if (!subtable->items[k].from->numGlyphs) {
+			logWarning("[Consolidate] Ignoring empty ligature substitution to "
+			           "glyph /%s.\n",
+			           subtable->items[k].to.name);
+			continue;
+		}
+		iSubtable_gsub_ligature.push(
+		    &nt, ((otl_GsubLigatureEntry){
+		             .from = subtable->items[k].from, .to = Handle.dup(subtable->items[k].to),
+		         }));
+		subtable->items[k].from = NULL;
+	}
+	iSubtable_gsub_ligature.replace(subtable, nt);
+	return (subtable->length == 0);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-ligature.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GSUB_LIGATURE_H
+#define CARYLL_FONTOPS_OTL_GSUB_LIGATURE_H
+#include "common.h"
+
+bool consolidate_gsub_ligature(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                               const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,64 @@
+#include "gsub-multi.h"
+
+typedef struct {
+	int fromid;
+	sds fromname;
+	otl_Coverage *to;
+	UT_hash_handle hh;
+} gsub_multi_hash;
+static int by_from_id_multi(gsub_multi_hash *a, gsub_multi_hash *b) {
+	return a->fromid - b->fromid;
+}
+
+bool consolidate_gsub_multi(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                            const otfcc_Options *options) {
+	subtable_gsub_multi *subtable = &(_subtable->gsub_multi);
+	gsub_multi_hash *h = NULL;
+
+	for (glyphid_t k = 0; k < subtable->length; k++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].from)) {
+			logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].from.name);
+			continue;
+		}
+		fontop_consolidateCoverage(font, subtable->items[k].to, options);
+		Coverage.shrink(subtable->items[k].to, false);
+		if (!subtable->items[k].to->numGlyphs) {
+			logWarning("[Consolidate] Ignoring empty one-to-many / alternative substitution for "
+			           "glyph /%s.\n",
+			           subtable->items[k].from.name);
+			continue;
+		}
+
+		gsub_multi_hash *s;
+		int fromid = subtable->items[k].from.index;
+		HASH_FIND_INT(h, &fromid, s);
+		if (!s) {
+			NEW(s);
+			s->fromid = subtable->items[k].from.index;
+			s->fromname = sdsdup(subtable->items[k].from.name);
+			s->to = subtable->items[k].to;
+			subtable->items[k].to = NULL; // Transfer ownership
+			HASH_ADD_INT(h, fromid, s);
+		}
+	}
+	HASH_SORT(h, by_from_id_multi);
+	iSubtable_gsub_multi.clear(subtable);
+	{
+		gsub_multi_hash *s, *tmp;
+		HASH_ITER(hh, h, s, tmp) {
+			iSubtable_gsub_multi.push(
+			    subtable, ((otl_GsubMultiEntry){
+			                  .from = Handle.fromConsolidated(s->fromid, s->fromname), .to = s->to,
+			              }));
+			sdsfree(s->fromname);
+			HASH_DEL(h, s);
+			FREE(s);
+		}
+	}
+	return (subtable->length == 0);
+}
+
+bool consolidate_gsub_alternative(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                                  const otfcc_Options *options) {
+	return consolidate_gsub_multi(font, table, _subtable, options);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-multi.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_FONTOPS_OTL_GSUB_MULTI_H
+#define CARYLL_FONTOPS_OTL_GSUB_MULTI_H
+#include "common.h"
+
+bool consolidate_gsub_multi(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                            const otfcc_Options *options);
+bool consolidate_gsub_alternative(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                                  const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,57 @@
+#include "gsub-reverse.h"
+
+typedef struct {
+	int fromid;
+	sds fromname;
+	int toid;
+	sds toname;
+	UT_hash_handle hh;
+} gsub_single_map_hash;
+static int by_from_id(gsub_single_map_hash *a, gsub_single_map_hash *b) {
+	return a->fromid - b->fromid;
+}
+
+bool consolidate_gsub_reverse(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                              const otfcc_Options *options) {
+	subtable_gsub_reverse *subtable = &(_subtable->gsub_reverse);
+	for (tableid_t j = 0; j < subtable->matchCount; j++) {
+		fontop_consolidateCoverage(font, subtable->match[j], options);
+	}
+	fontop_consolidateCoverage(font, subtable->to, options);
+	if (subtable->inputIndex >= subtable->matchCount) { subtable->inputIndex = subtable->matchCount - 1; }
+	gsub_single_map_hash *h = NULL;
+	otl_Coverage *from = subtable->match[subtable->inputIndex];
+	for (glyphid_t k = 0; k < from->numGlyphs && k < subtable->to->numGlyphs; k++) {
+		gsub_single_map_hash *s;
+		int fromid = from->glyphs[k].index;
+		HASH_FIND_INT(h, &fromid, s);
+		if (s) {
+			logWarning("[Consolidate] Double-mapping a glyph in a reverse substitution /%s.\n", from->glyphs[k].name);
+		} else {
+			NEW(s);
+			s->fromid = from->glyphs[k].index;
+			s->toid = subtable->to->glyphs[k].index;
+			s->fromname = from->glyphs[k].name;
+			s->toname = subtable->to->glyphs[k].name;
+			HASH_ADD_INT(h, fromid, s);
+		}
+	}
+	HASH_SORT(h, by_from_id);
+	if (HASH_COUNT(h) != from->numGlyphs || HASH_COUNT(h) != subtable->to->numGlyphs) {
+		logWarning("[Consolidate] In this reverse subsitution lookup, some mappings are ignored.\n");
+	}
+	from->numGlyphs = HASH_COUNT(h);
+	subtable->to->numGlyphs = HASH_COUNT(h);
+	{
+		gsub_single_map_hash *s, *tmp;
+		glyphid_t j = 0;
+		HASH_ITER(hh, h, s, tmp) {
+			from->glyphs[j] = Handle.fromConsolidated(s->fromid, s->fromname);
+			subtable->to->glyphs[j] = Handle.fromConsolidated(s->toid, s->toname);
+			j++;
+			HASH_DEL(h, s);
+			FREE(s);
+		}
+	}
+	return false;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-reverse.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GSUB_REVERSE_H
+#define CARYLL_FONTOPS_OTL_GSUB_REVERSE_H
+#include "common.h"
+
+bool consolidate_gsub_reverse(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                              const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,56 @@
+#include "gsub-single.h"
+
+typedef struct {
+	int fromid;
+	sds fromname;
+	int toid;
+	sds toname;
+	UT_hash_handle hh;
+} gsub_single_map_hash;
+static int by_from_id(gsub_single_map_hash *a, gsub_single_map_hash *b) {
+	return a->fromid - b->fromid;
+}
+bool consolidate_gsub_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                             const otfcc_Options *options) {
+	subtable_gsub_single *subtable = &(_subtable->gsub_single);
+	gsub_single_map_hash *h = NULL;
+	for (size_t k = 0; k < subtable->length; k++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].from)) {
+			logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].from.name);
+			continue;
+		}
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &subtable->items[k].to)) {
+			logWarning("[Consolidate] Ignored missing glyph /%s.\n", subtable->items[k].to.name);
+			continue;
+		}
+		gsub_single_map_hash *s;
+		int fromid = subtable->items[k].from.index;
+		HASH_FIND_INT(h, &fromid, s);
+		if (s) {
+			logWarning("[Consolidate] Double-mapping a glyph in a single substitution /%s.\n",
+			           subtable->items[k].from.name);
+		} else {
+			NEW(s);
+			s->fromid = subtable->items[k].from.index;
+			s->toid = subtable->items[k].to.index;
+			s->fromname = sdsdup(subtable->items[k].from.name);
+			s->toname = sdsdup(subtable->items[k].to.name);
+			HASH_ADD_INT(h, fromid, s);
+		}
+	}
+	HASH_SORT(h, by_from_id);
+	if (HASH_COUNT(h) != subtable->length) { logWarning("[Consolidate] In this lookup, some mappings are ignored.\n"); }
+
+	iSubtable_gsub_single.clear(subtable);
+	gsub_single_map_hash *s, *tmp;
+	HASH_ITER(hh, h, s, tmp) {
+		iSubtable_gsub_single.push(subtable,
+		                           ((otl_GsubSingleEntry){.from = Handle.fromConsolidated(s->fromid, s->fromname),
+		                                                  .to = Handle.fromConsolidated(s->toid, s->toname)}));
+		sdsfree(s->fromname);
+		sdsfree(s->toname);
+		HASH_DEL(h, s);
+		FREE(s);
+	}
+	return (subtable->length == 0);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/gsub-single.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,8 @@
+#ifndef CARYLL_FONTOPS_OTL_GSUB_SINGLE_H
+#define CARYLL_FONTOPS_OTL_GSUB_SINGLE_H
+#include "common.h"
+
+bool consolidate_gsub_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                             const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,166 @@
+#include "mark.h"
+
+typedef struct {
+	int gid;
+	sds name;
+	glyphclass_t markClass;
+	otl_Anchor anchor;
+	UT_hash_handle hh;
+} mark_hash;
+static int mark_by_gid(mark_hash *a, mark_hash *b) {
+	return a->gid - b->gid;
+}
+typedef struct {
+	int gid;
+	sds name;
+	otl_Anchor *anchors;
+	UT_hash_handle hh;
+} base_hash;
+static int base_by_gid(base_hash *a, base_hash *b) {
+	return a->gid - b->gid;
+}
+typedef struct {
+	int gid;
+	sds name;
+	glyphid_t componentCount;
+	otl_Anchor **anchors;
+	UT_hash_handle hh;
+} lig_hash;
+static int lig_by_gid(lig_hash *a, lig_hash *b) {
+	return a->gid - b->gid;
+}
+
+static void consolidateMarkArray(otfcc_Font *font, table_OTL *table, const otfcc_Options *options,
+                                 otl_MarkArray *markArray, glyphclass_t classCount) {
+	mark_hash *hm = NULL;
+	for (glyphid_t k = 0; k < markArray->length; k++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &markArray->items[k].glyph)) {
+			logWarning("[Consolidate] Ignored unknown glyph name %s.",
+			           markArray->items[k].glyph.name);
+			continue;
+		}
+		mark_hash *s = NULL;
+		int gid = markArray->items[k].glyph.index;
+		HASH_FIND_INT(hm, &gid, s);
+		if (!s && markArray->items[k].anchor.present &&
+		    markArray->items[k].markClass < classCount) {
+			NEW(s);
+			s->gid = markArray->items[k].glyph.index;
+			s->name = sdsdup(markArray->items[k].glyph.name);
+			s->markClass = markArray->items[k].markClass;
+			s->anchor = markArray->items[k].anchor;
+			HASH_ADD_INT(hm, gid, s);
+		} else {
+			logWarning("[Consolidate] Ignored invalid or double-mapping mark definition for /%s.",
+			           markArray->items[k].glyph.name);
+		}
+	}
+	HASH_SORT(hm, mark_by_gid);
+	otl_iMarkArray.clear(markArray);
+	mark_hash *s, *tmp;
+	HASH_ITER(hh, hm, s, tmp) {
+		otl_iMarkArray.push(markArray, ((otl_MarkRecord){
+		                                   .glyph = Handle.fromConsolidated(s->gid, s->name),
+		                                   .markClass = s->markClass,
+		                                   .anchor = s->anchor,
+		                               }));
+		sdsfree(s->name);
+		HASH_DEL(hm, s);
+		FREE(s);
+	}
+}
+
+static void consolidateBaseArray(otfcc_Font *font, table_OTL *table, const otfcc_Options *options,
+                                 otl_BaseArray *baseArray) {
+	// consolidate bases
+	base_hash *hm = NULL;
+	for (glyphid_t k = 0; k < baseArray->length; k++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &baseArray->items[k].glyph)) {
+			logWarning("[Consolidate] Ignored unknown glyph name %s.",
+			           baseArray->items[k].glyph.name);
+			continue;
+		}
+		base_hash *s = NULL;
+		int gid = baseArray->items[k].glyph.index;
+		HASH_FIND_INT(hm, &gid, s);
+		if (!s) {
+			NEW(s);
+			s->gid = baseArray->items[k].glyph.index;
+			s->name = sdsdup(baseArray->items[k].glyph.name);
+			s->anchors = baseArray->items[k].anchors;
+			baseArray->items[k].anchors = NULL; // Transfer ownership
+			HASH_ADD_INT(hm, gid, s);
+		} else {
+			logWarning("[Consolidate] Ignored anchor double-definition for /%s.",
+			           baseArray->items[k].glyph.name);
+		}
+	}
+	HASH_SORT(hm, base_by_gid);
+	otl_iBaseArray.clear(baseArray);
+	base_hash *s, *tmp;
+	HASH_ITER(hh, hm, s, tmp) {
+		otl_iBaseArray.push(
+		    baseArray, ((otl_BaseRecord){
+		                   .glyph = Handle.fromConsolidated(s->gid, s->name), .anchors = s->anchors,
+		               }));
+		sdsfree(s->name);
+		HASH_DEL(hm, s);
+		FREE(s);
+	}
+}
+
+static void consolidateLigArray(otfcc_Font *font, table_OTL *table, const otfcc_Options *options,
+                                otl_LigatureArray *ligArray) {
+	lig_hash *hm = NULL;
+	for (glyphid_t k = 0; k < ligArray->length; k++) {
+		if (!GlyphOrder.consolidateHandle(font->glyph_order, &ligArray->items[k].glyph)) {
+			logWarning("[Consolidate] Ignored unknown glyph name %s.",
+			           ligArray->items[k].glyph.name);
+			continue;
+		}
+		lig_hash *s = NULL;
+		int gid = ligArray->items[k].glyph.index;
+		HASH_FIND_INT(hm, &gid, s);
+		if (!s) {
+			NEW(s);
+			s->gid = ligArray->items[k].glyph.index;
+			s->name = sdsdup(ligArray->items[k].glyph.name);
+			s->componentCount = ligArray->items[k].componentCount;
+			s->anchors = ligArray->items[k].anchors;
+			ligArray->items[k].anchors = NULL;
+			HASH_ADD_INT(hm, gid, s);
+		} else {
+			logWarning("[Consolidate] Ignored anchor double-definition for /%s.",
+			           ligArray->items[k].glyph.name);
+		}
+	}
+	HASH_SORT(hm, lig_by_gid);
+	otl_iLigatureArray.clear(ligArray);
+	lig_hash *s, *tmp;
+	HASH_ITER(hh, hm, s, tmp) {
+		otl_iLigatureArray.push(ligArray, ((otl_LigatureBaseRecord){
+		                                      .glyph = Handle.fromConsolidated(s->gid, s->name),
+		                                      .componentCount = s->componentCount,
+		                                      .anchors = s->anchors,
+		                                  }));
+		sdsfree(s->name);
+		HASH_DEL(hm, s);
+		FREE(s);
+	}
+}
+
+bool consolidate_mark_to_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                                const otfcc_Options *options) {
+	subtable_gpos_markToSingle *subtable = &(_subtable->gpos_markToSingle);
+	consolidateMarkArray(font, table, options, &subtable->markArray, subtable->classCount);
+	consolidateBaseArray(font, table, options, &subtable->baseArray);
+	return (subtable->markArray.length == 0) || (subtable->baseArray.length == 0);
+}
+
+bool consolidate_mark_to_ligature(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                                  const otfcc_Options *options) {
+	subtable_gpos_markToLigature *subtable = &(_subtable->gpos_markToLigature);
+	consolidateMarkArray(font, table, options, &subtable->markArray, subtable->classCount);
+	consolidateLigArray(font, table, options, &subtable->ligArray);
+	return (subtable->markArray.length == 0) || (subtable->ligArray.length == 0);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/consolidate/otl/mark.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_FONTOPS_OTL_MARK_H
+#define CARYLL_FONTOPS_OTL_MARK_H
+#include "common.h"
+
+bool consolidate_mark_to_single(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                                const otfcc_Options *options);
+bool consolidate_mark_to_ligature(otfcc_Font *font, table_OTL *table, otl_Subtable *_subtable,
+                                  const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-font.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-font.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-font.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,168 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+#include "otfcc/sfnt-builder.h"
+#include "consolidate/consolidate.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static void *createFontTable(otfcc_Font *font, const uint32_t tag) {
+	switch (tag) {
+		case OTFCC_CHR('n','a','m','e'):
+			return table_iName.create();
+		case OTFCC_CHR('G','S','U','B'):
+		case OTFCC_CHR('G','P','O','S'):
+			return table_iOTL.create();
+		default:
+			return NULL;
+	}
+}
+
+static void deleteFontTable(otfcc_Font *font, const uint32_t tag) {
+	switch (tag) {
+		case OTFCC_CHR('h','e','a','d'):
+			if (font->head) DELETE(table_iHead.free, font->head);
+			return;
+		case OTFCC_CHR('h','h','e','a'):
+			if (font->hhea) DELETE(table_iHhea.free, font->hhea);
+			return;
+		case OTFCC_CHR('m','a','x','p'):
+			if (font->maxp) DELETE(table_iMaxp.free, font->maxp);
+			return;
+		case OTFCC_CHR('O','S','_','2'):
+		case OTFCC_CHR('O','S','/','2'):
+			if (font->OS_2) DELETE(table_iOS_2.free, font->OS_2);
+			return;
+		case OTFCC_CHR('n','a','m','e'):
+			if (font->name) DELETE(table_iName.free, font->name);
+			return;
+		case OTFCC_CHR('m','e','t','a'):
+			if (font->meta) DELETE(table_iMeta.free, font->meta);
+			return;
+		case OTFCC_CHR('h','m','t','x'):
+			if (font->hmtx) DELETE(table_iHmtx.free, font->hmtx);
+			return;
+		case OTFCC_CHR('v','m','t','x'):
+			if (font->vmtx) DELETE(table_iVmtx.free, font->vmtx);
+			return;
+		case OTFCC_CHR('p','o','s','t'):
+			if (font->post) DELETE(iTable_post.free, font->post);
+			return;
+#if 0
+		case OTFCC_CHR('h','d','m','x'):
+			if (font->hdmx) DELETE(otfcc_deleteHdmx, font->hdmx);
+			return;
+#endif
+		case OTFCC_CHR('v','h','e','a'):
+			if (font->vhea) DELETE(table_iVhea.free, font->vhea);
+			return;
+		case OTFCC_CHR('f','p','g','m'):
+			if (font->fpgm) DELETE(table_iFpgm_prep.free, font->fpgm);
+			return;
+		case OTFCC_CHR('p','r','e','p'):
+			if (font->prep) DELETE(table_iFpgm_prep.free, font->prep);
+			return;
+		case OTFCC_CHR('c','v','t','_'):
+		case OTFCC_CHR('c','v','t',' '):
+			if (font->cvt_) DELETE(table_iCvt.free, font->cvt_);
+			return;
+		case OTFCC_CHR('g','a','s','p'):
+			if (font->gasp) DELETE(table_iGasp.free, font->gasp);
+			return;
+		case OTFCC_CHR('C','F','F','_'):
+		case OTFCC_CHR('C','F','F',' '):
+			if (font->CFF_) DELETE(table_iCFF.free, font->CFF_);
+			return;
+		case OTFCC_CHR('g','l','y','f'):
+			if (font->glyf) DELETE(table_iGlyf.free, font->glyf);
+			return;
+		case OTFCC_CHR('c','m','a','p'):
+			if (font->cmap) DELETE(table_iCmap.free, font->cmap);
+			return;
+		case OTFCC_CHR('L','T','S','H'):
+			if (font->LTSH) DELETE(table_iLTSH.free, font->LTSH);
+			return;
+		case OTFCC_CHR('G','S','U','B'):
+			if (font->GSUB) DELETE(table_iOTL.free, font->GSUB);
+			return;
+		case OTFCC_CHR('G','P','O','S'):
+			if (font->GPOS) DELETE(table_iOTL.free, font->GPOS);
+			return;
+		case OTFCC_CHR('G','D','E','F'):
+			if (font->GDEF) DELETE(table_iGDEF.free, font->GDEF);
+			return;
+		case OTFCC_CHR('B','A','S','E'):
+			if (font->BASE) DELETE(table_iBASE.free, font->BASE);
+			return;
+		case OTFCC_CHR('V','O','R','G'):
+			if (font->VORG) DELETE(table_iVORG.free, font->VORG);
+			return;
+		case OTFCC_CHR('C','P','A','L'):
+			if (font->CPAL) DELETE(table_iCPAL.free, font->CPAL);
+			return;
+		case OTFCC_CHR('C','O','L','R'):
+			if (font->COLR) DELETE(table_iCOLR.free, font->COLR);
+			return;
+		case OTFCC_CHR('S','V','G',' '):
+		case OTFCC_CHR('S','V','G','_'):
+			if (font->SVG_) DELETE(table_iSVG.free, font->SVG_);
+			return;
+		case OTFCC_CHR('T','S','I','0'):
+		case OTFCC_CHR('T','S','I','1'):
+			if (font->TSI_01) DELETE(table_iTSI.free, font->TSI_01);
+			return;
+		case OTFCC_CHR('T','S','I','2'):
+		case OTFCC_CHR('T','S','I','3'):
+			if (font->TSI_23) DELETE(table_iTSI.free, font->TSI_23);
+			return;
+		case OTFCC_CHR('T','S','I','5'):
+			if (font->TSI5) DELETE(otl_iClassDef.free, font->TSI5);
+			return;
+	}
+}
+
+static INLINE void initFont(otfcc_Font *font) {
+	memset(font, 0, sizeof(*font));
+}
+static INLINE void disposeFont(otfcc_Font *font) {
+	deleteFontTable(font, OTFCC_CHR('h','e','a','d'));
+	deleteFontTable(font, OTFCC_CHR('h','h','e','a'));
+	deleteFontTable(font, OTFCC_CHR('m','a','x','p'));
+	deleteFontTable(font, OTFCC_CHR('O','S','_','2'));
+	deleteFontTable(font, OTFCC_CHR('n','a','m','e'));
+	deleteFontTable(font, OTFCC_CHR('m','e','t','a'));
+	deleteFontTable(font, OTFCC_CHR('h','m','t','x'));
+	deleteFontTable(font, OTFCC_CHR('v','m','t','x'));
+	deleteFontTable(font, OTFCC_CHR('p','o','s','t'));
+	deleteFontTable(font, OTFCC_CHR('h','d','m','x'));
+	deleteFontTable(font, OTFCC_CHR('v','h','e','a'));
+	deleteFontTable(font, OTFCC_CHR('f','p','g','m'));
+	deleteFontTable(font, OTFCC_CHR('p','r','e','p'));
+	deleteFontTable(font, OTFCC_CHR('c','v','t','_'));
+	deleteFontTable(font, OTFCC_CHR('g','a','s','p'));
+	deleteFontTable(font, OTFCC_CHR('C','F','F','_'));
+	deleteFontTable(font, OTFCC_CHR('g','l','y','f'));
+	deleteFontTable(font, OTFCC_CHR('c','m','a','p'));
+	deleteFontTable(font, OTFCC_CHR('L','T','S','H'));
+	deleteFontTable(font, OTFCC_CHR('G','S','U','B'));
+	deleteFontTable(font, OTFCC_CHR('G','P','O','S'));
+	deleteFontTable(font, OTFCC_CHR('G','D','E','F'));
+	deleteFontTable(font, OTFCC_CHR('B','A','S','E'));
+	deleteFontTable(font, OTFCC_CHR('V','O','R','G'));
+	deleteFontTable(font, OTFCC_CHR('C','P','A','L'));
+	deleteFontTable(font, OTFCC_CHR('C','O','L','R'));
+	deleteFontTable(font, OTFCC_CHR('S','V','G','_'));
+	deleteFontTable(font, OTFCC_CHR('T','S','I','0'));
+	deleteFontTable(font, OTFCC_CHR('T','S','I','2'));
+	deleteFontTable(font, OTFCC_CHR('T','S','I','5'));
+
+	GlyphOrder.free(font->glyph_order);
+}
+caryll_standardRefTypeFn(otfcc_Font, initFont, disposeFont);
+
+caryll_ElementInterfaceOf(otfcc_Font) otfcc_iFont = {
+    caryll_standardRefTypeMethods(otfcc_Font),
+    .createTable = createFontTable,
+    .deleteTable = deleteFontTable,
+    .consolidate = otfcc_consolidateFont,
+};

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt-builder.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,115 @@
+#include "support/util.h"
+#include "otfcc/sfnt-builder.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static uint32_t buf_checksum(caryll_Buffer *buffer) {
+	uint32_t actualLength = (uint32_t)buflen(buffer);
+	buflongalign(buffer);
+	uint32_t sum = 0;
+	{
+		uint32_t *start = (uint32_t *)buffer->data;
+		uint32_t *end = start + ((actualLength + 3) & ~3) / sizeof(uint32_t);
+		while (start < end) {
+			sum += otfcc_endian_convert32(*start++);
+		}
+	}
+	return sum;
+}
+
+static otfcc_SFNTTableEntry *createSegment(uint32_t tag, caryll_Buffer *buffer) {
+	otfcc_SFNTTableEntry *table;
+	NEW(table);
+	table->tag = tag;
+	table->length = (uint32_t)buflen(buffer);
+	buflongalign(buffer);
+	table->buffer = buffer;
+
+	uint32_t sum = 0;
+	{
+		uint32_t *start = (uint32_t *)buffer->data;
+		uint32_t *end = start + ((table->length + 3) & ~3) / sizeof(uint32_t);
+		while (start < end) {
+			sum += otfcc_endian_convert32(*start++);
+		}
+	}
+	table->checksum = sum;
+	return table;
+}
+
+otfcc_SFNTBuilder *otfcc_newSFNTBuilder(uint32_t header, const otfcc_Options *options) {
+	otfcc_SFNTBuilder *builder;
+	NEW(builder);
+	builder->count = 0;
+	builder->header = header;
+	builder->tables = NULL;
+	builder->options = options;
+	return builder;
+}
+
+void otfcc_deleteSFNTBuilder(otfcc_SFNTBuilder *builder) {
+	if (!builder) return;
+	otfcc_SFNTTableEntry *item, *tmp;
+	HASH_ITER(hh, builder->tables, item, tmp) {
+		HASH_DEL(builder->tables, item);
+		buffree(item->buffer);
+		FREE(item);
+	}
+	FREE(builder);
+}
+
+void otfcc_SFNTBuilder_pushTable(otfcc_SFNTBuilder *builder, uint32_t tag, caryll_Buffer *buffer) {
+	if (!builder || !buffer) return;
+	otfcc_SFNTTableEntry *item;
+	const otfcc_Options *options = builder->options;
+	HASH_FIND_INT(builder->tables, &tag, item);
+	if (!item) {
+		item = createSegment(tag, buffer);
+		HASH_ADD_INT(builder->tables, tag, item);
+		logProgress("OpenType table %c%c%c%c successfully built.\n", (tag >> 24) & 0xff,
+		            (tag >> 16) & 0xff, (tag >> 8) & 0xff, tag & 0xff);
+	} else {
+		buffree(buffer);
+	}
+}
+
+static int byTag(otfcc_SFNTTableEntry *a, otfcc_SFNTTableEntry *b) {
+	return (a->tag - b->tag);
+}
+
+caryll_Buffer *otfcc_SFNTBuilder_serialize(otfcc_SFNTBuilder *builder) {
+	caryll_Buffer *buffer = bufnew();
+	if (!builder) return buffer;
+	uint16_t nTables = HASH_COUNT(builder->tables);
+	uint16_t searchRange = (nTables < 16 ? 8 : nTables < 32 ? 16 : nTables < 64 ? 32 : 64) * 16;
+	bufwrite32b(buffer, builder->header);
+	bufwrite16b(buffer, nTables);
+	bufwrite16b(buffer, searchRange);
+	bufwrite16b(buffer, (nTables < 16 ? 3 : nTables < 32 ? 4 : nTables < 64 ? 5 : 6));
+	bufwrite16b(buffer, nTables * 16 - searchRange);
+
+	otfcc_SFNTTableEntry *table;
+	size_t offset = 12 + nTables * 16;
+	size_t headOffset = offset;
+	HASH_SORT(builder->tables, byTag);
+	foreach_hash(table, builder->tables) {
+		// write table directory
+		bufwrite32b(buffer, table->tag);
+		bufwrite32b(buffer, table->checksum);
+		bufwrite32b(buffer, (uint32_t)offset);
+		bufwrite32b(buffer, table->length);
+		size_t cp = buffer->cursor;
+		bufseek(buffer, offset);
+		bufwrite_buf(buffer, table->buffer);
+		bufseek(buffer, cp);
+		// record where the [head] is
+		if (table->tag == OTFCC_CHR('h','e','a','d')) { headOffset = offset; }
+		offset += buflen(table->buffer);
+	}
+
+	// write head.checksumAdjust
+	uint32_t wholeChecksum = buf_checksum(buffer);
+	bufseek(buffer, headOffset + 8);
+	bufwrite32b(buffer, 0xB1B0AFBA - wholeChecksum);
+	return buffer;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/font/caryll-sfnt.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,90 @@
+#include "support/util.h"
+#include "otfcc/sfnt.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static void otfcc_read_packets(otfcc_SplineFontContainer *font, FILE *file) {
+	for (uint32_t count = 0; count < font->count; count++) {
+		(void)fseek(file, font->offsets[count], SEEK_SET);
+
+		font->packets[count].sfnt_version = otfcc_get32u(file);
+		font->packets[count].numTables = otfcc_get16u(file);
+		font->packets[count].searchRange = otfcc_get16u(file);
+		font->packets[count].entrySelector = otfcc_get16u(file);
+		font->packets[count].rangeShift = otfcc_get16u(file);
+		NEW(font->packets[count].pieces, font->packets[count].numTables);
+
+		for (uint32_t i = 0; i < font->packets[count].numTables; i++) {
+			font->packets[count].pieces[i].tag = otfcc_get32u(file);
+			font->packets[count].pieces[i].checkSum = otfcc_get32u(file);
+			font->packets[count].pieces[i].offset = otfcc_get32u(file);
+			font->packets[count].pieces[i].length = otfcc_get32u(file);
+			NEW(font->packets[count].pieces[i].data, font->packets[count].pieces[i].length);
+		}
+
+		for (uint32_t i = 0; i < font->packets[0].numTables; i++) {
+			(void)fseek(file, font->packets[count].pieces[i].offset, SEEK_SET);
+			(void)fread(font->packets[count].pieces[i].data, font->packets[count].pieces[i].length,
+			            1, file);
+		}
+	}
+}
+
+otfcc_SplineFontContainer *otfcc_readSFNT(FILE *file) {
+	if (!file) return NULL;
+	otfcc_SplineFontContainer *font;
+	NEW(font);
+
+	font->type = otfcc_get32u(file);
+
+	switch (font->type) {
+		case OTFCC_CHR('O','T','T','O'):
+		case 0x00010000:
+		case OTFCC_CHR('t','r','u','e'):
+		case OTFCC_CHR('t','y','p','1'):
+			font->count = 1;
+			NEW(font->offsets, font->count);
+			NEW(font->packets, font->count);
+			font->offsets[0] = 0;
+			otfcc_read_packets(font, file);
+			break;
+
+		case OTFCC_CHR('t','t','c','f'):
+			(void)otfcc_get32u(file);
+			font->count = otfcc_get32u(file);
+			NEW(font->offsets, font->count);
+			NEW(font->packets, font->count);
+
+			for (uint32_t i = 0; i < font->count; i++) {
+				font->offsets[i] = otfcc_get32u(file);
+			}
+
+			otfcc_read_packets(font, file);
+			break;
+
+		default:
+			font->count = 0;
+			font->offsets = NULL;
+			font->packets = NULL;
+			break;
+	}
+
+	fclose(file);
+
+	return font;
+}
+
+void otfcc_deleteSFNT(otfcc_SplineFontContainer *font) {
+	if (!font) return;
+	if (font->count > 0) {
+		for (uint32_t count = 0; count < font->count; count++) {
+			for (int i = 0; i < font->packets[count].numTables; i++) {
+				FREE(font->packets[count].pieces[i].data);
+			}
+			FREE(font->packets[count].pieces);
+		}
+		FREE(font->packets);
+	}
+	FREE(font->offsets);
+	FREE(font);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/json-reader.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/json-reader.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-reader/json-reader.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,181 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+
+static otfcc_font_subtype otfcc_decideFontSubtypeFromJson(const json_value *root) {
+	if (json_obj_get_type(root, "CFF_", json_object) != NULL) {
+		return FONTTYPE_CFF;
+	} else {
+		return FONTTYPE_TTF;
+	}
+}
+
+// The default glyph_order object is completed using a two-step construction
+enum { ORD_GLYPHORDER = 1, ORD_NOTDEF = 2, ORD_CMAP = 3, ORD_GLYF = 4 };
+
+// Register a name->(orderType, orderEntry) map.
+static void setOrderByName(otfcc_GlyphOrder *go, sds name, uint8_t orderType, uint32_t orderEntry) {
+	otfcc_GlyphOrderEntry *s = NULL;
+	HASH_FIND(hhName, go->byName, name, sdslen(name), s);
+	if (!s) {
+		NEW(s);
+		s->gid = -1;
+		s->name = name;
+		s->orderType = orderType;
+		s->orderEntry = orderEntry;
+		HASH_ADD(hhName, go->byName, name[0], sdslen(s->name), s);
+	} else if (s->orderType > orderType) {
+		s->orderType = orderType;
+		s->orderEntry = orderEntry;
+	}
+}
+
+static int _byOrder(otfcc_GlyphOrderEntry *a, otfcc_GlyphOrderEntry *b) {
+	if (a->orderType < b->orderType) return (-1);
+	if (a->orderType > b->orderType) return (1);
+	if (a->orderEntry < b->orderEntry) return (-1);
+	if (a->orderEntry > b->orderEntry) return (1);
+	return 0;
+}
+
+// Complete ClyphOrder
+static void orderGlyphs(otfcc_GlyphOrder *go) {
+	HASH_SRT(hhName, go->byName, _byOrder);
+	otfcc_GlyphOrderEntry *current, *temp;
+	glyphid_t gid = 0;
+	HASH_ITER(hhName, go->byName, current, temp) {
+		current->gid = gid;
+		HASH_ADD(hhID, go->byGID, gid, sizeof(glyphid_t), current);
+		gid += 1;
+	}
+}
+
+static void escalateGlyphOrderByName(otfcc_GlyphOrder *go, sds name, uint8_t orderType,
+                                     uint32_t orderEntry) {
+	otfcc_GlyphOrderEntry *s = NULL;
+	HASH_FIND(hhName, go->byName, name, sdslen(name), s);
+	if (s && s->orderType > orderType) {
+		s->orderType = orderType;
+		s->orderEntry = orderEntry;
+	}
+}
+
+static void placeOrderEntriesFromGlyf(json_value *table, otfcc_GlyphOrder *go) {
+	for (uint32_t j = 0; j < table->u.object.length; j++) {
+		sds gname =
+		    sdsnewlen(table->u.object.values[j].name, table->u.object.values[j].name_length);
+		if (strcmp(gname, ".notdef") == 0) {
+			setOrderByName(go, gname, ORD_NOTDEF, 0);
+		} else if (strcmp(gname, ".null") == 0) {
+			setOrderByName(go, gname, ORD_NOTDEF, 1);
+		} else {
+			setOrderByName(go, gname, ORD_GLYF, j);
+		}
+	}
+}
+static void placeOrderEntriesFromCmap(json_value *table, otfcc_GlyphOrder *go) {
+	for (uint32_t j = 0; j < table->u.object.length; j++) {
+		sds unicodeStr =
+		    sdsnewlen(table->u.object.values[j].name, table->u.object.values[j].name_length);
+		json_value *item = table->u.object.values[j].value;
+		int32_t unicode;
+		if (sdslen(unicodeStr) > 2 && unicodeStr[0] == 'U' && unicodeStr[1] == '+') {
+			unicode = strtol(unicodeStr + 2, NULL, 16);
+		} else {
+			unicode = atoi(unicodeStr);
+		}
+		sdsfree(unicodeStr);
+		if (item->type == json_string && unicode > 0 &&
+		    unicode <= 0x10FFFF) { // a valid unicode codepoint
+			sds gname = sdsnewlen(item->u.string.ptr, item->u.string.length);
+			escalateGlyphOrderByName(go, gname, ORD_CMAP, unicode);
+			sdsfree(gname);
+		}
+	}
+}
+static void placeOrderEntriesFromSubtable(json_value *table, otfcc_GlyphOrder *go, bool zeroOnly) {
+	uint32_t uplimit = table->u.array.length;
+	if (uplimit >= 1 && zeroOnly) { uplimit = 1; }
+	for (uint32_t j = 0; j < uplimit; j++) {
+		json_value *item = table->u.array.values[j];
+		if (item->type == json_string) {
+			sds gname = sdsnewlen(item->u.string.ptr, item->u.string.length);
+			escalateGlyphOrderByName(go, gname, ORD_GLYPHORDER, j);
+			sdsfree(gname);
+		}
+	}
+}
+
+static otfcc_GlyphOrder *parseGlyphOrder(const json_value *root, const otfcc_Options *options) {
+	otfcc_GlyphOrder *go = GlyphOrder.create();
+	if (root->type != json_object) return go;
+	json_value *table;
+
+	if ((table = json_obj_get_type(root, "glyf", json_object))) {
+		placeOrderEntriesFromGlyf(table, go);
+		if ((table = json_obj_get_type(root, "cmap", json_object))) {
+			placeOrderEntriesFromCmap(table, go);
+		}
+		if ((table = json_obj_get_type(root, "glyph_order", json_array))) {
+			bool ignoreGlyphOrder = options->ignore_glyph_order;
+			if (ignoreGlyphOrder && !!json_obj_get_type(root, "SVG_", json_array)) {
+				logNotice("OpenType SVG table detected. Glyph order is preserved.");
+				ignoreGlyphOrder = false;
+			}
+			placeOrderEntriesFromSubtable(table, go, ignoreGlyphOrder);
+		}
+	}
+	orderGlyphs(go);
+	return go;
+}
+
+static otfcc_Font *readJson(void *_root, uint32_t index, const otfcc_Options *options) {
+	const json_value *root = (json_value *)_root;
+	otfcc_Font *font = otfcc_iFont.create();
+	if (!font) return NULL;
+	font->subtype = otfcc_decideFontSubtypeFromJson(root);
+	font->glyph_order = parseGlyphOrder(root, options);
+	font->glyf = otfcc_parseGlyf(root, font->glyph_order, options);
+	font->CFF_ = otfcc_parseCFF(root, options);
+	font->head = otfcc_parseHead(root, options);
+	font->hhea = otfcc_parseHhea(root, options);
+	font->OS_2 = otfcc_parseOS_2(root, options);
+	font->maxp = otfcc_parseMaxp(root, options);
+	font->post = otfcc_parsePost(root, options);
+	font->name = otfcc_parseName(root, options);
+	font->meta = otfcc_parseMeta(root, options);
+	font->cmap = otfcc_parseCmap(root, options);
+	if (!options->ignore_hints) {
+		font->fpgm = otfcc_parseFpgmPrep(root, options, "fpgm");
+		font->prep = otfcc_parseFpgmPrep(root, options, "prep");
+		font->cvt_ = otfcc_parseCvt(root, options, "cvt_");
+		font->gasp = otfcc_parseGasp(root, options);
+	}
+	font->VDMX = otfcc_parseVDMX(root, options);
+	font->vhea = otfcc_parseVhea(root, options);
+	if (font->glyf) {
+		font->GSUB = otfcc_parseOtl(root, options, "GSUB");
+		font->GPOS = otfcc_parseOtl(root, options, "GPOS");
+		font->GDEF = otfcc_parseGDEF(root, options);
+	}
+	font->BASE = otfcc_parseBASE(root, options);
+	font->CPAL = otfcc_parseCPAL(root, options);
+	font->COLR = otfcc_parseCOLR(root, options);
+	font->SVG_ = otfcc_parseSVG(root, options);
+
+	font->TSI_01 = otfcc_parseTSI(root, options, "TSI_01");
+	font->TSI_23 = otfcc_parseTSI(root, options, "TSI_23");
+	font->TSI5 = otfcc_parseTSI5(root, options);
+
+	return font;
+}
+static INLINE void freeReader(otfcc_IFontBuilder *self) {
+	free(self);
+}
+otfcc_IFontBuilder *otfcc_newJsonReader() {
+	otfcc_IFontBuilder *reader;
+	NEW(reader);
+	reader->read = readJson;
+	reader->free = freeReader;
+	return reader;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,56 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+
+static void *serializeToJson(otfcc_Font *font, const otfcc_Options *options) {
+	json_value *root = json_object_new(48);
+	if (!root) return NULL;
+	otfcc_dumpFvar(font->fvar, root, options);
+	otfcc_dumpHead(font->head, root, options);
+	otfcc_dumpHhea(font->hhea, root, options);
+	otfcc_dumpMaxp(font->maxp, root, options);
+	otfcc_dumpVhea(font->vhea, root, options);
+	otfcc_dumpPost(font->post, root, options);
+	otfcc_dumpOS_2(font->OS_2, root, options);
+	otfcc_dumpName(font->name, root, options);
+	otfcc_dumpMeta(font->meta, root, options);
+	otfcc_dumpCmap(font->cmap, root, options);
+	otfcc_dumpCFF(font->CFF_, root, options);
+
+	GlyfIOContext ctx = {.locaIsLong = font->head->indexToLocFormat,
+	                     .numGlyphs = font->maxp->numGlyphs,
+	                     .nPhantomPoints = 4,
+	                     .hasVerticalMetrics = !!(font->vhea),
+	                     .exportFDSelect = font->CFF_ && font->CFF_->isCID,
+	                     .fvar = font->fvar};
+	otfcc_dumpGlyf(font->glyf, root, options, &ctx);
+	if (!options->ignore_hints) {
+		table_dumpTableFpgmPrep(font->fpgm, root, options, "fpgm");
+		table_dumpTableFpgmPrep(font->prep, root, options, "prep");
+		otfcc_dumpCvt(font->cvt_, root, options, "cvt_");
+		otfcc_dumpGasp(font->gasp, root, options);
+	}
+	otfcc_dumpVDMX(font->VDMX, root, options);
+	otfcc_dumpOtl(font->GSUB, root, options, "GSUB");
+	otfcc_dumpOtl(font->GPOS, root, options, "GPOS");
+	otfcc_dumpGDEF(font->GDEF, root, options);
+	otfcc_dumpBASE(font->BASE, root, options);
+
+	otfcc_dumpCPAL(font->CPAL, root, options);
+	otfcc_dumpCOLR(font->COLR, root, options);
+	otfcc_dumpSVG(font->SVG_, root, options);
+	otfcc_dumpTSI(font->TSI_01, root, options, "TSI_01");
+	otfcc_dumpTSI(font->TSI_23, root, options, "TSI_23");
+	otfcc_dumpTSI5(font->TSI5, root, options);
+	return root;
+}
+static void freeJsonWriter(otfcc_IFontSerializer *self) {
+	free(self);
+}
+otfcc_IFontSerializer *otfcc_newJsonWriter() {
+	otfcc_IFontSerializer *writer;
+	NEW(writer);
+	writer->serialize = serializeToJson;
+	writer->free = freeJsonWriter;
+	return writer;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,126 @@
+#include "cff-charset.h"
+
+void cff_extract_Charset(uint8_t *data, int32_t offset, uint16_t nchars, cff_Charset *charsets) {
+	uint32_t i;
+	if (offset == cff_CHARSET_ISOADOBE)
+		charsets->t = cff_CHARSET_ISOADOBE;
+	else if (offset == cff_CHARSET_EXPERT)
+		charsets->t = cff_CHARSET_EXPERT;
+	else if (offset == cff_CHARSET_EXPERTSUBSET)
+		charsets->t = cff_CHARSET_EXPERTSUBSET;
+	else {
+		// NOTE: gid 1 will always be named as .notdef
+		switch (data[offset]) {
+			case 0:
+				charsets->t = cff_CHARSET_FORMAT0;
+				{
+					charsets->s = nchars - 1;
+					NEW(charsets->f0.glyph, nchars - 1);
+
+					for (i = 0; i < charsets->s; i++)
+						charsets->f0.glyph[i] = gu2(data, offset + 1 + i * 2);
+				}
+				break;
+			case 1:
+				charsets->t = cff_CHARSET_FORMAT1;
+				{
+					uint32_t size;
+					uint32_t glyphsEncodedSofar = 1;
+					for (i = 0; glyphsEncodedSofar < nchars; i++) {
+						glyphsEncodedSofar += 1 + gu1(data, offset + 3 + i * 3);
+					}
+
+					size = i;
+					charsets->s = size;
+					NEW(charsets->f1.range1, i + 1);
+					for (i = 0; i < size; i++) {
+						charsets->f1.range1[i].first = gu2(data, offset + 1 + i * 3);
+						charsets->f1.range1[i].nleft = gu1(data, offset + 3 + i * 3);
+					}
+				}
+				break;
+			case 2:
+				charsets->t = cff_CHARSET_FORMAT2;
+				{
+					uint32_t size;
+					uint32_t glyphsEncodedSofar = 1;
+					for (i = 0; glyphsEncodedSofar < nchars; i++) {
+						glyphsEncodedSofar += 1 + gu2(data, offset + 3 + i * 4);
+					}
+
+					size = i;
+					charsets->s = size;
+					NEW(charsets->f2.range2, i + 1);
+
+					for (i = 0; i < size; i++) {
+						charsets->f2.range2[i].first = gu2(data, offset + 1 + i * 4);
+						charsets->f2.range2[i].nleft = gu2(data, offset + 3 + i * 4);
+					}
+				}
+				break;
+		}
+	}
+}
+
+caryll_Buffer *cff_build_Charset(cff_Charset cset) {
+	switch (cset.t) {
+		case cff_CHARSET_ISOADOBE:
+		case cff_CHARSET_EXPERT:
+		case cff_CHARSET_EXPERTSUBSET: {
+			return bufnew();
+		}
+		case cff_CHARSET_FORMAT0: {
+			caryll_Buffer *blob = bufnew();
+			blob->size = 1 + cset.s * 2;
+			NEW(blob->data, blob->size);
+			blob->data[0] = 0;
+			for (uint32_t i = 0; i < cset.s; i++)
+				blob->data[1 + 2 * i] = cset.f0.glyph[i] / 256, blob->data[2 + 2 * i] = cset.f0.glyph[i] % 256;
+			blob->cursor = blob->size;
+			return blob;
+		}
+		case cff_CHARSET_FORMAT1: {
+			caryll_Buffer *blob = bufnew();
+			blob->size = 1 + cset.s * 3;
+			NEW(blob->data, blob->size);
+			blob->data[0] = 1;
+			for (uint32_t i = 0; i < cset.s; i++)
+				blob->data[1 + 3 * i] = cset.f1.range1[i].first / 256,
+				                   blob->data[2 + 3 * i] = cset.f1.range1[i].first % 256,
+				                   blob->data[3 + 3 * i] = cset.f1.range1[i].nleft;
+			return blob;
+		}
+		case cff_CHARSET_FORMAT2: {
+			caryll_Buffer *blob = bufnew();
+			blob->size = 1 + cset.s * 4;
+			NEW(blob->data, blob->size);
+			blob->data[0] = 2;
+			for (uint32_t i = 0; i < cset.s; i++)
+				blob->data[1 + 4 * i] = cset.f2.range2[i].first / 256,
+				                   blob->data[2 + 4 * i] = cset.f2.range2[i].first % 256,
+				                   blob->data[3 + 4 * i] = cset.f2.range2[i].nleft / 256,
+				                   blob->data[4 + 4 * i] = cset.f2.range2[i].nleft % 256;
+			blob->cursor = blob->size;
+			return blob;
+		}
+	}
+	return NULL;
+}
+
+void cff_close_Charset(cff_Charset cset) {
+	switch (cset.t) {
+		case cff_CHARSET_EXPERT:
+		case cff_CHARSET_EXPERTSUBSET:
+		case cff_CHARSET_ISOADOBE:
+			break;
+		case cff_CHARSET_FORMAT0:
+			if (cset.f0.glyph != NULL) FREE(cset.f0.glyph);
+			break;
+		case cff_CHARSET_FORMAT1:
+			if (cset.f1.range1 != NULL) FREE(cset.f1.range1);
+			break;
+		case cff_CHARSET_FORMAT2:
+			if (cset.f2.range2 != NULL) FREE(cset.f2.range2);
+			break;
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-charset.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,62 @@
+#ifndef CARYLL_cff_CHARSET_H
+#define CARYLL_cff_CHARSET_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+#include "cff-util.h"
+#include "cff-value.h"
+
+enum {
+	cff_CHARSET_ISOADOBE = 0,
+	cff_CHARSET_UNSPECED = 0,
+	cff_CHARSET_EXPERT = 1,
+	cff_CHARSET_EXPERTSUBSET = 2,
+	cff_CHARSET_FORMAT0 = 3,
+	cff_CHARSET_FORMAT1 = 4,
+	cff_CHARSET_FORMAT2 = 5,
+};
+
+// CFF Charset Structures
+typedef struct {
+	uint8_t format;
+	uint16_t *glyph;
+} cff_CharsetFormat0;
+
+typedef struct {
+	uint16_t first;
+	uint8_t nleft;
+} cff_CharsetRangeFormat1;
+
+typedef struct {
+	uint8_t format;
+	cff_CharsetRangeFormat1 *range1;
+} cff_CharsetFormat1;
+
+typedef struct {
+	uint16_t first;
+	uint16_t nleft;
+} cff_CharsetRangeFormat2;
+
+typedef struct {
+	uint8_t format;
+	cff_CharsetRangeFormat2 *range2;
+} cff_CharsetFormat2;
+
+typedef struct {
+	uint32_t t;
+	uint32_t s; // size
+	union {
+		cff_CharsetFormat0 f0;
+		cff_CharsetFormat1 f1;
+		cff_CharsetFormat2 f2;
+	};
+} cff_Charset;
+
+void cff_close_Charset(cff_Charset cset);
+void cff_extract_Charset(uint8_t *data, int32_t offset, uint16_t nchars, cff_Charset *charsets);
+caryll_Buffer *cff_build_Charset(cff_Charset cset);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-codecs.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-codecs.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-codecs.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,316 @@
+/*
+  Codec of CFF file format and Type2 CharString.
+*/
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+/*
+  Number in Type2
+  1 32 -246      [-107, 107]           b0 - 139
+  2 247-250      [108, 1131]           (b0 - 247) * 256 + b1 + 108
+  2 251-254      [-1132, -108]         -(b0 - 251) * 256 - b1 - 108
+  3 28 (int16_t) [-32768, 32767]       b1 << 8 | b2
+  5 29 (int32_t) [-(2^31), (2^32 - 1)] b1 << 24 | b2 << 16 | b3 << 8 | b4
+  * 30 (double)
+*/
+
+caryll_Buffer *cff_encodeCffOperator(int32_t val) {
+	if (val > 256) {
+		return bufninit(2, val / 256, val % 256);
+	} else {
+		return bufninit(1, val);
+	}
+}
+
+caryll_Buffer *cff_encodeCffInteger(int32_t val) {
+	if (val >= -107 && val <= 107) {
+		return bufninit(1, val + 139);
+	} else if (val >= 108 && val <= 1131) {
+		val -= 108;
+		return bufninit(2, (val >> 8) + 247, val & 0xff);
+	} else if (val >= -1131 && val <= -108) {
+		val = -108 - val;
+		return bufninit(2, (val >> 8) + 251, val & 0xff);
+	} else if (val >= -32768 && val < 32768) {
+		return bufninit(3, 28, val >> 8, val & 0xff);
+	} else {
+		/* In dict data we have 4 byte ints, in type2 strings we don't */
+		return bufninit(5, 29, (val >> 24) & 0xff, (val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff);
+	}
+}
+
+// -2.25       -> 1e e2 a2 5f
+// 0.140541E-3 -> 1e 0a 14 05 41 c3 ff
+caryll_Buffer *cff_encodeCffFloat(double val) {
+	caryll_Buffer *blob = bufnew();
+	uint32_t i, j = 0;
+	uint8_t temp[32] = {0};
+
+	if (val == 0.0) {
+		blob->size = 2;
+		NEW(blob->data, blob->size);
+		blob->data[0] = 30;
+		blob->data[1] = 0x0f;
+	} else {
+		uint32_t niblen = 0;
+		uint8_t *array;
+		sprintf((char *)temp, "%.13g", val);
+
+		for (i = 0; i < strlen((char *)temp);) {
+			if (temp[i] == '.')
+				niblen++, i++;
+			else if (temp[i] >= '0' && temp[i] <= '9')
+				niblen++, i++;
+			else if (temp[i] == 'e' && temp[i + 1] == '-')
+				niblen++, i += 2;
+			else if (temp[i] == 'e' && temp[i + 1] == '+')
+				niblen++, i += 2;
+			else if (temp[i] == '-')
+				niblen++, i++;
+		}
+
+		blob->size = 2 + niblen / 2;
+		NEW(blob->data, blob->size);
+		blob->data[0] = 30;
+
+		if (niblen % 2 != 0) {
+			NEW(array, (niblen + 1));
+			array[niblen] = 0x0f;
+		} else {
+			NEW(array, (niblen + 2));
+			array[niblen + 1] = 0x0f;
+			array[niblen] = 0x0f;
+		}
+
+		for (i = 0; i < strlen((char *)temp);) {
+			if (temp[i] == '.')
+				array[j++] = 0x0a, i++;
+			else if (temp[i] >= '0' && temp[i] <= '9')
+				array[j++] = temp[i] - '0', i++;
+			else if (temp[i] == 'e' && temp[i + 1] == '-')
+				array[j++] = 0x0c, i += 2;
+			else if (temp[i] == 'e' && temp[i + 1] == '+')
+				array[j++] = 0x0b, i += 2;
+			else if (temp[i] == '-')
+				array[j++] = 0x0e, i++;
+		}
+
+		for (i = 1; i < blob->size; i++) {
+			blob->data[i] = array[(i - 1) * 2] * 16 + array[(i - 1) * 2 + 1];
+		}
+
+		FREE(array);
+	}
+
+	return blob;
+}
+
+uint32_t cff_decodeCS2Token(const uint8_t *start, cff_Value *val) {
+	uint32_t advance = 0;
+
+	if (*start <= 27) {
+		val->t = CS2_OPERATOR;
+
+		if (*start <= 11) {
+			val->i = *start;
+			advance = 1;
+		} else if (*start == 12) {
+			val->i = *start << 8 | *(start + 1);
+			advance = 2;
+		} else if (*start >= 13 && *start <= 18) {
+			val->i = *start;
+			advance = 1;
+		} else if (*start >= 19 && *start <= 20) {
+			val->i = *start;
+			advance = 1;
+		} else if (*start >= 21 && *start <= 27) {
+			val->i = *start;
+			advance = 1;
+		}
+	} else if (*start == 28) {
+		val->t = CS2_OPERAND;
+		val->i = (int16_t)(*(start + 1) << 8 | *(start + 2));
+		advance = 3;
+	} else if (*start >= 29 && *start <= 31) {
+		val->t = CS2_OPERATOR;
+		val->i = *start;
+		advance = 1;
+	} else if (*start >= 32 && *start <= 254) {
+		val->t = CS2_OPERAND;
+		if (*start >= 32 && *start <= 246) {
+			val->i = (int32_t)(*start - 139);
+			advance = 1;
+		} else if (*start >= 247 && *start <= 250) {
+			val->i = (int32_t)((*start - 247) * 256 + *(start + 1) + 108);
+			advance = 2;
+		} else if (*start >= 251 && *start <= 254) {
+			val->i = (int32_t)(-((*start - 251) * 256) - *(start + 1) - 108);
+			advance = 2;
+		}
+	} else if (*start == 255) {
+		val->t = CS2_FRACTION;
+		int16_t integerPart = start[1] << 8 | start[2];
+		uint16_t fractionPart = start[3] << 8 | start[4];
+		val->d = (double)(integerPart + fractionPart / 65536.0);
+		advance = 5;
+	}
+
+	if (val->t == CS2_OPERAND) val->d = (double)val->i, val->t = CS2_FRACTION;
+
+	return advance;
+}
+
+// decode integer
+static uint32_t cff_dec_i(const uint8_t *start, cff_Value *val) {
+	uint8_t b0 = *start, b1, b2, b3, b4;
+	uint32_t len = 0;
+
+	if (b0 >= 32 && b0 <= 246) {
+		val->i = b0 - 139;
+		len = 1;
+	} else if (b0 >= 247 && b0 <= 250) {
+		b1 = *(start + 1);
+		val->i = (b0 - 247) * 256 + b1 + 108;
+		len = 2;
+	} else if (b0 >= 251 && b0 <= 254) {
+		b1 = *(start + 1);
+		val->i = -(b0 - 251) * 256 - b1 - 108;
+		len = 2;
+	} else if (b0 == 28) {
+		b1 = *(start + 1);
+		b2 = *(start + 2);
+		val->i = (b1 << 8) | b2;
+		len = 3;
+	} else if (b0 == 29) {
+		b1 = *(start + 1);
+		b2 = *(start + 2);
+		b3 = *(start + 3);
+		b4 = *(start + 4);
+		val->i = b1 << 24 | b2 << 16 | b3 << 8 | b4;
+		len = 5;
+	}
+
+	val->t = cff_INTEGER;
+	return len;
+}
+
+static const int nibble_attr[15] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1};
+static const char *nibble_symb[15] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", "", "-"};
+
+// decode double
+static uint32_t cff_dec_r(const uint8_t *start, cff_Value *val) {
+	uint8_t restr[72] = {0};
+	size_t str_len = 0;
+	uint32_t len;
+	uint8_t a, b;
+
+	const uint8_t *nibst = start + 1;
+
+	while (1) {
+		a = *nibst / 16;
+		b = *nibst % 16;
+
+		if (a != 15)
+			str_len += nibble_attr[a];
+		else
+			break;
+
+		if (b != 15)
+			str_len += nibble_attr[b];
+		else
+			break;
+
+		nibst++;
+	}
+
+	len = (uint32_t)(nibst - start + 1);
+	nibst = start + 1;
+
+	while (1) {
+		a = *nibst / 16;
+		b = *nibst % 16;
+
+		if (a != 0x0f)
+			strcat((char *)restr, nibble_symb[a]);
+		else
+			break;
+
+		if (b != 0x0f)
+			strcat((char *)restr, nibble_symb[b]);
+		else
+			break;
+
+		nibst++;
+	}
+
+	val->d = atof((char *)restr);
+	val->t = cff_DOUBLE;
+
+	return len;
+}
+
+// decode operator
+static uint32_t cff_dec_o(const uint8_t *start, cff_Value *val) {
+	uint8_t b0 = *start, b1;
+	uint32_t len = 0;
+
+	if (b0 <= 21) {
+		if (b0 != 12) {
+			val->i = b0;
+			len = 1;
+		} else {
+			b1 = *(start + 1);
+			val->i = b0 * 256 + b1;
+			len = 2;
+		}
+	}
+
+	val->t = cff_OPERATOR;
+
+	return len;
+}
+
+// error in parsing, return a integer
+static uint32_t cff_dec_e(const uint8_t *start, cff_Value *val) {
+	printf("Undefined Byte in CFF: %d.\n", *start);
+	val->i = *start;
+	val->t = cff_INTEGER;
+	return 1;
+}
+
+static uint32_t (*_de_t2[256])(const uint8_t *, cff_Value *) = {
+    cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o,
+    cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o, cff_dec_o,
+    cff_dec_o, cff_dec_o, cff_dec_e, cff_dec_e, cff_dec_e, cff_dec_e, cff_dec_e, cff_dec_e, cff_dec_i, cff_dec_i,
+    cff_dec_r, cff_dec_e, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i,
+    cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_i, cff_dec_e};
+
+uint32_t cff_decodeCffToken(const uint8_t *start, cff_Value *val) {
+	return _de_t2[*start](start, val);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,122 @@
+#include "libcff.h"
+
+static INLINE void disposeDict(cff_Dict *dict) {
+	for (uint32_t j = 0; j < dict->count; j++) {
+		FREE(dict->ents[j].vals);
+	}
+	FREE(dict->ents);
+}
+
+caryll_standardRefTypeFn(cff_Dict, disposeDict);
+
+static cff_Dict *parseDict(const uint8_t *data, const uint32_t len) {
+	cff_Dict *dict;
+	NEW(dict);
+	uint32_t index = 0, advance;
+	cff_Value val, stack[48];
+	const uint8_t *temp = data;
+
+	while (temp < data + len) {
+		advance = cff_decodeCffToken(temp, &val);
+
+		switch (val.t) {
+			case cff_OPERATOR:
+				RESIZE(dict->ents, dict->count + 1);
+				dict->ents[dict->count].op = val.i;
+				dict->ents[dict->count].cnt = index;
+				NEW(dict->ents[dict->count].vals, index);
+				memcpy(dict->ents[dict->count].vals, stack, sizeof(cff_Value) * index);
+				dict->count++;
+				index = 0;
+				break;
+			case cff_INTEGER:
+			case cff_DOUBLE:
+				stack[index++] = val;
+				break;
+		}
+
+		temp += advance;
+	}
+
+	return dict;
+}
+
+static void parseToCallback(const uint8_t *data, const uint32_t len, void *context,
+                            void (*callback)(uint32_t op, uint8_t top, cff_Value *stack, void *context)) {
+	uint8_t index = 0;
+	uint32_t advance;
+	cff_Value val, stack[256];
+	const uint8_t *temp = data;
+
+	while (temp < data + len) {
+		advance = cff_decodeCffToken(temp, &val);
+
+		switch (val.t) {
+			case cff_OPERATOR:
+				callback(val.i, index, stack, context);
+				index = 0;
+				break;
+
+			case cff_INTEGER:
+			case cff_DOUBLE:
+				stack[index++] = val;
+				break;
+		}
+
+		temp += advance;
+	}
+}
+
+typedef struct {
+	bool found;
+	cff_Value res;
+	uint32_t op;
+	uint32_t idx;
+} cff_get_key_context;
+
+static void callback_get_key(uint32_t op, uint8_t top, cff_Value *stack, void *_context) {
+	cff_get_key_context *context = (cff_get_key_context *)_context;
+	if (op == context->op && context->idx <= top) {
+		context->found = true;
+		context->res = stack[context->idx];
+	}
+}
+
+static cff_Value parseDictKey(const uint8_t *data, const uint32_t len, const uint32_t op, const uint32_t idx) {
+	cff_get_key_context context;
+	context.found = false;
+	context.idx = idx;
+	context.op = op;
+	context.res.t = 0;
+	context.res.i = -1;
+
+	parseToCallback(data, len, &context, callback_get_key);
+	return context.res;
+}
+
+static caryll_Buffer *buildDict(const cff_Dict *dict) {
+	caryll_Buffer *blob = bufnew();
+	for (uint32_t i = 0; i < dict->count; i++) {
+		for (uint32_t j = 0; j < dict->ents[i].cnt; j++) {
+			caryll_Buffer *blob_val;
+			if (dict->ents[i].vals[j].t == cff_INTEGER) {
+				blob_val = cff_encodeCffInteger(dict->ents[i].vals[j].i);
+			} else if (dict->ents[i].vals[j].t == cff_DOUBLE) {
+				blob_val = cff_encodeCffFloat(dict->ents[i].vals[j].d);
+			} else {
+				blob_val = cff_encodeCffInteger(0);
+			}
+			bufwrite_bufdel(blob, blob_val);
+		}
+		bufwrite_bufdel(blob, cff_encodeCffOperator(dict->ents[i].op));
+	}
+	return blob;
+}
+
+caryll_ElementInterfaceOf(cff_Dict) cff_iDict = {
+    caryll_standardRefTypeMethods(cff_Dict),
+    .parse = parseDict,
+    .parseToCallback = parseToCallback,
+    .parseDictKey = parseDictKey,
+    .build = buildDict,
+};

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-dict.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,32 @@
+#ifndef CARYLL_cff_DICT_H
+#define CARYLL_cff_DICT_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+#include "cff-value.h"
+
+typedef struct {
+	uint32_t op;
+	uint32_t cnt;
+	cff_Value *vals;
+} cff_DictEntry;
+
+typedef struct {
+	uint32_t count;
+	cff_DictEntry *ents;
+} cff_Dict;
+
+extern caryll_ElementInterfaceOf(cff_Dict) {
+	caryll_RT(cff_Dict);
+	cff_Dict *(*parse)(const uint8_t *data, const uint32_t len);
+	void (*parseToCallback)(const uint8_t *data, const uint32_t len, void *context,
+	                        void (*callback)(uint32_t op, uint8_t top, cff_Value * stack, void *context));
+	cff_Value (*parseDictKey)(const uint8_t *data, const uint32_t len, const uint32_t op, const uint32_t idx);
+	caryll_Buffer *(*build)(const cff_Dict *dict);
+}
+cff_iDict;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,81 @@
+#include "cff-fdselect.h"
+
+void cff_close_FDSelect(cff_FDSelect fds) {
+	switch (fds.t) {
+		case cff_FDSELECT_FORMAT0:
+			if (fds.f0.fds != NULL) FREE(fds.f0.fds);
+			break;
+		case cff_FDSELECT_FORMAT3:
+			if (fds.f3.range3 != NULL) FREE(fds.f3.range3);
+			break;
+		case cff_FDSELECT_UNSPECED:
+			break;
+	}
+}
+
+caryll_Buffer *cff_build_FDSelect(cff_FDSelect fd) {
+	switch (fd.t) {
+		case cff_FDSELECT_UNSPECED: {
+			return bufnew();
+		}
+		case cff_FDSELECT_FORMAT0: {
+			caryll_Buffer *blob = bufnew();
+			blob->size = 1 + fd.s;
+			NEW(blob->data, blob->size);
+			for (uint16_t j = 0; j < fd.s; j++) {
+				blob->data[j] = fd.f0.fds[j];
+			}
+			return blob;
+		}
+		case cff_FDSELECT_FORMAT3: {
+			caryll_Buffer *blob = bufnew();
+			blob->size = 5 + fd.f3.nranges * 3;
+			NEW(blob->data, blob->size);
+			blob->data[0] = 3;
+			blob->data[1] = fd.f3.nranges / 256;
+			blob->data[2] = fd.f3.nranges % 256;
+			for (int i = 0; i < fd.f3.nranges; i++)
+				blob->data[3 + 3 * i] = fd.f3.range3[i].first / 256,
+				                   blob->data[4 + 3 * i] = fd.f3.range3[i].first % 256,
+				                   blob->data[5 + 3 * i] = fd.f3.range3[i].fd;
+			blob->data[blob->size - 2] = fd.f3.sentinel / 256;
+			blob->data[blob->size - 1] = fd.f3.sentinel % 256;
+			return blob;
+		}
+		default: { return NULL; }
+	}
+}
+
+void cff_extract_FDSelect(uint8_t *data, int32_t offset, uint16_t nchars, cff_FDSelect *fdselect) {
+	switch (data[offset]) {
+		case 0: {
+			fdselect->t = cff_FDSELECT_FORMAT0;
+			fdselect->f0.format = 0;
+			fdselect->s = nchars;
+			NEW(fdselect->f0.fds, nchars);
+
+			for (uint32_t i = 0; i < nchars; i++) {
+				fdselect->f0.fds[i] = gu1(data, offset + 1 + i);
+			}
+			break;
+		}
+		case 3: {
+			fdselect->t = cff_FDSELECT_FORMAT3;
+			fdselect->f3.format = 3;
+			fdselect->f3.nranges = gu2(data, offset + 1);
+			NEW(fdselect->f3.range3, fdselect->f3.nranges);
+
+			for (uint32_t i = 0; i < fdselect->f3.nranges; i++) {
+				fdselect->f3.range3[i].first = gu2(data, offset + 3 + i * 3);
+				fdselect->f3.range3[i].fd = gu1(data, offset + 5 + i * 3);
+			}
+
+			fdselect->f3.sentinel = gu2(data, offset + (fdselect->f3.nranges + 1) * 3);
+			break;
+		}
+		default: {
+			fdselect->t = cff_FDSELECT_UNSPECED;
+			break;
+		}
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-fdselect.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,48 @@
+#ifndef CARYLL_cff_FDSELECT_H
+#define CARYLL_cff_FDSELECT_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+#include "cff-util.h"
+#include "cff-value.h"
+
+enum {
+	cff_FDSELECT_FORMAT0,
+	cff_FDSELECT_FORMAT3,
+	cff_FDSELECT_UNSPECED,
+};
+
+typedef struct {
+	uint8_t format;
+	uint8_t *fds;
+} cff_FDSelectFormat0;
+
+typedef struct {
+	uint16_t first;
+	uint8_t fd;
+} cff_FDSelectRangeFormat3;
+
+typedef struct {
+	uint8_t format;
+	uint16_t nranges;
+	cff_FDSelectRangeFormat3 *range3;
+	uint16_t sentinel;
+} cff_FDSelectFormat3;
+
+typedef struct {
+	uint32_t t;
+	uint32_t s;
+	union {
+		cff_FDSelectFormat0 f0;
+		cff_FDSelectFormat3 f3;
+	};
+} cff_FDSelect;
+
+void cff_close_FDSelect(cff_FDSelect fds);
+void cff_extract_FDSelect(uint8_t *data, int32_t offset, uint16_t nchars, cff_FDSelect *fdselect);
+caryll_Buffer *cff_build_FDSelect(cff_FDSelect fd);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,146 @@
+#include "cff-index.h"
+// INDEX util functions
+
+static INLINE void disposeCffIndex(cff_Index *in) {
+	if (in->offset) FREE(in->offset);
+	if (in->data) FREE(in->data);
+}
+
+caryll_standardRefTypeFn(cff_Index, disposeCffIndex);
+
+static uint32_t getIndexLength(const cff_Index *i) {
+	if (i->count != 0)
+		return 3 + (i->offset[i->count] - 1) + ((i->count + 1) * i->offSize);
+	else
+		return 3;
+}
+static void emptyIndex(cff_Index *i) {
+	cff_iIndex.dispose(i);
+	memset(i, 0, sizeof(*i));
+}
+
+static void extractIndex(uint8_t *data, uint32_t pos, cff_Index *in) {
+	in->count = gu2(data, pos);
+	in->offSize = gu1(data, pos + 2);
+
+	if (in->count > 0) {
+		NEW(in->offset, in->count + 1);
+
+		for (arity_t i = 0; i <= in->count; i++) {
+			switch (in->offSize) {
+				case 1:
+					in->offset[i] = gu1(data, pos + 3 + (i * in->offSize));
+					break;
+				case 2:
+					in->offset[i] = gu2(data, pos + 3 + (i * in->offSize));
+					break;
+				case 3:
+					in->offset[i] = gu3(data, pos + 3 + (i * in->offSize));
+					break;
+				case 4:
+					in->offset[i] = gu4(data, pos + 3 + (i * in->offSize));
+					break;
+			}
+		}
+
+		NEW(in->data, in->offset[in->count] - 1);
+		memcpy(in->data, data + pos + 3 + (in->count + 1) * in->offSize, in->offset[in->count] - 1);
+	} else {
+		in->offset = NULL;
+		in->data = NULL;
+	}
+}
+
+static cff_Index *newIndexByCallback(void *context, uint32_t length, caryll_Buffer *(*fn)(void *, uint32_t)) {
+	cff_Index *idx = cff_iIndex.create();
+	idx->count = length;
+	NEW(idx->offset, idx->count + 1);
+	idx->offset[0] = 1;
+	idx->data = NULL;
+
+	size_t used = 0;
+	size_t blank = 0;
+	for (arity_t i = 0; i < length; i++) {
+		caryll_Buffer *blob = fn(context, i);
+		if (blank < blob->size) {
+			used += blob->size;
+			blank = (used >> 1) & 0xFFFFFF;
+			RESIZE(idx->data, used + blank);
+		} else {
+			used += blob->size;
+			blank -= blob->size;
+		}
+		idx->offset[i + 1] = (uint32_t)(blob->size + idx->offset[i]);
+		memcpy(idx->data + idx->offset[i] - 1, blob->data, blob->size);
+		buffree(blob);
+	}
+	idx->offSize = 4;
+	return idx;
+}
+
+static caryll_Buffer *buildIndex(const cff_Index *index) {
+	caryll_Buffer *blob = bufnew();
+	if (!index->count) {
+		bufwrite8(blob, 0);
+		bufwrite8(blob, 0);
+		bufwrite8(blob, 0);
+		return blob;
+	}
+
+	uint32_t lastOffset = index->offset[index->count];
+	uint8_t offSize = 4;
+	if (lastOffset < 0x100) {
+		offSize = 1;
+	} else if (lastOffset < 0x10000) {
+		offSize = 2;
+	} else if (lastOffset < 0x1000000) {
+		offSize = 3;
+	} else {
+		offSize = 4;
+	}
+
+	if (index->count != 0)
+		blob->size = 3 + (index->offset[index->count] - 1) + ((index->count + 1) * offSize);
+	else
+		blob->size = 3;
+
+	NEW(blob->data, blob->size);
+	blob->data[0] = index->count / 256;
+	blob->data[1] = index->count % 256;
+	blob->data[2] = offSize;
+
+	if (index->count > 0) {
+		for (arity_t i = 0; i <= index->count; i++) {
+			switch (offSize) {
+				case 1:
+					blob->data[3 + i] = index->offset[i];
+					break;
+				case 2:
+					blob->data[3 + i * 2] = index->offset[i] / 256;
+					blob->data[4 + i * 2] = index->offset[i] % 256;
+					break;
+				case 3:
+					blob->data[3 + i * 3] = index->offset[i] / 65536;
+					blob->data[4 + i * 3] = (index->offset[i] % 65536) / 256;
+					blob->data[5 + i * 3] = (index->offset[i] % 65536) % 256;
+					break;
+				case 4:
+					blob->data[3 + i * 4] = (index->offset[i] / 65536) / 256;
+					blob->data[4 + i * 4] = (index->offset[i] / 65536) % 256;
+					blob->data[5 + i * 4] = (index->offset[i] % 65536) / 256;
+					blob->data[6 + i * 4] = (index->offset[i] % 65536) % 256;
+					break;
+			}
+		}
+
+		if (index->data != NULL)
+			memcpy(blob->data + 3 + ((index->count + 1) * offSize), index->data, index->offset[index->count] - 1);
+	}
+	blob->cursor = blob->size;
+	return blob;
+}
+
+caryll_ElementInterfaceOf(cff_Index) cff_iIndex = {
+    caryll_standardRefTypeMethods(cff_Index), .getLength = getIndexLength, .empty = emptyIndex, .parse = extractIndex,
+    .fromCallback = newIndexByCallback,       .build = buildIndex,
+};

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-index.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,33 @@
+#ifndef CARYLL_cff_INDEX_H
+#define CARYLL_cff_INDEX_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+
+#include "cff-util.h"
+#include "cff-value.h"
+
+typedef enum { CFF_INDEX_16, CFF_INDEX_32 } cff_IndexCountType;
+
+typedef struct {
+	cff_IndexCountType countType;
+	arity_t count;
+	uint8_t offSize;
+	uint32_t *offset;
+	uint8_t *data;
+} cff_Index;
+
+extern caryll_ElementInterfaceOf(cff_Index) {
+	caryll_RT(cff_Index);
+	void (*empty)(cff_Index * i);
+	uint32_t (*getLength)(const cff_Index *i);
+	void (*parse)(uint8_t * data, uint32_t pos, cff_Index * in);
+	cff_Index *(*fromCallback)(void *context, uint32_t length, caryll_Buffer *(*fn)(void *, uint32_t));
+	caryll_Buffer *(*build)(const cff_Index *index);
+}
+cff_iIndex;
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-opmean.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-opmean.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-opmean.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,245 @@
+/*
+  operator to string.
+*/
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+const char *op_cff_name(uint32_t op) {
+	switch (op) {
+		case op_version:
+			return "Version";
+		case op_Notice:
+			return "Notice";
+		case op_FullName:
+			return "FullName";
+		case op_FamilyName:
+			return "FamilyName";
+		case op_Weight:
+			return "Weight";
+		case op_FontBBox:
+			return "FontBBox";
+		case op_BlueValues:
+			return "BlueValues";
+		case op_OtherBlues:
+			return "OtherBlues";
+		case op_FamilyBlues:
+			return "FamilyBlues";
+		case op_FamilyOtherBlues:
+			return "FamilyOtherBlues";
+		case op_StdHW:
+			return "StdHW";
+		case op_StdVW:
+			return "StdVW";
+		case op_UniqueID:
+			return "UniqueID";
+		case op_XUID:
+			return "XUID";
+		case op_charset:
+			return "charset";
+		case op_Encoding:
+			return "Encoding";
+		case op_CharStrings:
+			return "CharStrings";
+		case op_Private:
+			return "Private";
+		case op_Subrs:
+			return "Subrs";
+		case op_defaultWidthX:
+			return "defaultWidthX";
+		case op_nominalWidthX:
+			return "nominalWidthX";
+		case op_Copyright:
+			return "Copyright";
+		case op_isFixedPitch:
+			return "isFixedPitch";
+		case op_ItalicAngle:
+			return "ItalicAngle";
+		case op_UnderlinePosition:
+			return "UnderlinePosition";
+		case op_UnderlineThickness:
+			return "UnderlineThickness";
+		case op_PaintType:
+			return "PaintType";
+		case op_CharstringType:
+			return "CharstringType";
+		case op_FontMatrix:
+			return "FontMatrix";
+		case op_StrokeWidth:
+			return "StrokeWidth";
+		case op_BlueScale:
+			return "BlueScale";
+		case op_BlueShift:
+			return "BlueShift";
+		case op_BlueFuzz:
+			return "BlueFuzz";
+		case op_StemSnapH:
+			return "StemSnapH";
+		case op_StemSnapV:
+			return "StemSnapV";
+		case op_ForceBold:
+			return "ForceBold";
+		case op_LanguageGroup:
+			return "LanguageGroup";
+		case op_ExpansionFactor:
+			return "ExpansionFactor";
+		case op_initialRandomSeed:
+			return "initialRandomSeed";
+		case op_SyntheicBase:
+			return "SyntheicBase";
+		case op_PostScript:
+			return "PostScript";
+		case op_BaseFontName:
+			return "BaseFontName";
+		case op_BaseFontBlend:
+			return "BaseFontBlend";
+		case op_ROS:
+			return "ROS";
+		case op_CIDFontVersion:
+			return "CIDFontVersion";
+		case op_CIDFontRevision:
+			return "CIDFontReversion";
+		case op_CIDFontType:
+			return "CIDFontType";
+		case op_CIDCount:
+			return "CIDCount";
+		case op_UIDBase:
+			return "UIDBase";
+		case op_FDArray:
+			return "FDArray";
+		case op_FDSelect:
+			return "FDSelect";
+		case op_FontName:
+			return "FontName";
+		default:
+			return "Unkown";
+	}
+}
+
+const char *op_cs2_name(uint32_t op) {
+	switch (op) {
+		case op_hstem:
+			return "hstem";
+		case op_vstem:
+			return "vstem";
+		case op_vmoveto:
+			return "vmoveto";
+		case op_rlineto:
+			return "rlineto";
+		case op_hlineto:
+			return "hlineto";
+		case op_vlineto:
+			return "vlineto";
+		case op_rrcurveto:
+			return "rrcurveto";
+		case op_callsubr:
+			return "callsubr";
+		case op_return:
+			return "return";
+		case op_endchar:
+			return "endchar";
+		case op_hstemhm:
+			return "hstemhm";
+		case op_hintmask:
+			return "hintmask";
+		case op_cntrmask:
+			return "cntrmask";
+		case op_rmoveto:
+			return "rmoveto";
+		case op_hmoveto:
+			return "hmoveto";
+		case op_vstemhm:
+			return "vstemhm";
+		case op_rcurveline:
+			return "rcurveline";
+		case op_rlinecurve:
+			return "rlinecurve";
+		case op_vvcurveto:
+			return "vvcurveto";
+		case op_hhcurveto:
+			return "hhcurveto";
+		case op_callgsubr:
+			return "callgsubr";
+		case op_vhcurveto:
+			return "vhcurveto";
+		case op_hvcurveto:
+			return "hvcurveto";
+		case op_and:
+			return "and";
+		case op_or:
+			return "or";
+		case op_not:
+			return "not";
+		case op_abs:
+			return "abs";
+		case op_add:
+			return "add";
+		case op_sub:
+			return "sub";
+		case op_div:
+			return "div";
+		case op_neg:
+			return "neg";
+		case op_eq:
+			return "eq";
+		case op_drop:
+			return "drop";
+		case op_put:
+			return "put";
+		case op_get:
+			return "get";
+		case op_ifelse:
+			return "ifelse";
+		case op_random:
+			return "random";
+		case op_mul:
+			return "mul";
+		case op_sqrt:
+			return "sqrt";
+		case op_dup:
+			return "dup";
+		case op_exch:
+			return "exch";
+		case op_index:
+			return "index";
+		case op_roll:
+			return "roll";
+		case op_hflex:
+			return "hflex";
+		case op_flex:
+			return "fles";
+		case op_hflex1:
+			return "hflex1";
+		case op_flex1:
+			return "flex1";
+		default:
+			return "Unknown";
+	}
+}
+
+uint8_t cff_getStandardArity(uint32_t op) {
+	switch (op) {
+		case op_rlineto:
+		case op_rmoveto:
+			return 2;
+		case op_hlineto:
+		case op_vlineto:
+			return 1;
+		case op_hhcurveto:
+		case op_vvcurveto:
+		case op_hvcurveto:
+		case op_vhcurveto:
+			return 4;
+		case op_rrcurveto:
+			return 6;
+		case op_hintmask:
+		case op_cntrmask:
+			return 0;
+		default:
+			return 2;
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-parser.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-parser.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-parser.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,847 @@
+/*
+  Parser/Linter of CFF font, notable references:
+    * Technical Note #5176: The Compact Font Format Specification
+    * Technical Note #5177: The Type 2 Charstring Format
+    * Adobe TinTin
+*/
+
+#include <math.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+static void parse_encoding(cff_File *cff, int32_t offset, cff_Encoding *enc) {
+	uint8_t *data = cff->raw_data;
+
+	if (offset == cff_ENC_STANDARD)
+		enc->t = cff_ENC_STANDARD;
+	else if (offset == cff_ENC_EXPERT)
+		enc->t = cff_ENC_EXPERT;
+	else {
+		switch (data[offset]) {
+			case 0:
+				enc->t = cff_ENC_FORMAT0;
+				{
+					enc->f0.format = 0;
+					enc->f0.ncodes = data[offset + 1];
+					NEW(enc->f0.code, enc->f0.ncodes);
+
+					for (uint32_t i = 0; i < enc->f0.ncodes; i++)
+						enc->f0.code[i] = data[offset + 2 + i];
+				}
+				break;
+			case 1:
+				enc->t = cff_ENC_FORMAT1;
+				{
+					enc->f1.format = 1;
+					enc->f1.nranges = data[offset + 1];
+					NEW(enc->f1.range1, enc->f1.nranges);
+
+					for (uint32_t i = 0; i < enc->f1.nranges; i++)
+						enc->f1.range1[i].first = data[offset + 2 + i * 2],
+						enc->f1.range1[i].nleft = data[offset + 3 + i * 2];
+				}
+				break;
+			default:
+				enc->t = cff_ENC_FORMAT_SUPPLEMENT;
+				{
+					enc->ns.nsup = data[offset];
+					NEW(enc->ns.supplement, enc->ns.nsup);
+
+					for (uint32_t i = 0; i < enc->ns.nsup; i++)
+						enc->ns.supplement[i].code = data[offset + 1 + i * 3],
+						enc->ns.supplement[i].glyph = gu2(data, offset + 2 + i * 3);
+				}
+				break;
+		}
+	}
+}
+
+static void parse_cff_bytecode(cff_File *cff, const otfcc_Options *options) {
+	uint32_t pos;
+	int32_t offset;
+
+	/* Header */
+	cff->head.major = gu1(cff->raw_data, 0);
+	cff->head.minor = gu1(cff->raw_data, 1);
+	cff->head.hdrSize = gu1(cff->raw_data, 2);
+	cff->head.offSize = gu1(cff->raw_data, 3);
+
+	/* Name INDEX */
+	pos = cff->head.hdrSize;
+	cff_iIndex.parse(cff->raw_data, pos, &cff->name);
+
+	/* Top Dict INDEX */
+	pos = 4 + cff_iIndex.getLength(&cff->name);
+	cff_iIndex.parse(cff->raw_data, pos, &cff->top_dict);
+
+	/** LINT CFF FONTSET **/
+
+	if (cff->name.count != cff->top_dict.count)
+		logWarning("[libcff] Bad CFF font: (%d, name), (%d, top_dict).\n", cff->name.count,
+		           cff->top_dict.count);
+
+	/* String INDEX */
+	pos = 4 + cff_iIndex.getLength(&cff->name) + cff_iIndex.getLength(&cff->top_dict);
+	cff_iIndex.parse(cff->raw_data, pos, &cff->string);
+
+	/* Global Subr INDEX */
+	pos = 4 + cff_iIndex.getLength(&cff->name) + cff_iIndex.getLength(&cff->top_dict) +
+	      cff_iIndex.getLength(&cff->string);
+	cff_iIndex.parse(cff->raw_data, pos, &cff->global_subr);
+
+	if (cff->top_dict.data != NULL) {
+		int32_t offset;
+
+		// cff->topdict.dict = calloc(1, sizeof(cff_Dict));
+		// cff->topdict.dict = cff_extract_Dict(cff->top_dict.data, cff->top_dict.offset[1] -
+		// cff->top_dict.offset[0]);
+
+		/* CharStrings INDEX */
+		offset =
+		    cff_iDict
+		        .parseDictKey(cff->top_dict.data, cff->top_dict.offset[1] - cff->top_dict.offset[0],
+		                      op_CharStrings, 0)
+		        .i;
+
+		if (offset != -1) {
+			cff_iIndex.parse(cff->raw_data, offset, &cff->char_strings);
+			cff->cnt_glyph = cff->char_strings.count;
+		} else {
+			cff_iIndex.empty(&cff->char_strings);
+			logWarning("[libcff] Bad CFF font: no any glyph data.\n");
+		}
+
+		/* Encodings */
+		offset =
+		    cff_iDict
+		        .parseDictKey(cff->top_dict.data, cff->top_dict.offset[1] - cff->top_dict.offset[0],
+		                      op_Encoding, 0)
+		        .i;
+
+		if (offset != -1) {
+			parse_encoding(cff, offset, &cff->encodings);
+		} else {
+			cff->encodings.t = cff_ENC_UNSPECED;
+		}
+
+		/* Charsets */
+		offset = cff_iDict
+		             .parseDictKey(cff->top_dict.data,
+		                           cff->top_dict.offset[1] - cff->top_dict.offset[0], op_charset, 0)
+		             .i;
+
+		if (offset != -1) {
+			cff_extract_Charset(cff->raw_data, offset, cff->char_strings.count, &cff->charsets);
+		} else {
+			cff->charsets.t = cff_CHARSET_UNSPECED;
+		}
+
+		/* FDSelect */
+		offset =
+		    cff_iDict
+		        .parseDictKey(cff->top_dict.data, cff->top_dict.offset[1] - cff->top_dict.offset[0],
+		                      op_FDSelect, 0)
+		        .i;
+
+		if (cff->char_strings.count && offset != -1) {
+			cff_extract_FDSelect(cff->raw_data, offset, cff->char_strings.count, &cff->fdselect);
+		} else {
+			cff->fdselect.t = cff_FDSELECT_UNSPECED;
+		}
+
+		/* Font Dict INDEX */
+		offset = cff_iDict
+		             .parseDictKey(cff->top_dict.data,
+		                           cff->top_dict.offset[1] - cff->top_dict.offset[0], op_FDArray, 0)
+		             .i;
+
+		if (offset != -1) {
+			cff_iIndex.parse(cff->raw_data, offset, &cff->font_dict);
+		} else {
+			cff_iIndex.empty(&cff->font_dict);
+		}
+	}
+
+	/* Private and Local Subr */
+	{
+		int32_t private_len = -1;
+		int32_t private_off = -1;
+
+		if (cff->top_dict.data != NULL) {
+			private_len =
+			    cff_iDict
+			        .parseDictKey(cff->top_dict.data,
+			                      cff->top_dict.offset[1] - cff->top_dict.offset[0], op_Private, 0)
+			        .i;
+			private_off =
+			    cff_iDict
+			        .parseDictKey(cff->top_dict.data,
+			                      cff->top_dict.offset[1] - cff->top_dict.offset[0], op_Private, 1)
+			        .i;
+		}
+
+		if (private_off != -1 && private_len != -1) {
+			offset =
+			    cff_iDict.parseDictKey(cff->raw_data + private_off, private_len, op_Subrs, 0).i;
+
+			if (offset != -1)
+				cff_iIndex.parse(cff->raw_data, private_off + offset, &cff->local_subr);
+			else
+				cff_iIndex.empty(&cff->local_subr);
+		} else {
+			cff_iIndex.empty(&cff->local_subr);
+		}
+	}
+}
+
+cff_File *cff_openStream(uint8_t *data, uint32_t len, const otfcc_Options *options) {
+	cff_File *file;
+	NEW(file);
+
+	NEW(file->raw_data, len);
+	memcpy(file->raw_data, data, len);
+	file->raw_length = len;
+	file->cnt_glyph = 0;
+	parse_cff_bytecode(file, options);
+
+	return file;
+}
+
+void cff_close(cff_File *file) {
+	if (file != NULL) {
+		if (file->raw_data != NULL) FREE(file->raw_data);
+
+		cff_iIndex.dispose(&file->name);
+		cff_iIndex.dispose(&file->top_dict);
+		cff_iIndex.dispose(&file->string);
+		cff_iIndex.dispose(&file->global_subr);
+		cff_iIndex.dispose(&file->char_strings);
+		cff_iIndex.dispose(&file->font_dict);
+		cff_iIndex.dispose(&file->local_subr);
+
+		switch (file->encodings.t) {
+			case cff_ENC_STANDARD:
+			case cff_ENC_EXPERT:
+			case cff_ENC_UNSPECED:
+				break;
+			case cff_ENC_FORMAT0:
+				if (file->encodings.f0.code != NULL) FREE(file->encodings.f0.code);
+				break;
+			case cff_ENC_FORMAT1:
+				if (file->encodings.f1.range1 != NULL) FREE(file->encodings.f1.range1);
+				break;
+			case cff_ENC_FORMAT_SUPPLEMENT:
+				if (file->encodings.ns.supplement != NULL) FREE(file->encodings.ns.supplement);
+				break;
+		}
+
+		cff_close_Charset(file->charsets);
+		cff_close_FDSelect(file->fdselect);
+
+		FREE(file);
+	}
+}
+
+uint8_t cff_parseSubr(uint16_t idx, uint8_t *raw, cff_Index fdarray, cff_FDSelect select,
+                      cff_Index *subr) {
+	uint8_t fd = 0;
+	int32_t off_private, len_private;
+	int32_t off_subr;
+
+	switch (select.t) {
+		case cff_FDSELECT_FORMAT0:
+			fd = select.f0.fds[idx];
+			break;
+		case cff_FDSELECT_FORMAT3:
+			for (int i = 0; i < select.f3.nranges - 1; i++)
+				if (idx >= select.f3.range3[i].first && idx < select.f3.range3[i + 1].first)
+					fd = select.f3.range3[i].fd;
+			if (idx >= select.f3.range3[select.f3.nranges - 1].first && idx < select.f3.sentinel)
+				fd = select.f3.range3[select.f3.nranges - 1].fd;
+			break;
+		case cff_FDSELECT_UNSPECED:
+			fd = 0;
+			break;
+	}
+
+	off_private = cff_iDict
+	                  .parseDictKey(fdarray.data + fdarray.offset[fd] - 1,
+	                                fdarray.offset[fd + 1] - fdarray.offset[fd], op_Private, 1)
+	                  .i;
+	len_private = cff_iDict
+	                  .parseDictKey(fdarray.data + fdarray.offset[fd] - 1,
+	                                fdarray.offset[fd + 1] - fdarray.offset[fd], op_Private, 0)
+	                  .i;
+
+	if (off_private != -1 && len_private != -1) {
+		off_subr = cff_iDict.parseDictKey(raw + off_private, len_private, op_Subrs, 0).i;
+
+		if (off_subr != -1) {
+			cff_iIndex.parse(raw, off_private + off_subr, subr);
+		} else {
+			cff_iIndex.empty(subr);
+		}
+	} else {
+		cff_iIndex.empty(subr);
+	}
+
+	return fd;
+}
+
+static inline uint16_t compute_subr_bias(uint16_t cnt) {
+	if (cnt < 1240)
+		return 107;
+	else if (cnt < 33900)
+		return 1131;
+	else
+		return 32768;
+}
+
+/*
+  CharString program:
+    w? {hs* vs* cm* hm* mt subpath}? {mt subpath}* endchar
+*/
+static void reverseStack(cff_Stack *stack, uint8_t left, uint8_t right) {
+	cff_Value *p1 = stack->stack + left;
+	cff_Value *p2 = stack->stack + right;
+	while (p1 < p2) {
+		cff_Value temp = *p1;
+		*p1 = *p2;
+		*p2 = temp;
+		p1++;
+		p2--;
+	}
+}
+static void callback_nopSetWidth(void *context, double width) {}
+static void callback_nopNewContour(void *context) {}
+static void callback_nopLineTo(void *context, double x1, double y1) {}
+static void callback_nopCurveTo(void *context, double x1, double y1, double x2, double y2,
+                                double x3, double y3) {}
+static void callback_nopsetHint(void *context, bool isVertical, double position, double width) {}
+static void callback_nopsetMask(void *context, bool isContourMask, bool *mask) {
+	FREE(mask);
+}
+static double callback_nopgetrand(void *context) {
+	return 0;
+}
+#define CHECK_STACK_TOP(op, n)                                                                     \
+	{                                                                                              \
+		if (stack->index < n) {                                                                    \
+			logWarning("[libcff] Stack cannot provide enough parameters for %s (%04x). This "      \
+			           "operation is ignored.\n",                                                  \
+			           #op, op);                                                                   \
+			break;                                                                                 \
+		}                                                                                          \
+	}
+
+// CFF charastring parser
+void cff_parseOutline(uint8_t *data, uint32_t len, cff_Index gsubr, cff_Index lsubr,
+                      cff_Stack *stack, void *outline, cff_IOutlineBuilder methods,
+                      const otfcc_Options *options) {
+	uint16_t gsubr_bias = compute_subr_bias(gsubr.count);
+	uint16_t lsubr_bias = compute_subr_bias(lsubr.count);
+	uint8_t *start = data;
+	uint32_t advance, i, cnt_bezier;
+	cff_Value val;
+
+	void (*setWidth)(void *context, double width) = methods.setWidth;
+	void (*newContour)(void *context) = methods.newContour;
+	void (*lineTo)(void *context, double x1, double y1) = methods.lineTo;
+	void (*curveTo)(void *context, double x1, double y1, double x2, double y2, double x3,
+	                double y3) = methods.curveTo;
+	void (*setHint)(void *context, bool isVertical, double position, double width) =
+	    methods.setHint;
+	void (*setMask)(void *context, bool isContourMask, bool *mask) = methods.setMask;
+	double (*getrand)(void *context) = methods.getrand;
+
+	if (!setWidth) setWidth = callback_nopSetWidth;
+	if (!newContour) newContour = callback_nopNewContour;
+	if (!lineTo) lineTo = callback_nopLineTo;
+	if (!curveTo) curveTo = callback_nopCurveTo;
+	if (!setHint) setHint = callback_nopsetHint;
+	if (!setMask) setMask = callback_nopsetMask;
+	if (!getrand) getrand = callback_nopgetrand;
+
+	while (start < data + len) {
+		advance = cff_decodeCS2Token(start, &val);
+
+		switch (val.t) {
+			case CS2_OPERATOR:
+				switch (val.i) {
+					case op_hstem:
+					case op_vstem:
+					case op_hstemhm:
+					case op_vstemhm:
+						if (stack->index % 2) setWidth(outline, stack->stack[0].d);
+						stack->stem += stack->index >> 1;
+						double hintBase = 0;
+						for (uint16_t j = stack->index % 2; j < stack->index; j += 2) {
+							double pos = stack->stack[j].d;
+							double width = stack->stack[j + 1].d;
+							setHint(outline, (val.i == op_vstem || val.i == op_vstemhm),
+							        pos + hintBase, width);
+							hintBase += pos + width;
+						}
+						stack->index = 0;
+						break;
+					case op_hintmask:
+					case op_cntrmask: {
+						if (stack->index % 2) setWidth(outline, stack->stack[0].d);
+						bool isVertical = stack->stem > 0;
+						stack->stem += stack->index >> 1;
+						double hintBase = 0;
+						for (uint16_t j = stack->index % 2; j < stack->index; j += 2) {
+							double pos = stack->stack[j].d;
+							double width = stack->stack[j + 1].d;
+							setHint(outline, isVertical, pos + hintBase, width);
+							hintBase += pos + width;
+						}
+						uint32_t maskLength = (stack->stem + 7) >> 3;
+						bool *mask;
+						NEW(mask, stack->stem + 7);
+						for (uint32_t byte = 0; byte < maskLength; byte++) {
+							uint8_t maskByte = start[advance + byte];
+							mask[(byte << 3) + 0] = maskByte >> 7 & 1;
+							mask[(byte << 3) + 1] = maskByte >> 6 & 1;
+							mask[(byte << 3) + 2] = maskByte >> 5 & 1;
+							mask[(byte << 3) + 3] = maskByte >> 4 & 1;
+							mask[(byte << 3) + 4] = maskByte >> 3 & 1;
+							mask[(byte << 3) + 5] = maskByte >> 2 & 1;
+							mask[(byte << 3) + 6] = maskByte >> 1 & 1;
+							mask[(byte << 3) + 7] = maskByte >> 0 & 1;
+						}
+						setMask(outline, (val.i == op_cntrmask), mask);
+						advance += maskLength;
+						stack->index = 0;
+						break;
+					}
+
+					case op_vmoveto: {
+						CHECK_STACK_TOP(op_vmoveto, 1);
+						if (stack->index > 1) setWidth(outline, stack->stack[stack->index - 2].d);
+						newContour(outline);
+						lineTo(outline, 0.0, stack->stack[stack->index - 1].d);
+						stack->index = 0;
+						break;
+					}
+					case op_rmoveto: {
+						CHECK_STACK_TOP(op_rmoveto, 2);
+						if (stack->index > 2) setWidth(outline, stack->stack[stack->index - 3].d);
+						newContour(outline);
+						lineTo(outline, stack->stack[stack->index - 2].d,
+						       stack->stack[stack->index - 1].d);
+						stack->index = 0;
+						break;
+					}
+					case op_hmoveto: {
+						CHECK_STACK_TOP(op_hmoveto, 1);
+						if (stack->index > 1) setWidth(outline, stack->stack[stack->index - 2].d);
+						newContour(outline);
+						lineTo(outline, stack->stack[stack->index - 1].d, 0.0);
+						stack->index = 0;
+						break;
+					}
+					case op_endchar: {
+						if (stack->index > 0) setWidth(outline, stack->stack[stack->index - 1].d);
+						break;
+					}
+					case op_rlineto: {
+						for (i = 0; i < stack->index; i += 2)
+							lineTo(outline, stack->stack[i].d, stack->stack[i + 1].d);
+						stack->index = 0;
+						break;
+					}
+					case op_vlineto: {
+						if (stack->index % 2 == 1) {
+							lineTo(outline, 0.0, stack->stack[0].d);
+							for (i = 1; i < stack->index; i += 2) {
+								lineTo(outline, stack->stack[i].d, 0.0);
+								lineTo(outline, 0.0, stack->stack[i + 1].d);
+							}
+						} else {
+							for (i = 0; i < stack->index; i += 2) {
+								lineTo(outline, 0.0, stack->stack[i].d);
+								lineTo(outline, stack->stack[i + 1].d, 0.0);
+							}
+						}
+						stack->index = 0;
+						break;
+					}
+					case op_hlineto: {
+						if (stack->index % 2 == 1) {
+							lineTo(outline, stack->stack[0].d, 0.0);
+							for (i = 1; i < stack->index; i += 2) {
+								lineTo(outline, 0.0, stack->stack[i].d);
+								lineTo(outline, stack->stack[i + 1].d, 0.0);
+							}
+						} else {
+							for (i = 0; i < stack->index; i += 2) {
+								lineTo(outline, stack->stack[i].d, 0.0);
+								lineTo(outline, 0.0, stack->stack[i + 1].d);
+							}
+						}
+						stack->index = 0;
+						break;
+					}
+					case op_rrcurveto: {
+						for (i = 0; i < stack->index; i += 6)
+							curveTo(outline, stack->stack[i].d, stack->stack[i + 1].d,
+							        stack->stack[i + 2].d, stack->stack[i + 3].d,
+							        stack->stack[i + 4].d, stack->stack[i + 5].d);
+						stack->index = 0;
+						break;
+					}
+					case op_rcurveline: {
+						for (i = 0; i < stack->index - 2; i += 6)
+							curveTo(outline, stack->stack[i].d, stack->stack[i + 1].d,
+							        stack->stack[i + 2].d, stack->stack[i + 3].d,
+							        stack->stack[i + 4].d, stack->stack[i + 5].d);
+						lineTo(outline, stack->stack[stack->index - 2].d,
+						       stack->stack[stack->index - 1].d);
+						stack->index = 0;
+						break;
+					}
+					case op_rlinecurve: {
+						for (i = 0; i < stack->index - 6; i += 2)
+							lineTo(outline, stack->stack[i].d, stack->stack[i + 1].d);
+						curveTo(outline, stack->stack[stack->index - 6].d,
+						        stack->stack[stack->index - 5].d, stack->stack[stack->index - 4].d,
+						        stack->stack[stack->index - 3].d, stack->stack[stack->index - 2].d,
+						        stack->stack[stack->index - 1].d);
+						stack->index = 0;
+						break;
+					}
+					case op_vvcurveto: {
+						if (stack->index % 4 == 1) {
+							curveTo(outline, stack->stack[0].d, stack->stack[1].d,
+							        stack->stack[2].d, stack->stack[3].d, 0.0, stack->stack[4].d);
+							for (i = 5; i < stack->index; i += 4)
+								curveTo(outline, 0.0, stack->stack[i].d, stack->stack[i + 1].d,
+								        stack->stack[i + 2].d, 0.0, stack->stack[i + 3].d);
+						} else {
+							for (i = 0; i < stack->index; i += 4)
+								curveTo(outline, 0.0, stack->stack[i].d, stack->stack[i + 1].d,
+								        stack->stack[i + 2].d, 0.0, stack->stack[i + 3].d);
+						}
+						stack->index = 0;
+						break;
+					}
+					case op_hhcurveto: {
+						if (stack->index % 4 == 1) {
+							curveTo(outline, stack->stack[1].d, stack->stack[0].d,
+							        stack->stack[2].d, stack->stack[3].d, stack->stack[4].d, 0.0);
+							for (i = 5; i < stack->index; i += 4)
+								curveTo(outline, stack->stack[i].d, 0.0, stack->stack[i + 1].d,
+								        stack->stack[i + 2].d, stack->stack[i + 3].d, 0.0);
+						} else {
+							for (i = 0; i < stack->index; i += 4)
+								curveTo(outline, stack->stack[i].d, 0.0, stack->stack[i + 1].d,
+								        stack->stack[i + 2].d, stack->stack[i + 3].d, 0.0);
+						}
+						stack->index = 0;
+						break;
+					}
+					case op_vhcurveto: {
+						if (stack->index % 4 == 1)
+							cnt_bezier = (stack->index - 5) / 4;
+						else
+							cnt_bezier = (stack->index / 4);
+
+						for (i = 0; i < 4 * cnt_bezier; i += 4) {
+							if ((i / 4) % 2 == 0)
+								curveTo(outline, 0.0, stack->stack[i].d, stack->stack[i + 1].d,
+								        stack->stack[i + 2].d, stack->stack[i + 3].d, 0.0);
+							else
+								curveTo(outline, stack->stack[i].d, 0.0, stack->stack[i + 1].d,
+								        stack->stack[i + 2].d, 0.0, stack->stack[i + 3].d);
+						}
+						if (stack->index % 8 == 5) {
+							curveTo(
+							    outline, 0.0, stack->stack[stack->index - 5].d,
+							    stack->stack[stack->index - 4].d, stack->stack[stack->index - 3].d,
+							    stack->stack[stack->index - 2].d, stack->stack[stack->index - 1].d);
+						}
+						if (stack->index % 8 == 1) {
+							curveTo(
+							    outline, stack->stack[stack->index - 5].d, 0.0,
+							    stack->stack[stack->index - 4].d, stack->stack[stack->index - 3].d,
+							    stack->stack[stack->index - 1].d, stack->stack[stack->index - 2].d);
+						}
+						stack->index = 0;
+						break;
+					}
+					case op_hvcurveto: {
+						if (stack->index % 4 == 1)
+							cnt_bezier = (stack->index - 5) / 4;
+						else
+							cnt_bezier = (stack->index / 4);
+
+						for (i = 0; i < 4 * cnt_bezier; i += 4) {
+							if ((i / 4) % 2 == 0)
+								curveTo(outline, stack->stack[i].d, 0.0, stack->stack[i + 1].d,
+								        stack->stack[i + 2].d, 0.0, stack->stack[i + 3].d);
+							else
+								curveTo(outline, 0.0, stack->stack[i].d, stack->stack[i + 1].d,
+								        stack->stack[i + 2].d, stack->stack[i + 3].d, 0.0);
+						}
+
+						if (stack->index % 8 == 5) {
+							curveTo(
+							    outline, stack->stack[stack->index - 5].d, 0.0,
+							    stack->stack[stack->index - 4].d, stack->stack[stack->index - 3].d,
+							    stack->stack[stack->index - 1].d, stack->stack[stack->index - 2].d);
+						}
+						if (stack->index % 8 == 1) {
+							curveTo(
+							    outline, 0.0, stack->stack[stack->index - 5].d,
+							    stack->stack[stack->index - 4].d, stack->stack[stack->index - 3].d,
+							    stack->stack[stack->index - 2].d, stack->stack[stack->index - 1].d);
+						}
+						stack->index = 0;
+						break;
+					}
+					case op_hflex: {
+						CHECK_STACK_TOP(op_hflex, 7);
+						curveTo(outline, stack->stack[0].d, 0.0, stack->stack[1].d,
+						        stack->stack[2].d, stack->stack[3].d, 0.0);
+						curveTo(outline, stack->stack[4].d, 0.0, stack->stack[5].d,
+						        -stack->stack[2].d, stack->stack[6].d, 0.0);
+						stack->index = 0;
+						break;
+					}
+					case op_flex: {
+						CHECK_STACK_TOP(op_flex, 12);
+						curveTo(outline, stack->stack[0].d, stack->stack[1].d, stack->stack[2].d,
+						        stack->stack[3].d, stack->stack[4].d, stack->stack[5].d);
+						curveTo(outline, stack->stack[6].d, stack->stack[7].d, stack->stack[8].d,
+						        stack->stack[9].d, stack->stack[10].d, stack->stack[11].d);
+						stack->index = 0;
+						break;
+					}
+					case op_hflex1: {
+						CHECK_STACK_TOP(op_hflex1, 9);
+						curveTo(outline, stack->stack[0].d, stack->stack[1].d, stack->stack[2].d,
+						        stack->stack[3].d, stack->stack[4].d, 0.0);
+						curveTo(outline, stack->stack[5].d, 0.0, stack->stack[6].d,
+						        stack->stack[7].d, stack->stack[8].d,
+						        -(stack->stack[1].d + stack->stack[3].d + stack->stack[7].d));
+						stack->index = 0;
+						break;
+					}
+					case op_flex1: {
+						CHECK_STACK_TOP(op_flex1, 11);
+						double dx = stack->stack[0].d + stack->stack[2].d + stack->stack[4].d +
+						            stack->stack[6].d + stack->stack[8].d;
+						double dy = stack->stack[1].d + stack->stack[3].d + stack->stack[5].d +
+						            stack->stack[7].d + stack->stack[9].d;
+						if (fabs(dx) > fabs(dy)) {
+							dx = stack->stack[10].d;
+							dy = -dy;
+						} else {
+							dx = -dx;
+							dy = stack->stack[10].d;
+						}
+						curveTo(outline, stack->stack[0].d, stack->stack[1].d, stack->stack[2].d,
+						        stack->stack[3].d, stack->stack[4].d, stack->stack[5].d);
+						curveTo(outline, stack->stack[6].d, stack->stack[7].d, stack->stack[8].d,
+						        stack->stack[9].d, dx, dy);
+						stack->index = 0;
+						break;
+					}
+					case op_and: {
+						CHECK_STACK_TOP(op_and, 2);
+						double num1 = stack->stack[stack->index - 1].d;
+						double num2 = stack->stack[stack->index - 2].d;
+						stack->stack[stack->index - 2].d = (num1 && num2) ? 1.0 : 0.0;
+						stack->index -= 1;
+						break;
+					}
+					case op_or: {
+						CHECK_STACK_TOP(op_or, 2);
+						double num1 = stack->stack[stack->index - 1].d;
+						double num2 = stack->stack[stack->index - 2].d;
+						stack->stack[stack->index - 2].d = (num1 || num2) ? 1.0 : 0.0;
+						stack->index -= 1;
+						break;
+					}
+					case op_not: {
+						CHECK_STACK_TOP(op_not, 1);
+						double num = stack->stack[stack->index - 1].d;
+						stack->stack[stack->index - 1].d = num ? 0.0 : 1.0;
+						break;
+					}
+					case op_abs: {
+						CHECK_STACK_TOP(op_abs, 1);
+						double num = stack->stack[stack->index - 1].d;
+						stack->stack[stack->index - 1].d = (num < 0.0) ? -num : num;
+						break;
+					}
+					case op_add: {
+						CHECK_STACK_TOP(op_add, 2);
+						double num1 = stack->stack[stack->index - 1].d;
+						double num2 = stack->stack[stack->index - 2].d;
+						stack->stack[stack->index - 2].d = num1 + num2;
+						stack->index -= 1;
+						break;
+					}
+					case op_sub: {
+						CHECK_STACK_TOP(op_sub, 2);
+						double num1 = stack->stack[stack->index - 2].d;
+						double num2 = stack->stack[stack->index - 1].d;
+						stack->stack[stack->index - 2].d = num1 - num2;
+						stack->index -= 1;
+						break;
+					}
+					case op_div: {
+						CHECK_STACK_TOP(op_div, 2);
+						double num1 = stack->stack[stack->index - 2].d;
+						double num2 = stack->stack[stack->index - 1].d;
+						stack->stack[stack->index - 2].d = num1 / num2;
+						stack->index -= 1;
+						break;
+					}
+					case op_neg: {
+						CHECK_STACK_TOP(op_neg, 1);
+						double num = stack->stack[stack->index - 1].d;
+						stack->stack[stack->index - 1].d = -num;
+						break;
+					}
+					case op_eq: {
+						CHECK_STACK_TOP(op_eq, 2);
+						double num1 = stack->stack[stack->index - 1].d;
+						double num2 = stack->stack[stack->index - 2].d;
+						stack->stack[stack->index - 2].d = (num1 == num2) ? 1.0 : 0.0;
+						stack->index -= 1;
+						break;
+					}
+					case op_drop: {
+						CHECK_STACK_TOP(op_drop, 1);
+						stack->index -= 1;
+						break;
+					}
+					case op_put: {
+						CHECK_STACK_TOP(op_put, 2);
+						double val = stack->stack[stack->index - 2].d;
+						int32_t i = (int32_t)stack->stack[stack->index - 1].d;
+						stack->transient[i % type2_transient_array].d = val;
+						stack->index -= 2;
+						break;
+					}
+					case op_get: {
+						CHECK_STACK_TOP(op_get, 1);
+						int32_t i = (int32_t)stack->stack[stack->index - 1].d;
+						stack->stack[stack->index - 1].d =
+						    stack->transient[i % type2_transient_array].d;
+						break;
+					}
+					case op_ifelse: {
+						CHECK_STACK_TOP(op_ifelse, 4);
+						double v2 = stack->stack[stack->index - 1].d;
+						double v1 = stack->stack[stack->index - 2].d;
+						double s2 = stack->stack[stack->index - 3].d;
+						double s1 = stack->stack[stack->index - 4].d;
+						stack->stack[stack->index - 4].d = (v1 <= v2) ? s1 : s2;
+						stack->index -= 3;
+						break;
+					}
+					case op_random: {
+						// Chosen from a fair dice
+						// TODO: use a real randomizer
+						stack->stack[stack->index].t = cff_DOUBLE;
+						stack->stack[stack->index].d = getrand(outline);
+						stack->index += 1;
+						break;
+					}
+					case op_mul: {
+						CHECK_STACK_TOP(op_mul, 2);
+						double num1 = stack->stack[stack->index - 1].d;
+						double num2 = stack->stack[stack->index - 2].d;
+						stack->stack[stack->index - 2].d = num1 * num2;
+						stack->index -= 1;
+						break;
+					}
+					case op_sqrt: {
+						CHECK_STACK_TOP(op_sqrt, 1);
+						double num = stack->stack[stack->index - 1].d;
+						stack->stack[stack->index - 1].d = sqrt(num);
+						break;
+					}
+					case op_dup: {
+						CHECK_STACK_TOP(op_dup, 1);
+						stack->stack[stack->index] = stack->stack[stack->index - 1];
+						stack->index += 1;
+						break;
+					}
+					case op_exch: {
+						CHECK_STACK_TOP(op_exch, 2);
+						double num1 = stack->stack[stack->index - 1].d;
+						double num2 = stack->stack[stack->index - 2].d;
+						stack->stack[stack->index - 1].d = num2;
+						stack->stack[stack->index - 2].d = num1;
+						break;
+					}
+					case op_index: {
+						CHECK_STACK_TOP(op_index, 2);
+						uint8_t n = stack->index - 1;
+						uint8_t j = n - 1 - (uint8_t)(stack->stack[n].d) % n;
+						stack->stack[n] = stack->stack[j];
+						break;
+					}
+					case op_roll: {
+						CHECK_STACK_TOP(op_roll, 2);
+						int32_t j = stack->stack[stack->index - 1].d;
+						uint32_t n = stack->stack[stack->index - 2].d;
+						CHECK_STACK_TOP(op_roll, 2 + n);
+						j = -j % n;
+						if (j < 0) j += n;
+						if (!j) break;
+						uint8_t last = stack->index - 3;
+						uint8_t first = stack->index - 2 - n;
+
+						reverseStack(stack, first, last);
+						reverseStack(stack, last - j + 1, last);
+						reverseStack(stack, first, last - j);
+						stack->index -= 2;
+						break;
+					}
+					case op_return:
+						return;
+					case op_callsubr: {
+						CHECK_STACK_TOP(op_callsubr, 1);
+						uint32_t subr = (uint32_t)stack->stack[--(stack->index)].d;
+						cff_parseOutline(lsubr.data + lsubr.offset[lsubr_bias + subr] - 1,
+						                 lsubr.offset[lsubr_bias + subr + 1] -
+						                     lsubr.offset[lsubr_bias + subr],
+						                 gsubr, lsubr, stack, outline, methods, options);
+						break;
+					}
+					case op_callgsubr: {
+						CHECK_STACK_TOP(op_callgsubr, 1);
+						uint32_t subr = (uint32_t)stack->stack[--(stack->index)].d;
+						cff_parseOutline(gsubr.data + gsubr.offset[gsubr_bias + subr] - 1,
+						                 gsubr.offset[gsubr_bias + subr + 1] -
+						                     gsubr.offset[gsubr_bias + subr],
+						                 gsubr, lsubr, stack, outline, methods, options);
+						break;
+					}
+					default: {
+						logWarning("Warning: unknown operator %d occurs in Type 2 CharString. It "
+						           "may caused by file corruption.",
+						           val.i);
+						return;
+					}
+				}
+				break;
+			case CS2_OPERAND:
+			case CS2_FRACTION:
+				stack->stack[(stack->index)++] = val;
+				break;
+		}
+
+		start += advance;
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-string.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-string.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-string.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,411 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+static const char *const string_standard[391] = {
+    ".notdef",
+    "space",
+    "exclam",
+    "quotedbl",
+    "numbersign",
+    "dollar",
+    "percent",
+    "ampersand",
+    "quoteright",
+    "parenleft",
+    "parenright",
+    "asterisk",
+    "plus",
+    "comma",
+    "hyphen",
+    "period",
+    "slash",
+    "zero",
+    "one",
+    "two",
+    "three",
+    "four",
+    "five",
+    "six",
+    "seven",
+    "eight",
+    "nine",
+    "colon",
+    "semicolon",
+    "less",
+    "equal",
+    "greater",
+    "question",
+    "at",
+    "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",
+    "bracketleft",
+    "backslash",
+    "bracketright",
+    "asciicircum",
+    "underscore",
+    "quoteleft",
+    "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",
+    "braceleft",
+    "bar",
+    "braceright",
+    "asciitilde",
+    "exclamdown",
+    "cent",
+    "sterling",
+    "fraction",
+    "yen",
+    "florin",
+    "section",
+    "currency",
+    "quotesingle",
+    "quotedblleft",
+    "guillemotleft",
+    "guilsinglleft",
+    "guilsinglright",
+    "fi",
+    "fl",
+    "endash",
+    "dagger",
+    "daggerdbl",
+    "periodcentered",
+    "paragraph",
+    "bullet",
+    "quotesinglbase",
+    "quotedblbase",
+    "quotedblright",
+    "guillemotright",
+    "ellipsis",
+    "perthousand",
+    "questiondown",
+    "grave",
+    "acute",
+    "circumflex",
+    "tilde",
+    "macron",
+    "breve",
+    "dotaccent",
+    "dieresis",
+    "ring",
+    "cedilla",
+    "hungarumlaut",
+    "ogonek",
+    "caron",
+    "emdash",
+    "AE",
+    "ordfeminine",
+    "Lslash",
+    "Oslash",
+    "OE",
+    "ordmasculine",
+    "ae",
+    "dotlessi",
+    "lslash",
+    "oslash",
+    "oe",
+    "germandbls",
+    "onesuperior",
+    "logicalnot",
+    "mu",
+    "trademark",
+    "Eth",
+    "onehalf",
+    "plusminus",
+    "Thorn",
+    "onequarter",
+    "divide",
+    "brokenbar",
+    "degree",
+    "thorn",
+    "threequarters",
+    "twosuperior",
+    "registered",
+    "minus",
+    "eth",
+    "multiply",
+    "threesuperior",
+    "copyright",
+    "Aacute",
+    "Acircumflex",
+    "Adieresis",
+    "Agrave",
+    "Aring",
+    "Atilde",
+    "Ccedilla",
+    "Eacute",
+    "Ecircumflex",
+    "Edieresis",
+    "Egrave",
+    "Iacute",
+    "Icircumflex",
+    "Idieresis",
+    "Igrave",
+    "Ntilde",
+    "Oacute",
+    "Ocircumflex",
+    "Odieresis",
+    "Ograve",
+    "Otilde",
+    "Scaron",
+    "Uacute",
+    "Ucircumflex",
+    "Udieresis",
+    "Ugrave",
+    "Yacute",
+    "Ydieresis",
+    "Zcaron",
+    "aacute",
+    "acircumflex",
+    "adieresis",
+    "agrave",
+    "aring",
+    "atilde",
+    "ccedilla",
+    "eacute",
+    "ecircumflex",
+    "edieresis",
+    "egrave",
+    "iacute",
+    "icircumflex",
+    "idieresis",
+    "igrave",
+    "ntilde",
+    "oacute",
+    "ocircumflex",
+    "odieresis",
+    "ograve",
+    "otilde",
+    "scaron",
+    "uacute",
+    "ucircumflex",
+    "udieresis",
+    "ugrave",
+    "yacute",
+    "ydieresis",
+    "zcaron",
+    "exclamsmall",
+    "Hungarumlautsmall",
+    "dollaroldstyle",
+    "dollarsuperior",
+    "ampersandsmall",
+    "Acutesmall",
+    "parenleftsuperior",
+    "parenrightsuperior",
+    "twodotenleader",
+    "onedotenleader",
+    "zerooldstyle",
+    "oneoldstyle",
+    "twooldstyle",
+    "threeoldstyle",
+    "fouroldstyle",
+    "fiveoldstyle",
+    "sixoldstyle",
+    "sevenoldstyle",
+    "eightoldstyle",
+    "nineoldstyle",
+    "commasuperior",
+    "threequartersemdash",
+    "periodsuperior",
+    "questionsmall",
+    "asuperior",
+    "bsuperior",
+    "centsuperior",
+    "dsuperior",
+    "esuperior",
+    "isuperior",
+    "lsuperior",
+    "msuperior",
+    "nsuperior",
+    "osuperior",
+    "rsuperior",
+    "ssuperior",
+    "tsuperior",
+    "ff",
+    "ffi",
+    "ffl",
+    "parenleftinferior",
+    "parenrightinferior",
+    "Circumflexsmall",
+    "hyphensuperior",
+    "Gravesmall",
+    "Asmall",
+    "Bsmall",
+    "Csmall",
+    "Dsmall",
+    "Esmall",
+    "Fsmall",
+    "Gsmall",
+    "Hsmall",
+    "Ismall",
+    "Jsmall",
+    "Ksmall",
+    "Lsmall",
+    "Msmall",
+    "Nsmall",
+    "Osmall",
+    "Psmall",
+    "Qsmall",
+    "Rsmall",
+    "Ssmall",
+    "Tsmall",
+    "Usmall",
+    "Vsmall",
+    "Wsmall",
+    "Xsmall",
+    "Ysmall",
+    "Zsmall",
+    "colonmonetary",
+    "onefitted",
+    "rupiah",
+    "Tildesmall",
+    "exclamdownsmall",
+    "centoldstyle",
+    "Lslashsmall",
+    "Scaronsmall",
+    "Zcaronsmall",
+    "Dieresissmall",
+    "Brevesmall",
+    "Caronsmall",
+    "Dotaccentsmall",
+    "Macronsmall",
+    "figuredash",
+    "hypheninferior",
+    "Ogoneksmall",
+    "Ringsmall",
+    "Cedillasmall",
+    "questiondownsmall",
+    "oneeighth",
+    "threeeighths",
+    "fiveeighths",
+    "seveneighths",
+    "onethird",
+    "twothirds",
+    "zerosuperior",
+    "foursuperior",
+    "fivesuperior",
+    "sixsuperior",
+    "sevensuperior",
+    "eightsuperior",
+    "ninesuperior",
+    "zeroinferior",
+    "oneinferior",
+    "twoinferior",
+    "threeinferior",
+    "fourinferior",
+    "fiveinferior",
+    "sixinferior",
+    "seveninferior",
+    "eightinferior",
+    "nineinferior",
+    "centinferior",
+    "dollarinferior",
+    "periodinferior",
+    "commainferior",
+    "Agravesmall",
+    "Aacutesmall",
+    "Acircumflexsmall",
+    "Atildesmall",
+    "Adieresissmall",
+    "Aringsmall",
+    "AEsmall",
+    "Ccedillasmall",
+    "Egravesmall",
+    "Eacutesmall",
+    "Ecircumflexsmall",
+    "Edieresissmall",
+    "Igravesmall",
+    "Iacutesmall",
+    "Icircumflexsmall",
+    "Idieresissmall",
+    "Ethsmall",
+    "Ntildesmall",
+    "Ogravesmall",
+    "Oacutesmall",
+    "Ocircumflexsmall",
+    "Otildesmall",
+    "Odieresissmall",
+    "OEsmall",
+    "Oslashsmall",
+    "Ugravesmall",
+    "Uacutesmall",
+    "Ucircumflexsmall",
+    "Udieresissmall",
+    "Yacutesmall",
+    "Thornsmall",
+    "Ydieresissmall",
+    "001.000",
+    "001.001",
+    "001.002",
+    "001.003",
+    "Black",
+    "Bold",
+    "Book",
+    "Light",
+    "Medium",
+    "Regular",
+    "Roman",
+    "Semibold",
+};
+
+sds sdsget_cff_sid(uint16_t idx, cff_Index str) {
+	if (idx <= 390) {
+		return sdsnew(string_standard[idx]);
+	} else if (str.count > 0 && idx - 391 < str.count) {
+		return sdsnewlen(str.data + str.offset[idx - 391] - 1,
+		                 str.offset[idx - 390] - str.offset[idx - 391]);
+	} else {
+		return NULL;
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-util.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-util.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-util.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,123 @@
+#ifndef CARYLL_cff_UTIL_H
+#define CARYLL_cff_UTIL_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+
+// clang-format off
+// CFF DICT Operators
+enum {
+	op_version          = 0x00, op_Copyright          = 0x0c00,
+	op_Notice           = 0x01, op_isFixedPitch       = 0x0c01,
+	op_FullName         = 0x02, op_ItalicAngle        = 0x0c02,
+	op_FamilyName       = 0x03, op_UnderlinePosition  = 0x0c03,
+	op_Weight           = 0x04, op_UnderlineThickness = 0x0c04,
+	op_FontBBox         = 0x05, op_PaintType          = 0x0c05,
+	op_BlueValues       = 0x06, op_CharstringType     = 0x0c06,
+	op_OtherBlues       = 0x07, op_FontMatrix         = 0x0c07,
+	op_FamilyBlues      = 0x08, op_StrokeWidth        = 0x0c08,
+	op_FamilyOtherBlues = 0x09, op_BlueScale          = 0x0c09,
+	op_StdHW            = 0x0a, op_BlueShift          = 0x0c0a,
+	op_StdVW            = 0x0b, op_BlueFuzz           = 0x0c0b,
+	/* 0x0c escape */           op_StemSnapH          = 0x0c0c,
+	op_UniqueID         = 0x0d, op_StemSnapV          = 0x0c0d,
+	op_XUID             = 0x0e, op_ForceBold          = 0x0c0e,
+	op_charset          = 0x0f, /* 0x0c0f Reserved */
+	op_Encoding         = 0x10, /* 0x0c10 Reserved */
+	op_CharStrings      = 0x11, op_LanguageGroup      = 0x0c11,
+	op_Private          = 0x12, op_ExpansionFactor    = 0x0c12,
+	op_Subrs            = 0x13, op_initialRandomSeed  = 0x0c13,
+	op_defaultWidthX    = 0x14, op_SyntheicBase       = 0x0c14,
+	op_nominalWidthX    = 0x15, op_PostScript         = 0x0c15,
+	op_vsindex          = 0x16, op_BaseFontName       = 0x0c16,
+	op_blend            = 0x17, op_BaseFontBlend      = 0x0c17,
+	op_vstore           = 0x18, /* 0x0c18 Reserved */
+	op_maxstack         = 0x19, /* 0x0c19 Reserved */
+								/* 0x0c1a Reserved */
+								/* 0x0c1b Reserved */
+								/* 0x0c1c Reserved */
+								/* 0x0c1d Reserved */
+								op_ROS                = 0x0c1e,
+								op_CIDFontVersion     = 0x0c1f,
+								op_CIDFontRevision    = 0x0c20,
+								op_CIDFontType        = 0x0c21,
+								op_CIDCount           = 0x0c22,
+								op_UIDBase            = 0x0c23,
+								op_FDArray            = 0x0c24,
+								op_FDSelect           = 0x0c25,
+								op_FontName           = 0x0c26,
+};
+
+// Type2 CharString Operators
+enum {
+	/* 0x00 Reserved */   /* 0x0c00 Reserved */
+	op_hstem      = 0x01, /* 0x0c01 Reserved */
+	/* 0x02 Reserved */   /* 0x0c02 Reserved */
+	op_vstem      = 0x03, op_and    = 0x0c03,
+	op_vmoveto    = 0x04, op_or     = 0x0c04,
+	op_rlineto    = 0x05, op_not    = 0x0c05,
+	op_hlineto    = 0x06, /* 0x0c06 Reserved */
+	op_vlineto    = 0x07, /* 0x0c07 Reserved */
+	op_rrcurveto  = 0x08, /* 0x0c08 Reserved */
+	/* 0x09 Reserved */   op_abs    = 0x0c09,
+	op_callsubr   = 0x0a, op_add    = 0x0c0a,
+	op_return     = 0x0b, op_sub    = 0x0c0b,
+	/* 0x0c escape   */   op_div    = 0x0c0c,
+	/* 0x0d Reserved */   /* 0x0c0d Reserved */
+	op_endchar    = 0x0e, op_neg    = 0x0c0e,
+	op_cff2vsidx  = 0x0f, op_eq     = 0x0c0f,
+	op_cff2blend  = 0x10, /* 0x0c10 Reserved */
+	/* 0x11 Reserved */   /* 0x0c11 Reserved */
+	op_hstemhm    = 0x12, op_drop   = 0x0c12,
+	op_hintmask   = 0x13, /* 0x0c13 Reserved */
+	op_cntrmask   = 0x14, op_put    = 0x0c14,
+	op_rmoveto    = 0x15, op_get    = 0x0c15,
+	op_hmoveto    = 0x16, op_ifelse = 0x0c16,
+	op_vstemhm    = 0x17, op_random = 0x0c17,
+	op_rcurveline = 0x18, op_mul    = 0x0c18,
+	op_rlinecurve = 0x19, /* 0x0c19 Reserved */
+	op_vvcurveto  = 0x1a, op_sqrt   = 0x0c1a,
+	op_hhcurveto  = 0x1b, op_dup    = 0x0c1b,
+	/* 0x1c short int */  op_exch   = 0x0c1c,
+	op_callgsubr  = 0x1d, op_index  = 0x0c1d,
+	op_vhcurveto  = 0x1e, op_roll   = 0x0c1e,
+	op_hvcurveto  = 0x1f, /* 0x0c1f Reserved */
+						/* 0x0c20 Reserved */
+						/* 0x0c21 Reserved */
+						op_hflex  = 0x0c22,
+						op_flex   = 0x0c23,
+						op_hflex1 = 0x0c24,
+						op_flex1  = 0x0c25,
+};
+// clang-format on
+
+// parser util functions
+static INLINE uint32_t gu1(uint8_t *s, uint32_t p) {
+	uint32_t b0 = *(s + p);
+	return b0;
+}
+
+static INLINE uint32_t gu2(uint8_t *s, uint32_t p) {
+	uint32_t b0 = *(s + p) << 8;
+	uint32_t b1 = *(s + p + 1);
+	return b0 | b1;
+}
+
+static INLINE uint32_t gu3(uint8_t *s, uint32_t p) {
+	uint32_t b0 = *(s + p) << 16;
+	uint32_t b1 = *(s + p + 1) << 8;
+	uint32_t b2 = *(s + p + 2);
+	return b0 | b1 | b2;
+}
+static INLINE uint32_t gu4(uint8_t *s, uint32_t p) {
+	uint32_t b0 = *(s + p) << 24;
+	uint32_t b1 = *(s + p + 1) << 16;
+	uint32_t b2 = *(s + p + 2) << 8;
+	uint32_t b3 = *(s + p + 3);
+	return b0 | b1 | b2 | b3;
+}
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,7 @@
+#include "cff-value.h"
+
+double cffnum(cff_Value val) {
+	if (val.t == cff_INTEGER) return val.i;
+	if (val.t == cff_DOUBLE) return val.d;
+	return 0;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-value.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,29 @@
+#ifndef CARYLL_cff_VALUE_H
+#define CARYLL_cff_VALUE_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+
+typedef enum {
+	cff_OPERATOR = 1,
+	CS2_OPERATOR = 1,
+	cff_INTEGER = 2,
+	CS2_OPERAND = 2,
+	cff_DOUBLE = 3,
+	CS2_FRACTION = 3
+} cff_Value_Type;
+
+typedef struct {
+	cff_Value_Type t;
+	union {
+		int32_t i;
+		double d;
+	};
+} cff_Value;
+
+double cffnum(cff_Value v);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-writer.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-writer.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/cff-writer.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,60 @@
+/*
+  Compiler of CFF, subset and full conversion
+    * note that there is no optimization in current implement
+*/
+
+#include <math.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "libcff.h"
+
+caryll_Buffer *cff_buildHeader(void) {
+	return bufninit(4, 1, 0, 4, 4);
+}
+
+void cff_mergeCS2Operator(caryll_Buffer *blob, int32_t val) {
+	if (val >= 0x100) {
+		bufnwrite8(blob, 2, val >> 8, val & 0xff);
+	} else {
+		bufnwrite8(blob, 1, val & 0xff);
+	}
+}
+void cff_mergeCS2Int(caryll_Buffer *blob, int32_t val) {
+	if (val >= -1131 && val <= -108) {
+		bufnwrite8(blob, 2, (uint8_t)((-108 - val) / 256 + 251), (uint8_t)((-108 - val) % 256));
+	} else if (val >= -107 && val <= 107) {
+		bufnwrite8(blob, 1, (uint8_t)(val + 139));
+	} else if (val >= 108 && val <= 1131) {
+		bufnwrite8(blob, 2, (uint8_t)((val - 108) / 256 + 247), (uint8_t)((val - 108) % 256));
+	} else {
+		if (val >= -32768 && val <= 32767) {
+			bufnwrite8(blob, 3, 28, (uint8_t)(val >> 8), (uint8_t)((val << 8) >> 8));
+		} else {
+			cff_mergeCS2Int(blob, 0);
+		}
+	}
+}
+static void mergeCS2Real(caryll_Buffer *blob, double val) {
+	int16_t integerPart = floor(val);
+	uint16_t fractionPart = (val - integerPart) * 65536.0;
+	bufnwrite8(blob, 5, 0xFF, integerPart >> 8, integerPart & 0xFF, fractionPart >> 8, fractionPart & 0xFF);
+}
+void cff_mergeCS2Operand(caryll_Buffer *blob, double val) {
+	double intpart;
+	if (modf(val, &intpart) == 0.0) {
+		cff_mergeCS2Int(blob, (int32_t)intpart);
+	} else {
+		mergeCS2Real(blob, val);
+	}
+}
+void cff_mergeCS2Special(caryll_Buffer *blob, uint8_t val) {
+	bufwrite8(blob, val);
+}
+
+caryll_Buffer *cff_buildOffset(int32_t val) {
+	return bufninit(5, 29, (val >> 24) & 0xff, (val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,518 @@
+#include "charstring-il.h"
+#include "table/glyf.h"
+
+// Glyph building
+static void ensureThereIsSpace(cff_CharstringIL *il) {
+	if (il->free) return;
+	il->free = 0x100;
+	RESIZE(il->instr, il->length + il->free);
+}
+
+void il_push_operand(cff_CharstringIL *il, double x) {
+	ensureThereIsSpace(il);
+	il->instr[il->length].type = IL_ITEM_OPERAND;
+	il->instr[il->length].d = x;
+	il->instr[il->length].arity = 0;
+	il->length++;
+	il->free--;
+}
+static void il_push_VQ(cff_CharstringIL *il, VQ x) {
+	il_push_operand(il, iVQ.getStill(x));
+}
+void il_push_special(cff_CharstringIL *il, int32_t s) {
+	ensureThereIsSpace(il);
+	il->instr[il->length].type = IL_ITEM_SPECIAL;
+	il->instr[il->length].i = s;
+	il->instr[il->length].arity = 0;
+	il->length++;
+	il->free--;
+}
+void il_push_op(cff_CharstringIL *il, int32_t op) {
+	ensureThereIsSpace(il);
+	il->instr[il->length].type = IL_ITEM_OPERATOR;
+	il->instr[il->length].i = op;
+	il->instr[il->length].arity = cff_getStandardArity(op);
+	il->length++;
+	il->free--;
+}
+static void il_moveto(cff_CharstringIL *il, VQ dx, VQ dy) {
+	il_push_VQ(il, dx);
+	il_push_VQ(il, dy);
+	il_push_op(il, op_rmoveto);
+}
+static void il_lineto(cff_CharstringIL *il, VQ dx, VQ dy) {
+	il_push_VQ(il, dx);
+	il_push_VQ(il, dy);
+	il_push_op(il, op_rlineto);
+}
+static void il_curveto(cff_CharstringIL *il, VQ dx1, VQ dy1, VQ dx2, VQ dy2, VQ dx3, VQ dy3) {
+	il_push_VQ(il, dx1);
+	il_push_VQ(il, dy1);
+	il_push_VQ(il, dx2);
+	il_push_VQ(il, dy2);
+	il_push_VQ(il, dx3);
+	il_push_VQ(il, dy3);
+	il_push_op(il, op_rrcurveto);
+}
+
+static void _il_push_maskgroup(cff_CharstringIL *il,     // il seq
+                               glyf_MaskList *masks,     // masks array
+                               uint16_t contours,        // contous drawn
+                               uint16_t points,          // points drawn
+                               uint16_t nh, uint16_t nv, // quantity of stems
+                               uint16_t *jm,             // index of cur mask
+                               int32_t op) {             // mask operator
+	shapeid_t n = masks->length;
+	while (*jm < n && (masks->items[*jm].contoursBefore < contours ||
+	                   (masks->items[*jm].contoursBefore == contours &&
+	                    masks->items[*jm].pointsBefore <= points))) {
+		il_push_op(il, op);
+		uint8_t maskByte = 0;
+		uint8_t bits = 0;
+		for (uint16_t j = 0; j < nh; j++) {
+			maskByte = maskByte << 1 | (masks->items[*jm].maskH[j] & 1);
+			bits += 1;
+			if (bits == 8) {
+				il_push_special(il, maskByte);
+				bits = 0;
+			}
+		}
+		for (uint16_t j = 0; j < nv; j++) {
+			maskByte = maskByte << 1 | (masks->items[*jm].maskV[j] & 1);
+			bits += 1;
+			if (bits == 8) {
+				il_push_special(il, maskByte);
+				bits = 0;
+			}
+		}
+		if (bits) {
+			maskByte = maskByte << (8 - bits);
+			il_push_special(il, maskByte);
+		}
+		*jm += 1;
+	}
+}
+static void il_push_masks(cff_CharstringIL *il, glyf_Glyph *g, // meta
+                          uint16_t contours,                   // contours sofar
+                          uint16_t points,                     // points sofar
+                          uint16_t *jh,                        // index of pushed cmasks
+                          uint16_t *jm                         // index of pushed hmasks
+) {
+	if (!g->stemH.length && !g->stemV.length) return;
+	_il_push_maskgroup(il, &g->contourMasks, contours, points, //
+	                   g->stemH.length, g->stemV.length, jh, op_cntrmask);
+	_il_push_maskgroup(il, &g->hintMasks, contours, points, //
+	                   g->stemH.length, g->stemV.length, jm, op_hintmask);
+}
+
+static void _il_push_stemgroup(cff_CharstringIL *il,    // il seq
+                               glyf_StemDefList *stems, // stem array
+                               bool hasmask, bool haswidth, int32_t ophm, int32_t oph) {
+	if (!stems || !stems->length) return;
+	pos_t ref = 0;
+	uint16_t nn = haswidth ? 1 : 0;
+	for (uint16_t j = 0; j < stems->length; j++) {
+		il_push_operand(il, stems->items[j].position - ref);
+		il_push_operand(il, stems->items[j].width);
+		ref = stems->items[j].position + stems->items[j].width;
+		nn++;
+		if (nn >= type2_argument_stack) {
+			if (hasmask) {
+				il_push_op(il, op_hstemhm);
+			} else {
+				il_push_op(il, op_hstem);
+			}
+			il->instr[il->length - 1].arity = nn;
+			nn = 0;
+		}
+	}
+	if (hasmask) {
+		il_push_op(il, ophm);
+	} else {
+		il_push_op(il, oph);
+	}
+	il->instr[il->length - 1].arity = nn;
+}
+static void il_push_stems(cff_CharstringIL *il, glyf_Glyph *g, bool hasmask, bool haswidth) {
+	_il_push_stemgroup(il, &g->stemH, hasmask, haswidth, op_hstemhm, op_hstem);
+	_il_push_stemgroup(il, &g->stemV, hasmask, haswidth, op_vstemhm, op_vstem);
+}
+cff_CharstringIL *cff_compileGlyphToIL(glyf_Glyph *g, uint16_t defaultWidth,
+                                       uint16_t nominalWidth) {
+	cff_CharstringIL *il;
+	NEW(il);
+	// Convert absolute positions to deltas
+	glyf_Contour *tempContours = NULL;
+	{
+		VQ x = iVQ.neutral();
+		VQ y = iVQ.neutral();
+		NEW(tempContours, g->contours.length);
+		for (uint16_t c = 0; c < g->contours.length; c++) {
+			glyf_Contour *contour = &(g->contours.items[c]);
+			glyf_Contour *newcontour = &(tempContours[c]);
+			glyf_iContour.init(newcontour);
+			for (shapeid_t j = 0; j < contour->length; j++) {
+				glyf_iContour.push(newcontour, glyf_iPoint.dup(contour->items[j]));
+			}
+
+			if (newcontour->length > 2 && !newcontour->items[newcontour->length - 1].onCurve) {
+				// Duplicate first point for proper CurveTo generation
+				glyf_iContour.push(newcontour, glyf_iPoint.dup(newcontour->items[0]));
+			}
+
+			for (shapeid_t j = 0; j < newcontour->length; j++) {
+				VQ dx = iVQ.minus(newcontour->items[j].x, x);
+				VQ dy = iVQ.minus(newcontour->items[j].y, y);
+				iVQ.copyReplace(&x, newcontour->items[j].x);
+				iVQ.copyReplace(&y, newcontour->items[j].y);
+				iVQ.replace(&newcontour->items[j].x, dx);
+				iVQ.replace(&newcontour->items[j].y, dy);
+			}
+		}
+		iVQ.dispose(&x);
+		iVQ.dispose(&y);
+	}
+
+	bool hasmask =
+	    g->hintMasks.length || g->contourMasks.length; // we have hint masks or contour masks
+	const pos_t glyphADWConst = iVQ.getStill(g->advanceWidth);
+	bool haswidth = glyphADWConst != defaultWidth; // we have width operand here
+	// Write IL
+	if (haswidth) { il_push_operand(il, (int)(glyphADWConst) - (int)(nominalWidth)); }
+	il_push_stems(il, g, hasmask, haswidth);
+	// Write contour
+	shapeid_t contoursSofar = 0;
+	shapeid_t pointsSofar = 0;
+	shapeid_t jh = 0;
+	shapeid_t jm = 0;
+	if (hasmask) il_push_masks(il, g, contoursSofar, pointsSofar, &jh, &jm);
+	for (shapeid_t c = 0; c < g->contours.length; c++) {
+		glyf_Contour *contour = &(tempContours[c]);
+		shapeid_t n = contour->length;
+		if (n == 0) continue;
+		il_moveto(il, contour->items[0].x, contour->items[0].y);
+		pointsSofar++;
+		if (hasmask) il_push_masks(il, g, contoursSofar, pointsSofar, &jh, &jm);
+		// TODO: Generate BLENDs
+		for (shapeid_t j = 1; j < n; j++) {
+			if (contour->items[j].onCurve) { // A line-to
+				il_lineto(il, contour->items[j].x, contour->items[j].y);
+				pointsSofar += 1;
+			} else if (j < n - 2                         // have enough points
+			           && !contour->items[j + 1].onCurve // next is offcurve
+			           && contour->items[j + 2].onCurve  // and next is oncurve
+			) {                                          // means this is an bezier curve strand
+				il_curveto(il, contour->items[j].x,
+				           contour->items[j].y, // dz1
+				           contour->items[j + 1].x,
+				           contour->items[j + 1].y, // dz2
+				           contour->items[j + 2].x,
+				           contour->items[j + 2].y); // dz3
+				pointsSofar += 3;
+				j += 2;
+			} else { // invalid offcurve, treat as oncurve
+				il_lineto(il, contour->items[j].x, contour->items[j].y);
+				pointsSofar++;
+			}
+			if (hasmask) il_push_masks(il, g, contoursSofar, pointsSofar, &jh, &jm);
+		}
+		contoursSofar += 1;
+		pointsSofar = 0;
+	}
+	il_push_op(il, op_endchar);
+	// delete temp contour array
+	for (shapeid_t c = 0; c < g->contours.length; c++) {
+		glyf_iContour.dispose(&tempContours[c]);
+	}
+	FREE(tempContours);
+	return il;
+}
+
+// Pattern-based peephole optimization
+static bool il_matchtype(cff_CharstringIL *il, uint32_t j, uint32_t k, cff_InstructionType t) {
+	if (k >= il->length) return false;
+	for (uint32_t m = j; m < k; m++) {
+		if (il->instr[m].type != t) return false;
+	}
+	return true;
+}
+static bool il_matchop(cff_CharstringIL *il, uint32_t j, int32_t op) {
+	if (il->instr[j].type != IL_ITEM_OPERATOR) return false;
+	if (il->instr[j].i != op) return false;
+	return true;
+}
+static uint8_t zroll(cff_CharstringIL *il, uint32_t j, int32_t op, int32_t op2, ...) {
+	uint8_t arity = cff_getStandardArity(op);
+	if (arity > 16 || j + arity >= il->length) return 0;
+	if ((j == 0 || // We are at the beginning of charstring
+	     !il_matchtype(il, j - 1, j,
+	                   IL_ITEM_PHANTOM_OPERATOR)) // .. or we are right after a solid operator
+	    && il_matchop(il, j + arity, op)          // The next operator is <op>
+	    && il_matchtype(il, j, j + arity, IL_ITEM_OPERAND) // And we have correct number of operands
+	) {
+		va_list ap;
+		uint8_t check = true;
+		uint8_t resultArity = arity;
+		bool mask[16];
+		va_start(ap, op2);
+		for (uint32_t m = 0; m < arity; m++) {
+			int checkzero = va_arg(ap, int);
+			mask[m] = checkzero;
+			if (checkzero) {
+				resultArity -= 1;
+				check = check && il->instr[j + m].d == 0;
+			}
+		}
+		va_end(ap);
+		if (check) {
+			for (uint32_t m = 0; m < arity; m++) {
+				if (mask[m]) { il->instr[j + m].type = IL_ITEM_PHANTOM_OPERAND; }
+			}
+			il->instr[j + arity].i = op2;
+			il->instr[j + arity].arity = resultArity;
+			return arity;
+		} else {
+			return 0;
+		}
+	} else {
+		return 0;
+	}
+}
+static uint8_t opop_roll(cff_CharstringIL *il, uint32_t j, int32_t op1, int32_t arity, int32_t op2,
+                         int32_t resultop) {
+	if (j + 1 + arity >= il->length) return 0;
+	cff_CharstringInstruction *current = &(il->instr[j]);
+	cff_CharstringInstruction *nextop = &(il->instr[j + 1 + arity]);
+	if (il_matchop(il, j, op1)                                     // match this operator
+	    && il_matchtype(il, j + 1, j + 1 + arity, IL_ITEM_OPERAND) // match operands
+	    && il_matchop(il, j + 1 + arity, op2)                      // match next operator
+	    && current->arity + nextop->arity <= type2_argument_stack  // stack is not full
+	) {
+		current->type = IL_ITEM_PHANTOM_OPERATOR;
+		nextop->i = resultop;
+		nextop->arity += current->arity;
+		return arity + 1;
+	} else {
+		return 0;
+	}
+}
+static uint8_t hvlineto_roll(cff_CharstringIL *il, uint32_t j) {
+	if (j + 3 >= il->length) return 0;
+	cff_CharstringInstruction *current = &(il->instr[j]);
+	// We will check whether operand <checkdelta> is zero
+	//          ODD     EVEN -- current arity
+	// hlineto   X       Y
+	// vlineto   Y       X
+	uint32_t checkdelta = ((bool)(current->arity & 1) ^ (bool)(current->i == op_vlineto) ? 1 : 2);
+	if ((il_matchop(il, j, op_hlineto) || il_matchop(il, j, op_vlineto)) // a hlineto/vlineto
+	    && il_matchop(il, j + 3, op_rlineto)                             // followed by a lineto
+	    && il_matchtype(il, j + 1, j + 3, IL_ITEM_OPERAND)               // have enough operands
+	    && il->instr[j + checkdelta].d == 0                              // and it is a h/v
+	    && current->arity + 1 <= type2_argument_stack // we have enough stack space
+	) {
+		il->instr[j + checkdelta].type = IL_ITEM_PHANTOM_OPERAND;
+		il->instr[j].type = IL_ITEM_PHANTOM_OPERATOR;
+		il->instr[j + 3].i = current->i;
+		il->instr[j + 3].arity = current->arity + 1;
+		return 3;
+	} else {
+		return 0;
+	}
+}
+static uint8_t hvvhcurve_roll(cff_CharstringIL *il, uint32_t j) {
+	if (!il_matchop(il, j, op_hvcurveto) && !il_matchop(il, j, op_vhcurveto)) return 0;
+	cff_CharstringInstruction *current = &(il->instr[j]);
+	// Exit in case of array not long enough or we have already ended
+	if (j + 7 >= il->length || current->arity & 1) return 0;
+	bool hvcase = (bool)((current->arity >> 2) & 1) ^ (bool)(current->i == op_hvcurveto);
+	// We will check whether operand <checkdelta> is zero
+	//            ODD     EVEN -- current arity divided by 4
+	// hvcurveto   X       Y
+	// vhcurveto   Y       X
+	uint32_t checkdelta1 = hvcase ? 2 : 1;
+	uint32_t checkdelta2 = hvcase ? 5 : 6;
+	if (il_matchop(il, j + 7, op_rrcurveto)                // followed by a curveto
+	    && il_matchtype(il, j + 1, j + 7, IL_ITEM_OPERAND) // have enough operands
+	    && il->instr[j + checkdelta1].d == 0               // and it is a h/v
+	) {
+		if (il->instr[j + checkdelta2].d == 0 && current->arity + 4 <= type2_argument_stack) {
+			// The Standard case
+			il->instr[j + checkdelta1].type = IL_ITEM_PHANTOM_OPERAND;
+			il->instr[j + checkdelta2].type = IL_ITEM_PHANTOM_OPERAND;
+			il->instr[j].type = IL_ITEM_PHANTOM_OPERATOR;
+			il->instr[j + 7].i = current->i;
+			il->instr[j + 7].arity = current->arity + 4;
+			return 7;
+		} else if (current->arity + 5 <= type2_argument_stack) {
+			// The trailing case
+			il->instr[j + checkdelta1].type = IL_ITEM_PHANTOM_OPERAND;
+			il->instr[j].type = IL_ITEM_PHANTOM_OPERATOR;
+			il->instr[j + 7].i = current->i;
+			il->instr[j + 7].arity = current->arity + 5;
+			if (hvcase) {
+				// Swap the last two operands because hvcurveto's trailing operand is in y-x order
+				double t = il->instr[j + 5].d;
+				il->instr[j + 5].d = il->instr[j + 6].d;
+				il->instr[j + 6].d = t;
+			}
+			return 7;
+		} else {
+			return 0;
+		}
+	} else {
+		return 0;
+	}
+}
+static uint8_t hhvvcurve_roll(cff_CharstringIL *il, uint32_t j) {
+	if (!il_matchop(il, j, op_hhcurveto) && !il_matchop(il, j, op_vvcurveto)) return 0;
+	cff_CharstringInstruction *current = &(il->instr[j]);
+	// Exit in case of array not long enough or we have already ended
+	if (j + 7 >= il->length) return 0;
+	bool hh = current->i == op_hhcurveto;
+	uint32_t checkdelta1 = hh ? 2 : 1;
+	uint32_t checkdelta2 = hh ? 6 : 5;
+	if (il_matchop(il, j + 7, op_rrcurveto)                // followed by a curveto
+	    && il_matchtype(il, j + 1, j + 7, IL_ITEM_OPERAND) // have enough operands
+	    && il->instr[j + checkdelta1].d == 0               // and it is a h/v
+	    && il->instr[j + checkdelta2].d == 0               // and it is a h/v
+	    && current->arity + 4 <= type2_argument_stack) {
+		il->instr[j + checkdelta1].type = IL_ITEM_PHANTOM_OPERAND;
+		il->instr[j + checkdelta2].type = IL_ITEM_PHANTOM_OPERAND;
+		il->instr[j].type = IL_ITEM_PHANTOM_OPERATOR;
+		il->instr[j + 7].i = current->i;
+		il->instr[j + 7].arity = current->arity + 4;
+		return 7;
+	} else {
+		return 0;
+	}
+}
+static uint32_t nextstop(cff_CharstringIL *il, uint32_t j) {
+	uint32_t delta = 0;
+	for (; j + delta < il->length && il->instr[j + delta].type == IL_ITEM_OPERAND; delta++)
+		;
+	return delta;
+}
+#define ROLL_FALL(x)                                                                               \
+	if ((r = (x))) return r;
+static uint8_t decideAdvance(cff_CharstringIL *il, uint32_t j, uint8_t optimizeLevel) {
+	uint8_t r = 0;
+	ROLL_FALL(zroll(il, j, op_rlineto, op_hlineto, 0, 1));                 // rlineto -> hlineto
+	ROLL_FALL(zroll(il, j, op_rlineto, op_vlineto, 1, 0));                 // rlineto -> vlineto
+	ROLL_FALL(zroll(il, j, op_rmoveto, op_hmoveto, 0, 1));                 // rmoveto -> hmoveto
+	ROLL_FALL(zroll(il, j, op_rmoveto, op_vmoveto, 1, 0));                 // rmoveto -> vmoveto
+	ROLL_FALL(zroll(il, j, op_rrcurveto, op_hvcurveto, 0, 1, 0, 0, 1, 0)); // rrcurveto->hvcurveto
+	ROLL_FALL(zroll(il, j, op_rrcurveto, op_vhcurveto, 1, 0, 0, 0, 0, 1)); // rrcurveto->vhcurveto
+	ROLL_FALL(zroll(il, j, op_rrcurveto, op_hhcurveto, 0, 1, 0, 0, 0, 1)); // rrcurveto->hhcurveto
+	ROLL_FALL(zroll(il, j, op_rrcurveto, op_vvcurveto, 1, 0, 0, 0, 1, 0)); // rrcurveto->vvcurveto
+	ROLL_FALL(opop_roll(il, j, op_rrcurveto, 6, op_rrcurveto, op_rrcurveto)); // rrcurveto roll
+	ROLL_FALL(opop_roll(il, j, op_rrcurveto, 2, op_rlineto, op_rcurveline));  // rcurveline roll
+	ROLL_FALL(opop_roll(il, j, op_rlineto, 6, op_rrcurveto, op_rlinecurve));  // rlinecurve roll
+	ROLL_FALL(opop_roll(il, j, op_rlineto, 2, op_rlineto, op_rlineto));       // rlineto roll
+	ROLL_FALL(opop_roll(il, j, op_hstemhm, 0, op_hintmask, op_hintmask));     // hintmask roll
+	ROLL_FALL(opop_roll(il, j, op_vstemhm, 0, op_hintmask, op_hintmask));     // hintmask roll
+	ROLL_FALL(opop_roll(il, j, op_hstemhm, 0, op_cntrmask, op_cntrmask));     // cntrmask roll
+	ROLL_FALL(opop_roll(il, j, op_vstemhm, 0, op_cntrmask, op_cntrmask));     // cntrmask roll
+	ROLL_FALL(hvlineto_roll(il, j));  // hlineto-vlineto roll
+	ROLL_FALL(hhvvcurve_roll(il, j)); // hhcurveto-vvcurveto roll
+	ROLL_FALL(hvvhcurve_roll(il, j)); // hvcurveto-vhcurveto roll
+	ROLL_FALL(nextstop(il, j));       // move to next stop for operand match
+	return 1;                         // nothing match
+}
+
+void cff_optimizeIL(cff_CharstringIL *il, const otfcc_Options *options) {
+	if (!options->cff_rollCharString) return;
+	uint32_t j = 0;
+	while (j < il->length) {
+		j += decideAdvance(il, j, options->cff_rollCharString);
+	}
+}
+
+// IL to buffer conversion
+caryll_Buffer *cff_build_IL(cff_CharstringIL *il) {
+	caryll_Buffer *blob = bufnew();
+
+	for (uint16_t j = 0; j < il->length; j++) {
+		switch (il->instr[j].type) {
+			case IL_ITEM_OPERAND: {
+				cff_mergeCS2Operand(blob, il->instr[j].d);
+				break;
+			}
+			case IL_ITEM_OPERATOR: {
+				cff_mergeCS2Operator(blob, il->instr[j].i);
+				break;
+			}
+			case IL_ITEM_SPECIAL: {
+				cff_mergeCS2Special(blob, il->instr[j].i);
+				break;
+			}
+			default:
+				break;
+		}
+	}
+	return blob;
+}
+
+cff_CharstringIL *cff_shrinkIL(cff_CharstringIL *il) {
+	cff_CharstringIL *out;
+	NEW(out);
+	for (uint16_t j = 0; j < il->length; j++) {
+		switch (il->instr[j].type) {
+			case IL_ITEM_OPERAND: {
+				il_push_operand(out, il->instr[j].d);
+				break;
+			}
+			case IL_ITEM_OPERATOR: {
+				il_push_op(out, il->instr[j].i);
+				break;
+			}
+			case IL_ITEM_SPECIAL: {
+				il_push_special(out, il->instr[j].i);
+				break;
+			}
+			default:
+				break;
+		}
+	}
+	return out;
+}
+
+void cff_ILmergeIL(cff_CharstringIL *self, cff_CharstringIL *il) {
+	for (uint16_t j = 0; j < il->length; j++) {
+		switch (il->instr[j].type) {
+			case IL_ITEM_OPERAND: {
+				il_push_operand(self, il->instr[j].d);
+				break;
+			}
+			case IL_ITEM_OPERATOR: {
+				il_push_op(self, il->instr[j].i);
+				break;
+			}
+			case IL_ITEM_SPECIAL: {
+				il_push_special(self, il->instr[j].i);
+				break;
+			}
+			default:
+				break;
+		}
+	}
+}
+
+bool instruction_eq(cff_CharstringInstruction *z1, cff_CharstringInstruction *z2) {
+	if (z1->type == z2->type) {
+		if (z1->type == IL_ITEM_OPERAND || z1->type == IL_ITEM_PHANTOM_OPERAND) {
+			return z1->d == z2->d;
+		} else {
+			return z1->i == z2->i;
+		}
+	} else {
+		return false;
+	}
+}
+
+bool cff_ilEqual(cff_CharstringIL *a, cff_CharstringIL *b) {
+	if (!a || !b) return false;
+	if (a->length != b->length) return false;
+	for (uint32_t j = 0; j < a->length; j++)
+		if (!instruction_eq(a->instr + j, b->instr + j)) { return false; }
+	return true;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,44 @@
+#ifndef CARYLL_cff_CHARSTRING_IL
+#define CARYLL_cff_CHARSTRING_IL
+
+#include "libcff.h"
+#include "otfcc/table/glyf.h"
+
+typedef enum {
+	IL_ITEM_OPERAND,
+	IL_ITEM_OPERATOR,
+	IL_ITEM_SPECIAL,
+	IL_ITEM_PHANTOM_OPERATOR,
+	IL_ITEM_PHANTOM_OPERAND
+} cff_InstructionType;
+
+typedef struct {
+	cff_InstructionType type;
+	arity_t arity;
+	union {
+		double d;  // for type == IL_ITEM_OPERAND, IL_ITEM_PHANTOM_OPERAND
+		int32_t i; // otherwise
+	};
+} cff_CharstringInstruction;
+
+typedef struct {
+	uint32_t length;
+	uint32_t free;
+	cff_CharstringInstruction *instr;
+} cff_CharstringIL;
+
+bool instruction_eq(cff_CharstringInstruction *z1, cff_CharstringInstruction *z2);
+
+// basic ops
+cff_CharstringIL *cff_compileGlyphToIL(glyf_Glyph *g, uint16_t defaultWidth, uint16_t nominalWidth);
+void cff_optimizeIL(cff_CharstringIL *il, const otfcc_Options *options);
+cff_CharstringIL *cff_shrinkIL(cff_CharstringIL *il);
+void cff_ILmergeIL(cff_CharstringIL *self, cff_CharstringIL *il);
+caryll_Buffer *cff_build_IL(cff_CharstringIL *il);
+bool cff_ilEqual(cff_CharstringIL *a, cff_CharstringIL *b);
+
+void il_push_operand(cff_CharstringIL *il, double x);
+void il_push_op(cff_CharstringIL *il, int32_t op);
+void il_push_special(cff_CharstringIL *il, int32_t s);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/libcff.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/libcff.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/libcff.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,164 @@
+#ifndef cff_DATA_TYPES
+#define cff_DATA_TYPES
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "support/util.h"
+
+#include "cff-util.h"
+#include "cff-value.h"
+#include "cff-index.h"
+#include "cff-dict.h"
+#include "cff-charset.h"
+#include "cff-fdselect.h"
+
+// Limits of Type2 CharSrting
+enum {
+	type2_argument_stack = 48,
+	type2_stem_hints = 96,
+	type2_subr_nesting = 10,
+	type2_charstring_len = 65535,
+	type2_max_subrs = 65300,
+	type2_transient_array = 32,
+};
+
+typedef struct {
+	uint8_t major;
+	uint8_t minor;
+	uint8_t hdrSize;
+	uint8_t offSize;
+} cff_Header;
+
+// CFF Encoding Structures
+typedef struct {
+	uint8_t format;
+	uint8_t ncodes;
+	uint8_t *code;
+} cff_EncodingFormat0;
+
+typedef struct {
+	uint8_t first;
+	uint8_t nleft;
+} cff_EncodingRangeFormat1;
+
+typedef struct {
+	uint8_t format;
+	uint8_t nranges;
+	cff_EncodingRangeFormat1 *range1;
+} cff_EncodingFormat1;
+
+typedef struct {
+	uint8_t code;
+	uint16_t glyph;
+} cff_EncodingSupplement;
+
+typedef struct {
+	uint8_t nsup;
+	cff_EncodingSupplement *supplement;
+} cff_EncodingNS;
+
+typedef struct {
+	uint32_t t;
+	union {
+		cff_EncodingFormat0 f0;
+		cff_EncodingFormat1 f1;
+		cff_EncodingNS ns;
+	};
+} cff_Encoding;
+
+// Predefined Encoding Types
+enum {
+	cff_FONT_COMMON,
+	cff_FONT_CID,
+	cff_FONT_MM,
+};
+
+enum {
+	cff_ENC_STANDARD,
+	cff_ENC_EXPERT,
+	cff_ENC_FORMAT0,
+	cff_ENC_FORMAT1,
+	cff_ENC_FORMAT_SUPPLEMENT,
+	cff_ENC_UNSPECED,
+};
+
+typedef struct {
+	cff_Value *stack;
+	cff_Value transient[32];
+	arity_t index;
+	arity_t max;
+	uint8_t stem;
+} cff_Stack;
+
+typedef struct {
+	uint8_t *raw_data;
+	uint32_t raw_length;
+	uint16_t cnt_glyph;
+
+	cff_Header head;
+	cff_Index name;
+	cff_Index top_dict;
+	cff_Index string;
+	cff_Index global_subr;
+
+	cff_Encoding encodings; // offset
+	cff_Charset charsets;   // offset
+	cff_FDSelect fdselect;  // offset
+	cff_Index char_strings; // offset
+	cff_Index font_dict;    // offset
+	cff_Index local_subr;   // offset
+} cff_File;
+
+// Outline builder method table
+typedef struct {
+	void (*setWidth)(void *context, double width);
+	void (*newContour)(void *context);
+	void (*lineTo)(void *context, double x1, double y1);
+	void (*curveTo)(void *context, double x1, double y1, double x2, double y2, double x3, double y3);
+	void (*setHint)(void *context, bool isVertical, double position, double width);
+	void (*setMask)(void *context, bool isContourMask, bool *mask);
+	double (*getrand)(void *context);
+} cff_IOutlineBuilder;
+
+/*
+  CFF -> Compact Font Format
+  CS2 -> Type2 CharString
+*/
+
+extern const char *op_cff_name(uint32_t op);
+extern const char *op_cs2_name(uint32_t op);
+uint8_t cff_getStandardArity(uint32_t op);
+
+sds sdsget_cff_sid(uint16_t idx, cff_Index str);
+
+extern uint32_t cff_decodeCffToken(const uint8_t *start, cff_Value *val);
+extern uint32_t cff_decodeCS2Token(const uint8_t *start, cff_Value *val);
+
+// number, number, float
+extern caryll_Buffer *cff_encodeCffOperator(int32_t val);
+extern caryll_Buffer *cff_encodeCffInteger(int32_t val);
+extern caryll_Buffer *cff_encodeCffFloat(double val);
+
+/*
+  Writer
+*/
+
+extern caryll_Buffer *cff_buildOffset(int32_t val);
+extern caryll_Buffer *cff_buildHeader(void);
+
+void cff_mergeCS2Int(caryll_Buffer *blob, int32_t val);
+void cff_mergeCS2Operator(caryll_Buffer *blob, int32_t val);
+void cff_mergeCS2Operand(caryll_Buffer *blob, double val);
+void cff_mergeCS2Special(caryll_Buffer *blob, uint8_t val);
+
+extern uint8_t cff_parseSubr(uint16_t idx, uint8_t *raw, cff_Index fdarray, cff_FDSelect select, cff_Index *subr);
+void cff_parseOutline(uint8_t *data, uint32_t len, cff_Index gsubr, cff_Index lsubr, cff_Stack *stack, void *outline,
+                      cff_IOutlineBuilder methods, const otfcc_Options *options);
+
+// File
+extern cff_File *cff_openStream(uint8_t *data, uint32_t len, const otfcc_Options *options);
+extern void cff_close(cff_File *file);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,635 @@
+#include "subr.h"
+/**
+Type 2 CharString subroutinizer.
+This program uses SEQUITUR (Nevill-Manning algorithm) to construct a CFG from the input sequence of
+opcodes (in the minimum unit of a operator call. That is, operand* operator special*.)
+Kieffer-Yang optimization is unnecessary, given that in almost all payloads, there are no repeating
+subroutines.
+*/
+
+#ifdef DEBUG
+static int nodesCreated = 0;
+static int nodesRemoved = 0;
+static int rulesCreated = 0;
+static int rulesRemoved = 0;
+#endif
+
+static cff_SubrNode *cff_new_Node() {
+	cff_SubrNode *n;
+	NEW(n);
+	n->rule = NULL;
+	n->terminal = NULL;
+	n->guard = false;
+	n->hard = false;
+	n->prev = NULL;
+	n->next = NULL;
+#ifdef DEBUG
+	nodesCreated += 1;
+#endif
+	return n;
+}
+
+static cff_SubrRule *cff_new_Rule() {
+	cff_SubrRule *r;
+	NEW(r);
+	r->refcount = 0;
+	r->guard = cff_new_Node();
+	r->guard->prev = r->guard;
+	r->guard->next = r->guard;
+	r->guard->terminal = 0;
+	r->guard->guard = true;
+	r->guard->rule = r;
+	r->next = NULL;
+#ifdef DEBUG
+	rulesCreated += 1;
+#endif
+	return r;
+}
+
+static void initSubrGraph(cff_SubrGraph *g) {
+	g->root = cff_new_Rule();
+	g->last = g->root;
+	g->diagramIndex = NULL;
+	g->totalRules = 0;
+	g->totalCharStrings = 0;
+	g->doSubroutinize = false;
+}
+
+static void clean_Node(cff_SubrNode *x) {
+	if (x->rule) { x->rule->refcount -= 1; }
+	x->rule = NULL;
+	buffree(x->terminal);
+	x->terminal = NULL;
+}
+static void delete_Node(cff_SubrNode *x) {
+	if (!x) return;
+	clean_Node(x);
+#ifdef DEBUG
+	nodesRemoved += 1;
+#endif
+	FREE(x);
+}
+
+static void deleteFullRule(cff_SubrRule *r) {
+	if (r->guard) {
+		for (cff_SubrNode *e = r->guard->next; e != r->guard;) {
+			cff_SubrNode *next = e->next;
+			if (e->terminal) buffree(e->terminal);
+			FREE(e);
+#ifdef DEBUG
+			nodesRemoved += 1;
+#endif
+			e = next;
+		}
+		{
+			FREE(r->guard);
+#ifdef DEBUG
+			nodesRemoved += 1;
+#endif
+		}
+	}
+
+	FREE(r);
+#ifdef DEBUG
+	rulesRemoved += 1;
+#endif
+}
+
+static void disposeSubrGraph(cff_SubrGraph *g) {
+	{
+		cff_SubrRule *r = g->root;
+		while (r) {
+			cff_SubrRule *next = r->next;
+			deleteFullRule(r);
+			r = next;
+		}
+	}
+	cff_SubrDiagramIndex *s, *tmp;
+	HASH_ITER(hh, g->diagramIndex, s, tmp) {
+		HASH_DEL(g->diagramIndex, s);
+		FREE(s->key);
+		FREE(s);
+	}
+#ifdef DEBUG
+	fprintf(stderr, "ALLOC: %d >< %d nodes\n", nodesCreated, nodesRemoved);
+	fprintf(stderr, "ALLOC: %d >< %d rules\n", rulesCreated, rulesRemoved);
+#endif
+}
+
+caryll_standardRefType(cff_SubrGraph, cff_iSubrGraph, initSubrGraph, disposeSubrGraph);
+
+// Subroutinizer
+
+static void joinNodes(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n);
+
+static uint8_t *getSingletHashKey(cff_SubrNode *n, size_t *len) {
+	size_t l1;
+	if (n->rule) {
+		l1 = sizeof(n->rule->uniqueIndex);
+	} else {
+		l1 = buflen(n->terminal) * sizeof(uint8_t);
+	}
+
+	*len = 3 + l1 + 1;
+	uint8_t *key;
+	NEW(key, *len);
+	key[0] = '1';
+	key[1] = (n->rule ? '1' : '0');
+	key[2] = '0';
+	key[*len - 1] = 0;
+
+	if (n->rule) {
+		memcpy(key + 3, &(n->rule->uniqueIndex), l1);
+	} else {
+		memcpy(key + 3, n->terminal->data, l1);
+	}
+	return key;
+}
+
+static uint8_t *getDoubletHashKey(cff_SubrNode *n, size_t *len) {
+	size_t l1, l2;
+	if (n->rule) {
+		l1 = sizeof(n->rule->uniqueIndex);
+	} else {
+		l1 = buflen(n->terminal) * sizeof(uint8_t);
+	}
+	if (n->next->rule) {
+		l2 = sizeof(n->next->rule->uniqueIndex);
+	} else {
+		l2 = buflen(n->next->terminal) * sizeof(uint8_t);
+	}
+	*len = 3 + l1 + l2 + 1;
+	uint8_t *key;
+	NEW(key, *len);
+	key[0] = '2';
+	key[1] = (n->rule ? '1' : '0');
+	key[2] = (n->next->rule ? '1' : '0');
+	key[*len - 1] = 0;
+	if (n->rule) {
+		memcpy(key + 3, &(n->rule->uniqueIndex), l1);
+	} else {
+		memcpy(key + 3, n->terminal->data, l1);
+	}
+	if (n->next->rule) {
+		memcpy(key + 3 + l1, &(n->next->rule->uniqueIndex), l2);
+	} else {
+		memcpy(key + 3 + l1, n->next->terminal->data, l2);
+	}
+	return key;
+}
+
+static cff_SubrNode *lastNodeOf(cff_SubrRule *r) {
+	return r->guard->prev;
+}
+
+static cff_SubrNode *copyNode(cff_SubrNode *n) {
+	cff_SubrNode *m = cff_new_Node();
+	if (n->rule) {
+		m->rule = n->rule;
+		m->rule->refcount += 1;
+	} else {
+		m->terminal = bufnew();
+		bufwrite_buf(m->terminal, n->terminal);
+	}
+	m->last = n->last;
+	return m;
+}
+
+// checkNode: check whether node N is shrinkable
+static bool checkDoubletMatch(cff_SubrGraph *g, cff_SubrNode *n);
+
+static void unlinkNode(cff_SubrGraph *g, cff_SubrNode *a) {
+	if (a->hard || a->guard) return;
+	size_t len;
+	uint8_t *key = getDoubletHashKey(a, &len);
+	cff_SubrDiagramIndex *di = NULL;
+	HASH_FIND(hh, g->diagramIndex, key, len, di);
+	if (di && di->start == a) {
+		HASH_DEL(g->diagramIndex, di);
+		FREE(di->key);
+		FREE(di);
+	}
+	FREE(key);
+	key = getSingletHashKey(a, &len);
+	di = NULL;
+	HASH_FIND(hh, g->diagramIndex, key, len, di);
+	if (di && di->start == a) {
+		HASH_DEL(g->diagramIndex, di);
+		FREE(di->key);
+		FREE(di);
+	}
+	FREE(key);
+	return;
+}
+
+static void addDoublet(cff_SubrGraph *g, cff_SubrNode *n) {
+	if (!n || !n->next || n->guard || n->hard || n->next->hard || n->next->guard) return;
+	size_t len;
+	uint8_t *key = getDoubletHashKey(n, &len);
+	cff_SubrDiagramIndex *di = NULL;
+	HASH_FIND(hh, g->diagramIndex, key, len, di);
+	if (!di) {
+		NEW(di);
+		di->arity = 2;
+		di->key = key;
+		di->start = n;
+		HASH_ADD_KEYPTR(hh, g->diagramIndex, key, len, di);
+	} else {
+		di->start = n;
+		FREE(key);
+	}
+}
+static void addSinglet(cff_SubrGraph *g, cff_SubrNode *n) {
+	if (!n || n->guard || n->hard) return;
+	size_t len;
+	uint8_t *key = getSingletHashKey(n, &len);
+	cff_SubrDiagramIndex *di = NULL;
+	HASH_FIND(hh, g->diagramIndex, key, len, di);
+	if (!di) {
+		NEW(di);
+		di->arity = 1;
+		di->key = key;
+		di->start = n;
+		HASH_ADD_KEYPTR(hh, g->diagramIndex, key, len, di);
+	} else {
+		di->start = n;
+		FREE(key);
+	}
+}
+
+static bool identNode(cff_SubrNode *m, cff_SubrNode *n) {
+	if (m->rule)
+		return (m->rule == n->rule);
+	else if (n->rule)
+		return false;
+	else
+		return (m->terminal->size == n->terminal->size &&
+		        strncmp((char *)m->terminal->data, (char *)n->terminal->data, m->terminal->size) == 0);
+}
+static void joinNodes(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n) {
+	if (m->next) {
+		unlinkNode(g, m);
+		if (n->prev && n->next && identNode(n->prev, n) && identNode(n, n->next)) { addDoublet(g, n); }
+		if (m->prev && m->next && identNode(m->prev, m) && identNode(m, m->next)) { addDoublet(g, m->prev); }
+	}
+	m->next = n;
+	n->prev = m;
+}
+static void xInsertNodeAfter(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n) {
+	joinNodes(g, n, m->next);
+	joinNodes(g, m, n);
+}
+static void removeNodeFromGraph(cff_SubrGraph *g, cff_SubrNode *a) {
+	joinNodes(g, a->prev, a->next);
+	if (!a->guard) {
+		unlinkNode(g, a);
+		delete_Node(a);
+	}
+}
+
+static void expandCall(cff_SubrGraph *g, cff_SubrNode *a) {
+	cff_SubrNode *aprev = a->prev;
+	cff_SubrNode *anext = a->next;
+	cff_SubrRule *r = a->rule;
+	cff_SubrNode *r1 = r->guard->next;
+	cff_SubrNode *r2 = r->guard->prev;
+
+	// We should move out [a, a'] from g's diagramIndex
+	unlinkNode(g, a);
+
+	joinNodes(g, aprev, r1);
+	joinNodes(g, r2, anext);
+	addDoublet(g, r2);
+	// make this rule a stub.
+	r->guard->prev = r->guard->next = r->guard;
+	r->refcount -= 1;
+	// remove call node
+	delete_Node(a);
+}
+
+static void substituteDoubletWithRule(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrRule *r) {
+	cff_SubrNode *prev = m->prev;
+	removeNodeFromGraph(g, prev->next);
+	removeNodeFromGraph(g, prev->next);
+	cff_SubrNode *invoke = cff_new_Node();
+	invoke->rule = r;
+	invoke->rule->refcount += 1;
+	xInsertNodeAfter(g, prev, invoke);
+	addDoublet(g, prev);
+	addDoublet(g, invoke);
+	addSinglet(g, invoke);
+
+	if (!checkDoubletMatch(g, prev)) { checkDoubletMatch(g, prev->next); }
+}
+static void substituteSingletWithRule(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrRule *r) {
+	cff_SubrNode *prev = m->prev;
+	removeNodeFromGraph(g, prev->next);
+	cff_SubrNode *invoke = cff_new_Node();
+	invoke->rule = r;
+	invoke->rule->refcount += 1;
+	xInsertNodeAfter(g, prev, invoke);
+	addDoublet(g, prev);
+	addDoublet(g, invoke);
+	addSinglet(g, invoke);
+}
+
+static void processMatchDoublet(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n) {
+	cff_SubrRule *rule = NULL;
+	if (m->prev->guard && m->next->next->guard) {
+		// The match [m, m'] is a rule's full content
+		rule = m->prev->rule;
+		substituteDoubletWithRule(g, n, rule);
+	} else {
+		rule = cff_new_Rule();
+		rule->uniqueIndex = g->totalRules;
+		g->totalRules += 1;
+		g->last->next = rule;
+		g->last = rule;
+		xInsertNodeAfter(g, lastNodeOf(rule), copyNode(m));
+		xInsertNodeAfter(g, lastNodeOf(rule), copyNode(m->next));
+		substituteDoubletWithRule(g, m, rule);
+		substituteDoubletWithRule(g, n, rule);
+		addDoublet(g, rule->guard->next);
+		addSinglet(g, rule->guard->next);
+		addSinglet(g, rule->guard->next->next);
+	}
+
+	if (rule->guard->next->rule && rule->guard->next->rule->refcount == 1) {
+		// The rule is shrinkable.
+		expandCall(g, rule->guard->next);
+	}
+}
+static void processMatchSinglet(cff_SubrGraph *g, cff_SubrNode *m, cff_SubrNode *n) {
+	cff_SubrRule *rule = NULL;
+	if (m->prev->guard && m->next->guard) {
+		// The match [m] is a rule's full content
+		rule = m->prev->rule;
+		substituteSingletWithRule(g, n, rule);
+	} else {
+		// Create a new rule
+		rule = cff_new_Rule();
+		rule->uniqueIndex = g->totalRules;
+		g->totalRules += 1;
+		g->last->next = rule;
+		g->last = rule;
+		xInsertNodeAfter(g, lastNodeOf(rule), copyNode(m));
+		substituteSingletWithRule(g, m, rule);
+		substituteSingletWithRule(g, n, rule);
+		addSinglet(g, rule->guard->next);
+	}
+}
+
+static bool checkDoubletMatch(cff_SubrGraph *g, cff_SubrNode *n) {
+	if (n->guard || n->next->guard || n->hard || n->next->hard) return false;
+	// printf("test "), printNode(n, false), printNode(n->next, true);
+	size_t len;
+	uint8_t *key = getDoubletHashKey(n, &len);
+	cff_SubrDiagramIndex *di = NULL;
+	HASH_FIND(hh, g->diagramIndex, key, len, di);
+	if (!di) {
+		NEW(di);
+		di->arity = 2;
+		di->key = key;
+		di->start = n;
+		HASH_ADD_KEYPTR(hh, g->diagramIndex, key, len, di);
+		return false;
+	} else if (di->arity == 2 && di->start != n && !di->start->guard && !di->start->next->guard) {
+		FREE(key);
+		processMatchDoublet(g, di->start, n);
+		return true;
+	} else {
+		FREE(key);
+		return true;
+	}
+}
+
+static bool checkSingletMatch(cff_SubrGraph *g, cff_SubrNode *n) {
+	if (n->guard || n->hard) return false;
+	size_t len;
+	uint8_t *key = getSingletHashKey(n, &len);
+	cff_SubrDiagramIndex *di = NULL;
+	HASH_FIND(hh, g->diagramIndex, key, len, di);
+	if (!di) {
+		NEW(di);
+		di->arity = 1;
+		di->key = key;
+		di->start = n;
+		HASH_ADD_KEYPTR(hh, g->diagramIndex, key, len, di);
+		return false;
+	} else if (di->arity == 1 && di->start != n && !di->start->guard) {
+		FREE(key);
+		processMatchSinglet(g, di->start, n);
+		return true;
+	} else {
+		FREE(key);
+		return false;
+	}
+}
+
+static void appendNodeToGraph(cff_SubrGraph *g, cff_SubrNode *n) {
+	cff_SubrNode *last = lastNodeOf(g->root);
+	xInsertNodeAfter(g, last, n);
+	if (g->doSubroutinize) {
+		if (!checkDoubletMatch(g, last)) {
+			if (buflen(n->terminal) > 15) checkSingletMatch(g, n);
+		}
+	}
+}
+
+void cff_insertILToGraph(cff_SubrGraph *g, cff_CharstringIL *il) {
+	caryll_Buffer *blob = bufnew();
+	bool flush = false;
+	bool last = false;
+	for (uint32_t j = 0; j < il->length; j++) {
+		switch (il->instr[j].type) {
+			case IL_ITEM_OPERAND: {
+				if (flush) {
+					cff_SubrNode *n = cff_new_Node();
+					n->rule = NULL;
+					n->terminal = blob;
+					n->last = last;
+					appendNodeToGraph(g, n);
+					blob = bufnew();
+					flush = false;
+				}
+				cff_mergeCS2Operand(blob, il->instr[j].d);
+				break;
+			}
+
+			case IL_ITEM_OPERATOR: {
+				cff_mergeCS2Operator(blob, il->instr[j].i);
+				if (il->instr[j].i == op_endchar) { last = true; }
+				flush = true;
+				break;
+			}
+			case IL_ITEM_SPECIAL: {
+				cff_mergeCS2Special(blob, il->instr[j].i);
+				flush = true;
+				break;
+			}
+			default:
+				break;
+		}
+	}
+	if (blob->size) {
+		cff_SubrNode *n = cff_new_Node();
+		n->rule = NULL;
+		n->last = last;
+		n->terminal = blob;
+		appendNodeToGraph(g, n);
+	}
+	{
+		blob = bufnew();
+		cff_SubrNode *n = cff_new_Node();
+		n->rule = NULL;
+		n->terminal = blob;
+		n->hard = true;
+		appendNodeToGraph(g, n);
+		g->totalCharStrings += 1;
+	}
+}
+
+static void cff_statHeight(cff_SubrRule *r, uint32_t height) {
+	if (height > r->height) r->height = height;
+	// Stat the heights bottom-up.
+	uint32_t effectiveLength = 0;
+	for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+		if (e->rule) {
+			cff_statHeight(e->rule, height + 1);
+			effectiveLength += 4;
+		} else {
+			effectiveLength += e->terminal->size;
+		}
+	}
+	r->effectiveLength = effectiveLength;
+}
+
+static void numberASubroutine(cff_SubrRule *r, uint32_t *current) {
+	if (r->numbered) return;
+	if (r->height >= type2_subr_nesting) return;
+	if ((r->effectiveLength - 4) * (r->refcount - 1) - 4 <= 0) return;
+	r->number = *current;
+	(*current)++;
+	r->numbered = true;
+	for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+		if (e->rule) { numberASubroutine(e->rule, current); }
+	}
+}
+static uint32_t cff_numberSubroutines(cff_SubrGraph *g) {
+	uint32_t current = 0;
+	for (cff_SubrNode *e = g->root->guard->next; e != g->root->guard; e = e->next) {
+		if (e->rule) numberASubroutine(e->rule, &current);
+	}
+	return current;
+}
+
+static inline int32_t subroutineBias(int32_t cnt) {
+	if (cnt < 1240)
+		return 107;
+	else if (cnt < 33900)
+		return 1131;
+	else
+		return 32768;
+}
+
+static bool endsWithEndChar(cff_SubrRule *rule) {
+	cff_SubrNode *node = lastNodeOf(rule);
+	if (node->terminal) {
+		return node->last;
+	} else {
+		return endsWithEndChar(node->rule);
+	}
+}
+
+static void serializeNodeToBuffer(cff_SubrNode *node, caryll_Buffer *buf, caryll_Buffer *gsubrs, uint32_t maxGSubrs,
+                                  caryll_Buffer *lsubrs, uint32_t maxLSubrs) {
+	if (node->rule) {
+		if (node->rule->numbered && node->rule->number < maxLSubrs + maxGSubrs &&
+		    node->rule->height < type2_subr_nesting) {
+			// A call.
+			caryll_Buffer *target;
+			if (node->rule->number < maxLSubrs) {
+				int32_t stacknum = node->rule->number - subroutineBias(maxLSubrs);
+				target = lsubrs + node->rule->number;
+				cff_mergeCS2Int(buf, stacknum);
+				cff_mergeCS2Operator(buf, op_callsubr);
+			} else {
+				int32_t stacknum = node->rule->number - maxLSubrs - subroutineBias(maxGSubrs);
+				target = gsubrs + (node->rule->number - maxLSubrs);
+				cff_mergeCS2Int(buf, stacknum);
+				cff_mergeCS2Operator(buf, op_callgsubr);
+			}
+			cff_SubrRule *r = node->rule;
+			if (!r->printed) {
+				r->printed = true;
+				for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+					serializeNodeToBuffer(e, target, gsubrs, maxGSubrs, lsubrs, maxLSubrs);
+				}
+				if (!endsWithEndChar(r)) { cff_mergeCS2Operator(target, op_return); }
+			}
+		} else {
+			// A call, but invalid
+			// Inline its code.
+			cff_SubrRule *r = node->rule;
+			for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+				serializeNodeToBuffer(e, buf, gsubrs, maxGSubrs, lsubrs, maxLSubrs);
+			}
+		}
+	} else {
+		bufwrite_buf(buf, node->terminal);
+	}
+}
+
+static caryll_Buffer *from_array(void *_context, uint32_t j) {
+	caryll_Buffer *context = (caryll_Buffer *)_context;
+	caryll_Buffer *blob = bufnew();
+	bufwrite_buf(blob, context + j);
+	return blob;
+}
+void cff_ilGraphToBuffers(cff_SubrGraph *g, caryll_Buffer **s, caryll_Buffer **gs, caryll_Buffer **ls,
+                          const otfcc_Options *options) {
+	cff_statHeight(g->root, 0);
+	uint32_t maxSubroutines = cff_numberSubroutines(g);
+	logProgress("[libcff] Total %d subroutines extracted.", maxSubroutines);
+	uint32_t maxLSubrs = maxSubroutines;
+	uint32_t maxGSubrs = 0;
+	{
+		// balance
+		if (maxLSubrs > type2_max_subrs) {
+			maxLSubrs = type2_max_subrs;
+			maxGSubrs = maxSubroutines - maxLSubrs;
+		}
+		if (maxGSubrs > type2_max_subrs) { maxGSubrs = type2_max_subrs; }
+		uint32_t total = maxLSubrs + maxGSubrs;
+		maxLSubrs = total / 2;
+		maxGSubrs = total - maxLSubrs;
+	}
+	caryll_Buffer *charStrings, *gsubrs, *lsubrs;
+	NEW(charStrings, g->totalCharStrings + 1);
+	NEW(lsubrs, maxLSubrs + 1);
+	NEW(gsubrs, maxGSubrs + 1);
+	uint32_t j = 0;
+	cff_SubrRule *r = g->root;
+	for (cff_SubrNode *e = r->guard->next; e != r->guard; e = e->next) {
+		serializeNodeToBuffer(e, charStrings + j, gsubrs, maxGSubrs, lsubrs, maxLSubrs);
+		if (!e->rule && e->terminal && e->hard) { j++; }
+	}
+
+	cff_Index *is = cff_iIndex.fromCallback(charStrings, g->totalCharStrings, from_array);
+	cff_Index *igs = cff_iIndex.fromCallback(gsubrs, maxGSubrs, from_array);
+	cff_Index *ils = cff_iIndex.fromCallback(lsubrs, maxLSubrs, from_array);
+
+	for (uint32_t j = 0; j < g->totalCharStrings; j++) {
+		FREE((charStrings + j)->data);
+	}
+	for (uint32_t j = 0; j < maxGSubrs; j++) {
+		FREE((gsubrs + j)->data);
+	}
+	for (uint32_t j = 0; j < maxLSubrs; j++) {
+		FREE((lsubrs + j)->data);
+	}
+	FREE(charStrings), FREE(gsubrs), FREE(lsubrs);
+
+	*s = cff_iIndex.build(is), *gs = cff_iIndex.build(igs), *ls = cff_iIndex.build(ils);
+	cff_iIndex.free(is), cff_iIndex.free(igs), cff_iIndex.free(ils);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/subr.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,55 @@
+#ifndef CARYLL_cff_SUBR_H
+#define CARYLL_cff_SUBR_H
+
+#include "libcff.h"
+#include "charstring-il.h"
+
+typedef struct __cff_SubrRule cff_SubrRule;
+typedef struct __cff_SubrNode cff_SubrNode;
+
+struct __cff_SubrNode {
+	cff_SubrNode *prev;
+	cff_SubrRule *rule;
+	OWNING cff_SubrNode *next;
+	OWNING caryll_Buffer *terminal;
+	bool hard;
+	bool guard;
+	bool last;
+};
+
+struct __cff_SubrRule {
+	bool printed;
+	bool numbered;
+	uint32_t number;
+	uint32_t height;
+	uint32_t uniqueIndex;
+	uint16_t cffIndex;
+	uint32_t refcount;
+	uint32_t effectiveLength;
+	OWNING cff_SubrNode *guard;
+	OWNING cff_SubrRule *next;
+};
+
+typedef struct {
+	uint8_t arity;
+	uint8_t *key;
+	cff_SubrNode *start;
+	UT_hash_handle hh;
+} cff_SubrDiagramIndex;
+
+typedef struct {
+	OWNING cff_SubrRule *root;
+	cff_SubrRule *last;
+	cff_SubrDiagramIndex *diagramIndex;
+	uint32_t totalRules;
+	uint32_t totalCharStrings;
+	bool doSubroutinize;
+} cff_SubrGraph;
+
+extern caryll_RefElementInterface(cff_SubrGraph) cff_iSubrGraph;
+
+void cff_insertILToGraph(cff_SubrGraph *g, cff_CharstringIL *il);
+void cff_ilGraphToBuffers(cff_SubrGraph *g, caryll_Buffer **s, caryll_Buffer **gs, caryll_Buffer **ls,
+                          const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/logger.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/logger.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/logger/logger.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,171 @@
+#include "support/util.h"
+#include "otfcc/logger.h"
+
+typedef struct Logger {
+	otfcc_ILogger vtable;
+	void *target;
+	uint16_t level;
+	uint16_t lastLoggedLevel;
+	uint16_t levelCap;
+	sds *indents;
+	uint8_t verbosityLimit;
+} Logger;
+
+const char *otfcc_LoggerTypeNames[3] = {"[ERROR]", "[WARNING]", "[NOTE]"};
+
+static void loggerIndent(otfcc_ILogger *_self, const char *segment) {
+	((otfcc_ILogger *)_self)->indentSDS(_self, sdsnew(segment));
+}
+static void loggerIndentSDS(otfcc_ILogger *_self, MOVE sds segment) {
+	Logger *self = (Logger *)_self;
+	uint8_t newLevel = self->level + 1;
+	if (newLevel > self->levelCap) {
+		self->levelCap += self->levelCap / 2 + 1;
+		RESIZE(self->indents, self->levelCap);
+	}
+	self->level++;
+	self->indents[self->level - 1] = segment;
+}
+
+static void loggerDedent(otfcc_ILogger *_self) {
+	Logger *self = (Logger *)_self;
+	if (!self->level) return;
+	sdsfree(self->indents[self->level - 1]);
+	self->level -= 1;
+	if (self->level < self->lastLoggedLevel) { self->lastLoggedLevel = self->level; }
+}
+static void loggerFinish(otfcc_ILogger *self) {
+	self->logSDS(self, log_vl_progress + ((Logger *)self)->level, log_type_progress, sdsnew("Finish"));
+	self->dedent(self);
+}
+static void loggerStart(otfcc_ILogger *self, const char *segment) {
+	self->indentSDS(self, sdsnew(segment));
+	self->logSDS(self, log_vl_progress + ((Logger *)self)->level, log_type_progress, sdsnew("Begin"));
+}
+static void loggerStartSDS(otfcc_ILogger *self, MOVE sds segment) {
+	self->indentSDS(self, segment);
+	self->logSDS(self, log_vl_progress + ((Logger *)self)->level, log_type_progress, sdsnew("Begin"));
+}
+static void loggerLog(otfcc_ILogger *self, uint8_t verbosity, otfcc_LoggerType type, const char *data) {
+	self->logSDS(self, verbosity, type, sdsnew(data));
+}
+
+static void loggerLogSDS(otfcc_ILogger *_self, uint8_t verbosity, otfcc_LoggerType type, MOVE sds data) {
+	Logger *self = (Logger *)_self;
+	sds demand = sdsempty();
+	for (uint16_t level = 0; level < self->level; level++) {
+		if (level < self->lastLoggedLevel - 1) {
+			for (size_t j = 0; j < sdslen(self->indents[level]); j++) {
+				demand = sdscat(demand, " ");
+			}
+			if (level < self->lastLoggedLevel - 2) {
+				demand = sdscat(demand, " | ");
+			} else {
+				demand = sdscat(demand, " |-");
+			}
+		} else {
+			demand = sdscatfmt(demand, "%S : ", self->indents[level]);
+		}
+	}
+	if (type < 3) {
+		demand = sdscatfmt(demand, "%s %S", otfcc_LoggerTypeNames[type], data);
+	} else {
+		demand = sdscatfmt(demand, "%S", data);
+	}
+	sdsfree(data);
+	if (verbosity <= self->verbosityLimit) {
+		_self->getTarget(_self)->push(self->target, demand);
+		self->lastLoggedLevel = self->level;
+	} else {
+		sdsfree(demand);
+	}
+}
+
+static otfcc_ILoggerTarget *loggerGetTarget(otfcc_ILogger *_self) {
+	Logger *self = (Logger *)_self;
+	return (otfcc_ILoggerTarget *)self->target;
+}
+
+static void loggerSetVerbosity(otfcc_ILogger *_self, uint8_t verbosity) {
+	Logger *self = (Logger *)_self;
+	self->verbosityLimit = verbosity;
+}
+
+static INLINE void loggerDispose(otfcc_ILogger *_self) {
+	Logger *self = (Logger *)_self;
+	if (!self) return;
+	otfcc_ILoggerTarget *target = _self->getTarget(_self);
+	target->dispose(target);
+	for (uint16_t level = 0; level < self->level; level++) {
+		sdsfree(self->indents[level]);
+	}
+	FREE(self->indents);
+	FREE(self);
+}
+
+const otfcc_ILogger VTABLE_LOGGER = {.dispose = loggerDispose,
+                                     .indent = loggerIndent,
+                                     .indentSDS = loggerIndentSDS,
+                                     .start = loggerStart,
+                                     .startSDS = loggerStartSDS,
+                                     .log = loggerLog,
+                                     .logSDS = loggerLogSDS,
+                                     .dedent = loggerDedent,
+                                     .finish = loggerFinish,
+                                     .getTarget = loggerGetTarget,
+                                     .setVerbosity = loggerSetVerbosity};
+
+otfcc_ILogger *otfcc_newLogger(otfcc_ILoggerTarget *target) {
+	Logger *logger;
+	NEW(logger);
+	logger->target = target;
+	logger->vtable = VTABLE_LOGGER;
+	return (otfcc_ILogger *)logger;
+}
+
+// STDERR logger target
+
+typedef struct StderrTarget { otfcc_ILoggerTarget vtable; } StderrTarget;
+
+static void stderrTargetDispose(otfcc_ILoggerTarget *_self) {
+	StderrTarget *self = (StderrTarget *)_self;
+	if (!self) return;
+	FREE(self);
+}
+
+static void stderrTargetPush(otfcc_ILoggerTarget *_self, MOVE sds data) {
+	fprintf(stderr, "%s", data);
+	if (data[sdslen(data) - 1] != '\n') fprintf(stderr, "\n");
+	sdsfree(data);
+}
+
+const otfcc_ILoggerTarget VTABLE_STDERR_TARGET = {.dispose = stderrTargetDispose, .push = stderrTargetPush};
+
+otfcc_ILoggerTarget *otfcc_newStdErrTarget() {
+	StderrTarget *target;
+	NEW(target);
+	target->vtable = VTABLE_STDERR_TARGET;
+	return (otfcc_ILoggerTarget *)target;
+}
+
+// Empty logger target
+
+typedef struct EmptyTarget { otfcc_ILoggerTarget vtable; } EmptyTarget;
+static void emptyTargetDispose(otfcc_ILoggerTarget *_self) {
+	StderrTarget *self = (StderrTarget *)_self;
+	if (!self) return;
+	FREE(self);
+}
+
+static void emptyTargetPush(otfcc_ILoggerTarget *_self, MOVE sds data) {
+	sdsfree(data);
+}
+
+const otfcc_ILoggerTarget VTABLE_EMPTY_TARGET = {.dispose = emptyTargetDispose, .push = emptyTargetPush};
+
+otfcc_ILoggerTarget *otfcc_newEmptyTarget() {
+	StderrTarget *target;
+	NEW(target);
+	target->vtable = VTABLE_EMPTY_TARGET;
+	return (otfcc_ILoggerTarget *)target;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/otf-reader.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/otf-reader.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/otf-reader.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,91 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+
+#include "unconsolidate.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static otfcc_font_subtype decideFontSubtypeOTF(otfcc_SplineFontContainer *sfnt, uint32_t index) {
+	otfcc_Packet packet = sfnt->packets[index];
+	FOR_TABLE_SILENT(OTFCC_CHR('C','F','F',' '), table) {
+		return FONTTYPE_CFF;
+	}
+	return FONTTYPE_TTF;
+}
+
+static otfcc_Font *readOtf(void *_sfnt, uint32_t index, const otfcc_Options *options) {
+	otfcc_SplineFontContainer *sfnt = (otfcc_SplineFontContainer *)_sfnt;
+	if (sfnt->count - 1 < index) {
+		return NULL;
+	} else {
+		otfcc_Font *font = otfcc_iFont.create();
+		otfcc_Packet packet = sfnt->packets[index];
+		font->subtype = decideFontSubtypeOTF(sfnt, index);
+		font->fvar = otfcc_readFvar(packet, options);
+		font->head = otfcc_readHead(packet, options);
+		font->maxp = otfcc_readMaxp(packet, options);
+		font->name = otfcc_readName(packet, options);
+		font->meta = otfcc_readMeta(packet, options);
+		font->OS_2 = otfcc_readOS_2(packet, options);
+		font->post = otfcc_readPost(packet, options);
+		font->hhea = otfcc_readHhea(packet, options);
+		font->cmap = otfcc_readCmap(packet, options);
+		if (font->subtype == FONTTYPE_TTF) {
+			font->hmtx = otfcc_readHmtx(packet, options, font->hhea, font->maxp);
+			font->vhea = otfcc_readVhea(packet, options);
+			if (font->vhea) font->vmtx = otfcc_readVmtx(packet, options, font->vhea, font->maxp);
+			font->fpgm = otfcc_readFpgmPrep(packet, options, OTFCC_CHR('f','p','g','m'));
+			font->prep = otfcc_readFpgmPrep(packet, options, OTFCC_CHR('p','r','e','p'));
+			font->cvt_ = otfcc_readCvt(packet, options, OTFCC_CHR('c','v','t',' '));
+			font->gasp = otfcc_readGasp(packet, options);
+			font->VDMX = otfcc_readVDMX(packet, options);
+			font->LTSH = otfcc_readLTSH(packet, options);
+
+			GlyfIOContext ctx = {.locaIsLong = font->head->indexToLocFormat,
+			                     .numGlyphs = font->maxp->numGlyphs,
+			                     .nPhantomPoints = 4, // Since MS rasterizer v1.7,
+			                                          // it would always add 4 phantom points
+			                     .fvar = font->fvar};
+			font->glyf = otfcc_readGlyf(packet, options, &ctx);
+		} else {
+			table_CFFAndGlyf cffpr = otfcc_readCFFAndGlyfTables(packet, options, font->head);
+			font->CFF_ = cffpr.meta;
+			font->glyf = cffpr.glyphs;
+			font->vhea = otfcc_readVhea(packet, options);
+			if (font->vhea) {
+				font->vmtx = otfcc_readVmtx(packet, options, font->vhea, font->maxp);
+				font->VORG = otfcc_readVORG(packet, options);
+			}
+		}
+		if (font->glyf) {
+			font->GSUB = otfcc_readOtl(packet, options, OTFCC_CHR('G','S','U','B'), font->glyf->length);
+			font->GPOS = otfcc_readOtl(packet, options, OTFCC_CHR('G','P','O','S'), font->glyf->length);
+			font->GDEF = otfcc_readGDEF(packet, options);
+		}
+		font->BASE = otfcc_readBASE(packet, options);
+
+		// Color font
+		font->CPAL = otfcc_readCPAL(packet, options);
+		font->COLR = otfcc_readCOLR(packet, options);
+		font->SVG_ = otfcc_readSVG(packet, options);
+
+		// VTT TSI entries
+		font->TSI_01 = otfcc_readTSI(packet, options, OTFCC_CHR('T','S','I','0'), OTFCC_CHR('T','S','I','1'));
+		font->TSI_23 = otfcc_readTSI(packet, options, OTFCC_CHR('T','S','I','2'), OTFCC_CHR('T','S','I','3'));
+		font->TSI5 = otfcc_readTSI5(packet, options);
+
+		otfcc_unconsolidateFont(font, options);
+		return font;
+	}
+}
+static INLINE void freeReader(otfcc_IFontBuilder *self) {
+	free(self);
+}
+otfcc_IFontBuilder *otfcc_newOTFReader() {
+	otfcc_IFontBuilder *reader;
+	NEW(reader);
+	reader->read = readOtf;
+	reader->free = freeReader;
+	return reader;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,399 @@
+#include "unconsolidate.h"
+#include "support/util.h"
+#include "support/aglfn/aglfn.h"
+#include "support/sha1/sha1.h"
+
+typedef struct {
+	uint8_t hash[SHA1_BLOCK_SIZE];
+} GlyphHash;
+static void hashVQS(caryll_Buffer *buf, vq_Segment s) {
+	bufwrite8(buf, s.type);
+	switch (s.type) {
+		case VQ_STILL:
+			bufwrite32b(buf, otfcc_to_fixed(s.val.still));
+			break;
+		case VQ_DELTA:
+			bufwrite32b(buf, otfcc_to_fixed(s.val.delta.quantity));
+			bufwrite32b(buf, (uint32_t)s.val.delta.region->dimensions);
+			for (size_t j = 0; j < s.val.delta.region->dimensions; j++) {
+				const vq_AxisSpan *span = &s.val.delta.region->spans[j];
+				bufwrite32b(buf, otfcc_to_f2dot14(span->start));
+				bufwrite32b(buf, otfcc_to_f2dot14(span->peak));
+				bufwrite32b(buf, otfcc_to_f2dot14(span->end));
+			}
+	}
+}
+
+static void hashVQ(caryll_Buffer *buf, VQ x) {
+	bufwrite32b(buf, otfcc_to_fixed(x.kernel));
+	bufwrite32b(buf, (uint32_t)x.shift.length);
+	for (size_t j = 0; j < x.shift.length; j++) {
+		hashVQS(buf, x.shift.items[j]);
+	}
+}
+
+static GlyphHash nameGlyphByHash(glyf_Glyph *g, table_glyf *glyf) {
+	caryll_Buffer *buf = bufnew();
+	bufwrite8(buf, 'H');
+	hashVQ(buf, g->advanceWidth);
+	bufwrite8(buf, 'h');
+	hashVQ(buf, g->horizontalOrigin);
+	bufwrite8(buf, 'V');
+	hashVQ(buf, g->advanceHeight);
+	bufwrite8(buf, 'v');
+	hashVQ(buf, g->verticalOrigin);
+	// contours
+	bufwrite8(buf, 'C');
+	bufwrite8(buf, '(');
+	for (shapeid_t j = 0; j < g->contours.length; j++) {
+		bufwrite8(buf, '(');
+		glyf_Contour *c = &g->contours.items[j];
+		for (shapeid_t k = 0; k < c->length; k++) {
+			hashVQ(buf, c->items[k].x);
+			hashVQ(buf, c->items[k].y);
+			bufwrite8(buf, c->items[k].onCurve ? 1 : 0);
+		}
+		bufwrite8(buf, ')');
+	}
+	bufwrite8(buf, ')');
+	// references
+	bufwrite8(buf, 'R');
+	bufwrite8(buf, '(');
+	for (shapeid_t j = 0; j < g->references.length; j++) {
+		glyf_ComponentReference *r = &g->references.items[j];
+		GlyphHash h = nameGlyphByHash(glyf->items[r->glyph.index], glyf);
+		bufwrite_bytes(buf, SHA1_BLOCK_SIZE, h.hash);
+		hashVQ(buf, r->x);
+		hashVQ(buf, r->y);
+		bufwrite32b(buf, otfcc_to_f2dot14(r->a));
+		bufwrite32b(buf, otfcc_to_f2dot14(r->b));
+		bufwrite32b(buf, otfcc_to_f2dot14(r->c));
+		bufwrite32b(buf, otfcc_to_f2dot14(r->d));
+	}
+	bufwrite8(buf, ')');
+	// stemH, stemV
+	bufwrite8(buf, 's'), bufwrite8(buf, 'H');
+	bufwrite8(buf, '(');
+	for (shapeid_t j = 0; j < g->stemH.length; j++) {
+		bufwrite32b(buf, otfcc_to_fixed(g->stemH.items[j].position));
+		bufwrite32b(buf, otfcc_to_fixed(g->stemH.items[j].width));
+	}
+	bufwrite8(buf, ')');
+	bufwrite8(buf, 's'), bufwrite8(buf, 'V');
+	bufwrite8(buf, '(');
+	for (shapeid_t j = 0; j < g->stemV.length; j++) {
+		bufwrite32b(buf, otfcc_to_fixed(g->stemV.items[j].position));
+		bufwrite32b(buf, otfcc_to_fixed(g->stemV.items[j].width));
+	}
+	bufwrite8(buf, ')');
+	// hintmask, contourmask
+	bufwrite8(buf, 'm'), bufwrite8(buf, 'H');
+	bufwrite8(buf, '(');
+	for (shapeid_t j = 0; j < g->hintMasks.length; j++) {
+		bufwrite16b(buf, g->hintMasks.items[j].contoursBefore);
+		bufwrite16b(buf, g->hintMasks.items[j].pointsBefore);
+		for (shapeid_t k = 0; k < g->stemH.length; k++) {
+			bufwrite8(buf, g->hintMasks.items[j].maskH[k]);
+		}
+		for (shapeid_t k = 0; k < g->stemV.length; k++) {
+			bufwrite8(buf, g->hintMasks.items[j].maskV[k]);
+		}
+	}
+	bufwrite8(buf, ')');
+	bufwrite8(buf, 'm'), bufwrite8(buf, 'C');
+	bufwrite8(buf, '(');
+	for (shapeid_t j = 0; j < g->contourMasks.length; j++) {
+		bufwrite16b(buf, g->contourMasks.items[j].contoursBefore);
+		bufwrite16b(buf, g->contourMasks.items[j].pointsBefore);
+		for (shapeid_t k = 0; k < g->stemH.length; k++) {
+			bufwrite8(buf, g->contourMasks.items[j].maskH[k]);
+		}
+		for (shapeid_t k = 0; k < g->stemV.length; k++) {
+			bufwrite8(buf, g->contourMasks.items[j].maskV[k]);
+		}
+	}
+	bufwrite8(buf, ')');
+	// instructions
+	bufwrite8(buf, 'I');
+	bufwrite32b(buf, g->instructionsLength);
+	bufwrite_bytes(buf, g->instructionsLength, g->instructions);
+	// Generate SHA1
+	SHA1_CTX ctx;
+	uint8_t hash[SHA1_BLOCK_SIZE];
+	sha1_init(&ctx);
+	sha1_update(&ctx, buf->data, buflen(buf));
+	sha1_final(&ctx, hash);
+	GlyphHash h;
+	for (uint16_t j = 0; j < SHA1_BLOCK_SIZE; j++) {
+		h.hash[j] = hash[j];
+	}
+	buffree(buf);
+	return h;
+}
+
+// Unconsolidation: Remove redundent data and de-couple internal data
+// It does these things:
+//   1. Merge hmtx data into glyf
+//   2. Replace all glyph IDs into glyph names. Note all glyph references with
+//      same name whare one unique string entity stored in font->glyph_order.
+//      (Separate?)
+static otfcc_GlyphOrder *createGlyphOrder(otfcc_Font *font, const otfcc_Options *options) {
+	otfcc_GlyphOrder *glyph_order = GlyphOrder.create();
+
+	glyphid_t numGlyphs = font->glyf->length;
+	sds prefix;
+	if (options->glyph_name_prefix) {
+		prefix = sdsnew(options->glyph_name_prefix);
+	} else {
+		prefix = sdsempty();
+	}
+
+	// pass 1: Map to existing glyph names
+	for (glyphid_t j = 0; j < numGlyphs; j++) {
+		glyf_Glyph *g = font->glyf->items[j];
+		if (options->name_glyphs_by_hash) { // name by hash
+			GlyphHash h = nameGlyphByHash(g, font->glyf);
+			sds gname = sdsempty();
+			for (uint16_t j = 0; j < SHA1_BLOCK_SIZE; j++) {
+				if (!(j % 4) && (j / 4)) {
+					gname = sdscatprintf(gname, "-%02X", h.hash[j]);
+				} else {
+					gname = sdscatprintf(gname, "%02X", h.hash[j]);
+				}
+			}
+			if (GlyphOrder.lookupName(glyph_order, gname)) {
+				// found duplicate glyph
+				glyphid_t n = 2;
+				bool stillIn = false;
+				do {
+					if (stillIn) n += 1;
+					sds newname = sdscatprintf(sdsempty(), "%s-%s%d", gname, prefix, n);
+					stillIn = GlyphOrder.lookupName(glyph_order, newname);
+					sdsfree(newname);
+				} while (stillIn);
+				sds newname = sdscatprintf(sdsempty(), "%s-%s%d", gname, prefix, n);
+				sds sharedName = GlyphOrder.setByGID(glyph_order, j, newname);
+				if (g->name) sdsfree(g->name);
+				g->name = sdsdup(sharedName);
+				sdsfree(gname);
+			} else {
+				sds sharedName = GlyphOrder.setByGID(glyph_order, j, gname);
+				if (g->name) sdsfree(g->name);
+				g->name = sdsdup(sharedName);
+			}
+		} else if (options->ignore_glyph_order || options->name_glyphs_by_gid) {
+			// ignore built-in names
+			// pass
+		} else if (g->name) {
+			sds gname = sdscatprintf(sdsempty(), "%s%s", prefix, g->name);
+			sds sharedName = GlyphOrder.setByGID(glyph_order, j, gname);
+			if (g->name) sdsfree(g->name);
+			g->name = sdsdup(sharedName);
+		}
+	}
+
+	// pass 2: Map to `post` names
+	if (font->post != NULL && font->post->post_name_map != NULL && !options->ignore_glyph_order &&
+	    !options->name_glyphs_by_gid) {
+		otfcc_GlyphOrderEntry *s, *tmp;
+		HASH_ITER(hhID, font->post->post_name_map->byGID, s, tmp) {
+			sds gname = sdscatprintf(sdsempty(), "%s%s", prefix, s->name);
+			GlyphOrder.setByGID(glyph_order, s->gid, gname);
+		}
+	}
+
+	// pass 3: Map to AGLFN & Unicode
+	if (font->cmap && !options->name_glyphs_by_gid) {
+		otfcc_GlyphOrder *aglfn = GlyphOrder.create();
+		aglfn_setupNames(aglfn);
+
+		cmap_Entry *s;
+		foreach_hash(s, font->cmap->unicodes) if (s->glyph.index > 0) {
+			sds name = NULL;
+			if (s->unicode > 0 && s->unicode < 0xFFFF) {
+				GlyphOrder.nameAField_Shared(aglfn, s->unicode, &name);
+			}
+			if (name == NULL) {
+				name = sdscatprintf(sdsempty(), "%suni%04X", prefix, s->unicode);
+			} else {
+				name = sdscatprintf(sdsempty(), "%s%s", prefix, name);
+			}
+			GlyphOrder.setByGID(glyph_order, s->glyph.index, name);
+		}
+
+		GlyphOrder.free(aglfn);
+	}
+
+	// pass 4 : Map to GID
+	for (glyphid_t j = 0; j < numGlyphs; j++) {
+		sds name;
+		if (j > 1) {
+			name = sdscatfmt(sdsempty(), "%sglyph%u", prefix, j);
+		} else if (j == 1) {
+			// GID 1 may often be ".null"
+			if (font->glyf->items[1] && !font->glyf->items[1]->contours.length &&
+			    !font->glyf->items[1]->references.length) {
+				name = sdscatfmt(sdsempty(), "%s.null", prefix);
+			} else {
+				name = sdscatfmt(sdsempty(), "%sglyph%u", prefix, j);
+			}
+		} else {
+			name = sdscatfmt(sdsempty(), "%s.notdef", prefix);
+		}
+		GlyphOrder.setByGID(glyph_order, j, name);
+	}
+
+	sdsfree(prefix);
+	return glyph_order;
+}
+
+static void nameGlyphs(otfcc_Font *font, otfcc_GlyphOrder *gord) {
+	if (!gord) return;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		glyf_Glyph *g = font->glyf->items[j];
+		sds glyphName = NULL;
+		GlyphOrder.nameAField_Shared(gord, j, &glyphName);
+		if (g->name) sdsfree(g->name);
+		g->name = sdsdup(glyphName);
+	}
+}
+
+static void unconsolidate_chaining(otfcc_Font *font, otl_Lookup *lookup, table_OTL *table) {
+	tableid_t totalRules = 0;
+	for (tableid_t j = 0; j < lookup->subtables.length; j++) {
+		if (!lookup->subtables.items[j]) continue;
+		if (lookup->subtables.items[j]->chaining.type == otl_chaining_poly) {
+			totalRules += lookup->subtables.items[j]->chaining.rulesCount;
+		} else if (lookup->subtables.items[j]->chaining.type == otl_chaining_canonical) {
+			totalRules += 1;
+		}
+	}
+	otl_SubtableList newsts;
+	otl_iSubtableList.init(&newsts);
+	for (tableid_t j = 0; j < lookup->subtables.length; j++) {
+		if (!lookup->subtables.items[j]) continue;
+		if (lookup->subtables.items[j]->chaining.type == otl_chaining_poly) {
+			for (tableid_t k = 0; k < lookup->subtables.items[j]->chaining.rulesCount; k++) {
+				otl_Subtable *st;
+				NEW(st);
+				st->chaining.type = otl_chaining_canonical;
+				// transfer ownership of rule
+				st->chaining.rule = *(lookup->subtables.items[j]->chaining.rules[k]);
+				FREE(lookup->subtables.items[j]->chaining.rules[k]);
+				otl_iSubtableList.push(&newsts, st);
+			}
+			FREE(lookup->subtables.items[j]->chaining.rules);
+			FREE(lookup->subtables.items[j]);
+		} else if (lookup->subtables.items[j]->chaining.type == otl_chaining_canonical) {
+			otl_Subtable *st;
+			NEW(st);
+			st->chaining.type = otl_chaining_canonical;
+			st->chaining.rule = lookup->subtables.items[j]->chaining.rule;
+			otl_iSubtableList.push(&newsts, st);
+			lookup->subtables.items[j] = NULL;
+		}
+	}
+	otl_iSubtableList.disposeDependent(&lookup->subtables, lookup);
+	lookup->subtables = newsts;
+}
+
+static void expandChain(otfcc_Font *font, otl_Lookup *lookup, table_OTL *table) {
+	switch (lookup->type) {
+		case otl_type_gsub_chaining:
+		case otl_type_gpos_chaining:
+			unconsolidate_chaining(font, lookup, table);
+			break;
+		default:
+			break;
+	}
+}
+
+static void expandChainingLookups(otfcc_Font *font) {
+	if (font->GSUB) {
+		for (uint32_t j = 0; j < font->GSUB->lookups.length; j++) {
+			otl_Lookup *lookup = font->GSUB->lookups.items[j];
+			expandChain(font, lookup, font->GSUB);
+		}
+	}
+	if (font->GPOS) {
+		for (uint32_t j = 0; j < font->GPOS->lookups.length; j++) {
+			otl_Lookup *lookup = font->GPOS->lookups.items[j];
+			expandChain(font, lookup, font->GPOS);
+		}
+	}
+}
+
+static void mergeHmtx(otfcc_Font *font) {
+	// Merge hmtx table into glyf.
+	if (!(font->hhea && font->hmtx && font->glyf)) return;
+	uint32_t count_a = font->hhea->numberOfMetrics;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		glyf_Glyph *g = font->glyf->items[j];
+		const pos_t adw = font->hmtx->metrics[(j < count_a ? j : count_a - 1)].advanceWidth;
+		const pos_t lsb =
+		    j < count_a ? font->hmtx->metrics[j].lsb : font->hmtx->leftSideBearing[j - count_a];
+
+		iVQ.inplacePlus(&g->advanceWidth, iVQ.createStill(adw));
+		iVQ.inplacePlus(&g->horizontalOrigin, iVQ.createStill(-lsb + g->stat.xMin));
+	}
+	table_iHmtx.free(font->hmtx);
+	font->hmtx = NULL;
+}
+
+static void mergeVmtx(otfcc_Font *font) {
+	// Merge vmtx table into glyf.
+	if (!(font->vhea && font->vmtx && font->glyf)) return;
+	uint32_t count_a = font->vhea->numOfLongVerMetrics;
+
+	pos_t *vorgs = NULL;
+
+	if (font->VORG) {
+		NEW_CLEAN_N(vorgs, font->glyf->length);
+		for (glyphid_t j = 0; j < font->glyf->length; j++) {
+			vorgs[j] = font->VORG->defaultVerticalOrigin;
+		}
+		for (glyphid_t j = 0; j < font->VORG->numVertOriginYMetrics; j++) {
+			if (!(font->VORG->entries[j].gid < font->glyf->length)) continue;
+			vorgs[font->VORG->entries[j].gid] = font->VORG->entries[j].verticalOrigin;
+		}
+		table_iVORG.free(font->VORG);
+		font->VORG = NULL;
+	}
+
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		glyf_Glyph *g = font->glyf->items[j];
+		const pos_t adh = font->vmtx->metrics[(j < count_a ? j : count_a - 1)].advanceHeight;
+		const pos_t tsb =
+		    j < count_a ? font->vmtx->metrics[j].tsb : font->vmtx->topSideBearing[j - count_a];
+
+		iVQ.inplacePlus(&g->advanceHeight, iVQ.createStill(adh));
+		iVQ.inplacePlus(&g->verticalOrigin, iVQ.createStill(vorgs ? vorgs[j] : tsb + g->stat.yMax));
+	}
+
+	if (vorgs) FREE(vorgs);
+	table_iVmtx.free(font->vmtx);
+	font->vmtx = NULL;
+}
+
+static void mergeLTSH(otfcc_Font *font) {
+	if (font->glyf && font->LTSH) {
+		for (glyphid_t j = 0; j < font->glyf->length && j < font->LTSH->numGlyphs; j++) {
+			font->glyf->items[j]->yPel = font->LTSH->yPels[j];
+		}
+	}
+}
+
+void otfcc_unconsolidateFont(otfcc_Font *font, const otfcc_Options *options) {
+	// Merge metrics
+	mergeHmtx(font);
+	mergeVmtx(font);
+	mergeLTSH(font);
+	// expand chaining lookups
+	expandChainingLookups(font);
+	// Name glyphs
+	if (font->glyf) {
+		otfcc_GlyphOrder *gord = createGlyphOrder(font, options);
+		nameGlyphs(font, gord);
+		GlyphOrder.free(gord);
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-reader/unconsolidate.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,9 @@
+#ifndef CARYLL_OTF_READER_UNCONSOLIDATE_H
+#define CARYLL_OTF_READER_UNCONSOLIDATE_H
+
+#include "otfcc/font.h"
+#include "table/all.h"
+
+void otfcc_unconsolidateFont(otfcc_Font *font, const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/otf-writer.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/otf-writer.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/otf-writer.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,106 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+#include "otfcc/sfnt-builder.h"
+#include "stat.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+static void *serializeToOTF(otfcc_Font *font, const otfcc_Options *options) {
+	// do stat before serialize
+	otfcc_statFont(font, options);
+
+	otfcc_SFNTBuilder *builder =
+	    otfcc_newSFNTBuilder(font->subtype == FONTTYPE_CFF ? OTFCC_CHR('O','T','T','O') : 0x00010000, options);
+	// Outline data
+	if (font->subtype == FONTTYPE_TTF) {
+		table_GlyfAndLocaBuffers pair = otfcc_buildGlyf(font->glyf, font->head, options);
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('g','l','y','f'), pair.glyf);
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('l','o','c','a'), pair.loca);
+	} else {
+		table_CFFAndGlyf r = {font->CFF_, font->glyf};
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('C','F','F',' '), otfcc_buildCFF(r, options));
+	}
+
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('h','e','a','d'), otfcc_buildHead(font->head, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('h','h','e','a'), otfcc_buildHhea(font->hhea, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('O','S','/','2'), otfcc_buildOS_2(font->OS_2, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('m','a','x','p'), otfcc_buildMaxp(font->maxp, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('n','a','m','e'), otfcc_buildName(font->name, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('m','e','t','a'), otfcc_buildMeta(font->meta, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('p','o','s','t'),
+	                            otfcc_buildPost(font->post, font->glyph_order, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('c','m','a','p'), otfcc_buildCmap(font->cmap, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('g','a','s','p'), otfcc_buildGasp(font->gasp, options));
+
+	if (font->subtype == FONTTYPE_TTF) {
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('f','p','g','m'), otfcc_buildFpgmPrep(font->fpgm, options));
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('p','r','e','p'), otfcc_buildFpgmPrep(font->prep, options));
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('c','v','t',' '), otfcc_buildCvt(font->cvt_, options));
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('L','T','S','H'), otfcc_buildLTSH(font->LTSH, options));
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('V','D','M','X'), otfcc_buildVDMX(font->VDMX, options));
+	}
+
+	if (font->hhea && font->maxp && font->hmtx) {
+		uint16_t hmtx_counta = font->hhea->numberOfMetrics;
+		uint16_t hmtx_countk = font->maxp->numGlyphs - font->hhea->numberOfMetrics;
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('h','m','t','x'),
+		                            otfcc_buildHmtx(font->hmtx, hmtx_counta, hmtx_countk, options));
+	}
+
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('v','h','e','a'), otfcc_buildVhea(font->vhea, options));
+	if (font->vhea && font->maxp && font->vmtx) {
+		uint16_t vmtx_counta = font->vhea->numOfLongVerMetrics;
+		uint16_t vmtx_countk = font->maxp->numGlyphs - font->vhea->numOfLongVerMetrics;
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('v','m','t','x'),
+		                            otfcc_buildVmtx(font->vmtx, vmtx_counta, vmtx_countk, options));
+	}
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('V','O','R','G'), otfcc_buildVORG(font->VORG, options));
+
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('G','S','U','B'), otfcc_buildOtl(font->GSUB, options, "GSUB"));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('G','P','O','S'), otfcc_buildOtl(font->GPOS, options, "GPOS"));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('G','D','E','F'), otfcc_buildGDEF(font->GDEF, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('B','A','S','E'), otfcc_buildBASE(font->BASE, options));
+
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('C','P','A','L'), otfcc_buildCPAL(font->CPAL, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('C','O','L','R'), otfcc_buildCOLR(font->COLR, options));
+	otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('S','V','G',' '), otfcc_buildSVG(font->SVG_, options));
+
+	{
+		tsi_BuildTarget target = otfcc_buildTSI(font->TSI_01, options);
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','0'), target.indexPart);
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','1'), target.textPart);
+	}
+	{
+		tsi_BuildTarget target = otfcc_buildTSI(font->TSI_23, options);
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','2'), target.indexPart);
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','3'), target.textPart);
+	}
+	if (font->glyf) {
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('T','S','I','5'),
+		                            otfcc_buildTSI5(font->TSI5, options, font->glyf->length));
+	}
+
+	if (options->dummy_DSIG) {
+		caryll_Buffer *dsig = bufnew();
+		bufwrite32b(dsig, 0x00000001);
+		bufwrite16b(dsig, 0);
+		bufwrite16b(dsig, 0);
+		otfcc_SFNTBuilder_pushTable(builder, OTFCC_CHR('D','S','I','G'), dsig);
+	}
+
+	caryll_Buffer *otf = otfcc_SFNTBuilder_serialize(builder);
+	otfcc_deleteSFNTBuilder(builder);
+	otfcc_unstatFont(font, options);
+	return otf;
+}
+static void freeFontWriter(otfcc_IFontSerializer *self) {
+	free(self);
+}
+otfcc_IFontSerializer *otfcc_newOTFWriter() {
+	otfcc_IFontSerializer *writer;
+	NEW(writer);
+	writer->serialize = serializeToOTF;
+	writer->free = freeFontWriter;
+	return writer;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,706 @@
+#include "stat.h"
+
+#include <time.h>
+#include <float.h>
+#include "support/util.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+// Stating
+// Calculate necessary values for SFNT
+
+typedef enum { stat_not_started = 0, stat_doing = 1, stat_completed = 2 } stat_status;
+
+static glyf_GlyphStat stat_single_glyph(table_glyf *table, glyf_ComponentReference *gr,
+                                 stat_status *stated, uint8_t depth, glyphid_t topj,
+                                 const otfcc_Options *options) {
+	glyf_GlyphStat stat = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+	glyphid_t j = gr->glyph.index;
+	if (depth >= 0xFF) return stat;
+	if (stated[j] == stat_doing) {
+		// We have a circular reference
+		logWarning("[Stat] Circular glyph reference found in gid %d to gid %d. The reference will "
+		           "be dropped.\n",
+		           topj, j);
+		stated[j] = stat_completed;
+		return stat;
+	}
+
+	glyf_Glyph *g = table->items[j];
+	stated[j] = stat_doing;
+	pos_t xmin = POS_MAX;
+	pos_t xmax = -POS_MAX;
+	pos_t ymin = POS_MAX;
+	pos_t ymax = -POS_MAX;
+	uint16_t nestDepth = 0;
+	uint16_t nPoints = 0;
+	uint16_t nCompositePoints = 0;
+	uint16_t nCompositeContours = 0;
+	// Stat xmin, xmax, ymin, ymax
+	for (shapeid_t c = 0; c < g->contours.length; c++) {
+		for (shapeid_t pj = 0; pj < g->contours.items[c].length; pj++) {
+			// Stat point coordinates USING the matrix transformation
+			glyf_Point *p = &(g->contours.items[c].items[pj]);
+			pos_t x = round(iVQ.getStill(gr->x) + gr->a * iVQ.getStill(p->x) +
+			                gr->b * iVQ.getStill(p->y));
+			pos_t y = round(iVQ.getStill(gr->y) + gr->c * iVQ.getStill(p->x) +
+			                gr->d * iVQ.getStill(p->y));
+			if (x < xmin) xmin = x;
+			if (x > xmax) xmax = x;
+			if (y < ymin) ymin = y;
+			if (y > ymax) ymax = y;
+			nPoints += 1;
+		}
+	}
+	nCompositePoints = nPoints;
+	nCompositeContours = g->contours.length;
+	for (shapeid_t r = 0; r < g->references.length; r++) {
+		glyf_ComponentReference ref;
+		glyf_iComponentReference.init(&ref);
+		glyf_ComponentReference *rr = &(g->references.items[r]);
+		// composite affine transformations
+		Handle.replace(&ref.glyph, Handle.fromIndex(g->references.items[r].glyph.index));
+		ref.a = gr->a * rr->a + rr->b * gr->c;
+		ref.b = rr->a * gr->b + rr->b * gr->d;
+		ref.c = gr->a * rr->c + gr->c * rr->d;
+		ref.d = gr->b * rr->c + rr->d * gr->d;
+		iVQ.replace(&ref.x, iVQ.createStill(iVQ.getStill(rr->x) + rr->a * iVQ.getStill(gr->x) +
+		                                    rr->b * iVQ.getStill(gr->y)));
+		iVQ.replace(&ref.y, iVQ.createStill(iVQ.getStill(rr->y) + rr->c * iVQ.getStill(gr->x) +
+		                                    rr->d * iVQ.getStill(gr->y)));
+
+		glyf_GlyphStat thatstat = stat_single_glyph(table, &ref, stated, depth + 1, topj, options);
+		if (thatstat.xMin < xmin) xmin = thatstat.xMin;
+		if (thatstat.xMax > xmax) xmax = thatstat.xMax;
+		if (thatstat.yMin < ymin) ymin = thatstat.yMin;
+		if (thatstat.yMax > ymax) ymax = thatstat.yMax;
+		if (thatstat.nestDepth + 1 > nestDepth) nestDepth = thatstat.nestDepth + 1;
+		nCompositePoints += thatstat.nCompositePoints;
+		nCompositeContours += thatstat.nCompositeContours;
+	}
+	// deal with space glyphs
+	if (xmin > xmax) xmin = xmax = 0;
+	if (ymin > ymax) ymin = ymax = 0;
+
+	// write back
+	stat.xMin = xmin;
+	stat.xMax = xmax;
+	stat.yMin = ymin;
+	stat.yMax = ymax;
+	stat.nestDepth = nestDepth;
+	stat.nPoints = nPoints;
+	stat.nContours = g->contours.length;
+	stat.nCompositePoints = nCompositePoints;
+	stat.nCompositeContours = nCompositeContours;
+	stated[j] = stat_completed;
+	return stat;
+}
+
+static void statGlyf(otfcc_Font *font, const otfcc_Options *options) {
+	stat_status *stated;
+	NEW(stated, font->glyf->length);
+	pos_t xmin = 0xFFFFFFFF;
+	pos_t xmax = -0xFFFFFFFF;
+	pos_t ymin = 0xFFFFFFFF;
+	pos_t ymax = -0xFFFFFFFF;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		glyf_ComponentReference gr;
+		gr.glyph = Handle.fromIndex(j);
+		gr.x = iVQ.createStill(0);
+		gr.y = iVQ.createStill(0);
+		gr.a = 1;
+		gr.b = 0;
+		gr.c = 0;
+		gr.d = 1;
+		glyf_GlyphStat thatstat = font->glyf->items[j]->stat =
+		    stat_single_glyph(font->glyf, &gr, stated, 0, j, options);
+		if (thatstat.xMin < xmin) xmin = thatstat.xMin;
+		if (thatstat.xMax > xmax) xmax = thatstat.xMax;
+		if (thatstat.yMin < ymin) ymin = thatstat.yMin;
+		if (thatstat.yMax > ymax) ymax = thatstat.yMax;
+	}
+	font->head->xMin = xmin;
+	font->head->xMax = xmax;
+	font->head->yMin = ymin;
+	font->head->yMax = ymax;
+	FREE(stated);
+}
+
+static void statMaxp(otfcc_Font *font) {
+	uint16_t nestDepth = 0;
+	uint16_t nPoints = 0;
+	uint16_t nContours = 0;
+	uint16_t nComponents = 0;
+	uint16_t nCompositePoints = 0;
+	uint16_t nCompositeContours = 0;
+	uint16_t instSize = 0;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		glyf_Glyph *g = font->glyf->items[j];
+		if (g->contours.length > 0) {
+			if (g->stat.nPoints > nPoints) nPoints = g->stat.nPoints;
+			if (g->stat.nContours > nContours) nContours = g->stat.nContours;
+		} else if (g->references.length > 0) {
+			if (g->stat.nCompositePoints > nCompositePoints)
+				nCompositePoints = g->stat.nCompositePoints;
+			if (g->stat.nCompositeContours > nCompositeContours)
+				nCompositeContours = g->stat.nCompositeContours;
+			if (g->stat.nestDepth > nestDepth) nestDepth = g->stat.nestDepth;
+			if (g->references.length > nComponents) nComponents = g->references.length;
+		}
+		if (g->instructionsLength > instSize) instSize = g->instructionsLength;
+	}
+	font->maxp->maxPoints = nPoints;
+	font->maxp->maxContours = nContours;
+	font->maxp->maxCompositePoints = nCompositePoints;
+	font->maxp->maxCompositeContours = nCompositeContours;
+	font->maxp->maxComponentDepth = nestDepth;
+	font->maxp->maxComponentElements = nComponents;
+	font->maxp->maxSizeOfInstructions = instSize;
+}
+
+static void statHmtx(otfcc_Font *font, const otfcc_Options *options) {
+	if (!font->glyf) return;
+	table_hmtx *hmtx;
+	NEW(hmtx);
+	glyphid_t count_a = font->glyf->length;
+	glyphid_t count_k = 0;
+	bool lsbAtX_0 = true;
+	if (font->subtype == FONTTYPE_CFF) {
+		// pass
+	} else {
+		while (count_a > 2 && iVQ.getStill(font->glyf->items[count_a - 1]->advanceWidth) ==
+		                          iVQ.getStill(font->glyf->items[count_a - 2]->advanceWidth)) {
+			count_a--;
+		}
+		count_k = font->glyf->length - count_a;
+	}
+	NEW(hmtx->metrics, count_a);
+	NEW(hmtx->leftSideBearing, count_k);
+
+	pos_t minLSB = 0x7FFF;
+	pos_t minRSB = 0x7FFF;
+	pos_t maxExtent = -0x8000;
+	length_t maxWidth = 0;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		glyf_Glyph *g = font->glyf->items[j];
+		if (iVQ.isZero(g->horizontalOrigin, 1.0 / 1000.0)) {
+			iVQ.replace(&g->horizontalOrigin, iVQ.neutral());
+		} else {
+			lsbAtX_0 = false;
+		}
+		const pos_t hori = iVQ.getStill(g->horizontalOrigin);
+		const pos_t advw = iVQ.getStill(g->advanceWidth);
+		const pos_t lsb = (g->stat.xMin) - hori;
+		const pos_t rsb = advw + hori - (g->stat.xMax);
+
+		if (j < count_a) {
+			hmtx->metrics[j].advanceWidth = advw;
+			hmtx->metrics[j].lsb = lsb;
+		} else {
+			hmtx->leftSideBearing[j - count_a] = lsb;
+		}
+
+		if (advw > maxWidth) maxWidth = advw;
+		if (lsb < minLSB) minLSB = lsb;
+		if (rsb < minRSB) minRSB = rsb;
+		if (g->stat.xMax - hori > maxExtent) { maxExtent = g->stat.xMax - hori; }
+	}
+	font->hhea->numberOfMetrics = count_a;
+	font->hhea->minLeftSideBearing = minLSB;
+	font->hhea->minRightSideBearing = minRSB;
+	font->hhea->xMaxExtent = maxExtent;
+	font->hhea->advanceWidthMax = maxWidth;
+	font->hmtx = hmtx;
+	// set bit 1 in head.flags
+	font->head->flags = (font->head->flags & (~0x2)) | (lsbAtX_0 ? 0x2 : 0);
+}
+static void statVmtx(otfcc_Font *font, const otfcc_Options *options) {
+	if (!font->glyf) return;
+	table_vmtx *vmtx;
+	NEW(vmtx);
+	glyphid_t count_a = font->glyf->length;
+	glyphid_t count_k = 0;
+	if (font->subtype == FONTTYPE_CFF && !options->cff_short_vmtx) {
+		// pass
+	} else {
+		while (count_a > 2 && iVQ.getStill(font->glyf->items[count_a - 1]->advanceHeight) ==
+		                          iVQ.getStill(font->glyf->items[count_a - 2]->advanceHeight)) {
+			count_a--;
+		}
+		count_k = font->glyf->length - count_a;
+	}
+	NEW(vmtx->metrics, count_a);
+	NEW(vmtx->topSideBearing, count_k);
+
+	pos_t minTSB = 0x7FFF;
+	pos_t minBSB = 0x7FFF;
+	pos_t maxExtent = -0x8000;
+	length_t maxHeight = 0;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		glyf_Glyph *g = font->glyf->items[j];
+		const pos_t vori = iVQ.getStill(g->verticalOrigin);
+		const pos_t advh = iVQ.getStill(g->advanceHeight);
+		const pos_t tsb = (vori) - (g->stat.yMax);
+		const pos_t bsb = (g->stat.yMin) - (vori) + (advh);
+		if (j < count_a) {
+			vmtx->metrics[j].advanceHeight = advh;
+			vmtx->metrics[j].tsb = tsb;
+		} else {
+			vmtx->topSideBearing[j - count_a] = tsb;
+		}
+		if (advh > maxHeight) maxHeight = advh;
+		if (tsb < minTSB) minTSB = tsb;
+		if (bsb < minBSB) minBSB = bsb;
+		if (vori - g->stat.yMin > maxExtent) { maxExtent = vori - g->stat.yMin; }
+	}
+	font->vhea->numOfLongVerMetrics = count_a;
+	font->vhea->minTop = minTSB;
+	font->vhea->minBottom = minBSB;
+	font->vhea->yMaxExtent = maxExtent;
+	font->vhea->advanceHeightMax = maxHeight;
+	font->vmtx = vmtx;
+}
+static void statOS_2UnicodeRanges(otfcc_Font *font, const otfcc_Options *options) {
+	cmap_Entry *item;
+	// Stat for OS/2.ulUnicodeRange.
+	uint32_t u1 = 0;
+	uint32_t u2 = 0;
+	uint32_t u3 = 0;
+	uint32_t u4 = 0;
+	int32_t minUnicode = 0xFFFF;
+	int32_t maxUnicode = 0;
+	foreach_hash(item, font->cmap->unicodes) {
+		int u = item->unicode;
+		// Stat for minimium and maximium unicode
+		if (u < minUnicode) minUnicode = u;
+		if (u > maxUnicode) maxUnicode = u;
+		// Reference: https://www.microsoft.com/typography/otspec/os2.htm#ur
+		if ((u >= 0x0000 && u <= 0x007F)) { u1 |= (1 << 0); }
+		if ((u >= 0x0080 && u <= 0x00FF)) { u1 |= (1 << 1); }
+		if ((u >= 0x0100 && u <= 0x017F)) { u1 |= (1 << 2); }
+		if ((u >= 0x0180 && u <= 0x024F)) { u1 |= (1 << 3); }
+		if ((u >= 0x0250 && u <= 0x02AF) || (u >= 0x1D00 && u <= 0x1D7F) ||
+		    (u >= 0x1D80 && u <= 0x1DBF)) {
+			u1 |= (1 << 4);
+		}
+		if ((u >= 0x02B0 && u <= 0x02FF) || (u >= 0xA700 && u <= 0xA71F)) { u1 |= (1 << 5); }
+		if ((u >= 0x0300 && u <= 0x036F) || (u >= 0x1DC0 && u <= 0x1DFF)) { u1 |= (1 << 6); }
+		if ((u >= 0x0370 && u <= 0x03FF)) { u1 |= (1 << 7); }
+		if ((u >= 0x2C80 && u <= 0x2CFF)) { u1 |= (1 << 8); }
+		if ((u >= 0x0400 && u <= 0x04FF) || (u >= 0x0500 && u <= 0x052F) ||
+		    (u >= 0x2DE0 && u <= 0x2DFF) || (u >= 0xA640 && u <= 0xA69F)) {
+			u1 |= (1 << 9);
+		}
+		if ((u >= 0x0530 && u <= 0x058F)) { u1 |= (1 << 10); }
+		if ((u >= 0x0590 && u <= 0x05FF)) { u1 |= (1 << 11); }
+		if ((u >= 0xA500 && u <= 0xA63F)) { u1 |= (1 << 12); }
+		if ((u >= 0x0600 && u <= 0x06FF) || (u >= 0x0750 && u <= 0x077F)) { u1 |= (1 << 13); }
+		if ((u >= 0x07C0 && u <= 0x07FF)) { u1 |= (1 << 14); }
+		if ((u >= 0x0900 && u <= 0x097F)) { u1 |= (1 << 15); }
+		if ((u >= 0x0980 && u <= 0x09FF)) { u1 |= (1 << 16); }
+		if ((u >= 0x0A00 && u <= 0x0A7F)) { u1 |= (1 << 17); }
+		if ((u >= 0x0A80 && u <= 0x0AFF)) { u1 |= (1 << 18); }
+		if ((u >= 0x0B00 && u <= 0x0B7F)) { u1 |= (1 << 19); }
+		if ((u >= 0x0B80 && u <= 0x0BFF)) { u1 |= (1 << 20); }
+		if ((u >= 0x0C00 && u <= 0x0C7F)) { u1 |= (1 << 21); }
+		if ((u >= 0x0C80 && u <= 0x0CFF)) { u1 |= (1 << 22); }
+		if ((u >= 0x0D00 && u <= 0x0D7F)) { u1 |= (1 << 23); }
+		if ((u >= 0x0E00 && u <= 0x0E7F)) { u1 |= (1 << 24); }
+		if ((u >= 0x0E80 && u <= 0x0EFF)) { u1 |= (1 << 25); }
+		if ((u >= 0x10A0 && u <= 0x10FF) || (u >= 0x2D00 && u <= 0x2D2F)) { u1 |= (1 << 26); }
+		if ((u >= 0x1B00 && u <= 0x1B7F)) { u1 |= (1 << 27); }
+		if ((u >= 0x1100 && u <= 0x11FF)) { u1 |= (1 << 28); }
+		if ((u >= 0x1E00 && u <= 0x1EFF) || (u >= 0x2C60 && u <= 0x2C7F) ||
+		    (u >= 0xA720 && u <= 0xA7FF)) {
+			u1 |= (1 << 29);
+		}
+		if ((u >= 0x1F00 && u <= 0x1FFF)) { u1 |= (1 << 30); }
+		if ((u >= 0x2000 && u <= 0x206F) || (u >= 0x2E00 && u <= 0x2E7F)) { u1 |= (1 << 31); }
+		if ((u >= 0x2070 && u <= 0x209F)) { u2 |= (1 << 0); }
+		if ((u >= 0x20A0 && u <= 0x20CF)) { u2 |= (1 << 1); }
+		if ((u >= 0x20D0 && u <= 0x20FF)) { u2 |= (1 << 2); }
+		if ((u >= 0x2100 && u <= 0x214F)) { u2 |= (1 << 3); }
+		if ((u >= 0x2150 && u <= 0x218F)) { u2 |= (1 << 4); }
+		if ((u >= 0x2190 && u <= 0x21FF) || (u >= 0x27F0 && u <= 0x27FF) ||
+		    (u >= 0x2900 && u <= 0x297F) || (u >= 0x2B00 && u <= 0x2BFF)) {
+			u2 |= (1 << 5);
+		}
+		if ((u >= 0x2200 && u <= 0x22FF) || (u >= 0x2A00 && u <= 0x2AFF) ||
+		    (u >= 0x27C0 && u <= 0x27EF) || (u >= 0x2980 && u <= 0x29FF)) {
+			u2 |= (1 << 6);
+		}
+		if ((u >= 0x2300 && u <= 0x23FF)) { u2 |= (1 << 7); }
+		if ((u >= 0x2400 && u <= 0x243F)) { u2 |= (1 << 8); }
+		if ((u >= 0x2440 && u <= 0x245F)) { u2 |= (1 << 9); }
+		if ((u >= 0x2460 && u <= 0x24FF)) { u2 |= (1 << 10); }
+		if ((u >= 0x2500 && u <= 0x257F)) { u2 |= (1 << 11); }
+		if ((u >= 0x2580 && u <= 0x259F)) { u2 |= (1 << 12); }
+		if ((u >= 0x25A0 && u <= 0x25FF)) { u2 |= (1 << 13); }
+		if ((u >= 0x2600 && u <= 0x26FF)) { u2 |= (1 << 14); }
+		if ((u >= 0x2700 && u <= 0x27BF)) { u2 |= (1 << 15); }
+		if ((u >= 0x3000 && u <= 0x303F)) { u2 |= (1 << 16); }
+		if ((u >= 0x3040 && u <= 0x309F)) { u2 |= (1 << 17); }
+		if ((u >= 0x30A0 && u <= 0x30FF) || (u >= 0x31F0 && u <= 0x31FF)) { u2 |= (1 << 18); }
+		if ((u >= 0x3100 && u <= 0x312F) || (u >= 0x31A0 && u <= 0x31BF)) { u2 |= (1 << 19); }
+		if ((u >= 0x3130 && u <= 0x318F)) { u2 |= (1 << 20); }
+		if ((u >= 0xA840 && u <= 0xA87F)) { u2 |= (1 << 21); }
+		if ((u >= 0x3200 && u <= 0x32FF)) { u2 |= (1 << 22); }
+		if ((u >= 0x3300 && u <= 0x33FF)) { u2 |= (1 << 23); }
+		if ((u >= 0xAC00 && u <= 0xD7AF)) { u2 |= (1 << 24); }
+		if ((u >= 0xD800 && u <= 0xDFFF) || u > 0xFFFF) { u2 |= (1 << 25); }
+		if ((u >= 0x10900 && u <= 0x1091F)) { u2 |= (1 << 26); }
+		if ((u >= 0x4E00 && u <= 0x9FFF) || (u >= 0x2E80 && u <= 0x2EFF) ||
+		    (u >= 0x2F00 && u <= 0x2FDF) || (u >= 0x2FF0 && u <= 0x2FFF) ||
+		    (u >= 0x3400 && u <= 0x4DBF) || (u >= 0x20000 && u <= 0x2F7FF) ||
+		    (u >= 0x3190 && u <= 0x319F)) {
+			u2 |= (1 << 27);
+		}
+		if ((u >= 0xE000 && u <= 0xF8FF)) { u2 |= (1 << 28); }
+		if ((u >= 0x31C0 && u <= 0x31EF) || (u >= 0xF900 && u <= 0xFAFF) ||
+		    (u >= 0x2F800 && u <= 0x2FA1F)) {
+			u2 |= (1 << 29);
+		}
+		if ((u >= 0xFB00 && u <= 0xFB4F)) { u2 |= (1 << 30); }
+		if ((u >= 0xFB50 && u <= 0xFDFF)) { u2 |= (1 << 31); }
+		if ((u >= 0xFE20 && u <= 0xFE2F)) { u3 |= (1 << 0); }
+		if ((u >= 0xFE10 && u <= 0xFE1F) || (u >= 0xFE30 && u <= 0xFE4F)) { u3 |= (1 << 1); }
+		if ((u >= 0xFE50 && u <= 0xFE6F)) { u3 |= (1 << 2); }
+		if ((u >= 0xFE70 && u <= 0xFEFF)) { u3 |= (1 << 3); }
+		if ((u >= 0xFF00 && u <= 0xFFEF)) { u3 |= (1 << 4); }
+		if ((u >= 0xFFF0 && u <= 0xFFFF)) { u3 |= (1 << 5); }
+		if ((u >= 0x0F00 && u <= 0x0FFF)) { u3 |= (1 << 6); }
+		if ((u >= 0x0700 && u <= 0x074F)) { u3 |= (1 << 7); }
+		if ((u >= 0x0780 && u <= 0x07BF)) { u3 |= (1 << 8); }
+		if ((u >= 0x0D80 && u <= 0x0DFF)) { u3 |= (1 << 9); }
+		if ((u >= 0x1000 && u <= 0x109F)) { u3 |= (1 << 10); }
+		if ((u >= 0x1200 && u <= 0x137F) || (u >= 0x1380 && u <= 0x139F) ||
+		    (u >= 0x2D80 && u <= 0x2DDF)) {
+			u3 |= (1 << 11);
+		}
+		if ((u >= 0x13A0 && u <= 0x13FF)) { u3 |= (1 << 12); }
+		if ((u >= 0x1400 && u <= 0x167F)) { u3 |= (1 << 13); }
+		if ((u >= 0x1680 && u <= 0x169F)) { u3 |= (1 << 14); }
+		if ((u >= 0x16A0 && u <= 0x16FF)) { u3 |= (1 << 15); }
+		if ((u >= 0x1780 && u <= 0x17FF) || (u >= 0x19E0 && u <= 0x19FF)) { u3 |= (1 << 16); }
+		if ((u >= 0x1800 && u <= 0x18AF)) { u3 |= (1 << 17); }
+		if ((u >= 0x2800 && u <= 0x28FF)) { u3 |= (1 << 18); }
+		if ((u >= 0xA000 && u <= 0xA48F) || (u >= 0xA490 && u <= 0xA4CF)) { u3 |= (1 << 19); }
+		if ((u >= 0x1700 && u <= 0x171F) || (u >= 0x1720 && u <= 0x173F) ||
+		    (u >= 0x1740 && u <= 0x175F) || (u >= 0x1760 && u <= 0x177F)) {
+			u3 |= (1 << 20);
+		}
+		if ((u >= 0x10300 && u <= 0x1032F)) { u3 |= (1 << 21); }
+		if ((u >= 0x10330 && u <= 0x1034F)) { u3 |= (1 << 22); }
+		if ((u >= 0x10400 && u <= 0x1044F)) { u3 |= (1 << 23); }
+		if ((u >= 0x1D000 && u <= 0x1D0FF) || (u >= 0x1D100 && u <= 0x1D1FF) ||
+		    (u >= 0x1D200 && u <= 0x1D24F)) {
+			u3 |= (1 << 24);
+		}
+		if ((u >= 0x1D400 && u <= 0x1D7FF)) { u3 |= (1 << 25); }
+		if ((u >= 0xFF000 && u <= 0xFFFFD) || (u >= 0x100000 && u <= 0x10FFFD)) { u3 |= (1 << 26); }
+		if ((u >= 0xFE00 && u <= 0xFE0F) || (u >= 0xE0100 && u <= 0xE01EF)) { u3 |= (1 << 27); }
+		if ((u >= 0xE0000 && u <= 0xE007F)) { u3 |= (1 << 28); }
+		if ((u >= 0x1900 && u <= 0x194F)) { u3 |= (1 << 29); }
+		if ((u >= 0x1950 && u <= 0x197F)) { u3 |= (1 << 30); }
+		if ((u >= 0x1980 && u <= 0x19DF)) { u3 |= (1 << 31); }
+		if ((u >= 0x1A00 && u <= 0x1A1F)) { u4 |= (1 << 0); }
+		if ((u >= 0x2C00 && u <= 0x2C5F)) { u4 |= (1 << 1); }
+		if ((u >= 0x2D30 && u <= 0x2D7F)) { u4 |= (1 << 2); }
+		if ((u >= 0x4DC0 && u <= 0x4DFF)) { u4 |= (1 << 3); }
+		if ((u >= 0xA800 && u <= 0xA82F)) { u4 |= (1 << 4); }
+		if ((u >= 0x10000 && u <= 0x1007F) || (u >= 0x10080 && u <= 0x100FF) ||
+		    (u >= 0x10100 && u <= 0x1013F)) {
+			u4 |= (1 << 5);
+		}
+		if ((u >= 0x10140 && u <= 0x1018F)) { u4 |= (1 << 6); }
+		if ((u >= 0x10380 && u <= 0x1039F)) { u4 |= (1 << 7); }
+		if ((u >= 0x103A0 && u <= 0x103DF)) { u4 |= (1 << 8); }
+		if ((u >= 0x10450 && u <= 0x1047F)) { u4 |= (1 << 9); }
+		if ((u >= 0x10480 && u <= 0x104AF)) { u4 |= (1 << 10); }
+		if ((u >= 0x10800 && u <= 0x1083F)) { u4 |= (1 << 11); }
+		if ((u >= 0x10A00 && u <= 0x10A5F)) { u4 |= (1 << 12); }
+		if ((u >= 0x1D300 && u <= 0x1D35F)) { u4 |= (1 << 13); }
+		if ((u >= 0x12000 && u <= 0x123FF) || (u >= 0x12400 && u <= 0x1247F)) { u4 |= (1 << 14); }
+		if ((u >= 0x1D360 && u <= 0x1D37F)) { u4 |= (1 << 15); }
+		if ((u >= 0x1B80 && u <= 0x1BBF)) { u4 |= (1 << 16); }
+		if ((u >= 0x1C00 && u <= 0x1C4F)) { u4 |= (1 << 17); }
+		if ((u >= 0x1C50 && u <= 0x1C7F)) { u4 |= (1 << 18); }
+		if ((u >= 0xA880 && u <= 0xA8DF)) { u4 |= (1 << 19); }
+		if ((u >= 0xA900 && u <= 0xA92F)) { u4 |= (1 << 20); }
+		if ((u >= 0xA930 && u <= 0xA95F)) { u4 |= (1 << 21); }
+		if ((u >= 0xAA00 && u <= 0xAA5F)) { u4 |= (1 << 22); }
+		if ((u >= 0x10190 && u <= 0x101CF)) { u4 |= (1 << 23); }
+		if ((u >= 0x101D0 && u <= 0x101FF)) { u4 |= (1 << 24); }
+		if ((u >= 0x102A0 && u <= 0x102DF) || (u >= 0x10280 && u <= 0x1029F) ||
+		    (u >= 0x10920 && u <= 0x1093F)) {
+			u4 |= (1 << 25);
+		}
+		if ((u >= 0x1F030 && u <= 0x1F09F) || (u >= 0x1F000 && u <= 0x1F02F)) { u4 |= (1 << 26); }
+	}
+	if (!options->keep_unicode_ranges) {
+		font->OS_2->ulUnicodeRange1 = u1;
+		font->OS_2->ulUnicodeRange2 = u2;
+		font->OS_2->ulUnicodeRange3 = u3;
+		font->OS_2->ulUnicodeRange4 = u4;
+	}
+	if (minUnicode < 0x10000) {
+		font->OS_2->usFirstCharIndex = minUnicode;
+	} else {
+		font->OS_2->usFirstCharIndex = 0xFFFF;
+	}
+	if (maxUnicode < 0x10000) {
+		font->OS_2->usLastCharIndex = maxUnicode;
+	} else {
+		font->OS_2->usLastCharIndex = 0xFFFF;
+	}
+}
+static void statOS_2AverageWidth(otfcc_Font *font, const otfcc_Options *options) {
+	if (options->keep_average_char_width) return;
+	uint32_t totalWidth = 0;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		const pos_t adw = iVQ.getStill(font->glyf->items[j]->advanceWidth);
+		if (adw > 0) { totalWidth += adw; }
+	}
+	font->OS_2->xAvgCharWidth = totalWidth / font->glyf->length;
+}
+static uint16_t statMaxContextOTL(const table_OTL *table) {
+	uint16_t maxc = 1;
+	foreach (otl_Lookup **lookup_, table->lookups) {
+		otl_Lookup *lookup = *lookup_;
+		switch (lookup->type) {
+			case otl_type_gpos_pair:
+			case otl_type_gpos_markToBase:
+			case otl_type_gpos_markToLigature:
+			case otl_type_gpos_markToMark:
+				if (maxc < 2) maxc = 2;
+				break;
+			case otl_type_gsub_ligature:
+				foreach (otl_Subtable **subtable_, lookup->subtables) {
+					subtable_gsub_ligature *subtable = (subtable_gsub_ligature *)*subtable_;
+					foreach (otl_GsubLigatureEntry *entry, *subtable) {
+						if (maxc < entry->from->numGlyphs) { maxc = entry->from->numGlyphs; }
+					};
+				}
+				break;
+			case otl_type_gsub_chaining:
+			case otl_type_gpos_chaining:
+				foreach (otl_Subtable **subtable_, lookup->subtables) {
+					subtable_chaining *subtable = (subtable_chaining *)*subtable_;
+					if (maxc < subtable->rule.matchCount) maxc = subtable->rule.matchCount;
+				}
+				break;
+			case otl_type_gsub_reverse:
+				foreach (otl_Subtable **subtable_, lookup->subtables) {
+					subtable_gsub_reverse *subtable = (subtable_gsub_reverse *)*subtable_;
+					if (maxc < subtable->matchCount) maxc = subtable->matchCount;
+				}
+				break;
+			default:;
+		}
+	}
+	return maxc;
+}
+static void statMaxContext(otfcc_Font *font, const otfcc_Options *options) {
+	uint16_t maxc = 1;
+	if (font->GSUB) {
+		uint16_t maxc_gsub = statMaxContextOTL(font->GSUB);
+		if (maxc_gsub > maxc) maxc = maxc_gsub;
+	}
+	if (font->GPOS) {
+		uint16_t maxc_gpos = statMaxContextOTL(font->GPOS);
+		if (maxc_gpos > maxc) maxc = maxc_gpos;
+	}
+	font->OS_2->usMaxContext = maxc;
+}
+static void statOS_2(otfcc_Font *font, const otfcc_Options *options) {
+	statOS_2UnicodeRanges(font, options);
+	statOS_2AverageWidth(font, options);
+	statMaxContext(font, options);
+}
+
+#define MAX_STAT_METRIC 4096
+static void statCFFWidths(otfcc_Font *font) {
+	if (!font->glyf || !font->CFF_) return;
+	// Stat the most frequent character width
+	uint32_t *frequency;
+	NEW(frequency, MAX_STAT_METRIC);
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		uint16_t intWidth = (uint16_t)iVQ.getStill(font->glyf->items[j]->advanceWidth);
+		if (intWidth < MAX_STAT_METRIC) { frequency[intWidth] += 1; }
+	}
+	uint16_t maxfreq = 0;
+	uint16_t maxj = 0;
+	for (uint16_t j = 0; j < MAX_STAT_METRIC; j++) {
+		if (frequency[j] > maxfreq) {
+			maxfreq = frequency[j];
+			maxj = j;
+		}
+	}
+	// stat nominalWidthX
+	uint16_t nn = 0;
+	uint32_t nnsum = 0;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		const pos_t adw = iVQ.getStill(font->glyf->items[j]->advanceWidth);
+		if (adw != maxj) { nn += 1, nnsum += adw; }
+	}
+	int16_t nominalWidthX = 0;
+	if (nn > 0) nominalWidthX = nnsum / nn;
+	if (font->CFF_->privateDict) {
+		font->CFF_->privateDict->defaultWidthX = maxj;
+		if (nn != 0) { font->CFF_->privateDict->nominalWidthX = nominalWidthX; }
+	}
+	if (font->CFF_->fdArray) {
+		for (tableid_t j = 0; j < font->CFF_->fdArrayCount; j++) {
+			font->CFF_->fdArray[j]->privateDict->defaultWidthX = maxj;
+			font->CFF_->fdArray[j]->privateDict->nominalWidthX = nominalWidthX;
+		}
+	}
+	FREE(frequency);
+}
+
+static void statVORG(otfcc_Font *font) {
+	if (!font->glyf || !font->CFF_ || !font->vhea || !font->vmtx) return;
+	uint32_t *frequency;
+	NEW(frequency, MAX_STAT_METRIC);
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		const pos_t vori = iVQ.getStill(font->glyf->items[j]->verticalOrigin);
+		if (vori >= 0 && vori < MAX_STAT_METRIC) { frequency[(uint16_t)(vori)] += 1; }
+	}
+	// stat VORG.defaultVerticalOrigin
+	uint32_t maxfreq = 0;
+	glyphid_t maxj = 0;
+	for (glyphid_t j = 0; j < MAX_STAT_METRIC; j++) {
+		if (frequency[j] > maxfreq) {
+			maxfreq = frequency[j];
+			maxj = j;
+		}
+	}
+
+	table_VORG *vorg;
+	NEW(vorg);
+	vorg->defaultVerticalOrigin = maxj;
+
+	glyphid_t nVertOrigs = 0;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		const pos_t vori = iVQ.getStill(font->glyf->items[j]->verticalOrigin);
+		if (vori != maxj) { nVertOrigs += 1; }
+	}
+	vorg->numVertOriginYMetrics = nVertOrigs;
+	NEW(vorg->entries, nVertOrigs);
+
+	glyphid_t jj = 0;
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		const pos_t vori = iVQ.getStill(font->glyf->items[j]->verticalOrigin);
+		if (vori != maxj) {
+			vorg->entries[jj].gid = j;
+			vorg->entries[jj].verticalOrigin = vori;
+			jj += 1;
+		}
+	}
+	FREE(frequency);
+	font->VORG = vorg;
+}
+
+static void statLTSH(otfcc_Font *font) {
+	if (!font->glyf) return;
+	bool needLTSH = false;
+	for (glyphid_t j = 0; j < font->glyf->length; j++)
+		if (font->glyf->items[j]->yPel > 1) { needLTSH = true; }
+	if (!needLTSH) return;
+
+	table_LTSH *ltsh;
+	NEW(ltsh);
+	ltsh->numGlyphs = font->glyf->length;
+	NEW(ltsh->yPels, ltsh->numGlyphs);
+	for (glyphid_t j = 0; j < font->glyf->length; j++) {
+		ltsh->yPels[j] = font->glyf->items[j]->yPel;
+	}
+	font->LTSH = ltsh;
+}
+
+void otfcc_statFont(otfcc_Font *font, const otfcc_Options *options) {
+	if (font->glyf && font->head) {
+		statGlyf(font, options);
+		if (!options->keep_modified_time) {
+			font->head->modified = 2082844800 + (int64_t)time(NULL);
+		}
+	}
+	if (font->head && font->CFF_) {
+		table_CFF *cff = font->CFF_;
+		if (cff->fontBBoxBottom > font->head->yMin) cff->fontBBoxBottom = font->head->yMin;
+		if (cff->fontBBoxTop < font->head->yMax) cff->fontBBoxTop = font->head->yMax;
+		if (cff->fontBBoxLeft < font->head->xMin) cff->fontBBoxLeft = font->head->xMin;
+		if (cff->fontBBoxRight < font->head->xMax) cff->fontBBoxRight = font->head->xMax;
+		if (font->glyf && cff->isCID) { cff->cidCount = (uint32_t)font->glyf->length; }
+		if (cff->isCID) {
+			if (cff->fontMatrix) {
+				iVQ.dispose(&cff->fontMatrix->x);
+				iVQ.dispose(&cff->fontMatrix->y);
+				FREE(cff->fontMatrix);
+				cff->fontMatrix = NULL;
+			}
+			for (tableid_t j = 0; j < cff->fdArrayCount; j++) {
+				table_CFF *fd = cff->fdArray[j];
+				if (fd->fontMatrix) {
+					iVQ.dispose(&fd->fontMatrix->x);
+					iVQ.dispose(&fd->fontMatrix->y);
+					FREE(fd->fontMatrix);
+					fd->fontMatrix = NULL;
+				}
+				if (font->head->unitsPerEm == 1000) {
+					fd->fontMatrix = NULL;
+				} else {
+					NEW(fd->fontMatrix);
+					fd->fontMatrix->a = 1.0 / font->head->unitsPerEm;
+					fd->fontMatrix->b = 0.0;
+					fd->fontMatrix->c = 0.0;
+					fd->fontMatrix->d = 1.0 / font->head->unitsPerEm;
+					fd->fontMatrix->x = iVQ.neutral();
+					fd->fontMatrix->y = iVQ.neutral();
+				}
+			}
+		} else {
+			if (font->head->unitsPerEm == 1000) {
+				cff->fontMatrix = NULL;
+			} else {
+				NEW(cff->fontMatrix);
+				cff->fontMatrix->a = 1.0 / font->head->unitsPerEm;
+				cff->fontMatrix->b = 0.0;
+				cff->fontMatrix->c = 0.0;
+				cff->fontMatrix->d = 1.0 / font->head->unitsPerEm;
+				cff->fontMatrix->x = iVQ.neutral();
+				cff->fontMatrix->y = iVQ.neutral();
+			}
+		}
+
+		statCFFWidths(font);
+	}
+	if (font->glyf && font->maxp) { font->maxp->numGlyphs = (uint16_t)font->glyf->length; }
+	if (font->glyf && font->post) { font->post->maxMemType42 = (uint32_t)font->glyf->length; }
+	if (font->glyf && font->maxp && font->maxp->version == 0x10000) {
+		statMaxp(font);
+		if (font->fpgm && font->fpgm->length > font->maxp->maxSizeOfInstructions) {
+			font->maxp->maxSizeOfInstructions = font->fpgm->length;
+		}
+		if (font->prep && font->prep->length > font->maxp->maxSizeOfInstructions) {
+			font->maxp->maxSizeOfInstructions = font->prep->length;
+		}
+	}
+	if (font->OS_2 && font->cmap && font->glyf) statOS_2(font, options);
+	if (font->subtype == FONTTYPE_TTF) {
+		if (font->maxp) font->maxp->version = 0x00010000;
+	} else {
+		if (font->maxp) font->maxp->version = 0x00005000;
+	}
+	if (font->glyf && font->hhea) { statHmtx(font, options); }
+	if (font->glyf && font->vhea) { statVmtx(font, options), statVORG(font); }
+	statLTSH(font);
+}
+
+void otfcc_unstatFont(otfcc_Font *font, const otfcc_Options *options) {
+	otfcc_iFont.deleteTable(font, OTFCC_CHR('h','d','m','x'));
+	otfcc_iFont.deleteTable(font, OTFCC_CHR('h','m','t','x'));
+	otfcc_iFont.deleteTable(font, OTFCC_CHR('V','O','R','G'));
+	otfcc_iFont.deleteTable(font, OTFCC_CHR('v','m','t','x'));
+	otfcc_iFont.deleteTable(font, OTFCC_CHR('L','T','S','H'));
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/otf-writer/stat.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,9 @@
+#ifndef CARYLL_OTF_WRITER_STAT_H
+#define CARYLL_OTF_WRITER_STAT_H
+
+#include "otfcc/font.h"
+#include "table/all.h"
+
+void otfcc_statFont(otfcc_Font *font, const otfcc_Options *options);
+void otfcc_unstatFont(otfcc_Font *font, const otfcc_Options *options);
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,592 @@
+#include "aglfn.h"
+#define GlyphOrder otfcc_pkgGlyphOrder
+
+// This table contains standard AGLFN 1.7 glyph names, mapped to Unicode.
+void aglfn_setupNames(otfcc_GlyphOrder *map) {
+	GlyphOrder.setByGID(map, 0x0041, sdsnew("A"));
+	GlyphOrder.setByGID(map, 0x00C6, sdsnew("AE"));
+	GlyphOrder.setByGID(map, 0x01FC, sdsnew("AEacute"));
+	GlyphOrder.setByGID(map, 0x00C1, sdsnew("Aacute"));
+	GlyphOrder.setByGID(map, 0x0102, sdsnew("Abreve"));
+	GlyphOrder.setByGID(map, 0x00C2, sdsnew("Acircumflex"));
+	GlyphOrder.setByGID(map, 0x00C4, sdsnew("Adieresis"));
+	GlyphOrder.setByGID(map, 0x00C0, sdsnew("Agrave"));
+	GlyphOrder.setByGID(map, 0x0391, sdsnew("Alpha"));
+	GlyphOrder.setByGID(map, 0x0386, sdsnew("Alphatonos"));
+	GlyphOrder.setByGID(map, 0x0100, sdsnew("Amacron"));
+	GlyphOrder.setByGID(map, 0x0104, sdsnew("Aogonek"));
+	GlyphOrder.setByGID(map, 0x00C5, sdsnew("Aring"));
+	GlyphOrder.setByGID(map, 0x01FA, sdsnew("Aringacute"));
+	GlyphOrder.setByGID(map, 0x00C3, sdsnew("Atilde"));
+	GlyphOrder.setByGID(map, 0x0042, sdsnew("B"));
+	GlyphOrder.setByGID(map, 0x0392, sdsnew("Beta"));
+	GlyphOrder.setByGID(map, 0x0043, sdsnew("C"));
+	GlyphOrder.setByGID(map, 0x0106, sdsnew("Cacute"));
+	GlyphOrder.setByGID(map, 0x010C, sdsnew("Ccaron"));
+	GlyphOrder.setByGID(map, 0x00C7, sdsnew("Ccedilla"));
+	GlyphOrder.setByGID(map, 0x0108, sdsnew("Ccircumflex"));
+	GlyphOrder.setByGID(map, 0x010A, sdsnew("Cdotaccent"));
+	GlyphOrder.setByGID(map, 0x03A7, sdsnew("Chi"));
+	GlyphOrder.setByGID(map, 0x0044, sdsnew("D"));
+	GlyphOrder.setByGID(map, 0x010E, sdsnew("Dcaron"));
+	GlyphOrder.setByGID(map, 0x0110, sdsnew("Dcroat"));
+	GlyphOrder.setByGID(map, 0x2206, sdsnew("Delta"));
+	GlyphOrder.setByGID(map, 0x0045, sdsnew("E"));
+	GlyphOrder.setByGID(map, 0x00C9, sdsnew("Eacute"));
+	GlyphOrder.setByGID(map, 0x0114, sdsnew("Ebreve"));
+	GlyphOrder.setByGID(map, 0x011A, sdsnew("Ecaron"));
+	GlyphOrder.setByGID(map, 0x00CA, sdsnew("Ecircumflex"));
+	GlyphOrder.setByGID(map, 0x00CB, sdsnew("Edieresis"));
+	GlyphOrder.setByGID(map, 0x0116, sdsnew("Edotaccent"));
+	GlyphOrder.setByGID(map, 0x00C8, sdsnew("Egrave"));
+	GlyphOrder.setByGID(map, 0x0112, sdsnew("Emacron"));
+	GlyphOrder.setByGID(map, 0x014A, sdsnew("Eng"));
+	GlyphOrder.setByGID(map, 0x0118, sdsnew("Eogonek"));
+	GlyphOrder.setByGID(map, 0x0395, sdsnew("Epsilon"));
+	GlyphOrder.setByGID(map, 0x0388, sdsnew("Epsilontonos"));
+	GlyphOrder.setByGID(map, 0x0397, sdsnew("Eta"));
+	GlyphOrder.setByGID(map, 0x0389, sdsnew("Etatonos"));
+	GlyphOrder.setByGID(map, 0x00D0, sdsnew("Eth"));
+	GlyphOrder.setByGID(map, 0x20AC, sdsnew("Euro"));
+	GlyphOrder.setByGID(map, 0x0046, sdsnew("F"));
+	GlyphOrder.setByGID(map, 0x0047, sdsnew("G"));
+	GlyphOrder.setByGID(map, 0x0393, sdsnew("Gamma"));
+	GlyphOrder.setByGID(map, 0x011E, sdsnew("Gbreve"));
+	GlyphOrder.setByGID(map, 0x01E6, sdsnew("Gcaron"));
+	GlyphOrder.setByGID(map, 0x011C, sdsnew("Gcircumflex"));
+	GlyphOrder.setByGID(map, 0x0120, sdsnew("Gdotaccent"));
+	GlyphOrder.setByGID(map, 0x0048, sdsnew("H"));
+	GlyphOrder.setByGID(map, 0x25CF, sdsnew("H18533"));
+	GlyphOrder.setByGID(map, 0x25AA, sdsnew("H18543"));
+	GlyphOrder.setByGID(map, 0x25AB, sdsnew("H18551"));
+	GlyphOrder.setByGID(map, 0x25A1, sdsnew("H22073"));
+	GlyphOrder.setByGID(map, 0x0126, sdsnew("Hbar"));
+	GlyphOrder.setByGID(map, 0x0124, sdsnew("Hcircumflex"));
+	GlyphOrder.setByGID(map, 0x0049, sdsnew("I"));
+	GlyphOrder.setByGID(map, 0x0132, sdsnew("IJ"));
+	GlyphOrder.setByGID(map, 0x00CD, sdsnew("Iacute"));
+	GlyphOrder.setByGID(map, 0x012C, sdsnew("Ibreve"));
+	GlyphOrder.setByGID(map, 0x00CE, sdsnew("Icircumflex"));
+	GlyphOrder.setByGID(map, 0x00CF, sdsnew("Idieresis"));
+	GlyphOrder.setByGID(map, 0x0130, sdsnew("Idotaccent"));
+	GlyphOrder.setByGID(map, 0x2111, sdsnew("Ifraktur"));
+	GlyphOrder.setByGID(map, 0x00CC, sdsnew("Igrave"));
+	GlyphOrder.setByGID(map, 0x012A, sdsnew("Imacron"));
+	GlyphOrder.setByGID(map, 0x012E, sdsnew("Iogonek"));
+	GlyphOrder.setByGID(map, 0x0399, sdsnew("Iota"));
+	GlyphOrder.setByGID(map, 0x03AA, sdsnew("Iotadieresis"));
+	GlyphOrder.setByGID(map, 0x038A, sdsnew("Iotatonos"));
+	GlyphOrder.setByGID(map, 0x0128, sdsnew("Itilde"));
+	GlyphOrder.setByGID(map, 0x004A, sdsnew("J"));
+	GlyphOrder.setByGID(map, 0x0134, sdsnew("Jcircumflex"));
+	GlyphOrder.setByGID(map, 0x004B, sdsnew("K"));
+	GlyphOrder.setByGID(map, 0x039A, sdsnew("Kappa"));
+	GlyphOrder.setByGID(map, 0x004C, sdsnew("L"));
+	GlyphOrder.setByGID(map, 0x0139, sdsnew("Lacute"));
+	GlyphOrder.setByGID(map, 0x039B, sdsnew("Lambda"));
+	GlyphOrder.setByGID(map, 0x013D, sdsnew("Lcaron"));
+	GlyphOrder.setByGID(map, 0x013F, sdsnew("Ldot"));
+	GlyphOrder.setByGID(map, 0x0141, sdsnew("Lslash"));
+	GlyphOrder.setByGID(map, 0x004D, sdsnew("M"));
+	GlyphOrder.setByGID(map, 0x039C, sdsnew("Mu"));
+	GlyphOrder.setByGID(map, 0x004E, sdsnew("N"));
+	GlyphOrder.setByGID(map, 0x0143, sdsnew("Nacute"));
+	GlyphOrder.setByGID(map, 0x0147, sdsnew("Ncaron"));
+	GlyphOrder.setByGID(map, 0x00D1, sdsnew("Ntilde"));
+	GlyphOrder.setByGID(map, 0x039D, sdsnew("Nu"));
+	GlyphOrder.setByGID(map, 0x004F, sdsnew("O"));
+	GlyphOrder.setByGID(map, 0x0152, sdsnew("OE"));
+	GlyphOrder.setByGID(map, 0x00D3, sdsnew("Oacute"));
+	GlyphOrder.setByGID(map, 0x014E, sdsnew("Obreve"));
+	GlyphOrder.setByGID(map, 0x00D4, sdsnew("Ocircumflex"));
+	GlyphOrder.setByGID(map, 0x00D6, sdsnew("Odieresis"));
+	GlyphOrder.setByGID(map, 0x00D2, sdsnew("Ograve"));
+	GlyphOrder.setByGID(map, 0x01A0, sdsnew("Ohorn"));
+	GlyphOrder.setByGID(map, 0x0150, sdsnew("Ohungarumlaut"));
+	GlyphOrder.setByGID(map, 0x014C, sdsnew("Omacron"));
+	GlyphOrder.setByGID(map, 0x2126, sdsnew("Omega"));
+	GlyphOrder.setByGID(map, 0x038F, sdsnew("Omegatonos"));
+	GlyphOrder.setByGID(map, 0x039F, sdsnew("Omicron"));
+	GlyphOrder.setByGID(map, 0x038C, sdsnew("Omicrontonos"));
+	GlyphOrder.setByGID(map, 0x00D8, sdsnew("Oslash"));
+	GlyphOrder.setByGID(map, 0x01FE, sdsnew("Oslashacute"));
+	GlyphOrder.setByGID(map, 0x00D5, sdsnew("Otilde"));
+	GlyphOrder.setByGID(map, 0x0050, sdsnew("P"));
+	GlyphOrder.setByGID(map, 0x03A6, sdsnew("Phi"));
+	GlyphOrder.setByGID(map, 0x03A0, sdsnew("Pi"));
+	GlyphOrder.setByGID(map, 0x03A8, sdsnew("Psi"));
+	GlyphOrder.setByGID(map, 0x0051, sdsnew("Q"));
+	GlyphOrder.setByGID(map, 0x0052, sdsnew("R"));
+	GlyphOrder.setByGID(map, 0x0154, sdsnew("Racute"));
+	GlyphOrder.setByGID(map, 0x0158, sdsnew("Rcaron"));
+	GlyphOrder.setByGID(map, 0x211C, sdsnew("Rfraktur"));
+	GlyphOrder.setByGID(map, 0x03A1, sdsnew("Rho"));
+	GlyphOrder.setByGID(map, 0x0053, sdsnew("S"));
+	GlyphOrder.setByGID(map, 0x250C, sdsnew("SF010000"));
+	GlyphOrder.setByGID(map, 0x2514, sdsnew("SF020000"));
+	GlyphOrder.setByGID(map, 0x2510, sdsnew("SF030000"));
+	GlyphOrder.setByGID(map, 0x2518, sdsnew("SF040000"));
+	GlyphOrder.setByGID(map, 0x253C, sdsnew("SF050000"));
+	GlyphOrder.setByGID(map, 0x252C, sdsnew("SF060000"));
+	GlyphOrder.setByGID(map, 0x2534, sdsnew("SF070000"));
+	GlyphOrder.setByGID(map, 0x251C, sdsnew("SF080000"));
+	GlyphOrder.setByGID(map, 0x2524, sdsnew("SF090000"));
+	GlyphOrder.setByGID(map, 0x2500, sdsnew("SF100000"));
+	GlyphOrder.setByGID(map, 0x2502, sdsnew("SF110000"));
+	GlyphOrder.setByGID(map, 0x2561, sdsnew("SF190000"));
+	GlyphOrder.setByGID(map, 0x2562, sdsnew("SF200000"));
+	GlyphOrder.setByGID(map, 0x2556, sdsnew("SF210000"));
+	GlyphOrder.setByGID(map, 0x2555, sdsnew("SF220000"));
+	GlyphOrder.setByGID(map, 0x2563, sdsnew("SF230000"));
+	GlyphOrder.setByGID(map, 0x2551, sdsnew("SF240000"));
+	GlyphOrder.setByGID(map, 0x2557, sdsnew("SF250000"));
+	GlyphOrder.setByGID(map, 0x255D, sdsnew("SF260000"));
+	GlyphOrder.setByGID(map, 0x255C, sdsnew("SF270000"));
+	GlyphOrder.setByGID(map, 0x255B, sdsnew("SF280000"));
+	GlyphOrder.setByGID(map, 0x255E, sdsnew("SF360000"));
+	GlyphOrder.setByGID(map, 0x255F, sdsnew("SF370000"));
+	GlyphOrder.setByGID(map, 0x255A, sdsnew("SF380000"));
+	GlyphOrder.setByGID(map, 0x2554, sdsnew("SF390000"));
+	GlyphOrder.setByGID(map, 0x2569, sdsnew("SF400000"));
+	GlyphOrder.setByGID(map, 0x2566, sdsnew("SF410000"));
+	GlyphOrder.setByGID(map, 0x2560, sdsnew("SF420000"));
+	GlyphOrder.setByGID(map, 0x2550, sdsnew("SF430000"));
+	GlyphOrder.setByGID(map, 0x256C, sdsnew("SF440000"));
+	GlyphOrder.setByGID(map, 0x2567, sdsnew("SF450000"));
+	GlyphOrder.setByGID(map, 0x2568, sdsnew("SF460000"));
+	GlyphOrder.setByGID(map, 0x2564, sdsnew("SF470000"));
+	GlyphOrder.setByGID(map, 0x2565, sdsnew("SF480000"));
+	GlyphOrder.setByGID(map, 0x2559, sdsnew("SF490000"));
+	GlyphOrder.setByGID(map, 0x2558, sdsnew("SF500000"));
+	GlyphOrder.setByGID(map, 0x2552, sdsnew("SF510000"));
+	GlyphOrder.setByGID(map, 0x2553, sdsnew("SF520000"));
+	GlyphOrder.setByGID(map, 0x256B, sdsnew("SF530000"));
+	GlyphOrder.setByGID(map, 0x256A, sdsnew("SF540000"));
+	GlyphOrder.setByGID(map, 0x015A, sdsnew("Sacute"));
+	GlyphOrder.setByGID(map, 0x0160, sdsnew("Scaron"));
+	GlyphOrder.setByGID(map, 0x015E, sdsnew("Scedilla"));
+	GlyphOrder.setByGID(map, 0x015C, sdsnew("Scircumflex"));
+	GlyphOrder.setByGID(map, 0x03A3, sdsnew("Sigma"));
+	GlyphOrder.setByGID(map, 0x0054, sdsnew("T"));
+	GlyphOrder.setByGID(map, 0x03A4, sdsnew("Tau"));
+	GlyphOrder.setByGID(map, 0x0166, sdsnew("Tbar"));
+	GlyphOrder.setByGID(map, 0x0164, sdsnew("Tcaron"));
+	GlyphOrder.setByGID(map, 0x0398, sdsnew("Theta"));
+	GlyphOrder.setByGID(map, 0x00DE, sdsnew("Thorn"));
+	GlyphOrder.setByGID(map, 0x0055, sdsnew("U"));
+	GlyphOrder.setByGID(map, 0x00DA, sdsnew("Uacute"));
+	GlyphOrder.setByGID(map, 0x016C, sdsnew("Ubreve"));
+	GlyphOrder.setByGID(map, 0x00DB, sdsnew("Ucircumflex"));
+	GlyphOrder.setByGID(map, 0x00DC, sdsnew("Udieresis"));
+	GlyphOrder.setByGID(map, 0x00D9, sdsnew("Ugrave"));
+	GlyphOrder.setByGID(map, 0x01AF, sdsnew("Uhorn"));
+	GlyphOrder.setByGID(map, 0x0170, sdsnew("Uhungarumlaut"));
+	GlyphOrder.setByGID(map, 0x016A, sdsnew("Umacron"));
+	GlyphOrder.setByGID(map, 0x0172, sdsnew("Uogonek"));
+	GlyphOrder.setByGID(map, 0x03A5, sdsnew("Upsilon"));
+	GlyphOrder.setByGID(map, 0x03D2, sdsnew("Upsilon1"));
+	GlyphOrder.setByGID(map, 0x03AB, sdsnew("Upsilondieresis"));
+	GlyphOrder.setByGID(map, 0x038E, sdsnew("Upsilontonos"));
+	GlyphOrder.setByGID(map, 0x016E, sdsnew("Uring"));
+	GlyphOrder.setByGID(map, 0x0168, sdsnew("Utilde"));
+	GlyphOrder.setByGID(map, 0x0056, sdsnew("V"));
+	GlyphOrder.setByGID(map, 0x0057, sdsnew("W"));
+	GlyphOrder.setByGID(map, 0x1E82, sdsnew("Wacute"));
+	GlyphOrder.setByGID(map, 0x0174, sdsnew("Wcircumflex"));
+	GlyphOrder.setByGID(map, 0x1E84, sdsnew("Wdieresis"));
+	GlyphOrder.setByGID(map, 0x1E80, sdsnew("Wgrave"));
+	GlyphOrder.setByGID(map, 0x0058, sdsnew("X"));
+	GlyphOrder.setByGID(map, 0x039E, sdsnew("Xi"));
+	GlyphOrder.setByGID(map, 0x0059, sdsnew("Y"));
+	GlyphOrder.setByGID(map, 0x00DD, sdsnew("Yacute"));
+	GlyphOrder.setByGID(map, 0x0176, sdsnew("Ycircumflex"));
+	GlyphOrder.setByGID(map, 0x0178, sdsnew("Ydieresis"));
+	GlyphOrder.setByGID(map, 0x1EF2, sdsnew("Ygrave"));
+	GlyphOrder.setByGID(map, 0x005A, sdsnew("Z"));
+	GlyphOrder.setByGID(map, 0x0179, sdsnew("Zacute"));
+	GlyphOrder.setByGID(map, 0x017D, sdsnew("Zcaron"));
+	GlyphOrder.setByGID(map, 0x017B, sdsnew("Zdotaccent"));
+	GlyphOrder.setByGID(map, 0x0396, sdsnew("Zeta"));
+	GlyphOrder.setByGID(map, 0x0061, sdsnew("a"));
+	GlyphOrder.setByGID(map, 0x00E1, sdsnew("aacute"));
+	GlyphOrder.setByGID(map, 0x0103, sdsnew("abreve"));
+	GlyphOrder.setByGID(map, 0x00E2, sdsnew("acircumflex"));
+	GlyphOrder.setByGID(map, 0x00B4, sdsnew("acute"));
+	GlyphOrder.setByGID(map, 0x0301, sdsnew("acutecomb"));
+	GlyphOrder.setByGID(map, 0x00E4, sdsnew("adieresis"));
+	GlyphOrder.setByGID(map, 0x00E6, sdsnew("ae"));
+	GlyphOrder.setByGID(map, 0x01FD, sdsnew("aeacute"));
+	GlyphOrder.setByGID(map, 0x00E0, sdsnew("agrave"));
+	GlyphOrder.setByGID(map, 0x2135, sdsnew("aleph"));
+	GlyphOrder.setByGID(map, 0x03B1, sdsnew("alpha"));
+	GlyphOrder.setByGID(map, 0x03AC, sdsnew("alphatonos"));
+	GlyphOrder.setByGID(map, 0x0101, sdsnew("amacron"));
+	GlyphOrder.setByGID(map, 0x0026, sdsnew("ampersand"));
+	GlyphOrder.setByGID(map, 0x2220, sdsnew("angle"));
+	GlyphOrder.setByGID(map, 0x2329, sdsnew("angleleft"));
+	GlyphOrder.setByGID(map, 0x232A, sdsnew("angleright"));
+	GlyphOrder.setByGID(map, 0x0387, sdsnew("anoteleia"));
+	GlyphOrder.setByGID(map, 0x0105, sdsnew("aogonek"));
+	GlyphOrder.setByGID(map, 0x2248, sdsnew("approxequal"));
+	GlyphOrder.setByGID(map, 0x00E5, sdsnew("aring"));
+	GlyphOrder.setByGID(map, 0x01FB, sdsnew("aringacute"));
+	GlyphOrder.setByGID(map, 0x2194, sdsnew("arrowboth"));
+	GlyphOrder.setByGID(map, 0x21D4, sdsnew("arrowdblboth"));
+	GlyphOrder.setByGID(map, 0x21D3, sdsnew("arrowdbldown"));
+	GlyphOrder.setByGID(map, 0x21D0, sdsnew("arrowdblleft"));
+	GlyphOrder.setByGID(map, 0x21D2, sdsnew("arrowdblright"));
+	GlyphOrder.setByGID(map, 0x21D1, sdsnew("arrowdblup"));
+	GlyphOrder.setByGID(map, 0x2193, sdsnew("arrowdown"));
+	GlyphOrder.setByGID(map, 0x2190, sdsnew("arrowleft"));
+	GlyphOrder.setByGID(map, 0x2192, sdsnew("arrowright"));
+	GlyphOrder.setByGID(map, 0x2191, sdsnew("arrowup"));
+	GlyphOrder.setByGID(map, 0x2195, sdsnew("arrowupdn"));
+	GlyphOrder.setByGID(map, 0x21A8, sdsnew("arrowupdnbse"));
+	GlyphOrder.setByGID(map, 0x005E, sdsnew("asciicircum"));
+	GlyphOrder.setByGID(map, 0x007E, sdsnew("asciitilde"));
+	GlyphOrder.setByGID(map, 0x002A, sdsnew("asterisk"));
+	GlyphOrder.setByGID(map, 0x2217, sdsnew("asteriskmath"));
+	GlyphOrder.setByGID(map, 0x0040, sdsnew("at"));
+	GlyphOrder.setByGID(map, 0x00E3, sdsnew("atilde"));
+	GlyphOrder.setByGID(map, 0x0062, sdsnew("b"));
+	GlyphOrder.setByGID(map, 0x005C, sdsnew("backslash"));
+	GlyphOrder.setByGID(map, 0x007C, sdsnew("bar"));
+	GlyphOrder.setByGID(map, 0x03B2, sdsnew("beta"));
+	GlyphOrder.setByGID(map, 0x2588, sdsnew("block"));
+	GlyphOrder.setByGID(map, 0x007B, sdsnew("braceleft"));
+	GlyphOrder.setByGID(map, 0x007D, sdsnew("braceright"));
+	GlyphOrder.setByGID(map, 0x005B, sdsnew("bracketleft"));
+	GlyphOrder.setByGID(map, 0x005D, sdsnew("bracketright"));
+	GlyphOrder.setByGID(map, 0x02D8, sdsnew("breve"));
+	GlyphOrder.setByGID(map, 0x00A6, sdsnew("brokenbar"));
+	GlyphOrder.setByGID(map, 0x2022, sdsnew("bullet"));
+	GlyphOrder.setByGID(map, 0x0063, sdsnew("c"));
+	GlyphOrder.setByGID(map, 0x0107, sdsnew("cacute"));
+	GlyphOrder.setByGID(map, 0x02C7, sdsnew("caron"));
+	GlyphOrder.setByGID(map, 0x21B5, sdsnew("carriagereturn"));
+	GlyphOrder.setByGID(map, 0x010D, sdsnew("ccaron"));
+	GlyphOrder.setByGID(map, 0x00E7, sdsnew("ccedilla"));
+	GlyphOrder.setByGID(map, 0x0109, sdsnew("ccircumflex"));
+	GlyphOrder.setByGID(map, 0x010B, sdsnew("cdotaccent"));
+	GlyphOrder.setByGID(map, 0x00B8, sdsnew("cedilla"));
+	GlyphOrder.setByGID(map, 0x00A2, sdsnew("cent"));
+	GlyphOrder.setByGID(map, 0x03C7, sdsnew("chi"));
+	GlyphOrder.setByGID(map, 0x25CB, sdsnew("circle"));
+	GlyphOrder.setByGID(map, 0x2297, sdsnew("circlemultiply"));
+	GlyphOrder.setByGID(map, 0x2295, sdsnew("circleplus"));
+	GlyphOrder.setByGID(map, 0x02C6, sdsnew("circumflex"));
+	GlyphOrder.setByGID(map, 0x2663, sdsnew("club"));
+	GlyphOrder.setByGID(map, 0x003A, sdsnew("colon"));
+	GlyphOrder.setByGID(map, 0x20A1, sdsnew("colonmonetary"));
+	GlyphOrder.setByGID(map, 0x002C, sdsnew("comma"));
+	GlyphOrder.setByGID(map, 0x2245, sdsnew("congruent"));
+	GlyphOrder.setByGID(map, 0x00A9, sdsnew("copyright"));
+	GlyphOrder.setByGID(map, 0x00A4, sdsnew("currency"));
+	GlyphOrder.setByGID(map, 0x0064, sdsnew("d"));
+	GlyphOrder.setByGID(map, 0x2020, sdsnew("dagger"));
+	GlyphOrder.setByGID(map, 0x2021, sdsnew("daggerdbl"));
+	GlyphOrder.setByGID(map, 0x010F, sdsnew("dcaron"));
+	GlyphOrder.setByGID(map, 0x0111, sdsnew("dcroat"));
+	GlyphOrder.setByGID(map, 0x00B0, sdsnew("degree"));
+	GlyphOrder.setByGID(map, 0x03B4, sdsnew("delta"));
+	GlyphOrder.setByGID(map, 0x2666, sdsnew("diamond"));
+	GlyphOrder.setByGID(map, 0x00A8, sdsnew("dieresis"));
+	GlyphOrder.setByGID(map, 0x0385, sdsnew("dieresistonos"));
+	GlyphOrder.setByGID(map, 0x00F7, sdsnew("divide"));
+	GlyphOrder.setByGID(map, 0x2593, sdsnew("dkshade"));
+	GlyphOrder.setByGID(map, 0x2584, sdsnew("dnblock"));
+	GlyphOrder.setByGID(map, 0x0024, sdsnew("dollar"));
+	GlyphOrder.setByGID(map, 0x20AB, sdsnew("dong"));
+	GlyphOrder.setByGID(map, 0x02D9, sdsnew("dotaccent"));
+	GlyphOrder.setByGID(map, 0x0323, sdsnew("dotbelowcomb"));
+	GlyphOrder.setByGID(map, 0x0131, sdsnew("dotlessi"));
+	GlyphOrder.setByGID(map, 0x22C5, sdsnew("dotmath"));
+	GlyphOrder.setByGID(map, 0x0065, sdsnew("e"));
+	GlyphOrder.setByGID(map, 0x00E9, sdsnew("eacute"));
+	GlyphOrder.setByGID(map, 0x0115, sdsnew("ebreve"));
+	GlyphOrder.setByGID(map, 0x011B, sdsnew("ecaron"));
+	GlyphOrder.setByGID(map, 0x00EA, sdsnew("ecircumflex"));
+	GlyphOrder.setByGID(map, 0x00EB, sdsnew("edieresis"));
+	GlyphOrder.setByGID(map, 0x0117, sdsnew("edotaccent"));
+	GlyphOrder.setByGID(map, 0x00E8, sdsnew("egrave"));
+	GlyphOrder.setByGID(map, 0x0038, sdsnew("eight"));
+	GlyphOrder.setByGID(map, 0x2208, sdsnew("element"));
+	GlyphOrder.setByGID(map, 0x2026, sdsnew("ellipsis"));
+	GlyphOrder.setByGID(map, 0x0113, sdsnew("emacron"));
+	GlyphOrder.setByGID(map, 0x2014, sdsnew("emdash"));
+	GlyphOrder.setByGID(map, 0x2205, sdsnew("emptyset"));
+	GlyphOrder.setByGID(map, 0x2013, sdsnew("endash"));
+	GlyphOrder.setByGID(map, 0x014B, sdsnew("eng"));
+	GlyphOrder.setByGID(map, 0x0119, sdsnew("eogonek"));
+	GlyphOrder.setByGID(map, 0x03B5, sdsnew("epsilon"));
+	GlyphOrder.setByGID(map, 0x03AD, sdsnew("epsilontonos"));
+	GlyphOrder.setByGID(map, 0x003D, sdsnew("equal"));
+	GlyphOrder.setByGID(map, 0x2261, sdsnew("equivalence"));
+	GlyphOrder.setByGID(map, 0x212E, sdsnew("estimated"));
+	GlyphOrder.setByGID(map, 0x03B7, sdsnew("eta"));
+	GlyphOrder.setByGID(map, 0x03AE, sdsnew("etatonos"));
+	GlyphOrder.setByGID(map, 0x00F0, sdsnew("eth"));
+	GlyphOrder.setByGID(map, 0x0021, sdsnew("exclam"));
+	GlyphOrder.setByGID(map, 0x203C, sdsnew("exclamdbl"));
+	GlyphOrder.setByGID(map, 0x00A1, sdsnew("exclamdown"));
+	GlyphOrder.setByGID(map, 0x2203, sdsnew("existential"));
+	GlyphOrder.setByGID(map, 0x0066, sdsnew("f"));
+	GlyphOrder.setByGID(map, 0x2640, sdsnew("female"));
+	GlyphOrder.setByGID(map, 0x2012, sdsnew("figuredash"));
+	GlyphOrder.setByGID(map, 0x25A0, sdsnew("filledbox"));
+	GlyphOrder.setByGID(map, 0x25AC, sdsnew("filledrect"));
+	GlyphOrder.setByGID(map, 0x0035, sdsnew("five"));
+	GlyphOrder.setByGID(map, 0x215D, sdsnew("fiveeighths"));
+	GlyphOrder.setByGID(map, 0x0192, sdsnew("florin"));
+	GlyphOrder.setByGID(map, 0x0034, sdsnew("four"));
+	GlyphOrder.setByGID(map, 0x2044, sdsnew("fraction"));
+	GlyphOrder.setByGID(map, 0x20A3, sdsnew("franc"));
+	GlyphOrder.setByGID(map, 0x0067, sdsnew("g"));
+	GlyphOrder.setByGID(map, 0x03B3, sdsnew("gamma"));
+	GlyphOrder.setByGID(map, 0x011F, sdsnew("gbreve"));
+	GlyphOrder.setByGID(map, 0x01E7, sdsnew("gcaron"));
+	GlyphOrder.setByGID(map, 0x011D, sdsnew("gcircumflex"));
+	GlyphOrder.setByGID(map, 0x0121, sdsnew("gdotaccent"));
+	GlyphOrder.setByGID(map, 0x00DF, sdsnew("germandbls"));
+	GlyphOrder.setByGID(map, 0x2207, sdsnew("gradient"));
+	GlyphOrder.setByGID(map, 0x0060, sdsnew("grave"));
+	GlyphOrder.setByGID(map, 0x0300, sdsnew("gravecomb"));
+	GlyphOrder.setByGID(map, 0x003E, sdsnew("greater"));
+	GlyphOrder.setByGID(map, 0x2265, sdsnew("greaterequal"));
+	GlyphOrder.setByGID(map, 0x00AB, sdsnew("guillemotleft"));
+	GlyphOrder.setByGID(map, 0x00BB, sdsnew("guillemotright"));
+	GlyphOrder.setByGID(map, 0x2039, sdsnew("guilsinglleft"));
+	GlyphOrder.setByGID(map, 0x203A, sdsnew("guilsinglright"));
+	GlyphOrder.setByGID(map, 0x0068, sdsnew("h"));
+	GlyphOrder.setByGID(map, 0x0127, sdsnew("hbar"));
+	GlyphOrder.setByGID(map, 0x0125, sdsnew("hcircumflex"));
+	GlyphOrder.setByGID(map, 0x2665, sdsnew("heart"));
+	GlyphOrder.setByGID(map, 0x0309, sdsnew("hookabovecomb"));
+	GlyphOrder.setByGID(map, 0x2302, sdsnew("house"));
+	GlyphOrder.setByGID(map, 0x02DD, sdsnew("hungarumlaut"));
+	GlyphOrder.setByGID(map, 0x002D, sdsnew("hyphen"));
+	GlyphOrder.setByGID(map, 0x0069, sdsnew("i"));
+	GlyphOrder.setByGID(map, 0x00ED, sdsnew("iacute"));
+	GlyphOrder.setByGID(map, 0x012D, sdsnew("ibreve"));
+	GlyphOrder.setByGID(map, 0x00EE, sdsnew("icircumflex"));
+	GlyphOrder.setByGID(map, 0x00EF, sdsnew("idieresis"));
+	GlyphOrder.setByGID(map, 0x00EC, sdsnew("igrave"));
+	GlyphOrder.setByGID(map, 0x0133, sdsnew("ij"));
+	GlyphOrder.setByGID(map, 0x012B, sdsnew("imacron"));
+	GlyphOrder.setByGID(map, 0x221E, sdsnew("infinity"));
+	GlyphOrder.setByGID(map, 0x222B, sdsnew("integral"));
+	GlyphOrder.setByGID(map, 0x2321, sdsnew("integralbt"));
+	GlyphOrder.setByGID(map, 0x2320, sdsnew("integraltp"));
+	GlyphOrder.setByGID(map, 0x2229, sdsnew("intersection"));
+	GlyphOrder.setByGID(map, 0x25D8, sdsnew("invbullet"));
+	GlyphOrder.setByGID(map, 0x25D9, sdsnew("invcircle"));
+	GlyphOrder.setByGID(map, 0x263B, sdsnew("invsmileface"));
+	GlyphOrder.setByGID(map, 0x012F, sdsnew("iogonek"));
+	GlyphOrder.setByGID(map, 0x03B9, sdsnew("iota"));
+	GlyphOrder.setByGID(map, 0x03CA, sdsnew("iotadieresis"));
+	GlyphOrder.setByGID(map, 0x0390, sdsnew("iotadieresistonos"));
+	GlyphOrder.setByGID(map, 0x03AF, sdsnew("iotatonos"));
+	GlyphOrder.setByGID(map, 0x0129, sdsnew("itilde"));
+	GlyphOrder.setByGID(map, 0x006A, sdsnew("j"));
+	GlyphOrder.setByGID(map, 0x0135, sdsnew("jcircumflex"));
+	GlyphOrder.setByGID(map, 0x006B, sdsnew("k"));
+	GlyphOrder.setByGID(map, 0x03BA, sdsnew("kappa"));
+	GlyphOrder.setByGID(map, 0x0138, sdsnew("kgreenlandic"));
+	GlyphOrder.setByGID(map, 0x006C, sdsnew("l"));
+	GlyphOrder.setByGID(map, 0x013A, sdsnew("lacute"));
+	GlyphOrder.setByGID(map, 0x03BB, sdsnew("lambda"));
+	GlyphOrder.setByGID(map, 0x013E, sdsnew("lcaron"));
+	GlyphOrder.setByGID(map, 0x0140, sdsnew("ldot"));
+	GlyphOrder.setByGID(map, 0x003C, sdsnew("less"));
+	GlyphOrder.setByGID(map, 0x2264, sdsnew("lessequal"));
+	GlyphOrder.setByGID(map, 0x258C, sdsnew("lfblock"));
+	GlyphOrder.setByGID(map, 0x20A4, sdsnew("lira"));
+	GlyphOrder.setByGID(map, 0x2227, sdsnew("logicaland"));
+	GlyphOrder.setByGID(map, 0x00AC, sdsnew("logicalnot"));
+	GlyphOrder.setByGID(map, 0x2228, sdsnew("logicalor"));
+	GlyphOrder.setByGID(map, 0x017F, sdsnew("longs"));
+	GlyphOrder.setByGID(map, 0x25CA, sdsnew("lozenge"));
+	GlyphOrder.setByGID(map, 0x0142, sdsnew("lslash"));
+	GlyphOrder.setByGID(map, 0x2591, sdsnew("ltshade"));
+	GlyphOrder.setByGID(map, 0x006D, sdsnew("m"));
+	GlyphOrder.setByGID(map, 0x00AF, sdsnew("macron"));
+	GlyphOrder.setByGID(map, 0x2642, sdsnew("male"));
+	GlyphOrder.setByGID(map, 0x2212, sdsnew("minus"));
+	GlyphOrder.setByGID(map, 0x2032, sdsnew("minute"));
+	GlyphOrder.setByGID(map, 0x00B5, sdsnew("mu"));
+	GlyphOrder.setByGID(map, 0x00D7, sdsnew("multiply"));
+	GlyphOrder.setByGID(map, 0x266A, sdsnew("musicalnote"));
+	GlyphOrder.setByGID(map, 0x266B, sdsnew("musicalnotedbl"));
+	GlyphOrder.setByGID(map, 0x006E, sdsnew("n"));
+	GlyphOrder.setByGID(map, 0x0144, sdsnew("nacute"));
+	GlyphOrder.setByGID(map, 0x0149, sdsnew("napostrophe"));
+	GlyphOrder.setByGID(map, 0x0148, sdsnew("ncaron"));
+	GlyphOrder.setByGID(map, 0x0039, sdsnew("nine"));
+	GlyphOrder.setByGID(map, 0x2209, sdsnew("notelement"));
+	GlyphOrder.setByGID(map, 0x2260, sdsnew("notequal"));
+	GlyphOrder.setByGID(map, 0x2284, sdsnew("notsubset"));
+	GlyphOrder.setByGID(map, 0x00F1, sdsnew("ntilde"));
+	GlyphOrder.setByGID(map, 0x03BD, sdsnew("nu"));
+	GlyphOrder.setByGID(map, 0x0023, sdsnew("numbersign"));
+	GlyphOrder.setByGID(map, 0x006F, sdsnew("o"));
+	GlyphOrder.setByGID(map, 0x00F3, sdsnew("oacute"));
+	GlyphOrder.setByGID(map, 0x014F, sdsnew("obreve"));
+	GlyphOrder.setByGID(map, 0x00F4, sdsnew("ocircumflex"));
+	GlyphOrder.setByGID(map, 0x00F6, sdsnew("odieresis"));
+	GlyphOrder.setByGID(map, 0x0153, sdsnew("oe"));
+	GlyphOrder.setByGID(map, 0x02DB, sdsnew("ogonek"));
+	GlyphOrder.setByGID(map, 0x00F2, sdsnew("ograve"));
+	GlyphOrder.setByGID(map, 0x01A1, sdsnew("ohorn"));
+	GlyphOrder.setByGID(map, 0x0151, sdsnew("ohungarumlaut"));
+	GlyphOrder.setByGID(map, 0x014D, sdsnew("omacron"));
+	GlyphOrder.setByGID(map, 0x03C9, sdsnew("omega"));
+	GlyphOrder.setByGID(map, 0x03D6, sdsnew("omega1"));
+	GlyphOrder.setByGID(map, 0x03CE, sdsnew("omegatonos"));
+	GlyphOrder.setByGID(map, 0x03BF, sdsnew("omicron"));
+	GlyphOrder.setByGID(map, 0x03CC, sdsnew("omicrontonos"));
+	GlyphOrder.setByGID(map, 0x0031, sdsnew("one"));
+	GlyphOrder.setByGID(map, 0x2024, sdsnew("onedotenleader"));
+	GlyphOrder.setByGID(map, 0x215B, sdsnew("oneeighth"));
+	GlyphOrder.setByGID(map, 0x00BD, sdsnew("onehalf"));
+	GlyphOrder.setByGID(map, 0x00BC, sdsnew("onequarter"));
+	GlyphOrder.setByGID(map, 0x2153, sdsnew("onethird"));
+	GlyphOrder.setByGID(map, 0x25E6, sdsnew("openbullet"));
+	GlyphOrder.setByGID(map, 0x00AA, sdsnew("ordfeminine"));
+	GlyphOrder.setByGID(map, 0x00BA, sdsnew("ordmasculine"));
+	GlyphOrder.setByGID(map, 0x221F, sdsnew("orthogonal"));
+	GlyphOrder.setByGID(map, 0x00F8, sdsnew("oslash"));
+	GlyphOrder.setByGID(map, 0x01FF, sdsnew("oslashacute"));
+	GlyphOrder.setByGID(map, 0x00F5, sdsnew("otilde"));
+	GlyphOrder.setByGID(map, 0x0070, sdsnew("p"));
+	GlyphOrder.setByGID(map, 0x00B6, sdsnew("paragraph"));
+	GlyphOrder.setByGID(map, 0x0028, sdsnew("parenleft"));
+	GlyphOrder.setByGID(map, 0x0029, sdsnew("parenright"));
+	GlyphOrder.setByGID(map, 0x2202, sdsnew("partialdiff"));
+	GlyphOrder.setByGID(map, 0x0025, sdsnew("percent"));
+	GlyphOrder.setByGID(map, 0x002E, sdsnew("period"));
+	GlyphOrder.setByGID(map, 0x00B7, sdsnew("periodcentered"));
+	GlyphOrder.setByGID(map, 0x22A5, sdsnew("perpendicular"));
+	GlyphOrder.setByGID(map, 0x2030, sdsnew("perthousand"));
+	GlyphOrder.setByGID(map, 0x20A7, sdsnew("peseta"));
+	GlyphOrder.setByGID(map, 0x03C6, sdsnew("phi"));
+	GlyphOrder.setByGID(map, 0x03D5, sdsnew("phi1"));
+	GlyphOrder.setByGID(map, 0x03C0, sdsnew("pi"));
+	GlyphOrder.setByGID(map, 0x002B, sdsnew("plus"));
+	GlyphOrder.setByGID(map, 0x00B1, sdsnew("plusminus"));
+	GlyphOrder.setByGID(map, 0x211E, sdsnew("prescription"));
+	GlyphOrder.setByGID(map, 0x220F, sdsnew("product"));
+	GlyphOrder.setByGID(map, 0x2282, sdsnew("propersubset"));
+	GlyphOrder.setByGID(map, 0x2283, sdsnew("propersuperset"));
+	GlyphOrder.setByGID(map, 0x221D, sdsnew("proportional"));
+	GlyphOrder.setByGID(map, 0x03C8, sdsnew("psi"));
+	GlyphOrder.setByGID(map, 0x0071, sdsnew("q"));
+	GlyphOrder.setByGID(map, 0x003F, sdsnew("question"));
+	GlyphOrder.setByGID(map, 0x00BF, sdsnew("questiondown"));
+	GlyphOrder.setByGID(map, 0x0022, sdsnew("quotedbl"));
+	GlyphOrder.setByGID(map, 0x201E, sdsnew("quotedblbase"));
+	GlyphOrder.setByGID(map, 0x201C, sdsnew("quotedblleft"));
+	GlyphOrder.setByGID(map, 0x201D, sdsnew("quotedblright"));
+	GlyphOrder.setByGID(map, 0x2018, sdsnew("quoteleft"));
+	GlyphOrder.setByGID(map, 0x201B, sdsnew("quotereversed"));
+	GlyphOrder.setByGID(map, 0x2019, sdsnew("quoteright"));
+	GlyphOrder.setByGID(map, 0x201A, sdsnew("quotesinglbase"));
+	GlyphOrder.setByGID(map, 0x0027, sdsnew("quotesingle"));
+	GlyphOrder.setByGID(map, 0x0072, sdsnew("r"));
+	GlyphOrder.setByGID(map, 0x0155, sdsnew("racute"));
+	GlyphOrder.setByGID(map, 0x221A, sdsnew("radical"));
+	GlyphOrder.setByGID(map, 0x0159, sdsnew("rcaron"));
+	GlyphOrder.setByGID(map, 0x2286, sdsnew("reflexsubset"));
+	GlyphOrder.setByGID(map, 0x2287, sdsnew("reflexsuperset"));
+	GlyphOrder.setByGID(map, 0x00AE, sdsnew("registered"));
+	GlyphOrder.setByGID(map, 0x2310, sdsnew("revlogicalnot"));
+	GlyphOrder.setByGID(map, 0x03C1, sdsnew("rho"));
+	GlyphOrder.setByGID(map, 0x02DA, sdsnew("ring"));
+	GlyphOrder.setByGID(map, 0x2590, sdsnew("rtblock"));
+	GlyphOrder.setByGID(map, 0x0073, sdsnew("s"));
+	GlyphOrder.setByGID(map, 0x015B, sdsnew("sacute"));
+	GlyphOrder.setByGID(map, 0x0161, sdsnew("scaron"));
+	GlyphOrder.setByGID(map, 0x015F, sdsnew("scedilla"));
+	GlyphOrder.setByGID(map, 0x015D, sdsnew("scircumflex"));
+	GlyphOrder.setByGID(map, 0x2033, sdsnew("second"));
+	GlyphOrder.setByGID(map, 0x00A7, sdsnew("section"));
+	GlyphOrder.setByGID(map, 0x003B, sdsnew("semicolon"));
+	GlyphOrder.setByGID(map, 0x0037, sdsnew("seven"));
+	GlyphOrder.setByGID(map, 0x215E, sdsnew("seveneighths"));
+	GlyphOrder.setByGID(map, 0x2592, sdsnew("shade"));
+	GlyphOrder.setByGID(map, 0x03C3, sdsnew("sigma"));
+	GlyphOrder.setByGID(map, 0x03C2, sdsnew("sigma1"));
+	GlyphOrder.setByGID(map, 0x223C, sdsnew("similar"));
+	GlyphOrder.setByGID(map, 0x0036, sdsnew("six"));
+	GlyphOrder.setByGID(map, 0x002F, sdsnew("slash"));
+	GlyphOrder.setByGID(map, 0x263A, sdsnew("smileface"));
+	GlyphOrder.setByGID(map, 0x0020, sdsnew("space"));
+	GlyphOrder.setByGID(map, 0x2660, sdsnew("spade"));
+	GlyphOrder.setByGID(map, 0x00A3, sdsnew("sterling"));
+	GlyphOrder.setByGID(map, 0x220B, sdsnew("suchthat"));
+	GlyphOrder.setByGID(map, 0x2211, sdsnew("summation"));
+	GlyphOrder.setByGID(map, 0x263C, sdsnew("sun"));
+	GlyphOrder.setByGID(map, 0x0074, sdsnew("t"));
+	GlyphOrder.setByGID(map, 0x03C4, sdsnew("tau"));
+	GlyphOrder.setByGID(map, 0x0167, sdsnew("tbar"));
+	GlyphOrder.setByGID(map, 0x0165, sdsnew("tcaron"));
+	GlyphOrder.setByGID(map, 0x2234, sdsnew("therefore"));
+	GlyphOrder.setByGID(map, 0x03B8, sdsnew("theta"));
+	GlyphOrder.setByGID(map, 0x03D1, sdsnew("theta1"));
+	GlyphOrder.setByGID(map, 0x00FE, sdsnew("thorn"));
+	GlyphOrder.setByGID(map, 0x0033, sdsnew("three"));
+	GlyphOrder.setByGID(map, 0x215C, sdsnew("threeeighths"));
+	GlyphOrder.setByGID(map, 0x00BE, sdsnew("threequarters"));
+	GlyphOrder.setByGID(map, 0x02DC, sdsnew("tilde"));
+	GlyphOrder.setByGID(map, 0x0303, sdsnew("tildecomb"));
+	GlyphOrder.setByGID(map, 0x0384, sdsnew("tonos"));
+	GlyphOrder.setByGID(map, 0x2122, sdsnew("trademark"));
+	GlyphOrder.setByGID(map, 0x25BC, sdsnew("triagdn"));
+	GlyphOrder.setByGID(map, 0x25C4, sdsnew("triaglf"));
+	GlyphOrder.setByGID(map, 0x25BA, sdsnew("triagrt"));
+	GlyphOrder.setByGID(map, 0x25B2, sdsnew("triagup"));
+	GlyphOrder.setByGID(map, 0x0032, sdsnew("two"));
+	GlyphOrder.setByGID(map, 0x2025, sdsnew("twodotenleader"));
+	GlyphOrder.setByGID(map, 0x2154, sdsnew("twothirds"));
+	GlyphOrder.setByGID(map, 0x0075, sdsnew("u"));
+	GlyphOrder.setByGID(map, 0x00FA, sdsnew("uacute"));
+	GlyphOrder.setByGID(map, 0x016D, sdsnew("ubreve"));
+	GlyphOrder.setByGID(map, 0x00FB, sdsnew("ucircumflex"));
+	GlyphOrder.setByGID(map, 0x00FC, sdsnew("udieresis"));
+	GlyphOrder.setByGID(map, 0x00F9, sdsnew("ugrave"));
+	GlyphOrder.setByGID(map, 0x01B0, sdsnew("uhorn"));
+	GlyphOrder.setByGID(map, 0x0171, sdsnew("uhungarumlaut"));
+	GlyphOrder.setByGID(map, 0x016B, sdsnew("umacron"));
+	GlyphOrder.setByGID(map, 0x005F, sdsnew("underscore"));
+	GlyphOrder.setByGID(map, 0x2017, sdsnew("underscoredbl"));
+	GlyphOrder.setByGID(map, 0x222A, sdsnew("union"));
+	GlyphOrder.setByGID(map, 0x2200, sdsnew("universal"));
+	GlyphOrder.setByGID(map, 0x0173, sdsnew("uogonek"));
+	GlyphOrder.setByGID(map, 0x2580, sdsnew("upblock"));
+	GlyphOrder.setByGID(map, 0x03C5, sdsnew("upsilon"));
+	GlyphOrder.setByGID(map, 0x03CB, sdsnew("upsilondieresis"));
+	GlyphOrder.setByGID(map, 0x03B0, sdsnew("upsilondieresistonos"));
+	GlyphOrder.setByGID(map, 0x03CD, sdsnew("upsilontonos"));
+	GlyphOrder.setByGID(map, 0x016F, sdsnew("uring"));
+	GlyphOrder.setByGID(map, 0x0169, sdsnew("utilde"));
+	GlyphOrder.setByGID(map, 0x0076, sdsnew("v"));
+	GlyphOrder.setByGID(map, 0x0077, sdsnew("w"));
+	GlyphOrder.setByGID(map, 0x1E83, sdsnew("wacute"));
+	GlyphOrder.setByGID(map, 0x0175, sdsnew("wcircumflex"));
+	GlyphOrder.setByGID(map, 0x1E85, sdsnew("wdieresis"));
+	GlyphOrder.setByGID(map, 0x2118, sdsnew("weierstrass"));
+	GlyphOrder.setByGID(map, 0x1E81, sdsnew("wgrave"));
+	GlyphOrder.setByGID(map, 0x0078, sdsnew("x"));
+	GlyphOrder.setByGID(map, 0x03BE, sdsnew("xi"));
+	GlyphOrder.setByGID(map, 0x0079, sdsnew("y"));
+	GlyphOrder.setByGID(map, 0x00FD, sdsnew("yacute"));
+	GlyphOrder.setByGID(map, 0x0177, sdsnew("ycircumflex"));
+	GlyphOrder.setByGID(map, 0x00FF, sdsnew("ydieresis"));
+	GlyphOrder.setByGID(map, 0x00A5, sdsnew("yen"));
+	GlyphOrder.setByGID(map, 0x1EF3, sdsnew("ygrave"));
+	GlyphOrder.setByGID(map, 0x007A, sdsnew("z"));
+	GlyphOrder.setByGID(map, 0x017A, sdsnew("zacute"));
+	GlyphOrder.setByGID(map, 0x017E, sdsnew("zcaron"));
+	GlyphOrder.setByGID(map, 0x017C, sdsnew("zdotaccent"));
+	GlyphOrder.setByGID(map, 0x0030, sdsnew("zero"));
+	GlyphOrder.setByGID(map, 0x03B6, sdsnew("zeta"));
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aglfn/aglfn.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,6 @@
+#ifndef CARYLL_SUPPORT_AGLFN_H
+#define CARYLL_SUPPORT_AGLFN_H
+#include "otfcc/glyph-order.h"
+
+void aglfn_setupNames(otfcc_GlyphOrder *map);
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aliases.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aliases.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/aliases.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,60 @@
+#ifndef CARYLL_SUPPORT_ALIASES_H
+#define CARYLL_SUPPORT_ALIASES_H
+
+#include <stdint.h>
+
+#define loggedStep(...)                                                                            \
+	for (bool ___loggedstep_v = (options->logger->startSDS(options->logger,                        \
+	                                                       sdscatprintf(sdsempty(), __VA_ARGS__)), \
+	                             true);                                                            \
+	     ___loggedstep_v; ___loggedstep_v = false, options->logger->finish(options->logger))
+#define logError(...)                                                                              \
+	options->logger->logSDS(options->logger, log_vl_critical, log_type_error,                      \
+	                        sdscatprintf(sdsempty(), __VA_ARGS__));
+#define logWarning(...)                                                                            \
+	options->logger->logSDS(options->logger, log_vl_important, log_type_warning,                   \
+	                        sdscatprintf(sdsempty(), __VA_ARGS__));
+#define logNotice(...)                                                                             \
+	options->logger->logSDS(options->logger, log_vl_notice, log_type_info,                         \
+	                        sdscatprintf(sdsempty(), __VA_ARGS__));
+#define logProgress(...)                                                                           \
+	options->logger->logSDS(options->logger, log_vl_progress, log_type_progress,                   \
+	                        sdscatprintf(sdsempty(), __VA_ARGS__));
+
+#define FOR_TABLE_SILENT(name, table)                                                              \
+	for (int __fortable_keep = 1, __fortable_count = 0, __notfound = 1;                            \
+	     __notfound && __fortable_keep && __fortable_count < packet.numTables;                     \
+	     __fortable_keep = !__fortable_keep, __fortable_count++)                                   \
+		for (otfcc_PacketPiece table = (packet.pieces)[__fortable_count]; __fortable_keep;         \
+		     __fortable_keep = !__fortable_keep)                                                   \
+			if (table.tag == (name))                                                               \
+				for (int __fortable_k2 = 1; __fortable_k2; __fortable_k2 = 0, __notfound = 0)
+
+#define FOR_TABLE(name, table) FOR_TABLE_SILENT(name, table)
+
+#define foreach_index(item, index, vector)                                                         \
+	for (size_t index = 0, keep = 1; keep && index < (vector).length; keep = !keep, index++)       \
+		for (item = (vector).items + index; keep; keep = !keep)
+#define foreach(item, vector) foreach_index(item, __caryll_index, vector)
+#define foreach_hash(id, range) for (id = (range); id != NULL; id = id->hh.next)
+
+typedef uint8_t *font_file_pointer;
+
+// alias "package" otfcc_pHandle to Handle
+#include "otfcc/handle.h"
+#define Handle otfcc_iHandle
+typedef otfcc_GlyphHandle glyph_handle;
+typedef otfcc_FDHandle fd_handle;
+typedef otfcc_LookupHandle lookup_handle;
+
+// alias "package" otfcc_pkgGlyphOrder to GlyphOrder
+#include "otfcc/glyph-order.h"
+#define GlyphOrder otfcc_pkgGlyphOrder
+
+#include "otfcc/table/otl/classdef.h"
+#define ClassDef otl_iClassDef
+
+#include "otfcc/table/otl/coverage.h"
+#define Coverage otl_iCoverage
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,89 @@
+#include "base64.h"
+#include "../otfcc-alloc.h"
+
+static const uint8_t base64_table[64] =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+uint8_t *base64_encode(const uint8_t *src, size_t len, size_t *out_len) {
+	uint8_t *out, *pos;
+	const uint8_t *end, *in;
+	size_t olen;
+
+	olen = (len + 3 - 1) / 3 * 4; /* 3-byte blocks to 4-byte */
+	olen++;                       /* nul termination */
+	out = __caryll_malloc(sizeof(uint8_t) * olen);
+	if (out == NULL) return NULL;
+
+	end = src + len;
+	in = src;
+	pos = out;
+	while (end - in >= 3) {
+		*pos++ = base64_table[in[0] >> 2];
+		*pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)];
+		*pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)];
+		*pos++ = base64_table[in[2] & 0x3f];
+		in += 3;
+	}
+
+	if (end - in) {
+		*pos++ = base64_table[in[0] >> 2];
+		if (end - in == 1) {
+			*pos++ = base64_table[(in[0] & 0x03) << 4];
+			*pos++ = '=';
+		} else {
+			*pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)];
+			*pos++ = base64_table[(in[1] & 0x0f) << 2];
+		}
+		*pos++ = '=';
+	}
+
+	*pos = '\0';
+	if (out_len) *out_len = pos - out;
+	return out;
+}
+
+uint8_t *base64_decode(const uint8_t *src, size_t len, size_t *out_len) {
+	uint8_t dtable[256], *out, *pos, in[4], block[4], tmp;
+	size_t i, count;
+
+	memset(dtable, 0x80, 256);
+	for (i = 0; i < sizeof(base64_table); i++)
+		dtable[base64_table[i]] = i;
+	dtable['='] = 0;
+
+	count = 0;
+	for (i = 0; i < len; i++) {
+		if (dtable[src[i]] != 0x80) count++;
+	}
+
+	if (count % 4) return NULL;
+
+	pos = out = __caryll_malloc(sizeof(uint8_t) * count);
+	if (out == NULL) return NULL;
+
+	count = 0;
+	for (i = 0; i < len; i++) {
+		tmp = dtable[src[i]];
+		if (tmp == 0x80) continue;
+
+		in[count] = src[i];
+		block[count] = tmp;
+		count++;
+		if (count == 4) {
+			*pos++ = (block[0] << 2) | (block[1] >> 4);
+			*pos++ = (block[1] << 4) | (block[2] >> 2);
+			*pos++ = (block[2] << 6) | block[3];
+			count = 0;
+		}
+	}
+
+	if (pos > out) {
+		if (in[2] == '=')
+			pos -= 2;
+		else if (in[3] == '=')
+			pos--;
+	}
+
+	*out_len = pos - out;
+	return out;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/base64/base64.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,10 @@
+#ifndef CARYLL_SUPPORT_BASE64_H
+#define CARYLL_SUPPORT_BASE64_H
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+uint8_t *base64_encode(const uint8_t *src, size_t len, size_t *out_len);
+uint8_t *base64_decode(const uint8_t *src, size_t len, size_t *out_len);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/bin-io.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/bin-io.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/bin-io.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,171 @@
+#ifndef CARYLL_SUPPORT_BIN_IO_H
+#define CARYLL_SUPPORT_BIN_IO_H
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef INLINE
+#ifdef _MSC_VER
+#define INLINE __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define INLINE inline /* use standard inline */
+#endif
+#endif
+
+static INLINE bool otfcc_check_endian(void) {
+	union {
+		uint8_t i1[2];
+		uint16_t i2;
+	} check_union = {.i2 = 1}; // if you don't have a new VC, upgrade it
+
+	return (check_union.i1[0] == 1);
+}
+
+static INLINE uint16_t otfcc_endian_convert16(uint16_t i) {
+	if (otfcc_check_endian()) {
+		union {
+			uint8_t i1[2];
+			uint16_t i2;
+		} src, des;
+
+		src.i2 = i;
+
+		des.i1[0] = src.i1[1];
+		des.i1[1] = src.i1[0];
+
+		return des.i2;
+	} else {
+		return i;
+	}
+}
+
+static INLINE uint32_t otfcc_endian_convert32(uint32_t i) {
+	if (otfcc_check_endian()) {
+		union {
+			uint8_t i1[4];
+			uint32_t i4;
+		} src, des;
+
+		src.i4 = i;
+
+		des.i1[0] = src.i1[3];
+		des.i1[1] = src.i1[2];
+		des.i1[2] = src.i1[1];
+		des.i1[3] = src.i1[0];
+
+		return des.i4;
+	} else {
+		return i;
+	}
+}
+
+static INLINE uint64_t otfcc_endian_convert64(uint64_t i) {
+	if (otfcc_check_endian()) {
+		union {
+			uint8_t i1[8];
+			uint64_t i8;
+		} src, des;
+
+		src.i8 = i;
+
+		des.i1[0] = src.i1[7];
+		des.i1[1] = src.i1[6];
+		des.i1[2] = src.i1[5];
+		des.i1[3] = src.i1[4];
+		des.i1[4] = src.i1[3];
+		des.i1[5] = src.i1[2];
+		des.i1[6] = src.i1[1];
+		des.i1[7] = src.i1[0];
+
+		return des.i8;
+	} else {
+		return i;
+	}
+}
+
+static INLINE uint16_t otfcc_get16u(FILE *file) {
+	uint16_t tmp;
+	size_t sizeRead = fread(&tmp, 2, 1, file);
+	if (!sizeRead) {
+		fprintf(stderr, "File corruption of terminated unexpectedly.\n");
+		exit(EXIT_FAILURE);
+	}
+	return otfcc_endian_convert16(tmp);
+}
+
+static INLINE uint32_t otfcc_get32u(FILE *file) {
+	uint32_t tmp;
+	size_t sizeRead = fread(&tmp, 4, 1, file);
+	if (!sizeRead) {
+		fprintf(stderr, "File corruption of terminated unexpectedly.\n");
+		exit(EXIT_FAILURE);
+	}
+	return otfcc_endian_convert32(tmp);
+}
+
+static INLINE uint64_t otfcc_get64u(FILE *file) {
+	uint64_t tmp;
+	size_t sizeRead = fread(&tmp, 8, 1, file);
+	if (!sizeRead) {
+		fprintf(stderr, "File corruption of terminated unexpectedly.\n");
+		exit(EXIT_FAILURE);
+	}
+	return otfcc_endian_convert64(tmp);
+}
+
+// data reader
+static INLINE uint8_t read_8u(const uint8_t *src) {
+	return src[0];
+}
+static INLINE uint16_t read_16u(const uint8_t *src) {
+	uint16_t b0 = ((uint16_t)src[0]) << 8;
+	uint16_t b1 = ((uint16_t)src[1]);
+	return (b0 | b1);
+}
+static INLINE uint32_t read_24u(const uint8_t *src) {
+	uint32_t b0 = ((uint32_t)src[0]) << 16;
+	uint32_t b1 = ((uint32_t)src[1]) << 8;
+	uint32_t b2 = ((uint32_t)src[2]);
+	return (b0 | b1 | b2);
+}
+static INLINE uint32_t read_32u(const uint8_t *src) {
+	uint32_t b0 = ((uint32_t)src[0]) << 24;
+	uint32_t b1 = ((uint32_t)src[1]) << 16;
+	uint32_t b2 = ((uint32_t)src[2]) << 8;
+	uint32_t b3 = ((uint32_t)src[3]);
+	return (b0 | b1 | b2 | b3);
+}
+static INLINE uint64_t read_64u(const uint8_t *src) {
+	uint64_t b0 = ((uint64_t)src[0]) << 56;
+	uint64_t b1 = ((uint64_t)src[1]) << 48;
+	uint64_t b2 = ((uint64_t)src[2]) << 40;
+	uint64_t b3 = ((uint64_t)src[3]) << 32;
+	uint64_t b4 = ((uint64_t)src[4]) << 24;
+	uint64_t b5 = ((uint64_t)src[5]) << 16;
+	uint64_t b6 = ((uint64_t)src[6]) << 8;
+	uint64_t b7 = ((uint64_t)src[7]);
+	return (b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7);
+}
+static INLINE int8_t read_8s(const uint8_t *src) {
+	return (int8_t)read_8u(src);
+}
+static INLINE int16_t read_16s(const uint8_t *src) {
+	return (int16_t)read_16u(src);
+}
+static INLINE int32_t read_32s(const uint8_t *src) {
+	return (int32_t)read_32u(src);
+}
+static INLINE int64_t read_64s(const uint8_t *src) {
+	return (int64_t)read_64u(src);
+}
+
+static INLINE uint16_t be16(uint16_t x) {
+	return ((x & 0xff) << 8) | ((x & 0xFF00) >> 8);
+}
+static INLINE uint32_t be32(uint32_t x) {
+	return ((x & 0x000000ff) << 24) | ((x & 0x0000FF00) << 8) | ((x & 0x00FF0000) >> 8) |
+	       ((x & 0xFF000000) >> 24);
+}
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/buffer.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/buffer.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/buffer/buffer.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,231 @@
+#include "caryll/buffer.h"
+#include "support/otfcc-alloc.h"
+
+caryll_Buffer *bufnew() {
+	caryll_Buffer *buf;
+	NEW(buf);
+	buf->size = buf->free = 0;
+	return buf;
+}
+void buffree(caryll_Buffer *buf) {
+	if (!buf) return;
+	if (buf->data) FREE(buf->data);
+	FREE(buf);
+}
+size_t buflen(caryll_Buffer *buf) {
+	return buf->size;
+}
+size_t bufpos(caryll_Buffer *buf) {
+	return buf->cursor;
+}
+void bufseek(caryll_Buffer *buf, size_t pos) {
+	buf->cursor = pos;
+}
+void bufclear(caryll_Buffer *buf) {
+	buf->cursor = 0;
+	buf->free = buf->size + buf->free;
+	buf->size = 0;
+}
+
+static void bufbeforewrite(caryll_Buffer *buf, size_t towrite) {
+	size_t currentSize = buf->size;
+	size_t allocated = buf->size + buf->free;
+	size_t required = buf->cursor + towrite;
+	if (required < currentSize) {
+		// Completely overlap.
+		return;
+	} else if (required <= allocated) {
+		// Within range without reallocation
+		buf->size = required;
+		buf->free = allocated - buf->size;
+	} else {
+		// Needs realloc
+		buf->size = required;
+		buf->free = required; // Double growth
+		if (buf->free > 0x1000000) { buf->free = 0x1000000; }
+		RESIZE(buf->data, buf->size + buf->free);
+	}
+}
+void bufwrite8(caryll_Buffer *buf, uint8_t byte) {
+	bufbeforewrite(buf, 1);
+	buf->data[buf->cursor++] = byte;
+}
+void bufwrite16l(caryll_Buffer *buf, uint16_t x) {
+	bufbeforewrite(buf, 2);
+	buf->data[buf->cursor++] = x & 0xFF;
+	buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+}
+void bufwrite16b(caryll_Buffer *buf, uint16_t x) {
+	bufbeforewrite(buf, 2);
+	buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+	buf->data[buf->cursor++] = x & 0xFF;
+}
+void bufwrite24l(caryll_Buffer *buf, uint32_t x) {
+	bufbeforewrite(buf, 3);
+	buf->data[buf->cursor++] = x & 0xFF;
+	buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+}
+void bufwrite24b(caryll_Buffer *buf, uint32_t x) {
+	bufbeforewrite(buf, 3);
+	buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+	buf->data[buf->cursor++] = x & 0xFF;
+}
+void bufwrite32l(caryll_Buffer *buf, uint32_t x) {
+	bufbeforewrite(buf, 4);
+	buf->data[buf->cursor++] = x & 0xFF;
+	buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 24) & 0xFF;
+}
+void bufwrite32b(caryll_Buffer *buf, uint32_t x) {
+	bufbeforewrite(buf, 4);
+	buf->data[buf->cursor++] = (x >> 24) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+	buf->data[buf->cursor++] = x & 0xFF;
+}
+void bufwrite64l(caryll_Buffer *buf, uint64_t x) {
+	bufbeforewrite(buf, 8);
+	buf->data[buf->cursor++] = x & 0xFF;
+	buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 24) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 32) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 40) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 48) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 56) & 0xFF;
+}
+void bufwrite64b(caryll_Buffer *buf, uint64_t x) {
+	bufbeforewrite(buf, 8);
+	buf->data[buf->cursor++] = (x >> 56) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 48) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 40) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 32) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 24) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 16) & 0xFF;
+	buf->data[buf->cursor++] = (x >> 8) & 0xFF;
+	buf->data[buf->cursor++] = x & 0xFF;
+}
+
+caryll_Buffer *bufninit(uint32_t n, ...) {
+	caryll_Buffer *buf = bufnew();
+	bufbeforewrite(buf, n);
+	va_list ap;
+	va_start(ap, n);
+	for (uint16_t j = 0; j < n; j++) {
+		bufwrite8(buf, (uint8_t)va_arg(ap, int));
+	}
+	va_end(ap);
+	return buf;
+}
+void bufnwrite8(caryll_Buffer *buf, uint32_t n, ...) {
+	bufbeforewrite(buf, n);
+	va_list ap;
+	va_start(ap, n);
+	for (uint16_t j = 0; j < n; j++) {
+		bufwrite8(buf, (uint8_t)va_arg(ap, int));
+	}
+	va_end(ap);
+}
+
+void bufwrite_sds(caryll_Buffer *buf, sds str) {
+	if (!str) return;
+	size_t len = sdslen(str);
+	if (!len) return;
+	bufbeforewrite(buf, len);
+	memcpy(buf->data + buf->cursor, str, len);
+	buf->cursor += len;
+}
+void bufwrite_str(caryll_Buffer *buf, const char *str) {
+	if (!str) return;
+	size_t len = strlen(str);
+	if (!len) return;
+	bufbeforewrite(buf, len);
+	memcpy(buf->data + buf->cursor, str, len);
+	buf->cursor += len;
+}
+void bufwrite_bytes(caryll_Buffer *buf, size_t len, const uint8_t *str) {
+	if (!str) return;
+	if (!len) return;
+	bufbeforewrite(buf, len);
+	memcpy(buf->data + buf->cursor, str, len);
+	buf->cursor += len;
+}
+void bufwrite_buf(caryll_Buffer *buf, caryll_Buffer *that) {
+	if (!that || !that->data) return;
+	size_t len = buflen(that);
+	bufbeforewrite(buf, len);
+	memcpy(buf->data + buf->cursor, that->data, len);
+	buf->cursor += len;
+}
+void bufwrite_bufdel(caryll_Buffer *buf, caryll_Buffer *that) {
+	if (!that) return;
+	if (!that->data) {
+		buffree(that);
+		return;
+	}
+	size_t len = buflen(that);
+	bufbeforewrite(buf, len);
+	memcpy(buf->data + buf->cursor, that->data, len);
+	buffree(that);
+	buf->cursor += len;
+}
+
+void buflongalign(caryll_Buffer *buf) {
+	size_t cp = buf->cursor;
+	bufseek(buf, buflen(buf));
+	if (buflen(buf) % 4 == 1) {
+		bufwrite8(buf, 0);
+		bufwrite8(buf, 0);
+		bufwrite8(buf, 0);
+	} else if (buflen(buf) % 4 == 2) {
+		bufwrite8(buf, 0);
+		bufwrite8(buf, 0);
+	} else if (buflen(buf) % 4 == 3) {
+		bufwrite8(buf, 0);
+	}
+	bufseek(buf, cp);
+}
+
+// bufpingpong16b writes a buffer and an offset towards it.
+// [ ^                            ] + ###### that
+//   ^cp             ^offset
+//                           |
+//                           V
+// [ @^              ######       ] , and the value of [@] equals to the former
+// offset.
+//    ^cp                  ^offset
+// Common in writing OpenType features.
+void bufping16b(caryll_Buffer *buf, size_t *offset, size_t *cp) {
+	bufwrite16b(buf, *offset);
+	*cp = buf->cursor;
+	bufseek(buf, *offset);
+}
+void bufping16bd(caryll_Buffer *buf, size_t *offset, size_t *shift, size_t *cp) {
+	bufwrite16b(buf, *offset - *shift);
+	*cp = buf->cursor;
+	bufseek(buf, *offset);
+}
+void bufpong(caryll_Buffer *buf, size_t *offset, size_t *cp) {
+	*offset = buf->cursor;
+	bufseek(buf, *cp);
+}
+void bufpingpong16b(caryll_Buffer *buf, caryll_Buffer *that, size_t *offset, size_t *cp) {
+	bufwrite16b(buf, *offset);
+	*cp = buf->cursor;
+	bufseek(buf, *offset);
+	bufwrite_bufdel(buf, that);
+	*offset = buf->cursor;
+	bufseek(buf, *cp);
+}
+
+void bufprint(caryll_Buffer *buf) {
+	for (size_t j = 0; j < buf->size; j++) {
+		if (j % 16) fprintf(stderr, " ");
+		fprintf(stderr, "%02X", buf->data[j]);
+		if (j % 16 == 15) fprintf(stderr, "\n");
+	}
+	fprintf(stderr, "\n");
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/element-impl.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/element-impl.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/element-impl.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,275 @@
+#ifndef CARYLL_SUPPORT_ELEMENT_IMPL_H
+#define CARYLL_SUPPORT_ELEMENT_IMPL_H
+
+#include "caryll/element.h"
+#include "otfcc-alloc.h"
+
+#ifndef __CARYLL_INLINE__
+#ifdef _MSC_VER
+#define __CARYLL_INLINE__ __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define __CARYLL_INLINE__ inline /* use standard inline */
+#endif
+#endif
+
+#define __NARG__(...) __NARG_I_(__VA_ARGS__, __RSEQ_N())
+#define __NARG_I_(...) __ARG_N(__VA_ARGS__)
+#define __ARG_N(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18,   \
+                _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34,    \
+                _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50,    \
+                _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, N, ...)           \
+	N
+#define __RSEQ_N()                                                                                 \
+	63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41,    \
+	    40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19,    \
+	    18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
+
+// general definition for any function name
+#define __CARYLL_VFUNC__2(name, n) name##n
+#define __CARYLL_VFUNC__1(name, n) __CARYLL_VFUNC__2(name, n)
+#define __CARYLLVFUNC(func, ...) __CARYLL_VFUNC__1(func, __NARG__(__VA_ARGS__))(__VA_ARGS__)
+
+#define caryll_trivialInit(T)                                                                      \
+	static __CARYLL_INLINE__ void T##_init(MODIFY T *x) {                                          \
+		memset(x, 0, sizeof(T));                                                                   \
+	}
+#define caryll_nonTrivialInit(T, __fn_init)                                                        \
+	static __CARYLL_INLINE__ void T##_init(MODIFY T *x) {                                          \
+		(__fn_init)(x);                                                                            \
+	}
+#define caryll_trivialEmpty(T)                                                                     \
+	static __CARYLL_INLINE__ T T##_empty() {                                                       \
+		T x;                                                                                       \
+		T##_init(&x);                                                                              \
+		return x;                                                                                  \
+	}
+#define caryll_trivialCreate(T)                                                                    \
+	static __CARYLL_INLINE__ T *T##_create() {                                                     \
+		T *x = (T *)malloc(sizeof(T));                                                             \
+		T##_init(x);                                                                               \
+		return x;                                                                                  \
+	}
+#define caryll_trivialCopy(T)                                                                      \
+	static __CARYLL_INLINE__ void T##_copy(MODIFY T *dst, const T *src) {                          \
+		memcpy(dst, src, sizeof(T));                                                               \
+	}
+#define caryll_nonTrivialCopy(T, __fn_copy)                                                        \
+	static __CARYLL_INLINE__ void T##_copy(MODIFY T *dst, const T *src) {                          \
+		(__fn_copy)(dst, src);                                                                     \
+	}
+#define caryll_trivialMove(T)                                                                      \
+	static __CARYLL_INLINE__ void T##_move(MODIFY T *dst, T *src) {                                \
+		memcpy(dst, src, sizeof(T));                                                               \
+		T##_init(src);                                                                             \
+	}
+#define caryll_nonTrivialMove(T, __fn_move)                                                        \
+	static __CARYLL_INLINE__ void T##_move(MODIFY T *dst, T *src) {                                \
+		(__fn_move)(dst, src);                                                                     \
+		T##_init(src);                                                                             \
+	}
+#define caryll_trivialDispose(T)                                                                   \
+	static __CARYLL_INLINE__ void T##_dispose(MODIFY T *x) {                                       \
+		/* trivial */                                                                              \
+	}
+#define caryll_nonTrivialDispose(T, __fn_dispose)                                                  \
+	static __CARYLL_INLINE__ void T##_dispose(MODIFY T *x) {                                       \
+		(__fn_dispose)(x);                                                                         \
+	}
+#define caryll_trivialFree(T)                                                                      \
+	static __CARYLL_INLINE__ void T##_free(MOVE T *x) {                                            \
+		if (!x) return;                                                                            \
+		T##_dispose(x);                                                                            \
+		__caryll_free(x);                                                                          \
+	}
+#define caryll_trivialDup(T)                                                                       \
+	static __CARYLL_INLINE__ T T##_dup(const T src) {                                              \
+		T dst;                                                                                     \
+		T##_copy(&dst, &src);                                                                      \
+		return dst;                                                                                \
+	}
+#define caryll_trivialReplace(T)                                                                   \
+	static __CARYLL_INLINE__ void T##_replace(MODIFY T *dst, MOVE const T src) {                   \
+		T##_dispose(dst);                                                                          \
+		memcpy(dst, &src, sizeof(T));                                                              \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void T##_copyReplace(MODIFY T *dst, const T src) {                    \
+		T##_dispose(dst);                                                                          \
+		T##_copy(dst, &src);                                                                       \
+	}
+
+#define caryll_standardTypeFn1(T)                                                                  \
+	caryll_trivialInit(T);                                                                         \
+	caryll_trivialCopy(T);                                                                         \
+	caryll_trivialDispose(T);                                                                      \
+	caryll_trivialMove(T);                                                                         \
+	caryll_trivialReplace(T);
+#define caryll_standardTypeFn2(T, __fn_dispose)                                                    \
+	caryll_trivialInit(T);                                                                         \
+	caryll_trivialCopy(T);                                                                         \
+	caryll_nonTrivialDispose(T, __fn_dispose);                                                     \
+	caryll_trivialMove(T);                                                                         \
+	caryll_trivialReplace(T);
+#define caryll_standardTypeFn3(T, __fn_init, __fn_dispose)                                         \
+	caryll_nonTrivialInit(T, __fn_init);                                                           \
+	caryll_trivialCopy(T);                                                                         \
+	caryll_nonTrivialDispose(T, __fn_dispose);                                                     \
+	caryll_trivialMove(T);                                                                         \
+	caryll_trivialReplace(T);
+#define caryll_standardTypeFn4(T, __fn_init, __fn_copy, __fn_dispose)                              \
+	caryll_nonTrivialInit(T, __fn_init);                                                           \
+	caryll_nonTrivialCopy(T, __fn_copy);                                                           \
+	caryll_nonTrivialDispose(T, __fn_dispose);                                                     \
+	caryll_trivialMove(T);                                                                         \
+	caryll_trivialReplace(T);
+#define caryll_standardTypeFn5(T, __fn_init, __fn_copy, __fn_dispose, __fn_move)                   \
+	caryll_nonTrivialInit(T, __fn_init);                                                           \
+	caryll_nonTrivialCopy(T, __fn_copy);                                                           \
+	caryll_nonTrivialDispose(T, __fn_dispose);                                                     \
+	caryll_nonTrivialMove(T, __fn_move);                                                           \
+	caryll_trivialReplace(T);
+
+#define caryll_standardTypeMethods(T)                                                              \
+	.init = T##_init, .copy = T##_copy, .dispose = T##_dispose, .move = T##_move,                  \
+	.replace = T##_replace, .copyReplace = T##_copyReplace
+#define caryll_standardRefTypeMethods(T)                                                           \
+	caryll_standardTypeMethods(T), .create = T##_create, .free = T##_free
+#define caryll_standardValTypeMethods(T)                                                           \
+	caryll_standardTypeMethods(T), .empty = T##_empty, .dup = T##_dup
+
+#define caryll_standardTypeFn(...) __CARYLLVFUNC(caryll_standardTypeFn, __VA_ARGS__)
+
+#ifdef __GNUC__
+
+// GCC requires adding ## before __VA_ARGS__.
+// Make it happy.
+
+#define caryll_standardRefTypeFn(T, ...)                                                           \
+	caryll_standardTypeFn(T, ##__VA_ARGS__);                                                       \
+	caryll_trivialCreate(T);                                                                       \
+	caryll_trivialFree(T);
+#define caryll_standardValTypeFn(T, ...)                                                           \
+	caryll_standardTypeFn(T, ##__VA_ARGS__);                                                       \
+	caryll_trivialEmpty(T);                                                                        \
+	caryll_trivialDup(T);
+
+#define caryll_standardType(T, __name, ...)                                                        \
+	caryll_standardTypeFn(T, ##__VA_ARGS__);                                                       \
+	caryll_ElementInterfaceOf(T) __name = {caryll_standardTypeMethods(T)};
+#define caryll_standardRefType(T, __name, ...)                                                     \
+	caryll_standardRefTypeFn(T, ##__VA_ARGS__);                                                    \
+	caryll_ElementInterfaceOf(T) __name = {caryll_standardRefTypeMethods(T)};
+#define caryll_standardValType(T, __name, ...)                                                     \
+	caryll_standardValTypeFn(T, ##__VA_ARGS__);                                                    \
+	caryll_ElementInterfaceOf(T) __name = {caryll_standardValTypeMethods(T)};
+
+#else
+
+#define caryll_standardRefTypeFn(T, ...)                                                           \
+	caryll_standardTypeFn(T, __VA_ARGS__);                                                         \
+	caryll_trivialCreate(T);                                                                       \
+	caryll_trivialFree(T);
+#define caryll_standardValTypeFn(T, ...)                                                           \
+	caryll_standardTypeFn(T, __VA_ARGS__);                                                         \
+	caryll_trivialEmpty(T);                                                                        \
+	caryll_trivialDup(T);
+
+#define caryll_standardType(T, __name, ...)                                                        \
+	caryll_standardTypeFn(T, __VA_ARGS__);                                                         \
+	caryll_ElementInterfaceOf(T) __name = {caryll_standardTypeMethods(T)};
+#define caryll_standardRefType(T, __name, ...)                                                     \
+	caryll_standardRefTypeFn(T, __VA_ARGS__);                                                      \
+	caryll_ElementInterfaceOf(T) __name = {caryll_standardRefTypeMethods(T)};
+#define caryll_standardValType(T, __name, ...)                                                     \
+	caryll_standardValTypeFn(T, __VA_ARGS__);                                                      \
+	caryll_ElementInterfaceOf(T) __name = {caryll_standardValTypeMethods(T)};
+
+#endif
+
+//// Traits
+
+// Show
+#define caryll_ShowFns(T, _fn_Show)                                                                \
+	static __CARYLL_INLINE__ void T##_show(const T a) {                                            \
+		return (_fn_Show)(a);                                                                      \
+	}
+#define caryll_ShowAssigns(T) .show = T##_show
+
+// Ord
+#define caryll_OrdFns(T, _fnCompare)                                                               \
+	static __CARYLL_INLINE__ int T##_compare(const T a, const T b) {                               \
+		return (_fnCompare)(a, b);                                                                 \
+	}                                                                                              \
+	static __CARYLL_INLINE__ int T##_compareRef(const T *a, const T *b) {                          \
+		return (_fnCompare)(*a, *b);                                                               \
+	}
+#define caryll_OrdEqFns(T, _fnCompare)                                                             \
+	caryll_OrdFns(T, _fnCompare);                                                                  \
+	static __CARYLL_INLINE__ bool T##_equal(const T a, const T b) {                                \
+		return !(_fnCompare)(a, b);                                                                \
+	}
+#define caryll_OrdEqAssigns(T)                                                                     \
+	.compare = T##_compare, .compareRef = T##_compareRef, .equal = T##_equal
+
+// Monoid
+#define caryll_MonoidFns(T, _fn_neutral, _fn_inplacePlus)                                          \
+	static __CARYLL_INLINE__ T T##_neutral() {                                                     \
+		return (_fn_neutral)();                                                                    \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void T##_inplacePlus(MODIFY T *a, const T b) {                        \
+		(_fn_inplacePlus)(a, b);                                                                   \
+	}                                                                                              \
+	static __CARYLL_INLINE__ T T##_plus(const T a, const T b) {                                    \
+		T result = (_fn_neutral)();                                                                \
+		(_fn_inplacePlus)(&result, a);                                                             \
+		(_fn_inplacePlus)(&result, b);                                                             \
+		return result;                                                                             \
+	}
+#define caryll_MonoidAssigns(T)                                                                    \
+	.neutral = T##_neutral, .inplacePlus = T##_inplacePlus, .plus = T##_plus
+
+// Group
+#define caryll_GroupFns(T, _fn_inplaceNegate)                                                      \
+	static __CARYLL_INLINE__ void T##_inplaceNegate(MODIFY T *a) {                                 \
+		(_fn_inplaceNegate)(a);                                                                    \
+	}                                                                                              \
+	static __CARYLL_INLINE__ T T##_negate(const T a) {                                             \
+		T result;                                                                                  \
+		T##_copy(&result, &a);                                                                     \
+		T##_inplaceNegate(&result);                                                                \
+		return result;                                                                             \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void T##_inplaceMinus(MODIFY T *a, const T b) {                       \
+		T tb = T##_negate(b);                                                                      \
+		(T##_inplacePlus)(a, tb);                                                                  \
+		T##_dispose(&tb);                                                                          \
+	}                                                                                              \
+	static __CARYLL_INLINE__ T T##_minus(const T a, const T b) {                                   \
+		T result = (T##_neutral)();                                                                \
+		(T##_inplacePlus)(&result, a);                                                             \
+		(T##_inplaceMinus)(&result, b);                                                            \
+		return result;                                                                             \
+	}
+#define caryll_GroupAssigns(T)                                                                     \
+	.inplaceNegate = T##_inplaceNegate, .negate = T##_negate, .inplaceMinus = T##_inplaceMinus,    \
+	.minus = T##_minus
+
+// Module
+#define caryll_ModuleFns(T, TS, _fn_inplaceScale)                                                  \
+	static __CARYLL_INLINE__ void T##_inplaceScale(MODIFY T *a, TS b) {                            \
+		(_fn_inplaceScale)(a, b);                                                                  \
+	}                                                                                              \
+	static __CARYLL_INLINE__ T T##_scale(const T a, TS b) {                                        \
+		T result;                                                                                  \
+		T##_copy(&result, &a);                                                                     \
+		T##_inplaceScale(&result, b);                                                              \
+		return result;                                                                             \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void T##_inplacePlusScale(MODIFY T *a, TS b, const T c) {             \
+		T x = T##_scale(c, b);                                                                     \
+		T##_inplacePlus(a, x);                                                                     \
+		T##_dispose(&x);                                                                           \
+	}
+#define caryll_ModuleAssigns(T)                                                                    \
+	.inplaceScale = T##_inplaceScale, .scale = T##_scale, .inplacePlusScale = T##_inplacePlusScale
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/glyph-order.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/glyph-order.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/glyph-order.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,117 @@
+#include "util.h"
+#include "otfcc/glyph-order.h"
+
+static INLINE void initGlyphOrder(otfcc_GlyphOrder *go) {
+	go->byGID = NULL;
+	go->byName = NULL;
+}
+static INLINE void disposeGlyphOrder(otfcc_GlyphOrder *go) {
+	otfcc_GlyphOrderEntry *current, *temp;
+	HASH_ITER(hhID, go->byGID, current, temp) {
+		if (current->name) sdsfree(current->name);
+		HASH_DELETE(hhID, go->byGID, current);
+		HASH_DELETE(hhName, go->byName, current);
+		FREE(current);
+	}
+}
+caryll_standardRefTypeFn(otfcc_GlyphOrder, initGlyphOrder, disposeGlyphOrder);
+
+// Register a gid->name map
+static sds otfcc_setGlyphOrderByGID(otfcc_GlyphOrder *go, glyphid_t gid, sds name) {
+	otfcc_GlyphOrderEntry *s = NULL;
+	HASH_FIND(hhID, go->byGID, &gid, sizeof(glyphid_t), s);
+	if (s) {
+		// gid is already in the order table.
+		// reject this naming suggestion.
+		sdsfree(name);
+		return s->name;
+	} else {
+		otfcc_GlyphOrderEntry *t = NULL;
+		HASH_FIND(hhName, go->byName, name, sdslen(name), t);
+		if (t) {
+			// The name is already in-use.
+			sdsfree(name);
+			name = sdscatprintf(sdsempty(), "$$gid%d", gid);
+		}
+		NEW(s);
+		s->gid = gid;
+		s->name = name;
+		HASH_ADD(hhID, go->byGID, gid, sizeof(glyphid_t), s);
+		HASH_ADD(hhName, go->byName, name[0], sdslen(s->name), s);
+	}
+	return name;
+}
+
+// Register a name->gid map
+static bool otfcc_setGlyphOrderByName(otfcc_GlyphOrder *go, sds name, glyphid_t gid) {
+	otfcc_GlyphOrderEntry *s = NULL;
+	HASH_FIND(hhName, go->byName, name, sdslen(name), s);
+	if (s) {
+		// name is already mapped to a glyph
+		// reject this naming suggestion
+		return false;
+	} else {
+		NEW(s);
+		s->gid = gid;
+		s->name = name;
+		HASH_ADD(hhID, go->byGID, gid, sizeof(glyphid_t), s);
+		HASH_ADD(hhName, go->byName, name[0], sdslen(s->name), s);
+		return true;
+	}
+}
+
+static bool otfcc_gordNameAFieldShared(otfcc_GlyphOrder *go, glyphid_t gid, sds *field) {
+	otfcc_GlyphOrderEntry *t;
+	HASH_FIND(hhID, go->byGID, &gid, sizeof(glyphid_t), t);
+	if (t != NULL) {
+		*field = t->name;
+		return true;
+	} else {
+		*field = NULL;
+		return false;
+	}
+}
+
+static bool otfcc_gordConsolidateHandle(otfcc_GlyphOrder *go, glyph_handle *h) {
+	if (h->state == HANDLE_STATE_CONSOLIDATED) {
+		otfcc_GlyphOrderEntry *t;
+		HASH_FIND(hhName, go->byName, h->name, sdslen(h->name), t);
+		if (t) {
+			Handle.consolidateTo(h, t->gid, t->name);
+			return true;
+		}
+		HASH_FIND(hhName, go->byGID, &(h->index), sizeof(glyphid_t), t);
+		if (t) {
+			Handle.consolidateTo(h, t->gid, t->name);
+			return true;
+		}
+	} else if (h->state == HANDLE_STATE_NAME) {
+		otfcc_GlyphOrderEntry *t;
+		HASH_FIND(hhName, go->byName, h->name, sdslen(h->name), t);
+		if (t) {
+			Handle.consolidateTo(h, t->gid, t->name);
+			return true;
+		}
+	} else if (h->state == HANDLE_STATE_INDEX) {
+		sds name = NULL;
+		otfcc_gordNameAFieldShared(go, h->index, &name);
+		if (name) {
+			Handle.consolidateTo(h, h->index, name);
+			return true;
+		}
+	}
+	return false;
+}
+
+static bool gordLookupName(otfcc_GlyphOrder *go, sds name) {
+	otfcc_GlyphOrderEntry *t;
+	HASH_FIND(hhName, go->byName, name, sdslen(name), t);
+	if (t) return true;
+	return false;
+}
+
+const struct otfcc_GlyphOrderPackage otfcc_pkgGlyphOrder = {
+    caryll_standardRefTypeMethods(otfcc_GlyphOrder),  .setByGID = otfcc_setGlyphOrderByGID,
+    .setByName = otfcc_setGlyphOrderByName,           .nameAField_Shared = otfcc_gordNameAFieldShared,
+    .consolidateHandle = otfcc_gordConsolidateHandle, .lookupName = gordLookupName,
+};

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/handle.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/handle.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/handle.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,63 @@
+#include "otfcc/handle.h"
+#include "element-impl.h"
+#include "support/otfcc-alloc.h"
+
+// default constructors
+static INLINE void initHandle(otfcc_Handle *h) {
+	h->state = HANDLE_STATE_EMPTY;
+	h->index = 0;
+	h->name = NULL;
+}
+static INLINE void disposeHandle(struct otfcc_Handle *h) {
+	if (h->name) {
+		sdsfree(h->name);
+		h->name = NULL;
+	}
+	h->index = 0;
+	h->state = HANDLE_STATE_EMPTY;
+}
+static void copyHandle(otfcc_Handle *dst, const otfcc_Handle *src) {
+	dst->state = src->state;
+	dst->index = src->index;
+	if (src->name) {
+		dst->name = sdsdup(src->name);
+	} else {
+		dst->name = NULL;
+	}
+}
+
+caryll_standardValTypeFn(otfcc_Handle, initHandle, copyHandle, disposeHandle);
+
+// custom constructors
+static struct otfcc_Handle handle_fromIndex(glyphid_t id) {
+	struct otfcc_Handle h = {HANDLE_STATE_INDEX, id, NULL};
+	return h;
+}
+static struct otfcc_Handle handle_fromName(MOVE sds s) {
+	struct otfcc_Handle h = {HANDLE_STATE_EMPTY, 0, NULL};
+	if (s) {
+		h.state = HANDLE_STATE_NAME;
+		h.name = s;
+	}
+	return h;
+}
+static struct otfcc_Handle handle_fromConsolidated(glyphid_t id, sds s) {
+	struct otfcc_Handle h = {HANDLE_STATE_CONSOLIDATED, id, sdsdup(s)};
+	return h;
+}
+
+// consolidation
+static void handle_consolidateTo(struct otfcc_Handle *h, glyphid_t id, sds name) {
+	otfcc_iHandle.dispose(h);
+	h->state = HANDLE_STATE_CONSOLIDATED;
+	h->index = id;
+	h->name = sdsdup(name);
+}
+
+const struct otfcc_HandlePackage otfcc_iHandle = {
+    caryll_standardValTypeMethods(otfcc_Handle), // VT
+    .fromIndex = handle_fromIndex,               // custom constructor, from index
+    .fromName = handle_fromName,                 // custom constructor, from name
+    .fromConsolidated = handle_fromConsolidated, // custom constructor, from consolidated
+    .consolidateTo = handle_consolidateTo,
+};

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-funcs.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-funcs.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-funcs.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,203 @@
+#ifndef CARYLL_SUPPORT_JSON_FUNCS_H
+#define CARYLL_SUPPORT_JSON_FUNCS_H
+
+#include <stdint.h>
+#include <math.h>
+
+#include "dep/json-builder.h"
+#include "dep/json.h"
+#include "dep/sds.h"
+
+#include "caryll/ownership.h"
+#include "otfcc/primitives.h"
+#include "otfcc/vf/vq.h"
+#include "otfcc/table/fvar.h"
+
+#ifndef INLINE
+#ifdef _MSC_VER
+#define INLINE __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define INLINE inline /* use standard inline */
+#endif
+#endif
+
+static INLINE json_value *preserialize(MOVE json_value *x);
+
+static INLINE json_value *json_obj_get(const json_value *obj, const char *key) {
+	if (!obj || obj->type != json_object) return NULL;
+	for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+		char *ck = obj->u.object.values[_k].name;
+		if (strcmp(ck, key) == 0) return obj->u.object.values[_k].value;
+	}
+	return NULL;
+}
+static INLINE json_value *json_obj_get_type(const json_value *obj, const char *key,
+                                            const json_type type) {
+	json_value *v = json_obj_get(obj, key);
+	if (v && v->type == type) return v;
+	return NULL;
+}
+static INLINE sds json_obj_getsds(const json_value *obj, const char *key) {
+	json_value *v = json_obj_get_type(obj, key, json_string);
+	if (!v)
+		return NULL;
+	else
+		return sdsnewlen(v->u.string.ptr, v->u.string.length);
+}
+static INLINE char *json_obj_getstr_share(const json_value *obj, const char *key) {
+	json_value *v = json_obj_get_type(obj, key, json_string);
+	if (!v)
+		return NULL;
+	else
+		return v->u.string.ptr;
+}
+
+static INLINE json_value *json_object_push_tag(json_value *a, uint32_t tag, json_value *b) {
+	char tags[4] = {(tag & 0xff000000) >> 24, (tag & 0xff0000) >> 16, (tag & 0xff00) >> 8,
+	                (tag & 0xff)};
+	return json_object_push_length(a, 4, tags, b);
+}
+
+// Coordinates, VV and VQ
+static INLINE double json_numof(const json_value *cv) {
+	if (cv && cv->type == json_integer) return cv->u.integer;
+	if (cv && cv->type == json_double) return cv->u.dbl;
+	return 0;
+}
+static INLINE json_value *json_new_position(pos_t z) {
+	if (round(z) == z) {
+		return json_integer_new(z);
+	} else {
+		return json_double_new(z);
+	}
+}
+json_value *json_new_VQRegion_Explicit(const vq_Region *rs, const table_fvar *fvar);
+json_value *json_new_VQRegion(const vq_Region *rs, const table_fvar *fvar);
+json_value *json_new_VQ(const VQ z, const table_fvar *fvar);
+json_value *json_new_VV(const VV x, const table_fvar *fvar);
+json_value *json_new_VVp(const VV *x, const table_fvar *fvar);
+VQ json_vqOf(const json_value *cv, const table_fvar *fvar);
+
+static INLINE double json_obj_getnum(const json_value *obj, const char *key) {
+	if (!obj || obj->type != json_object) return 0.0;
+	for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+		char *ck = obj->u.object.values[_k].name;
+		json_value *cv = obj->u.object.values[_k].value;
+		if (strcmp(ck, key) == 0) {
+			if (cv && cv->type == json_integer) return cv->u.integer;
+			if (cv && cv->type == json_double) return cv->u.dbl;
+		}
+	}
+	return 0.0;
+}
+static INLINE int32_t json_obj_getint(const json_value *obj, const char *key) {
+	if (!obj || obj->type != json_object) return 0;
+	for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+		char *ck = obj->u.object.values[_k].name;
+		json_value *cv = obj->u.object.values[_k].value;
+		if (strcmp(ck, key) == 0) {
+			if (cv && cv->type == json_integer) return (int32_t)cv->u.integer;
+			if (cv && cv->type == json_double) return cv->u.dbl;
+		}
+	}
+	return 0;
+}
+static INLINE double json_obj_getnum_fallback(const json_value *obj, const char *key,
+                                              double fallback) {
+	if (!obj || obj->type != json_object) return fallback;
+	for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+		char *ck = obj->u.object.values[_k].name;
+		json_value *cv = obj->u.object.values[_k].value;
+		if (strcmp(ck, key) == 0) {
+			if (cv && cv->type == json_integer) return cv->u.integer;
+			if (cv && cv->type == json_double) return cv->u.dbl;
+		}
+	}
+	return fallback;
+}
+static INLINE int32_t json_obj_getint_fallback(const json_value *obj, const char *key,
+                                               int32_t fallback) {
+	if (!obj || obj->type != json_object) return fallback;
+	for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+		char *ck = obj->u.object.values[_k].name;
+		json_value *cv = obj->u.object.values[_k].value;
+		if (strcmp(ck, key) == 0) {
+			if (cv && cv->type == json_integer) return (int32_t)cv->u.integer;
+			if (cv && cv->type == json_double) return cv->u.dbl;
+		}
+	}
+	return fallback;
+}
+static INLINE bool json_boolof(const json_value *cv) {
+	if (cv && cv->type == json_boolean) return cv->u.boolean;
+	return false;
+}
+static INLINE bool json_obj_getbool(const json_value *obj, const char *key) {
+	if (!obj || obj->type != json_object) return false;
+	for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+		char *ck = obj->u.object.values[_k].name;
+		json_value *cv = obj->u.object.values[_k].value;
+		if (strcmp(ck, key) == 0) {
+			if (cv && cv->type == json_boolean) return cv->u.boolean;
+		}
+	}
+	return false;
+}
+static INLINE bool json_obj_getbool_fallback(const json_value *obj, const char *key,
+                                             bool fallback) {
+	if (!obj || obj->type != json_object) return fallback;
+	for (uint32_t _k = 0; _k < obj->u.object.length; _k++) {
+		char *ck = obj->u.object.values[_k].name;
+		json_value *cv = obj->u.object.values[_k].value;
+		if (strcmp(ck, key) == 0) {
+			if (cv && cv->type == json_boolean) return cv->u.boolean;
+		}
+	}
+	return fallback;
+}
+
+static INLINE json_value *json_from_sds(const sds str) {
+	return json_string_new_length((uint32_t)sdslen(str), str);
+}
+
+// flags reader and writer
+static INLINE json_value *otfcc_dump_flags(int flags, const char *labels[]) {
+	json_value *v = json_object_new(0);
+	for (uint16_t j = 0; labels[j]; j++)
+		if (flags & (1 << j)) { json_object_push(v, labels[j], json_boolean_new(true)); }
+	return v;
+}
+static INLINE uint32_t otfcc_parse_flags(const json_value *v, const char *labels[]) {
+	if (!v) return 0;
+	if (v->type == json_integer) {
+		return (uint32_t)v->u.integer;
+	} else if (v->type == json_double) {
+		return (uint32_t)v->u.dbl;
+	} else if (v->type == json_object) {
+		uint32_t flags = 0;
+		for (uint16_t j = 0; labels[j]; j++) {
+			if (json_obj_getbool(v, labels[j])) { flags |= (1 << j); }
+		}
+		return flags;
+	} else {
+		return 0;
+	}
+}
+
+static INLINE json_value *preserialize(MOVE json_value *x) {
+#ifdef CARYLL_USE_PRE_SERIALIZED
+	json_serialize_opts opts = {.mode = json_serialize_mode_packed};
+	size_t preserialize_len = json_measure_ex(x, opts);
+	char *buf = (char *)malloc(preserialize_len);
+	json_serialize_ex(buf, x, opts);
+	json_builder_free(x);
+
+	json_value *xx = json_string_new_nocopy((uint32_t)(preserialize_len - 1), buf);
+	xx->type = json_pre_serialized;
+	return xx;
+#else
+	return x;
+#endif
+}
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,86 @@
+#include "json-ident.h"
+#include "support/otfcc-alloc.h"
+
+#ifdef _MSC_VER
+#include "winfns.h"
+#endif
+
+static bool compare_json_arrays(const json_value *a, const json_value *b) {
+	for (uint16_t j = 0; j < a->u.array.length; j++) {
+		if (!json_ident(a->u.array.values[j], b->u.array.values[j])) { return false; }
+	}
+	return true;
+}
+
+typedef struct {
+	char *key;
+	json_value *val;
+	bool check;
+	UT_hash_handle hh;
+} json_obj_entry;
+static bool compare_json_objects(const json_value *a, const json_value *b) {
+	json_obj_entry *h = NULL;
+	for (uint32_t j = 0; j < a->u.object.length; j++) {
+		char *k = a->u.object.values[j].name;
+		json_obj_entry *e = NULL;
+		HASH_FIND_STR(h, k, e);
+		if (!e) {
+			NEW(e);
+			e->key = strdup(k);
+			e->val = a->u.object.values[j].value;
+			e->check = false;
+			HASH_ADD_STR(h, key, e);
+		}
+	}
+	bool allcheck = true;
+	for (uint32_t j = 0; j < b->u.object.length; j++) {
+		char *k = b->u.object.values[j].name;
+		json_obj_entry *e = NULL;
+		HASH_FIND_STR(h, k, e);
+		if (!e) {
+			allcheck = false;
+			break;
+		} else {
+			bool check = json_ident(e->val, b->u.object.values[j].value);
+			if (!check) {
+				allcheck = false;
+				break;
+			} else {
+				e->check = true;
+			}
+		}
+	}
+	json_obj_entry *e, *tmp;
+	HASH_ITER(hh, h, e, tmp) {
+		allcheck = allcheck && e->check;
+		HASH_DEL(h, e);
+		FREE(e->key);
+		FREE(e);
+	}
+	return allcheck;
+}
+
+bool json_ident(const json_value *a, const json_value *b) {
+	if (!a && !b) return true;
+	if (!a || !b) return false;
+	if (a->type != b->type) return false;
+	switch (a->type) {
+		case json_none:
+		case json_null:
+			return true;
+		case json_integer:
+			return a->u.integer == b->u.integer;
+		case json_double:
+			return a->u.dbl == b->u.dbl;
+		case json_boolean:
+			return a->u.boolean == b->u.boolean;
+		case json_string:
+			return a->u.string.length == b->u.string.length && strcmp(a->u.string.ptr, b->u.string.ptr) == 0;
+		case json_array:
+			return a->u.array.length == b->u.array.length && compare_json_arrays(a, b);
+		case json_object:
+			return a->u.object.length == b->u.object.length && compare_json_objects(a, b);
+		default:
+			return false;
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/json/json-ident.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,12 @@
+#ifndef CARYLL_SUPPORT_JSON_IDENT_H
+#define CARYLL_SUPPORT_JSON_IDENT_H
+
+#include "dep/json.h"
+#include "dep/uthash.h"
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+bool json_ident(const json_value *a, const json_value *b);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/options.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/options.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/options.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,38 @@
+#include "otfcc/options.h"
+#include "support/otfcc-alloc.h"
+
+otfcc_Options *otfcc_newOptions() {
+	otfcc_Options *options;
+	NEW(options);
+	return options;
+}
+void otfcc_deleteOptions(otfcc_Options *options) {
+	if (options) {
+		FREE(options->glyph_name_prefix);
+		if (options->logger) options->logger->dispose(options->logger);
+	}
+	FREE(options);
+}
+void otfcc_Options_optimizeTo(otfcc_Options *options, uint8_t level) {
+	options->cff_rollCharString = false;
+	options->short_post = false;
+	options->ignore_glyph_order = false;
+	options->cff_short_vmtx = false;
+	options->merge_features = false;
+	options->force_cid = false;
+	options->cff_doSubroutinize = false;
+
+	if (level >= 1) {
+		options->cff_rollCharString = true;
+		options->cff_short_vmtx = true;
+	}
+	if (level >= 2) {
+		options->short_post = true;
+		options->cff_doSubroutinize = true;
+		options->merge_features = true;
+	}
+	if (level >= 3) {
+		options->ignore_glyph_order = true;
+		options->force_cid = true;
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/otfcc-alloc.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/otfcc-alloc.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/otfcc-alloc.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,83 @@
+#ifndef CARYLL_SUPPORT_OTFCC_ALLOC_H
+#define CARYLL_SUPPORT_OTFCC_ALLOC_H
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef INLINE
+#ifdef _MSC_VER
+#define INLINE __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define INLINE inline /* use standard inline */
+#endif
+#endif
+
+// Allocators
+// Change this if you prefer other allocators
+#define __caryll_malloc malloc
+#define __caryll_calloc calloc
+#define __caryll_realloc realloc
+#define __caryll_free free
+
+static INLINE void *__caryll_allocate_dirty(size_t n, unsigned long line) {
+	if (!n) return NULL;
+	void *p = __caryll_malloc(n);
+	if (!p) {
+		fprintf(stderr, "[%ld]Out of memory(%ld bytes)\n", line, (unsigned long)n);
+		exit(EXIT_FAILURE);
+	}
+	return p;
+}
+static INLINE void *__caryll_allocate_clean(size_t n, unsigned long line) {
+	if (!n) return NULL;
+	void *p = __caryll_calloc(n, 1);
+	if (!p) {
+		fprintf(stderr, "[%ld]Out of memory(%ld bytes)\n", line, (unsigned long)n);
+		exit(EXIT_FAILURE);
+	}
+	return p;
+}
+static INLINE void *__caryll_reallocate(void *ptr, size_t n, unsigned long line) {
+	if (!n) {
+		__caryll_free(ptr);
+		return NULL;
+	}
+	if (!ptr) {
+		return __caryll_allocate_clean(n, line);
+	} else {
+		void *p = __caryll_realloc(ptr, n);
+		if (!p) {
+			fprintf(stderr, "[%ld]Out of memory(%ld bytes)\n", line, (unsigned long)n);
+			exit(EXIT_FAILURE);
+		}
+		return p;
+	}
+}
+#ifdef __cplusplus
+#define NEW_CLEAN_S(ptr, size) ptr = __caryll_allocate_clean((size), __LINE__)
+#define NEW_CLEAN_1(ptr)                                                                           \
+	ptr = (decltype(ptr))__caryll_allocate_clean(sizeof(decltype(*ptr)), __LINE__)
+#define NEW_CLEAN_N(ptr, n)                                                                        \
+	ptr = (decltype(ptr))__caryll_allocate_clean(sizeof(decltype(*ptr)) * (n), __LINE__)
+#define NEW_DIRTY(ptr)                                                                             \
+	ptr = (decltype(ptr))__caryll_allocate_dirty(sizeof(decltype(*ptr)), __LINE__)
+#define NEW_DIRTY_N(ptr, n)                                                                        \
+	ptr = (decltype(ptr))__caryll_allocate_dirty(sizeof(decltype(*ptr)) * (n), __LINE__)
+#define FREE(ptr) (__caryll_free(ptr), ptr = nullptr)
+#define DELETE(fn, ptr) (fn(ptr), ptr = nullptr)
+#define RESIZE(ptr, n) ptr = (decltype(ptr))__caryll_reallocate(ptr, sizeof(*ptr) * (n), __LINE__)
+#else
+#define NEW_CLEAN_S(ptr, size) ptr = __caryll_allocate_clean((size), __LINE__)
+#define NEW_CLEAN_1(ptr) ptr = __caryll_allocate_clean(sizeof(*ptr), __LINE__)
+#define NEW_CLEAN_N(ptr, n) ptr = __caryll_allocate_clean(sizeof(*ptr) * (n), __LINE__)
+#define NEW_DIRTY(ptr) ptr = __caryll_allocate_dirty(sizeof(*ptr), __LINE__)
+#define NEW_DIRTY_N(ptr, n) ptr = __caryll_allocate_dirty(sizeof(*ptr) * (n), __LINE__)
+#define FREE(ptr) (__caryll_free(ptr), ptr = NULL)
+#define DELETE(fn, ptr) (fn(ptr), ptr = NULL)
+#define RESIZE(ptr, n) ptr = __caryll_reallocate(ptr, sizeof(*ptr) * (n), __LINE__)
+#endif
+
+#define __GET_MACRO_OTFCC_ALLOC_2(_1, _2, NAME, ...) NAME
+#define NEW(...) __GET_MACRO_OTFCC_ALLOC_2(__VA_ARGS__, NEW_CLEAN_N, NEW_CLEAN_1)(__VA_ARGS__)
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/primitives.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/primitives.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/primitives.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,66 @@
+#include "otfcc/primitives.h"
+#include "bin-io.h"
+#include <math.h>
+
+// f2dot14 type
+double otfcc_from_f2dot14(const f2dot14 x) {
+	return x / 16384.0;
+}
+int16_t otfcc_to_f2dot14(const double x) {
+	return round(x * 16384.0);
+}
+
+// F16.16 (fixed) type
+double otfcc_from_fixed(const f16dot16 x) {
+	return x / 65536.0;
+}
+f16dot16 otfcc_to_fixed(const double x) {
+	return round(x * 65536.0);
+}
+
+// F16.16 arith
+// Clamp: remove too-large values
+static INLINE f16dot16 clamp(int64_t value) {
+	int64_t tmp = value;
+	if (tmp < (int64_t)f16dot16_negativeIntinity) tmp = (int64_t)f16dot16_negativeIntinity;
+	if (tmp > (int64_t)f16dot16_infinity) tmp = (int64_t)f16dot16_infinity;
+	return (f16dot16)tmp;
+}
+
+f16dot16 otfcc_f1616_add(f16dot16 a, f16dot16 b) {
+	return a + b;
+}
+f16dot16 otfcc_f1616_minus(f16dot16 a, f16dot16 b) {
+	return a - b;
+}
+
+f16dot16 otfcc_f1616_multiply(f16dot16 a, f16dot16 b) {
+	int64_t tmp = (int64_t)a * (int64_t)b + f16dot16_k;
+	f16dot16 product = clamp(tmp >> f16dot16_precision);
+	return product;
+}
+
+static INLINE f16dot16 divide(int64_t a, int32_t b) {
+	if (b == 0) {
+		if (a < 0)
+			return f16dot16_negativeIntinity;
+		else
+			return f16dot16_infinity;
+	}
+
+	if ((a < 0 != b < 0)) {
+		a -= b / 2;
+	} else {
+		a += b / 2;
+	}
+
+	return (f16dot16)(clamp(a / b));
+}
+
+f16dot16 otfcc_f1616_muldiv(f16dot16 a, f16dot16 b, f16dot16 c) {
+	int64_t tmp = (int64_t)a * (int64_t)b + f16dot16_k;
+	return divide(tmp, c);
+}
+f16dot16 otfcc_f1616_divide(f16dot16 a, f16dot16 b) {
+	return divide((int64_t)a << f16dot16_precision, b);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,144 @@
+/*********************************************************************
+* Filename:   sha1.c
+* Author:     Brad Conte (brad AT bradconte.com)
+* Copyright:
+* Disclaimer: This code is presented "as is" without any guarantees.
+* Details:    Implementation of the SHA1 hashing algorithm.
+              Algorithm specification can be found here:
+               * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf
+              This implementation uses little endian byte order.
+*********************************************************************/
+
+/*************************** HEADER FILES ***************************/
+#include <stdlib.h>
+#include <memory.h>
+#include "sha1.h"
+
+/****************************** MACROS ******************************/
+#define ROTLEFT(a, b) ((a << b) | (a >> (32 - b)))
+
+/*********************** FUNCTION DEFINITIONS ***********************/
+static void sha1_transform(SHA1_CTX *ctx, const BYTE data[]) {
+	WORD a, b, c, d, e, i, j, t, m[80];
+
+	for (i = 0, j = 0; i < 16; ++i, j += 4)
+		m[i] = (data[j] << 24) + (data[j + 1] << 16) + (data[j + 2] << 8) + (data[j + 3]);
+	for (; i < 80; ++i) {
+		m[i] = (m[i - 3] ^ m[i - 8] ^ m[i - 14] ^ m[i - 16]);
+		m[i] = (m[i] << 1) | (m[i] >> 31);
+	}
+
+	a = ctx->state[0];
+	b = ctx->state[1];
+	c = ctx->state[2];
+	d = ctx->state[3];
+	e = ctx->state[4];
+
+	for (i = 0; i < 20; ++i) {
+		t = ROTLEFT(a, 5) + ((b & c) ^ (~b & d)) + e + ctx->k[0] + m[i];
+		e = d;
+		d = c;
+		c = ROTLEFT(b, 30);
+		b = a;
+		a = t;
+	}
+	for (; i < 40; ++i) {
+		t = ROTLEFT(a, 5) + (b ^ c ^ d) + e + ctx->k[1] + m[i];
+		e = d;
+		d = c;
+		c = ROTLEFT(b, 30);
+		b = a;
+		a = t;
+	}
+	for (; i < 60; ++i) {
+		t = ROTLEFT(a, 5) + ((b & c) ^ (b & d) ^ (c & d)) + e + ctx->k[2] + m[i];
+		e = d;
+		d = c;
+		c = ROTLEFT(b, 30);
+		b = a;
+		a = t;
+	}
+	for (; i < 80; ++i) {
+		t = ROTLEFT(a, 5) + (b ^ c ^ d) + e + ctx->k[3] + m[i];
+		e = d;
+		d = c;
+		c = ROTLEFT(b, 30);
+		b = a;
+		a = t;
+	}
+
+	ctx->state[0] += a;
+	ctx->state[1] += b;
+	ctx->state[2] += c;
+	ctx->state[3] += d;
+	ctx->state[4] += e;
+}
+
+void sha1_init(SHA1_CTX *ctx) {
+	ctx->datalen = 0;
+	ctx->bitlen = 0;
+	ctx->state[0] = 0x67452301;
+	ctx->state[1] = 0xEFCDAB89;
+	ctx->state[2] = 0x98BADCFE;
+	ctx->state[3] = 0x10325476;
+	ctx->state[4] = 0xc3d2e1f0;
+	ctx->k[0] = 0x5a827999;
+	ctx->k[1] = 0x6ed9eba1;
+	ctx->k[2] = 0x8f1bbcdc;
+	ctx->k[3] = 0xca62c1d6;
+}
+
+void sha1_update(SHA1_CTX *ctx, const BYTE data[], size_t len) {
+	size_t i;
+
+	for (i = 0; i < len; ++i) {
+		ctx->data[ctx->datalen] = data[i];
+		ctx->datalen++;
+		if (ctx->datalen == 64) {
+			sha1_transform(ctx, ctx->data);
+			ctx->bitlen += 512;
+			ctx->datalen = 0;
+		}
+	}
+}
+
+void sha1_final(SHA1_CTX *ctx, BYTE hash[]) {
+	WORD i;
+
+	i = ctx->datalen;
+
+	// Pad whatever data is left in the buffer.
+	if (ctx->datalen < 56) {
+		ctx->data[i++] = 0x80;
+		while (i < 56)
+			ctx->data[i++] = 0x00;
+	} else {
+		ctx->data[i++] = 0x80;
+		while (i < 64)
+			ctx->data[i++] = 0x00;
+		sha1_transform(ctx, ctx->data);
+		memset(ctx->data, 0, 56);
+	}
+
+	// Append to the padding the total message's length in bits and transform.
+	ctx->bitlen += ctx->datalen * 8;
+	ctx->data[63] = ctx->bitlen;
+	ctx->data[62] = ctx->bitlen >> 8;
+	ctx->data[61] = ctx->bitlen >> 16;
+	ctx->data[60] = ctx->bitlen >> 24;
+	ctx->data[59] = ctx->bitlen >> 32;
+	ctx->data[58] = ctx->bitlen >> 40;
+	ctx->data[57] = ctx->bitlen >> 48;
+	ctx->data[56] = ctx->bitlen >> 56;
+	sha1_transform(ctx, ctx->data);
+
+	// Since this implementation uses little endian byte ordering and MD uses big endian,
+	// reverse all the bytes when copying the final state to the output hash.
+	for (i = 0; i < 4; ++i) {
+		hash[i] = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff;
+		hash[i + 4] = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff;
+		hash[i + 8] = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff;
+		hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff;
+		hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff;
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/sha1/sha1.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,35 @@
+/*********************************************************************
+* Filename:   sha1.h
+* Author:     Brad Conte (brad AT bradconte.com)
+* Copyright:
+* Disclaimer: This code is presented "as is" without any guarantees.
+* Details:    Defines the API for the corresponding SHA1 implementation.
+*********************************************************************/
+
+#ifndef SHA1_H
+#define SHA1_H
+
+/*************************** HEADER FILES ***************************/
+#include <stddef.h>
+
+/****************************** MACROS ******************************/
+#define SHA1_BLOCK_SIZE 20 // SHA1 outputs a 20 byte digest
+
+/**************************** DATA TYPES ****************************/
+typedef unsigned char BYTE; // 8-bit byte
+typedef unsigned int WORD;  // 32-bit word, change to "long" for 16-bit machines
+
+typedef struct {
+	BYTE data[64];
+	WORD datalen;
+	unsigned long long bitlen;
+	WORD state[5];
+	WORD k[4];
+} SHA1_CTX;
+
+/*********************** FUNCTION DECLARATIONS **********************/
+void sha1_init(SHA1_CTX *ctx);
+void sha1_update(SHA1_CTX *ctx, const BYTE data[], size_t len);
+void sha1_final(SHA1_CTX *ctx, BYTE hash[]);
+
+#endif // SHA1_H

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/tag.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/tag.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/tag.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,36 @@
+#ifndef CARYLL_SUPPORT_TAG_H
+#define CARYLL_SUPPORT_TAG_H
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifndef INLINE
+#ifdef _MSC_VER
+#define INLINE __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define INLINE inline /* use standard inline */
+#endif
+#endif
+
+// Tag handler
+static INLINE void tag2str(uint32_t tag, char tags[4]) {
+	tags[0] = (tag >> 24) & 0xFF;
+	tags[1] = (tag >> 16) & 0xFF;
+	tags[2] = (tag >> 8) & 0xFF;
+	tags[3] = tag & 0xFF;
+}
+
+static INLINE uint32_t str2tag(const char *tags) {
+	if (!tags) return 0;
+	uint32_t tag = 0;
+	uint8_t len = 0;
+	while (*tags && len < 4) {
+		tag = (tag << 8) | (*tags), tags++, len++;
+	}
+	while (len < 4) {
+		tag = (tag << 8) | ' ', len++;
+	}
+	return tag;
+}
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,701 @@
+/* Copyright (C) 2001-2012 by George Williams */
+/* Copyright (C) 2016 by Belleve Invis */
+
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "ttinstr.h"
+#include <ctype.h>
+
+enum ttf_instructions {
+	ttf_npushb = 0x40,
+	ttf_npushw = 0x41,
+	ttf_pushb = 0xb0,
+	ttf_pushw = 0xb8,
+	ttf_aa = 0x7f,
+	ttf_abs = 0x64,
+	ttf_add = 0x60,
+	ttf_alignpts = 0x27,
+	ttf_alignrp = 0x3c,
+	ttf_and = 0x5a,
+	ttf_call = 0x2b,
+	ttf_ceiling = 0x67,
+	ttf_cindex = 0x25,
+	ttf_clear = 0x22,
+	ttf_debug = 0x4f,
+	ttf_deltac1 = 0x73,
+	ttf_deltac2 = 0x74,
+	ttf_deltac3 = 0x75,
+	ttf_deltap1 = 0x5d,
+	ttf_deltap2 = 0x71,
+	ttf_deltap3 = 0x72,
+	ttf_depth = 0x24,
+	ttf_div = 0x62,
+	ttf_dup = 0x20,
+	ttf_eif = 0x59,
+	ttf_else = 0x1b,
+	ttf_endf = 0x2d,
+	ttf_eq = 0x54,
+	ttf_even = 0x57,
+	ttf_fdef = 0x2c,
+	ttf_flipoff = 0x4e,
+	ttf_flipon = 0x4d,
+	ttf_flippt = 0x80,
+	ttf_fliprgoff = 0x82,
+	ttf_fliprgon = 0x81,
+	ttf_floor = 0x66,
+	ttf_gc = 0x46,
+	ttf_getinfo = 0x88,
+	ttf_gfv = 0x0d,
+	ttf_gpv = 0x0c,
+	ttf_gt = 0x52,
+	ttf_gteq = 0x53,
+	ttf_idef = 0x89,
+	ttf_if = 0x58,
+	ttf_instctrl = 0x8e,
+	ttf_ip = 0x39,
+	ttf_isect = 0x0f,
+	ttf_iup = 0x30,
+	ttf_jmpr = 0x1c,
+	ttf_jrof = 0x79,
+	ttf_jrot = 0x78,
+	ttf_loopcall = 0x2a,
+	ttf_lt = 0x50,
+	ttf_lteq = 0x51,
+	ttf_max = 0x8b,
+	ttf_md = 0x49,
+	ttf_mdap = 0x2e,
+	ttf_mdrp = 0xc0,
+	ttf_miap = 0x3e,
+	ttf_min = 0x8c,
+	ttf_mindex = 0x26,
+	ttf_mirp = 0xe0,
+	ttf_mppem = 0x4b,
+	ttf_mps = 0x4c,
+	ttf_msirp = 0x3a,
+	ttf_mul = 0x63,
+	ttf_neg = 0x65,
+	ttf_neq = 0x55,
+	ttf_not = 0x5c,
+	ttf_nround = 0x6c,
+	ttf_odd = 0x56,
+	ttf_or = 0x5b,
+	ttf_pop = 0x21,
+	ttf_rcvt = 0x45,
+	ttf_rdtg = 0x7d,
+	ttf_roff = 0x7a,
+	ttf_roll = 0x8a,
+	ttf_round = 0x68,
+	ttf_rs = 0x43,
+	ttf_rtdg = 0x3d,
+	ttf_rtg = 0x18,
+	ttf_rthg = 0x19,
+	ttf_rutg = 0x7c,
+	ttf_s45round = 0x77,
+	ttf_sangw = 0x7e,
+	ttf_scanctrl = 0x85,
+	ttf_scantype = 0x8d,
+	ttf_scfs = 0x48,
+	ttf_scvtci = 0x1d,
+	ttf_sdb = 0x5e,
+	ttf_sdpvtl = 0x86,
+	ttf_sds = 0x5f,
+	ttf_sfvfs = 0x0b,
+	ttf_sfvtca = 0x04,
+	ttf_sfvtl = 0x08,
+	ttf_sfvtpv = 0x0e,
+	ttf_shc = 0x34,
+	ttf_shp = 0x32,
+	ttf_shpix = 0x38,
+	ttf_shz = 0x36,
+	ttf_sloop = 0x17,
+	ttf_smd = 0x1a,
+	ttf_spvfs = 0x0a,
+	ttf_spvtca = 0x02,
+	ttf_spvtl = 0x06,
+	ttf_sround = 0x76,
+	ttf_srp0 = 0x10,
+	ttf_srp1 = 0x11,
+	ttf_srp2 = 0x12,
+	ttf_ssw = 0x1f,
+	ttf_sswci = 0x1e,
+	ttf_sub = 0x61,
+	ttf_svtca = 0x00,
+	ttf_swap = 0x23,
+	ttf_szp0 = 0x13,
+	ttf_szp1 = 0x14,
+	ttf_szp2 = 0x15,
+	ttf_szps = 0x16,
+	ttf_utp = 0x29,
+	ttf_wcvtf = 0x70,
+	ttf_wcvtp = 0x44,
+	ttf_ws = 0x42,
+	ttf_getvariation = 0x91
+};
+enum byte_types { bt_instr, bt_cnt, bt_byte, bt_wordhi, bt_wordlo, bt_impliedreturn };
+
+struct instrdata {
+	uint8_t *instrs;
+	uint32_t instr_cnt;
+	uint8_t *bts;
+};
+
+const char *ff_ttf_instrnames[] = {"SVTCA[y-axis]",
+                                   "SVTCA[x-axis]",
+                                   "SPVTCA[y-axis]",
+                                   "SPVTCA[x-axis]",
+                                   "SFVTCA[y-axis]",
+                                   "SFVTCA[x-axis]",
+                                   "SPVTL[parallel]",
+                                   "SPVTL[orthog]",
+                                   "SFVTL[parallel]",
+                                   "SFVTL[orthog]",
+                                   "SPVFS",
+                                   "SFVFS",
+                                   "GPV",
+                                   "GFV",
+                                   "SFVTPV",
+                                   "ISECT",
+                                   "SRP0",
+                                   "SRP1",
+                                   "SRP2",
+                                   "SZP0",
+                                   "SZP1",
+                                   "SZP2",
+                                   "SZPS",
+                                   "SLOOP",
+                                   "RTG",
+                                   "RTHG",
+                                   "SMD",
+                                   "ELSE",
+                                   "JMPR",
+                                   "SCVTCI",
+                                   "SSWCI",
+                                   "SSW",
+                                   "DUP",
+                                   "POP",
+                                   "CLEAR",
+                                   "SWAP",
+                                   "DEPTH",
+                                   "CINDEX",
+                                   "MINDEX",
+                                   "ALIGNPTS",
+                                   "Unknown28",
+                                   "UTP",
+                                   "LOOPCALL",
+                                   "CALL",
+                                   "FDEF",
+                                   "ENDF",
+                                   "MDAP[no-rnd]",
+                                   "MDAP[rnd]",
+                                   "IUP[y]",
+                                   "IUP[x]",
+                                   "SHP[rp2]",
+                                   "SHP[rp1]",
+                                   "SHC[rp2]",
+                                   "SHC[rp1]",
+                                   "SHZ[rp2]",
+                                   "SHZ[rp1]",
+                                   "SHPIX",
+                                   "IP",
+                                   "MSIRP[no-rp0]",
+                                   "MSIRP[rp0]",
+                                   "ALIGNRP",
+                                   "RTDG",
+                                   "MIAP[no-rnd]",
+                                   "MIAP[rnd]",
+                                   "NPUSHB",
+                                   "NPUSHW",
+                                   "WS",
+                                   "RS",
+                                   "WCVTP",
+                                   "RCVT",
+                                   "GC[cur]",
+                                   "GC[orig]",
+                                   "SCFS",
+                                   "MD[grid]",
+                                   "MD[orig]",
+                                   "MPPEM",
+                                   "MPS",
+                                   "FLIPON",
+                                   "FLIPOFF",
+                                   "DEBUG",
+                                   "LT",
+                                   "LTEQ",
+                                   "GT",
+                                   "GTEQ",
+                                   "EQ",
+                                   "NEQ",
+                                   "ODD",
+                                   "EVEN",
+                                   "IF",
+                                   "EIF",
+                                   "AND",
+                                   "OR",
+                                   "NOT",
+                                   "DELTAP1",
+                                   "SDB",
+                                   "SDS",
+                                   "ADD",
+                                   "SUB",
+                                   "DIV",
+                                   "MUL",
+                                   "ABS",
+                                   "NEG",
+                                   "FLOOR",
+                                   "CEILING",
+                                   "ROUND[Grey]",
+                                   "ROUND[Black]",
+                                   "ROUND[White]",
+                                   "ROUND[Undef4]",
+                                   "NROUND[Grey]",
+                                   "NROUND[Black]",
+                                   "NROUND[White]",
+                                   "NROUND[Undef4]",
+                                   "WCVTF",
+                                   "DELTAP2",
+                                   "DELTAP3",
+                                   "DELTAC1",
+                                   "DELTAC2",
+                                   "DELTAC3",
+                                   "SROUND",
+                                   "S45ROUND",
+                                   "JROT",
+                                   "JROF",
+                                   "ROFF",
+                                   "Unknown7B",
+                                   "RUTG",
+                                   "RDTG",
+                                   "SANGW",
+                                   "AA",
+                                   "FLIPPT",
+                                   "FLIPRGON",
+                                   "FLIPRGOFF",
+                                   "Unknown83",
+                                   "Unknown84",
+                                   "SCANCTRL",
+                                   "SDPVTL[parallel]",
+                                   "SDPVTL[orthog]",
+                                   "GETINFO",
+                                   "IDEF",
+                                   "ROLL",
+                                   "MAX",
+                                   "MIN",
+                                   "SCANTYPE",
+                                   "INSTCTRL",
+                                   "Unknown8F",
+                                   "Unknown90",
+                                   "GETVARIATION",
+                                   "Unknown92",
+                                   "Unknown93",
+                                   "Unknown94",
+                                   "Unknown95",
+                                   "Unknown96",
+                                   "Unknown97",
+                                   "Unknown98",
+                                   "Unknown99",
+                                   "Unknown9A",
+                                   "Unknown9B",
+                                   "Unknown9C",
+                                   "Unknown9D",
+                                   "Unknown9E",
+                                   "Unknown9F",
+                                   "UnknownA0",
+                                   "UnknownA1",
+                                   "UnknownA2",
+                                   "UnknownA3",
+                                   "UnknownA4",
+                                   "UnknownA5",
+                                   "UnknownA6",
+                                   "UnknownA7",
+                                   "UnknownA8",
+                                   "UnknownA9",
+                                   "UnknownAA",
+                                   "UnknownAB",
+                                   "UnknownAC",
+                                   "UnknownAD",
+                                   "UnknownAE",
+                                   "UnknownAF",
+                                   "PUSHB_1",
+                                   "PUSHB_2",
+                                   "PUSHB_3",
+                                   "PUSHB_4",
+                                   "PUSHB_5",
+                                   "PUSHB_6",
+                                   "PUSHB_7",
+                                   "PUSHB_8",
+                                   "PUSHW_1",
+                                   "PUSHW_2",
+                                   "PUSHW_3",
+                                   "PUSHW_4",
+                                   "PUSHW_5",
+                                   "PUSHW_6",
+                                   "PUSHW_7",
+                                   "PUSHW_8",
+                                   "MDRP[grey]",
+                                   "MDRP[black]",
+                                   "MDRP[white]",
+                                   "MDRP03",
+                                   "MDRP[rnd,grey]",
+                                   "MDRP[rnd,black]",
+                                   "MDRP[rnd,white]",
+                                   "MDRP07",
+                                   "MDRP[min,grey]",
+                                   "MDRP[min,black]",
+                                   "MDRP[min,white]",
+                                   "MDRP0b",
+                                   "MDRP[min,rnd,grey]",
+                                   "MDRP[min,rnd,black]",
+                                   "MDRP[min,rnd,white]",
+                                   "MDRP0f",
+                                   "MDRP[rp0,grey]",
+                                   "MDRP[rp0,black]",
+                                   "MDRP[rp0,white]",
+                                   "MDRP13",
+                                   "MDRP[rp0,rnd,grey]",
+                                   "MDRP[rp0,rnd,black]",
+                                   "MDRP[rp0,rnd,white]",
+                                   "MDRP17",
+                                   "MDRP[rp0,min,grey]",
+                                   "MDRP[rp0,min,black]",
+                                   "MDRP[rp0,min,white]",
+                                   "MDRP1b",
+                                   "MDRP[rp0,min,rnd,grey]",
+                                   "MDRP[rp0,min,rnd,black]",
+                                   "MDRP[rp0,min,rnd,white]",
+                                   "MDRP1f",
+                                   "MIRP[grey]",
+                                   "MIRP[black]",
+                                   "MIRP[white]",
+                                   "MIRP03",
+                                   "MIRP[rnd,grey]",
+                                   "MIRP[rnd,black]",
+                                   "MIRP[rnd,white]",
+                                   "MIRP07",
+                                   "MIRP[min,grey]",
+                                   "MIRP[min,black]",
+                                   "MIRP[min,white]",
+                                   "MIRP0b",
+                                   "MIRP[min,rnd,grey]",
+                                   "MIRP[min,rnd,black]",
+                                   "MIRP[min,rnd,white]",
+                                   "MIRP0f",
+                                   "MIRP[rp0,grey]",
+                                   "MIRP[rp0,black]",
+                                   "MIRP[rp0,white]",
+                                   "MIRP13",
+                                   "MIRP[rp0,rnd,grey]",
+                                   "MIRP[rp0,rnd,black]",
+                                   "MIRP[rp0,rnd,white]",
+                                   "MIRP17",
+                                   "MIRP[rp0,min,grey]",
+                                   "MIRP[rp0,min,black]",
+                                   "MIRP[rp0,min,white]",
+                                   "MIRP1b",
+                                   "MIRP[rp0,min,rnd,grey]",
+                                   "MIRP[rp0,min,rnd,black]",
+                                   "MIRP[rp0,min,rnd,white]",
+                                   "MIRP1f"};
+
+static int strnmatch(const char *str1, const char *str2, int n) {
+	int ch1, ch2;
+	for (; n-- > 0;) {
+		ch1 = *str1++;
+		ch2 = *str2++;
+		ch1 = tolower(ch1);
+		ch2 = tolower(ch2);
+		if (ch1 != ch2 || ch1 == '\0') return (ch1 - ch2);
+	}
+	return (0);
+}
+
+static uint8_t *parse_instrs(char *text, int *len, void *context,
+                             void (*IVError)(void *context, const char *, int)) {
+	short numberstack[256];
+	int npos = 0, nread, i;
+	int push_left = 0, push_size = 0;
+	char *pt;
+	char *end, *bend, *brack;
+	int icnt = 0, imax = (int)(strlen(text)), val;
+	uint8_t *instrs;
+	NEW(instrs, imax);
+
+	for (pt = text; *pt; ++pt) {
+		npos = 0;
+		while (npos < 256) {
+			while (*pt == ' ' || *pt == '\t')
+				++pt;
+			if (isdigit(*pt) || *pt == '-') {
+				val = strtol(pt, &end, 0);
+				if (val > 32767 || val < -32768) {
+					IVError(context, "A value must be between [-32768,32767]", (int)(pt - text));
+					return (NULL);
+				}
+				pt = end;
+				numberstack[npos++] = val;
+			} else
+				break;
+		}
+		while (*pt == ' ' || *pt == '\t')
+			++pt;
+		if (npos == 0 && (*pt == '\r' || *pt == '\n' || *pt == '\0')) continue;
+		nread = 0;
+		if (push_left == -1) {
+			/* we need a push count */
+			if (npos == 0)
+				IVError(context, "Expected a number for a push count", (int)(pt - text));
+			else if (numberstack[0] > 255 || numberstack[0] <= 0) {
+				IVError(context, "The push count must be a number between 0 and 255",
+				        (int)(pt - text));
+				return (NULL);
+			} else {
+				nread = 1;
+				instrs[icnt++] = numberstack[0];
+				push_left = numberstack[0];
+			}
+		}
+		if (push_left != 0 && push_left < npos - nread &&
+		    (*pt == '\r' || *pt == '\n' || *pt == '\0')) {
+			IVError(context, "More pushes specified than needed", (int)(pt - text));
+			return (NULL);
+		}
+		while (push_left > 0 && nread < npos) {
+			if (push_size == 2) {
+				instrs[icnt++] = numberstack[nread] >> 8;
+				instrs[icnt++] = numberstack[nread++] & 0xff;
+			} else if (numberstack[0] > 255 || numberstack[0] < 0) {
+				IVError(context, "A value to be pushed by a byte push must be between 0 and 255",
+				        (int)(pt - text));
+				return (NULL);
+			} else
+				instrs[icnt++] = numberstack[nread++];
+			--push_left;
+		}
+		if (nread < npos && push_left == 0 && (*pt == '\r' || *pt == '\n' || *pt == '\0')) {
+			IVError(context, "Unexpected number", (int)(pt - text));
+			return (NULL);
+		}
+		if (*pt == '\r' || *pt == '\n' || *pt == '\0') continue;
+		if (push_left > 0) {
+			IVError(context, "Missing pushes", (int)(pt - text));
+			return (NULL);
+		}
+		while (nread < npos) {
+			i = nread;
+			if (numberstack[nread] >= 0 && numberstack[nread] <= 255) {
+				while (i < npos && numberstack[i] >= 0 && numberstack[i] <= 255)
+					++i;
+				if (i - nread <= 8)
+					instrs[icnt++] = ttf_pushb + (i - nread) - 1;
+				else {
+					instrs[icnt++] = ttf_npushb;
+					instrs[icnt++] = i - nread;
+				}
+				while (nread < i)
+					instrs[icnt++] = numberstack[nread++];
+			} else {
+				while (i < npos && (numberstack[i] < 0 || numberstack[i] > 255))
+					++i;
+				if (i - nread <= 8)
+					instrs[icnt++] = ttf_pushw + (i - nread) - 1;
+				else {
+					instrs[icnt++] = ttf_npushw;
+					instrs[icnt++] = i - nread;
+				}
+				while (nread < i) {
+					instrs[icnt++] = numberstack[nread] >> 8;
+					instrs[icnt++] = numberstack[nread++] & 0xff;
+				}
+			}
+		}
+		brack = NULL;
+		for (end = pt; *end != '\r' && *end != '\n' && *end != ' ' && *end != '\0'; ++end)
+			if (*end == '[' || *end == '_') brack = end;
+		for (i = 0; i < 256; ++i)
+			if (strnmatch(pt, ff_ttf_instrnames[i], (int)(end - pt)) == 0 &&
+			    sizeof(char) * (end - pt) == strlen(ff_ttf_instrnames[i]))
+				break;
+		if (i == 256 && brack != NULL) {
+			for (i = 0; i < 256; ++i)
+				if (strnmatch(pt, ff_ttf_instrnames[i], (int)(brack - pt + 1)) == 0) break;
+			val = strtol(brack + 1, &bend, 2); /* Stuff in brackets should be in binary */
+			while (*bend == ' ' || *bend == '\t')
+				++bend;
+			if (*bend != ']') {
+				IVError(context,
+				        "Missing right bracket in command (or bad binary value in bracket)",
+				        (int)(pt - text));
+				return (NULL);
+			}
+			if (val >= 32) {
+				IVError(context, "Bracketted value is too large", (int)(pt - text));
+				return (NULL);
+			}
+			i += val;
+		}
+		pt = end;
+		instrs[icnt++] = i;
+		if (i == ttf_npushb || i == ttf_npushw || (i >= ttf_pushb && i <= ttf_pushw + 7)) {
+			push_size = (i == ttf_npushb || (i >= ttf_pushb && i <= ttf_pushb + 7)) ? 1 : 2;
+			if (i == ttf_npushb || i == ttf_npushw)
+				push_left = -1;
+			else if (i >= ttf_pushb && i <= ttf_pushb + 7)
+				push_left = i - ttf_pushb + 1;
+			else
+				push_left = i - ttf_pushw + 1;
+		}
+		if (*pt == '\0') break;
+	}
+	*len = icnt;
+	RESIZE(instrs, icnt == 0 ? 1 : icnt);
+	return instrs; /* some versions of realloc abort on 0 */
+}
+
+static int instr_typify(struct instrdata *id) {
+	int i, len = id->instr_cnt, cnt, j, lh;
+	uint8_t *instrs = id->instrs;
+	uint8_t *bts;
+
+	if (id->bts == NULL) NEW(id->bts, len + 1);
+	bts = id->bts;
+	for (i = lh = 0; i < len; ++i) {
+		bts[i] = bt_instr;
+		++lh;
+		if (instrs[i] == ttf_npushb) {
+			/* NPUSHB */
+			bts[++i] = bt_cnt;
+			cnt = instrs[i];
+			for (j = 0; j < cnt; ++j)
+				bts[++i] = bt_byte;
+			lh += 1 + cnt;
+		} else if (instrs[i] == ttf_npushw) {
+			/* NPUSHW */
+			bts[++i] = bt_cnt;
+			++lh;
+			cnt = instrs[i];
+			for (j = 0; j < cnt; ++j) {
+				bts[++i] = bt_wordhi;
+				bts[++i] = bt_wordlo;
+			}
+			lh += 1 + cnt;
+		} else if ((instrs[i] & 0xf8) == 0xb0) {
+			/* PUSHB[n] */
+			cnt = (instrs[i] & 7) + 1;
+			for (j = 0; j < cnt; ++j)
+				bts[++i] = bt_byte;
+			lh += cnt;
+		} else if ((instrs[i] & 0xf8) == 0xb8) {
+			/* PUSHW[n] */
+			cnt = (instrs[i] & 7) + 1;
+			for (j = 0; j < cnt; ++j) {
+				bts[++i] = bt_wordhi;
+				bts[++i] = bt_wordlo;
+			}
+			lh += cnt;
+		}
+	}
+	bts[i] = bt_impliedreturn;
+	return (lh);
+}
+
+json_value *dump_ttinstr(uint8_t *instructions, uint32_t length, const otfcc_Options *options) {
+	if (options->instr_as_bytes) {
+		size_t len = 0;
+		uint8_t *buf = base64_encode(instructions, length, &len);
+		return json_string_new_length((uint32_t)len, (char *)buf);
+		FREE(buf);
+	} else {
+		struct instrdata id;
+
+		memset(&id, 0, sizeof(id));
+		id.instr_cnt = length;
+		id.instrs = instructions;
+		instr_typify(&id);
+		json_value *ret = json_array_new(id.instr_cnt);
+		for (uint32_t i = 0; i < id.instr_cnt; ++i) {
+			if (id.bts[i] == bt_wordhi) {
+				json_array_push(
+				    ret, json_integer_new((int16_t)((id.instrs[i] << 8) | id.instrs[i + 1])));
+				++i;
+			} else if (id.bts[i] == bt_cnt || id.bts[i] == bt_byte) {
+				json_array_push(ret, json_integer_new(id.instrs[i]));
+			} else {
+				json_array_push(ret, json_string_new(ff_ttf_instrnames[id.instrs[i]]));
+			}
+		}
+		FREE(id.bts);
+		return preserialize(ret);
+	}
+}
+
+void parse_ttinstr(json_value *col, void *context, void (*Make)(void *, uint8_t *, uint32_t),
+                   void (*Wrong)(void *, const char *, int)) {
+	if (!col) {
+		Make(context, NULL, 0);
+	} else if (col->type == json_string) {
+		size_t instrlen;
+		uint8_t *instructions =
+		    base64_decode((uint8_t *)col->u.string.ptr, col->u.string.length, &instrlen);
+		Make(context, instructions, (uint32_t)instrlen);
+	} else if (col->type == json_array) {
+		size_t istrlen = 0;
+		for (uint32_t j = 0; j < col->u.array.length; j++) {
+			json_value *record = col->u.array.values[j];
+			if (record->type == json_string) {
+				istrlen += record->u.string.length + 1;
+			} else if (record->type == json_integer) {
+				istrlen += 1 + 20;
+			} else {
+				Make(context, NULL, 0);
+				return;
+			}
+		}
+		sds instrString = sdsnewlen(NULL, istrlen + 1);
+		char *head = instrString;
+		for (uint32_t j = 0; j < col->u.array.length; j++) {
+			json_value *record = col->u.array.values[j];
+			if (record->type == json_string) {
+				memcpy(head, record->u.string.ptr, sizeof(char) * record->u.string.length);
+				head += record->u.string.length;
+			} else if (record->type == json_integer) {
+				int n = snprintf(head, 20, "%d", (int)record->u.integer);
+				head += n;
+			}
+			*head = '\n';
+			head++;
+		}
+		int instrLength = 0;
+		uint8_t *instructions = parse_instrs(instrString, &instrLength, context, Wrong);
+		sdsfree(instrString);
+		if (instructions && instrLength) {
+			Make(context, instructions, instrLength);
+		} else {
+			Make(context, NULL, 0);
+		}
+	} else {
+		Make(context, NULL, 0);
+	}
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/ttinstr/ttinstr.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,38 @@
+/* Copyright (C) 2001-2012 by George Williams */
+/* Copyright (C) 2016 by Belleve Invis */
+
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef CARYLL_SUPPORT_TTINSTR_H
+#define CARYLL_SUPPORT_TTINSTR_H
+#include "../util.h"
+
+void parse_ttinstr(json_value *col, void *context, void (*Make)(void *, uint8_t *, uint32_t),
+                   void (*Wrong)(void *, const char *, int));
+json_value *dump_ttinstr(uint8_t *instructions, uint32_t length, const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,291 @@
+#include "unicodeconv.h"
+
+// Brought from libXML2.
+sds utf16le_to_utf8(const uint8_t *inbyte, int inlenb) {
+	uint8_t *inb;
+	uint16_t *in ;
+	uint16_t *inend;
+	uint32_t c, d, inlen;
+	int bits;
+        
+	if(inlenb<0) {
+	    fprintf(stderr,"! error utf16le_to_utf8: inlenb negative.\n");
+	    return NULL;
+	}
+	inb = malloc(inlenb);
+	if(inb==NULL && inlenb>0){
+	    fprintf(stderr,"! error utf16le_to_utf8: allocating inb failed.\n");
+	    exit(1);
+	}
+	memcpy(inb, inbyte, (size_t)(inlenb));
+
+	in = (uint16_t *)inb;
+
+	if ((inlenb % 2) == 1) (inlenb)--;
+	inlen = inlenb / 2;
+	inend = in + inlen;
+	// pass 1: calculate bytes used for output
+	uint32_t bytesNeeded = 0;
+	while (in < inend) {
+		c = *in++;
+		if ((c & 0xFC00) == 0xD800) { // surrogates
+			if (in >= inend) {        // (in > inend) shouldn't happens
+				break;
+			}
+			d = *in++;
+			if ((d & 0xFC00) == 0xDC00) {
+				c &= 0x03FF;
+				c <<= 10;
+				c |= d & 0x03FF;
+				c += 0x10000;
+			}
+		}
+		if (c < 0x80) {
+			bytesNeeded += 1;
+		} else if (c < 0x800) {
+			bytesNeeded += 2;
+		} else if (c < 0x10000) {
+			bytesNeeded += 3;
+		} else {
+			bytesNeeded += 4;
+		}
+	}
+	in = (uint16_t *)inb;
+	sds out = sdsnewlen(NULL, bytesNeeded);
+	sds out0 = out;
+
+	while (in < inend) {
+		c = *in++;
+		if ((c & 0xFC00) == 0xD800) {
+			if (in >= inend) { break; }
+			d = *in++;
+			if ((d & 0xFC00) == 0xDC00) {
+				c &= 0x03FF;
+				c <<= 10;
+				c |= d & 0x03FF;
+				c += 0x10000;
+			}
+		}
+
+		if (c < 0x80) {
+			*out++ = c;
+			bits = -6;
+		} else if (c < 0x800) {
+			*out++ = ((c >> 6) & 0x1F) | 0xC0;
+			bits = 0;
+		} else if (c < 0x10000) {
+			*out++ = ((c >> 12) & 0x0F) | 0xE0;
+			bits = 6;
+		} else {
+			*out++ = ((c >> 18) & 0x07) | 0xF0;
+			bits = 12;
+		}
+
+		for (; bits >= 0; bits -= 6) {
+			*out++ = ((c >> bits) & 0x3F) | 0x80;
+		}
+	}
+	if (inb) {
+	    free(inb);
+	}
+	return out0;
+}
+
+sds utf16be_to_utf8(const uint8_t *inbyte, int inlenb) {
+	uint8_t *inb;
+	uint16_t *in ; //= (uint16_t *)inb;
+	uint16_t *inend;
+	uint32_t c, d, inlen;
+	uint8_t *tmp;
+	int bits;
+        
+	if(inlenb<0) {
+	    fprintf(stderr,"! error utf16be_to_utf8: inlenb negative.\n");
+	    return NULL;
+	}
+	inb = malloc(inlenb);
+	if(inb==NULL && inlenb>0){
+	    fprintf(stderr,"! error utf16be_to_utf8: allocating inb failed.\n");
+	    exit(1);
+	}
+	memcpy(inb, inbyte, (size_t)(inlenb));
+
+	in = (uint16_t *)inb;
+
+	if ((inlenb % 2) == 1) (inlenb)--;
+	inlen = inlenb / 2;
+	inend = in + inlen;
+	uint32_t bytesNeeded = 0;
+	while (in < inend) {
+		{
+			tmp = (uint8_t *)in;
+			c = *tmp++;
+			c = c << 8;
+			c = c | (uint32_t)*tmp;
+			in++;
+		}
+		if ((c & 0xFC00) == 0xD800) {
+			if (in >= inend) { break; }
+			{
+				tmp = (uint8_t *)in;
+				d = *tmp++;
+				d = d << 8;
+				d = d | (uint32_t)*tmp;
+				in++;
+			}
+			if ((d & 0xFC00) == 0xDC00) {
+				c &= 0x03FF;
+				c <<= 10;
+				c |= d & 0x03FF;
+				c += 0x10000;
+			}
+		}
+		if (c < 0x80) {
+			bytesNeeded += 1;
+		} else if (c < 0x800) {
+			bytesNeeded += 2;
+		} else if (c < 0x10000) {
+			bytesNeeded += 3;
+		} else {
+			bytesNeeded += 4;
+		}
+	}
+	in = (uint16_t *)inb;
+	sds out = sdsnewlen(NULL, bytesNeeded);
+	sds out0 = out;
+
+	while (in < inend) {
+		{
+			tmp = (uint8_t *)in;
+			c = *tmp++;
+			c = c << 8;
+			c = c | (uint32_t)*tmp;
+			in++;
+		}
+		if ((c & 0xFC00) == 0xD800) {
+			if (in >= inend) { break; }
+			{
+				tmp = (uint8_t *)in;
+				d = *tmp++;
+				d = d << 8;
+				d = d | (uint32_t)*tmp;
+				in++;
+			}
+			if ((d & 0xFC00) == 0xDC00) {
+				c &= 0x03FF;
+				c <<= 10;
+				c |= d & 0x03FF;
+				c += 0x10000;
+			}
+		}
+
+		if (c < 0x80) {
+			*out++ = c;
+			bits = -6;
+		} else if (c < 0x800) {
+			*out++ = ((c >> 6) & 0x1F) | 0xC0;
+			bits = 0;
+		} else if (c < 0x10000) {
+			*out++ = ((c >> 12) & 0x0F) | 0xE0;
+			bits = 6;
+		} else {
+			*out++ = ((c >> 18) & 0x07) | 0xF0;
+			bits = 12;
+		}
+
+		for (; bits >= 0; bits -= 6) {
+			*out++ = ((c >> bits) & 0x3F) | 0x80;
+		}
+	}
+	if (inb) {
+	    free(inb);
+	}
+	return out0;
+}
+
+uint8_t *utf8toutf16be(sds _in, size_t *out_bytes) {
+	if (!_in) {
+		*out_bytes = 0;
+		return NULL;
+	}
+	sds in = _in;
+	size_t inlen = sdslen(in);
+	char *inend = in + inlen;
+
+	uint32_t wordsNeeded = 0;
+	uint8_t trailing = 0;
+	uint32_t c = 0;
+	while (in < inend) {
+		uint8_t d = *in++;
+		if (d < 0x80) {
+			c = d;
+			trailing = 0;
+		} else if (d < 0xC0) {
+			break; // trailing byte in leading position
+		} else if (d < 0xE0) {
+			c = d & 0x1F;
+			trailing = 1;
+		} else if (d < 0xF0) {
+			c = d & 0x0F;
+			trailing = 2;
+		} else if (d < 0xF8) {
+			c = d & 0x07;
+			trailing = 3;
+		} else {
+			break;
+		}
+		if (inend - in < trailing) { break; }
+		for (; trailing; trailing--) {
+			if ((in >= inend) || (((d = *in++) & 0xC0) != 0x80)) break;
+			c <<= 6;
+			c |= d & 0x3F;
+		}
+		if (c < 0x10000) {
+			wordsNeeded += 1;
+		} else if (c < 0x110000) {
+			wordsNeeded += 2;
+		}
+	}
+	uint8_t *_out = malloc(2 * wordsNeeded * sizeof(uint8_t));
+	uint8_t *out = _out;
+	in = _in;
+	while (in < inend) {
+		uint8_t d = *in++;
+		if (d < 0x80) {
+			c = d;
+			trailing = 0;
+		} else if (d < 0xC0) {
+			break; // trailing byte in leading position
+		} else if (d < 0xE0) {
+			c = d & 0x1F;
+			trailing = 1;
+		} else if (d < 0xF0) {
+			c = d & 0x0F;
+			trailing = 2;
+		} else if (d < 0xF8) {
+			c = d & 0x07;
+			trailing = 3;
+		} else {
+			break;
+		}
+		if (inend - in < trailing) { break; }
+		for (; trailing; trailing--) {
+			if ((in >= inend) || (((d = *in++) & 0xC0) != 0x80)) break;
+			c <<= 6;
+			c |= d & 0x3F;
+		}
+		if (c < 0x10000) {
+			*(out++) = (c >> 8) & 0xFF;
+			*(out++) = c & 0xFF;
+		} else if (c < 0x110000) {
+			uint16_t tmp1 = 0xD800 | (c >> 10);
+			*(out++) = (tmp1 >> 8) & 0xFF;
+			*(out++) = tmp1 & 0xFF;
+			uint16_t tmp2 = 0xDC00 | (c & 0x03FF);
+			*(out++) = (tmp2 >> 8) & 0xFF;
+			*(out++) = tmp2 & 0xFF;
+		}
+	}
+	*out_bytes = wordsNeeded * 2;
+	return _out;
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/unicodeconv/unicodeconv.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,11 @@
+#ifndef CARYLL_SUPPORT_UNICODECONV_H
+#define CARYLL_SUPPORT_UNICODECONV_H
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+#include "dep/sds.h"
+sds utf16le_to_utf8(const uint8_t *inb, int inlenb);
+sds utf16be_to_utf8(const uint8_t *inb, int inlenb);
+uint8_t *utf8toutf16be(sds _in, size_t *out_bytes);
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/util.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/util.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/util.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,41 @@
+#ifndef CARYLL_SUPPORT_UTIL_H
+#define CARYLL_SUPPORT_UTIL_H
+
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "dep/json-builder.h"
+#include "dep/json.h"
+#include "dep/sds.h"
+#include "dep/uthash.h"
+
+#include "caryll/ownership.h"
+#include "caryll/buffer.h"
+
+#include "otfcc/handle.h"
+#include "otfcc/primitives.h"
+#include "otfcc/options.h"
+
+#include "aliases.h"
+#include "otfcc-alloc.h"
+#include "element-impl.h"
+#include "vector-impl.h"
+
+#include "base64/base64.h"
+#include "json/json-ident.h"
+#include "json/json-funcs.h"
+#include "bin-io.h"
+#include "tag.h"
+
+#define OTFCC_CHR(a,b,c,d) ( ((a)<<24) | ((b)<<16) | ((c)<<8) | (d) )
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/vector-impl.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/vector-impl.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/support/vector-impl.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,190 @@
+#ifndef CARYLL_SUPPORT_VECTOR_IMPL_H
+#define CARYLL_SUPPORT_VECTOR_IMPL_H
+
+#include "caryll/vector.h"
+#include "element-impl.h"
+
+#ifndef __CARYLL_INLINE__
+#ifdef _MSC_VER
+#define __CARYLL_INLINE__ __forceinline /* use __forceinline (VC++ specific) */
+#else
+#define __CARYLL_INLINE__ inline /* use standard inline */
+#endif
+#endif
+
+#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+#define __CARYLL_MAY_UNUSED__ __attribute__((__unused__))
+#elif (__clang_major__ > 2)
+#define __CARYLL_MAY_UNUSED__ __attribute__((__unused__))
+#else
+#define __CARYLL_MAY_UNUSED__
+#endif
+
+#define __CARYLL_VECTOR_INITIAL_SIZE 2
+
+#define caryll_VectorImplFreeIndependent(__TV, __T, __ti)                                          \
+	static __CARYLL_INLINE__ void __TV##_dispose(__TV *arr) {                                      \
+		if (!arr) return;                                                                          \
+		if ((__ti).dispose) {                                                                      \
+			for (size_t j = arr->length; j--;) {                                                   \
+				(__ti).dispose(&arr->items[j]);                                                    \
+			}                                                                                      \
+		}                                                                                          \
+		__caryll_free(arr->items);                                                                 \
+		arr->items = NULL;                                                                         \
+		arr->length = 0;                                                                           \
+		arr->capacity = 0;                                                                         \
+	}
+
+#define caryll_VectorImplFreeDependent(__TV, __T, __TX, fn)                                        \
+	static __CARYLL_INLINE__ void __TV##_disposeDependent(__TV *arr, const __TX *enclosure) {      \
+		if (!arr) return;                                                                          \
+		for (size_t j = arr->length; j--;) {                                                       \
+			fn(&arr->items[j], enclosure);                                                         \
+		}                                                                                          \
+		__caryll_free(arr->items);                                                                 \
+		arr->items = NULL;                                                                         \
+		arr->length = 0;                                                                           \
+		arr->capacity = 0;                                                                         \
+	}
+
+#define caryll_VectorImplFunctionsCommon(__TV, __T, __ti)                                          \
+	static __CARYLL_INLINE__ void __TV##_init(MODIFY __TV *arr) {                                  \
+		arr->length = 0;                                                                           \
+		arr->capacity = 0;                                                                         \
+		arr->items = NULL;                                                                         \
+	}                                                                                              \
+	caryll_trivialCreate(__TV);                                                                    \
+	caryll_trivialFree(__TV);                                                                      \
+	static __CARYLL_INLINE__ void __TV##_growTo(MODIFY __TV *arr, size_t target) {                 \
+		if (target <= arr->capacity) return;                                                       \
+		if (arr->capacity < __CARYLL_VECTOR_INITIAL_SIZE)                                          \
+			arr->capacity = __CARYLL_VECTOR_INITIAL_SIZE;                                          \
+		while (arr->capacity < target) {                                                           \
+			arr->capacity += arr->capacity / 2;                                                    \
+		}                                                                                          \
+		if (arr->items) {                                                                          \
+			arr->items = __caryll_realloc(arr->items, arr->capacity * sizeof(__T));                \
+		} else {                                                                                   \
+			arr->items = __caryll_calloc(arr->capacity, sizeof(__T));                              \
+		}                                                                                          \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_growToN(MODIFY __TV *arr, size_t target) {                \
+		if (target <= arr->capacity) return;                                                       \
+		if (arr->capacity < __CARYLL_VECTOR_INITIAL_SIZE)                                          \
+			arr->capacity = __CARYLL_VECTOR_INITIAL_SIZE;                                          \
+		if (arr->capacity < target) { arr->capacity = target + 1; }                                \
+		if (arr->items) {                                                                          \
+			arr->items = __caryll_realloc(arr->items, arr->capacity * sizeof(__T));                \
+		} else {                                                                                   \
+			arr->items = __caryll_calloc(arr->capacity, sizeof(__T));                              \
+		}                                                                                          \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_resizeTo(MODIFY __TV *arr, size_t target) {               \
+		arr->capacity = target;                                                                    \
+		if (arr->items) {                                                                          \
+			arr->items = __caryll_realloc(arr->items, arr->capacity * sizeof(__T));                \
+		} else {                                                                                   \
+			arr->items = __caryll_calloc(arr->capacity, sizeof(__T));                              \
+		}                                                                                          \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_shrinkToFit(MODIFY __TV *arr) {                           \
+		__TV##_resizeTo(arr, arr->length);                                                         \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_grow(MODIFY __TV *arr) {                                  \
+		__TV##_growTo(arr, arr->length + 1);                                                       \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_push(MODIFY __TV *arr, MOVE __T elem) {                   \
+		__TV##_grow(arr);                                                                          \
+		(arr)->items[(arr)->length++] = (elem);                                                    \
+	}                                                                                              \
+	static __CARYLL_INLINE__ __T __TV##_pop(MODIFY __TV *arr) {                                    \
+		__T t = arr->items[arr->length - 1];                                                       \
+		arr->length -= 1;                                                                          \
+		return t;                                                                                  \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_fill(MODIFY __TV *arr, size_t n) {                        \
+		while (arr->length < n) {                                                                  \
+			__T x;                                                                                 \
+			if ((__ti).init) {                                                                     \
+				(__ti).init(&x);                                                                   \
+			} else {                                                                               \
+				memset(&x, 0, sizeof(x));                                                          \
+			}                                                                                      \
+			__TV##_push(arr, x);                                                                   \
+		}                                                                                          \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_initN(MODIFY __TV *arr, size_t n) {                       \
+		__TV##_init(arr);                                                                          \
+		__TV##_growToN(arr, n);                                                                    \
+		__TV##_fill(arr, n);                                                                       \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_initCapN(MODIFY __TV *arr, size_t n) {                    \
+		__TV##_init(arr);                                                                          \
+		__TV##_growToN(arr, n);                                                                    \
+	}                                                                                              \
+	static __CARYLL_INLINE__ __TV *__TV##_createN(size_t n) {                                      \
+		__TV *t = __caryll_malloc(sizeof(__TV));                                                   \
+		__TV##_initN(t, n);                                                                        \
+		return t;                                                                                  \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_move(MODIFY __TV *dst, MOVE __TV *src) {                  \
+		*dst = *src;                                                                               \
+		__TV##_init(src);                                                                          \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_copy(MODIFY __TV *dst, const __TV *src) {                 \
+		__TV##_init(dst);                                                                          \
+		__TV##_growTo(dst, src->length);                                                           \
+		dst->length = src->length;                                                                 \
+		if ((__ti).copy) {                                                                         \
+			for (size_t j = 0; j < src->length; j++) {                                             \
+				(__ti).copy(&dst->items[j], (const __T *)&src->items[j]);                          \
+			}                                                                                      \
+		} else {                                                                                   \
+			for (size_t j = 0; j < src->length; j++) {                                             \
+				dst->items[j] = src->items[j];                                                     \
+			}                                                                                      \
+		}                                                                                          \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_sort(MODIFY __TV *arr,                                    \
+	                                          int (*fn)(const __T *a, const __T *b)) {             \
+		qsort(arr->items, arr->length, sizeof(arr->items[0]),                                      \
+		      (int (*)(const void *, const void *))fn);                                            \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_filterEnv(                                                \
+	    MODIFY __TV *arr, bool (*fn)(const __T *a, void *env), void *env) {                        \
+		size_t j = 0;                                                                              \
+		for (size_t k = 0; k < arr->length; k++) {                                                 \
+			if (fn(&arr->items[k], env)) {                                                         \
+				if (j != k) arr->items[j] = arr->items[k];                                         \
+				j++;                                                                               \
+			} else {                                                                               \
+				(__ti).dispose ? (__ti).dispose(&((arr)->items[k])) : (void)0;                     \
+			}                                                                                      \
+		};                                                                                         \
+		arr->length = j;                                                                           \
+	}                                                                                              \
+	static __CARYLL_INLINE__ void __TV##_disposeItem(MODIFY __TV *arr, size_t n) {                 \
+		(__ti).dispose ? (__ti).dispose(&((arr)->items[n])) : (void)0;                             \
+	}                                                                                              \
+	caryll_trivialReplace(__TV);
+
+#define caryll_VectorImplFunctions(__TV, __T, __ti)                                                \
+	caryll_VectorImplFreeIndependent(__TV, __T, __ti);                                             \
+	caryll_VectorImplFunctionsCommon(__TV, __T, __ti);
+
+#define caryll_VectorImplAssignments(__TV, __T, __ti)                                              \
+	.init = __TV##_init, .copy = __TV##_copy, .dispose = __TV##_dispose, .create = __TV##_create,  \
+	.createN = __TV##_createN, .free = __TV##_free, .initN = __TV##_initN,                         \
+	.initCapN = __TV##_initCapN, .clear = __TV##_dispose, .replace = __TV##_replace,               \
+	.copyReplace = __TV##_copyReplace, .push = __TV##_push, .pop = __TV##_pop,                     \
+	.fill = __TV##_fill, .sort = __TV##_sort, .disposeItem = __TV##_disposeItem,                   \
+	.filterEnv = __TV##_filterEnv, .move = __TV##_move, .shrinkToFit = __TV##_shrinkToFit
+
+#define caryll_standardVectorImpl(__TV, __T, __ti, __name)                                         \
+	caryll_VectorImplFunctions(__TV, __T, __ti);                                                   \
+	caryll_VectorInterfaceTypeName(__TV) __name = {                                                \
+	    caryll_VectorImplAssignments(__TV, __T, __ti),                                             \
+	};
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,330 @@
+#include "BASE.h"
+
+#include "otl/private.h"
+
+
+static void deleteBaseAxis(MOVE otl_BaseAxis *axis) {
+	if (!axis) return;
+	if (axis->entries) {
+		for (tableid_t j = 0; j < axis->scriptCount; j++) {
+			if (axis->entries[j].baseValues) FREE(axis->entries[j].baseValues);
+		}
+		FREE(axis->entries);
+	}
+}
+
+static INLINE void disposeBASE(MOVE table_BASE *base) {
+	deleteBaseAxis(base->horizontal);
+	deleteBaseAxis(base->vertical);
+}
+
+caryll_standardRefType(table_BASE, table_iBASE, disposeBASE);
+
+static int16_t readBaseValue(font_file_pointer data, uint32_t tableLength, uint16_t offset) {
+	checkLength(offset + 4);
+	return read_16s(data + offset + 2);
+FAIL:
+	return 0;
+}
+
+static void readBaseScript(const font_file_pointer data, uint32_t tableLength, uint16_t offset,
+                           otl_BaseScriptEntry *entry, uint32_t *baseTagList, uint16_t nBaseTags) {
+	entry->baseValuesCount = 0;
+	entry->baseValues = NULL;
+	entry->defaultBaselineTag = 0;
+	checkLength(offset + 2); // care about base values only now
+	uint16_t baseValuesOffset = read_16u(data + offset);
+	if (baseValuesOffset) {
+		baseValuesOffset += offset;
+		checkLength(baseValuesOffset + 4);
+		uint16_t defaultIndex = read_16u(data + baseValuesOffset) % nBaseTags;
+		entry->defaultBaselineTag = baseTagList[defaultIndex];
+		entry->baseValuesCount = read_16u(data + baseValuesOffset + 2);
+		if (entry->baseValuesCount != nBaseTags) goto FAIL;
+		checkLength(baseValuesOffset + 4 + 2 * entry->baseValuesCount);
+		NEW(entry->baseValues, entry->baseValuesCount);
+		for (tableid_t j = 0; j < entry->baseValuesCount; j++) {
+			entry->baseValues[j].tag = baseTagList[j];
+			uint16_t _valOffset = read_16u(data + baseValuesOffset + 4 + 2 * j);
+			if (_valOffset) {
+				entry->baseValues[j].coordinate =
+				    readBaseValue(data, tableLength, baseValuesOffset + _valOffset);
+			} else {
+				entry->baseValues[j].coordinate = 0;
+			}
+		}
+		return;
+	}
+FAIL:
+	entry->baseValuesCount = 0;
+	if (entry->baseValues) FREE(entry->baseValues);
+	entry->baseValues = NULL;
+	entry->defaultBaselineTag = 0;
+	return;
+}
+
+static otl_BaseAxis *readAxis(font_file_pointer data, uint32_t tableLength, uint16_t offset) {
+	otl_BaseAxis *axis = NULL;
+	uint32_t *baseTagList = NULL;
+	checkLength(offset + 4);
+
+	// Read BaseTagList
+	uint16_t baseTagListOffset = offset + read_16u(data + offset);
+	if (baseTagListOffset <= offset) goto FAIL;
+	checkLength(baseTagListOffset + 2);
+	uint16_t nBaseTags = read_16u(data + baseTagListOffset);
+	if (!nBaseTags) goto FAIL;
+	checkLength(baseTagListOffset + 2 + 4 * nBaseTags);
+	NEW(baseTagList, nBaseTags);
+	for (uint16_t j = 0; j < nBaseTags; j++) {
+		baseTagList[j] = read_32u(data + baseTagListOffset + 2 + j * 4);
+	}
+
+	uint16_t baseScriptListOffset = offset + read_16u(data + offset + 2);
+	if (baseScriptListOffset <= offset) goto FAIL;
+	checkLength(baseScriptListOffset + 2);
+	tableid_t nBaseScripts = read_16u(data + baseScriptListOffset);
+	checkLength(baseScriptListOffset + 2 + 6 * nBaseScripts);
+	NEW(axis);
+	axis->scriptCount = nBaseScripts;
+	NEW(axis->entries, nBaseScripts);
+	for (tableid_t j = 0; j < nBaseScripts; j++) {
+		axis->entries[j].tag = read_32u(data + baseScriptListOffset + 2 + 6 * j);
+		uint16_t baseScriptOffset = read_16u(data + baseScriptListOffset + 2 + 6 * j + 4);
+		if (baseScriptOffset) {
+			readBaseScript(data, tableLength, baseScriptListOffset + baseScriptOffset,
+			               &(axis->entries[j]), baseTagList, nBaseTags);
+		} else {
+			axis->entries[j].baseValuesCount = 0;
+			axis->entries[j].baseValues = NULL;
+			axis->entries[j].defaultBaselineTag = 0;
+		}
+	}
+	return axis;
+
+FAIL:
+	if (baseTagList) FREE(baseTagList);
+	DELETE(deleteBaseAxis, axis);
+	return axis;
+}
+
+table_BASE *otfcc_readBASE(const otfcc_Packet packet, const otfcc_Options *options) {
+	table_BASE *base = NULL;
+	FOR_TABLE(OTFCC_CHR('B','A','S','E'), table) {
+		font_file_pointer data = table.data;
+		uint32_t tableLength = table.length;
+		checkLength(8);
+		NEW(base);
+		uint16_t offsetH = read_16u(data + 4);
+		if (offsetH) base->horizontal = readAxis(data, tableLength, offsetH);
+		uint16_t offsetV = read_16u(data + 6);
+		if (offsetV) base->vertical = readAxis(data, tableLength, offsetV);
+		return base;
+	FAIL:
+		logWarning("Table 'BASE' Corrupted");
+		DELETE(table_iBASE.free, base);
+	}
+	return base;
+}
+
+static json_value *axisToJson(const otl_BaseAxis *axis) {
+	json_value *_axis = json_object_new(axis->scriptCount);
+	for (tableid_t j = 0; j < axis->scriptCount; j++) {
+		if (!axis->entries[j].tag) continue;
+		json_value *_entry = json_object_new(3);
+		if (axis->entries[j].defaultBaselineTag) {
+			char tag[4];
+			tag2str(axis->entries[j].defaultBaselineTag, tag);
+			json_object_push(_entry, "defaultBaseline", json_string_new_length(4, tag));
+		}
+		json_value *_values = json_object_new(axis->entries[j].baseValuesCount);
+		for (tableid_t k = 0; k < axis->entries[j].baseValuesCount; k++) {
+			if (axis->entries[j].baseValues[k].tag) {
+
+				json_object_push_tag(_values, axis->entries[j].baseValues[k].tag,
+				                     json_new_position(axis->entries[j].baseValues[k].coordinate));
+			}
+		}
+		json_object_push(_entry, "baselines", _values);
+		json_object_push_tag(_axis, axis->entries[j].tag, _entry);
+	}
+	return _axis;
+}
+
+void otfcc_dumpBASE(const table_BASE *base, json_value *root, const otfcc_Options *options) {
+	if (!base) return;
+	loggedStep("BASE") {
+		json_value *_base = json_object_new(2);
+		if (base->horizontal) json_object_push(_base, "horizontal", axisToJson(base->horizontal));
+		if (base->vertical) json_object_push(_base, "vertical", axisToJson(base->vertical));
+		json_object_push(root, "BASE", _base);
+	}
+}
+
+static void baseScriptFromJson(const json_value *_sr, otl_BaseScriptEntry *entry) {
+	entry->defaultBaselineTag = str2tag(json_obj_getstr_share(_sr, "defaultBaseline"));
+	json_value *_basevalues = json_obj_get_type(_sr, "baselines", json_object);
+	if (!_basevalues) {
+		entry->baseValuesCount = 0;
+		entry->baseValues = NULL;
+	} else {
+		entry->baseValuesCount = _basevalues->u.object.length;
+		NEW(entry->baseValues, entry->baseValuesCount);
+		for (tableid_t j = 0; j < entry->baseValuesCount; j++) {
+			entry->baseValues[j].tag = str2tag(_basevalues->u.object.values[j].name);
+			entry->baseValues[j].coordinate = json_numof(_basevalues->u.object.values[j].value);
+		}
+	}
+}
+
+static int by_script_tag(const void *a, const void *b) {
+	return ((const otl_BaseScriptEntry *)a)->tag - ((const otl_BaseScriptEntry *)b)->tag;
+}
+
+static otl_BaseAxis *axisFromJson(const json_value *_axis) {
+	if (!_axis) return NULL;
+	otl_BaseAxis *axis;
+	NEW(axis);
+	axis->scriptCount = _axis->u.object.length;
+	NEW(axis->entries, axis->scriptCount);
+	tableid_t jj = 0;
+	for (tableid_t j = 0; j < axis->scriptCount; j++) {
+		if (_axis->u.object.values[j].value &&
+		    _axis->u.object.values[j].value->type == json_object) {
+			axis->entries[jj].tag = str2tag(_axis->u.object.values[j].name);
+			baseScriptFromJson(_axis->u.object.values[j].value, &(axis->entries[jj]));
+			jj++;
+		}
+	}
+	axis->scriptCount = jj;
+	qsort(axis->entries, axis->scriptCount, sizeof(otl_BaseScriptEntry), by_script_tag);
+	return axis;
+}
+
+table_BASE *otfcc_parseBASE(const json_value *root, const otfcc_Options *options) {
+	table_BASE *base = NULL;
+	json_value *table = NULL;
+	if ((table = json_obj_get_type(root, "BASE", json_object))) {
+		loggedStep("BASE") {
+			NEW(base);
+			base->horizontal = axisFromJson(json_obj_get_type(table, "horizontal", json_object));
+			base->vertical = axisFromJson(json_obj_get_type(table, "vertical", json_object));
+		}
+	}
+	return base;
+}
+
+static int by_tag(const void *a, const void *b) {
+	return *((const uint32_t *)a) - *((const uint32_t *)b);
+}
+
+static bk_Block *axisToBk(const otl_BaseAxis *axis) {
+	if (!axis) return NULL;
+	struct {
+		tableid_t size;
+		uint32_t *items;
+	} taglist;
+	taglist.size = 0;
+	taglist.items = NULL;
+
+	for (tableid_t j = 0; j < axis->scriptCount; j++) {
+		otl_BaseScriptEntry *entry = &(axis->entries[j]);
+		if (entry->defaultBaselineTag) {
+			bool found = false;
+			for (tableid_t jk = 0; jk < taglist.size; jk++) {
+				if (taglist.items[jk] == entry->defaultBaselineTag) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				taglist.size += 1;
+				RESIZE(taglist.items, taglist.size);
+				taglist.items[taglist.size - 1] = entry->defaultBaselineTag;
+			}
+		}
+		for (tableid_t k = 0; k < entry->baseValuesCount; k++) {
+			uint32_t tag = entry->baseValues[k].tag;
+			bool found = false;
+			for (tableid_t jk = 0; jk < taglist.size; jk++) {
+				if (taglist.items[jk] == tag) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				taglist.size += 1;
+				RESIZE(taglist.items, taglist.size);
+				taglist.items[taglist.size - 1] = tag;
+			}
+		}
+	}
+	qsort(taglist.items, taglist.size, sizeof(uint32_t), by_tag);
+	bk_Block *baseTagList = bk_new_Block(b16, taglist.size, bkover);
+	for (tableid_t j = 0; j < taglist.size; j++) {
+		bk_push(baseTagList, b32, taglist.items[j], bkover);
+	}
+
+	bk_Block *baseScriptList = bk_new_Block(b16, axis->scriptCount, bkover);
+	for (tableid_t j = 0; j < axis->scriptCount; j++) {
+		otl_BaseScriptEntry *entry = &(axis->entries[j]);
+		bk_Block *baseValues = bk_new_Block(bkover);
+		{
+			tableid_t defaultIndex = 0;
+			for (tableid_t m = 0; m < taglist.size; m++) {
+				if (taglist.items[m] == entry->defaultBaselineTag) {
+					defaultIndex = m;
+					break;
+				}
+			}
+			bk_push(baseValues, b16, defaultIndex, bkover);
+		}
+		bk_push(baseValues, b16, taglist.size, bkover);
+		for (size_t m = 0; m < taglist.size; m++) {
+			bool found = false;
+			tableid_t foundIndex = 0;
+			for (tableid_t k = 0; k < entry->baseValuesCount; k++) {
+				if (entry->baseValues[k].tag == taglist.items[m]) {
+					found = true, foundIndex = k;
+					break;
+				}
+			}
+			if (found) {
+				bk_push(baseValues, // base value
+				        p16,
+				        bk_new_Block(
+				            b16, 1,                                                 // format
+				            b16, (int16_t)entry->baseValues[foundIndex].coordinate, // coordinate
+				            bkover),
+				        bkover);
+			} else {
+				bk_push(baseValues, // assign a zero value
+				        p16,
+				        bk_new_Block(b16, 1, // format
+				                     b16, 0, // coordinate
+				                     bkover),
+				        bkover);
+			}
+		}
+		bk_Block *scriptRecord = bk_new_Block(p16, baseValues, // BaseValues
+		                                      p16, NULL,       // DefaultMinMax
+		                                      b16, 0,          // BaseLangSysCount
+		                                      bkover);
+		bk_push(baseScriptList, b32, entry->tag, // BaseScriptTag
+		        p16, scriptRecord,               // BaseScript
+		        bkover);
+	}
+	FREE(taglist.items);
+	return bk_new_Block(p16, baseTagList,    // BaseTagList
+	                    p16, baseScriptList, // BaseScriptList
+	                    bkover);
+}
+
+caryll_Buffer *otfcc_buildBASE(const table_BASE *base, const otfcc_Options *options) {
+	if (!base) return NULL;
+	bk_Block *root = bk_new_Block(b32, 0x10000,                    // Version
+	                              p16, axisToBk(base->horizontal), // HorizAxis
+	                              p16, axisToBk(base->vertical),   // VertAxis
+	                              bkover);
+	return bk_build_Block(root);
+}

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.h
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.h	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/BASE.h	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,11 @@
+#ifndef CARYLL_TABLE_BASE_H
+#define CARYLL_TABLE_BASE_H
+
+#include "otfcc/table/BASE.h"
+
+table_BASE *otfcc_readBASE(const otfcc_Packet packet, const otfcc_Options *options);
+void otfcc_dumpBASE(const table_BASE *base, json_value *root, const otfcc_Options *options);
+table_BASE *otfcc_parseBASE(const json_value *root, const otfcc_Options *options);
+caryll_Buffer *otfcc_buildBASE(const table_BASE *base, const otfcc_Options *options);
+
+#endif

Added: trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.c
===================================================================
--- trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.c	                        (rev 0)
+++ trunk/Build/source/texk/web2c/mfluadir/otfcc/lib/table/CFF.c	2021-01-10 20:13:26 UTC (rev 57374)
@@ -0,0 +1,1411 @@
+#include "CFF.h"
+
+#include "support/util.h"
+#include "libcff/libcff.h"
+#include "libcff/charstring-il.h"
+#include "libcff/subr.h"
+
+
+const double DEFAULT_BLUE_SCALE = 0.039625;
+const double DEFAULT_BLUE_SHIFT = 7;
+const double DEFAULT_BLUE_FUZZ = 1;
+const double DEFAULT_EXPANSION_FACTOR = 0.06;
+
+static cff_PrivateDict *otfcc_newCff_private() {
+	cff_PrivateDict *pd = NULL;
+	NEW(pd);
+	pd->blueFuzz = DEFAULT_BLUE_FUZZ;
+	pd->blueScale = DEFAULT_BLUE_SCALE;
+	pd->blueShift = DEFAULT_BLUE_SHIFT;
+	pd->expansionFactor = DEFAULT_EXPANSION_FACTOR;
+	return pd;
+}
+
+static INLINE void initFD(table_CFF *fd) {
+	memset(fd, 0, sizeof(*fd));
+	fd->underlinePosition = -100;
+	fd->underlineThickness = 50;
+}
+static void otfcc_delete_privatedict(cff_PrivateDict *priv) {
+	if (!priv) return;
+	FREE(priv->blueValues);
+	FREE(priv->otherBlues);
+	FREE(priv->familyBlues);
+
+	FREE(priv->familyOtherBlues);
+	FREE(priv->stemSnapH);
+	FREE(priv->stemSnapV);
+	FREE(priv);
+}
+static INLINE void disposeFontMatrix(cff_FontMatrix *fm) {
+	if (!fm) return;
+	iVQ.dispose(&fm->x);
+	iVQ.dispose(&fm->y);
+}
+static INLINE void disposeFD(table_CFF *fd) {
+	sdsfree(fd->version);
+	sdsfree(fd->notice);
+	sdsfree(fd->copyright);
+	sdsfree(fd->fullName);
+	sdsfree(fd->familyName);
+	sdsfree(fd->weight);
+
+	sdsfree(fd->fontName);
+	sdsfree(fd->cidRegistry);
+	sdsfree(fd->cidOrdering);
+	disposeFontMatrix(fd->fontMatrix);
+	FREE(fd->fontMatrix);
+	otfcc_delete_privatedict(fd->privateDict);
+	if (fd->fdArray) {
+		for (tableid_t j = 0; j < fd->fdArrayCount; j++) {
+			table_iCFF.free(fd->fdArray[j]);
+		}
+		FREE(fd->fdArray);
+	}
+}
+
+caryll_standardRefType(table_CFF, table_iCFF, initFD, disposeFD);
+
+typedef struct {
+	int32_t fdArrayIndex;
+	table_CFF *meta;
+	table_glyf *glyphs;
+	cff_File *cffFile;
+	uint64_t seed;
+} cff_extract_context;
+static void callback_extract_private(uint32_t op, uint8_t top, cff_Value *stack, void *_context) {
+	cff_extract_context *context = (cff_extract_context *)_context;
+	table_CFF *meta = context->meta;
+	if (context->fdArrayIndex >= 0 && context->fdArrayIndex < meta->fdArrayCount) {
+		meta = meta->fdArray[context->fdArrayIndex];
+	}
+	cff_PrivateDict *pd = meta->privateDict;
+	switch (op) {
+		// DELTAs
+		case op_BlueValues: {
+			pd->blueValuesCount = top;
+			NEW(pd->blueValues, pd->blueValuesCount);
+			for (arity_t j = 0; j < pd->blueValuesCount; j++) {
+				pd->blueValues[j] = cffnum(stack[j]);
+			}
+			break;
+		}
+		case op_OtherBlues: {
+			pd->otherBluesCount = top;
+			NEW(pd->otherBlues, pd->otherBluesCount);
+			for (arity_t j = 0; j < pd->otherBluesCount; j++) {
+				pd->otherBlues[j] = cffnum(stack[j]);
+			}
+			break;
+		}
+		case op_FamilyBlues: {
+			pd->familyBluesCount = top;
+			NEW(pd->familyBlues, pd->familyBluesCount);
+			for (arity_t j = 0; j < pd->familyBluesCount; j++) {
+				pd->familyBlues[j] = cffnum(stack[j]);
+			}
+			break;
+		}
+		case op_FamilyOtherBlues: {
+			pd->familyOtherBluesCount = top;
+			NEW(pd->familyOtherBlues, pd->familyOtherBluesCount);
+			for (arity_t j = 0; j < pd->familyOtherBluesCount; j++) {
+				pd->familyOtherBlues[j] = cffnum(stack[j]);
+			}
+			break;
+		}
+		case op_StemSnapH: {
+			pd->stemSnapHCount = top;
+			NEW(pd->stemSnapH, pd->stemSnapHCount);
+			for (arity_t j = 0; j < pd->stemSnapHCount; j++) {
+				pd->stemSnapH[j] = cffnum(stack[j]);
+			}
+			break;
+		}
+		case op_StemSnapV: {
+			pd->stemSnapVCount = top;
+			NEW(pd->stemSnapV, pd->stemSnapVCount);
+			for (arity_t j = 0; j < pd->stemSnapVCount; j++) {
+				pd->stemSnapV[j] = cffnum(stack[j]);
+			}
+			break;
+		}
+		// Numbers
+		case op_BlueScale:
+			if (top) { pd->blueScale = cffnum(stack[top - 1]); }
+			break;
+		case op_BlueShift:
+			if (top) { pd->blueShift = cffnum(stack[top - 1]); }
+			break;
+		case op_BlueFuzz:
+			if (top) { pd->blueFuzz = cffnum(stack[top - 1]); }
+			break;
+		case op_StdHW:
+			if (top) { pd->stdHW = cffnum(stack[top - 1]); }
+			break;
+		case op_StdVW:
+			if (top) { pd->stdVW = cffnum(stack[top - 1]); }
+			break;
+		case op_ForceBold:
+			if (top) { pd->forceBold = cffnum(stack[top - 1]); }
+			break;
+		case op_LanguageGroup:
+			if (top) { pd->languageGroup = cffnum(stack[top - 1]); }
+			break;
+		case op_ExpansionFactor:
+			if (top) { pd->expansionFactor = cffnum(stack[top - 1]); }
+			break;
+		case op_initialRandomSeed:
+			if (top) { pd->initialRandomSeed = cffnum(stack[top - 1]); }
+			break;
+		case op_defaultWidthX:
+			if (top) { pd->defaultWidthX = cffnum(stack[top - 1]); }
+			break;
+		case op_nominalWidthX:
+			if (top) { pd->nominalWidthX = cffnum(stack[top - 1]); }
+			break;
+	}
+}
+
+static void callback_extract_fd(uint32_t op, uint8_t top, cff_Value *stack, void *_context) {
+	cff_extract_context *context = (cff_extract_context *)_context;
+	cff_File *file = context->cffFile;
+	table_CFF *meta = context->meta;
+	if (context->fdArrayIndex >= 0 && context->fdArrayIndex < meta->fdArrayCount) {
+		meta = meta->fdArray[context->fdArrayIndex];
+	}
+	switch (op) {
+		case op_version:
+			if (top) { meta->version = sdsget_cff_sid(stack[top - 1].i, file->string); }
+			break;
+		case op_Notice:
+			if (top) { meta->notice = sdsget_cff_sid(stack[top - 1].i, file->string); }
+			break;
+		case op_Copyright:
+			if (top) { meta->copyright = sdsget_cff_sid(stack[top - 1].i, file->string); }
+			break;
+		case op_FontName:
+			if (top) { meta->fontName = sdsget_cff_sid(stack[top - 1].i, file->string); }
+			break;
+		case op_FullName:
+			if (top) { meta->fullName = sdsget_cff_sid(stack[top - 1].i, file->string); }
+			break;
+		case op_FamilyName:
+			if (top) { meta->familyName = sdsget_cff_sid(stack[top - 1].i, file->string); }
+			break;
+		case op_Weight:
+			if (top) { meta->weight = sdsget_cff_sid(stack[top - 1].i, file->string); }
+			break;
+		case op_FontBBox:
+			if (top >= 4) {
+				meta->fontBBoxLeft = cffnum(stack[top - 4]);
+				meta->fontBBoxBottom = cffnum(stack[top - 3]);
+				meta->fontBBoxRight = cffnum(stack[top - 2]);
+				meta->fontBBoxTop = cffnum(stack[top - 1]);
+			}
+			break;
+		case op_FontMatrix:
+			if (top >= 6) {
+				NEW(meta->fontMatrix);
+				meta->fontMatrix->a = cffnum(stack[top - 6]);
+				meta->fontMatrix->b = cffnum(stack[top - 5]);
+				meta->fontMatrix->c = cffnum(stack[top - 4]);
+				meta->fontMatrix->d = cffnum(stack[top - 3]);
+				meta->fontMatrix->x = iVQ.createStill(cffnum(stack[top - 2]));
+				meta->fontMatrix->y = iVQ.createStill(cffnum(stack[top - 1]));
+			}
+			break;
+		case op_isFixedPitch:
+			if (top) { meta->isFixedPitch = (bool)cffnum(stack[top - 1]); }
+			break;
+		case op_ItalicAngle:
+			if (top) { meta->italicAngle = cffnum(stack[top - 1]); }
+			break;
+		case op_UnderlinePosition:
+			if (top) { meta->underlinePosition = cffnum(stack[top - 1]); }
+			break;
+		case op_UnderlineThickness:
+			if (top) { meta->underlineThickness = cffnum(stack[top - 1]); }
+			break;
+		case op_StrokeWidth:
+			if (top) { meta->strokeWidth = cffnum(stack[top - 1]); }
+			break;
+
+		// Private
+		case op_Private:
+			if (top >= 2) {
+				uint32_t privateLength = cffnum(stack[top - 2]);
+				uint32_t privateOffset = cffnum(stack[top - 1]);
+				meta->privateDict = otfcc_newCff_private();
+				cff_iDict.parseToCallback(file->raw_data + privateOffset, privateLength, context,
+				                          callback_extract_private);
+			}
+			break;
+		// CID
+		case op_ROS:
+			if (top >= 3) {
+				meta->isCID = true;
+				meta->cidRegistry = sdsget_cff_sid(stack[top - 3].i, file->string);
+				meta->cidOrdering = sdsget_cff_sid(stack[top - 2].i, file->string);
+				meta->cidSupplement = cffnum(stack[top - 1]);
+			}
+			break;
+	}
+}
+
+typedef struct {
+	glyf_Glyph *g;
+	shapeid_t jContour;
+	shapeid_t jPoint;
+	double defaultWidthX;
+	double nominalWidthX;
+	uint8_t definedHStems;
+	uint8_t definedVStems;
+	uint8_t definedHintMasks;
+	uint8_t definedContourMasks;
+	uint64_t randx;
+} outline_builder_context;
+
+static void callback_draw_setwidth(void *_context, double width) {
+	outline_builder_context *context = (outline_builder_context *)_context;
+	iVQ.replace(&context->g->advanceWidth, iVQ.createStill(width + context->nominalWidthX));
+}
+static void callback_draw_next_contour(void *_context) {
+	outline_builder_context *context = (outline_builder_context *)_context;
+	glyf_Contour c;
+	glyf_iContour.init(&c);
+	glyf_iContourList.push(&context->g->contours, c);
+	context->jContour = context->g->contours.length;
+	context->jPoint = 0;
+}
+static void callback_draw_lineto(void *_context, double x1, double y1) {
+	outline_builder_context *context = (outline_builder_context *)_context;
+	if (context->jContour) {
+		glyf_Contour *contour = &context->g->contours.items[context->jContour - 1];
+		glyf_Point z;
+		glyf_iPoint.init(&z);
+		z.onCurve = true;
+		iVQ.copyReplace(&z.x, iVQ.createStill(x1));
+		iVQ.copyReplace(&z.y, iVQ.createStill(y1));
+		glyf_iContour.push(contour, z);
+		context->jPoint += 1;
+	}
+}
+static void callback_draw_curveto(void *_context, double x1, double y1, double x2, double y2,
+                                  double x3, double y3) {
+	outline_builder_context *context = (outline_builder_context *)_context;
+	if (context->jContour) {
+		glyf_Contour *contour = &context->g->contours.items[context->jContour - 1];
+		{
+			glyf_Point z;
+			glyf_iPoint.init(&z);
+			z.onCurve = false;
+			iVQ.copyReplace(&z.x, iVQ.createStill(x1));
+			iVQ.copyReplace(&z.y, iVQ.createStill(y1));
+			glyf_iContour.push(contour, z);
+		}
+		{
+			glyf_Point z;
+			glyf_iPoint.init(&z);
+			z.onCurve = false;
+			iVQ.copyReplace(&z.x, iVQ.createStill(x2));
+			iVQ.copyReplace(&z.y, iVQ.createStill(y2));
+			glyf_iContour.push(contour, z);
+		}
+		{
+			glyf_Point z;
+			glyf_iPoint.init(&z);
+			z.onCurve = true;
+			iVQ.copyReplace(&z.x, iVQ.createStill(x3));
+			iVQ.copyReplace(&z.y, iVQ.createStill(y3));
+			glyf_iContour.push(contour, z);
+		}
+		context->jPoint += 3;
+	}
+}
+static void callback_draw_sethint(void *_context, bool isVertical, double position, double width) {
+	outline_builder_context *context = (outline_builder_context *)_context;
+	glyf_iStemDefList.push((isVertical ? &context->g->stemV : &context->g->stemH), //
+	                       ((glyf_PostscriptStemDef){
+	                           .position = position,
+	                           .width = width,
+	                       }));
+}
+static void callback_draw_setmask(void *_context, bool isContourMask, bool *maskArray) {
+	outline_builder_context *context = (outline_builder_context *)_context;
+	glyf_MaskList *maskList = isContourMask ? &context->g->contourMasks : &context->g->hintMasks;
+	glyf_PostscriptHintMask mask;
+
+	if (context->jContour) {
+		mask.contoursBefore = context->jContour - 1;
+	} else {
+		mask.contoursBefore = 0;
+	}
+	mask.pointsBefore = context->jPoint;
+
+	for (shapeid_t j = 0; j < 0x100; j++) {
+		mask.maskH[j] = j < context->g->stemH.length ? maskArray[j] : 0;
+		mask.maskV[j] = j < context->g->stemV.length ? maskArray[j + context->g->stemH.length] : 0;
+	}
+
+	FREE(maskArray);
+	if (maskList->length > 0 &&
+	    maskList->items[maskList->length - 1].contoursBefore == mask.contoursBefore &&
+	    maskList->items[maskList->length - 1].pointsBefore == mask.pointsBefore) {
+		// two masks are stacking together
+		// simply replace maskH and maskV
+		for (shapeid_t j = 0; j < 0x100; j++) {
+			maskList->items[maskList->length - 1].maskH[j] = mask.maskH[j];
+			maskList->items[maskList->length - 1].maskV[j] = mask.maskV[j];
+		}
+	} else {
+		glyf_iMaskList.push(maskList, mask);
+		if (isContourMask) {
+			context->definedContourMasks += 1;
+		} else {
+			context->definedHintMasks += 1;
+		}
+	}
+}
+
+static double callback_draw_getrand(void *_context) {
+	// xorshift64* PRNG to double53
+	outline_builder_context *context = (outline_builder_context *)_context;
+	uint64_t x = context->randx;
+	x ^= x >> 12;
+	x ^= x << 25;
+	x ^= x >> 27;
+	context->randx = x;
+	union {
+		uint64_t u;
+		double d;
+	} a;
+	a.u = x * UINT64_C(2685821657736338717);
+	a.u = (a.u >> 12) | UINT64_C(0x3FF0000000000000);
+	double q = (a.u & 2048) ? (1.0 - (2.2204460492503131E-16 / 2.0)) : 1.0;
+	return a.d - q;
+}
+
+static cff_IOutlineBuilder drawPass = {.setWidth = callback_draw_setwidth,
+                                       .newContour = callback_draw_next_contour,
+                                       .lineTo = callback_draw_lineto,
+                                       .curveTo = callback_draw_curveto,
+                                       .setHint = callback_draw_sethint,
+                                       .setMask = callback_draw_setmask,
+                                       .getrand = callback_draw_getrand};
+
+static void buildOutline(glyphid_t i, cff_extract_context *context, const otfcc_Options *options) {
+	cff_File *f = context->cffFile;
+	glyf_Glyph *g = otfcc_newGlyf_glyph();
+	context->glyphs->items[i] = g;
+	uint64_t seed = context->seed;
+
+	cff_Index localSubrs;
+	cff_iIndex.init(&localSubrs);
+
+	cff_Stack stack;
+	stack.max = 0x10000;
+	NEW(stack.stack, stack.max);
+	stack.index = 0;
+	stack.stem = 0;
+
+	outline_builder_context bc = {g, 0, 0, 0.0, 0.0, 0, 0, 0, 0, 0};
+
+	// Determine used FD index and subroutine list
+	uint8_t fd = 0;
+	if (f->fdselect.t != cff_FDSELECT_UNSPECED)
+		fd = cff_parseSubr(i, f->raw_data, f->font_dict, f->fdselect, &localSubrs);
+	else
+		fd = cff_parseSubr(i, f->raw_data, f->top_dict, f->fdselect, &localSubrs);
+
+	g->fdSelect = Handle.fromIndex(fd);
+
+	// Decide default and nominal width
+	if (context->meta->fdArray && fd < context->meta->fdArrayCount &&
+	    context->meta->fdArray[fd]->privateDict) {
+		bc.defaultWidthX = context->meta->fdArray[fd]->privateDict->defaultWidthX;
+		bc.nominalWidthX = context->meta->fdArray[fd]->privateDict->nominalWidthX;
+	} else if (context->meta->privateDict) {
+		bc.defaultWidthX = context->meta->privateDict->defaultWidthX;
+		bc.nominalWidthX = context->meta->privateDict->nominalWidthX;
+	}
+	iVQ.replace(&g->advanceWidth, iVQ.createStill(bc.defaultWidthX));
+
+	// Get charstring
+	uint8_t *charStringPtr = f->char_strings.data + f->char_strings.offset[i] - 1;
+	uint32_t charStringLength = f->char_strings.offset[i + 1] - f->char_strings.offset[i];
+
+	// Draw points
+	stack.index = 0;
+	stack.stem = 0;
+	bc.jContour = 0;
+	bc.jPoint = 0;
+	bc.randx = seed;
+
+	cff_parseOutline(charStringPtr, charStringLength, f->global_subr, localSubrs, &stack, &bc,
+	                 drawPass, options);
+
+	// Turn deltas into absolute coordinates
+	VQ cx = iVQ.neutral(), cy = iVQ.neutral();
+	for (shapeid_t j = 0; j < g->contours.length; j++) {
+		glyf_Contour *contour = &g->contours.items[j];
+		for (shapeid_t k = 0; k < contour->length; k++) {
+			glyf_Point *z = &contour->items[k];
+			iVQ.inplacePlus(&cx, z->x);
+			iVQ.inplacePlus(&cy, z->y);
+			iVQ.copyReplace(&z->x, cx);
+			iVQ.copyReplace(&z->y, cy);
+		}
+		if (!iVQ.compare(contour->items[0].x, contour->items[contour->length - 1].x) &&
+		    !iVQ.compare(contour->items[0].y, contour->items[contour->length - 1].y) &&
+		    (contour->items[0].onCurve && contour->items[contour->length - 1].onCurve)) {
+			// We found a duplicate knot at the beginning and end of a curve
+			// mainly due to curveto. We can remove that. This is unnecessary.
+			glyf_iContour.pop(contour);
+		}
+		glyf_iContour.shrinkToFit(contour);
+	}
+	glyf_iContourList.shrinkToFit(&g->contours);
+	iVQ.dispose(&cx), iVQ.dispose(&cy);
+
+	cff_iIndex.dispose(&localSubrs);
+	FREE(stack.stack);
+	context->seed = bc.randx;
+}
+
+static sds formCIDString(cffsid_t cid) {
+	return sdscatprintf(sdsnew("CID"), "%d", cid);
+}
+
+static void nameGlyphsAccordingToCFF(cff_extract_context *context) {
+	cff_File *cffFile = context->cffFile;
+	table_glyf *glyphs = context->glyphs;
+	cff_Charset *charset = &cffFile->charsets;
+	if (context->meta->isCID) {
+		switch (charset->t) {
+			case cff_CHARSET_FORMAT0: {
+				for (glyphid_t j = 0; j < charset->s; j++) {
+					cffsid_t sid = charset->f0.glyph[j];
+					sds glyphname = sdsget_cff_sid(sid, cffFile->string);
+					if (glyphname) {
+						glyphs->items[j + 1]->name = glyphname;
+						glyphs->items[j + 1]->cid = sid;
+					}
+				}
+				break;
+			}
+			case cff_CHARSET_FORMAT1: {
+				uint32_t glyphsNamedSofar = 1;
+				for (glyphid_t j = 0; j < charset->s; j++) {
+					cffsid_t first = charset->f1.range1[j].first;
+					for (glyphid_t k = 0; k <= charset->f1.range1[j].nleft; k++) {
+						cffsid_t sid = first + k;
+						sds glyphname = formCIDString(sid);
+						if (glyphsNamedSofar < glyphs->length && glyphname) {
+							glyphs->items[glyphsNamedSofar]->name = glyphname;
+							glyphs->items[glyphsNamedSofar]->cid = sid;
+						}
+						glyphsNamedSofar++;
+					}
+				}
+				break;
+			}
+			case cff_CHARSET_FORMAT2: {
+				uint32_t glyphsNamedSofar = 1;
+				for (glyphid_t j = 0; j < charset->s; j++) {
+					cffsid_t first = charset->f2.range2[j].first;
+					for (glyphid_t k = 0; k <= charset->f2.range2[j].nleft; k++) {
+						cffsid_t sid = first + k;
+						sds glyphname = formCIDString(sid);
+						if (glyphsNamedSofar < glyphs->length && glyphname) {
+							glyphs->items[glyphsNamedSofar]->name = glyphname;
+							glyphs->items[glyphsNamedSofar]->cid = sid;
+						}
+						glyphsNamedSofar++;
+					}
+				}
+				break;
+			}
+		}
+	} else {
+		switch (charset->t) {
+			case cff_CHARSET_FORMAT0: {
+				for (glyphid_t j = 0; j < charset->s; j++) {
+					cffsid_t sid = charset->f0.glyph[j];
+					sds glyphname = sdsget_cff_sid(sid, cffFile->string);
+					if (glyphname) { glyphs->items[j + 1]->name = glyphname; }
+				}
+				break;
+			}
+			case cff_CHARSET_FORMAT1: {
+				uint32_t glyphsNamedSofar = 1;
+				for (glyphid_t j = 0; j < charset->s; j++) {
+					glyphid_t first = charset->f1.range1[j].first;
+					for (glyphid_t k = 0; k <= charset->f1.range1[j].nleft; k++) {
+						cffsid_t sid = first + k;
+						sds glyphname = sdsget_cff_sid(sid, cffFile->string);
+						if (glyphsNamedSofar < glyphs->length && glyphname) {
+							glyphs->items[glyphsNamedSofar]->name = glyphname;
+						}
+						glyphsNamedSofar++;
+					}
+				}
+				break;
+			}
+			case cff_CHARSET_FORMAT2: {
+				uint32_t glyphsNamedSofar = 1;
+				for (glyphid_t j = 0; j < charset->s; j++) {
+					glyphid_t first = charset->f2.range2[j].first;
+					for (glyphid_t k = 0; k <= charset->f2.range2[j].nleft; k++) {
+						cffsid_t sid = first + k;
+						sds glyphname = sdsget_cff_sid(sid, cffFile->string);
+						if (glyphsNamedSofar < glyphs->length && glyphname) {
+							glyphs->items[glyphsNamedSofar]->name = glyphname;
+						}
+						glyphsNamedSofar++;
+					}
+				}
+				break;
+			}
+		}
+	}
+}
+
+static double qround(const double x) {
+	return otfcc_from_fixed(otfcc_to_fixed(x));
+}
+static void applyCffMatrix(table_CFF *CFF_, table_glyf *glyf, const table_head *head) {
+	for (glyphid_t jj = 0; jj < glyf->length; jj++) {
+		glyf_Glyph *g = glyf->items[jj];
+		table_CFF *fd = CFF_;
+		if (fd->fdArray && g->fdSelect.index < fd->fdArrayCount) {
+			fd = fd->fdArray[g->fdSelect.index];
+		}
+		if (fd->fontMatrix) {
+			scale_t a = qround(head->unitsPerEm * fd->fontMatrix->a);
+			scale_t b = qround(head->unitsPerEm * fd->fontMatrix->b);
+			scale_t c = qround(head->unitsPerEm * fd->fontMatrix->c);
+			scale_t d = qround(head->unitsPerEm * fd->fontMatrix->d);
+			VQ x = iVQ.scale(fd->fontMatrix->x, head->unitsPerEm);
+			x.kernel = qround(x.kernel);
+			VQ y = iVQ.scale(fd->fontMatrix->y, head->unitsPerEm);
+			y.kernel = qround(y.kernel);
+			for (shapeid_t j = 0; j < g->contours.length; j++) {
+				glyf_Contour *contour = &g->contours.items[j];
+				for (shapeid_t k = 0; k < contour->length; k++) {
+					VQ zx = iVQ.dup(contour->items[k].x);
+					VQ zy = iVQ.dup(contour->items[k].y);
+					iVQ.replace(&contour->items[k].x, iVQ.pointLinearTfm(x, a, zx, b, zy));
+					iVQ.replace(&contour->items[k].y, iVQ.pointLinearTfm(y, c, zx, d, zy));
+					iVQ.dispose(&zx), iVQ.dispose(&zy);
+				}
+			}
+			iVQ.dispose(&x), iVQ.dispose(&y);
+		}
+	}
+}
+
+table_CFFAndGlyf otfcc_readCFFAndGlyfTables(const otfcc_Packet packet, const otfcc_Options *options,
+                                            const table_head *head) {
+	table_CFFAndGlyf ret;
+	ret.meta = NULL;
+	ret.glyphs = NULL;
+
+	cff_extract_context context;
+	context.fdArrayIndex = -1;
+	context.meta = NULL;
+	context.glyphs = NULL;
+	context.cffFile = NULL;
+	FOR_TABLE(OTFCC_CHR('C','F','F',' '), table) {
+		font_file_pointer data = table.data;
+		uint32_t length = table.length;
+		cff_File *cffFile = cff_openStream(data, length, options);
+		context.cffFile = cffFile;
+		context.meta = table_iCFF.create();
+
+		// Extract data in TOP DICT
+		cff_iDict.parseToCallback(cffFile->top_dict.data,
+		                          cffFile->top_dict.offset[1] - cffFile->top_dict.offset[0],
+		                          &context, callback_extract_fd);
+
+		if (!context.meta->fontName) {
+			context.meta->fontName = sdsget_cff_sid(391, cffFile->name);
+		}
+
+		// We have FDArray
+		if (cffFile->font_dict.count) {
+			context.meta->fdArrayCount = cffFile->font_dict.count;
+			NEW(context.meta->fdArray, context.meta->fdArrayCount);
+			for (tableid_t j = 0; j < context.meta->fdArrayCount; j++) {
+				context.meta->fdArray[j] = table_iCFF.create();
+				context.fdArrayIndex = j;
+				cff_iDict.parseToCallback(
+				    cffFile->font_dict.data + cffFile->font_dict.offset[j] - 1,
+				    cffFile->font_dict.offset[j + 1] - cffFile->font_dict.offset[j], &context,
+				    callback_extract_fd);
+				if (!context.meta->fdArray[j]->fontName) {
+					context.meta->fdArray[j]->fontName = sdscatprintf(sdsempty(), "_Subfont%d", j);
+				}
+			}
+		}
+		ret.meta = context.meta;
+
+		// Extract data of outlines
+		context.seed = 0x1234567887654321;
+		if (context.meta->privateDict) {
+			context.seed =
+			    (uint64_t)context.meta->privateDict->initialRandomSeed ^ 0x1234567887654321;
+		}
+		table_glyf *glyphs = table_iGlyf.createN(cffFile->char_strings.count);
+		context.glyphs = glyphs;
+		for (glyphid_t j = 0; j < glyphs->length; j++) {
+			buildOutline(j, &context, options);
+		}
+
+		applyCffMatrix(context.meta, context.glyphs, head);
+
+		// Name glyphs according charset
+		nameGlyphsAccordingToCFF(&context);
+
+		ret.glyphs = context.glyphs;
+		cff_close(cffFile);
+	}
+	return ret;
+}
+
+static void pdDeltaToJson(json_value *target, const char *field, arity_t count, double *values) {
+	if (!count || !values) return;
+	json_value *a = json_array_new(count);
+	for (arity_t j = 0; j < count; j++) {
+		json_array_push(a, json_double_new(values[j]));
+	}
+	json_object_push(target, field, a);
+}
+
+static json_value *pdToJson(const cff_PrivateDict *pd) {
+	json_value *_pd = json_object_new(24);
+	pdDeltaToJson(_pd, "blueValues", pd->blueValuesCount, pd->blueValues);
+	pdDeltaToJson(_pd, "otherBlues", pd->otherBluesCount, pd->otherBlues);
+	pdDeltaToJson(_pd, "familyBlues", pd->familyBluesCount, pd->familyBlues);
+	pdDeltaToJson(_pd, "familyOtherBlues", pd->familyOtherBluesCount, pd->familyOtherBlues);
+	pdDeltaToJson(_pd, "stemSnapH", pd->stemSnapHCount, pd->stemSnapH);
+	pdDeltaToJson(_pd, "stemSnapV", pd->stemSnapVCount, pd->stemSnapV);
+	if (pd->blueScale != DEFAULT_BLUE_SCALE)
+		json_object_push(_pd, "blueScale", json_double_new(pd->blueScale));
+	if (pd->blueShift != DEFAULT_BLUE_SHIFT)
+		json_object_push(_pd, "blueShift", json_double_new(pd->blueShift));
+	if (pd->blueFuzz != DEFAULT_BLUE_FUZZ)
+		json_object_push(_pd, "blueFuzz", json_double_new(pd->blueFuzz));
+	if (pd->stdHW) json_object_push(_pd, "stdHW", json_double_new(pd->stdHW));
+	if (pd->stdVW) json_object_push(_pd, "stdVW", json_double_new(pd->stdVW));
+	if (pd->forceBold) json_object_push(_pd, "forceBold", json_boolean_new(pd->forceBold));
+	if (pd->languageGroup)
+		json_object_push(_pd, "languageGroup", json_double_new(pd->languageGroup));
+	if (pd->expansionFactor != DEFAULT_EXPANSION_FACTOR)
+		json_object_push(_pd, "expansionFactor", json_double_new(pd->expansionFactor));
+	if (pd->initialRandomSeed)
+		json_object_push(_pd, "initialRandomSeed", json_double_new(pd->initialRandomSeed));
+	if (pd->defaultWidthX)
+		json_object_push(_pd, "defaultWidthX", json_double_new(pd->defaultWidthX));
+	if (pd->nominalWidthX)
+		json_object_push(_pd, "nominalWidthX", json_double_new(pd->nominalWidthX));
+	return _pd;
+}
+static json_value *fdToJson(const table_CFF *table) {
+	json_value *_CFF_ = json_object_new(24);
+
+	if (table->isCID) json_object_push(_CFF_, "isCID", json_boolean_new(table->isCID));
+
+	if (table->version) json_object_push(_CFF_, "version", json_from_sds(table->version));
+	if (table->notice) json_object_push(_CFF_, "notice", json_from_sds(table->notice));
+	if (table->copyright) json_object_push(_CFF_, "copyright", json_from_sds(table->copyright));
+	if (table->fontName) json_object_push(_CFF_, "fontName", json_from_sds(table->fontName));
+	if (table->fullName) json_object_push(_CFF_, "fullName", json_from_sds(table->fullName));
+	if (table->familyName) json_object_push(_CFF_, "familyName", json_from_sds(table->familyName));
+	if (table->weight) json_object_push(_CFF_, "weight", json_from_sds(table->weight));
+
+	if (table->isFixedPitch)
+		json_object_push(_CFF_, "isFixedPitch", json_boolean_new(table->isFixedPitch));
+	if (table->italicAngle)
+		json_object_push(_CFF_, "italicAngle", json_double_new(table->italicAngle));
+	if (table->underlinePosition != -100)
+		json_object_push(_CFF_, "underlinePosition", json_double_new(table->underlinePosition));
+	if (table->underlineThickness != 50)
+		json_object_push(_CFF_, "underlineThickness", json_double_new(table->underlineThickness));
+	if (table->strokeWidth)
+		json_object_push(_CFF_, "strokeWidth", json_double_new(table->strokeWidth));
+	if (table->fontBBoxLeft)
+		json_object_push(_CFF_, "fontBBoxLeft", json_double_new(table->fontBBoxLeft));
+	if (table->fontBBoxBottom)
+		json_object_push(_CFF_, "fontBBoxBottom", json_double_new(table->fontBBoxBottom));
+	if (table->fontBBoxRight)
+		json_object_push(_CFF_, "fontBBoxRight", json_double_new(table->fontBBoxRight));
+	if (table->fontBBoxTop)
+		json_object_push(_CFF_, "fontBBoxTop", json_double_new(table->fontBBoxTop));
+
+	if (table->fontMatrix) {
+		json_value *_fontMatrix = json_object_new(6);
+		json_object_push(_fontMatrix, "a", json_double_new(table->fontMatrix->a));
+		json_object_push(_fontMatrix, "b", json_double_new(table->fontMatrix->b));
+		json_object_push(_fontMatrix, "c", json_double_new(table->fontMatrix->c));
+		json_object_push(_fontMatrix, "d", json_double_new(table->fontMatrix->d));
+		json_object_push(_fontMatrix, "x", json_new_VQ(table->fontMatrix->x, NULL));
+		json_object_push(_fontMatrix, "y", json_new_VQ(table->fontMatrix->y, NULL));
+		json_object_push(_CFF_, "fontMatrix", _fontMatrix);
+	}
+	if (table->privateDict) { json_object_push(_CFF_, "privates", pdToJson(table->privateDict)); }
+
+	if (table->cidRegistry && table->cidOrdering) {
+		json_object_push(_CFF_, "cidRegistry", json_from_sds(table->cidRegistry));
+		json_object_push(_CFF_, "cidOrdering", json_from_sds(table->cidOrdering));
+		json_object_push(_CFF_, "cidSupplement", json_integer_new(table->cidSupplement));
+	}
+	if (table->fdArray) {
+		json_value *_fdArray = json_object_new(table->fdArrayCount);
+		for (tableid_t j = 0; j < table->fdArrayCount; j++) {
+			sds name = table->fdArray[j]->fontName;
+			table->fdArray[j]->fontName = NULL;
+			json_object_push(_fdArray, name, fdToJson(table->fdArray[j]));
+			table->fdArray[j]->fontName = name;
+		}
+		json_object_push(_CFF_, "fdArray", _fdArray);
+	}
+	return _CFF_;
+}
+
+void otfcc_dumpCFF(const table_CFF *table, json_value *root, const otfcc_Options *options) {
+	if (!table) return;
+	loggedStep("CFF") {
+		json_object_push(root, "CFF_", fdToJson(table));
+	}
+}
+
+static void pdDeltaFromJson(json_value *dump, arity_t *count, double **array) {
+	if (!dump || dump->type != json_array) return;
+	*count = dump->u.array.length;
+	NEW(*array, *count);
+	for (arity_t j = 0; j < *count; j++) {
+		(*array)[j] = json_numof(dump->u.array.values[j]);
+	}
+}
+static cff_PrivateDict *pdFromJson(json_value *dump) {
+	if (!dump || dump->type != json_object) return NULL;
+	cff_PrivateDict *pd = otfcc_newCff_private();
+	pdDeltaFromJson(json_obj_get(dump, "blueValues"), &(pd->blueValuesCount), &(pd->blueValues));
+	pdDeltaFromJson(json_obj_get(dump, "otherBlues"), &(pd->otherBluesCount), &(pd->otherBlues));
+	pdDeltaFromJson(json_obj_get(dump, "familyBlues"), &(pd->familyBluesCount), &(pd->familyBlues));

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.