§
    ¢”jr¥ ã                   ó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   ó4   K  — | ]}t          |¦  «        V — Œd S ©N©r   ©Ú.0Úss     úh/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/cffLib/__init__.pyú	<genexpr>z'CFFFontSet.decompile.<locals>.<genexpr>b   s(   è è € Ð!OÐ!O¨q¥%¨¡(¤(Ð!OÐ!OÐ!OÐ!OÐ!OÐ!Oó    ©Ú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Ñ#Ô#Ð#Ý!Ð!OÐ!OµE¸$ÀvÐ4NÑ4NÔ4NÐ!OÑ!OÔ!OÑOÔOˆ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 r   )Úlenr5   ©r>   s    r"   Ú__len__zCFFFontSet.__len__s   s   € Ý�4”>Ñ"Ô"Ð"r$   c                 ó*   — t          | j        ¦  «        S r   )r3   r5   rE   s    r"   ÚkeyszCFFFontSet.keysv   s   € Ý�D”NÑ#Ô#Ð#r$   c                 ó   — | j         S r   )r7   rE   s    r"   ÚvalueszCFFFontSet.valuesy   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__)
ÚhasattrrL   Ú
isinstanceÚstrr5   Úindexr.   ÚKeyErrorÚ	TypeErrorr7   )r>   ÚnameOrIndexrP   Ú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-   r.   ÚrecalcBBoxesr7   ÚrecalcFontBBoxr8   Ú	CFFWriterÚgetCompilerr2   Úaddr   Úpackr+   ÚgetDataLengthr:   r/   r0   r4   r5   Úappendr=   rM   rY   r;   ÚgetChildrenÚtoFile)r>   r?   r)   r&   r@   ÚtopDictr9   ÚwriterÚtopCompilerr5   rT   rY   Ú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©rT   r=   N)
Ú	simpletagr-   Únewlinerm   r5   Úbegintagr   ÚtoXMLÚendtagr=   )r>   Ú	xmlWriterÚfontNameÚfonts       r"   rs   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   rm   r   rn   r0   rX   r2   r=   r5   rT   )r=   Nr   rW   r(   )r=   rA   ÚVarStoreÚPrivaterl   )r)   rM   r-   rm   r0   r2   r<   r=   r5   r6   r7   ra   ÚTopDictrY   r;   rN   rO   ÚfromXMLÚFDArrayÚvstorery   rz   r   ÚT2CharStringÚint)r>   rT   ÚattrsÚcontentr)   rv   rd   rA   Ú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.convertCFF2ToCFF2  rŒ   r$   c                 ó(   — ddl m}  || ¦  «         d S )Nr   )Údesubroutinize)Ú
transformsr’   )r>   r’   s     r"   r’   zCFFFontSet.desubroutinize7  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_subroutinesA  s+   € Ø9Ð9Ð9Ð9Ð9Ð9à!Ð! $Ñ'Ô'Ð'Ð'Ð'r$   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rF   rH   rJ   rU   ri   rs   r|   r‹   r�   r’   r•   r—   © r$   r"   r   r   0   s÷   € € € € € ðð ð*+9ð +9ð +9ð +9ðZ#ð #ð #ð$ð $ð $ð!ð !ð !ð(ð (ð (ð >ð >ð >ð >ð@ð ð ð: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 r   )Údatar&   ©r>   r&   s     r"   Ú__init__zCFFWriter.__init__K  s   € ØˆŒ	ØˆŒˆˆr$   c                 ó:   — | j                              |¦  «         d S r   )rŸ   ra   )r>   Útables     r"   r^   zCFFWriter.addO  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   r`   ÚsetPosz#CFFWriter.toFile() writing to file.r'   éÿÿÿÿr   rc   )ÚlogÚDEBUGrŸ   rM   r`   rN   ÚTopDictIndexCompilerr&   r:   rD   r¥   ra   Útellr/   r_   ÚcalcOffSizer0   rc   Úwrite)	r>   r?   ÚlastPosListÚcountÚposÚposListÚitemÚendPosÚbegins	            r"   rc   zCFFWriter.toFileR  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¡   r^   rc   rœ   r$   r"   r\   r\   G  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   rX   rœ   )ÚlargestOffsetr0   s     r"   r«   r«   y  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&   )rM   r&   ÚgetItemsÚitemsÚparent)r>   r¼   r9   r½   r&   s        r"   r¡   zIndexCompiler.__init__‰  sO   € Øˆ>�g f¨hÑ7Ô7ˆ>Ø”]ˆFØÐ%Ð%Ð%ØˆŒØ—]’] 5¨'Ñ2Ô2ˆŒ
ØˆŒˆˆr$   c                 ó   — |S r   rœ   ©r>   r¼   r9   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   r`   )r¼   rM   r`   rD   ra   )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 )NrX   r   r¦   r   )r&   r¼   rÃ   r«   rD   )r>   Ú	countSizeÚ
lastOffsetr0   Ú
dataLengths        r"   r`   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¦   ú>lrc   Úlatin1©Úencoding)rÃ   r&   ÚwriteCard32rD   r¼   ÚwriteCard16r«   Ú
writeCard8r/   r_   r¬   rM   rc   r
   )	r>   r?   rÂ   r0   r_   ÚoffsetÚ	binOffsetr±   rŸ   s	            r"   rc   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$   r   )	r˜   r™   rš   r›   r¡   r»   rÃ   r`   rc   rœ   r$   r"   r¸   r¸   …  sn   € € € € € ðð ðð ð ð ðð ð ðð ð ðð ð ð,%ð %ð %ð %ð %r$   r¸   c                   ó   — e Zd Zd„ ZdS )ÚIndexedStringsCompilerc                 ó   — |j         S r   ©r9   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 r   ©ra   r]   ©r>   r¼   r9   Ú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 r   ©r¼   Úextendrb   )r>   r9   rg   rd   s       r"   rb   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¼   r`   Ú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¼   r`   rá   r©   )r>   rÇ   râ   s     €r"   r`   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¼   rc   rá   r©   )r>   r?   râ   s     €r"   rc   zTopDictIndexCompiler.toFileó  sR   ø€ ØŒ;ð 	;ØŒJ�qŒM× Ò  Ñ&Ô&Ð&Ð&Ð&åÕ&¨Ñ-Ô-×4Ò4°TÑ:Ô:Ð:Ð:Ð:r$   )
r˜   r™   rš   r›   r»   rb   rÃ   r`   rc   Ú__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 r   rØ   rÙ   s        r"   r»   zFDArrayIndexCompiler.getItemsÿ  rÛ   r$   c                 ón   — g }| j         D ]*}|                     |                     |¦  «        ¦  «         Œ+|S r   rÝ   )r>   r9   rg   r…   s       r"   rb   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É   rc   )rÃ   r&   rÍ   rD   r¼   rÎ   r«   rÏ   r/   r_   r¬   rM   rc   )r>   r?   rÂ   r0   r_   rÐ   rÑ   r±   s           r"   rc   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»   rb   rc   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 r   ©ri   r&   ra   Úbytecode©r>   r¼   r9   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.setPos3  s%   € Ø�t”{”Ñ&ˆØ'-ˆŒÔ˜GÑ$Ð$Ð$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„ 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 r   rô   rö   s        r"   r»   zCharStringsCompiler.getItems<  rø   r$   c                 ó$   — || j         j        d<   d S ©NÚCharStringsrí   rï   s      r"   r¥   zCharStringsCompiler.setPosC  s   € Ø-0ˆŒÔ˜MÑ*Ð*Ð*r$   N)r˜   r™   rš   r›   r»   r¥   rœ   r$   r"   rÿ   rÿ   8  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 )r4   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: %srX   zoffSize too large: %só    r   ú>Lr¦   ú    end of %s at %s)r¼   rÂ   râ   r˜   Ú_isCFF2r§   r¨   rª   r?   Ú
readCard32Ú
readCard16Ú	readCard8Úranger,   r/   r*   ra   r€   Ú
offsetBaser1   )r>   r?   r&   rÂ   rT   r®   r0   ÚpadrP   ÚchunkrÐ   s              r"   r¡   zIndex.__init__N  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 r   )rD   r¼   rE   s    r"   rF   zIndex.__len__k  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  r?   r1   r,   rD   ÚproduceItem)r>   rP   r±   rÐ   Úsizer?   rŸ   s          r"   rU   zIndex.__getitem__n  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 r   ©r¼   )r>   rP   r±   s      r"   Ú__setitem__zIndex.__setitem__|  s   € Ø ˆŒ
�5ÑÐÐr$   c                 ó   — |S r   rœ   )r>   rP   rŸ   r?   rÐ   s        r"   r  zIndex.produceItem  s   € Øˆr$   c                 ó:   — | j                              |¦  «         dS )zAdd an item to an INDEX.N)r¼   ra   )r>   r±   s     r"   ra   zIndex.append‚  s   € àŒ
×Ò˜$ÑÔÐÐÐr$   c                 ó4   — |                       | |||¬¦  «        S ©Nr%   ©ÚcompilerClass©r>   r9   r½   r&   s       r"   r]   zIndex.getCompiler†  ó   € Ø×!Ò! $¨°ÀÐ!ÑGÔGÐGr$   c                 ó   — | j         dd…= dS )zEmpty the INDEX.Nr  rE   s    r"   ÚclearzIndex.clear‰  s   € àŒJ�q�q�qˆMˆMˆMr$   ©NNr   )r˜   r™   rš   r›   r¸   r  r¡   rF   rU   r  r  ra   r]   r#  rœ   r$   r"   r4   r4   G  s¯   € € € € € ðð ð "€MðAð Að Að Að:ð ð ðð ð ð!ð !ð !ðð ð ð ð  ð  ðHð Hð Hð Hðð ð ð ð r$   r4   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>   r?   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(  rM   r„   r)  rz   Ú	subrClassr'  )r>   rP   rŸ   r?   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   )rP   Úraw©rP   N)Úcommentrq   r  rD   ÚneedsDecompilationrr   rs   rt   )r>   ru   Úir‡   s       r"   rs   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|   ra   )r>   rT   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)  )rM   r)  )r>   rP   Úsels      r"   ÚgetItemAndSelectorz#GlobalSubrsIndex.getItemAndSelectorò  s4   € ØˆÝ�4˜Ñ$Ô$ð 	'Ø”- Ô&ˆCØ�EŒ{˜CÐÐr$   ©NNNNNN)r˜   r™   rš   r›   rò   r  r   r   r,  ÚcharStringClassr¡   r  rs   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 )r6   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%   )rA   r
  r¼   râ   r˜   r§   r¨   rª   r?   rÂ   r  r1   rá   r6   r¡   )r>   r?   rA   ÚtopSizer&   rT   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{   r9   r=   rA   r
  rB   )r>   rP   rŸ   r?   rÐ   Útops         r"   r  zTopDictIndex.produceItem#  sK   € ÝØŒLØØØÔØÔ"Ø”<ð
ñ 
ô 
ˆð 	�Š�dÑÔÐØˆ
r$   c                 ó"  — t          t          | ¦  «        ¦  «        D ]q}|                     d|¬¦  «         |                     ¦   «          | |                              |¦  «         |                     d¦  «         |                     ¦   «          Œrd S ©NÚFontDictr1  ©r  rD   rr   rq   rs   rt   ©r>   ru   r4  s      r"   rs   zTopDictIndex.toXML/  ó“   € Ý•s˜4‘y”yÑ!Ô!ð 	 ð 	 ˆAØ×Ò˜z°ÐÑ3Ô3Ð3Ø×ÒÑÔÐØ�ŒG�MŠM˜)Ñ$Ô$Ð$Ø×Ò˜ZÑ(Ô(Ð(Ø×ÒÑÔÐÐð	 ð 	 r$   )NNr   N)
r˜   r™   rš   r›   r©   r  r¡   r  rs   rå   ræ   s   @r"   r6   r6     sr   ø€ € € € € ðð ð )€MðDð Dð Dð Dð Dð Dð$
ð 
ð 
ð ð  ð  ð  ð  ð  ð  r$   r6   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"   rs   zFDArrayIndex.toXML;  rG  r$   c                 ó‚   — t          | j        ||| j        | j        | j        ¬¦  «        }|                     |¦  «         |S ©N)r&   r~   )rD  r9   r=   r
  r~   rB   )r>   rP   rŸ   r?   rÐ   r…   s         r"   r  zFDArrayIndex.produceItemC  sL   € ÝØŒLØØØÔØ”<Ø”;ð
ñ 
ô 
ˆð 	×Ò˜4Ñ Ô Ð Øˆr$   c                 óÌ   — |dk    rd S t          ¦   «         }|D ]5}t          |t          ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6|                      |¦  «         d S )NrD  )rD  rN   rO   r|   ra   )r>   rT   r�   r‚   r…   rƒ   s         r"   r|   zFDArrayIndex.fromXMLO  s~   € Ø�:ÒÐØˆFÝ‘:”:ˆØð 	3ð 	3ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø×Ò˜T 5¨'Ñ2Ô2Ð2Ð2Ø�Š�HÑÔÐÐÐr$   N)r˜   r™   rš   rè   r  rs   r  r|   rœ   r$   r"   rI  rI  8  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 r   )r?   rŸ   Ú
otVarStorer   rw   )r>   r?   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ÿÿ  )
r?   r  r,   rŸ   r   Úotry   rQ  rB   rw   )r>   ÚlengthÚglobalStateÚreaders       r"   rB   zVarStoreData.decompileb  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 r   )r   rQ  ri   rw   Ú
getAllDatarŸ   )r>   re   s     r"   ri   zVarStoreData.compiler  s>   € Ý‘”ˆØŒ×Ò ¨¬	Ñ2Ô2Ð2ð ×%Ò%Ñ'Ô'ˆŒ	ˆ	ˆ	r$   c                 óF   — | j                              || j        ¦  «         d S r   )rQ  rs   rw   )r>   ru   rT   s      r"   ÚwriteXMLzVarStoreData.writeXMLy  s"   € ØŒ×Ò˜i¨¬Ñ3Ô3Ð3Ð3Ð3r$   c                 ó¼   — t          j        ¦   «         | _        |D ]@}t          |t          ¦  «        r)|\  }}}| j                             |||| j        ¦  «         Œ@ŒAd S r   )rT  ry   rQ  rN   Útupler|   rw   )r>   rT   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 r   ©rD   rŸ   rE   s    r"   rF   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¡   rB   ri   r[  r^  rF   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   rX   Fzunsupported FDSelect format: %s)	r  Úformatrl  r,   ÚtolistÚgidArrayr  r  r  )r>   r?   Ú	numGlyphsrm  rl  ro  ÚnRangesÚfdÚprevr4  ÚfirstÚglyphIDs               r"   r¡   zFDSelect.__init__’  s7  € Øñ /	å# 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ÐHð !ˆDŒKØˆDŒMˆMˆMr$   c                 ó*   — t          | j        ¦  «        S r   )rD   ro  rE   s    r"   rF   zFDSelect.__len__Ä  s   € Ý�4”=Ñ!Ô!Ð!r$   c                 ó   — | j         |         S r   ©ro  ©r>   rP   s     r"   rU   zFDSelect.__getitem__Ç  s   € ØŒ}˜UÔ#Ð#r$   c                 ó   — || j         |<   d S r   rx  )r>   rP   ÚfdSelectValues      r"   r  zFDSelect.__setitem__Ê  s   € Ø,ˆŒ�eÑÐÐr$   c                 ó:   — | j                              |¦  «         d S r   )ro  ra   )r>   r{  s     r"   ra   zFDSelect.appendÍ  s   € ØŒ×Ò˜]Ñ+Ô+Ð+Ð+Ð+r$   )NNN)r˜   r™   rš   r¡   rF   rU   r  ra   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  rD   ÚcharStringsAreIndexedr(  r)  r„   )r>   r?   rY   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 r   )r3   r�  rH   rE   s    r"   rH   zCharStrings.keys  s   € Ý�DÔ$×)Ò)Ñ+Ô+Ñ,Ô,Ð,r$   c                 ój   — | j         r| j        S t          | j                             ¦   «         ¦  «        S r   )r‚  r€  r3   r�  rJ   rE   s    r"   rJ   zCharStrings.values  s3   € ØÔ%ð 	3ØÔ(Ð(å˜Ô(×/Ò/Ñ1Ô1Ñ2Ô2Ð2r$   c                 ó   — || j         v S r   )r�  )r>   rT   s     r"   Úhas_keyzCharStrings.has_key  s   € Ø�tÔ'Ð'Ð'r$   c                 ó*   — t          | j        ¦  «        S r   )rD   r�  rE   s    r"   rF   zCharStrings.__len__  s   € Ý�4Ô#Ñ$Ô$Ð$r$   c                 óH   — | j         |         }| j        r| j        |         }|S r   )r�  r‚  r€  )r>   rT   Ú
charStrings      r"   rU   zCharStrings.__getitem__  s-   € ØÔ% dÔ+ˆ
ØÔ%ð 	;ØÔ.¨zÔ:ˆJØÐr$   c                 óZ   — | j         r| j        |         }|| j        |<   d S || j        |<   d S r   )r‚  r�  r€  )r>   rT   r‰  rP   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  rM   ÚfdSelectIndex)r>   rT   rP   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/  rT   rŒ  )ÚsortedrH   r8  r3  rr   rq   rs   rt   )r>   ru   ÚnamesrT   ÚcharStrrŒ  r0  s          r"   rs   zCharStrings.toXML.  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   rT   r+  )rN   rO   rM   r   rQ   r„   rz   r(  r   r   r'  r|   rŒ  )
r>   rT   r�   r‚   rƒ   ÚfdIDr(  Ú	glyphNamer:  r‰  s
             r"   r|   zCharStrings.fromXMLB  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¡   rH   rJ   r†  Ú__contains__rF   rU   r  r8  rs   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,   )r?   s    r"   r  r  \  s   € Ý�4—9’9˜Q‘<”<Ñ Ô Ð r$   c                 óZ   — t          j        d|                      d¦  «        ¦  «        \  }|S )Nr'   r   ©r/   r*   r,   ©r?   rl   s     r"   r  r  `  ó$   € ÝŒ}˜T 4§9¢9¨Q¡<¤<Ñ0Ô0�H€UØ€Lr$   c                 óZ   — t          j        d|                      d¦  «        ¦  «        \  }|S )Nr  rX   r—  r˜  s     r"   r  r  e  r™  r$   c                 óJ   — |                       t          |¦  «        ¦  «         d S r   )r¬   r   r˜  s     r"   rÏ   rÏ   j  s    € Ø‡J‚J�w�u‰~Œ~ÑÔÐÐÐr$   c                 óV   — |                       t          j        d|¦  «        ¦  «         d S ©Nr'   ©r¬   r/   r_   r˜  s     r"   rÎ   rÎ   n  ó&   € Ø‡J‚J�vŒ{˜4 Ñ'Ô'Ñ(Ô(Ð(Ð(Ð(r$   c                 óV   — |                       t          j        d|¦  «        ¦  «         d S ©Nr  rž  r˜  s     r"   rÍ   rÍ   r  rŸ  r$   c                 ó    — t          | ¦  «        S r   )r   rk   s    r"   Ú	packCard8r£  v  s   € Ý�5‰>Œ>Ðr$   c                 ó,   — t          j        d| ¦  «        S r�  ©r/   r_   rk   s    r"   Ú
packCard16r¦  z  ó   € ÝŒ;�t˜UÑ#Ô#Ð#r$   c                 ó,   — t          j        d| ¦  «        S r¡  r¥  rk   s    r"   Ú
packCard32r©  ~  r§  r$   c                 ó.   — i }| D ]\  }}}}}||f||<   Œ|S r   rœ   ©r£   ÚdÚoprT   Ú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   )rN   r]  r   r«  s          r"   ÚbuildOpcodeDictr´  ‰  sr   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Ý�b�%Ñ Ô ð 	Ý˜˜Aœ‘”¥'¨"¨Q¬%¡.¤.Ñ0ˆBˆBå˜‘”ˆBØ�s�)ˆˆ$‰ˆØ€Hr$   c                 óJ   — g }| D ]\  }}}}}|                      |¦  «         Œ|S r   )ra   )r£   Úlr­  rT   r®  r¯  r°  s          r"   Ú
buildOrderr·  ”  s7   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Ø	�Š�‰ŒˆˆØ€Hr$   c                 ó.   — i }| D ]\  }}}}}|�|||<   Œ|S r   rœ   r«  s          r"   ÚbuildDefaultsr¹  ›  s6   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w ØÐØˆAˆd‰GøØ€Hr$   c                 ó*   — i }| D ]\  }}}}}|||<   Œ|S r   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)Nr?   )rM   Ú_readr?   rª   r1   )r>   r½   rl   r?   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 r   rœ   ©r>   r½   rl   s      r"   r¿  zSimpleConverter._readµ  rÀ   r$   c                 ó   — |S r   rœ   rÁ  s      r"   r¬   zSimpleConverter.write¸  rÀ   r$   c                 ó\   — |                      ||¬¦  «         |                     ¦   «          d S )Nrk   )rp   rq   ©r>   ru   rT   rl   s       r"   ÚxmlWritezSimpleConverter.xmlWrite»  s3   € Ø×Ò˜D¨ÐÑ.Ô.Ð.Ø×ÒÑÔÐÐÐr$   c                 ó   — |d         S ©Nrl   rœ   ©r>   rT   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Ë   rk   ©rp   r   rq   rÄ  s       r"   rÅ  zASCIIConverter.xmlWriteÊ  s@   € Ø×Ò˜D­¨e¸gÐ(FÑ(FÔ(FÐÑGÔGÐGØ×ÒÑÔÐÐÐr$   c                 ó0   — t          |d         d¬¦  «        S )Nrl   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+ú rk   )r   ÚreÚsubrp   rq   rÄ  s       r"   rÅ  zLatin1Converter.xmlWriteÙ  sd   € Ý�e hÐ/Ñ/Ô/ˆØÐ*Ð*Ð*Ý”F˜<¨¨eÑ4Ô4ˆEØ×Ò˜D¨ÐÑ.Ô.Ð.Ø×ÒÑÔÐÐÐr$   c                 ó0   — t          |d         d¬¦  «        S )Nrl   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 r   )r€   Úfloat)r!   rl   s     r"   ÚparseNumrâ  ä  s1   € ðÝ�A‘”ˆˆøðÝ�a‘”ˆˆˆøøøØ€Ls   ‚ ’%c                 óø   — g }| D ]Y}t          |t          ¦  «        rŒ|\  }}}|d                              ¦   «         }d„ |D ¦   «         }|                     |¦  «         ŒZt	          |¦  «        dk    r|d         }|S )Nrl   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   )rN   rO   Úsplitra   rD   )r!   Ú	valueListrƒ   rT   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œ   ©rO   ræ  s     r"   rè  z,NumberConverter.xmlWrite.<locals>.<listcomp>   s   € Ð"=Ð"=Ð"=°¥3 s¡8¤8Ð"=Ð"=Ð"=r$   rk   ©
rN   r3   rr   rq   ÚindentÚjoinrp   ÚkBlendDictOpNameÚdedentrt   )r>   ru   rT   rl   Ú
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>   rT   r�   r‚   r½   ÚvalueStringrl   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$   rk   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>   ru   rT   rl   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 )Nrl   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rœ   )râ  )r    rl   s     r"   rè  z*ArrayConverter.xmlRead.<locals>.<listcomp>+  s   € Ð=Ð=Ð=¨U� %™œÐ=Ð=Ð=r$   )rù  rì  ré  )r>   rT   r�   r‚   r½   rú  rê  rJ   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 r   )rr   rq   rs   rt   rÄ  s       r"   rÅ  zTableConverter.xmlWrite0  sf   € Ø×Ò˜4Ñ Ô Ð Ø×ÒÑÔÐØ�Š�IÑÔÐØ×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr$   c                 ó®   —  |                       ¦   «         ¦   «         }|D ]5}t          |t          ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6|S r   )ÚgetClassrN   rO   r|   )r>   rT   r�   r‚   r½   Úobrƒ   s          r"   r^  zTableConverter.xmlRead7  se   € ØˆT�]Š]‰_Œ_ÑÔˆØð 	-ð 	-ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø�JŠJ�t˜U GÑ,Ô,Ð,Ð,Øˆ	r$   Nrû  rœ   r$   r"   r  r  /  s2   € € € € € ðð ð ðð ð ð ð r$   r  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚPrivateDictConverterc                 ó   — t           S r   )ÚPrivateDictrE   s    r"   r  zPrivateDictConverter.getClassB  s   € ÝÐr$   c                 ó<  — |\  }}|j         }|j        }	 |j        }n# t          $ r d }Y nw xY wt	          |j        ||||¬¦  «        }|                     |¦  «         |                     |¦  «        }	t          |	¦  «        |k    sJ ‚| 	                    |	¦  «         |S rL  )
r?   r
  r~   ÚAttributeErrorr  r9   r1   r,   rD   rB   )
r>   r½   rl   r  rÐ   r?   r&   r~   ÚprivrŸ   s
             r"   r¿  zPrivateDictConverter._readE  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.writeT  s   € Øˆvr$   N©r˜   r™   rš   r  r¿  r¬   rœ   r$   r"   r
  r
  A  sA   € € € € € ðð ð ðð ð ðð ð ð ð r$   r
  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚSubrsConverterc                 ó   — t           S r   )r<  rE   s    r"   r  zSubrsConverter.getClassY  s   € ÝÐr$   c                 óz   — |j         }|j        }|                     |j        |z   ¦  «         t	          ||¬¦  «        S r  )r?   r
  r1   rÐ   r<  )r>   r½   rl   r?   r&   s        r"   r¿  zSubrsConverter._read\  s<   € ØŒ{ˆØ”ˆØ�	Š	�&”- %Ñ'Ñ(Ô(Ð(Ý˜$ vÐ.Ñ.Ô.Ð.r$   c                 ó   — dS rà   rœ   rÁ  s      r"   r¬   zSubrsConverter.writeb  ó   € Øˆqr$   Nr  rœ   r$   r"   r  r  X  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 )Nry   r}   rj  r$  )r&   r  )r?   r
  rY   Úgetattrr=   rM   r}   rj  rz   r1   r  )r>   r½   rl   r?   r&   rY   r  r'  r„   r)  r(  r�  s               r"   r¿  zCharStringsConverter._readg  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  ry   )r  )rM   r}   rj  rz   r  r=   r  r|   )	r>   rT   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  f  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  )rM   rp  r?   r1   r§   r¨   r  ÚparseCharset0r9   ÚparseCharsetÚNotImplementedErrorrD   rª   ÚsetrO   ra   rî   ÚcffISOAdobeStringsÚcffIExpertStringsÚcffExpertSubsetStrings)r>   r½   rl   ÚisCIDrp  r?   rm  rY   Ú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  rq   rÄ  s       r"   rÅ  zCharsetConverter.xmlWriteÖ  s1   € ð 	×ÒÐTÑUÔUÐUØ×ÒÑÔÐÐÐr$   c                 ó   — d S r   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"  )rM   ÚdictObjÚpackCharset0ÚpackCharsetrD   rŸ   r½   )r>   r9   rY   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 )NrY   rí   rï   s      r"   r¥   zCharsetCompiler.setPosí  rð   r$   c                 ó*   — t          | j        ¦  «        S r   r`  rE   s    r"   r`   zCharsetCompiler.getDataLengthð  ra  r$   c                 ó:   — |                      | j        ¦  «         d S r   ©r¬   rŸ   ©r>   r?   s     r"   rc   zCharsetCompiler.toFileó  ó   € Ø�
Š
�4”9ÑÔÐÐÐr$   N©r˜   r™   rš   r¡   r¥   r`   rc   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*  rD   r  )rY   Ú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€   ©rT   r9   s     r"   ÚgetCIDfromNamerO    s   € Ýˆt�A�B�BŒx‰=Œ=Ðr$   c                 ó,   — |                      | ¦  «        S r   )ÚgetSIDrN  s     r"   ÚgetSIDfromNamerR    s   € Ø�>Š>˜$ÑÔÐr$   c           	      óØ   — d}t          |¦  «        g}|rt          }nt          }| dd …         D ].}|                     t	           |||¦  «        ¦  «        ¦  «         Œ/t          |¦  «        S r³  )r£  rO  rR  ra   r¦  r	   )rY   r+  r9   ÚfmtrŸ   Ú	getNameIDrT   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  ra   r£  r¦  r	   )rY   r+  r9   rT  Úrangesrt  ÚendrU  rT   Ú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   ÚcidrW   )r  r  ra   rO   Úzfill)rp  r?   r9   r+  rY   r4  ÚCIDrZ  s           r"   r$  r$  G  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  ra   rO   r`  )rp  r?   r9   r+  rT  rY   r®   r\  rt  r[  ra  rZ  s               r"   r%  r%  T  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 r   )
rN   rO   ÚpackEncoding0r7  rY   r9   ÚpackEncoding1rD   rŸ   r½   )r>   r9   rÌ   r½   r:  Údata1s         r"   r¡   zEncodingCompiler.__init__i  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.setPoss  ó   € Ø*-ˆŒÔ˜JÑ'Ð'Ð'r$   c                 ó*   — t          | j        ¦  «        S r   r`  rE   s    r"   r`   zEncodingCompiler.getDataLengthv  ra  r$   c                 ó:   — |                      | j        ¦  «         d S r   r>  r?  s     r"   rc   zEncodingCompiler.toFiley  r@  r$   NrA  rœ   r$   r"   rd  rd  h  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: )r?   r1   r§   r¨   r  ÚboolÚparseEncoding0rY   ÚparseEncoding1r.   ÚparseEncodingSupplementr9   )r>   r½   rl   r?   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  ro   r6  Úmap)ÚcoderT   )rp   rq   rr   r  rD   Úhexrt   )r>   ru   rT   rl   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 )NrT   r6  rµ   r}  )rN   rO   r   )	r>   rT   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,   rD   ÚEOFErrorr/   r*   )r?   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‚  )r?   rÌ   r9   ÚnSupsÚ_r}  ÚsidrT   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  )rY   r?   Ú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ˆ  )rY   r?   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  rD   rù  ra   Úpopr£  r	   )	rY   rÌ   r9   rT  Úmr}  rT   Ú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Œ  )rY   rÌ   r9   rT  rŽ  r}  rT   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  )	ry   r  r?   r
  r1   rI  r~   r9   r=   )r>   r½   rl   r~   r?   r&   r„   s          r"   r¿  zFDArrayConverter._read/  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 r   )rI  rN   rO   r|   )r>   rT   r�   r‚   r½   r„   rƒ   s          r"   r^  zFDArrayConverter.xmlRead@  sY   € Ý‘.”.ˆØð 	2ð 	2ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø�OŠO˜D %¨Ñ1Ô1Ð1Ð1Øˆr$   Nr  rœ   r$   r"   r’  r’  .  sA   € € € € € ðð ð ðð ð ðð ð ð ð r$   r’  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚFDSelectConverterc                 óh   — |j         }|                     |¦  «         t          ||j        ¦  «        }|S r   )r?   r1   rj  rp  )r>   r½   rl   r?   r)  s        r"   r¿  zFDSelectConverter._readK  s2   € ØŒ{ˆØ�	Š	�%ÑÔÐÝ˜D &Ô"2Ñ3Ô3ˆØˆr$   c                 ó   — dS rà   rœ   rÁ  s      r"   r¬   zFDSelectConverter.writeQ  r  r$   c                 ój   — |                      |d|j        fg¦  «         |                     ¦   «          d S ©Nrm  )rp   rm  rq   rÄ  s       r"   rÅ  zFDSelectConverter.xmlWriteV  s:   € Ø×Ò˜D H¨e¬lÐ#;Ð"<Ñ=Ô=Ð=Ø×ÒÑÔÐÐÐr$   c                 óZ   — t          |d         ¦  «        }d }d }t          |||¦  «        }|S r›  )r   rj  )	r>   rT   r�   r‚   r½   rT  r?   rp  r)  s	            r"   r^  zFDSelectConverter.xmlReadZ  s3   € Ý�u˜X”Ñ'Ô'ˆØˆØˆ	Ý˜D )¨SÑ1Ô1ˆØˆr$   NrÓ  rœ   r$   r"   r—  r—  J  sP   € € € € € ðð ð ðð ð ð
ð ð ðð ð ð ð r$   r—  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚVarStoreConverterc                 ó„   — |j         }|                     |¦  «         t          |¦  «        }|                     ¦   «          |S r   )r?   r1   rO  rB   )r>   r½   rl   r?   r  s        r"   r¿  zVarStoreConverter._readc  s?   € ØŒ{ˆØ�	Š	�%ÑÔÐÝ Ñ%Ô%ˆØ×ÒÑÔÐØˆr$   c                 ó   — dS rà   rœ   rÁ  s      r"   r¬   zVarStoreConverter.writej  r  r$   c                 ó2   — |                      ||¦  «         d S r   )r[  rÄ  s       r"   rÅ  zVarStoreConverter.xmlWritem  s   € Ø�Š�y $Ñ'Ô'Ð'Ð'Ð'r$   c                 óR   — t          ¦   «         }|                     ||||¦  «         |S r   )rO  r^  )r>   rT   r�   r‚   r½   r  s         r"   r^  zVarStoreConverter.xmlReadp  s*   € Ý‘>”>ˆØ×Ò˜˜u g¨vÑ6Ô6Ð6Øˆr$   NrÓ  rœ   r$   r"   rž  rž  b  sP   € € € € € ðð ð ðð ð ð(ð (ð (ðð ð ð ð r$   rž  c                 ó’   — d}t          |¦  «        g}| D ]$}|                     t          |¦  «        ¦  «         Œ%t          |¦  «        S rà   )r£  ra   r	   )ÚfdSelectArrayrT  rŸ   rP   s       r"   ÚpackFDSelect0r¥  v  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   )rD   r  ra   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 )NrX   r¦   r   r   )rD   r  ra   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   rX   )rm  ro  r¥  rŸ   r­  r¯  rD   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 r   r`  rE   s    r"   r`   zFDSelectCompiler.getDataLengthÂ  ra  r$   c                 ó:   — |                      | j        ¦  «         d S r   r>  r?  s     r"   rc   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                 óâ   — || _         |j        s|                     ¦   «          t          dt	          |j        ¦  «        ¦  «        }t          |¦  «        |j        g}t          |¦  «        | _        d S rS  )r½   rŸ   ri   ÚminrD   r¦  r	   )r>   ÚvarStoreDatar½   ÚvarStoreDataLenrŸ   s        r"   r¡   zVarStoreCompiler.__init__Ê  sf   € ØˆŒØÔ ð 	#Ø× Ò Ñ"Ô"Ð"Ý˜f¥c¨,Ô*;Ñ&<Ô&<Ñ=Ô=ˆÝ˜?Ñ+Ô+¨\Ô->Ð?ˆÝ˜d‘O”OˆŒ	ˆ	ˆ	r$   c                 ó$   — || j         j        d<   d S )Nry   rí   rï   s      r"   r¥   zVarStoreCompiler.setPosÒ  rk  r$   c                 ó*   — t          | j        ¦  «        S r   r`  rE   s    r"   r`   zVarStoreCompiler.getDataLengthÕ  ra  r$   c                 ó:   — |                      | j        ¦  «         d S r   r>  r?  s     r"   rc   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>   ru   rT   rl   Ú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)rX   ÚWeightrZ  NN))rÎ  r   ÚisFixedPitchrÍ  r   N))rÎ  r   ÚItalicAnglerÍ  r   N))rÎ  r   ÚUnderlinePositionrÍ  iœÿÿÿN))rÎ  rX   ÚUnderlineThicknessrÍ  é2   N))rÎ  rW   Ú	PaintTyperÍ  r   N))rÎ  é   ÚCharstringTyperÍ  r   N)rÎ  é   Ú
FontMatrixrl  )çü©ñÒMbP?r   r   râ  r   r   )é   ÚUniqueIDrÍ  NNrW   Ú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é   rY   rÍ  ))rÎ  é#   ÚUIDBaserÍ  NNé   rj  é   rz   )rÍ  rÍ  )rÎ  é%   )rÎ  é$   r}   é   é   ry   Ú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  rD   rý  rî  rÊ  )r£   r4  r­  rT   r®  r¯  r°  s          r"   ÚaddConvertersr  `  s¸   € Ý•3�u‘:”:ÑÔð 0ð 0ˆØ',¨Q¤xÑ$ˆˆD�#�w ØÐØØÐ$Ð$Ð$Ý!Ñ#Ô#ˆDˆDØ�HŠ_ˆ_Ý"Ñ$Ô$ˆDˆDØ�EŠ\ˆ\Ý!Ñ#Ô#ˆDˆDØ�KÒÐØˆDˆDàˆLØ�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  v  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"  z  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º   )rN   r8   rM   r&   r7  r9   r½   rÈ  r  Ú
convertersr¬   Údefaultsrù  rî   )	r>   r7  r9   r½   r&   rî   rT   rl   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 r   rœ   rï   s      r"   r¥   zDictCompiler.setPos—  r2  r$   c                 óF   — t          |                      d¦  «        ¦  «        S )Nr`   )rD   ri   rE   s    r"   r`   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ù  ÚopcodesrN   r]  rD   r  r  ra   r	   )r>   Úreasonrî   rŸ   rT   rl   r­  ÚargTyper¶  r4  r®  ÚvÚ
arghandlers                r"   ri   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 )Nrc   )ri   r¬   )r>   r?   rŸ   s      r"   rc   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   )rN   r3   ra   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 r   )r   ÚencodeIntCFFr9   rQ  )r>   r!   s     r"   Úarg_SIDzDictCompiler.arg_SIDÃ  s#   € ÝÔ)¨$¬,×*=Ò*=¸aÑ*@Ô*@ÑAÔAÐAr$   c                 ó~   — g }|D ]*}|                      |                      |¦  «        ¦  «         Œ+t          |¦  «        S r   )ra   r:  r	   )r>   rl   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   )rN   r3   Úarg_delta_blendra   r6  r	   )r>   rl   Ú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$   )
rD   ÚmaxBlendStackr€   rº  rA  rÞ   ra   r6  r   r7  )r>   rl   Ú
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$   r   )r˜   r™   rš   rG  r¡   r¥   r`   ri   rc   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 r   )rN   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 )NrY   r"  rj  ry   rj  r   r  r%   r}   rz   )r&   r7  rA   rM   rY   rL  ra   r4  rî   rj  rN   rO   rd  ry   r¸  rj  rD   r  rŒ  r±  rÿ   r}   r]   rÞ   rb   rz   )r>   r9   r&   rg   ÚcharsetCoderÌ   r»  ÚvarStoreCompr)  r�  rT   ÚfdSelectCompr¼   ÚcharStringsCompÚfdArrayIndexCompÚprivComps                   r"   rb   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-  rb   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î   ra   r(  rù  r,   r  r§   Úwarningrô  )
r>   r7  r9   r½   r&   ÚignoredNamesrT   r¯  r°  râ   s
            €r"   r¡   zFontDictCompiler.__init__k	  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 ©Nrz   )rM   r7  rz   r]   ra   rÞ   rb   )r>   r9   rg   r^  s       r"   rb   zFontDictCompiler.getChildrenŒ	  sl   € ØˆÝ�4”< Ñ+Ô+ð 	;Ø”|Ô+×7Ò7¸ÀÑFÔFˆHØ�OŠO˜HÑ%Ô%Ð%Ø�OŠO˜H×0Ò0°Ñ9Ô9Ñ:Ô:Ð:Øˆr$   r   )	r˜   r™   rš   r´  r  r-  r¡   rb   rå   ræ   s   @r"   r`  r`  h	  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ü   )rM   r7  ra   rý   r]   )r>   r9   rg   s      r"   rb   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¥   rb   rœ   r$   r"   rg  rg  •	  sG   € € € € € Ø!€MØˆoÐ2Ñ3Ô3€Gðð ð ð
ð ð ð ð r$   rg  c                   ó<   — e Zd Zd	d„Zd„ Zd„ Zd
d„Zd„ Zd„ Zd„ Z	dS )ÚBaseDictNc                 óÚ   — |d u |d u k    sJ ‚i | _         g | _        || _        |€d S || _        || _        |�5t
                               t          d| j        j        |¦  «         || _	        d S d S )Nr  )
rî   Ú	skipNamesr9   r
  r?   r§   r¨   râ   r˜   rÐ   )r>   r9   r?   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˜   rD   ÚdecompilerClassr9   rB   ÚgetDictrî   ÚpostDecompile)r>   rŸ   Údecs      r"   rB   zBaseDict.decompile³	  sv   € Ý�Š•Ð,¨d¬nÔ.EÅsÈ4ÁyÄyÑQÔQÐQØ×"Ò" 4¤<°Ñ6Ô6ˆØ�Š�dÑÔÐØ—{’{‘}”}ˆŒØ×ÒÑÔÐÐÐr$   c                 ó   — d S r   rœ   rE   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>   rT   rl   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 ]J}|| j        v rŒt          | |d ¦  «        }|€|dk    rŒ&| j        |         }|                     |||¦  «         ŒKt          | j        ¦  «        t          | j         ¦  «        z
  }|rN|                     dd                     t          |¦  «        ¦  «        z  ¦  «         | 
                    ¦   «          d S d S )NrY   zsome keys were ignored: %srÜ  )rÈ  rn  r  r'  rÅ  r'  rî   r2  rô  rŽ  rq   )r>   ru   rT   rl   r°  rc  s         r"   rs   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 r   )r'  r^  ry  )r>   rT   r�   r‚   r°  rl   s         r"   r|   zBaseDict.fromXMLê	  s=   € ØŒ˜tÔ$ˆØ—’˜T 5¨'°4Ñ8Ô8ˆÝ��d˜EÑ"Ô"Ð"Ð"Ð"r$   )NNNNr   )
r˜   r™   rš   r¡   rB   rr  r]   rz  rs   r|   rœ   r$   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¡   rA   r=   r¹  ÚtopDictOperators2r(  rY   r·  rÈ  r  )r>   r9   r?   rÐ   r=   rA   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.)rY   rE   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ù  r?   r1   r
  r  rp  r  )r>   rÐ   s     r"   rr  zTopDict.postDecompile(
  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ø  )rM   ÚdecompileAllCharStringsrn  rl  rs   )r>   ru   s     r"   rs   zTopDict.toXML3
  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  rJ   rB   r§   Úerror)r>   r4  r‰  s      r"   r„  zTopDict.decompileAllCharStringsC
  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  rJ   Ú
calcBoundsr   r(  rå  r3   r   )r>   ÚfontBBoxr‰  Úboundss       r"   r[   zTopDict.recalcFontBBoxL
  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  rs   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×  rz   rz   Nc                 ó˜   •— t          t          | ¦  «                             ||||¬¦  «         || _        |                      |¦  «         d S r  )rá   rD  r¡   r~   ÚsetCFF2)r>   r9   r?   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  \
  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>   r9   r?   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 r   )r
  rE   s    r"   Úin_cff2zPrivateDict.in_cff2¬
  r�  r$   c                 ór   — |€t          | d¦  «        r| j        }nd}| j                             |¦  «        }|S )Nr  r   )rM   r  r~   rh  )r>   Úvirg  s      r"   rh  zPrivateDict.getNumRegions°
  sB   € àˆ:Ý�t˜YÑ'Ô'ð Ø”\��à�Ø”[×.Ò.¨rÑ2Ô2ˆ
ØÐr$   )NNNNNr   )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 )r8   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%   )r4   r9   )r>   r?   r9   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Ó   rE   s    r"   r]   zIndexedStrings.getCompilerÅ
  s   € Ý% d¨D°$¸uÐEÑEÔEÐEr$   c                 ó*   — t          | j        ¦  «        S r   )rD   r9   rE   s    r"   rF   zIndexedStrings.__len__È
  s   € Ý�4”<Ñ Ô Ð r$   c                 ó\   — |t           k     rt          |         S | j        |t           z
           S r   )ÚcffStandardStringCountÚcffStandardStringsr9   )r>   rZ  s     r"   rU   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Ë   )	rM   ÚbuildStringMappingr   ÚcffStandardStringMappingr£  rD   r9   r   ra   )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 r   rÕ   rE   s    r"   Ú
getStringszIndexedStrings.getStringsß
  s
   € ØŒ|Ðr$   c                 ó–   — i | _         t          t          | j        ¦  «        ¦  «        D ]}|t          z   | j         | j        |         <   Œ d S r   )r£  r  rD   r9   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$   r   )r˜   r™   rš   r›   r¡   r]   rF   rU   rQ  r§  r¤  rœ   r$   r"   r8   r8   »
  s�   € € € € € Ø Ð ðð ð ð ðFð Fð Fð!ð !ð !ð>ð >ð >ðð ð ðð ð ðUð Uð Uð Uð Ur$   r8   (‡  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+  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„  éå   )¦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Þ  r>  r;  rC  rß  rà  rá  râ  rã  rä  rå  ræ  r6  rD  rI  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Û  r>  r;  rC  rà  rá  râ  rã  rä  rå  ræ  r6  rD  rI  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   r/   ÚloggingrÝ  r¨   Ú	getLoggerr˜   r§   r+   rj  Úobjectr   r\   r«   r¸   rÓ   r©   rè   rò   rú   rÿ   r4   r<   r<  r6   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  r8   r¡  r   rD   r¥  r  Ú_ir(  rC  r)  rD  r*  rE  rœ   r$   r"   ú<module>r2     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Ô˜Ñ!Ô!€ð€ð €ðT(ð T(ð T(ð T(ð T(�ñ T(ô T(ð T(ðn/&ð /&ð /&ð /&ð /&�ñ /&ô /&ð /&ð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ð ð ð ð ˜,ñ ô ð ð H#ð H#ð H#ð H#ð H#ˆvñ H#ô H#ð H#ðV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$   