
    9jc                       d dl m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 d dlm	Z	m
ZmZmZ d dlmZ d dlZd dlZd dlZd dlmZ d dlmZ d dl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+ d d
l,m-Z- d dl.m/Z/ erd dl0m1Z1m2Z2 d dl%m3Z3 d dl4m5Z5 e(ejl                  z  Z7 ed      Z8 ed      Z9 ed      Z:ej*                  jv                  Z<g dZ=i Z>g Z?ej                  j                  j                  ZBdZdZCd[dZD eCg eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  jl                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                   Z\ eCeBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                        ZfeBj                  fZhd\dZiej                  d]d       Zk	 	 	 	 d^dZld_dZmd`dZn ele>j                        	 	 	 	 	 	 	 	 	 	 dad       Zp elek       elg e\      	 	 	 	 	 	 	 	 	 	 dbd              Zq eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dcd       Zr elej                  j                  j                  j                        	 dd	 	 	 	 	 	 	 	 	 ded       Zt elej                  j                  j                  j                        	 	 	 	 	 	 	 	 dfd       Zu elej                  j                  j                  j                        	 dd	 	 	 	 	 	 	 	 	 dgd       Zv eleBj                  j                         eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dbd               Zwd_d!Zx elex      	 	 	 	 	 	 	 	 	 	 dbd"       Zy eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dbd#       Zz eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dbd$       Z{ eld%       	 	 	 	 	 	 	 	 	 	 dhd&       Z|	 	 	 did'd(	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 djd)Z} eleBj                  j                        	 	 	 di	 	 	 	 	 	 	 	 	 	 	 	 	 dkd*       Z eleBj                   j                        	 	 	 	 	 	 	 	 	 	 	 	 dld+       Z eleBj                  j                        	 	 	 di	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dmd,       Z eleBj                  j                        	 	 	 dn	 	 	 	 	 	 	 	 	 	 	 	 	 dod-       Z	 dp	 	 	 	 	 	 	 	 	 dqd.Z	 	 	 	 	 	 drd/Z	 	 ds	 	 	 	 	 	 	 	 	 dtd0Z eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dud1       Z eleBj                  j                         eleBj                  j                        d'd2	 	 	 	 	 	 	 	 	 	 	 dvd3              Z eleBj                  j                        dd4	 	 	 	 	 	 	 	 	 	 	 dwd5       Z eleBj                  jl                        	 dd	 	 	 	 	 	 	 	 	 dxd6       Z elej                  j                  j                   j                         elej                  j                  j"                  j                        	 	 	 	 	 	 	 	 dyd7              Z elej                  j                  j&                  j                        	 	 	 	 	 	 	 	 dzd8       Z elej                  j                  j(                  j                        d{d9       Z elej                  j                  j*                  j                        	 dd	 	 	 	 	 	 	 	 	 	 	 d|d:       Zd}d;Z elej                  j                  j.                  jl                        	 	 	 	 d~	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd<       Z elej                  j                  j2                  j                        	 	 	 	 	 	 	 	 	 	 dd=       Z elej                  j                  j4                  j                        	 	 	 dddd>	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd?       Z eld@       	 	 	 	 	 	 	 	 	 	 dhdA       Z	 	 	 	 	 	 	 	 ddBZ	 	 	 	 	 	 	 	 	 	 ddCZ eCdDdEdF      Zd_dGZd]dHZ eldI       	 	 	 	 	 	 	 	 	 	 ddJ       Z eleBjF                  jl                        	 	 	 	 	 	 	 	 	 	 dbdK       Z eleBjJ                  j                        	 	 	 	 	 	 	 	 	 	 ddL       Z eleBjN                  j                         eleBjP                  j                         eleBjR                  j                         eleBjT                  j                         eleBjV                  j                        	 	 	 	 	 	 	 	 	 	 dbdM                                   Z eleBjP                  j                         eleBjT                  j                        	 	 	 	 	 	 	 	 	 	 dbdN              Z eleBj\                  j                         eleBj^                  j                        	 	 	 	 	 	 	 	 	 	 dbdO              Z eleBj                  j                         eleBj                  j                         eleBjb                  j                         eleBjd                  j                        	 	 	 	 	 	 	 	 	 	 dhdP                            Z elefD  cg c]q  } | eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  fvr| s c}       dhdQ       Z eleBjj                  j                  eBjl                  j                  g      	 	 	 	 	 	 	 	 	 	 ddR       Z elej                  j                  jp                  j                        	 	 d	 	 	 	 	 	 	 	 	 	 	 ddS       Z elej                  j                  jr                  j                        	 	 	 	 	 	 	 	 	 	 	 	 ddT       Zi Z	 	 	 	 ddUZ	 	 	 	 	 	 ddVZejz                  f	 	 	 	 	 ddWZ	 dp	 	 	 	 	 	 	 ddXZej                  ddY       Zyc c} w )    )annotationsN)reduce)AnycastTYPE_CHECKINGTypeVar)	ParamSpec)no_python_dispatcher)
OpOverload)canonicalize_dimelementwise_dtypesELEMENTWISE_TYPE_PROMOTION_KINDis_boolean_dtypeis_contiguous(is_contiguous_for_memory_format_or_falseis_contiguous_or_falseis_float_dtypeis_integer_dtypemake_contiguous_strides_for	ShapeType)DataDependentOutputExceptionDynamicOutputShapeException
FakeTensorin_kernel_invocation_managerrun_fallback_kernelUnsupportedOperatorException)_normalize_function_or_errorcount_label)CallableSequence)FakeTensorMode)IntLikeType_P_R_T)op_implementations_checksget_fast_op_implsstride_incorrect_ophas_metac                 .    t         j                  | d      S )NT)dictfromkeys)itemss    \/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_subclasses/fake_impls.pyordered_setr0   I   s    ==%%    c                     | j                   dk7  S )Nhpu)typedevices    r/   is_noncontiguous_supportedr7   O   s    ;;%r1   c                    t         j                  j                  j                         }| j	                  |      xs  t        d | j                         D              S )Nc              3  2   K   | ]  }t        |        y wN)contains_tensor_types).0es     r/   	<genexpr>z(contains_tensor_types.<locals>.<genexpr>   s      1%&a 1s   )torch_C
TensorTypegetisSubtypeOfanycontainedTypes)type_tensor_types     r/   r;   r;      sO    ((%%))+K[) S 1*/*>*>*@1 . r1   c                X   t        | t              st        dt        |              | j                  }t        d |j                  D              ryt        |j                        dk(  xrA |j                  d   j                  t        j                  j                  j                         u S )Nz func must be an OpOverload, got c              3  F   K   | ]  }t        |j                          y wr:   )r;   r4   )r<   args     r/   r>   z)_is_tensor_constructor.<locals>.<genexpr>   s     
Gs *
Gs   !F   r   )
isinstancer   AssertionErrorr4   _schemarD   	argumentslenreturnsr?   r@   rA   rB   )funcschemas     r/   _is_tensor_constructorrT      s    dJ'?T
|LMM\\F

Gf6F6F
GG 	FNNq XV^^A%6%;%;uxx?R?R?V?V?X%Xr1   c                     d fd}|S )Nc                <   t        t              r!t        v rt        d       | t        <   | S t        t        t
        f      rD ]  } t        |      |         | S t              st        dt                     t        j                  | f       | S )Nzduplicate registration: z%run_impl_check must be callable, got )rL   r   op_implementations_dictrM   listtupleregister_op_implcallabler4   r'   append)op_imploprun_impl_checks     r/   impl_decoratorz(register_op_impl.<locals>.impl_decorator   s    nj1!88$'??O%PQQ6=#N3  u6$ .$ $W-.  N+$;D<P;QR  &,,ng-FGr1   r]   Callable[_P, _R]returnrb    )r_   r`   s   ` r/   rZ   rZ      s    " r1   c                    | t         v S r:   rW   r^   s    r/   _is_op_registered_to_fake_rulerh      s    (((r1   c                    t         j                  | d        t        D ]"  \  }}|| u st        j                  ||f        y  y r:   )rW   popr'   remove)r^   checkimpls      r/   _deregister_op_implrn      sA    D)0 tB;%,,eT];r1   c                (    t        |   | |g|i |S r:   rf   	fake_moderR   argskwargss       r/   #dispatch_to_op_implementations_dictrt      s      #4(DJ4J6JJr1   c                   |t         v rt        d|       t        |||d      \  }}d|v rt        |      |t        v r"|d   j
                  }|j                  d      f}nt        j
                  d      }d}|j                  dd       }||n|}t        j
                  d	      |d<   t        |       5   ||i |}d d d        t        | |      S # 1 sw Y   xY w)
Nz8func must not be in _non_kwarg_device_constructors, got Trr   rs   normalize_to_only_use_kwargsnamesinputcpurd   r6   meta)
_non_kwarg_device_constructorsrM   r   r   _like_tensor_constructorsr6   rj   r?   r   r   )	rq   rR   rr   rs   _
new_kwargsdefault_device
out_devicers	            r/   constructorsr      s    
 --FtfM
 	
 14TMAz &*400((#G,33w') e,$/J)5>J <</Jx 
&i	0 &$%*%&iJ//& &s   4	CCc                    t        |||d      \  }}|j                  d      }t        |       5   ||      }d d d        |S # 1 sw Y   S xY w)NTrw   ry   )r   rj   r   )rq   rR   rr   rs   r~   r   inpr   s           r/   non_kwarg_is_pinnedr      sX     1dFMAz ..
!C 
&i	0 IHHs   	AAc                    t        |       5   |||      }d d d        t        j                  d      }t        | |t        j                  d            S # 1 sw Y   @xY w)Nr{   r5   rz   )r   r?   
empty_liker   r6   )rq   rR   namerr   real_handlemeta_handles         r/   _record_function_enterr     sY    
 
&i	0 '4&' "";v>Kiell5.ABB' 's   
AAc                     y r:   rd   )rq   rR   handles      r/   _record_function_exitr     s     	r1   c                V    t        |       5   |||      cd d d        S # 1 sw Y   y xY wr:   r   )rq   rR   r   rr   s       r/   _record_function_enter_newr     s+     
&i	0  D$     s   	(c                4   t        |||d      \  }}|d   }|r|n|d   j                  }t        j                  d      |d<   |j                  d      }t	        |       5   ||fi |}	d d d        | j
                  j                  | 	|      S # 1 sw Y   &xY w)NTr   r6   ry   r{   )r   r6   r?   rj   r   fake_tensor_converterfrom_meta_and_device)
rq   rR   rr   rs   r~   r   input_devicer   r   r   s
             r/   non_kwarg_tor   #  s    
 1dFMAz h'L!-:g3F3M3MJ <</Jx
..
!C	%i	0 $#
#$ **??1j $ $s   
BBc                     y)NFrd   rg   s    r/   r)   r)   7  s    r1   c           	        dd| j                   rjt        fdt        j                  ||j	                               D              }|s2t
        j                  ||f      \  }}t        | |||t        d            S t        |      )Nc                    t        | t              r| j                  S t        | t        j                  t        j
                  t        j                  f      ryy)NTF)rL   r   _has_symbolic_sizes_stridesr?   SymIntSymFloatSymBoolxs    r/   is_symbolicz3workaround_stride_incorrect_op.<locals>.is_symbolicB  s;    a$000a%,,FGr1   c              3  .   K   | ]  } |        y wr:   rd   )r<   r   r   s     r/   r>   z1workaround_stride_incorrect_op.<locals>.<genexpr>K  s      
 KN
   z2Cannot run fallback kernel for stride_incorrect_op)r   objectrc   bool)
allow_fallback_kernelsrD   	itertoolschainvaluespytreetree_flattenr   RuntimeErrorr   )rq   rR   rr   rs   require_dynamic	flat_args	args_specr   s          @r/   workaround_stride_incorrect_opr   <  s     '' 
$-OOD&--/$J
 
 #)#6#6f~#F Iy& QR  't
,,r1   c                T    t        |       5   ||i |cd d d        S # 1 sw Y   y xY wr:   r   rp   s       r/   
resize_as_r   _  s.     
&i	0 %T$V$% % %s   'c                "    t        | |g|i |S r:   )r   rp   s       r/   (_sparse_coo_tensor_with_dims_and_tensorsr   g  s     	49$9&99r1   c                    t         j                  j                  | j                  v xrO | t        j
                  j                  t        j                  j                  t        j                  j                  fvS r:   )
r?   Tagdynamic_output_shapetagsatenindexTensornonzerodefaultrepeat_interleaverR   s    r/   <lambda>r   p  sU    //499< TJJt||33T5K5K5R5RS	T r1   c                    t        |      r:   )r   rp   s       r/   	dyn_shaper   o  s     &d
++r1   Funique_consecutivec                  | j                   | j                   j                  st        |      |r|j                  n|j                  }||ddlm}	m}
  |
|j                               s|j                         dk(  rd}nm| j                   j                         }t        j                  dz
  }||j                         n|j                  |      } |
|      st        |      } |	||       ||r||_        n||_        ||j                  |f      g}n4 |j                  g |j                  d | ||j                  |dz   d   g}|d uxr" |j                   t#        j$                  d      k(  }|s|r>|j                  ||j                  n|j                  |   ft"        j&                        }n!|j                  dt"        j&                        }|j)                  |       |s|rD|j                  ||d   j                  n|d   j                  |   ft"        j&                        }n!|j                  dt"        j&                        }|j)                  |       t+        |      S )Nr   _constrain_range_for_sizehas_free_symbolsrK   maxrz   dtype)	shape_envallow_dynamic_output_shape_opsr   unique_consecutive_memounique_memo%torch.fx.experimental.symbolic_shapesr   r   numelcreate_unbacked_symintsysmaxsizesizeint	new_emptyshapefake_devicer?   r6   int64r\   rY   )rq   rR   rJ   dimsortedreturn_inversereturn_countsr   nnzr   r   maxvalr   retreturn_if_dim_and_cpuinversecountss                    r/   _uniquer   z  s    	#""AA *$//);#
%
%C #+	

  		,1A C%%<<>C[[1_F#&;CIIKCHHSME#E*U%cv6;!.1+"%
{}}cV$% s}}JciioJsJSYYsQwy5IJKtOV5<<PUCV0V.--CII399S>*;5;;   
 ---5JJw-KCFLLc!fll3.?-A  
 q4JJv:r1   c           	     $    t        | ||d |||      S r:   r   )rq   rR   rJ   r   r   r   s         r/   unique2r     s     9dCv~}UUr1   c                   ddl m} |j                  rt        S |j	                         }t        j                  |dk7  d        |dk\  r|n||z   }|j                  |      }t        |j                               }t        |j                               }	d }
 ||dk\        r|j                         ||	|   z  z   }
n' ||dk        r|j                         ||z   |	|   z  z   }
|
S| j                  "| j                  j                  s| j                  st        |      | j                  j                         }
||= |	|= |
t        d      |j!                  ||	|
      S )Nr   guard_or_falsec                      y)Nz-select() cannot be applied to a 0-dim tensor.rd   rd   r1   r/   r   zmeta_select.<locals>.<lambda>  s    r1   z#new_storage_offset must not be None)r   r   	is_sparseNotImplementedr   r?   _check_indexr   rX   stridestorage_offsetr   allow_scalar_outputsr   r   rM   
as_strided)rq   rR   selfr   r   r   ndimr   new_size
new_stridenew_storage_offsets              r/   meta_selectr     sU    E~~88:D		?
 #sTzC99S>DDIIK Hdkkm$Jeqj!!002UZ_5LL			"!002edljQTo5UU!&##8822.t44 '00GGI3!BCC??8Z1CDDr1   c           
     `    t        | |||dk\  r|n|t        |j                  d      z  |||      S )Nr   rK   )r   r   r   )rq   rR   rJ   r   r   r   r   s          r/   
unique_dimr   
  s>     axS3sxx#33	 	r1   c           
     (    t        | |||d||d      S )NFTr   r   )rq   rR   rJ   r   r   r   s         r/   r   r      s)     	 	r1   c                   ddl mmm} dfd}dfd}t	        |       dk(  rdgt	        |      z  S t        t        j                  | d      } ||dk(        }|r | || |            rt        |      S dgt	        |      z  }	|rUt        t	        |      dz
  dd      D ]7  }
|
t	        |      dz
  k(  rd|	|
<   t        ||
dz      d      |	|
dz      z  |	|
<   9 |	S t	        |      dz
  }
|d   }d}d}t        t	        |       dz
  dd      D ]  }|| |   z  }|dk(  s' || |dz
     dk7        s" |||dz
     ||z  k7        s7|
dk\  rN |||k        s |||
   dk(        r5||z  |	|
<   |||
   z  }|
dz  }
|
dk\  r |||k        r& |||
   dk(        r5 |||k7        r y |dkD  s||dz
     }d}d} |
dk7  ry |	S )Nr   )r   guard_or_truesym_eqc                    r |       S | S r:   rd   )r   r   size_obliviouss    r/   maybe_guard_or_falsez-_compute_stride.<locals>.maybe_guard_or_falseB  s    !!$$r1   c                    r |       S | S r:   rd   )r   r   r  s    r/   maybe_guard_or_truez,_compute_stride.<locals>.maybe_guard_or_trueH  s     ##r1   rK   )r   r   rc   r   )r   r   r   r  rP   r   operatormulrX   ranger   )	old_shape
old_stride	new_shaper  r  r  r  r   
zero_numelr   view_dchunk_base_stridetensor_numel
view_numeltensor_dr   r   s      `           @@r/   _compute_strider  6  sA     9~sS^##8<<A.E%eqj1J*6)Y+GHJ%&C#i.$8JC	NQ.B7 	FY!++%&
6" 	&1*-q1Jvz4JJ 6"		 ^aF%/^ !LJ#i.1,b"5 	(++q=	(Q, 71 <=#8a<(L;L,LL A+#J$=>'	&(9Q(>?%/2C%C
6"i//
! A+#J$=>'	&(9Q(>? #:#=>!|$.x!|$<! 
/0 |r1   c                    ddl m t        j                  |d      }t	        fd| j                         D              xs8 t	        fd| j                         D              xs t	        fd|D              S )Nr   has_guarding_hintFvalidatec              3  0   K   | ]  } |         y wr:   rd   r<   sr  s     r/   r>   z+_view_has_unbacked_input.<locals>.<genexpr>  s     7!!$$7   c              3  0   K   | ]  } |         y wr:   rd   r  s     r/   r>   z+_view_has_unbacked_input.<locals>.<genexpr>  s     <A$Q''<r  c              3  0   K   | ]  } |         y wr:   rd   r  s     r/   r>   z+_view_has_unbacked_input.<locals>.<genexpr>  s     7A$Q''7r  )r   r  utilsextract_shape_from_varargsrD   r   r   )ar   r  s     @r/   _view_has_unbacked_inputr#    sb     H,,UUCE 	7affh77 	8<<<	8777r1   c                    ddl m} ddlm}m} t        j                  d      t        j                   j                                j                  dk(  rO }D ]:  }t        j                  |dk(         t        j                  j                  |d      }< | u r |       S |S t              dk(  rY } j                  D ]:  }t        j                  |dk(         t        j                  j!                  |d      }< | u r |       S |S t#        t$        j&                  d      }	t        j                   j                         |	k(   fd       t              t         j                        k(  r! | | j                              r |       S |rt)               r)nt+               rt-              }
 j/                  |
      S t1         j3                          j5                         |	      }| j/                  |      S |rIt        j6                  j8                  j:                  j<                  st?               rtA         d|
      S |r;t-              }
 jC                  t        jD                        j/                  |
      S d j                   d j5                          d d}tG        |      )Nr   )view_ofr   r  Fr  rK   r  c                 *    d j                    d dS )Nz&Could not reshape a tensor with shape  as a tensor with shape !)r   )r"  r   s   r/   r   z%_view_unbacked_meta.<locals>.<lambda>  s    8	AYZ_Y``ab r1   )r  )size_oblivious_enabled
allow_copymemory_formatz Cannot view a tensor with shape z and strides r(  r)  )$torch._primsr%  r   r   r  r   r!  
infer_sizer   r   r?   _check_refs	unsqueezerP   r   squeezer   r  r	  r   r   r   r   r  r   r   fxexperimental_configbacked_size_obliviousr#  _view_unbacked_metaclonecontiguous_format
ValueError)r"  r   r*  r+  r%  r   r  _alengthshape_numelstridesnew_stridesmsgs   ``           r/   r8  r8    sf    %L ,,UUCE UAGGI.E 	vv{ 	/FLL1%&&r2.B	/ 71:I 5zQgg 	-FLL1%$$R,B	- 71:Iua0K	LL		[ b
 5zS\!nVE1775K&Lqz$:a a@P-e4||E7++!	!((*e4JK ||E;// %%;;#Au-"uUz
 	
 -e4wwU%<%<w=HHPWXX,QWWI]188:,Nfglfmmn
oC
S/r1   c           
        |j                   s|j                  rt        S t        j                  g ||j                          }t        |      r<t        | ||g| }t        t        |j                  t        j                              S t        | |t        t        |j                  t        j                              g| S Nr,  )r   	is_mkldnnr   r   r/  r   r   
_view_metatyping_castr   r9  r?   r:  )rq   rR   r"  r   views        r/   _reshape_copyrH    s     	{{akk /e/QWWY/Ea )T15u5

1H1H
I
 	
 
AGG%:Q:QG$RS
 	
 	
r1   r+  c                  t         j                  j                  j                  j                  st        ||      rt        t        t        |||            S t        t        t        j                  j                  |g|d|i      S )NrI  r+  )r?   r4  r5  r6  r7  r#  rF  r   r8  r1  _reshape_view_helper)rq   rR   r"  r+  r   s        r/   rE  rE    sv     xx$$::>V	5? +AuL
 	
 KK,,QNN:N
 	
r1   )outc               Z    t        | ||g|ddi}||S t        j                  d |      S )Nr+  Tc                B    | j                  t        j                        S rC  )r9  r?   r:  r   s    r/   r   z!_view_meta_copy.<locals>.<lambda>$  s    !''(?(?'@ r1   )rE  r   tree_map)rq   rR   r"  rL  r   results         r/   _view_meta_copyrQ    s=     	4DUDtDF
??@ r1   c                    |U| j                   | j                   j                  st        |      | j                   j                         }ddlm}  ||       |j                  |      S Nr   r   )r   r   r   r   r   r   r   )rq   rR   repeatsoutput_sizer   s        r/   repeat_interleave_tensorrW  )  sc     '&&EE-d33))@@B 	T!+.[))r1   c                   |j                   x}|S | j                  "| j                  j                  s| j                  st        |      t	        |j
                        r| j                  j                         }nxt        |j
                        r| j                  j                         }nHt        |j
                        r| j                  j                         }nt        d|j
                         ||_         |S )Nz local_scalar_dense/item NYI for )	item_memor   r   r   r   r   create_unbacked_symfloatr   r   r   create_unbacked_symboolNotImplementedError)rq   rR   rJ   r   s       r/   local_scalar_denser]  A  s    
 ]]'"44.. +400cii 88:	#))	$668	#))	$779!$DSYYK"PQQCMHr1   c                    t         j                  j                  j                  j	                  |      j                  d      S )NrK   )r?   opsr   r   r   unbind)rq   rR   rJ   s      r/   nonzero_numpyra  Z  s.     99>>!!))#.55a88r1   c                J   | j                   | j                   j                  st        |      |j                  x}4ddlm}m} ddlm} ddl	m
}  ||j                               s|j                         dk(  rd}n| j                   j                         }t        j                  dz
  } ||j                               st        |j                               }nt!        j"                  |j$                        j&                  }	 ||	j(                  |	j                   j*                        }
t-        |
j.                  |      rt        j                  dz
  }n|
j.                  } |||       ||_        |j1                  ||j3                         fd|ft4        j6                        S )Nr   r   IntInfinitybound_sympyrK   r   r   )r   r   r   nonzero_memor   r   r   torch.utils._sympy.numbersrd  torch.utils._sympy.value_rangesrf  r   r   r   r   r   mathprodr   nodeexprvar_to_rangerL   uppernew_empty_stridedr   r?   r   )rq   rR   rJ   r   r   r   rd  rf  r   	prod_node
prod_ranges              r/   r   r   a  sI    	#""AA *$//(	
 	;?		,1A C%%<<>C[[1_F#CIIK0SYY[) IIcii055	(NNI$7$7$D$D
 j..< [[1_F'--F%cv6  #swwy!1As85;; OOr1   c                   t        |      dk7  rt        dt        |       d      |s| j                  | j                  j                  st	        |      | j                  j                         }t        j                  dz
  }ddlm	}m
}  ||j                               st        |j                               } ||d|       |g|j                  dd  }|j                  |      S )NrK   z&Only one jagged dim is supported, got z offsetsr   r   )minr      )rP   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   )	rq   rR   paddedoffsetstotal_Lr   r   r   output_shapes	            r/   _padded_dense_to_jagged_forwardrz    s     7|q4S\N(K
 	
 '&&EE .d33%%<<>q	

  /(F!'qf=/fll12./LL))r1   c                6   ddl m}m}  | ||dk\  || k              r|S  | ||dk  ||  k\              r|| z   S  |||  k        ry ||| kD        r| S  ||dk\        rt        j                  ||       S  ||dk        rt        j
                  || z   d      S y )Nr   )r   sym_and)r   r   r|  r?   sym_minsym_max)r   r   r   r|  s       r/   _compute_slice_indexr    s    Mgeqj%4-89		5TE>:	;t|		&		%	
	#}}UD))			"}}UT\1--r1   c                   ddl m}m} | j                  }	|j	                         }
|
dk(  rt        d      t        |j	                         |      }t        |j                               }t        |j                               }|dk  rt        d      |dnt        ||   |      } ||t        j                  k(        s|||   nt        ||   |      }d }|N|L |||k\        r||z
  |z   dz
  |z  }n2 |||k\        rd}n$t        j                  ||z
  d      }||z   dz
  |z  }|P|	t        d      |	j!                         }t        j"                  |dk\         t        j"                  |||   k         ||   |z  }||j%                         |||   z  z   }n5|	t        d      |	j!                         }t        j"                  |dk\         |||<   |||<   |j&                  rt)        d      |j+                  |||      S )Nr   )r   statically_known_truez,slice() cannot be applied to a 0-dim tensor.zslice step must be positiverK   z$Must have shape_env to create symintz<Slice decomposition for quantized tensors aren't implemented)r   r   r  r   r   r   r   rX   r   r   r  r   r   r?   r~  rM   r   r0  r   is_quantizedr\  r   )rq   rR   r   r   startendstepr   r  r   r   sizesr?  start_index	end_indexr   diffr   r   s                      r/   slice_forwardr    s(   
 ##I88:DqyIJJ
488:s
+CE4;;=!Gqy899 }!*>uSz5*QK !!34 	c
!%*c2  $(H9#8){23!K/$6:tCHK945H
 ==[!8!<DtaD0H  !GHH335X]#Xs+, $J ,,.ws|1KK !GHH"99;^q()E#JGCL!J
 	
 ug~>>r1   c                   | j                   | j                   j                  st        |      | j                   j                         }t        j
                  dz
  }ddlm}m} ddl	m
} ddlm}	  ||j                               st        |j                               }
nt        j                   |j"                        j$                  } |	|j&                  |j                   j(                        }t+        |j,                  |      rt        j
                  dz
  }
n|j,                  }
|
dkD  r|
} |||       |j/                  |f      S )NrK   r   r   rc  re  ru  r   )r   r   r   r   r   r   r   r   r   rh  rd  ri  rf  r   r   rj  rk  r   rl  rm  rn  rL   ro  r   )rq   rR   r   maskr   r   r   r   rd  rf  num_elementsrq  rr  s                r/   masked_selectr    s    
 	#""AA *$//



4
4
6C [[1_F 7;
 DJJL)4::<(IIdjj)..	 1D1D1Q1QR
j&&4;;?L%++Lacv.>>3&!!r1   )r6   layoutc                  |2|j                         |k7  rt        d| d|j                                |2|j                         |k7  rt        d| d|j                                |*|j                  |k7  rt        d| d|j                         |*|j                  |k7  rt        d| d|j                         |+|j
                  |k7  rt        d| d|j
                         y y )Nz!Tensor sizes mismatch! Expected: z, Got: z#Tensor strides mismatch! Expected: z!Tensor dtype mismatch! Expected: z"Tensor layout mismatch! Expected: z"Tensor device mismatch! Expected: )r   rM   r   r   r  r6   )rq   rR   tr  r?  r   r6   r  s           r/   assert_tensor_metadatar  J  s    668u 3E7'!&&(L  88:  5gYgahhj\R  77e 3E7'!''K  88v 4VHGAHH:N  88v 4VHGAHH:N   r1   c                N    t         j                  j                  | j                  v S r:   )r?   r   data_dependent_outputr   r   s    r/   r   r   r  s    uyy>>$))K r1   c                    t        |      r:   )r   rp   s       r/   data_depr  r  s     't
,,r1   c                    |D ]<  }||j                   t        j                  t        j                  fv s3t	        |        y r:   )r   r?   r   uint8r   )rR   r   indicesr   s       r/   check_no_bool_index_tensorsr  {  s<      4U[[0I!I-d334r1   c                   t        |||d      \  }}|d   j                  }t        |       5   ||i |}t        |      s|j	                  |j
                        }d d d        |d   u r|S t        | ||      S # 1 sw Y   xY wNTrv   ry   )r   r6   r   r7   r   r   r   )rq   rR   rr   rs   r~   r   r   rL  s           r/   )run_and_return_new_tensor_of_input_devicer    s     14TMAz G$++J	%i	0 +D#F#)*5--		*C+
 j!!
ij11+ +s   /A::Br   primsprimc                &    | j                   t        v S r:   )	namespace_is_builtin_namespacesrg   s    r/   
is_builtinr    s    <<111r1   c                ^    t         j                  j                  | j                         d      S )NMeta)r?   r@   ._dispatch_has_computed_kernel_for_dispatch_keyr   r   s    r/   r*   r*     s     88BB499;PVWWr1   c                t    t        |       xr, | j                         j                  d      xr t        |       S )Nzaten::_foreach_)r  r   
startswithr*   r   s    r/   r   r     s4    D! 		01 r1   c           	     l   t        j                  ||j                               D cg c]B  }t        |t        t
        f      r*t        |      rt        |d   t        j                        r|D }}	 t        |       5   ||i |}d d d        s|S |st        d      g }t        |      D ][  \  }}	t        j                  ||D 
cg c]  }
|
|   	 c}
      \  }}|j!                  | j"                  j%                  | |	|             ] |S c c}w # 1 sw Y   xY w# t        $ r	 t        cY S w xY wc c}
w )Nr   ztensor_lists must not be empty)r   r   r   rL   rX   rY   rP   r?   r   r   r\  r   rM   	enumerater   _find_common_devicer\   r   r   )rq   rR   rr   rs   rJ   tensor_listsout_metaout_fakeimeta_ttlr6   r~   s                r/    foreach_run_and_map_input_devicer    s1    ??49cD%=)Hs1vu||,	 	L ))4 	-T,V,H	-
 =>>Hx( 
	6224,9WB"Q%9WX	++@@66	

 O;	- 	-  :Xs6   AD1D <	DD D1DD D.-D.c                    ddl m} t        |||d      \  }}|d   j                  }| 5   ||i |}|j	                  |      cd d d        S # 1 sw Y   y xY w)Nr   )meta_index_TensorTrv   ry   )torch._meta_registrationsr  r   r6   to)	rq   rR   rr   rs   r  r~   r   r   rL  s	            r/   index_tensorr    sc     <04TMAz G$++J	 "00vvj!" " "s   AAc                N    ddl m} | 5   ||i |cd d d        S # 1 sw Y   y xY w)Nr   )meta_embedding_bag)r  r  )rq   rR   rr   rs   r  s        r/   embedding_bagr    s,     =	 3!42623 3 3s   $c                    t        | |||      S r:   )r  rp   s       r/   multi_device_op_defaultr    s     5YdFSSr1   c                    t        |       5   ||i | d d d        t        |||d      \  }}|d   S # 1 sw Y    xY wr  )r   r   )rq   rR   rr   rs   r~   r   s         r/   multi_device_op_outr    sT    
 
&i	0 df 14TMAz g s   	4=c                R   t        ||d      \  }}|d   |d   j                  t        j                  j                  k(  xs$ j                  dk(  xr j                         dk(  fd       t        | ||      }t        j                  j                  u r|d   S |S )NTrv   r   ry   r   rK   c                 0    d  d dj                    dS )NzMismatching z device between self (z) and values ()r5   )rR   self_devicer   s   r/   r   z index_put_impl.<locals>.<lambda>  s&    ,tf$:;-~V\VcVcUddef r1   )
r   r   r?   r0  r   r   r  r   
index_put_r   )	rq   rR   rr   rs   r~   r   rL  r  r   s	    `     @@r/   index_put_implr    s    
 14TMAz !FW%11K	LLv)))WfkkQ.>.V6<<>UVCVf
 4ItT6
RCt&&&'""
r1   c                    t        |      r:   )r   rp   s       r/   nested_tensors_unsupportedr    s     't
,,r1   c                0    |t         v rt        d|       y )NzNYI: )_device_not_kwarg_opsrM   rp   s       r/   nyir  (  s#      $$uTF^,, %r1   c           
         t        |||d      \  }}|d   }|d   }|j                   5  |j                  }ddlm t        fd|j                  D              xr t        fd|j                  D              }	|	sd }
n|j                  d	      }t        |d
   |d   |d   |d   |d   |d   |      }||j                  d      |d<   t        j                  j                  ||fi |}|dk(  rH|j                  s<|j                  s0|j                         j                  d      }|j                  d      }t        j                  j!                  |||      }
d d d        	 	 	 	 	 	 d fd}t#               5   |di |}|t$        j&                  j(                  u r ||
      cd d d        S  ||d   
       ||d   |
       ||d   d       fcd d d        S # 1 sw Y   xY w# 1 sw Y   y xY w)NTrv   ry   weightr   r  c              3  .   K   | ]  } |        y wr:   rd   r  s     r/   r>   zconv.<locals>.<genexpr>N  s     D!*1-Dr   c              3  .   K   | ]  } |        y wr:   rd   r  s     r/   r>   zconv.<locals>.<genexpr>N  s      M
%&a M
r   biasr   paddingdilation
transposedoutput_paddinggroups)r   r  r  r  r  r  r  
bias_sizes   ru  c                    | | S |i| j                         dk(  rD|t        j                  k(  r1| j                  d      j	                  |      j                  d      } n| j	                  |      } t        |       S )Nr  ru  r,  )r   r?   channels_lastr2  r  r3  r   )r  mem_fmtr6   rq   s     r/   convertzconv.<locals>.converts  st     9Huuw!|5+>+> >KKN%%G%<DDQGDDwD/)Q//r1   rK   )r  ztorch.Tensor | Noner  ztorch.memory_format | Nonerc   FakeTensor | Nonerd   )r   r   r   r   r  allr   rB   r,   r?   r@   _select_conv_backendrD  is_xpu
contiguousr2  %_conv_determine_backend_memory_formatr   r   convolutionr   )rq   rR   rr   rs   r~   r   input_r  k
all_hintedr  r  select_kwargsconv_backendr  rL  r6   r  s   `               @@r/   convr  <  s3    14TMAz  F!FF	 *KK 	LDv||DD 
 M
*0,,M
 J

  G >>&)D/3!(+"9-#J/%l3)*:;!(+0M |.8nn\.Jl+ 8888"/L Avf..v}}**,66q9))!,hhDDGQ*X00)C0	0 
&i	0 
 Z 4##+++3(	
 
 A(A(A%
 
s* *r
 
s   D0G!>-G-5"G-!G*-G6c                    | j                   | j                   j                  st        |      | j                   j                         }ddlm}  ||       t        j                  ||k\         |j                  |      S rS  )	r   r   r   r   r   r   r?   r0  r   )rq   rR   inputsweights	minlengthr   r   s          r/   bincountr    sm     	#""AA *$//""99;HOh'	LLY&'H%%r1   c                @   | j                   | j                   j                  st        |      | j                   j                         }ddlm}  ||       |s|j                  dd      }|j                  dd  }|j                  |      }|j                  |f      }	||	fS )Nr   rT  rK   )	r   r   r   r   r   r   	transposer   r   )
rq   rR   r  lengthsbatch_firstnew_batch_sizer   res_sizepacked_data
batch_sizes
             r/   _pack_padded_sequencer    s     	#""AA *$//((??ANOn-!!!Q'||ABH""8,K!!>"34J$$r1   c                     d fd}|S )Nc                    | t         <   | S r:   )FAST_OP_IMPLEMENTATIONS)r]   rR   s    r/   r`   z-register_fast_op_impl.<locals>.impl_decorator  s    (/%r1   ra   rd   )rR   r`   s   ` r/   register_fast_op_implr    s     r1   c                  
 ddl m} t        |       }t        |      }t        ||      }dg|z  }t	        |dz
  dd      D ]|  
|dz
  
z
  }|dz
  |z
  }|dz
  |z
  }	|dk\  r| |   nd|	dk\  r||	   ndt        j                   |dk(        xs  |dk(        xs k(  
fd        |dk(        rn|
<   ~ t        |      S )Nr   r   rK   r  c                     d d d  dS )NzThe size of tensor a (z#) must match the size of tensor b (z) at non-singleton dimension r  rd   )r  sizeAsizeBs   r/   r   zinfer_size.<locals>.<lambda>  s'    ,UG 4005w 7**+A/ r1   )r   r   rP   r   r
  r?   r0  rY   )r"  br   dimsAdimsBr   expandedSizesoffsetdimAdimBr  r  r  s             @@@r/   r/  r/    s     EFEFEueD()sTzM4!8R$ JAqy6!qy6!19$!19$! 	5A:&V.!*DVQV/	
 %35A:$>5Ea1J2 r1   c                     d fd}|S )Nc           	         d fd}t        d       }d }|D ]:  }t        |t        j                        r|j                  nd}||}t        ||      }< |t        d      ddlm}m	}	 |D ]Z  }t        |t        j                        st        |j                        t        |      k(  s@ | |	|j                  |            sZ n	  |d      S t        j                  d      }
|
}d }d	}|D ]  }t        |t        j                        sd
} ||
k(  r%|j                  j                  dk7  r|j                  }|#t        j                  k7  rd
}b|j                  }o||j                  k7  sd
} |rt!        |di\  }}d}d}|D ]r  }t        |t        j                        s||
k7  r7|j#                         dk(  r$|j                  |
k(  r||k\  r
 |d      c S |dz  }Z|j                  |k7  sj |d      c S  d
}d
}t%        |      r`|D ][  }t        |t        j                        s|xr t'        |t        j(                        }|xr t'        |t        j*                        }] |r>t        d       t-         t        j.                  ||dt        j(                        |      S |r>t        d       t-         t        j.                  ||dt        j*                        |      S  |d      S )Nc                `    t        d|         5   i cd d d        S # 1 sw Y   y xY w)Nzslow r   )rA  rr   rs   modeslow_refs    r/   slowz=make_fast_binary_impl.<locals>.fast_binary_impl.<locals>.slow  s6    %u& 1001 1 1s   $-zattempt fastrd   zfinal_shape must not be Noner   r&  z#both tensors nontrivially broadcastrz   FTtype_promotion_kindrK   errorr,  zfast is_contiguousr{   )r   r6   r-  r5   zfast channels_lastzno contiguity match)rA  strrc   r   )r   rL   r?   r   r   r/  rM   r   r   r  rP   r6   r4   r   DEFAULTr   r   r   r7   r   r:  r  r   empty)r  rr   rs   r	  operandsfinal_shaper^   r   r   r  rz   common_devicecommon_dtypehas_different_input_dtypesr~   current_cpu_scalars_on_non_cpumax_cpu_scalars_on_non_cpudefinitely_contiguousdefinitely_channels_lastr  r
  s   ```                r/   fast_binary_implz/make_fast_binary_impl.<locals>.fast_binary_impl  s   	1 	1
 	N#  )- 	9B+5b%,,+GrxxRE"#
 %[%8K	9  !?@@P  
	?B2u||,MS%55"6"((K#@A
	? =>> ll5!&)+/%*" 	2Bb%,,/-1*#		%(? "		#&*I*Q*QQ15.#%88L)-1*	2 & 1/BOA| *+&%&" 	%Bb%,,/#A"))s:J15OO=(.!3.m+G}$	% !%#' 
 &m4 !"ell3) @%*A*A & - @%*=*= ) !,-&!"'"9"9	 %	 	 $,-&!"'"5"5	 %	 	 )**r1   )r  r"   rr   r   rs   r   rc   r   rd   )r  r
  r  s   `` r/   make_fast_binary_implr    s    K+Z r1   c                ^   t               5  t        |       5  t        j                  j                  j
                  j                  |      }d d d        d d d        |r#t        | |j                  |j                        S t        | |j                        S # 1 sw Y   MxY w# 1 sw Y   QxY w)N)real_tensor)
r
   r   r?   r_  r   detachr   r   r6   r  )rq   r   include_realrL  s       r/   fast_detachr    s     
	 /!=i!H /iinn##++A./ /)S!((NNiahh//	/ / / /s"   B#4BB#B 	B##B,c                 `   dd l }  t        | j                  j                  j                  j
                        t        | j                  j                                t        | j                  j                  j                  j
                        t        | j                  j                                t        | j                  j                  j                  j
                        t        | j                  j                                t        | j                  j                  j                  j
                        t        | j                  j                  t        j                                t        | j                  j                  j                  j                        t               t         S )Nr   )r
  )torch._refsr  r_  r   addr   r  r1  subr	  divr   INT_TO_FLOATr  r   r  r  )r?   s    r/   r(   r(     s   4%))..,,334ekkoo. 5%))..,,334ekkoo. 5%))..,,334ekkoo. 5%))..,,334KKOO ? L L	
 9%))..//778E""r1   )r.   r&   rc   zdict[_T, bool])r6   ztorch.devicerc   r   )rF   r   rc   r   )rR   r   rc   r   )r_   zUCallable[[OpOverload], bool] | OpOverload | list[OpOverload] | tuple[OpOverload, ...]rc   .Callable[[Callable[_P, _R]], Callable[_P, _R]])r^   r   rc   r   )r^   r   rc   None)
rq   r"   rR   r   rr   r   rs   r   rc   r   )
rq   r"   rR   r   rr   r   rs   r   rc   r   )
rq   r"   rR   r   rr   r   rs   r   rc   r   r:   )
rq   r"   rR   r   r   r  rr   object | Nonerc   r   )rq   r"   rR   r   r   r   rc   r&  )
rq   r"   rR   r   r   r  rr   r'  rc   r   )
rq   r"   rR   r   rr   r   rs   r   rc   r&  )TFF)rq   r"   rR   r   rJ   r   r   
int | Noner   r   r   r   r   r   r   r   rc   )tuple[FakeTensor, FakeTensor, FakeTensor])rq   r"   rR   r   rJ   r   r   r   r   r   r   r   rc   r)  )rq   r"   rR   r   r   r   r   r   r   r#   rc   r   )rq   r"   rR   r   rJ   r   r   r   r   r   r   r   r   r   rc   r)  )FFN)rq   r"   rR   r   rJ   r   r   r   r   r   r   r(  rc   r)  )F)
r  Sequence[IntLikeType]r  r*  r  r*  r  r   rc   zlist[IntLikeType] | None)r"  torch.Tensorr   ShapeType | tuple[ShapeType]rc   r   )TF)
r"  r+  r   r,  r*  r   r+  r   rc   r+  )
rq   r"   rR   r   r"  r   r   r   rc   zFakeTensor | Exception)rq   r"   rR   r   r"  r   r   r   r+  r   rc   r   )rq   r"   rR   r   r"  r   r   r#   rL  r  rc   r   )
rq   r"   rR   r   rU  r   rV  IntLikeType | Nonerc   r   )rq   r"   rR   r   rJ   r   rc   zBint | float | bool | torch.SymInt | torch.SymFloat | torch.SymBool)rq   r"   rR   r   rJ   r   rc   list[FakeTensor])rq   r"   rR   r   rJ   r   rc   r   )rq   r"   rR   r   rv  r   rw  r.  rx  r-  rc   r   )r   r#   r   r#   rc   r-  )r   NNrK   )rq   r"   rR   r   r   r   r   r   r  r(  r  r(  r  r   rc   r   )
rq   r"   rR   r   r   r   r  r   rc   r   )NNN)rq   r"   rR   r   r  r   r  ztorch.Size | Noner?  ztuple[int, ...] | Noner   ztorch.dtype | Noner6   ztorch.device | Noner  ztorch.layout | Nonerc   r&  )rR   r   r   r   r  zlist[FakeTensor | None]rc   r&  )
rq   r"   rR   r   rr   ztuple[Any, ...]rs   zdict[str, Any]rc   r   )
rq   r"   rR   r   rr   r   rs   r   rc   zlist[FakeTensor] | None)
rq   r"   rR   r   rr   r   rs   r   rc   z5tuple[FakeTensor, FakeTensor, FakeTensor, FakeTensor])
rq   r"   rR   r   rr   r   rs   r   rc   zKFakeTensor | tuple[FakeTensor | None, FakeTensor | None, FakeTensor | None])Nr   )rq   r"   rR   r   r  r   r  r  r  r#   rc   r   )rq   r"   rR   r   r  r   r  r   r  r   rc   ztuple[FakeTensor, FakeTensor])rR   r   rc   r%  )r"  r*  r  r*  rc   ztuple[IntLikeType, ...])r  zCallable[..., Any]r
  r   rc   zCallable[..., FakeTensor])rq   r"   r   r   r  r   rc   r   )rc   z$dict[OpOverload, Callable[..., Any]])
__future__r   	functoolsr   rj  r  r   r   typingr   r   rF  r   r   typing_extensionsr	   r?   torch._custom_optorch._loggingtorch._prims_common_prims_commonr   torch._dispatch.pythonr
   
torch._opsr   r   r   r   r   r   r   r   r   r   r   r   torch._subclasses.fake_tensorr   r   r   r   r   r   torch.fx.operator_schemasr   torch.utils._statsr   collections.abcr    r!   r"   torch.typesr#   r   FakeTensorLiker$   r%   r&   _pytreer   __all__rW   r'   _opsr_  r   r0   r7   r   r   rL  	full_like	ones_like	rand_like	generatorgenerator_out
randn_likerandint_likeTensor_generator
Tensor_outTensor_generator_out	low_dtypelow_generator_dtypelow_dtype_outlow_generator_dtype_out
zeros_liker   rp  new_full	new_zerosnew_onesr}   _resize_output__nested_tensor_from_tensor_list
pin_memoryr  r6   prim_Device	is_pinned_pin_memory_resize_outputr  _list_to_tensorr|   r;   cacherT   rZ   rh   rn   __contains__rt   r   r   profilerr   r   r   r   r)   r   r   r   r   r   _unique2r   selectr   r   r   r   r  r#  r8  rH  rG  _unsafe_viewrE  	view_copyrQ  r   rW  item_local_scalar_denser]  ra  r   rz  r  slicer  r  _assert_tensor_metadatar  r  r  r  r  r  r*   r  r   r  _embedding_bagr  _unsafe_index_putcopycopy_slice_scatterdiagonal_scatterr  r  	index_putr  r  _nested_view_from_buffer_nested_view_from_buffer_copyr  r  r  convolution_backwardr  r  r  r  r  r/  r  r  r  r(   r   s   0r/   <module>rq     s   "     
  C C '    # 7 !     C * 2<' ell*t_T]T]			    zz~~&  ( 'OO'OO' 	NN' 	NN	'
 	NN' 	NN' 	NN' 	NN' 	NN' 	NN  ' 	OO' 	OO' 	OO' 	OO!!' 	'  	!'" 	#'$ 	&&%'& 	  ''( 	**)'* 	+', 	##-'. 	/'0 	))1'2 	##3'4 	--5'6 	OO7'8 	OO9': 	NN;'< 	NN='> 	""?'@ 	A'B 	MMC'D 	MME'F 	NNG'H 	NNI'J 	MMK'L 	MMM' T $  ((00((,,OOGGNNGGNN  #'"6"6!8  	 	
 44) )667KK%/K8;KGJKK 8K ().-./00%/08;0GJ00 0 *0@ $..(()%/8;GJ	 *  %))$$;;CCDRV	C	C%/	C7:	CBO	C	C E	C %))$$::BBC		%/	9<			 D	 %))$$??GGHRV  %/ 7: BO   I  $''%%&$''..!%/8;GJ " '$
 %&--%/-8;-GJ-- '-D $//))*%%%/%8;%GJ%% +% $??GGH::%/:8;:GJ:: I: T
,,%/,8;,GJ,	,
,  O  %OO
O 
O 
	O
 O O O O /Od $--''(
  VV
V 
V 	V
 V V /V )V $++//".E.E
.E .E 
	.E
 .E .E #.Eb $//))*  
 
 
	
    / +* $))112
 !
 
 	
  
 / 32 !	L$L%L %L 	L
 L^8	" $(	PP'P !P 	P
 Pf $$$,,-

%/
4>
HK

 .
, $))##$$##++, 



 
 	

 
 
 - %
( $..(() "
  	
 
  ** $((//0
 '+	**
* * $	*
 * 1*. %))..%%--.%))..44<<=%/6@G > /. %))....66799%/96@99 89 %))..((001/P 2/Pd %))..@@HHI #'%*%*
%* %* 	%*
  %* %* J%*P& %))..&&--.
 J?J?
J? J? 
	J?
 J? 
J? J? J? /J?Z %))....667("("%/("7A("IS("(" 8("V %))..88@@A
  $&* $# #'"&##
# # 	#
 $# #  #  # 
# B#N KL--%/-8;-GJ-	- M-4
4&41H4	422
2 2 	2
 2* %VWf= 2X
 
  %/ 8; GJ  
 L $**##$""%/"8;"GJ"" %"$ $%%--.33%/38;3GJ3:3 /3 $((001$))##$$**$$%$$$,,-$''//0TT%/T8;TGJTT 1 . & % 2
T $))-- $$$(()

%/
8;
GJ

 * !
 $..(()$//))*%/8;GJ + *( $66>>?$66::;$//778$44<<=--%/-8;-GJ-	- > 9 < @-  ' NN""GGNNGG00880044

 	
--
 4##++T-F-F-N-NOPMM%/M8;MGJMPM QM` %))..))112
 "&&&
& & 	&
 & & 3&. %))..66>>?%%
% % 	%
 % #% @%>  

3" " !6" " N <[;b;bQ Q8Q Qn DI00",0<@00 # #es   /A6