§
    ¢”jùí  ã                   óh  — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZ d dlmZmZmZmZmZ d dlmZmZmZmZmZmZmZmZm Z  d d	l!m"Z"m#Z# d dl$Z$ e$j%        d
¦  «        Z&dZ'	 	 d dl(Z)n# e*$ r d dl)Z)Y nw xY wdZ'n# e*$ r Y nw xY w G d„ de¦  «        Z+ G d„ de¦  «        Z,dZ- ej.        e-¦  «        Z/dZ0dZ1 ej.        e1¦  «        Z2dZ3 ej.        e3¦  «        Z4dZ5dZ6e2e4z   de6z  z   Z7dZ8dZ9 ej.        e9¦  «        Z:dZ;dZ<d„ Z= G d„ de¦  «        Z> G d„ d  ed!¦  «        ¦  «        Z? G d"„ d# ed$¦  «        ¦  «        Z@ G d%„ d& ed'¦  «        ¦  «        ZA G d(„ d)e¦  «        ZBd*„ ZCd+„ ZDd,„ ZEd-„ ZFd.„ ZGd3d/„ZHd0„ ZId3d1„ZJeKd2k    r ejL         eJ¦   «         ¦  «         dS dS )4é    )ÚBytesION)ÚOrderedDict)Ússtruct)ÚcalcIntBounds)ÚTagÚbytechrÚbyteordÚ	bytesjoinÚpad)ÚTTFontÚ
TTLibErrorÚgetTableModuleÚgetTableClassÚgetSearchRange)	Ú
SFNTReaderÚ
SFNTWriterÚDirectoryEntryÚWOFFFlavorDataÚsfntDirectoryFormatÚsfntDirectorySizeÚSFNTDirectoryEntryÚsfntDirectoryEntrySizeÚcalcChecksum)Ú	ttProgramÚ_g_l_y_fzfontTools.ttLib.woff2FTc                   ó@   — e Zd ZdZdd„Zd„ Zd„ Zdd„Zd	„ Zd
„ Z	d„ Z
dS )ÚWOFF2ReaderÚwoff2r   éÿÿÿÿc                 óò  — t           s)t                               d¦  «         t          d¦  «        ‚|| _        t          | j                             d¦  «        ¦  «        }|dk    rt          d¦  «        ‚| j                             d¦  «         t          | _
        | j                             t          ¦  «        }t          |¦  «        t          k    rt          d¦  «        ‚t          j        t          || ¦  «         t!          ¦   «         | _        d}t%          | j        ¦  «        D ]_}|  
                    ¦   «         }|                     | j        ¦  «         t          |j        ¦  «        }	|| j        |	<   ||_        ||j        z  }Œ`|}
| j                             | j        ¦  «        }t3          j        |¦  «        }t          |¦  «        |
k    r!t          d|
t          |¦  «        fz  ¦  «        ‚t7          |¦  «        | _        | j                             dd	¦  «         | j        | j                             ¦   «         k    rt          d
¦  «        ‚t=          | ¦  «        | _        tA          dd¬¦  «        | _!        d S )NzfThe WOFF2 decoder requires the Brotli Python extension, available at: https://github.com/google/brotliúNo module named brotlié   s   wOF2z Not a WOFF2 font (bad signature)r   z"Not a WOFF2 font (not enough data)zAunexpected size for decompressed font data: expected %d, found %dé   z4reported 'length' doesn't match the actual file sizeF©ÚrecalcBBoxesÚrecalcTimestamp)"Ú
haveBrotliÚlogÚerrorÚImportErrorÚfiler   Úreadr   ÚseekÚWOFF2DirectoryEntryr   Úwoff2DirectorySizeÚlenr   ÚunpackÚwoff2DirectoryFormatr   ÚtablesÚrangeÚ	numTablesÚfromFileÚtagÚoffsetÚlengthÚtotalCompressedSizeÚbrotliÚ
decompressr   ÚtransformBufferÚtellÚWOFF2FlavorDataÚ
flavorDatar   ÚttFont)Úselfr+   ÚcheckChecksumsÚ
fontNumberÚ	signatureÚdatar8   ÚiÚentryr7   ÚtotalUncompressedSizeÚcompressedDataÚdecompressedDatas                úd/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/ttLib/woff2.pyÚ__init__zWOFF2Reader.__init__/   s<  € Ýð 	8Ý�IŠIð3ñô ð õ Ð6Ñ7Ô7Ð7àˆŒ	å˜œ	Ÿš qÑ)Ô)Ñ*Ô*ˆ	Ø˜ÒÐÝÐ?Ñ@Ô@Ð@àŒ	�Š�qÑÔÐÝ1ˆÔØŒy�~Š~Õ0Ñ1Ô1ˆÝˆt‰9Œ9Õ*Ò*Ð*ÝÐAÑBÔBÐBÝŒÕ+¨T°4Ñ8Ô8Ð8å!‘m”mˆŒØˆÝ�t”~Ñ&Ô&ð 	#ð 	#ˆAØ×'Ò'Ñ)Ô)ˆEØ�NŠN˜4œ9Ñ%Ô%Ð%Ý�e”i‘.”.ˆCØ$ˆDŒK˜ÑØ!ˆEŒLØ�e”lÑ"ˆFˆFà &ÐØœŸš¨Ô(@ÑAÔAˆÝ!Ô,¨^Ñ<Ô<ÐÝÐÑ Ô Ð$9Ò9Ð9ÝØSØ(­#Ð.>Ñ*?Ô*?Ð@ñAñô ð õ  'Ð'7Ñ8Ô8ˆÔàŒ	�Š�q˜!ÑÔÐØŒ;˜$œ)Ÿ.š.Ñ*Ô*Ò*Ð*ÝÐSÑTÔTÐTå)¨$Ñ/Ô/ˆŒõ ¨%ÀÐGÑGÔGˆŒˆˆó    c                 óæ   — | j         t          |¦  «                 }t          |d¦  «        sA|j        r|                      |¦  «        |_        n|                     | j        ¦  «        |_        |j        S )z9Fetch the raw table data. Reconstruct transformed tables.rF   )r3   r   ÚhasattrÚtransformedÚreconstructTablerF   ÚloadDatar=   )rB   r7   rH   s      rL   Ú__getitem__zWOFF2Reader.__getitem__a   sh   € à”�C ™HœHÔ%ˆÝ�u˜fÑ%Ô%ð 	BØÔ ð BØ!×2Ò2°3Ñ7Ô7�”
�
à"Ÿ^š^¨DÔ,@ÑAÔA�”
ØŒzÐrN   c                 ól  — | j         t          |¦  «                 }|                     | j        ¦  «        }|dk    r0t	          | d¦  «        r| j        nd}|                      ||¦  «        }nI|dk    r|                      ¦   «         }n.|dk    r|                      |¦  «        }nt          d|z  ¦  «        ‚|S )z4Reconstruct table named 'tag' from transformed data.ÚglyfÚpaddingNÚlocaÚhmtxz#transform for table '%s' is unknown)
r3   r   rS   r=   rP   rW   Ú_reconstructGlyfÚ_reconstructLocaÚ_reconstructHmtxr   )rB   r7   rH   ÚrawDatarW   rF   s         rL   rR   zWOFF2Reader.reconstructTablek   sµ   € à”�C ™HœHÔ%ˆØ—.’. Ô!5Ñ6Ô6ˆØ�&Š=ˆ=å&-¨d°IÑ&>Ô&>ÐH�d”l�lÀDˆGØ×(Ò(¨°'Ñ:Ô:ˆDˆDØ�FŠ]ˆ]Ø×(Ò(Ñ*Ô*ˆDˆDØ�FŠ]ˆ]Ø×(Ò(¨Ñ1Ô1ˆDˆDåÐBÀSÑHÑIÔIÐIØˆrN   Nc                 óÞ   — t          ¦   «         | j        d<   t          ¦   «         x}| j        d<   |                     || j        ¦  «         |r||_        |                     | j        ¦  «        }|S )z Return recostructed glyf table data, and set the corresponding loca's
        locations. Optionally pad glyph offsets to the specified number of bytes.
        rX   rV   )ÚWOFF2LocaTablerA   ÚWOFF2GlyfTableÚreconstructrW   Úcompile)rB   rF   rW   Ú	glyfTables       rL   rZ   zWOFF2Reader._reconstructGlyf{   so   € õ -Ñ.Ô.ˆŒ�FÑÝ*8Ñ*:Ô*:Ð:ˆ	�D”K Ñ'Ø×Ò˜d D¤KÑ0Ô0Ð0Øð 	(Ø 'ˆIÔØ× Ò  ¤Ñ-Ô-ˆØˆrN   c                 óX  — d| j         vr%|                      d¦  «        | j        d         _        | j         d         }|                     | j         ¦  «        }t          |¦  «        | j        d         j        k    r1t          d| j        d         j        t          |¦  «        fz  ¦  «        ‚|S )z%Return reconstructed loca table data.rX   rV   zMreconstructed 'loca' table doesn't match original size: expected %d, found %d)rA   rR   r3   rF   rb   r0   Ú
origLengthr   )rB   Ú	locaTablerF   s      rL   r[   zWOFF2Reader._reconstructLoca‡   s¤   € à˜œÐ$Ð$à'+×'<Ò'<¸VÑ'DÔ'DˆDŒK˜ÔÔ$Ø”K Ô'ˆ	Ø× Ò  ¤Ñ-Ô-ˆÝˆt‰9Œ9˜œ FÔ+Ô6Ò6Ð6Ýð(Ø+/¬;°vÔ+>Ô+IÍ3ÈtÉ9Ì9Ð*UñVñô ð ð ˆrN   c                 óú   — d| j         j        v rd}nd}|D ]}|                      |¦  «         Œt          ¦   «         x}| j        d<   |                     || j        ¦  «         |                     | j        ¦  «        }|S )z%Return reconstructed hmtx table data.rV   )ÚmaxpÚhhearV   )rh   Úheadri   rX   rV   rY   )r@   ÚtransformedTablesÚ_decompileTableÚWOFF2HmtxTablerA   ra   rb   )rB   rF   ÚtableDependenciesr7   Ú	hmtxTables        rL   r\   zWOFF2Reader._reconstructHmtx•   s•   € ð
 �T”_Ô6Ð6Ð6à 8ÐÐð !IÐØ$ð 	&ð 	&ˆCØ× Ò  Ñ%Ô%Ð%Ð%Ý*8Ñ*:Ô*:Ð:ˆ	�D”K Ñ'Ø×Ò˜d D¤KÑ0Ô0Ð0Ø× Ò  ¤Ñ-Ô-ˆØˆrN   c                 óì   — | |         }| j                              |¦  «        r| j         |         S t          |¦  «        } ||¦  «        }|| j         j        |<   |                     || j         ¦  «         dS )z5Decompile table data and store it inside self.ttFont.N)rA   ÚisLoadedr   r3   Ú	decompile©rB   r7   rF   Ú
tableClassÚtables        rL   rl   zWOFF2Reader._decompileTable§   su   € à�CŒyˆØŒ;×Ò Ñ$Ô$ð 	$Ø”;˜sÔ#Ð#Ý" 3Ñ'Ô'ˆ
Ø�
˜3‘”ˆØ"'ˆŒÔ˜3ÑØ�Š˜˜dœkÑ*Ô*Ð*Ð*Ð*rN   )r   r   ©N)Ú__name__Ú
__module__Ú__qualname__ÚflavorrM   rT   rR   rZ   r[   r\   rl   © rN   rL   r   r   ,   s‘   € € € € € Ø€Fð0Hð 0Hð 0Hð 0Hðdð ð ðð ð ð 
ð 
ð 
ð 
ðð ð ðð ð ð$+ð +ð +ð +ð +rN   r   c                   óˆ   — e Zd ZdZ	 	 	 dd„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„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚWOFF2Writerr   ú   Nc                 óÊ  — t           s)t                               d¦  «         t          d¦  «        ‚|| _        || _        t          |¦  «        | _        t          |¬¦  «        | _	        t          | _        t          | _        t          | _        t          d¦  «        | _        d| _        t%          ¦   «         | _        t)          ¦   «         | _        t-          dd¬¦  «        | _        d S )NzfThe WOFF2 encoder requires the Brotli Python extension, available at: https://github.com/google/brotlir!   )rF   ÚwOF2r   Fr$   )r'   r(   r)   r*   r+   r5   r   ÚsfntVersionr?   r@   r2   ÚdirectoryFormatr/   ÚdirectorySizer.   r   rE   ÚnextTableOffsetr   r=   r   r3   r   rA   )rB   r+   r5   r�   rz   r@   s         rL   rM   zWOFF2Writer.__init__µ   sÆ   € õ ð 	8Ý�IŠIð3ñô ð õ Ð6Ñ7Ô7Ð7àˆŒ	Ø"ˆŒÝ˜{Ñ+Ô+ˆÔÝ)¨zÐ:Ñ:Ô:ˆŒå3ˆÔÝ/ˆÔÝ1ˆÔå˜V™œˆŒà ˆÔÝ&™yœyˆÔå!‘m”mˆŒõ ¨%ÀÐGÑGÔGˆŒˆˆrN   c                 ó  — || j         v rt          d|z  ¦  «        ‚|dk    r| xj        dz  c_        dS |                      ¦   «         }t	          |¦  «        |_        t          |j        ¦  «        |_        ||_        || j         |<   dS )z4Associate new entry named 'tag' with raw table data.zcannot rewrite '%s' tableÚDSIGé   N)	r3   r   r5   r   r   r7   ÚgetKnownTagIndexÚflagsrF   )rB   r7   rF   rH   s       rL   Ú__setitem__zWOFF2Writer.__setitem__×   s‹   € à�$”+ÐÐÝÐ8¸3Ñ>Ñ?Ô?Ð?Ø�&Š=ˆ=àˆNŒN˜aÑˆNŒNØˆFà×#Ò#Ñ%Ô%ˆÝ˜‘H”HˆŒ	Ý& u¤yÑ1Ô1ˆŒð ˆŒ
à ˆŒ�CÑÐÐrN   c                 óþ  — t          | j        ¦  «        | j        k    r+t          d| j        t          | j        ¦  «        fz  ¦  «        ‚| j        dv rd}n| j        dk    rd}nt          d¦  «        ‚|r-d| j        j        v rd| j        v r|                      d¬	¦  «         |                      ¦   «          t          t          | j                             ¦   «         ¦  «        ¦  «        | _        |                      ¦   «         | _        |                      ¦   «         }t          j        |t          j        ¬
¦  «        }t          |¦  «        | _        |                      ¦   «         | _        |                      ¦   «         \  | _        | _        d| _        |                      ¦   «         }| j                             d¦  «         | j                             t;          ||z   d¬¦  «        ¦  «         |                      ¦   «          dS )zJAll tags must have been specified. Now write the table data and directory.z-wrong number of tables; expected %d, found %d)r~   ÚtrueTÚOTTOFz1Not a TrueType or OpenType font (bad sfntVersion)rV   r"   )rW   ©Úmoder   ©ÚsizeN)r0   r3   r5   r   r�   r@   rk   Ú_normaliseGlyfAndLocaÚ_setHeadTransformFlagr   ÚsortedÚitemsÚ#_calcSFNTChecksumsLengthsAndOffsetsÚtotalSfntSizeÚ_transformTablesr;   ÚcompressÚ	MODE_FONTr:   Ú_calcTotalSizer9   Ú_getVersionÚmajorVersionÚminorVersionÚreservedÚ_packTableDirectoryr+   r-   Úwriter   Ú_writeFlavorData)rB   Ú
isTrueTypeÚfontDataÚcompressedFontÚ	directorys        rL   ÚclosezWOFF2Writer.closeé   sß  € åˆtŒ{ÑÔ˜tœ~Ò-Ð-ÝØ?Ø”>¥3 t¤{Ñ#3Ô#3Ð4ñ5ñô ð ð
 ÔÐ;Ð;Ð;ØˆJˆJØÔ Ò'Ð'ØˆJˆJåÐPÑQÔQÐQð ð	2à˜$œ/Ô;Ð;Ð;Ø˜$œ+Ð%Ð%à×&Ò&¨qÐ&Ñ1Ô1Ð1Ø×"Ò"Ñ$Ô$Ð$õ "¥&¨¬×):Ò):Ñ)<Ô)<Ñ"=Ô"=Ñ>Ô>ˆŒà!×EÒEÑGÔGˆÔà×(Ò(Ñ*Ô*ˆÝœ¨½Ô8HÐIÑIÔIˆå#& ~Ñ#6Ô#6ˆÔ Ø×)Ò)Ñ+Ô+ˆŒØ/3×/?Ò/?Ñ/AÔ/AÑ,ˆÔ˜4Ô,ØˆŒà×,Ò,Ñ.Ô.ˆ	ØŒ	�Š�qÑÔÐØŒ	�Š�˜I¨Ñ6¸QÐ?Ñ?Ô?Ñ@Ô@Ð@Ø×ÒÑÔÐÐÐrN   r"   c                 ó¾   — | j         dk    rdS dD ] }|| j        v r|                      |¦  «         Œ!|| j        d         _        dD ]}|                      |¦  «         ŒdS )z¼Recompile glyf and loca tables, aligning glyph offsets to multiples of
        'padding' size. Update the head table's 'indexToLocFormat' accordingly while
        compiling loca.
        r�   N)rh   rj   rX   rV   ÚfvarrV   ©rV   rX   )r�   r3   rl   rA   rW   Ú_compileTable)rB   rW   r7   s      rL   r’   z!WOFF2Writer._normaliseGlyfAndLoca  s‡   € ð
 Ô˜vÒ%Ð%ØˆFà;ð 	*ð 	*ˆCØ�d”kÐ!Ð!Ø×$Ò$ SÑ)Ô)Ð)øØ&-ˆŒ�FÔÔ#Ø#ð 	$ð 	$ˆCØ×Ò˜sÑ#Ô#Ð#Ð#ð	$ð 	$rN   c                 ó�   — |                       d¦  «         | j        d         xj        dz  c_        |                      d¦  «         dS )zŒSet bit 11 of 'head' table flags to indicate that the font has undergone
        a lossless modifying transform. Re-compile head table data.rj   i   N)rl   rA   r‰   r«   ©rB   s    rL   r“   z!WOFF2Writer._setHeadTransformFlag.  sM   € ð 	×Ò˜VÑ$Ô$Ð$ØŒ�FÔÐ!Ô! WÑ,Ð!Ô!Ø×Ò˜6Ñ"Ô"Ð"Ð"Ð"rN   c                 ó’  — t          |¦  «        }|| j        vrt          d|z  ¦  «        ‚| j                             |¦  «        rdS | j        |         j        }|dk    rt          }n+|dk    rt          }n|dk    rt          }nt          |¦  «        } ||¦  «        }|| j        j        |<   | 
                    || j        ¦  «         dS )z@Fetch table data, decompile it, and store it inside self.ttFont.zmissing required table: %sNrX   rV   rY   )r   r3   r   rA   rq   rF   r_   r`   rm   r   rr   rs   s        rL   rl   zWOFF2Writer._decompileTable5  sÏ   € å�#‰hŒhˆØ�d”kÐ!Ð!ÝÐ9¸CÑ?Ñ@Ô@Ð@ØŒ;×Ò Ñ$Ô$ð 	ØˆFØŒ{˜3ÔÔ$ˆØ�&Š=ˆ=Ý'ˆJˆJØ�FŠ]ˆ]Ý'ˆJˆJØ�FŠ]ˆ]Ý'ˆJˆJå& sÑ+Ô+ˆJØ�
˜3‘”ˆØ"'ˆŒÔ˜3ÑØ�Š˜˜dœkÑ*Ô*Ð*Ð*Ð*rN   c                 óp   — | j         |                              | j         ¦  «        | j        |         _        dS )z3Compile table and store it in its 'data' attribute.N)rA   rb   r3   rF   ©rB   r7   s     rL   r«   zWOFF2Writer._compileTableI  s.   € à $¤¨CÔ 0× 8Ò 8¸¼Ñ EÔ EˆŒ�CÔÔÐÐrN   c                 óz  — t           t          t          | j        ¦  «        z  z   }| j                             ¦   «         D ]|\  }}|j        }||_        t          |¦  «        |_        |dk    r+t          |dd…         dz   |dd…         z   ¦  «        |_	        nt          |¦  «        |_	        ||j        dz   dz  z  }Œ}|S )z Compute the 'original' SFNT checksums, lengths and offsets for checksum
        adjustment calculation. Return the total size of the uncompressed font.
        rj   Né   s       é   é   éüÿÿÿ)
r   r   r0   r3   r•   rF   Ú
origOffsetre   r   ÚcheckSum)rB   r8   r7   rH   rF   s        rL   r–   z/WOFF2Writer._calcSFNTChecksumsLengthsAndOffsetsM  s½   € õ #Õ%;½cÀ$Ä+Ñ>NÔ>NÑ%NÑNˆØœ+×+Ò+Ñ-Ô-ð 	2ð 	2‰JˆC�Ø”:ˆDØ%ˆEÔÝ" 4™yœyˆEÔØ�fŠ}ˆ}Ý!-¨d°2°A°2¬h¸Ñ.DÀtÈBÈCÈCÄyÑ.PÑ!QÔ!Q�”�å!-¨dÑ!3Ô!3�”Ø�uÔ'¨!Ñ+¨rÑ1Ñ1ˆFˆFØˆrN   c                 óÌ  — | j         j        }| j                             ¦   «         D ]�\  }}d}||v r|                      |¦  «        }|�d|_        |€)|dk    r|                     d¦  «         |j        }d|_        | j        |_	        | 
                    | j        |¦  «         | xj        |j        z  c_        Œ‘|                      ¦   «          | j                             ¦   «         }|S )zReturn transformed font data.NTrV   rX   F)r@   rk   r3   r•   ÚtransformTablerQ   ÚdiscardrF   r„   r8   ÚsaveDatar=   r9   ÚwriteMasterChecksumÚgetvalue)rB   rk   r7   rH   rF   r¤   s         rL   r˜   zWOFF2Writer._transformTables]  sø   € à œOÔ=ÐØœ+×+Ò+Ñ-Ô-ð 	1ð 	1‰JˆC�ØˆDØÐ'Ð'Ð'Ø×*Ò*¨3Ñ/Ô/�ØÐ#Ø(,�EÔ%Øˆ|Ø˜&’=�=ð &×-Ò-¨fÑ5Ô5Ð5à”z�Ø$)�Ô!ØÔ/ˆEŒLØ�NŠN˜4Ô/°Ñ6Ô6Ð6ØÐ Ô  E¤LÑ0Ð Ô Ð Ø× Ò Ñ"Ô"Ð"ØÔ'×0Ò0Ñ2Ô2ˆØˆrN   c                 ór  — |dk    rd}n­|dk    rBdD ]}|                       |¦  «         Œ| j        d         }|                     | j        ¦  «        }ne|dk    rMd| j        vrdS dD ]}|                       |¦  «         Œ| j        d         }|                     | j        ¦  «        }nt	          d|z  ¦  «        ‚|S )	z˜Return transformed table data, or None if some pre-conditions aren't
        met -- in which case, the non-transformed table data will be used.
        rX   rN   rV   )rh   rj   rX   rV   rY   N)rh   rj   ri   rX   rV   rY   z#Transform for table '%s' is unknown)rl   rA   Ú	transformr3   r   )rB   r7   rF   rc   ro   s        rL   r¹   zWOFF2Writer.transformTableu  sã   € ð �&Š=ˆ=ØˆDˆDØ�FŠ]ˆ]Ø7ð *ð *�Ø×$Ò$ SÑ)Ô)Ð)Ð)Øœ FÔ+ˆIØ×&Ò& t¤{Ñ3Ô3ˆDˆDØ�FŠ]ˆ]Ø˜Tœ[Ð(Ð(Ø�ØGð *ð *�Ø×$Ò$ SÑ)Ô)Ð)Ð)Øœ FÔ+ˆIØ×&Ò& t¤{Ñ3Ô3ˆDˆDåÐBÀSÑHÑIÔIÐIØˆrN   c                 ó   — g }| j                              ¦   «         D ]'}|                     | j         |         j        ¦  «         Œ(t	          | j        d¦  «        \  | _        | _        | _        t          j
        t          | ¦  «        }t          | j                              ¦   «         ¦  «        }|D ]Z\  }}t          ¦   «         }|j        |_        |j        |_        |j        |_        |j        |_        ||                     ¦   «         z   }Œ[t*          t-          | j         ¦  «        t.          z  z   }|t-          |¦  «        k    sJ ‚|                     t1          |¦  «        ¦  «         t3          |¦  «        dz  }d|z
  dz  }	|	S )zCalculate checkSumAdjustment.é   l   ÿÿ l   º/ac )r3   ÚkeysÚappendr·   r   r5   ÚsearchRangeÚentrySelectorÚ
rangeShiftr   Úpackr   r”   r•   r   r7   r¶   r8   re   r9   ÚtoStringr   r0   r   r   Úsum)
rB   Ú	checksumsr7   r¦   r3   rH   Ú	sfntEntryÚdirectory_endÚchecksumÚchecksumadjustments
             rL   Ú_calcMasterChecksumzWOFF2Writer._calcMasterChecksum‹  sq  € àˆ	Ø”;×#Ò#Ñ%Ô%ð 	8ð 	8ˆCØ×Ò˜Tœ[¨Ô-Ô6Ñ7Ô7Ð7Ð7õ AOØŒN˜BñA
ô A
Ñ=ˆÔ˜$Ô,¨d¬oõ ”LÕ!4°dÑ;Ô;ˆ	Ý˜œ×)Ò)Ñ+Ô+Ñ,Ô,ˆØ ð 	9ð 	9‰JˆC�Ý*Ñ,Ô,ˆIØ!œIˆIŒMØ!&¤ˆIÔØ$Ô/ˆIÔØ$Ô/ˆIÔØ! I×$6Ò$6Ñ$8Ô$8Ñ8ˆIˆIå)­C°´Ñ,<Ô,<Õ?UÑ,UÑUˆØ¥ I¡¤Ò.Ð.Ð.Ð.à×Ò� iÑ0Ô0Ñ1Ô1Ð1Ý�y‘>”> JÑ.ˆà(¨8Ñ3°zÑAÐØ!Ð!rN   c                 óâ   — |                       ¦   «         }| j                             | j        d         j        dz   ¦  «         | j                             t          j        d|¦  «        ¦  «         dS )z0Write checkSumAdjustment to the transformBuffer.rj   r²   z>LN)rÏ   r=   r-   r3   r8   r¡   ÚstructrÇ   )rB   rÎ   s     rL   r¼   zWOFF2Writer.writeMasterChecksum¨  sd   € à!×5Ò5Ñ7Ô7ÐØÔ×!Ò! $¤+¨fÔ"5Ô"<¸qÑ"@ÑAÔAÐAØÔ×"Ò"¥6¤;¨tÐ5GÑ#HÔ#HÑIÔIÐIÐIÐIrN   c                 óâ   — | j         }| j                             ¦   «         D ]&}|t          |                     ¦   «         ¦  «        z  }Œ'|| j        z  }|dz   dz  }|                      |¦  «        }|S )zLCalculate total size of WOFF2 font, including any meta- and/or private data.r´   rµ   )rƒ   r3   Úvaluesr0   rÈ   r:   Ú_calcFlavorDataOffsetsAndSize)rB   r8   rH   s      rL   r›   zWOFF2Writer._calcTotalSize®  sx   € àÔ#ˆØ”[×'Ò'Ñ)Ô)ð 	,ð 	,ˆEØ•c˜%Ÿ.š.Ñ*Ô*Ñ+Ô+Ñ+ˆFˆFØ�$Ô*Ñ*ˆØ˜1‘* Ñ"ˆØ×3Ò3°FÑ;Ô;ˆØˆrN   c                 óÊ  — |}| j         }|j        rnt          |j        ¦  «        | _        || _        t          j        |j        t
          j        ¬¦  «        | _        t          | j        ¦  «        | _	        || j	        z  }ndx| _        x| _	        | _        d| _        |j
        r3|dz   dz  }|| _        t          |j
        ¦  «        | _        || j        z  }ndx| _        | _        |S )z@Calculate offsets and lengths for any meta- and/or private data.rŽ   r   rN   r´   rµ   )r@   ÚmetaDatar0   ÚmetaOrigLengthÚ
metaOffsetr;   r™   Ú	MODE_TEXTÚcompressedMetaDataÚ
metaLengthÚprivDataÚ
privOffsetÚ
privLength)rB   Ústartr8   rF   s       rL   rÔ   z)WOFF2Writer._calcFlavorDataOffsetsAndSize¸  så   € àˆØŒˆØŒ=ð 
	*Ý"% d¤mÑ"4Ô"4ˆDÔØ$ˆDŒOÝ&,¤oØ”¥FÔ$4ð'ñ 'ô 'ˆDÔ#õ " $Ô"9Ñ:Ô:ˆDŒOØ�d”oÑ%ˆFˆFàFGÐGˆDŒOÐG˜dœo°Ô0CØ&)ˆDÔ#ØŒ=ð 	2à˜q‘j BÑ&ˆFØ$ˆDŒOÝ! $¤-Ñ0Ô0ˆDŒOØ�d”oÑ%ˆFˆFà01Ð1ˆDŒO˜dœoØˆrN   c                 ó¸   — | j         }|j        �|j        �|j        |j        fS d| j        v r-t	          j        d| j        d         j        dd…         ¦  «        S dS )z;Return the WOFF2 font's (majorVersion, minorVersion) tuple.Nrj   z>HHr"   r²   )r   r   )r@   r�   rž   r3   rÑ   r1   rF   ©rB   rF   s     rL   rœ   zWOFF2Writer._getVersionÑ  sd   € àŒˆØÔÐ(¨TÔ->Ð-JØÔ$ dÔ&7Ð7Ð7ð ˜œÐ$Ð$Ý”} U¨D¬K¸Ô,?Ô,DÀQÀqÀSÔ,IÑJÔJÐJà�trN   c                 ó    — t          j        | j        | ¦  «        }| j                             ¦   «         D ]}||                     ¦   «         z   }Œ|S )z"Return WOFF2 table directory data.)r   rÇ   r‚   r3   rÓ   rÈ   )rB   r¦   rH   s      rL   r    zWOFF2Writer._packTableDirectoryÝ  sO   € å”L Ô!5°tÑ<Ô<ˆ	Ø”[×'Ò'Ñ)Ô)ð 	5ð 	5ˆEØ! E§N¢NÑ$4Ô$4Ñ4ˆIˆIØÐrN   c                 óÖ  — | j         }| j        j        }|r|rt          |d¬¦  «        }|r]| j                             | j        ¦  «         | j                             ¦   «         | j        k    sJ ‚| j                             |¦  «         |r_| j                             | j	        ¦  «         | j                             ¦   «         | j	        k    sJ ‚| j                             |¦  «         dS dS )z<Write metadata and/or private data using appropiate padding.r"   r�   N)
rÚ   r@   rÜ   r   r+   r-   rØ   r>   r¡   rÝ   )rB   rÚ   rÜ   s      rL   r¢   zWOFF2Writer._writeFlavorDataä  sí   € à!Ô4ÐØ”?Ô+ˆØð 	A (ð 	AÝ!$Ð%7¸aÐ!@Ñ!@Ô!@ÐØð 	0ØŒI�NŠN˜4œ?Ñ+Ô+Ð+Ø”9—>’>Ñ#Ô# t¤Ò6Ð6Ð6Ð6ØŒI�OŠOÐ.Ñ/Ô/Ð/Øð 	&ØŒI�NŠN˜4œ?Ñ+Ô+Ð+Ø”9—>’>Ñ#Ô# t¤Ò6Ð6Ð6Ð6ØŒI�OŠO˜HÑ%Ô%Ð%Ð%Ð%ð	&ð 	&rN   c                 ó   — dS )NTr{   r­   s    rL   ÚreordersTableszWOFF2Writer.reordersTablesó  s   € ØˆtrN   )r~   NN)r"   )rw   rx   ry   rz   rM   rŠ   r§   r’   r“   rl   r«   r–   r˜   r¹   rÏ   r¼   r›   rÔ   rœ   r    r¢   rå   r{   rN   rL   r}   r}   ²   sH  € € € € € Ø€Fð 'ØØð Hð  Hð  Hð  HðD!ð !ð !ð$4 ð 4 ð 4 ðl$ð $ð $ð $ð#ð #ð #ð+ð +ð +ð(Fð Fð Fðð ð ð ð ð ð0ð ð ð,"ð "ð "ð:Jð Jð Jðð ð ðð ð ð2
ð 
ð 
ðð ð ð&ð &ð &ðð ð ð ð rN   r}   aÒ  
		> # big endian
		signature:           4s   # "wOF2"
		sfntVersion:         4s
		length:              L    # total woff2 file size
		numTables:           H    # number of tables
		reserved:            H    # set to 0
		totalSfntSize:       L    # uncompressed size
		totalCompressedSize: L    # compressed 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
)?Úcmaprj   ri   rY   rh   ÚnamezOS/2Úpostzcvt ÚfpgmrV   rX   ÚprepzCFF ÚVORGÚEBDTÚEBLCÚgaspÚhdmxÚkernÚLTSHÚPCLTÚVDMXÚvheaÚvmtxÚBASEÚGDEFÚGPOSÚGSUBÚEBSCÚJSTFÚMATHÚCBDTÚCBLCÚCOLRÚCPALzSVG ÚsbixÚacntÚavarÚbdatÚblocÚbslnÚcvarÚfdscÚfeatÚfmtxr©   ÚgvarÚhstyÚjustÚlcarÚmortÚmorxÚopbdÚpropÚtrakÚZapfÚSilfÚGlatÚGlocÚFeatÚSillz5
		> # big endian
		flags: B  # table type and flags
z5
		> # big endian
		tag: 4s  # 4-byte tag (optional)
é?   é   r#   rª   a¥  
		> # big endian
		version:                  H  # = 0x0000
		optionFlags:              H  # Bit 0: we have overlapSimpleBitmap[], Bits 1-15: reserved
		numGlyphs:                H  # Number of glyphs
		indexFormat:              H  # Offset format for loca table
		nContourStreamSize:       L  # Size of nContour stream
		nPointsStreamSize:        L  # Size of nPoints stream
		flagStreamSize:           L  # Size of flag stream
		glyphStreamSize:          L  # Size of glyph stream
		compositeStreamSize:      L  # Size of composite stream
		bboxStreamSize:           L  # Comnined size of bboxBitmap and bboxStream
		instructionStreamSize:    L  # Size of instruction stream
zF
		>	# big endian
		xMin:				h
		yMin:				h
		xMax:				h
		yMax:				h
r‡   c                 óf   — 	 t                                | ¦  «        S # t          $ r
 t          cY S w xY w)zEReturn index of 'tag' in woff2KnownTags list. Return 63 if not found.)Úwoff2KnownTagsÚindexÚ
ValueErrorÚwoff2UnknownTagIndex)r7   s    rL   rˆ   rˆ   ‚  sB   € ð$Ý×#Ò# CÑ(Ô(Ð(øÝð $ð $ð $Ý#Ð#Ð#Ð#ð$øøøs   ‚ œ0¯0c                   óŒ   — e Zd Zd„ Zd„ Zd„ Zed„ ¦   «         Zej        d„ ¦   «         Zed„ ¦   «         Z	e	j        d„ ¦   «         Z	dS )	r.   c                 óú   — |                      ¦   «         }|                     t          ¦  «        }|                      |¦  «        }t	          |¦  «        t	          |¦  «        z
  }|                     ||z   ¦  «         d S rv   )r>   r,   Úwoff2DirectoryEntryMaxSizeÚ
fromStringr0   r-   )rB   r+   ÚposrF   ÚleftÚconsumeds         rL   r6   zWOFF2DirectoryEntry.fromFile‹  sd   € Ø�iŠi‰kŒkˆØ�yŠyÕ3Ñ4Ô4ˆØ�Š˜tÑ$Ô$ˆÝ�t‘9”9�s 4™yœyÑ(ˆØ�	Š	�#˜‘.Ñ!Ô!Ð!Ð!Ð!rN   c                 ó`  — t          |¦  «        dk     rt          d¦  «        ‚t          j        t          || ¦  «        \  }}| j        dz  dk    rFt          |¦  «        t          k     rt          d¦  «        ‚t          j        t          || ¦  «        \  }}nt          | j        dz           | _	        t          | j	        ¦  «        | _	        t          |¦  «        \  | _        }| j        | _        | j        r<t          |¦  «        \  | _        }| j	        dk    r| j        dk    rt          d¦  «        ‚|S )Nr‡   z)can't read table 'flags': not enough datar  z'can't read table 'tag': not enough datarX   r   z1the transformLength of the 'loca' table must be 0)r0   r   r   Úunpack2Úwoff2FlagsFormatr‰   Úwoff2UnknownTagSizeÚwoff2UnknownTagFormatr  r7   r   ÚunpackBase128re   r9   rQ   )rB   rF   Údummys      rL   r$  zWOFF2DirectoryEntry.fromString’  s  € Ýˆt‰9Œ9�qŠ=ˆ=ÝÐHÑIÔIÐIÝ”oÕ&6¸¸dÑCÔC‰ˆˆtØŒ:˜Ñ Ò$Ð$å�4‰yŒyÕ.Ò.Ð.Ý Ð!JÑKÔKÐKÝ!œ/Õ*?ÀÀtÑLÔL‰KˆE�4�4õ & d¤j°4Ñ&7Ô8ˆDŒHÝ�t”x‘=”=ˆŒÝ -¨dÑ 3Ô 3ÑˆŒ˜Ø”oˆŒØÔð 	VÝ -¨dÑ 3Ô 3ÑˆDŒK˜ØŒx˜6Ò!Ð! d¤k°QÒ&6Ð&6Ý Ð!TÑUÔUÐUàˆrN   c                 ó  — t          | j        ¦  «        }| j        dz  dk    r/|t          j        d| j                             ¦   «         ¦  «        z  }|t          | j        ¦  «        z  }| j        r|t          | j	        ¦  «        z  }|S )Nr  z>4s)
r   r‰   rÑ   rÇ   r7   ÚtobytesÚpackBase128re   rQ   r9   rá   s     rL   rÈ   zWOFF2DirectoryEntry.toString¨  s   € Ý�t”zÑ"Ô"ˆØŒJ˜Ñ $Ò&Ð&Ø•F”K  t¤x×'7Ò'7Ñ'9Ô'9Ñ:Ô:Ñ:ˆDØ•˜DœOÑ,Ô,Ñ,ˆØÔð 	-Ø•K ¤Ñ,Ô,Ñ,ˆDØˆrN   c                 ó   — | j         dz	  S )zŠReturn bits 6-7 of table entry's flags, which indicate the preprocessing
        transformation version number (between 0 and 3).
        é   ©r‰   r­   s    rL   ÚtransformVersionz$WOFF2DirectoryEntry.transformVersion±  s   € ð
 Œz˜Q‰ÐrN   c                 óN   — d|cxk    rdk    sn J ‚| xj         |dz  z  c_         d S )Nr   r´   r3  r4  )rB   Úvalues     rL   r5  z$WOFF2DirectoryEntry.transformVersion¸  s5   € à�EˆˆŠˆ˜QŠˆˆˆˆˆØˆ
Œ
�e˜q‘jÑ ˆ
Œ
ˆ
ˆ
rN   c                 ó@   — | j         dv r| j        dk    S | j        dk    S )zCReturn True if the table has any transformation, else return False.>   rV   rX   r´   r   )r7   r5  r­   s    rL   rQ   zWOFF2DirectoryEntry.transformed½  s.   € ð Œ8Ð'Ð'Ð'ØÔ(¨AÒ-Ð-àÔ(¨AÒ-Ð-rN   c                 óZ   — | j         dv r|sdnd| _        d S t          |¦  «        | _        d S )N>   rV   rX   r´   r   )r7   r5  Úint)rB   ÚbooleanValues     rL   rQ   zWOFF2DirectoryEntry.transformedÉ  s?   € ð
 Œ8Ð'Ð'Ð'Ø-9Ð$@ A A¸qˆDÔ!Ð!Ð!å$'¨Ñ$5Ô$5ˆDÔ!Ð!Ð!rN   N)
rw   rx   ry   r6   r$  rÈ   Úpropertyr5  ÚsetterrQ   r{   rN   rL   r.   r.   Š  sµ   € € € € € ð"ð "ð "ðð ð ð,ð ð ð ðð ñ „Xðð Ôð!ð !ñ Ôð!ð ð	.ð 	.ñ „Xð	.ð Ôð6ð 6ñ Ôð6ð 6ð 6rN   r.   c                   ó*   ‡ — e Zd ZdZdd„Zˆ fd„Zˆ xZS )r_   zˆSame as parent class. The only difference is that it attempts to preserve
    the 'indexFormat' as encoded in the WOFF2 glyf table.
    Nc                 ó2   — t          |pd¦  «        | _        d S )NrX   ©r   ÚtableTagr°   s     rL   rM   zWOFF2LocaTable.__init__Ù  ó   € Ý˜C˜M 6Ñ*Ô*ˆŒˆˆrN   c                 óÄ  •— 	 t          | j        ¦  «        }n'# t          $ r |                      g ¦  «         d}Y nw xY wd|v rõt	          |d         d¦  «        rß|d         j        }|dk    ry|dk    rt          d¦  «        ‚t          d„ | j        D ¦   «         ¦  «        st          d¦  «        ‚t          j        d¦  «        }| j        D ]}| 	                    |d	z  ¦  «         Œnt          j        d
| j        ¦  «        }t          j        dk    r|                     ¦   «          |                     ¦   «         }n(t          t          | ¦  «                             |¦  «        }|S )Nr   rV   ÚindexFormati   z,indexFormat is 0 but local offsets > 0x20000c              3   ó(   K  — | ]}|d z  dk    V — ŒdS )r#   r   Nr{   )Ú.0Úls     rL   ú	<genexpr>z)WOFF2LocaTable.compile.<locals>.<genexpr>è  s*   è è € Ð>Ð>¨!˜1˜q™5 Aš:Ð>Ð>Ð>Ð>Ð>Ð>rN   z5indexFormat is 0 but local offsets not multiples of 2ÚHr#   ÚIÚbig)ÚmaxÚ	locationsÚAttributeErrorÚsetrP   rD  r   ÚallÚarrayrÃ   ÚsysÚ	byteorderÚbyteswapr0  Úsuperr_   rb   )rB   rA   Úmax_locationrD  rM  ÚlocationrF   Ú	__class__s          €rL   rb   zWOFF2LocaTable.compileÜ  s€  ø€ ð	Ý˜tœ~Ñ.Ô.ˆLˆLøÝð 	ð 	ð 	Ø�HŠH�R‰LŒLˆLØˆLˆLˆLð	øøøð �VÐÐ¥¨¨v¬¸Ñ FÔ FÐà  œ.Ô4ˆKØ˜aÒÐØ 7Ò*Ð*Ý$Ð%SÑTÔTÐTÝÐ>Ð>¨t¬~Ð>Ñ>Ô>Ñ>Ô>ð Ý$ØOñô ð õ "œK¨Ñ,Ô,�	Ø $¤ð 4ð 4�HØ×$Ò$ X°¡]Ñ3Ô3Ð3Ð3ð4õ "œK¨¨T¬^Ñ<Ô<�	ÝŒ} Ò%Ð%Ø×"Ò"Ñ$Ô$Ð$Ø×$Ò$Ñ&Ô&ˆDˆDõ �¨Ñ.Ô.×6Ò6°vÑ>Ô>ˆDØˆs   ƒ ˜!<»<rv   )rw   rx   ry   Ú__doc__rM   rb   Ú__classcell__©rX  s   @rL   r_   r_   Ô  sV   ø€ € € € € ðð ð+ð +ð +ð +ðð ð ð ð ð ð ð ð rN   r_   rX   c                   ó~   — e Zd 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„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )r`   z1Decoder/Encoder for WOFF2 'glyf' table transform.)ÚnContourStreamÚnPointsStreamÚ
flagStreamÚglyphStreamÚcompositeStreamÚ
bboxStreamÚinstructionStreamNc                 ó2   — t          |pd¦  «        | _        d S )NrV   r@  r°   s     rL   rM   zWOFF2GlyfTable.__init__  rB  rN   c                 óv  — t          |¦  «        }|t          k     rt          d¦  «        ‚t          j        t
          || ¦  «        \  }}t          }| j        D ]=}t          | |dz   ¦  «        }t          | ||d|…         ¦  «         ||d…         }||z  }Œ>| j	        t          z  }d| _        |r4| j        dz   dz	  }	t          j        d|d|	…         ¦  «        | _        ||	z  }||k    rt          d||fz  ¦  «        ‚| j        dz   d	z	  d
z  }
| j        d|
…         }t          j        d|¦  «        | _        | j        |
d…         | _        t          j        d| j        ¦  «        | _        t"          j        dk    r| j                             ¦   «          t          | j        ¦  «        | j        k    sJ ‚d|v r| j        |d         _        	 |                     ¦   «         | _        n#  d| _        Y nxY w| j        €@dg| _        | j                             d„ t3          d| j        ¦  «        D ¦   «         ¦  «         nHt          | j        ¦  «        | j        k    r+t          dt          | j        ¦  «        | j        fz  ¦  «        ‚i x}| _        t7          | j        ¦  «        D ]\  }}|                      |¦  «        }|||<   Œ dS )z"Decompile transformed 'glyf' data.znot enough 'glyf' dataÚSizeNé   r´   ÚBzJincorrect size of transformed 'glyf' table: expected %d, received %d bytesé   r  r#   ÚhrK  rj   z.notdefc                 ó   — g | ]}d |z  ‘ŒS )z	glyph%.5dr{   )rF  rG   s     rL   ú
<listcomp>z.WOFF2GlyfTable.reconstruct.<locals>.<listcomp>8  s   € Ð#VÐ#VÐ#V¸ K°!¡OÐ#VÐ#VÐ#VrN   r‡   z2incorrect glyphOrder: expected %d glyphs, found %d)r0   Úwoff2GlyfTableFormatSizer   r   r)  Úwoff2GlyfTableFormatÚ
subStreamsÚgetattrÚsetattrÚoptionFlagsÚwoff2OverlapSimpleBitmapFlagÚoverlapSimpleBitmapÚ	numGlyphsrQ  rb  Ú
bboxBitmapr]  rR  rS  rT  rD  ÚindexToLocFormatÚgetGlyphOrderÚ
glyphOrderÚextendr4   ÚglyphsÚ	enumerateÚ_decodeGlyph)rB   rF   rA   ÚinputDataSizer.  r8   Ústreamr‘   ÚhasOverlapSimpleBitmapÚoverlapSimpleBitmapSizeÚbboxBitmapSizerv  r{  ÚglyphIDÚ	glyphNameÚglyphs                   rL   ra   zWOFF2GlyfTable.reconstruct
  sð  € å˜D™	œ	ˆàÕ3Ò3Ð3ÝÐ5Ñ6Ô6Ð6Ý”oÕ&:¸DÀ$ÑGÔG‰ˆˆtÝ)ˆà”oð 	ð 	ˆFÝ˜4 ¨&¡Ñ1Ô1ˆDÝ�D˜& $ u¨ u¤+Ñ.Ô.Ð.Ø˜˜˜”;ˆDØ�d‰NˆFˆFà!%Ô!1Õ4PÑ!PÐØ#'ˆÔ Ø!ð 	.Ø'+¤~¸Ñ'9¸aÑ&?Ð#Ý',¤{°3¸Ð=UÐ>UÐ=UÔ8VÑ'WÔ'WˆDÔ$ØÐ-Ñ-ˆFà�]Ò"Ð"ÝØ\Ø˜=Ð)ñ*ñô ð ð
  œ>¨BÑ.°1Ñ4¸Ñ:ˆØ”_ _ n _Ô5ˆ
Ýœ+ c¨:Ñ6Ô6ˆŒØœ/¨.¨/¨/Ô:ˆŒå#œk¨#¨tÔ/BÑCÔCˆÔÝŒ=˜EÒ!Ð!ØÔ×(Ò(Ñ*Ô*Ð*Ý�4Ô&Ñ'Ô'¨4¬>Ò9Ð9Ð9Ð9à�VÐÐØ.2Ô.>ˆF�6ŒNÔ+ð	#Ø$×2Ò2Ñ4Ô4ˆDŒOˆOøð	#Ø"ˆDŒOˆOˆOøøøØŒ?Ð"Ø(˜kˆDŒOØŒO×"Ò"Ð#VÐ#V½UÀ1ÀdÄnÑ=UÔ=UÐ#VÑ#VÔ#VÑWÔWÐWÐWå�4”?Ñ#Ô# t¤~Ò5Ð5Ý ØHÝ˜4œ?Ñ+Ô+¨T¬^Ð<ñ=ñô ð ð
  "Ð!ˆ�”Ý"+¨D¬OÑ"<Ô"<ð 	&ð 	&ÑˆG�YØ×%Ò% gÑ.Ô.ˆEØ %ˆF�9ÑÐð	&ð 	&s   ÇG Ç	G*c                 ó  ‡ — t          ‰ j        ¦  «        ‰ _        t          ‰ j        ¦  «        ‰ j        k    sJ ‚d|v r‰ j        |d         _        |d         j        ‰ _        ‰ j        D ]}t          ‰ |d¦  «         Œ‰ j        dz   dz	  dz  }t          j        ddg|z  ¦  «        ‰ _	        t          j        ddg‰ j        d	z   d
z	  z  ¦  «        ‰ _
        t          ‰ j        ¦  «        D ]*}	 ‰                      |¦  «         Œ# t          $ r Y  dS w xY wt          ‰ j
        ¦  «        }‰ j	                             ¦   «         ‰ j        z   ‰ _        ‰ j        D ]1}t          ‰ |dz   t          t#          ‰ |¦  «        ¦  «        ¦  «         Œ2d‰ _        d‰ _        |r‰ xj        t(          z  c_        t+          j        t.          ‰ ¦  «        }|t1          ˆ fd„‰ j        D ¦   «         ¦  «        z  }|r|‰ j
                             ¦   «         z  }|S )zReturn transformed 'glyf' datarh   rj   rN   ri  r  r#   rh  r   rg  r´   Nrf  c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r{   )rp  )rF  ÚsrB   s     €rL   rl  z,WOFF2GlyfTable.transform.<locals>.<listcomp>b  s#   ø€ ÐEÐEÐE°�7 4¨Ñ+Ô+ÐEÐEÐErN   )r0   r{  ru  ry  rw  rD  ro  rq  rQ  rv  rt  r4   Ú_encodeGlyphÚNotImplementedErrorÚanyr0  rb  rp  Úversionrr  rs  r   rÇ   rn  r
   )rB   rA   r  r‚  rƒ  r€  rF   s   `      rL   r¿   zWOFF2GlyfTable.transformE  s(  ø€ å˜Tœ[Ñ)Ô)ˆŒÝ�4”?Ñ#Ô# t¤~Ò5Ð5Ð5Ð5Ø�VÐÐØ'+¤~ˆF�6ŒNÔ$Ø! &œ>Ô:ˆÔà”oð 	'ð 	'ˆFÝ�D˜& #Ñ&Ô&Ð&Ð&Øœ>¨BÑ.°1Ñ4¸Ñ:ˆÝœ+ c¨A¨3°Ñ+?Ñ@Ô@ˆŒå#(¤;¨s°Q°C¸D¼NÈQÑ<NÐSTÑ;TÑ4UÑ#VÔ#VˆÔ Ý˜Tœ^Ñ,Ô,ð 	ð 	ˆGðØ×!Ò! 'Ñ*Ô*Ð*Ð*øÝ&ð ð ð Ø�t�t�tðøøøå!$ TÔ%=Ñ!>Ô!>Ðàœ/×1Ò1Ñ3Ô3°d´oÑEˆŒØ”oð 	Gð 	GˆFÝ�D˜& 6™/­3­w°t¸VÑ/DÔ/DÑ+EÔ+EÑFÔFÐFÐFØˆŒØˆÔØ!ð 	=ØÐÔÕ <Ñ<ÐÔÝŒ|Õ0°$Ñ7Ô7ˆØ•	ÐEÐEÐEÐE°T´_ÐEÑEÔEÑFÔFÑFˆØ!ð 	7Ø�DÔ,×4Ò4Ñ6Ô6Ñ6ˆDØˆs   Ã+DÄ
DÄDc                 ó\  — t          d¦  «                             ¦   «         }| j        |         |_        |j        dk    r|S |                     ¦   «         r|                      |¦  «         n+|                      |¦  «         |                      ||¦  «         |                      ||¦  «         |S )NrV   r   )	r   ÚGlyphr]  ÚnumberOfContoursÚisCompositeÚ_decodeComponentsÚ_decodeCoordinatesÚ_decodeOverlapSimpleFlagÚ_decodeBBox)rB   rƒ  r…  s      rL   r}  zWOFF2GlyfTable._decodeGlyphg  s®   € Ý˜vÑ&Ô&×,Ò,Ñ.Ô.ˆØ!%Ô!4°WÔ!=ˆÔØÔ! QÒ&Ð&ØˆLØ×ÒÑ Ô ð 	:Ø×"Ò" 5Ñ)Ô)Ð)Ð)à×#Ò# EÑ*Ô*Ð*Ø×)Ò)¨%°Ñ9Ô9Ð9Ø×Ò˜ %Ñ(Ô(Ð(ØˆrN   c                 ó&  — | j         }g |_        d}d}|r\t          d¦  «                             ¦   «         }|                     || ¦  «        \  }}}||z  }|j                             |¦  «         |°\|| _         |r|                      |¦  «         d S d S )Nr‡   r   rV   )ra  Ú
componentsr   ÚGlyphComponentrr   rÃ   Ú_decodeInstructions)rB   r…  rF   ÚmoreÚhaveInstructionsÚ	componentÚ	haveInstrs          rL   r‘  z WOFF2GlyfTable._decodeComponentst  s¼   € ØÔ#ˆØˆÔØˆØÐØð 	/Ý& vÑ.Ô.×=Ò=Ñ?Ô?ˆIØ$-×$7Ò$7¸¸dÑ$CÔ$CÑ!ˆD�)˜TØ/°)Ñ;ÐØÔ×#Ò# IÑ.Ô.Ð.ð	 ð 	/ð
  $ˆÔØð 	,Ø×$Ò$ UÑ+Ô+Ð+Ð+Ð+ð	,ð 	,rN   c                 ó  — | j         }g }d}t          |j        ¦  «        D ].}t          |¦  «        \  }}||z  }|                     |¦  «         Œ/||_        || _         |                      |¦  «         |                      |¦  «         d S ©Nr   )r^  r4   r�  Úunpack255UShortrÃ   ÚendPtsOfContoursÚ_decodeTripletsr˜  )rB   r…  rF   r   ÚendPointrG   ÚptsOfContours          rL   r’  z!WOFF2GlyfTable._decodeCoordinates‚  s    € ØÔ!ˆØÐØˆÝ�uÔ-Ñ.Ô.ð 	.ð 	.ˆAÝ!0°Ñ!6Ô!6ÑˆL˜$Ø˜Ñ$ˆHØ×#Ò# HÑ-Ô-Ð-Ð-Ø!1ˆÔØ!ˆÔØ×Ò˜UÑ#Ô#Ð#Ø× Ò  Ñ'Ô'Ð'Ð'Ð'rN   c                 óª   — | j         �|j        dk    rd S |dz	  }|dz  }| j         |         d|z	  z  r!|j        dxx         t          j        z  cc<   d S d S ©Nr   r´   rg  é€   )rt  r�  r‰   r   ÚflagOverlapSimple©rB   r…  rƒ  ÚbyteÚbits        rL   r“  z'WOFF2GlyfTable._decodeOverlapSimpleFlag�  sq   € ØÔ#Ð+¨uÔ/EÈÒ/JÐ/JØˆFØ˜!‰|ˆØ˜‰kˆØÔ# DÔ)¨T°S©[Ñ9ð 	9ØŒK˜ˆNˆNŒN�hÔ8Ñ8ˆNˆN‰NˆNˆNð	9ð 	9rN   c                 óæ   — | j         }| j        }t          |¦  «        \  }}t          j        ¦   «         |_        |j                             |d |…         ¦  «         || _         ||d …         | _        d S rv   )r`  rc  rŸ  r   ÚProgramÚprogramÚfromBytecode)rB   r…  r`  rc  ÚinstructionLengths        rL   r˜  z"WOFF2GlyfTable._decodeInstructions—  s{   € ØÔ&ˆØ Ô2ÐÝ)8¸Ñ)EÔ)EÑ&Ð˜;Ý!Ô)Ñ+Ô+ˆŒØŒ×"Ò"Ð#4Ð5GÐ6GÐ5GÔ#HÑIÔIÐIØ&ˆÔØ!2Ð3DÐ3EÐ3EÔ!FˆÔÐÐrN   c                 ó$  — t          | j        |dz	           d|dz  z	  z  ¦  «        }|                     ¦   «         r|st          d|z  ¦  «        ‚|r*t	          j        t          | j        |¦  «        \  }| _        d S |                     | ¦  «         d S )Nr´   r¦  rg  z%no bbox values for composite glyph %d)	Úboolrv  r�  r   r   r)  Ú
bboxFormatrb  ÚrecalcBounds)rB   rƒ  r…  ÚhaveBBoxr.  s        rL   r”  zWOFF2GlyfTable._decodeBBox   sœ   € Ý˜œ¨°1©Ô5¸À'ÈAÁ+Ñ9NÑOÑPÔPˆØ×ÒÑÔð 	P xð 	PÝÐDÀwÑNÑOÔOÐOØð 	%Ý%,¤_µZÀÄÐRWÑ%XÔ%XÑ"ˆE�4”?�?�?à×Ò˜tÑ$Ô$Ð$Ð$Ð$rN   c                 óJ  — d„ }|j         d         dz   }|}|t          | j        ¦  «        k    rt          d¦  «        ‚| j        d |…         }| j        |d …         | _        t	          j        d|¦  «        }t	          j        d| j        ¦  «        }t          |¦  «        }||k    sJ ‚d}	d}
t          d¦  «        j                             |¦  «        |_	        t	          j        d¦  «        |_
        d}t          |¦  «        D �]}||         }t          |dz	  ¦  «         }|d	z  }|d
k     rd}n|dk     rd}n|dk     rd}nd}||z   |k    sJ ‚|dk     rd} |||dz  dz  ||         z   ¦  «        }�nY|dk     r" |||dz
  dz  dz  ||         z   ¦  «        }d}�n1|d
k     rD|dz
  }||         } ||d|dz  z   |dz	  z   ¦  «        } ||dz	  d|dz  dz  z   |dz  z   ¦  «        }nç|dk     rK|d
z
  } ||d|dz  dz  z   ||         z   ¦  «        } ||dz	  d|dz  dz	  dz  z   ||dz            z   ¦  «        }n–|dk     rH||dz            } ||||         dz  |dz	  z   ¦  «        } ||dz	  |dz  dz  ||dz            z   ¦  «        }nH ||||         dz  ||dz            z   ¦  «        } ||dz	  ||dz            dz  ||dz            z   ¦  «        }||z  }|	|z  }	|
|z  }
|	|
f|j	        |<   |j
                             t          |¦  «        ¦  «         �Œ|}| j        |d …         | _        d S )Nc                 óB   — d|k    r|dk     s
J d¦   «         ‚| dz  r|n| S )Nr   i   zinteger overflowr‡   r{   )ÚflagÚbasevals     rL   ÚwithSignz0WOFF2GlyfTable._decodeTriplets.<locals>.withSignª  s3   € Ø˜’<�< G¨e¢O O OÐ5G¡O¤O OØ" Q™hÐ4�7�7¨W¨HÐ4rN   r   r‡   znot enough 'flagStream' datarh  r   rV   rg  é   éT   éx   r#   é|   r´   r"   é
   é   é   é0   r³   é   r²   )r   r0   r_  r   rQ  r`  r   ÚGlyphCoordinatesÚzerosÚcoordinatesr‰   r4   r±  rÃ   r:  )rB   r…  r¹  ÚnPointsÚflagSizeÚ	flagsDatar‰   ÚtripletsÚ	nTripletsÚxÚyÚtripletIndexrG   r·  ÚonCurveÚnBytesÚdxÚdyÚb0Úb1Úb2ÚbytesConsumeds                         rL   r¡  zWOFF2GlyfTable._decodeTriplets©  s  € ð	5ð 	5ð 	5ð Ô(¨Ô,¨qÑ0ˆØˆØ•c˜$œ/Ñ*Ô*Ò*Ð*ÝÐ;Ñ<Ô<Ð<Ø”O I X IÔ.ˆ	Øœ/¨(¨)¨)Ô4ˆŒÝ”˜C Ñ+Ô+ˆå”;˜s DÔ$4Ñ5Ô5ˆÝ˜‘M”Mˆ	Ø˜)Ò#Ð#Ð#Ð#àˆØˆÝ*¨6Ñ2Ô2ÔC×IÒIÈ'ÑRÔRˆÔÝ”k #Ñ&Ô&ˆŒØˆÝ�w‘”ð 0	-ñ 0	-ˆAØ˜”8ˆDÝ˜t q™y™/œ/Ð)ˆGØ�D‰LˆDØ�bŠyˆyØ��Ø˜’�Ø��Ø˜’�Ø��à�Ø  6Ñ)¨iÒ7Ð7Ð7Ð7Ø�bŠyˆyØ�Ø�X˜d d¨R¡i°AÑ%5¸À,Ô9OÑ$OÑPÔP�‘Ø˜’�Ø�X˜d t¨b¡y°BÑ&6¸1Ñ%<ÀÈÔ@VÑ$VÑWÔW�Ø�‘Ø˜’�Ø˜B‘Y�Ø˜lÔ+�Ø�X˜d A¨¨d©¡O°r¸Q±wÑ$?Ñ@Ô@�Ø�X˜d a™i¨¨r°D©y¸QÑ.>Ñ)?À2ÈÁ9Ñ)MÑNÔN��Ø˜’�Ø˜B‘Y�Ø�X˜d A¨"°©(°q©Ñ$9¸HÀ\Ô<RÑ$RÑSÔS�Ø�XØ˜A‘I˜q b¨2¡g°!¡^¸Ñ$9Ñ:¸XÀlÐUVÑFVÔ=WÑWñô ��ð ˜’�Ø˜l¨QÑ.Ô/�Ø�X˜d X¨lÔ%;¸qÑ%@ÀRÈ1ÁWÑ$MÑNÔN�Ø�XØ˜A‘I  d¡¨qÑ 0°H¸\ÈAÑ=MÔ4NÑNñô ��ð �XØ˜8 LÔ1°QÑ6¸(À<ÐRSÑCSÔ:TÑTñô �ð �XØ˜A‘IØ˜l¨QÑ.Ô/°1Ñ4¸ÀÐPQÑAQÔ8RÑRñô �ð ˜FÑ"ˆLØ�‰GˆAØ�‰GˆAØ$% q 6ˆEÔ˜aÑ ØŒK×Ò�s 7™|œ|Ñ,Ô,Ð,Ñ,Ø$ˆØÔ+¨M¨N¨NÔ;ˆÔÐÐrN   c                 ó€  — |                       |¦  «        }| |         }| xj        t          j        d|j        ¦  «        z  c_        |j        dk    rd S |                     ¦   «         r|                      |¦  «         n+|                      |¦  «         |                      ||¦  «         |  	                    ||¦  «         d S )Nz>hr   )
ÚgetGlyphNamer]  rÑ   rÇ   r�  r�  Ú_encodeComponentsÚ_encodeCoordinatesÚ_encodeOverlapSimpleFlagÚ_encodeBBox)rB   rƒ  r„  r…  s       rL   r‰  zWOFF2GlyfTable._encodeGlyphó  sÅ   € Ø×%Ò% gÑ.Ô.ˆ	Ø�Y”ˆØÐÔ�vœ{¨4°Ô1GÑHÔHÑHÐÔØÔ! QÒ&Ð&ØˆFØ×ÒÑ Ô ð 	:Ø×"Ò" 5Ñ)Ô)Ð)Ð)à×#Ò# EÑ*Ô*Ð*Ø×)Ò)¨%°Ñ9Ô9Ð9Ø×Ò˜ %Ñ(Ô(Ð(Ð(Ð(rN   c                 ó  — t          |j        ¦  «        dz
  }d}d}t          |j        ¦  «        D ]B\  }}||k    rt          |d¦  «        }d}| xj        |                     ||| ¦  «        z  c_        ŒC|r|                      |¦  «         d S d S )Nr‡   r   r­  )r0   r–  r|  rP   ra  rb   Ú_encodeInstructions)rB   r…  Úlastcomponentr™  rš  rG   r›  s          rL   rØ  z WOFF2GlyfTable._encodeComponents   s¸   € Ý˜EÔ,Ñ-Ô-°Ñ1ˆØˆØÐÝ% eÔ&6Ñ7Ô7ð 	Tð 	T‰LˆAˆyØ�MÒ!Ð!Ý#*¨5°)Ñ#<Ô#<Ð Ø�ØÐ Ô  I×$5Ò$5°dÐ<LÈdÑ$SÔ$SÑSÐ Ô Ð Øð 	,Ø×$Ò$ UÑ+Ô+Ð+Ð+Ð+ð	,ð 	,rN   c                 óî   — d}t           j        |j        v rt          ‚|j        D ]&}||z
  }| xj        t          |¦  «        z  c_        |}Œ'|                      |¦  «         |                      |¦  «         d S rž  )	r   Ú	flagCubicr‰   rŠ  r   r^  Úpack255UShortÚ_encodeTripletsrÝ  )rB   r…  ÚlastEndPointr¢  r£  s        rL   rÙ  z!WOFF2GlyfTable._encodeCoordinates  sŠ   € ØˆÝÔ ¤Ð,Ð,Ý%Ð%ØÔ.ð 	$ð 	$ˆHØ# lÑ2ˆLØÐÔ¥-°Ñ"=Ô"=Ñ=ÐÔØ#ˆLˆLØ×Ò˜UÑ#Ô#Ð#Ø× Ò  Ñ'Ô'Ð'Ð'Ð'rN   c                 óœ   — |j         dk    rd S |j        d         t          j        z  r$|dz	  }|dz  }| j        |xx         d|z	  z  cc<   d S d S r¥  )r�  r‰   r   r§  rt  r¨  s        rL   rÚ  z'WOFF2GlyfTable._encodeOverlapSimpleFlag  sp   € ØÔ! QÒ&Ð&ØˆFØŒ;�qŒ>�HÔ6Ñ6ð 	:Ø˜a‘<ˆDØ˜A‘+ˆCØÔ$ TÐ*Ð*Ô*¨d°c©kÑ9Ð*Ð*Ñ*Ð*Ð*ð	:ð 	:rN   c                 ó¬   — |j                              ¦   «         }| xj        t          t	          |¦  «        ¦  «        z  c_        | xj        |z  c_        d S rv   )r­  ÚgetBytecoder`  rá  r0   rc  )rB   r…  Úinstructionss      rL   rÝ  z"WOFF2GlyfTable._encodeInstructions  sS   € Ø”}×0Ò0Ñ2Ô2ˆØÐÔ�M­#¨lÑ*;Ô*;Ñ<Ô<Ñ<ÐÔØÐÔ ,Ñ.ÐÔÐÐrN   c                 óP  — |j         dk    s
J d¦   «         ‚|                     ¦   «         s6|j        |j        |j        |j        f}t          |j        ¦  «        }||k    rd S | j        |dz	  xx         d|dz  z	  z  cc<   | xj	        t          j        t          |¦  «        z  c_	        d S )Nr   zempty glyph has no bboxr´   r¦  rg  )r�  r�  ÚxMinÚyMinÚxMaxÚyMaxr   rÅ  rv  rb  r   rÇ   r²  )rB   rƒ  r…  ÚcurrentBBoxÚcalculatedBBoxs        rL   rÛ  zWOFF2GlyfTable._encodeBBox$  s¶   € ØÔ%¨Ò*Ð*Ð*Ð,EÑ*Ô*Ð*Ø× Ò Ñ"Ô"ð 	ð  œ* e¤j°%´*¸e¼jÐHˆKÝ*¨5Ô+<Ñ=Ô=ˆNØ˜nÒ,Ð,Ø�ØŒ˜ 1™Ð%Ð%Ô%¨°'¸A±+Ñ)>Ñ>Ð%Ð%Ñ%ØˆŒ�7œ<­
°EÑ:Ô:Ñ:ˆŒˆˆrN   c                 ó>  — t          |j        ¦  «        t          |j        ¦  «        k    sJ ‚|j                             ¦   «         }|                     ¦   «          t          j        d¦  «        }t          j        d¦  «        }t          |¦  «        D �]Æ\  }\  }}|j        |         t          j        z  }t          |¦  «        }	t          |¦  «        }
|rdnd}|dk     rdnd}|dk     rdnd}|d|z  z   }|dk    r@|
dk     r:| 
                    ||
dz  dz	  z   |z   ¦  «         | 
                    |
d	z  ¦  «         Œ©|dk    rC|	dk     r=| 
                    |d
z   |	dz  dz	  z   |z   ¦  «         | 
                    |	d	z  ¦  «         Œò|	dk     r_|
dk     rY| 
                    |dz   |	dz
  dz  z   |
dz
  dz  dz	  z   |z   ¦  «         | 
                    |	dz
  dz  dz  |
dz
  dz  z  ¦  «         �ŒW|	dk     rt|
dk     rn| 
                    |dz   d|	dz
  dz  dz	  z  z   |
dz
  dz  dz	  z   |z   ¦  «         | 
                    |	dz
  d	z  ¦  «         | 
                    |
dz
  d	z  ¦  «         �ŒÑ|	dk     rt|
dk     rn| 
                    |dz   |z   ¦  «         | 
                    |	dz	  ¦  «         | 
                    |	dz  dz  |
dz	  z  ¦  «         | 
                    |
d	z  ¦  «         �ŒK| 
                    |dz   |z   ¦  «         | 
                    |	dz	  ¦  «         | 
                    |	d	z  ¦  «         | 
                    |
dz	  ¦  «         | 
                    |
d	z  ¦  «         �ŒÈ| xj        |                     ¦   «         z  c_        | xj        |                     ¦   «         z  c_        d S )Nrh  r   r¦  r‡   r#   i   i   rg  éÿ   r¾  éA   rÀ  rÁ  rÂ  r"   i  r»  r³   i   r²   r3  i   r¼  r½  )r0   rÅ  r‰   ÚcopyÚabsoluteToRelativerQ  r|  r   ÚflagOnCurveÚabsrÃ   r_  r0  r`  )rB   r…  rÅ  r‰   rÉ  rG   rË  rÌ  rÎ  ÚabsXÚabsYÚ
onCurveBitÚxSignBitÚySignBitÚ
xySignBitss                  rL   râ  zWOFF2GlyfTable._encodeTriplets0  s  € Ý�5Ô$Ñ%Ô%­¨U¬[Ñ)9Ô)9Ò9Ð9Ð9Ð9ØÔ'×,Ò,Ñ.Ô.ˆØ×&Ò&Ñ(Ô(Ð(å”˜CÑ Ô ˆÝ”;˜sÑ#Ô#ˆÝ" ;Ñ/Ô/ð ,	-ñ ,	-‰IˆA‰v��1Ø”k !”n¥xÔ';Ñ;ˆGÝ�q‘6”6ˆDÝ�q‘6”6ˆDØ%Ð.˜˜¨3ˆJØ šU˜U�q�q¨ˆHØ šU˜U�q�q¨ˆHØ! A¨¡LÑ0ˆJà�AŠvˆv˜$ š+˜+Ø—’˜Z¨D°5©L¸QÑ+>Ñ?À(ÑJÑKÔKÐKØ—’  t¡Ñ,Ô,Ð,Ð,Ø�a’�˜D 4šK˜KØ—’˜Z¨"™_°¸±À!Ñ0CÑDÀxÑOÑPÔPÐPØ—’  t¡Ñ,Ô,Ð,Ð,Ø˜’�˜t bšy˜yØ—’ØØñà˜q™ DÑ(ñ*ð  ™ TÑ)¨aÑ/ñ1ð !ñ	!ñô ð ð —’ 4¨!¡8¨sÑ"2°qÑ!8¸dÀQ¹hÈ#Ñ=MÑ NÑOÔOÐOÑOØ˜’�  s¢
 
Ø—’ØØñà˜d Q™h¨%Ñ/°AÑ5Ñ6ñ7ð  ™ UÑ*¨qÑ0ñ2ð !ñ	!ñô ð ð —’ ¨¡¨TÑ 1Ñ2Ô2Ð2Ø—’ ¨¡¨TÑ 1Ñ2Ô2Ð2Ñ2Ø˜’� ¨¢ Ø—’˜Z¨#Ñ-°
Ñ:Ñ;Ô;Ð;Ø—’ ¨¡	Ñ*Ô*Ð*Ø—’ $¨¡*°Ñ!2°t¸q±yÑ AÑBÔBÐBØ—’  t¡Ñ,Ô,Ð,Ñ,à—’˜Z¨#Ñ-°
Ñ:Ñ;Ô;Ð;Ø—’ ¨¡	Ñ*Ô*Ð*Ø—’  t¡Ñ,Ô,Ð,Ø—’ ¨¡	Ñ*Ô*Ð*Ø—’  t¡Ñ,Ô,Ð,Ñ,àˆŒ˜5Ÿ=š=™?œ?Ñ*ˆŒØÐÔ˜H×,Ò,Ñ.Ô.Ñ.ÐÔÐÐrN   rv   )rw   rx   ry   rY  ro  rM   ra   r¿   r}  r‘  r’  r“  r˜  r”  r¡  r‰  rØ  rÙ  rÚ  rÝ  rÛ  râ  r{   rN   rL   r`   r`   ú  s.  € € € € € Ø;Ð;ð€Jð+ð +ð +ð +ð9&ð 9&ð 9&ðv ð  ð  ðDð ð ð,ð ,ð ,ð(ð (ð (ð9ð 9ð 9ðGð Gð Gð%ð %ð %ðH<ð H<ð H<ðT)ð )ð )ð
,ð 
,ð 
,ð	(ð 	(ð 	(ð:ð :ð :ð/ð /ð /ð

;ð 
;ð 
;ð6/ð 6/ð 6/ð 6/ð 6/rN   r`   rV   c                   ó"   — e Zd Zdd„Zd„ Zd„ ZdS )rm   Nc                 ó2   — t          |pd¦  «        | _        d S ©NrY   r@  r°   s     rL   rM   zWOFF2HmtxTable.__init__j  rB  rN   c                 ó¢  — t          j        d|d d…         ¦  «        \  }|dd …         }|dz  dk    rt          d| j        z  ¦  «        ‚|dz  dk    }|dz  dk    }|r|rt          d| j        z  ¦  «        ‚|d         }|d	         }|j        }t          |¦  «        }	t          t          |j        ¦  «        |	¦  «        }
t          |¦  «        d|
z  k    sJ ‚t          j	        d
|d d|
z  …         ¦  «        }t          j        dk    r|                     ¦   «          |d|
z  d …         }|rjt          |¦  «        d|
z  k    sJ ‚t          j	        d|d d|
z  …         ¦  «        }t          j        dk    r|                     ¦   «          |d|
z  d …         }n_t          j	        d¦  «        }t          |¦  «        D ];\  }}||
k    r n/||         }t          |dd¦  «        }|                     |¦  «         Œ<|	|
z
  }|rjt          |¦  «        d|z  k    sJ ‚t          j	        d|d d|z  …         ¦  «        }t          j        dk    r|                     ¦   «          |d|z  d …         }n^t          j	        d¦  «        }t          |¦  «        D ]:\  }}||
k     rŒ||         }t          |dd¦  «        }|                     |¦  «         Œ;|rt          d| j        z  ¦  «        ‚i | _        t#          |
¦  «        D ]&}||         }||         ||         }}||f| j        |<   Œ'|d         }t#          |¦  «        D ]}|||
z            }|||         f| j        |<   Œ d S )Nú>Br‡   éü   r   z#Bits 2-7 of '%s' flags are reservedr#   z?either bits 0 or 1 (or both) must set in transformed '%s' flagsrV   ri   rI  rK  rj  ré  ztoo much '%s' table datar   )rÑ   r1   r   rA  ry  r0   Úminr:  ÚnumberOfHMetricsrQ  rR  rS  rT  r|  rp  rÃ   Úmetricsr4   )rB   rF   rA   r‰   ÚhasLsbArrayÚhasLeftSideBearingArrayrc   ÚheaderTablery  ru  r  ÚadvanceWidthArrayÚlsbArrayrG   r„  r…  ré  ÚnumberOfSideBearingsÚleftSideBearingArrayÚadvanceWidthÚlsbÚlastAdvances                         rL   ra   zWOFF2HmtxTable.reconstructm  sþ  € Ý”=  t¨B¨Q¨B¤xÑ0Ô0‰ˆØ�A�B�BŒxˆØ�:Ñ Ò"Ð"ÝÐBÀTÄ]ÑRÑSÔSÐSð ˜a‘i 1’nˆà"'¨!¡)¨q¢.ÐØð 	Ð2ð 	ÝØQØ”-ñ ñô ð ð
 ˜6”Nˆ	Ø˜V”nˆØÔ)ˆ
Ý˜
‘O”Oˆ	Ý�s ;Ô#?Ñ@Ô@À)ÑLÔLÐå�4‰yŒy˜AÐ 0Ñ0Ò0Ð0Ð0Ð0Ý!œK¨¨TÐ2H°AÐ8HÑ4HÐ2HÔ-IÑJÔJÐÝŒ=˜EÒ!Ð!Ø×&Ò&Ñ(Ô(Ð(Ø�AÐ(Ñ(Ð*Ð*Ô+ˆàð 	&Ý�t‘9”9 Ð$4Ñ 4Ò4Ð4Ð4Ð4Ý”{ 3¨Ð-C¨qÐ3CÑ/CÐ-CÔ(DÑEÔEˆHÝŒ} Ò%Ð%Ø×!Ò!Ñ#Ô#Ð#Ø˜Ð,Ñ,Ð.Ð.Ô/ˆDˆDõ ”{ 3Ñ'Ô'ˆHÝ )¨*Ñ 5Ô 5ð &ð &‘��9ØÐ(Ò(Ð(Ø�EØ! )Ô,�Ý˜u f¨aÑ0Ô0�Ø—’ Ñ%Ô%Ð%Ð%à(Ð+;Ñ;ÐØ"ð 	2Ý�t‘9”9 Ð$8Ñ 8Ò8Ð8Ð8Ð8Ý#(¤;¨s°DÐ9S¸1Ð?SÑ;SÐ9SÔ4TÑ#UÔ#UÐ ÝŒ} Ò%Ð%Ø$×-Ò-Ñ/Ô/Ð/Ø˜Ð0Ñ0Ð2Ð2Ô3ˆDˆDõ $)¤;¨sÑ#3Ô#3Ð Ý )¨*Ñ 5Ô 5ð 2ð 2‘��9ØÐ'Ò'Ð'ØØ! )Ô,�Ý˜u f¨aÑ0Ô0�Ø$×+Ò+¨DÑ1Ô1Ð1Ð1àð 	IÝÐ7¸$¼-ÑGÑHÔHÐHàˆŒÝÐ'Ñ(Ô(ð 	:ð 	:ˆAØ" 1œˆIØ 1°!Ô 4°h¸q´k˜#ˆLØ'3°SÐ&9ˆDŒL˜Ñ#Ð#Ø'¨Ô+ˆÝÐ+Ñ,Ô,ð 	Mð 	MˆAØ" 1Ð'7Ñ#7Ô8ˆIØ'2Ð4HÈÔ4KÐ&LˆDŒL˜Ñ#Ð#ð	Mð 	MrN   c           
      ó¬  ‡ ‡‡— |                      ¦   «         Š|d         }|d         }|j        Šd}t          ‰¦  «        D ]<}‰|         }‰ j        |         d         }|t	          ||         dd¦  «        k    rd} nŒ=d}t          ‰t          ‰¦  «        ¦  «        D ]<}‰|         }‰ j        |         d         }|t	          ||         dd¦  «        k    rd} nŒ=|r|rd S d}	|s|	dz  }	|s|	dz  }	t          j        d	|	¦  «        }
t          j        d
ˆˆ fd„t          ‰¦  «        D ¦   «         ¦  «        }t          j        dk    r|                     ¦   «          |
|                     ¦   «         z  }
|rjt          j        dˆˆ fd„t          ‰¦  «        D ¦   «         ¦  «        }t          j        dk    r|                     ¦   «          |
|                     ¦   «         z  }
|rxt          j        dˆˆ fd„t          ‰t          ‰¦  «        ¦  «        D ¦   «         ¦  «        }t          j        dk    r|                     ¦   «          |
|                     ¦   «         z  }
|
S )NrV   ri   Fr‡   ré  r   Tr#   r   rI  c                 óH   •— g | ]\  }}|‰k     ¯‰j         |         d          ‘ŒS )r   ©r  ©rF  rG   r„  r  rB   s      €€rL   rl  z,WOFF2HmtxTable.transform.<locals>.<listcomp>à  s?   ø€ ð ð ð á �A�yØÐ'Ò'Ð'ð ”˜YÔ'¨Ô*à'Ð'Ð'rN   rK  rj  c                 óH   •— g | ]\  }}|‰k     ¯‰j         |         d          ‘ŒS ©r‡   r  r  s      €€rL   rl  z,WOFF2HmtxTable.transform.<locals>.<listcomp>í  s?   ø€ ð ð ð á$˜˜9ØÐ+Ò+Ð+ð ”L Ô+¨AÔ.à+Ð+Ð+rN   c                 óB   •— g | ]}‰j         ‰|                  d          ‘ŒS r  r  )rF  rG   ry  rB   s     €€rL   rl  z,WOFF2HmtxTable.transform.<locals>.<listcomp>ú  s9   ø€ ð ð ð àð ”L ¨A¤Ô/°Ô2ðð ð rN   )rx  r  r4   r  rp  r0   rÑ   rÇ   rQ  r|  rR  rS  rT  r0  )rB   rA   rV   ri   r  rG   r„  r  r  r‰   rF   r  r	  r  ry  r  s   `             @@rL   r¿   zWOFF2HmtxTable.transform·  sî  øøø€ Ø×)Ò)Ñ+Ô+ˆ
Ø�fŒ~ˆØ�fŒ~ˆØÔ0Ðð ˆÝÐ'Ñ(Ô(ð 	ð 	ˆAØ" 1œˆIØ”,˜yÔ)¨!Ô,ˆCØ•g˜d 9œo¨v°qÑ9Ô9Ò9Ð9Ø"�Ø�ð :ð
 #(ÐÝÐ'­¨Z©¬Ñ9Ô9ð 	ð 	ˆAØ" 1œˆIØ”,˜yÔ)¨!Ô,ˆCØ•g˜d 9œo¨v°qÑ9Ô9Ò9Ð9Ø*.Ð'Ø�ð :ð ð 	Ð2ð 	ØˆFð ˆØð 	Ø�V‰OˆEØ&ð 	Ø�V‰OˆEåŒ{˜4 Ñ'Ô'ˆå!œKØðð ð ð ð å$-¨jÑ$9Ô$9ðñ ô ñ
ô 
Ðõ Œ=˜EÒ!Ð!Ø×&Ò&Ñ(Ô(Ð(ØÐ!×)Ò)Ñ+Ô+Ñ+ˆàð 	'Ý”{Øðð ð ð ð å(1°*Ñ(=Ô(=ðñ ô ñô ˆHõ Œ} Ò%Ð%Ø×!Ò!Ñ#Ô#Ð#Ø�H×$Ò$Ñ&Ô&Ñ&ˆDà"ð 
	3Ý#(¤;Øðð ð ð ð å"Ð#3µS¸±_´_ÑEÔEðñ ô ñ$ô $Ð õ Œ} Ò%Ð%Ø$×-Ò-Ñ/Ô/Ð/ØÐ(×0Ò0Ñ2Ô2Ñ2ˆDàˆrN   rv   )rw   rx   ry   rM   ra   r¿   r{   rN   rL   rm   rm   i  sR   € € € € € ð+ð +ð +ð +ðHMð HMð HMðTLð Lð Lð Lð LrN   rm   rY   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )r?   r   Nc                 ó,  •— t           st          d¦  «        ‚|�"|�t          d¦  «        ‚|�t          d¦  «        ‚|�d|v rd|vsd|v rd|vrt          d¦  «        ‚t	          t
          | ¦  «                             |¬¦  «         |r$d	„ |j                             ¦   «         D ¦   «         }nK|rI|j	        | _	        |j
        | _	        |j        | _        |j        | _        |€t          |d
¦  «        r|j        }|€t          }t!          |¦  «        | _        dS )a  Data class that holds the WOFF2 header major/minor version, any
        metadata or private data (as bytes strings), and the set of
        table tags that have transformations applied (if reader is not None),
        or will have once the WOFF2 font is compiled.

        Args:
                reader: an SFNTReader (or subclass) object to read flavor data from.
                data: another WOFFFlavorData object to initialise data from.
                transformedTables: set of strings containing table tags to be transformed.

        Raises:
                ImportError if the brotli module is not installed.

        NOTE: The 'reader' argument, on the one hand, and the 'data' and
        'transformedTables' arguments, on the other hand, are mutually exclusive.
        r!   Nz4'reader' and 'data' arguments are mutually exclusivezA'reader' and 'transformedTables' arguments are mutually exclusiverV   rX   z7'glyf' and 'loca' must be transformed (or not) together)Úreaderc                 ó&   — g | ]\  }}|j         ¯|‘ŒS r{   )rQ   )rF  r7   rH   s      rL   rl  z,WOFF2FlavorData.__init__.<locals>.<listcomp>.  s4   € ð !ð !ð !Ù"˜˜U¸uÔ?Pð!Øð!ð !ð !rN   rk   )r'   r*   Ú	TypeErrorr  rU  r?   rM   r3   r•   r�   rž   rÖ   rÜ   rP   rk   Úwoff2TransformedTableTagsrO  )rB   r  rF   rk   rX  s       €rL   rM   zWOFF2FlavorData.__init__	  sf  ø€ õ" ð 	8ÝÐ6Ñ7Ô7Ð7àÐØÐÝÐ VÑWÔWÐWØ Ð,ÝØWñô ð ð Ð(ØÐ'Ð'Ð'ØÐ/Ð/Ð/ØÐ*Ð*Ð*ØÐ/Ð/Ð/åÐVÑWÔWÐWÝ�o˜tÑ$Ô$×-Ò-°VÐ-Ñ<Ô<Ð<Øð 
	;ð!ð !Ø&,¤m×&9Ò&9Ñ&;Ô&;ð!ñ !ô !ÐÐð ð 	;Ø $Ô 1ˆDÔØ $Ô 1ˆDÔØ œMˆDŒMØ œMˆDŒMØ Ð(­W°TÐ;NÑ-OÔ-OÐ(Ø$(Ô$:Ð!àÐ$Ý 9Ðå!$Ð%6Ñ!7Ô!7ˆÔÐÐrN   c                 ó*   — t          j        |¦  «        S rv   )r;   r<   )rB   r]   s     rL   Ú_decompresszWOFF2FlavorData._decompress>  s   € ÝÔ  Ñ)Ô)Ð)rN   )NNN)rw   rx   ry   ÚFlavorrM   r  rZ  r[  s   @rL   r?   r?     sR   ø€ € € € € Ø€Fð38ð 38ð 38ð 38ð 38ð 38ðj*ð *ð *ð *ð *ð *ð *rN   r?   c                 óÄ  — t          | ¦  «        dk    rt          d¦  «        ‚d}t          | d         ¦  «        dk    rt          d¦  «        ‚t          t          ¦  «        D ]q}t          | ¦  «        dk    rt          d¦  «        ‚t          | d         ¦  «        }| dd…         } |dz  rt          d¦  «        ‚|d	z  |d
z  z  }|dz  dk    r|| fc S Œrt          d¦  «        ‚)aµ  Read one to five bytes from UIntBase128-encoded input string, and return
    a tuple containing the decoded integer plus any leftover data.

    >>> unpackBase128(b'\x3f\x00\x00') == (63, b"\x00\x00")
    True
    >>> unpackBase128(b'\x8f\xff\xff\xff\x7f')[0] == 4294967295
    True
    >>> unpackBase128(b'\x80\x80\x3f')  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    TTLibError: UIntBase128 value must not start with leading zeros
    >>> unpackBase128(b'\x8f\xff\xff\xff\xff\x7f')[0]  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    TTLibError: UIntBase128-encoded sequence is longer than 5 bytes
    >>> unpackBase128(b'\x90\x80\x80\x80\x00')[0]  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    TTLibError: UIntBase128 value exceeds 2**32-1
    r   z%not enough data to unpack UIntBase128r¦  z3UIntBase128 value must not start with leading zerosr‡   Nl      | z!UIntBase128 value exceeds 2**32-1rg  rº  z3UIntBase128-encoded sequence is longer than 5 bytes)r0   r   r	   r4   Úwoff2Base128MaxSize)rF   ÚresultrG   Úcodes       rL   r-  r-  B  s  € õ* ˆ4�y„y�A‚~€~ÝÐ@ÑAÔAÐAØ€FÝˆt�AŒwÑÔ˜4ÒÐåÐNÑOÔOÐOÝÕ&Ñ'Ô'ð  ð  ˆÝˆt‰9Œ9˜Š>ˆ>ÝÐDÑEÔEÐEÝ�t˜A”wÑÔˆØ�A�B�BŒxˆà�JÑð 	BÝÐ@ÑAÔAÐAà˜A‘+ $¨¡+Ñ.ˆà�4‰K˜AÒÐà˜4�<ÐÐÐð õ ÐJÑ
KÔ
KÐKrN   c                 óF   — | dk    sJ ‚d}| dk    r|dz  }| dz  } | dk    °|S )z±Return the length in bytes of a UIntBase128-encoded sequence with value n.

    >>> base128Size(0)
    1
    >>> base128Size(24567)
    3
    >>> base128Size(2**32-1)
    5
    r   r‡   r¦  rg  r{   )Únr‘   s     rL   Úbase128Sizer%  o  sC   € ð �Š6ˆ6ˆ6ˆ6Ø€DØ
ˆsŠ(ˆ(Ø�‰	ˆØ	ˆa‰ˆð ˆsŠ(ˆ(ð €KrN   c                 óð   — | dk     s| dk    rt          d¦  «        ‚d}t          | ¦  «        }t          |¦  «        D ]9}| d||z
  dz
  z  z	  dz  }||dz
  k     r|dz  }|t          j        d	|¦  «        z  }Œ:|S )
a  Encode unsigned integer in range 0 to 2**32-1 (inclusive) to a string of
    bytes using UIntBase128 variable-length encoding. Produce the shortest possible
    encoding.

    >>> packBase128(63) == b"\x3f"
    True
    >>> packBase128(2**32-1) == b'\x8f\xff\xff\xff\x7f'
    True
    r   l        z3UIntBase128 format requires 0 <= integer <= 2**32-1rN   rg  r‡   rº  r¦  rh  )r   r%  r4   rÑ   rÇ   )r$  rF   r‘   rG   Úbs        rL   r1  r1  �  s˜   € ð 	ˆ1‚u€u��U’
�
ÝÐNÑOÔOÐOØ€DÝ�q‰>Œ>€DÝ�4‰[Œ[ð $ð $ˆØ�1˜˜q™ 1™Ñ%Ñ&¨$Ñ.ˆØˆt�a‰xŠ<ˆ<Ø�‰IˆAØ•”˜C Ñ#Ô#Ñ#ˆˆØ€KrN   c                 ó0  — t          | dd…         ¦  «        }| dd…         } |dk    rLt          | ¦  «        dk     rt          d¦  «        ‚t          j        d| dd…         ¦  «        \  }| dd…         } n |dk    rIt          | ¦  «        dk    rt          d¦  «        ‚t          | dd…         ¦  «        }|d	z  }| dd…         } nQ|d
k    rIt          | ¦  «        dk    rt          d¦  «        ‚t          | dd…         ¦  «        }|dz  }| dd…         } n|}|| fS )aÇ  Read one to three bytes from 255UInt16-encoded input string, and return a
    tuple containing the decoded integer plus any leftover data.

    >>> unpack255UShort(bytechr(252))[0]
    252

    Note that some numbers (e.g. 506) can have multiple encodings:
    >>> unpack255UShort(struct.pack("BB", 254, 0))[0]
    506
    >>> unpack255UShort(struct.pack("BB", 255, 253))[0]
    506
    >>> unpack255UShort(struct.pack("BBB", 253, 1, 250))[0]
    506
    Nr‡   éý   r#   z#not enough data to unpack 255UInt16z>Héþ   r   éú  rð  )r	   r0   r   rÑ   r1   )rF   r"  r!  s      rL   rŸ  rŸ  —  s0  € õ �4˜˜˜”8ÑÔ€DØ���Œ8€DØˆs‚{€{åˆt‰9Œ9�qŠ=ˆ=ÝÐBÑCÔCÐCÝ”M $¨¨R¨a¨R¬Ñ1Ô1‰	ˆØ�A�B�BŒxˆˆØ	�Šˆåˆt‰9Œ9˜Š>ˆ>ÝÐBÑCÔCÐCÝ˜˜b˜q˜bœÑ"Ô"ˆØ�#‰ˆØ�A�B�BŒxˆˆØ	�Šˆåˆt‰9Œ9˜Š>ˆ>ÝÐBÑCÔCÐCÝ˜˜b˜q˜bœÑ"Ô"ˆØ�#‰ˆØ�A�B�BŒxˆˆð ˆà�4ˆ<ÐrN   c                 ó  — | dk     s| dk    rt          d¦  «        ‚| dk     rt          j        d| ¦  «        S | dk     rt          j        dd| dz
  ¦  «        S | d	k     rt          j        dd
| dz
  ¦  «        S t          j        dd| ¦  «        S )a  Encode unsigned integer in range 0 to 65535 (inclusive) to a bytestring
    using 255UInt16 variable-length encoding.

    >>> pack255UShort(252) == b'\xfc'
    True
    >>> pack255UShort(506) == b'\xfe\x00'
    True
    >>> pack255UShort(762) == b'\xfd\x02\xfa'
    True
    r   iÿÿ  z/255UInt16 format requires 0 <= integer <= 65535r)  r   r+  z>BBrð  iú  r*  z>BH)r   rÑ   rÇ   )r7  s    rL   rá  rá  Ã  s•   € ð ˆq‚y€y�E˜F’N�NÝÐJÑKÔKÐKØˆs‚{€{ÝŒ{˜4 Ñ'Ô'Ð'Ø	�ŠˆÝŒ{˜5 # u¨s¡{Ñ3Ô3Ð3Ø	�ŠˆÝŒ{˜5 # u¨s¡{Ñ3Ô3Ð3åŒ{˜5 # uÑ-Ô-Ð-rN   c                 óà   — t                                d| ›d|›�¦  «         t          | dd¬¦  «        }d|_        |�t	          |j        |¬¦  «        |_        |                     |d¬¦  «         dS )	ay  Compress OpenType font to WOFF2.

    Args:
            input_file: a file path, file or file-like object (open in binary mode)
                    containing an OpenType font (either CFF- or TrueType-flavored).
            output_file: a file path, file or file-like object where to save the
                    compressed WOFF2 font.
            transform_tables: Optional[Iterable[str]]: a set of table tags for which
                    to enable preprocessing transformations. By default, only 'glyf'
                    and 'loca' tables are transformed. An empty set means disable all
                    transformations.
    úProcessing ú => Fr$   r   N)rF   rk   ©ÚreorderTables)r(   Úinfor   rz   r?   r@   Úsave)Ú
input_fileÚoutput_fileÚtransform_tablesÚfonts       rL   r™   r™   Ú  s€   € õ ‡H‚H€H j j j°+°+Ð>Ñ?Ô?Ð?å�*¨5À%ÐHÑHÔH€DØ€D„KàÐ#Ý)Ø”Ð4Dð
ñ 
ô 
ˆŒð 	‡I‚Iˆk¨€IÑ/Ô/Ð/Ð/Ð/rN   c                 ó´   — t                                d| ›d|›�¦  «         t          | dd¬¦  «        }d|_        d|_        |                     |d¬¦  «         dS )aD  Decompress WOFF2 font to OpenType font.

    Args:
            input_file: a file path, file or file-like object (open in binary mode)
                    containing a compressed WOFF2 font.
            output_file: a file path, file or file-like object where to save the
                    decompressed OpenType font.
    r.  r/  Fr$   NTr0  )r(   r2  r   rz   r@   r3  )r4  r5  r7  s      rL   r<   r<   ô  sa   € õ ‡H‚H€H j j j°+°+Ð>Ñ?Ô?Ð?å�*¨5À%ÐHÑHÔH€DØ€D„KØ€D„OØ‡I‚Iˆk¨€IÑ.Ô.Ð.Ð.Ð.rN   c                 ó  ‡— ddl Šddlm} ddlm}  G ˆfd„d‰j        ¦  «        } G d„ d‰j        ¦  «        } G d	„ d
‰j        ¦  «        }‰                     dt          j	        d¬¦  «        }| 
                    dd|d¬¦  «         |                     d¬¦  «        }|                     dd¬¦  «        }|                     dd¬¦  «        }	||	fD ]J}
|
                     d¬¦  «        }| 
                    dddd¬¦  «         | 
                    dddd ¬¦  «         ŒK| 
                    d!d"d#¬$¦  «         |	 
                    d!d"d%¬$¦  «         | 
                    d&d'd(d)¬$¦  «         |	 
                    d&d'd(d*¬$¦  «         |                     ¦   «         }| 
                    d+d,d|d-¬.¦  «         | 
                    d/d,d|d0¬.¦  «         |                     t           d1d2h¬3¦  «         |	                     t"          ¬4¦  «         t%          |                     | ¦  «        ¦  «        }|                     d5d¦  «        }|s|                     ¦   «          dS |                     d6¦  «        }|                     d7¦  «        } ||rd8n|rd9nd:¬;¦  «         |d<         s»|t           u rd=}n˜|t"          u r€t-          |d!         d>¦  «        5 }|                     d?¦  «         |                     d?¦  «        }ddd¦  «         n# 1 swxY w Y   t3          |¦  «        d?k    s
J d@¦   «         ‚|dAk    rdBndC}nt5          |¦  «        ‚ ||d!         d|¬D¦  «        |d<<   	  |dEi |¤Ž dS # t6          $ r }|                     |¦  «         Y d}~dS d}~ww xY w)Fz#Compress and decompress WOFF2 fontsr   N)ÚconfigLogger)ÚmakeOutputFileNamec                   ó   •— e Zd Zdˆ fd„	ZdS )úmain.<locals>._HelpActionNc                 óà   •— ˆ	fd„|j         D ¦   «         }|D ]B}|j                             ¦   «         D ]&\  }}t          |                     ¦   «         ¦  «         Œ'ŒC|                     ¦   «          d S )Nc                 ó>   •— g | ]}t          |‰j        ¦  «        ¯|‘ŒS r{   )Ú
isinstanceÚ_SubParsersAction)rF  ÚactionÚargparses     €rL   rl  z6main.<locals>._HelpAction.__call__.<locals>.<listcomp>  s<   ø€ ð "ð "ð "àÝ˜f hÔ&@ÑAÔAð"Øð"ð "ð "rN   )Ú_actionsÚchoicesr•   ÚprintÚformat_helpÚexit)
rB   ÚparserÚ	namespacerÓ   Úoption_stringÚsubparsers_actionsÚsubparsers_actionÚchoiceÚ	subparserrC  s
            €rL   Ú__call__z"main.<locals>._HelpAction.__call__  s–   ø€ ð"ð "ð "ð "à$œoð"ñ "ô "Ðð
 &8ð 3ð 3Ð!Ø):Ô)B×)HÒ)HÑ)JÔ)Jð 3ð 3Ñ%�F˜IÝ˜)×/Ò/Ñ1Ô1Ñ2Ô2Ð2Ð2ð3à�KŠK‰MŒMˆMˆMˆMrN   rv   ©rw   rx   ry   rP  )rC  s   €rL   Ú_HelpActionr=    s3   ø€ € € € € ð		ð 		ð 		ð 		ð 		ð 		ð 		ð 		rN   rR  c                   ó   — e Zd Zdd„ZdS )ú$main.<locals>._NoGlyfTransformActionNc                 ó>   — |j                              ddh¦  «         d S )NrV   rX   )r6  Údifference_update©rB   rI  rJ  rÓ   rK  s        rL   rP  z-main.<locals>._NoGlyfTransformAction.__call__  s$   € ØÔ&×8Ò8¸&À&Ð9IÑJÔJÐJÐJÐJrN   rv   rQ  r{   rN   rL   Ú_NoGlyfTransformActionrT    s.   € € € € € ð	Kð 	Kð 	Kð 	Kð 	Kð 	KrN   rX  c                   ó   — e Zd Zdd„ZdS )ú"main.<locals>._HmtxTransformActionNc                 ó:   — |j                              d¦  «         d S rþ  )r6  ÚaddrW  s        rL   rP  z+main.<locals>._HmtxTransformAction.__call__  s   € ØÔ&×*Ò*¨6Ñ2Ô2Ð2Ð2Ð2rN   rv   rQ  r{   rN   rL   Ú_HmtxTransformActionrZ    s(   € € € € € ð	3ð 	3ð 	3ð 	3ð 	3ð 	3rN   r]  zfonttools ttLib.woff2F)ÚprogÚdescriptionÚadd_helpz-hz--helpzshow this help message and exit)rB  Úhelpzsub-commands)Útitler™   z#Compress a TTF or OTF font to WOFF2)r_  r<   zDecompress a WOFF2 font to OTF)Úrequiredz-vz	--verboseÚ
store_truezprint more messages to consolez-qz--quietz do not print messages to consoler4  ÚINPUTz&the input OpenType font (.ttf or .otf))Úmetavarra  zthe input WOFF2 fontz-oz--output-fileÚOUTPUTzthe output WOFF2 fontzthe output OpenType fontz--no-glyf-transformr6  z'Do not transform glyf (and loca) tables)ÚdestÚnargsrB  ra  z--hmtx-transformz/Enable optional transformation for 'hmtx' tablerV   rX   )Ú
subcommandr6  )rj  rj  ÚquietÚverboseÚERRORÚDEBUGÚINFO)Úlevelr5  z.woff2Úrbr"   znot enough datas   OTTOz.otfz.ttf)Ú	outputDirÚ	extensionr{   )rC  Ú	fontToolsr:  ÚfontTools.ttxr;  rR  ÚActionÚArgumentParserÚmainrY  Úadd_argumentÚadd_subparsersÚ
add_parserÚadd_mutually_exclusive_groupÚadd_argument_groupÚset_defaultsr™   r<   ÚvarsÚ
parse_argsÚpopÚ
print_helpÚopenr-   r,   r0   ÚAssertionErrorr   r)   )Úargsr:  r;  rR  rX  r]  rI  Úparser_groupÚparser_compressÚparser_decompressrO  ÚgroupÚtransform_groupÚoptionsrj  rk  rl  rs  Úfr�   ÚerC  s                        @rL   rx  rx    sd  ø€ à€O€O€OØ&Ð&Ð&Ð&Ð&Ð&Ø0Ð0Ð0Ð0Ð0Ð0ð
ð 
ð 
ð 
ð 
ð 
ð 
�hÔ*ñ 
ô 
ð 
ðKð Kð Kð Kð K ¤ñ Kô Kð Kð3ð 3ð 3ð 3ð 3˜xœñ 3ô 3ð 3ð ×$Ò$Ø$µ$´,Èð %ñ ô €Fð ×ÒØˆh˜{Ð1Rð ñ ô ð ð ×(Ò(¨~Ð(Ñ>Ô>€LØ"×-Ò-ØÐ Eð .ñ ô €Oð %×/Ò/ØÐ"Bð 0ñ ô Ðð &Ð'8Ð9ð 
ð 
ˆ	Ø×6Ò6ÀÐ6ÑFÔFˆØ×ÒØØØØ1ð	 	ñ 	
ô 	
ð 	
ð 	×ÒØØØØ3ð	 	ñ 	
ô 	
ð 	
ð 	
ð × Ò ØØØ5ð !ñ ô ð ð
 ×"Ò"ØØØ#ð #ñ ô ð ð × Ò ØØØØ$ð	 !ñ ô ð ð ×"Ò"ØØØØ'ð	 #ñ ô ð ð &×8Ò8Ñ:Ô:€OØ× Ò ØØØØ%Ø6ð !ñ ô ð ð × Ò ØØØØ#Ø>ð !ñ ô ð ð × Ò ÝØ  &Ð)ð !ñ ô ð ð ×"Ò"­jÐ"Ñ9Ô9Ð9å�6×$Ò$ TÑ*Ô*Ñ+Ô+€Gà—’˜\¨4Ñ0Ô0€JØð Ø×ÒÑÔÐØˆà�KŠK˜Ñ Ô €EØ�kŠk˜)Ñ$Ô$€GØ€LØÐCˆwˆw°Ð%C W W¸Vðñ ô ð ð �=Ô!ð 
Ø�Ð!Ð!Ø ˆIˆIØ�:Ð%Ð%å�g˜lÔ+¨TÑ2Ô2ð (°aØ—’�q‘	”	�	ØŸfšf Q™iœi�ð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (õ �{Ñ#Ô# qÒ(Ð(Ð(Ð*;Ñ(Ô(Ð(Ø"-°Ò"8Ð"8˜˜¸fˆIˆIå  Ñ,Ô,Ð,Ø!3Ð!3Ø�LÔ!¨T¸Yð"
ñ "
ô "
ˆ�ÑðØˆ
ÐÐ�WÐÐÐÐÐøÝð ð ð Ø�Š�Q‰Œˆˆˆˆˆˆˆøøøøðøøøs*   Ê?+K6Ë6K:Ë=K:ÍM Í
NÍ$M?Í?NÚ__main__rv   )MÚior   rR  rQ  rÑ   Úcollectionsr   ÚfontTools.miscr   ÚfontTools.misc.arrayToolsr   ÚfontTools.misc.textToolsr   r   r	   r
   r   ÚfontTools.ttLibr   r   r   r   r   ÚfontTools.ttLib.sfntr   r   r   r   r   r   r   r   r   ÚfontTools.ttLib.tablesr   r   ÚloggingÚ	getLoggerr(   r'   Ú
brotlicffir;   r*   r   r}   r2   Úcalcsizer/   r  r*  Úwoff2FlagsSizer,  r+  r   r   r#  r  rn  rm  r²  rs  rˆ   r.   r_   r`   rm   r?   r-  r%  r1  rŸ  rá  r™   r<   rx  rw   rH  r{   rN   rL   ú<module>rœ     sè  ðØ Ð Ð Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø "Ð "Ð "Ð "Ð "Ð "Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jðð ð ð ð ð ð ð ð ð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø €€€ð €gÔÐ/Ñ0Ô0€à€
ð	ðØ#Ð#Ð#Ð#Ð#øØð ð ð Øˆˆˆˆˆðøøøà€J€JøØð 	ð 	ð 	Ø€Dð	øøøðC+ð C+ð C+ð C+ð C+�*ñ C+ô C+ð C+ðLBð Bð Bð Bð B�*ñ Bô Bð BðN
Ð ð$ &�WÔ%Ð&:Ñ;Ô;Ð ð@€ðDÐ ð
 "�Ô!Ð"2Ñ3Ô3€ðÐ ð
 '�gÔ&Ð'<Ñ=Ô=Ð àÐ àÐ àÐ(Ñ(¨1Ð/BÑ+BÑBð ð -Ð ðÐ ð ,˜7Ô+Ð,@ÑAÔAÐ ð€
ð  &Ð ð$ð $ð $ðG6ð G6ð G6ð G6ð G6˜.ñ G6ô G6ð G6ðT#ð #ð #ð #ð #�]�] 6Ñ*Ô*ñ #ô #ð #ðLl/ð l/ð l/ð l/ð l/�]�] 6Ñ*Ô*ñ l/ô l/ð l/ð^Zð Zð Zð Zð Z�]�] 6Ñ*Ô*ñ Zô Zð Zðz9*ð 9*ð 9*ð 9*ð 9*�nñ 9*ô 9*ð 9*ðx*Lð *Lð *LðZð ð ð$ð ð ð,)ð )ð )ðX.ð .ð .ð.0ð 0ð 0ð 0ð4/ð /ð /ð"Gð Gð Gð GðT ˆzÒÐØ€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðs0   Á7A< Á;B Á<	BÂB ÂBÂB ÂBÂB