Ë
    g^(hœè  ã                   óü  — 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m	Z	m
Z
 ddlmZ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ej4                   G d
„ d«      «       «       Zeej4                   G d„ d«      «       «       Zej:                  dk\  rdej8                  defd„Zn4ej:                  dk\  rdej8                  defd„Zndej8                  defd„Z G d„ d«      Zej:                  dk\  rd„ Z nej:                  dk\  rd„ Z nd„ Z deddœdefd„Z!defd„Z"dnd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-	 dod)e.d*e.de/e%e.   ee.e.gdf   f   fd+„Z0d,„ Z1d-e.de%e.   fd.„Z2d/e.fd0„Z3eej4                   G d1„ d2«      «       «       Z4d-e.de%e.   fd3„Z5d4e	e.   de.fd5„Z6d6e%e4   ddfd7„Z7d8e8de%e4   fd9„Z9d6e%e4   de8fd:„Z:d;e%e   d<e.de/e8e8f   fd=„Z;d>e<e.ef   d?e.fd@„Z=dpdA„Z> e?ej€                  «      ZAdBeddfdC„ZBd;e%e   dDe.fdE„ZCdF„ ZDdGe8d;e%e   fdH„ZEd;e%e   de%e4   fdI„ZFd6e%e   ddfdJ„ZGd;e%e   ddfdK„ZHd;e%e   fdL„ZId;e%e   ddfdM„ZJdN„ ZKd;e%e   de%e   fdO„ZLd;e%e   ddfdP„ZMd;e%e   ddfdQ„ZNdRdSdTdUœZOd;e%e   ddfdV„ZPdWej¢                  d;e%e   ddfdX„ZRd;e%e   de.fdY„ZSde.fdZ„ZTdpd[„ZUdpd\„ZVdeWfd]„ZXd^„ ZY e?ej´                  «      Z[ e?ej¸                  «      Z] e?ej¼                  «      Z_ e?ejÀ                  «      Zade.fd_„Zbdqd;e%e   fd`„Zcda„ Zdde%eW   fdb„Zedrdej¢                  fdc„Zfd;e%e   dde%eW   dee<eWef   de/e%e   ej¢                  f   fdf„Zgdg„ Zhdrde%e   fdh„Zidi„ ZjejÖ                  drde
e   fdj„«       Zl ejÚ                  «       ZndeWfdk„ZodWej¢                  depfdl„Zqdsdm„Zry)ta€  
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)ÚIteratorÚSequence)ÚAnyÚCallableÚcastÚOptionalÚUnioné   )Údataclass_slotsé   )Úget_indexofÚpropagate_line_numsÚremove_extra_line_numsÚstacksize_analysis)Úis_safe_constantc                   ó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    úc/var/www/skyplay_api_hub/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__7   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   &   s8   … ð ÓØ	ÓØÓØƒ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Zee   ed<   defd„Zdefd„Zdefd„Zd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_entryÚargreprr   c                 ó   — t        | «      S r$   ©Úidr   s    r    Ú__hash__zInstruction.__hash__S   s   € Ü�$‹xˆr"   c                 ó0   — t        | «      t        |«      k(  S r$   r<   ©r   Úothers     r    r&   zInstruction.__eq__V   s   € Ü�$‹xœ2˜e›9Ñ$Ð$r"   c                 ó<   — d| j                   › d| j                  › d�S )NzInstruction(opname=z	, offset=r   )r1   r4   r   s    r    r   zInstruction.short_inst_reprY   s   € Ø$ T§[¡[ M°¸4¿;¹;¸-ÀqÐIÐIr"   c                 óH   — |j                   | _         |j                  | _        y r$   )r5   r8   r@   s     r    Úcopy_positionszInstruction.copy_positions\   s   € Ø ×,Ñ,ˆÔØŸ™ˆ�r"   )rA   r   r   N)r'   r(   r)   Ú__doc__r+   r*   r-   r   r   r4   r5   r6   r,   r8   r   r9   r   r:   r>   r&   r   rD   r.   r"   r    r   r   A   s­   … ñ /àƒKØƒKØ	�#‰ÓØƒKØ €FˆH�S‰MÓ Ø!%€K�˜#‘Ó%Ø €N�DÓ Ø+/€Iˆx˜Ñ(Ó/à&*€FˆH�]Ñ#Ó*Ø6:€M�8Ð2Ñ3Ó:Ø!€GˆX�c‰]Ó!ð˜#ó ð%˜tó %ðJ ó Jô)r"   r   ©é   é   Úir   c           
      óÆ   — t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  «      S r$   )	r   r0   r1   r2   r3   r4   Úline_numberr6   r8   ©rI   s    r    Úconvert_instructionrM   c   óI   € ÜØ�H‰HØ�H‰HØ�E‰EØ�H‰HØ�H‰HØ�M‰MØ×ÑØ�K‰Kó	
ð 		
r"   ©rG   é   c           
      óÆ   — t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  «      S r$   )	r   r0   r1   r2   r3   r4   r5   r6   r8   rL   s    r    rM   rM   q   rN   r"   c           
      ó²   — t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  d «      S r$   )r   r0   r1   r2   r3   r4   r5   r6   rL   s    r    rM   rM      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)NrT   r.   r   s    r    r!   z_NotProvided.__repr__�   s   € Ør"   N)r'   r(   r)   r-   r!   r.   r"   r    rT   rT   Œ   s   „ ð˜#ô r"   rT   ©rG   é   c                 ó
   — | dv S )N)Ú	LOAD_ATTRÚLOAD_GLOBALÚLOAD_SUPER_ATTRr.   ©Únames    r    Úinst_has_op_bitsr^   “   s   € ØÐFÐFÐFr"   c                 ó   — | dk(  S )NrZ   r.   r\   s    r    r^   r^   ˜   s   € Ø�}Ñ$Ð$r"   c                  ó   — y)NFr.   r\   s    r    r^   r^   �   s   € Ør"   )r2   r3   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)r0   r1   r2   r3   r   )r^   ÚRuntimeErrorrT   Ú
isinstancer+   r   ÚdisÚopmap)r]   r2   r3   r   Úcnts        r    Úcreate_instructionrg   ¡   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   ©ÚsysÚversion_inforg   )r   Úinsts     r    Úcreate_jump_absoluterp   È   s#   € Ü ×-Ñ-°Ò8‰>¸o€DÜ˜d¨6Ô2Ð2r"   c                 óJ   — |rt        | «      s
J 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©r3   )r   rg   )ÚvalÚcheckeds     r    Úcreate_load_constrv   Í   s/   € ñ Ü Ô$Ð>Ð(8¸¸Ð&>Ó>Ð$Ü˜l°3Ô7Ð7r"   c                  óX   — t         j                  dk\  rt        dd¬«      S t        d«      S )NrO   ÚCOPYr   ©r2   ÚDUP_TOPrl   r.   r"   r    Úcreate_dup_topr{   Ø   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	�«      ‚| 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   éÿÿÿÿÚSWAPry   ©rG   é
   é   zrotate z  not supported for Python < 3.10é   ÚROT_)ÚTWOÚTHREEÚFOURr
   ÚROT_N)rm   rn   Úrangerg   ÚAttributeError)ÚnrI   s     r    Úcreate_rot_nr‹   Þ   s§   € ð 	ˆA‚vàˆ	ä
×Ñ˜7Ò"ô <AÀÀAÀr»?ÖK°aÔ" 6¨qÖ1ÒKÐKô ×Ñ˜'Ò! 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   ªBÚ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   ry   ©Ú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�   ry   r�   s    €r    Úset_inst_bitz#add_push_null.<locals>.set_inst_bit  s)   ø€ Ø�S‰z�~‰~Ð)Ð)Ð)Øˆc‰
�Š˜!ÑŽr"   rF   r}   Ú	PUSH_NULLrV   r   rZ   rO   )rc   r   rm   rn   r^   r1   rg   )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   rF   r}   r   rZ   r   r–   )rc   r   rm   rn   r1   r2   rg   )rŒ   r’   r‘   s      r    Úadd_push_null_call_function_exr™   3  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–   rF   r   r
   rV   ÚPRECALLry   ÚCALLÚCALL_FUNCTION)rm   rn   Úappendrg   Úextendr‹   )ÚnargsÚ	push_nullÚoutputÚrotss       r    Úcreate_call_functionr¤   P  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 )NrV   rœ   ry   rO   r›   ÚCALL_METHODrl   )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 )NrV   rY   r   )r2   r3   ÚLOAD_METHODrs   rl   r\   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 )NrO   ÚBEFORE_WITHÚ
SETUP_WITHrk   rl   )r   r1   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 	 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   r~   ry   r   Ú
BUILD_LISTrz   rr   r}   rs   ÚBINARY_SUBSCRÚ	ROT_THREEÚSTORE_SUBSCRÚreverser   ÚPOP_TOPÚUNPACK_SEQUENCE)rm   rn   rg   rª   r§   )rŠ   s    r    Úcreate_swapr·   ž  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
    r   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"   ©rm   rn   )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
    r   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"   rÇ   )Ú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   é?   é   r}   é@   )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   é   r.   éð   r   éè   )r¸   Ú
end_linenoÚ
col_offsetÚend_col_offsetrž   rŸ   rÚ   )ÚdeltaÚsizeÚother_varintsrŠ   rÎ   r8   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   rÞ   )r¸   )r8   Ú	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"   )r8   r7   rÇ   )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ê   M  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Ù   rI   s      r    Úencode_exception_table_varintrí   W  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Ù   rt   s      r    Údecode_exception_table_varintrñ   g  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ò   rI   s     r    Úcheck_exception_tablerô   t  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
    r
   r   )Úiterrñ   r,   rž   rê   ÚStopIterationrô   )
rõ   Úexntab_iterrò   r   Úlengthr   r   Údlr   r   s
             r    Úparse_exception_tablerü   �  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_tabler  —  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   r
   rG   r
   r¼   )r   r   r   )rm   rn   rè   Ú	enumerater1   r8   Úinstruction_sizer2   rŸ   r0   rˆ   rÈ   rÔ   r5   rì   rÿ   )r  r  ÚcoderÅ   Úupdate_linenoÚnum_extrI   ro   rç   Újr2   Ú_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_instr4   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©r0   rd   r  )r  r4   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)r4   r0   rd   ÚhasjabsÚhasjrelr  r3   r   )r  ro   Ú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)
rm   rn   rb   r1   Úreplacer‰   rd   re   r0   Ú
_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   r4   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  r   r
   z+Python 3.11+ should not have absolute jumpszto N)Úsetrd   r  Úunionr  r0   r   r4   rm   rn   rb   r1   r  Úupdate_offsetsr   r!  r2   r+   Úabsr	  r3   r:   )r  Újumpsro   Ú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+   r4   ÚsortedÚkeysr÷   r   r   Úcopyr9   rø   )r*  r  Úexn_tabro   r2  r   r.  r/  r0  r  r1  s          @@@@r    Úvirtualize_exception_tabler7  4  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_entriesr
   c                 ó   — | d   | d    fS ©Nr   r   r.   ©Ú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¿   )r?  Úexn_dictr6  Ú	key_stackÚnextis    €€€€r    rA  z$compute_exception_table.<locals>.pop†  se   ø€ ñ
 Ø—-‘-“/ˆCØ˜˜A™ŠØ—‘Ü'¬¨C°©F°EÓ(:¸CÀ¹FÐSÀXÈcÁ]ÒSôð ˜A™ ™
‘ð	 ð r"   r}   r   )r   r9   r!  r   r4   r   r+   r   r	  r   r   r   r3  r4  r¿   rž   rê   rô   )r  r(  ro   r   r   r   r?  rt   Úkeys_sortedrA  ÚleftrB  r6  rC  rD  s              @@@@r    Úcompute_exception_tablerG  ]  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.
    r}   r   r   N)r   r   rA  rž   )rò   r(  Úentry_stackr   r?  s        r    Ú!check_inst_exn_tab_entries_nestedrJ  §  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.   r;  s    r    r=  z2propagate_inst_exn_table_entries.<locals>.<lambda>Ë  s   € ÀaÈÁdÈQÈqÉTÈEÀ]€ r"   r>  r   N)	r   r9   r   r   r3  r4  rJ  rˆ   r5  )r  r(  Úentriesro   r?  Úsorted_entriesr   rI   s           r    Ú propagate_inst_exn_table_entriesrO  º  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  r9   rm   rn   r=   Úaddr   r   r   )r  r(  Úexn_tab_entry_setrI   ro   r   s         r    Ú check_inst_exn_tab_entries_validrS  Õ  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  rI   s     r    Ústrip_extended_argsrU  í  s*   € Ø".ÖO˜Q°!·(±(¼c×>NÑ>NÓ2N’qÒO€L‘�OùÒOs   …"3¨3c                 óæ  — | 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   )
r9   r   rì   r5  r8   r0   r1   r2   r3   r   )Úold_instÚ	new_instsro   s      r    Úoverwrite_instructionrY  ö  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  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   rY   r�   )r©   r¦   )rm   rn   r1   rd   re   r0   )r  Úrewritesro   s      r    Úremove_load_call_methodr\    sg   € ä×Ñ˜gÒ%Ð%Ð%Ø*¸?Ñ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ÚNOTry   rV   r  ÚPOP_JUMP_FORWARD_IF_TRUEÚPOP_JUMP_BACKWARD_IF_TRUErk   ÚPOP_JUMP_IF_TRUErr   rs   )r1   rg   r+   r2   r3   rm   rn   r   rŸ   rY  rž   )r  rX  ro   Úis_opÚjump_opÚreplace_instss         r    Úremove_jump_if_nonerg    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                 óú  — 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_SLICEr
   )rž   r1   rg   r  r9   r   r5  r8   rd   re   r0   r2   r3   )r  rX  ro   Úsubscr_insts       r    Úremove_binary_store_slicero  5  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_FASTrp  )Ú
STORE_FASTrq  )rq  rp  )ÚLOAD_FAST_LOAD_FASTÚ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 )Nrs   )r1   ÚFUSED_INSTSr3   rg   rŸ   rY  rž   )r  rX  ro   Úinst0Úinst1Úargval0Úargval1rf  s           r    Úremove_fused_load_storer{  P  s�   € Ø€IØò #ˆØ�;‰;œ+Ñ%Ü& t§{¡{Ñ3‰LˆE�5Ø#Ÿ{™{ÑˆG�Wô # 5°Ô9Ü" 5°Ô9ðˆMð ×ÑÔ2°4¸ÓGÕHà×Ñ˜TÕ"ð#ð  €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.   NrZ   Úsuperr   r   rV   rœ   rO   r›   r�   Ú	__class__Ú
LOAD_DEREFrs   rp  r
   )Úco_cellvarsÚco_freevarsrì   Úco_varnamesr  rž   r1   r3   r2   rm   rn   rg   )	r
  r  Úcell_and_freer¢   r‘   ro   rD  Ú	first_varÚ	call_insts	            r    Úexplicit_superr†  a  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 )Nr}   )rˆ   r0   rd   r  rA  )rŠ   r  r¢   s     €r    Úmaybe_pop_nz&fix_extended_args.<locals>.maybe_pop_n‹  s9   ø€ Ü�q“ò 	ˆAÚ˜& ™*×+Ñ+¬s×/?Ñ/?Ó?Ø—
‘
•ñ	r"   r   iÿÿÿ rG   r  é   ry   é   rÞ   iÿÿ  r
   r¼   r   N)r0   rd   r  r2   rž   rg   rì   )r  r‰  ro   Ú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   r
   r   )Útorchrm   rn   Ú_CÚ_dynamoÚ
eval_frameÚpy_opcode_cachesr0   )ro   r�  s     r    r	  r	  ¨  sF   € Ûä
×Ñ˜7Ò"Ø�E—H‘H×$Ñ$×/Ñ/×@Ñ@ÀÇÁÑMÐPQÑQÑRÐRØr"   c                 óT   — d}| D ]!  }|j                   |k(  sJ ‚|t        |«      z  }Œ# y ©Nr   ©r4   r	  ©r  r4   ro   s      r    Úcheck_offsetsr˜  °  s8   € Ø€FØò )ˆØ�{‰{˜fÒ$Ð$Ð$ØÔ" 4Ó(Ñ(‰ñ)r"   c                 ó@   — d}| D ]  }||_         |t        |«      z  }Œ y r•  r–  r—  s      r    r%  r%  ·  s-   € Ø€FØò )ˆØˆŒØÔ" 4Ó(Ñ(‰ñ)r"   c            	      ó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)Ú03Nr.   )Ú.0Úxs     r    ú	<genexpr>zdebug_bytes.<locals>.<genexpr>Á  s   è ø€ Ò(˜q�A�b�6“Ñ(ùs   ‚zbytes mismatch
ú
)rˆ   r¿   Úmaprì   ÚlistÚzipr+   Újoin)ÚargsÚindexÚarÙ   r2   Ú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                  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    r=  zdebug_checks.<locals>.<lambda>Ì  s   � r"   T)ÚsafeN)Útransform_code_objectÚco_coder«  Ú	co_lnotab)r
  Údodes     r    Údebug_checksr´  Ê  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_optionsrt   rI   Ú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  rO|�J ‚t        ‰d   «      D ��ci c]  \  }}||“Œ
 c}}Št        ‰d   ‰d   z   «      D ��ci c]  \  }}||“Œ
 c}}Š	njt	        |«      sJ ‚i }t        j                  «       D ]  }	  ||«      }|||<   Œ ‰d   D �ci c]  }|||   “Œ
 c}Š‰d   ‰d   z   D �ci c]  }|||   “Œ
 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 rŽt        j                  dk\  sJ ‚t!        ‰ ‰
   j                  t"        «      sJ ‚t        ‰ ‰
   j                  «      dk(  sJ ‚t#        ˆ	ˆfd„‰ ‰
   j                  D «       «      }|d   dz  |d
   dz  z   ‰ ‰
   _        �Œ‰‰ ‰
   j$                  t&        v re |«       s�Œ§t        j                  dk\  r-‰ ‰
   j                  ‰vr‰	‰ ‰
   j                     ‰ ‰
   _        �Œç‰‰ ‰
   j                     ‰ ‰
   _        �Œ‰ ‰
   j$                  t(        v r( |«       s�Œ! |‰ ‰
   j                  «      ‰ ‰
   _        �Œ@‰ ‰
   j$                  t*        v r% |«       s�Œ^‰	‰ ‰
   j                     ‰ ‰
   _        �Œz‰ ‰
   j$                  t,        v s�Œ‘‰ ‰
   j                  ��Œ¢t/        ‰‰ ‰
   j                  «      }|dk\  sJ ‚|‰ ‰
   _        �ŒÎ y c c}}w c c}}w c c}}w # t        $ r Y  �Œ7w 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ì   )r]   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   r‚  r€  r�  c                  ó.   •— ‰‰    j                   t        uS r$   )r3   rT   )rI   r  s   €€r    Úshould_compute_argz$fix_vars.<locals>.should_compute_arg
  s   ø€ à ‘?×)Ñ)´Ð=Ð=r"   rZ   r   r
   rY   rV   r[   rF   c              3   ó:   •K  — | ]  }|‰v r‰|   n‰|   –— Œ y ­wr$   r.   )rŸ  r]   Ú	freenamesÚvarnamess     €€r    r¡  zfix_vars.<locals>.<genexpr>/  s-   øè ø€ ò àð #'¨(Ñ"2�˜’¸	À$¹ÓGñùs   ƒr   r‚   é   )r  r+   rm   rn   ÚcallableÚ	itertoolsÚcountÚ
IndexErrorrˆ   rì   r1   r3   rT   r2   r   rv  rc   Útupler0   Ú	HAS_LOCALÚHAS_NAMEÚHAS_FREEÚ	HAS_CONSTr¹  )r  r·  Úvarname_from_opargr‘   r]   r¿  ÚallnamesrÁ  Ú	arg_tuplerÃ  rI   r¾  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ˆô 'Ø˜]Ñ+¨l¸=Ñ.IÑIó÷
á��Tð �#‰Ió
‰	ô Ð*Ô+Ð+Ð+ØˆÜ—?‘?Ó$ò 	ˆCðÙ)¨#Ó.�Ø!$�˜’ð	ð 6BÀ-Ñ5PÖQ¨T�D˜( 4™.Ñ(ÒQˆð % ]Ñ3°lÀ=Ñ6QÑQö
àð �(˜4‘.Ñ ò
ˆ	ô ”3�|Ó$Ó%ó C*ˆõ	>ð ˜‰?×!Ñ! ]Ò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Öð
 ˜!‰_×#Ñ#¤{Ñ2Ü×#Ñ# wÒ.Ð.Ð.Ü˜l¨1™o×4Ñ4´eÔ<Ð<Ð<Ü�| A‘×-Ñ-Ó.°!Ò3Ð3Ð3Üô à(¨™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Ñ/Ù!Ö#Ù&4°\À!±_×5KÑ5KÓ&L�˜Q‘Ö#Ø˜!‰_×#Ñ#¤xÑ/Ù!Ö#Ø&/°¸Q±×0FÑ0FÑ&G�˜Q‘Ö#Ø˜!‰_×#Ñ#¤yÓ0ð ˜A‰×"Ñ"Ò*ä% l°LÀ±O×4JÑ4JÓK�Ø˜a’x��xØ&)�˜Q‘Ö#ñGC*ùóG Mùó Wùó
øô ò ÛðüâQùò
s/   ˜S&ÁS,ÂS2Â?S8ÃT	Ã2TÓ8	TÔT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)rZ   rY   r[   )	r3   rT   r0   rË  rÌ  rÍ  rÎ  r1   r2   )r  ro   s     r    Úclear_instruction_argsrÔ  N  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»  r‚  Úco_filenameÚco_namerO   Úco_qualnameÚco_firstlinenor   Úco_linetabler²  Úco_exceptiontabler�  r€  )rž   rŸ   rm   rn   )r4  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 )Nr‚  rÙ  r   )râ  Úgetattrrì   Úcleaned_instructionsr   Úclean_and_assemble_instructions)r
  Útransformationsr¯  r4  Ú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+r4  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 )Nr‚  rÙ  rO   )rÏ  Trß  r   r²  rà  r±  rÚ  r×  rá  )rS  rì   rm   rn   ÚtypesÚCodeTypeÚ_varname_from_opargrÒ  r%  r)  r,   r�  r   r  r   r#  r4  r  rG  )	r  r4  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)r1   r2   r3   )r  Úconstsro   s      r    Úpopulate_kw_names_argvalró  »  s-   € Øò +ˆØ�;‰;˜*Ó$Ø  §¡Ñ*ˆD�Kñ+r"   c                 ó0   — t        | |«      }t        |«      S r$   )Ú_cached_cleaned_instructionsÚ_clone_instructions©r
  r¯  r  s      r    rå  rå  Ã  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 r$   )r   r0   r1   r2   r3   r4   r5   r6   r8   r   r9   r:   Údictr¥  r   r   r   r   r   )r  rI   ÚcopiedÚremapr   s        r    rö  rö  Ë  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        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                  dk\  rt'        |«       t)        |«       |S )NrO   rV   rF   )r¤  r£  rM   rd   Úget_instructionsr˜  rm   rn   ró  r¶  r7  rá  r  rU  r\  r†  rg  ro  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 Ô.Ü×Ñ˜wÒ&Ü Ô-Ü×Ñ 7Ò*Ü)¨,Ô7Ü×Ñ 7Ò*Ü'¨Ô5Ü
×Ñ˜7Ò"Ü�|Ô$Ü˜<Ô(ØÐr"   c                 ó*   — | › dt        t        «      › �S )Nr  )rð   Ú_unique_id_counterr\   s    r    Ú	unique_idr     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. 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   NrV   ÚRETURN_CONSTrr   ÚRETURN_VALUEr   r}   ÚNOP)rå  Ú__code__rÔ  r  r1   r5   r3   rm   rn   rd   re   r0   rž   rg   rì   rA  r2   rT   rp   r   )
ÚfnÚvarname_mapÚnoreturnÚnoprefixr’   rI   ro   rX  ÚreturnsÚ	jump_insts
             r    Úbytecode_from_templater    sE  € ôD ! §¡Ó-€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)r   )r   Nr$   )F)NTT)srE   r5  Údataclassesrd   Ú	functoolsrÇ  rm   rê  Úcollections.abcr   r   Útypingr   r   r   r   r	   Úutils._backport_slotsr   Úbytecode_analysisr   r   r   r   Úutilsr   Ú	dataclassr   r   rn   rM   rT   r^   rg   rp   rv   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!  r)  r7  rG  rJ  rO  rS  rU  rY  r\  rg  ro  rv  r{  rë  r†  r�  r	  r˜  r%  r-   r«  r´  ÚhaslocalrË  ÚhasnamerÌ  ÚhasfreerÍ  ÚhasconstrÎ  r¹  rÒ  rÔ  râ  r°  ræ  ró  rå  rö  Ú	lru_cacherõ  rÈ  rÿ  r   r,   r  r  r.   r"   r    ú<module>r     sw  ðñó Û Û 
Û Û Û 
Û ß .ß 7Õ 7å 3÷ó õ $ð Ø×Ñ÷
ð 
ó ó ð
ð2 Ø×Ñ÷)ð )ó ó ð)ð< ×Ñ�wÒð

˜sŸ™ð 

°;ô 

ð 	×Ñ˜Ò ð

˜sŸ™ð 

°;ô 

ð

˜sŸ™ð 

°;ó 

÷ñ ð
 ×Ñ�wÒóGð 	×Ñ˜Ò ó%ò
ð
 ˜l°4ò#àó#ðN3 Kó 3ñ
8¨Kó 8ð)˜ó )ð0�t˜KÑ(ó 0ð67Ø˜ 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ó  ð> ¨D°Ñ,=ð  À$ó  ð* 6Ø9Ø7ñ€ð ¨$¨{Ñ*;ð  Àó  ð"#˜Ÿ™ð #°t¸KÑ7Hð #ÈTó #ðL D¨Ñ$5ð ¸#ó ðB˜có ó)ó)ð	2˜#ó 	2òYñ �—‘Ó€	Ùˆs�{‰{Ó€Ùˆs�{‰{Ó€Ù�—‘Ó€	ð	.¨#ó 	.ñh*˜4 Ñ,ó h*òVð"$�t˜C‘yó $ñN	PÀÇÁó 	Pð&JØ�{Ñ#ð&JØ+/°©9ð&JØDHÈÈcÈÁNð&Jà
ˆ4�Ñ˜eŸn™nÐ,Ñ-ó&JòR+ñ-¨d°;Ñ.?ó -ò"ðJ ×Ññ°h¸{Ñ6Kò ó ðð2 %�Y—_‘_Ó&Ð ð0�só 0ð.�u—~‘~ð .¨$ó .ô
`r"   