§
    |Øj²¦ ã                   ó2  — d Z ddlmZ ddlmZ ddlmZmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlZddlZddlZej        dz
  Z ej        e¦  «        ZdZdZ  G d„ de!¦  «        Z" G d„ de!¦  «        Z#d„ Z$ G d„ de!¦  «        Z% G d„ de%¦  «        Z& G d„ de%¦  «        Z' G d„ de%¦  «        Z( G d„ de%¦  «        Z) G d„ de)¦  «        Z* G d „ d!e)¦  «        Z+ G d"„ d#e!¦  «        Z, G d$„ d%e,¦  «        Z- G d&„ d'e-¦  «        Z. G d(„ d)e,¦  «        Z/ G d*„ d+e,¦  «        Z0 G d,„ d-e!¦  «        Z1 G d.„ d/e!¦  «        Z2 G d0„ d1e!¦  «        Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZA G d@„ dAe!¦  «        ZB G dB„ dCeB¦  «        ZC G dD„ dEeB¦  «        ZDdF„ ZEdG„ ZF G dH„ dIeB¦  «        ZG G dJ„ dKeB¦  «        ZH G dL„ dMeB¦  «        ZI G dN„ dOeI¦  «        ZJ G dP„ dQeI¦  «        ZK G dR„ dSeI¦  «        ZL G dT„ dUeB¦  «        ZM G dV„ dWe!¦  «        ZNdX„ ZOdY„ ZPdZ„ ZQd[„ ZRd\„ ZSd]„ ZTd^„ ZU G d_„ d`e!¦  «        ZV G da„ dbeB¦  «        ZWdc„ ZXdd„ ZYde„ ZZdf„ Z[dg„ Z\dh„ Z] G di„ djeI¦  «        Z^ G dk„ dleB¦  «        Z_ G dm„ dneB¦  «        Z`do„ Zadp„ Zbdq„ Zc G dr„ dse!¦  «        Zd G dt„ due!¦  «        Ze G dv„ dweB¦  «        Zfg dx‘dydzd{d ef¦   «         f‘d|‘d}‘dd~dd eD¦   «         f‘d€d�dd eD¦   «         f‘d‚dƒdd eD¦   «         f‘d„d…dd eD¦   «         f‘d†d‡dd eD¦   «         f‘dˆ‘d‰‘dŠ‘d‹‘dŒ‘d�‘dŽ‘d�d�d‘g d’¢df‘d“‘d”d•d‘g d–¢df‘d—‘d˜‘d™‘dš‘d›‘dœ‘d�‘dž‘dŸ‘d d¡d¢d eM¦   «         f‘d£‘d¤d¥d¢d eW¦   «         f‘d¦d§d¨d eJ¦   «         f‘d©d/d¢d e_¦   «         f‘dªd«d¢d e^¦   «         f‘d¬d1d¢d eL¦   «         f‘d­d®d¢d e`¦   «         f‘Zgdxd�d�d‘g d’¢dfd©d/d¢d e_¦   «         fdªd«d¢d e^¦   «         fd¬d1d¢d eL¦   «         fd­d®d¢d e`¦   «         fgZhd¯Zid°Zjd±ejeid²ddfd³d´dµd¶d·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇd¢d eK¦   «         fgZkd±ejeid²ddfd³d´dµd¶d·d¸d¹dºd»d¼d½dÁdÂdÆdÇd¢d eK¦   «         fgZldÈ„ Zm emek¦  «          emeg¦  «          G dÉ„ dÊejn        ¦  «        Zo G dË„ dÌejn        ¦  «        Zp G dÍ„ dÎe!¦  «        ZqdÏ„ Zr G dÐ„ dÑeq¦  «        Zs G dÒ„ dÓeq¦  «        Zt G dÔ„ dÕeq¦  «        Zu G dÖ„ d×e!¦  «        Zv G dØ„ dÙev¦  «        Zw G dÚ„ dÛev¦  «        Zx G dÜ„ dÝev¦  «        Zy G dÞ„ dße!¦  «        Zzg dà¢Z{dáZ| e}e{¦  «        e|k    sJ ‚i Z~ ee|¦  «        D ]Z€e€e~e{e€         <   Œg dâ¢Z�dãZ‚ e}e�¦  «        e‚k    sJ ‚g dä¢ZƒdåZ„ e}eƒ¦  «        e„k    sJ ‚g dæ¢Z…dçZ† e}e…¦  «        e†k    sJ ‚dS )èa+  cffLib: read/write Adobe CFF fonts

OpenType fonts with PostScript outlines embed a completely independent
font file in Adobe's *Compact Font Format*. So dealing with OpenType fonts
requires also dealing with CFF. This module allows you to read and write
fonts written in the CFF format.

In 2016, OpenType 1.8 introduced the `CFF2 <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2>`_
format which, along with other changes, extended the CFF format to deal with
the demands of variable fonts. This module parses both original CFF and CFF2.

é    )Ússtruct)ÚpsCharStrings)Ú	unionRectÚintRect)ÚbytechrÚbyteordÚ	bytesjoinÚtobytesÚtostrÚsafeEval)ÚTTFont)ÚOTTableWriter)ÚOTTableReader)ÚotTables)ÚBytesIONé   z%
	major:   B
	minor:   B
	hdrSize: B
i  c                   óf   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zdd„Z	d	„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú
CFFFontSetan  A CFF font "file" can contain more than one font, although this is
    extremely rare (and not allowed within OpenType fonts).

    This class is the entry point for parsing a CFF table. To actually
    manipulate the data inside the CFF font, you will want to access the
    ``CFFFontSet``'s :class:`TopDict` object. To do this, a ``CFFFontSet``
    object can either be treated as a dictionary (with appropriate
    ``keys()`` and ``values()`` methods) mapping font names to :class:`TopDict`
    objects, or as a list.

    .. code:: python

            from fontTools import ttLib
            tt = ttLib.TTFont("Tests/cffLib/data/LinLibertine_RBI.otf")
            tt["CFF "].cff
            # <fontTools.cffLib.CFFFontSet object at 0x101e24c90>
            tt["CFF "].cff[0] # Here's your actual font data
            # <fontTools.cffLib.TopDict object at 0x1020f1fd0>

    Nc                 óÄ  — || _         t          j        t          |                     d¦  «        | ¦  «         |�+|rdnd}| j        |k    rt          d|| j        fz  ¦  «        ‚n| j        dv s
J d¦   «         ‚| j        dk    }|s¥t          j        d|                     d¦  «        ¦  «        d	         | _        | 	                    | j
        ¦  «         t          d
„ t          ||¬¦  «        D ¦   «         ¦  «        | _        t          ||¬¦  «        | _        t!          |¦  «        | _        n€t          j        d|                     d¦  «        ¦  «        d	         | _        | 	                    | j
        ¦  «         dg| _        |j        }t          ||| j        |¬¦  «        | _        d| _        t)          ||¬¦  «        | _        | j        | j        _        | j        | j        _        dS )a‹  Parse a binary CFF file into an internal representation. ``file``
        should be a file handle object. ``otFont`` is the top-level
        :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

        If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
        library makes an assertion that the CFF header is of the appropriate
        version.
        é   Né   r   ú2Invalid CFF 'major' version: expected %d, found %d©r   r   úUnknown CFF formatÚBr   c              3   ó8   K  — | ]}t          |d ¬¦  «        V — ŒdS )Úlatin1©ÚencodingN©r   ©Ú.0Úss     úŽ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/fontTools/cffLib/__init__.pyú	<genexpr>z'CFFFontSet.decompile.<locals>.<genexpr>b   s@   è è € ð "ð "Ø01•�a (Ð+Ñ+Ô+ð"ð "ð "ð "ð "ð "ó    ©ÚisCFF2ú>HÚCFF2Font)ÚotFontr   ÚunpackÚcffHeaderFormatÚreadÚmajorÚ
ValueErrorÚstructÚoffSizeÚseekÚhdrSizeÚlistÚIndexÚ	fontNamesÚTopDictIndexÚtopDictIndexÚIndexedStringsÚstringsÚtopDictSizeÚgetGlyphOrderÚGlobalSubrsIndexÚGlobalSubrs)ÚselfÚfiler+   r(   Úexpected_majorÚcff2GetGlyphOrders         r$   Ú	decompilezCFFFontSet.decompileF   sê  € ð ˆŒÝŒ•¨¯	ª	°!©¬°dÑ;Ô;Ð;ØÐð #)Ð/˜Q˜Q¨aˆNØŒz˜^Ò+Ð+Ý ØHØ% t¤zÐ2ñ3ñô ð ð ,ð ”: Ð'Ð'Ð'Ð)=Ñ'Ô'Ð'Ø”Z 1’_ˆFØð 	 Ý!œ=¨¨d¯iªi¸©l¬lÑ;Ô;¸AÔ>ˆDŒLØ�IŠI�d”lÑ#Ô#Ð#Ý!ð "ð "Ý5:¸4ÈÐ5OÑ5OÔ5Oð"ñ "ô "ñ ô ˆDŒNõ !-¨T¸&Ð AÑ AÔ AˆDÔÝ)¨$Ñ/Ô/ˆDŒLˆLå%œ}¨T°4·9²9¸Q±<´<Ñ@Ô@ÀÔCˆDÔØ�IŠI�d”lÑ#Ô#Ð#Ø(˜\ˆDŒNØ &Ô 4Ðå ,ØÐ'¨Ô)9À&ð!ñ !ô !ˆDÔð  ˆDŒLÝ+¨D¸Ð@Ñ@Ô@ˆÔØ$(¤LˆÔÔ!Ø(,Ô(8ˆÔÔ%Ð%Ð%r&   c                 ó*   — t          | j        ¦  «        S ©N)Úlenr7   ©r@   s    r$   Ú__len__zCFFFontSet.__len__u   s   € Ý�4”>Ñ"Ô"Ð"r&   c                 ó*   — t          | j        ¦  «        S rF   )r5   r7   rH   s    r$   ÚkeyszCFFFontSet.keysx   s   € Ý�D”NÑ#Ô#Ð#r&   c                 ó   — | j         S rF   )r9   rH   s    r$   ÚvalueszCFFFontSet.values{   s   € ØÔ Ð r&   c                 ó$  — t          |d¦  «        r|                     ¦   «         }n_t          |t          ¦  «        r;|}	 | j                             |¦  «        }n,# t          $ r t          |¦  «        ‚w xY wt          |¦  «        ‚| j	        |         S )z{Return TopDict instance identified by name (str) or index (int
        or any object that implements `__index__`).
        Ú	__index__)
ÚhasattrrO   Ú
isinstanceÚstrr7   Úindexr0   ÚKeyErrorÚ	TypeErrorr9   )r@   ÚnameOrIndexrS   Únames       r$   Ú__getitem__zCFFFontSet.__getitem__~   s£   € õ �; Ñ,Ô,ð 		)Ø×)Ò)Ñ+Ô+ˆEˆEÝ˜¥SÑ)Ô)ð 	)ØˆDð,Øœ×,Ò,¨TÑ2Ô2��øÝð ,ð ,ð ,Ý˜{Ñ+Ô+Ð+ð,øøøõ ˜KÑ(Ô(Ð(ØÔ  Ô'Ð's   ¾A ÁA3c                 óÐ  — || _         |�+|rdnd}| j        |k    rt          d|| j        fz  ¦  «        ‚n| j        dv s
J d¦   «         ‚| j        dk    }|j        r |s| j        D ]}|                     ¦   «          Œ|st          ¦   «         }nd}t          |¦  «        }| j                             || |¬¦  «        }|r{d| _	        | 
                    t          j        t          | ¦  «        ¦  «         |                     ¦   «         | _        | 
                    t!          j        d	| j        ¦  «        ¦  «         nhd
| _	        d
| _        | 
                    t          j        t          | ¦  «        ¦  «         | 
                    t!          j        d| j        ¦  «        ¦  «         |sXt%          ¦   «         }	| j        D ]}
|	                     |
¦  «         Œ| 
                    |	                     || |¬¦  «        ¦  «         | 
                    |¦  «         |s'| 
                    |                     ¦   «         ¦  «         | 
                    | j                             || |¬¦  «        ¦  «         | j        D ]4}t-          |d¦  «        r|j        €|                     ¦   «         }||_        Œ5|                     |¦  «        }|D ]}| 
                    |¦  «         Œ|                     |¦  «         dS )a˜  Write the object back into binary representation onto the given file.
        ``file`` should be a file handle object. ``otFont`` is the top-level
        :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

        If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
        library makes an assertion that the CFF header is of the appropriate
        version.
        Nr   r   r   r   r   r'   é   r)   é   r   Úcharset)r+   r/   r0   ÚrecalcBBoxesr9   ÚrecalcFontBBoxr:   Ú	CFFWriterÚgetCompilerr4   Úaddr   Úpackr-   ÚgetDataLengthr<   r1   r2   r6   r7   Úappendr?   rP   r\   r=   ÚgetChildrenÚtoFile)r@   rA   r+   r(   rB   ÚtopDictr;   ÚwriterÚtopCompilerr7   rW   r\   ÚchildrenÚchilds                 r$   ÚcompilezCFFFontSet.compileŽ   s  € ð ˆŒØÐà"(Ð/˜Q˜Q¨aˆNØŒz˜^Ò+Ð+Ý ØHØ% t¤zÐ2ñ3ñô ð ð ,ð ”: Ð'Ð'Ð'Ð)=Ñ'Ô'Ð'Ø”Z 1’_ˆFàÔð 	) vð 	)ØÔ,ð )ð )�Ø×&Ò&Ñ(Ô(Ð(Ð(àð 	Ý$Ñ&Ô&ˆGˆGàˆGÝ˜6Ñ"Ô"ˆØÔ'×3Ò3°G¸TÈ&Ð3ÑQÔQˆØð 
	7ØˆDŒLØ�JŠJ•w”|¥O°TÑ:Ô:Ñ;Ô;Ð;à*×8Ò8Ñ:Ô:ˆDÔØ�JŠJ•v”{ 4¨Ô)9Ñ:Ô:Ñ;Ô;Ð;Ð;àˆDŒLØˆDŒLØ�JŠJ•w”|¥O°TÑ:Ô:Ñ;Ô;Ð;Ø�JŠJ•v”{ 3¨¬Ñ5Ô5Ñ6Ô6Ð6Øð 	LÝ™œˆIØœð 'ð '�Ø× Ò  Ñ&Ô&Ð&Ð&Ø�JŠJ�y×,Ò,¨W°dÀ6Ð,ÑJÔJÑKÔKÐKØ�
Š
�;ÑÔÐØð 	.Ø�JŠJ�w×*Ò*Ñ,Ô,Ñ-Ô-Ð-Ø�
Š
�4Ô#×/Ò/°¸ÀfÐ/ÑMÔMÑNÔNÐNàÔ(ð 	*ð 	*ˆGÝ˜7 IÑ.Ô.ð *°'´/Ð2IØ ×.Ò.Ñ0Ô0�Ø")�”øØ×*Ò*¨7Ñ3Ô3ˆØð 	ð 	ˆEØ�JŠJ�uÑÔÐÐà�Š�dÑÔÐÐÐr&   c                 óÖ  — |                      d| j        ¬¦  «         |                     ¦   «          |                      d| j        ¬¦  «         |                     ¦   «          | j        D ]€}|                     dt          |¦  «        ¬¦  «         |                     ¦   «          | |         }|                     |¦  «         |                     d¦  «         |                     ¦   «          Œ�|                     ¦   «          |                     d¦  «         |                     ¦   «          | j	                             |¦  «         |                     d¦  «         |                     ¦   «          dS )z÷Write the object into XML representation onto the given
        :class:`fontTools.misc.xmlWriter.XMLWriter`.

        .. code:: python

                writer = xmlWriter.XMLWriter(sys.stdout)
                tt["CFF "].cff.toXML(writer)

        r/   ©ÚvalueÚminorÚCFFFont©rW   r?   N)
Ú	simpletagr/   Únewlinerp   r7   Úbegintagr   ÚtoXMLÚendtagr?   )r@   Ú	xmlWriterÚfontNameÚfonts       r$   rv   zCFFFontSet.toXMLÎ   s_  € ð 	×Ò˜G¨4¬:ÐÑ6Ô6Ð6Ø×ÒÑÔÐØ×Ò˜G¨4¬:ÐÑ6Ô6Ð6Ø×ÒÑÔÐØœð 	 ð 	 ˆHØ×Ò˜y­u°X©¬ÐÑ?Ô?Ð?Ø×ÒÑÔÐØ˜”>ˆDØ�JŠJ�yÑ!Ô!Ð!Ø×Ò˜YÑ'Ô'Ð'Ø×ÒÑÔÐÐØ×ÒÑÔÐØ×Ò˜=Ñ)Ô)Ð)Ø×ÒÑÔÐØÔ×Ò˜yÑ)Ô)Ð)Ø×Ò˜Ñ'Ô'Ð'Ø×ÒÑÔÐÐÐr&   c                 ó,  — || _         t          | d¦  «        sd| _        t          | d¦  «        sd| _        |dk    �r | j        dk    rºt          | d¦  «        sd| _        t          | d¦  «        sd| _        t          | d	¦  «        st          ¦   «         | _        t          | d
¦  «        sg | _        t          ¦   «         | _
        |d         }| j                             |¦  «         t          | j        ¬¦  «        }d|_        n”| j        dk    r‰t          | d¦  «        sd| _        t          | d	¦  «        st          ¦   «         | _        t          | d
¦  «        sdg| _        | j         j        }t          | j        |¬¦  «        }t          d|¦  «        | _
        | j
                             |¦  «         |D ]5}t          |t           ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6t          |d¦  «        r?|j        d         j        €/|j        }	|	D ]'}
t          |
d¦  «        r|j        |
j        _        Œ$dS dS dS |d	k    r�t,          j        }t          | d	¦  «        st          ¦   «         | _        |D ]Y}t          |t           ¦  «        rŒ|\  }}} |¦   «         }|                     |||¦  «         | j                             |¦  «         ŒZdS |dk    rt1          |d         ¦  «        | _        dS |dk    rt1          |d         ¦  «        | _        dS dS )z?Reads data from the XML element into the ``CFFFontSet`` object.r/   r   rp   r   rq   r2   r[   r4   r?   r7   rW   )r?   Nr   rZ   r*   )r?   rC   ÚVarStoreÚPrivatero   )r+   rP   r/   rp   r2   r4   r>   r?   r7   r8   r9   rd   ÚTopDictr\   r=   rQ   rR   ÚfromXMLÚFDArrayÚvstorer|   r}   r   ÚT2CharStringÚint)r@   rW   ÚattrsÚcontentr+   ry   rg   rC   ÚelementÚfdArrayÚfontDictÚsubrCharStringClassÚsubrs                r$   r   zCFFFontSet.fromXMLë   sr  € àˆŒõ �t˜WÑ%Ô%ð 	ØˆDŒJÝ�t˜WÑ%Ô%ð 	ØˆDŒJà�9ÒÑØŒz˜QŠˆÝ˜t YÑ/Ô/ð %à#$�D”LÝ˜t YÑ/Ô/ð %Ø#$�D”LÝ˜t ]Ñ3Ô3ð :Ý'7Ñ'9Ô'9�DÔ$Ý˜t [Ñ1Ô1ð 7Ø%'�D”NÝ(4©¬�DÔ%Ø  œ=�Ø”×%Ò% hÑ/Ô/Ð/Ý!¨dÔ.>Ð?Ñ?Ô?�Ø"&�”�Ø”˜q’�Ý˜t YÑ/Ô/ð %Ø#$�D”LÝ˜t ]Ñ3Ô3ð :Ý'7Ñ'9Ô'9�DÔ$Ý˜t [Ñ1Ô1ð 2Ø&0 \�D”NØ$(¤KÔ$=Ð!Ý!Ø $Ô 0ÐDUðñ ô �õ %1°Ð7HÑ$IÔ$I�Ô!ØÔ×$Ò$ WÑ-Ô-Ð-Ø"ð 6ð 6�Ý˜g¥sÑ+Ô+ð ØØ'.Ñ$��e˜WØ—’  e¨WÑ5Ô5Ð5Ð5å�w 
Ñ+Ô+ð C°´ÀÔ0BÔ0IÐ0QØ!œ/�Ø 'ð Cð C�HÝ˜x¨Ñ3Ô3ð CØ29Ô2B˜Ô(Ô/øð	Cð CÐ0QÐ0QðCð Cð �]Ò"Ð"Ý"/Ô"<ÐÝ˜4 Ñ/Ô/ð 6Ý#3Ñ#5Ô#5�Ô Ø"ð .ð .�Ý˜g¥sÑ+Ô+ð ØØ'.Ñ$��e˜WØ*Ð*Ñ,Ô,�Ø—’˜T 5¨'Ñ2Ô2Ð2ØÔ ×'Ò'¨Ñ-Ô-Ð-Ð-ð.ð .ð �WŠ_ˆ_Ý˜U 7œ^Ñ,Ô,ˆDŒJˆJˆJØ�WŠ_ˆ_Ý˜U 7œ^Ñ,Ô,ˆDŒJˆJˆJð ˆ_r&   c                 ó*   — ddl m}  || |¦  «         d S )Nr   )Ú_convertCFFToCFF2)Ú	CFFToCFF2rŒ   )r@   r+   rŒ   s      r$   ÚconvertCFFToCFF2zCFFFontSet.convertCFFToCFF2/  ó-   € Ø0Ð0Ð0Ð0Ð0Ð0àÐ˜$ Ñ'Ô'Ð'Ð'Ð'r&   c                 ó*   — ddl m}  || |¦  «         d S )Nr   )Ú_convertCFF2ToCFF)Ú	CFF2ToCFFr‘   )r@   r+   r‘   s      r$   ÚconvertCFF2ToCFFzCFFFontSet.convertCFF2ToCFF4  r�   r&   c                 ó(   — ddl m}  || ¦  «         d S )Nr   )Údesubroutinize)Ú
transformsr•   )r@   r•   s     r$   r•   zCFFFontSet.desubroutinize9  s*   € Ø.Ð.Ð.Ð.Ð.Ð.àˆ�tÑÔÐÐÐr&   c                 ó(   — ddl m}  || ¦  «         d S )Nr   )Úremove_hints)r–   r˜   )r@   r˜   s     r$   r˜   zCFFFontSet.remove_hints>  s*   € Ø,Ð,Ð,Ð,Ð,Ð,àˆ�TÑÔÐÐÐr&   c                 ó(   — ddl m}  || ¦  «         d S )Nr   )Úremove_unused_subroutines)r–   rš   )r@   rš   s     r$   rš   z$CFFFontSet.remove_unused_subroutinesC  s+   € Ø9Ð9Ð9Ð9Ð9Ð9à!Ð! $Ñ'Ô'Ð'Ð'Ð'r&   rF   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   rI   rK   rM   rX   rl   rv   r   rŽ   r“   r•   r˜   rš   © r&   r$   r   r   0   s÷   € € € € € ðð ð*-9ð -9ð -9ð -9ð^#ð #ð #ð$ð $ð $ð!ð !ð !ð(ð (ð (ð >ð >ð >ð >ð@ð ð ð:B-ð B-ð B-ð B-ðH(ð (ð (ð
(ð (ð (ð
ð ð ð
ð ð ð
(ð (ð (ð (ð (r&   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )r_   zXHelper class for serializing CFF data to binary. Used by
    :meth:`CFFFontSet.compile`.c                 ó"   — g | _         || _        d S rF   )Údatar(   ©r@   r(   s     r$   Ú__init__zCFFWriter.__init__M  s   € ØˆŒ	ØˆŒˆˆr&   c                 ó:   — | j                              |¦  «         d S rF   )r¢   rd   )r@   Útables     r$   ra   zCFFWriter.addQ  s   € ØŒ	×Ò˜ÑÔÐÐÐr&   c                 ó  — d }d}	 t                                 t          d|¦  «         |dz   }d}|g}| j        D ]®}t          |d¦  «        rM||                     ¦   «         z   }t          |t          ¦  «        r |j        r|                     ¦   «         | _        n|t          |¦  «        z   }t          |d¦  «        r| 
                    ||¦  «         |}|                     |¦  «         Œ¯||k    rn|}Œët                                 t          d¦  «         |                     ¦   «         }| j        r#t          j        d| j        ¦  «        | j        d<   n<t          |d	         ¦  «        | _        t          j        d
| j        ¦  «        | j        d<   dg}| j        D ]g}t          |d¦  «        r|                     |¦  «         n|                     |¦  «         |                     |                     ¦   «         |z
  ¦  «         Œh||k    sJ ‚d S )Nr   Tz CFFWriter.toFile() iteration: %dr   rc   ÚsetPosz#CFFWriter.toFile() writing to file.r)   éÿÿÿÿr   rf   )ÚlogÚDEBUGr¢   rP   rc   rQ   ÚTopDictIndexCompilerr(   r<   rG   r¨   rd   Útellr1   rb   ÚcalcOffSizer2   rf   Úwrite)	r@   rA   ÚlastPosListÚcountÚposÚposListÚitemÚendPosÚbegins	            r$   rf   zCFFWriter.toFileT  s  € ØˆØˆð	"Ý�GŠG•EÐ=¸uÑEÔEÐEØ˜A‘IˆEØˆCØ�eˆGØœ	ð 
$ð 
$�Ý˜4 Ñ1Ô1ð -Ø  4×#5Ò#5Ñ#7Ô#7Ñ7�FÝ! $Õ(<Ñ=Ô=ð @À$Ä+ð @Ø+/×+=Ò+=Ñ+?Ô+?˜Ô(øà ¥3 t¡9¤9™_�FÝ˜4 Ñ*Ô*ð -Ø—K’K  VÑ,Ô,Ð,Ø�Ø—’˜sÑ#Ô#Ð#Ð#Ø˜+Ò%Ð%ØØ!ˆKð%	"õ& 	�Š•Ð<Ñ=Ô=Ð=Ø—	’	‘”ˆØŒ;ð 	:Ý!œ; t¨TÔ-=Ñ>Ô>ˆDŒI�a‰LˆLå& {°2¤Ñ7Ô7ˆDŒLÝ!œ; s¨D¬LÑ9Ô9ˆDŒI�a‰LØ�#ˆØ”Ið 	0ð 	0ˆDÝ�t˜XÑ&Ô&ð !Ø—’˜DÑ!Ô!Ð!Ð!à—
’
˜4Ñ Ô Ð Ø�NŠN˜4Ÿ9š9™;œ;¨Ñ.Ñ/Ô/Ð/Ð/Ø˜+Ò%Ð%Ð%Ð%Ð%Ð%r&   N)r›   rœ   r�   rž   r¤   ra   rf   rŸ   r&   r$   r_   r_   I  sK   € € € € € ð#ð #ðð ð ð ð  ð  ð$&ð $&ð $&ð $&ð $&r&   r_   c                 ó@   — | dk     rd}n| dk     rd}n| dk     rd}nd}|S )Né   r   i   r   i   r   r[   rŸ   )ÚlargestOffsetr2   s     r$   r®   r®   {  sB   € Ø�uÒÐØˆˆØ	˜Ò	 Ð	 ØˆˆØ	˜Ò	"Ð	"ØˆˆàˆØ€Nr&   c                   ó2   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ ZdS )	ÚIndexCompilerz…Base class for writing CFF `INDEX data <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#5-index-data>`_
    to binary.Nc                 ó’   — |€t          |d¦  «        r|j        }|€J ‚|| _        |                      ||¦  «        | _        || _        d S ©Nr(   )rP   r(   ÚgetItemsÚitemsÚparent)r@   r¿   r;   rÀ   r(   s        r$   r¤   zIndexCompiler.__init__‹  sO   € Øˆ>�g f¨hÑ7Ô7ˆ>Ø”]ˆFØÐ%Ð%Ð%ØˆŒØ—]’] 5¨'Ñ2Ô2ˆŒ
ØˆŒˆˆr&   c                 ó   — |S rF   rŸ   ©r@   r¿   r;   s      r$   r¾   zIndexCompiler.getItems“  ó   € Øˆr&   c                 óÖ   — | j         r_d}|g}| j         D ]Q}t          |d¦  «        r||                     ¦   «         z   }n|t          |¦  «        z   }|                     |¦  «         ŒRng }|S )Nr   rc   )r¿   rP   rc   rG   rd   )r@   r²   Úoffsetsr´   s       r$   Ú
getOffsetszIndexCompiler.getOffsets–  sˆ   € àŒ:ð 
	ØˆCØ�eˆGØœ
ð $ð $�Ý˜4 Ñ1Ô1ð *Ø × 2Ò 2Ñ 4Ô 4Ñ4�C�Cà¥ D¡	¤	™/�CØ—’˜sÑ#Ô#Ð#Ð#ð$ð ˆGØˆr&   c                 óÐ   — | j         rd}nd}| j        rP|                      ¦   «         d         }t          |¦  «        }|dz   t	          | j        ¦  «        dz   |z  z   |z   dz
  }n|}|S )Nr[   r   r©   r   )r(   r¿   rÆ   r®   rG   )r@   Ú	countSizeÚ
lastOffsetr2   Ú
dataLengths        r$   rc   zIndexCompiler.getDataLength¥  s�   € ØŒ;ð 	ØˆIˆIàˆIàŒ:ð 	#ØŸšÑ*Ô*¨2Ô.ˆJÝ! *Ñ-Ô-ˆGàØñå�t”z‘?”? QÑ&¨'Ñ1ñ2ð ñð ñ	ð ˆJð #ˆJàÐr&   c                 ót  — |                       ¦   «         }| j        r#t          |t          | j        ¦  «        ¦  «         n"t          |t          | j        ¦  «        ¦  «         | j        rÎt          |d         ¦  «        }t          ||¦  «         | }t          j	        }|D ]A} |d|¦  «        |d …         }t          |¦  «        | k    sJ ‚| 
                    |¦  «         ŒB| j        D ]P}t          |d¦  «        r|                     |¦  «         Œ(t          |d¬¦  «        }| 
                    |¦  «         ŒOd S d S )Nr©   ú>lrf   r   r   )rÆ   r(   ÚwriteCard32rG   r¿   ÚwriteCard16r®   Ú
writeCard8r1   rb   r¯   rP   rf   r
   )	r@   rA   rÅ   r2   rb   ÚoffsetÚ	binOffsetr´   r¢   s	            r$   rf   zIndexCompiler.toFile»  sQ  € Ø—/’/Ñ#Ô#ˆØŒ;ð 	/Ý˜�c $¤*™oœoÑ.Ô.Ð.Ð.å˜�c $¤*™oœoÑ.Ô.Ð.àŒ:ð 	%Ý! '¨"¤+Ñ.Ô.ˆGÝ�t˜WÑ%Ô%Ð%Ø�hˆGÝ”;ˆDØ!ð &ð &�Ø ˜D  vÑ.Ô.¨w¨x¨xÔ8�	Ý˜9‘~”~¨'¨Ò1Ð1Ð1Ð1Ø—
’
˜9Ñ%Ô%Ð%Ð%Øœ
ð %ð %�Ý˜4 Ñ*Ô*ð %Ø—K’K Ñ%Ô%Ð%Ð%å" 4°(Ð;Ñ;Ô;�DØ—J’J˜tÑ$Ô$Ð$Ð$ð	%ð 	%ð%ð %r&   rF   )	r›   rœ   r�   rž   r¤   r¾   rÆ   rc   rf   rŸ   r&   r$   r»   r»   ‡  sn   € € € € € ðð ðð ð ð ðð ð ðð ð ðð ð ð,%ð %ð %ð %ð %r&   r»   c                   ó   — e Zd Zd„ ZdS )ÚIndexedStringsCompilerc                 ó   — |j         S rF   ©r;   rÂ   s      r$   r¾   zIndexedStringsCompiler.getItemsÔ  s
   € ØŒ}Ðr&   N)r›   rœ   r�   r¾   rŸ   r&   r$   rÓ   rÓ   Ó  s#   € € € € € ðð ð ð ð r&   rÓ   c                   óB   ‡ — e Zd ZdZd„ Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZ	S )r¬   z/Helper class for writing the TopDict to binary.c                 óf   — g }|D ]+}|                      |                     || ¦  «        ¦  «         Œ,|S rF   ©rd   r`   ©r@   r¿   r;   Úoutr´   s        r$   r¾   zTopDictIndexCompiler.getItemsÛ  ó@   € ØˆØð 	8ð 	8ˆDØ�JŠJ�t×'Ò'¨°Ñ6Ô6Ñ7Ô7Ð7Ð7Øˆ
r&   c                 ón   — g }| j         D ]*}|                     |                     |¦  «        ¦  «         Œ+|S rF   ©r¿   Úextendre   )r@   r;   rj   rg   s       r$   re   z TopDictIndexCompiler.getChildrená  s@   € ØˆØ”zð 	:ð 	:ˆGØ�OŠO˜G×/Ò/°Ñ8Ô8Ñ9Ô9Ð9Ð9Øˆr&   c                 ó¦   •— | j         r#d| j        d                              ¦   «         g}|S t          t          | ¦  «                             ¦   «         S ©Nr   )r(   r¿   rc   Úsuperr¬   rÆ   )r@   rÅ   Ú	__class__s     €r$   rÆ   zTopDictIndexCompiler.getOffsetsç  sL   ø€ ØŒ;ð 	BØ˜$œ* Qœ-×5Ò5Ñ7Ô7Ð8ˆGØˆNåÕ-¨tÑ4Ô4×?Ò?ÑAÔAÐAr&   c                 ó¢   •— | j         r!| j        d                              ¦   «         }|S t          t          | ¦  «                             ¦   «         S rà   )r(   r¿   rc   rá   r¬   )r@   rÊ   râ   s     €r$   rc   z"TopDictIndexCompiler.getDataLengthî  sH   ø€ ØŒ;ð 	EØœ Aœ×4Ò4Ñ6Ô6ˆJØÐåÕ-¨tÑ4Ô4×BÒBÑDÔDÐDr&   c                 óª   •— | j         r"| j        d                              |¦  «         d S t          t          | ¦  «                             |¦  «         d S rà   )r(   r¿   rf   rá   r¬   )r@   rA   râ   s     €r$   rf   zTopDictIndexCompiler.toFileõ  sR   ø€ ØŒ;ð 	;ØŒJ�qŒM× Ò  Ñ&Ô&Ð&Ð&Ð&åÕ&¨Ñ-Ô-×4Ò4°TÑ:Ô:Ð:Ð:Ð:r&   )
r›   rœ   r�   rž   r¾   re   rÆ   rc   rf   Ú__classcell__©râ   s   @r$   r¬   r¬   Ø  s˜   ø€ € € € € Ø9Ð9ðð ð ðð ð ðBð Bð Bð Bð BðEð Eð Eð Eð Eð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r&   r¬   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚFDArrayIndexCompilerz®Helper class for writing the
    `Font DICT INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#10-font-dict-index-font-dicts-and-fdselect>`_
    to binary.c                 óf   — g }|D ]+}|                      |                     || ¦  «        ¦  «         Œ,|S rF   rØ   rÙ   s        r$   r¾   zFDArrayIndexCompiler.getItems  rÛ   r&   c                 ón   — g }| j         D ]*}|                     |                     |¦  «        ¦  «         Œ+|S rF   rÝ   )r@   r;   rj   rˆ   s       r$   re   z FDArrayIndexCompiler.getChildren  s@   € ØˆØœ
ð 	;ð 	;ˆHØ�OŠO˜H×0Ò0°Ñ9Ô9Ñ:Ô:Ð:Ð:Øˆr&   c                 ó@  — |                       ¦   «         }| j        r#t          |t          | j        ¦  «        ¦  «         n"t          |t          | j        ¦  «        ¦  «         t          |d         ¦  «        }t          ||¦  «         | }t          j	        }|D ]A} |d|¦  «        |d …         }t          |¦  «        | k    sJ ‚| 
                    |¦  «         ŒB| j        D ]=}t          |d¦  «        r|                     |¦  «         Œ(| 
                    |¦  «         Œ>d S )Nr©   rÌ   rf   )rÆ   r(   rÍ   rG   r¿   rÎ   r®   rÏ   r1   rb   r¯   rP   rf   )r@   rA   rÅ   r2   rb   rÐ   rÑ   r´   s           r$   rf   zFDArrayIndexCompiler.toFile  s+  € Ø—/’/Ñ#Ô#ˆØŒ;ð 	/Ý˜�c $¤*™oœoÑ.Ô.Ð.Ð.å˜�c $¤*™oœoÑ.Ô.Ð.Ý˜g bœkÑ*Ô*ˆÝ�4˜Ñ!Ô!Ð!Ø�(ˆÝŒ{ˆØð 	"ð 	"ˆFØ˜˜T 6Ñ*Ô*¨7¨8¨8Ô4ˆIÝ�y‘>”> g XÒ-Ð-Ð-Ð-Ø�JŠJ�yÑ!Ô!Ð!Ð!Ø”Jð 	!ð 	!ˆDÝ�t˜XÑ&Ô&ð !Ø—’˜DÑ!Ô!Ð!Ð!à—
’
˜4Ñ Ô Ð Ð ð		!ð 	!r&   c                 ó$   — || j         j        d<   d S )Nr€   ©rÀ   ÚrawDict©r@   r²   rµ   s      r$   r¨   zFDArrayIndexCompiler.setPos!  ó   € Ø),ˆŒÔ˜IÑ&Ð&Ð&r&   N)r›   rœ   r�   rž   r¾   re   rf   r¨   rŸ   r&   r$   rè   rè   ü  sZ   € € € € € ðð ðð ð ðð ð ð!ð !ð !ð(-ð -ð -ð -ð -r&   rè   c                   ó   — e Zd ZdZd„ ZdS )ÚGlobalSubrsCompilerz§Helper class for writing the `global subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 ó|   — g }|D ]6}|                      | j        ¦  «         |                     |j        ¦  «         Œ7|S rF   ©rl   r(   rd   Úbytecode©r@   r¿   r;   rÚ   Úcss        r$   r¾   zGlobalSubrsCompiler.getItems)  óF   € ØˆØð 	$ð 	$ˆBØ�JŠJ�t”{Ñ#Ô#Ð#Ø�JŠJ�r”{Ñ#Ô#Ð#Ð#Øˆ
r&   N)r›   rœ   r�   rž   r¾   rŸ   r&   r$   rò   rò   %  s-   € € € € € ðð ðð ð ð ð r&   rò   c                   ó   — e Zd ZdZd„ ZdS )ÚSubrsCompilerz¦Helper class for writing the `local subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 óB   — || j         j        z
  }|| j         j        d<   d S ©NÚSubrs)rÀ   r²   rî   )r@   r²   rµ   rÐ   s       r$   r¨   zSubrsCompiler.setPos5  s%   € Ø�t”{”Ñ&ˆØ'-ˆŒÔ˜GÑ$Ð$Ð$r&   N)r›   rœ   r�   rž   r¨   rŸ   r&   r$   rú   rú   1  s-   € € € € € ðð ð.ð .ð .ð .ð .r&   rú   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCharStringsCompilerz¡Helper class for writing the `CharStrings INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 ó|   — g }|D ]6}|                      | j        ¦  «         |                     |j        ¦  «         Œ7|S rF   rô   rö   s        r$   r¾   zCharStringsCompiler.getItems>  rø   r&   c                 ó$   — || j         j        d<   d S ©NÚCharStringsrí   rï   s      r$   r¨   zCharStringsCompiler.setPosE  s   € Ø-0ˆŒÔ˜MÑ*Ð*Ð*r&   N)r›   rœ   r�   rž   r¾   r¨   rŸ   r&   r$   rÿ   rÿ   :  s<   € € € € € ðð ðð ð ð1ð 1ð 1ð 1ð 1r&   rÿ   c                   óJ   — e Zd ZdZeZdd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zdd	„Zd
„ ZdS )r6   z§This class represents what the CFF spec calls an INDEX (an array of
    variable-sized objects). `Index` items can be addressed and set using
    Python list indexing.Nc                 ó€  — g | _         g x| _        }| j        j        }|€d S || _        t
                               t          d||                     ¦   «         ¦  «         || _        |rt          |¦  «        }nt          |¦  «        }|dk    rd S d g|z  | _         t          |¦  «        }t
                               t          d||¦  «         |dk    sJ d|z  ¦   «         ‚dd|z
  z  }t          |dz   ¦  «        D ]U}|                     |¦  «        }	||	z   }	t          j        d|	¦  «        \  }
|                     t#          |
¦  «        ¦  «         ŒV|                     ¦   «         dz
  | _        |                     | j        |d	         z   ¦  «         t
                               t          d
||                     ¦   «         ¦  «         d S )Núloading %s at %sr   z    index count: %s offSize: %sr[   zoffSize too large: %só    r   ú>Lr©   ú    end of %s at %s)r¿   rÅ   râ   r›   Ú_isCFF2rª   r«   r­   rA   Ú
readCard32Ú
readCard16Ú	readCard8Úranger.   r1   r,   rd   rƒ   Ú
offsetBaser3   )r@   rA   r(   rÅ   rW   r±   r2   ÚpadrS   ÚchunkrÐ   s              r$   r¤   zIndex.__init__P  sœ  € ØˆŒ
Ø!#Ð#ˆŒ�wØŒ~Ô&ˆØˆ<ØˆFØˆŒÝ�Š•Ð)¨4°·²±´Ñ=Ô=Ð=ØˆŒ	Øð 	%Ý˜tÑ$Ô$ˆEˆEå˜tÑ$Ô$ˆEØ�AŠ:ˆ:ØˆFØ�V˜e‘^ˆŒ
Ý˜D‘/”/ˆÝ�Š•Ð8¸%ÀÑIÔIÐIØ˜!Š|ˆ|ˆ|Ð4°wÑ>‰|Œ|ˆ|Ø�q˜7‘{Ñ#ˆÝ˜5 1™9Ñ%Ô%ð 	(ð 	(ˆEØ—I’I˜gÑ&Ô&ˆEØ˜%‘KˆEÝœ d¨EÑ2Ô2‰IˆVØ�NŠN�3˜v™;œ;Ñ'Ô'Ð'Ð'ØŸ)š)™+œ+¨™/ˆŒØ�	Š	�$”/ G¨B¤KÑ/Ñ0Ô0Ð0Ý�Š•Ð,¨d°D·I²I±K´KÑ@Ô@Ð@Ð@Ð@r&   c                 ó*   — t          | j        ¦  «        S rF   )rG   r¿   rH   s    r$   rI   zIndex.__len__m  s   € Ý�4”:‰ŒÐr&   c                 ó^  — | j         |         }|�|S | j        |         | j        z   }| j        |dz            | j        |         z
  }| j        }|                     |¦  «         |                     |¦  «        }t          |¦  «        |k    sJ ‚|                      ||||¦  «        }|| j         |<   |S ©Nr   )r¿   rÅ   r  rA   r3   r.   rG   ÚproduceItem)r@   rS   r´   rÐ   ÚsizerA   r¢   s          r$   rX   zIndex.__getitem__p  s±   € ØŒz˜%Ô ˆØÐØˆKØ”˜eÔ$ t¤Ñ6ˆØŒ|˜E A™IÔ&¨¬°eÔ)<Ñ<ˆØŒyˆØ�	Š	�&ÑÔÐØ�yŠy˜‰ŒˆÝ�4‰yŒy˜DÒ Ð Ð Ð Ø×Ò  t¨T°6Ñ:Ô:ˆØ ˆŒ
�5ÑØˆr&   c                 ó   — || j         |<   d S rF   ©r¿   )r@   rS   r´   s      r$   Ú__setitem__zIndex.__setitem__~  s   € Ø ˆŒ
�5ÑÐÐr&   c                 ó   — |S rF   rŸ   )r@   rS   r¢   rA   rÐ   s        r$   r  zIndex.produceItem�  s   € Øˆr&   c                 ó:   — | j                              |¦  «         dS )zAdd an item to an INDEX.N)r¿   rd   )r@   r´   s     r$   rd   zIndex.append„  s   € àŒ
×Ò˜$ÑÔÐÐÐr&   c                 ó4   — |                       | |||¬¦  «        S ©Nr'   ©ÚcompilerClass©r@   r;   rÀ   r(   s       r$   r`   zIndex.getCompilerˆ  ó   € Ø×!Ò! $¨°ÀÐ!ÑGÔGÐGr&   c                 ó   — | j         dd…= dS )zEmpty the INDEX.Nr  rH   s    r$   ÚclearzIndex.clear‹  s   € àŒJ�q�q�qˆMˆMˆMr&   ©NNrF   )r›   rœ   r�   rž   r»   r  r¤   rI   rX   r  r  rd   r`   r#  rŸ   r&   r$   r6   r6   I  s¯   € € € € € ðð ð "€MðAð Að Að Að:ð ð ðð ð ð!ð !ð !ðð ð ð ð  ð  ðHð Hð Hð Hðð ð ð ð r&   r6   c                   óh   ‡ — e Zd ZdZeZej        Zej        Z		 	 	 	 	 	 dˆ fd„	Z
d„ Zd„ Zd„ Zd„ Zˆ xZS )	r>   ay  This index contains all the global subroutines in the font. A global
    subroutine is a set of ``CharString`` data which is accessible to any
    glyph in the font, and are used to store repeated instructions - for
    example, components may be encoded as global subroutines, but so could
    hinting instructions.

    Remember that when interpreting a ``callgsubr`` instruction (or indeed
    a ``callsubr`` instruction) that you will need to add the "subroutine
    number bias" to number given:

    .. code:: python

            tt = ttLib.TTFont("Almendra-Bold.otf")
            u = tt["CFF "].cff[0].CharStrings["udieresis"]
            u.decompile()

            u.toXML(XMLWriter(sys.stdout))
            # <some stuff>
            # -64 callgsubr <-- Subroutine which implements the dieresis mark
            # <other stuff>

            tt["CFF "].cff[0].GlobalSubrs[-64] # <-- WRONG
            # <T2CharString (bytecode) at 103451d10>

            tt["CFF "].cff[0].GlobalSubrs[-64 + 107] # <-- RIGHT
            # <T2CharString (source) at 103451390>

    ("The bias applied depends on the number of subrs (gsubrs). If the number of
    subrs (gsubrs) is less than 1240, the bias is 107. Otherwise if it is less
    than 33900, it is 1131; otherwise it is 32768.",
    `Subroutine Operators <https://docs.microsoft.com/en-us/typography/opentype/otspec180/cff2charstr#section4.4>`)
    Nc                 ó    •— t          t          | ¦  «                             ||¬¦  «         || _        || _        |r|| _        |r	|| _        d S d S r  )rá   r>   r¤   ÚglobalSubrsÚprivateÚfdSelectr‡   )r@   rA   r'  r(  r)  r‡   r(   râ   s          €r$   r¤   zGlobalSubrsIndex.__init__¶  sd   ø€ õ 	Õ Ñ%Ô%×.Ò.¨t¸FÐ.ÑCÔCÐCØ&ˆÔØˆŒØð 	%Ø$ˆDŒMØð 	#Ø"ˆDŒLˆLˆLð	#ð 	#r&   c                 ó   — | j         �| j         }nSt          | d¦  «        rA| j        �:t          | d¦  «        r| j        �| j        |         }nd}| j        |         j        }nd }|                      ||| j        ¬¦  «        S )Nr‡   r)  r   ©r(  r'  )r(  rP   r‡   r)  r}   Ú	subrClassr'  )r@   rS   r¢   rA   rÐ   r(  ÚfdIndexs          r$   r  zGlobalSubrsIndex.produceItemÇ  s‰   € ØŒ<Ð#Ø”lˆGˆGÝ�T˜9Ñ%Ô%ð 	¨$¬,Ð*BÝ�t˜ZÑ(Ô(ð ¨T¬]Ð-FØœ-¨Ô.��à�Ø”l 7Ô+Ô3ˆGˆGàˆGØ�~Š~˜d¨GÀÔAQˆ~ÑRÔRÐRr&   c                 óÒ  — |                      d¦  «         |                     ¦   «          t          t          | ¦  «        ¦  «        D ] }| |         }|                     ¦   «         r|                     d|d¬¦  «         n|                     d|¬¦  «         |                     ¦   «          |                     |¦  «         |                     d¦  «         |                     ¦   «          Œ¡dS )a  Write the subroutines index into XML representation onto the given
        :class:`fontTools.misc.xmlWriter.XMLWriter`.

        .. code:: python

                writer = xmlWriter.XMLWriter(sys.stdout)
                tt["CFF "].cff[0].GlobalSubrs.toXML(writer)

        zDThe 'index' attribute is only for humans; it is ignored when parsed.Ú
CharStringr   )rS   Úraw©rS   N)Úcommentrt   r  rG   ÚneedsDecompilationru   rv   rw   )r@   rx   ÚirŠ   s       r$   rv   zGlobalSubrsIndex.toXMLÔ  sû   € ð 	×ÒØUñ	
ô 	
ð 	
ð 	×ÒÑÔÐÝ•s˜4‘y”yÑ!Ô!ð 		 ð 		 ˆAØ˜”7ˆDØ×&Ò&Ñ(Ô(ð :Ø×"Ò" <°q¸aÐ"Ñ@Ô@Ð@Ð@à×"Ò" <°qÐ"Ñ9Ô9Ð9Ø×ÒÑÔÐØ�JŠJ�yÑ!Ô!Ð!Ø×Ò˜\Ñ*Ô*Ð*Ø×ÒÑÔÐÐð		 ð 		 r&   c                 ó–   — |dk    rd S |                       ¦   «         }|                     |||¦  «         |                      |¦  «         d S )Nr/  )r,  r   rd   )r@   rW   r„   r…   rŠ   s        r$   r   zGlobalSubrsIndex.fromXMLí  sO   € Ø�<ÒÐØˆFØ�~Š~ÑÔˆØ�Š�T˜5 'Ñ*Ô*Ð*Ø�Š�DÑÔÐÐÐr&   c                 óT   — d }t          | d¦  «        r| j        |         }| |         |fS )Nr)  )rP   r)  )r@   rS   Úsels      r$   ÚgetItemAndSelectorz#GlobalSubrsIndex.getItemAndSelectorô  s4   € ØˆÝ�4˜Ñ$Ô$ð 	'Ø”- Ô&ˆCØ�EŒ{˜CÐÐr&   ©NNNNNN)r›   rœ   r�   rž   rò   r  r   r‚   r,  ÚcharStringClassr¤   r  rv   r   r8  rå   ræ   s   @r$   r>   r>   �  s²   ø€ € € € € ðð ðB (€MØÔ*€IØ#Ô0€Oð ØØØØØð#ð #ð #ð #ð #ð #ð"Sð Sð Sð ð  ð  ð2ð ð ð ð  ð  ð  ð  ð  ð  r&   r>   c                   ó   — e Zd ZdZeZdS )Ú
SubrsIndexz¹This index contains a glyph's local subroutines. A local subroutine is a
    private set of ``CharString`` data which is accessible only to the glyph to
    which the index is attached.N)r›   rœ   r�   rž   rú   r  rŸ   r&   r$   r<  r<  û  s   € € € € € ð$ð $ð "€M€M€Mr&   r<  c                   ó4   ‡ — e Zd ZdZeZdˆ fd„	Zd„ Zd„ Zˆ xZ	S )r8   a‡  This index represents the array of ``TopDict`` structures in the font
    (again, usually only one entry is present). Hence the following calls are
    equivalent:

    .. code:: python

            tt["CFF "].cff[0]
            # <fontTools.cffLib.TopDict object at 0x102ed6e50>
            tt["CFF "].cff.topDictIndex[0]
            # <fontTools.cffLib.TopDict object at 0x102ed6e50>

    Nr   c                 ó   •— || _         |�Ù|r×|| _        g | _        | j        j        }t
                               t          d||                     ¦   «         ¦  «         || _        d}d g|z  | _        d|g| _	        |                     ¦   «         | _
        |                     | j
        |z   ¦  «         t
                               t          d||                     ¦   «         ¦  «         d S t          t          | ¦  «                             ||¬¦  «         d S )Nr  r   r   r	  r'   )rC   r
  r¿   râ   r›   rª   r«   r­   rA   rÅ   r  r3   rá   r8   r¤   )r@   rA   rC   ÚtopSizer(   rW   r±   râ   s          €r$   r¤   zTopDictIndex.__init__  së   ø€ Ø!2ˆÔØÐ ÐØ!ˆDŒLØˆDŒJØ”>Ô*ˆDÝ�GŠG•EÐ-¨t°T·Y²Y±[´[ÑAÔAÐAØˆDŒIØˆEØ˜ %™ˆDŒJØ˜w˜<ˆDŒLØ"Ÿiši™kœkˆDŒOà�IŠI�d”o¨Ñ/Ñ0Ô0Ð0Ý�GŠG•EÐ0°$¸¿	º	¹¼ÑDÔDÐDÐDÐDå•, Ñ%Ô%×.Ò.¨t¸FÐ.ÑCÔCÐCÐCÐCr&   c                 ó‚   — t          | j        ||| j        | j        | j        ¬¦  «        }|                     |¦  «         |S r  )r~   r;   r?   rC   r
  rD   )r@   rS   r¢   rA   rÐ   Útops         r$   r  zTopDictIndex.produceItem%  sK   € ÝØŒLØØØÔØÔ"Ø”<ð
ñ 
ô 
ˆð 	�Š�dÑÔÐØˆ
r&   c                 ó"  — t          t          | ¦  «        ¦  «        D ]q}|                     d|¬¦  «         |                     ¦   «          | |                              |¦  «         |                     d¦  «         |                     ¦   «          Œrd S ©NÚFontDictr1  ©r  rG   ru   rt   rv   rw   ©r@   rx   r4  s      r$   rv   zTopDictIndex.toXML1  ó“   € Ý•s˜4‘y”yÑ!Ô!ð 	 ð 	 ˆAØ×Ò˜z°ÐÑ3Ô3Ð3Ø×ÒÑÔÐØ�ŒG�MŠM˜)Ñ$Ô$Ð$Ø×Ò˜ZÑ(Ô(Ð(Ø×ÒÑÔÐÐð	 ð 	 r&   )NNr   N)
r›   rœ   r�   rž   r¬   r  r¤   r  rv   rå   ræ   s   @r$   r8   r8     sr   ø€ € € € € ðð ð )€MðDð Dð Dð Dð Dð Dð$
ð 
ð 
ð ð  ð  ð  ð  ð  ð  r&   r8   c                   ó$   — e Zd ZeZd„ Zd„ Zd„ ZdS )ÚFDArrayIndexc                 ó"  — t          t          | ¦  «        ¦  «        D ]q}|                     d|¬¦  «         |                     ¦   «          | |                              |¦  «         |                     d¦  «         |                     ¦   «          Œrd S rC  rE  rF  s      r$   rv   zFDArrayIndex.toXML=  rG  r&   c                 ó‚   — t          | j        ||| j        | j        | j        ¬¦  «        }|                     |¦  «         |S ©N)r(   r�   )rD  r;   r?   r
  r�   rD   )r@   rS   r¢   rA   rÐ   rˆ   s         r$   r  zFDArrayIndex.produceItemE  sL   € ÝØŒLØØØÔØ”<Ø”;ð
ñ 
ô 
ˆð 	×Ò˜4Ñ Ô Ð Øˆr&   c                 óÌ   — |dk    rd S t          ¦   «         }|D ]5}t          |t          ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6|                      |¦  «         d S )NrD  )rD  rQ   rR   r   rd   )r@   rW   r„   r…   rˆ   r†   s         r$   r   zFDArrayIndex.fromXMLQ  s~   € Ø�:ÒÐØˆFÝ‘:”:ˆØð 	3ð 	3ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø×Ò˜T 5¨'Ñ2Ô2Ð2Ð2Ø�Š�HÑÔÐÐÐr&   N)r›   rœ   r�   rè   r  rv   r  r   rŸ   r&   r$   rI  rI  :  sF   € € € € € Ø(€Mð ð  ð  ð
ð 
ð 
ð	ð 	ð 	ð 	ð 	r&   rI  c                   ó:   — e Zd Zd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )
ÚVarStoreDataNc                 óV   — || _         d | _        || _        t          ¦   «         | _        d S rF   )rA   r¢   Ú
otVarStorer   rz   )r@   rA   rQ  s      r$   r¤   zVarStoreData.__init__^  s&   € ØˆŒ	ØˆŒ	Ø$ˆŒÝ‘H”HˆŒ	ˆ	ˆ	r&   c                 óp  — | j         r®t          | j         ¦  «        }|dk    r| j                              ¦   «         | _        n| j                              |¦  «        | _        i }t	          | j        |¦  «        }t          j        ¦   «         | _        | j                             || j	        ¦  «         d | _        | S ©Niÿÿ  )
rA   r  r.   r¢   r   Úotr|   rQ  rD   rz   )r@   ÚlengthÚglobalStateÚreaders       r$   rD   zVarStoreData.decompiled  s—   € ØŒ9ð 	å ¤	Ñ*Ô*ˆFà˜ŠˆØ œIŸNšNÑ,Ô,�”	�	à œIŸNšN¨6Ñ2Ô2�”	ØˆKÝ" 4¤9¨kÑ:Ô:ˆFÝ œk™mœmˆDŒOØŒO×%Ò% f¨d¬iÑ8Ô8Ð8ØˆDŒIØˆr&   c                 ó”   — t          ¦   «         }| j                             || j        ¦  «         |                     ¦   «         | _        d S rF   )r   rQ  rl   rz   Ú
getAllDatar¢   )r@   rh   s     r$   rl   zVarStoreData.compilet  s>   € Ý‘”ˆØŒ×Ò ¨¬	Ñ2Ô2Ð2ð ×%Ò%Ñ'Ô'ˆŒ	ˆ	ˆ	r&   c                 óF   — | j                              || j        ¦  «         d S rF   )rQ  rv   rz   )r@   rx   rW   s      r$   ÚwriteXMLzVarStoreData.writeXML{  s"   € ØŒ×Ò˜i¨¬Ñ3Ô3Ð3Ð3Ð3r&   c                 ó¼   — t          j        ¦   «         | _        |D ]@}t          |t          ¦  «        r)|\  }}}| j                             |||| j        ¦  «         Œ@ŒAd S rF   )rT  r|   rQ  rQ   Útupler   rz   )r@   rW   r„   r…   rÀ   r†   s         r$   ÚxmlReadzVarStoreData.xmlRead~  se   € Ýœ+™-œ-ˆŒØð 	ð 	ˆGÝ˜'¥5Ñ)Ô)ð Ø'.Ñ$��e˜WØ”×'Ò'¨¨e°W¸d¼iÑHÔHÐHÐHàØˆtr&   c                 ó*   — t          | j        ¦  «        S rF   ©rG   r¢   rH   s    r$   rI   zVarStoreData.__len__ˆ  ó   € Ý�4”9‰~Œ~Ðr&   c                 ó@   — |€d}| j         j        |         }|j        }|S rà   )rQ  ÚVarDataÚVarRegionCount)r@   ÚvsIndexÚvarDataÚ
numRegionss       r$   ÚgetNumRegionszVarStoreData.getNumRegions‹  s)   € Øˆ?ØˆGØ”/Ô)¨'Ô2ˆØÔ+ˆ
ØÐr&   r$  )
r›   rœ   r�   r¤   rD   rl   r[  r^  rI   rh  rŸ   r&   r$   rO  rO  ]  s‚   € € € € € ðð ð ð ðð ð ð (ð (ð (ð4ð 4ð 4ðð ð ðð ð ðð ð ð ð r&   rO  c                   ó.   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ ZdS )ÚFDSelectNc                 ó„  — |�r®t          |¦  «        | _        | j        dk    r>ddlm}  |d|                     |¦  «        ¦  «                             ¦   «         | _        d S | j        dk    r—d g|z  }t          |¦  «        }d }d }t          |¦  «        D ]<}	t          |¦  «        }
|�t          ||
¦  «        D ]}|||<   Œ|
}t          |¦  «        }Œ=|�'t          |¦  «        }
t          ||
¦  «        D ]}|||<   Œ|| _        d S | j        dk    r—d g|z  }t          |¦  «        }d }d }t          |¦  «        D ]<}	t          |¦  «        }
|�t          ||
¦  «        D ]}|||<   Œ|
}t          |¦  «        }Œ=|�'t          |¦  «        }
t          ||
¦  «        D ]}|||<   Œ|| _        d S J d|z  ¦   «         ‚|| _        g | _        d S )Nr   )Úarrayr   r   r[   Fzunsupported FDSelect format: %s)	r  Úformatrl  r.   ÚtolistÚgidArrayr  r  r  )r@   rA   Ú	numGlyphsrm  rl  ro  ÚnRangesÚfdÚprevr4  ÚfirstÚglyphIDs               r$   r¤   zFDSelect.__init__”  s6  € Øñ /	å# D™/œ/ˆDŒKØŒ{˜aÒÐØ'Ð'Ð'Ð'Ð'Ð'à %  c¨4¯9ª9°YÑ+?Ô+?Ñ @Ô @× GÒ GÑ IÔ I�”��Ø” Ò!Ð!Ø ˜6 IÑ-�Ý$ TÑ*Ô*�Ø�Ø�Ý˜w™œð )ð )�AÝ& tÑ,Ô,�EØÐ'Ý',¨T°5Ñ'9Ô'9ð 3ð 3˜GØ02˜H WÑ-Ð-Ø �DÝ" 4™œ�B�BØÐ#Ý& tÑ,Ô,�EÝ#(¨¨uÑ#5Ô#5ð /ð /˜Ø,.˜ Ñ)Ð)Ø (�”��Ø” Ò!Ð!Ø ˜6 IÑ-�Ý$ TÑ*Ô*�Ø�Ø�Ý˜w™œð *ð *�AÝ& tÑ,Ô,�EØÐ'Ý',¨T°5Ñ'9Ô'9ð 3ð 3˜GØ02˜H WÑ-Ð-Ø �DÝ# DÑ)Ô)�B�BØÐ#Ý& tÑ,Ô,�EÝ#(¨¨uÑ#5Ô#5ð /ð /˜Ø,.˜ Ñ)Ð)Ø (�”��àHÐ?À&ÑHÑHÔH�uð !ˆDŒKØˆDŒMˆMˆMr&   c                 ó*   — t          | j        ¦  «        S rF   )rG   ro  rH   s    r$   rI   zFDSelect.__len__Æ  s   € Ý�4”=Ñ!Ô!Ð!r&   c                 ó   — | j         |         S rF   ©ro  ©r@   rS   s     r$   rX   zFDSelect.__getitem__É  s   € ØŒ}˜UÔ#Ð#r&   c                 ó   — || j         |<   d S rF   rx  )r@   rS   ÚfdSelectValues      r$   r  zFDSelect.__setitem__Ì  s   € Ø,ˆŒ�eÑÐÐr&   c                 ó:   — | j                              |¦  «         d S rF   )ro  rd   )r@   r{  s     r$   rd   zFDSelect.appendÏ  s   € ØŒ×Ò˜]Ñ+Ô+Ð+Ð+Ð+r&   )NNN)r›   rœ   r�   r¤   rI   rX   r  rd   rŸ   r&   r$   rj  rj  “  se   € € € € € ð0ð 0ð 0ð 0ðd"ð "ð "ð$ð $ð $ð-ð -ð -ð,ð ,ð ,ð ,ð ,r&   rj  c                   óX   — e Zd ZdZ	 	 dd„Zd„ Zd„ Zd„ ZeZd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )r  a  The ``CharStrings`` in the font represent the instructions for drawing
    each glyph. This object presents a dictionary interface to the font's
    CharStrings, indexed by glyph name:

    .. code:: python

            tt["CFF "].cff[0].CharStrings["a"]
            # <T2CharString (bytecode) at 103451e90>

    See :class:`fontTools.misc.psCharStrings.T1CharString` and
    :class:`fontTools.misc.psCharStrings.T2CharString` for how to decompile,
    compile and interpret the glyph drawing instructions in the returned objects.

    Nc	                 ó$  — || _         || _        |�Vt          ||||||¬¦  «        | _        i x| _        }	t          t          |¦  «        ¦  «        D ]}
|
|	||
         <   Œd| _        d S i | _        d| _        || _        |�|| _	        |�	|| _
        d S d S )Nr'   r   r   )r'  ÚvarStorer<  ÚcharStringsIndexÚcharStringsr  rG   ÚcharStringsAreIndexedr(  r)  r‡   )r@   rA   r\   r'  r(  r)  r‡   r(   r  r�  r4  s              r$   r¤   zCharStrings.__init__ã  sÇ   € ð 'ˆÔØ ˆŒØÐÝ$.Ø�k 7¨H°gÀfð%ñ %ô %ˆDÔ!ð .0Ð/ˆDÔ˜{Ý�3˜w™<œ<Ñ(Ô(ð ,ð ,�Ø*+�˜G AœJÑ'Ð'ð *+ˆDÔ&Ð&Ð&à!ˆDÔà)*ˆDÔ&Ø"ˆDŒLØÐ#Ø (�”ØÐ"Ø&�”��ð #Ð"r&   c                 óN   — t          | j                             ¦   «         ¦  «        S rF   )r5   r�  rK   rH   s    r$   rK   zCharStrings.keys  s   € Ý�DÔ$×)Ò)Ñ+Ô+Ñ,Ô,Ð,r&   c                 ój   — | j         r| j        S t          | j                             ¦   «         ¦  «        S rF   )r‚  r€  r5   r�  rM   rH   s    r$   rM   zCharStrings.values  s3   € ØÔ%ð 	3ØÔ(Ð(å˜Ô(×/Ò/Ñ1Ô1Ñ2Ô2Ð2r&   c                 ó   — || j         v S rF   )r�  )r@   rW   s     r$   Úhas_keyzCharStrings.has_key  s   € Ø�tÔ'Ð'Ð'r&   c                 ó*   — t          | j        ¦  «        S rF   )rG   r�  rH   s    r$   rI   zCharStrings.__len__  s   € Ý�4Ô#Ñ$Ô$Ð$r&   c                 óH   — | j         |         }| j        r| j        |         }|S rF   )r�  r‚  r€  )r@   rW   Ú
charStrings      r$   rX   zCharStrings.__getitem__  s-   € ØÔ% dÔ+ˆ
ØÔ%ð 	;ØÔ.¨zÔ:ˆJØÐr&   c                 óZ   — | j         r| j        |         }|| j        |<   d S || j        |<   d S rF   )r‚  r�  r€  )r@   rW   r‰  rS   s       r$   r  zCharStrings.__setitem__  s@   € ØÔ%ð 	0ØÔ$ TÔ*ˆEØ+5ˆDÔ! %Ñ(Ð(Ð(à%/ˆDÔ˜TÑ"Ð"Ð"r&   c                 óì   — | j         r'| j        |         }| j                             |¦  «        S t	          | d¦  «        r&t	          | d¦  «        r| j        |         j        }nd}nd }| j        |         |fS )Nr‡   r)  r   )r‚  r�  r€  r8  rP   ÚfdSelectIndex)r@   rW   rS   r7  s       r$   r8  zCharStrings.getItemAndSelector"  s†   € ØÔ%ð 	/ØÔ$ TÔ*ˆEØÔ(×;Ò;¸EÑBÔBÐBå�t˜YÑ'Ô'ð Ý˜4 Ñ,Ô,ð ØÔ*¨4Ô0Ô>�C�Cà�C�Cà�ØÔ# DÔ)¨3Ð.Ð.r&   c                 óÖ  — t          |                      ¦   «         ¦  «        }|D ]Ä}|                      |¦  «        \  }}|                     ¦   «         rdg}ng }|€|                     dd|fg|z   ¦  «         n|                     dd|fd|fg|z   ¦  «         |                     ¦   «          |                     |¦  «         |                     d¦  «         |                     ¦   «          ŒÅd S )N)r0  r   r/  rW   rŒ  )ÚsortedrK   r8  r3  ru   rt   rv   rw   )r@   rx   ÚnamesrW   ÚcharStrrŒ  r0  s          r$   rv   zCharStrings.toXML0  s  € Ý�t—y’y‘{”{Ñ#Ô#ˆØð 	 ð 	 ˆDØ%)×%<Ò%<¸TÑ%BÔ%BÑ"ˆG�]Ø×)Ò)Ñ+Ô+ð Ø!�l��à�ØÐ$Ø×"Ò" <°6¸4°.Ð1AÀCÑ1GÑHÔHÐHÐHà×"Ò"Ø Ø˜d�^ o°}Ð%EÐFÈÑLñô ð ð ×ÒÑÔÐØ�MŠM˜)Ñ$Ô$Ð$Ø×Ò˜\Ñ*Ô*Ð*Ø×ÒÑÔÐÐð!	 ð 	 r&   c                 óž  — |D ]É}t          |t          ¦  «        rŒ|\  }}}|dk    rŒ%d}t          | d¦  «        r<	 t          |d         ¦  «        }n# t          $ r d}Y nw xY w| j        |         j        }n| j        }|d         }t          j	        } ||| j
        ¬¦  «        }	|	                     |||¦  «         |dk    r||	_        |	| |<   ŒÊd S )Nr/  r©   r‡   rŒ  r   rW   r+  )rQ   rR   rP   r   rT   r‡   r}   r(  r   r‚   r'  r   rŒ  )
r@   rW   r„   r…   r†   ÚfdIDr(  Ú	glyphNamer:  r‰  s
             r$   r   zCharStrings.fromXMLD  s  € Øð 	)ð 	)ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø�|Ò#Ð#ØØˆDÝ�t˜YÑ'Ô'ð 'ðÝ# E¨/Ô$:Ñ;Ô;�D�DøÝð ð ð Ø�D�D�Dðøøøàœ, tÔ,Ô4��àœ,�à˜fœˆIÝ+Ô8ˆOØ(˜°ÀdÔFVÐWÑWÔWˆJØ×Ò˜t U¨GÑ4Ô4Ð4Ø�qŠyˆyØ+/�
Ô(Ø(ˆD�‰OˆOð-	)ð 	)s   »AÁA ÁA r$  )r›   rœ   r�   rž   r¤   rK   rM   r†  Ú__contains__rI   rX   r  r8  rv   r   rŸ   r&   r$   r  r  Ó  sÉ   € € € € € ðð ð. Øð'ð 'ð 'ð 'ðB-ð -ð -ð3ð 3ð 3ð(ð (ð (ð €Lð%ð %ð %ðð ð ð0ð 0ð 0ð/ð /ð /ð ð  ð  ð()ð )ð )ð )ð )r&   r  c                 óF   — t          |                      d¦  «        ¦  «        S r  )r   r.   )rA   s    r$   r  r  ^  s   € Ý�4—9’9˜Q‘<”<Ñ Ô Ð r&   c                 óZ   — t          j        d|                      d¦  «        ¦  «        \  }|S )Nr)   r   ©r1   r,   r.   ©rA   ro   s     r$   r  r  b  ó$   € ÝŒ}˜T 4§9¢9¨Q¡<¤<Ñ0Ô0�H€UØ€Lr&   c                 óZ   — t          j        d|                      d¦  «        ¦  «        \  }|S )Nr  r[   r—  r˜  s     r$   r  r  g  r™  r&   c                 óJ   — |                       t          |¦  «        ¦  «         d S rF   )r¯   r   r˜  s     r$   rÏ   rÏ   l  s    € Ø‡J‚J�w�u‰~Œ~ÑÔÐÐÐr&   c                 óV   — |                       t          j        d|¦  «        ¦  «         d S ©Nr)   ©r¯   r1   rb   r˜  s     r$   rÎ   rÎ   p  ó&   € Ø‡J‚J�vŒ{˜4 Ñ'Ô'Ñ(Ô(Ð(Ð(Ð(r&   c                 óV   — |                       t          j        d|¦  «        ¦  «         d S ©Nr  rž  r˜  s     r$   rÍ   rÍ   t  rŸ  r&   c                 ó    — t          | ¦  «        S rF   )r   rn   s    r$   Ú	packCard8r£  x  s   € Ý�5‰>Œ>Ðr&   c                 ó,   — t          j        d| ¦  «        S r�  ©r1   rb   rn   s    r$   Ú
packCard16r¦  |  ó   € ÝŒ;�t˜UÑ#Ô#Ð#r&   c                 ó,   — t          j        d| ¦  «        S r¡  r¥  rn   s    r$   Ú
packCard32r©  €  r§  r&   c                 ó.   — i }| D ]\  }}}}}||f||<   Œ|S rF   rŸ   ©r¦   ÚdÚoprW   ÚargÚdefaultÚconvs          r$   ÚbuildOperatorDictr±  „  s5   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Ø�s�ˆˆ"‰ˆØ€Hr&   c                 óÎ   — i }| D ]_\  }}}}}t          |t          ¦  «        r,t          |d         ¦  «        t          |d         ¦  «        z   }nt          |¦  «        }||f||<   Œ`|S ©Nr   r   )rQ   r]  r   r«  s          r$   ÚbuildOpcodeDictr´  ‹  sr   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Ý�b�%Ñ Ô ð 	Ý˜˜Aœ‘”¥'¨"¨Q¬%¡.¤.Ñ0ˆBˆBå˜‘”ˆBØ�s�)ˆˆ$‰ˆØ€Hr&   c                 óJ   — g }| D ]\  }}}}}|                      |¦  «         Œ|S rF   )rd   )r¦   Úlr­  rW   r®  r¯  r°  s          r$   Ú
buildOrderr·  –  s7   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Ø	�Š�‰ŒˆˆØ€Hr&   c                 ó.   — i }| D ]\  }}}}}|�|||<   Œ|S rF   rŸ   r«  s          r$   ÚbuildDefaultsr¹  �  s6   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w ØÐØˆAˆd‰GøØ€Hr&   c                 ó*   — i }| D ]\  }}}}}|||<   Œ|S rF   rŸ   r«  s          r$   ÚbuildConvertersr»  ¥  s1   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Øˆˆ$‰ˆØ€Hr&   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚSimpleConverterc                 ó  — t          |d¦  «        s|                      ||¦  «        S |j        }|                     ¦   «         }	 |                      ||¦  «        |                     |¦  «         S # |                     |¦  «         w xY w)NrA   )rP   Ú_readrA   r­   r3   )r@   rÀ   ro   rA   r²   s        r$   r.   zSimpleConverter.read­  sw   € Ý�v˜vÑ&Ô&ð 	-Ø—:’:˜f eÑ,Ô,Ð,ØŒ{ˆØ�iŠi‰kŒkˆð	Ø—:’:˜f eÑ,Ô,à�IŠI�c‰NŒNˆNˆNøˆD�IŠI�c‰NŒNˆNˆNøøøs   ÁA. Á.Bc                 ó   — |S rF   rŸ   ©r@   rÀ   ro   s      r$   r¿  zSimpleConverter._read·  rÃ   r&   c                 ó   — |S rF   rŸ   rÁ  s      r$   r¯   zSimpleConverter.writeº  rÃ   r&   c                 ó\   — |                      ||¬¦  «         |                     ¦   «          d S )Nrn   )rs   rt   ©r@   rx   rW   ro   s       r$   ÚxmlWritezSimpleConverter.xmlWrite½  s3   € Ø×Ò˜D¨ÐÑ.Ô.Ð.Ø×ÒÑÔÐÐÐr&   c                 ó   — |d         S ©Nro   rŸ   ©r@   rW   r„   r…   rÀ   s        r$   r^  zSimpleConverter.xmlReadÁ  s   € Ø�WŒ~Ðr&   N)r›   rœ   r�   r.   r¿  r¯   rÅ  r^  rŸ   r&   r$   r½  r½  ¬  s_   € € € € € ðð ð ðð ð ðð ð ðð ð ðð ð ð ð r&   r½  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚASCIIConverterc                 ó$   — t          |d¬¦  «        S ©NÚasciir   r    rÁ  s      r$   r¿  zASCIIConverter._readÆ  s   € Ý�U WÐ-Ñ-Ô-Ð-r&   c                 ó$   — t          |d¬¦  «        S rÌ  ©r
   rÁ  s      r$   r¯   zASCIIConverter.writeÉ  s   € Ý�u wÐ/Ñ/Ô/Ð/r&   c                 óz   — |                      |t          |d¬¦  «        ¬¦  «         |                     ¦   «          d S )NrÍ  r   rn   ©rs   r   rt   rÄ  s       r$   rÅ  zASCIIConverter.xmlWriteÌ  s@   € Ø×Ò˜D­¨e¸gÐ(FÑ(FÔ(FÐÑGÔGÐGØ×ÒÑÔÐÐÐr&   c                 ó0   — t          |d         d¬¦  «        S )Nro   rÍ  r   rÏ  rÈ  s        r$   r^  zASCIIConverter.xmlReadÐ  s   € Ý�u˜W”~°Ð:Ñ:Ô:Ð:r&   N©r›   rœ   r�   r¿  r¯   rÅ  r^  rŸ   r&   r$   rÊ  rÊ  Å  sP   € € € € € ð.ð .ð .ð0ð 0ð 0ðð ð ð;ð ;ð ;ð ;ð ;r&   rÊ  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚLatin1Converterc                 ó$   — t          |d¬¦  «        S ©Nr   r   r    rÁ  s      r$   r¿  zLatin1Converter._readÕ  s   € Ý�U XÐ.Ñ.Ô.Ð.r&   c                 ó$   — t          |d¬¦  «        S r×  rÏ  rÁ  s      r$   r¯   zLatin1Converter.writeØ  s   € Ý�u xÐ0Ñ0Ô0Ð0r&   c                 ó²   — t          |d¬¦  «        }|dv rt          j        dd|¦  «        }|                     ||¬¦  «         |                     ¦   «          d S )Nr   r   )ÚNoticeÚ	Copyrightz	[\r\n]\s+ú rn   )r   ÚreÚsubrs   rt   rÄ  s       r$   rÅ  zLatin1Converter.xmlWriteÛ  sd   € Ý�e hÐ/Ñ/Ô/ˆØÐ*Ð*Ð*Ý”F˜<¨¨eÑ4Ô4ˆEØ×Ò˜D¨ÐÑ.Ô.Ð.Ø×ÒÑÔÐÐÐr&   c                 ó0   — t          |d         d¬¦  «        S )Nro   r   r   rÏ  rÈ  s        r$   r^  zLatin1Converter.xmlReadâ  s   € Ý�u˜W”~°Ð;Ñ;Ô;Ð;r&   NrÓ  rŸ   r&   r$   rÕ  rÕ  Ô  sP   € € € € € ð/ð /ð /ð1ð 1ð 1ðð ð ð<ð <ð <ð <ð <r&   rÕ  c                 óT   — 	 t          | ¦  «        }n#  t          | ¦  «        }Y nxY w|S rF   )rƒ   Úfloat)r#   ro   s     r$   ÚparseNumrâ  æ  s1   € ðÝ�A‘”ˆˆøðÝ�a‘”ˆˆˆøøøØ€Ls   ‚ ’%c                 óø   — g }| D ]Y}t          |t          ¦  «        rŒ|\  }}}|d                              ¦   «         }d„ |D ¦   «         }|                     |¦  «         ŒZt	          |¦  «        dk    r|d         }|S )Nro   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rŸ   ©r   ©r"   Úvals     r$   ú
<listcomp>z"parseBlendList.<locals>.<listcomp>õ  s   € Ð8Ð8Ð8 s•X˜c‘]”]Ð8Ð8Ð8r&   r   r   )rQ   rR   Úsplitrd   rG   )r#   Ú	valueListr†   rW   r„   r…   Ú	blendLists          r$   ÚparseBlendListrì  î  s–   € Ø€IØð $ð $ˆÝ�g�sÑ#Ô#ð 	ØØ&Ñˆˆe�WØ˜'”N×(Ò(Ñ*Ô*ˆ	Ø8Ð8¨iÐ8Ñ8Ô8ˆ	Ø×Ò˜Ñ#Ô#Ð#Ð#Ý
ˆ9�~„~˜ÒÐØ˜a”Lˆ	ØÐr&   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚNumberConverterc                 ó  — t          |t          ¦  «        rË|                     |¦  «         |                     ¦   «          |                     ¦   «          d                     d„ |D ¦   «         ¦  «        }|                     t          |¬¦  «         |                     ¦   «          |                     ¦   «          | 	                    |¦  «         |                     ¦   «          d S |                     ||¬¦  «         |                     ¦   «          d S )NrÜ  c                 ó,   — g | ]}t          |¦  «        ‘ŒS rŸ   ©rR   ræ  s     r$   rè  z,NumberConverter.xmlWrite.<locals>.<listcomp>  s   € Ð"=Ð"=Ð"=°¥3 s¡8¤8Ð"=Ð"=Ð"=r&   rn   ©
rQ   r5   ru   rt   ÚindentÚjoinrs   ÚkBlendDictOpNameÚdedentrw   )r@   rx   rW   ro   Ú
blendValues        r$   rÅ  zNumberConverter.xmlWriteý  s  € Ý�e�TÑ"Ô"ð 	 Ø×Ò˜tÑ$Ô$Ð$Ø×ÒÑÔÐØ×ÒÑÔÐØŸšÐ"=Ð"=°uÐ"=Ñ"=Ô"=Ñ>Ô>ˆJØ×ÒÕ 0¸
ÐÑCÔCÐCØ×ÒÑÔÐØ×ÒÑÔÐØ×Ò˜TÑ"Ô"Ð"Ø×ÒÑÔÐÐÐà×Ò ¨EÐÑ2Ô2Ð2Ø×ÒÑÔÐÐÐr&   c                 ó€   — |                      dd ¦  «        }|€t          |¦  «        }nt          |d         ¦  «        }|S rÇ  )Úgetrì  râ  )r@   rW   r„   r…   rÀ   ÚvalueStringro   s          r$   r^  zNumberConverter.xmlRead  s@   € Ø—i’i ¨Ñ.Ô.ˆØÐÝ" 7Ñ+Ô+ˆEˆEå˜U 7œ^Ñ,Ô,ˆEØˆr&   N©r›   rœ   r�   rÅ  r^  rŸ   r&   r$   rî  rî  ü  s2   € € € € € ð ð  ð  ðð ð ð ð r&   rî  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚArrayConverterc                 ót  — |rët          |d         t          ¦  «        rÐ|                     |¦  «         |                     ¦   «          |                     ¦   «          |D ]Q}d                     d„ |D ¦   «         ¦  «        }|                     t          |¬¦  «         |                     ¦   «          ŒR|                     ¦   «          | 	                    |¦  «         |                     ¦   «          d S d                     d„ |D ¦   «         ¦  «        }|                     ||¬¦  «         |                     ¦   «          d S )Nr   rÜ  c                 ó,   — g | ]}t          |¦  «        ‘ŒS rŸ   rñ  ræ  s     r$   rè  z+ArrayConverter.xmlWrite.<locals>.<listcomp>  s   € Ð&EÐ&EÐ&E°C¥s¨3¡x¤xÐ&EÐ&EÐ&Er&   rn   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rŸ   rñ  ræ  s     r$   rè  z+ArrayConverter.xmlWrite.<locals>.<listcomp>#  s   € Ð8Ð8Ð8¨3�c #™hœhÐ8Ð8Ð8r&   rò  )r@   rx   rW   ro   rê  r÷  s         r$   rÅ  zArrayConverter.xmlWrite  sD  € Øð 	 •Z  a¤­$Ñ/Ô/ð 	 Ø×Ò˜tÑ$Ô$Ð$Ø×ÒÑÔÐØ×ÒÑÔÐØ"ð $ð $�	Ø ŸXšXÐ&EÐ&E¸9Ð&EÑ&EÔ&EÑFÔF�
Ø×#Ò#Õ$4¸JÐ#ÑGÔGÐGØ×!Ò!Ñ#Ô#Ð#Ð#Ø×ÒÑÔÐØ×Ò˜TÑ"Ô"Ð"Ø×ÒÑÔÐÐÐà—H’HÐ8Ð8°%Ð8Ñ8Ô8Ñ9Ô9ˆEØ×Ò ¨EÐÑ2Ô2Ð2Ø×ÒÑÔÐÐÐr&   c                 ó–   — |                      dd ¦  «        }|€t          |¦  «        }n |                     ¦   «         }d„ |D ¦   «         }|S )Nro   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rŸ   )râ  )r"   ro   s     r$   rè  z*ArrayConverter.xmlRead.<locals>.<listcomp>-  s   € Ð=Ð=Ð=¨U� %™œÐ=Ð=Ð=r&   )rù  rì  ré  )r@   rW   r„   r…   rÀ   rú  rê  rM   s           r$   r^  zArrayConverter.xmlRead'  sT   € Ø—i’i ¨Ñ.Ô.ˆØÐÝ& wÑ/Ô/ˆIˆIà ×&Ò&Ñ(Ô(ˆFØ=Ð=°fÐ=Ñ=Ô=ˆIØÐr&   Nrû  rŸ   r&   r$   rý  rý    s2   € € € € € ð ð  ð  ð"ð ð ð ð r&   rý  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTableConverterc                 óÔ   — |                      |¦  «         |                     ¦   «          |                     |¦  «         |                     |¦  «         |                     ¦   «          d S rF   )ru   rt   rv   rw   rÄ  s       r$   rÅ  zTableConverter.xmlWrite2  sf   € Ø×Ò˜4Ñ Ô Ð Ø×ÒÑÔÐØ�Š�IÑÔÐØ×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr&   c                 ó®   —  |                       ¦   «         ¦   «         }|D ]5}t          |t          ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6|S rF   )ÚgetClassrQ   rR   r   )r@   rW   r„   r…   rÀ   Úobr†   s          r$   r^  zTableConverter.xmlRead9  se   € ØˆT�]Š]‰_Œ_ÑÔˆØð 	-ð 	-ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø�JŠJ�t˜U GÑ,Ô,Ð,Ð,Øˆ	r&   Nrû  rŸ   r&   r$   r  r  1  s2   € € € € € ðð ð ðð ð ð ð r&   r  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚPrivateDictConverterc                 ó   — t           S rF   )ÚPrivateDictrH   s    r$   r  zPrivateDictConverter.getClassD  s   € ÝÐr&   c                 ó<  — |\  }}|j         }|j        }	 |j        }n# t          $ r d }Y nw xY wt	          |j        ||||¬¦  «        }|                     |¦  «         |                     |¦  «        }	t          |	¦  «        |k    sJ ‚| 	                    |	¦  «         |S rL  )
rA   r
  r�   ÚAttributeErrorr  r;   r3   r.   rG   rD   )
r@   rÀ   ro   r  rÐ   rA   r(   r�   Úprivr¢   s
             r$   r¿  zPrivateDictConverter._readG  s´   € Ø‰ˆˆfØŒ{ˆØ”ˆð	Ø”]ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøå˜6œ>¨4°ÀÈvÐVÑVÔVˆØ�	Š	�&ÑÔÐØ�yŠy˜‰ŒˆÝ�4‰yŒy˜DÒ Ð Ð Ð Ø�Š�tÑÔÐØˆs   • �,«,c                 ó   — dS )N)r   r   rŸ   rÁ  s      r$   r¯   zPrivateDictConverter.writeV  s   € Øˆvr&   N©r›   rœ   r�   r  r¿  r¯   rŸ   r&   r$   r
  r
  C  sA   € € € € € ðð ð ðð ð ðð ð ð ð r&   r
  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚSubrsConverterc                 ó   — t           S rF   )r<  rH   s    r$   r  zSubrsConverter.getClass[  s   € ÝÐr&   c                 óz   — |j         }|j        }|                     |j        |z   ¦  «         t	          ||¬¦  «        S r  )rA   r
  r3   rÐ   r<  )r@   rÀ   ro   rA   r(   s        r$   r¿  zSubrsConverter._read^  s<   € ØŒ{ˆØ”ˆØ�	Š	�&”- %Ñ'Ñ(Ô(Ð(Ý˜$ vÐ.Ñ.Ô.Ð.r&   c                 ó   — dS rà   rŸ   rÁ  s      r$   r¯   zSubrsConverter.writed  ó   € Øˆqr&   Nr  rŸ   r&   r$   r  r  Z  sA   € € € € € ðð ð ð/ð /ð /ðð ð ð ð r&   r  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚCharStringsConverterc           
      ó8  — |j         }|j        }|j        }t          |dd ¦  «        }|j        }t          |d¦  «        r$|j        }t          |d¦  «        r|j        }	nd }	d }
nd\  }	}|j        }
| 	                    |¦  «         t          ||||
|	|||¬¦  «        }|S )Nr|   r€   rj  r$  )r(   r  )rA   r
  r\   Úgetattrr?   rP   r€   rj  r}   r3   r  )r@   rÀ   ro   rA   r(   r\   r  r'  r‡   r)  r(  r�  s               r$   r¿  zCharStringsConverter._readi  sÇ   € ØŒ{ˆØ”ˆØ”.ˆÝ˜6 :¨tÑ4Ô4ˆØÔ(ˆÝ�6˜9Ñ%Ô%ð 		%Ø”nˆGÝ�v˜zÑ*Ô*ð  Ø!œ?��à�ØˆGˆGà *ÑˆH�gØ”nˆGØ�	Š	�%ÑÔÐÝ!ØØØØØØØØð	
ñ 	
ô 	
ˆð Ðr&   c                 ó   — dS rà   rŸ   rÁ  s      r$   r¯   zCharStringsConverter.write†  r  r&   c                 ó  — t          |d¦  «        r$|j        }t          |d¦  «        r|j        }nd }d }n|j        d d }}}t	          d d |j        |||t          |dd ¦  «        ¬¦  «        }|                     |||¦  «         |S )Nr€   rj  r|   )r  )rP   r€   rj  r}   r  r?   r  r   )	r@   rW   r„   r…   rÀ   r‡   r)  r(  r�  s	            r$   r^  zCharStringsConverter.xmlRead‰  s®   € Ý�6˜9Ñ%Ô%ð 	Dð ”nˆGÝ�v˜zÑ*Ô*ð  Ø!œ?��à�ØˆGˆGð
 *0¬¸¸t˜w�XˆGÝ!ØØØÔØØØÝ˜V Z°Ñ6Ô6ð
ñ 
ô 
ˆð 	×Ò˜D %¨Ñ1Ô1Ð1ØÐr&   N©r›   rœ   r�   r¿  r¯   r^  rŸ   r&   r$   r  r  h  sA   € € € € € ðð ð ð:ð ð ðð ð ð ð r&   r  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚCharsetConverterc                 ó  — t          |d¦  «        }|dk    �r†|j        }|j        }|                     |¦  «         t                               t
          d|¦  «         t          |¦  «        }|dk    rt          |||j        |¦  «        }n,|dk    s|dk    rt          |||j        ||¦  «        }nt          ‚t          |¦  «        |k    sJ ‚t                               t
          d|                     ¦   «         ¦  «         i }g }	|D ]—}
|
|v rw||
         }t          |¦  «        t          |¦  «        z  }|
dz   t          |¦  «        z   |v r|dz  }|
dz   t          |¦  «        z   |v °|dz   ||
<   |
dz   t          |¦  «        z   }
d||
<   |	                     |
¦  «         Œ˜|	}n?|s	d|j        vr|dk    sJ ‚d }n)|dk    rt"          }n|dk    rt$          }n|dk    rt&          }|r't          |¦  «        |j        k    r|d |j        …         }|S )	NÚROSr   zloading charset at %sr   r   z    charset end at %sú.r  )rP   rp  rA   r3   rª   r«   r  ÚparseCharset0r;   ÚparseCharsetÚNotImplementedErrorrG   r­   ÚsetrR   rd   rî   ÚcffISOAdobeStringsÚcffIExpertStringsÚcffExpertSubsetStrings)r@   rÀ   ro   ÚisCIDrp  rA   rm  r\   ÚallNamesÚ
newCharsetr“  Únr�  s                r$   r¿  zCharsetConverter._read¦  s;  € Ý˜ Ñ&Ô&ˆØ�1Š9‰9ØÔ(ˆIØ”;ˆDØ�IŠI�eÑÔÐÝ�GŠG•EÐ2°EÑ:Ô:Ð:Ý˜t‘_”_ˆFØ˜Š{ˆ{Ý'¨	°4¸¼ÈÑOÔO��Ø˜1’� ¨!¢ Ý& y°$¸¼ÈÈvÑVÔV��å)Ð)Ý�w‘<”< 9Ò,Ð,Ð,Ð,Ý�GŠG•EÐ2°D·I²I±K´KÑ@Ô@Ð@àˆHØˆJØ$ð 
-ð 
-�	Ø Ð(Ð(à  Ô+�AÝ ™MœM­C°©L¬LÑ8�EØ$ s™?­S°©V¬VÑ3¸Ð=Ð=Ø˜Q™˜ð % s™?­S°©V¬VÑ3¸Ð=Ð=à*+¨a©%�H˜YÑ'Ø )¨C¡µ#°a±&´&Ñ 8�IØ&'�˜Ñ#Ø×!Ò! )Ñ,Ô,Ð,Ð,Ø ˆGˆGàð 
1˜¨V¬^Ð;Ð;ð  ’z�z�z�zØ��Ø˜!’�Ý,��Ø˜!’�Ý+��Ø˜!’�Ý0�Øð 	2�˜G™œ¨Ô(8Ò8Ð8ØÐ0 Ô 0Ð0Ô1ˆGØˆr&   c                 ó   — dS rà   rŸ   rÁ  s      r$   r¯   zCharsetConverter.writeÕ  r  r&   c                 óX   — |                      d¦  «         |                     ¦   «          d S )Nz8charset is dumped separately as the 'GlyphOrder' element)r2  rt   rÄ  s       r$   rÅ  zCharsetConverter.xmlWriteØ  s1   € ð 	×ÒÐTÑUÔUÐUØ×ÒÑÔÐÐÐr&   c                 ó   — d S rF   rŸ   rÈ  s        r$   r^  zCharsetConverter.xmlReadß  ó   € Øˆr&   NrÓ  rŸ   r&   r$   r   r   ¥  sQ   € € € € € ð-ð -ð -ð^ð ð ðð ð ðð ð ð ð r&   r   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚCharsetCompilerc                 óü   — |d         dk    sJ ‚t          |j        d¦  «        }t          |||¦  «        }t          |||¦  «        }t	          |¦  «        t	          |¦  «        k     r|| _        n|| _        || _        d S )Nr   ú.notdefr"  )rP   ÚdictObjÚpackCharset0ÚpackCharsetrG   r¢   rÀ   )r@   r;   r\   rÀ   r+  Údata0r¢   s          r$   r¤   zCharsetCompiler.__init__ä  s|   € Ø�qŒz˜YÒ&Ð&Ð&Ð&Ý˜œ¨Ñ.Ô.ˆÝ˜W e¨WÑ5Ô5ˆÝ˜7 E¨7Ñ3Ô3ˆÝˆt‰9Œ9•s˜5‘z”zÒ!Ð!ØˆDŒIˆIàˆDŒIØˆŒˆˆr&   c                 ó$   — || j         j        d<   d S )Nr\   rí   rï   s      r$   r¨   zCharsetCompiler.setPosï  rð   r&   c                 ó*   — t          | j        ¦  «        S rF   r`  rH   s    r$   rc   zCharsetCompiler.getDataLengthò  ra  r&   c                 ó:   — |                      | j        ¦  «         d S rF   ©r¯   r¢   ©r@   rA   s     r$   rf   zCharsetCompiler.toFileõ  ó   € Ø�
Š
�4”9ÑÔÐÐÐr&   N©r›   rœ   r�   r¤   r¨   rc   rf   rŸ   r&   r$   r4  r4  ã  sP   € € € € € ð	ð 	ð 	ð-ð -ð -ðð ð ðð ð ð ð r&   r4  c                 óü   — d }t           t          dft          t          dft          t
          dfg}t          | ¦  «        }|D ];\  }}}|� n2||k    rŒ|}t          |¦  «        D ]}| |         ||         k    rd } nŒŒ<|S )Nr   r   r   )ÚcffISOAdobeStringCountr(  ÚcffExpertStringCountr)  ÚcffExpertSubsetStringCountr*  rG   r  )r\   ÚpredefinedCharSetValÚpredefinedCharSetsÚlcsÚcntÚpcsÚcsvr4  s           r$   ÚgetStdCharSetrL  ù  s±   € àÐå	Õ!3°QÐ7Ý	Õ0°!Ð4Ý	#Õ%;¸QÐ?ðÐõ
 ˆg‰,Œ,€CØ+ð 	ð 	‰ˆˆS�#ØÐ+ØˆEØ�Š9ˆ9ØØ"ÐÝ�s‘”ð 	ð 	ˆAØ�qŒz˜S œVÒ#Ð#Ø'+Ð$Ø�ð $øð  Ðr&   c                 ó0   — t          | dd …         ¦  «        S )Nr   )rƒ   ©rW   r;   s     r$   ÚgetCIDfromNamerO    s   € Ýˆt�A�B�BŒx‰=Œ=Ðr&   c                 ó,   — |                      | ¦  «        S rF   )ÚgetSIDrN  s     r$   ÚgetSIDfromNamerR    s   € Ø�>Š>˜$ÑÔÐr&   c           	      óØ   — d}t          |¦  «        g}|rt          }nt          }| dd …         D ].}|                     t	           |||¦  «        ¦  «        ¦  «         Œ/t          |¦  «        S r³  )r£  rO  rR  rd   r¦  r	   )r\   r+  r;   Úfmtr¢   Ú	getNameIDrW   s          r$   r8  r8    su   € Ø
€CÝ�c‰NŒNÐ€DØð #Ý"ˆ	ˆ	å"ˆ	à˜˜˜”ð :ð :ˆØ�Š•J˜y˜y¨¨wÑ7Ô7Ñ8Ô8Ñ9Ô9Ð9Ð9Ý�T‰?Œ?Ðr&   c                 óò  — d}g }d }d}|rt           }nt          }| dd …         D ]D} |||¦  «        }	|€|	}n/|dz   |	k    r&||z
  }
|
dk    rd}|                     ||
f¦  «         |	}|	}ŒE|r$||z
  }
|
dk    rd}|                     ||
f¦  «         t          |¦  «        g}|dk    rt          }nt          }|D ]3\  }}
|                     t	          |¦  «         ||
¦  «        z   ¦  «         Œ4t          |¦  «        S )Nr   r   éÿ   r   )rO  rR  rd   r£  r¦  r	   )r\   r+  r;   rT  Úrangesrt  ÚendrU  rW   ÚSIDÚnLeftr¢   Ú	nLeftFuncs                r$   r9  r9  $  sG  € Ø
€CØ€FØ€EØ
€CØð #Ý"ˆ	ˆ	å"ˆ	à˜˜˜”ð 
ð 
ˆØˆi˜˜gÑ&Ô&ˆØˆ=ØˆEˆEØ�1‰W˜Š^ˆ^Ø˜%‘KˆEØ�sŠ{ˆ{Ø�Ø�MŠM˜5 %˜.Ñ)Ô)Ð)ØˆEØˆˆØ
ð &Ø�e‘ˆØ�3Š;ˆ;ØˆCØ�Š�u˜e�nÑ%Ô%Ð%å�c‰NŒNÐ€DØ
ˆa‚x€xÝˆ	ˆ	åˆ	Øð :ð :‰ˆˆuØ�Š•J˜uÑ%Ô%¨	¨	°%Ñ(8Ô(8Ñ8Ñ9Ô9Ð9Ð9Ý�T‰?Œ?Ðr&   c                 óH  — dg}|r]t          | dz
  ¦  «        D ]I}t          |¦  «        }|                     dt          |¦  «                             d¦  «        z   ¦  «         ŒJn?t          | dz
  ¦  «        D ],}t          |¦  «        }|                     ||         ¦  «         Œ-|S ©Nr6  r   ÚcidrZ   )r  r  rd   rR   Úzfill)rp  rA   r;   r+  r\   r4  ÚCIDrZ  s           r$   r$  r$  I  s²   € Øˆk€GØð )Ý�y 1‘}Ñ%Ô%ð 	6ð 	6ˆAÝ˜TÑ"Ô"ˆCØ�NŠN˜5¥3 s¡8¤8§>¢>°!Ñ#4Ô#4Ñ4Ñ5Ô5Ð5Ð5ð	6õ �y 1‘}Ñ%Ô%ð 	)ð 	)ˆAÝ˜TÑ"Ô"ˆCØ�NŠN˜7 3œ<Ñ(Ô(Ð(Ð(Ø€Nr&   c                 ó¦  — dg}d}|dk    rt           }nt          }|| k     r°t          |¦  «        } ||¦  «        }	|rRt          |||	z   dz   ¦  «        D ]:}
|                     dt	          |
¦  «                             d¦  «        z   ¦  «         Œ;n4t          |||	z   dz   ¦  «        D ]}|                     ||         ¦  «         Œ||	z   dz   }|| k     °°|S r^  )r  r  r  rd   rR   r`  )rp  rA   r;   r+  rT  r\   r±   r\  rt  r[  ra  rZ  s               r$   r%  r%  V  s  € Øˆk€GØ€EØ
ˆa‚x€xÝˆ	ˆ	åˆ	Ø
�)Ò
Ð
Ý˜4Ñ Ô ˆØ�	˜$‘”ˆØð 	-Ý˜U E¨E¡M°AÑ$5Ñ6Ô6ð :ð :�Ø—’˜u¥s¨3¡x¤x§~¢~°aÑ'8Ô'8Ñ8Ñ9Ô9Ð9Ð9ð:õ ˜U E¨E¡M°AÑ$5Ñ6Ô6ð -ð -�Ø—’˜w sœ|Ñ,Ô,Ð,Ð,Ø˜‘ Ñ!ˆð �)Ò
Ð
ð €Nr&   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚEncodingCompilerc                 ó   — t          |t          ¦  «        rJ ‚t          |j        j        ||j        ¦  «        }t          |j        j        ||j        ¦  «        }t          |¦  «        t          |¦  «        k     r|| _        n|| _        || _	        d S rF   )
rQ   rR   ÚpackEncoding0r7  r\   r;   ÚpackEncoding1rG   r¢   rÀ   )r@   r;   r   rÀ   r:  Údata1s         r$   r¤   zEncodingCompiler.__init__k  sz   € Ý˜h­Ñ,Ô,Ð,Ð,Ð,Ý˜fœnÔ4°hÀÄÑOÔOˆÝ˜fœnÔ4°hÀÄÑOÔOˆÝˆu‰:Œ:�˜E™
œ
Ò"Ð"ØˆDŒIˆIàˆDŒIØˆŒˆˆr&   c                 ó$   — || j         j        d<   d S )NÚEncodingrí   rï   s      r$   r¨   zEncodingCompiler.setPosu  ó   € Ø*-ˆŒÔ˜JÑ'Ð'Ð'r&   c                 ó*   — t          | j        ¦  «        S rF   r`  rH   s    r$   rc   zEncodingCompiler.getDataLengthx  ra  r&   c                 ó:   — |                      | j        ¦  «         d S rF   r>  r?  s     r$   rf   zEncodingCompiler.toFile{  r@  r&   NrA  rŸ   r&   r$   rd  rd  j  sP   € € € € € ðð ð ð.ð .ð .ðð ð ðð ð ð ð r&   rd  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚEncodingConverterc                 óÀ  — |dk    rdS |dk    rdS |dk    sJ ‚|j         }|                     |¦  «         t                               t          d|¦  «         t	          |¦  «        }t          |dz  ¦  «        }|dz  }|dk    rt          |j        |¦  «        }n.|dk    rt          |j        |¦  «        }nt          d|› �¦  «        ‚|rt          |||j        ¦  «         |S )	Nr   ÚStandardEncodingr   ÚExpertEncodingzloading Encoding at %sé€   é   zUnknown Encoding format: )rA   r3   rª   r«   r  ÚboolÚparseEncoding0r\   ÚparseEncoding1r0   ÚparseEncodingSupplementr;   )r@   rÀ   ro   rA   rT  ÚhaveSupplementr   s          r$   r¿  zEncodingConverter._read€  só   € Ø�AŠ:ˆ:Ø%Ð%Ø�aŠZˆZØ#Ð#à�qŠyˆyˆyˆyØŒ{ˆØ�	Š	�%ÑÔÐÝ�Š•Ð/°Ñ7Ô7Ð7Ý˜‰oŒoˆÝ˜c D™jÑ)Ô)ˆØ�D‰jˆà�!Š8ˆ8Ý% f¤n°dÑ;Ô;ˆHˆHØ�AŠXˆXÝ% f¤n°dÑ;Ô;ˆHˆHåÐ>¸Ð>Ð>Ñ?Ô?Ð?àð 	DÝ# D¨(°F´NÑCÔCÐCàˆr&   c                 ó&   — |dk    rdS |dk    rdS dS )Nrq  r   rr  r   rŸ   rÁ  s      r$   r¯   zEncodingConverter.writeš  s)   € ØÐ&Ò&Ð&Ø�1ØÐ&Ò&Ð&Ø�1Øˆqr&   c                 óØ  — |dv r-|                      ||¬¦  «         |                     ¦   «          d S |                     |¦  «         |                     ¦   «          t          t	          |¦  «        ¦  «        D ]I}||         }|dk    r9|                      dt          |¦  «        |¬¦  «         |                     ¦   «          ŒJ|                     |¦  «         |                     ¦   «          d S )N)rq  rr  rr   r6  Úmap)ÚcoderW   )rs   rt   ru   r  rG   Úhexrw   )r@   rx   rW   ro   r}  r“  s         r$   rÅ  zEncodingConverter.xmlWrite¡  sõ   € ØÐ:Ð:Ð:Ø×Ò ¨5ÐÑ1Ô1Ð1Ø×ÒÑÔÐØˆFØ×Ò˜4Ñ Ô Ð Ø×ÒÑÔÐÝ�#˜e™*œ*Ñ%Ô%ð 	$ð 	$ˆDØ˜dœˆIØ˜IÒ%Ð%Ø×#Ò# Eµ°D±	´	À	Ð#ÑJÔJÐJØ×!Ò!Ñ#Ô#Ð#øØ×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr&   c                 ó°   — d|v r|d         S dgdz  }|D ]@}t          |t          ¦  «        rŒ|\  }}}t          |d         ¦  «        }|d         }|||<   ŒA|S )NrW   r6  r¸   r}  )rQ   rR   r   )	r@   rW   r„   r…   rÀ   r   r†   r}  r“  s	            r$   r^  zEncodingConverter.xmlRead°  s{   € Ø�Uˆ?ˆ?Ø˜”=Ð Ø�; Ñ$ˆØð 	'ð 	'ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ý˜E &œMÑ*Ô*ˆDØ˜fœˆIØ&ˆH�T‰NˆNØˆr&   NrÓ  rŸ   r&   r$   ro  ro    sP   € € € € € ðð ð ð4ð ð ðð ð ðð ð ð ð r&   ro  c                 ó¦   — |                       d¦  «        }t          |¦  «        dk    rt          d¦  «        ‚t          j        d|¦  «        d         S )u3   Read a String ID (SID) â€” 2-byte unsigned integer.r   z(Unexpected end of file while reading SIDr)   r   )r.   rG   ÚEOFErrorr1   r,   )rA   r¢   s     r$   ÚreadSIDr‚  ¾  sF   € à�9Š9�Q‰<Œ<€DÝ
ˆ4�y„y�A‚~€~ÝÐAÑBÔBÐBÝŒ=˜˜tÑ$Ô$ QÔ'Ð'r&   c                 óž   — t          | ¦  «        }t          |¦  «        D ]-}t          | ¦  «        }t          | ¦  «        }||         }|||<   Œ.dS )z¼
    Parse the CFF Encoding supplement data:
      - nSups: number of supplementary mappings
      - each mapping: (code, SID) pair
    and apply them to the `encoding` list in place.
    N)r  r  r‚  )rA   r   r;   ÚnSupsÚ_r}  ÚsidrW   s           r$   rx  rx  Æ  sX   € õ �d‰OŒO€EÝ�5‰\Œ\ð ð ˆÝ˜‰ŒˆÝ�d‰mŒmˆØ�sŒ|ˆØˆ�‰ˆð	ð r&   c                 óœ   — t          |¦  «        }dgdz  }t          d|dz   ¦  «        D ]"}t          |¦  «        }|dk    r| |         ||<   Œ#|S )zl
    Format 0: simple list of codes.
    After reading the base table, optionally parse the supplement.
    r6  r¸   r   r   ©r  r  )r\   rA   ÚnCodesr   ru  r}  s         r$   rv  rv  Õ  s`   € õ
 �t‰_Œ_€FØˆ{˜SÑ €HÝ˜˜F Q™JÑ'Ô'ð .ð .ˆÝ˜‰ŒˆØ�1Š9ˆ9Ø$ WÔ-ˆH�T‰Nøà€Or&   c                 óè   — t          |¦  «        }dgdz  }d}t          |¦  «        D ]J}t          |¦  «        }t          |¦  «        }t          |dz   ¦  «        D ]}| |         ||<   |dz  }|dz  }ŒŒK|S )un   
    FormatÂ 1: range-based encoding.
    After reading the base ranges, optionally parse the supplement.
    r6  r¸   r   rˆ  )r\   rA   rq  r   ru  r…  r}  r[  s           r$   rw  rw  ä  s”   € õ
 ˜‰oŒo€GØˆ{˜SÑ €HØ€GÝ�7‰^Œ^ð ð ˆÝ˜‰ŒˆÝ˜$‘”ˆÝ�u˜q‘yÑ!Ô!ð 	ð 	ˆAØ$ WÔ-ˆH�T‰NØ�A‰IˆDØ�q‰LˆGˆGð	ð
 €Or&   c                 óú  — d}i }t          t          |¦  «        ¦  «        D ]}||         }|dk    r|||<   Œg }| dd …         D ],}|                     |¦  «        }|                     |¦  «         Œ-|r&|d         €|                     ¦   «          |r|d         ®t          |¦  «        t          t          |¦  «        ¦  «        g}|D ](}|€d}|                     t          |¦  «        ¦  «         Œ)t          |¦  «        S )Nr   r6  r   r©   ©r  rG   rù  rd   Úpopr£  r	   )	r\   r   r;   rT  Úmr}  rW   Úcodesr¢   s	            r$   rf  rf  ÷  s  € Ø
€CØ
€AÝ•c˜(‘m”mÑ$Ô$ð ð ˆØ˜Œ~ˆØ�9ÒÐØˆAˆd‰GøØ€EØ˜˜˜”ð ð ˆØ�uŠu�T‰{Œ{ˆØ�Š�TÑÔÐÐà
ð �E˜"”IÐ%Ø�	Š	‰Œˆð ð �E˜"”IÐ%õ �c‰NŒN�I¥c¨%¡j¤jÑ1Ô1Ð2€DØð %ð %ˆØˆ<ØˆDØ�Š•I˜d‘O”OÑ$Ô$Ð$Ð$Ý�T‰?Œ?Ðr&   c                 óÄ  — d}i }t          t          |¦  «        ¦  «        D ]}||         }|dk    r|||<   Œg }d }d}	| dd …         D ]F}|                     |d¦  «        }|€|}n'|	dz   |k    r|	|z
  }
|                     ||
f¦  «         |}|}	ŒG|	|z
  }
|                     ||
f¦  «         |r:|d         d         dk    r(|                     ¦   «          |r|d         d         dk    °(t          |¦  «        t          t          |¦  «        ¦  «        g}|D ]?\  }}
|dk    rd}|                     t          |¦  «        t          |
¦  «        z   ¦  «         Œ@t          |¦  «        S )Nr   r6  r   r©   rŒ  )r\   r   r;   rT  rŽ  r}  rW   rX  rt  rY  r[  r¢   s               r$   rg  rg    s�  € Ø
€CØ
€AÝ•c˜(‘m”mÑ$Ô$ð ð ˆØ˜Œ~ˆØ�9ÒÐØˆAˆd‰GøØ€FØ€EØ
€CØ˜˜˜”ð ð ˆØ�uŠu�T˜2‰ŒˆØˆ=ØˆEˆEØ�1‰W˜Š_ˆ_Ø˜%‘KˆEØ�MŠM˜5 %˜.Ñ)Ô)Ð)ØˆEØˆˆØ�%‰K€EØ
‡M‚M�5˜%�.Ñ!Ô!Ð!ð ð �V˜B”Z ”] bÒ(Ð(Ø�
Š
‰Œˆð ð �V˜B”Z ”] bÒ(Ð(õ �c‰NŒN�I¥c¨&¡k¤kÑ2Ô2Ð3€DØð 9ð 9‰ˆˆuØ�BŠ;ˆ;ØˆEØ�Š•I˜eÑ$Ô$¥y°Ñ'7Ô'7Ñ7Ñ8Ô8Ð8Ð8Ý�T‰?Œ?Ðr&   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚFDArrayConverterc                 óâ   — 	 |j         }n# t          $ r d }Y nw xY w|j        }|j        }|                     |¦  «         t          ||¬¦  «        }||_        |j        |_        |j        |_        |S r  )	r|   r  rA   r
  r3   rI  r�   r;   r?   )r@   rÀ   ro   r�   rA   r(   r‡   s          r$   r¿  zFDArrayConverter._read1  s†   € ð	Ø”_ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøàŒ{ˆØ”ˆØ�	Š	�%ÑÔÐÝ˜t¨FÐ3Ñ3Ô3ˆØˆŒØ œ.ˆŒØ$Ô0ˆÔØˆs   ‚
 Š˜c                 ó   — dS rà   rŸ   rÁ  s      r$   r¯   zFDArrayConverter.write?  r  r&   c                 ó’   — t          ¦   «         }|D ]5}t          |t          ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6|S rF   )rI  rQ   rR   r   )r@   rW   r„   r…   rÀ   r‡   r†   s          r$   r^  zFDArrayConverter.xmlReadB  sY   € Ý‘.”.ˆØð 	2ð 	2ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø�OŠO˜D %¨Ñ1Ô1Ð1Ð1Øˆr&   Nr  rŸ   r&   r$   r’  r’  0  sA   € € € € € ðð ð ðð ð ðð ð ð ð r&   r’  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚFDSelectConverterc                 óh   — |j         }|                     |¦  «         t          ||j        ¦  «        }|S rF   )rA   r3   rj  rp  )r@   rÀ   ro   rA   r)  s        r$   r¿  zFDSelectConverter._readM  s2   € ØŒ{ˆØ�	Š	�%ÑÔÐÝ˜D &Ô"2Ñ3Ô3ˆØˆr&   c                 ó   — dS rà   rŸ   rÁ  s      r$   r¯   zFDSelectConverter.writeS  r  r&   c                 ój   — |                      |d|j        fg¦  «         |                     ¦   «          d S ©Nrm  )rs   rm  rt   rÄ  s       r$   rÅ  zFDSelectConverter.xmlWriteX  s:   € Ø×Ò˜D H¨e¬lÐ#;Ð"<Ñ=Ô=Ð=Ø×ÒÑÔÐÐÐr&   c                 óZ   — t          |d         ¦  «        }d }d }t          |||¦  «        }|S r›  )r   rj  )	r@   rW   r„   r…   rÀ   rT  rA   rp  r)  s	            r$   r^  zFDSelectConverter.xmlRead\  s3   € Ý�u˜X”Ñ'Ô'ˆØˆØˆ	Ý˜D )¨SÑ1Ô1ˆØˆr&   NrÓ  rŸ   r&   r$   r—  r—  L  sP   € € € € € ðð ð ðð ð ð
ð ð ðð ð ð ð r&   r—  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚVarStoreConverterc                 ó„   — |j         }|                     |¦  «         t          |¦  «        }|                     ¦   «          |S rF   )rA   r3   rO  rD   )r@   rÀ   ro   rA   r  s        r$   r¿  zVarStoreConverter._reade  s?   € ØŒ{ˆØ�	Š	�%ÑÔÐÝ Ñ%Ô%ˆØ×ÒÑÔÐØˆr&   c                 ó   — dS rà   rŸ   rÁ  s      r$   r¯   zVarStoreConverter.writel  r  r&   c                 ó2   — |                      ||¦  «         d S rF   )r[  rÄ  s       r$   rÅ  zVarStoreConverter.xmlWriteo  s   € Ø�Š�y $Ñ'Ô'Ð'Ð'Ð'r&   c                 óR   — t          ¦   «         }|                     ||||¦  «         |S rF   )rO  r^  )r@   rW   r„   r…   rÀ   r  s         r$   r^  zVarStoreConverter.xmlReadr  s*   € Ý‘>”>ˆØ×Ò˜˜u g¨vÑ6Ô6Ð6Øˆr&   NrÓ  rŸ   r&   r$   rž  rž  d  sP   € € € € € ðð ð ðð ð ð(ð (ð (ðð ð ð ð r&   rž  c                 ó’   — d}t          |¦  «        g}| D ]$}|                     t          |¦  «        ¦  «         Œ%t          |¦  «        S rà   )r£  rd   r	   )ÚfdSelectArrayrT  r¢   rS   s       r$   ÚpackFDSelect0r¥  x  sM   € Ø
€CÝ�c‰NŒNÐ€DØð &ð &ˆØ�Š•I˜eÑ$Ô$Ñ%Ô%Ð%Ð%Ý�T‰?Œ?Ðr&   c                 ó2  — d}g }t          | ¦  «        }d}t          |¦  «        D ])}| |         }||k    r|                     ||g¦  «         |}Œ*|dz   }t          |¦  «        g}|                     t	          t          |¦  «        ¦  «        ¦  «         |D ]R}	|                     t	          |	d         ¦  «        ¦  «         |                     t          |	d         ¦  «        ¦  «         ŒS|                     t	          |¦  «        ¦  «         t          |¦  «        S )Nr   r©   r   r   )rG   r  rd   r£  r¦  r	   ©
r¤  rT  ÚfdRangesÚlenArrayÚlastFDIndexr4  r-  ÚsentinelGIDr¢   ÚfdRanges
             r$   ÚpackFDSelect3r­  €  s  € Ø
€CØ€HÝ�=Ñ!Ô!€HØ€KÝ�8‰_Œ_ð "ð "ˆØ Ô"ˆØ˜'Ò!Ð!Ø�OŠO˜Q ˜LÑ)Ô)Ð)Ø!ˆKøØ�a‘%€Kå�c‰NŒNÐ€DØ‡K‚K•
�3˜x™=œ=Ñ)Ô)Ñ*Ô*Ð*Øð +ð +ˆØ�Š•J˜w qœzÑ*Ô*Ñ+Ô+Ð+Ø�Š•I˜g aœjÑ)Ô)Ñ*Ô*Ð*Ð*Ø‡K‚K•
˜;Ñ'Ô'Ñ(Ô(Ð(Ý�T‰?Œ?Ðr&   c                 ó2  — d}g }t          | ¦  «        }d}t          |¦  «        D ])}| |         }||k    r|                     ||g¦  «         |}Œ*|dz   }t          |¦  «        g}|                     t	          t          |¦  «        ¦  «        ¦  «         |D ]R}	|                     t	          |	d         ¦  «        ¦  «         |                     t          |	d         ¦  «        ¦  «         ŒS|                     t	          |¦  «        ¦  «         t          |¦  «        S )Nr[   r©   r   r   )rG   r  rd   r£  r©  r¦  r	   r§  s
             r$   ÚpackFDSelect4r¯  •  s  € Ø
€CØ€HÝ�=Ñ!Ô!€HØ€KÝ�8‰_Œ_ð "ð "ˆØ Ô"ˆØ˜'Ò!Ð!Ø�OŠO˜Q ˜LÑ)Ô)Ð)Ø!ˆKøØ�a‘%€Kå�c‰NŒNÐ€DØ‡K‚K•
�3˜x™=œ=Ñ)Ô)Ñ*Ô*Ð*Øð ,ð ,ˆØ�Š•J˜w qœzÑ*Ô*Ñ+Ô+Ð+Ø�Š•J˜w qœzÑ*Ô*Ñ+Ô+Ð+Ð+Ø‡K‚K•
˜;Ñ'Ô'Ñ(Ô(Ð(Ý�T‰?Œ?Ðr&   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚFDSelectCompilerc                 óˆ  — |j         }|j        }|dk    rt          |¦  «        | _        n‘|dk    rt	          |¦  «        | _        nv|dk    rt          |¦  «        | _        n[t          |¦  «        }t	          |¦  «        }t          |¦  «        t          |¦  «        k     r|| _        d|_         n|| _        d|_         || _        d S )Nr   r   r[   )rm  ro  r¥  r¢   r­  r¯  rG   rÀ   )r@   r)  rÀ   rT  r¤  r:  Údata3s          r$   r¤   zFDSelectCompiler.__init__«  s»   € ØŒoˆØ Ô)ˆØ�!Š8ˆ8Ý% mÑ4Ô4ˆDŒIˆIØ�AŠXˆXÝ% mÑ4Ô4ˆDŒIˆIØ�AŠXˆXÝ% mÑ4Ô4ˆDŒIˆIõ " -Ñ0Ô0ˆEÝ! -Ñ0Ô0ˆEÝ�5‰zŒz�C ™JœJÒ&Ð&Ø!�”	Ø"#�”�à!�”	Ø"#�”àˆŒˆˆr&   c                 ó$   — || j         j        d<   d S )Nrj  rí   rï   s      r$   r¨   zFDSelectCompiler.setPosÁ  rk  r&   c                 ó*   — t          | j        ¦  «        S rF   r`  rH   s    r$   rc   zFDSelectCompiler.getDataLengthÄ  ra  r&   c                 ó:   — |                      | j        ¦  «         d S rF   r>  r?  s     r$   rf   zFDSelectCompiler.toFileÇ  r@  r&   NrA  rŸ   r&   r$   r±  r±  ª  sP   € € € € € ðð ð ð,.ð .ð .ðð ð ðð ð ð ð r&   r±  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚVarStoreCompilerc                 óÔ   — || _         |                     ¦   «          t          dt          |j        ¦  «        ¦  «        }t          |¦  «        |j        g}t          |¦  «        | _        d S rS  )rÀ   rl   ÚminrG   r¢   r¦  r	   )r@   ÚvarStoreDatarÀ   ÚvarStoreDataLenr¢   s        r$   r¤   zVarStoreCompiler.__init__Ì  s[   € ØˆŒØ×ÒÑÔÐÝ˜f¥c¨,Ô*;Ñ&<Ô&<Ñ=Ô=ˆÝ˜?Ñ+Ô+¨\Ô->Ð?ˆÝ˜d‘O”OˆŒ	ˆ	ˆ	r&   c                 ó$   — || j         j        d<   d S )Nr|   rí   rï   s      r$   r¨   zVarStoreCompiler.setPosÓ  rk  r&   c                 ó*   — t          | j        ¦  «        S rF   r`  rH   s    r$   rc   zVarStoreCompiler.getDataLengthÖ  ra  r&   c                 ó:   — |                      | j        ¦  «         d S rF   r>  r?  s     r$   rf   zVarStoreCompiler.toFileÙ  r@  r&   NrA  rŸ   r&   r$   r¸  r¸  Ë  sP   € € € € € ð$ð $ð $ð.ð .ð .ðð ð ðð ð ð ð r&   r¸  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚROSConverterc                 ó¬   — |\  }}}|                      |dt          |¦  «        fdt          |¦  «        fd|fg¦  «         |                     ¦   «          d S ©NÚRegistryÚOrderÚ
SupplementrÑ  )r@   rx   rW   ro   ÚregistryÚorderÚ
supplements          r$   rÅ  zROSConverter.xmlWriteÞ  sl   € Ø&+Ñ#ˆ�%˜Ø×ÒØà�U 8™_œ_Ð-Ø�% ™,œ,Ð'Ø˜zÐ*ðñ	
ô 	
ð 	
ð 	×ÒÑÔÐÐÐr&   c                 óJ   — |d         |d         t          |d         ¦  «        fS rÃ  rå  rÈ  s        r$   r^  zROSConverter.xmlReadê  s%   € Ø�jÔ! 5¨¤>µ8¸EÀ,Ô<OÑ3PÔ3PÐQÐQr&   Nrû  rŸ   r&   r$   rÁ  rÁ  Ý  s7   € € € € € ð
ð 
ð 
ðRð Rð Rð Rð Rr&   rÁ  )é   ÚmaxstackÚnumberNN)é   é   r"  )rZ  rZ  rÍ  ))rÎ  é   ÚSyntheticBaserÍ  NN)r   ÚversionrZ  NNrÚ  rZ  )rÎ  r   rÛ  r   ÚFullName)rÎ  é&   ÚFontNamer   Ú
FamilyName)r[   ÚWeightrZ  NN))rÎ  r   ÚisFixedPitchrÍ  r   N))rÎ  r   ÚItalicAnglerÍ  r   N))rÎ  r   ÚUnderlinePositionrÍ  iœÿÿÿN))rÎ  r[   ÚUnderlineThicknessrÍ  é2   N))rÎ  rZ   Ú	PaintTyperÍ  r   N))rÎ  é   ÚCharstringTyperÍ  r   N)rÎ  é   Ú
FontMatrixrl  )çü©ñÒMbP?r   r   râ  r   r   )é   ÚUniqueIDrÍ  NNrZ   ÚFontBBox)r   r   r   r   ))rÎ  é   ÚStrokeWidthrÍ  r   N)é   ÚXUIDrl  NN))rÎ  é   Ú
PostScriptrZ  NN))rÎ  é   ÚBaseFontNamerZ  NN))rÎ  é   ÚBaseFontBlendÚdeltaNN))rÎ  é   ÚCIDFontVersionrÍ  r   N))rÎ  é    ÚCIDFontRevisionrÍ  r   N))rÎ  é!   ÚCIDFontTyperÍ  r   N))rÎ  é"   ÚCIDCountrÍ  i"  Né   r\   rÍ  ))rÎ  é#   ÚUIDBaserÍ  NNé   rj  é   r}   )rÍ  rÍ  )rÎ  é%   )rÎ  é$   r€   é   é   r|   Úblendrî  )rì  ÚvsindexrÍ  NNrë  )rÞ  Ú
BlueValuesrð  NN)rà  Ú
OtherBluesrð  NN)ræ  ÚFamilyBluesrð  NN)é	   ÚFamilyOtherBluesrð  NN))rÎ  r  Ú	BlueScalerÍ  g}?5^ºI¤?N))rÎ  é
   Ú	BlueShiftrÍ  rà  N))rÎ  é   ÚBlueFuzzrÍ  r   N)r
  ÚStdHWrÍ  NN)r  ÚStdVWrÍ  NN))rÎ  rÎ  Ú	StemSnapHrð  NN))rÎ  rã  Ú	StemSnapVrð  NN))rÎ  rè  Ú	ForceBoldrÍ  r   N))rÎ  rù  ÚForceBoldThresholdrÍ  NN))rÎ  rü  ÚlenIVrÍ  NN))rÎ  r   ÚLanguageGrouprÍ  r   N))rÎ  rý  ÚExpansionFactorrÍ  g¸…ëQ¸®?N))rÎ  é   ÚinitialRandomSeedrÍ  r   N)rÐ  ÚdefaultWidthXrÍ  r   N)rê  ÚnominalWidthXrÍ  r   Nr  rý   c                 ó
  — t          t          | ¦  «        ¦  «        D ]e}| |         \  }}}}}|�Œ|dv rt          ¦   «         }n5|dk    rt          ¦   «         }n |dk    rt	          ¦   «         }n|dk    rd }nJ ‚|||||f| |<   Œfd S )N)rð  rl  rÍ  rZ  rë  )r  rG   rý  rî  rÊ  )r¦   r4  r­  rW   r®  r¯  r°  s          r$   ÚaddConvertersr  a  s¸   € Ý•3�u‘:”:ÑÔð 0ð 0ˆØ',¨Q¤xÑ$ˆˆD�#�w ØÐØØÐ$Ð$Ð$Ý!Ñ#Ô#ˆDˆDØ�HŠ_ˆ_Ý"Ñ$Ô$ˆDˆDØ�EŠ\ˆ\Ý!Ñ#Ô#ˆDˆDØ�KÒÐØˆDˆDà�5Ø�t˜S '¨4Ð/ˆˆa‰ˆð0ð 0r&   c                   ó$   — e Zd Z ee¦  «        ZdS )ÚTopDictDecompilerN)r›   rœ   r�   r±  ÚtopDictOperatorsÚ	operatorsrŸ   r&   r$   r  r  w  s   € € € € € Ø!Ð!Ð"2Ñ3Ô3€I€I€Ir&   r  c                   ó$   — e Zd Z ee¦  «        ZdS )ÚPrivateDictDecompilerN)r›   rœ   r�   r±  ÚprivateDictOperatorsr   rŸ   r&   r$   r"  r"  {  s   € € € € € Ø!Ð!Ð"6Ñ7Ô7€I€I€Ir&   r"  c                   óP   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ ZdS )ÚDictCompilerr   Nc                 ó†  — |rt          |t          ¦  «        sJ ‚|€t          |d¦  «        r|j        }|€J ‚|| _        || _        || _        || _        i }|j        D ]]}t          ||d ¦  «        }|€Œ|j	        |         }| 
                    ||¦  «        }||j                             |¦  «        k    rŒX|||<   Œ^|| _        d S r½   )rQ   r:   rP   r(   r7  r;   rÀ   rÈ  r  Ú
convertersr¯   Údefaultsrù  rî   )	r@   r7  r;   rÀ   r(   rî   rW   ro   r°  s	            r$   r¤   zDictCompiler.__init__‚  sæ   € Øð 	7Ý˜g¥~Ñ6Ô6Ð6Ð6Ð6Øˆ>�g f¨hÑ7Ô7ˆ>Ø”]ˆFØÐ%Ð%Ð%ØˆŒØˆŒØˆŒØˆŒØˆØ”Mð 	"ð 	"ˆDÝ˜G T¨4Ñ0Ô0ˆEØˆ}ØØÔ% dÔ+ˆDØ—J’J˜w¨Ñ.Ô.ˆEØ˜Ô(×,Ò,¨TÑ2Ô2Ò2Ð2ØØ!ˆG�D‰MˆMØˆŒˆˆr&   c                 ó   — d S rF   rŸ   rï   s      r$   r¨   zDictCompiler.setPos˜  r2  r&   c                 óF   — t          |                      d¦  «        ¦  «        S )Nrc   )rG   rl   rH   s    r$   rc   zDictCompiler.getDataLength›  s   € Ý�4—<’< Ñ0Ô0Ñ1Ô1Ð1r&   c                 ó¶  — t                                 t          d| j        j        |¦  «         | j        }g }| j        j        D �]}|                     |¦  «        }|€Œ| j        |         \  }}t          |t          ¦  «        r€t          |¦  «        }t          |¦  «        |k    s
J d¦   «         ‚t          |¦  «        D ]C}	||	         }
||	         }t          | d|
z   ¦  «        }|                      ||¦  «        ¦  «         ŒDn1t          | d|z   ¦  «        }|                      ||¦  «        ¦  «         |                     |¦  «         �Œt          |¦  «        }|S )Nz-- compiling %s for %szvalue doesn't match arg typeÚarg_)rª   r«   râ   r›   rî   r7  rÈ  rù  ÚopcodesrQ   r]  rG   r  r  rd   r	   )r@   Úreasonrî   r¢   rW   ro   r­  ÚargTyper¶  r4  r®  ÚvÚ
arghandlers                r$   rl   zDictCompiler.compilež  sO  € Ý�Š•Ð/°´Ô1HÈ&ÑQÔQÐQØ”,ˆØˆØ”LÔ&ð 	ñ 	ˆDØ—K’K Ñ%Ô%ˆEØˆ}ØØœ, tÔ,‰KˆB�Ý˜'¥5Ñ)Ô)ð 
/Ý˜‘L”L�Ý˜5‘z”z Q’��Ð(F‘”�Ý˜q™œð /ð /�AØ! !œ*�CØ˜aœ�AÝ!(¨¨v¸©|Ñ!<Ô!<�JØ—K’K 
 
¨1¡¤Ñ.Ô.Ð.Ð.ð	/õ % T¨6°GÑ+;Ñ<Ô<�
Ø—’˜J˜J uÑ-Ô-Ñ.Ô.Ð.Ø�KŠK˜‰OŒOˆO‰OÝ˜‰ŒˆØˆr&   c                 óZ   — |                       d¦  «        }|                     |¦  «         d S )Nrf   )rl   r¯   )r@   rA   r¢   s      r$   rf   zDictCompiler.toFile¶  s+   € Ø�|Š|˜HÑ%Ô%ˆØ�
Š
�4ÑÔÐÐÐr&   c                 ó  — t          |t          ¦  «        red„ |D ¦   «         }|                     t          d¦  «        ¦  «         |                     t	          t
          ¦  «        ¦  «         t          |¦  «        }nt          |¦  «        }|S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rŸ   ©ÚencodeNumberræ  s     r$   rè  z+DictCompiler.arg_number.<locals>.<listcomp>¼  s    € Ð5Ð5Ð5¨#•L Ñ%Ô%Ð5Ð5Ð5r&   r   )rQ   r5   rd   r6  r   ÚblendOpr	   )r@   Únumr¢   Údatums       r$   Ú
arg_numberzDictCompiler.arg_numberº  sx   € Ý�c�4Ñ Ô ð 	&Ø5Ð5°Ð5Ñ5Ô5ˆDØ�KŠK� Q™œÑ(Ô(Ð(Ø�KŠK�¥Ñ(Ô(Ñ)Ô)Ð)Ý˜d‘O”OˆEˆEå  Ñ%Ô%ˆEØˆr&   c                 óZ   — t          j        | j                             |¦  «        ¦  «        S rF   )r   ÚencodeIntCFFr;   rQ  )r@   r#   s     r$   Úarg_SIDzDictCompiler.arg_SIDÄ  s#   € ÝÔ)¨$¬,×*=Ò*=¸aÑ*@Ô*@ÑAÔAÐAr&   c                 ó~   — g }|D ]*}|                      |                      |¦  «        ¦  «         Œ+t          |¦  «        S rF   )rd   r:  r	   )r@   ro   r¢   r8  s       r$   Ú	arg_arrayzDictCompiler.arg_arrayÇ  sC   € ØˆØð 	.ð 	.ˆCØ�KŠK˜Ÿš¨Ñ,Ô,Ñ-Ô-Ð-Ð-Ý˜‰ŒÐr&   c                 ó&  — |sdS |d         }t          |t          ¦  «        r|                      |¦  «        }nLg }d}|D ]}|                     ||z
  ¦  «         |}Œg }|D ]$}|                     t	          |¦  «        ¦  «         Œ%t          |¦  «        S )Nr&   r   )rQ   r5   Úarg_delta_blendrd   r6  r	   )r@   ro   Úval0r¢   rÚ   Úlastr0  r8  s           r$   Ú	arg_deltazDictCompiler.arg_deltaÍ  s²   € Øð 	Ø�3Ø�QŒxˆÝ�d�DÑ!Ô!ð 
	/Ø×'Ò'¨Ñ.Ô.ˆDˆDàˆCØˆDØð ð �Ø—
’
˜1˜t™8Ñ$Ô$Ð$Ø��ØˆDØð /ð /�Ø—’�L¨Ñ-Ô-Ñ.Ô.Ð.Ð.Ý˜‰ŒÐr&   c                 óð  — t          |d         ¦  «        }t          |¦  «        }||z  dz   }|| j        k    r�t          | j        dz
  |z  ¦  «        }g }	 t          t          |¦  «        |¦  «        }|dk    rn?|d|…         }|                      |¦  «        }	|                     |	¦  «         ||d…         }Œcn½dg|z  }
dg|z  }d}d}||k     r6||         d         }||z
  |
|<   |}||         dd…         ||<   |dz  }||k     °6|
}|D ]}|                     |¦  «         Œd„ |D ¦   «         }|                     t          |¦  «        ¦  «         |                     t          t          ¦  «        ¦  «         |S )aM  A delta list with blend lists has to be *all* blend lists.

        The value is a list is arranged as follows::

                [
                        [V0, d0..dn]
                        [V1, d0..dn]
                        ...
                        [Vm, d0..dn]
                ]

        ``V`` is the absolute coordinate value from the default font, and ``d0-dn``
        are the delta values from the *n* regions. Each ``V`` is an absolute
        coordinate from the default font.

        We want to return a list::

                [
                        [v0, v1..vm]
                        [d0..dn]
                        ...
                        [d0..dn]
                        numBlends
                        blendOp
                ]

        where each ``v`` is relative to the previous default font value.
        r   r   TNc                 ó,   — g | ]}t          |¦  «        ‘ŒS rŸ   r5  ræ  s     r$   rè  z0DictCompiler.arg_delta_blend.<locals>.<listcomp>	  s    € Ð=Ð=Ð=¨•< Ñ$Ô$Ð=Ð=Ð=r&   )
rG   ÚmaxBlendStackrƒ   rº  rA  rÞ   rd   r6  r   r7  )r@   ro   Ú
numMastersÚ	numBlendsÚnumStackÚnumBlendValuesrÚ   ÚnumValÚvalListÚout1Ú	firstListÚ	deltaListr4  ÚprevValÚdefaultValueÚrelValueListrë  s                    r$   rA  zDictCompiler.arg_delta_blendÞ  s»  € õ: ˜˜qœ‘]”]ˆ
Ý˜‘J”Jˆ	Ø 
Ñ*¨aÑ/ˆØ�dÔ(Ò(Ð(õ ! $Ô"4°qÑ"8¸JÑ!FÑGÔGˆNØˆCð'Ý�S ™ZœZ¨Ñ8Ô8�Ø˜Q’;�;ØØ  & œ/�Ø×+Ò+¨GÑ4Ô4�Ø—
’
˜4Ñ Ô Ð Ø˜f˜g˜gœ�ð'ð ð ˜˜i™ˆIØ˜ Ñ*ˆIØˆAØˆGØ�i’-�-ð
  % Qœx¨œ{�Ø+¨gÑ5�	˜!‘Ø&�Ø$ Qœx¨¨¨œ|�	˜!‘Ø�Q‘�ð �i’-�-ð %ˆLØ&ð /ð /�	Ø×#Ò# IÑ.Ô.Ð.Ð.Ø=Ð=°Ð=Ñ=Ô=ˆCØ�JŠJ•| IÑ.Ô.Ñ/Ô/Ð/Ø�JŠJ•w�wÑ'Ô'Ñ(Ô(Ð(Øˆ
r&   rF   )r›   rœ   r�   rG  r¤   r¨   rc   rl   rf   r:  r=  r?  rD  rA  rŸ   r&   r$   r%  r%    s¼   € € € € € Ø€Mðð ð ð ð,ð ð ð2ð 2ð 2ðð ð ð0ð ð ðð ð ðBð Bð Bðð ð ðð ð ð"Dð Dð Dð Dð Dr&   r%  c                 ó|   — t          | t          ¦  «        rt          j        | ¦  «        S t          j        | ¦  «        S rF   )rQ   rá  r   ÚencodeFloatr<  )r8  s    r$   r6  r6  %	  s6   € Ý�#•uÑÔð /ÝÔ(¨Ñ-Ô-Ð-åÔ)¨#Ñ.Ô.Ð.r&   c                   ó*   — e Zd Z ee¦  «        Zd„ ZdS )ÚTopDictCompilerc                 ó~  — | j         }g }| j        j        €ôt          | j        d¦  «        rx| j        j        rlt          | j        d¦  «        rd }nt          | j        j        ¦  «        }|€/|                     t          || j        j        | ¦  «        ¦  «         n
|| j        d<   t          | j        d¦  «        rQ| j        j	        rE| j        j	        }t          |t          ¦  «        s$|                     t          ||| ¦  «        ¦  «         nFt          | j        d¦  «        r1| j        j        }t          || ¦  «        }|                     |¦  «         t          | j        d¦  «        r| j        j        }t!          |¦  «        dk    r;| j        j        }	| j        j        D ]"}
|                     |	|
         j        ¦  «         Œ#t'          || ¦  «        }|                     |¦  «         t          | j        d¦  «        r`g }| j        j        }	| j        j        D ]}
|                     |	|
         ¦  «         Œt)          ||| |¬¦  «        }|                     |¦  «         t          | j        d	¦  «        r]| j        j                             || ¦  «        }|                     |¦  «         |                     |                     |¦  «        ¦  «         t          | j        d
¦  «        r]| j        j                             || ¦  «        }|                     |¦  «         |                     |                     |¦  «        ¦  «         |S )Nr\   r"  rj  r|   rj  r   r  r'   r€   r}   )r(   r7  rC   rP   r\   rL  rd   r4  rî   rj  rQ   rR   rd  r|   r¸  rj  rG   r  rŒ  r±  rÿ   r€   r`   rÞ   re   r}   )r@   r;   r(   rj   ÚcharsetCoder   r»  ÚvarStoreCompr)  r�  rW   ÚfdSelectCompr¿   ÚcharStringsCompÚfdArrayIndexCompÚprivComps                   r$   re   zTopDictCompiler.getChildren/	  s  € Ø”ˆØˆØŒ<Ô)Ð1Ý�t”| YÑ/Ô/ð 
:°D´LÔ4Hð 
:Ý˜4œ<¨Ñ/Ô/ð FØ"&�K�Kå"/°´Ô0DÑ"EÔ"E�KØÐ&Ø—O’OÝ'¨°´Ô1EÀtÑLÔLñô ð ð ð /:�D”L Ñ+Ý�t”| ZÑ0Ô0ð O°T´\Ô5Jð OØœ<Ô0�Ý! (­CÑ0Ô0ð OØ—O’OÕ$4°W¸hÈÑ$MÔ$MÑNÔNÐNøå�t”| ZÑ0Ô0ð .Ø#œ|Ô4�Ý/°¸dÑCÔC�Ø—’ Ñ-Ô-Ð-Ý�4”< Ñ,Ô,ð 	*ð
 ”|Ô,ˆHå�8‰}Œ} Ò!Ð!Ø"œlÔ6�Ø œLÔ0ð Eð E�DØ—O’O K°Ô$5Ô$CÑDÔDÐDÐDÝ+¨H°dÑ;Ô;ˆLØ�OŠO˜LÑ)Ô)Ð)Ý�4”< Ñ/Ô/ð 	-ØˆEØœ,Ô2ˆKØœÔ,ð 0ð 0�Ø—’˜[¨Ô.Ñ/Ô/Ð/Ð/Ý1°%¸À$ÈvÐVÑVÔVˆOØ�OŠO˜OÑ,Ô,Ð,Ý�4”< Ñ+Ô+ð 	Cð  $œ|Ô3×?Ò?ÀÈÑNÔNÐØ�OŠOÐ,Ñ-Ô-Ð-Ø�OŠOÐ,×8Ò8¸ÑAÔAÑBÔBÐBÝ�4”< Ñ+Ô+ð 	;Ø”|Ô+×7Ò7¸ÀÑFÔFˆHØ�OŠO˜HÑ%Ô%Ð%Ø�OŠO˜H×0Ò0°Ñ9Ô9Ñ:Ô:Ð:Øˆr&   N)r›   rœ   r�   r´  r  r-  re   rŸ   r&   r$   rW  rW  ,	  s3   € € € € € ØˆoÐ.Ñ/Ô/€Gð7ð 7ð 7ð 7ð 7r&   rW  c                   ó<   ‡ — e Zd Z ee¦  «        Zdˆ fd„	Zd„ Zˆ xZS )ÚFontDictCompilerNc                 óv  •— t          t          | ¦  «                             ||||¬¦  «         g }| j        }t	          t          |j        ¦  «        t          |j        ¦  «        z
  ¦  «        D ]Š}||j        v r| 	                    |¦  «         Œ!|j
                             |¦  «        }|�#|j        |         }|                     ||¦  «        }t          ||d ¦  «        |k    r| 	                    |¦  «         Œ‹|r?t                               dd                     t	          |¦  «        ¦  «        z   ¦  «         d S d S )Nr'   z:Some CFF FDArray/FontDict keys were ignored upon compile: rÜ  )rá   r`  r¤   r7  rŽ  r'  r'  rÈ  rî   rd   r(  rù  r.   r  rª   Úwarningrô  )
r@   r7  r;   rÀ   r(   ÚignoredNamesrW   r¯  r°  râ   s
            €r$   r¤   zFontDictCompiler.__init__l	  sL  ø€ ÝÕ Ñ%Ô%×.Ò.¨w¸ÀÐPVÐ.ÑWÔWÐWð ˆØ”,ˆÝ�3˜wÔ1Ñ2Ô2µS¸¼Ñ5GÔ5GÑGÑHÔHð 	.ð 	.ˆDØ�w”Ð&Ð&ð
 ×#Ò# DÑ)Ô)Ð)Ð)ð "Ô*×.Ò.¨tÑ4Ô4�ØÐ&Ø"Ô-¨dÔ3�DØ"Ÿiši¨°Ñ9Ô9�GÝ˜7 D¨$Ñ/Ô/°7Ò:Ð:Ø ×'Ò'¨Ñ-Ô-Ð-øØð 	Ý�KŠKØLØ—(’(�6 ,Ñ/Ô/Ñ0Ô0ñ1ñô ð ð ð ð	ð 	r&   c                 óî   — g }t          | j        d¦  «        r]| j        j                             || ¦  «        }|                     |¦  «         |                     |                     |¦  «        ¦  «         |S ©Nr}   )rP   r7  r}   r`   rd   rÞ   re   )r@   r;   rj   r^  s       r$   re   zFontDictCompiler.getChildren�	  sl   € ØˆÝ�4”< Ñ+Ô+ð 	;Ø”|Ô+×7Ò7¸ÀÑFÔFˆHØ�OŠO˜HÑ%Ô%Ð%Ø�OŠO˜H×0Ò0°Ñ9Ô9Ñ:Ô:Ð:Øˆr&   rF   )	r›   rœ   r�   r´  r  r-  r¤   re   rå   ræ   s   @r$   r`  r`  i	  s]   ø€ € € € € ØˆoÐ.Ñ/Ô/€Gðð ð ð ð ð ðBð ð ð ð ð ð r&   r`  c                   ó4   — e Zd ZeZ ee¦  «        Zd„ Zd„ Z	dS )ÚPrivateDictCompilerc                 ó@   — ||z
  }||f| j         j        d<   || _        d S re  )rÀ   rî   r²   )r@   r²   rµ   r  s       r$   r¨   zPrivateDictCompiler.setPosš	  s)   € Ø˜‰|ˆØ)-¨s¨ˆŒÔ˜IÑ&ØˆŒˆˆr&   c                 óš   — g }t          | j        d¦  «        r3|                     | j        j                             || ¦  «        ¦  «         |S rü   )rP   r7  rd   rý   r`   )r@   r;   rj   s      r$   re   zPrivateDictCompiler.getChildrenŸ	  sH   € ØˆÝ�4”< Ñ)Ô)ð 	KØ�OŠO˜DœLÔ.×:Ò:¸7ÀDÑIÔIÑJÔJÐJØˆr&   N)
r›   rœ   r�   ÚmaxStackLimitrG  r´  r#  r-  r¨   re   rŸ   r&   r$   rg  rg  –	  sG   € € € € € Ø!€MØˆoÐ2Ñ3Ô3€Gðð ð ð
ð ð ð ð r&   rg  c                   óL   ‡ — e Zd Zd
d„Zd„ Zd„ Zdd„Zd„ Zˆ fd„Zd„ Z	d	„ Z
ˆ xZS )ÚBaseDictNc                 óÚ   — |d u |d u k    sJ ‚i | _         g | _        || _        |€d S || _        || _        |�5t
                               t          d| j        j        |¦  «         || _	        d S d S )Nr  )
rî   Ú	skipNamesr;   r
  rA   rª   r«   râ   r›   rÐ   )r@   r;   rA   rÐ   r(   s        r$   r¤   zBaseDict.__init__§	  s   € Ø˜$� D¨D LÒ1Ð1Ð1Ð1ØˆŒØˆŒØˆŒØˆ<ØˆFØˆŒØˆŒ	ØÐÝ�GŠG•EÐ-¨t¬~Ô/FÈÑOÔOÐOØ ˆDŒKˆKˆKð Ðr&   c                 ó2  — t                                 t          d| j        j        t	          |¦  «        ¦  «         |                      | j        | ¦  «        }|                     |¦  «         |                     ¦   «         | _	        |  
                    ¦   «          d S )Nz    length %s is %d)rª   r«   râ   r›   rG   ÚdecompilerClassr;   rD   ÚgetDictrî   ÚpostDecompile)r@   r¢   Údecs      r$   rD   zBaseDict.decompile´	  sv   € Ý�Š•Ð,¨d¬nÔ.EÅsÈ4ÁyÄyÑQÔQÐQØ×"Ò" 4¤<°Ñ6Ô6ˆØ�Š�dÑÔÐØ—{’{‘}”}ˆŒØ×ÒÑÔÐÐÐr&   c                 ó   — d S rF   rŸ   rH   s    r$   rr  zBaseDict.postDecompile»	  r2  r&   c                 ó4   — |                       | |||¬¦  «        S r  r  r   s       r$   r`   zBaseDict.getCompiler¾	  r!  r&   c                 ó\  — |d d…         |dd …         cxk    rdk    rn nt          |¦  «        ‚| j                             |d ¦  «        }|€| j                             |¦  «        }|€t          |¦  «        ‚| j        |         }|                     | |¦  «        }t          | ||¦  «         |S )Nr   éþÿÿÿÚ__)r  rî   rù  r(  r'  r.   Úsetattr)r@   rW   ro   r°  s       r$   Ú__getattr__zBaseDict.__getattr__Á	  s¾   € Ø���Œ8�t˜B˜C˜C”yÐ(Ð(Ò(Ð( DÒ(Ð(Ð(Ð(Ð(õ
 ! Ñ&Ô&Ð&Ø”× Ò   tÑ,Ô,ˆØˆ=Ø”M×%Ò% dÑ+Ô+ˆEØˆ=Ý  Ñ&Ô&Ð&ØŒ˜tÔ$ˆØ—	’	˜$ Ñ&Ô&ˆÝ��d˜EÑ"Ô"Ð"Øˆr&   c                 óž   •— | j                              |d ¦  «        d u}|| j        v s|s#t          ¦   «                              |¦  «         d S d S rF   )rî   r�  Ú__dict__rá   Ú__delattr__)r@   rW   Ú	inRawDictrâ   s      €r$   r}  zBaseDict.__delattr__Ò	  sY   ø€ ð ”L×$Ò$ T¨4Ñ0Ô0¸Ð<ˆ	Ø�4”=Ð Ð ¨	Ð Ý‰GŒG×Ò Ñ%Ô%Ð%Ð%Ð%ð !Ð r&   c                 óœ  — | j         D ]J}|| j        v rŒt          | |d ¦  «        }|€|dk    rŒ&| j        |         }|                     |||¦  «         ŒKt          | j        ¦  «        t          | j         ¦  «        z
  }|rN|                     dd                     t          |¦  «        ¦  «        z  ¦  «         | 
                    ¦   «          d S d S )Nr\   zsome keys were ignored: %srÜ  )rÈ  rn  r  r'  rÅ  r'  rî   r2  rô  rŽ  rt   )r@   rx   rW   ro   r°  rc  s         r$   rv   zBaseDict.toXMLÙ	  sé   € Ø”Jð 	2ð 	2ˆDØ�t”~Ð%Ð%ØÝ˜D $¨Ñ-Ô-ˆEð ˆ} ¨Ò!2Ð!2ØØ”? 4Ô(ˆDØ�MŠM˜) T¨5Ñ1Ô1Ð1Ð1Ý˜4œ<Ñ(Ô(­3¨t¬z©?¬?Ñ:ˆØð 	 Ø×ÒØ,¨s¯xªx½¸|Ñ8LÔ8LÑ/MÔ/MÑMñô ð ð ×ÒÑÔÐÐÐð		 ð 	 r&   c                 ór   — | j         |         }|                     |||| ¦  «        }t          | ||¦  «         d S rF   )r'  r^  ry  )r@   rW   r„   r…   r°  ro   s         r$   r   zBaseDict.fromXMLò	  s=   € ØŒ˜tÔ$ˆØ—’˜T 5¨'°4Ñ8Ô8ˆÝ��d˜EÑ"Ô"Ð"Ð"Ð"r&   )NNNNrF   )r›   rœ   r�   r¤   rD   rr  r`   rz  r}  rv   r   rå   ræ   s   @r$   rl  rl  ¦	  s¯   ø€ € € € € ð!ð !ð !ð !ðð ð ðð ð ðHð Hð Hð Hðð ð ð"&ð &ð &ð &ð &ð ð  ð  ð2#ð #ð #ð #ð #ð #ð #r&   rl  c                   ó˜   ‡ — e Zd ZdZ ee¦  «        Z ee¦  «        Ze	Z
 ee¦  «        ZeZ	 	 	 	 	 	 d	ˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )
r~   ad  The ``TopDict`` represents the top-level dictionary holding font
    information. CFF2 tables contain a restricted set of top-level entries
    as described `here <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#7-top-dict-data>`_,
    but CFF tables may contain a wider range of information. This information
    can be accessed through attributes or through the dictionary returned
    through the ``rawDict`` property:

    .. code:: python

            font = tt["CFF "].cff[0]
            font.FamilyName
            # 'Linux Libertine O'
            font.rawDict["FamilyName"]
            # 'Linux Libertine O'

    More information is available in the CFF file's private dictionary, accessed
    via the ``Private`` property:

    .. code:: python

            tt["CFF "].cff[0].Private.BlueValues
            # [-15, 0, 515, 515, 666, 666]

    Nc                 ój  •— t          t          | ¦  «                             ||||¬¦  «         || _        || _        |rCt          t          ¦  «        | _         |¦   «         | _        t          t          ¦  «        | _
        d S t          t          ¦  «        | _        t          t          ¦  «        | _
        d S r  )rá   r~   r¤   rC   r?   r¹  ÚtopDictOperators2r(  r\   r·  rÈ  r  )r@   r;   rA   rÐ   r?   rC   r(   râ   s          €r$   r¤   zTopDict.__init__
  sœ   ø€ õ 	�g�tÑÔ×%Ò% g¨t°VÀFÐ%ÑKÔKÐKØ!2ˆÔØ&ˆÔØð 	6Ý)Õ*;Ñ<Ô<ˆDŒMØ,Ð,Ñ.Ô.ˆDŒLÝ#Õ$5Ñ6Ô6ˆDŒJˆJˆJå)Õ*:Ñ;Ô;ˆDŒMÝ#Õ$4Ñ5Ô5ˆDŒJˆJˆJr&   c                 ó   — | j         S )z.Returns a list of glyph names in the CFF font.)r\   rH   s    r$   r=   zTopDict.getGlyphOrder,
  ó
   € àŒ|Ðr&   c                 óì   — | j                              d¦  «        }|€d S | j                             |¦  «         | j        rt          | j        ¦  «        | _        d S t          | j        ¦  «        | _        d S r  )rî   rù  rA   r3   r
  r  rp  r  )r@   rÐ   s     r$   rr  zTopDict.postDecompile0
  si   € Ø”×!Ò! -Ñ0Ô0ˆØˆ>ØˆFàŒ	�Š�vÑÔÐØŒ<ð 	3Ý'¨¬	Ñ2Ô2ˆDŒNˆNˆNå'¨¬	Ñ2Ô2ˆDŒNˆNˆNr&   c                 ó  — t          | d¦  «        r|                      ¦   «          t          | d¦  «        rdg| _        t          | d¦  «        rt          | d¦  «        s	g d¢| _        t                               | |¦  «         d S )Nr  r"  rj  )rò  rô  rö  rø  )rP   ÚdecompileAllCharStringsrn  rl  rv   )r@   rx   s     r$   rv   zTopDict.toXML;
  s“   € Ý�4˜Ñ'Ô'ð 	+Ø×(Ò(Ñ*Ô*Ð*Ý�4˜ÑÔð 	*Ø(˜\ˆDŒNÝ�t˜UÑ#Ô#ð 	­7°4¸Ñ+GÔ+Gð 	ðð ð ˆDŒNõ 	�Š�t˜YÑ'Ô'Ð'Ð'Ð'r&   c                 óÊ   — t          | j                             ¦   «         ¦  «        D ];\  }}	 |                     ¦   «          Œ#  t                               d|¦  «         ‚ xY wd S )NzError in charstring %s)Ú	enumerater  rM   rD   rª   Úerror)r@   r4  r‰  s      r$   rˆ  zTopDict.decompileAllCharStringsK
  sq   € å& tÔ'7×'>Ò'>Ñ'@Ô'@ÑAÔAð 	ð 	‰MˆAˆzðØ×$Ò$Ñ&Ô&Ð&Ð&øðÝ—	’	Ð2°AÑ6Ô6Ð6Øøøøð	ð 	s   ­AÁA c                 ó"  — d }| j                              ¦   «         D ]3}|                     | j         ¦  «        }|�|�t          ||¦  «        }Œ1|}Œ4|€| j        d         d d …         | _        d S t          t          |¦  «        ¦  «        | _        d S )Nrå  )r  rM   Ú
calcBoundsr   r(  rå  r5   r   )r@   ÚfontBBoxr‰  Úboundss       r$   r^   zTopDict.recalcFontBBoxT
  sš   € ØˆØÔ*×1Ò1Ñ3Ô3ð 	&ð 	&ˆJØ×*Ò*¨4Ô+;Ñ<Ô<ˆFØÐ!ØÐ'Ý(¨°6Ñ:Ô:�H�Hà%�HøàÐØ œM¨*Ô5°a°a°aÔ8ˆDŒMˆMˆMå ¥¨Ñ!2Ô!2Ñ3Ô3ˆDŒMˆMˆMr&   r9  )r›   rœ   r�   rž   r¹  r  r(  r»  r'  rW  r  r·  rÈ  r  rp  r¤   r=   rr  rv   rˆ  r^   rå   ræ   s   @r$   r~   r~   ø	  sâ   ø€ € € € € ðð ð2 ˆ}Ð-Ñ.Ô.€HØ �Ð!1Ñ2Ô2€JØ#€MØˆJÐ'Ñ(Ô(€EØ'€Oð ØØØØØð6ð 6ð 6ð 6ð 6ð 6ð(ð ð ð	3ð 	3ð 	3ð(ð (ð (ð ð ð ð4ð 4ð 4ð 4ð 4ð 4ð 4r&   r~   c                   ób   ‡ — e Zd Zi Z ee¦  «        ZeZg d¢Z	dgZ
eZ	 	 	 	 	 	 dˆ fd„	Zd„ Zˆ xZS )rD  )rÕ  rá  r×  r}   r}   Nc                 ó˜   •— t          t          | ¦  «                             ||||¬¦  «         || _        |                      |¦  «         d S r  )rá   rD  r¤   r�   ÚsetCFF2)r@   r;   rA   rÐ   r?   r(   r�   râ   s          €r$   r¤   zFontDict.__init__‡
  sK   ø€ õ 	�h˜ÑÔ×&Ò& w°°fÀVÐ&ÑLÔLÐLØˆŒØ�Š�VÑÔÐÐÐr&   c                 óZ   — |r| j         | _        d| _        d S | j        | _        d| _        d S )NTF)Ú	orderCFF2rÈ  r
  ÚorderCFFr£   s     r$   r’  zFontDict.setCFF2”
  s2   € àð 	!ØœˆDŒJØˆDŒLˆLˆLàœˆDŒJØ ˆDŒLˆLˆLr&   r9  )r›   rœ   r�   r(  r»  r  r'  r`  r  r•  r”  r  rp  r¤   r’  rå   ræ   s   @r$   rD  rD  d
  s“   ø€ € € € € ð8 €HØ �Ð!1Ñ2Ô2€JØ$€MØ>Ð>Ð>€HØ�€IØ'€Oð ØØØØØðð ð ð ð ð ð!ð !ð !ð !ð !ð !ð !r&   rD  c                   óˆ   ‡ — e Zd Z ee¦  «        Z ee¦  «        Z ee¦  «        Z	e
ZeZdˆ fd„	Zed„ ¦   «         Zdd„Zˆ xZS )r  Nc                 óv  •— t          t          | ¦  «                             ||||¬¦  «         || _        |rIt	          t
          ¦  «        | _        t          t
          ¦  «        | _        d x| _	        | _
        d| _        d S t	          t          ¦  «        | _        t          t          ¦  «        | _        d| _        d S )Nr'   TF)rá   r  r¤   r�   r¹  ÚprivateDictOperators2r(  r·  rÈ  r  r  r
  r#  )r@   r;   rA   rÐ   r(   r�   râ   s         €r$   r¤   zPrivateDict.__init__¥
  s¡   ø€ Ý�k˜4Ñ Ô ×)Ò)¨'°4¸ÈÐ)ÑOÔOÐOØˆŒØð 
	!Ý)Õ*?Ñ@Ô@ˆDŒMÝ#Õ$9Ñ:Ô:ˆDŒJð 7;Ð:ˆDÔ Ô!3ØˆDŒLˆLˆLå)Õ*>Ñ?Ô?ˆDŒMÝ#Õ$8Ñ9Ô9ˆDŒJØ ˆDŒLˆLˆLr&   c                 ó   — | j         S rF   )r
  rH   s    r$   Úin_cff2zPrivateDict.in_cff2´
  r…  r&   c                 ór   — |€t          | d¦  «        r| j        }nd}| j                             |¦  «        }|S )Nr  r   )rP   r  r�   rh  )r@   Úvirg  s      r$   rh  zPrivateDict.getNumRegions¸
  sB   € àˆ:Ý�t˜YÑ'Ô'ð Ø”\��à�Ø”[×.Ò.¨rÑ2Ô2ˆ
ØÐr&   )NNNNNrF   )r›   rœ   r�   r¹  r#  r(  r»  r'  r·  rÈ  r"  rp  rg  r  r¤   Úpropertyrš  rh  rå   ræ   s   @r$   r  r  ž
  s¦   ø€ € € € € Øˆ}Ð1Ñ2Ô2€HØ �Ð!5Ñ6Ô6€JØˆJÐ+Ñ,Ô,€EØ+€OØ'€Mð!ð !ð !ð !ð !ð !ð ðð ñ „Xððð ð ð ð ð ð ð r&   r  c                   ó>   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
dS )r:   zSID -> string mapping.Nc                 óT   — |€g }nd„ t          |d¬¦  «        D ¦   «         }|| _        d S )Nc                 ó0   — g | ]}t          |d ¬¦  «        ‘ŒS )r   r   r    r!   s     r$   rè  z+IndexedStrings.__init__.<locals>.<listcomp>Ê
  s%   € ÐVÐVÐV°q•u˜Q¨Ð2Ñ2Ô2ÐVÐVÐVr&   Fr'   )r6   r;   )r@   rA   r;   s      r$   r¤   zIndexedStrings.__init__Æ
  s9   € Øˆ<ØˆGˆGàVÐV½EÀ$ÈuÐ<UÑ<UÔ<UÐVÑVÔVˆGØˆŒˆˆr&   c                 ó(   — t          | d | d¬¦  «        S )NFr'   )rÓ   rH   s    r$   r`   zIndexedStrings.getCompilerÍ
  s   € Ý% d¨D°$¸uÐEÑEÔEÐEr&   c                 ó*   — t          | j        ¦  «        S rF   )rG   r;   rH   s    r$   rI   zIndexedStrings.__len__Ð
  s   € Ý�4”<Ñ Ô Ð r&   c                 ó\   — |t           k     rt          |         S | j        |t           z
           S rF   )ÚcffStandardStringCountÚcffStandardStringsr;   )r@   rZ  s     r$   rX   zIndexedStrings.__getitem__Ó
  s,   € ØÕ'Ò'Ð'Ý% cÔ*Ð*à”< Õ&<Ñ <Ô=Ð=r&   c                 óL  — t          | d¦  «        s|                      ¦   «          t          |d¬¦  «        }|t          v rt          |         }nW|| j        v r| j        |         }n@t          | j        ¦  «        t          z   }| j                             |¦  «         || j        |<   |S )NÚstringMappingr   r   )	rP   ÚbuildStringMappingr   ÚcffStandardStringMappingr§  rG   r;   r¤  rd   )r@   r#   rZ  s      r$   rQ  zIndexedStrings.getSIDÙ
  sª   € Ý�t˜_Ñ-Ô-ð 	&Ø×#Ò#Ñ%Ô%Ð%Ý�!˜hÐ'Ñ'Ô'ˆØÕ(Ð(Ð(Ý*¨1Ô-ˆCˆCØ�$Ô$Ð$Ð$ØÔ$ QÔ'ˆCˆCå�d”lÑ#Ô#Õ&<Ñ<ˆCØŒL×Ò Ñ"Ô"Ð"Ø$'ˆDÔ˜qÑ!Øˆ
r&   c                 ó   — | j         S rF   rÕ   rH   s    r$   Ú
getStringszIndexedStrings.getStringsç
  s
   € ØŒ|Ðr&   c                 ó–   — i | _         t          t          | j        ¦  «        ¦  «        D ]}|t          z   | j         | j        |         <   Œ d S rF   )r§  r  rG   r;   r¤  ry  s     r$   r¨  z!IndexedStrings.buildStringMappingê
  sV   € ØˆÔÝ�3˜tœ|Ñ,Ô,Ñ-Ô-ð 	Uð 	UˆEØ6;Õ>TÑ6TˆDÔ˜tœ|¨EÔ2Ñ3Ð3ð	Uð 	Ur&   rF   )r›   rœ   r�   rž   r¤   r`   rI   rX   rQ  r«  r¨  rŸ   r&   r$   r:   r:   Ã
  s�   € € € € € Ø Ð ðð ð ð ðFð Fð Fð!ð !ð !ð>ð >ð >ðð ð ðð ð ðUð Uð Uð Uð Ur&   r:   (‡  r6  ÚspaceÚexclamÚquotedblÚ
numbersignÚdollarÚpercentÚ	ampersandÚ
quoterightÚ	parenleftÚ
parenrightÚasteriskÚplusÚcommaÚhyphenÚperiodÚslashÚzeroÚoneÚtwoÚthreeÚfourÚfiveÚsixÚsevenÚeightÚnineÚcolonÚ	semicolonÚlessÚequalÚgreaterÚquestionÚatÚAr   ÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQÚRÚSÚTÚUÚVÚWÚXÚYÚZÚbracketleftÚ	backslashÚbracketrightÚasciicircumÚ
underscoreÚ	quoteleftÚaÚbÚcr¬  ÚeÚfÚgÚhr4  ÚjÚkr¶  rŽ  r.  ÚoÚpÚqÚrr#   ÚtÚur0  ÚwÚxÚyÚzÚ	braceleftÚbarÚ
bracerightÚ
asciitildeÚ
exclamdownÚcentÚsterlingÚfractionÚyenÚflorinÚsectionÚcurrencyÚquotesingleÚquotedblleftÚguillemotleftÚguilsinglleftÚguilsinglrightÚfiÚflÚendashÚdaggerÚ	daggerdblÚperiodcenteredÚ	paragraphÚbulletÚquotesinglbaseÚquotedblbaseÚquotedblrightÚguillemotrightÚellipsisÚperthousandÚquestiondownÚgraveÚacuteÚ
circumflexÚtildeÚmacronÚbreveÚ	dotaccentÚdieresisÚringÚcedillaÚhungarumlautÚogonekÚcaronÚemdashÚAEÚordfeminineÚLslashÚOslashÚOEÚordmasculineÚaeÚdotlessiÚlslashÚoslashÚoeÚ
germandblsÚonesuperiorÚ
logicalnotÚmuÚ	trademarkÚEthÚonehalfÚ	plusminusÚThornÚ
onequarterÚdivideÚ	brokenbarÚdegreeÚthornÚthreequartersÚtwosuperiorÚ
registeredÚminusÚethÚmultiplyÚthreesuperiorÚ	copyrightÚAacuteÚAcircumflexÚ	AdieresisÚAgraveÚAringÚAtildeÚCcedillaÚEacuteÚEcircumflexÚ	EdieresisÚEgraveÚIacuteÚIcircumflexÚ	IdieresisÚIgraveÚNtildeÚOacuteÚOcircumflexÚ	OdieresisÚOgraveÚOtildeÚScaronÚUacuteÚUcircumflexÚ	UdieresisÚUgraveÚYacuteÚ	YdieresisÚZcaronÚaacuteÚacircumflexÚ	adieresisÚagraveÚaringÚatildeÚccedillaÚeacuteÚecircumflexÚ	edieresisÚegraveÚiacuteÚicircumflexÚ	idieresisÚigraveÚntildeÚoacuteÚocircumflexÚ	odieresisÚograveÚotildeÚscaronÚuacuteÚucircumflexÚ	udieresisÚugraveÚyacuteÚ	ydieresisÚzcaronÚexclamsmallÚHungarumlautsmallÚdollaroldstyleÚdollarsuperiorÚampersandsmallÚ
AcutesmallÚparenleftsuperiorÚparenrightsuperiorÚtwodotenleaderÚonedotenleaderÚzerooldstyleÚoneoldstyleÚtwooldstyleÚthreeoldstyleÚfouroldstyleÚfiveoldstyleÚsixoldstyleÚsevenoldstyleÚeightoldstyleÚnineoldstyleÚcommasuperiorÚthreequartersemdashÚperiodsuperiorÚquestionsmallÚ	asuperiorÚ	bsuperiorÚcentsuperiorÚ	dsuperiorÚ	esuperiorÚ	isuperiorÚ	lsuperiorÚ	msuperiorÚ	nsuperiorÚ	osuperiorÚ	rsuperiorÚ	ssuperiorÚ	tsuperiorÚffÚffiÚfflÚparenleftinferiorÚparenrightinferiorÚCircumflexsmallÚhyphensuperiorÚ
GravesmallÚAsmallÚBsmallÚCsmallÚDsmallÚEsmallÚFsmallÚGsmallÚHsmallÚIsmallÚJsmallÚKsmallÚLsmallÚMsmallÚNsmallÚOsmallÚPsmallÚQsmallÚRsmallÚSsmallÚTsmallÚUsmallÚVsmallÚWsmallÚXsmallÚYsmallÚZsmallÚcolonmonetaryÚ	onefittedÚrupiahÚ
TildesmallÚexclamdownsmallÚcentoldstyleÚLslashsmallÚScaronsmallÚZcaronsmallÚDieresissmallÚ
BrevesmallÚ
CaronsmallÚDotaccentsmallÚMacronsmallÚ
figuredashÚhypheninferiorÚOgoneksmallÚ	RingsmallÚCedillasmallÚquestiondownsmallÚ	oneeighthÚthreeeighthsÚfiveeighthsÚseveneighthsÚonethirdÚ	twothirdsÚzerosuperiorÚfoursuperiorÚfivesuperiorÚsixsuperiorÚsevensuperiorÚeightsuperiorÚninesuperiorÚzeroinferiorÚoneinferiorÚtwoinferiorÚthreeinferiorÚfourinferiorÚfiveinferiorÚsixinferiorÚseveninferiorÚeightinferiorÚnineinferiorÚcentinferiorÚdollarinferiorÚperiodinferiorÚcommainferiorÚAgravesmallÚAacutesmallÚAcircumflexsmallÚAtildesmallÚAdieresissmallÚ
AringsmallÚAEsmallÚCcedillasmallÚEgravesmallÚEacutesmallÚEcircumflexsmallÚEdieresissmallÚIgravesmallÚIacutesmallÚIcircumflexsmallÚIdieresissmallÚEthsmallÚNtildesmallÚOgravesmallÚOacutesmallÚOcircumflexsmallÚOtildesmallÚOdieresissmallÚOEsmallÚOslashsmallÚUgravesmallÚUacutesmallÚUcircumflexsmallÚUdieresissmallÚYacutesmallÚ
ThornsmallÚYdieresissmallz001.000z001.001z001.002z001.003ÚBlackÚBoldÚBookÚLightÚMediumÚRegularÚRomanÚSemiboldi‡  )år6  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Ê  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ç  rè  ré  rê  rë  rì  rí  rî  rï  r¬  rð  rñ  rò  ró  r4  rô  rõ  r¶  rŽ  r.  rö  r÷  rø  rù  r#   rú  rû  r0  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  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  rƒ  r„  r…  r†  r‡  rˆ  éå   )¦r6  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Ÿ  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»  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Ù  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rB  r?  rG  rã  rä  rå  ræ  rç  rè  ré  rê  r:  rH  rM  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  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  é¦   )Wr6  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¤  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?  rG  rä  rå  ræ  rç  rè  ré  rê  r:  rH  rM  rë  rì  rí  rî  rï  rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  rþ  éW   )‡rž   ÚfontTools.miscr   r   ÚfontTools.misc.arrayToolsr   r   ÚfontTools.misc.textToolsr   r   r	   r
   r   r   ÚfontTools.ttLibr   ÚfontTools.ttLib.tables.otBaser   r   ÚfontTools.ttLib.tablesr   rT  Úior   r1   ÚloggingrÝ  r«   Ú	getLoggerr›   rª   r-   rj  Úobjectr   r_   r®   r»   rÓ   r¬   rè   rò   rú   rÿ   r6   r>   r<  r8   rI  rO  rj  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   r4  rL  rO  rR  r8  r9  r$  r%  rd  ro  r‚  rx  rv  rw  rf  rg  r’  r—  rž  r¥  r­  r¯  r±  r¸  rÁ  r  rƒ  rõ  r7  r#  r˜  r  ÚDictDecompilerr  r"  r%  r6  rW  r`  rg  rl  r~   rD  r  r:   r¥  r¤  rG   r©  r  Ú_ir(  rC  r)  rD  r*  rE  rŸ   r&   r$   ú<module>r6     sÅ  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø (Ð (Ð (Ð (Ð (Ð (Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð #Ð "Ð "Ð "Ð "Ð "Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	ð 	Œ˜Ñ€Ø€gÔ˜Ñ!Ô!€ð€ð €ðV(ð V(ð V(ð V(ð V(�ñ V(ô V(ð V(ðr/&ð /&ð /&ð /&ð /&�ñ /&ô /&ð /&ðd	ð 	ð 	ðI%ð I%ð I%ð I%ð I%�Fñ I%ô I%ð I%ðXð ð ð ð ˜]ñ ô ð ð
!;ð !;ð !;ð !;ð !;˜=ñ !;ô !;ð !;ðH&-ð &-ð &-ð &-ð &-˜=ñ &-ô &-ð &-ðR	ð 	ð 	ð 	ð 	˜-ñ 	ô 	ð 	ð.ð .ð .ð .ð .Ð'ñ .ô .ð .ð1ð 1ð 1ð 1ð 1Ð-ñ 1ô 1ð 1ðDð Dð Dð Dð DˆFñ Dô Dð DðNh ð h ð h ð h ð h �uñ h ô h ð h ðV"ð "ð "ð "ð "Ð!ñ "ô "ð "ð4 ð 4 ð 4 ð 4 ð 4 �5ñ 4 ô 4 ð 4 ðn ð  ð  ð  ð  �5ñ  ô  ð  ðF3ð 3ð 3ð 3ð 3�6ñ 3ô 3ð 3ðl=,ð =,ð =,ð =,ð =,ˆvñ =,ô =,ð =,ð@H)ð H)ð H)ð H)ð H)�&ñ H)ô H)ð H)ðV!ð !ð !ðð ð ð
ð ð ð
ð ð ð)ð )ð )ð)ð )ð )ðð ð ð$ð $ð $ð$ð $ð $ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð ð �fñ ô ð ð2;ð ;ð ;ð ;ð ;�_ñ ;ô ;ð ;ð<ð <ð <ð <ð <�oñ <ô <ð <ð$ð ð ðð ð ðð ð ð ð �oñ ô ð ð2ð ð ð ð �_ñ ô ð ð8ð ð ð ð �_ñ ô ð ð$ð ð ð ð ˜>ñ ô ð ð.ð ð ð ð �^ñ ô ð ð:ð :ð :ð :ð :˜>ñ :ô :ð :ðz;ð ;ð ;ð ;ð ;�ñ ;ô ;ð ;ð|ð ð ð ð �fñ ô ð ð, ð  ð  ð,ð ð ð ð  ð  ð
ð 
ð 
ð"ð "ð "ðJ
ð 
ð 
ðð ð ð(ð ð ð ð �vñ ô ð ð*<ð <ð <ð <ð <˜ñ <ô <ð <ð~(ð (ð (ðð ð ðð ð ðð ð ð&ð ð ð.ð ð ðDð ð ð ð �~ñ ô ð ð8ð ð ð ð ˜ñ ô ð ð0ð ð ð ð ˜ñ ô ð ð(ð ð ðð ð ð*ð ð ð*ð ð ð ð �vñ ô ð ðBð ð ð ð �vñ ô ð ð$Rð Rð Rð Rð R�?ñ Rô Rð Rð"&à*ð&ð ˆuÐ.°°l°l±n´nÐEð&ð 6ð	&ð
 &ð&ð ˆ�%˜˜˜Ñ0Ô0Ð1ð&ð ˆk˜5 $¨¨Ñ(9Ô(9Ð:ð&ð ˆ
�E˜4  Ñ!2Ô!2Ð3ð&ð ˆz˜5 $¨¨Ñ(9Ô(9Ð:ð&ð ˆ�e˜T ? ?Ñ#4Ô#4Ð5ð&ð %ð&ð 1ð&ð 0ð&ð 9ð&ð 8ð&ð  .ð!&ð" 3ð#&ð$ ˆl˜GÐ%?Ð%?Ð%?ÀÐFð%&ð& +ð'&ð( ˆ
�G˜\˜\˜\¨4Ð0ð)&ð* 0ð+&ð, &ð-&ð. 0ð/&ð0 2ð1&ð2 5ð3&ð4 4ð5&ð6 5ð7&ð8 1ð9&ð: 1ð;&ð< ˆ�H˜dÐ$4Ð$4Ñ$6Ô$6Ð7ð=&ð> 0ð?&ð@ ˆ�X˜qÐ"3Ð"3Ñ"5Ô"5Ð6ðA&ðB ˆÐ(¨$Ð0DÐ0DÑ0FÔ0FÐGðC&ðD ˆz˜8 TÐ+<Ð+<Ñ+>Ô+>Ð?ðE&ðF ˆy˜( DÐ*:Ð*:Ñ*<Ô*<Ð=ðG&ðH ˆ˜ $Ð(<Ð(<Ñ(>Ô(>Ð?ðI&ðJ ˆ�X˜tÐ%6Ð%6Ñ%8Ô%8Ð9ðK&Ð ðT +Øˆl˜GÐ%?Ð%?Ð%?ÀÐFØˆz˜8 TÐ+<Ð+<Ñ+>Ô+>Ð?Øˆy˜( DÐ*:Ð*:Ñ*<Ô*<Ð=Øˆ˜ $Ð(<Ð(<Ñ(>Ô(>Ð?Øˆ�X˜tÐ%6Ð%6Ñ%8Ô%8Ð9ðÐ ð Ð Ø
€ð *àØØØØðð +Ø*Ø+Ø0Ø4Ø.Ø-Ø'Ø'Ø0Ø0Ø.Ø:Ø-Ø2Ø7Ø6Ø,Ø,Øˆ�(˜D . .Ñ"2Ô"2Ð3ð;Ð ðD *àØØØØðð +Ø*Ø+Ø0Ø4Ø.Ø-Ø'Ø'Ø0Ø0Ø2Ø7Øˆ�(˜D . .Ñ"2Ô"2Ð3ð/Ð ð60ð 0ð 0ð$ €Ð"Ñ #Ô #Ð #Ø €ÐÑ Ô Ð ð4ð 4ð 4ð 4ð 4˜Ô4ñ 4ô 4ð 4ð8ð 8ð 8ð 8ð 8˜MÔ8ñ 8ô 8ð 8ðcð cð cð cð c�6ñ cô cð cðL/ð /ð /ð:ð :ð :ð :ð :�lñ :ô :ð :ðz*ð *ð *ð *ð *�|ñ *ô *ð *ðZð ð ð ð ˜,ñ ô ð ð O#ð O#ð O#ð O#ð O#ˆvñ O#ô O#ð O#ðdi4ð i4ð i4ð i4ð i4ˆhñ i4ô i4ð i4ðX7!ð 7!ð 7!ð 7!ð 7!ˆxñ 7!ô 7!ð 7!ðt"ð "ð "ð "ð "�(ñ "ô "ð "ðJ*Uð *Uð *Uð *Uð *U�Vñ *Uô *Uð *Uð`Hð Hð HÐ ðT Ð Ø
€sÐÑÔÐ"8Ò8Ð8Ð8Ð8àÐ Ø
ˆ%Ð&Ñ
'Ô
'ð :ð :€BØ79ÐÐ/°Ô3Ñ4Ð4ðfð fð fÐ ðP Ð Ø
€sÐÑÔÐ"8Ò8Ð8Ð8Ð8ðgð gð gÐ ðR Ð Ø
€sÐÑÔÐ!5Ò5Ð5Ð5Ð5ðXð Xð XÐ ðt  Ð Ø
€sÐ!Ñ"Ô"Ð&@Ò@Ð@Ð@Ð@Ð@Ð@r&   