Ë
    P/æj}Ö  ã                   óš  — 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mZmZmZmZ ddlmZmZmZmZ ej*                   G d„ d«      «       Zej*                   G d„ d«      «       Zd	ej.                  d
efd„Z G d„ d«      Zd„ Zdeddœd
efd„Zd
efd„Zd
efd„Zd
ee   fd„Zdeeee   f   d
ee   fd„Zdeeee   f   d
ee   fd„Z d
ee   fd„Z!d
ee   fd„Z"d
efd„Z#d
efd„Z$d
ee   fd„Z%	 d^de&de&d
eee&   ee&e&gdf   f   fd„Z'd„ Z(d e&d
ee&   fd!„Z)d"e&fd#„Z*ej*                   G d$„ d%«      «       Z+d e&d
ee&   fd&„Z,d'ee&   d
e&fd(„Z-d)ee+   d
dfd*„Z.d+e/d
ee+   fd,„Z0d)ee+   d
e/fd-„Z1d.ee   d/e&d
ee/e/f   fd0„Z2d1e
e&ef   d2e&fd3„Z3d_d4„Z4 e5ejl                  «      Z7d5ed
dfd6„Z8d.ee   d7e&fd8„Z9d9„ Z:d:e/d.ee   fd;„Z;d.ee   d
ee+   fd<„Z<d)ee   d
dfd=„Z=d.ee   d
dfd>„Z>d.ee   fd?„Z?d.ee   d
dfd@„Z@d.ee   d
ee   fdA„ZAd.ee   d
dfdB„ZBd.ee   d
dfdC„ZCdDdEdFdGœZDd.ee   d
dfdH„ZEdIejŒ                  d.ee   d
dfdJ„ZGd.ee   d
e&fdK„ZHd
e&fdL„ZId_dM„ZJd_dN„ZKd
eLfdO„ZMdP„ ZN e5ejž                  «      ZP e5ej¢                  «      ZR e5ej¦                  «      ZT e5ejª                  «      ZVd
e&fdQ„ZWd`d.ee   fdR„ZXdS„ ZYd
eeL   fdT„ZZdad
ejŒ                  fdU„Z[d.ee   dVeeL   dWe
eLef   d
eee   ejŒ                  f   fdX„Z\dY„ Z]dad
ee   fdZ„Z^ ej¾                  «       Z`d
eLfd[„ZadIejŒ                  d
ebfd\„Zcdbd]„Zdy)cé    N)	ÚAnyÚCallableÚcastÚDictÚIteratorÚListÚOptionalÚTupleÚUnioné   )Úget_indexofÚpropagate_line_numsÚremove_extra_line_numsÚstacksize_analysisc                   óX   — 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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=z, end=z	, target=z, depth=z, lasti=ú))r   Úshort_inst_reprr   r   r   r   ©Úselfs    úh/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/bytecode_transformation.pyÚ__repr__zInstructionExnTabEntry.__repr__   sl   € à+¨D¯J©J×,FÑ,FÓ,HÐ+Ið JØ—8‘8×+Ñ+Ó-Ð.ð /Ø—k‘k×1Ñ1Ó3Ð4ð 5Ø—Z‘Z�L ¨¯©¨°Að7ð	
ó    c                 ó  — | j                   |j                   u xrh | j                  |j                  u xrN | j                  |j                  u xr4 | j                  |j                  k(  xr | j                  |j                  k(  S ©N)r   r   r   r   r   )r   Úos     r   Ú__eq__zInstructionExnTabEntry.__eq__"   so   € à�J‰J˜!Ÿ'™'Ð!ò &Ø—‘˜AŸE™EÐ!ò&à—‘˜qŸx™xÐ'ò&ð —
‘
˜aŸg™gÑ%ò&ð —
‘
˜aŸg™gÑ%ð	
r!   N)	Ú__name__Ú
__module__Ú__qualname__Ú__annotations__ÚintÚboolÚstrr    r%   © r!   r   r   r      s6   … àÓØ	ÓØÓØƒJØƒKð
˜#ó 
ð
˜4ô 
r!   r   c                   óÖ   — e Zd ZU dZeed<   eed<   ee   ed<   eed<   dZ	ee   ed<   dZ
ee   ed<   d	Zeed
<   dZed   ed<   dZed    ed<   dZee   ed<   defd„Zdefd„Zdefd„Zy)r   z$A mutable version of dis.InstructionÚopcodeÚopnameÚargÚargvalNÚoffsetÚstarts_lineFÚis_jump_targetúdis.PositionsÚ	positionsr   Úexn_tab_entryr   c                 ó   — t        | «      S r#   ©Úidr   s    r   Ú__hash__zInstruction.__hash__<   s   € Ü�$‹xˆr!   c                 ó0   — t        | «      t        |«      k(  S r#   r:   )r   Úothers     r   r%   zInstruction.__eq__?   s   € Ü�$‹xœ2˜e›9Ñ$Ð$r!   c                 ó<   — d| j                   › d| j                  › d�S )NzInstruction(opname=z	, offset=r   )r0   r3   r   s    r   r   zInstruction.short_inst_reprB   s   € Ø$ T§[¡[ M°¸4¿;¹;¸-ÀqÐIÐIr!   )r&   r'   r(   Ú__doc__r*   r)   r,   r	   r   r3   r4   r5   r+   r7   r   r8   r   r<   r%   r   r-   r!   r   r   r   ,   s˜   … á.àƒKØƒKØ	�#‰ÓØƒKØ €FˆH�S‰MÓ Ø!%€K�˜#‘Ó%Ø €N�DÓ Ø+/€Iˆx˜Ñ(Ó/à&*€FˆH�]Ñ#Ó*Ø6:€M�8Ð2Ñ3Ó:ð˜#ó ð%˜tó %ðJ ô Jr!   r   Úir   c                 ó  — t         j                  dk\  r| j                  }n| j                  }t	        | j
                  | j                  | j                  | j                  | j                  || j                  t        | dd «      «      S )N©é   é   r7   )ÚsysÚversion_infoÚline_numberr4   r   r/   r0   r1   r2   r3   r5   Úgetattr)rA   r4   s     r   Úconvert_instructionrJ   F   sj   € Ü
×Ñ˜7Ò"Ø—m‘m‰à—m‘mˆÜØ	�‰Ø	�‰Ø	�‰Ø	�‰Ø	�‰ØØ	×ÑÜ��; Ó%ó	ð 	r!   c                   ó   — e Zd Zdefd„Zy)Ú_NotProvidedr   c                  ó   — y)NrL   r-   r   s    r   r    z_NotProvided.__repr__X   s   € Ør!   N)r&   r'   r(   r,   r    r-   r!   r   rL   rL   W   s   „ ð˜#ô r!   rL   c                 ól   — t         j                  dk\  xr | dk(  xs t         j                  dk\  xr | dv S )N©rD   é   ÚLOAD_GLOBAL©rD   é   )Ú	LOAD_ATTRÚLOAD_SUPER_ATTR©rF   rG   ©Únames    r   Úinst_has_op_bitsrY   \   s=   € Ü×Ñ Ñ'ÒA¨D°MÑ,Aò Ü×Ñ˜GÑ#ÒP¨Ð0PÐ(Pðr!   )r1   r2   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)r/   r0   r1   r2   r   )rY   ÚRuntimeErrorrL   Ú
isinstancer*   r   ÚdisÚopmap)rX   r1   r2   r   Úcnts        r   Úcreate_instructionr`   b   s™   € ô( ˜ÔØÐÜÐ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 )NrO   ÚJUMP_FORWARDÚJUMP_ABSOLUTE©r   ©rF   rG   r`   )r   Úinsts     r   Úcreate_jump_absoluterg   ‰   s#   € Ü ×-Ñ-°Ò8‰>¸o€DÜ˜d¨6Ô2Ð2r!   c                  óX   — t         j                  dk\  rt        dd¬«      S t        d«      S )NrO   ÚCOPYr   ©r1   ÚDUP_TOPre   r-   r!   r   Úcreate_dup_toprl   Ž   s(   € Ü
×Ñ˜7Ò"Ü! &¨aÔ0Ð0Ü˜iÓ(Ð(r!   c                 ó|  — | dk  rg S t         j                  dk\  r&t        | dd«      D �cg c]  }t        d|¬«      ‘Œ c}S t         j                  dk  r| dk\  rt	        d| › d	�«      ‚t         j                  d
k  r| dk\  rt	        d| › d�«      ‚| 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   rO   éÿÿÿÿÚSWAPrj   )rD   é   é   zrotate z not supported for Python < 3.8©rD   é
   é   z  not supported for Python < 3.10ÚROT_)ÚTWOÚTHREEÚFOURé   ÚROT_N)rF   rG   Úranger`   ÚAttributeError)ÚnrA   s     r   Úcreate_rot_nr~   ”   sÐ   € ð 	ˆA‚vàˆ	ä
×Ñ˜7Ò"ô <AÀÀAÀr»?ÖK°aÔ" 6¨qÖ1ÒKÐKô ×Ñ˜&Ò  Q¨!¢VÜ˜w q cÐ)HÐIÓJÐJÜ
×Ñ˜'Ò! a¨1¢fÜ˜w q cÐ)IÐJÓKÐKàˆA‚vÜ" 6Ò,DÀQÈÁUÑ,KÑ#KÓLÐMÐMÜ˜w¨AÔ.Ð/Ð/ùò Ls   ªB9Úinst_or_instsc                 ó`  ‡— t        | t        «      r| gŠn| Šˆfd„}ˆ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.
    c                 óP   •— ‰|    j                   €J ‚‰|    j                   dz  dk(  S ©Nr   rj   ©ÚidxÚinstss    €r   Úinst_has_bit_setz'add_push_null.<locals>.inst_has_bit_setÇ   s/   ø€ Ø�S‰z�~‰~Ð)Ð)Ð)Ø�S‰z�~‰~ Ñ! QÑ&Ð&r!   c                 óX   •— ‰|    j                   €J ‚‰|    xj                   dz  c_         y r‚   rj   rƒ   s    €r   Úset_inst_bitz#add_push_null.<locals>.set_inst_bitË   s)   ø€ Ø�S‰z�~‰~Ð)Ð)Ð)Øˆc‰
�Š˜!ÑŽr!   rC   rn   Ú	PUSH_NULLrR   r   rQ   rO   )r\   r   rF   rG   rY   r0   r`   )r   r†   rˆ   r…   s      @r   Úadd_push_nullrŠ   ±   sI  ø€ ô" �-¤Ô-Ø�‰àˆô'ôô ×Ñ˜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        j                  dk  r|S t        j                  dk\  rdnd}||   j                  dk(  r@||   j
                  €J ‚||   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.
    rO   rC   rn   r   rQ   r   r‰   )r\   r   rF   rG   r0   r1   r`   )r   r…   r„   s      r   Úadd_push_null_call_function_exrŒ   ë   sÔ   € ô �-¤Ô-Ø�‰àˆä
×Ñ˜'Ò!Øˆä× Ñ  GÒ+‰"°€CØˆS�z×Ñ˜MÒ)Ø�S‰z�~‰~Ð)Ð)Ð)Ø�‰:�>‰>˜AÑ Ò"Ø�#‰J�NŠN˜aÑ�NØˆLä
×Ñ˜7Ò"ØÔ+¨KÓ8Ð9Ñ9ˆð €Lô $ KÓ0Ð1°EÑ9ˆà€Lr!   c                 óˆ  — 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),
            )
    rO   r‰   rC   r   ry   rR   ÚPRECALLrj   ÚCALLÚCALL_FUNCTION)rF   rG   Úappendr`   Úextendr~   )ÚnargsÚ	push_nullÚoutputÚrotss       r   Úcreate_call_functionr—     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!   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 )NrR   r�   rj   rO   rŽ   ÚCALL_METHODre   )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 )NrR   rT   r   )r1   r2   ÚLOAD_METHOD©r2   re   rW   s    r   Úcreate_load_methodrž   J  s,   € Ü
×Ñ˜7Ò"ä! +°1¸TÔBÐBÜ˜m°DÔ9Ð9r!   c                 óJ   — t         j                  dk\  rdnd}t        || ¬«      S )NrO   ÚBEFORE_WITHÚ
SETUP_WITHrd   re   )r   r0   s     r   Úcreate_setup_withr¢   Q  s#   € Ü!×.Ñ.°'Ò9‰]¸|€FÜ˜f¨VÔ4Ð4r!   c                 ó’  — t         j                  dk\  rt        d| ¬«      gS | dk(  rg S 	 t        d| dz
  ¬«      t        d«      t        dd¬	«      t        d
«      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 )NrO   ro   rj   r   Ú
BUILD_LISTrk   Ú
LOAD_CONSTrn   r�   ÚBINARY_SUBSCRÚ	ROT_THREEÚSTORE_SUBSCRÚreverser   ÚPOP_TOPÚUNPACK_SEQUENCE)rF   rG   r`   rž   rš   )r}   s    r   Úcreate_swapr¬   V  sÓ   € Ü
×Ñ˜7Ò"Ü" 6¨qÔ1Ð2Ð2àˆA‚vØˆ	ðô& 	˜<¨Q°©UÔ3Ü˜9Ó%Ü˜<°Ô3Ü˜?Ó+Ü˜;Ó'Ü˜9Ó%Ü˜;Ó'Ü˜<°Ô3Ü˜>Ó*Ü˜9Ó%Ü˜9Ó%ðô 
˜AÓ	ðô 	˜9Ó%ðô 	Ð,°!°a±%Ô8ðð r!   ÚlinenoÚbytenoc                 óL   ‡ ‡‡— t         j                  dk  sJ ‚g Šˆˆ ˆfd„}‰|fS )zÉ
    Used to create typing.CodeType.co_lnotab
    See https://github.com/python/cpython/blob/main/Objects/lnotab_notes.txt
    This is the internal format of the line number table if Python < 3.10
    rr   c                 óð   •— |‰k7  s| ‰k7  rkt        dt        |‰z
  d«      «      }t        dt        | ‰z
  d«      «      }|dk7  s|dk7  sJ ‚‰|z  Š‰|z  Š‰j                  ||dz  f«       |‰k7  rŒd| ‰k7  rŒjy y )Nr   éÿ   i€ÿÿÿé   ©ÚmaxÚminr’   )Ú
lineno_newÚ
byteno_newÚbyte_offsetÚline_offsetr®   r­   Úlnotabs       €€€r   Úupdatezlnotab_writer.<locals>.update‹  s’   ø€ à˜FÒ" j°FÒ&:Ü˜a¤ Z°&Ñ%8¸#Ó!>Ó?ˆKÜ˜d¤C¨
°VÑ(;¸SÓ$AÓBˆKØ !Ò# {°aÒ'7Ð7Ð7Ø�kÑ!ˆFØ�kÑ!ˆFØ�M‰M˜;¨°dÑ(:Ð;Ô<ð ˜FÓ" j°FÕ&:r!   rV   )r­   r®   r»   rº   s   `` @r   Úlnotab_writerr¼   €  s/   ú€ ô ×Ñ˜gÒ%Ð%Ð%Ø€Fö=ð �6ˆ>Ðr!   c                 óž   ‡‡‡‡‡— t         j                  dk\  rt         j                  dk  sJ ‚g Š| ŠdŠdŠˆfd„Šˆˆˆˆfd„}ˆˆˆ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
    rr   rO   r   c                 óä   •— | dk7  s|dk7  ret        dt        | d«      «      }t        dt        |d«      «      }|dk7  s|dk7  sJ ‚| |z  } ||z  }‰j                  ||dz  f«       | dk7  rŒ^|dk7  rŒdy y )Nr   éþ   i�ÿÿÿr²   r±   r³   )Úbyteno_deltaÚlineno_deltar¸   r¹   Ú	linetables       €r   Ú_updatez%linetable_310_writer.<locals>._update¤  sŠ   ø€ Ø˜aÒ <°1Ò#4Ü˜a¤ \°3Ó!7Ó8ˆKÜ˜d¤C¨°cÓ$:Ó;ˆKØ !Ò# {°aÒ'7Ð7Ð7Ø˜KÑ'ˆLØ˜KÑ'ˆLØ×Ñ˜k¨;¸Ñ+=Ð>Ô?ð ˜aÓ <°1Õ#4r!   c                 ó4   •— |‰z
  }|Š ‰|‰«       | ‰z
  Š| Šy r#   r-   )r¶   r·   rÀ   rÃ   r®   r­   rÁ   s      €€€€r   r»   z$linetable_310_writer.<locals>.update­  s+   ø€ à! FÑ*ˆØˆÙ�˜lÔ+Ø! FÑ*ˆØ‰r!   c                 ó   •—  ‰| ‰z
  ‰«       y r#   r-   )Útotal_bytesrÃ   r®   rÁ   s    €€€r   r   z!linetable_310_writer.<locals>.endµ  s   ø€ Ù�˜fÑ$ lÕ3r!   rV   )Úfirst_linenor»   r   rÃ   r®   r­   rÁ   rÂ   s      @@@@@r   Úlinetable_310_writerrÈ   ˜  sY   ü€ ô ×Ñ˜wÒ&¬3×+;Ñ+;¸gÒ+EÐEÐEØ€IØ€FØ€LØ€Fô@÷ö4ð �f˜cÐ!Ð!r!   r}   c                 óŒ   — | dk\  sJ ‚| 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   é?   é   rn   é@   )r‘   )r}   Úbs     r   Úencode_varintrÎ   »  s`   € ð
 �Š6€Mˆ6Ø	
ˆR‰ˆ€AØˆ!�G€AØ
ˆaŠ%Ø	ˆ"‹�‰‹Ø	�‰��R‘ÔØ	ˆa‰ˆð ˆa‹%ð €Hr!   rÇ   c                 óN   ‡‡— t         j                  dk\  sJ ‚g Š| Šdˆˆ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
    rO   c                 ó�   •‡ — ‰ r‰ j                   nd }ˆˆ fd„}|€d}n|‰z
  }|Š|dkD  r ||d«       |dz  }|dkD  rŒ |||«       y )Nc                 óö  •— d|cxk  rdk  sJ ‚ J ‚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   rp   r-   éð   r   éè   )r­   Ú
end_linenoÚ
col_offsetÚend_col_offsetr‘   r’   rÎ   )ÚdeltaÚsizeÚother_varintsr}   rÂ   r7   s       €€r   rÃ   z5linetable_311_writer.<locals>.update.<locals>._updateØ  s  ø€ Ø�t”=˜q’=Ð ‘=Ð �=ð .0ˆMáØ×$Ñ$Ð0Ø×(Ñ(Ð4Ø×(Ñ(Ð4Ø×,Ñ,Ð8à× Ñ  °Ñ!4°qÑ!8Ô9ð ×(Ñ(¨9×+;Ñ+;Ñ;Ø×(Ñ(¨1Ñ,Ø×,Ñ,¨qÑ0ð!‘ð × Ñ  °Ñ!4°qÑ!8Ô9à�qŠyØ ˜& Q™¨!Ñ+‘à˜!‘�à×Ñœ]¨5Ó1Ô2Ø"ò 3�Ø× Ñ ¤¨qÓ!1Õ2ñ3r!   r   rp   )r­   )r7   Ú	inst_sizer¶   rÃ   rÁ   r­   rÂ   s   `    €€r   r»   z$linetable_311_writer.<locals>.updateÔ  sc   ù€ á)2�Y×%Ò%¸ˆ
õ	3ð@ ÐØ‰Là%¨Ñ.ˆLØˆFØ˜!ŠmÙ�L !Ô$Ø˜‰NˆIð ˜!‹mñ 	�˜iÕ(r!   )r7   r6   rV   )rÇ   r»   r­   rÂ   s     @@r   Úlinetable_311_writerrÛ   Ê  s6   ù€ ô ×Ñ˜wÒ&Ð&Ð&Ø€IØ€Fö,)ð\ �fÐÐ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(   r*   r)   r+   r-   r!   r   rÝ   rÝ     s   … àƒJØ	ƒHØƒKØƒJØ„Kr!   rÝ   c                 óä   — | dk\  sJ ‚| 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   rÊ   rË   r   rÌ   )r‘   r©   r{   Úlen)r}   rÍ   rA   s      r   Úencode_exception_table_varintrà     s…   € ð �Š6€Mˆ6Ø	
ˆ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Í   Úvals      r   Údecode_exception_table_varintrå     sN   € ô 	ˆZÓ€AØ
ˆb‰&€CØ
ˆbŠ&Ø�‰	ˆÜ�ÓˆØˆq�2‰v‰ˆð ˆb‹&ð €Jr!   Útabc                 ó  — t        t        | «      dz
  «      D ]j  }| |   j                  | |   j                  k  rH| |   j                  | |dz      j                  k  r&| |dz      j                  | |dz      j                  k  rŒjJ ‚ 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   N)r{   rß   r   r   )ræ   rA   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ð	
ð3ñ
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
    ry   r   )Úiterrå   r+   r‘   rÝ   ÚStopIterationrè   )
ré   Úexntab_iterræ   r   Úlengthr   r   Údlr   r   s
             r   Úparse_exception_tablerð   8  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.
    ry   r   é€   r   )rà   r   r’   r   r   r   r   Úbytes)ræ   rÍ   ÚentryÚfirst_entryrî   rï   s         r   Úassemble_exception_tablerö   N  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                 ó°  — 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         j                  d	k  rt        |«      \  }}nt        |«      \  }}}| D ]Z  }|j                  � ||j                  t        |«      «       |j                  xs d}
|j                  |j                  |
dz  f«       Œ\ t         j                  d	k\  r t        |«      «       t        |«      t        |«      fS )
z)Do the opposite of dis.get_instructions()rO   r   ÚEXTENDED_ARGr   ©r   ry   rD   ry   r±   )r   r   rr   )rF   rG   rÛ   Ú	enumerater0   r7   Úinstruction_sizer1   r’   r/   r{   r¼   rÈ   r4   rß   ró   )r÷   rø   Úcoderº   Úupdate_linenoÚnum_extrA   rf   rÚ   Újr1   Ú_r   s                r   Úassembler  `  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Õ#ñ$ñ!	$ô& ×Ñ˜gÒ%Ü$1°+Ó$>Ñ!ˆF‘Mä)=¸kÓ)JÑ&ˆF�M 3à ò 	3ˆDØ×ÑÐ+Ù˜d×.Ñ.´°D³	Ô:Ø—(‘(’-˜aˆCØ�K‰K˜Ÿ™ c¨D¡jÐ1Õ2ð		3ô ×Ñ˜wÒ&Ù”�D“	ŒNä�‹;œ˜f›Ð%Ð%r!   Úoffset_to_instr3   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   ry   rq   rË   N©r/   r]   rú   )r  r3   r}   s      r   Ú_get_instruction_by_offsetr  Š  sD   € ð ò .ˆØ˜& 1™*Ñ%×,Ñ,´×0@Ñ0@Ó@Ø! &¨1¡*Ñ-Ò-ð.ð r!   c                 óø   — | D �ci c]  }|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)r3   r/   r]   ÚhasjabsÚhasjrelr  r2   r   )r÷   rf   Újump_targetss      r   Úvirtualize_jumpsr  ”  sf   € à2>Ö?¨$�D—K‘K Ñ%Ð?€LÐ?àò PˆØ�;‰;œ#Ÿ+™+Ñ%¨¯©¼¿¹Ò)CÜ4°\À4Ç;Á;ÓOˆD�KñPùò @s   …A7Ú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 sJ ‚y )NrO   z+Cannot flip jump direction in Python < 3.11ÚFORWARDÚBACKWARDz-Instruction is not a forward or backward jump)
rF   rG   r[   r0   Úreplacer|   r]   r^   r/   Ú
_REL_JUMPS)r  s    r   Úflip_jump_directionr     s¥   € Ü
×Ñ˜'Ò!ÜÐHÓIÐIØ�K×&Ñ&Ñ&Ø(×/Ñ/×7Ñ7¸	À:ÓNˆÕØ	�{×)Ñ)Ñ	)Ø(×/Ñ/×7Ñ7¸
ÀIÓNˆÕäÐLÓMÐMÜŸ™ ;×#5Ñ#5Ñ6€KÔØ×Ñ¤Ñ+Ð+Ñ+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.
    rû   r  )r÷   r„   r   r3   s       r   Ú_get_instruction_frontr  ­  s]   € ð
 ˜#Ñ€FØò ˆØ�&Š=˜\¨#°©,Ñ7×>Ñ>Ä#×BRÑBRÒRØ! #¨¡,Ñ/‰FàØ€Mðð
 €Mr!   c           	      ó–  — t        t        j                  «      j                  t        t        j                  «      «      }| D ]¸  }|j
                  |v sŒ|j
                  t        j                  vsŒ/|j                  j                  |j                  k  r9t        j                  dk  rt        d«      ‚d|j                  v sŒt        |«       Œ‹t        j                  dk\  sŒŸd|j                  v sŒ®t        |«       Œº t        | «       t        | «      }| D �]1  }|j
                  |v sŒt        | ||j                     «      }|j
                  t        j                  v rat        j                  dk  r|j                  |_        n t        j                  dk  rt#        |j                  dz  «      |_        not        d«      ‚t%        t#        |j                  |j                  z
  t'        |«      z
  «      «      |_        t        j                  dk\  r|xj                   dz  c_        |j                  |_        d|j                  › �|_        �Œ4 y	)
zJFill in args for virtualized jump target after instructions may have movedrO   z*Got negative jump offset for Python < 3.11r  r  rr   ry   z+Python 3.11+ should not have absolute jumpszto N)Úsetr]   r	  Úunionr
  r/   r   r3   rF   rG   r[   r0   r  Úupdate_offsetsr   r  r1   r*   Úabsrý   r2   Úargrepr)r÷   Újumpsrf   Úindexofr   s        r   Údevirtualize_jumpsr  »  sÀ  € ä”—‘Ó×"Ñ"¤3¤s§{¡{Ó#3Ó4€Eð ò 2ˆØ�;‰;˜%ÒØ�{‰{¤#§+¡+Ò-Ø—;‘;×%Ñ%¨¯©Ò3Ü×'Ñ'¨'Ò1Ü*Ð+WÓXÐXà  D§K¡KÒ/Ü+¨DÕ1ô ×'Ñ'¨7Ó2°zÀTÇ[Á[Ò7PÜ+¨DÕ1ð2ô �<Ô Ü˜,Ó'€Gð ó 1ˆØ�;‰;˜%ÒÜ+¨L¸'À$Ç+Á+Ñ:NÓOˆFØ�{‰{œcŸk™kÑ)Ü×#Ñ# gÒ-Ø%Ÿ}™}�D•HÜ×%Ñ%¨Ò/ô  # 6§=¡=°1Ñ#4Ó5�D•Hä&Ð'TÓUÐUô Ü˜Ÿ™¨¯©Ñ3Ô6FÀtÓ6LÑLÓMó�”ô ×#Ñ# wÒ.à—H’H ‘N•HØ Ÿ-™-ˆDŒKØ  §¡ Ð0ˆDŽLñ+1r!   Úexn_tab_bytesc                 óþ  ‡‡‡	‡
— t        | «      }|D �ci c]  }t        t        |j                  «      |“Œ c}Š	t	        ‰	j                  «       «      Š
dŠt        |«      Š	 ˆˆˆ	ˆ
fd„} |«       \  }}|D ]s  }|j                  |j                  kD  r$ |«       \  }}|j                  |j                  kD  rŒ$|j                  |j                  k\  sŒZt        j                  |«      |_
        Œu yc c}w # t        $ r Y yw xY w)zDReplace exception table entries with pointers to make editing easierr   c                  óv  •— t        ‰«      } ‰t        ‰«      k  r8‰‰   | j                  k  r&‰dz  Š‰t        ‰«      k  r‰‰   | j                  k  rŒ&‰dkD  sJ ‚‰‰dz
     }t        t	        ‰| j
                  «      t	        ‰|«      t	        ‰| j                  «      | j                  | j                  «      }| |fS )Nr   r   )	rã   rß   r   r   r  r   r   r   r   )rô   Ú
end_offsetÚ
inst_entryÚend_offset_idxÚexn_tab_iterr  Úoffsetss      €€€€r   Ústepz(virtualize_exception_table.<locals>.stepô  s½   ø€ ä˜Ó&ˆEð ¤ W£Ò-°'¸.Ñ2IÈUÏYÉYÒ2Và !Ñ#�ð ¤ W£Ò-°'¸.Ñ2IÈUÏYÉYÓ2Vð " AÒ%Ð%Ð%Ø  °!Ñ!3Ñ4ˆJÜ/Ü*¨>¸5¿;¹;ÓGÜ*¨>¸:ÓFÜ*¨>¸5¿<¹<ÓHØ—‘Ø—‘óˆJð ˜*Ð$Ð$r!   N)rð   r   r*   r3   ÚsortedÚkeysrë   r   r   Úcopyr8   rì   )r  r÷   Úexn_tabrf   r'  rô   r#  r$  r%  r  r&  s          @@@@r   Úvirtualize_exception_tabler,  ë  sß   û€ ä# MÓ2€GØ?KÖL°t”dœ3 §¡Ó,¨dÑ2ÒL€NÜ�^×(Ñ(Ó*Ó+€GØ€NÜ˜“=€Lð÷	%ñ, !›FÑˆˆzØ ò 	;ˆDØ—+‘+ §	¡	Ò)Ù$(£FÑ!��zð —+‘+ §	¡	Ó)à�{‰{˜eŸk™kÓ)Ü%)§Y¡Y¨zÓ%:�Õ"ñ		;ùò; MøôD ò Ùðús$   ”"C+Á AC0 Â4C0 ÃC0 Ã0	C<Ã;C<c           	      ó  ‡‡‡‡— i Št        | «      }| D ]ÿ  }|j                  sŒt        | ||j                  j                     «      j                  }t        t        |j                  j                  j                  «      t        |j                  j                  «      z   dz
  }t        | ||j                  j                     «      j                  }||f}||j                  j                  |j                  j                  f}|‰v r
‰|   |k(  sJ ‚|‰|<   �Œ t        ‰j                  «       d„ ¬«      }dŠg Šg Šˆˆˆˆfd„}	|D ]¬  }‰r&‰d   d   |d   k  r |	«        ‰r‰d   d   |d   k  rŒ‰ro‰d   d   |d   cxk  r|d   cxk  r‰d   d   k  sJ ‚ J ‚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_entriesry   c                 ó   — | d   | d    fS ©Nr   r   r-   ©Úts    r   ú<lambda>z)compute_exception_table.<locals>.<lambda>6  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   ry   N)Úpopr‘   rÝ   r´   )r4  Úexn_dictr+  Ú	key_stackÚnextis    €€€€r   r6  z$compute_exception_table.<locals>.pop=  se   ø€ ñ
 Ø—-‘-“/ˆCØ˜˜A™ŠØ—‘Ü'¬¨C°©F°EÓ(:¸CÀ¹FÐSÀXÈcÁ]ÒSôð ˜A™ ™
‘ð	 ð r!   rn   r   )r   r8   r  r   r3   r   r*   r   rý   r   r   r   r(  r)  r´   r‘   rÝ   rè   )r÷   r  rf   r   r   r   r4  rä   Úkeys_sortedr6  Úleftr7  r+  r8  r9  s              @@@@r   Úcompute_exception_tabler<    s?  û€ ð >@€HÜ˜,Ó'€Gàò  ˆØ×Óä*Ø˜g d×&8Ñ&8×&>Ñ&>Ñ?óç‰fð ô
 ”S˜$×,Ñ,×0Ñ0×7Ñ7Ó8Ü" 4×#5Ñ#5×#9Ñ#9Ó:ñ;àñð ô
 ,Ø˜g d×&8Ñ&8×&?Ñ&?Ñ@óç‰fð ð ˜#�,ˆCØ˜4×-Ñ-×3Ñ3°T×5GÑ5G×5MÑ5MÐNˆCØ�h‰Ø ‘}¨Ò+Ð+Ð+ØˆH�S‹Mð' ô6 ˜Ÿ™›Ñ.EÔF€Kà€Eà')€IØ)+€G÷#ð ò ˆá˜I b™M¨!Ñ,¨s°1©vÒ5ÙŒEñ ˜I b™M¨!Ñ,¨s°1©vÓ5áà˜R‘= Ñ# s¨1¡vÔK°°Q±ÔK¸9ÀR¹=ÈÑ;KÒKÐKÑKÐKÐKÜ�u˜i¨™m¨AÑ.Ó/ˆDØ�c˜!‘fŠ}Ø—‘Ü'¨¨c°!©f°q©jÐS¸8ÀIÈbÁMÑ;RÒSôð ˜‘FˆEØ×Ñ˜Õðñ ÙŒò ä˜'Ô"Ø€Nr!   c                 ó*  — g }| D ]Œ  }||j                      ||j                     f}|r/|d   d   |d   k  r!|j                  «        |r|d   d   |d   k  rŒ!|r(|d   d   |d   cxk  r|d   cxk  r|d   d   k  sJ ‚ J ‚|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.
    rn   r   r   N)r   r   r6  r‘   )ræ   r  Úentry_stackrô   r4  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áØ˜r‘? 1Ñ%¨¨Q©ÔO°3°q±6ÔO¸[È¹_ÈQÑ=OÒOÐOÑOÐOÐOØ×Ñ˜3Õñ r!   c                 ó  — t        | «      }i }| D ]h  }|j                  sŒ||j                  j                     ||j                  j                     f}||v r|j                  ||   k(  sJ ‚|j                  ||<   Œj 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.
    c                 ó   — | d   | d    fS r/  r-   r0  s    r   r2  z2propagate_inst_exn_table_entries.<locals>.<lambda>‚  s   € ÀaÈÁdÈQÈqÉTÈEÀ]€ r!   r3  r   N)	r   r8   r   r   r(  r)  r?  r{   r*  )r÷   r  Úentriesrf   r4  Úsorted_entriesrô   rA   s           r   Ú propagate_inst_exn_table_entriesrD  q  s  € ô
 ˜,Ó'€GØ=?€GØò .ˆØ×Óà˜×*Ñ*×0Ñ0Ñ1Ø˜×*Ñ*×.Ñ.Ñ/ðˆCð �g‰~Ø×)Ñ)¨W°S©\Ò9Ð9Ð9Ø×-Ñ-ˆ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\  sJ ‚t        |j                  «      |vsJ ‚|j                  t        |j                  «      «       |j                  }|j                  |v sJ ‚|j                  |v sJ ‚|j                  |v sJ ‚||j                     |cxk  r||j                     k  rŒÇJ ‚ J ‚ 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.
    rO   N)r   r  rü   r8   rF   rG   r;   Úaddr   r   r   )r÷   r  Úexn_tab_entry_setrA   rf   rô   s         r   Ú check_inst_exn_tab_entries_validrH  Œ  sì   € ô ˜,Ó'€GÜ›ÐÜ˜\Ó*ò 	C‰ˆˆ4Ø×ÓÜ×#Ñ# wÒ.Ð.Ð.Ü�d×(Ñ(Ó)Ð1BÑBÐBÐBØ×!Ñ!¤" T×%7Ñ%7Ó"8Ô9Ø×&Ñ&ˆEØ—;‘; 'Ñ)Ð)Ð)Ø—9‘9 Ñ'Ð'Ð'Ø—<‘< 7Ñ*Ð*Ð*Ø˜5Ÿ;™;Ñ'¨1ÔB°¸¿	¹	Ñ0BÓBÐBÑBÐBÐBñ	Cr!   c                 óp   — | D �cg c]"  }|j                   t        j                  k7  sŒ!|‘Œ$ c}| d d  y c c}w r#   r  )r÷   rA   s     r   Ústrip_extended_argsrJ  ¤  s*   € Ø".ÖO˜Q°!·(±(¼c×>NÑ>NÓ2N’qÒO€L‘�OùÒOs   …"3¨3c                 óÒ   — t         j                  dk  sJ ‚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 itrO   rT   r�   )rœ   r™   )rF   rG   r0   r]   r^   r/   )r÷   Úrewritesrf   s      r   Úremove_load_call_methodrM  ¨  sg   € ä×Ñ˜gÒ%Ð%Ð%Ø*¸?ÑK€HØò 1ˆØ�;‰;˜(Ò"Ø" 4§;¡;Ñ/ˆDŒKÜŸ)™) D§K¡KÑ0ˆD�Kð1ð Ðr!   c                 ó,  — g }| D �]‡  }|j                  |«       d|j                  v sŒ$t        dt        d|j                  v «      ¬«      }|j                  |_        |j                  |_        t        j                  dk  r(t        d|j                  v rdnd|j                  ¬	«      }nt        d
|j                  ¬	«      }|j                  |_        |j                  r)|j                  j                  |u r||j                  _        t        j                  |j                  «      |_
        t        j                  |j                  «      |_
        t        j                  d   |_        d|_        d |_        d |_        |j!                  ||g«       �ŒŠ || d d  y )NÚ_NONEÚIS_OPÚNOTrj   rR   r  ÚPOP_JUMP_FORWARD_IF_TRUEÚPOP_JUMP_BACKWARD_IF_TRUErd   ÚPOP_JUMP_IF_TRUEr¥   )r‘   r0   r`   r*   r1   r2   r7   rF   rG   r   r8   r   r*  r]   r^   r/   r’   )r÷   Ú	new_instsrf   Úis_opÚjump_ops        r   Úremove_jump_if_nonerX  ³  sM  € Ø€IØó /ˆØ×Ñ˜ÔØ�d—k‘kÒ!Ü& w´C¸ÀÇÁÐ8LÓ4MÔNˆEØ Ÿ9™9ˆEŒLØ"Ÿn™nˆEŒOÜ×Ñ 'Ò)Ü,à  D§K¡KÑ/ñ /à4ØŸ;™;ô	‘ô -Ð-?ÈÏÉÔT�Ø $§¡ˆGÔà×!Ò! d×&8Ñ&8×&<Ñ&<ÀÑ&DØ)0�×"Ñ"Ô&ä"&§)¡)¨D×,>Ñ,>Ó"?ˆEÔÜ$(§I¡I¨d×.@Ñ.@Ó$AˆGÔ!äŸ)™) LÑ1ˆDŒKØ&ˆDŒKØˆDŒHØˆDŒKØ×Ñ˜e WÐ-Ö.ð7/ð8  €L‘�Or!   c                 óú  — g }| D ]ï  }|j                  |«       |j                  dv sŒ#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)ÚBINARY_SLICEÚSTORE_SLICEÚSLICEÚSUBSCRÚBUILD_SLICEry   )r‘   r0   r`   r  r8   r   r*  r7   r]   r^   r/   r1   r2   )r÷   rU  rf   Úsubscr_insts       r   Úremove_binary_store_slicer`  Ô  s×   € Ø€IØò *ˆØ×Ñ˜ÔØ�;‰;Ð9Ò9ä,¨T¯[©[×-@Ñ-@ÀÈ(Ó-SÓTˆKØ×!Ò! 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_FASTra  )Ú
STORE_FASTrb  )rb  ra  )ÚLOAD_FAST_LOAD_FASTÚSTORE_FAST_STORE_FASTÚSTORE_FAST_LOAD_FASTc                 óì  — g }| D ]è  }|j                  |«       |j                  t        v sŒ't        |j                     \  }}|j                  \  }}t        j
                  |   |_        ||_        ||_        t        ||¬«      }|j                  r)|j                  j                  |u r||j                  _	        t        j                  |j                  «      |_        |j                  |«       Œê || d d  y )Nr�   )r‘   r0   ÚFUSED_INSTSr2   r]   r^   r/   r`   r8   r   r*  )r÷   rU  rf   Úinst0Úinst1Úargval0Úargval1Únew_insts           r   Úremove_fused_load_storerm  ï  sÖ   € Ø€IØò 'ˆØ×Ñ˜ÔØ�;‰;œ+Ò%Ü& t§{¡{Ñ3‰LˆE�5Ø#Ÿ{™{ÑˆG�Wô Ÿ)™) EÑ*ˆDŒKØˆDŒKØ!ˆDŒKä)¨%¸Ô@ˆHà×!Ò! d×&8Ñ&8×&<Ñ&<ÀÑ&DØ)1�×"Ñ"Ô&ä%)§Y¡Y¨t×/AÑ/AÓ%BˆHÔ"à×Ñ˜XÕ&ð%'ð&  €L‘�Or!   rþ   c                 óx  — | j                   xs d| j                  xs dz   }t        | j                  «      syg }t	        |«      D �]m  \  }}|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 sJ ‚|j                  t        dd¬«      «       | j                  d   }||v r|j                  t        d|¬«      «       n|j                  t        d|¬«      «       d|_        d|_        |j                  d
k(  s�ŒX||dz      }d|_        d|_        �Œp ||dd y)z3convert super() with no args into explicit arg formr-   NrQ   Úsuperr   r   rR   r�   rO   rŽ   r�   Ú	__class__Ú
LOAD_DEREFr�   ra  ry   )Úco_cellvarsÚco_freevarsrß   Úco_varnamesrü   r‘   r0   r2   r1   rF   rG   r`   )	rþ   r÷   Úcell_and_freer•   r„   rf   r9  Ú	first_varÚ	call_insts	            r   Úexplicit_superrx    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Ð3Ð3Ø—‘Ô0°ÀkÔRÔSØ ×,Ñ,¨QÑ/�	Ø Ñ-Ø—M‘MÔ"4°\È)Ô"TÕUà—M‘MÔ"4°[ÈÔ"SÔTØ�”	Ø �”Ø—<‘< 9Ô,à ,¨S°1©WÑ 5�IØ$%�I”MØ'(�IÖ$ð5)ð8 €L‘�Or!   c                 óž  ‡— g Šˆ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\  sJ ‚‰| dd |S )z,Fill in correct argvals for EXTENDED_ARG opsc                 óŽ   •— t        | «      D ]6  }‰sŒ‰d   j                  t        j                  k(  sŒ'‰j	                  «        Œ8 y )Nrn   )r{   r/   r]   rú   r6  )r}   r  r•   s     €r   Úmaybe_pop_nz&fix_extended_args.<locals>.maybe_pop_n1  s9   ø€ Ü�q“ò 	ˆAÚ˜& ™*×+Ñ+¬s×/?Ñ/?Ó?Ø—
‘
•ñ	r!   r   iÿÿÿ rD   rú   é   rj   é   rp   iÿÿ  ry   r±   r   N)r/   r]   rú   r1   r‘   r`   rß   )r÷   r{  rf   Úaddedr•   s       @r   Úfix_extended_argsr  -  sd  ø€ à "€Fôð
 ó ˆØ�;‰;œ#×*Ñ*Ò*àˆ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Ø�AŠ:Ðˆ:Ø€L‘€OØ€Lr!   c                 ó¬   — dd l }t        j                  dk\  r=d|j                  j                  j
                  j                  | j                     dz   z  S y)Nr   rO   ry   r   )ÚtorchrF   rG   Ú_CÚ_dynamoÚ
eval_frameÚpy_opcode_cachesr/   )rf   r�  s     r   rý   rý   N  sF   € Ûä
×Ñ˜7Ò"Ø�E—H‘H×$Ñ$×/Ñ/×@Ñ@ÀÇÁÑMÐPQÑQÑRÐRØr!   c                 óT   — d}| D ]!  }|j                   |k(  sJ ‚|t        |«      z  }Œ# y ©Nr   ©r3   rý   ©r÷   r3   rf   s      r   Úcheck_offsetsrŠ  V  s8   € Ø€FØò )ˆØ�{‰{˜fÒ$Ð$Ð$ØÔ" 4Ó(Ñ(‰ñ)r!   c                 ó@   — d}| D ]  }||_         |t        |«      z  }Œ y r‡  rˆ  r‰  s      r   r  r  ]  s-   € Ø€FØò )ˆØˆŒØÔ" 4Ó(Ñ(‰ñ)r!   c            	      óZ  — t        t        t        t        | «      «      «      }g }|gt	        | «      z   t        | d   | d   «      D ��cg c]  \  }}t        ||k7  «      ‘Œ c}}gz   D ])  }|j                  dj                  d„ |D «       «      «       Œ+ ddj                  |«      z   S c c}}w )Nrn   éþÿÿÿú c              3   ó$   K  — | ]  }|d ›–— Œ
 y­w)Ú03Nr-   )Ú.0Úxs     r   ú	<genexpr>zdebug_bytes.<locals>.<genexpr>j  s   è ø€ Ò6¨Q ! B ›yÑ6ùs   ‚zbytes mismatch
ú
)	r{   r´   Úmaprß   ÚlistÚzipr*   r‘   Újoin)ÚargsÚindexÚresultÚarÍ   r1   s         r   Údebug_bytesr�  d  s�   € Ü”#”cœ#˜t“nÓ%Ó&€EØ€Fà	ˆ”$�t“*Ñ¼¸TÀ"¹XÀtÈBÁxÓ9P× Q±°°A¤ Q¨!¡V¥Ó QÐRÑRò8ˆð 	�‰�c—h‘hÑ6°#Ô6Ó6Õ7ð8ð
  §	¡	¨&Ó 1Ñ1Ð1ùó	 !Rs   ÁB'c                 ó  — t        | d„ d¬«      }| j                  |j                  k(  s%J t        | j                  |j                  «      «       ‚| j                  |j                  k(  s%J t        | j                  |j                  «      «       ‚y)z<Make sure our assembler produces same bytes as we start withc                  ó   — y r#   r-   )r’  Úys     r   r2  zdebug_checks.<locals>.<lambda>q  s   � r!   T)ÚsafeN)Útransform_code_objectÚco_coder�  Ú	co_lnotab)rþ   Údodes     r   Údebug_checksr¦  o  se   € ä  Ñ'8¸tÔD€DØ�<‰<˜4Ÿ<™<Ò'ÐP¬°T·\±\À4Ç<Á<Ó)PÓPÐ'Ø�>‰>˜TŸ^™^Ò+ÐX¬[¸¿¹ÈÏÉÓ-XÓXÑ+r!   c                 ó|   — t        | d   «      D ]  \  }}||u sŒ|c S  | dxx   |fz  cc<   t        | d   «      dz
  S )NÚ	co_constsr   )rü   rß   )Úcode_optionsrä   rA   Úvs       r   Úget_const_indexr«  |  sV   € Ü˜, {Ñ3Ó4ò ‰ˆˆ1ð
 �!Š8ØŠHðð �Ó # Ñ'ÓÜˆ|˜KÑ(Ó)¨AÑ-Ð-r!   c                 óÔ  ‡ ‡‡
‡— t        ‰d   «      D ��ci c]  \  }}||“Œ
 c}}Šdt        fˆˆfd„}t        j                  dk  rM|�J ‚t        ‰d   «      D ��ci c]  \  }}||“Œ
 }}}t        ‰d   ‰d   z   «      D ��ci c]  \  }}||“Œ
 }}}nht	        |«      sJ ‚i }t        j                  «       D ]  }	  ||«      }|||<   Œ ‰d   D �ci c]  }|||   “Œ
 }}‰d   ‰d   z   D �ci c]  }|||   “Œ
 }}t        t        ‰ «      «      D �](  Š
ˆ
ˆ fd„}	‰ ‰
   j                  d	k(  r›‰ ‰
   j                  t        usJ ‚t        j                  dk\  rS‰ ‰
   j                  €J ‚ |‰ ‰
   j                  «      d
z  t        t        ‰ ‰
   j                  «      dz  z   ‰ ‰
   _        Œ™ |‰ ‰
   j                  «      ‰ ‰
   _        Œ·‰ ‰
   j                  dk(  r�‰ ‰
   j                  t        usJ ‚t        j                  dk\  rT‰ ‰
   j                  €J ‚ |‰ ‰
   j                  «      d
z  t        t        ‰ ‰
   j                  «      dz  z   ‰ ‰
   _        �ŒG |‰ ‰
   j                  «      ‰ ‰
   _        �Œf‰ ‰
   j                  dk(  rn‰ ‰
   j                  €J ‚‰ ‰
   j                  t        usJ ‚ |‰ ‰
   j                  «      dz  t        t        ‰ ‰
   j                  «      dz  z   dz   ‰ ‰
   _        �Œæ‰ ‰
   j                  t         v re |	«       s�Œt        j                  dk\  r-‰ ‰
   j                  |vr|‰ ‰
   j                     ‰ ‰
   _        �ŒD|‰ ‰
   j                     ‰ ‰
   _        �Œ`‰ ‰
   j                  t"        v r( |	«       s�Œ~ |‰ ‰
   j                  «      ‰ ‰
   _        �Œ�‰ ‰
   j                  t$        v r% |	«       s�Œ»|‰ ‰
   j                     ‰ ‰
   _        �Œ×‰ ‰
   j                  t&        v s�Œî‰ ‰
   j                  ��Œÿt)        ‰‰ ‰
   j                  «      }|dk\  s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   c                 ó¦   •— 	 ‰|    }|S # t         $ r= t        ‰«      x}‰| <   g ‰d   ¢| ‘­‰d<   t        ‰d   «      t        ‰«      k(  sJ ‚Y |S w xY w)Nr­  )ÚKeyErrorrß   )rX   r„   r©  Únamess     €€r   Úget_name_indexz fix_vars.<locals>.get_name_indexŒ  su   ø€ ð	?Ø˜‘+ˆCð ˆ
øô ò 	?ä # E£
Ð*ˆC�%˜‘+Ø'H¨°jÑ)AÐ'HÀ4Ñ'HˆL˜Ñ$Ü�| JÑ/Ó0´C¸³JÒ>Ð>Ñ>Øˆ
ð	?ús   ƒ
 ŠAAÁArO   rt  rr  rs  c                  ó.   •— ‰‰    j                   t        uS r#   )r2   rL   )rA   r÷   s   €€r   Úshould_compute_argz$fix_vars.<locals>.should_compute_arg¯  s   ø€ à ‘?×)Ñ)´Ð=Ð=r!   rQ   r   ry   rT   rR   rU   rC   r   )rü   r*   rF   rG   ÚcallableÚ	itertoolsÚcountÚ
IndexErrorr{   rß   r0   r2   rL   r1   r   r/   Ú	HAS_LOCALÚHAS_NAMEÚHAS_FREEÚ	HAS_CONSTr«  )r÷   r©  Úvarname_from_opargr„   rX   r±  ÚvarnamesÚ	freenamesÚallnamesr³  rA   r°  s   ``        @@r   Úfix_varsrÀ  ˆ  s¨  û€ ä(1°,¸zÑ2JÓ(K×L™9˜3 ˆT�3‰YÓL€Eð¤ö ô ×Ñ˜'Ò!Ø!Ð)Ð)Ð)Ü/8¸ÀmÑ9TÓ/U×V¡) # t�D˜#‘IÐVˆÑVô 'Ø˜]Ñ+¨l¸=Ñ.IÑIó÷
á��Tð �#‰Ið
ˆ	ò 
ô Ð*Ô+Ð+Ð+ØˆÜ—?‘?Ó$ò 	ˆCðÙ)¨#Ó.�Ø!$�˜’ð	ð 6BÀ-Ñ5PÖQ¨T�D˜( 4™.Ñ(ÐQˆÐQð % ]Ñ3°lÀ=Ñ6QÑQö
àð �(˜4‘.Ñ ð
ˆ	ð 
ô ”3�|Ó$Ó%ó :*ˆõ	>ð ˜‰?×!Ñ! ]Ò2à ‘?×)Ñ)´Ñ=Ð=Ð=Ü×Ñ 7Ò*Ø# A‘×*Ñ*Ð6Ð6Ð6Ù'5°lÀ1±o×6LÑ6LÓ'MÐQRÑ'RÜœ˜l¨1™o×1Ñ1Ó2°QÑ6ñ'�˜Q‘Õ#ñ '5°\À!±_×5KÑ5KÓ&L�˜Q‘Õ#Ø˜!‰_×#Ñ# {Ò2à ‘?×)Ñ)´Ñ=Ð=Ð=Ü×Ñ 7Ò*Ø# A‘×*Ñ*Ð6Ð6Ð6Ù'5°lÀ1±o×6LÑ6LÓ'MÐQRÑ'RÜœ˜l¨1™o×1Ñ1Ó2°QÑ6ñ'�˜Q‘Ö#ñ '5°\À!±_×5KÑ5KÓ&L�˜Q‘Ö#Ø˜!‰_×#Ñ#Ð'8Ò8Ø ‘?×&Ñ&Ð2Ð2Ð2Ø ‘?×)Ñ)´Ñ=Ð=Ð=ñ   ¨Q¡× 6Ñ 6Ó7¸1Ñ<Üœ˜\¨!™_×0Ñ0Ó1°AÑ5ñ7àñð ˜‰OÖð
 ˜!‰_×#Ñ#¤yÑ0Ù!Ö#ä×$Ñ$¨Ò/Ø$ Q™×.Ñ.°hÑ>ð +4°LÀ±O×4JÑ4JÑ*K�L ‘OÖ'à*2°<À±?×3IÑ3IÑ*J�L ‘OÖ'Ø˜!‰_×#Ñ#¤xÑ/Ù!Ö#Ù&4°\À!±_×5KÑ5KÓ&L�˜Q‘Ö#Ø˜!‰_×#Ñ#¤xÑ/Ù!Ö#Ø&/°¸Q±×0FÑ0FÑ&G�˜Q‘Ö#Ø˜!‰_×#Ñ#¤yÓ0ð ˜A‰×"Ñ"Ò*ä% l°LÀ±O×4JÑ4JÓK�Ø˜a’x��xØ&)�˜Q‘Ö#ñu:*ùóG Mùó Wùó
øô ò ÛðüâQùò
s/   –P=ÁQÂQ	Â;QÃQ Ã-Q%Ñ	QÑQ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)rQ   rT   rU   )	r2   rL   r/   r¸  r¹  rº  r»  r0   r1   )r÷   rf   s     r   Úclear_instruction_argsrÂ  ê  sc   € ð ò ˆà�K‰Kœ|Ò+à—‘œyÑ(Ø—;‘;¤(Ñ*Ø—;‘;¤(Ñ*Ø—;‘;¤)Ò+à—‘Ð#RÒRàˆD�Hñr!   c                  ó˜  — dg} | j                  d«       | j                  g d¢«       t        j                  dk\  r| j                  d«       | j                  d«       t        j                  dk\  r| j                  d«       n| 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­  rt  Úco_filenameÚco_namerO   Úco_qualnameÚco_firstlinenorr   Úco_linetabler¤  Úco_exceptiontablers  rr  )r‘   r’   rF   rG   )r)  s    r   Úget_code_keysrÐ  û  s±   € ð ˆ?€DØ‡K�KÐ$Ô%Ø‡K�Kò	
ôô ×Ñ˜7Ò"Ø�‰�MÔ"Ø‡K�KÐ Ô!Ü
×Ñ˜7Ò"Ø�‰�NÕ#à�‰�KÔ Ü
×Ñ˜7Ò"à�‰Ð'Ô(Ø‡K�KàØð	
ôð €Kr!   c                 óà   — t        «       }|D �ci c]  }|t        | |«      “Œ }}t        |d   «      |d   k(  sJ ‚t        | |«      }t	        |«        |||«       t        |||«      d   S c c}w )Nrt  rÇ  r   )rÐ  rI   rß   Úcleaned_instructionsr   Úclean_and_assemble_instructions)rþ   Útransformationsr¡  r)  Úkr©  r÷   s          r   r¢  r¢  "  s|   € Ü‹?€DØ15Ö6¨A�A”w˜t QÓ'Ñ'Ð6€LÐ6Üˆ|˜MÑ*Ó+¨|¸LÑ/IÒIÐIÐIä'¨¨dÓ3€LÜ˜Ô%á�L ,Ô/Ü*¨<¸¸|ÓLÈQÑOÐOùò 7s   �A+r)  r©  c                 óì  — 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   «      \  }}t        j                  dk  r||d<   n||d	<   ||d
<   t        | «      |d<   t        |«      dhz
  t        |j!                  «       «      dhz
  k(  sJ ‚t        j                  dk\  rt#        t%        | «      «      |d<   | t	        j
                  |D �cg c]  }||   ‘Œ	 c}Ž fS c c}w c c}w )Nrt  rÇ  rO   )r¼  TrÍ  rr   r¤  rÎ  r£  rÈ  rÅ  rÏ  )rH  rß   rF   rG   ÚtypesÚCodeTypeÚ_varname_from_opargrÀ  r  r  r+   r  r   r  r   r  r)  rö   r<  )	r÷   r)  r©  r¼  rÕ  Útmp_codeÚdirtyÚbytecoderº   s	            r   rÓ  rÓ  .  s‰  € ô % \Ô2ä!$ \°-Ñ%@Ó!A€L�ÑØÐÜ
×Ñ˜7Ò"ä—>‘>¸TÖ#B¸ L°£OÒ#BÐCˆØ%×9Ñ9ÐÜˆ\˜<Ð<NÕOà€EÙ
Ü�|Ô$Ü˜<Ô(äÔ& |Ó4Ó5ˆò	 ô ˜<Ô(Ü ¨lÐ;KÑ.LÓMÑ€HˆfÜ
×Ñ˜'Ò!Ø$*ˆ�[Ò!à'-ˆ�^Ñ$à&€L�ÑÜ#5°lÓ#C€L�Ñ Üˆt‹9Ð,Ð-Ñ-´°\×5FÑ5FÓ5HÓ1IØðMñ 2ò ð ð ô ×Ñ˜7Ò"Ü,DÜ# LÓ1ó-
ˆÐ(Ñ)ð œŸ™À4Ö)H¸a¨,°q«/Ò)HÐIÐIÐIùò9 $Cùò8 *Is   ÁE,ÅE1
c                 óZ   — | D ]&  }|j                   dk(  sŒ||j                     |_        Œ( y )NÚKW_NAMES)r0   r1   r2   )r÷   Úconstsrf   s      r   Úpopulate_kw_names_argvalrà  W  s-   € Øò +ˆØ�;‰;˜*Ó$Ø  §¡Ñ*ˆD�Kñ+r!   c                 ó|  — t        t        t        t        j                  | «      «      «      }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\  r]t!        |«       t        j                  dk\  rt#        |«       t        j                  dk\  rt%        |«       t'        |«       t)        |«       |S )NrO   rR   rC   )r–  r•  rJ   r]   Úget_instructionsrŠ  rF   rG   rà  r¨  r,  rÏ  r  rJ  rM  rx  rX  r`  rm  r  r  )rþ   r¡  r÷   s      r   rÒ  rÒ  ]  sì   € ÜœÔ/´×1EÑ1EÀdÓ1KÓLÓM€LÜ�,ÔÜ
×Ñ˜7Ò"Ü  ¨t¯~©~Ô>Ü" 4×#9Ñ#9¸<ÔHÜ�\Ô"Ü˜Ô%ÙÜ×Ñ˜gÒ%Ü# LÔ1Ü×Ñ˜gÒ%Ü˜4 Ô.Ü
×Ñ˜7Ò"Ü˜LÔ)Ü×Ñ˜wÒ&Ü% lÔ3Ü×Ñ˜wÒ&Ü# LÔ1Ü�|Ô$Ü˜<Ô(ØÐr!   c                 ó*   — | › dt        t        «      › �S )Nr  )rã   Ú_unique_id_counterrW   s    r   Ú	unique_idrå  x  s   € ØˆV�1”TÔ,Ó-Ð.Ð/Ð/r!   c                 ó*   — d}| j                   |z  dkD  S )Né    r   )rÉ  )rþ   Úco_generators     r   Úis_generatorré  |  s   € Ø€LØ�M‰M˜LÑ(¨AÑ-Ð-r!   c                 ó¢  — t        | j                  «      }t        |«       |r,t        |«      D ]  \  }}|j                  dk(  sŒ||dz   d } n |D ]/  }d|_        |sŒ|j                  |v sŒ||j                     |_        Œ1 |�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.
        noprefix: remove prefix bytecodes (all bytecode before the first RESUME, inclusive).
    ÚRESUMEr   NrR   ÚRETURN_CONSTr¥   ÚRETURN_VALUEr   rn   ÚNOP)rÒ  Ú__code__rÂ  rü   r0   r4   r2   rF   rG   r]   r^   r/   r‘   r`   rß   r6  r1   rL   rg   r   )
ÚfnÚvarname_mapÚnoreturnÚnoprefixr…   rA   rf   rU  ÚreturnsÚ	jump_insts
             r   Úbytecode_from_templaterö  �  sE  € ô@ ! §¡Ó-€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!   )r   )r   Nr#   )F)NTT)er*  Údataclassesr]   rµ  rF   r×  Útypingr   r   r   r   r   r   r	   r
   r   Úbytecode_analysisr   r   r   r   Ú	dataclassr   r   rJ   rL   rY   r`   rg   rl   r~   rŠ   rŒ   r—   rš   rž   r¢   r¬   r*   r¼   rÈ   rÎ   rÛ   rÝ   rà   rå   rè   ró   rð   rö   r  r  r  r  r
  r  r  r  r  r,  r<  r?  rD  rH  rJ  rM  rX  r`  rg  rm  rØ  rx  r  rý   rŠ  r  r,   r�  r¦  Úhaslocalr¸  Úhasnamer¹  Úhasfreerº  Úhasconstr»  r«  rÀ  rÂ  rÐ  r¢  rÓ  rà  rÒ  r¶  rä  rå  r+   ré  rö  r-   r!   r   ú<module>rÿ     s›  ðã Û Û 
Û Û 
Û ß T× TÕ T÷ó ð ×Ñ÷
ð 
ó ð
ð2 ×Ñ÷Jð Jó ðJð2˜3Ÿ?™?ð ¨{ó ÷"ñ ò
ð ˜l°4ò#àó#ðN3 Kó 3ð
)˜ó )ð0�t˜KÑ(ó 0ð:7Ø˜ d¨;Ñ&7Ð7Ñ8ð7à	ˆ+Ñó7ðtØ˜ d¨;Ñ&7Ð7Ñ8ðà	ˆ+Ñóð:4<¨d°;Ñ.?ó 4<ðn:  kÑ!2ó :ð: ó :ð5 ó 5ð
'�d˜;Ñ'ó 'ðV  !ñØðØðà
ˆ4�‰9�h  S˜z¨4Ð/Ñ0Ð0Ñ1óò0 "ðF�Sð ˜T #™Yó ð8 só 8ðv ×Ñ÷ð ó ðð Sð ¨T°#©Yó ð 
¨h°s©mð 
Àó 
ð

˜tÐ$7Ñ8ð 

¸Tó 

ð %ð ¨DÐ1DÑ,Eó ð, $Ð':Ñ";ð Àó ð$'&˜4 Ñ,ð '&¸3ð '&À5ÈÐPUÈÑCVó '&ðT¨t°C¸Ð4DÑ/Eð Èsó óPñ �—‘Ó€
ð
, [ð 
,°Tó 
,ð¨¨kÑ):ð Àó ò-1ð`&¨eð &À4ÈÑCTó &ðRGØ�{Ñ#ðGà	Ð
ÑóGðT Ø	Ð$Ñ	%ð à	ó ð&=°4¸Ñ3Dð =Èó =ð6C°4¸Ñ3Dó Cð0P d¨;Ñ&7ð P¸Dó Pð¨$¨{Ñ*;ð ÀÀ[Ñ@Qó ð  d¨;Ñ&7ð  ¸Dó  ðB ¨D°Ñ,=ð  À$ó  ð* 6Ø9Ø7ñ€ð ¨$¨{Ñ*;ð  Àó  ð0#˜Ÿ™ð #°t¸KÑ7Hð #ÈTó #ðL D¨Ñ$5ð ¸#ó ðB˜có ó)ó)ð2˜#ó 2òYñ �—‘Ó€	Ùˆs�{‰{Ó€Ùˆs�{‰{Ó€Ù�—‘Ó€	ð	.¨#ó 	.ñ_*˜4 Ñ,ó _*òDð"$�t˜C‘yó $ñN	PÀÇÁó 	Pð&JØ�{Ñ#ð&JØ+/°©9ð&JØDHÈÈcÈÁNð&Jà
ˆ4�Ñ˜eŸn™nÐ,Ñ-ó&JòR+ñ¨d°;Ñ.?ó ð0 %�Y—_‘_Ó&Ð ð0�só 0ð.�u—~‘~ð .¨$ó .ô
^r!   