§
    C�’j8 ã                   ó4  — d Z ddlZddlZddlZddlZddlZddlZddlZddl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 ddlmZ ddlmZmZmZmZ ddlmZ erdd	lmZ  ej        d
¬¦  «         G d„ d¦  «        ¦   «         Z  ej        d
¬¦  «         G d„ d¦  «        ¦   «         Z!ej"        dk    rdej!        de!fd„Z#n&ej"        dk    rdej!        de!fd„Z#ndej!        de!fd„Z# G d„ d¦  «        Z$ej"        dk    r	de%de&fd„Z'nej"        dk    r	de%de&fd„Z'nde%de&fd„Z'de$ddœde%de(dz  d edz  d!e!dz  de!f
d"„Z)d!e!de!fd#„Z*d!e!de&fd$„Z+d›d%ed&e&de!fd'„Z,de-e!         fd(„Z.de!fd)„Z/d*e(de-e!         fd+„Z0d,e!e-e!         z  de-e!         fd-„Z1d,e!e-e!         z  de-e!         fd.„Z2d/e(d0e&de-e!         fd1„Z3	 dœd3e&d0e&d4e&de-e!         fd5„Z4d/e(de-e!         fd6„Z5de%de!fd7„Z6d!e!de!fd8„Z7d*e(de-e!         fd9„Z8d:e%de(de(fd;„Z9	 dœd<e(dz  d=e(dz  d>e&de-e!         fd?„Z:de(de-e!         fd@„Z;dAe(de-e!         fdB„Z<dCede-e!         fdD„Z=de!fdE„Z>d*e(de!fdF„Z?dGe(de@e-e(         e
e(e(gdf         e
e(gdf         f         fdH„ZAd*e(de-e(         fdI„ZBej"        dk    r(dGe(de@e-e(         e
ejC        dz  e(gdf         f         fdJ„ZD ej        d
¬¦  «         G dK„ dL¦  «        ¦   «         ZEd*e(de-e(         fdM„ZFdNee(         de(fdO„ZGdPe-eE         ddfdQ„ZHdReIde-eE         fdS„ZJdPe-eE         deIfdT„ZKdUe-e!         dVe(de@eIeIf         fdW„ZLdXeMe(e!f         dYe(de!dz  fdZ„ZNdUee!         ddfd[„ZO ePejQ        ¦  «        ZRd\e!ddfd]„ZSdUe-e!         d^e(de!fd_„ZTdUe-e!         ddfd`„ZUdaeIdUe-e!         ddfdb„ZVdUe-e!         de-eE         fdc„ZWdPe-e          ddeMe!e(f         ddfde„ZXdUe-e!         ddfdf„ZYdUe-e!         ddfdg„ZZdUe-e!         ddfdh„Z[die!dje-e!         de-e!         fdk„Z\dUe-e!         de-e!         fdl„Z]dUe-e!         ddfdm„Z^dUe-e!         ddfdn„Z_dodpdqdrdsœZ`dUe-e!         ddfdt„ZadUe-e!         ddfdu„ZbdUe-e!         ddfdv„Zcdwejd        dUe-e!         ddfdx„ZedUe-e!         de(fdy„Zfdze!de(fd{„ZgdUee!         ddfd|„ZhdUee!         ddfd}„Zid~eIde%fd„Zjdwejd        ddfd€„Zk ePejl        ¦  «        Zm ePejn        ¦  «        Zo ePejp        ¦  «        Zq ePejr        ¦  «        Zsd�eMe%ef         d%ede(fd‚„Zt	 d�dUe-e!         d�eMe%ef         dƒe
d„ef         dz  ddfd…„ZudUe-e!         ddfd†„Zvejw        de-e%         fd‡„¦   «         Zx	 dœdwejd        dˆe
e-e!         eMe%ef         ged‰         f         dŠe&de@ejd        ed‰         f         fd‹„ZydUe-e!         dŒe-e%         d�eMe%ef         de@e-e!         ejd        f         fd�„ZzdUee!         dŽeddfd�„Z{dœdwejd        dŠe&de-e!         fd�„Z|dUee!         de-e!         fd‘„Z}ejw        	 dœdwejd        dŠe&dee!         fd’„¦   «         Z~ ej        ¦   «         Z€dœde%d“e&de%fd”„Z�dwejd        de&fd•„Z‚	 	 	 džd–e
d„ef         d—eeef         dz  d˜e&d™e&de-e!         f
dš„ZƒdS )Ÿa€  
This module provides utilities for analyzing, transforming and manipulating Python bytecode.
It includes functionality for:
- Converting between different bytecode formats and versions
- Virtualizing jumps and managing jump targets
- Handling exception tables and their entries
- Managing instruction offsets and extended arguments
- Providing a clean API for bytecode modification and transformation
- Supporting Python version-specific bytecode features
- Generating bytecode from template functions

The module is designed to work across different Python versions (3.7+) and handles
version-specific bytecode differences transparently.
é    N)ÚCallableÚIterableÚIteratorÚMappingÚSequence)ÚAnyÚcastÚOptionalÚTYPE_CHECKINGé   )Úconfig)Úget_indexofÚpropagate_line_numsÚremove_extra_line_numsÚstacksize_analysis)Úis_safe_constant)ÚDynamoTracerOutputT)Úslotsc                   ó^   — e Zd ZU ded<   ded<   ded<   eed<   eed<   defd„Zd	edefd
„Z	dS )ÚInstructionExnTabEntryÚInstructionÚstartÚendÚtargetÚdepthÚlastiÚreturnc                 óÄ   — d| j                              ¦   «         › d| j                             ¦   «         › d| j                             ¦   «         › d| j        › d| j        › d�S )NzInstructionExnTabEntry(start=ú, end=z	, target=z, depth=z, lasti=ú))r   Úshort_inst_reprr   r   r   r   ©Úselfs    úSC:\Projects\DSCons\.venv\Lib\site-packages\torch\_dynamo\bytecode_transformation.pyÚ__repr__zInstructionExnTabEntry.__repr__1   sƒ   € ð7¨D¬J×,FÒ,FÑ,HÔ,Hð 7ð 7Ø”8×+Ò+Ñ-Ô-ð7ð 7à”k×1Ò1Ñ3Ô3ð7ð 7ð ”Zð7ð 7ð *.¬ð7ð 7ð 7ð	
ó    Úoc                 óÄ   — t          |t          ¦  «        sdS | j        |j        u o;| j        |j        u o-| j        |j        u o| j        |j        k    o| j        |j        k    S ©NF)Ú
isinstancer   r   r   r   r   r   )r#   r'   s     r$   Ú__eq__zInstructionExnTabEntry.__eq__9   ss   € Ý˜!Õ3Ñ4Ô4ð 	Ø�5àŒJ˜!œ'Ð!ð &Ø”˜AœEÐ!ð&à”˜qœxÐ'ð&ð ”
˜aœgÒ%ð&ð ”
˜aœgÒ%ð	
r&   N)
Ú__name__Ú
__module__Ú__qualname__Ú__annotations__ÚintÚboolÚstrr%   Úobjectr+   © r&   r$   r   r   )   s‰   € € € € € € àÐÐÑØ	ÐÐÑØÐÐÑØ€J€J�JØ€K€K�Kð
˜#ð 
ð 
ð 
ð 
ð	
˜ð 	
 4ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r&   r   c                   ó  — e Zd ZU dZeed<   eed<   edz  ed<   eed<   dZedz  ed<   dZ	edz  ed<   d	Z
eed
<   dZed         ed<   dZed          ed<   dZedz  ed<   dZedz  ed<   defd„Zdedefd„Zdefd„Zdd„ZdS )r   z$A mutable version of dis.InstructionÚopcodeÚopnameNÚargÚargvalÚoffsetÚstarts_lineFÚis_jump_targetzdis.PositionsÚ	positionsr   Úexn_tab_entryÚargreprr   c                 ó    — t          | ¦  «        S ©N©Úidr"   s    r$   Ú__hash__zInstruction.__hash__W   s   € Ý�$‰xŒxˆr&   Úotherc                 óB   — t          | ¦  «        t          |¦  «        k    S rA   rB   ©r#   rE   s     r$   r+   zInstruction.__eq__Z   s   € Ý�$‰xŒx�2˜e™9œ9Ò$Ð$r&   c                 ó(   — d| j         › d| j        › d�S )NzInstruction(opname=z	, offset=r    )r7   r:   r"   s    r$   r!   zInstruction.short_inst_repr]   s   € ØI T¤[ÐIÐI¸4¼;ÐIÐIÐIÐIr&   c                 ó6   — |j         | _         |j        | _        d S rA   )r;   r=   rG   s     r$   Úcopy_positionszInstruction.copy_positions`   s   € Ø Ô,ˆÔØœˆŒˆˆr&   )rE   r   r   N)r,   r-   r.   Ú__doc__r0   r/   r2   r   r:   r;   r<   r1   r=   r
   r   r>   r   r?   rD   r3   r+   r!   rJ   r4   r&   r$   r   r   E   sA  € € € € € € à.Ð.à€K€K�KØ€K€K�KØ	ˆt‰€O€O�OØ€K€K�KØ€FˆC�$‰JÐÐÑØ"€K��t‘Ð"Ð"Ñ"Ø €N�DÐ Ð Ñ à+/€Iˆx˜Ô(Ð/Ð/Ñ/à&*€FˆH�]Ô#Ð*Ð*Ñ*Ø37€MÐ)¨DÑ0Ð7Ð7Ñ7Ø€GˆS�4‰ZÐÐÑð˜#ð ð ð ð ð%˜Fð % tð %ð %ð %ð %ðJ ð Jð Jð Jð Jð)ð )ð )ð )ð )ð )r&   r   ©é   é   Úir   c           
      ó~   — t          | j        | j        | j        | j        | j        | j        | j        | j        ¦  «        S rA   )	r   r6   r7   r8   r9   r:   Úline_numberr<   r=   ©rO   s    r$   Úconvert_instructionrS   g   ó=   € ÝØŒHØŒHØŒEØŒHØŒHØŒMØÔØŒKñ	
ô 	
ð 		
r&   ©rM   é   c           
      ó~   — t          | j        | j        | j        | j        | j        | j        | j        | j        ¦  «        S rA   )	r   r6   r7   r8   r9   r:   r;   r<   r=   rR   s    r$   rS   rS   u   rT   r&   c           
      ót   — t          | j        | j        | j        | j        | j        | j        | j        d ¦  «        S rA   )r   r6   r7   r8   r9   r:   r;   r<   rR   s    r$   rS   rS   ƒ   s;   € ÝØŒHØŒHØŒEØŒHØŒHØŒMØÔØñ	
ô 	
ð 		
r&   c                   ó   — e Zd Zdefd„ZdS )Ú_NotProvidedr   c                 ó   — dS )NrZ   r4   r"   s    r$   r%   z_NotProvided.__repr__‘   s   € Øˆ~r&   N)r,   r-   r.   r2   r%   r4   r&   r$   rZ   rZ   �   s/   € € € € € ð˜#ð ð ð ð ð ð r&   rZ   ©rM   é   Únamec                 ó
   — | dv S )N)Ú	LOAD_ATTRÚLOAD_GLOBALÚLOAD_SUPER_ATTRr4   ©r^   s    r$   Úinst_has_op_bitsrd   —   s   € ØÐFÐFÐFr&   c                 ó   — | dk    S )Nra   r4   rc   s    r$   rd   rd   œ   s   € Ø�}Ò$Ð$r&   c                 ó   — dS r)   r4   rc   s    r$   rd   rd   ¡   s   € Øˆur&   )r8   r9   r   r8   r9   r   c                ó0  — t          | ¦  «        r|�t          d¦  «        ‚|€d}n(|du|t          uz   |duz   }|dk    rt          d¦  «        ‚|�$t          |t          ¦  «        st          d¦  «        ‚t          t          j        |          | |||¬¦  «        S )aÒ  
    At most one of `arg`, `argval`, and `target` can be not None/_NotProvided.
    This is to prevent ambiguity, e.g. does
        create_instruction("LOAD_CONST", 5)
    mean load the constant at co_consts[5], or load the constant 5?

    If `arg` is not provided, it will be computed during assembly from
    `argval` or `target`.

    Bits in the args of instructions LOAD_GLOBAL, LOAD_ATTR (3.12+), and LOAD_SUPER_ATTR
    modify the behavior of the instruction. In this case, we allow both `arg`
    and `argval` to be set. The value of `arg` here is expected to be the value of
    the op bits and the true value of `arg` will be computed during assembly.
    If `arg` is not set, the bits are assumed to be 0.
    Nz*target cannot be specified for instructionr   r   z@only one of arg, argval, and target can be not None/_NotProvidedz#instruction arg must be int or None)r6   r7   r8   r9   r   )rd   ÚRuntimeErrorrZ   r*   r0   r   ÚdisÚopmap)r^   r8   r9   r   Úcnts        r$   Úcreate_instructionrl   ¥   s¼   € õ0 ˜ÑÔð 
ØÐÝÐKÑLÔLÐLØˆ;ØˆCøà˜$ˆ 6µÐ#=Ñ>À&ÐPTÐBTÑUˆØ�Š7ˆ7ÝØRñô ð ð €�z¨#­sÑ3Ô3€ÝÐ@ÑAÔAÐAÝÝŒy˜Œ t°¸VÈFðñ ô ð r&   c                 óL   — t           j        dk    rdnd}t          || ¬¦  «        S )NrU   ÚJUMP_FORWARDÚJUMP_ABSOLUTE©r   ©ÚsysÚversion_inforl   )r   Úinsts     r$   Úcreate_jump_absoluteru   Ð   s+   € Ý Ô-°Ò8Ð8ˆ>ˆ>¸o€DÝ˜d¨6Ð2Ñ2Ô2Ð2r&   c                 ó   — | j         dv S )N)rn   ro   )r7   rp   s    r$   Úis_jump_absoluterw   Õ   s   € ØŒ=Ð=Ð=Ð=r&   ÚvalÚcheckedc                 ój   — |r!t          | ¦  «        st          d| › �¦  «        ‚t          d| ¬¦  «        S )z×
    In general we should only create `LOAD_CONST` for immutable objects, but
    sometimes it's convenient _and safe_ for Dynamo create `LOAD_CONST` for
    mutable objects. In such cases, use `checked=False`.
    zunsafe constant Ú
LOAD_CONST©r9   )r   ÚAssertionErrorrl   )rx   ry   s     r$   Úcreate_load_constr~   Ù   sF   € ð ð ;Ý Ñ$Ô$ð 	;Ý Ð!9°CÐ!9Ð!9Ñ:Ô:Ð:Ý˜l°3Ð7Ñ7Ô7Ð7r&   c                  óN   — ddl m}  t          d| ¬¦  «        t          d¦  «        gS )a  
    Create instructions that trigger the bytecode debugger to stop.

    Usage:
        codegen.extend_output(create_breakpoint())

    When the bytecode debugger is active, execution will pause at this point.
    At runtime, these instructions have no effect on program state.
    r   ©ÚBREAKPOINT_MARKERr{   r|   ÚPOP_TOP)Úbytecode_debuggerr�   rl   r€   s    r$   Úcreate_breakpointr„   å   s>   € ð 5Ð4Ð4Ð4Ð4Ð4õ 	˜<Ð0AÐBÑBÔBÝ˜9Ñ%Ô%ðð r&   c                  ób   — t           j        dk    rt          dd¬¦  «        S t          d¦  «        S )NrU   ÚCOPYr   ©r8   ÚDUP_TOPrq   r4   r&   r$   Úcreate_dup_topr‰   ÷   s1   € Ý
Ô˜7Ò"Ð"Ý! &¨aÐ0Ñ0Ô0Ð0Ý˜iÑ(Ô(Ð(r&   Únc                 óÔ   — | dk    rg S t           j        dk    rd„ t          | dd¦  «        D ¦   «         S | dk    rt          dg d¢| dz
           z   ¦  «        gS t          d	| ¬
¦  «        gS )a†  
    Returns a "simple" sequence of instructions that rotates TOS to the n-th
    position in the stack. For Python < 3.11, returns a single ROT_*
    instruction. If no such instruction exists, an error is raised and the
    caller is expected to generate an equivalent sequence of instructions.
    For Python >= 3.11, any rotation can be expressed as a simple sequence of
    swaps.
    r   rU   c                 ó0   — g | ]}t          d |¬¦  «        ‘ŒS )ÚSWAPr‡   )rl   ©Ú.0rO   s     r$   ú
<listcomp>z create_rot_n.<locals>.<listcomp>  s&   € ÐKÐKÐK°aÕ" 6¨qÐ1Ñ1Ô1ÐKÐKÐKr&   éÿÿÿÿé   ÚROT_)ÚTWOÚTHREEÚFOURé   ÚROT_Nr‡   )rr   rs   Úrangerl   ©rŠ   s    r$   Úcreate_rot_nr›   ý   s†   € ð 	ˆA‚v€vàˆ	å
Ô˜7Ò"Ð"ð LÐK½5ÀÀAÀr¹?¼?ÐKÑKÔKÐKàˆA‚v€vÝ" 6Ð,DÐ,DÐ,DÀQÈÁUÔ,KÑ#KÑLÔLÐMÐMÝ˜w¨AÐ.Ñ.Ô.Ð/Ð/r&   Úinst_or_instsc                 ó8  ‡— t          | t          ¦  «        r| gŠn6t          | t          ¦  «        st          dt	          | ¦  «        › �¦  «        ‚| Šdt
          dt          fˆfd„}dt
          ddfˆfd„}t          j        dk    rEt          ‰d         j
        ¦  «        r |d¦  «        s |d¦  «         nå‰t          d	¦  «        gz   ŠnÑt          j        d
k    rmt          ‰d         j
        ¦  «        r |d¦  «        s |d¦  «         n�‰d         j
        dk    r |d¦  «        s |d¦  «         nht          d	¦  «        g‰z   ŠnTt          j        dk    rDt          ‰d         j
        ¦  «        r |d¦  «        s |d¦  «         nt          d	¦  «        g‰z   Š‰S )a“  
    Appends or prepends a PUSH_NULL instruction to `inst_or_insts`,
    depending on Python version. Used when you know that
    `inst_or_insts` generates a callable that will be called.

    NOTE: Assumes `inst_or_insts` is a single instruction or sequence of
    instructions that pushes exactly 1 object to the stack that is to
    be called. It is important that you include ALL instructions that
    construct the callable - not just the first instruction/a prefix.

    Will attempt to use the NULL push bit for instructions
    with such bits (LOAD_GLOBAL 3.11+, LOAD_ATTR 3.12+, LOAD_SUPER_ATTR).
    In this case, instructions WILL be modified.
    ú)expected inst_or_insts to be a list, got Úidxr   c                 ól   •— ‰|          j         €t          d| › d�¦  «        ‚‰|          j         dz  dk    S ©Núexpected insts[z].arg to be not Noner   ©r8   r}   ©rŸ   Úinstss    €r$   Úinst_has_bit_setz'add_push_null.<locals>.inst_has_bit_set.  s?   ø€ Ø�Œ:Œ>Ð!Ý Ð!L°3Ð!LÐ!LÐ!LÑMÔMÐMØ�SŒzŒ~ Ñ! QÒ&Ð&r&   Nc                 ót   •— ‰|          j         €t          d| › d�¦  «        ‚‰|          xj         dz  c_         d S r¡   r£   r¤   s    €r$   Úset_inst_bitz#add_push_null.<locals>.set_inst_bit3  sA   ø€ Ø�Œ:Œ>Ð!Ý Ð!L°3Ð!LÐ!LÐ!LÑMÔMÐMØˆcŒ
ˆŒ˜!ÑˆŒˆˆr&   rL   r‘   Ú	PUSH_NULLr\   r   ra   rU   )r*   r   Úlistr}   Útyper0   r1   rr   rs   rd   r7   rl   )rœ   r¦   r¨   r¥   s      @r$   Úadd_push_nullr¬     s  ø€ õ" �-¥Ñ-Ô-ð Ø$1 ?ˆˆå˜-­Ñ.Ô.ð 	Ý ØQ½DÀÑ<OÔ<OÐQÐQñô ð ð ˆð'�cð '¥dð 'ð 'ð 'ð 'ð 'ð 'ð
�#ð  $ð ð ð ð ð ð õ
 Ô˜7Ò"Ð"å˜E "œIÔ,Ñ-Ô-ð 	>Ð6FÐ6FÀrÑ6JÔ6Jð 	>ð ˆL˜ÑÔÐÐàÕ/°Ñ<Ô<Ð=Ñ=ˆEˆEÝ	Ô	˜WÒ	$Ð	$õ ˜E "œIÔ,Ñ-Ô-ð 	>Ð6FÐ6FÀrÑ6JÔ6Jð 	>ØˆL˜ÑÔÐÐØ�1ŒXŒ_ Ò-Ð-Ð6FÐ6FÀqÑ6IÔ6IÐ-ØˆL˜‰OŒOˆOˆOå'¨Ñ4Ô4Ð5¸Ñ=ˆEˆEÝ	Ô	˜WÒ	$Ð	$å˜E !œHœOÑ,Ô,ð 	>Ð5EÐ5EÀaÑ5HÔ5Hð 	>ØˆL˜‰OŒOˆOˆOå'¨Ñ4Ô4Ð5¸Ñ=ˆEØ€Lr&   c                 ó  — t          | t          ¦  «        r| g}n6t          | t          ¦  «        st          dt	          | ¦  «        › �¦  «        ‚| }t
          j        dk     r|S t
          j        dk    rdnd}||         j        dk    rL||         j        €t          d|› d	�¦  «        ‚||         j        d
z  dk    r||         xj        d
z  c_        |S t
          j        dk    r|t          d¦  «        gz   }nt          d¦  «        g|z   }|S )z†Like add_push_null, but the low bit of LOAD_ATTR/LOAD_SUPER_ATTR
    is not set, due to an expected CALL_FUNCTION_EX instruction.
    rž   rU   rL   r‘   r   ra   Nr¢   z$].arg to be not None for LOAD_GLOBALr   r©   )
r*   r   rª   r}   r«   rr   rs   r7   r8   rl   )rœ   r¥   rŸ   s      r$   Úadd_push_null_call_function_exr®   T  s5  € õ �-¥Ñ-Ô-ð Ø$1 ?ˆˆå˜-­Ñ.Ô.ð 	Ý ØQ½DÀÑ<OÔ<OÐQÐQñô ð ð ˆå
Ô˜'Ò!Ð!ØˆåÔ  GÒ+Ð+ˆ"ˆ"°€CØˆS„zÔ˜MÒ)Ð)Ø�Œ:Œ>Ð!Ý ØK #ÐKÐKÐKñô ð ð �Œ:Œ>˜AÑ Ò"Ð"Ø�#ŒJˆNŒN˜aÑˆNŒNØˆLå
Ô˜7Ò"Ð"ØÕ+¨KÑ8Ô8Ð9Ñ9ˆˆå# KÑ0Ô0Ð1°EÑ9ˆà€Lr&   ÚnargsÚ	push_nullc                 ó¾  — t           j        dk    r¼g }|r^|                     t          d¦  «        ¦  «         t           j        dk    r| dz   n| dz   }|                     t          |¦  «        ¦  «         t           j        dk     r$|                     t          d| ¬¦  «        ¦  «         |                     t          d	| ¬¦  «        ¦  «         |S t          d
| ¬¦  «        gS )aS  
    Creates a sequence of instructions that makes a function call.

    `push_null` is used in Python 3.11+ only. It is used in codegen when
    a function call is intended to be made with the NULL + fn convention,
    and we know that the NULL has not been pushed yet. We will push a
    NULL and rotate it to the correct position immediately before making
    the function call.

    `push_null` should be True if no NULL is pushed for the callable.
    Conversely, `push_null` should be False if a NULL was pushed for the callable.
    Prefer using `push_null=False` when possible since we will not need to rotate
    NULL to the right place, which is less efficient.

    Generally, you should codegen a function by using `add_push_null` then
    `create_call_function` with `push_null=False`.

    Example of when to set push_null False:

    insts = [
        create_instruction("LOAD_GLOBAL", argval="torch"),
        create_instruction("LOAD_ATTR", argval="nn"),
        create_instruction("LOAD_ATTR", argval="functional"),
        create_instruction("LOAD_ATTR", argval="relu"),
    ]
    insts = add_push_null(insts)
    insts.append(create_instruction("LOAD_FAST", argval="x"))
    insts.extend(create_call_function(1, False))

    Example of when to set push_null True:

    insts = [create_instruction("LOAD_FAST", x)]
    for should_wrap, wrapper_name in wrappers:
        if should_wrap:
            insts.extend([
                create_instruction("LOAD_GLOBAL", argval="wrapper1"),
                create_instruction("SWAP", arg=2),
                *create_call_function(1, True),
            )
    rU   r©   rL   r   r—   r\   ÚPRECALLr‡   ÚCALLÚCALL_FUNCTION)rr   rs   Úappendrl   Úextendr›   )r¯   r°   ÚoutputÚrotss       r$   Úcreate_call_functionr¹   x  sÜ   € õR Ô˜7Ò"Ð"ØˆØð 	.Ø�MŠMÕ,¨[Ñ9Ô9Ñ:Ô:Ð:å #Ô 0°GÒ ;Ð ;�5˜1‘9�9ÀÈÁˆDØ�MŠM�, tÑ,Ô,Ñ-Ô-Ð-ÝÔ˜gÒ%Ð%Ø�MŠMÕ,¨Y¸EÐBÑBÔBÑCÔCÐCØ�ŠÕ(¨°UÐ;Ñ;Ô;Ñ<Ô<Ð<ØˆÝ˜°EÐ:Ñ:Ô:Ð;Ð;r&   FÚ
has_kwargsÚignore_314_kwargs_pushc                 ó.  — t           j        dk    rçg }t           j        dk    r(| s&|s$|                     t          d¦  «        ¦  «         d} |rx|                     t          d¦  «        ¦  «         t           j        dk    rt	          | ¦  «        dz   nt	          | ¦  «        dz   }|                     t          |¦  «        ¦  «         |                     t          dt	          | ¦  «        ¬	¦  «        ¦  «         |S t          dt	          | ¦  «        ¬	¦  «        gS )
a(  
    Assumes that in 3.14+, if has_kwargs=False, there is NOT a NULL
    on the TOS for the kwargs. This utility function will add a PUSH_NULL.

    If the caller has already pushed a NULL for the kwargs, then set ignore_314_kwargs_push=True
    so we don't push another NULL for the kwargs.
    rU   ©rM   é   r©   TrL   r—   rM   ÚCALL_FUNCTION_EXr‡   )rr   rs   rµ   rl   r0   r¶   r›   )rº   r°   r»   r·   r¸   s        r$   Úcreate_call_function_exrÀ   ¯  s  € õ Ô˜7Ò"Ð"ØˆåÔ Ò'Ð'Øð (à*ð (ð �MŠMÕ,¨[Ñ9Ô9Ñ:Ô:Ð:ØˆJØð 		.Ø�MŠMÕ,¨[Ñ9Ô9Ñ:Ô:Ð:õ
 Ô# wÒ.Ð.õ �J‘” !Ñ#Ð#å˜‘_”_ qÑ(ð ð
 �MŠM�, tÑ,Ô,Ñ-Ô-Ð-Ø�ŠÕ(Ð);ÅÀZÁÄÐQÑQÔQÑRÔRÐRØˆÝÐ1µs¸:±´ÐGÑGÔGÐHÐHr&   c                 óÎ   — t           j        dk    rt          d| ¬¦  «        gS t           j        dk    r"t          d| ¬¦  «        t          d| ¬¦  «        gS t          d| ¬¦  «        gS )Nr\   r³   r‡   rU   r²   ÚCALL_METHODrq   )r¯   s    r$   Úcreate_call_methodrÃ   Ñ  sv   € Ý
Ô˜7Ò"Ð"Ý" 6¨uÐ5Ñ5Ô5Ð6Ð6Ý
Ô˜7Ò"Ð"å˜y¨eÐ4Ñ4Ô4Ý˜v¨5Ð1Ñ1Ô1ð
ð 	
õ ˜}°%Ð8Ñ8Ô8Ð9Ð9r&   c                 óh   — t           j        dk    rt          dd| ¬¦  «        S t          d| ¬¦  «        S )Nr\   r`   r   )r8   r9   ÚLOAD_METHODr|   rq   rc   s    r$   Úcreate_load_methodrÆ   Ü  s8   € Ý
Ô˜7Ò"Ð"å! +°1¸TÐBÑBÔBÐBÝ˜m°DÐ9Ñ9Ô9Ð9r&   c                 óL   — t           j        dk    rdnd}t          || ¬¦  «        S )NrU   ÚBEFORE_WITHÚ
SETUP_WITHrp   rq   )r   r7   s     r$   Úcreate_setup_withrÊ   ã  s+   € Ý!Ô.°'Ò9Ð9ˆ]ˆ]¸|€FÝ˜f¨VÐ4Ñ4Ô4Ð4r&   c                 óx  — t           j        dk    rt          d| ¬¦  «        gS | dk    rg S | dk    rt          d¦  «        gS | dk    rt          d¦  «        t          d¦  «        gS 	 t          d	| dz
  ¬¦  «        t          d
¦  «        t          dd¬¦  «        t          ¦   «         t          d¦  «        t          d
¦  «        t          d¦  «        t          dd¬¦  «        t          d¦  «        t          d
¦  «        t	          d¦  «        gt          d¦  «        ¢t          d¦  «        ‘t          d| dz
  ¬¦  «        ‘S )NrU   r�   r‡   r   r—   ÚROT_TWOrM   Ú	ROT_THREEÚ
BUILD_LISTrˆ   r{   r‘   r|   ÚSTORE_SUBSCRÚreverser   r‚   ÚUNPACK_SEQUENCE)rr   rs   rl   Úcreate_binary_subscrrÆ   rÃ   rš   s    r$   Úcreate_swaprÓ   è  sN  € Ý
Ô˜7Ò"Ð"Ý" 6¨qÐ1Ñ1Ô1Ð2Ð2àˆA‚v€vØˆ	Ø	
ˆaŠˆÝ" 9Ñ-Ô-Ð.Ð.Ø	
ˆaŠˆÝ" ;Ñ/Ô/Õ1CÀIÑ1NÔ1NÐOÐOðõ& 	˜<¨Q°©UÐ3Ñ3Ô3Ý˜9Ñ%Ô%Ý˜<°Ð3Ñ3Ô3ÝÑÔÝ˜;Ñ'Ô'Ý˜9Ñ%Ô%Ý˜;Ñ'Ô'Ý˜<°Ð3Ñ3Ô3Ý˜>Ñ*Ô*Ý˜9Ñ%Ô%Ý˜9Ñ%Ô%ðõ 
˜AÑ	Ô	ðõ 	˜9Ñ%Ô%ðõ 	Ð,°!°a±%Ð8Ñ8Ô8ðð r&   r7   c                 óN  — | dv r*| dk    rdnd}t           j        dk    r|dz   |z   S |dz   |z   S | dv r| dk    rdnd}|dz   |z   S | d	k    rJt           j        d
k    rdS t           j        dk    rd|dz  z   S t           j        dk    rd|dz  z   S d|dz  z   S t          d| › �¦  «        ‚)a˜  Return the depth of the callable from TOS for a call instruction.

    Depth is 1-indexed: TOS = 1, below-TOS = 2, etc.  This encodes the
    per-version stack layouts for every call instruction variant.

    Note: on 3.11-3.12, CPython's CALL can have either NULL or self at the
    bottom depending on function vs method call.  Dynamo's LOAD_METHOD
    normalizes method calls to NULL + bound_method, so the bottom is always
    NULL and the callable is always at depth arg + 1.

    Stack layouts (bottom-to-top within the call's frame):
      CALL (3.13+):            callable  NULL  arg0 ... argN-1
      CALL (3.11-3.12):        NULL  callable  arg0 ... argN-1
      CALL_KW (3.13+):         callable  NULL  arg0 ... argN-1  kw_names
      CALL_FUNCTION (3.10):    callable  arg0 ... argN-1
      CALL_FUNCTION_KW (3.10): callable  arg0 ... argN-1  kw_names
      CALL_FUNCTION_EX:
        3.14+:                 callable  NULL  args_tuple  kwargs_or_null
        3.13:                  callable  NULL  args_tuple [kwargs_dict]
        3.11-3.12:             NULL  callable  args_tuple [kwargs_dict]
        3.10:                  callable  args_tuple [kwargs_dict]
    )r³   ÚCALL_KWrÕ   r   r   rL   r—   )r´   ÚCALL_FUNCTION_KWrÖ   r¿   r½   r’   rM   rU   znot a call instruction: )rr   rs   Ú
ValueError)r7   r8   Úkw_extras      r$   Úget_call_callable_depthrÙ     sü   € ð. Ð$Ð$Ð$Ø )Ò+Ð+�1�1°ˆÝÔ˜wÒ&Ð&Ø˜‘7˜XÑ%Ð%ð ˜‘7˜XÑ%Ð%Ø	Ð8Ð	8Ð	8ØÐ"4Ò4Ð4�1�1¸!ˆØ�Q‰w˜Ñ!Ð!Ø	Ð%Ò	%Ð	%ÝÔ˜wÒ&Ð&Ø�1ÝÔ Ò(Ð(Ø˜˜a™‘=Ð ÝÔ Ò(Ð(Ø˜˜a™‘=Ð à˜˜a™‘=Ð åÐ<°FÐ<Ð<Ñ=Ô=Ð=r&   r   r   Ústorec                 ó¦  — t           j        dk    r>|rt          d¦  «        nt          ¦   «         }t	          t          | |¦  «        ¦  «        |gS t           j        dk    r2|rdnd}t	          | ¦  «        t	          |¦  «        t          |¦  «        gS |rdnd}t	          | ¦  «        t	          |¦  «        t          dd¬	¦  «        t          |¦  «        gS )
zQ
    BINARY_SLICE and STORE_SLICE (if `set` is True) for all Python versions
    r½   rÏ   r\   ÚSTORE_SLICEÚBINARY_SLICEÚBINARY_SUBSCRÚBUILD_SLICEr—   r‡   )rr   rs   rl   rÒ   r~   Úslice)r   r   rÚ   Úsubscr_instÚ	inst_names        r$   Úcreate_binary_slicerã   E  sì   € õ Ô˜7Ò"Ð"à27ÐSÕ˜~Ñ.Ô.Ð.Õ=QÑ=SÔ=Sð 	õ �e E¨3Ñ/Ô/Ñ0Ô0Øð
ð 	
õ 
Ô	˜WÒ	$Ð	$Ø%*Ð>�M�M°ˆ	å˜eÑ$Ô$Ý˜cÑ"Ô"Ý˜yÑ)Ô)ð
ð 	
ð ',Ð@�N�N°ˆ	å˜eÑ$Ô$Ý˜cÑ"Ô"Ý˜}°!Ð4Ñ4Ô4Ý˜yÑ)Ô)ð	
ð 	
r&   c                 óò   — t           j        dk    rt          d| ¬¦  «        gS | dk    rt          d¦  «        gS g t          | ¦  «        ¢t	          ¦   «         ‘t          | dz   ¦  «        ¢t          d¦  «        ¢S )NrU   r†   r‡   r   rˆ   r—   )rr   rs   rl   rÓ   r‰   rR   s    r$   Úcreate_copyrå   d  sŒ   € Ý
Ô˜7Ò"Ð"Ý" 6¨qÐ1Ñ1Ô1Ð2Ð2ØˆA‚v€vÝ" 9Ñ-Ô-Ð.Ð.ðÝ	�Q‰ŒðåÑÔðõ 
�Q˜‘UÑ	Ô	ðõ 
�Q‰Œð	ð r&   r   c                 óÒ   — g t          t          dt          ¬¦  «        ¦  «        ¢t          | t          j        dk    rdndz   ¦  «        ¢t          dd¦  «        ¢t          d¦  «        ‘S )Nr{   r|   rU   r—   r   Fr‚   )r¬   rl   Úprintrå   rr   rs   r¹   )r   s    r$   Úcreate_print_on_stackrè   x  sv   € ðÝ	Õ)¨,½uÐEÑEÔEÑ	FÔ	Fðå	�U¥3Ô#3°wÒ#>Ð#>˜a˜aÀAÑFÑ	GÔ	Gðõ 
˜a Ñ	'Ô	'ðõ 	˜9Ñ%Ô%ð	ð r&   Úvaluec                 ó¬   — g t          t          dt          ¬¦  «        ¦  «        ¢t          d| ¬¦  «        ‘t          dd¦  «        ¢t          d¦  «        ‘S )Nr{   r|   r   Fr‚   )r¬   rl   rç   r¹   )ré   s    r$   Úcreate_print_valuerë   ‚  se   € ðÝ	Õ)¨,½uÐEÑEÔEÑ	FÔ	Fðå˜<°Ð6Ñ6Ô6ðõ 
˜a Ñ	'Ô	'ðõ 	˜9Ñ%Ô%ð	ð r&   c                  ób   — t           j        dk     rt          d¦  «        S t          dd¬¦  «        S )Nr½   rÞ   Ú	BINARY_OPé   r‡   rq   r4   r&   r$   rÒ   rÒ   ‹  s1   € Ý
Ô˜'Ò!Ð!Ý! /Ñ2Ô2Ð2å˜k¨rÐ2Ñ2Ô2Ð2r&   c                 ón   — t           j        dk    r| dk    rt          d¦  «        S t          d| ¬¦  «        S )Nr½   r   r4   ÚBUILD_TUPLEr‡   )rr   rs   r~   rl   rš   s    r$   Úcreate_build_tuplerñ   ’  s9   € Ý
Ô˜7Ò"Ð" q¨A¢v vÝ  Ñ$Ô$Ð$Ý˜m°Ð3Ñ3Ô3Ð3r&   Úfirst_linenoc                 ó  ‡‡‡‡‡— t           j        dd…         dk    r$t          dt           j        dd…         › �¦  «        ‚g Š| ŠdŠdŠdt          dt          ddfˆfd	„Šd
t          dt          ddfˆˆˆˆfd„}dt          ddfˆˆˆfd„}‰||fS )zË
    Used to create typing.CodeType.co_linetable
    See https://github.com/python/cpython/blob/main/Objects/lnotab_notes.txt
    This is the internal format of the line number table for Python 3.10
    Nr—   )rM   é
   z+linetable_writer requires Python 3.10, got r   Úbyteno_deltaÚlineno_deltar   c                 ó2  •— | dk    s|dk    r‰t          dt          | d¦  «        ¦  «        }t          dt          |d¦  «        ¦  «        }|dk    r|dk    rt          d¦  «        ‚| |z  } ||z  }‰                     ||dz  f¦  «         | dk    °�|dk    °‡d S d S )Nr   éþ   i�ÿÿÿé   z,byte_offset and line_offset cannot both be 0éÿ   )ÚmaxÚminr}   r¶   )rõ   rö   Úbyte_offsetÚline_offsetÚ	linetables       €r$   Ú_updatez!linetable_writer.<locals>._update©  sÃ   ø€ Ø˜aÒÐ <°1Ò#4Ð#4Ý˜a¥ \°3Ñ!7Ô!7Ñ8Ô8ˆKÝ˜d¥C¨°cÑ$:Ô$:Ñ;Ô;ˆKØ˜aÒÐ K°1Ò$4Ð$4Ý$Ð%SÑTÔTÐTØ˜KÑ'ˆLØ˜KÑ'ˆLØ×Ò˜k¨;¸Ñ+=Ð>Ñ?Ô?Ð?ð ˜aÒÐ <°1Ò#4Ð#4Ð#4Ð#4Ð#4Ð#4r&   Ú
lineno_newÚ
byteno_newc                 ó<   •— |‰z
  }|Š ‰|‰¦  «         | ‰z
  Š| Šd S rA   r4   )r  r  rõ   r   ÚbytenoÚlinenorö   s      €€€€r$   Úupdatez linetable_writer.<locals>.update³  s7   ø€ à! FÑ*ˆØˆØˆ�˜lÑ+Ô+Ð+Ø! FÑ*ˆØˆˆˆr&   Útotal_bytesc                 ó&   •—  ‰| ‰z
  ‰¦  «         d S rA   r4   )r  r   r  rö   s    €€€r$   r   zlinetable_writer.<locals>.end»  s    ø€ Øˆ�˜fÑ$ lÑ3Ô3Ð3Ð3Ð3r&   )rr   rs   r}   r0   )rò   r  r   r   r  r  rö   rÿ   s      @@@@@r$   Úlinetable_writerr	  ˜  s"  øøøøø€ õ Ô˜˜˜Ô˜wÒ&Ð&ÝØP½#Ô:JÈ2ÈAÈ2Ô:NÐPÐPñ
ô 
ð 	
ð €IØ€FØ€LØ€Fð@�cð @µð @¸ð @ð @ð @ð @ð @ð @ð�3ð ­Cð °Dð ð ð ð ð ð ð ð ð ð4�ð 4 ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð �f˜cÐ!Ð!r&   c                 ó¾   — | dk     rt          d| › �¦  «        ‚| dz  g}| dz  } | dk    r3|dxx         dz  cc<   |                     | dz  ¦  «         | dz  } | dk    °3|S )z~
    6-bit chunk encoding of an unsigned integer
    See https://github.com/python/cpython/blob/3.11/Objects/locations.md
    r   z+encode_varint requires non-negative n, got é?   é   r‘   é@   )r}   rµ   )rŠ   Úbs     r$   Úencode_varintr  Á  s‡   € ð
 	ˆ1‚u€uÝÐNÈ1ÐNÐNÑOÔOÐOØ	
ˆR‰ˆ€AØˆ!�G€AØ
ˆaŠ%ˆ%Ø	ˆ"ˆˆŒ�‰ˆˆ‰Ø	�Š��R‘ÑÔÐØ	ˆa‰ˆð ˆaŠ%ˆ%ð €Hr&   c                 ó¬   ‡‡— t           j        dk     rt          dt           j        › �¦  «        ‚g Š| Šdt          j        dz  dt
          ddfˆˆfd„}‰|fS )z×
        Used to create typing.CodeType.co_linetable
        See https://github.com/python/cpython/blob/3.11/Objects/locations.md
        This is the internal format of the line number table for Python 3.11
        rU   z0linetable_311_writer requires Python 3.11+, got r=   NÚ	inst_sizer   c                 ó¸   •‡ — ‰ r‰ j         nd }dt          dt          dd fˆˆ fd„}|€d}n|‰z
  }|Š|dk    r ||d¦  «         |dz  }|dk    ° |||¦  «         d S )NÚdeltaÚsizer   c                 óø  •— d|cxk     rdk    sn t          d|› �¦  «        ‚d}‰rZ‰j        �S‰j        �L‰j        �E‰j        �>‰                     d|z   dz
  ¦  «         ‰j        ‰j        z
  ‰j        dz   ‰j        dz   f}n‰                     d|z   dz
  ¦  «         | dk     r
|  dz  dz  } n| dz  } ‰                     t          | ¦  «        ¦  «         |D ]$}‰                     t          |¦  «        ¦  «         Œ%d S )Nr   é   z"size must be in range (0, 8], got r4   éð   r   éè   )r}   r  Ú
end_linenoÚ
col_offsetÚend_col_offsetrµ   r¶   r  )r  r  Úother_varintsrŠ   rÿ   r=   s       €€r$   r   z5linetable_311_writer.<locals>.update.<locals>._updateæ  sI  ø€ Ø˜D˜˜š˜ Aš˜˜˜Ý(Ð)TÈdÐ)TÐ)TÑUÔUÐUð 24�àð>à!Ô(Ð4Ø!Ô,Ð8Ø!Ô,Ð8Ø!Ô0Ð<à×$Ò$ \°DÑ%8¸1Ñ%<Ñ=Ô=Ð=ð "Ô,¨yÔ/?Ñ?Ø!Ô,¨qÑ0Ø!Ô0°1Ñ4ð%�M�Mð ×$Ò$ \°DÑ%8¸1Ñ%<Ñ=Ô=Ð=à˜1’9�9Ø$˜f¨™]¨aÑ/�E�Eà˜a‘K�Eà× Ò ¥¨uÑ!5Ô!5Ñ6Ô6Ð6Ø&ð 7ð 7�AØ×$Ò$¥]°1Ñ%5Ô%5Ñ6Ô6Ð6Ð6ð7ð 7r&   r   r  )r  r0   )r=   r  r  r   rö   r  rÿ   s   `    €€r$   r  z$linetable_311_writer.<locals>.updateâ  s¶   øø€ à-6Ð@˜Ô)Ð)¸DˆJð7�sð 7­#ð 7°$ð 7ð 7ð 7ð 7ð 7ð 7ð 7ðB Ð!Ø ��à)¨FÑ2�Ø#�Ø˜a’-�-Ø�˜ aÑ(Ô(Ð(Ø˜Q‘�	ð ˜a’-�-ð ˆG�L )Ñ,Ô,Ð,Ð,Ð,r&   )rr   rs   r}   ri   Ú	Positionsr0   )rò   r  r  rÿ   s     @@r$   Úlinetable_311_writerr  Ó  s�   øø€ õ Ô˜gÒ%Ð%Ý ØUÅ3ÔCSÐUÐUñô ð ð ˆ	Øˆð-	-�cœm¨dÑ2ð -	-½sð -	-Àtð -	-ð -	-ð -	-ð -	-ð -	-ð -	-ð -	-ð^ ˜&Ð Ð r&   c                   óB   — e Zd ZU eed<   eed<   eed<   eed<   eed<   dS )ÚExceptionTableEntryr   r   r   r   r   N)r,   r-   r.   r0   r/   r1   r4   r&   r$   r   r     s=   € € € € € € à€J€J�JØ	€H€H�HØ€K€K�KØ€J€J�JØ€K€K�K€K€Kr&   r   c                 ó*  — | dk     rt          d| › �¦  «        ‚| dz  g}| dz  } | dk    r#|                     | dz  ¦  «         | dz  } | dk    °#|                     ¦   «          t          t	          |¦  «        dz
  ¦  «        D ]}||xx         dz  cc<   Œ|S )zR
    Similar to `encode_varint`, but the 6-bit chunks are ordered in reverse.
    r   z;encode_exception_table_varint requires non-negative n, got r  r  r   r  )r}   rµ   rÐ   r™   Úlen)rŠ   r  rO   s      r$   Úencode_exception_table_varintr#    s¿   € ð 	ˆ1‚u€uÝØMÈ!ÐMÐMñ
ô 
ð 	
ð 
ˆR‰ˆ€AØˆ!�G€AØ
ˆaŠ%ˆ%Ø	�Š��R‘ÑÔÐØ	ˆa‰ˆð ˆaŠ%ˆ%ð ‡I‚I�K„K€KÝ•3�q‘6”6˜A‘:ÑÔð ð ˆØ	ˆ!ˆˆŒ�‰
ˆˆ‰ˆØ€Hr&   Ú
bytes_iterc                 óz   — t          | ¦  «        }|dz  }|dz  r!|dz  }t          | ¦  «        }||dz  z  }|dz  °!|S )z5
    Inverse of `encode_exception_table_varint`.
    r  r  r  )Únext)r$  r  rx   s      r$   Údecode_exception_table_varintr'  0  s^   € õ 	ˆZÑÔ€AØ
ˆb‰&€CØ
ˆb‰&ð Ø�‰	ˆÝ�ÑÔˆØˆq�2‰v‰ˆð ˆb‰&ð ð €Jr&   Útabc                 ó¸  — t          t          | ¦  «        dz
  ¦  «        D ]¹}| |         j        | |         j        k    rA| |         j        | |dz            j        k     r"| |dz            j        | |dz            j        k    sZt	          d|› d|› d| |         j        › d| |         j        › d|dz   › d| |dz            j        › d| |dz            j        › d�¦  «        ‚ŒºdS )	z’
    Verifies that a list of ExceptionTableEntries will make a well-formed
    jump table: entries are non-empty, sorted, and do not overlap.
    r   z5exception table entries are not well-formed at index z: entry[z	]=(start=r   z	), entry[r    N)r™   r"  r   r   r}   )r(  rO   s     r$   Úcheck_exception_tabler*  =  s2  € õ
 •3�s‘8”8˜a‘<Ñ Ô ð 
ð 
ˆà�ŒFŒL˜C œFœJÒ&Ð&Ø�A””
˜S  Q¡œZÔ-Ò-Ð-Ø�A˜‘E”
Ô  C¨¨A©¤J¤NÒ2Ð2å ðSÈð Sð SØðSð SØ%(¨¤V¤\ðSð SØ9<¸Q¼¼ðSð Sà˜Q™ðSð Sà),¨Q°©U¬Ô)9ðSð SàADÀQÈÁUÄÄðSð Sð Sñô ð ð 3ð	
ð 
r&   Úexntabc           	      ó€  — t          | ¦  «        }g }	 	 t          |¦  «        dz  }t          |¦  «        dz  }||z   dz
  }t          |¦  «        dz  }t          |¦  «        }|dz	  }t          |dz  ¦  «        }	|                     t	          |||||	¦  «        ¦  «         Œ‹# t
          $ r t          |¦  «         |cY S w xY w)z…
    Parse the exception table according to
    https://github.com/python/cpython/blob/3.11/Objects/exception_handling_notes.txt
    Tr—   r   )Úiterr'  r1   rµ   r   ÚStopIterationr*  )
r+  Úexntab_iterr(  r   Úlengthr   r   Údlr   r   s
             r$   Úparse_exception_tabler2  O  så   € õ
 �v‘,”,€KØ
€Cðð	NÝ1°+Ñ>Ô>ÀÑBˆEÝ2°;Ñ?Ô?À!ÑCˆFØ˜&‘. 1Ñ$ˆCÝ2°;Ñ?Ô?À!ÑCˆFÝ.¨{Ñ;Ô;ˆBØ˜!‘GˆEÝ˜˜a™‘L”LˆEØ�JŠJÕ*¨5°#°v¸uÀeÑLÔLÑMÔMÐMð	Nøõ ð ð ð Ý˜cÑ"Ô"Ð"Øˆ
ˆ
ˆ
ðøøøs   “BB ÂB=Â<B=c                 óÐ  — g }| D ]Ó}t          |j        dz  ¦  «        }|dxx         dz  cc<   |                     |¦  «         |j        |j        z
  dz   }|                     t          |dz  ¦  «        ¦  «         |                     t          |j        dz  ¦  «        ¦  «         |j        dz  |j        z   }|                     t          |¦  «        ¦  «         ŒÔt          |¦  «        S )zd
    Inverse of parse_exception_table - encodes list of exception
    table entries into bytes.
    r—   r   é€   r   )r#  r   r¶   r   r   r   r   Úbytes)r(  r  ÚentryÚfirst_entryr0  r1  s         r$   Úassemble_exception_tabler8  e  sä   € ð
 	€AØð 4ð 4ˆÝ3°E´KÀ1Ñ4DÑEÔEˆØ�AˆˆŒ˜&Ñ ˆˆ‰Ø	�Š�ÑÔÐØ”˜Uœ[Ñ(¨1Ñ,ˆØ	�ŠÕ.¨v¸©{Ñ;Ô;Ñ<Ô<Ð<Ø	�ŠÕ.¨u¬|¸qÑ/@ÑAÔAÑBÔBÐBØŒk˜QÑ %¤+Ñ-ˆØ	�ŠÕ.¨rÑ2Ô2Ñ3Ô3Ð3Ð3Ý�‰8Œ8€Or&   ÚinstructionsÚfirstlinenoc                 óN  — g }t           j        dk    rùt          |¦  «        \  }}d}t          | ¦  «        D ]Ô\  }}|j        dk    r8d}|dz  }dD ]-}	| ||	z            j        dk    r| ||	z            j        |_         nŒ.nt          |¦  «        dz  |z   }d} ||j        |¦  «         d}|j        pd}
|                     |j	        |
dz  f¦  «         t          t          |¦  «        dz  dz
  ¦  «        D ]}|                     d¦  «         ŒŒÕn}t          |¦  «        \  }}}| D ]O}|j        � ||j        t          |¦  «        ¦  «         |j        pd}
|                     |j	        |
dz  f¦  «         ŒP |t          |¦  «        ¦  «         t          |¦  «        t          |¦  «        fS )	z)Do the opposite of dis.get_instructions()rU   r   ÚEXTENDED_ARGr   ©r   r—   rM   r—   rú   )r   r   )rr   rs   r  Ú	enumerater7   r=   Úinstruction_sizer8   r¶   r6   r™   r	  r;   r"  r5  )r9  r:  ÚcodeÚlnotabÚupdate_linenoÚnum_extrO   rt   r  Újr8   Ú_r   s                r$   ÚassemblerF  w  sí  € à€DÝ
Ô˜7Ò"Ð"Ý 4°[Ñ AÔ AÑˆ�ØˆÝ  Ñ.Ô.ð 	$ð 	$‰GˆAˆtØŒ{˜nÒ,Ð,Ø�	Ø˜1‘�à"ð ð �AØ# A¨¡EÔ*Ô1°^ÒCÐCØ)5°a¸!±eÔ)<Ô)F˜œØ˜ð Døõ -¨TÑ2Ô2°aÑ7¸'ÑA�	Ø�ØˆM˜$œ.¨)Ñ4Ô4Ð4ØˆGØ”(�-˜aˆCØ�KŠK˜œ c¨D¡jÐ1Ñ2Ô2Ð2ÝÕ+¨DÑ1Ô1°QÑ6¸Ñ:Ñ;Ô;ð $ð $�Ø—’˜FÑ#Ô#Ð#Ð#ð$ð!	$õ& &6°kÑ%BÔ%BÑ"ˆ�˜sà ð 	3ð 	3ˆDØÔÐ+Ø�˜dÔ.µ°D±	´	Ñ:Ô:Ð:Ø”(�-˜aˆCØ�KŠK˜œ c¨D¡jÐ1Ñ2Ô2Ð2Ð2àˆ�C�‰IŒI‰Œˆå�‰;Œ;�˜f™œÐ%Ð%r&   Úoffset_to_instr:   c                 óf   — dD ]-}| ||z            j         t          j        k    r| ||z            c S Œ.dS )zU
    Get the instruction located at a given offset, accounting for EXTENDED_ARGs
    )r   r—   r’   r  N©r6   ri   r<  )rG  r:   rŠ   s      r$   Ú_get_instruction_by_offsetrJ  �  sM   € ð ð .ð .ˆØ˜& 1™*Ô%Ô,µÔ0@Ò@Ð@Ø! &¨1¡*Ô-Ð-Ð-Ð-ð Aàˆ4r&   c                 ó¨   — d„ | D ¦   «         }| D ]B}|j         t          j        v s|j         t          j        v rt	          ||j        ¦  «        |_        ŒCdS )z9Replace jump targets with pointers to make editing easierc                 ó,   — i | ]}|j         ®	|j         |“ŒS rA   )r:   ©r�   rt   s     r$   ú
<dictcomp>z$virtualize_jumps.<locals>.<dictcomp>«  s*   € ð ð ð Ø"°d´kÐ6MˆŒ�TÐ6MÐ6MÐ6Mr&   N)r6   ri   ÚhasjabsÚhasjrelrJ  r9   r   )r9  Újump_targetsrt   s      r$   Úvirtualize_jumpsrR  ©  sp   € ðð Ø&2ðñ ô €Lð ð Pð PˆØŒ;�#œ+Ð%Ð%¨¬½¼Ð)CÐ)CÝ4°\À4Ä;ÑOÔOˆDŒKøðPð Pr&   Úinstructionc                 óŽ  — t           j        dk     rt          d¦  «        ‚d| j        v r!| j                             dd¦  «        | _        n9d| j        v r!| j                             dd¦  «        | _        nt          d¦  «        ‚t          j        | j                 | _        | j        t          vrt          d| j        › d�¦  «        ‚d S )NrU   z+Cannot flip jump direction in Python < 3.11ÚFORWARDÚBACKWARDz-Instruction is not a forward or backward jumpz	expected z" to be a relative jump instruction)rr   rs   rh   r7   ÚreplaceÚAttributeErrorri   rj   r6   Ú
_REL_JUMPSr}   )rS  s    r$   Úflip_jump_directionrZ  ·  sÑ   € Ý
Ô˜'Ò!Ð!ÝÐHÑIÔIÐIØ�KÔ&Ð&Ð&Ø(Ô/×7Ò7¸	À:ÑNÔNˆÔÐØ	�{Ô)Ð	)Ð	)Ø(Ô/×7Ò7¸
ÀIÑNÔNˆÔÐåÐLÑMÔMÐMÝœ ;Ô#5Ô6€KÔØÔ¥Ð+Ð+ÝØN˜Ô*ÐNÐNÐNñ
ô 
ð 	
ð ,Ð+r&   rŸ   c                 ó€   — | |         }dD ]2}||k    r*| ||z
           j         t          j        k    r| ||z
           }Œ2 |S )zp
    i.e. get the first EXTENDED_ARG instruction (if any) when targeting
    instructions[idx] with a jump.
    r=  rI  )r9  rŸ   r   r:   s       r$   Ú_get_instruction_frontr\  Ç  sW   € ð
 ˜#Ô€FØð ð ˆØ�&Š=ˆ=˜\¨#°©,Ô7Ô>Å#ÔBRÒRÐRØ! #¨¡,Ô/ˆFˆFàØ€Mr&   c           	      óT  — t          t          j        ¦  «                             t          t          j        ¦  «        ¦  «        }| D ]õ}|j        |v rê|j        t          j        vr×|j        €t          d|j        › d�¦  «        ‚|j        j	        €t          d|j        › d�¦  «        ‚|j	        €t          d|j        › d�¦  «        ‚|j        j	        |j	        k     r8t          j        dk     rt          d¦  «        ‚d|j        v rt          |¦  «         ŒÍt          j        dk    rd	|j        v rt          |¦  «         Œöt          | ¦  «         t          | ¦  «        }| D �]J}|j        |v �r=|j        €t          d|j        › d�¦  «        ‚t!          | ||j                 ¦  «        }|j        t          j        v rRt          j        dk     r3|j	        €t          d
¦  «        ‚t#          |j	        dz  ¦  «        |_        n’t          d¦  «        ‚|j	        €t          d¦  «        ‚|j	        €t          d|j        › d�¦  «        ‚t'          t#          |j	        |j	        z
  t)          |¦  «        z
  ¦  «        ¦  «        |_        |xj        dz  c_        |j	        |_        d|j	        › �|_        �ŒLdS )zJFill in args for virtualized jump target after instructions may have movedNzjump instruction z has no targetzjump target for z has no offsetrU   z*Got negative jump offset for Python < 3.11rU  rV  z"absolute jump target has no offsetr—   z+Python 3.11+ should not have absolute jumpsz"relative jump target has no offsetzrelative jump instruction zto )Úsetri   rO  ÚunionrP  r6   r   r}   r7   r:   rr   rs   rh   rZ  Úupdate_offsetsr   r\  r0   r8   Úabsr?  r9   r?   )r9  Újumpsrt   Úindexofr   s        r$   Údevirtualize_jumpsrd  Õ  sË  € å•”ÑÔ×"Ò"¥3¥s¤{Ñ#3Ô#3Ñ4Ô4€Eð ð 2ð 2ˆØŒ;˜%ÐÐØŒ{¥#¤+Ð-Ð-Ø”;Ð&Ý(ØG¨D¬KÐGÐGÐGñô ð ð ”;Ô%Ð-Ý(Ð)W¸D¼KÐ)WÐ)WÐ)WÑXÔXÐXØ”;Ð&Ý(ØG¨D¬KÐGÐGÐGñô ð ð ”;Ô%¨¬Ò3Ð3ÝÔ'¨'Ò1Ð1Ý*Ð+WÑXÔXÐXà  D¤KÐ/Ð/Ý+¨DÑ1Ô1Ð1øõ Ô'¨7Ò2Ð2°zÀTÄ[Ð7PÐ7PÝ+¨DÑ1Ô1Ð1øõ �<Ñ Ô Ð Ý˜,Ñ'Ô'€Gð ð 1ñ 1ˆØŒ;˜%ÐÑØŒ{Ð"Ý$Ð%T¸¼Ð%TÐ%TÐ%TÑUÔUÐUÝ+¨L¸'À$Ä+Ô:NÑOÔOˆFØŒ{�cœkÐ)Ð)ÝÔ# gÒ-Ð-ð ”}Ð,Ý,Ð-QÑRÔRÐRÝ" 6¤=°1Ñ#4Ñ5Ô5�D”H�Hå&Ð'TÑUÔUÐUð ”=Ð(Ý(Ð)MÑNÔNÐNØ”;Ð&Ý(ØP°T´[ÐPÐPÐPñô ð õ Ý˜œ¨¬Ñ3Õ6FÀtÑ6LÔ6LÑLÑMÔMñô �”ð �”˜Q‘�”Ø œ-ˆDŒKØ0 ¤Ð0Ð0ˆDŒLùð91ð 1r&   Úexn_tab_bytesc                 ó  ‡‡‡	‡
— t          | ¦  «        }d„ |D ¦   «         Š	t          ‰	                     ¦   «         ¦  «        Š
dŠt          |¦  «        Š	 dt          t
          t          f         fˆˆˆ	ˆ
fd„} |¦   «         \  }}|D ]w}|j        €t          d|j	        › d�¦  «        ‚|j        |j
        k    r |¦   «         \  }}|j        |j
        k    °|j        |j        k    rt          j        |¦  «        |_        ŒxdS # t          $ r Y dS w xY w)zDReplace exception table entries with pointers to make editing easierc                 óD   — i | ]}t          t          |j        ¦  «        |“ŒS r4   )r	   r0   r:   rM  s     r$   rN  z.virtualize_exception_table.<locals>.<dictcomp>  s&   € ÐLÐLÐL°t•d�3 ¤Ñ,Ô,¨dÐLÐLÐLr&   r   r   c                  ó¦  •— t          ‰¦  «        } ‰t          ‰¦  «        k     r:‰‰         | j        k    r)‰dz  Š‰t          ‰¦  «        k     r‰‰         | j        k    °)‰dk    rt          d¦  «        ‚‰‰dz
           }t	          t          ‰| j        ¦  «        t          ‰|¦  «        t          ‰| j        ¦  «        | j        | j	        ¦  «        }| |fS )Nr   r   zAend_offset_idx must be positive in exception table virtualization)
r&  r"  r   r}   r   rJ  r   r   r   r   )r6  Ú
end_offsetÚ
inst_entryÚend_offset_idxÚexn_tab_iterrG  Úoffsetss      €€€€r$   Ústepz(virtualize_exception_table.<locals>.step!  sæ   ø€ å˜Ñ&Ô&ˆEð ¥ W¡¤Ò-Ð-°'¸.Ô2IÈUÌYÒ2VÐ2Và !Ñ#�ð ¥ W¡¤Ò-Ð-°'¸.Ô2IÈUÌYÒ2VÐ2Vð  Ò"Ð"Ý$ØWñô ð ð ! °!Ñ!3Ô4ˆJÝ/Ý*¨>¸5¼;ÑGÔGÝ*¨>¸:ÑFÔFÝ*¨>¸5¼<ÑHÔHØ”Ø”ñô ˆJð ˜*Ð$Ð$r&   Núinstruction z4 has no offset during exception table virtualization)r2  ÚsortedÚkeysr-  Útupler   r   r:   r}   r7   r   r   Úcopyr>   r.  )re  r9  Úexn_tabrn  r6  rj  rt   rk  rl  rG  rm  s          @@@@r$   Úvirtualize_exception_tableru    sk  øøøø€ õ $ MÑ2Ô2€GØLÐL¸|ÐLÑLÔL€NÝ�^×(Ò(Ñ*Ô*Ñ+Ô+€GØ€NÝ˜‘=”=€Lð'ð	%•eÕ/Õ1GÐGÔHð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð2 !˜D™FœFÑˆˆzØ ð 		;ð 		;ˆDØŒ{Ð"Ý$ð+ 4¤;ð +ð +ð +ñô ð ð ”+ ¤	Ò)Ð)Ø$( D¡F¤FÑ!��zð ”+ ¤	Ò)Ð)àŒ{˜eœkÒ)Ð)Ý%)¤Y¨zÑ%:Ô%:�Ô"øð		;ð 		;øõ ð ð ð Øˆˆðøøøs   ÁB)C> Ã>
DÄDc           	      ó8  ‡‡‡‡— i Št          | ¦  «        }| D �]}|j        �rt          | ||j        j                 ¦  «        j        }|€t          d¦  «        ‚t          t          |j        j        j        ¦  «        t          |j        j        ¦  «        z   dz
  }|€t          d¦  «        ‚t          | ||j        j
                 ¦  «        j        }|€t          d¦  «        ‚||f}||j        j        |j        j        f}|‰v r*‰|         |k    rt          d|› d‰|         › d|› �¦  «        ‚|‰|<   �Œt          ‰                     ¦   «         d	„ ¬
¦  «        }dŠg Šg Šdˆˆˆˆfd„}	|D �]}‰r<‰d         d         |d         k     r$ |	¦   «          ‰r‰d         d         |d         k     °$‰r»‰d         d         |d         cxk    r|d         cxk    r‰d         d         k    sn t          d|› d‰d         › �¦  «        ‚t          ‰‰d         d         ¦  «        }
|
|d         k     r6‰                     t#          |
|d         dz
  g‰‰d                  ¢R Ž ¦  «         |d         Š‰                     |¦  «         �Œ‰r |	¦   «          ‰°t%          ‰¦  «         ‰S )zMCompute exception table in list format from instructions with exn_tab_entriesNz5exception table entry start instruction has no offsetr—   z3exception table entry end instruction has no offsetz6exception table entry target instruction has no offsetz.conflicting exception table entries for range z: z vs c                 ó$   — | d         | d          fS ©Nr   r   r4   ©Úts    r$   ú<lambda>z)compute_exception_table.<locals>.<lambda>{  s   € ¸¸1¼ÀÀ!Ä¸u¸€ r&   ©Úkeyr   r   c                  óì   •— ‰rn‰                      ¦   «         } ‰| d         k    rP‰                     t          t          | d         ‰¦  «        | d         g‰|          ¢R Ž ¦  «         | d         dz   ŠdS dS dS )zT
        Pop the key_stack and append an exception table entry if possible.
        r   r   r—   N)Úpoprµ   r   rû   )r}  Úexn_dictrt  Ú	key_stackÚnextis    €€€€r$   r  z$compute_exception_table.<locals>.pop‚  sŠ   ø€ ð
 ð 	#Ø—-’-‘/”/ˆCØ˜˜AœŠˆØ—’Ý'­¨C°¬F°EÑ(:Ô(:¸CÀ¼FÐSÀXÈcÄ]ÐSÐSÐSñô ð ð ˜Aœ ™
���ð	#ð 	#àˆr&   r‘   r   zexception table key ú& is not properly nested within parent )r   N)r   r>   r\  r   r:   r}   r	   r0   r   r?  r   r   r   rp  rq  rû   rµ   r   r*  )r9  rc  rt   r   r   r   r}  rx   Úkeys_sortedr  Úleftr€  rt  r�  r‚  s              @@@@r$   Úcompute_exception_tabler†  I  s‰  øøøø€ ð >@€HÝ˜,Ñ'Ô'€Gàð # ñ # ˆØÔñ "	 å*Ø˜g dÔ&8Ô&>Ô?ñô äð ð ˆ}Ý$ØKñô ð õ
 •S˜$Ô,Ô0Ô7Ñ8Ô8Ý" 4Ô#5Ô#9Ñ:Ô:ñ;àñð ð
 ˆ{Ý$ØIñô ð õ ,Ø˜g dÔ&8Ô&?Ô@ñô äð ð ˆ~Ý$ØLñô ð ð ˜#�,ˆCØ˜4Ô-Ô3°TÔ5GÔ5MÐNˆCØ�hˆˆØ˜C”= CÒ'Ð'Ý(ð;Øð;ð ;Ø"*¨3¤-ð;ð ;Ø58ð;ð ;ñô ð ð  ˆH�S‰Mùõ ˜Ÿš™œÐ.EÐ.EÐFÑFÔF€Kà€Eà')€IØ)+€Gð#ð #ð #ð #ð #ð #ð #ð #ð #ð ð ñ ˆàð 	˜I bœM¨!Ô,¨s°1¬vÒ5Ð5ØˆC‰EŒEˆEð ð 	˜I bœM¨!Ô,¨s°1¬vÒ5Ð5àð 	à˜b”M !Ô$¨¨A¬ÐLÐLÒLÐL°#°a´&ÐLÐLÒLÐL¸IÀb¼MÈ!Ô<LÒLÐLÐLÐLÝ$ð.¨3ð .ð .Ø'¨œmð.ð .ñô ð õ �u˜i¨œm¨AÔ.Ñ/Ô/ˆDØ�c˜!”fŠ}ˆ}Ø—’Ý'¨¨c°!¬f°q©jÐS¸8ÀIÈbÄMÔ;RÐSÐSÐSñô ð ð ˜”FˆEØ×Ò˜ÑÔÐÑØ
ð Øˆ‰Œˆð ð å˜'Ñ"Ô"Ð"Ø€Nr&   rc  c                 ó°  — g }| D ]Ð}||j                  ||j                 f}|rF|d         d         |d         k     r.|                     ¦   «          |r|d         d         |d         k     °.|rU|d         d         |d         cxk    r|d         cxk    r|d         d         k    sn t          d|› d|d         › �¦  «        ‚|                     |¦  «         ŒÑdS )zÚ
    Checks `tab` is a properly sorted list of nested InstructionExnTabEntry's,
    i.e. no entries partially overlap.
    "Properly sorted" means entries are sorted by increasing starts, then
    decreasing ends.
    r‘   r   r   zexception table entry rƒ  N)r   r   r  r}   rµ   )r(  rc  Úentry_stackr6  r}  s        r$   Ú!check_inst_exn_tab_entries_nestedr‰  §  s&  € ð *,€KØð 
 ð 
 ˆØ�u”{Ô# W¨U¬YÔ%7Ð8ˆØð 	˜k¨"œo¨aÔ0°3°q´6Ò9Ð9Ø�OŠOÑÔÐð ð 	˜k¨"œo¨aÔ0°3°q´6Ò9Ð9àð 	Ø ”O AÔ&¨#¨a¬&ÐPÐPÒPÐP°C¸´FÐPÐPÒPÐP¸kÈ"¼oÈaÔ>PÒPÐPÐPÐPÝ$ð7¨Sð 7ð 7Ø%0°¤_ð7ð 7ñô ð ð 	×Ò˜3ÑÔÐÐð
 ð 
 r&   c                 ó  ‡— t          | ¦  «        }i Š| D ]^}|j        rU||j        j                 ||j        j                 f}|‰v r#|j        ‰|         k    rt	          d|› �¦  «        ‚|j        ‰|<   Œ_ˆfd„t          ‰                     ¦   «         d„ ¬¦  «        D ¦   «         }t          ||¦  «         |D ]M}t          ||j                 ||j                 dz   ¦  «        D ]!}t          j	        |¦  «        | |         _        Œ"ŒNdS )z~
    Copies exception table entries to all instructions in an entry's range.
    Supports nested exception table entries.
    z1conflicting exn_tab_entry for instruction at key c                 ó    •— g | ]
}‰|         ‘ŒS r4   r4   )r�   r}  Úentriess     €r$   r�   z4propagate_inst_exn_table_entries.<locals>.<listcomp>Ñ  s*   ø€ ð ð ð Øˆ�Œðð ð r&   c                 ó$   — | d         | d          fS rx  r4   ry  s    r$   r{  z2propagate_inst_exn_table_entries.<locals>.<lambda>Ò  s   € ÀaÈÄdÈQÈqÌTÈEÀ]€ r&   r|  r   N)
r   r>   r   r   r}   rp  rq  r‰  r™   rs  )r9  rc  rt   r}  Úsorted_entriesr6  rO   rŒ  s          @r$   Ú propagate_inst_exn_table_entriesr�  ¾  sU  ø€ õ
 ˜,Ñ'Ô'€GØ=?€GØð .ð .ˆØÔð 
	.à˜Ô*Ô0Ô1Ø˜Ô*Ô.Ô/ðˆCð �gˆ~ˆ~ØÔ%¨°¬Ò5Ð5Ý(ØQÈCÐQÐQñô ð ð  Ô-ˆG�C‰Løðð ð ð Ý & w§|¢|¡~¤~Ð;RÐ;RÐ SÑ SÔ Sðñ ô €Nõ & n°gÑ>Ô>Ð>ð  ð =ð =ˆÝ�w˜uœ{Ô+¨W°U´YÔ-?À!Ñ-CÑDÔDð 	=ð 	=ˆAÝ,0¬I°eÑ,<Ô,<ˆL˜ŒOÔ)Ð)ð	=ð=ð =r&   c           
      ó   — t          | ¦  «        }t          ¦   «         }t          | ¦  «        D �]\  }}|j        �rt          j        dk     rt          d¦  «        ‚t          |j        ¦  «        |v rt          d|› �¦  «        ‚|                     t          |j        ¦  «        ¦  «         |j        }|j	        |vrt          d¦  «        ‚|j
        |vrt          d¦  «        ‚|j        |vrt          d¦  «        ‚||j	                 |cxk    r||j
                 k    s1n t          d|› d||j	                 › d	||j
                 › d
�¦  «        ‚�Œ!dS )aJ  
    Checks that exn_tab_entries of instructions are valid.
    An entry's start, end, and target must be in instructions.
    Instructions with an exn_tab_entry are located within
    the entry's start and end instructions.
    Instructions do not share exn_tab_entries.

    Implicitly checks for no duplicate instructions.
    rU   z/exn_tab_entry is only supported in Python 3.11+z-duplicate exn_tab_entry at instruction index z9exn_tab_entry start instruction not found in instructionsz7exn_tab_entry end instruction not found in instructionsz:exn_tab_entry target instruction not found in instructionszinstruction at index z% is outside its exn_tab_entry range [z, ú]N)r   r^  r>  r>   rr   rs   r}   rC   Úaddr   r   r   )r9  rc  Úexn_tab_entry_setrO   rt   r6  s         r$   Ú check_inst_exn_tab_entries_validr”  Ü  s·  € õ ˜,Ñ'Ô'€GÝ™œÐÝ˜\Ñ*Ô*ð ñ ‰ˆˆ4ØÔñ 	ÝÔ 'Ò)Ð)Ý$Ð%VÑWÔWÐWÝ�$Ô$Ñ%Ô%Ð):Ð:Ð:Ý$ØGÀAÐGÐGñô ð ð ×!Ò!¥" TÔ%7Ñ"8Ô"8Ñ9Ô9Ð9ØÔ&ˆEØŒ{ 'Ð)Ð)Ý$ØOñô ð ð Œy Ð'Ð'Ý$ØMñô ð ð Œ| 7Ð*Ð*Ý$ØPñô ð ð ˜EœKÔ(¨AÐCÐCÒCÐC°¸¼Ô1CÒCÐCÐCÐCÝ$ðL¨Að Lð LØ% e¤kÔ2ðLð LØ6=¸e¼iÔ6HðLð Lð Lñô ð ùð/ð r&   c                 ó(   — d„ | D ¦   «         | d d …<   d S )Nc                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r4   rI  rŽ   s     r$   r�   z'strip_extended_args.<locals>.<listcomp>  s'   € ÐOÐOÐO˜Q°!´(½cÔ>NÒ2NÐ2N�qÐ2NÐ2NÐ2Nr&   r4   )r9  s    r$   Ústrip_extended_argsr—    s!   € ØOÐO ,ÐOÑOÔO€L����O€O€Or&   Úold_instÚ	new_instsc                 ó´  — | j         r3| j         j        | u r%t          |¦  «        dk    r|d         | j         _        |dd …         D ],}t          j        | j         ¦  «        |_         | j        |_        Œ-|d         j        | _        |d         j        | _        |d         j        | _        |d         j        | _        |d         j	        | _	        | g|dd …         z   S )Nr   r‘   r   )
r>   r   r"  rs  r=   r6   r7   r8   r9   r   )r˜  r™  rt   s      r$   Úoverwrite_instructionr›    sÓ   € ð
 	Ôð3àÔ"Ô&¨(Ð2Ð2Ý�	‰NŒN˜QÒÐà%.¨r¤]ˆÔÔ"à˜!˜"˜"”ð ,ð ,ˆÝ!œY xÔ'=Ñ>Ô>ˆÔØ!Ô+ˆŒˆà ”lÔ)€H„OØ ”lÔ)€H„OØ˜Q”<Ô#€H„LØ ”lÔ)€H„OØ ”lÔ)€H„OØˆ:˜	 ! " "œÑ%Ð%r&   c                 óÆ   — t           j        dk    rt          d¦  «        ‚dddœ}| D ]9}|j        |v r.||j                 |_        t          j        |j                 |_        Œ:| S )zFLOAD_METHOD puts a NULL on the stack which causes issues, so remove itrU   z<remove_load_call_method should not be called on Python 3.11+r`   r´   )rÅ   rÂ   )rr   rs   r}   r7   ri   rj   r6   )r9  Úrewritesrt   s      r$   Úremove_load_call_methodrž  %  su   € å
Ô˜7Ò"Ð"ÝØJñ
ô 
ð 	
ð  +¸?ÐKÐK€HØð 1ð 1ˆØŒ;˜(Ð"Ð"Ø" 4¤;Ô/ˆDŒKÝœ) D¤KÔ0ˆDŒKøØÐr&   c                 óÀ  — g }| D ]Ñ}d|j         v r±t          dt          d|j         v ¦  «        ¬¦  «        }|j        |_        t
          j        dk     r"t          d|j         v rdnd|j        ¬	¦  «        }nt          d
|j        ¬	¦  «        }t          dd ¬¦  «        ||g}|                     t          ||¦  «        ¦  «         Œ¼| 
                    |¦  «         ŒÒ|| d d …<   d S )NÚ_NONEÚIS_OPÚNOTr‡   r\   rU  ÚPOP_JUMP_FORWARD_IF_TRUEÚPOP_JUMP_BACKWARD_IF_TRUErp   ÚPOP_JUMP_IF_TRUEr{   r|   )r7   rl   r0   r8   r9   rr   rs   r   r¶   r›  rµ   )r9  r™  rt   Úis_opÚjump_opÚreplace_instss         r$   Úremove_jump_if_noner©  3  s  € Ø€IØð #ð #ˆØ�d”kÐ!Ð!Ý& wµC¸ÀÄÐ8LÑ4MÔ4MÐNÑNÔNˆEà œ9ˆEŒLåÔ 'Ò)Ð)Ý,ð %¨¬Ð3Ð3ð 3Ð2à8àœ;ðñ ô ��õ -Ð-?ÈÌÐTÑTÔT�õ # <¸Ð=Ñ=Ô=ØØðˆMð
 ×ÒÕ2°4¸ÑGÔGÑHÔHÐHÐHà×Ò˜TÑ"Ô"Ð"Ð"Ø€L����O€O€Or&   c                 ó  — g }| D ]þ}|                      |¦  «         |j        dv rÞt          j        dk    r|j        dk    rt	          ¦   «         }n(t          |j                             dd¦  «        ¦  «        }|j        r|j        j        |u r||j        _        t          j	        |j        ¦  «        |_        |j
        |_
        t          j        d         |_        d|_        d|_        d|_        |                      |¦  «         Œÿ|| d d …<   d S )N)rÝ   rÜ   r½   rÝ   ÚSLICEÚSUBSCRrß   r—   )rµ   r7   rr   rs   rÒ   rl   rW  r>   r   rs  r=   ri   rj   r6   r8   r9   )r9  r™  rt   rá   s       r$   Úremove_binary_store_slicer­  R  s  € Ø€IØð *ð *ˆØ×Ò˜ÑÔÐØŒ;Ð9Ð9Ð9åÔ 7Ò*Ð*¨t¬{¸nÒ/LÐ/LÝ2Ñ4Ô4��å0°´×1DÒ1DÀWÈhÑ1WÔ1WÑXÔX�ØÔ!ð 5 dÔ&8Ô&<ÀÐ&DÐ&DØ)4�Ô"Ô&Ý(,¬	°$Ô2DÑ(EÔ(EˆKÔ%Ø$(¤NˆKÔ!åœ) MÔ2ˆDŒKØ'ˆDŒKØˆDŒHØˆDŒKØ×Ò˜[Ñ)Ô)Ð)øØ€L����O€O€Or&   )Ú	LOAD_FASTr®  )ÚLOAD_FAST_BORROWr¯  )Ú
STORE_FASTr°  )r°  r®  )ÚLOAD_FAST_LOAD_FASTÚ!LOAD_FAST_BORROW_LOAD_FAST_BORROWÚSTORE_FAST_STORE_FASTÚSTORE_FAST_LOAD_FASTc                 ó2  — g }| D ]Š}|j         t          v ret          |j                  \  }}|j        \  }}t          ||¬¦  «        t          ||¬¦  «        g}|                     t          ||¦  «        ¦  «         Œu|                     |¦  «         Œ‹|| d d …<   d S )Nr|   )r7   ÚFUSED_INSTSr9   rl   r¶   r›  rµ   )r9  r™  rt   Úinst0Úinst1Úargval0Úargval1r¨  s           r$   Úremove_fused_load_storer»  q  s´   € Ø€IØð #ð #ˆØŒ;�+Ð%Ð%Ý& t¤{Ô3‰LˆE�5Ø#œ{ÑˆG�Wõ # 5°Ð9Ñ9Ô9Ý" 5°Ð9Ñ9Ô9ðˆMð ×ÒÕ2°4¸ÑGÔGÑHÔHÐHÐHà×Ò˜TÑ"Ô"Ð"Ð"Ø€L����O€O€Or&   c                 óþ   — g }| D ]p}d|j         v rPt          dd¬¦  «        t          |j         |j        ¬¦  «        g}|                     t	          ||¦  «        ¦  «         Œ[|                     |¦  «         Œq|| d d …<   d S )NÚRETURNÚNOPÚGRAPH_BREAK_IF_LEAFr|   )r7   rl   r9   r¶   r›  rµ   )r9  r™  rt   r¨  s       r$   Ú$add_graph_break_if_leaf_instructionsrÀ  „  s›   € Ø€IØð #ð #ˆØ�t”{Ð"Ð"å" 5Ð1FÐGÑGÔGÝ" 4¤;°t´{ÐCÑCÔCðˆMð ×ÒÕ2°4¸ÑGÔGÑHÔHÐHÐHà×Ò˜TÑ"Ô"Ð"Ð"Ø€L����O€O€Or&   c                 ó†  — g }t          j        | ¦  «        D �]\  }}|j        dk    rà|j        dk    rÕ|j                             d¦  «        r»t          t          | ¦  «        ¦  «        D ]�}| |         j        |u r|| |         _        | |         j        rr| |         j        j	        |u r|| |         j        _	        | |         j        j
        |u r|| |         j        _
        | |         j        j        |u r|| |         j        _        ŒžŒñ|                     |¦  «         �Œ|                     | d         ¦  «         || d d …<   d S )Nr¾  r¿  r½  r‘   )Ú	itertoolsÚpairwiser7   r9   Ú
startswithr™   r"  r   r>   r   r   rµ   )r9  r™  rt   Ú	next_instrO   s        r$   Ú'remove_graph_break_if_leaf_instructionsrÆ  ’  sb  € Ø€IÝ$Ô-¨lÑ;Ô;ð #ñ #‰ˆˆiàŒK˜5Ò Ð Ø”Ð4Ò4Ð4ØÔ ×+Ò+¨HÑ5Ô5ð 5õ �3˜|Ñ,Ô,Ñ-Ô-ð Ið I�Ø ”?Ô)¨TÐ1Ð1Ø-6�L ”OÔ*Ø ”?Ô0ð Ið $ A”Ô4Ô:¸dÐBÐBØ>G˜ QœÔ5Ô;Ø# A”Ô4Ô8¸DÐ@Ð@Ø<E˜ QœÔ5Ô9Ø# A”Ô4Ô;¸tÐCÐCØ?H˜ QœÔ5Ô<øðIð ×Ò˜TÑ"Ô"Ð"Ñ"Ø×Ò�\ "Ô%Ñ&Ô&Ð&Ø€L����O€O€Or&   r@  c                 óh  — | j         pd| j        pdz   }t          | j        ¦  «        sdS g }t	          |¦  «        D �]n\  }}|                     |¦  «         |j        dk    �rG|j        dk    �r;||dz            }|j        dk    �r$t          j
        dk    r|j        dk    sFt          j
        d	k    rt          j
        dk     r|j        d
k    st          j
        d	k     rÎ|j        dk    rÃd|vrt          d¦  «        ‚|                     t          dd¬¦  «        ¦  «         | j        d         }||v r%|                     t          d|¬¦  «        ¦  «         n$|                     t          d|¬¦  «        ¦  «         d|_        d|_        |j        d
k    r||dz            }d|_        d|_        �Œp||dd…<   dS )z3convert super() with no args into explicit arg formr4   Nra   Úsuperr   r   r\   r³   rU   r²   r´   Ú	__class__z5__class__ not found in cell_and_free for super() callÚ
LOAD_DEREFr|   r®  r—   )Úco_cellvarsÚco_freevarsr"  Úco_varnamesr>  rµ   r7   r9   r8   rr   rs   r}   rl   )	r@  r9  Úcell_and_freer·   rŸ   rt   r‚  Ú	first_varÚ	call_insts	            r$   Úexplicit_superrÑ  ­  sÜ  € àÔ%Ð+¨°Ô0@Ð0FÀBÑG€MÝˆtÔÑ Ô ð àˆØ€FÝ˜|Ñ,Ô,ð )ñ )‰	ˆˆTØ�Š�dÑÔÐØŒ;˜-Ò'Ñ'¨D¬K¸7Ò,BÑ,BØ   q¡Ô)ˆEØŒy˜AŠ~‰~ÝÔ! WÒ,Ð,°´ÀÒ1GÐ1GåÔ$¨Ò/Ð/ÝÔ(¨7Ò2Ð2Øœ¨	Ò1Ð1åÔ$ wÒ.Ð.°5´<À?Ò3RÐ3Rà mÐ3Ð3Ý(ØOñô ð ð —’Õ0°ÀkÐRÑRÔRÑSÔSÐSØ Ô,¨QÔ/�	Ø Ð-Ð-Ø—M’MÕ"4°\È)Ð"TÑ"TÔ"TÑUÔUÐUÐUà—M’MÕ"4°[ÈÐ"SÑ"SÔ"SÑTÔTÐTØ�”	Ø �”Ø”< 9Ò,Ð,à ,¨S°1©WÔ 5�IØ$%�I”MØ'(�IÔ$ùà€L����O€O€Or&   c                 óÞ  ‡— g Šdt           ddfˆfd„}| D �]—}|j        t          j        k    r	d|_        �na|j        r›|j        dk    r� |d¦  «         ‰                     t          d|j        d	z	  ¬
¦  «        ¦  «         ‰                     t          d|j        dz	  ¬
¦  «        ¦  «         ‰                     t          d|j        dz	  ¬
¦  «        ¦  «         n¿|j        ro|j        dk    rd |d¦  «         ‰                     t          d|j        dz	  ¬
¦  «        ¦  «         ‰                     t          d|j        dz	  ¬
¦  «        ¦  «         nI|j        rB|j        dk    r7 |d¦  «         ‰                     t          d|j        dz	  ¬
¦  «        ¦  «         ‰                     |¦  «         �Œ™t          ‰¦  «        t          | ¦  «        z
  }|dk     rt          d|› d�¦  «        ‚‰| dd…<   |S )z,Fill in correct argvals for EXTENDED_ARG opsrŠ   r   Nc                 óŽ   •— t          | ¦  «        D ]3}‰r/‰d         j        t          j        k    r‰                     ¦   «          Œ4d S )Nr‘   )r™   r6   ri   r<  r  )rŠ   rE  r·   s     €r$   Úmaybe_pop_nz&fix_extended_args.<locals>.maybe_pop_nÚ  sL   ø€ Ý�q‘”ð 	ð 	ˆAØð ˜& œ*Ô+­sÔ/?Ò?Ð?Ø—
’
‘”�øð	ð 	r&   r   iÿÿÿ rM   r<  é   r‡   é   r  iÿÿ  r—   rú   r   z.fix_extended_args removed instructions (added=z), expected non-negative)	r0   r6   ri   r<  r8   rµ   rl   r"  r}   )r9  rÔ  rt   Úaddedr·   s       @r$   Úfix_extended_argsrØ  Ö  s$  ø€ à "€Fð•sð ˜tð ð ð ð ð ð ð
 ð ñ ˆØŒ;�#Ô*Ò*Ð*àˆDŒH‰HØŒXð 	Q˜$œ( XÒ-Ð-ØˆK˜‰NŒNˆNØ�MŠMÕ,¨^ÀÄÈRÁÐPÑPÔPÑQÔQÐQØ�MŠMÕ,¨^ÀÄÈRÁÐPÑPÔPÑQÔQÐQØ�MŠMÕ,¨^ÀÄÈQÁÐOÑOÔOÑPÔPÐPÐPØŒXð 	Q˜$œ( VÒ+Ð+ØˆK˜‰NŒNˆNØ�MŠMÕ,¨^ÀÄÈRÁÐPÑPÔPÑQÔQÐQØ�MŠMÕ,¨^ÀÄÈQÁÐOÑOÔOÑPÔPÐPÐPØŒXð 	Q˜$œ( Tš/˜/ØˆK˜‰NŒNˆNØ�MŠMÕ,¨^ÀÄÈQÁÐOÑOÔOÑPÔPÐPØ�Š�dÑÔÐÑå�‰KŒK�#˜lÑ+Ô+Ñ+€EØˆq‚y€yÝð$¸Uð $ð $ð $ñ
ô 
ð 	
ð €L����OØ€Lr&   rt   c                 ó|   — dd l }t          j        dk    r'd|j        j        j        j        | j                 dz   z  S dS )Nr   rU   r—   r   )Útorchrr   rs   Ú_CÚ_dynamoÚ
eval_frameÚpy_opcode_cachesr6   )rt   rÚ  s     r$   r?  r?  û  sA   € Ø€L€L€Lå
Ô˜7Ò"Ð"Ø�E”HÔ$Ô/Ô@ÀÄÔMÐPQÑQÑRÐRØˆ1r&   c           	      ó’   — d}| D ]A}|j         |k    r"t          d|j        › d|j         › d|› �¦  «        ‚|t          |¦  «        z  }ŒBd S )Nr   ro  z has offset z, expected )r:   r}   r7   r?  ©r9  r:   rt   s      r$   Úcheck_offsetsrá    sv   € Ø€FØð )ð )ˆØŒ;˜&Ò Ð Ý ØX˜tœ{ÐXÐX¸¼ÐXÐXÐPVÐXÐXñô ð ð 	Õ" 4Ñ(Ô(Ñ(ˆˆð)ð )r&   c                 óF   — d}| D ]}||_         |t          |¦  «        z  }Œd S )Nr   )r:   r?  rà  s      r$   r`  r`    s<   € Ø€FØð )ð )ˆØˆŒàÕ" 4Ñ(Ô(Ñ(ˆˆð)ð )r&   Úargsc                  ó  — t          t          t          t          | ¦  «        ¦  «        ¦  «        }d„ |gt	          | ¦  «        z   d„ t          | d         | d         ¦  «        D ¦   «         gz   D ¦   «         }dd                     |¦  «        z   S )Nc                 óL   — g | ]!}d                       d„ |D ¦   «         ¦  «        ‘Œ"S )ú c              3   ó   K  — | ]}|d ›V — Œ	dS )Ú03Nr4   )r�   Úxs     r$   ú	<genexpr>z)debug_bytes.<locals>.<listcomp>.<genexpr>  s&   è è € Ð(Ð(˜q�A��Ð(Ð(Ð(Ð(Ð(Ð(r&   )Újoin)r�   r8   s     r$   r�   zdebug_bytes.<locals>.<listcomp>  sC   € ð ð ð àð 	�ŠÐ(Ð( CÐ(Ñ(Ô(Ñ(Ô(ðð ð r&   c                 ó:   — g | ]\  }}t          ||k    ¦  «        ‘ŒS r4   )r0   )r�   Úar  s      r$   r�   zdebug_bytes.<locals>.<listcomp>  s&   € Ð<Ð<Ð<™D˜A˜q�C��Q’‰KŒKÐ<Ð<Ð<r&   r‘   éþÿÿÿzbytes mismatch
ú
)r™   rû   Úmapr"  rª   Úziprë  )rã  ÚindexÚresults      r$   Údebug_bytesrô    s‘   € Ý•#•c�#˜t‘n”nÑ%Ô%Ñ&Ô&€Eðð à�7Ý
ˆt‰*Œ*ñà<Ð<¥C¨¨R¬°$°r´(Ñ$;Ô$;Ð<Ñ<Ô<Ð
=ñ>ðñ ô €Fð  §	¢	¨&Ñ 1Ô 1Ñ1Ð1r&   c                 ó    — t          | d„ d¬¦  «        \  }}| j        |j        k    r't          t          | j        |j        ¦  «        ¦  «        ‚dS )z<Make sure our assembler produces same bytes as we start withc                 ó   — d S rA   r4   )ré  Úys     r$   r{  zdebug_checks.<locals>.<lambda>#  s   € °t€ r&   T)ÚsafeN)Útransform_code_objectÚco_coder}   rô  )r@  ÚdoderE  s      r$   Údebug_checksrü  !  sQ   € å# DÐ*;Ð*;À$ÐGÑGÔG�G€Dˆ!Ø„|�t”|Ò#Ð#Ý�[¨¬°t´|ÑDÔDÑEÔEÐEð $Ð#r&   Úcode_optionsc                 óš   — t          | d         ¦  «        D ]\  }}||u r|c S Œ| dxx         |fz  cc<   t          | d         ¦  «        dz
  S )NÚ	co_constsr   )r>  r"  )rý  rx   rO   Úvs       r$   Úget_const_indexr  3  sq   € Ý˜, {Ô3Ñ4Ô4ð ð ‰ˆˆ1ð
 �!ˆ8ˆ8ØˆHˆHˆHð à�ÐÐÔ # Ñ'ÐÐÑÝˆ|˜KÔ(Ñ)Ô)¨AÑ-Ð-r&   Úvarname_from_oparg.c           
      óÊ  ‡ ‡‡	‡
‡‡‡— d„ t          ‰d         ¦  «        D ¦   «         Šdt          dt          fˆˆfd„}t          j        dk     rY|�t          d¦  «        ‚d„ t          ‰d	         ¦  «        D ¦   «         Šd
„ t          ‰d         ‰d         z   ¦  «        D ¦   «         Š
n‰t          |¦  «        st          d¦  «        ‚i Š	t          j        ¦   «         D ]$}	  ||¦  «        }|‰	|<   Œ# t          $ r Y  nw xY wˆ	fd„‰d	         D ¦   «         Šˆ	fd„‰d         ‰d         z   D ¦   «         Š
t          t          ‰ ¦  «        ¦  «        D �]Šdt          fˆˆ fd„}‰ ‰         j        dk    rº‰ ‰         j        t          u rt          d¦  «        ‚t          j        dk    re‰ ‰         j        €t          d¦  «        ‚ |‰ ‰         j        ¦  «        dz  t#          t          ‰ ‰         j        ¦  «        dz  z   ‰ ‰         _        Œº |‰ ‰         j        ¦  «        ‰ ‰         _        ŒÜ‰ ‰         j        dk    r¼‰ ‰         j        t          u rt          d¦  «        ‚t          j        dk    rf‰ ‰         j        €t          d¦  «        ‚ |‰ ‰         j        ¦  «        dz  t#          t          ‰ ‰         j        ¦  «        dz  z   ‰ ‰         _        �Œ† |‰ ‰         j        ¦  «        ‰ ‰         _        �Œ©‰ ‰         j        dk    rŒ‰ ‰         j        €t          d¦  «        ‚‰ ‰         j        t          u rt          d¦  «        ‚ |‰ ‰         j        ¦  «        dz  t#          t          ‰ ‰         j        ¦  «        dz  z   dz   ‰ ‰         _        �ŒF‰ ‰         j        t$          v �r't          j        dk     rt          d‰ ‰         j        › d�¦  «        ‚t'          ‰ ‰         j        t(          ¦  «        s8t          d‰ ‰         j        › d t+          ‰ ‰         j        ¦  «        › �¦  «        ‚t          ‰ ‰         j        ¦  «        dk    r8t          d‰ ‰         j        › d!t          ‰ ‰         j        ¦  «        › �¦  «        ‚t)          ˆ
ˆfd"„‰ ‰         j        D ¦   «         ¦  «        }|d#         d$z  |d         d%z  z   ‰ ‰         _        �Œ‚‰ ‰         j        t.          v ri |¦   «         r]t          j        dk    r/‰ ‰         j        ‰vr ‰
‰ ‰         j                 ‰ ‰         _        �Œß‰‰ ‰         j                 ‰ ‰         _        �Œÿ‰ ‰         j        t0          v rZ |¦   «         rN |‰ ‰         j        ¦  «        }t          j        d&k    r‰ ‰         j        d'k    r
|dz  }|dz  }|‰ ‰         _        �Œm‰ ‰         j        t2          v r* |¦   «         r‰
‰ ‰         j                 ‰ ‰         _        �Œ«‰ ‰         j        t4          v rX‰ ‰         j        €Kt7          ‰‰ ‰         j        ¦  «        }|d#k     rt          d(‰ ‰         j        › �¦  «        ‚|‰ ‰         _        �Œd S ))Nc                 ó   — i | ]\  }}||“Œ	S r4   r4   ©r�   rŸ   r^   s      r$   rN  zfix_vars.<locals>.<dictcomp>E  s   € ÐLÐLÐL™9˜3 ˆT�3ÐLÐLÐLr&   Úco_namesr^   r   c           	      ó<  •— 	 ‰|          }n�# t           $ rƒ t          ‰¦  «        x}‰| <   g ‰d         ¢| ‘R ‰d<   t          ‰d         ¦  «        t          ‰¦  «        k    r6t          dt          ‰d         ¦  «        › dt          ‰¦  «        › �¦  «        d ‚Y nw xY w|S )Nr  zco_names length z" does not match names dict length )ÚKeyErrorr"  r}   )r^   rŸ   rý  Únamess     €€r$   Úget_name_indexz fix_vars.<locals>.get_name_indexG  sÓ   ø€ ð
	Ø˜”+ˆCˆCøÝð 	ð 	ð 	å # E¡
¤
Ð*ˆC�%˜‘+Ø'H¨°jÔ)AÐ'HÀ4Ð'HÐ'HˆL˜Ñ$Ý�< 
Ô+Ñ,Ô,µ°E±
´
Ò:Ð:Ý$ð<¥s¨<¸
Ô+CÑ'DÔ'Dð <ð <Ý/2°5©z¬zð<ð <ñô ð ðð ;Ð:ð		øøøð ˆ
s   ƒ ŒB
BÂBrU   z3varname_from_oparg should be None for Python < 3.11c                 ó   — i | ]\  }}||“Œ	S r4   r4   r  s      r$   rN  zfix_vars.<locals>.<dictcomp>X  s   € ÐVÐVÐV¡) # t�D˜#ÐVÐVÐVr&   rÍ  c                 ó   — i | ]\  }}||“Œ	S r4   r4   r  s      r$   rN  zfix_vars.<locals>.<dictcomp>Y  s.   € ð 
ð 
ð 
á��Tð �#ð
ð 
ð 
r&   rË  rÌ  z4varname_from_oparg must be callable for Python 3.11+c                 ó"   •— i | ]}|‰|         “ŒS r4   r4   ©r�   r^   Úallnamess     €r$   rN  zfix_vars.<locals>.<dictcomp>i  s   ø€ ÐQÐQÐQ¨T�D˜( 4œ.ÐQÐQÐQr&   c                 ó"   •— i | ]}|‰|         “ŒS r4   r4   r  s     €r$   rN  zfix_vars.<locals>.<dictcomp>j  s/   ø€ ð 
ð 
ð 
àð �(˜4”.ð
ð 
ð 
r&   c                  ó,   •— ‰‰          j         t          uS rA   )r9   rZ   )rO   r9  s   €€r$   Úshould_compute_argz$fix_vars.<locals>.should_compute_argp  s   ø€ à ”?Ô)µÐ=Ð=r&   ra   z,LOAD_GLOBAL instruction must have argval setz9LOAD_GLOBAL instruction must have arg set in Python 3.11+r   r—   r`   z*LOAD_ATTR instruction must have argval setr\   z7LOAD_ATTR instruction must have arg set in Python 3.12+rb   z-LOAD_SUPER_ATTR instruction must have arg setz0LOAD_SUPER_ATTR instruction must have argval setrL   zfused instruction z requires Python 3.13+z argval must be a tuple, got z  argval must have length 2, got c              3   ó@   •K  — | ]}|‰v r‰|         n‰|         V — Œd S rA   r4   )r�   r^   Ú	freenamesÚvarnamess     €€r$   rê  zfix_vars.<locals>.<genexpr>ª  sM   øè è € ð ð àð #'¨(Ð"2Ð"2�˜”�¸	À$¼ðð ð ð ð ð r&   r   r’   é   )rM   r  ÚIMPORT_NAMEz"failed to find constant index for )r>  r2   r0   rr   rs   r}   ÚcallablerÂ  ÚcountÚ
IndexErrorr™   r"  r1   r7   r9   rZ   r8   r	   r¶  r*   rr  r«   r6   Ú	HAS_LOCALÚHAS_NAMEÚHAS_FREEÚ	HAS_CONSTr  )r9  rý  r  r
  rŸ   r^   r  Ú	arg_tupler8   r  r  rO   r	  r  s   ``       @@@@@r$   Úfix_varsr   ?  sd  øøøøøøø€ ð MÐL­	°,¸zÔ2JÑ(KÔ(KÐLÑLÔL€Eð�Sð ¥Sð ð ð ð ð ð ð õ Ô˜'Ò!Ð!ØÐ)Ý Ð!VÑWÔWÐWØVÐV­y¸ÀmÔ9TÑ/UÔ/UÐVÑVÔVˆð
ð 
å&Ø˜]Ô+¨l¸=Ô.IÑIñô ð
ñ 
ô 
ˆ	ˆ	õ Ð*Ñ+Ô+ð 	YÝ Ð!WÑXÔXÐXØˆÝ”?Ñ$Ô$ð 	ð 	ˆCðØ)Ð)¨#Ñ.Ô.�Ø!$�˜‘�øÝð ð ð Ø��ðøøøàQÐQÐQÐQ°\À-Ô5PÐQÑQÔQˆð
ð 
ð 
ð 
à$ ]Ô3°lÀ=Ô6QÑQð
ñ 
ô 
ˆ	õ •3�|Ñ$Ô$Ñ%Ô%ð c*ñ c*ˆð	>¥Dð 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð ˜Œ?Ô! ]Ò2Ð2à˜AŒÔ%­Ð5Ð5Ý$Ð%SÑTÔTÐTÝÔ 7Ò*Ð*Ø ”?Ô&Ð.Ý(ØSñô ð ð (6 ~°lÀ1´oÔ6LÑ'MÔ'MÐQRÑ'RÝ�˜l¨1œoÔ1Ñ2Ô2°QÑ6ñ'�˜Q”Ô#Ð#ð '5 n°\À!´_Ô5KÑ&LÔ&L�˜Q”Ô#Ð#Ø˜!Œ_Ô# {Ò2Ð2à˜AŒÔ%­Ð5Ð5Ý$Ð%QÑRÔRÐRÝÔ 7Ò*Ð*Ø ”?Ô&Ð.Ý(ØQñô ð ð (6 ~°lÀ1´oÔ6LÑ'MÔ'MÐQRÑ'RÝ�˜l¨1œoÔ1Ñ2Ô2°QÑ6ñ'�˜Q”Ô#Ñ#ð '5 n°\À!´_Ô5KÑ&LÔ&L�˜Q”Ô#Ñ#Ø˜!Œ_Ô#Ð'8Ò8Ð8Ø˜AŒÔ"Ð*Ý$Ð%TÑUÔUÐUØ˜AŒÔ%­Ð5Ð5Ý$Ð%WÑXÔXÐXð  � ¨Q¤Ô 6Ñ7Ô7¸1Ñ<Ý�˜\¨!œ_Ô0Ñ1Ô1°AÑ5ñ7àñð ˜ŒOÔÑð
 ˜!Œ_Ô#¥{Ð2Ñ2ÝÔ 'Ò)Ð)Ý$ØW¨°a¬Ô)?ÐWÐWÐWñô ð õ ˜l¨1œoÔ4µeÑ<Ô<ð Ý$ð:¨°a¬Ô)?ð :ð :Ý ¨Q¤Ô 6Ñ7Ô7ð:ð :ñô ð õ �< ”?Ô)Ñ*Ô*¨aÒ/Ð/Ý$ðC¨°a¬Ô)?ð Cð CÝ%(¨°a¬Ô)?Ñ%@Ô%@ðCð Cñô ð õ ð ð ð ð ð à(¨œOÔ2ðñ ô ñ ô ˆIð $-¨Q¤<°1Ñ#4¸À1¼ÈÑ9JÑ"KˆL˜ŒOÔÑØ˜!Œ_Ô#¥yÐ0Ð0Ø!Ð!Ñ#Ô#ð KåÔ$¨Ò/Ð/Ø$ QœÔ.°hÐ>Ð>ð +4°LÀ´OÔ4JÔ*K�L ”OÔ'Ñ'à*2°<À´?Ô3IÔ*J�L ”OÔ'ùØ˜!Œ_Ô#¥xÐ/Ð/Ø!Ð!Ñ#Ô#ð 	*Ø$�n \°!¤_Ô%;Ñ<Ô<�åÔ$¨Ò/Ð/Ø$ QœÔ.°-Ò?Ð?à˜A‘I�Cà˜4‘K�CØ&)�˜Q”Ô#ùØ˜!Œ_Ô#¥xÐ/Ð/Ø!Ð!Ñ#Ô#ð HØ&/°¸Q´Ô0FÔ&G�˜Q”Ô#ùØ˜!Œ_Ô#¥yÐ0Ð0ð ˜AŒÔ"Ð*å% l°LÀ´OÔ4JÑKÔK�Ø˜’7�7Ý(ØU¸\È!¼_Ô=SÐUÐUñô ð ð '*�˜Q”Ô#ùðGc*ð c*s   ÃC,Ã,
C:Ã9C:c                 ó¼   — | D ]X}|j         t          urH|j        t          v s*|j        t          v s|j        t
          v s|j        t          v r|j        dvrd |_        ŒYd S )N)ra   r`   rb   )	r9   rZ   r6   r  r  r  r  r7   r8   )r9  rt   s     r$   Úclear_instruction_argsr"  Ô  st   € ð ð ð ˆàŒK�|Ð+Ð+à”�yÐ(Ð(Ø”;¥(Ð*Ð*Ø”;¥(Ð*Ð*Ø”;¥)Ð+Ð+à”Ð#RÐRÐRàˆDŒHøðð r&   c                  óz  — dg} |                       d¦  «         |                      g d¢¦  «         t          j        dk    r|                       d¦  «         |                       d¦  «         |                       d¦  «         t          j        dk    r|                       d¦  «         |                      d	d
g¦  «         | S )NÚco_argcountÚco_posonlyargcount)
Úco_kwonlyargcountÚ
co_nlocalsÚco_stacksizeÚco_flagsrú  rÿ  r  rÍ  Úco_filenameÚco_namerU   Úco_qualnameÚco_firstlinenoÚco_linetableÚco_exceptiontablerÌ  rË  )rµ   r¶   rr   rs   )rq  s    r$   Úget_code_keysr0  å  sÓ   € ð
 ˆ?€DØ‡K‚KÐ$Ñ%Ô%Ð%Ø‡K‚Kð	
ð 	
ð 	
ñô ð õ Ô˜7Ò"Ð"Ø�Š�MÑ"Ô"Ð"Ø‡K‚KÐ Ñ!Ô!Ð!Ø‡K‚K�ÑÔÐÝ
Ô˜7Ò"Ð"à�ŠÐ'Ñ(Ô(Ð(Ø‡K‚KàØð	
ñô ð ð €Kr&   Útransformationsr   rø  c                 ó\  ‡ — t          ¦   «         }ˆ fd„|D ¦   «         }t          |d         ¦  «        |d         k    r.t          dt          |d         ¦  «        › d|d         › �¦  «        ‚t          ‰ |¦  «        }t	          |¦  «          |||¦  «        }t          |||¦  «        \  }}||fS )Nc                 ó2   •— i | ]}|t          ‰|¦  «        “ŒS r4   )Úgetattr)r�   Úkr@  s     €r$   rN  z)transform_code_object.<locals>.<dictcomp>  s%   ø€ Ð6Ð6Ð6¨A�A•w˜t QÑ'Ô'Ð6Ð6Ð6r&   rÍ  r'  zco_varnames length z does not match co_nlocals )r0  r"  r}   Úcleaned_instructionsr   Úclean_and_assemble_instructions)	r@  r1  rø  rq  rý  r9  Útracer_outputrE  Úbytecodes	   `        r$   rù  rù  
  sÖ   ø€ õ ‰?Œ?€DØ6Ð6Ð6Ð6°Ð6Ñ6Ô6€LÝ
ˆ<˜Ô&Ñ'Ô'¨<¸Ô+EÒEÐEÝð=¥# l°=Ô&AÑ"BÔ"Bð =ð =Ø ,¨\Ô :ð=ð =ñ
ô 
ð 	
õ
 (¨¨dÑ3Ô3€Lå˜Ñ%Ô%Ð%à#�O L°,Ñ?Ô?€MÝ1°,ÀÀlÑSÔS�K€A€xØ�]Ð"Ð"r&   rq  c           	      óž  ‡— t          | ¦  «         t          | ¦  «         t          ‰d         ¦  «        ‰d<   d }t          j        dk    r!t          j        ˆfd„|D ¦   «         Ž }|j        }t          | ‰|¬¦  «         d}|r<t          | ¦  «         t          | ¦  «         t          t          | ¦  «        ¦  «        }|°<t          | ¦  «         t          | ‰d         ¦  «        \  }}|‰d<   |‰d	<   t          | ¦  «        ‰d
<   t!          |¦  «        dhz
  t!          ‰                     ¦   «         ¦  «        dhz
  k    rIt%          dt!          |¦  «        dhz
  › dt!          ‰                     ¦   «         ¦  «        dhz
  › �¦  «        ‚t          j        dk    rt'          t)          | ¦  «        ¦  «        ‰d<   | t          j        ˆfd„|D ¦   «         Ž fS )NrÍ  r'  rU   c                 ó    •— g | ]
}‰|         ‘ŒS r4   r4   ©r�   r5  rý  s     €r$   r�   z3clean_and_assemble_instructions.<locals>.<listcomp>-  s   ø€ Ð#BÐ#BÐ#B¸ L°¤OÐ#BÐ#BÐ#Br&   )r  Tr-  r.  rú  r(  r%  z%code_options keys mismatch: expected z, got r/  c                 ó    •— g | ]
}‰|         ‘ŒS r4   r4   r<  s     €r$   r�   z3clean_and_assemble_instructions.<locals>.<listcomp>J  s   ø€ Ð)HÐ)HÐ)H¸a¨,°q¬/Ð)HÐ)HÐ)Hr&   )rÆ  r”  r"  rr   rs   ÚtypesÚCodeTypeÚ_varname_from_opargr   r`  rd  r1   rØ  r   rF  r   r^  rq  r}   r8  r†  )r9  rq  rý  r  Útmp_codeÚdirtyr9  rA  s     `     r$   r7  r7  "  s!  ø€ õ ,¨LÑ9Ô9Ð9å$ \Ñ2Ô2Ð2å!$ \°-Ô%@Ñ!AÔ!A€L�ÑØÐÝ
Ô˜7Ò"Ð"å”>Ð#BÐ#BÐ#BÐ#B¸TÐ#BÑ#BÔ#BÐCˆØ%Ô9ÐÝˆ\˜<Ð<NÐOÑOÔOÐOà€EØ
ð 6Ý�|Ñ$Ô$Ð$Ý˜<Ñ(Ô(Ð(åÕ& |Ñ4Ô4Ñ5Ô5ˆð	 ð 6õ ˜<Ñ(Ô(Ð(Ý ¨lÐ;KÔ.LÑMÔMÑ€Hˆfà#)€L�Ñ Ø&€L�ÑÝ#5°lÑ#CÔ#C€L�Ñ Ý
ˆ4�y„yÐ(Ð)Ñ)­S°×1BÒ1BÑ1DÔ1DÑ-EÔ-EØðIñ .ò ð õ ðGµC¸±I´IÐAUÐ@VÑ4Vð Gð GÝ�|×(Ò(Ñ*Ô*Ñ+Ô+Ð/CÐ.DÑDðGð Gñ
ô 
ð 	
õ Ô˜7Ò"Ð"Ý,DÝ# LÑ1Ô1ñ-
ô -
ˆÐ(Ñ)ð �œÐ)HÐ)HÐ)HÐ)HÀ4Ð)HÑ)HÔ)HÐIÐIÐIr&   Úconstsc                 óJ   — | D ]}|j         dk    r||j                 |_        Œ d S )NÚKW_NAMES)r7   r8   r9   )r9  rC  rt   s      r$   Úpopulate_kw_names_argvalrF  M  s7   € Øð +ð +ˆØŒ;˜*Ò$Ð$Ø  ¤Ô*ˆDŒKøð+ð +r&   c                 ó@   — t          | |¦  «        }t          |¦  «        S rA   )Ú_cached_cleaned_instructionsÚ_clone_instructions©r@  rø  r9  s      r$   r6  r6  U  s!   € Ý/°°dÑ;Ô;€Lõ ˜|Ñ,Ô,Ð,r&   c                 ó(  — d„ | D ¦   «         }t          t          | |¦  «        ¦  «        }d |d <   |D ]`}||j                 |_        |j        x}rCt	          ||j                 ||j                 ||j                 |j        |j        ¦  «        |_        Œa|S )Nc                 ó®   — g | ]R}t          |j        |j        |j        |j        |j        |j        |j        |j        |j	        |j
        |j        ¦  «        ‘ŒSS r4   )r   r6   r7   r8   r9   r:   r;   r<   r=   r   r>   r?   rŽ   s     r$   r�   z'_clone_instructions.<locals>.<listcomp>`  sl   € ð ð ð ð õ 	ØŒHØŒHØŒEØŒHØŒHØŒMØÔØŒKØŒHØŒOØŒIñ	
ô 	
ðð ð r&   )	Údictrñ  r   r>   r   r   r   r   r   )r9  ÚcopiedÚremaprO   r6  s        r$   rI  rI  ]  s°   € ðð ð ðñ ô €Fõ" •�\ 6Ñ*Ô*Ñ+Ô+€Eà€Eˆ$�Kàð 	ð 	ˆØ˜œ”?ˆŒØ”OÐ#ˆ5ð 	Ý4Ø�e”kÔ"Ø�e”iÔ Ø�e”lÔ#Ø”Ø”ñô ˆAŒOøð €Mr&   c                 ó(  — t          t          t          t          j        | ¦  «        ¦  «        ¦  «        }t          |¦  «         t          |¦  «         t          j        dk    r*t          || j
        ¦  «         t          | j        |¦  «         t          |¦  «         t          |¦  «         |s·t          j        dk     rt          |¦  «         t          j        dk     rt!          | |¦  «         t          j        dk    rMt#          |¦  «         t          j        dk    rt%          |¦  «         t          j        dk    rt'          |¦  «         t(          j        rt-          |¦  «         t          j        dk    rt/          |¦  «         t1          |¦  «         |S )NrU   r\   rL   )rª   rð  rS   ri   Úget_instructionsr   rá  rr   rs   rF  rÿ  ru  r/  rR  r—  rž  rÑ  r©  r­  r»  r   Ú&debug_force_graph_break_on_leaf_returnrÀ  r`  rd  rJ  s      r$   rH  rH  ‚  sq  € õ �Õ/µÔ1EÀdÑ1KÔ1KÑLÔLÑMÔM€Lå˜Ñ%Ô%Ð%Ý�,ÑÔÐÝ
Ô˜7Ò"Ð"Ý  ¨t¬~Ñ>Ô>Ð>Ý" 4Ô#9¸<ÑHÔHÐHÝ�\Ñ"Ô"Ð"Ý˜Ñ%Ô%Ð%Øð ?ÝÔ˜gÒ%Ð%Ý# LÑ1Ô1Ð1ÝÔ˜gÒ%Ð%Ý˜4 Ñ.Ô.Ð.ÝÔ˜wÒ&Ð&Ý Ñ-Ô-Ð-ÝÔ 7Ò*Ð*Ý)¨,Ñ7Ô7Ð7ÝÔ 7Ò*Ð*Ý'¨Ñ5Ô5Ð5ÝÔ8ð 	?Ý0°Ñ>Ô>Ð>Ý
Ô˜7Ò"Ð"Ý�|Ñ$Ô$Ð$Ý˜<Ñ(Ô(Ð(ØÐr&   Ú	with_uuidc                 ó–   — | › dt          t          ¦  «        › �}|r-|dt          j        ¦   «         › �                     dd¦  «        z  }|S )NrE  ú-)r&  Ú_unique_id_counterÚuuidÚuuid4rW  )r^   rS  Úrets      r$   Ú	unique_idrZ  ¥  sT   € ØÐ
.Ð
.•DÕ+Ñ,Ô,Ð
.Ð
.€CØð 4ØÐ!•4”:‘<”<Ð!Ð!×)Ò)¨#¨sÑ3Ô3Ñ3ˆØ€Jr&   c                 ó"   — d}| j         |z  dk    S )Né    r   )r)  )r@  Úco_generators     r$   Úis_generatorr^  ¬  s   € Ø€LØŒM˜LÑ(¨AÒ-Ð-r&   ÚfnÚvarname_mapÚnoreturnÚnoprefixc                 óæ  — t          | j        ¦  «        }t          |¦  «         |r/t          |¦  «        D ]\  }}|j        dk    r||dz   d…         } nŒ |D ]-}d|_        d|_        |r|j        |v r||j                 |_        Œ.|�rét          j	        dk    rg }|D ]x}|j        dk    rVt          j        d         |_        d|_        |                     |¦  «         |                     t          d¦  «        ¦  «         Œc|                     |¦  «         Œy|}g }|D ]"}|j        dk    r|                     |¦  «         Œ#t          |¦  «        dk    r&|d         |d	         u r|                     d	¦  «         nút          |¦  «        dk    rç|d	         |d	         u r_d
|d	         _        t          j        d
         |d	         _        d|d	         _        t$          |d	         _        |                     d	¦  «         n"|                     t          d
¦  «        ¦  «         |D ]S}t'          |d	         ¦  «        }	|	j        |_        |	j        |_        |	j        |_        |	j        |_        |	j        |_        ŒT|S )aŸ  Generates bytecode from a template function `fn` for use in
    dynamo bytecode generation.

    For example, we can generate Python-version-independent bytecode
    for looping through a dictionary and copying the values to a new dictionary.

    def template(d1, d2):
        for k, v in d1.items():
            d2[k] = v


    or a try block:

    def template():
        try:
            dummy1
        except:
            dummy2
            raise
        dummy3

    Args:
        fn: a function template to generate bytecode from
        varname_map: a mapping of `fn`'s varnames to new names. This
            map will be applied to the generated bytecode's varnames.
            For example, local variables in `fn` can be replaced with
            new names that are generated by `OutputGraph.new_var`.
        noreturn: remove all RETURN_* bytecodes and replace them with a jump
            to the end of the bytecode. NOTE: any items pushed to the stack
            for return WILL remain on the stack! Append a POP_TOP if you don't want
            that item to be present.
        noprefix: remove prefix bytecodes (all bytecode before the first RESUME, inclusive).
    ÚRESUMEr   Nr\   ÚRETURN_CONSTr{   ÚRETURN_VALUEr   r‘   r¾  )r6  Ú__code__r"  r>  r7   r;   r=   r9   rr   rs   ri   rj   r6   rµ   rl   r"  r  r8   rZ   ru   r   )
r_  r`  ra  rb  r¥   rO   rt   r™  ÚreturnsÚ	jump_insts
             r$   Úbytecode_from_templaterj  ±  sœ  € õN ! ¤Ñ-Ô-€EÝ˜5Ñ!Ô!Ð!àð Ý  Ñ'Ô'ð 	ð 	‰GˆAˆtØŒ{˜hÒ&Ð&Ø˜a !™e˜g˜gœ�Ø�ð 'ð ð 3ð 3ˆð  ˆÔØˆŒØð 	3˜4œ;¨+Ð5Ð5Ø% d¤kÔ2ˆDŒKøàñ -/ÝÔ˜wÒ&Ð&àˆIØð +ð +�Ø”; .Ò0Ð0Ý"%¤)¨LÔ"9�D”KØ".�D”KØ×$Ò$ TÑ*Ô*Ð*à×$Ò$Õ%7¸Ñ%GÔ%GÑHÔHÐHÐHà×$Ò$ TÑ*Ô*Ð*Ð*ØˆEð ˆØð 	%ð 	%ˆDØŒ{˜nÒ,Ð,Ø—’˜tÑ$Ô$Ð$øåˆw‰<Œ<˜1ÒÐ ¨¤¨u°R¬yÐ!8Ð!8à�IŠI�b‰MŒMˆMˆMÝ�‰\Œ\˜AÒÐð �RŒy˜G BœKÐ'Ð'Ø#(��b”	Ô Ý#&¤9¨UÔ#3��b”	Ô Ø $��b”	”Ý#/��b”	Ô Ø—’˜B‘”��à—’Õ/°Ñ6Ô6Ñ7Ô7Ð7ð  ð /ð /�õ 1°°r´Ñ;Ô;�	Ø'Ô.�”Ø'Ô.�”Ø$œ=�”Ø'Ô.�”Ø'Ô.�”�à€Lr&   )T)FrA   )NTT)„rK   rs  Údataclassesri   Ú	functoolsrÂ  rr   r>  rW  Úcollections.abcr   r   r   r   r   Útypingr   r	   r
   r   Ú r   Úbytecode_analysisr   r   r   r   Úutilsr   Úoutput_graphr   Ú	dataclassr   r   rs   rS   rZ   r2   r1   rd   r0   rl   ru   rw   r~   rª   r„   r‰   r›   r¬   r®   r¹   rÀ   rÃ   rÆ   rÊ   rÓ   rÙ   rã   rå   rè   rë   rÒ   rñ   rr  r	  r  r  r  r   r#  r'  r*  r5  r2  r8  rF  rM  rJ  rR  r^  rP  rY  rZ  r\  rd  ru  r†  r‰  r�  r”  r—  r›  rž  r©  r­  r¶  r»  rÀ  rÆ  r?  rÑ  rØ  r?  rá  r`  rô  rü  Úhaslocalr  Úhasnamer  Úhasfreer  Úhasconstr  r  r   r"  Ú	lru_cacher0  rù  r7  rF  r6  rI  rH  r  rV  rZ  r^  rj  r4   r&   r$   ú<module>ry     s2  ððð ð €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð $Ð #Ð #Ð #Ð #Ð #ð ð 1Ø0Ð0Ð0Ð0Ð0Ð0ð €Ô˜TÐ"Ñ"Ô"ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ #Ô"ð
ð6 €Ô˜TÐ"Ñ"Ô"ð)ð )ð )ð )ð )ñ )ô )ñ #Ô"ð)ð> Ô�wÒÐð

˜sœð 

°;ð 

ð 

ð 

ð 

ð 

ð 	Ô˜Ò Ð ð

˜sœð 

°;ð 

ð 

ð 

ð 

ð 

ð

˜sœð 

°;ð 

ð 

ð 

ð 

ðð ð ð ð ñ ô ð ð
 Ô�wÒÐðG˜sð G tð Gð Gð Gð Gð Gð 	Ô˜Ò Ð ð%˜sð % tð %ð %ð %ð %ð %ð
˜sð  tð ð ð ð ð Ø%Ø!%ð'ð 'ð 'Ø
ð'ð 
ˆt‰ð'ð �$‰Jð	'ð
 ˜$Ñð'ð ð'ð 'ð 'ð 'ðV3 ð 3°ð 3ð 3ð 3ð 3ð
>˜[ð >¨Tð >ð >ð >ð >ð	8ð 	8˜3ð 	8¨ð 	8¸ð 	8ð 	8ð 	8ð 	8ð˜4 Ô,ð ð ð ð ð$)˜ð )ð )ð )ð )ð0�Cð 0˜D Ô-ð 0ð 0ð 0ð 0ð.=Ø  kÔ!2Ñ2ð=à	ˆ+Ôð=ð =ð =ð =ð@!Ø  kÔ!2Ñ2ð!à	ˆ+Ôð!ð !ð !ð !ðH4< ð 4<°ð 4<¸¸kÔ9Jð 4<ð 4<ð 4<ð 4<ðp GLðIð IØðIØ!%ðIØ?CðIà	ˆ+ÔðIð Ið Ið IðD:˜cð : d¨;Ô&7ð :ð :ð :ð :ð:˜Sð : [ð :ð :ð :ð :ð5˜kð 5¨kð 5ð 5ð 5ð 5ð
+�3ð +˜4 Ô,ð +ð +ð +ð +ð\,> Cð ,>¨cð ,>°cð ,>ð ,>ð ,>ð ,>ð` 7<ð
ð 
Ø�‰:ð
Ø $™Jð
Ø/3ð
à	ˆ+Ôð
ð 
ð 
ð 
ð>�3ð ˜4 Ô,ð ð ð ð ð( ð ¨¨kÔ):ð ð ð ð ð˜cð  d¨;Ô&7ð ð ð ð ð3˜kð 3ð 3ð 3ð 3ð4˜#ð 4 +ð 4ð 4ð 4ð 4ð&"Øð&"à
ˆ4�Œ9�h  S˜z¨4Ð/Ô0°(¸C¸5À$¸;Ô2GÐGÔHð&"ð &"ð &"ð &"ðR�Sð ˜T #œYð ð ð ð ð  Ô�wÒÐð>!Øð>!à	ˆt�CŒy˜( C¤M°DÑ$8¸#Ð#>ÀÐ#DÔEÐEÔ	Fð>!ð >!ð >!ð >!ðB €Ô˜TÐ"Ñ"Ô"ðð ð ð ð ñ ô ñ #Ô"ðð Sð ¨T°#¬Yð ð ð ð ð&
¨h°s¬mð 
Àð 
ð 
ð 
ð 
ð˜tÐ$7Ô8ð ¸Tð ð ð ð ð$ %ð ¨DÐ1DÔ,Eð ð ð ð ð, $Ð':Ô";ð Àð ð ð ð ð$#&˜4 Ô,ð #&¸3ð #&À5ÈÐPUÈÔCVð #&ð #&ð #&ð #&ðL	Ø˜˜kÐ)Ô*ð	Ø47ð	à�4Ñð	ð 	ð 	ð 	ðP 8¨KÔ#8ð P¸Tð Pð Pð Pð Pð ˆS�”ÑÔ€
ð
 [ð 
°Tð 
ð 
ð 
ð 
ð ¨¨kÔ):ð Àð Èð ð ð ð ð>1 T¨+Ô%6ð >1¸4ð >1ð >1ð >1ð >1ðB0Øð0Ø(,¨[Ô(9ð0à	ð0ð 0ð 0ð 0ðf[Ø�{Ô#ð[à	Ð
Ôð[ð [ð [ð [ð| Ø	Ð$Ô	%ð Ø04°[À#Ð5EÔ0Fð à	ð ð  ð  ð  ð.=°4¸Ô3Dð =Èð =ð =ð =ð =ð<&°4¸Ô3Dð &Èð &ð &ð &ð &ðRP d¨;Ô&7ð P¸Dð Pð Pð Pð Pð&Øð&Ø&*¨;Ô&7ð&à	ˆ+Ôð&ð &ð &ð &ð.¨$¨{Ô*;ð ÀÀ[Ô@Qð ð ð ð ð  d¨;Ô&7ð  ¸Dð  ð  ð  ð  ð> ¨D°Ô,=ð  À$ð  ð  ð  ð  ð0 6Ø)QØ9Ø7ð	ð €ð ¨$¨{Ô*;ð  Àð  ð  ð  ð  ð& °t¸KÔ7Hð  ÈTð  ð  ð  ð  ð ¸$¸{Ô:Kð  ÐPTð  ð  ð  ð  ð6&˜œð &°t¸KÔ7Hð &ÈTð &ð &ð &ð &ðR" D¨Ô$5ð "¸#ð "ð "ð "ð "ðJ˜;ð ¨3ð ð ð ð ð) ¨Ô 5ð )¸$ð )ð )ð )ð )ð) ¨+Ô!6ð )¸4ð )ð )ð )ð )ð	2�uð 	2 ð 	2ð 	2ð 	2ð 	2ðF�u”~ð F¨$ð Fð Fð Fð Fð ˆC�”ÑÔ€	Øˆ3ˆsŒ{ÑÔ€Øˆ3ˆsŒ{ÑÔ€ØˆC�”ÑÔ€	ð	. $ s¨C x¤.ð 	.°sð 	.¸sð 	.ð 	.ð 	.ð 	.ð 59ðR*ð R*Ø�{Ô#ðR*à�s˜C�x”.ðR*ð !  c Ô*¨TÑ1ðR*ð 
ð	R*ð R*ð R*ð R*ðj¨¨kÔ):ð ¸tð ð ð ð ð" Ôð!�t˜C”yð !ð !ð !ñ Ôð!ðR ð#ð #Ø
Œ.ð#àØ	ˆkÔ	˜D  c œNÐ+¨XÐ6JÔ-KÐKôð#ð
 ð#ð ˆ5Œ>˜8Ð$8Ô9Ð9Ô:ð#ð #ð #ð #ð0(JØ�{Ô#ð(JØ+/°¬9ð(JØDHÈÈcÈÄNð(Jà
ˆ4�Ô˜eœnÐ,Ô-ð(Jð (Jð (Jð (JðV+¨8°KÔ+@ð +È#ð +ÐRVð +ð +ð +ð +ð-ð -˜uœ~ð -°Tð -ÀdÈ;ÔFWð -ð -ð -ð -ð" h¨{Ô&;ð "ÀÀ[Ô@Qð "ð "ð "ð "ðJ Ôà',ðð Ø
Œ.ðØ $ðàˆkÔðð ð ñ Ôðð> %�Y”_Ñ&Ô&Ð ðð �Cð  Dð °Sð ð ð ð ð.�u”~ð .¨$ð .ð .ð .ð .ð -1ØØð	gð gØ��c�Ôðgà˜˜c˜Ô" TÑ)ðgð ðgð ð	gð
 
ˆ+Ôðgð gð gð gð gð gr&   