Ë
    ÃÓ^jî/ ã                   óú  — 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jD                  dk\  rdejB                  de!fd„Z#n4ejD                  dk\  rdejB                  de!fd„Z#ndejB                  de!fd„Z# G d„ d«      Z$ejD                  dk\  r	de%de&fd„Z'n ejD                  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›d2e&d0e&d3e&de-e!   fd4„Z4d/e(de-e!   fd5„Z5de%de!fd6„Z6d!e!de!fd7„Z7d*e(de-e!   fd8„Z8d9e%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;d@e(de-e!   fdA„Z<dBede-e!   fdC„Z=de!fdD„Z>d*e(de!fdE„Z?dFe(de@e-e(   e
e(e(gdf   e
e(gdf   f   fdG„ZAd*e(de-e(   fdH„ZBejD                  dk\  r$dFe(de@e-e(   e
ej†                  dz  e(gdf   f   fdI„ZD ej>                  d
¬«       G dJ„ dK«      «       ZEd*e(de-e(   fdL„ZFdMee(   de(fdN„ZGdOe-eE   ddfdP„ZHdQeIde-eE   fdR„ZJdOe-eE   deIfdS„ZKdTe-e!   dUe(de@eIeIf   fdV„ZLdWeMe(e!f   dXe(de!dz  fdY„ZNdTee!   ddfdZ„ZO ePej¢                  «      ZRd[e!ddfd\„ZSdTe-e!   d]e(de!fd^„ZTdTe-e!   ddfd_„ZUd`eIdTe-e!   ddfda„ZVdTe-e!   de-eE   fdb„ZWdOe-e    dceMe!e(f   ddfdd„ZXdTe-e!   ddfde„ZYdTe-e!   ddfdf„ZZdTe-e!   ddfdg„Z[dhe!die-e!   de-e!   fdj„Z\dTe-e!   de-e!   fdk„Z]dTe-e!   ddfdl„Z^dTe-e!   ddfdm„Z_dndodpdqdrœZ`dTe-e!   ddfds„ZadTe-e!   ddfdt„ZbdTe-e!   ddfdu„ZcdvejÈ                  dTe-e!   ddfdw„ZedTe-e!   de(fdx„Zfdye!de(fdz„ZgdTee!   ddfd{„ZhdTee!   ddfd|„Zid}eIde%fd~„ZjdvejÈ                  ddfd„Zk ePejØ                  «      Zm ePejÜ                  «      Zo ePejà                  «      Zq ePejä                  «      Zsd€eMe%ef   d%ede(fd�„Zt	 dœdTe-e!   d€eMe%ef   d‚e
dƒef   dz  ddfd„„ZudTe-e!   ddfd…„Zvejî                  de-e%   fd†„«       Zx	 d›dvejÈ                  d‡e
e-e!   eMe%ef   gedˆ   f   d‰e&de@ejÈ                  edˆ   f   fdŠ„ZydTe-e!   d‹e-e%   d€eMe%ef   de@e-e!   ejÈ                  f   fdŒ„ZzdTee!   d�eddfdŽ„Z{d›dvejÈ                  d‰e&de-e!   fd�„Z|dTee!   de-e!   fd�„Z}ejî                  	 d›dvejÈ                  d‰e&dee!   fd‘„«       Z~ ejþ                  «       Z€d›de%d’e&de%fd“„Z�dvejÈ                  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ƒy)ž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	y)ÚInstructionExnTabEntryÚInstructionÚstartÚendÚtargetÚdepthÚlastiÚreturnc                 óÞ   — d| j                   j                  «       › d| j                  j                  «       › d| j                  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    úp/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/bytecode_transformation.pyÚ__repr__zInstructionExnTabEntry.__repr__1   sl   € à+¨D¯J©J×,FÑ,FÓ,HÐ+Ið JØ—8‘8×+Ñ+Ó-Ð.ð /Ø—k‘k×1Ñ1Ó3Ð4ð 5Ø—Z‘Z�L ¨¯©¨°Að7ð	
ó    Úoc                 ó(  — t        |t        «      sy| j                  |j                  u xrh | j                  |j                  u xrN | j                  |j                  u xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S ©NF)Ú
isinstancer   r   r   r   r   r   )r#   r'   s     r$   Ú__eq__zInstructionExnTabEntry.__eq__9   s}   € Ü˜!Ô3Ô4Øà�J‰J˜!Ÿ'™'Ð!ò &Ø—‘˜AŸE™EÐ!ò&à—‘˜qŸx™xÐ'ò&ð —
‘
˜aŸg™gÑ%ò&ð —
‘
˜aŸg™gÑ%ð	
r&   N)
Ú__name__Ú
__module__Ú__qualname__Ú__annotations__ÚintÚboolÚstrr%   Úobjectr+   © r&   r$   r   r   )   s=   … àÓØ	ÓØÓØƒJØƒ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y)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ˆr&   Úotherc                 ó0   — t        | «      t        |«      k(  S rA   rB   ©r#   rE   s     r$   r+   zInstruction.__eq__Z   s   € Ü�$‹xœ2˜e›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   € Ø$ T§[¡[ M°¸4¿;¹;¸-ÀqÐIÐIr&   c                 óH   — |j                   | _         |j                  | _        y 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   s±   … á.àƒKØƒKØ	ˆt‰ƒOØƒKØ€FˆC�$‰JÓØ"€K��t‘Ó"Ø €N�DÓ à+/€Iˆx˜Ñ(Ó/à&*€FˆH�]Ñ#Ó*Ø37€MÐ)¨DÑ0Ó7Ø€GˆS�4‰ZÓð˜#ó ð%˜Fð % tó %ð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   óI   € ÜØ�H‰HØ�H‰HØ�E‰EØ�H‰HØ�H‰HØ�M‰MØ×ÑØ�K‰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        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  d «      S rA   )r   r6   r7   r8   r9   r:   r;   r<   rR   s    r$   rS   rS   ƒ   sE   € ÜØ�H‰HØ�H‰HØ�E‰EØ�H‰HØ�H‰HØ�M‰MØ×ÑØó	
ð 		
r&   c                   ó   — e Zd Zdefd„Zy)Ú_NotProvidedr   c                  ó   — y)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                  ó   — yr)   r4   rc   s    r$   rd   rd   ¡   s   € Ør&   )r8   r9   r   r8   r9   r   c                óü   — t        | «      r|�t        d«      ‚|€%d}n"|du|t        uz   |duz   }|dkD  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Øˆ;Ø‰Cà˜$ˆ 6´Ð#=Ñ>À&ÐPTÐBTÑUˆØ�Š7ÜØRóð ð €œz¨#¬sÔ3ÜÐ@ÓAÐAÜÜ�y‰y˜‰ t°¸VÈFôð r&   c                 óJ   — 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‰>¸o€DÜ˜d¨6Ô2Ð2r&   c                 ó   — | j                   dv S )N)rn   ro   )r7   rp   s    r$   Úis_jump_absoluterw   Õ   s   € Ø�=‰=Ð=Ð=Ð=r&   ÚvalÚcheckedc                 óR   — |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~   Ù   s/   € ñ Ü Ô$Ü Ð#3°C°5Ð!9Ó:Ð:Ü˜l°3Ô7Ð7r&   c                  ó>   — 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ô 	˜<Ð0AÔBÜ˜9Ó%ðð r&   c                  óX   — t         j                  dk\  rt        dd¬«      S t        d«      S )NrU   ÚCOPYr   ©r8   ÚDUP_TOPrq   r4   r&   r$   Úcreate_dup_topr‰   ÷   s(   € Ü
×Ñ˜7Ò"Ü! &¨aÔ0Ð0Ü˜iÓ(Ð(r&   Únc                 óà   — | dk  rg S t         j                  dk\  r&t        | dd«      D �cg c]  }t        d|¬«      ‘Œ c}S | dk  rt        dg d¢| d	z
     z   «      gS t        d
| ¬«      gS c c}w )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   éÿÿÿÿÚSWAPr‡   é   ÚROT_)ÚTWOÚTHREEÚFOURé   ÚROT_N)rr   rs   Úrangerl   )rŠ   rO   s     r$   Úcreate_rot_nr–   ý   s|   € ð 	ˆA‚vàˆ	ä
×Ñ˜7Ò"ô <AÀÀAÀr»?ÖK°aÔ" 6¨qÖ1ÒKÐKàˆA‚vÜ" 6Ò,DÀQÈÁUÑ,KÑ#KÓLÐMÐMÜ˜w¨AÔ.Ð/Ð/ùò	 Ls   ªA+Úinst_or_instsc                 óÚ  ‡— t        | t        «      r| gŠn)t        | t        «      st        dt	        | «      › �«      ‚| Šdt
        dt        fˆfd„}dt
        ddfˆfd„}t        j                  dk\  r;t        ‰d   j                  «      r |d«      s
 |d«       ‰S ‰t        d	«      gz   Š‰S t        j                  d
k\  r_t        ‰d   j                  «      r |d«      s
 |d«       ‰S ‰d   j                  dk(  r |d«      s
 |d«       ‰S t        d	«      g‰z   Š‰S t        j                  dk\  r9t        ‰d   j                  «      r |d«      s
 |d«       ‰S 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                 ój   •— ‰|    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>   ø€ Ø�‰:�>‰>Ð!Ü  ?°3°%Ð7KÐ!LÓMÐMØ�S‰z�~‰~ Ñ! QÑ&Ð&r&   Nc                 ór   •— ‰|    j                   €t        d| › d�«      ‚‰|    xj                   dz  c_         y rœ   rž   rŸ   s    €r$   Úset_inst_bitz#add_push_null.<locals>.set_inst_bit3  s8   ø€ Ø�‰:�>‰>Ð!Ü  ?°3°%Ð7KÐ!LÓ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 ?‰ä˜-¬Ô.Ü Ø;¼DÀÓ<OÐ;PÐQóð ð ˆð'œcð '¤dõ 'ð
œ#ð  $õ ô
 ×Ñ˜7Ò"ä˜E "™I×,Ñ,Ô-Ñ6FÀrÔ6Jñ ˜Ôð& €Lð# Ô/°Ó<Ð=Ñ=ˆEð" €Lô! 
×	Ñ	˜WÒ	$ô ˜E "™I×,Ñ,Ô-Ñ6FÀrÔ6JÙ˜Ôð €Lð �1‰X�_‰_ Ò-Ñ6FÀqÔ6IÙ˜ŒOð €Lô (¨Ó4Ð5¸Ñ=ˆEð €Lô 
×	Ñ	˜WÒ	$ä˜E !™HŸO™OÔ,Ñ5EÀaÔ5HÙ˜ŒOð €Lô (¨Ó4Ð5¸Ñ=ˆEØ€Lr&   c                 óü  — t        | t        «      r| g}n)t        | t        «      st        dt	        | «      › �«      ‚| }t
        j                  dk  r|S t
        j                  dk\  rdnd}||   j                  dk(  rM||   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   }|S 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   r�   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  s  € ô �-¤Ô-Ø$1 ?‰ä˜-¬Ô.Ü Ø;¼DÀÓ<OÐ;PÐQóð ð ˆä
×Ñ˜'Ò!Øˆä× Ñ  GÒ+‰"°€CØˆS�z×Ñ˜MÒ)Ø�‰:�>‰>Ð!Ü Ø! # Ð&JÐKóð ð �‰:�>‰>˜AÑ Ò"Ø�#‰J�NŠN˜aÑ�NØˆLä
×Ñ˜7Ò"ØÔ+¨KÓ8Ð9Ñ9ˆð €Lô $ KÓ0Ð1°EÑ9ˆà€Lr&   ÚnargsÚ	push_nullc                 óˆ  — t         j                  dk\  r¢g }|rQ|j                  t        d«      «       t         j                  dk\  r| dz   n| dz   }|j	                  t        |«      «       t         j                  dk  r|j                  t        d| ¬«      «       |j                  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Ô:ä #× 0Ñ 0°GÒ ;�5˜1’9ÀÈÁˆDØ�M‰Mœ, tÓ,Ô-Ü×Ñ˜gÒ%Ø�M‰MÔ,¨Y¸EÔBÔCØ�‰Ô(¨°UÔ;Ô<ØˆÜ˜°EÔ:Ð;Ð;r&   Ú
has_kwargsÚignore_314_kwargs_pushc                 óØ  — t         j                  dk\  rÁg }t         j                  dk\  r | s|s|j                  t        d«      «       d} |rc|j                  t        d«      «       t         j                  dk\  rt	        | «      dz   nt	        | «      dz   }|j                  t        |«      «       |j                  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Ô:ØˆJÙØ�M‰MÔ,¨[Ó9Ô:ô
 ×#Ñ# wÒ.ô �J“ !Ò#ä˜“_ qÑ(ð ð
 �M‰Mœ, tÓ,Ô-Ø�‰Ô(Ð);ÄÀZÃÔQÔRØˆÜÐ1´s¸:³Ô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¾   Ñ  s^   € Ü
×Ñ˜7Ò"Ü" 6¨uÔ5Ð6Ð6Ü
×Ñ˜7Ò"ä˜y¨eÔ4Ü˜v¨5Ô1ð
ð 	
ô ˜}°%Ô8Ð9Ð9r&   c                 ó^   — 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Á   Ü  s,   € Ü
×Ñ˜7Ò"ä! +°1¸TÔBÐBÜ˜m°DÔ9Ð9r&   c                 óJ   — 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‰]¸|€FÜ˜f¨VÔ4Ð4r&   c                 óè  — 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Ï   è  s  € Ü
×Ñ˜7Ò"Ü" 6¨qÔ1Ð2Ð2àˆA‚vØˆ	Ø	
ˆaŠÜ" 9Ó-Ð.Ð.Ø	
ˆaŠÜ" ;Ó/Ô1CÀIÓ1NÐOÐOðô& 	˜<¨Q°©UÔ3Ü˜9Ó%Ü˜<°Ô3ÜÓÜ˜;Ó'Ü˜9Ó%Ü˜;Ó'Ü˜<°Ô3Ü˜>Ó*Ü˜9Ó%Ü˜9Ó%ðô 
˜AÓ	ðô 	˜9Ó%ðô 	Ð,°!°a±%Ô8ðð r&   r7   c                 óV  — | 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(  rRt         j                  d
k\  ry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°ˆÜ×Ñ˜wÒ&Ø˜‘7˜XÑ%Ð%ð ˜‘7˜XÑ%Ð%Ø	Ð8Ñ	8ØÐ"4Ò4‘1¸!ˆØ�Q‰w˜Ñ!Ð!Ø	Ð%Ò	%Ü×Ñ˜wÒ&ØÜ×Ñ Ò(Ø˜˜a™‘=Ð Ü×Ñ Ò(Ø˜˜a™‘=Ð à˜˜a™‘=Ð äÐ3°F°8Ð<Ó=Ð=r&   r   r   Ústorec                 óZ  — t         j                  dk\  r.|rt        d«      n	t        «       }t	        t        | |«      «      |gS t         j                  dk\  r&|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Ô˜~Ô.Ô=QÓ=Sð 	ô œe E¨3Ó/Ó0Øð
ð 	
ô 
×	Ñ	˜WÒ	$Ù%*‘M°ˆ	ä˜eÓ$Ü˜cÓ"Ü˜yÓ)ð
ð 	
ñ ',‘N°ˆ	ä˜eÓ$Ü˜cÓ"Ü˜}°!Ô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  sw   € Ü
×Ñ˜7Ò"Ü" 6¨qÔ1Ð2Ð2ØˆA‚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  sb   € ðÜ	Ô)¨,¼uÔEÓ	Fðä	�U¤3×#3Ñ#3°wÒ#>™aÀAÑFÓ	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ç   ‚  sP   € ðÜ	Ô)¨,¼uÔEÓ	Fðä˜<°Ô6ðô 
˜a Ó	'ðô 	˜9Ó%ð	ð r&   c                  óX   — t         j                  dk  rt        d«      S t        dd¬«      S )Nr¸   rÚ   Ú	BINARY_OPé   r‡   rq   r4   r&   r$   rÍ   rÍ   ‹  s(   € Ü
×Ñ˜'Ò!Ü! /Ó2Ð2ä˜k¨rÔ2Ð2r&   c                 ób   — 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í   ’  s.   € Ü
×Ñ˜7Ò" q¨A¢vÜ  Ó$Ð$Ü˜m°Ô3Ð3r&   Úfirst_linenoc                 ó  ‡‡‡‡‡— t         j                  dd dk7  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                 óö   •— | dk7  s|dk7  rnt        dt        | d«      «      }t        dt        |d«      «      }|dk(  r|dk(  rt        d«      ‚| |z  } ||z  }‰j                  ||dz  f«       | dk7  rŒg|dk7  rŒmy y )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Ü˜a¤ \°3Ó!7Ó8ˆKÜ˜d¤C¨°cÓ$:Ó;ˆKØ˜aÒ K°1Ò$4Ü$Ð%SÓTÐTØ˜KÑ'ˆLØ˜KÑ'ˆLØ×Ñ˜k¨;¸Ñ+=Ð>Ô?ð ˜aÓ <°1Õ#4r&   Ú
lineno_newÚ
byteno_newc                 ó4   •— |‰z
  }|Š ‰|‰«       | ‰z
  Š| Šy rA   r4   )rý   rþ   rñ   rü   ÚbytenoÚlinenorò   s      €€€€r$   Úupdatez linetable_writer.<locals>.update³  s+   ø€ à! FÑ*ˆØˆÙ�˜lÔ+Ø! FÑ*ˆØ‰r&   Útotal_bytesc                 ó   •—  ‰| ‰z
  ‰«       y rA   r4   )r  rü   r   rò   s    €€€r$   r   zlinetable_writer.<locals>.end»  s   ø€ Ù�˜fÑ$ lÕ3r&   )rr   rs   r}   r0   )rî   r  r   rü   r   r  rò   rû   s      @@@@@r$   Úlinetable_writerr  ˜  s´   ü€ ô ×Ñ˜˜Ð˜wÒ&ÜØ9¼#×:JÑ:JÈ2ÈAÐ:NÐ9OÐPó
ð 	
ð €IØ€FØ€LØ€Fð@œcð @´ð @¸õ @ðœ3ð ¬Cð °D÷ ð ð4œð 4 ÷ 4ð �f˜cÐ!Ð!r&   c                 ó¤   — | dk  rt        d| › �«      ‚| dz  g}| dz  } | dkD  r,|dxx   dz  cc<   |j                  | dz  «       | dz  } | dkD  rŒ,|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  Á  so   € ð
 	ˆ1‚uÜÐJÈ1È#ÐNÓ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kD  r ||d«       |dz  }|dkD  rŒ |||«       y )NÚdeltaÚsizer   c                 ó  •— d|cxk  rdk  sn t        d|› �«      ‚d}‰r~‰j                  �r‰j                  �f‰j                  �Z‰j                  �N‰j                  d|z   dz
  «       ‰j                  ‰j                  z
  ‰j                  dz   ‰j                  dz   f}n‰j                  d|z   dz
  «       | dk  r
|  dz  dz  } n| dz  } ‰j                  t        | «      «       |D ]  }‰j                  t        |«      «       Œ y )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æ  s  ø€ Ø˜Dœ AœÜ(Ð+MÈdÈVÐ)TÓUÐUð 24�áØ!×(Ñ(Ð4Ø!×,Ñ,Ð8Ø!×,Ñ,Ð8Ø!×0Ñ0Ð<à×$Ñ$ \°DÑ%8¸1Ñ%<Ô=ð "×,Ñ,¨y×/?Ñ/?Ñ?Ø!×,Ñ,¨qÑ0Ø!×0Ñ0°1Ñ4ð%‘Mð ×$Ñ$ \°DÑ%8¸1Ñ%<Ô=à˜1’9Ø$˜f¨™]¨aÑ/‘Eà˜a‘K�Eà× Ñ ¤¨uÓ!5Ô6Ø&ò 7�AØ×$Ñ$¤]°1Ó%5Õ6ñ7r&   r   r  )r  r0   )r=   r  rý   rü   rò   r  rû   s   `    €€r$   r  z$linetable_311_writer.<locals>.updateâ  sx   ù€ á-6˜×)Ò)¸DˆJð7œsð 7¬#ð 7°$ö 7ðB Ð!Ø ‘à)¨FÑ2�Ø#�Ø˜a’-Ù˜ aÔ(Ø˜Q‘�	ð ˜a“-ñ �L )Õ,r&   )rr   rs   r}   ri   Ú	Positionsr0   )rî   r  r  rû   s     @@r$   Úlinetable_311_writerr  Ó  sn   ù€ ô ×Ñ˜gÒ%Ü ØBÄ3×CSÑCSÐBTÐUóð ð ˆ	Øˆð-	-œcŸm™m¨dÑ2ð -	-¼sð -	-Àtö -	-ð^ ˜&Ð Ð r&   c                   ó@   — e Zd ZU eed<   eed<   eed<   eed<   eed<   y)ÚExceptionTableEntryr   r   r   r   r   N)r,   r-   r.   r0   r/   r1   r4   r&   r$   r  r    s   … àƒJØ	ƒHØƒKØƒJØ„Kr&   r  c                 óü   — | dk  rt        d| › �«      ‚| dz  g}| dz  } | dkD  r|j                  | dz  «       | dz  } | dkD  rŒ|j                  «        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ÜØIÈ!ÈÐMó
ð 	
ð 
ˆR‰ˆ€AØˆ!�G€AØ
ˆaŠ%Ø	�‰��R‘ÔØ	ˆa‰ˆð ˆa‹%ð ‡I�I„KÜ”3�q“6˜A‘:Óò ˆØ	ˆ!‹�‰
Œðà€Hr&   Ú
bytes_iterc                 ól   — t        | «      }|dz  }|dz  r|dz  }t        | «      }||dz  z  }|dz  rŒ|S )z5
    Inverse of `encode_exception_table_varint`.
    r  r	  r  )Únext)r   r
  rx   s      r$   Údecode_exception_table_varintr#  0  sN   € ô 	ˆZÓ€AØ
ˆb‰&€CØ
ˆbŠ&Ø�‰	ˆÜ�ÓˆØˆq�2‰v‰ˆð ˆb‹&ð €Jr&   Útabc                 óÄ  — t        t        | «      dz
  «      D ]Æ  }| |   j                  | |   j                  k  rH| |   j                  | |dz      j                  k  r&| |dz      j                  | |dz      j                  k  rŒjt	        d|› d|› d| |   j                  › d| |   j                  › d|dz   › d| |dz      j                  › d| |dz      j                  › d�«      ‚ y)	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&  =  só   € ô
 ”3�s“8˜a‘<Ó ò 
ˆà�‰F�L‰L˜C ™FŸJ™JÒ&Ø�A‘—
‘
˜S  Q¡™Z×-Ñ-Ò-Ø�A˜‘E‘
× Ñ  C¨¨A©¡J§N¡NÓ2ä ØGÈÀsð KØ˜˜9 S¨¡V§\¡\ N°&¸¸Q¹¿¹¸ð EØ˜Q™˜˜y¨¨Q°©U©×)9Ñ)9Ð(:¸&ÀÀQÈÁUÁÇÁÐ@PÐPQðSóð ñ
r&   Úexntabc           	      ó6  — t        | «      }g }	 	 t        |«      dz  }t        |«      dz  }||z   dz
  }t        |«      dz  }t        |«      }|dz	  }t        |dz  «      }	|j                  t	        |||||	«      «       Œo# 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
    r“   r   )Úiterr#  r1   r°   r  ÚStopIterationr&  )
r'  Úexntab_iterr$  r   Úlengthr   r   Údlr   r   s
             r$   Úparse_exception_tabler.  O  s²   € ô
 �v“,€KØ
€CðØÜ1°+Ó>ÀÑBˆEÜ2°;Ó?À!ÑCˆFØ˜&‘. 1Ñ$ˆCÜ2°;Ó?À!ÑCˆFÜ.¨{Ó;ˆBØ˜!‘GˆEÜ˜˜a™“LˆEØ�J‰JÔ*¨5°#°v¸uÀeÓLÔMð øô ò Ü˜cÔ"ØŠ
ðús   �A0A? Á?BÂBc                 óÂ  — g }| D ]Î  }t        |j                  dz  «      }|dxx   dz  cc<   |j                  |«       |j                  |j                  z
  dz   }|j                  t        |dz  «      «       |j                  t        |j                  dz  «      «       |j
                  dz  |j                  z   }|j                  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_entryr,  r-  s         r$   Úassemble_exception_tabler4  e  sÁ   € ð
 	€AØò 4ˆÜ3°E·K±KÀ1Ñ4DÓEˆØ�A‹˜&Ñ ‹Ø	�‰�ÔØ—‘˜UŸ[™[Ñ(¨1Ñ,ˆØ	�‰Ô.¨v¸©{Ó;Ô<Ø	�‰Ô.¨u¯|©|¸qÑ/@ÓAÔBØ�k‰k˜QÑ %§+¡+Ñ-ˆØ	�‰Ô.¨rÓ2Õ3ð4ô �‹8€Or&   ÚinstructionsÚfirstlinenoc                 óF  — g }t         j                  dk\  røt        |«      \  }}d}t        | «      D ]Ù  \  }}|j                  dk(  r=d}|dz  }dD ]0  }	| ||	z      j                  dk7  sŒ| ||	z      j
                  |_         n nt        |«      dz  |z   }d} ||j
                  |«       d}|j                  xs d}
|j                  |j                  |
dz  f«       t        t        |«      dz  dz
  «      D ]  }|j                  d«       Œ ŒÛ nt        |«      \  }}}| D ]Z  }|j                  � ||j                  t        |«      «       |j                  xs d}
|j                  |j                  |
dz  f«       Œ\  |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  r1  )r5  r6  ÚcodeÚlnotabÚupdate_linenoÚnum_extrO   rt   r  Újr8   Ú_r   s                r$   ÚassemblerB  w  s¦  € à€DÜ
×Ñ˜7Ò"Ü 4°[Ó AÑˆ�ØˆÜ  Ó.ò 	$‰GˆAˆtØ�{‰{˜nÒ,Ø�	Ø˜1‘�à"ò �AØ# A¨¡EÑ*×1Ñ1°^ÓCØ)5°a¸!±eÑ)<×)FÑ)F˜œÙñô
 -¨TÓ2°aÑ7¸'ÑA�	Ø�Ù˜$Ÿ.™.¨)Ô4ØˆGØ—(‘(’-˜aˆCØ�K‰K˜Ÿ™ c¨D¡jÐ1Ô2ÜÔ+¨DÓ1°QÑ6¸Ñ:Ó;ò $�Ø—‘˜FÕ#ñ$ñ!	$ô& &6°kÓ%BÑ"ˆ�˜sà ò 	3ˆDØ×ÑÐ+Ù˜d×.Ñ.´°D³	Ô:Ø—(‘(’-˜aˆCØ�K‰K˜Ÿ™ c¨D¡jÐ1Õ2ð		3ñ 	ŒC�‹IŒä�‹;œ˜f›Ð%Ð%r&   Úoffset_to_instr:   c                 ól   — dD ]/  }| ||z      j                   t        j                  k7  sŒ'| ||z      c S  y)zU
    Get the instruction located at a given offset, accounting for EXTENDED_ARGs
    )r   r“   rŽ   r  N©r6   ri   r8  )rC  r:   rŠ   s      r$   Ú_get_instruction_by_offsetrF  �  sD   € ð ò .ˆØ˜& 1™*Ñ%×,Ñ,´×0@Ñ0@Ó@Ø! &¨1¡*Ñ-Ò-ð.ð r&   c                 ó  — | D �ci c]  }|j                   €Œ|j                   |“Œ }}| D ]V  }|j                  t        j                  v s|j                  t        j                  v sŒ<t        ||j                  «      |_        ŒX yc c}w )z9Replace jump targets with pointers to make editing easierN)r:   r6   ri   ÚhasjabsÚhasjrelrF  r9   r   )r5  rt   Újump_targetss      r$   Úvirtualize_jumpsrK  ©  sy   € ð '3öØ"°d·k±kÑ6Mˆ�‰�TÑð€Lð ð ò PˆØ�;‰;œ#Ÿ+™+Ñ%¨¯©¼¿¹Ò)CÜ4°\À4Ç;Á;ÓOˆD�KñPùò	s
   …B—BÚinstructionc                 ó°  — t         j                  dk  rt        d«      ‚d| j                  v r"| j                  j	                  dd«      | _        n;d| j                  v r"| j                  j	                  dd«      | _        nt        d«      ‚t        j                  | j                     | _        | j                  t        vrt        d| j                  › d�«      ‚y )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}   )rL  s    r$   Úflip_jump_directionrS  ·  sÅ   € Ü
×Ñ˜'Ò!ÜÐHÓIÐIØ�K×&Ñ&Ñ&Ø(×/Ñ/×7Ñ7¸	À:ÓNˆÕØ	�{×)Ñ)Ñ	)Ø(×/Ñ/×7Ñ7¸
ÀIÓNˆÕäÐLÓMÐMÜŸ™ ;×#5Ñ#5Ñ6€KÔØ×Ñ¤Ñ+ÜØ˜×*Ñ*Ð+Ð+MÐNó
ð 	
ð ,r&   rš   c                 ó„   — | |   }dD ]5  }||k\  r,| ||z
     j                   t        j                  k(  r	| ||z
     }Œ4 |S  |S )zp
    i.e. get the first EXTENDED_ARG instruction (if any) when targeting
    instructions[idx] with a jump.
    r9  rE  )r5  rš   r   r:   s       r$   Ú_get_instruction_frontrU  Ç  s]   € ð
 ˜#Ñ€FØò ˆØ�&Š=˜\¨#°©,Ñ7×>Ñ>Ä#×BRÑBRÒRØ! #¨¡,Ñ/‰FàØ€Mðð
 €Mr&   c           	      ó  — t        t        j                  «      j                  t        t        j                  «      «      }| D �]5  }|j
                  |v sŒ|j
                  t        j                  vsŒ0|j                  €t        d|j                  › d�«      ‚|j                  j                  €t        d|j                  › d�«      ‚|j                  €t        d|j                  › d�«      ‚|j                  j                  |j                  k  r:t        j                  dk  rt        d«      ‚d|j                  v sŒùt        |«       �Œt        j                  dk\  s�Œd	|j                  v s�Œ+t        |«       �Œ8 t        | «       t        | «      }| D �]q  }|j
                  |v sŒ|j                  €t        d|j                  › d�«      ‚t!        | ||j                     «      }|j
                  t        j                  v rSt        j                  dk  r5|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                  › �|_        �Œt y)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.11rN  rO  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   rH  ÚunionrI  r6   r   r}   r7   r:   rr   rs   rh   rS  Úupdate_offsetsr   rU  r0   r8   Úabsr;  r9   r?   )r5  Újumpsrt   Úindexofr   s        r$   Údevirtualize_jumpsr]  Õ  sŒ  € ä”—‘Ó×"Ñ"¤3¤s§{¡{Ó#3Ó4€Eð ó 2ˆØ�;‰;˜%ÒØ�{‰{¤#§+¡+Ò-Ø—;‘;Ð&Ü(Ø+¨D¯K©K¨=¸ÐGóð ð —;‘;×%Ñ%Ð-Ü(Ð+;¸D¿K¹K¸=ÈÐ)WÓXÐXØ—;‘;Ð&Ü(Ø+¨D¯K©K¨=¸ÐGóð ð —;‘;×%Ñ%¨¯©Ò3Ü×'Ñ'¨'Ò1Ü*Ð+WÓXÐXà  D§K¡KÒ/Ü+¨DÖ1ô ×'Ñ'¨7Ô2°zÀTÇ[Á[Ó7PÜ+¨DÖ1ð-2ô2 �<Ô Ü˜,Ó'€Gð ó 1ˆØ�;‰;˜%ÒØ�{‰{Ð"Ü$Ð'8¸¿¹¸À^Ð%TÓUÐUÜ+¨L¸'À$Ç+Á+Ñ:NÓOˆFØ�{‰{œcŸk™kÑ)Ü×#Ñ# gÒ-ð —}‘}Ð,Ü,Ð-QÓRÐRÜ" 6§=¡=°1Ñ#4Ó5�D•Hä&Ð'TÓUÐUð —=‘=Ð(Ü(Ð)MÓNÐNØ—;‘;Ð&Ü(Ø4°T·[±[°MÀÐPóð ô Ü˜Ÿ™¨¯©Ñ3Ô6FÀtÓ6LÑLÓMó�”ð —’˜Q‘•Ø Ÿ-™-ˆDŒKØ  §¡ Ð0ˆDŽLñ91r&   Úexn_tab_bytesc                 óp  ‡‡‡	‡
— t        | «      }|D �ci c]  }t        t        |j                  «      |“Œ c}Š	t	        ‰	j                  «       «      Š
dŠt        |«      Š	 dt        t        t        f   fˆˆˆ	ˆ
fd„} |«       \  }}|D ]˜  }|j                  €t        d|j                  › d�«      ‚|j                  |j                  kD  r$ |«       \  }}|j                  |j                  kD  rŒ$|j                  |j                  k\  sŒt        j                  |«      |_        Œš yc c}w # t         $ r Y yw xY w)zDReplace exception table entries with pointers to make editing easierr   r   c                  óˆ  •— t        ‰«      } ‰t        ‰«      k  r8‰‰   | j                  k  r&‰dz  Š‰t        ‰«      k  r‰‰   | j                  k  rŒ&‰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   rF  r   r   r   r   )r2  Ú
end_offsetÚ
inst_entryÚend_offset_idxÚexn_tab_iterrC  Úoffsetss      €€€€r$   Ústepz(virtualize_exception_table.<locals>.step!  sÉ   ø€ ä˜Ó&ˆEð ¤ W£Ò-°'¸.Ñ2IÈUÏYÉYÒ2Và !Ñ#�ð ¤ W£Ò-°'¸.Ñ2IÈUÏYÉYÓ2Vð  Ò"Ü$ØWóð ð ! °!Ñ!3Ñ4ˆJÜ/Ü*¨>¸5¿;¹;ÓGÜ*¨>¸:ÓFÜ*¨>¸5¿<¹<ÓHØ—‘Ø—‘óˆJð ˜*Ð$Ð$r&   Núinstruction z4 has no offset during exception table virtualization)r.  r	   r0   r:   ÚsortedÚkeysr)  Útupler  r   r}   r7   r   r   Úcopyr>   r*  )r^  r5  Úexn_tabrt   rf  r2  rb  rc  rd  rC  re  s          @@@@r$   Úvirtualize_exception_tablerm    s(  û€ ô $ MÓ2€GØ?KÖL°t”dœ3 §¡Ó,¨dÑ2ÒL€NÜ�^×(Ñ(Ó*Ó+€GØ€NÜ˜“=€Lð'ð	%”eÔ/Ô1GÐGÑH÷ 	%ð 	%ñ2 !›FÑˆˆzØ ò 		;ˆDØ�{‰{Ð"Ü$Ø" 4§;¡; -ð 0+ð +óð ð —+‘+ §	¡	Ò)Ù$(£FÑ!��zð —+‘+ §	¡	Ó)à�{‰{˜eŸk™kÓ)Ü%)§Y¡Y¨zÓ%:�Õ"ñ		;ùòA MøôT ò Ùðús$   ”"D$Á BD) Ã-D) ÄD) Ä)	D5Ä4D5c           	      ó²  ‡‡‡‡— i Št        | «      }| D �];  }|j                  sŒ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‰|   |k7  rt        d|› d‰|   › d|› �«      ‚|‰|<   �Œ> t        ‰j                  «       d„ ¬	«      }d
Šg Šg Šdˆˆˆˆfd„}	|D ]½  }‰r&‰d   d   |d
   k  r |	«        ‰r‰d   d   |d
   k  rŒ‰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  r(‰j!                  t#        |
|d
   dz
  g‰‰d      ¢­Ž «       |d
   Š‰j!                  |«       Œ¿ ‰r
 |	«        ‰rŒ
t%        ‰«       ‰S )zMCompute exception table in list format from instructions with exn_tab_entriesz5exception 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   c                  ó¬   •— ‰rQ‰j                  «       } ‰| d   k  r8‰j                  t        t        | d   ‰«      | d   g‰|    ¢­Ž «       | d   dz   Šyyy)zT
        Pop the key_stack and append an exception table entry if possible.
        r   r   r“   N)Úpopr°   r  r÷   )ru  Úexn_dictrl  Ú	key_stackÚnextis    €€€€r$   rw  z$compute_exception_table.<locals>.pop‚  se   ø€ ñ
 Ø—-‘-“/ˆCØ˜˜A™ŠØ—‘Ü'¬¨C°©F°EÓ(:¸CÀ¹FÐSÀXÈcÁ]ÒSôð ˜A™ ™
‘ð	 ð r&   rŒ   r   zexception table key ú& is not properly nested within parent )r   N)r   r>   rU  r   r:   r}   r	   r0   r   r;  r   r   r   rh  ri  r÷   r°   r  r&  )r5  r\  rt   r   r   r   ru  rx   Úkeys_sortedrw  Úleftrx  rl  ry  rz  s              @@@@r$   Úcompute_exception_tabler~  I  sÎ  û€ ð >@€HÜ˜,Ó'€Gàó # ˆØ×Óä*Ø˜g d×&8Ñ&8×&>Ñ&>Ñ?óç‰fð ð ˆ}Ü$ØKóð ô
 ”S˜$×,Ñ,×0Ñ0×7Ñ7Ó8Ü" 4×#5Ñ#5×#9Ñ#9Ó:ñ;àñð ð
 ˆ{Ü$ØIóð ô ,Ø˜g d×&8Ñ&8×&?Ñ&?Ñ@óç‰fð ð ˆ~Ü$ØLóð ð ˜#�,ˆCØ˜4×-Ñ-×3Ñ3°T×5GÑ5G×5MÑ5MÐNˆCØ�h‰Ø˜C‘= CÒ'Ü(ØHØ˜%˜r (¨3¡- °°S°Eð;óð ð  ˆH�S‹MðG# ôV ˜Ÿ™›Ñ.EÔF€Kà€Eà')€IØ)+€G÷#ð #ð ò ˆá˜I b™M¨!Ñ,¨s°1©vÒ5ÙŒEñ ˜I b™M¨!Ñ,¨s°1©vÓ5áà˜b‘M !Ñ$¨¨A©ÔL°#°a±&ÔL¸IÀb¹MÈ!Ñ<LÔLÜ$Ø*¨3¨%ð 0Ø'¨™m˜_ð.óð ô �u˜i¨™m¨AÑ.Ó/ˆDØ�c˜!‘fŠ}Ø—‘Ü'¨¨c°!©f°q©jÐS¸8ÀIÈbÁMÑ;RÒSôð ˜‘FˆEØ×Ñ˜Õð#ñ$ ÙŒò ä˜'Ô"Ø€Nr&   r\  c                 óL  — g }| D ]�  }||j                      ||j                     f}|r/|d   d   |d   k  r!|j                  «        |r|d   d   |d   k  rŒ!|r9|d   d   |d   cxk  r|d   cxk  r|d   d   k  sn t        d|› d|d   › �«      ‚|j	                  |«       ŒŸ y)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   rw  r}   r°   )r$  r\  Úentry_stackr2  ru  s        r$   Ú!check_inst_exn_tab_entries_nestedr�  §  sÕ   € ð *,€KØò 
 ˆØ�u—{‘{Ñ# W¨U¯Y©YÑ%7Ð8ˆÙ˜k¨"™o¨aÑ0°3°q±6Ò9Ø�O‰OÔñ ˜k¨"™o¨aÑ0°3°q±6Ó9áØ ‘O AÑ&¨#¨a©&ÔP°C¸±FÔP¸kÈ"¹oÈaÑ>PÔPÜ$Ø,¨S¨Eð 2%Ø%0°¡_Ð$5ð7óð ð 	×Ñ˜3Õñ
 r&   c                 ó.  — t        | «      }i }| D ]t  }|j                  sŒ||j                  j                     ||j                  j                     f}||v r |j                  ||   k7  rt	        d|› �«      ‚|j                  ||<   Œv t        |j                  «       d„ ¬«      D �cg c]  }||   ‘Œ	 }}t        ||«       |D ]M  }t        ||j                     ||j                     dz   «      D ]  }t        j                  |«      | |   _        Œ! ŒO yc c}w )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                 ó   — | d   | d    fS rp  r4   rq  s    r$   rs  z2propagate_inst_exn_table_entries.<locals>.<lambda>Ò  s   € ÀaÈÁdÈQÈqÉTÈEÀ]€ r&   rt  r   N)
r   r>   r   r   r}   rh  ri  r�  r•   rk  )r5  r\  Úentriesrt   ru  Úsorted_entriesr2  rO   s           r$   Ú propagate_inst_exn_table_entriesr†  ¾  s/  € ô
 ˜,Ó'€GØ=?€GØò .ˆØ×Óà˜×*Ñ*×0Ñ0Ñ1Ø˜×*Ñ*×.Ñ.Ñ/ðˆCð �g‰~Ø×%Ñ%¨°©Ò5Ü(ØKÈCÈ5ÐQóð ð  ×-Ñ-ˆG�CŠLð.ô !' w§|¡|£~Ñ;RÔ SöØˆ�‹ð€Nð ô & n°gÔ>ð  ò =ˆÜ�w˜uŸ{™{Ñ+¨W°U·Y±YÑ-?À!Ñ-CÓDò 	=ˆAÜ,0¯I©I°eÓ,<ˆL˜‰OÕ)ñ	=ñ=ùòs   Â%Dc           
      ó˜  — t        | «      }t        «       }t        | «      D �]&  \  }}|j                  sŒt        j
                  dk  rt        d«      ‚t        |j                  «      |v rt        d|› �«      ‚|j                  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  rŒøn t        d|› d||j                     › d	||j                     › d
�«      ‚ y)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   rW  r:  r>   rr   rs   r}   rC   Úaddr   r   r   )r5  r\  Úexn_tab_entry_setrO   rt   r2  s         r$   Ú check_inst_exn_tab_entries_validr‹  Ü  s[  € ô ˜,Ó'€GÜ›ÐÜ˜\Ó*ó ‰ˆˆ4Ø×ÓÜ×Ñ 'Ò)Ü$Ð%VÓWÐWÜ�$×$Ñ$Ó%Ð):Ñ:Ü$ØCÀAÀ3ÐGóð ð ×!Ñ!¤" T×%7Ñ%7Ó"8Ô9Ø×&Ñ&ˆEØ�{‰{ 'Ñ)Ü$ØOóð ð �y‰y Ñ'Ü$ØMóð ð �|‰| 7Ñ*Ü$ØPóð ð ˜EŸK™KÑ(¨AÔC°¸¿¹Ñ1CÕCÜ$Ø+¨A¨3ð /Ø% e§k¡kÑ2Ð3°2°g¸e¿i¹iÑ6HÐ5IÈðLóð ñ/r&   c                 óp   — | D �cg c]"  }|j                   t        j                  k7  sŒ!|‘Œ$ c}| d d  y c c}w rA   rE  )r5  rO   s     r$   Ústrip_extended_argsr�    s*   € Ø".ÖO˜Q°!·(±(¼c×>NÑ>NÓ2N’qÒO€L‘�OùÒOs   …"3¨3Úold_instÚ	new_instsc                 óæ  — | j                   r:| j                   j                  | u r"t        |«      dkD  r|d   | j                   _        |dd  D ]7  }t        j                  | j                   «      |_         | j                  |_        Œ9 |d   j
                  | _        |d   j                  | _        |d   j                  | _        |d   j                  | _        |d   j                  | _	        | g|dd  z   S )Nr   rŒ   r   )
r>   r   r  rk  r=   r6   r7   r8   r9   r   )rŽ  r�  rt   s      r$   Úoverwrite_instructionr‘    sâ   € ð
 	×ÒØ×"Ñ"×&Ñ&¨(Ñ2Ü�	‹N˜QÒà%.¨r¡]ˆ×ÑÔ"à˜!˜"�ò ,ˆÜ!ŸY™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 ]G  }|j                  |v sŒ||j                     |_        t        j
                  |j                     |_        ŒI | 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   )r5  Úrewritesrt   s      r$   Úremove_load_call_methodr”  %  ss   € ä
×Ñ˜7Ò"ÜØJó
ð 	
ð  +¸?ÑK€HØò 1ˆØ�;‰;˜(Ò"Ø" 4§;¡;Ñ/ˆDŒKÜŸ)™) D§K¡KÑ0ˆD�Kð1ð Ð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}|j                  t        ||«      «       ŒÂ|j                  |«       ŒÔ || d d  y )NÚ_NONEÚIS_OPÚNOTr‡   r\   rN  Ú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°   )r5  r�  rt   Úis_opÚjump_opÚreplace_instss         r$   Úremove_jump_if_nonerŸ  3  sÙ   € Ø€IØò #ˆØ�d—k‘kÑ!Ü& w´C¸ÀÇÁÐ8LÓ4MÔNˆEà Ÿ9™9ˆEŒLä×Ñ 'Ò)Ü,ð %¨¯©Ñ3ñ 3à8àŸ;™;ô‘ô -Ð-?ÈÏÉÔT�ô # <¸Ô=ØØðˆMð
 ×ÑÔ2°4¸ÓGÕHà×Ñ˜TÕ"ð3#ð4  €L‘�Or&   c                 óX  — g }| D �]  }|j                  |«       |j                  dv sŒ$t        j                  dk\  r|j                  dk(  rt	        «       }n%t        |j                  j                  dd«      «      }|j                  r)|j                  j                  |u r||j                  _        t        j                  |j                  «      |_        |j                  |_
        t        j                  d   |_        d|_        d|_        d|_        |j                  |«       �Œ  || d d  y )N)rÙ   rØ   r¸   rÙ   ÚSLICEÚSUBSCRrÛ   r“   )r°   r7   rr   rs   rÍ   rl   rP  r>   r   rk  r=   ri   rj   r6   r8   r9   )r5  r�  rt   rÝ   s       r$   Úremove_binary_store_slicer£  R  sø   € Ø€IØó *ˆØ×Ñ˜ÔØ�;‰;Ð9Ò9ä×Ñ 7Ò*¨t¯{©{¸nÒ/LÜ2Ó4‘ä0°·±×1DÑ1DÀWÈhÓ1WÓX�Ø×!Ò! d×&8Ñ&8×&<Ñ&<ÀÑ&DØ)4�×"Ñ"Ô&Ü(,¯	©	°$×2DÑ2DÓ(EˆKÔ%Ø$(§N¡NˆKÔ!äŸ)™) MÑ2ˆDŒKØ'ˆDŒKØˆDŒHØˆDŒKØ×Ñ˜[Ö)ð#*ð$  €L‘�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                 ó  — g }| D ]€  }|j                   t        v r[t        |j                      \  }}|j                  \  }}t        ||¬«      t        ||¬«      g}|j	                  t        ||«      «       Œp|j                  |«       Œ‚ || d d  y )Nr|   )r7   ÚFUSED_INSTSr9   rl   r±   r‘  r°   )r5  r�  rt   Úinst0Úinst1Úargval0Úargval1rž  s           r$   Úremove_fused_load_storer±  q  s�   € Ø€IØò #ˆØ�;‰;œ+Ñ%Ü& t§{¡{Ñ3‰LˆE�5Ø#Ÿ{™{ÑˆG�Wô # 5°Ô9Ü" 5°Ô9ðˆMð ×ÑÔ2°4¸ÓGÕHà×Ñ˜TÕ"ð#ð  €L‘�Or&   c                 óò   — g }| D ]k  }d|j                   v rJt        dd¬«      t        |j                   |j                  ¬«      g}|j                  t	        ||«      «       Œ[|j                  |«       Œm || d d  y )NÚRETURNÚNOPÚGRAPH_BREAK_IF_LEAFr|   )r7   rl   r9   r±   r‘  r°   )r5  r�  rt   rž  s       r$   Ú$add_graph_break_if_leaf_instructionsr¶  „  sw   € Ø€IØò #ˆØ�t—{‘{Ñ"ä" 5Ð1FÔGÜ" 4§;¡;°t·{±{ÔCðˆMð ×ÑÔ2°4¸ÓGÕHà×Ñ˜TÕ"ð#ð  €L‘�Or&   c                 ó´  — g }t        j                  | «      D �]$  \  }}|j                  dk(  rþ|j                  dk(  rï|j                  j	                  d«      rÔt        t        | «      «      D ]»  }| |   j                  |u r
|| |   _        | |   j                  sŒ.| |   j                  j                  |u r|| |   j                  _	        | |   j                  j                  |u r|| |   j                  _
        | |   j                  j                  |u sŒ¨|| |   j                  _        Œ½ �Œ|j                  |«       �Œ' |j                  | d   «       || d d  y )Nr´  rµ  r³  rŒ   )Ú	itertoolsÚpairwiser7   r9   Ú
startswithr•   r  r   r>   r   r   r°   )r5  r�  rt   Ú	next_instrO   s        r$   Ú'remove_graph_break_if_leaf_instructionsr¼  ’  sH  € Ø€IÜ$×-Ñ-¨lÓ;ó #‰ˆˆià�K‰K˜5Ò Ø—‘Ð4Ò4Ø× Ñ ×+Ñ+¨HÔ5ô œ3˜|Ó,Ó-ò I�Ø ‘?×)Ñ)¨TÑ1Ø-6�L ‘OÔ*Ø ‘?×0Ó0ð $ A‘×4Ñ4×:Ñ:¸dÑBØ>G˜ Q™×5Ñ5Ô;Ø# A‘×4Ñ4×8Ñ8¸DÑ@Ø<E˜ Q™×5Ñ5Ô9Ø# A‘×4Ñ4×;Ñ;¸tÒCØ?H˜ Q™×5Ñ5Õ<òIð ×Ñ˜TÖ"ð)#ð* ×Ñ�\ "Ñ%Ô&Ø€L‘�Or&   r<  c                 óŠ  — | j                   xs d| j                  xs dz   }t        | j                  «      syg }t	        |«      D �]v  \  }}|j                  |«       |j                  dk(  sŒ(|j                  dk(  sŒ8||dz      }|j                  dk(  sŒPt        j                  dk\  r|j                  dk(  sYt        j                  d	k\  r"t        j                  dk  r|j                  d
k(  s$t        j                  d	k  sŒ»|j                  dk(  sŒËd|vrt        d«      ‚|j                  t        dd¬«      «       | j                  d   }||v r|j                  t        d|¬«      «       n|j                  t        d|¬«      «       d|_        d|_        |j                  d
k(  s�Œa||dz      }d|_        d|_        �Œy ||dd y)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<  r5  Úcell_and_freer²   rš   rt   rz  Ú	first_varÚ	call_insts	            r$   Úexplicit_superrÇ  ­  s–  € à×%Ñ%Ò+¨°×0@Ñ0@Ò0FÀBÑG€MÜˆt×ÑÔ àØ€FÜ˜|Ó,ó )‰	ˆˆTØ�‰�dÔØ�;‰;˜-Ó'¨D¯K©K¸7Ó,BØ   q¡Ñ)ˆEØ�y‰y˜A‹~Ü×!Ñ! WÒ,°·±ÀÒ1Gä×$Ñ$¨Ò/Ü×(Ñ(¨7Ò2ØŸ™¨	Ò1ä×$Ñ$ wÓ.°5·<±<À?Ó3Rà mÑ3Ü(ØOóð ð —‘Ô0°ÀkÔRÔSØ ×,Ñ,¨QÑ/�	Ø Ñ-Ø—M‘MÔ"4°\È)Ô"TÕUà—M‘MÔ"4°[ÈÔ"SÔTØ�”	Ø �”Ø—<‘< 9Ô,à ,¨S°1©WÑ 5�IØ$%�I”MØ'(�IÖ$ð;)ð> €L‘�Or&   c                 óÊ  ‡— g Šdt         ddfˆfd„}| D �]›  }|j                  t        j                  k(  r	d|_        �na|j                  r“|j                  dkD  r„ |d«       ‰j                  t        d|j                  d	z	  ¬
«      «       ‰j                  t        d|j                  dz	  ¬
«      «       ‰j                  t        d|j                  dz	  ¬
«      «       nÂ|j                  rj|j                  dkD  r[ |d«       ‰j                  t        d|j                  dz	  ¬
«      «       ‰j                  t        d|j                  dz	  ¬
«      «       nL|j                  r@|j                  dkD  r1 |d«       ‰j                  t        d|j                  dz	  ¬
«      «       ‰j                  |«       �Œž 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 ]6  }‰sŒ‰d   j                  t        j                  k(  sŒ'‰j	                  «        Œ8 y )NrŒ   )r•   r6   ri   r8  rw  )rŠ   rA  r²   s     €r$   Úmaybe_pop_nz&fix_extended_args.<locals>.maybe_pop_nÚ  s9   ø€ Ü�q“ò 	ˆAÚ˜& ™*×+Ñ+¬s×/?Ñ/?Ó?Ø—
‘
•ñ	r&   r   iÿÿÿ rM   r8  é   r‡   é   r  iÿÿ  r“   rö   r   z.fix_extended_args removed instructions (added=z), expected non-negative)	r0   r6   ri   r8  r8   r°   rl   r  r}   )r5  rÊ  rt   Úaddedr²   s       @r$   Úfix_extended_argsrÎ  Ö  sŽ  ø€ à "€Fð”sð ˜tõ ð
 ó ˆØ�;‰;œ#×*Ñ*Ò*àˆDŽHØ�XŠX˜$Ÿ(™( XÒ-Ù˜ŒNØ�M‰MÔ,¨^ÀÇÁÈRÁÔPÔQØ�M‰MÔ,¨^ÀÇÁÈRÁÔPÔQØ�M‰MÔ,¨^ÀÇÁÈQÁÔOÕPØ�XŠX˜$Ÿ(™( VÒ+Ù˜ŒNØ�M‰MÔ,¨^ÀÇÁÈRÁÔPÔQØ�M‰MÔ,¨^ÀÇÁÈQÁÔOÕPØ�XŠX˜$Ÿ(™( Tš/Ù˜ŒNØ�M‰MÔ,¨^ÀÇÁÈQÁÔOÔPØ�‰�dÖð!ô$ �‹Kœ#˜lÓ+Ñ+€EØˆq‚yÜØ<¸U¸Gð D$ð $ó
ð 	
ð €L‘€OØ€Lr&   rt   c                 ó¬   — dd l }t        j                  dk\  r=d|j                  j                  j
                  j                  | j                     dz   z  S y)Nr   rU   r“   r   )Útorchrr   rs   Ú_CÚ_dynamoÚ
eval_frameÚpy_opcode_cachesr6   )rt   rÐ  s     r$   r;  r;  û  sF   € Ûä
×Ñ˜7Ò"Ø�E—H‘H×$Ñ$×/Ñ/×@Ñ@ÀÇÁÑMÐPQÑQÑRÐRØr&   c           	      ó    — d}| D ]G  }|j                   |k7  r(t        d|j                  › d|j                   › d|› �«      ‚|t        |«      z  }ŒI y )Nr   rg  z has offset z, expected )r:   r}   r7   r;  ©r5  r:   rt   s      r$   Úcheck_offsetsr×    s`   € Ø€FØò )ˆØ�;‰;˜&Ò Ü Ø˜tŸ{™{˜m¨<¸¿¹°}ÀKÐPVÈxÐXóð ð 	Ô" 4Ó(Ñ(‰ñ)r&   c                 ó@   — d}| D ]  }||_         |t        |«      z  }Œ y )Nr   )r:   r;  rÖ  s      r$   rY  rY    s-   € Ø€FØò )ˆØˆŒàÔ" 4Ó(Ñ(‰ñ)r&   Úargsc            	      óN  — t        t        t        t        | «      «      «      }|gt	        | «      z   t        | d   | d   «      D ��cg c]  \  }}t        ||k7  «      ‘Œ c}}gz   D �cg c]  }dj                  d„ |D «       «      ‘Œ }}ddj                  |«      z   S c c}}w c c}w )NrŒ   éþÿÿÿú c              3   ó$   K  — | ]  }|d ›–— Œ
 y­w)Ú03Nr4   )Ú.0Úxs     r$   ú	<genexpr>zdebug_bytes.<locals>.<genexpr>  s   è ø€ Ò(˜q�A�b�6“Ñ(ùs   ‚zbytes mismatch
ú
)r•   r÷   Úmapr  r¥   Úzipr0   Újoin)rÙ  ÚindexÚar
  r8   Úresults         r$   Údebug_bytesré    s¤   € Ü”#”cœ#˜t“nÓ%Ó&€Eð �7Ü
ˆt‹*ñä$'¨¨R©°$°r±(Ó$;×<™D˜A˜qŒC��Q‘�KÓ<Ð
=ñ>öàð 	�‰Ñ( CÔ(Õ(ð€Fð ð  §	¡	¨&Ó 1Ñ1Ð1ùó =ùò	s   ÁBÁ'B"c                 ó¬   — t        | d„ d¬«      \  }}| j                  |j                  k7  r)t        t        | j                  |j                  «      «      ‚y)z<Make sure our assembler produces same bytes as we start withc                  ó   — y rA   r4   )rà  Úys     r$   rs  zdebug_checks.<locals>.<lambda>#  s   � r&   T)ÚsafeN)Útransform_code_objectÚco_coder}   ré  )r<  ÚdoderA  s      r$   Údebug_checksrñ  !  sD   € ä# DÑ*;À$ÔG�G€Dˆ!Ø‡|�|�t—|‘|Ò#Üœ[¨¯©°t·|±|ÓDÓEÐEð $r&   Úcode_optionsc                 ó|   — t        | d   «      D ]  \  }}||u sŒ|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  sV   € Ü˜, {Ñ3Ó4ò ‰ˆˆ1ð
 �!Š8ØŠHðð �Ó # Ñ'ÓÜˆ|˜KÑ(Ó)¨AÑ-Ð-r&   Úvarname_from_oparg.c           
      ób  ‡ ‡‡
‡‡‡— t        ‰d   «      D ��ci c]  \  }}||“Œ
 c}}Šdt        dt        fˆˆfd„}t        j                  dk  rX|�t        d«      ‚t        ‰d   «      D ��ci c]  \  }}||“Œ
 c}}Št        ‰d   ‰d	   z   «      D ��ci c]  \  }}||“Œ
 c}}Š
nst        |«      st        d
«      ‚i }t        j                  «       D ]  }	  ||«      }|||<   Œ ‰d   D �ci c]  }|||   “Œ
 c}Š‰d   ‰d	   z   D �ci c]  }|||   “Œ
 c}Š
t        t        ‰ «      «      D �]Ñ  Šdt        fˆˆ fd„}‰ ‰   j                  dk(  r­‰ ‰   j                  t        u rt        d«      ‚t        j                  dk\  r\‰ ‰   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\  r]‰ ‰   j                   €t        d«      ‚ |‰ ‰   j                  «      dz  t#        t        ‰ ‰   j                   «      dz  z   ‰ ‰   _        �Œr |‰ ‰   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   ‰ ‰   _        �Œ#‰ ‰   j                  t$        v �rt        j                  dk  rt        d‰ ‰   j                  › d�«      ‚t'        ‰ ‰   j                  t(        «      s4t        d‰ ‰   j                  › dt+        ‰ ‰   j                  «      › �«      ‚t        ‰ ‰   j                  «      dk7  r4t        d‰ ‰   j                  › dt        ‰ ‰   j                  «      › �«      ‚t)        ˆ
ˆfd„‰ ‰   j                  D «       «      }|d   dz  |d   d z  z   ‰ ‰   _        �ŒE‰ ‰   j,                  t.        v re |«       s�Œct        j                  dk\  r-‰ ‰   j                  ‰vr‰
‰ ‰   j                     ‰ ‰   _        �Œ£‰‰ ‰   j                     ‰ ‰   _        �Œ¿‰ ‰   j,                  t0        v rY |«       s�ŒÝ |‰ ‰   j                  «      }	t        j                  d!k\  r‰ ‰   j                  d"k(  r
|	dz  }	|	dz  }	|	‰ ‰   _        �Œ-‰ ‰   j,                  t2        v r% |«       s�ŒK‰
‰ ‰   j                     ‰ ‰   _        �Œg‰ ‰   j,                  t4        v s�Œ~‰ ‰   j                   ��Œ�t7        ‰‰ ‰   j                  «      }|dk  rt        d#‰ ‰   j                  › �«      ‚|‰ ‰   _        �ŒÔ y c c}}w c c}}w c c}}w # t        $ r Y  �Œ=w xY wc c}w c c}w )$NÚco_namesr^   r   c           	      óð   •— 	 ‰|    }|S # t         $ rb t        ‰«      x}‰| <   g ‰d   ¢| ‘­‰d<   t        ‰d   «      t        ‰«      k7  r't        dt        ‰d   «      › dt        ‰«      › �«      d ‚Y |S w xY w)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ð ˆ
øô ò 	ä # E£
Ð*ˆC�%˜‘+Ø'H¨°jÑ)AÐ'HÀ4Ñ'HˆL˜Ñ$Ü�< 
Ñ+Ó,´°E³
Ò:Ü$Ø&¤s¨<¸
Ñ+CÓ'DÐ&Eð F/Ü/2°5«z¨lð<óð ðð ;ð
 ˆ
ð	ús   ƒ
 ŠA'A5Á4A5rU   z3varname_from_oparg should be None for Python < 3.11rÃ  rÁ  rÂ  z4varname_from_oparg must be callable for Python 3.11+c                  ó.   •— ‰‰    j                   t        uS rA   )r9   rZ   )rO   r5  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‰|   –— Œ y ­wrA   r4   )rß  r^   Ú	freenamesÚvarnamess     €€r$   rá  zfix_vars.<locals>.<genexpr>ª  s-   øè ø€ ò àð #'¨(Ñ"2�˜’¸	À$¹ÓGñùs   ƒ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*   rj  r¦   r6   Ú	HAS_LOCALÚHAS_NAMEÚHAS_FREEÚ	HAS_CONSTrö  )r5  rò  r÷  rš   r^   rý  Úallnamesrÿ  Ú	arg_tupler8   r  rO   rü  r  s   ``        @@@@r$   Úfix_varsr  ?  sx  ý€ ô )2°,¸zÑ2JÓ(K×L™9˜3 ˆT�3‰YÓL€EðœSð ¤Sö ô ×Ñ˜'Ò!ØÐ)Ü Ð!VÓWÐWÜ/8¸ÀmÑ9TÓ/U×V¡) # t�D˜#‘IÓVˆô 'Ø˜]Ñ+¨l¸=Ñ.IÑIó÷
á��Tð �#‰Ió
‰	ô Ð*Ô+Ü Ð!WÓXÐXØˆÜ—?‘?Ó$ò 	ˆCðÙ)¨#Ó.�Ø!$�˜’ð	ð 6BÀ-Ñ5PÖQ¨T�D˜( 4™.Ñ(ÒQˆð % ]Ñ3°lÀ=Ñ6QÑQö
àð �(˜4‘.Ñ ò
ˆ	ô ”3�|Ó$Ó%ó c*ˆð	>¤Dö 	>ð ˜‰?×!Ñ! ]Ò2à˜A‰×%Ñ%¬Ñ5Ü$Ð%SÓTÐTÜ×Ñ 7Ò*Ø ‘?×&Ñ&Ð.Ü(ØSóð ñ (6°lÀ1±o×6LÑ6LÓ'MÐQRÑ'RÜœ˜l¨1™o×1Ñ1Ó2°QÑ6ñ'�˜Q‘Õ#ñ '5°\À!±_×5KÑ5KÓ&L�˜Q‘Õ#Ø˜!‰_×#Ñ# {Ò2à˜A‰×%Ñ%¬Ñ5Ü$Ð%QÓRÐRÜ×Ñ 7Ò*Ø ‘?×&Ñ&Ð.Ü(ØQóð ñ (6°lÀ1±o×6LÑ6LÓ'MÐQRÑ'RÜœ˜l¨1™o×1Ñ1Ó2°QÑ6ñ'�˜Q‘Ö#ñ '5°\À!±_×5KÑ5KÓ&L�˜Q‘Ö#Ø˜!‰_×#Ñ#Ð'8Ò8Ø˜A‰×"Ñ"Ð*Ü$Ð%TÓUÐUØ˜A‰×%Ñ%¬Ñ5Ü$Ð%WÓXÐXñ   ¨Q¡× 6Ñ 6Ó7¸1Ñ<Üœ˜\¨!™_×0Ñ0Ó1°AÑ5ñ7àñð ˜‰OÖð
 ˜!‰_×#Ñ#¤{Ò2Ü×Ñ 'Ò)Ü$Ø(¨°a©×)?Ñ)?Ð(@Ð@VÐWóð ô ˜l¨1™o×4Ñ4´eÔ<Ü$Ø(¨°a©×)?Ñ)?Ð(@ð AÜ ¨Q¡× 6Ñ 6Ó7Ð8ð:óð ô �< ‘?×)Ñ)Ó*¨aÒ/Ü$Ø(¨°a©×)?Ñ)?Ð(@ð A%Ü%(¨°a©×)?Ñ)?Ó%@Ð$AðCóð ô ô à(¨™O×2Ñ2ôó ˆIð $-¨Q¡<°1Ñ#4¸À1¹ÈÑ9JÑ"KˆL˜‰OÖØ˜!‰_×#Ñ#¤yÑ0Ù!Ö#ä×$Ñ$¨Ò/Ø$ Q™×.Ñ.°hÑ>ð +4°LÀ±O×4JÑ4JÑ*K�L ‘OÖ'à*2°<À±?×3IÑ3IÑ*J�L ‘OÖ'Ø˜!‰_×#Ñ#¤xÑ/Ù!Ö#Ù$ \°!¡_×%;Ñ%;Ó<�ä×$Ñ$¨Ò/Ø$ Q™×.Ñ.°-Ò?à˜A‘I�Cà˜4‘K�CØ&)�˜Q‘Ö#Ø˜!‰_×#Ñ#¤xÑ/Ù!Ö#Ø&/°¸Q±×0FÑ0FÑ&G�˜Q‘Ö#Ø˜!‰_×#Ñ#¤yÓ0ð ˜A‰×"Ñ"Ò*ä% l°LÀ±O×4JÑ4JÓK�Ø˜’7Ü(Ø<¸\È!¹_×=SÑ=SÐ<TÐUóð ð '*�˜Q‘Ö#ñGc*ùóS Mùó& Wùó
øô ò ÛðüâQùò
s/   ˜XÁ-X
ÂXÃXÃ-X'Ä
X,Ø	X$Ø#X$c                 óö   — | D ]t  }|j                   t        usŒ|j                  t        v s7|j                  t        v s%|j                  t
        v s|j                  t        v sŒ_|j                  dvsŒnd |_        Œv y )N)ra   r`   rb   )	r9   rZ   r6   r  r	  r
  r  r7   r8   )r5  rt   s     r$   Úclear_instruction_argsr  Ô  sc   € ð ò ˆà�K‰Kœ|Ò+à—‘œyÑ(Ø—;‘;¤(Ñ*Ø—;‘;¤(Ñ*Ø—;‘;¤)Ò+à—‘Ð#RÒRàˆD�Hñr&   c                  óN  — dg} | j                  d«       | j                  g d¢«       t        j                  dk\  r| j                  d«       | j                  d«       | j                  d«       t        j                  dk\  r| j                  d«       | j                  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   )ri  s    r$   Úget_code_keysr  å  s—   € ð
 ˆ?€DØ‡K�KÐ$Ô%Ø‡K�Kò	
ôô ×Ñ˜7Ò"Ø�‰�MÔ"Ø‡K�KÐ Ô!Ø‡K�K�ÔÜ
×Ñ˜7Ò"à�‰Ð'Ô(Ø‡K�KàØð	
ôð €Kr&   Útransformationsr   rí  c                 ó$  — t        «       }|D �ci c]  }|t        | |«      “Œ }}t        |d   «      |d   k7  r t        dt        |d   «      › d|d   › �«      ‚t	        | |«      }t        |«        |||«      }t        |||«      \  }}	|	|fS c c}w )NrÃ  r  zco_varnames length z does not match co_nlocals )r  Úgetattrr  r}   Úcleaned_instructionsr   Úclean_and_assemble_instructions)
r<  r  rí  ri  Úkrò  r5  Útracer_outputrA  Úbytecodes
             r$   rî  rî  
  sº   € ô ‹?€DØ15Ö6¨A�A”w˜t QÓ'Ñ'Ð6€LÐ6Ü
ˆ<˜Ñ&Ó'¨<¸Ñ+EÒEÜØ!¤# l°=Ñ&AÓ"BÐ!Cð D Ø ,¨\Ñ :Ð;ð=ó
ð 	
ô
 (¨¨dÓ3€Lä˜Ô%á# L°,Ó?€MÜ1°,ÀÀlÓS�K€A€xØ�]Ð"Ð"ùò 7s   �Bri  c           	      ó>  — t        | «       t        | «       t        |d   «      |d<   d }t        j                  dk\  r/t        j                  |D �cg c]  }||   ‘Œ	 c}Ž }|j                  }t        | ||¬«       d}|r-t        | «       t        | «       t        t        | «      «      }|rŒ-t        | «       t        | |d   «      \  }}||d<   ||d<   t        | «      |d	<   t!        |«      d
hz
  t!        |j#                  «       «      d
hz
  k7  r9t%        dt!        |«      d
hz
  › dt!        |j#                  «       «      d
hz
  › �«      ‚t        j                  dk\  rt'        t)        | «      «      |d<   | t        j                  |D �cg c]  }||   ‘Œ	 c}Ž fS c c}w c c}w )NrÃ  r  rU   )r÷  Tr  r  rï  r  r  z%code_options keys mismatch: expected z, got r  )r¼  r‹  r  rr   rs   ÚtypesÚCodeTypeÚ_varname_from_opargr  rY  r]  r1   rÎ  r   rB  r   rW  ri  r}   r4  r~  )	r5  ri  rò  r÷  r$  Útmp_codeÚdirtyr&  r=  s	            r$   r#  r#  "  s¼  € ô ,¨LÔ9ä$ \Ô2ä!$ \°-Ñ%@Ó!A€L�ÑØÐÜ
×Ñ˜7Ò"ä—>‘>¸TÖ#B¸ L°£OÒ#BÐCˆØ%×9Ñ9ÐÜˆ\˜<Ð<NÕOà€EÙ
Ü�|Ô$Ü˜<Ô(äÔ& |Ó4Ó5ˆò	 ô ˜<Ô(Ü ¨lÐ;KÑ.LÓMÑ€Hˆfà#)€L�Ñ Ø&€L�ÑÜ#5°lÓ#C€L�Ñ Ü
ˆ4ƒyÐ(Ð)Ñ)¬S°×1BÑ1BÓ1DÓ-EØðIñ .ò ô Ø3´C¸³IÐAUÐ@VÑ4VÐ3Wð XÜ�|×(Ñ(Ó*Ó+Ð/CÐ.DÑDÐEðGó
ð 	
ô ×Ñ˜7Ò"Ü,DÜ# LÓ1ó-
ˆÐ(Ñ)ð œŸ™À4Ö)H¸a¨,°q«/Ò)HÐIÐIÐIùò; $Cùò: *Is   ÁFÆF
Úconstsc                 óZ   — | D ]&  }|j                   dk(  sŒ||j                     |_        Œ( y )NÚKW_NAMES)r7   r8   r9   )r5  r-  rt   s      r$   Úpopulate_kw_names_argvalr0  M  s-   € Øò +ˆØ�;‰;˜*Ó$Ø  §¡Ñ*ˆD�Kñ+r&   c                 ó0   — t        | |«      }t        |«      S rA   )Ú_cached_cleaned_instructionsÚ_clone_instructions©r<  rí  r5  s      r$   r"  r"  U  s   € Ü/°°dÓ;€Lô ˜|Ó,Ð,r&   c                 óV  — | D �cg c]…  }t        |j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  «      ‘Œ‡ }}t        t        | |«      «      }d |d <   |D ]t  }||j                     |_	        |j                  x}sŒ&t        ||j                     ||j                      ||j                     |j"                  |j$                  «      |_
        Œv |S c c}w rA   )r   r6   r7   r8   r9   r:   r;   r<   r=   r   r>   r?   Údicträ  r   r   r   r   r   )r5  rO   ÚcopiedÚremapr2  s        r$   r3  r3  ]  s
  € ð" öð ô 	Ø�H‰HØ�H‰HØ�E‰EØ�H‰HØ�H‰HØ�M‰MØ×ÑØ�K‰KØ�H‰HØ�O‰OØ�I‰Iõ	
ð€Fð ô" ”�\ 6Ó*Ó+€Eà€Eˆ$�Kàò 	ˆØ˜Ÿ™‘?ˆŒØ—O‘OÐ#ˆ5Ñ#Ü4Ø�e—k‘kÑ"Ø�e—i‘iÑ Ø�e—l‘lÑ#Ø—‘Ø—‘óˆA�Oð	ð €Mùò?s   …B
D&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\  rGt#        |«       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   r0  rô  rm  r  rK  r�  r”  rÇ  rŸ  r£  r±  r   Ú&debug_force_graph_break_on_leaf_returnr¶  rY  r]  r4  s      r$   r2  r2  ‚  s  € ô œÔ/´×1EÑ1EÀdÓ1KÓLÓM€Lä˜Ô%Ü�,ÔÜ
×Ñ˜7Ò"Ü  ¨t¯~©~Ô>Ü" 4×#9Ñ#9¸<ÔHÜ�\Ô"Ü˜Ô%ÙÜ×Ñ˜gÒ%Ü# LÔ1Ü×Ñ˜gÒ%Ü˜4 Ô.Ü×Ñ˜wÒ&Ü Ô-Ü×Ñ 7Ò*Ü)¨,Ô7Ü×Ñ 7Ò*Ü'¨Ô5Ü×8Ò8Ü0°Ô>Ü
×Ñ˜7Ò"Ü�|Ô$Ü˜<Ô(ØÐr&   Ú	with_uuidc                 ó†   — | › dt        t        «      › �}|r*|dt        j                  «       › �j	                  dd«      z  }|S )NrA  ú-)r"  Ú_unique_id_counterÚuuidÚuuid4rP  )r^   r<  Úrets      r$   Ú	unique_idrC  ¥  sE   € ØˆF�!”DÔ+Ó,Ð-Ð
.€CÙØ�”4—:‘:“<�.Ð!×)Ñ)¨#¨sÓ3Ñ3ˆØ€Jr&   c                 ó*   — d}| j                   |z  dkD  S )Né    r   )r  )r<  Úco_generators     r$   Úis_generatorrG  ¬  s   € Ø€LØ�M‰M˜LÑ(¨AÑ-Ð-r&   ÚfnÚvarname_mapÚnoreturnÚnoprefixc                 ó°  — t        | j                  «      }t        |«       |r,t        |«      D ]  \  }}|j                  dk(  sŒ||dz   d } n |D ]6  }d|_        d|_        |sŒ|j                  |v sŒ#||j                     |_        Œ8 |�rÉt        j                  dk\  rvg }|D ]m  }|j                  dk(  rKt        j                  d   |_        d|_        |j                  |«       |j                  t        d«      «       Œ]|j                  |«       Œo |}g }|D ]#  }|j                  dk(  sŒ|j                  |«       Œ% t        |«      dk(  r|d   |d	   u r|j!                  d	«       |S t        |«      dkD  rÝ|d	   |d	   u rOd
|d	   _        t        j                  d
   |d	   _        d|d	   _        t$        |d	   _        |j!                  d	«       n|j                  t        d
«      «       |D ]e  }t'        |d	   «      }	|	j                  |_        |	j                  |_        |	j"                  |_        |	j                  |_        |	j(                  |_        Œg |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´  )r"  Ú__code__r  r:  r7   r;   r=   r9   rr   rs   ri   rj   r6   r°   rl   r  rw  r8   rZ   ru   r   )
rH  rI  rJ  rK  r    rO   rt   r�  ÚreturnsÚ	jump_insts
             r$   Úbytecode_from_templaterS  ±  sN  € ôN ! §¡Ó-€EÜ˜5Ô!áÜ  Ó'ò 	‰GˆAˆtØ�{‰{˜hÓ&Ø˜a !™e˜g˜�Ùð	ð
 ò 3ˆð  ˆÔØˆŒÚ˜4Ÿ;™;¨+Ò5Ø% d§k¡kÑ2ˆD�Kð3ò Ü×Ñ˜wÒ&àˆIØò +�Ø—;‘; .Ò0Ü"%§)¡)¨LÑ"9�D”KØ".�D”KØ×$Ñ$ TÔ*à×$Ñ$Ô%7¸Ó%GÕHà×$Ñ$ TÕ*ð+ð ˆEð ˆØò 	%ˆDØ�{‰{˜nÓ,Ø—‘˜tÕ$ð	%ô ˆw‹<˜1Ò ¨¡¨u°R©yÑ!8à�I‰I�bŒMð0 €Lô/ �‹\˜AÒð �R‰y˜G B™KÑ'Ø#(��b‘	Ô Ü#&§9¡9¨UÑ#3��b‘	Ô Ø $��b‘	”Ü#/��b‘	Ô Ø—‘˜B•à—‘Ô/°Ó6Ô7ð  ò /�ô 1°°r±Ó;�	Ø'×.Ñ.�”Ø'×.Ñ.�”Ø$Ÿ=™=�”Ø'×.Ñ.�”Ø'×.Ñ.�•ð/ð €Lr&   )T)FrA   )NTT)„rK   rk  Údataclassesri   Ú	functoolsr¸  rr   r(  r@  Ú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í   rj  r  r  r  r  r  r  r#  r&  r1  r.  r4  rB  r6  rF  rK  rW  rI  rR  rS  rU  r]  rm  r~  r�  r†  r‹  r�  r‘  r”  rŸ  r£  r¬  r±  r¶  r¼  r)  rÇ  rÎ  r;  r×  rY  ré  rñ  Úhaslocalr  Úhasnamer	  Úhasfreer
  Úhasconstr  rö  r  r  Ú	lru_cacher  rî  r#  r0  r"  r3  r2  r  r?  rC  rG  rS  r4   r&   r$   ú<module>rb     s  ðñó Û Û 
Û Û Û 
Û Û ß KÕ Kß 5Ó 5å ÷ó õ $ñ Ý0ð €×Ñ˜TÔ"÷
ð 
ó #ð
ð6 €×Ñ˜TÔ"÷)ð )ó #ð)ð> ×Ñ�wÒð

˜sŸ™ð 

°;ô 

ð 	×Ñ˜Ò ð

˜sŸ™ð 

°;ô 

ð

˜sŸ™ð 

°;ó 

÷ñ ð
 ×Ñ�wÒðG˜sð G tô Gð 	×Ñ˜Ò ð%˜sð % tô %ð
˜sð  tó ð Ø%Ø!%ò'Ø
ð'ð 
ˆt‰ð'ð �$‰Jð	'ð
 ˜$Ñð'ð ó'ðV3 ð 3°ó 3ð
>˜[ð >¨Tó >ñ	8˜3ð 	8¨ð 	8¸ó 	8ð˜4 Ñ,ó ð$)˜ó )ð0�Cð 0˜D Ñ-ó 0ð.=Ø  kÑ!2Ñ2ð=à	ˆ+Ñó=ð@!Ø  kÑ!2Ñ2ð!à	ˆ+Ñó!ðH4< ð 4<°ð 4<¸¸kÑ9Jó 4<ðp GLñIØðIØ!%ðIØ?CðIà	ˆ+ÑóIðD:˜cð : d¨;Ñ&7ó :ð:˜Sð : [ó :ð5˜kð 5¨kó 5ð
+�3ð +˜4 Ñ,ó +ð\,> Cð ,>¨cð ,>°có ,>ð` 7<ñ
Ø�‰:ð
Ø $™Jð
Ø/3ð
à	ˆ+Ñó
ð>�3ð ˜4 Ñ,ó ð( ð ¨¨kÑ):ó ð˜cð  d¨;Ñ&7ó ð3˜kó 3ð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¡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ñ �—‘Ó€
ð
 [ð 
°Tó 
ð ¨¨kÑ):ð Àð Èó ð>1 T¨+Ñ%6ð >1¸4ó >1ðB0Øð0Ø(,¨[Ñ(9ð0à	ó0ðf[Ø�{Ñ#ð[à	Ð
Ñó[ð| Ø	Ð$Ñ	%ð Ø04°[À#Ð5EÑ0Fð à	ó ð.=°4¸Ñ3Dð =Èó =ð<&°4¸Ñ3Dð &Èó &ðRP d¨;Ñ&7ð P¸Dó 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ðF�u—~‘~ð F¨$ó Fñ �—‘Ó€	Ùˆs�{‰{Ó€Ùˆs�{‰{Ó€Ù�—‘Ó€	ð	. $ s¨C x¡.ð 	.°sð 	.¸só 	.ð 59ñR*Ø�{Ñ#ðR*à�s˜C�x‘.ðR*ð !  c Ñ*¨TÑ1ð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™nÐ,Ñ-ó(JðV+¨8°KÑ+@ð +È#ð +ÐRVó +ñ-˜uŸ~™~ð -°Tð -ÀdÈ;ÑFWó -ð" h¨{Ñ&;ð "ÀÀ[Ñ@Qó "ðJ ×Ñà',ñØ
�.‰.ðØ $ðàˆkÑòó ðð> %�Y—_‘_Ó&Ð ñ�Cð  Dð °Só ð.�u—~‘~ð .¨$ó .ð -1ØØñ	gØ��c�Ñðgà˜˜c˜Ñ" TÑ)ðgð ðgð ð	gð
 
ˆ+Ñôgr&   