
    i0                       U d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZ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 ddlmZmZ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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI dd	lJmKZK dd
lLmMZM ddlNmOZOmPZPmQZQmRZRmSZS ddlTmUZUmVZVmWZWmXZX ddlYmZZZm[Z[m\Z\ ddl]m^Z^ ddl_m`Z`maZambZbmcZc ddldmeZemfZfmgZgmhZhmiZi ddljmkZk ddllmmZmmnZn ddlompZpmqZqmrZrmsZs ddltmuZumvZvmwZwmxZxmyZymzZzm{Z{ ddl|m}Z} ddl~mZmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZ edeege'dz  f         Zedeee         ege'dz  f         Zi Zded<   i Zded <   	 ddd,Zdd-Z	 ddd/Z	 ddd2Zdd5Zdd;Z ed<          dd=            Z ed>           ed?           ed@           edA           edB           edC           edD           edE          ddF                                                                                                Z edG          ddH            Z edI          ddJ            Z edI          ddK            Z edL          ddM            Z edN          ddO            Z edP           edQ          ddR                        Z edL           edS           edT           edP           edQ           edU           edV           edWeG           edXeD           edYe2           edYeF          ddZ                                                                                                                                    Z ed[          dd\            Z ed]          dd^            ZddgZ edh          ddi            Z edj           edk           edl           edm          ddn                                                Z edo          ddp            Zee^eceiekeeseeeee}dqZdreds<    edt          ddu            Z edve2          ddw            Z edxeG          ddy            Z edWeG          ddz            Z ed{eG          dd|            Z ed}e/          dd~            Z edB          dd            Z edC          dd            Z edD          dd            Z edE          dd            ZddZ ed?          dd            Z ed          dd            Z ed@          dd            Z ed          dd            ZddZddZ edeE          dd            Z edeE          dd            Z ede6          dd            ZddZ ede0          dd            Z ede0          dd            Z edeH          dd            Z ede/          dd            Z ed          dd            Z ed          dd            Z ed          dd            ZdS )a0  Special case IR generation of calls to specific builtin functions.

Most special cases should be handled using the data driven "primitive
ops" system, but certain operations require special handling that has
access to the AST/IR directly and can make decisions/optimizations
based on it. These special cases can be implemented here.

For example, we use specializers to statically emit the length of a
fixed length tuple and to emit optimized code for any()/all() calls with
generator comprehensions as the argument.

See comment below for more documentation.
    )annotations)Callable)Finalcast)	ARG_NAMEDARG_POSCallExprDictExpr
ExpressionGeneratorExpr	IndexExprIntExprListExpr
MemberExprNameExprRefExprStrExpr	SuperExpr	TupleExprVar)AnyType	TypeOfAny)
BasicBlockCallExtendIntegerPrimitiveDescriptionRaiseStandardErrorRegisterSetAttrTruncateUnreachableValue)!	RInstance
RPrimitiveRTupleRTypeRVecbool_rprimitivebytes_rprimitivebytes_writer_rprimitivec_int_rprimitivedict_rprimitiveint16_rprimitiveint32_rprimitiveint64_rprimitiveint_rprimitiveis_bool_rprimitiveis_dict_rprimitiveis_fixed_width_rtypeis_float_rprimitiveis_int16_rprimitiveis_int32_rprimitiveis_int64_rprimitiveis_int_rprimitiveis_list_rprimitiveis_sequence_rprimitiveis_str_rprimitive	is_taggedis_uint8_rprimitivelist_rprimitiveobject_rprimitiveset_rprimitivestr_rprimitivestring_writer_rprimitiveuint8_rprimitive)	IRBuilder)constant_fold_expr)comprehension_helperget_expr_length_value*sequence_from_generator_preallocate_helpertranslate_list_comprehensiontranslate_set_comprehension)FormatOpconvert_format_expr_to_strjoin_formatted_stringstokenizer_format_call)
vec_appendvec_pop
vec_remove)isinstance_bytearray)bytes_adjust_index_opbytes_get_item_unsafe_opbytes_range_check_opisinstance_bytes)dict_items_opdict_keys_opdict_setdefault_spec_init_opdict_values_opisinstance_dict)isinstance_float)generic_setattrsetup_object)int_to_big_endian_opint_to_bytes_opint_to_little_endian_opisinstance_int)bytes_writer_adjust_index_opbytes_writer_get_item_unsafe_opbytes_writer_range_check_opbytes_writer_set_item_unsafe_opstring_writer_adjust_index_op string_writer_get_item_unsafe_opstring_writer_range_check_op)isinstance_vec)isinstance_listnew_list_set_item_op)isinstance_bool)isinstance_frozensetisinstance_set)
bytes_decode_ascii_strictbytes_decode_latin1_strictbytes_decode_utf8_strictisinstance_strstr_adjust_index_opstr_encode_ascii_strictstr_encode_latin1_strictstr_encode_utf8_strictstr_get_item_unsafe_as_int_opstr_range_check_op)isinstance_tuplenew_tuple_set_item_oprE   Nz1dict[tuple[str, RType | None], list[Specializer]]specializersz0dict[tuple[str, RType], list[DunderSpecializer]]dunder_specializersbuilderexprr	   calleer   name
str | NonetypRType | NonereturnValue | Nonec                j    |r0||ft           v r%t           ||f         D ]} || ||          }||c S d S N)r}   )r   r   r   r   r   specializervals          W/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypyc/irbuild/specialize.py_apply_specializationr      s]      s|++'c	2 	 	K+gtV44C


 4    c                0    t          | |||j                  S )zIInvoke the Specializer callback for a function if one has been registered)r   fullnamer   r   r   s      r   apply_function_specializationr      s     !$HHHr   r   c                H    ||j         n|j        }t          | ||||          S )zGInvoke the Specializer callback for a method if one has been registered)r   r   r   )r   r   r   r   r   s        r   apply_method_specializationr      s+     "k6??v{D $cBBBr   str$Callable[[Specializer], Specializer]c                     d fd}|S )zDecorator to register a function as being a specializer.

    There may exist multiple specializers for one function. When
    translating method calls, the earlier appended specializer has
    higher priority.
    fSpecializerr   c                h    t                               fg                               |            | S r   )r}   
setdefaultappendr   r   r   s    r   wrapperz$specialize_function.<locals>.wrapper   s0    sR0077:::r   )r   r   r   r    r   r   r   s   `` r   specialize_functionr      .           Nr   r'   0Callable[[DunderSpecializer], DunderSpecializer]c                     d fd}|S )aN  Decorator to register a function as being a dunder specializer.

    Dunder specializers handle special method calls like __getitem__ that
    don't naturally map to CallExpr nodes.

    There may exist multiple specializers for one dunder. When translating
    dunder calls, the earlier appended specializer has higher priority.
    r   DunderSpecializerr   c                h    t                               fg                               |            | S r   )r~   r   r   r   s    r   r   z"specialize_dunder.<locals>.wrapper   s0    &&c{B77>>qAAAr   )r   r   r   r   r   r   s   `` r   specialize_dunderr      r   r   	base_exprr   argslist[Expression]ctx_exprc                    |                      |          }||ft          v r&t          ||f         D ]} || |||          }||c S dS )a  Invoke the DunderSpecializer callback if one has been registered.

    Args:
        builder: The IR builder
        base_expr: The base expression (target object)
        args: List of argument expressions (positional arguments to the dunder)
        name: The dunder method name (e.g., "__getitem__")
        ctx_expr: The context expression for error reporting (e.g., IndexExpr)

    Returns:
        The specialized value, or None if no specialization was found.
    N)	node_typer~   )r   r   r   r   r   	base_typer   r   s           r   apply_dunder_specializationr      so    & !!),,I 	i///.tY? 	 	K+gy$AAC


 4r   zbuiltins.globalsc                ^    t          |j                  dk    r|                                 S d S )Nr   )lenr   load_globals_dictr   s      r   translate_globalsr     s,    
49~~((***4r   zbuiltins.absbuiltins.intbuiltins.floatzbuiltins.complexzmypy_extensions.i64zmypy_extensions.i32zmypy_extensions.i16zmypy_extensions.u8c                   t          |j                  dk    r|j        t          gk    rt	          |t
                    r|j        d         }|                     |          }|j                            d          d         }|dv rd}nd| d}t	          |t                    rM|j
                            |          r3|                     |          }|                     ||g d|j                  S dS )zSpecialize calls on native classes that implement the associated dunder.

    E.g. i64(x) gets specialized to x.__int__() if x is a native instance.
       r   .)i64i32i16u8__int____N)r   r   	arg_kindsr   
isinstancer   r   r   splitr$   class_ir
has_methodacceptgen_method_callline)r   r   r   argarg_typ	shortnamemethodobjs           r   $translate_builtins_with_unary_dunderr     s     49~~t~'::z&RZ?[?[:il##C((O))#..q1	333FF')'''Fgy)) 	Mg.>.I.I&.Q.Q 	M..%%C**3D$)LLL4r   zbuiltins.lenc                ,   t          |j                  dk    r|j        t          gk    r|j        d         }|                     |          }|                     |t          |          pt          |t                              }t          |          st          |t                    rt          | |||j        d          S t          |j        t                    r|                     ||j        d          S |                     ||j                  S d S )Nr   r   
can_borrowF)use_pyssize_tT)r   r   r   r   r   r   r:   r   r(   r;   r&   rH   r   typebuiltin_len)r   r   r   r   
expr_rtyper   s         r   translate_lenr   9  s   
49~~t~'::il&&s++
nn.z::ZjUY>Z>Z  
 
 "*-- 	;J1O1O 	;(#sDIUZ[[[[ #(D)) ;**3	*NNN**3	:::4r   builtins.listc                t   t          |j                  dk    r|j        t          gk    sdS |j        d         }t	          |t
                    r!|j        st	          |j        t                    sdS |j        j        }|j        j	        }| 
                    |          }t          |          r|dv sdS |                     |          }|dk    r"|                     t          |g|j                  S |dk    r"|                     t           |g|j                  S |                     t"          |g|j                  S )zSpecialize a common case when list() is called on a dictionary
    view method call.

    For example:
        foo = list(bar.keys())
    r   Nr   )keysvaluesitemsr   r   )r   r   r   r   r   r	   r   r   r   r   r   r3   r   call_crY   r   r[   rX   )r   r   r   r   baseattrrtyper   s           r   dict_methods_fast_pathr   M  s#    	NNaDNwi$?$?t
)A,CsH%% ch :cjR\;];] t:?D:?Dd##Eu%% $2M*M*Mt
..

C v~~~~lSE49===			~~nseTY???~~mcUDI>>>r   c                     t          |j                  dk    rd|j        d         t          k    rNt	          |j        d         t
                    r.d fd}t           |j        d          j        j        |          S dS )zSpecial case for simplest list comprehension.

    For example:
        list(f(x) for x in some_list/some_tuple/some_str)
    'translate_list_comprehension()' would take care of other cases
    if this fails.
    r   r   xr#   yzr   intr   Nonec                F                         t          | ||g|           d S r   )r   rm   r   r   r   r   r   s       r   set_itemz4translate_list_from_generator_call.<locals>.set_item}  s&    NN/!QDAAAAAr   empty_op_llbuilderset_item_opN
r   r#   r   r#   r   r#   r   r   r   r   )	r   r   r   r   r   r   rI   r   new_list_op_with_lengthr   r   r   r   s   `   r   "translate_list_from_generator_callr   l  s     	DI!N1((ty|]33 )	B 	B 	B 	B 	B 	B :IaL&F 	
 
 
 	
 4r   builtins.tuplec                     t          |j                  dk    rd|j        d         t          k    rNt	          |j        d         t
                    r.d fd}t           |j        d          j        j        |          S dS )zSpecial case for simplest tuple creation from a generator.

    For example:
        tuple(f(x) for x in some_list/some_tuple/some_str/some_bytes)
    'translate_safe_generator_call()' would take care of other cases
    if this fails.
    r   r   r   r#   r   r   r   r   r   r   c                F                         t          | ||g|           d S r   )r   r|   r   s       r   r   z5translate_tuple_from_generator_call.<locals>.set_item  s&    NN01a)TBBBBBr   r   Nr   )	r   r   r   r   r   r   rI   r   new_tuple_with_lengthr   s   `   r   #translate_tuple_from_generator_callr     s     	DI!N1((ty|]33 )	C 	C 	C 	C 	C 	C :IaL&D 	
 
 
 	
 4r   builtins.setc                    t          |j                  dk    rQ|j        d         t          k    r;t	          |j        d         t
                    rt          | |j        d                   S dS )zSpecial case for set creation from a generator.

    For example:
        set(f(...) for ... in iterator/nested_generators...)
    r   r   N)r   r   r   r   r   r   rK   r   s      r   !translate_set_from_generator_callr     s^     	DI!N1((ty|]33 ) +7DIaLAAA4r   builtins.minzbuiltins.maxc                   |j         t          t          gk    r|                     |j        d                   |                     |j        d                   }}t	          |                     |                    }|j        dk    r|                     ||d|j                  }n|                     ||d|j                  }t                      t                      t                      }	}}| 
                    |||           |                     |           |                     ||                     ||j        |j                  |j                   |                     |	           |                     |           |                     ||                     ||j        |j                  |j                   |                     |	           |                     |	           |S d S )Nr   r   r   <>)r   r   r   r   r   r   r   	binary_opr   r   add_bool_branchactivate_blockassigncoercer   goto)
r   r   r   r   r   result
comparison
true_blockfalse_block
next_blocks
             r   faster_min_maxr    s    ~'7+++~~dil++W^^DIaL-I-I1'++D1122?n,, **1adi@@JJ **1adi@@J.8llJLL*,,K

JDDDz***vw~~adiHH$)TTTZ   {+++vw~~adiHH$)TTTZ   z***4r   builtins.frozensetbuiltins.dictzbuiltins.sortedzcollections.OrderedDictjoinextendupdatec           	         t          |j                  dk    r)|j        d         t          k    rt	          |j        d         t
                    rt	          |t                    r                                          |j	                  |j
        t           |j        d                   g fd|j        dd         D             z                        |          |j        |j        |j                  S                      ||t           |j        d                   g fd|j        dd         D             z             S dS )zuSpecial cases for things that consume iterators where we know we
    can safely compile a generator into a list.
    r   c                :    g | ]}                     |          S r   r   .0r   r   s     r   
<listcomp>z1translate_safe_generator_call.<locals>.<listcomp>  %    DDDsw~~c**DDDr   r   Nc                :    g | ]}                     |          S r   r  r  s     r   r  z1translate_safe_generator_call.<locals>.<listcomp>  r  r   )r   r   r   r   r   r   r   r   r   r   r   rJ   r   r   	arg_namescall_refexpr_with_argsr   s   `  r   translate_safe_generator_callr    sG   $ 	DIN1((ty|]33 ) fj)) 	**v{++1'49Q<HHIDDDDdimDDDE !!$''	   111'49Q<HHIDDDDdimDDDE	   4r   zbuiltins.anyc                    t          |j                  dk    rZ|j        t          gk    rIt	          |j        d         t
                    r)t          | |j        d         | j        d | j                  S d S )Nr   r   c                    | S r   r   )r   s    r   <lambda>z$translate_any_call.<locals>.<lambda>
  s    a r   )	r   r   r   r   r   r   any_all_helperfalsetruer   s      r   translate_any_callr    si     	DI!Nwi''ty|]33 ( gty|W]KKQXQ]^^^4r   zbuiltins.allc                     t          j                  dk    r]j        t          gk    rLt	          j        d         t
                    r,t           j        d          j         fd j                  S d S )Nr   r   c                <                         | dj                  S )Nnot)unary_opr   )r   r   r   s    r   r  z$translate_all_call.<locals>.<lambda>  s    g&&q%;; r   )	r   r   r   r   r   r   r  r  r  r   s   `` r   translate_all_callr"    s     	DI!Nwi''ty|]33 ( IaLL;;;;;M
 
 	
 4r   genr   initial_valueCallable[[], Value]modifyCallable[[Value], Value]	new_valuer#   c           	        	
  |            }t          t          |j                  
                     
||j                   t	          t          j        j        j        j	                            }t                      t                      t                      c	d 	
fd}t           ||j                                                   
S )Nr   r   r   c                 F                         j                            }                     | 	                               	                        }                    ||j                                                                                 d S r   )r   	left_exprr   r   r   r   r   )
r  new_valr   
exit_blockr  r#  r&  r(  retvalr  s
     r   gen_inner_stmtsz'any_all_helper.<locals>.gen_inner_stmts,  s    VGNN3=99::

JDDDz***)++vw555Z   {+++++r   r   r   )r   r)   r   r   listzipindices	sequences	condlistsis_asyncr   rG   goto_and_activate)r   r#  r$  r&  r(  init_valloop_paramsr0  r.  r  r/  r  s   `` ``   @@@@r   r  r    s     }HoHM:::FNN68X]333s3;s}clSSTTK*4,,
jll'JZ, , , , , , , , , , , , , +IIIj)))Mr   zbuiltins.sumc                    t          |j                  dv r6|j        d         t          k    r t	          |j        d         t
                    sd S t          |j                  dk    r+|j        d         t          t          fvrd S |j        d         }nt          d          }|j        d                              |          }t          ||j
                                                                                 |          ||j
                  |j
                   d	 fd}t          t          j        j        j        j                            }t)           ||j
                   S )
N)r      r   r<  r   r*  r   r   c            	                              j                  }                                         | d| j                  | j                   d S )N+)r   r,  r   r   r   )	call_exprr   gen_exprr/  s    r   r0  z+translate_sum_call.<locals>.gen_inner_stmtsX  sV    NN8#566	G%%fiinMMy~	
 	
 	
 	
 	
r   r1  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  r3  r4  r5  r6  r7  rG   )	r   r   r   
start_exprtarget_typer0  r:  r@  r/  s	   `      @@r   translate_sum_callrC  ;  sx    	DI&  N1((ty|]33 ) t 49~~>!Wi$8884Yq\

QZZ
y|H##D))Kk	222FNNw~~j99;	RRTXT]  
 
 
 
 
 
 
 
 Hh0(2DhFWXX K +NNNMr   zdataclasses.fieldzattr.ibzattr.attribzattr.Factoryc                H    t          t          j                  | j        |<   dS )a,  Special case for 'dataclasses.field', 'attr.attrib', and 'attr.Factory'
    function calls because the results of such calls are type-checked
    by mypy using the types of the arguments to their respective
    functions, resulting in attempted coercions by mypyc that throw a
    runtime error.
    N)r   r   
from_errortypesr   s      r    translate_dataclasses_field_callrG  f  s      ")"677GM$4r   zbuiltins.nextc                d    |j         t          gt          t          gfv r t          |j        d         t                    sdS |j        d         t                               |                    t          |j                  dk    r                      |j        d                   nd}t                      d fd}t          t          j        j        j        j                            }t!           ||j                   |r7                     |j        j                                                   nT                     t-          t,          j        d|j                                                  t1                                                                 S )a6  Special case for calling next() on a generator expression, an
    idiom that shows up some in mypy.

    For example, next(x for x in l if x.id == 12, None) will
    generate code that searches l for an element where x.id == 12
    and produce the first such object, or None if no such element
    exists.
    r   Nr   r   r   c                                                                j                  j        j                                                   d S r   )r   r   r,  r   r   )r   r.  r#  r/  s   r   r0  z,translate_next_call.<locals>.gen_inner_stmts  sF     	vw~~cm<<cm>PQQQZ     r   r1  )r   r   r   r   r   r   r   r   r   r   r2  r3  r4  r5  r6  r7  rG   r   r   r,  r   addr   STOP_ITERATIONr"   r   )	r   r   r   default_valr0  r:  r.  r#  r/  s	   `     @@@r   translate_next_callrM  w  s    	G9w&8999ty|]33 	: t
)A,Cg''--..F25di..12D2D'..1...$KJ! ! ! ! ! ! ! ! ! s3;s}clSSTTK+III
  #v{CM,>???Z    &'9'H$PTPYZZ[[[KMM""":&&&Mr   )builtins.boolzbuiltins.bytearrayzbuiltins.bytesr  r   r  r   r   r   zbuiltins.strr   zlibrt.vecs.vecr   isinstance_primitiveszbuiltins.isinstancec           	        t          |j                  dk    r|j        t          t          gk    sdS |j        d         }|j        d         }t	          |t
                    r|j        s|                                 S t	          |t          t
          f          rt          t          j                  | j        |<   |                     |          }|Qt          d |D                       }|                     ||          }| j                            |||j                  S t	          |t                    r^|j        }|rSt(                              |j                  }	|	r2|                     |          }|                     |	|g|j                  S n6t	          |t
                    r g }
|j        D ]Q}t	          |t                    s dS |j         dS |j        j        |
vr|
                    |j        j                   Rd |
D             }d|v rdS |                     |          }t3          t4                    }t7                      }t7                      }t7                      }t9          |          D ]\  }}	|t          |          dz
  k    }|r|nt7                      }|                     |                     t=          t>          |	          |g|j                  ||           |s|                      |           |                      |           | !                    || "                                |j                   | #                    |           |                      |           | !                    ||                                 |j                   | #                    |           |                      |           |S dS )zSpecial case for builtins.isinstance.

    Prevent coercions on the thing we are checking the instance of -
    there is no need to coerce something to a new type before checking
    what type it is, and the coercion could lead to bugs.
    r<  Nr   r   c              3  D   K   | ]}|j         o|j         o|j         V  d S r   )is_ext_classinherits_pythonallow_interpreted_subclasses)r  irs     r   	<genexpr>z'translate_isinstance.<locals>.<genexpr>  sN         b(:$:b2Cb?b     r   r   c                B    g | ]}t                               |          S r   )rO  get)r  r   s     r   r  z(translate_isinstance.<locals>.<listcomp>  s'    PPP&**844PPPr   )$r   r   r   r   r   r   r   r  r   r   r   rE  rF  flatten_classesallr   r   isinstance_helperr   noderO  rX  r   primitive_opr   r   r)   r   	enumerater   r   r   r   r   r  r   )r   r   r   obj_expr	type_exprirsr   r   r\  desc
node_namesitemdescsr/  
pass_block
fail_blockr.  iis_lastr  s                       r   translate_isinstancerj    s    	NNaDNw6H$H$Hty|H	!I)Y'' 	 }})gy122 
J"))*>"?"?h%%i00?      J ..j.AAC?44S#tyIII)W%% 6~ 	D(,,T];;D DnnX..++D3%CCC	Iy	)	) . "
O 	6 	6DdG,, tty tty!33!!$)"4555PPZPPP5==4nnX&&/**\\
\\
\\
 !'' 		3 		3GAt3u::>)G'.@JLLJ##$$T*>%E%EudiXX  
  3&&z222 	z***vw||~~ty999Z    	z***vw}}	:::Z    	z***4r   r   c                l   t          |j                  dk    r|j        t          t          gk    rt	          |t
                    rl|j        d         }t	          |t                    r2t          |j                  rdS t          dt          |j
                  }nt	          |t                    r2t          |j                  rdS t          dt          |j
                  }nst	          |t                    r\t	          |j        t                    rB|j        j        dk    r2t          |j                  rdS t          dt          |j
                  }ndS |                     |j                  }|                     |j        d                   }|                     t&          |||g|j
                  S dS )a  Special case for 'dict.setdefault' which would only construct
    default empty collection when needed.

    The dict_setdefault_spec_init_op checks whether the dict contains
    the key and would construct the empty collection only once.

    For example, this specializer works for the following cases:
         d.setdefault(key, set()).add(value)
         d.setdefault(key, []).append(value)
         d.setdefault(key, {})[inner_key] = inner_val
    r<  r   Nr      r   )r   r   r   r   r   r   r   r   r   r,   r   r
   r	   r   r   r   r   r   r   rZ   )r   r   r   r   	data_typecallee_dictkey_vals          r   translate_dict_setdefaultrp    s    	DI!Nw000vz** 1 ilc8$$ 	39~~ t#3TY??IIX&& 	39~~ t#3TY??IIsH%%		3:x00		 
#~5538}} t#3TY??II4nnV[11..1..~~(;*KTY
 
 	
 4r   formatc                   t          |t                    rt          | |j                  }t          |t                    r|j                            t                    t          |j                  k    rOt          |          }|d S |\  }}t          | ||j        |j                  }|d S t          | |||j                  S d S r   )r   r   rF   r   r   r   countr   r   rO   rM   r   r   rN   )r   r   r   folded_calleetokensliterals
format_opssubstitutionss           r   translate_str_formatry  :  s    &*%% W*7FK@@mS)) 		Wdn.B.B7.K.KsSWSaObOb.b.b*=99F~t#) Hj6w
DIW[W`aaM$t)'8]DIVVV4r   c                   t          |t                    r't          |j        t                    r|j        j        dk    r|j        t          gk    rt          |j        d         t                    r|j        d         j	        D ]}t          |t                    rt          |t                    rt          |j        t                    r|j        j        dk    r dS t          |j        j        t                    r|j        j        j        dk    r dS t          |j        d         t                    r|j        d         j        dk    r dS  dS g }g }|j        d         j	        D ]}t          |t                    r@|j        dk    r5|                    t          j                   |                    |           Wt          |t                    r?|                    t          j                   |                    |j        d                    dd}t!          t#          |          dz
            D ]}t#          |          |dz   k    r |||                   x} |||dz                      x}	g |d|         t          ||	z             ||dz   d         }g |d|         t          j        ||dz   d         }t#          |          |dz   k    r) |||                   x} |||dz                      x}	t%          | |||j                  }
|
dS t)          | d|
|j                  S dS )zSpecial case for f-string, which is translated into str.join()
    in mypy AST.

    This specializer optimizes simplest f-strings which don't contain
    any format operation.
     r   rq  Nz{:{}}r   r   r   r   r   c                    t          | t                    r| j        S t          | t                    rCt          | j        t
                    r)| j        j        r| j        j        }|t          |          S d S r   )	r   r   valuer   r\  r   is_finalfinal_valuer   )r   r  s     r   get_literal_strz*translate_fstring.<locals>.get_literal_stru  sp    $(( ,z!D'** ,z$)S/I/I ,diN` ,"i3*{+++4r   r<  )r   r   r   r   )r   r   r   r   r}  r   r   r   r   r   r	   r   r   r   rL   STRranger   rM   r   rN   )r   r   r   rd  rw  exprsr  rh  firstsecondrx  s              r   translate_fstringr  K  s_    	6:&&8Ov{G,,8O K##Nwi''ty|X.. ( IaL& 	 	D$(( D(++ !$+z::  dk>NRZ>Z>Z44"4;#3W== AEAQAW[bAbAb44!$)A,88  DIaL<NRT<T<T44 =U tt
"$IaL& 	+ 	+D$(( +TZ2-=-=!!(,///T""""D(++ +!!(,///TYq\***	 	 	 	 s5zzA~&& 	S 	SAE

a!e##-oeAh777UD.uQU|<<<VIN%)NWUV^%<%<NuQUWW~NRz"1"~Rx|RjQ>QR
 E

a!e##-oeAh777UD.uQU|<<<VI
 37JtyYY 4%gt]DINNN4r   encodec                $   t          |t                    sdS t          |j                  dk    r"t          |j        d         t
                    sdS t          |j                  dk    r"t          |j        d         t
                    sdS d}d}t          |j                  dk    rt          |j        d         t
                    r|j        d         t          k    rH|j        d         dk    r|j        d         j        }nO|j        d         dk    r|j        d         j        }n+|j        d         t          k    r|j        d         j        }ndS t          |j                  dk    rt          |j        d         t
                    r|j        d         t          k    rH|j        d         dk    r|j        d         j        }nO|j        d         dk    r|j        d         j        }n+|j        d         t          k    r|j        d         j        }ndS |dk    rdS |
                                                    dd	                              d
d	          }|dv r:|                     t          |                     |j                  g|j                  S |dv r:|                     t"          |                     |j                  g|j                  S |dv r:|                     t$          |                     |j                  g|j                  S dS )zPSpecialize common cases of str.encode for most used encodings and strict errors.Nr   r   utf8strictencodingerrors-r{  _)r   utfr  cp65001)646asciiusascii)iso885918859cp819latinlatin1l1)r   r   r   r   r   r   r   r  r}  r   lowerreplacer   rx   r   r   r   rv   rw   r   r   r   r  r  s        r   str_encode_fast_pathr    s    fj)) t 4>Qz$)A,'H'Ht
4>Qz$)A,'H'HtHF
4>Q:dilG#D#D>!	))~a J..9Q<-"h..1+^A'))y|)HH4
4>Q:dilG#D#D>!	))~a J..9Q<-"h..1+^A'))Yq\'FF4t~~''R0088bAAH333~~4w~~fk7R7R6SUYU^___	0	0	0~~5v{8S8S7TVZV_```	K	K	K~~69T9T8UW[W`aaa4r   decodec                   t          |t                    sdS t          |j                  dk    r"t          |j        d         t
                    sdS t          |j                  dk    r"t          |j        d         t
                    sdS d}d}t          |j                  dk    rt          |j        d         t
                    r|j        d         t          k    rH|j        d         dk    r|j        d         j        }nO|j        d         dk    r|j        d         j        }n+|j        d         t          k    r|j        d         j        }ndS t          |j                  dk    rt          |j        d         t
                    r|j        d         t          k    rH|j        d         dk    r|j        d         j        }nO|j        d         dk    r|j        d         j        }n+|j        d         t          k    r|j        d         j        }ndS |dk    rdS |
                                                    dd	          }|d
v r:|                     t          |                     |j                  g|j                  S |dv r:|                     t"          |                     |j                  g|j                  S |dv r:|                     t$          |                     |j                  g|j                  S dS )zPSpecialize common cases of obj.decode for most used encodings and strict errors.Nr   r   r  r  r  r  r  r  )r   r  r  zutf-8r  )r  r  r  zus-ascii)z	iso8859-1z
iso-8859-1r  r  r  r  zlatin-1r  )r   r   r   r   r   r   r   r  r}  r   r  r  r   rs   r   r   r   rq   rr   r  s        r   bytes_decode_fast_pathr    s    fj)) t 4>Qz$)A,'H'Ht
4>Qz$)A,'H'HtHF
4>Q:dilG#D#D>!	))~a J..9Q<-"h..1+^A'))y|)HH4
4>Q:dilG#D#D>!	))~a J..9Q<-"h..1+^A'))Yq\'FF4t~~''S11H<<<~~69T9T8UW[W`aaa	<	<	<~~7'..:U:U9VX\Xabbb	 	 	
 	
 ~~87>>&+;V;V:WY]Ybccc4r   c                   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S t          |          st          |          rE|                     |          }| 	                    t          |t          d|j                            S t          |          rE|                     |          }| 	                    t          |t          d|j                            S t          |          st          |          r6|                     |          }|                     |t          |j                  S d S )Nr   r   Tsignedr   F)r   r   r   r   r   r8   r   r7   r6   rJ  r   r0   r   r>   r9   r2   r   r   r   r   r   arg_typer   s         r   translate_i64r     s^   
49~~dnQ/7::t
)A,C  %%H8$$ 
@~~c"""	X	&	& @*=h*G*G @nnS!!{{6#'749UUUVVV	X	&	& @nnS!!{{6#'7DIVVVWWW	8	$	$ @(:8(D(D @nnS!!~~c#3TY???4r   c                   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S t          |          rD|                     |          }|                     t          |t          |j                            S t          |          rE|                     |          }|                     t          |t          d|j                            S t          |          rE|                     |          }|                     t          |t          d|j                            S t          |          st!          |          rK|                     |          }t#          |t                    }|                     |t          |j                  S d S )Nr   r   r*  Tr  F)r   r   r   r   r   r7   r   r8   rJ  r!   r/   r   r6   r   r>   r9   r2   truncate_literalr   r  s         r   translate_i32r    s   
49~~dnQ/7::t
)A,C  %%H8$$ @~~c"""	X	&	& @nnS!!{{8C)9	JJJKKK	X	&	& 	@nnS!!{{6#'749UUUVVV	X	&	& @nnS!!{{6#'7DIVVVWWW	8	$	$ @(:8(D(D @nnS!!s$455~~c#3TY???4r   c                0   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S t          |          st          |          rD|                     |          }| 	                    t          |t          |j                            S t          |          rE|                     |          }| 	                    t          |t          d|j                            S t          |          st!          |          rK|                     |          }t#          |t                    }|                     |t          |j                  S d S )Nr   r   r*  Fr  )r   r   r   r   r   r6   r   r7   r8   rJ  r!   r.   r   r>   r   r9   r2   r  r   r  s         r   translate_i16r  ,  sl   
49~~dnQ/7::t
)A,C  %%H8$$ @~~c"""	X	&	& 	@*=h*G*G 	@nnS!!{{8C)9	JJJKKK	X	&	& @nnS!!{{6#'7DIVVVWWW	8	$	$ @(:8(D(D @nnS!!s$455~~c#3TY???4r   c                   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S t          |          st          |          st          |          rD|                     |          }| 
                    t          |t          |j                            S t          |          st          |          rK|                     |          }t!          |t                    }|                     |t          |j                  S d S )Nr   r   r*  )r   r   r   r   r   r>   r   r6   r7   r8   rJ  r!   rD   r   r9   r2   r  r   r  s         r   translate_u8r  A  s9   
49~~dnQ/7::t
)A,C  %%H8$$ @~~c"""H%%
@x((
@ x((
@
 nnS!!{{8C)9	JJJKKK	8	$	$ @(:8(D(D @nnS!!s$455~~c#3TY???4r   r}  r   r%   c                    t          | t                    s| S |                                 }d|j        dz  z  dz
  }||z  }|j        r||dz   dz  k    r||dz   z  }t          ||          S )zIf value is an integer literal value, truncate it to given native int rtype.

    For example, truncate 256 into 0 if rtype is u8.
    r      r<  )r   r   numeric_valuesize	is_signed)r}  r   r   max_unsigneds       r   r  r  W  s    
 eW%% A%*q.)Q.L	LA 1!1a 777	\A1er   c                p   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          st          |          st          |          r6|                     |          }| 	                    |t          |j                  S d S Nr   r   )r   r   r   r   r   r2   r9   r4   r   r   r1   r   )r   r   r   r   r  srcs         r   translate_intr  g  s    
49~~dnQ/7::t
)A,C  %%H8$$>X&&>  ))>
 nnS!!~~c>49===4r   rN  c                    t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }| j                            |          S r  )r   r   r   r   r   r   
bool_value)r   r   r   r   r  s        r   translate_boolr  w  s]    
49~~dnQ/7::t
)A,C
..

C?%%c***r   c                    t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S d S r  )r   r   r   r   r   r5   r   )r   r   r   r   r  s        r   translate_floatr    sp    
49~~dnQ/7::t
)A,C  %%H8$$ #~~c"""4r   zbuiltins.ordc           	        t          |j                  dk    s|j        d         t          k    rd S |j        d         }t	          | |          }t          |t          t          f          r/t          |          dk    rt          t          |                    S t          |t                    r|                     |j                  }t          |          rk|j        }|                     |          }t          |          st!          |          r1t#          | |j        |j        g|t$          t&          t(                    }|S d S r  )r   r   r   r   rF   r   r   bytesr   ordr   r   r   r<   indexr=   r4   #translate_getitem_with_bounds_checkru   rz   ry   )	r   r   r   arg_exprr   r   
index_expr
index_typer  s	            r   translate_ordr    s)   
49~~dnQ/7::ty|H
Wh
/
/C#U|$$ !SQs3xx    (I&& %%hm44	Y'' 	!J **:66J$$ (<Z(H(H  =M^$'&1  4r   boolc                    t          | t                    o)t          | j        t                    o| j        j        dk    S )z%Returns True for object.<name> calls.zbuiltins.object)r   r   r   r   r   )r   s    r   	is_objectr    s=     	6:&& 	6v{H--	6K $55r   c                T    t          | j        t                    pt          |          S )z7Returns True for super().<name> or object.<name> calls.)r   r   r   r  )r   r   s     r   is_super_or_objectr    s!    dk9--B61B1BBr   __new__c                   | j         }|j        dk    st          ||          sd S |                                 }|d S d}|j        s |                     | d|j                   d S |j        r |                     | d|j                   d S t          |j	                  dk    r4|                     | dt          |j	                   |j                   d S |j	        d         }|j
        j        }t          |t                    rt          |          dk    r|d         |j        k    r|                     |j	        d                   }|                                }	|	Bt          |	          dk    r/|                     t#          |j        |g|j                            S |                     t(          |g|j                  S d S )Nr  z"object.__new__()"z( not supported for non-extension classesz= not supported for classes inheriting from non-native classesr   z% supported only with 1 argument, got r   )fn_infor   r  get_current_class_irrR  errorr   rS  r   r   fitemr  r   r   r   
subclassesrJ  r   setupr   r_   )
r   r   r   fnrU  calltyp_argmethod_argssubtypesubss
             r   translate_object_newr    s   	B	w)#5dF#C#Ct		%	%	'	'B	ztD? GGGSSSt	 RRRTXT]	
 	
 	
 t
49~~TTC	NNTTVZV_```tilG($K'8$$ 	B[)9)9A)=)=+a.T[T`B`B`..1..}}D		Q;;tBHwiCCDDD
 ~~lWItyAAA4r   __setattr__c                   t          |j        t                    }t          |          }|rt	          |j                  dk    s|rt	          |j                  dk    sd S |r |                     |j        d                   n|                                 }|                                 }|r|j	        r|j
        s|j        rd S |rdnd}|rdnd}|j        |         }	|j        |         }
|                     |
          }t          |	t                    rt|rr|                    |	j                  rX|	j        }|                     ||j        |         |j                  }|                     t'          ||||j                            S |                     |	          }|                     t*          |||g|j                  S )Nr<  rl  r   r   )r   r   r   r  r   r   r   selfr  rR  builtin_baserS  r   has_attrr}  r   
attributesr   rJ  r    r   r^   )r   r   r   is_superis_object_calleeself_regrU  name_idx	value_idx	attr_name
attr_valuer}  r   name_regs                 r   translate_object_setattrr    s   $+y11H (( #di..A--3C-DIZ[H[H[t/?Sw~~dil+++W\\^^H		%	%	'	'B	 2? bo 9K t#qq!H$1I	(#I9%JNN:&&E)W%% F" FY_1M1M FubmD&949EE{{78T5$)DDEEE~~i((H>>/Hh+F	RRRr   to_bytesc                \   t          d |j        D                       rd S t          |t                    sd S d }d }d }d}t	          |j        |j                  D ]W\  }}|$|dk    r|}n|dk    r|}n|dk    r|}n d S |dz  }+|dk    r| d S |}9|dk    r| d S |}G|dk    r| d S |}U d S ||d S d}	|"t          |                     |                    }	t          |                     |                    r$t          |                     |                    r|	sd S |                     |j                  }
|                     |          }||                                 }n|                     |          }t          |t                    r^|j        d	k    r$|                     t"          |
||g|j                  S |j        d
k    r$|                     t&          |
||g|j                  S |                     |          }|                     t(          |
|||g|j                  S )Nc              3  6   K   | ]}|t           t          fvV  d S r   )r   r   r  kinds     r   rV  z*specialize_int_to_bytes.<locals>.<genexpr>  s,      
G
G4++
G
G
G
G
G
Gr   r   r   r<  length	byteorderr  Tlittlebig)anyr   r   r   r3  r  r   r2   r   r9   r<   r   r   r  r   r}  r   rb   r   r`   ra   )r   r   r   length_exprbyteorder_exprsigned_exprpositional_indexr   r   signed_is_boolself_arg
length_arg
signed_argbyteorder_args                 r   specialize_int_to_bytesr    s    
G
G
G
G
GGG tfj)) t%)K(,N%)K33  	c<1$$!!Q&&!$!Q&&!tt!X&ttKK[  )tt NNX&ttKK44n4tN+G,=,=k,J,JKK'++K8899g//??@@ 
 t~~fk**H,,J]]__

^^K00
.'** 8++>>'(J
)KTY   !U**>>$xZ&H$)   NN>22M>>(JzJDI  r   adjust_index_opr   range_check_opget_item_unsafe_opc                   t          |          dk    rdS |                     |          }|                     |d                   }|                     |||g|j                  }	|                     |||	g|j                  }
t	                      }t	                      }|                     |
||           |                     |           |                     t          t          j	        d|j                             |                     t                                 |                     |           |                     |||	g|j                  }|S )a  Shared helper for optimized __getitem__ with bounds checking.

    This implements the common pattern of:
    1. Adjusting negative indices
    2. Checking if index is in valid range
    3. Raising IndexError if out of range
    4. Getting the item if in range

    Args:
        builder: The IR builder
        base_expr: The base object expression
        args: The arguments to __getitem__ (should be length 1)
        ctx_expr: The context expression for line numbers
        adjust_index_op: Primitive op to adjust negative indices
        range_check_op: Primitive op to check if index is in valid range
        get_item_unsafe_op: Primitive op to get item (no bounds checking)

    Returns:
        The result value, or None if optimization doesn't apply
    r   Nr   index out of range)r   r   r]  r   r   r   r   rJ  r   INDEX_ERRORr"   )r   r   r   r   r  r  r  r   r  adjusted_indexrange_checkvalid_blockinvalid_blockr  s                 r   r  r  E  sC   < 4yyA~~t ..
#
#C NN47##E ))/C<WWN &&~^7Lhm\\K ,,KLLMKmDDD =)))KK-9;OQYQ^__   KK ;'''!!"4sN6KX][[FMr   __getitem__c           	     J    t          | |||t          t          t                    S )zFOptimized BytesWriter.__getitem__ implementation with bounds checking.)r  rd   rf   re   r   r   r   r   s       r   translate_bytes_writer_get_itemr
    s+    
 /$#'  r   __setitem__c                    t          |          dk    rdS |                     |          }|                     |d                   }|                     |d                   }|                     t          ||g|j                  }|                     t
          ||g|j                  }t                      }	t                      }
|                     ||	|
           |                     |
           | 	                    t          t          j        d|j                             | 	                    t                                 |                     |	           |                     t          |||g|j                   |                                 S )zFOptimized BytesWriter.__setitem__ implementation with bounds checking.r<  Nr   r   r  )r   r   r]  rd   r   rf   r   r   r   rJ  r   r  r"   rg   none)r   r   r   r   r   r  r}  r  r  r  r  s              r   translate_bytes_writer_set_itemr    sv    4yyA~~t ..
#
#C NN47##ENN47##E ))$sElHM N
 &&#c>%:HM K
 ,,KLLMKmDDD =)))KK-9;OQYQ^__   KK ;''''#~u)Ex}   <<>>r   c           	     J    t          | |||t          t          t                    S )zGOptimized StringWriter.__getitem__ implementation with bounds checking.)r  rh   rj   ri   r	  s       r    translate_string_writer_get_itemr    s+    
 /%$(  r   c           	     J    t          | |||t          t          t                    S )z@Optimized bytes.__getitem__ implementation with bounds checking.)r  rT   rV   rU   r	  s       r   translate_bytes_get_itemr    s+    
 /   r   zlibrt.vecs.appendc                x   t          |j                  dk    r|j        t          t          gk    r|j        d         }|j        d         }|                     |          }t          |t                    rF|                     |          }|                     |          }t          | j	        |||j
                  S d S Nr<  r   r   )r   r   r   r   r   r   r(   r   rP   r   r   r   r   r   vec_argitem_argvec_type	vec_value	arg_values           r   translate_vec_appendr        
49~~t~'71CCC)A,9Q<$$W--h%% 	Tw//Ix00Igoy)X]SSS4r   zlibrt.vecs.removec                x   t          |j                  dk    r|j        t          t          gk    r|j        d         }|j        d         }|                     |          }t          |t                    rF|                     |          }|                     |          }t          | j	        |||j
                  S d S r  )r   r   r   r   r   r   r(   r   rR   r   r   r  s           r   translate_vec_remover    r  r   zlibrt.vecs.popc                   dt          |j                  cxk    rdk    rn nt          d |j        D                       r|j        d         }|                     |          }t          |t                    r|                     |          }t          |j                  dk    r!|                     |j        d                   }nt          dt                    }t          | j        |||j                  S d S )Nr   r<  c              3  ,   K   | ]}|t           k    V  d S r   )r   r  s     r   rV  z$translate_vec_pop.<locals>.<genexpr>  s&      'S'SD'S'S'S'S'S'Sr   r   )r   r   rZ  r   r   r   r(   r   r   r0   rQ   r   r   )r   r   r   r  r  r  index_values          r   translate_vec_popr#     s    C	NNaC'S'SDN'S'S'S$S$S)A,$$W--h%% 	Rw//I49~~""%nnTYq\::%b*:;;7?I{GLQQQ4r   r   )r   rE   r   r	   r   r   r   r   r   r   r   r   )r   rE   r   r	   r   r   r   r   )
r   rE   r   r	   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r'   r   r   )r   rE   r   r   r   r   r   r   r   r   r   r   )r   rE   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   rE   r   r   r   r   r   r   r  r   r  r   r  r   r   r   )
r   rE   r   r   r   r   r   r   r   r   )__doc__
__future__r   collections.abcr   typingr   r   
mypy.nodesr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   
mypy.typesr   r   mypyc.ir.opsr   r   r   r   r   r   r   r    r!   r"   r#   mypyc.ir.rtypesr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   mypyc.irbuild.builderrE   mypyc.irbuild.constant_foldrF   mypyc.irbuild.for_helpersrG   rH   rI   rJ   rK   "mypyc.irbuild.format_str_tokenizerrL   rM   rN   rO   mypyc.irbuild.vecrP   rQ   rR   mypyc.primitives.bytearray_opsrS   mypyc.primitives.bytes_opsrT   rU   rV   rW   mypyc.primitives.dict_opsrX   rY   rZ   r[   r\   mypyc.primitives.float_opsr]   mypyc.primitives.generic_opsr^   r_   mypyc.primitives.int_opsr`   ra   rb   rc   "mypyc.primitives.librt_strings_opsrd   re   rf   rg   rh   ri   rj   mypyc.primitives.librt_vecs_opsrk   mypyc.primitives.list_opsrl   rm   mypyc.primitives.misc_opsrn   mypyc.primitives.set_opsro   rp   mypyc.primitives.str_opsrq   rr   rs   rt   ru   rv   rw   rx   ry   rz   mypyc.primitives.tuple_opsr{   r|   r   r2  r   r}   __annotations__r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r  rC  rG  rM  rO  rj  rp  ry  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   <module>r?     s     # " " " " " $ $ $ $ $ $                                           $ * ) ) ) ) ) ) )                         " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "F , + + + + + : : : : : :                         > = = = = = = = = = ? ? ? ? ? ?                         8 7 7 7 7 7 F F F F F F F F                             ; : : : : : K K K K K K K K 5 5 5 5 5 5 I I I I I I I I                        O N N N N N N N Xw7EF k:tJ7GTV[^bVbbc  CE D D D D
 IK  J J J J `d     I I I I QUC C C C C $(    "   "   < '((   )( ^$$^$$%&&'((*++*++*++)**   +* ,+ ,+ ,+ )( '& %$ %$, ^$$   %$& _%%? ? ? &%?< _%%   &%8 %&&   '&8 ^$$   %$" ^$$^$$   %$ %$4 %&&)**_%%^$$^$$&''.//V^,,X//X//X~..! ! ! /. 0/ 0/ -, 0/ (' %$ %$ &% +* '&!H ^$$   %$ ^$$   %$    8 ^$$' ' ' %$'T ())Y]##^$$
 
 
 %$ $#   *)
 _%%( ( ( &%(X %.&$&."$""&$          *++U U U ,+Up \?33* * * 43*Z X~..   /.  V^,,@ @ @ -,@F X~..0 0 0 /.0f X/009 9 9 109x *++   ,+& *++   ,+. *++   ,+( )**   +**     ^$$   %$ _%%+ + + &%+ %&&   '& ^$$   %$B   C C C C
 Y 122# # # 32#L ]$566S S S 76S4 Z00C C C 10CL> > > >B ="9::   ;: ="9::, , , ;:,^ =":;;   <; ="233   43 ())	 	 	 *)	 ())	 	 	 *)	 %&&   '&  r   