§
    ¢”j^  ã                   ó:  — d dl mZm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 d dlmZ d dlmZ d dlmZmZ ej        Zeej        _        d	„ Z G d
„ de¦  «        Zedœd„Zeej        _        d„ Zeej         _!        d„ Z"e"ej        _#         G d„ de¦  «        Z$dd e%¦   «         fddœd„Z&e&ej        _'        dddœd„Z(e(ej        _)        d„ Z*d„ Z+d„ Z,e,ej-        _.        e,ej/        _.        d„ Z0d„ Z1e1ej-        _2        e1ej/        _2         G d„ d e¦  «        Z3 G d!„ d"e4¦  «        Z5d(d$„Z6e6ej        _7        d)d&„Z8e9d'k    rXd d%l:Z: e;e:j<        ¦  «        d#k    r e:j=         e8¦   «         ¦  «         d d%l>Z> e:j=         e>j?        ¦   «         j@        ¦  «         d%S d%S )*é    )ÚnoRoundÚotRound©Ú	bit_count)ÚotTables)ÚsupportScalar)ÚbuildVarRegionListÚbuildVarStoreÚbuildVarRegionÚbuildVarData)Úpartial)Údefaultdict)ÚheappushÚheappopc                 ód   — t          t          |                      ¦   «         d„ ¬¦  «        ¦  «        S )Nc                 ó   — | d         S ©Nr   © )Úkvs    úh/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/varLib/varStore.pyú<lambda>z!_getLocationKey.<locals>.<lambda>   s
   € °B°q´E€ ó    ©Úkey)ÚtupleÚsortedÚitems)Úlocs    r   Ú_getLocationKeyr      s)   € Ý•˜Ÿ	š	™œÐ)9Ð)9Ð:Ñ:Ô:Ñ;Ô;Ð;r   c                   ó`   — e Zd Zd„ Zd„ Zd„ Zdd„Zdd„Zedœd	„Z	edœd
„Z
edœd„Zedœd„ZdS )ÚOnlineVarStoreBuilderc                 óÔ   — || _         i | _        t          g |¦  «        | _        t	          | j        g ¦  «        | _        d | _        d | _        d | _        i | _	        i | _
        d | _        d S ©N)Ú	_axisTagsÚ
_regionMapr	   Ú_regionListr
   Ú_storeÚ_dataÚ_modelÚ	_supportsÚ_varDataIndicesÚ_varDataCachesÚ_cache)ÚselfÚaxisTagss     r   Ú__init__zOnlineVarStoreBuilder.__init__   sf   € Ø!ˆŒØˆŒÝ-¨b°(Ñ;Ô;ˆÔÝ# DÔ$4°bÑ9Ô9ˆŒØˆŒ
ØˆŒØˆŒØ!ˆÔØ ˆÔØˆŒˆˆr   c                 óH   — |                       |j        ¦  «         || _        d S r#   )ÚsetSupportsÚsupportsr)   )r.   Úmodels     r   ÚsetModelzOnlineVarStoreBuilder.setModel%   s#   € Ø×Ò˜œÑ(Ô(Ð(ØˆŒˆˆr   c                 ó�   — d | _         t          |¦  «        | _        | j        r| j        d         s| j        d= d | _        d | _        d S r   )r)   Úlistr*   r-   r(   )r.   r3   s     r   r2   z!OnlineVarStoreBuilder.setSupports)   sJ   € ØˆŒÝ˜h™œˆŒØŒ>ð 	" $¤.°Ô"3ð 	"Ø”˜qÐ!ØˆŒØˆŒ
ˆ
ˆ
r   Tc                 ó  — t          | j        j        ¦  «        | j        _        t          | j        j        ¦  «        | j        _        | j        j        D ]1}t          |j        ¦  «        |_        | 	                    |¬¦  «         Œ2| j        S )N©Úoptimize)
Úlenr&   ÚRegionÚRegionCountr'   ÚVarDataÚVarDataCountÚItemÚ	ItemCountÚcalculateNumShorts)r.   r:   Údatas      r   ÚfinishzOnlineVarStoreBuilder.finish1   sw   € Ý'*¨4Ô+;Ô+BÑ'CÔ'CˆÔÔ$Ý#& t¤{Ô':Ñ#;Ô#;ˆŒÔ Ø”KÔ'ð 	7ð 	7ˆDÝ  ¤™^œ^ˆDŒNØ×#Ò#¨XÐ#Ñ6Ô6Ð6Ð6ØŒ{Ðr   é   c                 ó`  — | j         }| j        }| j        }g }|D ]…}t          |¦  «        }|                     |¦  «        }|€Ht          || j        ¦  «        }	t          |j        ¦  «        x}||<   |j         	                    |	¦  «         | 	                    |¦  «         Œ†t          |¦  «        }| j                             |¦  «        }
|
�R|
| _        | j        j        |
         | _        | j        |         | _        t          | j        j        ¦  «        |z   dk    rd }
|
€�t'          |g d¬¦  «        | _        t          | j        j        ¦  «        | _        | j        j         	                    | j        ¦  «         | j        | j        |<   || j        vr
i | j        |<   | j        |         | _        d S d S )Néÿÿ  Fr9   )r%   r&   r*   r   Úgetr   r$   r;   r<   Úappendr   r+   Ú_outerr'   r>   r(   r,   r-   r@   r   )r.   Ú	num_itemsÚ	regionMapÚ
regionListÚregionsÚregionIndicesÚregionr   ÚidxÚ	varRegionÚ
varDataIdxs              r   Ú_add_VarDataz"OnlineVarStoreBuilder._add_VarData9   sª  € Ø”Oˆ	ØÔ%ˆ
à”.ˆØˆØð 	&ð 	&ˆFÝ! &Ñ)Ô)ˆCØ—-’- Ñ$Ô$ˆCØˆ{Ý*¨6°4´>ÑBÔB�	Ý'*¨:Ô+<Ñ'=Ô'=Ð=��i ‘nØÔ!×(Ò(¨Ñ3Ô3Ð3Ø× Ò  Ñ%Ô%Ð%Ð%õ �MÑ"Ô"ˆØÔ)×-Ò-¨cÑ2Ô2ˆ
ØÐ!Ø$ˆDŒKØœÔ,¨ZÔ8ˆDŒJØÔ-¨cÔ2ˆDŒKÝ�4”:”?Ñ#Ô# iÑ/°&Ò8Ð8à!�
àÐÝ% m°RÀ%ÐHÑHÔHˆDŒJÝ˜dœkÔ1Ñ2Ô2ˆDŒKØŒKÔ×&Ò& t¤zÑ2Ô2Ð2Ø(,¬ˆDÔ  Ñ%Ø˜$Ô-Ð-Ð-Ø+-�Ô# CÑ(ØÔ-¨cÔ2ˆDŒKˆKˆKð Ðr   ©Úroundc                ó    — | j                              ||¬¦  «        }|                     d¦  «        }||                      |t          ¬¦  «        fS )NrU   r   )r)   Ú	getDeltasÚpopÚstoreDeltasr   )r.   Úmaster_valuesrV   ÚdeltasÚbases        r   ÚstoreMastersz"OnlineVarStoreBuilder.storeMasters\   sI   € Ø”×&Ò& }¸EÐ&ÑBÔBˆØ�zŠz˜!‰}Œ}ˆØ�T×%Ò% fµGÐ%Ñ<Ô<Ð<Ð<r   c                óx   ‡ ‡— ˆˆ fd„|D ¦   «         }d„ |D ¦   «         }|‰                       |t          ¬¦  «        fS )Nc                 óH   •— g | ]}‰j                              |‰¬ ¦  «        ‘ŒS )rU   )r)   rX   )Ú.0r[   rV   r.   s     €€r   ú
<listcomp>z:OnlineVarStoreBuilder.storeMastersMany.<locals>.<listcomp>b   s>   ø€ ð 
ð 
ð 
àð ŒK×!Ò! -°uÐ!Ñ=Ô=ð
ð 
ð 
r   c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS ©r   )rY   ©ra   r\   s     r   rb   z:OnlineVarStoreBuilder.storeMastersMany.<locals>.<listcomp>f   s"   € Ð=Ð=Ð= v�V—Z’Z ‘]”]Ð=Ð=Ð=r   rU   )ÚstoreDeltasManyr   )r.   Úmaster_values_listrV   Údeltas_listÚ	base_lists   ` `  r   ÚstoreMastersManyz&OnlineVarStoreBuilder.storeMastersManya   sd   øø€ ð
ð 
ð 
ð 
ð 
à!3ð
ñ 
ô 
ˆð >Ð=°Ð=Ñ=Ô=ˆ	Ø˜$×.Ò.¨{Å'Ð.ÑJÔJÐJÐJr   c                ó�  ‡— ˆfd„|D ¦   «         }t          |¦  «        t          | j        ¦  «        dz   k    rt          |dd …         ¦  «        }n6t          |¦  «        t          | j        ¦  «        k    sJ ‚t          |¦  «        }| j        s|                      ¦   «          | j                             |¦  «        }|�|S t          | j        j        ¦  «        }|dk    r0|                      ¦   «          |                      |t          ¬¦  «        S | j         
                    |t          ¬¦  «         | j        dz  |z   }|| j        |<   |S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   ©ra   ÚdrV   s     €r   rb   z5OnlineVarStoreBuilder.storeDeltas.<locals>.<listcomp>j   s!   ø€ Ð+Ð+Ð+˜q�%�%˜‘(”(Ð+Ð+Ð+r   rE   rG   rU   é   )r;   r*   r   r(   rT   r-   rH   r@   rZ   r   ÚaddItemrJ   )r.   r\   rV   ÚvarIdxÚinners     `  r   rZ   z!OnlineVarStoreBuilder.storeDeltasi   s;  ø€ Ø+Ð+Ð+Ð+ FÐ+Ñ+Ô+ˆÝˆv‰;Œ;�#˜dœnÑ-Ô-°Ñ1Ò1Ð1Ý˜6 ! " "œ:Ñ&Ô&ˆFˆFå�v‘;”;¥# d¤nÑ"5Ô"5Ò5Ð5Ð5Ð5Ý˜6‘]”]ˆFàŒzð 	 Ø×ÒÑÔÐà”—’ Ñ(Ô(ˆØÐØˆMå�D”J”OÑ$Ô$ˆØ�FŠ?ˆ?à×ÒÑÔÐØ×#Ò# Fµ'Ð#Ñ:Ô:Ð:ØŒ
×Ò˜6­ÐÑ1Ô1Ð1à”+ Ñ# uÑ,ˆØ$ˆŒ�FÑØˆr   c                óŒ  ‡— ˆfd„|D ¦   «         }t          d„ |D ¦   «         ¦  «        }| j        s"|                      t          |¦  «        ¦  «         | j                             |¦  «        }|�|S t          | j        j        ¦  «        }|t          |¦  «        z   dk    r>|                      t          |¦  «        ¦  «         |                      |t          ¬¦  «        S t          |¦  «        D ]@\  }}| j         
                    |t          ¬¦  «         | j        dz  |z   |z   }|| j        |<   ŒA| j        dz  |z   }|| j        |<   |S )Nc                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   rm   s     €r   rb   zDOnlineVarStoreBuilder.storeDeltasMany.<locals>.<listcomp>.<listcomp>„   s!   ø€ Ð1Ð1Ð1 Q˜˜˜a™œÐ1Ð1Ð1r   r   )ra   r\   rV   s     €r   rb   z9OnlineVarStoreBuilder.storeDeltasMany.<locals>.<listcomp>„   s.   ø€ ÐLÐLÐL°fÐ1Ð1Ð1Ð1¨&Ð1Ñ1Ô1ÐLÐLÐLr   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r#   )r   re   s     r   ú	<genexpr>z8OnlineVarStoreBuilder.storeDeltasMany.<locals>.<genexpr>…   s(   è è € ÐDÐD¨f�E &™MœMÐDÐDÐDÐDÐDÐDr   rG   rU   ro   )r   r(   rT   r;   r-   rH   r@   rf   r   Ú	enumeraterp   rJ   )r.   rh   rV   rq   rr   Úir\   s     `    r   rf   z%OnlineVarStoreBuilder.storeDeltasManyƒ   sW  ø€ ØLÐLÐLÐLÀÐLÑLÔLˆÝÐDÐD¸ÐDÑDÔDÑDÔDˆàŒzð 	0Ø×Ò�c +Ñ.Ô.Ñ/Ô/Ð/à”—’ Ñ-Ô-ˆØÐØˆMå�D”J”OÑ$Ô$ˆØ•3�{Ñ#Ô#Ñ# fÒ,Ð,à×Ò�c +Ñ.Ô.Ñ/Ô/Ð/Ø×'Ò'¨½7Ð'ÑCÔCÐCÝ" ;Ñ/Ô/ð 	)ð 	)‰IˆAˆvØŒJ×Ò˜v­WÐÑ5Ô5Ð5à”k RÑ'¨5Ñ0°1Ñ4ˆFØ"(ˆDŒK˜ÑÐà”+ Ñ# uÑ,ˆØ#)ˆŒ�KÑ àˆr   N)T)rE   )Ú__name__Ú
__module__Ú__qualname__r0   r5   r2   rD   rT   rV   r^   rj   rZ   rf   r   r   r   r!   r!      sè   € € € € € ð
ð 
ð 
ðð ð ðð ð ðð ð ð ð!3ð !3ð !3ð !3ðF 49ð =ð =ð =ð =ð =ð
 =Bð Kð Kð Kð Kð Kð ,1ð ð ð ð ð ð4 5:ð ð ð ð ð ð ð r   r!   rU   c                ó:  ‡— ˆfd„|D ¦   «         }| j         }t          |¦  «        }|dz   |k    rt          |dd …         ¦  «        }n!||k    sJ ||f¦   «         ‚t          |¦  «        }| j                             |¦  «         t          | j        ¦  «        | _        d S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   rm   s     €r   rb   z#VarData_addItem.<locals>.<listcomp>    s!   ø€ Ð'Ð'Ð'˜1ˆeˆe�A‰hŒhÐ'Ð'Ð'r   rE   )ÚVarRegionCountr;   r7   r@   rI   rA   )r.   r\   rV   ÚcountUsÚ	countThems     `  r   ÚVarData_addItemr‚   Ÿ   s§   ø€ Ø'Ð'Ð'Ð' Ð'Ñ'Ô'€FàÔ!€GÝ�F‘”€IØ��{�iÒÐÝ�f˜Q˜R˜R”jÑ!Ô!ˆˆà˜)Ò#Ð#Ð# g¨yÐ%9Ñ#Ô#Ð#Ý�f‘”ˆØ„I×Ò�VÑÔÐÝ˜œ‘^”^€D„N€N€Nr   c                 óD   ‡— ˆfd„t          | j        ¦  «        D ¦   «         S )Nc                 ól   •— i | ]0\  }}|j         d k    ¯‰|         j        |j        |j         |j        f“Œ1S rd   )Ú	PeakCoordÚaxisTagÚ
StartCoordÚEndCoord)ra   ry   ÚregÚ	fvar_axess      €r   ú
<dictcomp>z)VarRegion_get_support.<locals>.<dictcomp>±   sJ   ø€ ð ð ð áˆAˆsØŒ=˜AÒÐð 	�!ŒÔ˜sœ~¨s¬}¸c¼lÐKàÐÐr   )rx   ÚVarRegionAxis)r.   rŠ   s    `r   ÚVarRegion_get_supportr�   °   s9   ø€ ðð ð ð å Ô 2Ñ3Ô3ðñ ô ð r   c                 ó*   — t          | j        ¦  «        S r#   )Úboolr>   ©r.   s    r   ÚVarStore___bool__r‘   »   s   € Ý�”ÑÔÐr   c                   óL   — e Zd Zi fd„Zd„ Zd„ Zd„ Zed„ ¦   «         Zd„ Z	d„ Z
dS )	ÚVarStoreInstancerc                 ó¦   — || _         |�|j        dk    sJ ‚|r|j        ng | _        |r|j        j        ng | _        |                      |¦  «         d S )NrE   )rŠ   ÚFormatr>   Ú_varDataÚVarRegionListr<   Ú_regionsÚsetLocation)r.   ÚvarstorerŠ   Úlocations       r   r0   zVarStoreInstancer.__init__Ã   sf   € Ø"ˆŒØÐ 8¤?°aÒ#7Ð#7Ð#7Ð#7Ø,4Ð<˜Ô(Ð(¸"ˆŒØ9AÐI˜Ô.Ô5Ð5ÀrˆŒØ×Ò˜Ñ"Ô"Ð"Ð"Ð"r   c                 óV   — t          |¦  «        | _        |                      ¦   «          d S r#   )Údictr›   Ú_clearCaches)r.   r›   s     r   r™   zVarStoreInstancer.setLocationÊ   s'   € Ý˜X™œˆŒØ×ÒÑÔÐÐÐr   c                 ó   — i | _         d S r#   )Ú_scalarsr�   s    r   rž   zVarStoreInstancer._clearCachesÎ   s   € ØˆŒˆˆr   c                 óÆ   — | j                              |¦  «        }|€D| j        |                              | j        ¦  «        }t          | j        |¦  «        }|| j         |<   |S r#   )r    rH   r˜   Úget_supportrŠ   r   r›   )r.   Ú	regionIdxÚscalarÚsupports       r   Ú
_getScalarzVarStoreInstancer._getScalarÑ   sZ   € Ø”×"Ò" 9Ñ-Ô-ˆØˆ>Ø”m IÔ.×:Ò:¸4¼>ÑJÔJˆGÝ" 4¤=°'Ñ:Ô:ˆFØ'-ˆDŒM˜)Ñ$Øˆr   c                 óL   — d}t          | |¦  «        D ]\  }}|sŒ|||z  z  }Œ|S )Nç        )Úzip)r\   ÚscalarsÚdeltarn   Úss        r   ÚinterpolateFromDeltasAndScalarsz1VarStoreInstancer.interpolateFromDeltasAndScalarsÙ   sC   € àˆÝ˜ Ñ(Ô(ð 	ð 	‰DˆAˆqØð ØØ�Q˜‘U‰NˆEˆEØˆr   c                 óÄ   ‡ — |dz	  |dz  }}|t           k    rdS ‰ j        }ˆ fd„||         j        D ¦   «         }||         j        |         }‰                      ||¦  «        S )Nro   rG   r¨   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ©r¦   ©ra   Úrir.   s     €r   rb   z1VarStoreInstancer.__getitem__.<locals>.<listcomp>ç   s%   ø€ ÐOÐOÐO¨2�4—?’? 2Ñ&Ô&ÐOÐOÐOr   )ÚNO_VARIATION_INDEXr–   ÚVarRegionIndexr@   r­   )r.   ÚvaridxÚmajorÚminorÚvarDatarª   r\   s   `      r   Ú__getitem__zVarStoreInstancer.__getitem__â   ss   ø€ Ø ‘| V¨f¡_ˆuˆØÕ'Ò'Ð'Ø�3Ø”-ˆØOÐOÐOÐO°¸´Ô1NÐOÑOÔOˆØ˜”Ô$ UÔ+ˆØ×3Ò3°F¸GÑDÔDÐDr   c                 óp   ‡ — ‰ j         }ˆ fd„||         j        D ¦   «         }‰                      ||¦  «        S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   r°   r±   s     €r   rb   z;VarStoreInstancer.interpolateFromDeltas.<locals>.<listcomp>í   s%   ø€ ÐVÐVÐV¨2�4—?’? 2Ñ&Ô&ÐVÐVÐVr   )r–   r´   r­   )r.   ÚvarDataIndexr\   r¸   rª   s   `    r   ÚinterpolateFromDeltasz'VarStoreInstancer.interpolateFromDeltasë   sA   ø€ Ø”-ˆØVÐVÐVÐV°¸Ô1FÔ1UÐVÑVÔVˆØ×3Ò3°F¸GÑDÔDÐDr   N)rz   r{   r|   r0   r™   rž   r¦   Ústaticmethodr­   r¹   r½   r   r   r   r“   r“   Â   s™   € € € € € Ø57ð #ð #ð #ð #ðð ð ðð ð ðð ð ð ðð ñ „\ððEð Eð EðEð Eð Eð Eð Er   r“   TFr>   )r>   c          	      óR  — t          t          ¦  «        }|D ]3}|t          k    rŒ|dz	  }|dz  }	||                              |	¦  «         Œ4~t	          | |¦  «        }
g }t          t          i}t          |
¦  «        D �]d\  }}|                     |¦  «        }|€Œt          |¦  «        }|                     |¦  «         |j	        }g }|dk    r_|r]t          t          |¦  «        ¦  «        D ]?}	|                     |	|v r||	         ndgt          ||	         ¦  «        z  ¦  «         |	||	<   Œ@nx|dk    r#t          |¦  «        t          ||z
  ¦  «        z   }nt          |¦  «        }|D ]=}	t          |¦  «        }|                     ||	         ¦  «         |dz  |z   ||dz  |	z   <   Œ>||_	        t          |j	        ¦  «        |_        |dk    r|                     |¬¦  «         �Œft          | ||¦  «         t          | |dz   t          |¦  «        ¦  «         |                      ¦   «          |S )Nro   rG   r   r>   r9   ÚCount)r   Úsetr³   ÚaddÚgetattrrx   rH   r;   rI   r@   Úranger   rA   rB   ÚsetattrÚprune_regions)r.   ÚvarIdxesr:   ÚretainFirstMapÚadvIdxesr>   Úusedrq   r¶   r·   r¸   Ú
newVarDataÚ
varDataMaprC   Ú
usedMinorsÚnewMajorr   ÚnewItemsÚminorsÚnewMinors                       r   ÚVarStore_subset_varidxesrÒ   ø   sb  € õ •sÑÔ€DØð ð ˆØÕ'Ò'Ð'ØØ˜"‘ˆØ˜‘ˆØˆUŒ�Š˜ÑÔÐÐØõ �d˜GÑ$Ô$€GØ€JÝ$Õ&8Ð9€JÝ  Ñ)Ô)ð 7ñ 7‰ˆˆtØ—X’X˜e‘_”_ˆ
ØÐØÝ�z‘?”?ˆØ×Ò˜$ÑÔÐà”	ˆØˆØ�AŠ:ˆ:˜.ˆ:Ý�s 5™zœzÑ*Ô*ð *ð *�Ø—’Ø$)¨ZÐ$7Ð$7�E˜%”L�L¸a¸SÅ3ÀuÈUÄ|ÑCTÔCTÑ=Tñô ð ð %*�
˜5Ñ!Ð!ð	*ð ˜ŠzˆzÝ Ñ)Ô)­F°:ÀÑ3HÑ,IÔ,IÑI��å 
Ñ+Ô+�Øð Pð P�Ý˜x™=œ=�Ø—’  e¤Ñ-Ô-Ð-Ø5=À±^ÀxÑ4O�
˜E R™K¨5Ñ0Ñ1Ð1àˆŒ	Ý˜TœY™œˆŒà�iÒÐØ×#Ò#¨XÐ#Ñ6Ô6Ð6ùåˆD�'˜:Ñ&Ô&Ð&ÝˆD�'˜GÑ#¥S¨¡_¤_Ñ5Ô5Ð5à×ÒÑÔÐàÐr   r—   )r>   r—   c                óÈ  ‡	— t          ¦   «         }t          | |¦  «        D ]}|                     |j        ¦  «         Œt          | |¦  «        }|j        }g }i Š	t          |¦  «        D ]/}t          |¦  «        ‰	|<   |                     ||         ¦  «         Œ0||_        t          |j        ¦  «        |_        t          | |¦  «        D ]}ˆ	fd„|j        D ¦   «         |_        ŒdS )zRemove unused VarRegions.c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )ra   ry   rL   s     €r   rb   z*VarStore_prune_regions.<locals>.<listcomp>R  s   ø€ ÐIÐIÐI°˜y¨œ|ÐIÐIÐIr   N)	rÁ   rÃ   Úupdater´   r<   r   r;   rI   r=   )
r.   r>   r—   ÚusedRegionsrC   rM   rN   Ú
newRegionsry   rL   s
            @r   ÚVarStore_prune_regionsrØ   <  s  ø€ õ ‘%”%€KÝ˜˜gÑ&Ô&ð 0ð 0ˆØ×Ò˜4Ô.Ñ/Ô/Ð/Ð/å˜˜}Ñ-Ô-€JØÔ€GØ€JØ€IÝ�KÑ Ô ð &ð &ˆÝ˜:‘”ˆ	�!‰Ø×Ò˜' !œ*Ñ%Ô%Ð%Ð%Ø"€JÔÝ  Ô!2Ñ3Ô3€JÔå˜˜gÑ&Ô&ð Jð JˆØIÐIÐIÐI°TÔ5HÐIÑIÔIˆÔÐðJð Jr   c                 ó  — t          | ¦  «        t          j        k    r || ¦  «         dS t          | t          ¦  «        r| D ]}t          ||¦  «         ŒdS t          | d¦  «        rQt          | d¦  «        sA|                      ¦   «         D ]*}t          | |j	        d¦  «        }|�t          ||¦  «         Œ+dS t          | t          j
        ¦  «        r,| j                             ¦   «         D ]}t          ||¦  «         ŒdS dS )zqRecurse down from self, if type of an object is ot.Device,
    call func() on it.  Works on otData-style classes.ÚgetConvertersÚpostReadN)ÚtypeÚotÚDeviceÚ
isinstancer7   Ú_visitÚhasattrrÚ   rÃ   ÚnameÚValueRecordÚ__dict__Úvalues)r.   ÚfuncÚthatÚconvs       r   rà   rà   X  s4  € õ ˆD�z„z•R”YÒÐØˆˆT‰
Œ
ˆ
ˆ
ˆ
å	�D�$Ñ	Ô	ð Øð 	ð 	ˆDÝ�4˜ÑÔÐÐð	ð 	õ 
��Ñ	'Ô	'ð µ¸¸jÑ0IÔ0Ið Ø×&Ò&Ñ(Ô(ð 	#ð 	#ˆDÝ˜4 ¤¨DÑ1Ô1ˆDØÐÝ�t˜TÑ"Ô"Ð"øð	#ð 	#õ
 
�D�"œ.Ñ	)Ô	)ð Ø”M×(Ò(Ñ*Ô*ð 	ð 	ˆDÝ�4˜ÑÔÐÐðð ð	ð 	r   c                 ój   — | j         dk    r'|                     | j        dz  | j        z   ¦  «         dS dS )z6Add VarIdx in this Device table (if any) to the set s.é €  ro   N)ÚDeltaFormatrÂ   Ú	StartSizeÚEndSize)r.   r¬   s     r   Ú_Device_recordVarIdxrî   n  s>   € àÔ˜6Ò!Ð!Ø	�ŠˆtŒ~ Ñ# t¤|Ñ3Ñ4Ô4Ð4Ð4Ð4ð "Ð!r   c                 óR   — t          t          |¬¦  «        }t          | |¦  «         d S )N)r¬   )r   rî   rà   )r.   ÚvaridxesÚadders      r   ÚObject_collect_device_varidxesrò   t  s+   € ÝÕ(¨HÐ5Ñ5Ô5€EÝ
ˆ4�ÑÔÐÐÐr   c                 óâ   — t          | ¦  «        |v rdS |                     t          | ¦  «        ¦  «         | j        dk    r.|| j        dz  | j        z            }|dz	  | _        |dz  | _        dS dS )z9Map VarIdx in this Device table (if any) through mapping.Nrê   ro   rG   )ÚidrÂ   rë   rì   rí   )r.   ÚmappingÚdonerq   s       r   Ú_Device_mapVarIdxr÷   }  sx   € å	ˆ$�x„x�4ÐÐØˆØ‡H‚H�R�‰XŒXÑÔÐØÔ˜6Ò!Ð!Ø˜$œ.¨BÑ.°$´,Ñ>Ô?ˆØ 2™ˆŒØ ‘ˆŒˆˆð "Ð!r   c                 ól   — t          t          |t          ¦   «         ¬¦  «        }t          | |¦  «         d S )N)rõ   rö   )r   r÷   rÁ   rà   )r.   Úvaridxes_mapÚmappers      r   ÚObject_remap_device_varidxesrû   ˆ  s1   € ÝÕ&°Å3Á5Ä5ÐIÑIÔI€FÝ
ˆ4�ÑÔÐÐÐr   c                   óX   — e Zd Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	d„ Z
dS )	Ú	_Encodingc                 óÔ   — || _         t          |¦  «        | _        |                      |¦  «        | _        |                      | j        ¦  «        | _        t          ¦   «         | _        d S r#   )	Úcharsr   ÚwidthÚ_columnsÚcolumnsÚ_characteristic_overheadÚoverheadrÁ   r   )r.   rÿ   s     r   r0   z_Encoding.__init__’  sQ   € ØˆŒ
Ý˜uÑ%Ô%ˆŒ
Ø—}’} UÑ+Ô+ˆŒØ×5Ò5°d´lÑCÔCˆŒÝ‘U”UˆŒ
ˆ
ˆ
r   c                 ó:   — | j                              |¦  «         d S r#   )r   rÂ   )r.   Úrows     r   rI   z_Encoding.append™  s   € ØŒ
�Š�sÑÔÐÐÐr   c                 ó:   — | j                              |¦  «         d S r#   )r   rÕ   )r.   Úlsts     r   Úextendz_Encoding.extendœ  s   € ØŒ
×Ò˜#ÑÔÐÐÐr   c                 ó   — | j         | j        fS r#   )r   rÿ   r�   s    r   Úwidth_sort_keyz_Encoding.width_sort_keyŸ  s   € ØŒz˜4œ:Ð%Ð%r   c                 ó4   — d}|t          | ¦  «        dz  z  }|S )zOReturns overhead in bytes of encoding this characteristic
        as a VarData.é
   é   r   )r  Úcs     r   r  z"_Encoding._characteristic_overhead¢  s%   € ð ˆØ	�Y�wÑÔ !Ñ#Ñ#ˆØˆr   c                 ó>   — d}d}| r| dz  r||z  }| dz  } |dz  }| °|S )Nr   rE   é   é   r   )rÿ   Úcolsry   s      r   r  z_Encoding._columnsª  sL   € àˆØˆØð 	Ø�v‰~ð Ø˜‘	�Ø�a‰KˆEØ�!‰GˆAð	 ð 	ð
 ˆr   c                 ó:  — |j         | j         z  }t          |¦  «        }| j        |j        z  }t                               |¦  «        }| j        
 |j        z   |z
  || j        z
  t          | j        ¦  «        z  z
  ||j        z
  t          |j        ¦  «        z  z
  }|S r#   )	rÿ   r   r  rý   r  r  r   r;   r   )r.   Úother_encodingÚcombined_charsÚcombined_widthÚcombined_columnsÚcombined_overheadÚcombined_gains          r   Úgain_from_mergingz_Encoding.gain_from_mergingµ  s«   € Ø'Ô-°´
Ñ:ˆÝ" >Ñ2Ô2ˆØœ<¨.Ô*@Ñ@ÐÝ%×>Ò>Ð?OÑPÔPÐàŒ]ˆNØÔ%ñ&àñ ð  ¤
Ñ*­c°$´*©o¬oÑ=ñ>ð  Ô 4Ñ4½¸NÔ<PÑ8QÔ8QÑQñ	Rð 	ð Ðr   N)rz   r{   r|   r0   rI   r	  r  r¾   r  r  r  r   r   r   rý   rý   ‘  s•   € € € € € ðð ð ðð ð ðð ð ð&ð &ð &ð ðð ñ „\ðð ðð ñ „\ððð ð ð ð r   rý   c                   ó0   — e Zd Zd„ Zd„ Zed„ ¦   «         ZdS )Ú_EncodingDictc                 ó.   — t          |¦  «        x}| |<   |S r#   )rý   )r.   rÿ   Úrs      r   Ú__missing__z_EncodingDict.__missing__Å  s   € Ý# EÑ*Ô*Ð*ˆˆD�‰KØˆr   c                 óf   — |                       |¦  «        }| |                              |¦  «         d S r#   )Ú_row_characteristicsrI   )r.   r  rÿ   s      r   Úadd_rowz_EncodingDict.add_rowÉ  s3   € Ø×)Ò)¨#Ñ.Ô.ˆØˆUŒ×Ò˜3ÑÔÐÐÐr   c                 óê   — d}d}d}| D ]8}|r||z  }d|cxk    rdk    s
n ||dz  z  }d|cxk    rdk    sn d	} n|d
z  }Œ9|r/d}d}| D ](}|r||dz  z  }d|cxk    rdk    s
n ||dz  z  }|d
z  }Œ)|S )z+Returns encoding characteristics for a row.Fr   rE   i€ÿÿÿé   r  i €ÿÿiÿ  Tr  é   é   r   )r  Ú	longWordsrÿ   ry   Úvs        r   r"  z"_EncodingDict._row_characteristicsÍ  s  € ð ˆ	àˆØˆØð 	ð 	ˆAØð Ø˜‘
�Ø˜AÐ$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ø˜˜V™Ñ#�Ø˜aÐ(Ð(Ò(Ð( 5Ò(Ð(Ð(Ð(Ø �	Ø�Ø�!‰GˆAˆAàð 		àˆEØˆAØð ð �Øð (Ø˜Q ™ZÑ'�EØ !Ð,Ð,Ò,Ð, uÒ,Ð,Ð,Ð,Ø˜Q ™ZÑ'�EØ�a‘��àˆr   N)rz   r{   r|   r   r#  r¾   r"  r   r   r   r  r  Ä  sM   € € € € € ðð ð ð ð  ð  ð ðð ñ „\ðð ð r   r  rE   c           
      ót	  — t          | j        j        ¦  «        }dg|z  }i }t          ¦   «         }t	          | j        ¦  «        D ]ç\  }}|j        }	t	          |j        ¦  «        D ]Æ\  }
}t          |¦  «        }|dk    r't          |	|¦  «        D ]\  }}||xx         |z  cc<   Œn9t          |	|¦  «        D ](\  }}||xx         t          ||z  ¦  «        |z  z  cc<   Œ)t          |¦  «        }|rt          |¦  «        sd||dz  |
z   <   Œ¦|                     |¦  «         |||dz  |
z   <   ŒÇŒèt          |                     ¦   «         t           j        ¬¦  «        }~g }t	          |¦  «        D ]_\  }}t%          |dz   t          |¦  «        ¦  «        D ]9}||         }|                     |¦  «        }|dk    rt)          || ||f¦  «         Œ:Œ`|�r(t+          |¦  «        \  }}}||         �||         €Œ'||         ||         }}d\  ||<   ||<   |j        |j        z  }t!          |¦  «        }|                     |j        ¦  «         |                     |j        ¦  «         t	          |¦  «        D ]o\  }}|€Œ|j        |k    r |                     |j        ¦  «         d||<   Œ3|                     |¦  «        }|dk    r!t)          || |t          |¦  «        f¦  «         Œp|                     |¦  «         |�°(d„ |D ¦   «         }i }|                     t           j        ¬¦  «         g | _        |D ]Ç}t          |j        ¦  «        }|r¯t          | j        ¦  «        }t7          j        ¦   «         }| j                             |¦  «         t%          |¦  «        |_        t          |j        ¦  «        |_        |dd…         |dd…         c|_        }t	          |j        ¦  «        D ]\  }
}|dz  |
z   ||<   Œ|°¯ŒÈt:          t:          i}|                     ¦   «         D ]\  }}|�||         nt:          ||<   Œt          | j        j        ¦  «        | j        _        t          | j        ¦  «        | _        | j        D ]/}t          |j        ¦  «        |_         | !                    ¦   «          Œ0|  "                    ¦   «          |S )	z@Optimize storage. Returns mapping from old VarIdxes to new ones.r   rE   Nro   r   )NNc                 ó   — g | ]}|®|‘ŒS r#   r   )ra   Úencodings     r   rb   z%VarStore_optimize.<locals>.<listcomp>…  s   € ÐGÐGÐG˜h°(Ð2F�Ð2FÐ2FÐ2Fr   rG   )#r;   r—   r<   r  rx   r>   r´   r@   r7   r©   rV   r   Úanyr#  r   rå   rý   r  rÄ   r  r   r   rÿ   r	  r   rI   ÚsortrÝ   r   r³   r=   r?   rA   r:   rÆ   )r.   Úuse_NO_VARIATION_INDEXÚquantizationÚnÚzeroesÚfront_mappingÚ	encodingsr¶   rC   rO   r·   Úitemr  r£   r)  ÚtodoÚheapry   r,  Újr  Úcombining_gainÚ_r  Úcombined_encodingÚkÚencÚback_mappingr   Ú
varidx_maps                                 r   ÚVarStore_optimizer@  ì  s@  € õX 	ˆDÔÔ%Ñ&Ô&€AØˆS�1‰W€Fà€Må‘”€Iõ ! ¤Ñ.Ô.ð 7ð 7‰ˆˆtØÔ+ˆå$ T¤YÑ/Ô/ð 	7ð 	7‰KˆE�4Ý�v‘,”,ˆCà˜qÒ Ð Ý$'¨°tÑ$<Ô$<ð (ð (‘L�I˜qØ˜	�N�N”N aÑ'�N�N‘N�Nð(õ %(¨°tÑ$<Ô$<ð ð ‘L�I˜qØ˜	�N�N”NÝ˜a ,Ñ.Ñ/Ô/°,Ñ>ñ�N�N‘N�Nõ ˜‘*”*ˆCà%ð ­c°#©h¬hð Ø7;�˜u¨™{¨eÑ3Ñ4Øà×Ò˜cÑ"Ô"Ð"Ø36ˆM˜5 B™;¨%Ñ/Ñ0Ð0ð'	7õ, �)×"Ò"Ñ$Ô$­)Ô*BÐCÑCÔC€DØð €DÝ  ‘”ð 8ð 8‰ˆˆ8Ý�q˜1‘u�c $™iœiÑ(Ô(ð 	8ð 	8ˆAØ! !œWˆNØ%×7Ò7¸ÑGÔGˆNØ Ò!Ð!Ý˜  °°AÐ6Ñ7Ô7Ð7øð		8ð ñ 'Ý˜$‘-”-‰ˆˆ1ˆaØ�Œ7ˆ?˜d 1œg˜oØà#'¨¤7¨D°¬G�.ˆØ%ÑˆˆQ‰��a‘ð (Ô-°´Ñ>ˆÝ% nÑ5Ô5ÐØ× Ò  ¤Ñ0Ô0Ð0Ø× Ò  Ô!5Ñ6Ô6Ð6å ‘o”oð 	@ð 	@‰FˆAˆsØˆ{Øð Œy˜NÒ*Ð*Ø!×(Ò(¨¬Ñ3Ô3Ð3Ø��Q‘Øà.×@Ò@ÀÑEÔEˆNØ Ò!Ð!Ý˜  °µC¸±I´IÐ>Ñ?Ô?Ð?øà�ŠÐ%Ñ&Ô&Ð&ð; ñ 'ð> HÐG¨$ÐGÑGÔG€Ið €LØ‡N‚N•yÔ/€NÑ0Ô0Ð0Ø€D„LØð ;ð ;ˆÝ�x”~Ñ&Ô&ˆàð 	;Ý˜œÑ%Ô%ˆEÝ”:‘<”<ˆDØŒL×Ò Ñ%Ô%Ð%Ý"'¨¡(¤(ˆDÔÝ"% dÔ&9Ñ":Ô":ˆDÔð  % W f Wœ~¨u°V°W°W¬~ÐˆDŒI�uå(¨¬Ñ3Ô3ð ;ð ;‘��tØ&+¨r¡k°UÑ%:�˜TÑ"Ð"ð ð 	;øõ %Õ&8Ð9€JØ×#Ò#Ñ%Ô%ð Qð Q‰ˆˆ1Ø+,¨=˜ Qœ˜Õ>Pˆ
�1‰ˆõ &)¨Ô);Ô)BÑ%CÔ%C€DÔÔ"Ý˜DœLÑ)Ô)€DÔØ”ð ð ˆÝ˜TœY™œˆŒØ�Š‰Œˆˆð 	×ÒÑÔÐàÐr   Nc                 óÆ  — ddl m} ddlm} ddlm} ddlm}  |dt          j	        ¬¦  «        }| 
                    dt          d	¬
¦  «         | 
                    d¦  «         | 
                    dd¬¦  «         |                     | ¦  «        } |d¬¦  «         |j        }|j        }|j        }	 ||¦  «        }
|
d         }|j        j        } |¦   «         }|                     ||
¦  «         t'          |                     ¦   «         ¦  «        }t+          d|z  ¦  «         |                     |¬¦  «        } |¦   «         }|                     ||
¦  «         t'          |                     ¦   «         ¦  «        }t+          d|z  ¦  «         |	�U|j                             |¦  «         d|
v r |
d         j                             |¦  «         |
                     |	¦  «         dS dS )z&Optimize a font's GDEF variation storer   )ÚArgumentParser)ÚconfigLogger)ÚTTFont)ÚOTTableWriterzvarLib.varStore)ÚprogÚdescriptionz--quantizationrE   )rÜ   ÚdefaultÚfontfileÚoutfileú?)ÚnargsÚINFO)ÚlevelÚGDEFzBefore: %7d bytes)r0  zAfter:  %7d bytesNÚGPOS)ÚargparserB  Ú	fontToolsrC  ÚfontTools.ttLibrD  ÚfontTools.ttLib.tables.otBaserE  ÚmainÚ__doc__Úadd_argumentÚintÚ
parse_argsr0  rI  rJ  ÚtableÚVarStoreÚcompiler;   Ú
getAllDataÚprintr:   Úremap_device_varidxesÚsave)ÚargsrB  rC  rD  rE  ÚparserÚoptionsr0  rI  rJ  ÚfontÚgdefÚstoreÚwriterÚsizer?  s                   r   rU  rU  °  s  € à'Ð'Ð'Ð'Ð'Ð'Ø&Ð&Ð&Ð&Ð&Ð&Ø&Ð&Ð&Ð&Ð&Ð&Ø;Ð;Ð;Ð;Ð;Ð;àˆ^Ð!2ÅÄÐMÑMÔM€FØ
×ÒÐ(­s¸AÐÑ>Ô>Ð>Ø
×Ò˜
Ñ#Ô#Ð#Ø
×Ò˜	¨ÐÑ-Ô-Ð-Ø×Ò Ñ%Ô%€Gð €L�vÐÑÔÐàÔ'€LØÔ€HØŒo€Gàˆ6�(ÑÔ€DØ�Œ<€DØŒJÔ€Eàˆ]‰_Œ_€FØ	‡M‚M�&˜$ÑÔÐÝˆv× Ò Ñ"Ô"Ñ#Ô#€DÝ	Ð
 Ñ
$Ñ%Ô%Ð%à—’¨\�Ñ:Ô:€Jàˆ]‰_Œ_€FØ	‡M‚M�&˜$ÑÔÐÝˆv× Ò Ñ"Ô"Ñ#Ô#€DÝ	Ð
 Ñ
$Ñ%Ô%Ð%àÐØŒ
×(Ò(¨Ñ4Ô4Ð4Ø�Tˆ>ˆ>Ø�ŒLÔ×4Ò4°ZÑ@Ô@Ð@à�	Š	�'ÑÔÐÐÐð Ðr   Ú__main__)TrE   r#   )AÚfontTools.misc.roundToolsr   r   ÚfontTools.misc.intToolsr   ÚfontTools.ttLib.tablesr   rÝ   ÚfontTools.varLib.modelsr   ÚfontTools.varLib.builderr	   r
   r   r   Ú	functoolsr   Úcollectionsr   Úheapqr   r   r³   r[  r   Úobjectr!   rV   r‚   r>   rp   r�   Ú	VarRegionr¢   r‘   Ú__bool__r“   rÁ   rÒ   Úsubset_varidxesrØ   rÆ   rà   rî   rò   rO  Úcollect_device_varidxesrP  r÷   rû   r_  rý   r�   r  r@  r:   rU  rz   Úsysr;   ÚargvÚexitÚdoctestÚtestmodÚfailedr   r   r   ú<module>r}     sª  ðØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø -Ð -Ð -Ð -Ð -Ð -Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #ð Ô*Ð Ø!3€„Ô ð<ð <ð <ðDð Dð Dð Dð D˜Fñ Dô Dð DðN ,1ð $ð $ð $ð $ð $ð %€„
Ô ðð ð ð 1€„Ô ðð ð ð )€„Ô ð,Eð ,Eð ,Eð ,Eð ,E˜ñ ,Eô ,Eð ,Eðr ØØˆS‰UŒUð>ð ð>ð >ð >ð >ð >ðB 7€„Ô ð -6À_ð Jð Jð Jð Jð Jð2 3€„Ô ðð ð ð,5ð 5ð 5ðð ð ð
 #A€„Ô Ø"@€„Ô ð'ð 'ð 'ðð ð ð
 !=€„Ô Ø <€„Ô ð0ð 0ð 0ð 0ð 0�ñ 0ô 0ð 0ðf%ð %ð %ð %ð %�Dñ %ô %ð %ðP~ð ~ð ~ð ~ðB )€„Ô ð)ð )ð )ð )ðX ˆzÒÐØ€J€J€Jà
€sˆ3Œ8�}„}�qÒÐØˆŒ��‘”ÑÔÐØ€N€N€Nà€C„Hˆ_ˆWŒ_ÑÔÔ%Ñ&Ô&Ð&Ð&Ð&ð Ðr   