+
    K<i/                   N&   ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHtHt ^ RI5 ^ RI5 ^ RIHtHt ^ RIHtHt ^ RIHt ^ RI t ^ RI!t!^ RI"t"^ RI#t#^ RI$H%t%H&t& ^ RI'H(t( ^ RI)H*t* Rt+R]+,           R,           t,]#PZ                  ! R4      t.RR lt/]*! ]/].4      ].n0        ]! ]#PZ                  ! R4      R7      t1R t2R t3]! ]Ph                  4      R 4       t5]! ]Ph                  4      R 4       t6]! ]Ph                  4      R 4       t7]! ]Ph                  4      R  4       t8]! ]Pr                  4      R! 4       t5]! ]Pr                  4      R" 4       t:]! ]Pr                  4      RR# l4       t7]! ]Pr                  4      R$ 4       t8]! ]Pv                  4      R% 4       t<]! ]Pv                  4      R& 4       t=]! ]P|                  4      R' 4       t<]! ]P|                  4      R( 4       t=]! ]P~                  4      R) 4       t<]! ]P~                  4      R* 4       t=]! ]P                  4      R+ 4       t<]! ]P                  4      R, 4       t=]! ]P                  4      R- 4       t<]! ]P                  4      R. 4       t=]! ]P                  4      R/ 4       tC]! ]P                  4      R0 4       tE]! ]P                  4      R1 4       t=]! ]P                  4      R2 4       tG]! ]P                  4      R3 4       t=]! ]P                  4      R4 4       tG]! ]P                  4      R5 4       t=]! ]P                  4      R6 4       tE]! ]P                  4      R7 4       tG]! ]P                  4      R8 4       t=]! ]P                  4      R9 4       tG]! ]P                  4      R: 4       t=]! ]P                  4      R; 4       tG]! ]P                  4      R< 4       t=]! ]P                  4      R= 4       tG]! ]Pv                  ]P|                  ]P~                  ]P                  ]P                  ]P                  ]P                  ]P                  ]P                  ]P                  ]P                  4      R> 4       tN]! ]Pv                  ]P|                  ]P~                  ]P                  ]P                  ]P                  ]P                  ]P                  ]P                  ]P                  ]P                  4      R? 4       tO]! ]Pv                  ]P|                  ]P~                  ]P                  ]P                  ]P                  ]P                  ]P                  ]P                  4	      R@ 4       tG]! ]Pv                  ]P~                  ]P                  4      RA 4       tT]! ]P|                  ]P                  ]P                  ]P                  4      RB 4       tT]! ]P                  ]P                  ]P                  ]P                  4      RC 4       tU]! ]P                  ]P                  4      RD 4       t<]! ]P                  ]P                  ]P                  ]P                  4      RE 4       t=]! ]P                  ]P                  ]P                  ]P                  4      RF 4       tN]! ]P                  ]P                  ]P                  ]P                  4      RG 4       tO]! ]P                  4      RH 4       t<]! ]P                  4      RI 4       tT]! ]P                  ]P                  4      RJ 4       t=]! ]P                  ]P                  4      RK 4       tG]! ]P                  ]P                  4      RL 4       tN]! ]P                  ]P                  4      RM 4       tO]! ]P                  4      RRN l4       t<]! ]P                  4      RO 4       t=]! ]P                  4      RP 4       tG]! ]P                  4      RQ 4       tN]! ]P                  4      RR 4       tO]! ]P                  4      RS 4       tT]! ]P                  4      RT 4       t=]! ]P                  4      RU 4       tG]! ]P                  4      RV 4       tN]! ]P                  4      RW 4       tZ]! ]P                  4      RX 4       t[]! ]P                  4      RY 4       tN]! ]P                  4      RZ 4       tN]! ]P                  4      R[ 4       tO]! ]P                  4      R\ 4       t^]! ]P                  4      R] 4       tN]! ]P                  4      R^ 4       tN]! ]P                  4      R_ 4       tO]! ]P                  4      R` 4       t^]! ]P                  4      Ra 4       ta]! ]P                  4      Rb 4       t^]! ]P                  4      Rc 4       ta]! ]P                  ]P                  4      Rd 4       t^]! ]P                  ]P                  4      Re 4       ta]! ]P                  ]P                  4      Rf 4       td]! ]P                  4      RRg l4       t^]! ]P                  4      RRh l4       ta]! ]P                  4      Ri 4       td]! ]P                  4      Rj 4       t^]! ]P                  4      Rk 4       ta]! ]P                  4      Rl 4       td]! ]P                  ! Rm4      4      Rn 4       t=]! ]P                  ! Ro4      4      Rp 4       t=]! ]P                  ! Rq4      4      Rr 4       t=]! ]P                  ! Rs4      4      Rt 4       t<]! ]P                  ! Rs4      ]P                  ! Ru4      4      Rv 4       t=]! ]P                  ! Rs4      ]P                  ! Ru4      4      Rw 4       th]! ]P                  ! Rs4      ]P                  ! Ru4      4      Rx 4       tN]! ]P                  ! Rs4      ]P                  ! Ru4      4      Ry 4       tZ]! ]P                  ! Rs4      ]P                  ! Ru4      4      RRz l4       ti]! ]P                  ! Rs4      ]P                  ! Ru4      4      R{ 4       tj]! ]P                  ! Rs4      ]P                  ! Ru4      4      R| 4       tk]! ]P                  ! Rs4      ]P                  ! Ru4      4      R} 4       ta]! ]P                  ! Rs4      ]P                  ! Ru4      4      R~ 4       tl]! ]P                  ! Rs4      ]P                  ! Ru4      4      R 4       tm]! ]P                  ! Rs4      ]P                  ! Ru4      4      R 4       tn]! ]P                  ! Rs4      ]P                  ! Ru4      4      R 4       tG]! ]P                  ! R4      4      R 4       t=R to]! ]P                  ! R4      4      R 4       tG]! ]P                  ! R4      4      R 4       tm]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t<]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       tm]! ]P                  ! R4      4      R 4       t=R tp]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       tm]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t=R tq]! ]P                  ! R4      4      R 4       t<]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       tG]! ]P                  4      R 4       t<]! ]P                  4      R 4       t<]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       t<]! ]P                  ! R4      4      R 4       tG]! ]P                  ! R4      4      R 4       t<]! ]P                  4      R 4       t=]! ]P                  4      R 4       t=]! ]P                  4      R 4       t=]! ]P                  4      R 4       t=]! ]P                  4      R 4       t=]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      P                  4      R 4       tz]! ]P                  ! R4      4      R 4       t<]! ]P                  ! R4      4      R 4       tm]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       tG]! ]P                  ! R4      4      R 4       t<]! ]P                  ! R4      4      R 4       tm]! ]P                  ! R4      4      R 4       t=]! ]P                  ! R4      4      R 4       tm]! ]P                  ! R4      4      R 4       tm0 Rmt{]! ]P                  ! R4      4      R 4       tGR R lt|]! ]P                  ! R4      4      R 4       tG ! R R]}4      t~ ! R R]}4      t]1! R4      RR l4       t]1! R4      R 4       tR tR tR tR t]1! R4      RR l4       t. ROtR# )    )annotations)config)otRound)ttLib)otTables)USE_HARFBUZZ_REPACKER)
maxCtxFont)NullPen)Timer)makeOutputFileName)_add_method
_uniq_sort)*)varStoremultiVarStore)NameRecordVisitormakeName)mirroredN)Counterdefaultdict)reduce)
MethodTypez9fonttools subset font-file [glyph...] [--option=value]...a$  fonttools subset -- OpenType font subsetter and optimizer

fonttools subset is an OpenType font subsetter and optimizer, based on
fontTools. It accepts any TT- or CFF-flavored OpenType (.otf or .ttf)
or WOFF (.woff) font file. The subsetted glyph set is based on the
specified glyphs or characters, and specified OpenType layout features.

The tool also performs some size-reducing optimizations, aimed for using
subset fonts as webfonts.  Individual optimizations can be enabled or
disabled, and are enabled by default when they are safe.

Usage: a9  

At least one glyph or one of --gids, --gids-file, --glyphs, --glyphs-file,
--text, --text-file, --unicodes, or --unicodes-file, must be specified.

Args:

font-file
  The input font file.
glyph
  Specify one or more glyph identifiers to include in the subset. Must be
  PS glyph names, or the special string '*' to keep the entire glyph set.

Initial glyph set specification
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

These options populate the initial glyph set. Same option can appear
multiple times, and the results are accummulated.

--gids=<NNN>[,<NNN>...]
  Specify comma/whitespace-separated list of glyph IDs or ranges as decimal
  numbers.  For example, --gids=10-12,14 adds glyphs with numbers 10, 11,
  12, and 14.

--gids-file=<path>
  Like --gids but reads from a file. Anything after a '#' on any line is
  ignored as comments.

--glyphs=<glyphname>[,<glyphname>...]
  Specify comma/whitespace-separated PS glyph names to add to the subset.
  Note that only PS glyph names are accepted, not gidNNN, U+XXXX, etc
  that are accepted on the command line.  The special string '*' will keep
  the entire glyph set.

--glyphs-file=<path>
  Like --glyphs but reads from a file. Anything after a '#' on any line
  is ignored as comments.

--text=<text>
  Specify characters to include in the subset, as UTF-8 string.

--text-file=<path>
  Like --text but reads from a file. Newline character are not added to
  the subset.

--unicodes=<XXXX>[,<XXXX>...]
  Specify comma/whitespace-separated list of Unicode codepoints or
  ranges as hex numbers, optionally prefixed with 'U+', 'u', etc.
  For example, --unicodes=41-5a,61-7a adds ASCII letters, so does
  the more verbose --unicodes=U+0041-005A,U+0061-007A.
  The special strings '*' will choose all Unicode characters mapped
  by the font.

--unicodes-file=<path>
  Like --unicodes, but reads from a file. Anything after a '#' on any
  line in the file is ignored as comments.

--ignore-missing-glyphs
  Do not fail if some requested glyphs or gids are not available in
  the font.

--no-ignore-missing-glyphs
  Stop and fail if some requested glyphs or gids are not available
  in the font. [default]

--ignore-missing-unicodes [default]
  Do not fail if some requested Unicode characters (including those
  indirectly specified using --text or --text-file) are not available
  in the font.

--no-ignore-missing-unicodes
  Stop and fail if some requested Unicode characters are not available
  in the font.
  Note the default discrepancy between ignoring missing glyphs versus
  unicodes.  This is for historical reasons and in the future
  --no-ignore-missing-unicodes might become default.

Other options
^^^^^^^^^^^^^

For the other options listed below, to see the current value of the option,
pass a value of '?' to it, with or without a '='. In some environments,
you might need to escape the question mark, like this: '--glyph-names\?'.

Examples::

    $ fonttools subset --glyph-names?
    Current setting for 'glyph-names' is: False
    $ fonttools subset --name-IDs=?
    Current setting for 'name-IDs' is: [0, 1, 2, 3, 4, 5, 6]
    $ fonttools subset --hinting? --no-hinting --hinting?
    Current setting for 'hinting' is: True
    Current setting for 'hinting' is: False

Output options
^^^^^^^^^^^^^^

--output-file=<path>
  The output font file. If not specified, the subsetted font
  will be saved in as font-file.subset.

--flavor=<type>
  Specify flavor of output font file. May be 'woff' or 'woff2'.
  Note that WOFF2 requires the Brotli Python extension, available
  at https://github.com/google/brotli

--with-zopfli
  Use the Google Zopfli algorithm to compress WOFF. The output is 3-8 %
  smaller than pure zlib, but the compression speed is much slower.
  The Zopfli Python bindings are available at:
  https://pypi.python.org/pypi/zopfli

--harfbuzz-repacker
  By default, we serialize GPOS/GSUB using the HarfBuzz Repacker when
  uharfbuzz can be imported and is successful, otherwise fall back to
  the pure-python serializer. Set the option to force using the HarfBuzz
  Repacker (raises an error if uharfbuzz can't be found or fails).

--no-harfbuzz-repacker
  Always use the pure-python serializer even if uharfbuzz is available.

Glyph set expansion
^^^^^^^^^^^^^^^^^^^

These options control how additional glyphs are added to the subset.

--retain-gids
  Retain glyph indices; just empty glyphs not needed in-place.

--notdef-glyph
  Add the '.notdef' glyph to the subset (ie, keep it). [default]

--no-notdef-glyph
  Drop the '.notdef' glyph unless specified in the glyph set. This
  saves a few bytes, but is not possible for Postscript-flavored
  fonts, as those require '.notdef'. For TrueType-flavored fonts,
  this works fine as long as no unsupported glyphs are requested
  from the font.

--notdef-outline
  Keep the outline of '.notdef' glyph. The '.notdef' glyph outline is
  used when glyphs not supported by the font are to be shown. It is not
  needed otherwise.

--no-notdef-outline
  When including a '.notdef' glyph, remove its outline. This saves
  a few bytes. [default]

--recommended-glyphs
  Add glyphs 0, 1, 2, and 3 to the subset, as recommended for
  TrueType-flavored fonts: '.notdef', 'NULL' or '.null', 'CR', 'space'.
  Some legacy software might require this, but no modern system does.

--no-recommended-glyphs
  Do not add glyphs 0, 1, 2, and 3 to the subset, unless specified in
  glyph set. [default]

--no-layout-closure
  Do not expand glyph set to add glyphs produced by OpenType layout
  features.  Instead, OpenType layout features will be subset to only
  rules that are relevant to the otherwise-specified glyph set.

--layout-features[+|-]=<feature>[,<feature>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of OpenType layout feature tags that will be preserved.
  Glyph variants used by the preserved features are added to the
  specified subset glyph set. By default, 'calt', 'ccmp', 'clig', 'curs',
  'dnom', 'frac', 'kern', 'liga', 'locl', 'mark', 'mkmk', 'numr', 'rclt',
  'rlig', 'rvrn', and all features required for script shaping are
  preserved. To see the full list, try '--layout-features=?'.
  Use '*' to keep all features.
  Multiple --layout-features options can be provided if necessary.
  Examples:

    --layout-features+=onum,pnum,ss01
        * Keep the default set of features and 'onum', 'pnum', 'ss01'.
    --layout-features-='mark','mkmk'
        * Keep the default set of features but drop 'mark' and 'mkmk'.
    --layout-features='kern'
        * Only keep the 'kern' feature, drop all others.
    --layout-features=''
        * Drop all features.
    --layout-features='*'
        * Keep all features.
    --layout-features+=aalt --layout-features-=vrt2
        * Keep default set of features plus 'aalt', but drop 'vrt2'.

--layout-scripts[+|-]=<script>[,<script>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of OpenType layout script tags that will be preserved. LangSys tags
  can be appended to script tag, separated by '.', for example:
  'arab.dflt,arab.URD,latn.TRK'. By default all scripts are retained ('*').

Hinting options
^^^^^^^^^^^^^^^

--hinting
  Keep hinting [default]

--no-hinting
  Drop glyph-specific hinting and font-wide hinting tables, as well
  as remove hinting-related bits and pieces from other tables (eg. GPOS).
  See --hinting-tables for list of tables that are dropped by default.
  Instructions and hints are stripped from 'glyf' and 'CFF ' tables
  respectively. This produces (sometimes up to 30%) smaller fonts that
  are suitable for extremely high-resolution systems, like high-end
  mobile devices and retina displays.

Optimization options
^^^^^^^^^^^^^^^^^^^^

--desubroutinize
  Remove CFF use of subroutinizes.  Subroutinization is a way to make CFF
  fonts smaller.  For small subsets however, desubroutinizing might make
  the font smaller.  It has even been reported that desubroutinized CFF
  fonts compress better (produce smaller output) WOFF and WOFF2 fonts.
  Also see note under --no-hinting.

--no-desubroutinize [default]
  Leave CFF subroutinizes as is, only throw away unused subroutinizes.

Font table options
^^^^^^^^^^^^^^^^^^

--drop-tables[+|-]=<table>[,<table>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of tables that will be be dropped.
  By default, the following tables are dropped:
  'JSTF', 'DSIG', 'EBDT', 'EBLC', 'EBSC', 'PCLT', 'LTSH'
  and Graphite tables: 'Feat', 'Glat', 'Gloc', 'Silf', 'Sill'.
  The tool will attempt to subset the remaining tables.

  Examples:

  --drop-tables-=BASE
      * Drop the default set of tables but keep 'BASE'.

  --drop-tables+=GSUB
      * Drop the default set of tables and 'GSUB'.

  --drop-tables=DSIG
      * Only drop the 'DSIG' table, keep all others.

  --drop-tables=
      * Keep all tables.

--no-subset-tables+=<table>[,<table>...]
  Add to the set of tables that will not be subsetted.
  By default, the following tables are included in this list, as
  they do not need subsetting (ignore the fact that 'loca' is listed
  here): 'gasp', 'head', 'hhea', 'maxp', 'vhea', 'OS/2', 'loca', 'name',
  'cvt ', 'fpgm', 'prep', 'VMDX', 'DSIG', 'CPAL', 'MVAR', 'cvar', 'STAT'.
  By default, tables that the tool does not know how to subset and are not
  specified here will be dropped from the font, unless --passthrough-tables
  option is passed.

  Example:

   --no-subset-tables+=FFTM
      * Keep 'FFTM' table in the font by preventing subsetting.

--passthrough-tables
  Do not drop tables that the tool does not know how to subset.

--no-passthrough-tables
  Tables that the tool does not know how to subset and are not specified
  in --no-subset-tables will be dropped from the font. [default]

--hinting-tables[-]=<table>[,<table>...]
  Specify (=), add to (+=) or exclude from (-=) the list of font-wide
  hinting tables that will be dropped if --no-hinting is specified.

  Examples:

  --hinting-tables-=VDMX
      * Drop font-wide hinting tables except 'VDMX'.
  --hinting-tables=
      * Keep all font-wide hinting tables (but strip hints from glyphs).

--legacy-kern
  Keep TrueType 'kern' table even when OpenType 'GPOS' is available.

--no-legacy-kern
  Drop TrueType 'kern' table if OpenType 'GPOS' is available. [default]

Font naming options
^^^^^^^^^^^^^^^^^^^

These options control what is retained in the 'name' table. For numerical
codes, see: http://www.microsoft.com/typography/otspec/name.htm

--name-IDs[+|-]=<nameID>[,<nameID>...]
  Specify (=), add to (+=) or exclude from (-=) the set of 'name' table
  entry nameIDs that will be preserved. By default, only nameIDs between 0
  and 6 are preserved, the rest are dropped. Use '*' to keep all entries.

  Examples:

  --name-IDs+=7,8,9
      * Also keep Trademark, Manufacturer and Designer name entries.
  --name-IDs=
      * Drop all 'name' table entries.
  --name-IDs=*
      * keep all 'name' table entries

--name-legacy
  Keep legacy (non-Unicode) 'name' table entries (0.x, 1.x etc.).
  XXX Note: This might be needed for some fonts that have no Unicode name
  entires for English. See: https://github.com/fonttools/fonttools/issues/146

--no-name-legacy
  Drop legacy (non-Unicode) 'name' table entries [default]

--name-languages[+|-]=<langID>[,<langID>]
  Specify (=), add to (+=) or exclude from (-=) the set of 'name' table
  langIDs that will be preserved. By default only records with langID
  0x0409 (English) are preserved. Use '*' to keep all langIDs.

--obfuscate-names
  Make the font unusable as a system font by replacing name IDs 1, 2, 3, 4,
  and 6 with dummy strings (it is still fully functional as webfont).

Glyph naming and encoding options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

--glyph-names
  Keep PS glyph names in TT-flavored fonts. In general glyph names are
  not needed for correct use of the font. However, some PDF generators
  and PDF viewers might rely on glyph names to extract Unicode text
  from PDF documents.
--no-glyph-names
  Drop PS glyph names in TT-flavored fonts, by using 'post' table
  version 3.0. [default]
--legacy-cmap
  Keep the legacy 'cmap' subtables (0.x, 1.x, 4.x etc.).
--no-legacy-cmap
  Drop the legacy 'cmap' subtables. [default]
--symbol-cmap
  Keep the 3.0 symbol 'cmap'.
--no-symbol-cmap
  Drop the 3.0 symbol 'cmap'. [default]

Other font-specific options
^^^^^^^^^^^^^^^^^^^^^^^^^^^

--recalc-bounds
    Recalculate font bounding boxes.
--no-recalc-bounds
    Keep original font bounding boxes. This is faster and still safe
    for all practical purposes. [default]
--recalc-timestamp
    Set font 'modified' timestamp to current time.
--no-recalc-timestamp
    Do not modify font 'modified' timestamp. [default]
--canonical-order
    Order tables as recommended in the OpenType standard. This is not
    required by the standard, nor by any known implementation.
--no-canonical-order
    Keep original order of font tables. This is faster. [default]
--prune-unicode-ranges
    Update the 'OS/2 ulUnicodeRange*' bits after subsetting. The Unicode
    ranges defined in the OpenType specification v1.7 are intersected with
    the Unicode codepoints specified in the font's Unicode 'cmap' subtables:
    when no overlap is found, the bit will be switched off. However, it will
    *not* be switched on if an intersection is found.  [default]
--no-prune-unicode-ranges
    Don't change the 'OS/2 ulUnicodeRange*' bits.
--prune-codepage-ranges
    Update the 'OS/2 ulCodePageRange*' bits after subsetting.  [default]
--no-prune-codepage-ranges
    Don't change the 'OS/2 ulCodePageRange*' bits.
--recalc-average-width
    Update the 'OS/2 xAvgCharWidth' field after subsetting.
--no-recalc-average-width
    Don't change the 'OS/2 xAvgCharWidth' field. [default]
--recalc-max-context
    Update the 'OS/2 usMaxContext' field after subsetting.
--no-recalc-max-context
    Don't change the 'OS/2 usMaxContext' field. [default]
--font-number=<number>
    Select font number for TrueType Collection (.ttc/.otc), starting from 0.
--pretty-svg
    When subsetting SVG table, use lxml pretty_print=True option to indent
    the XML output (only recommended for debugging purposes).

Application options
^^^^^^^^^^^^^^^^^^^

--verbose
    Display verbose information of the subsetting process.
--timing
    Display detailed timing information of the subsetting process.
--xml
    Display the TTX XML representation of subsetted font.

Example
^^^^^^^

Produce a subset containing the characters ' !"#$%' without performing
size-reducing optimizations::

  $ fonttools subset font.ttf --unicodes="U+0020-0025" \
    --layout-features=* --glyph-names --symbol-cmap --legacy-cmap \
    --notdef-glyph --notdef-outline --recommended-glyphs \
    --name-IDs=* --name-legacy --name-languages=*
zfontTools.subsetc                   a V P                  R \        V4      4       V'       d8   VP                  4       oV P                  R\        V3R lV 4       4      4       R# R# )zGlyph names: %szGlyph IDs:   %sc              3  6   <"   T F  pSV,          x  K  	  R # 5iN ).0greverseGlyphMaps   & ;/usr/lib/python3/dist-packages/fontTools/subset/__init__.py	<genexpr>_log_glyphs.<locals>.<genexpr>  s     +O1OA,>,>   N)infosortedgetReverseGlyphMap)selfglyphsfontr   s   &&&@r    _log_glyphsr*     sF    II0113		#V+O+O%OP     zfontTools.subset.timer)loggerc                <    V Uu/ uF  q"W,          bK  	  up# u upi r   r   )dr(   r   s   && r    _dict_subsetr/     s    #$VqtGV$$$s   c                b    \        V 4      pV Uu. uF  q3V8  g   K  W,          NK  	  up# u upi r   len)lindicescountis   &&  r    _list_subsetr7     s-    FE!/'QYDADD'///s   ,,c                p    \        V P                  4       UUu. uF  w  r#W19   g   K  VNK  	  upp# u uppi )z3Returns ascending list of matching coverage values.)	enumerater(   )r'   r(   r6   r   s   &&  r    	intersectr:     s/     $DKK0@0$!AKAA0@@@s   
22c                B   a \        V3R lV P                   4       4      # )z#Returns set of intersecting glyphs.c              3  8   <"   T F  qS9   g   K  Vx  K  	  R # 5ir   r   )r   r   r(   s   & r    r!   #intersect_glyphs.<locals>.<genexpr>  s     5+Qfqq+s   
)setr(   )r'   r(   s   &fr    intersect_glyphsr?     s     5$++555r+   c                    V P                  V4      pV P                   Uu. uF  q3V9   g   K  VNK  	  upV n        V# u upi )z4Returns ascending list of remaining coverage values.r:   r(   )r'   r(   r4   r   s   &&  r    subsetrB     s<     nnV$G"kk9k&[11k9DKN :s   ==c                ^    V Uu. uF  q P                   V,          NK  	  upV n         R# u upi )zRemaps coverage.Nr(   )r'   coverage_mapr6   s   && r    remaprF     s%     ,88<a;;q>><8DK8s   *c           	     "  a  \        \        ;QJ d    V 3R lV 4       F  '       g   K   RM	  RM! V 3R lV 4       4      '       d   ^ .M. S P                  P                  4        UUu. uF  w  r#W!9   g   K  VNK  	  upp,           4      # u uppi )z0Returns ascending list of matching class values.c              3  @   <"   T F  qSP                   9  x  K  	  R # 5ir   	classDefsr   r   r'   s   & r    r!   intersect.<locals>.<genexpr>  s     <VT^^+V   TF)r   anyrJ   items)r'   r(   r   vs   f&  r    r:   r:     sk     <V<<V<<<!"--/
?/1;11/
?	@ 
?s   (
B7Bc                   a aa S^ 8X  d   \        V 3R lS 4       4      # \        VV3R lS P                  P                  4        4       4      # )z%Returns set of glyphs matching class.c              3  L   <"   T F  qSP                   9  g   K  Vx  K  	  R # 5ir   rI   rK   s   & r    r!   "intersect_class.<locals>.<genexpr>
  s     @f(?11fs   $
$c              3  P   <"   T F  w  rVS8X  g   K  VS9   g   K  Vx  K  	  R # 5ir   r   )r   r   rP   r(   klasss   &  r    r!   rS     s%     R3TQqEzqa6kqq3s   &&
&)r>   rJ   rO   )r'   r(   rU   s   fffr    intersect_classrV     s;     z@f@@@RT^^113RRRr+   c                  a  S P                   P                  4        UUu/ uF  w  rEWA9   g   K  WEbK  	  uppS n         \        V'       dA   \        ;QJ d    V 3R lV 4       F  '       g   K   RM	  RM! V 3R lV 4       4      '       d   ^ .M. \	        S P                   P                  4       4      ,           4      pV'       d   S P                  V4       V# u uppi )z,Returns ascending list of remaining classes.c              3  @   <"   T F  qSP                   9  x  K  	  R # 5ir   rI   rK   s   & r    r!   subset.<locals>.<genexpr>  s     &O1'>rM   TF)rJ   rO   r   rN   listvaluesrF   )r'   r(   rF   	useClass0r   rP   r4   s   f&&&   r    rB   rB     s     (,~~';';'=M'=tqdad'=MDN  33&O&O333&O&O#O#O C
t~~$$&
'	(G 

7N Ns
   
CCc                    V P                   P                  4        UUu/ uF  w  r#W!P                  V4      bK  	  uppV n         R# u uppi )zRemaps classes.N)rJ   rO   index)r'   	class_mapr   rP   s   &&  r    rF   rF   "  s:     9=8L8L8NO8Na++8NODNOs   Ac                   a VP                   P                  V3R  lV P                  P                  4        4       4       R# )c              3  >   <"   T F  w  rVS9   g   K  Vx  K  	  R # 5ir   r   )r   r   rP   
cur_glyphss   &  r    r!   !closure_glyphs.<locals>.<genexpr>*  s     J"6$!!z/AA"6   
N)r(   updatemappingrO   r'   srb   s   &&fr    closure_glyphsri   (  s&    HHOOJ$,,"4"4"6JJr+   c                    V P                   P                  4        UUu/ uF+  w  r#W!P                  9   g   K  W1P                  9   g   K)  W#bK-  	  uppV n         \        V P                   4      # u uppi r   )rf   rO   r(   boolr'   rh   r   rP   s   &&  r    subset_glyphsrm   -  s[     ++--hh1=-DL s   A-A-	A-c                    V P                   P                  4        F(  w  r4W29   g   K  VP                  P                  V4       K*  	  R # r   )rf   rO   r(   re   )r'   rh   rb   glyphsubsts   &&&  r    ri   ri   5  s1    **,HHOOE" -r+   c                J  a V P                   P                  4        UUu/ uF\  w  r#VSP                  9   g   K  \        ;QJ d    V3R  lV 4       F  '       d   K   RM	  RM! V3R  lV 4       4      '       g   KZ  W#bK^  	  uppV n         \	        V P                   4      # u uppi )c              3  @   <"   T F  qSP                   9   x  K  	  R # 5ir   rD   )r   subrh   s   & r    r!    subset_glyphs.<locals>.<genexpr>A  s      >ASArM   FT)rf   rO   r(   allrk   rl   s   &f  r    rm   rm   <  s{     LL&&((DA= 	 S >A >SSS >A >> 	(DL
 s   B
BBB;Bc                   a VP                   P                  ! V3R  lV P                  P                  4        4       !   R# )c              3  >   <"   T F  w  rVS9   g   K  Vx  K  	  R # 5ir   r   )r   r   vlistrb   s   &  r    r!   rc   H  s     W,CqJee,Crd   N)r(   re   
alternatesrO   rg   s   &&fr    ri   ri   F  s&    HHOOWDOO,A,A,CWXr+   c                  a V P                   P                  4        UUUu/ uF~  w  r#VSP                  9   g   K  \        ;QJ d    V3R  lV 4       F  '       g   K   RM	  RM! V3R  lV 4       4      '       g   KZ  Y# Uu. uF  qDSP                  9   g   K  VNK  	  upbK  	  upppV n         \	        V P                   4      # u upi u upppi )c              3  @   <"   T F  qSP                   9   x  K  	  R # 5ir   rD   )r   rP   rh   s   & r    r!   rt   P  s      >1ahhrM   TF)ry   rO   r(   rN   rk   )r'   rh   r   rx   rP   s   &f   r    rm   rm   K  s     --//HA= 	/ S > >SSS > >> 	/u.u!QXXAAu../DO
   	 /s4   C
CCC<C CCCCc                   aa SP                   P                  ! VV3R  lV P                  P                  4        4       !   R# )c              3  (  <"   T F  w  rVS9   g   K  V Uu. uFe  p\         ;QJ d)    V3R  lVP                   4       F  '       d   K   RM	  RM! V3R  lVP                   4       4      '       g   KY  VP                  NKg  	  upx  K  	  R# u upi 5i)c              3  @   <"   T F  qSP                   9   x  K  	  R # 5ir   rD   r   crh   s   & r    r!   +closure_glyphs.<locals>.<genexpr>.<genexpr>Y  s     0V1ahhrM   FTN)ru   	ComponentLigGlyph)r   r   seqsseqrb   rh   s   &   r    r!   rc   X  sd      

1J XTWTcSS0V0VSSS0V0V-V\S\\TW1 Xs&   BBBB%B2BBN)r(   re   	ligaturesrO   rg   s   &ffr    ri   ri   U  s-    HHOO

>>//1

r+   c                  a V P                   P                  4        UUu/ uF  w  r#VSP                  9   g   K  W#bK  	  uppV n         V P                   P                  4        UUUu/ uF  w  r$TV Uu. uFx  pVP                  SP                  9   g   K   \        ;QJ d)    V3R  lVP
                   4       F  '       d   K   RM	  RM! V3R  lVP
                   4       4      '       g   Kv  VNKz  	  upbK  	  upppV n         V P                   P                  4        UUu/ uF  w  r#V'       g   K  W#bK  	  uppV n         \        V P                   4      # u uppi u upi u upppi u uppi )c              3  @   <"   T F  qSP                   9   x  K  	  R # 5ir   rD   r   s   & r    r!   rt   g  s     /U}!QXX}rM   FT)r   rO   r(   r   ru   r   rk   )r'   rh   r   rP   r   r   s   &f    r    rm   rm   `  s   '+~~';';'=O'=tqahhdad'=ODN ~~++- .GA 	

||qxx' ,/C/Us}}/UCCC/Us}}/U,U C
 	

 .DN (,~~';';'=C'=tqdad'=CDN P
 DsF   EE&E2E
EE %E*E0EE%/E%Ec                  a a S P                   ^8X  d   S P                  P                  V4      pV'       dw   \        ;QJ d:    V3R lS P                  S P
                  ,            4       F  '       d   K   RM/	  RM+! V3R lS P                  S P
                  ,            4       4      '       g   R# SP                  P                  V 3R lV 4       4       R# Q RS P                   ,          4       h)   c              3  Z   <"   T F   pVP                  SP                  4      x  K"  	  R # 5ir   rA   r   s   & r    r!   rc   s  s(      "
D KK!!D   (+FTNc              3  J   <"   T F  pSP                   V,          x  K  	  R # 5ir   )
Substituter   r6   r'   s   & r    r!   rc   x  s     <Gq**Gs    #unknown format: %s)FormatCoverager:   ru   LookAheadCoverageBacktrackCoverager(   re   )r'   rh   rb   r4   s   ff& r    ri   ri   o  s    {{a--))*5cc "
++d.D.DD"
ccc "
++d.D.DD"
 
 
 	<G<<4&44qr+   c                $  a V P                   ^8X  Eda   V P                  P                  SP                  4      p\	        V P
                  V4      V n        \        V P
                  4       UUu. uF  w  r4VSP                  9   g   K  VNK  	  ppp\	        V P
                  V4      V n        V P                  P                  V4       \        V P
                  4      V n	        \        V P                  ;'       dy    \        ;QJ dB    V3R lV P                  V P                  ,            4       F  '       d   K   R4      # 	  R4      # ! V3R lV P                  V P                  ,            4       4      4      # Q RT P                   ,          4       hu uppi )r   c              3  Z   <"   T F   pVP                  SP                  4      x  K"  	  R # 5ir   rB   r(   r   s   & r    r!   rt     s(      HA ""Hr   FTr   )r   r   rB   r(   r7   r   r9   rF   r2   
GlyphCountrk   ru   r   r   )r'   rh   r4   r6   rs   s   &f   r    rm   rm   }  s8   {{a--&&qxx0&t@#,T__#=Q#=11#=Q&t@G$doo.OO   //$2H2HH
 	

 	
 //$2H2HH 
 	
 	5&44q Rs   ,FFc                     V P                   R9   # )r   r         )DeltaFormatr'   s   &r    
is_hintingr     s    y((r+   c                    R F8  p\        WR4      pVf   K  VP                  4       '       g   K-  \        W4       K:  	  R# )
XPlaDeviceN)r   
YPlaDevice
XAdvDevice
YAdvDevice)getattrr   delattrr'   namerP   s   &  r    prune_hintsr     s0    HD%=Q\\^^D Ir+   c                   V P                   ^8X  d/   \        V P                  P                  VP                  4      4      # V P                   ^8X  d   V P                  P                  VP                  4      pV P
                  p\        V4      pV Uu. uF  qUV8  g   K  W5,          NK  	  upV n        \        V P
                  4      V n        \        V P                  4      # Q RT P                   ,          4       hu upi r   r   )r   r2   r   rB   r(   Value
ValueCountrk   )r'   rh   r4   r[   r5   r6   s   &&    r    rm   rm     s    {{a4==''122		--&&qxx0F)0>AIifii>
djj/DOO$$4&44q	 ?s   C9C9c                J  a  S P                   f   S P                  ^ 8X  g   Q hR# S P                  ^8X  dN   VP                  '       g   S P                   P	                  4        S P                   P                  4       S n        EMS P                  ^8X  d   R S P                   9   de   S P                  ^ 8X  g   Q h\        ;QJ d&    R S P                    4       F  '       d   K   RM	  RM! R S P                    4       4      '       g   Q hM|VP                  '       g$   S P                    F  pVP	                  4        K  	  \        \        P                  S P                    Uu. uF  q3P                  4       NK  	  up^ 4      S n        S P                  ^8X  d   \        ;QJ d)    V 3R lS P                    4       F  '       d   K   RM	  RM! V 3R lS P                    4       4      '       d5   ^S n        S P                  ^ 8w  d   S P                   ^ ,          MR S n         S =
R# u upi )NTc              3  (   "   T F  qR J x  K
  	  R # 5ir   r   r   rP   s   & r    r!   $prune_post_subset.<locals>.<genexpr>  s     5*QDy*s   Fc              3  N   <"   T F  qSP                   ^ ,          8H  x  K  	  R# 5ir   N)r   )r   rP   r'   s   & r    r!   r     s     GJqTZZ] 2J   "%)r   ValueFormatr   hintingr   getEffectiveFormatru   r   int__or__r   )r'   r)   optionsrP   s   f&& r    prune_post_subsetr     sv   zz1$$$ {{aJJ""$::88:		4::##q(((35$**53335$**55555???AMMO $%

TZZHZ113ZH! D
 {{aCCGDJJGCCCGDJJGGG&*&6&6!&;TZZ]
O Is    H 
c                   V P                   ^8X  Edm   V P                  P                  VP                  4      pV P                  p\        V4      pV Uu. uF  qUV8  g   K  W5,          NK  	  upV n        V P                   FZ  pVP                   Uu. uF!  qwP                  VP                  9   g   K  VNK#  	  upVn        \        VP                  4      Vn        K\  	  \        V P                  4       UUu. uF  w  rVVP                  '       g   K  VNK  	  pppV P                  P                  V4       \        V P                  V4      V n        \        V P                  4      V n        \        V P                  4      # V P                   ^8X  Ed   V P                  P                  VP                  P                  V P                  P                  4      RR7       Uu. uF  pWP                   8  g   K  VNK  	  p	pV P"                  P                  VP                  RRR7       Uu. uF  pWP$                  8  g   K  VNK  	  p
pV	 Uu. uF  qPP&                  V,          NK  	  upV n        V P&                   F*  pV
 Uu. uF  qXP(                  V,          NK  	  upVn        K,  	  \        V	4      V n        \        V
4      V n        \        V P                   ;'       d=    V P$                  ^8  ;'       d&    V P                  P                  VP                  4      4      # Q RT P                   ,          4       hu upi u upi u uppi u upi u upi u upi u upi )r   TrF   F)rF   r\   r   )r   r   rB   r(   PairSetr2   PairValueRecordSecondGlyphPairValueCountr9   rF   r7   PairSetCountrk   	ClassDef1intersectionClass1Count	ClassDef2Class2CountClass1RecordClass2Record)r'   rh   r4   pairsr5   r6   prr   
class1_map
class2_maps   &&         r    rm   rm     s   {{a--&&qxx0E
*1?'QY'?A,,!,a0I,!A  #1#4#45A	  "+4<<!8M!8A<L<L11!8MG$#DLL':-D%%&&		 ^^**%%dmm&:&:;4 + 
 ###	 A 	 
 ^^**18845*Q
Q### AQ 	 

 <FF:a..q11:F""A9CDAnnQ//DAN #z?z? / /!!A%/ /$$QXX.
 	
 	5&44qK @!
 N


 GDsH   L7 L7L<2L<6MMM4M&M=M	M?Mc                   VP                   '       Eg   ^R^R/V P                  ,          w  r4^ ;V n        V n        \	        W4       F  p\	        WT4       F  pVP
                  '       dL   VP
                  P                  4        V ;P                  VP
                  P                  4       ,          un        VP                  '       g   Kt  VP                  P                  4        V ;P                  VP                  P                  4       ,          un        K  	  K  	  \        V P                  V P                  ,          4      # )r   )r   r   )r   r   )
r   r   ValueFormat1ValueFormat2r   Value1r   r   Value2rk   )r'   r)   r   attr1attr2rowr   s   &&&    r    r   r     s    ???-/
 ++
 121D-4'CS(888HH((*%%)D)D)FF%888HH((*%%)D)D)FF% ) ( !!D$5$5566r+   c                ~   V P                   ^8X  d   V P                  P                  VP                  4      pV P                  p\        V4      pV Uu. uF  qUV8  g   K  W5,          NK  	  upV n        \        V P                  4      V n        \        V P                  4      # Q RT P                   ,          4       hu upi r   )r   r   rB   r(   EntryExitRecordr2   EntryExitCountrk   )r'   rh   r4   recordsr5   r6   s   &&    r    rm   rm     s    {{a--&&qxx0&&G4;IGq5y


GI!$"6"67D''((4&44q	  Js   B:B:c                ,   V P                   ^8X  d
   ^V n         R# V P                   ^8X  di   R F9  p\        WR4      pVf   K  VP                  4       '       g   K-  \        WR4       K;  	  V P                  f   V P
                  f
   ^V n         R# R# R# R# )r   N)XDeviceTableYDeviceTable)r   r   r   setattrr   r   r   s   &  r    r   r     s~    {{a		4DD)A}D) 5 $):):)BDK *C$ 
r+   c                   VP                   '       gn   V P                   F]  pVP                  '       d   VP                  P                  4        VP                  '       g   KC  VP                  P                  4        K_  	  R # T)r   r   EntryAnchorr   
ExitAnchor)r'   r)   r   recs   &&& r    r   r   +  sR    ???''C++-~~~**,	 (
 r+   c                  aa
 V P                   ^8X  Ed   V P                  P                  VP                  4      p\	        V P
                  P                  V4      V P
                  n        \        V P
                  P                  4      V P
                  n        \        R V P
                  P                   4       4      pV P                  P                  VP                  4      pV P                  P                  o
\        S
4      pV Uau. uFR  oSV8  g   K  \        ;QJ d     V
V3R lV 4       F  '       g   K   RM	  RM! V
V3R lV 4       4      '       g   KP  SNKT  	  ppV'       g   R# V P                  P                  V4       \	        V P                  P                  V4      V P                  n        \        V P                  P                  4      V P                  n        \        V4      V n        V P
                  P                   F#  pVP%                  VP&                  4      Vn        K%  	  V P                  P                   F  p	\	        V	P(                  V4      V	n        K   	  \+        V P"                  ;'       d5    V P
                  P                  ;'       d    V P                  P                   4      # Q RT P                   ,          4       hu upi )r   c              3  8   "   T F  qP                   x  K  	  R # 5ir   Classr   s   & r    r!   rt   >       "N4Mq774M   c              3  \   <"   T F!  pSS,          P                   V,          R Jx  K#  	  R # 5ir   )
BaseAnchor)r   jbase_recordsr6   s   & r    r!   rt   G  s%     U}!LO..q1=}   ),TFr   )r   MarkCoveragerB   r(   r7   	MarkArray
MarkRecordr2   	MarkCountr   BaseCoverager:   	BaseArray
BaseRecordrN   rF   	BaseCount
ClassCountr^   r   r   rk   )r'   rh   mark_indicesclass_indicesintersect_base_indicesnum_base_recordsr6   base_indicesmbr   s   &&    `   @r    rm   rm   6  s   {{a((//9$0NN%%|%
! $'t~~'@'@#A ""NDNN4M4M"NN!%!2!2!<!<QXX!F~~00|, ,
+##  U}UU}UU A+ 	 
 -$0NN%%|%
! $'t~~'@'@#A m,**A#))!''2AG +**A'mDAL +OOUU 8 8UUT^^=U=U
 	
 	5&44q1
   	K
K!K9KKc                T   VP                   '       g   V P                  P                   F1  pVP                  '       g   K  VP                  P	                  4        K3  	  V P
                  P                   F0  pVP                   F  pV'       g   K  VP	                  4        K  	  K2  	  R # r   )r   r   r   
MarkAnchorr   r   r   r   )r'   r)   r   r   r   as   &&&   r    r   r   ^  so    ???**A|||((* + **A\\1MMO " + r+   c                ,  a V P                   ^8X  Ed   V P                  P                  VP                  4      p\	        V P
                  P                  V4      V P
                  n        \        V P
                  P                  4      V P
                  n        \        R V P
                  P                   4       4      oV P                  P                  VP                  4      pV P                  P                  pV P                  P                  pV Uu. uFo  pWe8  g   K  \        ;QJ d/    V3R lWF,          P                    4       F  '       g   K   RM$	  RM ! V3R lWF,          P                    4       4      '       g   Km  VNKq  	  ppV'       g   R# V P                  P#                  V4       \	        V P                  P                  V4      V P                  n        \        V P                  P                  4      V P                  n        \        S4      V n        V P
                  P                   F#  pSP'                  VP(                  4      Vn        K%  	  V P                  P                   F7  p	V	f   K	  V	P                    F  p
\	        V
P*                  S4      V
n        K   	  K9  	  \-        V P$                  ;'       d5    V P
                  P                  ;'       d    V P                  P                  4      # Q RT P                   ,          4       hu upi )r   c              3  8   "   T F  qP                   x  K  	  R # 5ir   r   r   s   & r    r!   rt   s  r   r   c              3     <a"   T F?  o\         ;QJ d    V3R  lS 4       F  '       g   K   RM	  RM! V3R  lS 4       4      x  KA  	  R# 5i)c              3  N   <"   T F  pSP                   V,          R Jx  K  	  R # 5ir   )LigatureAnchor)r   r   	components   & r    r!   *subset_glyphs.<locals>.<genexpr>.<genexpr>~  s!     S]I,,Q/t;]r   TFN)rN   )r   r  r   s   &@r    r!   rt   }  s6      !BI S]SS]SSS!Bs   AA ATFr   )r   r   rB   r(   r7   r   r   r2   r   r   LigatureCoverager:   LigatureArrayLigatureAttachLigatureCountrN   ComponentRecordrF   r   r^   r   r  rk   )r'   rh   r   intersect_ligature_indicesligature_arraynum_ligaturesr6   ligature_indicesr   r3   r   r   s   &&         @r    rm   rm   k  sh   {{a((//9$0NN%%|%
! $'t~~'@'@#A ""NDNN4M4M"NN%)%:%:%D%DQXX%N"++::**88 0
/    !/!2!B!B !/!2!B!B  A/ 	 
  ##$45,8--/?-
) ,/t/A/A/P/P+Q(m,**A#))!''2AG +##22Ay&&#/0@0@-#P  ' 3
 OO 1 1((1 1""00
 	
 	5&44qC
s   L
L)$L+L Lc                   VP                   '       g   V P                  P                   F1  pVP                  '       g   K  VP                  P	                  4        K3  	  V P
                  P                   FI  pVf   K	  VP                   F0  pVP                   F  pV'       g   K  VP	                  4        K  	  K2  	  KK  	  R# NT)	r   r   r   r  r   r  r  r  r  )r'   r)   r   r   r3   r   r  s   &&&    r    r   r     s    ???**A|||((* + ##22Ay&&))Aq * ' 3 r+   c                  aa
 V P                   ^8X  Ed   V P                  P                  VP                  4      p\	        V P
                  P                  V4      V P
                  n        \        V P
                  P                  4      V P
                  n        \        R V P
                  P                   4       4      pV P                  P                  VP                  4      pV P                  P                  o
\        S
4      pV Uau. uFR  oSV8  g   K  \        ;QJ d     VV
3R lV 4       F  '       g   K   RM	  RM! VV
3R lV 4       4      '       g   KP  SNKT  	  ppV'       g   R# V P                  P                  V4       \	        V P                  P                  V4      V P                  n        \        V P                  P                  4      V P                  n        \        V4      V n        V P
                  P                   F#  pVP#                  VP$                  4      Vn        K%  	  V P                  P                   F  p	\	        V	P&                  V4      V	n        K   	  \)        V P                   ;'       d5    V P
                  P                  ;'       d    V P                  P                  4      # Q RT P                   ,          4       hu upi )r   c              3  8   "   T F  qP                   x  K  	  R # 5ir   r   r   s   & r    r!   rt     s     "O4Nq774Nr   c              3  \   <"   T F!  pSS,          P                   V,          R Jx  K#  	  R # 5ir   )Mark2Anchor)r   r   r6   mark2_recordss   & r    r!   rt     s&     WAM!$0034?r   TFr   )r   Mark1CoveragerB   r(   r7   
Mark1Arrayr   r2   r   r   Mark2Coverager:   
Mark2ArrayMark2RecordrN   rF   r   r^   r   r  rk   )r'   rh   mark1_indicesr   intersect_mark2_indicesnum_mark2_recordsr6   mark2_indicesr   r   r  s   &&    `   @r    rm   rm     s   {{a**11!((;%1OO&&&
" %((B(B$C!""ODOO4N4N"OO"&"4"4">">qxx"H33. -
,$$  WWWWW A, 	 
   /&2OO'''
# %((C(C$D!m,++A#))!''2AG ,,,A(FAM -OOWW 9 9WWdoo>W>W
 	
 	5&44q1
r   c                T   VP                   '       g   V P                  P                   F1  pVP                  '       g   K  VP                  P	                  4        K3  	  V P
                  P                   F0  pVP                   F  pV'       g   K  VP	                  4        K  	  K2  	  R # r   )r   r  r   r  r   r  r  r  )r'   r)   r   r   r   s   &&&  r    r   r     so    ???++A|||((* , ,,A]]1MMO # - r+   c                    R # r   r   r'   lookup_indicess   &&r    subset_lookupsr'    s     	r+   c                    . # r   r   r   s   &r    collect_lookupsr)    s	     Ir+   c                    R # r   r   r'   r)   r   s   &&&r    r   r     s     r+   c                    R # Fr   r   s   &r    may_have_non_1to1r.    s     r+   c                    R # r   r   r   s   &r    r.  r.    s     r+   c                    ! R  R\         4      pV P                  R9  d   R# \        V P                  R4      '       g   / V P                  n        V P                  V P                  P                  9  d@   V! V P                  V P                  4      pW P                  P                  V P                  &   V P                  P                  V P                  ,          # )c                      ] tR tRtR tRtR# )0__subset_classify_context.<locals>.ContextHelperi+  c                	l   VP                   P                  R 4      '       d   RpR pMRpRpVP                   P                  R4      '       d   Rp^p^pMRp^ p^pWS,           pW0n        W@n        WPn        Wn        W`n        Wpn        VR,           V n	        V^8X  d   R p	R p
R pR	 pR
pR
pR pR pR pR pMVV^8X  d    R p	R p
R pR pR pR pR pR pR pR pM0V^8X  d   R p	R p
R
pR
pR
pR
pR pR pR pR pMQ RT,          4       hV'       d"   Wn
        Wn        Wn        VV n        VV n        MWn
        Wn        Wn        Wn        VV n        V^8X  dC   VR ,           V n        VR!,           V n        VR",           V n        VR#,           V n        R$ V n        R
# V^8X  dv   VR%,           V n        VR&,           V n        VR',           V n        VR(,           V n        R) V n        V'       d   R*MR+V n        V'       d   ^M^ V n        V'       d   R,MR-V n        R
# V^8X  d   V'       d   R.MR/V n        R
# R
# )0SubstSubPosChain LookupRecordc                    V P                   # r   r   r   s   &r    <lambda>K__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.<lambda>G      QZZr+   c                    V P                   # r   r;  r<  s   &r    r=  r>  H      !**r+   c                    R# )Nr   r   r<  s   &r    r=  r>  I  s    r+   c                    R# )N)NNNr   r<  s   &r    r=  r>  J  s    -?r+   Nc                    V P                   3# r   )Inputr<  s   &r    r=  r>  M  
    aggZr+   c                H    V P                   V P                  V P                  3# r   	BacktrackrE  	LookAheadr<  s   &r    r=  r>  N      1;;*Mr+   c                8    Vw  V n         R  V 4       w  V n        R# )c              3  F   "   T F  p\        V4      ^,           x  K  	  R# 5ir   Nr1   r   xs   & r    r!   a__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>R       &=1as1vzz1   !N)rE  r   r   r.   s   &&r    SetRuleDataN__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetRuleDataP      !"JQW&=1&=OQ\r+   c                    Vw  V n         V n        V n        \        V^ ,          4      \        V^,          4      ^,           \        V^,          4      uV n        V n        V n        R# r   rI  rE  rJ  r2   BacktrackGlyphCountInputGlyphCountLookAheadGlyphCountrT  s   &&r    ChainSetRuleDataS__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.ChainSetRuleDataT  P    :;7Q[!'1;
 QqTC!IM3qt9	-)-r+   c                    V P                   # r   r;  r<  s   &r    r=  r>  ]  r?  r+   c                    V P                   # r   r;  r<  s   &r    r=  r>  ^  rA  r+   c                    V P                   3# r   ClassDefr<  s   &r    r=  r>  _  s
    r+   c                H    V P                   V P                  V P                  3# r   BacktrackClassDefInputClassDefLookAheadClassDefr<  s   &r    r=  r>  `  s     ''OO''.r+   c                    Vw  V n         R # r   rc  rT  s   &&r    SetContextDataQ__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetContextDataf  s    $%MQZr+   c                0    Vw  V n         V n        V n        R # r   rf  rT  s   &&r    SetChainContextDataV__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetChainContextDatai  s    RSOQ(!/1;Nr+   c                    V P                   3# r   r   r<  s   &r    r=  r>  l  rF  r+   c                H    V P                   V P                  V P                  3# r   rH  r<  s   &r    r=  r>  m  rK  r+   c                8    Vw  V n         R  V 4       w  V n        R# )c              3  F   "   T F  p\        V4      ^,           x  K  	  R# 5irN  r1   rO  s   & r    r!   rQ  q  rR  rS  N)r   r   rT  s   &&r    rU  rV  o  rW  r+   c                    Vw  V n         V n        V n        \        V^ ,          4      \        V^,          4      ^,           \        V^,          4      uV n        V n        V n        R# r   rY  rT  s   &&r    r]  r^  s  r_  r+   c                (    V P                   ^ ,          # r   r;  r<  s   &r    r=  r>  |  s    QZZ]r+   c                (    V P                   ^ ,          # rv  )InputCoverager<  s   &r    r=  r>  }  s    !//!*<r+   c                    V P                   # r   r;  r<  s   &r    r=  r>    r?  r+   c                ^    V P                   V P                  ,           V P                  ,           # r   )r   rx  r   r<  s   &r    r=  r>    s    ''!//9A<O<OOr+   c                8    Vw  V n         R  V 4       w  V n        R# )c              3  8   "   T F  p\        V4      x  K  	  R # 5ir   r1   rO  s   & r    r!   rQ    s     &9q!s1vvqr   N)r   r   rT  s   &&r    rU  rV    s    $%MQZ&9q&9OQ\r+   c                h    Vw  V n         V n        V n        R  V 4       w  V n        V n        V n        R# )c              3  8   "   T F  p\        V4      x  K  	  R # 5ir   r1   rO  s   & r    r!   f__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.ChainSetRuleData.<locals>.<genexpr>  s     +AQr   N)r   rx  r   rZ  r[  r\  rT  s   &&r    r]  r^    s7    RSOQ(!/1;N
 ,+	-)-r+   r   Rule	RuleCountRuleSetRuleSetCountc                    W 9   d   V.# . # r   r   r(   r   r   s   &&&r    r=  r>    s    Q[qc6Pb6Pr+   	ClassRuleClassRuleCountClassSetClassSetCountc                l    V'       d   VP                  W4      # V^ 8X  d   \        V 4      # \        4       # rv  )rV   r>   r  s   &&&r    r=  r>    s6     %%f0 <)*a#f+<58U<r+   rh  rd  rE  r   rx  r   )__name__endswith
startswithTypTyper7  ChainTypInputIdxDataLenr9  r   ContextDatark  RuleDatarU  r  r  r  r  	Intersectrd  ClassDefIndexrE  )r'   rU   r   r  r  r7  r  r  r  r   ChainCoverager  ChainContextDatark  rn  r  ChainRuleDatarU  r]  s   &&&                r    __init__9__subset_classify_context.<locals>.ContextHelper.__init__,  sZ   ~~&&w//~~((11{HHIJ$M$M"L $~ 5D{/ 4/#? !%&*#/ M>> 1/ 45$ &T 0 M>> 12 <"#' !%&*#/!:, 8.77q -#3 &9# -#3  (#. &4# (#. {$v-	!)K!7')3$,~$=!!P1${2	!),<!<'*4$,$>!" 49j*/QQ"(-W7
105_:
 r+   )r7  r  rd  r  r  r   r  rE  r  r  r9  r  r  r  r  r  rk  rU  r  r  N)r  
__module____qualname____firstlineno__r  __static_attributes__r   r+   r    ContextHelperr2  +  s	    L	Fr+   r  N_subset__ContextHelpersr   )objectr   hasattr	__class__r  )r'   r  helpers   &  r    __subset_classify_contextr  $  s    MF MF^ {{)#4>>#<==13.{{$..@@@t~~t{{;>D..t{{;>>11$++>>r+   c                  aa V P                  4       oSP                  V 4      P                  V4      pV'       g   . # SP                  V 4      P                  V4      pV P                  ^8X  EdF   SP                  V 4      p\        V SP                  4      p\        V SP                  4      pV EF  pWv8  g   WW,          '       g   K  \        WW,          SP                  4       EF  pV'       g   K  \        ;QJ d9    VV3R l\        VSP                  V4      4       4       F  '       d   K   RM.	  RM*! VV3R l\        VSP                  V4      4       4       4      '       g   K  \        4       p	\        VSP                  4       EF  p
V
'       g   K  V
P                  pW9   d   RpMXV^ 8X  d.   \!        SP                  V 4      P"                  V,          .4      pM$\!        VP$                  V^,
          ,          .4      pSP&                  P(                  P*                  V
P,                  ,          pV	P/                  V4       VP1                  4       '       d6   V	P3                  \5        V\7        VP$                  4      ^,           4      4       VP9                  SVR7       EK  	  EK  	  EK  	  R# V P                  ^8X  Ed   \        V SP:                  4      pVP                  V4      pSP                  V 4      p\        V SP                  4      p\        V SP                  4      pV EF  pWv8  g   WW,          '       g   K  \        WW,          SP                  4       EF  pV'       g   K  \        ;QJ d9    VV3R l\        VSP                  V4      4       4       F  '       d   K   RM.	  RM*! VV3R l\        VSP                  V4      4       4       4      '       g   K  \        4       p	\        VSP                  4       EF6  p
V
'       g   K  V
P                  pW9   d   RpMiV^ 8X  d   \!        VP=                  W'4      4      pMG\!        VP=                  SP"                  \        VSP$                  4      V^,
          ,          4      4      pSP&                  P(                  P*                  V
P,                  ,          pV	P/                  V4       VP1                  4       '       d@   V	P3                  \5        V\7        \        VSP$                  4      4      ^,           4      4       VP9                  SVR7       EK9  	  EK  	  EK  	  R# V P                  ^8X  Ed   \        ;QJ d.    V3R lSP                  V 4       4       F  '       d   K   RM#	  RM! V3R lSP                  V 4       4       4      '       g   . # T p\        VSP$                  4      p\        4       p	\        VSP                  4       F  p
V
'       g   K  V
P                  pW9   d   RpM=V^ 8X  d   \!        V4      pM*\!        W,          P                  SP"                  4      4      pSP&                  P(                  P*                  V
P,                  ,          pV	P/                  V4       VP1                  4       '       d,   V	P3                  \5        V\7        V4      ^,           4      4       VP9                  SVR7       K  	  R# Q RT P                  ,          4       h)	r   c              3     <a"   T FF  w  op\         ;QJ d!    VVV3R  lV 4       F  '       d   K   RM	  RM! VVV3R  lV 4       4      x  KH  	  R# 5i)c              3  ^   <"   T F"  pSP                  SP                  SV4      x  K$  	  R # 5ir   r  r(   r   kr   cdrh   s   & r    r!   r     %     DeAHHb!44e   *-FTNru   r   klistr  r   rh   s   & @r    r!   rc     :      %D	E CDeDCCCDeDDD%D   AA"AFTN)rb   c              3     <a"   T FF  w  op\         ;QJ d!    VVV3R  lV 4       F  '       d   K   RM	  RM! VVV3R  lV 4       4      x  KH  	  R# 5i)c              3  ^   <"   T F"  pSP                  SP                  SV4      x  K$  	  R # 5ir   r  r  s   & r    r!   r     r  r  FTNr  r  s   & @r    r!   rc     r  r  c              3  p   <"   T F+  qR J;'       d    VP                  SP                  4      x  K-  	  R # 5ir   rA   r   rP  rh   s   & r    r!   rc     s-     UDTqD=::Q[[%::DT   6$6r   )r  r   r:   r?   r   r  r   r  r  r  ru   zipr  r>   r9  SequenceIndex	frozensetr(   rE  table
LookupListLookupLookupListIndexaddr.  re   ranger2   ri   rd  rV   )r'   rh   rb   r4   r  rssrssCountr6   r   chaosllseqi
pos_glyphslookuprd  input_coveragesr   s   &f&             @r    ri   ri     s   &&(Ajj((4G	D!22:>J{{ammD)dAII&40A}CFFSVQVV,s %(ajjm%Dsss %(ajjm%D   !!Q^^4B ++D}%)
19)2AJJt4D4K4KA4N3O)PJ)2AGGD1H4E3F)GJWW//66r7I7IJFIIdO//11U4QWW1A%BC))!
)C! 5 - : 
	4,$$Z0mmD)dAII&40A}CFFSVQVV,s %(ajjm%Dsss %(ajjm%D   !!Q^^4B ++D}%)
19)2 ( 8 8 G*J *3 ( 8 8$%HHga.A$(.K!"*J
 WW//66r7I7IJFIIdO//11U4WQ5H1IA1M%NO))!
)C- 5 - F 
	sUAJJtDTUsssUAJJtDTUUUI!!QWW-!Q^^,B##D}!
19!*:!6J!*'->>qxxH"J WW''..r/A/ABFIIdO''))U4_)=)ABC!!!
!;% -( 	5&44qr+   c                  a V P                  4       pV P                  ^8X  Ed   V P                  P                  SP                  4      p\        WP                  4      p\        WP                  4      pV Uu. uF  qfV8  g   K  WF,          NK  	  ppV F  pV'       g   K  \        WrP                  4      pV U	u. uFo  p	V	'       g   K  \        ;QJ d.    V3R lVP                  V	4       4       F  '       d   K   RM#	  RM! V3R lVP                  V	4       4       4      '       g   Km  V	NKq  	  pp	\        WrP                  V4       \        WrP                  \        V4      4       K  	  \        V4       UUu. uF.  w  rgV'       g   K  \        WrP                  4      '       g   K,  VNK0  	  pppV P                  P                  V4       \!        WC4      p\        WP                  V4       \        WP                  \        V4      4       \#        V4      # V P                  ^8X  Ed	   V P                  P                  SP                  4      '       g   R# VP%                  V 4      p
V
 Uu. uF)  q'       d   VP                  SP                  RR7      MRNK+  	  ppWP&                  ,          p\        WP                  4      p\        WP                  4      pV Uu. uF  qfV8  g   K  WF,          NK  	  pp?\        WP(                  4      P+                  V P                  P                  4      p\        V4       UUu. uF  w  rdWc9   d   TMRNK  	  upppV EFF  pV'       g   K  \        WrP                  4      pV U	u. uF{  p	V	'       g   K  \        ;QJ d4    R \-        WP                  V	4      4       4       F  '       d   K   RM)	  RM%! R \-        WP                  V	4      4       4       4      '       g   Ky  V	NK}  	  pp	\        WrP                  V4       \        WrP                  \        V4      4       V Fa  p	TP/                  T	\-        WP                  V	4      4       UUUu. uF%  w  rV Uu. uF  qP1                  V4      NK  	  upNK'  	  uppp4       Kc  	  EKI  	  V Uu. uF)  qw'       d   \        WrP                  4      '       d   TMRNK+  	  ppV'       d   VR	,          f   VR	 K  \        WP                  V4       \        WP                  \        V4      4       \#        V4      # V P                  ^8X  dY   \        ;QJ d.    V3R lVP                  V 4       4       F  '       d   K   R# 	  R# ! V3R lVP                  V 4       4       4      # Q RT P                  ,          4       hu upi u up	i u uppi u upi u upi u uppi u up	i u upi u upppi u upi )
r   c              3     <"   T F?  p\         ;QJ d    V3R  lV 4       F  '       d   K   RM	  RM! V3R  lV 4       4      x  KA  	  R# 5i)c              3  @   <"   T F  qSP                   9   x  K  	  R # 5ir   rD   )r   r   rh   s   & r    r!   r	  J  s     95aM5rM   FTNr  )r   glistrh   s   & r    r!   rt   J  s/     U}e95995999}s   A
A
 A
FTr   Nc              3     a"   T FB  w  op\         ;QJ d    V3R  lV 4       F  '       d   K   RM	  RM! V3R  lV 4       4      x  KD  	  R# 5i)c              3  ,   <"   T F	  qS9   x  K  	  R # 5ir   r   )r   r  	klass_maps   & r    r!   r	  p  s     61Ys   FTNr  )r   r  r  s   & @r    r!   rt   o  s;      ,J(	5 C66CCC6666,Js   AA Ac              3  p   <"   T F+  qR J;'       d    VP                  SP                  4      x  K-  	  R # 5ir   r   r  s   & r    r!   rt     s-     RAQAD=77QXXahh%77AQr  r   )r  r   r   rB   r(   r   r  r  r  ru   r  r   r  r2   r9   rF   r7   rk   r  r  rd  r:   r  rU  r^   )r'   rh   r   r4   r  r  r6   rsssr   r  rP  
klass_mapsr  r  r  s   &f              r    rm   rm   4  s    	&&(A{{a--&&qxx0dII&40&7w!h,vsvvw7BVV$B A  CUqzzRS}UCCCUqzzRS}UU    B#BSW-  #,C.O.B172vv;N11.OG$3(ii%nnc#h/Cy		}}##AHH--mmD)CN
CNaaAHHQXXTH*T9; 	 

 __-dII&40&7w!h,vsvvw7$

+55dmm6J6JK;DS>J>als,>JBVV$B A  C ,/
JJqM,JCCC ,/
JJqM,J     B#BSW-  14J

10N0N,I 6;;U+U;0N # 6 EHHCbRGB//rT9CHc"goBii%nnc#h/ Cy		sRDAQRssRsRsRDAQRRR4&44qa 8
 P
 8 K" < Is   7V0V0:
V5	
V5#V5:*V5)V58V:	V:&V:)/W W'W<W
>
W
W)W0W9W%W0W	W&/W!Wc                   V P                  4       pV P                  R9   d   \        WP                  4       F  pV'       g   K  \        W2P                  4       F  pV'       g   K  \        TVP                  \        WBP                  4       Uu. uF"  pV'       g   K  VP                  V9   g   K   VNK$  	  up4       \        WBP                  4       F-  pV'       g   K  VP                  VP                  4      Vn        K/  	  K  	  K  	  R# V P                  ^8X  d   \        T VP                  \        WP                  4       Uu. uF"  pV'       g   K  VP                  V9   g   K   VNK$  	  up4       \        WP                  4       F-  pV'       g   K  VP                  VP                  4      Vn        K/  	  R# Q RT P                  ,          4       hu upi u upi )r   r   Nr   r   )	r  r   r   r  r  r   r9  r  r^   )r'   r&  r   r  r   r  s   &&    r    r'  r'    s    	&&(A{{f$		*BR(NN #*!^^"<"<B "$"4"4"F "< "!^^4B )7)=)=b>P>P)QB& 5 ) +& 
	NN "$77B ,,> 7	
 $/B!/!5!5b6H6H!IB 0
 	5&44q3s$   
GG0G
GG(Gc           
     0   V P                  4       pV P                  R9   d   \        WP                  4       UUUu. uFe  pV'       g   K  \        W!P                  4       F?  pV'       g   K  \        W1P
                  4       F  pV'       g   K  VP                  NK  	  KA  	  Kg  	  uppp# V P                  ^8X  d9   \        WP
                  4       Uu. uF  qD'       g   K  VP                  NK  	  up# Q RT P                  ,          4       hu upppi u upi )r   r   r  )r  r   r   r  r  r9  r  )r'   r   r  r   r  s   &    r    r)  r)    s     	&&(A{{f dII.
.  R(	 
 a0 B
 1  ) .
 	
 
	-4T>>-JQ-Jrb"""-JQQ4&44q
 Rs#   
D
D,DD	D!Dc                    V P                   ^8X  d   V P                  P                  W4       R# Q RT P                   ,          4       h)r   r   N)r   ExtSubTableri   rg   s   &&&r    ri   ri     s6    {{a''64&44qr+   c                    V P                   ^8X  d   V P                  P                  4       # Q RT P                   ,          4       hr   )r   r  r.  r   s   &r    r.  r.    s7    {{a11334&44qr+   c                    V P                   ^8X  d   V P                  P                  V4      # Q RT P                   ,          4       hr   )r   r  rm   r'   rh   s   &&r    rm   rm     s9    {{a--a004&44qr+   c                    V P                   ^8X  d   V P                  P                  W4      # Q RT P                   ,          4       hr   )r   r  r   r+  s   &&&r    r   r     s9    {{a11$@@4&44qr+   c                    V P                   ^8X  d   V P                  P                  V4      # Q RT P                   ,          4       hr   )r   r  r'  r%  s   &&r    r'  r'    s9    {{a..~>>4&44qr+   c                    V P                   ^8X  d   V P                  P                  4       # Q RT P                   ,          4       hr   )r   r  r)  r   s   &r    r)  r)    s7    {{a//114&44qr+   c                   Vf   \        VP                  4      p\        V 4      pVP                  pVP	                  VR4      w  rVV\        VP                  4      8w  d&   \        VP                  4      \        4       3;w  rVWC&   VP                  V4      '       d   R # VP                  V4       V P                   F  pV'       g   K  VP                  W4       K   	  R # )Nr   )r  r(   id_doneLookupsgetr2   r>   issubsetre   SubTableri   )r'   rh   rb   keydoneLookupsr5   coveredsts   &&&     r    ri   ri     s    qxx(
 T(C..K __S)4NEAHH-0]CE,BB)7##NN:mm
!( r+   c                .   V P                    Uu. uF'  q"'       g   K  VP                  V4      '       g   K%  VNK)  	  upV n         \        V P                   4      V n        \	        V R 4      '       d   V P
                  e   V P
                  VP                  9  d;   RV n        V ;P                  R,          un        V ;P                  ^,          un        M*VP                  P                  V P
                  4      V n        \        V P                  4      # u upi )MarkFilteringSetNi)
r  rm   r2   SubTableCountr  r  used_mark_sets
LookupFlagr^   rk   )r'   rh   r  s   && r    rm   rm   !  s    "&--N-B2R":J:J1:MRR-NDMT]]+Dt'((T-B-B-N  (8(88$(D!OOu$OOOs"O$%$4$4$:$:4;P;P$QD!""## Os   	DDDc                z    R pV P                    F(  pV'       g   K  VP                  W4      '       g   K&  RpK*  	  V# FT)r  r   )r'   r)   r   retr  s   &&&  r    r   r   /  s8    
Cmm..C	 
 Jr+   c                N    V P                    F  pVP                  V4       K  	  R # r   )r  r'  )r'   r&  rh   s   && r    r'  r'  :  s    ]]	( r+   c                <    \        R  V P                   4       . 4      # )c              3  T   "   T F  q'       g   K  VP                  4       x  K   	  R # 5ir   )r)  r   r  s   & r    r!   "collect_lookups.<locals>.<genexpr>B  s!     C}$""$$}   	(()sumr  r   s   &r    r)  r)  @  s    Ct}}CRHHr+   c                    \         ;QJ d&    R  V P                   4       F  '       g   K   R# 	  R# ! R  V P                   4       4      # )c              3  T   "   T F  q'       g   K  VP                  4       x  K   	  R # 5ir   )r.  r  s   & r    r!   $may_have_non_1to1.<locals>.<genexpr>G  s!     D"%r##%%r  TF)rN   r  r   s   &r    r.  r.  E  s3    3DD33D3D3DDDDr+   c                    \        V P                  4       UUu. uF*  w  r#V'       g   K  VP                  V4      '       g   K(  VNK,  	  upp# u uppi )z(Returns the indices of nonempty lookups.)r9   r  rm   )r'   rh   r6   r3   s   &&  r    rm   rm   J  s:     $DKK0M0$!AA!//!:LAA0MMMs   AAAc                z    R pV P                    F(  pV'       g   K  VP                  W4      '       g   K&  RpK*  	  V# r  )r  r   )r'   r)   r   r  r3   s   &&&  r    r   r   P  s8    
C[[t--C	 
 Jr+   c                    V P                  4        V Uu. uF(  q"V P                  8  g   K  V P                  V,          NK*  	  upV n        \        V P                  4      V n        V P                   F  pVP	                  V4       K  	  R # u upi r   )ensureDecompiledLookupCountr  r2   r'  r'   r&  r6   r3   s   &&  r    r'  r'  [  sn    +9R>aAQAQ=Q>4;;q>>>RDK4;;'D[[	(  Ss
   BBc                    V P                  4        \        V P                  4       UUu. uF  w  r#W!9   d   TMRNK  	  uppV n        R# u uppi z+Sets lookups not in lookup_indices to None.N)r  r9   r  r  s   &&  r    neuter_lookupsr  d  sF     	7@7M7MtqQ d*7MDK s   A	c                  a  \        V4      pTp \        V 3R lV 4       . 4      pV Uu. uF   pWA9  g   K  VS P                  8  g   K  VNK"  	  ppV'       g   \        V4      # \        V4      pVP                  V4       TpKv  u upi )zBReturns sorted index of all lookups reachable from lookup_indices.c              3     <"   T F8  qSP                   8  g   K  SP                  V,          P                  4       x  K:  	  R # 5ir   )r  r  r)  r   s   & r    r!   "closure_lookups.<locals>.<genexpr>t  s3     Ww!dFVFVBV-T[[^++--ws
   A)A)r   r  r  extend)r'   r&  recurserecurse_lookupsr3   s   f&   r    closure_lookupsr  m  s      /NG
WwW
 %
$& +,t/?/?+? A$ 	 

 n--$_5o.!
s   BB
Bc                j   V P                    Uu. uF  q"V9   g   K  VNK  	  upV n         V P                    Uu. uF  q!P                  V4      NK  	  upV n         \        V P                   4      V n        V P                  ;'       g%    \	        V P
                  \        P                  4      # u upi u upi )z1"Returns True if feature is non-empty afterwards.)r  r^   r2   r  
isinstanceFeatureParamsr   FeatureParamsSize)r'   r&  r3   s   && r    r'  r'    s     (,';';S';!N?RAA';SD=A=Q=QR=Q003=QRD4//0D   zH66   TRs   B+B+B0c                    \        V P                  4       UUu. uF;  w  r#VP                  P                  V4      '       g   VP                  R8X  g   K9  VNK=  	  upp# u uppi ))Returns the indices of nonempty features.pref)r9   FeatureRecordFeaturer'  
FeatureTag)r'   r&  r6   fs   &&  r    r'  r'    sX     d0011DAII$$^448N 	
1  s   6AAc                0   a  \        V 3R  lV 4       . 4      # )c              3     <"   T F?  pVSP                   8  g   K  SP                  V,          P                  P                  x  KA  	  R # 5ir   )FeatureCountr  r  r  r   s   & r    r!   r    s?      	
$4$$$ :Dq!))99$s
   A
/A
)r  r'   feature_indicess   f&r    r)  r)    s"    	
$	

 	 r+   c                    V P                  4        \        V P                  V4      V n        \        V P                  4      V n        \        V P                  4      # r   )r  r7   r  r2   r  rk   r  s   &&r    subset_featuresr    sG    %d&8&8/JDD../D!!""r+   c                    V P                    Uu. uF2  pVP                  P                  V4      '       g   K&  VP                  NK4  	  up# u upi )r  )SubstitutionRecordr  r'  FeatureIndex)r'   r&  r   s   && r    r'  r'    sG    
 (((A99##N3 	(  s
   #A
A
c                D   a \        V3R lV P                   4       . 4      # )r  c              3  Z   <"   T F   pVP                   P                  S4      x  K"  	  R # 5ir   )FeatureTableSubstitutionr'  )r   r  r&  s   & r    r!   !subset_lookups.<locals>.<genexpr>  s,      	
0 &&55nEE0r   r  FeatureVariationRecordr%  s   &fr    r'  r'    s*     	
00	
 	 r+   c                D   a \        V3R  lV P                   4       . 4      # )c              3     <"   T FK  pVP                   P                   F.  pVP                  S9   g   K  VP                  P                  x  K0  	  KM  	  R # 5ir   )r%  r!  r"  r  r  )r   vrr   r  s   &  r    r!   r    sI      	
100CC~~0 &AII%%C &1s
   ,A"Ar'  r  s   &fr    r)  r)    s(    	
11	
 	 r+   c                V   V P                  4        V P                   Uu. uF  q"P                  V9   g   K  VNK  	  upV n        V P                   F#  pVP                  VP                  4      Vn        K%  	  \	        V P                  4      V n        \        V P
                  4      # u upi r   )r  r!  r"  r^   r2   SubstitutionCountrk   r'   r  r   s   && r    r  r    s    ***ann.O*D $$(..q~~> % !8!89D&&''s
   B&B&c                `   V P                  4        V P                   Uu. uF%  q"P                  VP                  4       9   g   K#  VNK'  	  upV n        V P                   F  pWP                  ,          Vn        K  	  \	        V P                  4      V n        \        V P
                  4      # u upi r   )r  r!  r"  keysr2   r-  rk   r'   feature_index_mapr   s   && r    prune_featuresr3    s    ***ann@Q@V@V@X.X*D $$*>>: % !8!89D&&''s    B+B+c                   V P                  4        V P                   F  pVP                  P                  V4       K   	  V P                  '       dJ   V P                  R,          P                  P                  '       g   V P                  P                  4        K[  \        V P                  4      V n        \        V P                  4      # r   r  )	r  r(  r%  r  r-  popr2   FeatureVariationCountrk   r.  s   && r    r  r    s    ((	""22?C )
 	###++

"
"#4#45 	##'')!$T%@%@!AD**++r+   c                   V P                  4        V P                   F  pVP                  P                  V4       K   	  V P                  '       dJ   V P                  R,          P                  P                  '       g   V P                  P                  4        K[  \        V P                  4      V n        \        V P                  4      # r5  )	r  r(  r%  r3  r-  r6  r2   r7  rk   r1  s   && r    r3  r3    s    ((	""112CD )
 	###++

"
"#4#45 	##'')!$T%@%@!AD**++r+   c                   V P                   V9   d"   VP                  V P                   4      V n         MR V n         V P                   Uu. uF  q"V9   g   K  VNK  	  upV n        V P                   Uu. uF  q"V9   g   K  VP                  V4      NK  	  upV n        \        V P                  4      V n        \        V P                  ;'       g    V P                   R 8g  4      # u upi u upi   )ReqFeatureIndexr^   r"  r2   r  rk   )r'   r  r  s   && r    r  r    s    ..44T5I5IJ$$($5$5N$5qo9M$5ND +/*;*;*;QO?S a *;D D--.D!!BBT%9%9U%BCC Os   C!C!1C&>C&c                T   VP                  V P                  R 4      V n        V P                   Uu. uF!  q"VP                  4       9   g   K  W,          NK#  	  upV n        \	        V P                  4      V n        \        V P
                  ;'       g    V P                  R 8g  4      # u upi r:  )r  r<  r"  r0  r2   r  rk   )r'   r2  r  s   && r    r3  r3  $  s    ,001E1EuMD&*&7&7&7@Q@V@V@X;X&7D D--.D!!BBT%9%9U%BCC	s   B%B%c                    V P                   R ,          pV P                  R8w  d   VP                  V P                  4       \        V4      # )NNNr;  )r"  r<  appendr   r  s   & r    collect_featuresrA  .  s?    ''*Ou$t334o&&r+   c                   V P                   '       d1   V P                   P                  V4      '       g   V'       g   R V n         V P                   Uu. uF'  q3P                  P                  V4      '       g   K%  VNK)  	  upV n        \	        V P                  4      V n        \        V P
                  ;'       g    V P                   4      # u upi r   )DefaultLangSysr  LangSysRecordLangSysr2   LangSysCountrk   )r'   r  keepEmptyDefaultLangSysr3   s   &&& r    r  r  6  s     	##33ODD'"%%%a)B)B?)S%D D../D!!88T%8%899	   "C	8C	c                   V P                   '       d1   V P                   P                  V4      '       g   V'       g   R V n         V P                   Uu. uF'  q3P                  P                  V4      '       g   K%  VNK)  	  upV n        \	        V P                  4      V n        \        V P
                  ;'       g    V P                   4      # u upi r   )rC  r3  rD  rE  r2   rF  rk   )r'   r2  rG  r3   s   &&& r    r3  r3  E  s     	##223DEE'"%%%a)A)ABS)T%D D../D!!88T%8%899	rH  c                   V P                    Uu. uF  qP                  P                  4       NK  	  ppV P                  '       d*   VP	                  V P                  P                  4       4       \        \        V. 4      4      # u upi r   )rD  rE  rA  rC  r@  r   r  )r'   r3   r  s   &  r    rA  rA  T  sj    =A=O=OP=Oyy113=OOPt22CCEFc/2.// Qs   "Bc                   V P                    Uu. uF=  pVP                  P                  WP                  R 8H  4      '       g   V'       g   K;  VNK?  	  upV n         \	        V P                   4      V n        \        V P
                  4      # u upi DFLT)ScriptRecordScriptr  	ScriptTagr2   ScriptCountrk   )r'   r  retain_emptyrh   s   &&& r    r  r  \  sx    
 """A88##O[[F5JKK 	
"D 4,,-D  !!   8B	B	c                   V P                    Uu. uF=  pVP                  P                  WP                  R 8H  4      '       g   V'       g   K;  VNK?  	  upV n         \	        V P                   4      V n        \        V P
                  4      # u upi rL  )rN  rO  r3  rP  r2   rQ  rk   )r'   r2  rR  rh   s   &&& r    r3  r3  i  sy    
 """A88""#4kkV6KLL 	
"D 4,,-D  !!rS  c                N    \        \        R  V P                   4       . 4      4      # )c              3  T   "   T F  qP                   P                  4       x  K   	  R # 5ir   )rO  rA  r   rh   s   & r    r!   #collect_features.<locals>.<genexpr>x  s      R@Q1884466@Qs   &()r   r  rN  r   s   &r    rA  rA  v  s!    cR@Q@QRTVWXXr+   EBLCc                   V P                    F}  pVP                   F6  pVP                   Uu. uF  qDVP                  9   g   K  VNK  	  upVn        K8  	  VP                   Uu. uF  qUP                  '       g   K  VNK  	  upVn        K  	  V P                    Uu. uF  qP                  '       g   K  VNK  	  upV n         R # u upi u upi u upi r   )strikesindexSubTablesnamesr(   )r'   rh   strikeindexSubTablenr6   s   &&    r    rm   rm   |  s    ,,#22M.;.A.A"S.A!((]11.A"SM 3,2,A,A M,AqWW,A M   $||@|!/?/?AA|@DL	 #T M@s#   CC$C	<C	C4CEBDTc           
         V P                    UUu. uF-  q!P                   Uu/ uF  q3V9   g   K  W2V,          bK  	  upNK/  	  pppV Uu. uF  q"'       g   K  VNK  	  upV n         R # u upi u uppi u upi r   )
strikeDatar(   )r'   rh   r^  r   rc  s   &&   r    rm   rm     sr     GKooFUFxx7x!;1Ix7o  
 -7AJ&&vvJADO 	8
 Bs&   A-A(A(A-
	A3A3(A-sbixc                    V P                   P                  4        FG  pVP                   Uu/ uF(  q3VP                  9   g   K  W2P                  V,          bK*  	  upVn        KI  	  R # u upi r   )r[  r[   r(   )r'   rh   r^  r   s   &&  r    rm   rm     sV    ,,%%'67hhUhv}}BT,MM!,,hU (  Vs   A(A(GSUBc                   V P                   Vn         V P                   P                  '       d&   V P                   P                  P                  4       pM. pV P                   P                  '       d'   V P                   P                  P	                  V4      pM. p\        V P                   R R4      '       d,   W0P                   P                  P	                  V4      ,          p\        V4      pV P                   P                  '       d   / Vn	         \        VP                  4      pV F  pWPP                   P                  P                  8  d   K)  V P                   P                  P                  V,          '       g   KX  V P                   P                  P                  V,          P                  V4       K  	  WAP                  8X  g   K   T=	V= R# FeatureVariationsN)r  
ScriptListrA  FeatureListr)  r   ri  r   r  r  r  r(   r  r  ri   )r'   rh   r  r&  orig_glyphsr6   s   &&    r    ri   ri     sI   jjAGzz**//@@Bzz//??Ptzz.55**66FFWW/Nzz#AHH-K#

--999zz,,33A66

%%,,Q/>>qA $ hh&N	r+   GPOSc                    VP                   Vn        V P                  P                  '       d'   V P                  P                  P	                  V4      pM. pV P                  V4       R # r   )glyphs_gsubedr(   r  r  rm   r'  )r'   rh   r&  s   && r    rm   rm     sM    AHzz..<<Q?'r+   c                H    V P                   \        P                  ! R 4      8H  # )rf  )r  r   getTableClassr   s   &r    retain_empty_scriptsrr    s     >>U00888r+   c                ^   V P                   P                  '       d&   V P                   P                  P                  V4       V P                   P                  '       d'   V P                   P                  P                  V4      pM. p\	        V P                   RR4      '       d,   W P                   P
                  P                  V4      ,          p\        V4      pV P                   P                  '       d&   V P                   P                  P                  V4       \	        V P                   RR4      '       d&   V P                   P
                  P                  V4       V P                   P                  '       d6   V P                   P                  P                  W P                  4       4       R# R# )zVRetains specified lookups, then removes empty features, language
systems, and scripts.ri  N)
r  r  r'  rk  r   ri  r   r  rj  rr  )r'   r&  r  s   && r    r'  r'    s#    zz

,,^<zz**00??Otzz.55::77FF~VV 1Ozz

..?tzz.55

$$44_Ezz

--668	
 r+   c                    V P                   P                  '       d(   V P                   P                  P                  V4       R# R# r  )r  r  r  r%  s   &&r    r  r    s1     zz

,,^< r+   c                   V P                   P                  '       d&   V P                   P                  P                  4       pM. pV P                   P                  '       d'   V P                   P                  P	                  V4      pM. p\        V P                   RR4      '       d,   W0P                   P                  P	                  V4      ,          p\        V4      pV P                   P                  '       d'   V P                   P                  P                  V4      pM. pV'       d   V P                  V4       R# V P                  V4       R# )z/Remove (default) or neuter unreferenced lookupsri  N)r  rj  rA  rk  r)  r   ri  r   r  r  r'  r  )r'   rF   r  r&  s   &&  r    prune_lookupsrv    s     zz**//@@Bzz//??Ptzz.55**66FFWW/Nzz..>>~NN+N+r+   c                ^   V P                   P                  '       d   \        V P                   P                  P                  4       UUu. uF  w  r#VP                  V9   g   K  VNK  	  pppV P                   P                  P                  V4       \        V P                   R R4      '       d&   V P                   P                  P                  V4       M. pV P                   P                  '       d6   V P                   P                  P                  W@P                  4       4       R# R# u uppi rh  )
r  rk  r9   r  r  r  r   ri  rj  rr  )r'   feature_tagsr6   r  r  s   &&   r    subset_feature_tagsry    s    zz "$**"8"8"F"FG
G|||+ AG 	 

 	

..?4::2D99JJ((88Izz

--668	
 
s   	D)#D)c                   / p\        4       pV Fy  pR V9   d   VP                  R 4      MVR3w  rVVP                  VP                  ^4      4       VP	                  V\        4       4      P                  VP                  ^4      4       K{  	  V P
                  P                  '       Ed   V P
                  P                  P                   Uu. uF  qwP                  V9   g   K  VNK  	  upV P
                  P                  n        \        V P
                  P                  P                  4      V P
                  P                  n
        V P
                  P                  P                   F  pVP                  V9   g   K  RW(P                  ,          9  g   K/  VP                  P                   U	u. uF(  p	V	P                  W(P                  ,          9   g   K&  V	NK*  	  up	VP                  n        \        VP                  P                  4      VP                  n        RW(P                  ,          9  g   K  RVP                  n        K  	  R# R# u upi u up	i ).r   z*   dfltN)r>   splitr  ljust
setdefaultr  rj  rN  rP  r2   rQ  rO  rD  
LangSysTagrF  rC  )
r'   tagslangsysscript_tagstag
script_taglang_tagrh   recordr3   s
   &&        r    subset_script_tagsr    s   G%K14syy~#s

((+,:su-11(..2CD 
 zzzz,,99.
9![[K=WAA9.


* -0

0E0E0R0R,S

)jj++88F7*vWEUEU=V/V $]]88/8||w/?/?'@@ A8/+
 .11L1L-M*)9)9!::37FMM0 9 .
/s   I"I-#IIc                Z   V P                   P                  '       d&   V P                   P                  P                  4       pM. pV P                  V4      w  rV P                   P                  '       d&   V P                   P                  P                  V4       \        V P                   RR4      '       d&   V P                   P                  P                  V4       V P                   P                  '       d6   V P                   P                  P                  W P                  4       4       R# R# )zRemove unreferenced and duplicate features in FeatureList
Remove unreferenced features and remap duplicate feature indices in ScriptList and FeatureVariations
ri  N)
r  rj  rA  remap_duplicate_featuresrk  r  r   ri  r3  rr  )r'   r  r2  s   &  r    r3  r3  /  s    
 zz**//@@B+/+H+H,(_ zz

..?tzz.55

$$334EFzz

,,88:	
 r+   c                :   V P                   P                  P                  p/ p/ pV F  pW%,          pVP                  pVP	                  V4      pVf   \        V.4      W7&   WTV&   K@  Rp	V F  p
W*,          V8X  g   K  Rp	WV&    M	  V	'       d   Kj  VP                  V4       WTV&   K  	  / p^ pV F<  pVP	                  WU4      pVP	                  V4      pVf   WV&   V^,          pK8  WV&   K>  	  \        \        R VP                  4        4       . 4      4      pW3# )zPReturn retained feature indices(without duplicates) and remapped feature indicesFTc              3  8   "   T F  p\        V4      x  K  	  R # 5ir   )rZ   rW  s   & r    r!   +remap_duplicate_features.<locals>.<genexpr>p  s     76T!WW6r   )
r  rk  r  r  r  r>   r  r   r  r[   )r'   r  featuresunique_featuresduplicate_featuresr6   r  r  same_tag_featuresfoundother_ifeature_mapnew_idxunique_irP   retained_feature_indicess   &&              r    r  r  F  s6    zz%%33HOKll+//4$#&s8O $%q!(G A%(/1%	 ) u!!!$$%q!' , KG%))!/OOH%9$NqLGN   *7o4467<  %22r+   c                    R VP                   9  d   V P                  VP                   4       R VP                  9  d   V P                  VP                  4       V P	                  RR7       R# )r   Fr   T)layout_scriptsr  layout_featuresry  rv  r+  s   &&&r    prune_pre_subsetr  u  s\     '((( 6 67
')))  !8!89U#r+   c                   V P                   pVP                  '       d   VP                  '       g   R # VP                  P                  pVP                  P                   EFd  pVP
                  P                  pV'       g   K$  VP
                  P                  R,           EF  pVP                  p\        VP                  4      \        VP                  4      8w  d   K?  VP                  R8H  VP                  R8H  8w  d   Kb  VP                  R8w  d*   W$P                  ,          W&P                  ,          8w  d   K  \        \        VP                  4      4       F;  pW$P                  V,          ,          W&P                  V,          ,          8w  g   K:   K  	  VP
                  P                  P                  V4       EK!  	  EKg  	  R # )Nr?  r;  )r  rj  rk  r  rN  rO  rC  rD  rE  r2   r"  r<  r  remove)r'   r  r  rh   r.   lrr3   r6   s   &       r    remove_redundant_langsysr    sD   JJE5#4#4#4  ..H**HH##((((++B

A1>>"c!..&99!!U*0A0AU0JK  E)--.(;L;L2MM3q~~./NN1-.(>>!;L2MM 0
 &&--b1# ,	 +r+   c                4   V P                   pV P                  4        VP                  '       d   VP                  P                  W4       VP                  '       g   R Vn        VP                  '       d!   V P                  4        V P                  4        \        VR4      '       dr   VP                  '       d6   VP                  '       d   VP                  P                  '       g   R Vn        VP                  '       g   VP                  R8X  d   RVn
        R# )Nri  i     T)r  rv  r  r   rk  r  r3  r  ri  r(  Versionr'   r)   r   r  s   &&& r    r   r     s    JJE**49  %%' u)**"""%"9"9"P"P"P&*E# &&&5==J+F&EMr+   GDEFc                @   VP                   pV P                  pVP                  '       d   VP                  P                  P	                  V4      p\        VP                  P                  V4      VP                  n        \        VP                  P                  4      VP                  n        VP                  '       dP   VP                  P                  P                  4        UUu/ uF  w  rVWR9   g   K  WVbK  	  uppVP                  n
        VP                  '       dP   VP                  P                  P                  4        UUu/ uF  w  rVWR9   g   K  WVbK  	  uppVP                  n
        VP                  '       d   VP                  P                  P	                  V4      pVP                  P                  pV Uu. uF(  qV8  g   K  VP                  P                  V,          NK*  	  upVP                  n        \        VP                  P                  4      VP                  n        \!        VR 4      '       d   VP"                  '       d   VP"                  p	V	P                   F  p
V
'       g   K  V
P	                  V4       K   	  \%        V	P                  4       UUu. uF  w  rVP&                  '       g   K  VNK  	  uppVn        V	P                   Uu. uF  qP&                  '       g   K  VNK  	  upV	n        R# u uppi u uppi u upi u uppi u upi )MarkGlyphSetsDefT)ro  r  LigCaretListr   rB   r7   r   r2   LigGlyphCountMarkAttachClassDefrJ   rO   GlyphClassDef
AttachListr   AttachPointr  r  r9   r(   r  )r'   rh   r(   r  r4   r   rP   r   r6   markGlyphSetscoverager   s   &&          r    rm   rm     si   __FJJE$$--44V<&253E3E3N3NPW&X#+.u/A/A/J/J+K("55??EEG.
GTQ1;DADG.
  * "00::@@B)
BTQakDADB)
% ""++226:%%00
5<(
5<J+E((++W(
$ '*%*:*:*F*F&G#u())e.D.D.D..%..Hx' / +4M4J4J*KX*K$!qxxAA*KX-:-C-C!P-Cxx!!-C!P/.
)
(
 Y!Ps<   &
L5L
L
L
 L!L$L?LL4Lc                   R V 9  d   R# V R ,          pVP                   p\        VR4      '       g   R# VP                  p\        4       pVP	                  V4       RV 9   d#   V R,          P                   P	                  V4       VP                  V4      pVP                  V4       RV 9   d%   V R,          P                   P                  V4       R# R# )r  NVarStorerm  )r  r  r  r>   collect_device_varidxessubset_varidxesremap_device_varidxes)r)   gdefr  storeusedVarIdxes
varidx_maps   &     r    
_pruneGDEFr    s    T<DJJE5*%%NNE5L 
!!,/~V22<@ &&|4J 

+~V00< r+   c                n   V P                   pVP                  '       d$   VP                  P                  '       g   R Vn        VP                  '       d$   VP                  P                  '       g   R Vn        VP
                  '       d$   VP
                  P                  '       g   R Vn        VP                  '       d$   VP                  P                  '       g   R Vn        \        VR4      '       d?   \        V4       VP                  P                  ^ 8X  d   VP                  R8X  d   RVn        \        VR4      '       d/   VP                  '       d   VP                  P                  '       g    R Vn        VP                  R8X  d   RVn        \        VP                  ;'       g    VP                  ;'       gw    VP
                  ;'       gc    VP                  ;'       gO    VP                  R8  ;'       d    VP                  ;'       g$    VP                  R8  ;'       d    VP                  4      # )Nr  i  i  r  r  )r  r  r  r  rJ   r  r  r   r  r  r  VarDataCountr  r  r   rk   r  s   &&& r    r   r   	  s   JJE%"4"4"B"B"B!(@(@(J(J(J#' 5#6#6#@#@#@" 0 0 ; ; ;uj!!4>>&&!+}}
* *E-..%%%%%...!%==J&&EM 	< 	<##	< 	<	< 	< 	< 	< MMZ'BBE,B,B		< 	<
 MMZ'::ENN r+   kernc                    V P                    Uu. uF  p\        VR 4      '       g   K  VNK  	  upV n         \        V P                   4      # u upi )	kernTable)
kernTablesr  rk   r'   r)   r   ts   &&& r    r  r  0	  s>     #'//M/QWQ5Lqq/MDO   Ns
   AAc           	     ~   VP                   pV P                   FM  pVP                  P                  4        UUUu/ uF  w  w  rEpWB9   g   K  WR9   g   K  WE3VbK  	  upppVn        KO  	  V P                   Uu. uF  q3P                  '       g   K  VNK  	  upV n        \	        V P                  4      # u upppi u upi r   )ro  r  r  rO   rk   )r'   rh   r(   r  r  r   rP   s   &&     r    rm   rm   7	  s    __F__ [[..0
0	{  { QFAI0
  #'//A/Q[[qq/ADO  

 Bs   B3
B3
B3
8B:B:vmtxc                    \        V P                  VP                  4      V n        VP                   F  pRV P                  V&   K  	  \	        V P                  4      # )r   r   r   )r/   metricsr(   glyphs_emptiedrk   r'   rh   r   s   && r    rm   rm   D	  sD    ahh7DL Q r+   hmtxc                    \        V P                  VP                  4      V n        VP                   F  pRV P                  V&   K  	  R# )r   Tr  )r/   r  r(   r  r  s   && r    rm   rm   L	  s8    ahh7DL Q r+   hdmxc           	     >   V P                   P                  4        UUu/ uF  w  r#V\        W1P                  4      bK  	  uppV n         V P                    F,  pVP                   F  p^ V P                   V,          V&   K  	  K.  	  \        V P                   4      # u uppi rv  )r  rO   r/   r(   r  rk   )r'   rh   szr3   r   s   &&   r    rm   rm   T	  s{    <@IIOO<MN<M52\!XX..<MNDIii!!A DIIbM! "  		?	 Os   !Bankrc                B   V P                   P                  pVP                  ^ 8X  g   Q RVP                  ,          4       hVP                   Uu/ uF(  q3VP                  9   g   K  W2P                  V,          bK*  	  upVn        \        VP                  4      ^ 8  # u upi )r   zunknown 'ankr' format %s)r  AnchorPointsr   r(   Anchorsr2   r'   rh   r  ro   s   &&  r    rm   rm   ]	  s    JJ##E<<1G85<<GG1219emm=S#}}U##EM u}}!!s   B%Bbslnc                    V P                   P                  pVP                  R9   d(   VP                  P	                  VP
                  4       R# R# )r   N)r   r   )r  Baseliner   r(   r  StandardGlyph)r'   rh   r  s   && r    ri   ri   g	  s8    JJE||v	U(() r+   c                6   V P                   P                  pVP                  R9   d   VP                   Uu/ uF(  pW2P                  P                  W2P                  4      bK*  	  pp\        V4      ^ 8  dc   \        VP                  4       4      P                  ^4      ^ ,          w  rVWRn        VP                  4        UUu/ uF  w  r7Wu8w  g   K  W7bK  	  ppp\        V4      ^ 8  d	   WBn        R# ^^ ^^/VP                  ,          Vn        V=R# u upi u uppi )r   T)r   r   )r  r  r   r(   BaselineValuesr  DefaultBaseliner2   r   r[   most_commonrO   )r'   rh   r  ro   	baselines
mostCommon_cntr   s   &&      r    rm   rm   n	  s   JJE||v 
! ''++E3H3HII! 	 
 y>A&y'7'7'9:FFqI!LJ$.!2;//2CW2Cheq2CIWy>A#,   q!Q<5EL$
 Xs   .D 
DDlcarc                B   V P                   P                  pVP                  R9   d]   VP                   Uu/ uF(  q3VP                  9   g   K  W2P                  V,          bK*  	  upVn        \        VP                  4      ^ 8  # Q RTP                  ,          4       hu upi )r   zunknown 'lcar' format %s)r   r   )r  LigatureCaretsr   r(   Caretsr2   r  s   &&  r    rm   rm   	  s    JJ%%E||v45HH
4<5@U&E<<&&H
 5<< 1$$?05<<??u
s   BBgvarc                    VP                   '       d3   VP                  '       g!   . V P                  VP                  ^ ,          &   R# r   T)notdef_glyphnotdef_outline
variations
glyphOrderr+  s   &&&r    r  r  	  s3    G$:$:$:.0*+r+   c                    \        V P                  VP                  4      V n        \        V P                  4      V n        \        V P                  4      # r   )r/   r  r(   r2   
glyphCountrk   r  s   &&r    rm   rm   	  s7    "4??AHH=DO$//*DO  r+   c                2   VP                   P                  4        UUu/ uF  w  r4W1V,          bK  	  pppWP                   V P                  ,          ,          pV P                  P                  4        F  w  rxWP                  8  d   TM^ WW&   K  	  V# u uppi rv  )rf   rO   last_retained_glyphreverseEmptiedGlyphMaplast_retained_order)	rh   r  	table_mapr  rP   map_last_idxr   r6   s	   &&&      r    _remap_index_mapr  	  s    )2):):)@)@)BC)BA!})BDC ++A,A,ABCH((..0"7"77(Q 1K Ds   BHVARc                b   V P                   p\        4       p\        4       pR pVP                  '       dn   \        VP                  P                  VP
                  4      VP                  n        VP                  VP                  P                  P                  4       4       MOVP                  VP                  P                  4       4       VP                  4       pVP                  P                  pVP                  '       dm   \        VP                  P                  VP
                  4      VP                  n        VP                  VP                  P                  P                  4       4       VP                  '       dm   \        VP                  P                  VP
                  4      VP                  n        VP                  VP                  P                  P                  4       4       VP                  P                  W5VR7      pVP                  '       d&   \!        WVP                  4      VP                  n        VP                  '       d&   \!        WVP                  4      VP                  n        VP                  '       d&   \!        WVP                  4      VP                  n        R# F)retainFirstMapadvIdxesT)r  r>   AdvWidthMapr/   rf   r(   re   r[   reverseOrigGlyphMapcopyr   retain_gidsLsbMapRsbMapr  r  r  r'   rh   r  used	advIdxes_retainAdvMapr  s   &&     r    rm   rm   	  s   JJE5DIL$01B1B1J1JAHH$U!E%%--4467A))0023IIK	yy,,|||+ELL,@,@!((KELL((//12|||+ELL,@,@!((KELL((//12//I 0 J $4QEDUDU$V!|||/u||L|||/u||L r+   VVARc                   V P                   p\        4       p\        4       pR pVP                  '       dn   \        VP                  P                  VP
                  4      VP                  n        VP                  VP                  P                  P                  4       4       MOVP                  VP                  P                  4       4       VP                  4       pVP                  P                  pVP                  '       dm   \        VP                  P                  VP
                  4      VP                  n        VP                  VP                  P                  P                  4       4       VP                  '       dm   \        VP                  P                  VP
                  4      VP                  n        VP                  VP                  P                  P                  4       4       VP                  '       dm   \        VP                  P                  VP
                  4      VP                  n        VP                  VP                  P                  P                  4       4       VP                  P!                  W5VR7      pVP                  '       d&   \#        WVP                  4      VP                  n        VP                  '       d&   \#        WVP                  4      VP                  n        VP                  '       d&   \#        WVP                  4      VP                  n        VP                  '       d&   \#        WVP                  4      VP                  n        R# r  )r  r>   AdvHeightMapr/   rf   r(   re   r[   r  r  r   r  TsbMapBsbMapVOrgMapr  r  r  r  s   &&     r    rm   rm   	  s,   JJE5DIL%1%2D2D2L2Lahh%W"E&&..5578A))0023IIK	yy,,|||+ELL,@,@!((KELL((//12|||+ELL,@,@!((KELL((//12}}} ,U]]-B-BAHH MEMM))0023//I 0 J %5aUEWEW%X"|||/u||L|||/u||L}}} 0 N r+   VORGc                    V P                   P                  4        UUu/ uF  w  r#W!P                  9   g   K  W#bK  	  uppV n         \        V P                   4      V n        R # u uppi r   )VOriginRecordsrO   r(   r2   numVertOriginYMetricsrl   s   &&  r    rm   rm   	  s[     ,,2244XX4D "%T%8%8!9D	s
   A"A"opbdc                &   V P                   P                  pVP                  ^ 8X  d]   VP                   Uu/ uF(  pW2P                  9   g   K  W2P                  V,          bK*  	  upVn        \        VP                  4      ^ 8  # VP                  ^8X  d]   VP                   Uu/ uF(  pW2P                  9   g   K  W2P                  V,          bK*  	  upVn        \        VP                  4      ^ 8  # Q RTP                  ,          4       hu upi u upi )r   zunknown 'opbd' format %s)r  OpticalBoundsr   r(   OpticalBoundsDeltasr2   OpticalBoundsPointsr  s   &&  r    rm   rm   
  s    JJ$$E||q %
!111 4E,,U33!%
!
 5,,-11		 %
!111 4E,,U33!%
!
 5,,-11?05<<??u%
%
s   D	D	#D:Dpostc                8    VP                   '       g   R V n        R# )      @T)glyph_names
formatTyper+  s   &&&r    r  r  
  s    r+   c                    . V n         R # r   )
extraNamesr  s   &&r    rm   rm   
  s    DOr+   propc                   V P                   P                  pVP                  ^ 8X  d   VP                  ^ 8g  # VP                  ^8X  d   VP                   Uu/ uF(  q3VP
                  P                  W2P                  4      bK*  	  upVn        \        VP
                  P                  4       4      P                  ^4      ^ ,          w  rEWBn        VP
                  P                  4        UUu/ uF  w  r2W$8w  g   K  W2bK  	  uppXn        \        VP
                  4      ^ 8X  d   V=^ Vn        VP                  ^ 8g  # R# Q RTP                  ,          4       hu upi u uppi )r   Tzunknown 'prop' format %s)r  GlyphPropertiesr   DefaultPropertiesr(   
Propertiesr  r   r[   r  rO   r2   )r'   rh   r  r   r  r  s   &&    r    rm   rm   #
  s(   ::%%D{{a%%**		GHxx
GO!t""1&<&<==x
 #4??#9#9#;<HHKAN
!+#'??#8#8#:
#:d>PGAG#:
 t1$DK))Q..>04;;>>u


s   .E*
E9Ec                J   a \        4       oV3R  lpV P                  W4       S# )c                   < V P                   \        P                  P                  \        P                  P                  09   d   SP                  V P                  4       R # R # r   )r   r   PaintFormat
PaintGlyphPaintColrGlyphr  Glyph)paintresults   &r    callback$_paint_glyph_names.<locals>.callback=
  sI    <<  ++  //
 
 JJu{{#	
r+   )r>   traverse)r"  colrr$  r#  s   && @r    _paint_glyph_namesr(  :
  s"    UF$ 
NN4"Mr+   COLRc                   V P                   ^ 8  dk   V P                  V P                  4      V n        V P                  P                  P
                   Uu/ uF  pVP                  VP                  bK  	  upV n        VP                  pV'       d   \        4       pV F  pV P                  P                  V. 4       F  pVP                  VP                  4       K   	  V P                   ^ 8  g   KT  V P                  P                  V4      pVf   Ku  VP                  \        WpP                  4      4       K  	  WAP                  ,          pVP                  P                  V4       TpK  R# u upi r   )version_decompileColorLayersV0r  ColorLayersBaseGlyphListBaseGlyphPaintRecord	BaseGlyphPaintColorLayersV1r(   r>   r  r  r   re   r(  )r'   rh   r   	decomposelayersr   layerr"  s   &&      r    ri   ri   H
  s   ||a
  77

C zz//DD
D MM399$D

 I
A))--a4

5::& 5 ||a**..q1$MM"4UJJ"GH  	((		 
s    E,c                ~   ^ RI Hp ^ RIHpHp VP
                  Vn        VP                   Uu/ uF(  qUV P                  9   g   K  WPP                  V,          bK*  	  upV n        V P                  ^ 8X  d   \        V P                  4      # V! V P                  P                  V P                  P                  4      pT! V Uu/ uF  qUVP                  9   g   K  WVV,          bK   	  up4      w  V P                  n        V P                  n        V =V P                  P                  ee   V P                  P                  P                  pV Uu/ uF  qUVP                  9   g   K  WWV,          bK   	  upV P                  P                  n        V P                  pV P                  P                  P                   '       g   ^ V n        V =
\        V4      # T! V P                  V UU	u/ uF0  qUW,           U	u. uF  qP"                  V	P$                  3NK  	  up	bK2  	  up	p4       V =R# u upi u upi u upi u up	i u up	pi )r   )unbuildColrV1)buildColrV1populateCOLRv0T)fontTools.colorLib.unbuilderr7  fontTools.colorLib.builderr8  r9  glyphs_colredr(   r-  r+  rk   r  	LayerListr.  r2  ClipListclipsr/  r   colorID)
r'   rh   r7  r8  r9  r   colorGlyphsV1r?  layersV0r5  s
   &&        r    rm   rm   f
  s   :F AH )*(019I9I4IAD ||qD$$%%!$**"6"6

8P8PQM5@&3EmAHH}	!	mE62DJJ$**2 	zz&

##)):?$Q%Q=[Qa[%$Q

!H::##888JH~

LTUHqhkBkUjj%--(kB	BHU 	 = 	F %R CUs;   H%H%H*H*H/"H/#H92 H4H94H9CPALc                t  a R V9   d   R# VP                  R4      pV'       g   R# \        \        4      oV3R lpVP                  ^ 8X  dN   VP                  P                  4        F.  pV F%  pSVP                  ,          P                  V4       K'  	  K0  	  MVP                  P                  '       dJ   VP                  P                  P                   F%  pSVP                  ,          P                  V4       K'  	  VP                  P                  P                   F)  pVP                  P                  VP                  V4       K+  	  \!        SP#                  4       4      R0,
          pV P$                   FH  p	\'        V	4       U
Uu. uF  w  rW9   g   K  VNK  	  upp
V	R&   \)        V	4      \)        V4      8X  d   KH  Q h	  \'        \+        V4      4       FR  w  rSV,           F@  p\-        VR4      '       d	   Wn        K  \-        VR4      '       d	   Wn        K7  \/        V4      h	  KT  	  \)        V P$                  ^ ,          4      V n        V P                  ^8X  d@   . p\'        V P2                  4       F  w  rW9   g   K  VP                  V4       K   	  Wn        \5        V P0                  4      # u upp
i )	zSVG Tr)  Fc                  < \        V R 4      '       d%   SV P                  ,          P                  V 4       R# \        V R4      '       dB   V P                  P                   F%  pSVP                  ,          P                  V4       K'  	  R# R# )PaletteIndex	ColorLineN)r  rF  r@  rG  	ColorStop)r"  stopcolors_by_indexs   & r    collect_colors_by_index2prune_post_subset.<locals>.collect_colors_by_index
  sh    5.))E../66u=UK((11 1 1299$? 2 )r+   r;  r?  r@  rF  )r  r   rZ   r+  r-  r[   r@  r@  r  LayerRecordArrayLayerRecordrF  r.  r/  r1  r&  r>   r0  palettesr9   r2   r%   r  AssertionErrornumPaletteEntriespaletteEntryLabelsrk   )r'   r)   r   r'  rK  r4  r5  r  retained_palette_indicespaletter6   r   	new_index	old_indexkept_labelslabelrJ  s   &&&             @r    r   r   
  s0    ~88FD!$'O@ ||q&&--/F.55e<   0 ::&&&44@@ 2 23::5A Ajj..CCFLL!!$**.EF D
  #?#7#7#9:fXE==$-g$6X$6DA!:Waa$6X
7|s#;<<<< ! !*&1I*J K	%i00Fvy))!*00&/#$V,, 1 !L !q!12D||q!$"9"9:HA,""5) ; #.&&'') Ys   	
J4J4c                
   \        4       pV P                   F  pVP                  VP                  4       K   	  V P                  '       d9   V P                  P
                   F  pVP                  VP                  4       K   	  V# r   )r>   MathGlyphVariantRecordr  VariantGlyphGlyphAssemblyPartRecordsro   )r'   r(   variantsrP   r   s   &&   r    ri   ri   
  s`    uH((Q^^$ )##//ALL! 0Or+   c                   \        VP                  4      p\        4       pV P                  '       dV   V P                  P	                  V4      pV F4  pVP                  V P                  V,          P                  V4      4       K6  	  V P                  '       dV   V P                  P	                  V4      pV F4  pVP                  V P                  V,          P                  V4      4       K6  	  VP                  P                  V4       R # r   )
r  r(   r>   VertGlyphCoverager:   re   VertGlyphConstructionri   HorizGlyphCoverageHorizGlyphConstruction)r'   rh   r(   r^  r4   r6   s   &&    r    ri   ri   
  s    qxx FuH((226:AOOD66q9HHPQ  ))33F;AOOD77:II&QR  HHOOHr+   VARCc                8   V P                   P                  P                  VP                  4      p\	        V P                   P
                  P                  V4      V P                   P
                  n        \        V P                   P
                  P                  4      # r   )r  r   rB   r(   r7   VarCompositeGlyphsVarCompositeGlyphrk   r'   rh   r4   s   && r    rm   rm   
  si    jj!!((2G6B

%%777DJJ!!3 

--??@@r+   c                ^   V P                   P                  f   R # \        V P                   P                  P                  4       UUu/ uF  w  r#W2bK	  	  pppV P                   P                  P
                  pVP                  p\        4       p\        V4      pV'       d   Tp	\        4       pV	 Fs  pW79   d   K  VP                  V4      p
V
f   K"  WZ,          pVP                   F9  pVP                  pVP                  V4       W9  g   K(  VP                  V4       K;  	  Ku  	  K  R # u uppi r   )r  rf  r9   r   r(   rg  r>   r  
components	glyphNamer  )r'   rh   r6   rk  glyphMapglyphRecordsr(   r  newoldNewidxro   compr   s   &&            r    ri   ri   
  s    zz$$,1:4::;N;N;U;U1VW1V	1VHW::00BBLXXFeG
f+C
eI#,,y)C{ %E((~~

4 &GGDM	 )    Xs   D)c                (   V P                   pVP                  pVe>   \        4       pVP                  V4       VP	                  V4      pVP                  V4       VP                  P                  pVEe    \        4       pVP                  P                   FA  p	V	P                   F.  p
V
P                  f   K  VP                  V
P                  4       K0  	  KC  	  \        V4      p\        Wx4      VP                  n        \        V4       UUu/ uF  w  rWbK	  	  pppVP                  P                   F=  p	V	P                   F*  p
V
P                  f   K  WP                  ,          V
n        K,  	  K?  	  VP                   pVEe   VP"                  p\        4       pVP                  P                   FA  p	V	P                   F.  p
V
P$                  f   K  VP                  V
P$                  4       K0  	  KC  	  \        V4      p\        W4      Vn        \        V4       UUu/ uF  w  rWbK	  	  pppVP                  P                   F=  p	V	P                   F*  p
V
P$                  f   K  WP$                  ,          V
n        K,  	  K?  	  R# u uppi u uppi r  )r  MultiVarStorer>   collect_varidxesr  remap_varidxesAxisIndicesListItemrf  rg  rj  axisIndicesIndexr  r%   r7   r9   ConditionListConditionTableconditionIndex)r'   r)   r   r  r  r  r  axisIndicesListusedIndicesro   rq  rn  oldrf   conditionListconditionTabless   &&&             r    r   r     s+   JJEEu|,**<8
Z(++00O"e--??E((((4OOD$9$9: ) @ [)%1/%O",5k,BC,B38,BC--??E((((4,34I4I,JD) ) @
 ''M '66e--??E((&&2OOD$7$78 ) @ [)'3O'Q$,5k,BC,B38,BC--??E((&&2*12E2E*FD' ) @
 - D  Ds   JJMATHc                    V P                   P                  '       d(   V P                   P                  P                  V4       R # R # r   )r  MathVariantsri   r  s   &&r    ri   ri   F  s/    zz

..q1 r+   c                    V P                   P                  VP                  4      p\        V P                  V4      V n        \        V P                  4      V n        \        V P                  4      # r   )r   rB   r(   r7   ItalicsCorrectionr2   ItalicsCorrectionCountrk   rh  s   && r    rm   rm   L  sS    mm""188,G)$*@*@'JD"%d&<&<"=D++,,r+   c                    V P                   P                  VP                  4      p\        V P                  V4      V n        \        V P                  4      V n        \        V P                  4      # r   )TopAccentCoveragerB   r(   r7   TopAccentAttachmentr2   TopAccentAttachmentCountrk   rh  s   && r    rm   rm   T  sU    $$++AHH5G+D,D,DgND$'(@(@$AD!--..r+   c                    V P                   P                  VP                  4      p\        V P                  V4      V n        \        V P                  4      V n        \        V P                  4      # r   )MathKernCoveragerB   r(   r7   MathKernInfoRecordsr2   MathKernCountrk   rh  s   && r    rm   rm   \  sU    ##**1884G+D,D,DgNDT556D""##r+   c                   V P                   '       d   V P                   P                  V4       V P                  '       d   V P                  P                  V4       V P                  '       d   V P                  P                  V4       V P                  '       d&   V P                  P                  VP                  4       R # r   )MathItalicsCorrectionInform   MathTopAccentAttachmentMathKernInfoExtendedShapeCoveragerB   r(   r  s   &&r    rm   rm   d  s    %%%&&44Q7###$$2215''*!!!""))!((3r+   c                   V P                   '       d[   V P                   P                  VP                  4      p\        V P                  V4      V n        \        V P                  4      V n        V P                  '       d[   V P                  P                  VP                  4      p\        V P                  V4      V n        \        V P                  4      V n	        R # r   )
r`  rB   r(   r7   ra  r2   VertGlyphCountrb  rc  HorizGlyphCountrh  s   && r    rm   rm   q  s    ((//9%1$2L2Lg%V"!$"<"<=))00:&243N3NPW&X#"4#>#>?r+   c                ,   VP                   Vn        V P                  P                  '       d&   V P                  P                  P	                  V4       V P                  P
                  '       d&   V P                  P
                  P	                  V4       R # r   )glyphs_mathedr(   r  MathGlyphInform   r  r  s   &&r    rm   rm     s`    AHzz

  ..q1zz

--a0r+   glyfc                   V P                   '       d5   \        P                  ! R V P                   R,          4      ^ ,          ^ 8  d   R# \        V P                   4      ;q n         ^
p^pV'       Ed   W#,          ^,          W#^,           ,          ,          pW#^,           ,          ^,          W#^,           ,          ,          pW,          pV^,	          W#^,           &   V^,          W#^,           &   V^,          p\	        V4      pV^,          '       d   V^,          pM	V^,          pV^,          '       d   V^,          pM1V^@,          '       d   V^,          pMV^,          '       d
   V^,          pV^ ,          pEK  R# )z>h:Nr   NN)datastructunpack	bytearrayr   )r'   
glyphidmapr  r6   moreflagsglyphIDs   &&     r    remapComponentsFastr    s   999dDIIbM:1=B ++D9
AD
$A!e,A;!#tE{2%lUnU	QE
6>>FAFA6>>FAV^^FAV^^FAv~) r+   c                @   V P                   pVP                   pV'       d~   \        4       pV F<  pWR9  d   K  W%,          pVP                  V 4       F  pVP                  V4       K  	  K>  	  WAP                   ,          pVP                   P	                  V4       TpK  R # r   )r(   r>   getComponentNamesr  re   )r'   rh   glyphSetr3  rj  r   glr   s   &&      r    ri   ri     s    {{HI
U
A B))$/q! 0	  	hh
	
#	 r+   c                    VP                   '       dM   VP                  '       g;   W P                  ^ ,          ,          pVP                  P	                  4        RVn        R# )r   r+   T)r  r  r  __dict__clearr  )r'   r)   r   r   s   &&& r    r  r    sD    G$:$:$:#$	

r+   c                *   \        V P                  VP                  4      V n        VP                  P                  '       g   \	        V P
                  4       UUu. uF  w  r#W1P                  9   g   K  VNK  	  ppp\	        V4       UUu/ uF  w  rVWebK	  	  pppV P                  P                  4        F(  p\        VR 4      '       g   K  VP                  V4       K*  	  \        P                  ! R4      P                  p	VP                   F/  pV	! 4       V P                  V&   RV P                  V,          n        K1  	  V P
                   Uu. uF'  q3VP                  9   g   W1P                  9   g   K%  VNK)  	  upV n        R# u uppi u uppi u upi )r  r  r+   T)r/   r(   r   r  r9   r  r[   r  r  r   getTableModuler!  r  r  )
r'   rh   r6   r   r4   r`  oglyphmaprP   r!  s
   &&        r    rm   rm     s4   t{{AHH5DK99   !*4??!;M!;qHH}11!;M%.w%78%7TQAD%78##%Aq&!!%%h/ &   (..EA!A  ??"a188mq<L<L7L?DO  N8s   F3F
F
"F4Fc                    VP                   '       * pV P                  P                  4        F  pVP                  VR 7       K  	  R# ))remove_hintingT)r   r(   r[   trim)r'   r)   r   r  rP   s   &&&  r    r   r     s6     (N[[!	n- "r+   cmapc                  a V P                    Uu. uF  q"P                  4       '       g   K  VNK  	  ppVP                  P                  '       d[   \	        4       pVP
                   F%  p\        V4      pVf   K  VP                  V4       K'  	  VP
                  P                  V4       V EF  pVP                  ^8X  d   VP                  P                  4        Fr  w  poWP
                  9  d   K  S UU	u0 uF  w  rYWQP
                  9   g   K  V	kK  	  p
pp	R V
9   d   V
P                  R 4       VP                  P                  V
4       Kt  	  K  VP                  oVP
                  P                  SP!                  4       4      pVP                  P                  V3R lV 4       4       EK  	  VP
                  P#                  4       Vn        V F(  pVP$                  P'                  VP                  4       K*  	  R # u upi u up	pi )Nc              3  6   <"   T F  pSV,          x  K  	  R # 5ir   r   )r   ur  s   & r    r!   rc     s     :\DGG\r#   )tables	isUnicoder   bidi_closurer>   unicodes_requestedr   r  re   formatuvsDictrO   r  r(   r  r   r0  r  unicodes_missingdifference_update)r'   rh   r  r  additional_unicodesr  mirror_ur  varSelectorr   r(   r   r  s   &&          @r    ri   ri     s   6AaaF6 	yy!e%%A{H##''1 & 	
##$78 <<2%*]]%8%8%:!T&:&::(,J5I5I0I!!J6>MM$'' &; ::D//<<TYY[ILHHOO:\::  --224A	,,UZZ8 9 7" Ks   HH8H
H
c                   VP                   '       gO   V P                   Uu. uF2  q3P                  4       '       g   VP                  4       '       g   K0  VNK4  	  upV n        VP                  '       g9   V P                   Uu. uF  q3P                  4       '       d   K  VNK  	  upV n        V P                   Uu. uF  q3P
                  ^ 8w  g   K  VNK  	  upV n        \        V P                  4      V n        R# u upi u upi u upi r  )legacy_cmapr  r  isSymbolsymbol_cmapr  r2   numSubTablesr  s   &&& r    r  r    s    "&++O+Q!**,qq+O"&++B+QZZ\qq+B #kk;kXX]11k;DKDKK(D PB <s#   -C:C:C?C?9DDc                   R Vn         . p/ p/ pV P                   EFN  pVP                  ^ 8X  d    VP                  ^8X  d   WSVP                  &   VP                  ^8X  d    VP                  ^8X  d   WTVP                  &   VP
                  ^8X  d   VP                  P                  4        UUUU	u/ uFQ  w  rgWaP                  9   g   K  TV UU	u. uF*  w  rWP                  9   g   WP                  9   g   K'  W3NK,  	  up	pbKS  	  up	pppVn        VP                  P                  4        UUu/ uF  w  rgV'       g   K  WgbK  	  uppVn        EK6  VP                  4       '       d   VP                  P                  4        UU	u/ uF)  w  rWP                  9   g   WP                  9   g   K'  WbK+  	  up	pVn        VP
                  ^8X  dU   VP                  '       d@   \        VP                  P                  4       4      R8  d   VP                  V4       EK   EK  EK  EK	  VP                  P                  4        UU	u/ uF  w  rWP                  9   g   K  WbK  	  up	pVn        EKQ  	  V F  pVP                  ^ 8X  dj   VP                  ^8X  dY   VP                  V9   dH   W5P                  ,          P                  VP                  8X  d   VP                  P                  4        K}  VP                  ^8X  g   K  VP                  ^
8X  g   K  VP                  V9   g   K  WEP                  ,          P                  VP                  8X  g   K  VP                  P                  4        EK   	  V P                   Uu. uF>  qUP
                  ^8w  d   VP                  '       g   K'  MVP                  '       g   K<  VNK@  	  upV n        \!        V P                  4      V n        R# u up	pi u up	pppi u uppi u up	pi u up	pi u upi )Nr  T)r(   r  
platformID	platEncIDlanguager  r  rO   r  glyphs_requestedr  r  maxr0  r@  r  r2   r  )
r'   rh   tables_format12_bmptable_plat0_enc3table_plat3_enc1r  rP   r3   r  r   s
   &&        r    rm   rm     s   AH[[<<1!1+,QZZ(<<1!1+,QZZ(88r> IIOO- .DA,,, ! !...!7K7K2K QF ! 
 .AI +,))//*;A*;$!q*;AAI[[]] FFLLN*DA***a3G3G.G *AF xx2~!&&&S-?'-I#**1- .J&~ ()vv||~Q~tq>P>P9Pdad~QAF? F !LLAq 

.. ,11QVV;FFLLNLLAr!

.. ,11QVV;FFLLN !  #kkWkBaff1fAII11kWDKDKK(D [ B R( XsZ   .O-O-$O'6O'=O--O5>O5$O;,O; PP?$P(P=P'O-DSIGc                "    ^ V n         . V n        R# r  )	usNumSigssignatureRecordsr+  s   &&&r    r  r  R  s     DNDr+   maxpc                    VP                   '       gC   V P                  R 8X  d2   ^V n        ^ V n        ^ V n        ^ V n        ^ V n        ^ V n        ^ V n        R# )r  T)	r   tableVersionmaxZonesmaxTwilightPoints
maxStoragemaxFunctionDefsmaxInstructionDefsmaxStackElementsmaxSizeOfInstructionsr+  s   &&&r    r  r  Z  sR    ???
*DM%&D"DO#$D &'D#$%D!)*D&r+   r   c                   \        4       pVP                  V4       \        VP                  4      VP                  ,          pR VP                  9   d?   Y@P
                   Uu0 uF!  qUP                  R8  g   K  VP                  kK#  	  up,          pV P
                   Uu. uF  qUP                  V9   g   K  VNK  	  upV n        VP                  '       g9   V P
                   Uu. uF  qUP                  4       '       g   K  VNK  	  upV n        R VP                  9  d>   V P
                   Uu. uF!  qUP                  VP                  9   g   K  VNK#  	  upV n        VP                  '       Ed   . pVP                  P                  \        4      pV'       d   \        W4       V P
                   F  pVP                  R9   d0   VP                  4       '       d   RP                  R4      MRVn        MlVP                  R9   d0   VP                  4       '       d   RP                  R4      MRVn        M,VP                  ^8X  d	   RVn        MVP                  R	9   d   K  VP#                  V4       K  	  W`n        R# u upi u upi u upi u upi )
r      z.	utf_16_ber8  T)r      )r      )         )r   visitr>   name_IDsseenr]  nameIDname_legacyr  name_languageslangIDobfuscate_namesr   NAME_IDS_TO_OBFUSCATE_remap_select_name_idsencodestringr@  )r'   r)   r   visitornameIDsr`  namerecsneedRemappings   &&&     r    r   r   k  s   !GMM$'""#gll2G
gjjCjHHsNHAHHjCC!ZZ?Z88w+>!!Z?DJ "&=A{{}aa=

'(((!%RAxx7;Q;Q/QaaR
  112GH"47Axx6!:;++--7>>+6WV#9:6==5FQ\)OOA  
9 D? > Ss0   !I;8I;J 6J $J J-J
J
c               $    V ^8  d   QhRRRRRR/# )r   r)   zttLib.TTFontr  zset[int]returnNoner   )r  s   "r    __annotate__r    s+     CT CT CTh CT4 CTr+   c                   RV 9  d
   RV 9  d   R# V R,          pVP                    Uu0 uF  q3P                  kK  	  pp/ pVP                  4       ^,
          pV F/  pV^,          pWd9  g   Q R4       hVR8  d   \        R4      hWeV&   K1  	  . pVP                    Fn  pVP                  V9  d   K  \	        VP
                  WSP                  ,          VP                  VP                  VP                  4      p	VP                  V	4       Kp  	  VP                   P                  V4       V P                  R4      p
V
e   V
P                   F.  pVP                  VP                  VP                  4      Vn        K0  	  V
P                   FG  pVP                  pVP                  W4      Vn        VP                   pVP                  W4      Vn        KI  	  V P                  R4      pVf   R# VP"                  P$                  pVP                  W4      VP"                  n        VP"                  P&                  '       dS   VP"                  P&                  P(                   F.  pVP                  VP*                  VP*                  4      Vn        K0  	  VP"                  P,                  '       dU   VP"                  P,                  P.                   F.  pVP                  VP0                  VP0                  4      Vn        K0  	  R# R# u upi )a'  Remap a set of IDs so that the originals can be safely scrambled or
dropped.

For each name record whose name id is in the `needRemapping` set, make a copy
and allocate a new unused name id in the font-specific range (> 255).

Finally update references to these in the `fvar` and `STAT` tables.
fvarSTATNr   z#_findUnusedNameID did not skip gapsi  z8Ran out of name IDs while trying to remap existing ones.)r]  r  _findUnusedNameID
ValueErrorr   r  r  r  r  r@  r
  r  axes
axisNameID	instancessubfamilyNameIDpostscriptNameIDr  ElidedFallbackNameIDDesignAxisRecordAxis
AxisNameIDAxisValueArray	AxisValueValueNameID)r)   r  r   r  existingIds	remappingnextIdnameIdcopiedRecords
recordCopyr  axisinstancer  statelidedNameIDvalues   &&               r    r  r    sg    TfD0<D 04zz:zV==zK:I##%)F!(O*OO(E>WXX"&   M**==-MMmm$MM

 	Z(  	JJm$
 88FDIID'mmDOOT__MDO H--F'0}}V'DH$..F(1f(EH%	 ' 88FD|::22L&/mmL&ODJJ#zz"""JJ//44D'mmDOOT__MDO 5zz   ZZ..88E )e.?.?ARAR SE 9 !c ;s   K>headc                    R # r   r   r+  s   &&&r    r   r     s     r+   c                  >   ] tR tRt ! R R]4      t ! R R]4      t. ROt]. RO,          t. R Ot. R!Ot	R. R"OR. R#OR. R$OR	. R%OR
RR.RRR.RR.RR.R. R&OR. R'OR. R(OR. R)OR. R*OR. R+O/t
]! ]! ]! ]
P                  4       4      . 4      4      tR tR t. 3R ltRtR# ),Optionsi  c                      ] tR tRtRtR# )Options.OptionErrori  r   Nr  r  r  r  r  r   r+   r    OptionErrorr        r+   r  c                      ] tR tRtRtR# )Options.UnknownOptionErrori  r   Nr  r   r+   r    UnknownOptionErrorr!    r  r+   r"  common	fractions
horizontalverticalltrltraltrmrtlrtlartlmrandjustifyjaltprivateeast_asian_spacingarabichangultibetanindicc                	   V P                   R ,          V n        V P                  R ,          V n        RV n        V P
                  R ,          V n        RV n        RV n        V P                  R ,          V n
        R.V n        RV n        RV n        RV n        RV n        RV n        RV n        . ROV n        RV n        R.V n        RV n        RV n        RV n        RV n        RV n        RV n        RV n        RV n        RV n        RV n        RV n        RV n         RV n!        RV n"        RV n#        \H        PJ                  V n&        RV n'        RV n(        RV n)        RV n*        RV n+        RV n,        RV n-        V P\                  ! R/ VB  R# )	r?  FTr   i	  N)r   r   r   r   r     r  r  r   )/_drop_tables_defaultdrop_tables_no_subset_tables_defaultno_subset_tablespassthrough_tables_hinting_tables_defaulthinting_tableslegacy_kernlayout_closure_layout_features_defaultr  r  ignore_missing_glyphsignore_missing_unicodesr   r  r  r  r  r  r  r  r  r  r  recommended_glyphsrecalc_boundsrecalc_timestampprune_unicode_rangesprune_codepage_rangesrecalc_average_widthrecalc_max_contextcanonical_orderflavorwith_zopflidesubroutinizer   defaultharfbuzz_repackerverbosetimingxmlfont_number
pretty_svglazyr  r>   )r'   kwargss   &,r    r  Options.__init__K  s   44Q7 $ > >q A"'"::1= "#<<Q?"e%*"'+$   
 !%h$  #"'" %$(!%)"$)!"'# #!6!>!>	 6r+   c                	    VP                  4        F:  w  r#\        W4      '       g   V P                  R V,          4      h\        WV4       K<  	  R# )Unknown option '%s'N)rO   r  r"  r   )r'   rW  r  rP   s   &,  r    r>   Options.set  s@    LLNDA4##--.Ca.GHHDQ #r+   c                	   . p. pV EF  pTpVP                  R 4      '       g   VP                  V4       K0  VR,          pVP                  R4      pRpVR8X  dQ   VP                  R4      '       d   VR,          p	V	R8X  d   Rp
MRp
MTp	Rp
V	P                  R	4      '       d   V	RR p	R	p
M3VRV p	V	R,          R
9   d   V	R,          R,           pV	RR p	WW^,           R p
T	pV	P	                  RR4      p	\        W	4      '       g9   VRJ g   W9   d   VP                  V4       EK  V P                  RV,          4      h\        W	4      pV
R	8X  d   \        RV: RV: 24       EK[  \        V\        4      '       d   \        V
4      p
EMB\        V\        4      '       d   \        V
4      p
EM\        V\        4      '       d   \        V
4      p
M\        V\        4      '       d   \        V
\        4      '       d   V P                  RV,          4      hV
P	                  RR4      P                  4       pVR.8X  d   . pV Uu. uF0  p\!        V4      '       d   V^ ,          R9   d   \        V^ 4      MTNK2  	  ppVR8X  d   Tp
MIVR8X  d   Tp
V
P#                  V4       M.VR8X  d&   Tp
V F  pW9   g   K  V
P%                  V4       K  	  MQ h\'        W	V
4       EK  	  W4,           # u upi )z--:r   NN=zno-:r   NNzcanonical-orderNFT?z-+-_rZ  zCurrent setting for 'z' is: z5Option '%s' requires values to be specified using '=', r8  
0123456789z+=z-=r  )r  r@  findr  replacer  r"  r   printr  rk   r   strrZ   r  r}  r2   r
  r  r   )r'   argvignore_unknownposargspassthru_optionsr  orig_ar6   opr  rP   okovvvrP  s   &&&            r    
parse_optsOptions.parse_opts  s   AF<<%%q!"AsABBw<<&&"A-- !!AA::c??#2AAbqER5D=2B#2A!egJB		#s#A4##!T)R-A$++F3112G!2KLL!BCx2rBC"d##GB$$FB$$FB%%a&&**ORSS  YYsC(..0":BSUVSUa3q66adl.Bc!QiISUV9A4ZAHHRL4ZA6HHQK   !5DQM P ))! Ws   <6K )(r  rK  rN  r9  rL  rT  r  rP  r   r>  rB  rC  r@  r  r  rV  r  r?  r  r  r  r;  r  r  r  r<  rU  rH  rG  rI  rE  rJ  rF  rD  r  r  rR  rQ  rM  rS  N)JSTFr  ra  rY  EBSCPCLTLTSH)FeatGlatGlocSilfSill)avarBASEr  gaspr  hhear  vheaOS/2locar   cvtfpgmprepVDMXr  rC  MVARcvarr  )r  r  r  r  r  r  )rvrnccmpligaloclmarkmkmkrlig)fracnumrdnom)caltcligcursr  rclt)valtvertvkrnvpalvrt2)HarfHARFBuzzBUZZ)chwsvchwhaltvhal)
initmedifinaisolmed2fin2fin3cswhmsetstch)ljmovjmotjmo)abvsblwsabvmblwm)nuktakhnrphfrkrfr  blwfhalfabvfpstfcfarvatucjctr  presr  r  pstshalndistr  r  )r  r  r  r  	Exceptionr  r"  r8  r:  r=  _layout_features_groupsr   r  iterr[   rA  r  r>   rq  r  r   r+   r    r  r    s    i [  DD!, N
 	J-><F83> 
 	*3 
72f  *D(//12B7 2h  /1 K* K*r+   r  c                      ] tR tRt ! R R]4      t ! R R]4      t ! R R]4      tRR	 lt. . . R
3R lt	R t
R tR tR tR tR tRtR# )	Subsetteri  c                      ] tR tRtRtR# )Subsetter.SubsettingErrori  r   Nr  r   r+   r    SubsettingErrorr    r  r+   r  c                      ] tR tRtRtR# )&Subsetter.MissingGlyphsSubsettingErrori  r   Nr  r   r+   r    MissingGlyphsSubsettingErrorr    r  r+   r  c                      ] tR tRtRtR# )(Subsetter.MissingUnicodesSubsettingErrori  r   Nr  r   r+   r    MissingUnicodesSubsettingErrorr    r  r+   r  Nc                	    V'       g   \        4       pWn        \        4       V n        \        4       V n        \        4       V n        R # r   )r  r   r>   r  glyph_names_requestedglyph_ids_requested)r'   r   s   &&r    r  Subsetter.__init__  s/    iG"%%%(U"#&5 r+   r8  c                	   V P                   P                  V4       \        V\        4      '       d   VP	                  R 4      pVP                  R4      p\        V4      ^,          p\        P                  ! RV,          V4       F  pV P                   P                  V4       K   	  V P                  P                  V4       V P                  P                  V4       R# )utf_8z	utf-32-bez>%dLN)r  re   r  bytesdecoder  r2   r  r  r  r  r  )r'   r(   gidsunicodestext
text_utf32ncharsr  s   &&&&&   r    populateSubsetter.populate  s    &&x0dE"";;w'D[[-
ZA%v
;A##''* <""))&1  ''-r+   c                	   V P                  V4       EF  pVP                  4       V P                  P                  9   gp   VP                  4       V P                  P                  9   d   V P                  P
                  '       d+   VR 8X  d>   V P                  P                  '       g"   RV9   d   \        P                  RV4       W K  \        P                  ! V4      p\        VR4      '       g   K  \        RV,          4      ;_uu_ 4        W,          pRRR4       \        RV,          4      ;_uu_ 4        XP                  WP                  4      pRRR4       X'       g   \        P                  RV4       W EKl  \        P                  RV4       EK  	  R#   + '       g   i     L; i  + '       g   i     Lc; i)	r  rm  z
%s droppedr  z	load '%s'N
prune '%s'%s pruned to empty; dropped	%s pruned)_sort_tablesstripr   r9  r>  r   r?  logr$   r   rq  r  timerr  r'   r)   r  clazzr  retains   &&    r    _prune_pre_subsetSubsetter._prune_pre_subset  s%   $$T*C		t||777IIK4<<#>#>> LL0006M4<<+C+C+CRVs+I'',Eu011;,-- IE .<#-.."33D,,GF /HH:C@	HH[#.3 +  .-..s   	F7F.F+.F>c           
     	  a
 \        VP                  4       4      pVP                  4       ;V n        o
\        4       V n        V P                  P	                  V P
                  4       V P                  P	                  V
3R  lV P                   4       4       \        4       V n        V P                  P	                  V P                  P                  V4      4       V P                  P	                  V
3R lV P                   4       4       V P                  '       dX   \        P                  RV P                  4       V P                  P                  '       g   V P                  V P                  4      hV P                  P                  4       V n        \        4       V n        RV9   dP   \#        R4      ;_uu_ 4        VR,          P%                  V 4       V P                  P'                  V4       RRR4       \)        V P                  4      V n        V P                   '       dg   V P                    Uu. uF  pRV,          NK  	  pp\        P                  RV4       V P                  P,                  '       g   V P/                  V4      h?V P                  P0                  '       dx   RV9   dA   V P                  P3                  VP5                  ^ 4      4       \        P                  R	4       M0V P                  P3                  R
4       \        P                  R4       V P                  P6                  '       dz   RV9   ds   \9        \;        ^\=        VP                  4       4      4      4       F-  pV P                  P3                  VP5                  V4      4       K/  	  \        P                  R4       RV9   d   \#        R4      ;_uu_ 4        \        P                  R\=        V P                  4      4       \        P                  V P                  VR7       VR,          P%                  V 4       V P                  P'                  V4       \        P                  R\=        V P                  4      4       \        P                  V P                  VR7       RRR4       \)        V P                  4      V n        V P                  P@                  '       d   RV9   d   \#        R4      ;_uu_ 4        \        P                  R\=        V P                  4      4       \        P                  V P                  VR7       VR,          P%                  V 4       V P                  P'                  V4       \        P                  R\=        V P                  4      4       \        P                  V P                  VR7       RRR4       \)        V P                  4      V n!        R' EF'  pWa9   d   \#        RV,          4      ;_uu_ 4        \        P                  RV\=        V P                  4      4       \        P                  V P                  VR7       W,          P%                  V 4       V P                  P'                  V4       \        P                  RV\=        V P                  4      4       \        P                  V P                  VR7       RRR4       \E        V RVPG                  4        R2\)        V P                  4      4       EK*  	  RV9   d   \#        R4      ;_uu_ 4        \        P                  R\=        V P                  4      4       \        P                  V P                  VR7       VR,          P%                  V 4       V P                  P'                  V4       \        P                  R\=        V P                  4      4       \        P                  V P                  VR7       RRR4       \)        V P                  4      V n$        RV9   d   \#        R4      ;_uu_ 4        \        P                  R \=        V P                  4      4       \        P                  V P                  VR7       VR,          P%                  V 4       V P                  P'                  V4       \        P                  R!\=        V P                  4      4       \        P                  V P                  VR7       RRR4       \)        V P                  4      V n$        R"V9   d   \#        R#4      ;_uu_ 4        \        P                  R$\=        V P                  4      4       \        P                  V P                  VR7       VR",          P%                  V 4       V P                  P'                  V4       \        P                  R%\=        V P                  4      4       \        P                  V P                  VR7       RRR4       \)        V P                  4      V n%        \)        V P                  4      V n&        VPO                  4       pV PL                   Uu/ uF  qWx,          bK  	  upV n(        \S        V PP                  PU                  4       4      V n+        VP                  4       V PV                  ,          V n,        \)        4       V n-        V P                  P\                  '       dA   W PL                  ,
           Uu0 uF  pWx,          V PV                  8:  g   K  VkK   	  upV n-        V PZ                   Uu/ uF  qWx,          bK  	  upV n/        V P                  P\                  '       g%   S
 Uu. uF  qV PL                  9   g   K  VNK  	  p	pM2S
 Uu. uF&  qPa                  V4      V PV                  8:  g   K$  VNK(  	  p	pWn1        \9        \=        V	4      4       Uu/ uF  qWW,          ,          VbK  	  upV n2        \        P                  R&\=        V PL                  4      4       V =R#   + '       g   i     E
L5; iu upi   + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; iu upi u upi u upi u upi u upi u upi )(c              3  X   <"   T F  q\        S4      8  g   K  SV,          x  K!  	  R # 5ir   r1   r   r6   glyph_orders   & r    r!   ,Subsetter._closure_glyphs.<locals>.<genexpr>  s'      %
$<qCDT@TNKNN$<s   **c              3  J   <"   T F  q\        S4      8  g   K  Vx  K  	  R # 5ir   r1   r  s   & r    r!   r    s!      #
/!K8H3HAA/s   #
#zMissing requested glyphs: %sr  zclose glyph list over 'cmap'NzU+%04Xz)Missing glyphs for requested Unicodes: %sr  zAdded gid0 to subsetz.notdefzAdded .notdef to subsetz!Added first four glyphs to subsetr  zclose glyph list over 'MATH'z0Closing glyph list over 'MATH': %d glyphs before)r)   z.Closed glyph list over 'MATH': %d glyphs afterrf  zclose glyph list over 'GSUB'z0Closing glyph list over 'GSUB': %d glyphs beforez.Closed glyph list over 'GSUB': %d glyphs afterzclose glyph list over '%s'z.Closing glyph list over '%s': %d glyphs beforez,Closed glyph list over '%s': %d glyphs afterglyphs_edrd  zclose glyph list over 'VARC'z0Closing glyph list over 'VARC': %d glyphs beforez.Closed glyph list over 'VARC': %d glyphs afterzclose glyph list over 'glyf'z0Closing glyph list over 'glyf': %d glyphs beforez.Closed glyph list over 'glyf': %d glyphs afterzCFF zclose glyph list over 'CFF 'z0Closing glyph list over 'CFF ': %d glyphs beforez.Closed glyph list over 'CFF ': %d glyphs afterzRetaining %d glyphs)r)  r  )3r>   getGlyphOrderorig_glyph_orderr  re   r  r  glyphs_missing
differencer  r$   r   rB  r  r  r(   r  r  ri   intersection_updater  glyphs_cmapedrC  r  r  r  getGlyphNamerD  r  minr2   r  r@  ro  r   lowerglyphs_glyfedglyphs_cffedglyphs_retainedr&   r  r  r[   r  r  r  r  r  
getGlyphIDnew_glyph_orderglyph_index_map)r'   r)   
realGlyphsr  missingr6   r  orderr   r  r  s   &&        @r    _closure_glyphsSubsetter._closure_glyphs  s/	   ++-.
.2.@.@.BB #$$T%?%?@$$ %
$($<$<%
 	
 "e""4#8#8#C#CJ#OP"" #
//#
 	
 HH3T5H5HI<<555778K8KLL++002 #T>566V++D1//
; 7 't{{3   -1-B-BC-Bx!||-BGCHH@'J<<77799'BB<<$$$~ 1 1! 45/0	*23<<***~s1c$*<*<*>&?@AAKKOOD$5$5a$89 B<=T>566FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3<<&&&6T>566FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3%E}7%?@@HHHDKK(
 JJt{{J6K..t4KK33J?HHFDKK(
 JJt{{J6 A DGEKKM?"5y7MN# && T>566FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3T>566FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3T>566FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 &dkk2(5'')9=9M9M#N9MAuxK9M#N #&t'?'?'F'F'H#I #'#5#5#78P8P#Q 'k<<### $&:&::#:A8t777 :#D =A<O<O&P<Oq%({<O&P#||'''*5S+Qd>R>R9Rqq+OSO '&a//!*<@X@X*X;    /27O8L2M 
2MQ/$%q(2M 
 	&D,@,@(ABKi 766
 D( 766 766 A@@$ 766 766 766  $O# 'Q T 
s   84p.p,Cp1(Cq8C	qCq-Cr"Crr)*r.r.$r3r84r8!r='r=sp)	1q	q	q*-q>	r	r&	c                	   . V n         V P                  V4       EFC  p\        P                  ! V4      pVP	                  4       V P
                  P                  9   d   \        P                  R V4       K[  \        VR4      '       d   \        RV,          4      ;_uu_ 4        W,          pV P                  V n        VP                  V 4      pV =RRR4       X'       g   \        P                  RV4       W K  \        P                  RV4       K  V P
                  P                  '       d   \        P                  RV4       EK+  \        P                  RV4       W EKF  	  \        R4      ;_uu_ 4        VP!                  V P"                  4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)	z%s subsetting not neededrm   zsubset '%s'Nz%s subsetted to empty; droppedz%s subsettedz'%s NOT subset; don't know how to subsetz0%s NOT subset; don't know how to subset; droppedzsubset GlyphOrder)r  r  r   rq  r  r   r;  r  r$   r  r  r  r(   rm   r<  warningsetGlyphOrderr  r  s   &&    r    _subset_glyphsSubsetter._subset_glyphs  s;    $$T*C'',Eyy{dll;;;3S900=3.// IE"&"6"6DK"006F	 0
 HH=sC	HH^S1000BCHNPSTI) +, &''t334 ('! 0/  (''s    -F4F-F*-F>	c                	   VP                  4       pR V9   d#   VP                  R 4       VP                  R 4       V EFz  pVR8X  d   K  VR8X  Ed   V P                  P                  '       dV   W,          P                  4       pW,          P                  VRR7      pWE8w  d!   \        P                  RV\        V4      4       V P                  P                  '       dm   W,          P                  ^8  dV   W,          P                  4       pW,          P                  VRR7      pWg8w  d!   \        P                  RV\        V4      4       V P                  P                  '       dF   W,          P                  pW,          P!                  V4      p	W8w  d   \        P                  RW94       V P                  P"                  '       dF   \%        V4      p
WV,          P&                  8w  d$   WV,          n        \        P                  RW:4       \(        P*                  ! V4      p\-        VR	4      '       g   EK  \/        R
V,          4      ;_uu_ 4        W,          pVP1                  WP                  4      pRRR4       X'       g   \        P                  RV4       W EKd  \        P                  RV4       EK}  	  R#   + '       g   i     LP; i)r   
GlyphOrderr  T)	pruneOnlyz%s Unicode ranges pruned: %sz%s CodePage ranges pruned: %sz%s xAvgCharWidth updated: %dz%s usMaxContext updated: %dr   r  Nr  r  )r0  r  r@  r   rG  getUnicodeRangesrecalcUnicodeRangesr  r$   r%   rH  r+  getCodePageRangesrecalcCodePageRangesrI  xAvgCharWidthrecalcAvgCharWidthrJ  r	   usMaxContextr   rq  r  r  r   )r'   r)   	tableTagsr  old_unirangesnew_unirangesold_codepagesnew_codepagesold_avg_widthnew_avg_widthmax_contextr  r  r  s   &&            r    _prune_post_subsetSubsetter._prune_post_subset  s   IIK	 YV$V$Cl"f}<<444$(I$>$>$@M$(I$A$A$RV$A$WM$5:CAV <<555$):K:Kq:P %)I$?$?$AM$(I$B$B4SW$B$XM$5;"=1
 <<444$(I$;$;M$(I$@$@$FM$5!?T<<222",T"2K"3i&<&<<1<S	.!>Q'',Eu122<#-.. IE"44T<<HF / HH:C@	HH[#.S D /.s   $J==Kc                	   a . ROo\        S4       UUu/ uF  w  r#W2^,           bK  	  uppo\        VP                  4       V3R lR7      pV Uu. uF  q3R8w  g   K  VNK  	  up# u uppi u upi )r  c                (   < SP                  V ^ 4      # rv  )r  )r  tagOrders   &r    r=  (Subsetter._sort_tables.<locals>.<lambda>  s    8<<Q3Gr+   )r  r  )r  rm  rf  r  r|  r  r   r  )r9   r%   r0  )r'   r)   r6   r  r  r%  s   &&   @r    r  Subsetter._sort_tables	  sb    S)28)<=)<A1uH)<=diik'GH54a#4455 >5s   A%A+A+c                	    V P                  V4       V P                  V4       V P                  V4       V P                  V4       R # r   )r  r  r  r!  )r'   r)   s   &&r    rB   Subsetter.subset  s:    t$T"D!%r+   )r  r  r  r(   r   r  r  r  ro  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r  rB   r  r   r+   r    r  r    s\    )   ) !rBR 	./8l\561/f6&r+   r  z	load fontc           	     >   \         P                  ! V VVP                  VP                  VVP                  R 7      pV'       d[   \         P
                  ! R4      pVP                  pVP                  Vn        VR,          pVP                  R8X  d   RVn        Wvn        V# ))checkChecksumsrecalcBBoxesrecalcTimestamprV  
fontNumberr  g       @r  )	r   TTFontrE  rF  rT  rq  decode_format_2_0decode_format_3_0r  )	fontFiler   r+  dontLoadGlyphNamesrV  r)   r  savedr  s	   &&&&&    r    	load_fontr5    s    <<%**00&&D$ ""6*&&!%!7!7L<<3AL!&Kr+   zcompile and save fontc                    VP                   '       d   VP                  R 8X  d   ^ RIHp RVn        VP                  V n        VP
                  V P                  \        &   V P                  WP                  R7       R# )woff)sfntT)reorderTablesN)
rM  rL  fontTools.ttLibr8  
USE_ZOPFLIrP  cfgr   saverK  )r)   outfiler   r8  s   &&& r    	save_fontr?  6  sW    w~~7(..DK&-&?&?DHH"#IIg%<%<I=r+   c           
     |   ^ RI pVP                  RRV 4      p VP                  RRV 4      p . pV P                  4        F{  pVP                  R4      p\        V4      ^8X  d   VP	                  \        V^4      4       KA  Vw  rVVP                  \        \        V^4      \        V^4      ^,           4      4       K}  	  V# )r   Nz0[xX]rb  z[<+>,;&#\\xXuU\n	]r_  )rers   r}  r2   r@  r   r
  r  )rh   rA  r3   itemfieldsstartends   &      r    parse_unicodesrF  A  s    
xa A
$c1-A
A	Cv;!HHSr]#JEHHU3ub>3sB<!+;<=  Hr+   c           
     d   . pV P                  R R4      P                  4        F  pVP                  R4      p\        V4      ^8X  d$   VP                  \	        V^ ,          4      4       KG  VP                  \        \	        V^ ,          4      \	        V^,          4      ^,           4      4       K  	  V# )ra  rb  r_  )re  r}  r2   r@  r   r
  r  )rh   r3   rB  rC  s   &   r    
parse_gidsrH  Q  s    
A		#s#))+Cv;!HHS^$HHU3vay>3vay>A+=>? , Hr+   c                B    V P                  R R4      P                  4       # )ra  rb  )re  r}  )rh   s   &r    parse_glyphsrJ  \  s    99S#$$&&r+   c                 |    \        R \        \        P                  R7       \        R\        P                  R7       R# )zusage:filez2Try fonttools subset --help for more information.
N)rf  	__usage__sysstderrr   r+   r    usagerQ  `  s!    	(ICJJ/	
?cjjQr+   z%make one with everything (TOTAL TIME)c                   ^ RI Hp ^ RIHp V f   \        P
                  R,          p RV 9   d   \        \        4       ^ # \        4       p VP                  V . R/OR7      p \        T 4      ^8  d   \        4        ^# T! TP                  '       d   \        P                   M\        P"                  R	7       TP$                  '       d/   \&        P(                  P+                  \        P,                  4       MR
\&        P(                  n        T ^ ,          pT R,          p \1        TR7      pRp. p. p	. p
RpRpRpT  EF-  pTR8X  d   R
pK  TP3                  R4      '       d   TR,          pK1  TP3                  R4      '       d   YR,          ,          pKY  TP3                  R4      '       dN   \5        TR,          RR7      ;_uu_ 4       pYP7                  4       P9                  RR4      ,          pRRR4       K  TP3                  R4      '       d6   TR,          R8X  d   R
pM!T
P;                  \=        TR,          4      4       EK	  TP3                  R4      '       dn   \5        TR,          4      ;_uu_ 4       pTP?                  4        F3  pT
P;                  \=        TPA                  R4      ^ ,          4      4       K5  	  RRR4       EK  TP3                  R4      '       d%   T	P;                  \C        TR,          4      4       EK  TP3                  R4      '       dn   \5        TR,          4      ;_uu_ 4       pTP?                  4        F3  pT	P;                  \C        TPA                  R4      ^ ,          4      4       K5  	  RRR4       EKL  TP3                  R4      '       d6   TR ,          R8X  d   R
pM!TP;                  \E        TR ,          4      4       EK  TP3                  R!4      '       dn   \5        TR,          4      ;_uu_ 4       pTP?                  4        F3  pTP;                  \E        TPA                  R4      ^ ,          4      4       K5  	  RRR4       EK  TPG                  T4       EK0  	  TPH                  '       * ;'       d    T'       * pTPJ                  p\M        YSTTR"7      pTfA   TPN                  e"   R#TPN                  PQ                  4       ,           MRp\S        TTR
R$R%7      p\'        R&4      ;_uu_ 4        T'       d    TP;                  TPU                  4       4       T'       d   TR',          PV                   F  pTPY                  4       '       g   K  T
P;                  TPZ                  P]                  4       4       TP^                  ^8X  g   KW  T
P;                  TP`                  P]                  4       4       K  	  RT9  g   Q h RRR4       \b        Pe                  R(T,          4       \b        Pe                  R)T
4       \b        Pe                  R*T4       \b        Pe                  R+T	4       TPg                  YYR,7       TPi                  T4       \k        TYs4       TP                  '       ds   ^ RI6p\b        Pe                  R-TPn                  Pq                  T4      T3,          4       \b        Pe                  R.TPn                  Pq                  T4      T3,          4       TPr                  '       d    TPu                  \        Pv                  4       TPy                  4        R#   TP                   d2   p\        4        \        RT\        P                  R7        Rp?^# Rp?ii ; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL&; i  + '       g   i     ELj; i  + '       g   i     EL; i)0z%OpenType font subsetter and optimizer)splitext)configLoggerN:r   NNz--help)ri  zERROR:rL  )levelT)r   Fr8  r   z--output-file=:   NNz--text=:   NNz--text-file=:   NNz	utf-8-sig)encoding
z--unicodes=:   NNz--unicodes-file=:r  NN#z--gids=z--gids-file=z	--glyphs=:	   NNz--glyphs-file=)r3  rV  r{  z.subset)	extension	overWritesuffixzcompile glyph listr  z
Text: '%s'zUnicodes: %sz
Glyphs: %szGids: %s)r(   r  r  r  zInput font:% 7d bytes: %szSubset font:% 7d bytes: %s)	r  z	gids-filer(   zglyphs-filer  z	text-filer  zunicodes-filezoutput-file)=os.pathrS  	fontToolsrT  rO  rh  rf  __doc__r  rq  r  rQ  rP  r2   rQ  loggingINFOWARNINGrR  r  r,   setLevelDEBUGdisabledr  r  openreadre  r
  rF  	readlinesr}  rH  rJ  r@  r  rV  r5  rL  r  r   r  r  r  r  r0  r  r  r  r$   r  rB   r?  ospathgetsizerS  saveXMLstdoutclose)argsrS  rT  r   efontfile	subsetterr>  r(   r  r  wildcard_glyphswildcard_unicodesr  r   r  liner3  rV  r)   extr  rm  s   &                      r    mainr{  e  s}    !&|xx|4giG!!
 " 
& 4y1}ww||GOOL~~~gmm, $AwH8D'*IGFDHOD8"O<<())fG<<	""bEMD<<''af{33q((r22 4<<&&v}$(!qv 67<<*++afKKMDOON4::c?13E$FG *  <<	""KK
1R5)*<<''afKKMDKK
4::c?1+= >? *  <<$$u|"&l1R512<<())afKKMDMM,tzz#q/A"BC *  aY \ %000??Z<<D.@tD .5nn.HcGNN((**d$tI
 
#	$	$MM$,,./&\((;;==OOAFFKKM2xx2~ 		(89	 )
  
% HH\D !HH^X&HH\6"HHZf(NTdG%,0I8/TTU-1I70SST{{{SZZ JJLe  h

+J 433   $ 
%	$	$si   \) '].2A^1A^A^*;/^>+)^>7^>6^>)]+:&]&&]+.]?^^'*^;>_	r   r  r-  r   >   r   r   r   r  r  r  r  r  )r   FT)r  r  r5  r?  rH  rJ  rF  r{  )
__future__r   rb  r   fontTools.misc.roundToolsr   r   fontTools.ttLib.tablesr   fontTools.ttLib.tables.otBaser   fontTools.otlLib.maxContextCalcr	   fontTools.pens.basePenr
   fontTools.misc.loggingToolsr   fontTools.misc.cliToolsr   fontTools.subset.utilr   r   fontTools.subset.cfffontTools.subset.svgfontTools.varLibr   r   fontTools.ttLib.tables._n_a_m_er   r   fontTools.unicodedatar   rO  r  arrayrd  collectionsr   r   	functoolsr   typesr   rN  rc  	getLoggerr  r*   r(   r  r/   r7   r   r:   r?   rB   rF   rd  rV   SingleSubstri   rm   MultipleSubstAlternateSubstLigatureSubstReverseChainSingleSubstDevicer   ValueRecordr   	SinglePosr   PairPos
CursivePosAnchorMarkBasePos
MarkLigPosMarkMarkPosr'  r)  ContextSubstChainContextSubst
ContextPosChainContextPosr.  r  ExtensionSubstExtensionPosr  r  r  r  r  rk  r  r%  ri  r3  rC  rE  rA  rO  rj  rq  rr  rv  ry  r  r  r  r  r  r  r(  MathGlyphConstructionr  r  r  r  r  r  r!  r  r  r  r  r  r  r5  r?  rF  rH  rJ  rQ  r{  __all__r   r+   r    <module>r     s  
 #  -  + ? 6 * - 6 9 " " 4 G * 
    ,  G	 Uc P *+Q S)
 	W&&'?@A%0
 XA  A
 X6  6
 X   X9  9
 X   XS  S X  & XP  P
 X!!"K #K X!!" # X##$# %# X##$ % X$$%Y &Y X$$%! &! X##$ % X##$  %  X--.
5 /
5 X--.5 /5( X__) ) X!!"  #  X 5 !5 X  !> X*5 *5Z X7 7( X  !	5 "	5 X__	 	 X  ! " X!!"$5 #$5N X!!"	 #	 X  !.5 ".5b X  ! " X!!"$5 #$5N X!!"	 #	 $$		 $$ $$

 (1183S3S 	 	W?W?t X""H$>$>?l5 @l5^ 	W5W5t 	&5&5R 	55& X$$%5 &5 X$$%5 &5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X__) )( X__
$ 
$ X__  X__) )
 X__I I X__E E X  !N "N
 X  ! " X  !) ") X  ! " X  !" ""* X  X!!"
 #
 X!!" # X!!"# ## X../ 0 X''( ) X''(	 )	 X../	( 0	( X../	( 0	( X''(, )," X''(, )," X$$h&6&67D 8D X$$h&6&67D 8D X$$h&6&67' 8' X__: : X__: : X__0 0 X  !	" "	" X  !	" "	" X  !Y "Y
 U  () * U  () * U  () * U  () *: U  (%*=*=f*EF G U  (%*=*=f*EF9 G9 U  (%*=*=f*EF
 G
, U  (%*=*=f*EF= G= U  (%*=*=f*EF, G,. U  (%*=*=f*EF
 G
$ U  (%*=*=f*EF8 G84 U  (%*=*=f*EF
 G
, U  (%*=*=f*EF+3 G+3\ U  (%*=*=f*EF G U  (%*=*=f*EF2 G2> U  (%*=*=f*EF+ G+\ U  () *D=4 U  () *D U  ()! *! U  ()	! *	! U  () * U  () * U  () * U  ()" *" U  ()* ** U  () *& U  ()@ *@ U  () * U  ()! *! U  ()" *"J U  ()' *'T U  () * U  ()@ *@( U  () * U  () *
 U  ()? *?, U  () *: U  ()0 *0f U  ()9( *9(x X++, - X""# $" U  ()A *A U  ()" *"6 U  ()) *)X U  ()2 *2
 X//0- 1- X--./ // X""#$ $$ X##$	 %	 X""# $ U  () * U!!&)//0 1: U  () *  U  () * U  () *& U  () * U  ()9 *9B U  ()
 *
 U  ()? *?D U  () * U  ()
 *
 4  U  ()! *!HCTL U  () *$g*f g*T@& @&F
 { > >  > 'R
 ./N 0Nb	r+   