§
    ÛóÉjg  ã            
      óÈ  — d 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mZ ddlmZmZ dd	lZdd
lmZ dd	lZ ej        e¦  «        Z G d„ de¦  «        ZdZdZddddddddddœ	Zefd„Z G d„ de¦  «        ZdZ ej        e¦  «        Z dZ! ej        e!¦  «        Z"dZ#dZ$d Z% ej        e%¦  «        Z&d!Z' ej        e'¦  «        Z(d"Z) ej        e)¦  «        Z*d#Z+ ej        e+¦  «        Z, G d$„ d%e¦  «        Z- G d&„ d'e-¦  «        Z. G d(„ d)e-¦  «        Z/ G d*„ d+¦  «        Z0d,„ Z1d-„ Z2e#fd.„Z3ed/k    r,dd	l4Z4dd	l5Z5 e4j6         e5j7        ¦   «         j8        ¦  «         d	S d	S )0a¯  ttLib/sfnt.py -- low-level module to deal with the sfnt file format.

Defines two public classes:

- SFNTReader
- SFNTWriter

(Normally you don't have to use these classes explicitly; they are
used automatically by ttLib.TTFont.)

The reading and writing of sfnt files is separated in two distinct
classes, since whenever the number of tables changes or whenever
a table's length changes you need to rewrite the whole file anyway.
é    )Úannotations)ÚKeysView)ÚBytesIO)ÚSimpleNamespace)ÚTag)Ússtruct)Ú
TTLibErrorÚTTLibFileIsCollectionErrorN)ÚOrderedDictc                  óT   — e Zd Zd„ Zdd„Zdd	„ZeZdd„Zdd„Zdd„Z	dd„Z
d„ Zd„ ZdS )Ú
SFNTReaderc                ó@  — |rƒ| t           u rz|d         }|                     d¦  «         t          |                     d¦  «        ¦  «        }|                     d¦  «         |dk    r ddlm} t                               |¦  «        S t                               | ¦  «        S )zmReturn an instance of the SFNTReader sub-class which is compatible
        with the input file type.
        r   é   ÚwOF2)ÚWOFF2Reader)r   Úseekr   ÚreadÚfontTools.ttLib.woff2r   ÚobjectÚ__new__)ÚclsÚargsÚkwargsÚinfileÚsfntVersionr   s         úy/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib64/python3.11/site-packages/fontTools/ttLib/sfnt.pyr   zSFNTReader.__new__    s•   € ð ð 		3�C�:Ð%Ð%Ø˜!”WˆFØ�KŠK˜‰NŒNˆNÝ˜fŸkšk¨!™nœnÑ-Ô-ˆKØ�KŠK˜‰NŒNˆNØ˜fÒ$Ð$à=Ð=Ð=Ð=Ð=Ð=å—~’~ kÑ2Ô2Ð2å�~Š~˜cÑ"Ô"Ð"ó    r   éÿÿÿÿc                ó>  — || _         || _        d | _        d | _        t          | _        | j                              d¦  «         | j                              d¦  «        | _        | j                              d¦  «         | j        dk    rÍt          | j         ¦  «        }|j
        }d|cxk    r|k     sn t          d|dz
  z  ¦  «        ‚|| _
        | j                              |j        |         ¦  «         | j                              t          ¦  «        }t          |¦  «        t          k    rt          d¦  «        ‚t!          j        t$          || ¦  «         ná| j        dk    rud| _        t&          | _        | j                              t(          ¦  «        }t          |¦  «        t(          k    rt          d	¦  «        ‚t!          j        t*          || ¦  «         na| j                              t          ¦  «        }t          |¦  «        t          k    rt          d
¦  «        ‚t!          j        t$          || ¦  «         t-          | j        ¦  «        | _        | j        dvrt          d¦  «        ‚i }t/          | j        ¦  «        D ]I}|                      ¦   «         }	|	                     | j         ¦  «         t-          |	j        ¦  «        }
|	||
<   ŒJt7          t9          |                     ¦   «         d„ ¬¦  «        ¦  «        | _        | j        dk    rt?          | ¦  «        | _        d S d S )Nr   r   s   ttcfz2specify a font number between 0 and %d (inclusive)é   ú'Not a Font Collection (not enough data)ó   wOFFÚwoffz!Not a WOFF font (not enough data)z1Not a TrueType or OpenType font (not enough data))ú   ÚOTTOÚtruez1Not a TrueType or OpenType font (bad sfntVersion)c                ó   — | d         j         S )Nr    )Úoffset)Úis    r   ú<lambda>z%SFNTReader.__init__.<locals>.<lambda>_   s   € ÀqÈÄtÄ{€ r   )Úkey) ÚfileÚcheckChecksumsÚflavorÚ
flavorDataÚSFNTDirectoryEntryÚDirectoryEntryr   r   r   ÚreadTTCHeaderÚnumFontsr
   ÚoffsetTableÚsfntDirectorySizeÚlenr	   r   ÚunpackÚsfntDirectoryFormatÚWOFFDirectoryEntryÚwoffDirectorySizeÚwoffDirectoryFormatr   ÚrangeÚ	numTablesÚfromFileÚtagr   ÚsortedÚitemsÚtablesÚWOFFFlavorData)Úselfr,   r-   Ú
fontNumberÚheaderr3   ÚdatarB   r)   Úentryr?   s              r   Ú__init__zSFNTReader.__init__1   sÍ  € ØˆŒ	Ø,ˆÔàˆŒØˆŒÝ0ˆÔØŒ	�Š�qÑÔÐØœ9Ÿ>š>¨!Ñ,Ô,ˆÔØŒ	�Š�qÑÔÐØÔ˜wÒ&Ð&Ý" 4¤9Ñ-Ô-ˆFØ”ˆHØ˜
Ð-Ð-Ò-Ð- XÒ-Ð-Ð-Ð-Ý0ØHØ !‘|ñ%ñô ð ð %ˆDŒMØŒI�NŠN˜6Ô-¨jÔ9Ñ:Ô:Ð:Ø”9—>’>Õ"3Ñ4Ô4ˆDÝ�4‰yŒyÕ-Ò-Ð-Ý Ð!JÑKÔKÐKÝŒNÕ.°°dÑ;Ô;Ð;Ð;ØÔ Ò(Ð(Ø ˆDŒKÝ"4ˆDÔØ”9—>’>Õ"3Ñ4Ô4ˆDÝ�4‰yŒyÕ-Ò-Ð-Ý Ð!DÑEÔEÐEÝŒNÕ.°°dÑ;Ô;Ð;Ð;à”9—>’>Õ"3Ñ4Ô4ˆDÝ�4‰yŒyÕ-Ò-Ð-Ý Ð!TÑUÔUÐUÝŒNÕ.°°dÑ;Ô;Ð;Ý˜tÔ/Ñ0Ô0ˆÔàÔÐ#GÐGÐGÝÐPÑQÔQÐQØ,.ˆÝ�t”~Ñ&Ô&ð 	 ð 	 ˆAØ×'Ò'Ñ)Ô)ˆEØ�NŠN˜4œ9Ñ%Ô%Ð%Ý�e”i‘.”.ˆCØˆF�3‰KˆKÝ!¥&¨¯ª©¬Ð=RÐ=RÐ"SÑ"SÔ"SÑTÔTˆŒð Œ;˜&Ò Ð Ý,¨TÑ2Ô2ˆDŒOˆOˆOð !Ð r   r?   ústr | bytesÚreturnÚboolc                ó   — || j         v S ©N©rB   ©rD   r?   s     r   Úhas_keyzSFNTReader.has_keye   s   € Ø�d”kÐ!Ð!r   úKeysView[Tag]c                ó4   — | j                              ¦   «         S rN   )rB   Úkeys©rD   s    r   rT   zSFNTReader.keysj   s   € ØŒ{×ÒÑ!Ô!Ð!r   Úbytesc                ó†  — | j         t          |¦  «                 }|                     | j        ¦  «        }| j        r…|dk    r&t          |dd…         dz   |dd…         z   ¦  «        }nt          |¦  «        }| j        dk    r||j        k    sJ d|z  ¦   «         ‚n&||j        k    rt                               d|¦  «         |S )zFetch the raw table data.ÚheadNé   ó       é   r    zbad checksum for '%s' table)	rB   r   ÚloadDatar,   r-   ÚcalcChecksumÚcheckSumÚlogÚwarning)rD   r?   rH   rG   Úchecksums        r   Ú__getitem__zSFNTReader.__getitem__m   sÌ   € à”�C ™HœHÔ%ˆØ�~Š~˜dœiÑ(Ô(ˆØÔð 	@Ø�fŠ}ˆ}å'¨¨R¨a¨R¬°;Ñ(>ÀÀbÀcÀcÄÑ(JÑKÔK��å'¨Ñ-Ô-�ØÔ" QÒ&Ð&à 5¤>Ò1Ð1Ð1Ð3PÐSVÑ3VÑ1Ô1Ð1Ð1Ø˜Uœ^Ò+Ð+å—’Ð9¸3Ñ?Ô?Ð?Øˆr   ÚNonec                ó0   — | j         t          |¦  «        = d S rN   )rB   r   rP   s     r   Ú__delitem__zSFNTReader.__delitem__   s   € ØŒK�˜C™œÐ!Ð!Ð!r   c                ó8   — | j                              ¦   «          d S rN   )r,   ÚcloserU   s    r   rg   zSFNTReader.close‚   s   € ØŒ	�ŠÑÔÐÐÐr   c                óÖ   — t          | j        t          ¦  «        r| j        S | j                             ¦   «         }|d= | j        j        |d<   | j                             ¦   «         |d<   |S )Nr,   Ú	_filenameÚ_filepos)Ú
isinstancer,   r   Ú__dict__ÚcopyÚnameÚtell©rD   Ústates     r   Ú__getstate__zSFNTReader.__getstate__‹   sc   € Ý�d”i¥Ñ)Ô)ð 	!à”=Ð ð ”×"Ò"Ñ$Ô$ˆØ�&ˆMØ!œYœ^ˆˆkÑØ œIŸNšNÑ,Ô,ˆˆjÑØˆr   c                óì   — d|vrUt          |                     d¦  «        d¦  «        | _        | j                             |                     d¦  «        ¦  «         | j                             |¦  «         d S )Nr,   ri   Úrbrj   )ÚopenÚpopr,   r   rl   Úupdaterp   s     r   Ú__setstate__zSFNTReader.__setstate__—   sf   € Ø˜ÐÐÝ˜UŸYšY {Ñ3Ô3°TÑ:Ô:ˆDŒIØŒI�NŠN˜5Ÿ9š9 ZÑ0Ô0Ñ1Ô1Ð1ØŒ×Ò˜UÑ#Ô#Ð#Ð#Ð#r   N)r   r   )r?   rJ   rK   rL   )rK   rR   )r?   rJ   rK   rV   )r?   rJ   rK   rc   )rK   rc   )Ú__name__Ú
__module__Ú__qualname__r   rI   rQ   Ú__contains__rT   rb   re   rg   rr   rx   © r   r   r   r      sÁ   € € € € € ð#ð #ð #ð"23ð 23ð 23ð 23ðh"ð "ð "ð "ð €Lð"ð "ð "ð "ðð ð ð ð$"ð "ð "ð "ðð ð ð ð
ð 
ð 
ð$ð $ð $ð $ð $r   r   é   Fr    é   é   rY   é
   é   é   é2   éd   )	r    é   r   r   r€   r~   é   rY   é	   c                ó¾   — d|cxk    rdk    sn t          d|z  ¦  «        ‚t          r|dk    rddlm}  || |¦  «        S ddlm}  || t
          |         ¬¦  «        S )aE  Compress 'data' to Zlib format. If 'USE_ZOPFLI' variable is True,
    zopfli is used instead of the zlib module.
    The compression 'level' must be between 0 and 9. 1 gives best speed,
    9 gives best compression (0 gives no compression at all).
    The default value is a compromise between speed and compression (6).
    r   rˆ   zBad compression level: %s)Úcompress)Únumiterations)Ú
ValueErrorÚ
USE_ZOPFLIÚzlibrŠ   Úzopfli.zlibÚZOPFLI_LEVELS)rG   ÚlevelrŠ   s      r   rŠ   rŠ   µ   s�   € ð �ˆOˆOŠOˆO˜!ŠOˆOˆOˆOÝÐ4°uÑ<Ñ=Ô=Ð=Ýð B˜ !š˜Ø!Ð!Ð!Ð!Ð!Ð!àˆx˜˜eÑ$Ô$Ð$à(Ð(Ð(Ð(Ð(Ð(àˆx˜­M¸%Ô,@ÐAÑAÔAÐAr   c                  óL   — e Zd Zd„ Z	 	 	 dd„Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ ZdS )Ú
SFNTWriterc                óð   — d}|rd|v r	|d         }n|rt          |¦  «        dk    r|d         }| t          u r&|dk    r ddlm} t                               |¦  «        S t                               | ¦  «        S )zpReturn an instance of the SFNTWriter sub-class which is compatible
        with the specified 'flavor'.
        Nr.   r   Úwoff2r   )ÚWOFF2Writer)r6   r“   r   r–   r   r   )r   r   r   r.   r–   s        r   r   zSFNTWriter.__new__É   s’   € ð ˆØð 	�h &Ð(Ð(Ø˜HÔ%ˆFˆFØð 	•c˜$‘i”i !’m�mØ˜!”WˆFØ•*ÐÐØ˜Ò Ð à=Ð=Ð=Ð=Ð=Ð=å—~’~ kÑ2Ô2Ð2å�~Š~˜cÑ"Ô"Ð"r   r$   Nc                ó&  — || _         || _        t          |¦  «        | _        || _        || _        | j        dk    rCt          | _        t          | _	        t          | _        d| _        t          |t          z  z   | _        nb| j        rJ d| j        z  ¦   «         ‚t           | _        t          | _	        t"          | _        ddlm}  ||d¦  «        \  | _        | _        | _        | j                              ¦   «         | _        | j        | j	        z   || j        j        z  z   | _        | j                              | j        ¦  «         | j                              d| j        | j                              ¦   «         z
  z  ¦  «         t;          ¦   «         | _        d S )Nr#   ÚwOFFúUnknown flavor '%s'r   ©ÚgetSearchRangeé   ó    )r,   r=   r   r   r.   r/   r;   ÚdirectoryFormatr:   ÚdirectorySizer9   r1   Ú	signaturer5   ÚsfntDirectoryEntrySizeÚorigNextTableOffsetr8   r0   ÚfontTools.ttLibr›   ÚsearchRangeÚentrySelectorÚ
rangeShiftro   ÚdirectoryOffsetÚ
formatSizeÚnextTableOffsetr   Úwriter   rB   )rD   r,   r=   r   r.   r/   r›   s          r   rI   zSFNTWriter.__init__Û   s  € ð ˆŒ	Ø"ˆŒÝ˜{Ñ+Ô+ˆÔØˆŒØ$ˆŒàŒ;˜&Ò Ð Ý#6ˆDÔ Ý!2ˆDÔÝ"4ˆDÔà#ˆDŒNõ " IÕ0FÑ$FÑFð Ô$Ð$ð ”{ÐGÐGÐ$9¸D¼KÑ$GÑGÔGÐGÝ#6ˆDÔ Ý!2ˆDÔÝ"4ˆDÔà6Ð6Ð6Ð6Ð6Ð6àDRÀNØ˜2ñEô EÑAˆDÔ˜dÔ0°$´/ð  $œyŸ~š~Ñ/Ô/ˆÔàÔ ØÔ ñ!à˜$Ô-Ô8Ñ8ñ9ð 	Ôð 	Œ	�Š�tÔ+Ñ,Ô,Ð,àŒ	�Š˜ Ô!5¸¼	¿ºÑ8HÔ8HÑ!HÑIÑJÔJÐJÝ!‘m”mˆŒˆˆr   c                óP   — || j         v rt          d|z  ¦  «        ‚|| j         |<   d S )Núcannot rewrite '%s' table)rB   r	   )rD   r?   rH   s      r   ÚsetEntryzSFNTWriter.setEntry  s5   € Ø�$”+ÐÐÝÐ8¸3Ñ>Ñ?Ô?Ð?à ˆŒ�CÑÐÐr   c                óê  — || j         v rt          d|z  ¦  «        ‚|                      ¦   «         }||_        | j        |_        |dk    r9t          |dd…         dz   |dd…         z   ¦  «        |_        || _        d|_	        nt          |¦  «        |_        | 
                    | j        |¦  «         | j        dk    r'| j        |_        | xj        |j        d	z   d
z  z  c_        | j        |j        d	z   d
z  z   | _        | j                             d| j        | j                             ¦   «         z
  z  ¦  «         | j        | j                             ¦   «         k    sJ ‚|                      ||¦  «         dS )zWrite raw table data to disk.r¬   rX   NrY   rZ   r[   Tr#   r   éüÿÿÿr�   )rB   r	   r1   r?   r©   r(   r]   r^   Ú	headTableÚuncompressedÚsaveDatar,   r.   r¢   Ú
origOffsetÚ
origLengthÚlengthrª   ro   r­   )rD   r?   rG   rH   s       r   Ú__setitem__zSFNTWriter.__setitem__  sl  € à�$”+ÐÐÝÐ8¸3Ñ>Ñ?Ô?Ð?à×#Ò#Ñ%Ô%ˆØˆŒ	ØÔ+ˆŒØ�&Š=ˆ=Ý)¨$¨r°¨r¬(°[Ñ*@À4ÈÈÈÄ9Ñ*LÑMÔMˆEŒNØ!ˆDŒNØ!%ˆEÔÐå)¨$Ñ/Ô/ˆEŒNØ�Š�t”y $Ñ'Ô'Ð'àŒ;˜&Ò Ð Ø#Ô7ˆEÔØÐ$Ô$¨Ô)9¸AÑ)=ÀÑ(CÑCÐ$Ô$à#Ô3¸¼ÀqÑ8HÈBÑ7NÑOˆÔð
 	Œ	�Š˜ Ô!5¸¼	¿ºÑ8HÔ8HÑ!HÑIÑJÔJÐJØÔ# t¤y§~¢~Ñ'7Ô'7Ò7Ð7Ð7Ð7à�Š�c˜5Ñ!Ô!Ð!Ð!Ð!r   c                ó   — | j         |         S rN   rO   rP   s     r   rb   zSFNTWriter.__getitem__0  s   € ØŒ{˜3ÔÐr   c                óÆ  — t          | j                             ¦   «         ¦  «        }t          |¦  «        | j        k    r&t          d| j        t          |¦  «        fz  ¦  «        ‚| j        dk    �rœd| _        d| _        d| _	        | xj	        dt          |¦  «        z  z  c_	        |D ] \  }}| xj	        |j
        dz   dz  z  c_	        Œ!| j        r| j        nt          ¦   «         }|j        � |j        �|j        | _        |j        | _        nNt          | d
¦  «        r0t!          j        d| j        dd…         ¦  «        \  | _        | _        ndx| _        | _        |j        r•t          |j        ¦  «        | _        | j                             dd¦  «         | j                             ¦   «         | _        t3          |j        ¦  «        }t          |¦  «        | _        | j                             |¦  «         ndx| _        x| _        | _        |j        r³| j                             dd¦  «         | j                             ¦   «         }|dz   dz  }| j                             d||z
  z  ¦  «         | j                             ¦   «         | _        t          |j        ¦  «        | _        | j                             |j        ¦  «         ndx| _        | _        | j                             dd¦  «         | j                             ¦   «         | _        n| j        rJ d| j        z  ¦   «         ‚	 tA          j!        | j"        | ¦  «        }| j                             | j#        | j$        z   ¦  «         d}	|D ]$\  }}|dk    rd}	|| %                    ¦   «         z   }Œ%|	r|  &                    |¦  «         | j                             | j#        ¦  «         | j                             |¦  «         d	S )zTAll tables must have been written to disk. Now write the
        directory.
        z-wrong number of tables; expected %d, found %dr#   r"   r   r[   rœ   r   r¯   Nr°   z>HHr   rY   r†   r�   r™   rX   r    )'r@   rB   rA   r6   r=   r	   r.   r    ÚreservedÚtotalSfntSizer´   r/   rC   ÚmajorVersionÚminorVersionÚhasattrÚstructr7   r°   ÚmetaDataÚmetaOrigLengthr,   r   ro   Ú
metaOffsetrŠ   Ú
metaLengthrª   ÚprivDataÚ
privOffsetÚ
privLengthrµ   r   Úpackrž   r§   rŸ   ÚtoStringÚwriteMasterChecksum)
rD   rB   r?   rH   rG   ÚcompressedMetaDataÚoffÚ	paddedOffÚ	directoryÚseenHeads
             r   rg   zSFNTWriter.close3  s²  € õ ˜œ×)Ò)Ñ+Ô+Ñ,Ô,ˆÝˆv‰;Œ;˜$œ.Ò(Ð(ÝØ?Ø”>¥3 v¡;¤;Ð/ñ0ñô ð ð
 Œ;˜&Ò Ñ Ø$ˆDŒNØˆDŒMà!#ˆDÔØÐÔ "¥s¨6¡{¤{Ñ"2Ñ2ÐÔØ$ð Bð B‘
��UØÐ"Ô" uÔ'7¸!Ñ';¸rÑ&AÑAÐ"Ô"Ð"à&*¤oÐK�4”?�?½>Ñ;KÔ;KˆDØÔ Ð,°Ô1BÐ1NØ$(Ô$5�Ô!Ø$(Ô$5�Ô!Ð!å˜4 Ñ-Ô-ð >Ý;A¼=Ø˜tœ~¨a°¨cÔ2ñ<ô <Ñ8�DÔ% tÔ'8Ð'8ð =>Ð=�DÔ%¨Ô(9ØŒ}ð LÝ&)¨$¬-Ñ&8Ô&8�Ô#Ø”	—’˜q !Ñ$Ô$Ð$Ø"&¤)§.¢.Ñ"2Ô"2�”Ý%-¨d¬mÑ%<Ô%<Ð"Ý"%Ð&8Ñ"9Ô"9�”Ø”	—’Ð 2Ñ3Ô3Ð3Ð3àJKÐK�”ÐK $¤/°DÔ4GØŒ}ð 	6Ø”	—’˜q !Ñ$Ô$Ð$Ø”i—n’nÑ&Ô&�Ø  1™W¨™N�	Ø”	—’ ¨°S©Ñ 9Ñ:Ô:Ð:Ø"&¤)§.¢.Ñ"2Ô"2�”Ý"% d¤mÑ"4Ô"4�”Ø”	—’ ¤Ñ.Ô.Ð.Ð.à45Ð5�” $¤/àŒI�NŠN˜1˜aÑ Ô Ð Øœ)Ÿ.š.Ñ*Ô*ˆDŒKˆKð ”{ÐGÐGÐ$9¸D¼KÑ$GÑGÔGÐGØå”L Ô!5°tÑ<Ô<ˆ	àŒ	�Š�tÔ+¨dÔ.@Ñ@ÑAÔAÐAØˆØ ð 	5ð 	5‰JˆC�Ø�fŠ}ˆ}Ø�Ø! E§N¢NÑ$4Ô$4Ñ4ˆIˆIØð 	0Ø×$Ò$ YÑ/Ô/Ð/ØŒ	�Š�tÔ+Ñ,Ô,Ð,ØŒ	�Š˜	Ñ"Ô"Ð"Ð"Ð"r   c                ó$  — g }| j                              ¦   «         D ]'}|                     | j         |         j        ¦  «         Œ(| j        t
          k    rÇddlm}  || j        d¦  «        \  | _	        | _
        | _        t          j        t          | ¦  «        }t          | j                              ¦   «         ¦  «        }|D ]Z\  }}t          ¦   «         }|j        |_        |j        |_        |j        |_        |j        |_        ||                     ¦   «         z   }Œ[t.          t1          | j         ¦  «        t2          z  z   }|t1          |¦  «        k    sJ ‚|                     t5          |¦  «        ¦  «         t7          |¦  «        dz  }	d|	z
  dz  }
|
S )Nr   rš   rœ   ì   ÿÿ l   º/ac )rB   rT   Úappendr^   r1   r0   r£   r›   r=   r¤   r¥   r¦   r   rÆ   r8   r@   rA   r?   r³   r(   r´   rµ   rÇ   r5   r6   r¡   r]   Úsum)rD   rÌ   Ú	checksumsr?   r›   rB   rH   Ú	sfntEntryÚdirectory_endra   Úchecksumadjustments              r   Ú_calcMasterChecksumzSFNTWriter._calcMasterChecksumz  s�  € àˆ	Ø”;×#Ò#Ñ%Ô%ð 	8ð 	8ˆCØ×Ò˜Tœ[¨Ô-Ô6Ñ7Ô7Ð7Ð7àÔÕ"4Ò4Ð4à6Ð6Ð6Ð6Ð6Ð6àDRÀNØ” ñEô EÑAˆDÔ˜dÔ0°$´/õ  œÕ%8¸$Ñ?Ô?ˆIÝ˜DœK×-Ò-Ñ/Ô/Ñ0Ô0ˆFØ$ð =ð =‘
��UÝ.Ñ0Ô0�	Ø %¤	�	”Ø%*¤^�	Ô"Ø#(Ô#3�	Ô Ø#(Ô#3�	Ô Ø%¨	×(:Ò(:Ñ(<Ô(<Ñ<�	�	å)­C°´Ñ,<Ô,<Õ?UÑ,UÑUˆØ¥ I¡¤Ò.Ð.Ð.Ð.à×Ò� iÑ0Ô0Ñ1Ô1Ð1Ý�y‘>”> JÑ.ˆà(¨8Ñ3°zÑAÐØ!Ð!r   c                óä   — |                       |¦  «        }| j                             | j        d         j        dz   ¦  «         | j                             t          j        d|¦  «        ¦  «         d S )NrX   rY   z>L)rÖ   r,   r   rB   r(   rª   r¾   rÆ   )rD   rÌ   rÕ   s      r   rÈ   zSFNTWriter.writeMasterChecksumš  s`   € Ø!×5Ò5°iÑ@Ô@ÐàŒ	�Š�t”{ 6Ô*Ô1°AÑ5Ñ6Ô6Ð6ØŒ	�Š�œ DÐ*<Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r   c                ó   — dS ©NFr}   rU   s    r   ÚreordersTableszSFNTWriter.reordersTables   s   € Øˆur   )r$   NN)ry   rz   r{   r   rI   r­   r¶   rb   rg   rÖ   rÈ   rÚ   r}   r   r   r“   r“   È   s±   € € € € € ð#ð #ð #ð, 'ØØð/$ð /$ð /$ð /$ðb!ð !ð !ð"ð "ð "ð< ð  ð  ðE#ð E#ð E#ðN"ð "ð "ð@?ð ?ð ?ðð ð ð ð r   r“   a  
		> # big endian
		TTCTag:                  4s # "ttcf"
		Version:                 L  # 0x00010000 or 0x00020000
		numFonts:                L  # number of fonts
		# OffsetTable[numFonts]: L  # array with offsets from beginning of file
		# ulDsigTag:             L  # version 2.0 only
		# ulDsigLength:          L  # version 2.0 only
		# ulDsigOffset:          L  # version 2.0 only
z¥
		> # big endian
		ulDsigTag:               L  # version 2.0 only
		ulDsigLength:            L  # version 2.0 only
		ulDsigOffset:            L  # version 2.0 only
i   i   zä
		> # big endian
		sfntVersion:    4s
		numTables:      H    # number of tables
		searchRange:    H    # (max2 <= numTables)*16
		entrySelector:  H    # log2(max2 <= numTables)
		rangeShift:     H    # numTables*16-searchRange
zc
		> # big endian
		tag:            4s
		checkSum:       L
		offset:         L
		length:         L
ab  
		> # big endian
		signature:      4s   # "wOFF"
		sfntVersion:    4s
		length:         L    # total woff file size
		numTables:      H    # number of tables
		reserved:       H    # set to 0
		totalSfntSize:  L    # uncompressed size
		majorVersion:   H    # major version of WOFF file
		minorVersion:   H    # minor version of WOFF file
		metaOffset:     L    # offset to metadata block
		metaLength:     L    # length of compressed metadata
		metaOrigLength: L    # length of uncompressed metadata
		privOffset:     L    # offset to private data block
		privLength:     L    # length of private data block
zº
		> # big endian
		tag:            4s
		offset:         L
		length:         L    # compressed length
		origLength:     L    # original length
		checkSum:       L    # original checksum
c                  óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )r1   c                ó   — d| _         d S rÙ   )r±   rU   s    r   rI   zDirectoryEntry.__init__ô  s   € Ø!ˆÔÐÐr   c                óì   — |                      | j        ¦  «        }t          |¦  «        | j        k    r&t          d| j        t          |¦  «        fz  ¦  «        ‚t	          j        | j        || ¦  «         d S )Nz?unexpected end of table directory: expected %d bytes but got %d)r   r¨   r6   r	   r   r7   Úformat©rD   r,   rG   s      r   r>   zDirectoryEntry.fromFile÷  sr   € Ø�yŠy˜œÑ)Ô)ˆÝˆt‰9Œ9˜œÒ'Ð'õ ØQØ”?¥C¨¡I¤IÐ.ñ/ñô ð õ 	Œ�t”{ D¨$Ñ/Ô/Ð/Ð/Ð/r   c                ó<   — t          j        | j        || ¦  «         d S rN   )r   r7   rÞ   )rD   Ústrs     r   Ú
fromStringzDirectoryEntry.fromString  s   € ÝŒ�t”{ C¨Ñ.Ô.Ð.Ð.Ð.r   c                ó6   — t          j        | j        | ¦  «        S rN   )r   rÆ   rÞ   rU   s    r   rÇ   zDirectoryEntry.toString  s   € ÝŒ|˜DœK¨Ñ.Ô.Ð.r   c                ó¦   — t          | d¦  «        r$d| j        j        | j        t	          | ¦  «        fz  S d| j        j        t	          | ¦  «        fz  S )Nr?   z<%s '%s' at %x>z
<%s at %x>)r½   Ú	__class__ry   r?   ÚidrU   s    r   Ú__repr__zDirectoryEntry.__repr__  sO   € Ý�4˜ÑÔð 	FØ$¨¬Ô(?ÀÄÍ2ÈdÉ8Ì8Ð'TÑTÐTà 4¤>Ô#:½B¸t¹H¼HÐ"EÑEÐEr   c                ó�  — |                      | j        ¦  «         |                     | j        ¦  «        }t	          |¦  «        | j        k    rOt          | dd ¦  «        }t          d|�t          |¦  «        nd| j        t	          |¦  «        | j        fz  ¦  «        ‚t          | j	        d¦  «        r|  
                    |¦  «        }|S )Nr?   zLunexpected end of '%s' table data: expected %d bytes but got %d at offset %dú????Ú
decodeData)r   r(   r   rµ   r6   Úgetattrr	   r   r½   rå   rê   )rD   r,   rG   r?   s       r   r\   zDirectoryEntry.loadData  sÂ   € Ø�	Š	�$”+ÑÔÐØ�yŠy˜œÑ%Ô%ˆÝˆt‰9Œ9˜œÒ#Ð#õ ˜$  tÑ,Ô,ˆCÝð"ð !$ •C˜‘H”H�H°VØ”KÝ˜‘I”IØ”Kð	ññ	ô 	ð 	õ �4”> <Ñ0Ô0ð 	)Ø—?’? 4Ñ(Ô(ˆDØˆr   c                óà   — t          | j        d¦  «        r|                      |¦  «        }t          |¦  «        | _        |                     | j        ¦  «         |                     |¦  «         d S )NÚ
encodeData)r½   rå   rí   r6   rµ   r   r(   rª   rß   s      r   r²   zDirectoryEntry.saveData$  s`   € Ý�4”> <Ñ0Ô0ð 	)Ø—?’? 4Ñ(Ô(ˆDÝ˜$‘i”iˆŒØ�	Š	�$”+ÑÔÐØ�
Š
�4ÑÔÐÐÐr   c                ó   — |S rN   r}   )rD   ÚrawDatas     r   rê   zDirectoryEntry.decodeData+  s   € Øˆr   c                ó   — |S rN   r}   )rD   rG   s     r   rí   zDirectoryEntry.encodeData.  s   € Øˆr   N)ry   rz   r{   rI   r>   râ   rÇ   rç   r\   r²   rê   rí   r}   r   r   r1   r1   ó  sž   € € € € € ð"ð "ð "ð	0ð 	0ð 	0ð/ð /ð /ð/ð /ð /ðFð Fð Fðð ð ð,ð ð ðð ð ðð ð ð ð r   r1   c                  ó   — e Zd ZeZeZdS )r0   N)ry   rz   r{   ÚsfntDirectoryEntryFormatrÞ   r¡   r¨   r}   r   r   r0   r0   2  s   € € € € € Ø%€FØ'€J€J€Jr   r0   c                  ó2   ‡ — e Zd ZeZeZˆ fd„Zd„ Zd„ Z	ˆ xZ
S )r9   c                óœ   •— t          t          | ¦  «                             ¦   «          t          t          d¦  «        st          | _        d S d S )NÚzlibCompressionLevel)Úsuperr9   rI   r½   ÚZLIB_COMPRESSION_LEVELrõ   )rD   rå   s    €r   rI   zWOFFDirectoryEntry.__init__;  sN   ø€ ÝÕ  $Ñ'Ô'×0Ò0Ñ2Ô2Ð2õ Õ)Ð+AÑBÔBð 	?Ý(>ˆDÔ%Ð%Ð%ð	?ð 	?r   c                óz  — dd l }| j        | j        k    r|}n£t          t	          | dd ¦  «        pd¦  «        }| j        | j        k    rt          d|| j        | j        fz  ¦  «        ‚|                     |¦  «        }t          |¦  «        | j        k    r't          d|| j        t          |¦  «        fz  ¦  «        ‚|S )Nr   r?   ré   zTcorrupt WOFF table '%s': compressed length %d is not smaller than original length %dzHunexpected size for decompressed WOFF table '%s': expected %d but got %d)rŽ   rµ   r´   r   rë   r	   Ú
decompressr6   )rD   rï   rŽ   rG   r?   s        r   rê   zWOFFDirectoryEntry.decodeDataF  sÖ   € ØˆˆˆàŒ;˜$œ/Ò)Ð)ØˆDˆDõ •g˜d E¨4Ñ0Ô0Ð:°FÑ;Ô;ˆCØŒ{˜dœoÒ-Ð-Ý ð6à˜DœK¨¬Ð9ñ:ñô ð ð
 —?’? 7Ñ+Ô+ˆDÝ�4‰yŒy˜DœOÒ+Ð+Ý ð-Ø03°T´_ÅcÈ$ÁiÄiÐ/PñQñô ð ð ˆr   c                óî   — t          |¦  «        | _        | j        st          || j        ¦  «        }| j        st          |¦  «        | j        k    r|}| j        | _        n|}t          |¦  «        | _        |S rN   )r6   r´   r±   rŠ   rõ   rµ   )rD   rG   ÚcompressedDatarï   s       r   rí   zWOFFDirectoryEntry.encodeData_  ss   € Ý˜d™)œ)ˆŒØÔ ð 	GÝ% d¨DÔ,EÑFÔFˆNØÔð 	'¥ NÑ 3Ô 3°t´Ò FÐ FàˆGØœ/ˆDŒKˆKà$ˆGÝ˜g™,œ,ˆDŒKØˆr   )ry   rz   r{   ÚwoffDirectoryEntryFormatrÞ   ÚwoffDirectoryEntrySizer¨   rI   rê   rí   Ú__classcell__)rå   s   @r   r9   r9   7  s`   ø€ € € € € Ø%€FØ'€Jð	?ð 	?ð 	?ð 	?ð 	?ðð ð ð2ð ð ð ð ð ð r   r9   c                  ó    — e Zd ZdZdd„Zd„ ZdS )rC   r#   Nc                óJ  — d | _         d | _        d | _        d | _        |�r�|j         | _         |j        | _        |j        rÖ|j                             |j        ¦  «         |j                             |j        ¦  «        }t          |¦  «        |j        k    r&t          d|j        t          |¦  «        fz  ¦  «        ‚|                      |¦  «        }t          |¦  «        |j        k    r&t          d|j        t          |¦  «        fz  ¦  «        ‚|| _        |j        r‡|j                             |j        ¦  «         |j                             |j        ¦  «        }t          |¦  «        |j        k    r&t          d|j        t          |¦  «        fz  ¦  «        ‚|| _        d S d S d S )Nz=unexpected end of WOFF metadata: expected %d bytes but got %dzFunexpected size for decompressed WOFF metadata: expected %d but got %dzAunexpected end of WOFF private data: expected %d bytes but got %d)r»   r¼   r¿   rÃ   rÂ   r,   r   rÁ   r   r6   r	   Ú_decompressrÀ   rÅ   rÄ   )rD   Úreaderrï   rG   s       r   rI   zWOFFFlavorData.__init__p  s½  € Ø ˆÔØ ˆÔØˆŒØˆŒØñ 	%Ø &Ô 3ˆDÔØ &Ô 3ˆDÔð Ô ð %Ø”× Ò  Ô!2Ñ3Ô3Ð3Ø œ+×*Ò*¨6Ô+<Ñ=Ô=�Ý�w‘<”< 6Ô#4Ò4Ð4Ý$ð%Ø(.Ô(9½3¸w¹<¼<Ð'HñIñô ð ð ×'Ò'¨Ñ0Ô0�Ý�t‘9”9 Ô 5Ò5Ð5Ý$ð1Ø4:Ô4IÍ3ÈtÉ9Ì9Ð3UñVñô ð ð !%�”ØÔ ð %Ø”× Ò  Ô!2Ñ3Ô3Ð3Ø”{×'Ò'¨Ô(9Ñ:Ô:�Ý�t‘9”9 Ô 1Ò1Ð1Ý$ð+Ø.4Ô.?ÅÀTÁÄÐ-KñLñô ð ð !%�”��ð;	%ð 	%ð*%ð %r   c                ó4   — dd l }|                     |¦  «        S )Nr   )rŽ   rù   )rD   rï   rŽ   s      r   r  zWOFFFlavorData._decompress”  s   € Øˆˆˆà�Š˜wÑ'Ô'Ð'r   rN   )ry   rz   r{   ÚFlavorrI   r  r}   r   r   rC   rC   m  s=   € € € € € Ø€Fð"%ð "%ð "%ð "%ðH(ð (ð (ð (ð (r   rC   c                ó8  — t          | ¦  «        dz  }|r| dd|z
  z  z  } d}d}|dz  dk    sJ ‚t          dt          | ¦  «        |¦  «        D ]L}| |||z   …         }t          j        dt          |¦  «        dz  z  |¦  «        }|t	          |¦  «        z   dz  }ŒM|S )a,  Calculate the checksum for an arbitrary block of data.

    If the data length is not a multiple of four, it assumes
    it is to be padded with null byte.

            >>> print(calcChecksum(b"abcd"))
            1633837924
            >>> print(calcChecksum(b"abcdxyz"))
            3655064932
    r   r�   r   i   ú>%dLrÏ   )r6   r<   r¾   r7   rÑ   )rG   Ú	remainderÚvalueÚ	blockSizer)   ÚblockÚlongss          r   r]   r]   š  s½   € õ �D‘	”	˜A‘€IØð (Ø�˜˜Y™Ñ'Ñ'ˆØ€EØ€IØ�q‰=˜AÒÐÐÐÝ�1•c˜$‘i”i Ñ+Ô+ð 2ð 2ˆØ�Q˜˜Y™Ð&Ô'ˆÝ”˜f­¨E©
¬
°a©Ñ8¸%Ñ@Ô@ˆØ�˜U™œÑ# zÑ1ˆˆØ€Lr   c                óØ  — |                       d¦  «         |                      t          ¦  «        }t          |¦  «        t          k    rt	          d¦  «        ‚t          ¦   «         }t          j        t          ||¦  «         |j	        dk    rt	          d¦  «        ‚|j
        t          t          fv sJ d|j
        z  ¦   «         ‚t          j        d|j        z  |                      |j        dz  ¦  «        ¦  «        |_        |j
        t          k    r\|                      t           ¦  «        }t          |¦  «        t           k    rt	          d¦  «        ‚t          j        t"          ||¦  «         |S )Nr   r!   ÚttcfzNot a Font Collectionúunrecognized TTC version 0x%08xr  r   )r   r   ÚttcHeaderSizer6   r	   r   r   r7   ÚttcHeaderFormatÚTTCTagÚVersionÚTTC_V1ÚTTC_V2r¾   r3   r4   ÚttcTailSizeV2ÚttcTailFormatV2)r,   rG   rD   s      r   r2   r2   ²  s5  € Ø‡I‚Iˆa�L„L€LØ�9Š9•]Ñ#Ô#€DÝ
ˆ4�y„y•MÒ!Ð!ÝÐBÑCÔCÐCÝÑÔ€DÝ„N•? D¨$Ñ/Ô/Ð/Ø„{�fÒÐÝÐ0Ñ1Ô1Ð1ØŒ<�F¥FÐ+Ð+Ð+Ð+Ø)¨D¬LÑ8ñ ,Ô+Ð+õ ”}Ø�”Ñ §	¢	¨$¬-¸!Ñ*;Ñ <Ô <ñô €DÔð „|•vÒÐà�yŠy�Ñ'Ô'ˆÝˆt‰9Œ9�Ò%Ð%ÝÐFÑGÔGÐGÝŒ•¨¨dÑ3Ô3Ð3Ø€Kr   c                ó  — t          ¦   «         }d|_        ||_        |j        t          t          fv sJ d|j        z  ¦   «         ‚||_        |                      d¦  «         |                      t          j	        t          |¦  «        ¦  «         |                      ¦   «         }|                      t          j	        d|j        z  gdg|j        z  ¢R Ž ¦  «         |t          k    r*|                      t          j	        dddd¦  «        ¦  «         |S )Nr  r  r   r  z>3L)r   r  r  r  r  r3   r   rª   r   rÆ   r  ro   r¾   )r,   r3   ÚversionrD   r(   s        r   ÚwriteTTCHeaderr  Ê  sð   € ÝÑÔ€DØ€D„KØ€D„LØŒ<�F¥FÐ+Ð+Ð+Ð+Ø)¨D¬LÑ8ñ ,Ô+Ð+ð €D„MØ‡I‚Iˆa�L„L€LØ‡J‚J�wŒ|�O¨TÑ2Ô2Ñ3Ô3Ð3Ø�YŠY‰[Œ[€FØ‡J‚J�vŒ{˜6 D¤MÑ1ÐJ°a°S¸4¼=Ñ5HÐJÐJÐJÑKÔKÐKØ•&ÒÐð 	�
Š
•6”;˜u a¨¨AÑ.Ô.Ñ/Ô/Ð/Ø€Mr   Ú__main__)9Ú__doc__Ú
__future__r   Úcollections.abcr   Úior   Útypesr   ÚfontTools.misc.textToolsr   ÚfontTools.miscr   r£   r	   r
   r¾   Úcollectionsr   ÚloggingÚ	getLoggerry   r_   r   r   r÷   r�   r�   rŠ   r“   r  Úcalcsizer  r  r  r  r  r8   r5   rò   r¡   r;   r:   rü   rý   r1   r0   r9   rC   r]   r2   r  ÚsysÚdoctestÚexitÚtestmodÚfailedr}   r   r   ú<module>r+     sj  ððð ð #Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø (Ð (Ð (Ð (Ð (Ð (Ø "Ð "Ð "Ð "Ð "Ð "Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø €€€à€gÔ˜Ñ!Ô!€ð|$ð |$ð |$ð |$ð |$�ñ |$ô |$ð |$ð@ Ð ð €
ð 	ØØØØ	Ø	Ø	Ø	Ø
ðð €ð 0ð Bð Bð Bð Bð&Yð Yð Yð Yð Y�ñ Yô Yð Yð|	€ð !�Ô  Ñ1Ô1€ð€ð !�Ô  Ñ1Ô1€à	€Ø	€ðÐ ð %�GÔ$Ð%8Ñ9Ô9Ð ðÐ ð *˜Ô)Ð*BÑCÔCÐ ðÐ ð" %�GÔ$Ð%8Ñ9Ô9Ð ðÐ ð *˜Ô)Ð*BÑCÔCÐ ð<ð <ð <ð <ð <�Vñ <ô <ð <ð~(ð (ð (ð (ð (˜ñ (ô (ð (ð
3ð 3ð 3ð 3ð 3˜ñ 3ô 3ð 3ðl*(ð *(ð *(ð *(ð *(ñ *(ô *(ð *(ðZð ð ð0ð ð ð0 ,2ð ð ð ð ð& ˆzÒÐØ€J€J€JØ€N€N€Nà€C„Hˆ_ˆWŒ_ÑÔÔ%Ñ&Ô&Ð&Ð&Ð&ð	 Ðr   