§
    ¢”j¥Œ  ã                  ób  — d Z ddlmZ ddlmZmZmZmZ ddlZddl	m
Z
 ddlmZ ddlZddlZ ej        e¦  «        Zg d¢Zg d¢Zd'd„Z ej        d¦  «        Zd(d„Z ee¦  «        \  ZZ ee¦  «        \  ZZ G d„ de¦  «        ZdZdZdZ de›de ›de›d�Z! ej        e!¦  «        Z" ej        d¦  «        Z# ej        d¦  «        Z$ ej        d¦  «        Z% ej        d¦  «        Z&d)d"„Z' G d#„ d$¦  «        Z(d%„ Z)ed&k    r,ddl*Z*ddl+Z+ e*j,         e+j-        ¦   «         j.        ¦  «         dS dS )*zSttLib.tables.ttProgram.py -- Assembler/disassembler for TrueType bytecode programs.é    )Úannotations)Ú
num2binaryÚ
binary2numÚreadHexÚstrjoinN)ÚStringIO)ÚList))é@   ÚNPUSHBr   Ú
PushNBytesr   éÿÿÿÿ)éA   ÚNPUSHWr   Ú
PushNWordsr   r   )é°   ÚPUSHBé   Ú	PushBytesr   r   )é¸   ÚPUSHWr   Ú	PushWordsr   r   )w)é   ÚAAr   ÚAdjustAngleé   r   )éd   ÚABSr   ÚAbsoluter   r   )é`   ÚADDr   ÚAddé   r   )é'   ÚALIGNPTSr   ÚAlignPtsr"   r   )é<   ÚALIGNRPr   ÚAlignRelativePtr   r   )éZ   ÚANDr   Ú
LogicalAndr"   r   )é+   ÚCALLr   ÚCallFunctionr   r   )ég   ÚCEILINGr   ÚCeilingr   r   )é%   ÚCINDEXr   ÚCopyXToTopStackr   r   )é"   ÚCLEARr   Ú
ClearStackr   r   )éO   ÚDEBUGr   Ú	DebugCallr   r   )és   ÚDELTAC1r   ÚDeltaExceptionC1r   r   )ét   ÚDELTAC2r   ÚDeltaExceptionC2r   r   )éu   ÚDELTAC3r   ÚDeltaExceptionC3r   r   )é]   ÚDELTAP1r   ÚDeltaExceptionP1r   r   )éq   ÚDELTAP2r   ÚDeltaExceptionP2r   r   )ér   ÚDELTAP3r   ÚDeltaExceptionP3r   r   )é$   ÚDEPTHr   ÚGetDepthStackr   r   )éb   ÚDIVr   ÚDivider"   r   )é    ÚDUPr   ÚDuplicateTopStackr   r"   )éY   ÚEIFr   ÚEndIfr   r   )é   ÚELSEr   ÚElser   r   )é-   ÚENDFr   ÚEndFunctionDefinitionr   r   )éT   ÚEQr   ÚEqualr"   r   )éW   ÚEVENr   ÚEvenr   r   )é,   ÚFDEFr   ÚFunctionDefinitionr   r   )éN   ÚFLIPOFFr   ÚSetAutoFlipOffr   r   )éM   ÚFLIPONr   ÚSetAutoFlipOnr   r   )é€   ÚFLIPPTr   Ú	FlipPointr   r   )é‚   Ú	FLIPRGOFFr   ÚFlipRangeOffr"   r   )é�   ÚFLIPRGONr   ÚFlipRangeOnr"   r   )éf   ÚFLOORr   ÚFloorr   r   )éF   ÚGCr   ÚGetCoordOnPVectorr   r   )éˆ   ÚGETINFOr   ÚGetInfor   r   )é‘   ÚGETVARIATIONr   ÚGetVariationr   r   )é   ÚGFVr   Ú
GetFVectorr   r"   )é   ÚGPVr   Ú
GetPVectorr   r"   )éR   ÚGTr   ÚGreaterThanr"   r   )éS   ÚGTEQr   ÚGreaterThanOrEqualr"   r   )é‰   ÚIDEFr   ÚInstructionDefinitionr   r   )éX   ÚIFr   ÚIfr   r   )éŽ   ÚINSTCTRLr   ÚSetInstrExecControlr"   r   )é9   ÚIPr   ÚInterpolatePtsr   r   )é   ÚISECTr   ÚMovePtToIntersecté   r   )é0   ÚIUPr   ÚInterpolateUntPtsr   r   )é   ÚJMPRr   ÚJumpr   r   )éy   ÚJROFr   ÚJumpRelativeOnFalser"   r   )éx   ÚJROTr   ÚJumpRelativeOnTruer"   r   )é*   ÚLOOPCALLr   ÚLoopAndCallFunctionr"   r   )éP   ÚLTr   ÚLessThanr"   r   )éQ   ÚLTEQr   ÚLessThenOrEqualr"   r   )é‹   ÚMAXr   ÚMaximumr"   r   )éI   ÚMDr   ÚMeasureDistancer"   r   )é.   ÚMDAPr   ÚMoveDirectAbsPtr   r   )éÀ   ÚMDRPrž   ÚMoveDirectRelPtr   r   )é>   ÚMIAPr   ÚMoveIndirectAbsPtr"   r   )éŒ   ÚMINr   ÚMinimumr"   r   )é&   ÚMINDEXr   ÚMoveXToTopStackr   r   )éà   ÚMIRPrž   ÚMoveIndirectRelPtr"   r   )éK   ÚMPPEMr   ÚMeasurePixelPerEmr   r   )éL   ÚMPSr   ÚMeasurePointSizer   r   )é:   ÚMSIRPr   ÚMoveStackIndirRelPtr"   r   )éc   ÚMULr   ÚMultiplyr"   r   )ée   ÚNEGr   ÚNegater   r   )éU   ÚNEQr   ÚNotEqualr"   r   )é\   ÚNOTr   Ú
LogicalNotr   r   )él   ÚNROUNDr"   ÚNoRoundr   r   )éV   ÚODDr   ÚOddr   r   )é[   ÚORr   Ú	LogicalOrr"   r   )é!   ÚPOPr   ÚPopTopStackr   r   )éE   ÚRCVTr   ÚReadCVTr   r   )é}   ÚRDTGr   ÚRoundDownToGridr   r   )éz   ÚROFFr   ÚRoundOffr   r   )éŠ   ÚROLLr   ÚRollTopThreeStackr   r   )éh   ÚROUNDr"   ÚRoundr   r   )éC   ÚRSr   Ú	ReadStorer   r   )é=   ÚRTDGr   ÚRoundToDoubleGridr   r   )é   ÚRTGr   ÚRoundToGridr   r   )é   ÚRTHGr   ÚRoundToHalfGridr   r   )é|   ÚRUTGr   ÚRoundUpToGridr   r   )éw   ÚS45ROUNDr   ÚSuperRound45Degreesr   r   )é~   ÚSANGWr   ÚSetAngleWeightr   r   )é…   ÚSCANCTRLr   ÚScanConversionControlr   r   )é�   ÚSCANTYPEr   ÚScanTyper   r   )éH   ÚSCFSr   ÚSetCoordFromStackFPr"   r   )é   ÚSCVTCIr   ÚSetCVTCutInr   r   )é^   ÚSDBr   ÚSetDeltaBaseInGStater   r   )é†   ÚSDPVTLr   ÚSetDualPVectorToLiner"   r   )é_   ÚSDSr   ÚSetDeltaShiftInGStater   r   )é   ÚSFVFSr   ÚSetFVectorFromStackr"   r   )é   ÚSFVTCAr   ÚSetFVectorToAxisr   r   )é   ÚSFVTLr   ÚSetFVectorToLiner"   r   )é   ÚSFVTPVr   ÚSetFVectorToPVectorr   r   )é4   ÚSHCr   ÚShiftContourByLastPtr   r   )é2   ÚSHPr   ÚShiftPointByLastPointr   r   )é8   ÚSHPIXr   ÚShiftZoneByPixelr   r   )é6   ÚSHZr   ÚShiftZoneByLastPointr   r   )é   ÚSLOOPr   ÚSetLoopVariabler   r   )é   ÚSMDr   ÚSetMinimumDistancer   r   )é
   ÚSPVFSr   ÚSetPVectorFromStackr"   r   )r"   ÚSPVTCAr   ÚSetPVectorToAxisr   r   )é   ÚSPVTLr   ÚSetPVectorToLiner"   r   )év   ÚSROUNDr   Ú
SuperRoundr   r   )é   ÚSRP0r   ÚSetRefPoint0r   r   )é   ÚSRP1r   ÚSetRefPoint1r   r   )é   ÚSRP2r   ÚSetRefPoint2r   r   )é   ÚSSWr   ÚSetSingleWidthr   r   )é   ÚSSWCIr   ÚSetSingleWidthCutInr   r   )éa   ÚSUBr   ÚSubtractr"   r   )r   ÚSVTCAr   ÚSetFPVectorToAxisr   r   )é#   ÚSWAPr   ÚSwapTopStackr"   r"   )é   ÚSZP0r   ÚSetZonePointer0r   r   )é   ÚSZP1r   ÚSetZonePointer1r   r   )é   ÚSZP2r   ÚSetZonePointer2r   r   )é   ÚSZPSr   ÚSetZonePointerSr   r   )é)   ÚUTPr   Ú	UnTouchPtr   r   )ép   ÚWCVTFr   ÚWriteCVTInFUnitsr"   r   )éD   ÚWCVTPr   ÚWriteCVTInPixelsr"   r   )éB   ÚWSr   Ú
WriteStorer"   r   ÚvalueÚintÚbitsÚreturnÚstrc                óT   — d}t          |¦  «        D ]}d| dz           |z   }| dz	  } Œ|S )NÚ Ú01r   )Úrange)r~  r€  ÚsÚis       úo/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/ttLib/tables/ttProgram.pyÚbitReprrŠ      s?   € Ø
€AÝ�4‰[Œ[ð ð ˆØ�˜‘Ô Ñ!ˆØ˜‘
ˆˆØ€Hó    z[A-Z][A-Z0-9]*$ÚinstructionListú)list[tuple[int, str, int, str, int, int]]útuple[dict, dict]c                óÐ   — i }i }| D ]\\  }}}}}}t                                |¦  «        sJ ‚|||f||<   |r$|}	t          d|z  ¦  «        D ]}
|||	|f|||
z   <   ŒŒS|dd|f||<   Œ]||fS )Nr   r   )Ú_mnemonicPatÚmatchr†  )rŒ  Ú
opcodeDictÚmnemonicDictÚopÚmnemonicÚargBitsÚnameÚpopsÚpushesÚ	argoffsetrˆ  s              r‰  Ú	_makeDictr›  «   sÀ   € ð €JØ€LØ5Dð 2ð 2Ñ1ˆˆH�g˜t T¨6Ý×!Ò! (Ñ+Ô+Ð+Ð+Ð+Ø!# W¨dÐ!2ˆ�XÑØð 	2ØˆIÝ˜1 ™<Ñ(Ô(ð Hð H�Ø%-¨w¸	À4Ð%G�
˜2 ™6Ñ"Ð"ðHð & q¨!¨TÐ1ˆJ�r‰NˆNØ�|Ð#Ð#r‹  c                  ó   — e Zd Zdd„Zd	d„ZdS )
Útt_instructions_errorÚerrorr‚  r�  ÚNonec                ó   — || _         d S ©N)rž  )Úselfrž  s     r‰  Ú__init__ztt_instructions_error.__init__Á   s   € ØˆŒ
ˆ
ˆ
r‹  c                ó0   — dt          | j        ¦  «        z  S )NzTT instructions error: %s)Úreprrž  ©r¢  s    r‰  Ú__str__ztt_instructions_error.__str__Ä   s   € Ø*­T°$´*Ñ-=Ô-=Ñ=Ð=r‹  N)rž  r‚  r�  rŸ  )r�  r‚  )Ú__name__Ú
__module__Ú__qualname__r£  r§  © r‹  r‰  r�  r�  À   s<   € € € € € ðð ð ð ð>ð >ð >ð >ð >ð >r‹  r�  z	/\*.*?\*/z([A-Z][A-Z0-9]*)\s*\[(.*?)\]z-?[0-9]+ú(z)|(ú)z\s*z-[A-Z][A-Z0-9]*\s*\[.*?\]\s*/\* ([0-9]+).*?\*/z^FDEF|IF|ELSE\[ \]\t.+z^ELSE|ENDF|EIF\[ \]\t.+ÚdataÚposc                ór   — t                                | |¦  «        }|j        d         d         }||k    sJ ‚|S )Nr   r   )Ú_whiteREr‘  Úregs)r®  r¯  ÚmÚnewPoss       r‰  Ú
_skipWhiterµ  Ö   s6   € Ý�Š�t˜SÑ!Ô!€AØŒV�AŒY�qŒ\€FØ�SŠ=ˆ=ˆ=ˆ=Ø€Mr‹  c                  óv   — e Zd Zdd„Zdd„Zdd	„Zdd
„Zddd„Zdd„Zdd„Z	dd„Z
ddd„Zdd„ZeZdd„Zdd„ZdS ) ÚProgramr�  rŸ  c                ó   — d S r¡  r«  r¦  s    r‰  r£  zProgram.__init__Þ   s   € Øˆr‹  ÚbytecodeÚbytesc                ób   — t          j         d|¦  «        | _        t          | d¦  «        r| `d S d S )NÚBÚassembly)Úarrayr¹  Úhasattrr½  )r¢  r¹  s     r‰  ÚfromBytecodezProgram.fromBytecodeá   s:   € Ýœ C¨Ñ2Ô2ˆŒÝ�4˜Ñ$Ô$ð 	Ø���ð	ð 	r‹  r½  úlist[str] | strc                ó  — t          |t          ¦  «        r|| _        nSt          |t          ¦  «        r|                     ¦   «         | _        n$t          dt          |¦  «        j        › �¦  «        ‚t          | d¦  «        r| `	d S d S )Nzexpected str or List[str], got r¹  )
Ú
isinstanceÚlistr½  r‚  Ú
splitlinesÚ	TypeErrorÚtyper¨  r¿  r¹  )r¢  r½  s     r‰  ÚfromAssemblyzProgram.fromAssemblyæ   s‹   € Ý�h¥Ñ%Ô%ð 	YØ$ˆDŒMˆMÝ˜¥#Ñ&Ô&ð 	YØ$×/Ò/Ñ1Ô1ˆDŒMˆMåÐW½dÀ8¹n¼nÔ>UÐWÐWÑXÔXÐXÝ�4˜Ñ$Ô$ð 	Ø���ð	ð 	r‹  c                ó|   — t          | d¦  «        s|                      ¦   «          | j                             ¦   «         S )Nr¹  )r¿  Ú	_assembler¹  Útobytesr¦  s    r‰  ÚgetBytecodezProgram.getBytecodeð   s8   € Ý�t˜ZÑ(Ô(ð 	Ø�NŠNÑÔÐØŒ}×$Ò$Ñ&Ô&Ð&r‹  Tú	List[str]c                ó\   — t          | d¦  «        s|                      |¬¦  «         | j        S )Nr½  ©Úpreserve)r¿  Ú_disassembler½  )r¢  rÐ  s     r‰  ÚgetAssemblyzProgram.getAssemblyõ   s3   € Ý�t˜ZÑ(Ô(ð 	1Ø×Ò xÐÑ0Ô0Ð0ØŒ}Ðr‹  c                ó  — t          |d¦  «        r|j        �rl	 |                      ¦   «         }|sd S |                     d¦  «         |                     ¦   «          d}d}t          |¦  «        }||k     �rÎ||         }t                               |¦  «        r|dz  }|                     |j	        |z  ¦  «         |                     |¦  «         |                     ¦   «          t                               |¦  «        }|dz   }|�rt          |                     d¦  «        ¦  «        }	g }
d}t          |	¦  «        D ]‚}|r`|dz  s[|                     |j	        |z  ¦  «         |                     d                     |
¦  «        ¦  «         |                     ¦   «          g }
|
                     |||z            ¦  «         Œƒ|                     |j	        |z  ¦  «         |                     d                     |
¦  «        ¦  «         |                     ¦   «          ||z   dz   }t                                |¦  «        r|dz  }||k     �°Î|                     d¦  «         |                     ¦   «          d S #  dd l}t'          ¦   «         }|                     |¬¦  «         d}||                     ¦   «         z  }t,                               |¦  «         |                     d	¦  «         |                     ¦   «          |                     |                     ¦   «         ¦  «         |                     ¦   «          |                     |                      ¦   «         ¦  «         |                     d	¦  «         |                     ¦   «          Y d S xY w|                      ¦   «         }|sd S |                     d	¦  «         |                     ¦   «          |                     |¦  «         |                     d	¦  «         |                     ¦   «          d S )
NÚdisassembleInstructionsr½  r   r   r  ú )ÚfilezBAn exception occurred during the decompilation of glyph program:

r¹  )r¿  rÔ  rÒ  ÚbegintagÚnewlineÚlenÚ_unindentREr‘  ÚwriteÚindentwhiteÚ_pushCountPatr  Úgroupr†  ÚjoinÚappendÚ	_indentREÚendtagÚ	tracebackr   Ú	print_excÚgetvalueÚlogrž  ÚcommentÚstripÚdumphexrÌ  )r¢  ÚwriterÚttFontr½  rˆ  ÚindentÚnInstrÚinstrr³  ÚnValuesÚlineÚjrã  ÚtmpÚmsgr¹  s                   r‰  ÚtoXMLzProgram.toXMLú   sÑ  € å˜Ð 9Ñ:Ô:ðA	àÔ-ñA	ð4!Ø×+Ò+Ñ-Ô-�ð"  ð Ø�FØ—’ 
Ñ+Ô+Ð+Ø—’Ñ Ô Ð Ø�Ø�Ý˜X™œ�Ø˜&’j‘jØ$ QœK�EÝ"×(Ò(¨Ñ/Ô/ð $Ø !™˜Ø—L’L Ô!3°fÑ!<Ñ=Ô=Ð=Ø—L’L Ñ'Ô'Ð'Ø—N’NÑ$Ô$Ð$Ý%×+Ò+¨EÑ2Ô2�AØ˜A™�AØñ &Ý"% a§g¢g¨a¡j¤j¡/¤/˜Ø*,˜Ø˜Ý!& w¡¤ð 9ð 9˜AØ ð *¨!¨b©&ð *Ø &§¢¨VÔ-?À&Ñ-HÑ IÔ IÐ IØ &§¢¨S¯XªX°d©^¬^Ñ <Ô <Ð <Ø &§¢Ñ 0Ô 0Ð 0Ø') Ø ŸKšK¨°°Q±¬Ñ8Ô8Ð8Ð8ØŸš VÔ%7¸&Ñ%@ÑAÔAÐAØŸš S§X¢X¨d¡^¤^Ñ4Ô4Ð4ØŸšÑ(Ô(Ð(Ø ™E A™I˜Ý —’ uÑ-Ô-ð $Ø !™˜ð3 ˜&’j‘jð4 —’˜jÑ)Ô)Ð)Ø—’Ñ Ô Ð Ð Ð øðe!Ø Ð Ð Ð å‘j”j�Ø×#Ò#¨Ð#Ñ-Ô-Ð-Ø\�Ø�s—|’|‘~”~Ñ%�Ý—	’	˜#‘”�Ø—’ 
Ñ+Ô+Ð+Ø—’Ñ Ô Ð Ø—’˜sŸyšy™{œ{Ñ+Ô+Ð+Ø—’Ñ Ô Ð Ø—’˜t×/Ò/Ñ1Ô1Ñ2Ô2Ð2Ø—’˜jÑ)Ô)Ð)Ø—’Ñ Ô Ð Ð Ð Ð øøøðL ×'Ò'Ñ)Ô)ˆHØð Ø�Ø�OŠO˜JÑ'Ô'Ð'Ø�NŠNÑÔÐØ�NŠN˜8Ñ$Ô$Ð$Ø�MŠM˜*Ñ%Ô%Ð%Ø�NŠNÑÔÐÐÐs   šI. É.DNc                óÚ   — |dk    r:|                       t          |¦  «        ¦  «         |                      ¦   «          | `d S |dk    sJ ‚|                      t          |¦  «        ¦  «         d S )Nr½  r¹  )rÈ  r   rÊ  r½  rÀ  r   )r¢  r—  ÚattrsÚcontentrë  s        r‰  ÚfromXMLzProgram.fromXML>  su   € Ø�:ÒÐØ×Ò�g gÑ.Ô.Ñ/Ô/Ð/Ø�NŠNÑÔÐØ���à˜:Ò%Ð%Ð%Ð%Ø×Ò�g gÑ.Ô.Ñ/Ô/Ð/Ð/Ð/r‹  c                óú
  — d                      t          | dg ¦  «        ¦  «        }g }|j        }t          |¦  «        }t	          |d¦  «        }||k     �rãt
                               ||¦  «        }|€ t          d||dz
  |dz   …         z  ¦  «        ‚|                     ¦   «         \  }}}	}
}|j	        d         d         }|rt	          ||¦  «        }Œ„|	 
                    ¦   «         }	|                     d¦  «        r$t          |dd …         ¦  «        } ||¦  «         �n|d	vrht          |         \  }}}t          |	¦  «        |k    rt          d
|›d|	›d�¦  «        ‚|	rt          |	¦  «        }	 |||	z   ¦  «         �n£ ||¦  «         �n–g }t	          ||¦  «        }||k     r§t
                               ||¦  «        }|€t          d|||dz   …         z  ¦  «        ‚|                     ¦   «         \  }}}	}
}|
€|€nN|j	        d         d         }t	          ||¦  «        }|�Œ…|                     t          |
¦  «        ¦  «         ||k     °§t          |¦  «        }|dk    �rçd}|�rá||k     rB|dk     r<d||         cxk    rdk    s)n |dz  }||k     r|dk     rd||         cxk    rdk    ¯$n Œ'd}||z   |k     rK|dk     rEd|||z            cxk    rdk    r/n n,|dz  }||z   |k     r|dk     rd|||z            cxk    rdk    °*n |dk     r||z   dk     r||z   |k    r||z  }Œ¿|rš|dk    r%t          d         \  }}}||z   dz
  } ||¦  «         n't          d         \  }}} ||¦  «          ||¦  «         |d |…         D ]=}d|cxk    rdk     sn J d|z  ¦   «         ‚ ||dz	  dz  ¦  «          ||dz  ¦  «         Œ>|rn	 |dk    r%t          d         \  }}}||z   dz
  } ||¦  «         n't          d         \  }}} ||¦  «          ||¦  «         ||||z   …         D ]} ||¦  «         Œ||z   }||d …         }||z  }d}|�°ánÚ|d         dk    }t          |         \  }}}|d         dk    r$|dk    s
J |¦   «         ‚||z   dz
  } ||¦  «         n|dk     sJ ‚ ||¦  «          ||¦  «         |rA|D ]=}d|cxk    rdk     sn J d|z  ¦   «         ‚ ||dz	  dz  ¦  «          ||dz  ¦  «         Œ>n,|D ])}d|cxk    rdk     sn J d|z  ¦   «         ‚ ||¦  «         Œ*t	          ||¦  «        }||k     �°ã|r(t!          |¦  «        dk     rt#          |¦  «        dk    sJ ‚t%          j        d|¦  «        | _        d S )NrÕ  r½  r   zSyntax error in TT program (%s)rž   r›   r   ÚINSTR)ÚPUSHr   r   r   r   z#Incorrect number of argument bits (ú[z])rû  éÿ   r"   r,  r   r   i €ÿÿé €  zPUSH value out of range %dr   r   r   ÚWÚNé   zPUSHW value out of range %dzPUSHB value out of range %dr¼  )rß  Úgetattrrà  rÙ  rµ  Ú_tokenREr‘  r�  Úgroupsr²  rè  Ú
startswithr  r“  r   ÚstreamMnemonicDictÚmaxÚminr¾  r¹  )r¢  r½  r¹  ÚpushÚlenAssemblyr¯  r³  Údummyr•  ÚargÚnumberrç  r”  r–  r—  ÚargsÚ	_mnemonicÚnArgsÚnWordsÚnBytesr~  ÚnTotalÚwordss                          r‰  rÊ  zProgram._assembleG  sb  € Ø—8’8�G D¨*°bÑ9Ô9Ñ:Ô:ˆØ ˆØŒˆÝ˜(‘m”mˆÝ˜ 1Ñ%Ô%ˆØ�KÒÑÝ—’˜x¨Ñ-Ô-ˆAØˆyÝ+Ø5¸ÀÀqÁÈ3ÐQSÉ8ÐASÔ8TÑTñô ð ð 56·H²H±J´JÑ1ˆE�8˜S &¨'Ø”&˜”)˜A”,ˆCØð Ý  ¨3Ñ/Ô/�Øà—)’)‘+”+ˆCØ×"Ò" 7Ñ+Ô+ð v(å˜ ! " "œÑ&Ô&�Ø��R‘”�‘ØÐ!OÐOÐOÝ$0°Ô$:Ñ!��G˜TÝ�s‘8”8˜wÒ&Ð&Ý/Ð/ØHPÈÈÐRUÐRUÐRUÐVñô ð ð ð Ý$ S™/œ/�CØ�D˜˜c™‘N”N�N‘Nà�D˜‘H”H�H‘Hà�Ý  ¨3Ñ/Ô/�Ø˜KÒ'Ð'Ý Ÿš x°Ñ5Ô5�AØ�yÝ3Ø=ÀÈÈsÐUWÉxÈÔ@XÑXñô ð ð >?¿XºX¹Z¼ZÑ:�E˜9 c¨6°7Ø�~¨'¨/ØØœ& œ) Aœ,�CÝ$ X¨sÑ3Ô3�CØÐ*Ø Ø—K’K¥ F¡¤Ñ,Ô,Ð,ð ˜KÒ'Ð'õ ˜D™	œ	�Ø˜vÒ%Ñ%à�FØñ 9#à" UšN˜NØ &¨¢ Ø%&¨$¨v¬,Ð%=Ð%=Ò%=Ð%=¸#Ò%=Ð%=Ð%=Ð%=à" a™K˜Fð	 # UšN˜NØ &¨¢ Ø%&¨$¨v¬,Ð%=Ð%=Ò%=Ð%=¸#Ò%=Ð%=Ð%=Ð%=Ð%=ð "#˜à" V™O¨eÒ3Ð3Ø &¨¢ Ø ! T¨&°6©/Ô%:Ð AÐ AÒ AÐ A¸cÒ AÐ AÐ AÐ AÐ Aà" a™K˜Fð	 # V™O¨eÒ3Ð3Ø &¨¢ Ø ! T¨&°6©/Ô%:Ð AÐ AÒ AÐ A¸cÒ AÐ AÐ AÐ Að # QšJ˜JØ &¨¡°#Ò 5Ð 5Ø &¨¡°5Ò 8Ð 8ð # fÑ,˜FØ$ð "ð 3Ø%¨š{˜{Ý4FÀwÔ4OÑ 1  G¨TØ%'¨&¡[°1¡_ Ø $  R¡¤  å4FÀxÔ4PÑ 1  G¨TØ $  R¡¤ Ø $  V¡¤ Ø)-¨g¨v¨g¬ð 3ð 3 Ø'-°Ð'>Ð'>Ò'>Ð'>¸Ò'>Ð'>Ð'>Ð'>Ð'>Ø$@À5Ñ$Hñ (?Ô'>Ð'>ð !%  e¨q¡j°DÑ%8Ñ 9Ô 9Ð 9Ø $  U¨T¡\Ñ 2Ô 2Ð 2Ð 2ð "ð ,Ø Ø%¨š{˜{Ý4FÀwÔ4OÑ 1  G¨TØ%'¨&¡[°1¡_ Ø $  R¡¤  å4FÀxÔ4PÑ 1  G¨TØ $  R¡¤ Ø $  V¡¤ Ø)-¨f°vÀ±Ð.FÔ)Gð ,ð , Ø $  U¡¤  à!'¨&¡˜Ø# F G Gœ}˜Ø ™˜Ø!"˜ðs  ñ 9#øðx % RœL¨CÒ/�EÝ(:¸8Ô(DÑ%�B˜ Ø ”{ cÒ)Ð)Ø$¨šz˜z˜z¨5™zœz˜zØ %™Z¨!™^˜Ø˜˜R™œ˜˜à$ sš{˜{˜{˜{Ø˜˜R™œ˜Ø˜˜U™œ˜Øð (Ø%)ð /ð /˜EØ#)¨UÐ#:Ð#:Ò#:Ð#:°UÒ#:Ð#:Ð#:Ð#:Ð#:Ø =ÀÑ Eñ $;Ô#:Ð#:ð !˜D %¨1¡*°Ñ!4Ñ5Ô5Ð5Ø ˜D ¨¡Ñ.Ô.Ð.Ð.ð/ð &*ð (ð (˜EØ#$¨Ð#3Ð#3Ò#3Ð#3°Ò#3Ð#3Ð#3Ð#3Ð#3Ø =ÀÑ Eñ $4Ô#3Ð#3ð !˜D ™KœK˜K˜Kå˜X sÑ+Ô+ˆCðK �KÒÑðN ð 	>Ý�x‘=”= 3Ò&Ð&­3¨x©=¬=¸AÒ+=Ð+=Ð+=Ð+=Ýœ C¨Ñ2Ô2ˆŒˆˆr‹  Fc                ó¨  — g }d}t          | dg ¦  «        }t          |¦  «        }||k     �r||         }	 t          |         \  }}}	}
|r1|                     |dt	          ||	z
  |¦  «        ›d|
›d�z   ¦  «         n|                     |d|
z  z   ¦  «         |dz   }�n¨# t
          $ �rš |t          v �rpg }||         t          v rü||         }t          |         \  }}}	}
|d         d	k    }|r	||	z
  dz   }n|dz   }||         }|dz   }|dk    sJ ‚|sBt          |¦  «        D ]1}||         }|                     t          |¦  «        ¦  «         |dz   }Œ2n[t          |¦  «        D ]K}||         d
z  ||dz            z  }|dk    r|dz
  }|                     t          |¦  «        ¦  «         |dz   }ŒL|rn||         t          v °ü|sd}t          |¦  «        }|dk    r|                     d|z  ¦  «         n|                     |›d|›d�¦  «         | 	                    |¦  «         n|                     d|z  ¦  «         |dz   }Y nw xY w||k     �°|| _
        d S )Nr   r¹  rü  z]	/* z */z[ ]	/* %s */r   r   rÿ  r,  rþ  i   r"   rû  z%s[ ]	/* 1 value pushed */z[ ]	/* z values pushed */z
INSTR%d[ ])r  rÙ  r’  rà  r   ÚKeyErrorÚstreamOpcodeDictr†  r¥  Úextendr½  )r¢  rÐ  r½  rˆ  r¹  ÚnumBytecoder”  r•  r–  rš  r—  Úvaluesr  rï  rñ  r~  s                   r‰  rÑ  zProgram._disassembleØ  s  € ØˆØˆÝ˜4 ¨RÑ0Ô0ˆÝ˜(‘m”mˆØ�+Šo‰oØ˜!”ˆBð7Ý5?À´^Ñ2�˜' 9¨dð^ ð FØ—O’OØ ˜Ý-7¸¸Y¹ÈÑ-PÔ-PÐ-PÐ-PÐRVÐRVÐRVÐWñXñô ð ð ð
 —O’O H¨~ÀÑ/DÑ$DÑEÔEÐEØ˜‘E�‘øõk ð ,ñ ,ð ,ØÕ)Ð)Ñ)Ø�Fð # 1œ+Õ)9Ð9Ð9Ø% aœ[˜Ý=MÈbÔ=QÑ:˜ '¨9°dØ (¨¤°Ò 3˜Ø"ð 2Ø&(¨9¡n°qÑ&8˜G˜Gà ! A¡˜AØ&.¨q¤k˜GØ ™E˜Ø&¨š{˜{˜{˜{Ø$ð *Ý%*¨7¡^¤^ð *ð * Ø(0°¬ Ø &§¢­d°5©k¬kÑ :Ô :Ð :Ø$%¨¡E  ð*õ
 &+¨7¡^¤^ð *ð * à)1°!¬¸Ñ)9¸XÀaÈ!Áe¼_Ñ(L Ø#(¨F¢? ?Ø,1°G©O EØ &§¢­d°5©k¬kÑ :Ô :Ð :Ø$%¨¡E  Ø#ð "Ø!ð3 # 1œ+Õ)9Ð9Ð9ð6 $ð *Ø#)˜Ý! &™kœk�GØ !’|�|Ø ŸšÐ(DÀxÑ(OÑPÔPÐPÐPà ŸšØ>F¸h¸hÈÈÈÐPñô ð ð —O’O FÑ+Ô+Ð+Ð+à—O’O L°2Ñ$5Ñ6Ô6Ð6Ø˜A™�AøøðY,øøøð	 �+Šo‰oðt !ˆŒˆˆs   µB ÂF"IÉ IÚboolc                ó¢   — t          | d¦  «        rt          | j        ¦  «        dk    p't          | d¦  «        ot          | j        ¦  «        dk    S )aÂ  
        >>> p = Program()
        >>> bool(p)
        False
        >>> bc = array.array("B", [0])
        >>> p.fromBytecode(bc)
        >>> bool(p)
        True
        >>> p.bytecode.pop()
        0
        >>> bool(p)
        False

        >>> p = Program()
        >>> asm = ['SVTCA[0]']
        >>> p.fromAssembly(asm)
        >>> bool(p)
        True
        >>> p.assembly.pop()
        'SVTCA[0]'
        >>> bool(p)
        False
        r½  r   r¹  )r¿  rÙ  r½  r¹  r¦  s    r‰  Ú__bool__zProgram.__bool__  sP   € õ0 ˜˜jÑ)Ô)ÐD­c°$´-Ñ.@Ô.@À1Ò.Dð 
Ý�D˜*Ñ%Ô%Ð@­#¨d¬mÑ*<Ô*<¸qÒ*@ð	
r‹  c                óp   — t          | ¦  «        t          |¦  «        k    rt          S | j        |j        k    S r¡  )rÇ  ÚNotImplementedÚ__dict__)r¢  Úothers     r‰  Ú__eq__zProgram.__eq__7  s.   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒ} ¤Ò.Ð.r‹  c                óH   — |                       |¦  «        }|t          u r|n| S r¡  )r"  r  )r¢  r!  Úresults      r‰  Ú__ne__zProgram.__ne__<  s)   € Ø—’˜UÑ#Ô#ˆØ¥>Ð1Ð1ˆvˆv¸6°zÐAr‹  N)r�  rŸ  )r¹  rº  r�  rŸ  )r½  rÁ  r�  rŸ  )r�  rº  )T)r�  rÍ  )F)r�  r  )r¨  r©  rª  r£  rÀ  rÈ  rÌ  rÒ  rô  rø  rÊ  rÑ  r  Ú__nonzero__r"  r%  r«  r‹  r‰  r·  r·  Ý   s&  € € € € € ðð ð ð ðð ð ð ð
ð ð ð ð'ð 'ð 'ð 'ð
ð ð ð ð ð
Bð Bð Bð BðH0ð 0ð 0ð 0ðO3ð O3ð O3ð O3ðb?!ð ?!ð ?!ð ?!ð ?!ðB
ð 
ð 
ð 
ð8 €Kð/ð /ð /ð /ð
Bð Bð Bð Bð Bð Br‹  r·  c                 óð   — d} t          ¦   «         }|                     | ¦  «         |                     d¬¦  «        }|                     |¦  «         t	          | |                     ¦   «         k    ¦  «         dS )z
    >>> _test()
    True
    s·  @;:9876543210/.-,+*)('&%$#"! 
	 ,°CXEj°C`°F#D# °FNðM/° !#3Y-,°CX°+° K°PX± @8Y°+!#3Y-,°CXN°%ò!° M E°%°%#Jad°(RX!#Ö°%ò!° YY-,°CX!!°%°%I°%°%Ja d°PX!!!°%°%I° PX° PX¸ÿâ8!°8!Y° RX°8!¸ÿð8!YYYY-,°CX°+° K°PX¹  ÿÀ8Y°+!#3Y-,NŠ±FCD° ± Fâ° ¹  ÿð8 ° <°(+°%° <-,° /°ò°°M° -,°CX°+° ¹  ÿà8°+!#3Y-,°CXEdj#Edi°Cd``°F#D# °Fð/° !! Š ŠRX3!!YY-,±
C#Ce
-, ±
C#C-, °F#p±F>°F#p±FE:± -,°+°%E°%Ej°@‹`°%#D!!!-,°+°%E°%Ej¸ÿÀŒ`°%#D!!!-,° °+!!!-,° °+!!!-,°C°Ce
-, i°@a° ‹ ±,ÀŠŒ¸ b`+d#da\X°aY-,± %EhT°KPZX°%E°%E`h °%#D°%#D°% Eh Š#D°%Eh`°%#DY-,°% Eh Š#D°%Edhe`°%°`#D-,°	CX‡!À°CX‡E°+°G#D°GzäŠEi °G#DŠŠ‡ ° QX°+°G#D°Gzä!°GzäYYY-, ŠE#Eh`D-,EjB-,/-,°CX°%°%Id#Edi°@‹a °€bj°%°%aŒ°C`°F#D!Š°Fö!!!!!Y-,°CX°%E°%Ed`j°%Eja °%Ej Š‹e°%#DŒ°%#D!! EjD EjDY-, E° U°CZXEh#Ei°@‹a °€bj Š#a °%‹e°%#DŒ°%#D!!!!°+Y-,ŠŠEd#EdadB-,°%°%°+°CX°%°%°%°+°%C°@T°%C° TZX°% E°@aDY°%C° T°%C°@TZX°% E°@`DYY!!!!-,KRXC°%E#aD!!Y-,KRXC°%E#`D!!Y-,KRXED!!Y-, °%#I°@`° c ° RX#°%8#°%e8 Šc8!!!!!Y-,KPXED!!Y-,°%# Šõ °`#íì-,°%# Šõ °a#íì-,°%õ íì-,F#F`ŠŠF# FŠ`Ša¸ÿ€b# #Š±KKŠpE` ° PX°a¸ÿº‹°FŒY°`h:-, E°%FRX°%F ha°%°%?#!8!Y-, E°%FPX°%F ha°%°%?#!8!Y-, °C°C-,Šì-,°CX! F° RX¸ÿð8°8YY-, ° UX¸ c°%Ed°%Eda° SX°°@a°Y%EiSXED!!Y!°%E°%Ead°(QXED!!YY-,!!d#d‹¸@ b-,!°€QXd#d‹¸  b² @/+Y°`-,!°ÀQXd#d‹¸Ub² €/+Y°`-,d#d‹¸@ b`#!-,KSX°%°%Id#Edi°@‹a °€bj°%°%aŒ°F#D!Š°Fö!!Š# 9/Y-,°%°%Id°ÀTX¸ÿø8°8!!Y-,°CXY-,°CXY-,°
+# <°+-,°%¸ÿð8°(+Š# Ð#°+°CXÀ<Y ° -,KS#KQZX8!!Y-,°%Ð#É°° °<°-,° °°%I°8°-,KS#KQZX EŠ`D!!Y-, 9/-TrÏ  N)r·  rÀ  rÒ  rÈ  ÚprintrÌ  )ÚbcÚpÚasms      r‰  Ú_testr,  A  sk   € ð 
K>€Bå‰	Œ	€AØ‡N‚N�2ÑÔÐØ
�-Š- ˆ-Ñ
&Ô
&€CØ‡N‚N�3ÑÔÐÝ	ˆ"�—’‘”Ò
Ñ Ô Ð Ð Ð r‹  Ú__main__)r~  r  r€  r  r�  r‚  )rŒ  r�  r�  rŽ  )r®  r‚  r¯  r  r�  r  )/Ú__doc__Ú
__future__r   ÚfontTools.misc.textToolsr   r   r   r   r¾  Úior   Útypingr	   ÚreÚloggingÚ	getLoggerr¨  ræ  ÚstreamInstructionsÚinstructionsrŠ  Úcompiler�  r›  r  r  r’  r“  Ú	Exceptionr�  Ú_commentÚ_instructionÚ_numberÚ_tokenr  r±  rÝ  rá  rÚ  rµ  r·  r,  ÚsysÚdoctestÚexitÚtestmodÚfailedr«  r‹  r‰  ú<module>rC     sy  ðØ YÐ Yà "Ð "Ð "Ð "Ð "Ð "à MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€ð €gÔ˜Ñ!Ô!€ðð ð Ð ð{ð {ð {€ð@ð ð ð ð ˆrŒzÐ,Ñ-Ô-€ð$ð $ð $ð $ð" (1 yÐ1CÑ'DÔ'DÑ $Ð Ð$Ø$˜9 \Ñ2Ô2Ñ €
ˆLð>ð >ð >ð >ð >˜Iñ >ô >ð >ð €Ø.€Ø
€€Ø)˜\˜\¨7¨7¨7°H°H°HÐ	=€àˆ2Œ:�fÑÔ€Øˆ2Œ:�fÑÔ€à�”
ÐKÑLÔL€àˆBŒJÐ0Ñ1Ô1€	ØˆbŒjÐ3Ñ4Ô4€ðð ð ð ðaBð aBð aBð aBð aBñ aBô aBð aBðH!ð !ð !ð ˆzÒÐØ€J€J€JØ€N€N€Nà€C„Hˆ_ˆWŒ_ÑÔÔ%Ñ&Ô&Ð&Ð&Ð&ð	 Ðr‹  