
    IЦiH                    0
   S SK Jr   S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
  S SKJrJrJrJr  S SKrS SKJrJrJrJrJrJrJrJr  \(       a  S SKJr  \R6                  " \5      r\R<                  R?                  \S5      r / SQr!S S	K"J#r$  S
 r% " S S5      r&0 S\RN                  _S\RP                  _S\RR                  _S\RT                  _S\RT                  _S\RV                  _S\RX                  _S\RZ                  _S\R\                  _S\R^                  _S\R`                  _S\Rb                  _SS _S\Rd                  _S\Rf                  _S\Rh                  _S\Rj                  _0 S\Rl                  _S \Rn                  _S!\Rp                  _S"\Rr                  _S#\Rr                  _S$\Rt                  _S%\Rt                  _S&\Rv                  _S'\Rx                  _S(\Rz                  _S)\_S*\_S+\_S,\_S-\_S.\R|                  _S/\R|                  _Er?1 S0kr@S1 rAS2rB\B HK  rCS3\C 3rDS4\D 3rE\F" \&\D\A" \C5      5        \G" \\E5      \?\D'   \@RS                  \D5        \!R                  \D5        MM     S1rI\@\I-  rJ1 S5krK1 S6krLS1rM\K\M-  rN1 S7krOSS"1rPSS"S8.rQ1 S9krR\B H  rCS3\C 3rD\RRS                  \D5        M     1 S:krS1 S;krTS< rUS= rVS> rWS? rXS@ rYSA rZSB r[SC r\SD r]SE r^SF r_ SoSG jr`SH raSI rb\`\Rz                  \Rl                  \X\Y\Z\[\a\\\b\U\V\W\]\^SJ.rcSK rdSL reSM rfSN rgSO rhSP riSQ rjSR rkSS rlST rmSU rnSV roSW rp\R                  \   rrSX rs\B H(  rCSY\C 3rt\s" \C5      ru\t=\ulv        \ul        \F" \r\t\u5        M*     CuCCCtSZ rwSpS[ jrxS\ ryS] rz0 \cE0 S-\R                  _S\RN                  _S\h_S \i_S\j_S\k_S\l_S\m_S\e_S\f_S)\y_S\g_S!\Rp                  _S,\n_S+\o_S*\p_S\w_E\x\zS^.Er|\B H  rCS3\C 3rD\G" \rSY\C 35      \|\D'   M     CCCDCBCrS_ r}S` r~Sa rSb rSc rSd rSe rSf r\}\\\\\Sg.r\GR                  \GR                  Sh.rSi rSj rSk rSl rSm r\|GR                  5        H  u  rr\" \\5        M     \GR                  5        H  u  rr\" \\5        M     Sn r\|GR                  5        HW  u  rr\\K;   a  \" \\5        M  \\O;   a  \" \\5        M(  \\M;   d  \\L;   a	  \" \\5        \" \\5        \\Q;  d  MN  \" \\5        MY     CCg)q    )annotationsN)	lru_cacheupdate_wrapper)OptionalTypeTYPE_CHECKINGUnion)	sym_floatsym_itesym_maxsym_minsym_notSymBoolSymFloatSymInt)ShapeEnvsym_node)SymNodemethod_to_operatormagic_methods)py_sym_typesc                `    U [         L a  [        $ U [        L a  [        $ U [        L a  [
        $ U $ N)boolr   intr   floatr   )ts    ]/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/fx/experimental/sym_node.py_to_symtyper   5   s+    DyCxEzH    c                     \ rS rSr% SrSrS\S'      SZ S[S jjrS\S jrS]S	 jr	S^S
 jr
\S 5       r\S 5       rS rS_S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS`S jrSaS jrSaS jr S_SaS  jjr!SaS! jr"SaS" jr#SaS# jr$SaS$ jr%SaS% jr&SaS& jr'SaS' jr(SaS( jr)SaS) jr*SaS* jr+SaS+ jr,SaS, jr-SaS- jr.SaS. jr/SaS/ jr0SaS0 jr1SaS1 jr2SaS2 jr3SaS3 jr4SaS4 jr5SaS5 jr6SaS6 jr7SaS7 jr8SaS8 jr9SaS9 jr:SaS: jr;SaS; jr<SaS< jr=SaS= jr>SaS> jr?SaS? jr@SaS@ jrASaSA jrBSaSB jrCSaSC jrDSaSD jrESE rFSF rGSG rHSH rISI rJSaSJ jrKSK rLSL rMSM rNSaSN jrOSO rPSP rQSQ rRSR rSSS rTST rUSU rVSV rWSW rXSX rYSYrZg)br   B   z
This is a type erased SymInt/SymFloat which we use to do actual operations.
End users don't touch this.  Magic methods are NOT defined on this object.
Fr   _optimized_summationNc                  ^  UT l         UT l        UT l        UT l        U 4S jnUb  [	        U5      UL d-  [	        U5      [        U5      L d   SU S[	        U5       35       eT R                  (       aA  T R                  R                  (       a&  U" 5       n	XI:X  d   U SU	 ST R                   S35       eOU" 5       nUT l        UT l	        T R                  =(       a    T R                  R                  n
U
=(       a    UT l
        g )Nc                    > SSK Jn   U " TR                  5      (       a  g TR                  R	                  TR                  SS9nUb(  [        U[        5      (       d  TR                  U5      OUnU$ )Nr   )has_free_unbacked_symbolsT)compute_hint)%torch.fx.experimental.symbolic_shapesr&   expr	shape_env_maybe_evaluate_static
isinstanceSymTypespytype)r&   hintselfs     r   r'   &SymNode.__init__.<locals>.compute_hint{   s`    W )33>>88QU8VD0:40J0Jt{{4(PTKr    zCannot create SymNode of type z  with incompatible hint of type z != z (for ))_exprr*   r.   r#   typer   _translation_validation_enabledr)   _hintconstantfx_node)r0   r)   r*   r.   r/   r7   r8   optimized_summationr'   computed_hinttx_validation_ens   `          r   __init__SymNode.__init__Q   s    
"$7!:	 :'4:V9L+L 0(:4:,HL ~~$.."P"P !-)BV4fTYYKqAB)  >D
;C NNMt~~MM 	 (3Gr    c                    [        U R                  XR                  U R                  U R                  U R
                  5      $ r   )r   r3   r.   r6   r7   r8   )r0   r*   s     r   with_shape_envSymNode.with_shape_env   s.    JJ	;;

DMM4<<
 	
r    c                4   U R                   UR                   :H  =(       ay    U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )r3   r.   r6   r7   r8   r0   others     r   	_value_eqSymNode._value_eq   sq     JJ%++% .u||+.

ekk). /. -	
r    c                    [        U R                  U R                  U R                  U R                  U R
                  45      $ r   )hashr3   r.   r6   r7   r8   r0   s    r   _value_hashSymNode._value_hash   s,    TZZdjj$--VWWr    c                L    U R                   R                  U R                  5      $ r   )r*   replacer3   rH   s    r   r)   SymNode.expr   s    ~~%%djj11r    c                    U R                   $ r   r6   rH   s    r   r/   SymNode.hint   s    zzr    c                    U R                   S L$ r   rO   rH   s    r   has_hintSymNode.has_hint   s    zz%%r    c                    U R                   c*  Ub  U$ U R                  R                  U R                  5      $ U R                   $ r   )r6   r*   	size_hintr)   )r0   fallbacks     r   require_hintSymNode.require_hint   s:    ::#>>++DII66zzr    c                d    U R                   R                  (       a  [        U R                   5      $ g r   )r)   	is_numberr   rH   s    r   maybe_as_intSymNode.maybe_as_int   s     99tyy>!r    c                    SS K n[        U R                  UR                  5      (       a  [	        U R                  5      $ g Nr   )sympyr,   r)   Floatr   r0   r_   s     r   maybe_as_floatSymNode.maybe_as_float   s,    dii--##r    c                t    SS K nU R                  UR                  L a  gU R                  UR                  L a  gg )Nr   TF)r_   r)   truefalsera   s     r   maybe_as_boolSymNode.maybe_as_bool   s.    99

"YY%++%r    c                &    U R                   [        L $ r   )r.   r   rH   s    r   is_intSymNode.is_int   s    {{c!!r    c                &    U R                   [        L $ r   )r.   r   rH   s    r   is_floatSymNode.is_float   s    {{e##r    c                &    U R                   [        L $ r   )r.   r   rH   s    r   is_boolSymNode.is_bool   s    {{d""r    c                    U R                   S L=(       aE    [        U R                   [        5      =(       a$    U R                   R                  R	                  5       $ r   )r6   r,   r   nodeis_nested_intrH   s    r   rt   SymNode.is_nested_int   sA     JJd" 04::v.0

--/	
r    c           	         [        U5      [        L d   eSS Kn[        UR	                  U5      U R
                  [        XUS9$ Nr   )r7   r8   )r4   r   r_   r   Integerr*   r0   numr_   s      r   wrap_intSymNode.wrap_int   s=    CyCMM#SPS
 	
r    c           	         [        U5      [        L d   eSS Kn[        UR	                  U5      U R
                  [        XUS9$ rw   )r4   r   r_   r   r`   r*   ry   s      r   
wrap_floatSymNode.wrap_float   s=    CyE!!!KKdnneSPS
 	
r    c           	         [        U5      [        L d   eSS Kn[        U(       a  UR                  OUR
                  U R                  [        UUUS9$ rw   )r4   r   r_   r   re   rf   r*   ry   s      r   	wrap_boolSymNode.wrap_bool  sF    CyD   EJJ5;;NN
 	
r    c                    U $ r    rH   s    r   cloneSymNode.clone  s    r    c                    U R                    $ r   )r)   rH   s    r   strSymNode.str  s    ))r    c                "    U R                  5       $ r   r   rH   s    r   __str__SymNode.__str__  s    xxzr    c                   SU R                    SU R                   SU R                   3/nU R                  b  UR	                  SU R                   35        U R
                  b  UR	                  SU R
                   35        U R                  b  UR	                  SU R                   35        SR                  U5      S-   $ )	NzSymNode(z, shape_env=z	, pytype=zhint=z	constant=zfx_node=z, r2   )r3   r*   r.   r6   appendr7   r8   join)r0   reps     r   __repr__SymNode.__repr__  s    tzzl,t~~.>i}U
 ::!JJtzzl+,==$JJ4==/23<<#JJ$,,01yy~##r    c                "    U R                  5       $ r   r   rH   s    r   _graph_reprSymNode._graph_repr%  s    xxzr    c                "    U R                  5       $ r   )_absrH   s    r   absSymNode.abs+      yy{r    c                "    U R                  5       $ r   )_posrH   s    r   posSymNode.pos.  r   r    c                $    U R                  U5      $ r   )_round)r0   ndigitss     r   roundSymNode.round1  s    {{7##r    c                "    U R                  5       $ r   )_truncrH   s    r   truncSymNode.trunc4      {{}r    c                $    U R                  U5      $ r   )_addrB   s     r   addSymNode.add7      yyr    c                $    U R                  U5      $ r   )_subrB   s     r   subSymNode.sub:  r   r    c                $    U R                  U5      $ r   )_mulrB   s     r   mulSymNode.mul=  r   r    c                $    U R                  U5      $ r   )_modrB   s     r   modSymNode.mod@  r   r    c                $    U R                  U5      $ r   )
_float_powrB   s     r   	float_powSymNode.float_powC  s    u%%r    c                $    U R                  U5      $ r   )_pow_by_naturalrB   s     r   pow_by_naturalSymNode.pow_by_naturalF  s    ##E**r    c                $    U R                  U5      $ r   )_and_rB   s     r   and_SymNode.and_I  s    zz%  r    c                $    U R                  U5      $ r   )_or_rB   s     r   or_SymNode.or_L  r   r    c                $    U R                  U5      $ r   )_float_truedivrB   s     r   float_truedivSymNode.float_truedivO  s    ""5))r    c                $    U R                  U5      $ r   )_int_truedivrB   s     r   int_truedivSymNode.int_truedivR        ''r    c                $    U R                  U5      $ r   )_int_floordivrB   s     r   int_floordivSymNode.int_floordivU      !!%((r    c                $    U R                  U5      $ r   )_lshiftrB   s     r   lshiftSymNode.lshiftX      ||E""r    c                $    U R                  U5      $ r   )_rshiftrB   s     r   rshiftSymNode.rshift[  r   r    c                "    U R                  5       $ r   )_sym_notrH   s    r   r   SymNode.sym_not^      }}r    c                $    U R                  U5      $ r   )_eqrB   s     r   eq
SymNode.eqa      xxr    c                $    U R                  U5      $ r   )_nerB   s     r   ne
SymNode.ned  r   r    c                $    U R                  U5      $ r   )_gtrB   s     r   gt
SymNode.gtg  r   r    c                $    U R                  U5      $ r   )_ltrB   s     r   lt
SymNode.ltj  r   r    c                $    U R                  U5      $ r   )_lerB   s     r   le
SymNode.lem  r   r    c                $    U R                  U5      $ r   )_gerB   s     r   ge
SymNode.gep  r   r    c                "    U R                  5       $ r   )_floorrH   s    r   floorSymNode.floors  r   r    c                "    U R                  5       $ r   )_is_integerrH   s    r   
is_integerSymNode.is_integerv  s    !!r    c                "    U R                  5       $ r   )
_sym_floatrH   s    r   r
   SymNode.sym_floaty  s      r    c                "    U R                  5       $ r   )_sym_intrH   s    r   sym_intSymNode.sym_int|  r   r    c                "    U R                  5       $ r   )_ceilrH   s    r   ceilSymNode.ceil  s    zz|r    c                "    U R                  5       $ r   )_negrH   s    r   negSymNode.neg  r   r    c                $    U R                  U5      $ r   )_sym_minrB   s     r   r   SymNode.sym_min      }}U##r    c                $    U R                  U5      $ r   )_sym_maxrB   s     r   r   SymNode.sym_max  r  r    c                $    U R                  X5      $ r   )_sym_ite)r0   then_valelse_vals      r   r   SymNode.sym_ite  s    }}X00r    c                $    U R                  X5      $ r   )_is_contiguousr0   sizesstridess      r   is_contiguousSymNode.is_contiguous  s    ""522r    c                $    U R                  X5      $ r   )_is_channels_last_contiguous_2dr$  s      r   is_channels_last_contiguous_2d&SymNode.is_channels_last_contiguous_2d      33ECCr    c                $    U R                  X5      $ r   )_is_channels_last_contiguous_3dr$  s      r   is_channels_last_contiguous_3d&SymNode.is_channels_last_contiguous_3d  r-  r    c                $    U R                  X5      $ r   )_is_channels_last_strides_2dr$  s      r   is_channels_last_strides_2d#SymNode.is_channels_last_strides_2d      00@@r    c                $    U R                  X5      $ r   )_is_channels_last_strides_3dr$  s      r   is_channels_last_strides_3d#SymNode.is_channels_last_strides_3d  r6  r    c                $    U R                  X5      $ r   )'_is_non_overlapping_and_dense_indicatorr$  s      r   &is_non_overlapping_and_dense_indicator.SymNode.is_non_overlapping_and_dense_indicator  s    ;;EKKr    c                $    U R                  U5      $ r   )r   rB   s     r   sym_orSymNode.sym_or  r   r    c                $    U R                  U5      $ r   )r   rB   s     r   sym_andSymNode.sym_and  r   r    c                $    U R                  U5      $ r   )_bitwise_andrB   s     r   bitwise_andSymNode.bitwise_and  r   r    c                $    U R                  U5      $ r   )_bitwise_orrB   s     r   
bitwise_orSymNode.bitwise_or  s    &&r    c                $    U R                  U5      $ r   )r   rB   s     r   truedivSymNode.truediv  r   r    c                $    U R                  U5      $ r   )r   rB   s     r   floordivSymNode.floordiv  r   r    c                $    U R                  U5      $ r   )r   rB   s     r   powSymNode.pow  s    ~~e$$r    c                V    U R                  X5      R                  [        U S5      5      $ )N   )r=  r   to_noder$  s      r   is_non_overlapping_and_dense$SymNode.is_non_overlapping_and_dense  s'    ::5JMMgVZ\]N^__r    c                &    U R                  SS5      $ N r   )	guard_intrH   s    r   int_SymNode.int_  s    ~~b!$$r    c           
     &   SS K nSSKJnJn  U" 5       (       a3  [	        U U" [
        R                  [        S U 5       5      40 5      5      $ U Vs/ s H  oUR                  PM     nnUR                  " U6 n/ nS n	U H-  nUR                  c    O*UR                  UR                  5        M/     [        U5      n	U R                  R                  [
        R                  [        S U 5       5      45      u  p[        XpR                  [         XS9$ s  snf )Nr   get_proxy_modehandle_sym_dispatchc              3  8   #    U  H  n[        U5      v   M     g 7fr   )	wrap_node.0as     r   	<genexpr>"SymNode.sym_sum.<locals>.<genexpr>  s     6A9Q<<   c              3  8   #    U  H  oR                   v   M     g 7fr   r8   rg  s     r   rj  rk    s     !:T))Trl  rn  )r_   "torch.fx.experimental.proxy_tensorrc  rd  rX  torchsym_sumtupler)   Addr/   r   sumr*   _create_fx_call_functionr   r   )r0   argsr_   rc  rd  ri  exprsout
size_hintsout_hintr8   _s               r   rq  SymNode.sym_sum  s    	

 #MM6668  "&&A&ii
Avv~aff% 
 :H^^<<MME!:T!::<


 sNNCKK# 's   Dc                    U R                   R                  U R                  U R                  U R                  S9n [        U5      $ ! [         a    [        R                  SU5        e f = f)Nrn  zFailed to convert to int: %s)	r*   evaluate_exprr)   r/   r8   r   	Exceptionlogwarningr0   fileliners       r   r^  SymNode.guard_int  sZ     NN((DIIt||(T	q6M 	KK6:	   
A "A(c                    U R                   R                  U R                  U R                  U R                  S9n [        U5      $ ! [         a    [        R                  SU5        e f = f)Nrn  zFailed to convert to float: %s)	r*   r~  r)   r/   r8   r   r  r  r  r  s       r   guard_floatSymNode.guard_float  sZ     NN((DIIt||(T	8O 	KK8!<	r  c                    U R                   R                  U R                  U R                  U R                  S9n [        U5      $ ! [         a    [        R                  SU5        e f = f)Nrn  Failed to convert to bool: %s	r*   r~  r)   r/   r8   r   r  r  r  r  s       r   
guard_boolSymNode.guard_bool  sZ     NN((DIIt||(T	7N 	KK7;	r  c                &   SSK Jn  U R                  5       (       aC  U" U R                  5      (       d,  U R                  R
                  (       d  U R                  X5      $ U R                  R                  U R                  U SU 3U R                  S9$ )Nr   )free_unbacked_symbols:rn  )	r(   r  rR   r)   r*   +prefer_deferred_runtime_asserts_over_guardsr  defer_runtime_assertr8   )r0   r  r  r  s       r   expect_trueSymNode.expect_true  sw    O MMOO)$))44NNNN ??4..
 ~~22II$q' 3 
 	
r    c                    SSK Jn  U R                  U R                  S5      5      nUR	                  X5      nU(       a&  U R                  5       (       d  U" [        U 5      5        U$ )Nr   )_advise_is_size)r(   r  r   r{   r  rR   r   )r0   r  r  r  br  s         r   expect_sizeSymNode.expect_size  sJ    IGGDMM!$%MM$%
 T]]__F4L)r    c                    U R                   R                  U R                  U R                  U R                  SS9n [        U5      $ ! [         a    [        R                  SU5        e f = f)a  
Like guard_bool, but if we encounter unbacked symbols, if those symbols
are size-like, we will treat them as >= 2 for the purposes of the analysis.

This CHANGES the runtime semantics, but all size-oblivious sites have been
audited to ensure that the runtime semantics don't change in a material way.
Acceptable runtime semantic changes are, e.g., squeeze() no longer dropping
an unbacked one size, or a tensor reporting as non-contiguous even if it's
contiguous if it would have been reported contiguous due to being empty.
T)r8   size_obliviousr  r  r  s       r   guard_size_obliviousSymNode.guard_size_oblivious'  sa     NN((IItyy$,,t ) 
	7N 	KK7;	s   
A "A)c                &    U R                  SS5      $ r\  )r  rH   s    r   bool_SymNode.bool_=  s    r1%%r    c                    g)NTr   rH   s    r   is_symbolicSymNode.is_symbolic@      r    c                    g r   r   rH   s    r   
nested_intSymNode.nested_intC  r  r    c                    g)NFr   rH   s    r   is_constantSymNode.is_constantF  s    r    )r3   r6   r#   r7   r8   r.   r*   )NNF)r/   z!Optional[Union[int, float, bool]])r*   r   returnr   )rC   r   r  r   )r  r   r   )r  zbuiltins.str)r  r   )[__name__
__module____qualname____firstlineno____doc__r#   __annotations__r<   r?   rD   rI   propertyr)   r/   rR   rW   r[   rb   rg   rj   rm   rp   rt   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
   r  r  r  r   r   r   r'  r+  r0  r4  r9  r=  r@  rC  rG  rK  rN  rQ  rT  rY  r_  rq  r^  r  r  r  r  r  r  r  r  r  __static_attributes__r   r    r   r   r   B   s    "'$& !P4
 0P4d


X 2 2  &"$#




$$    &+! *()##"!$$13DDAAL (')(%`%#LL
$,&r    r   r   r   r   andrG  r  r   r  r   r   r   r   r  c                "    U R                  5       $ r   )r  xs    r   <lambda>r  X  s
    ALLNr    r   r   r   r   r   r   r  orrK  r   r   r   r   r   r
   r   r   r   r   r   r   >	   r   r  r   r  r  r   r  r   r
   c                   ^  U 4S jnU$ )Nc                ,   > [        U ST 35      " 5       $ )N_sym_)getattr)r0   names    r   fn_get_sym_node_fn.<locals>.fn  s    tuTF^,..r    r   r  r  s   ` r   _get_sym_node_fnr  ~  s    / Ir    )sqrtcoscoshsinsinhtantanhasinacosatanlog2sym_r{  >   r  r  r   r   >   r   r   r   >   r   r  sym_log2r  )rG  rK  >   r   r
   r   r   >   r  r  r   r   >   r   r   r   r   r   r   r  r  r   r  rY  c                    SSK Jn  U" X5      $ )Nr   )FloatTrueDiv)torch.utils._sympy.functionsr  )ri  r  r  s      r   _sympy_float_truedivr        9r    c                    SSK Jn  U" X5      $ )Nr   )
IntTrueDiv)r  r  )ri  r  r  s      r   _sympy_int_truedivr    s    7ar    c                    SSK Jn  U" X5      $ )Nr   )FloorDiv)r  r  )ri  r  r  s      r   _sympy_floordivr        5A>r    c                v    SSK JnJn  U R                  (       a  UR                  (       a  U" X5      $ U" X5      $ )Nr   Mod	PythonMod)r  r  r  is_nonnegative)ri  r  r  r  s       r   
_sympy_modr    s*    ;A,,1yr    c                    SSK Jn  U" X5      $ )Nr   )PowByNatural)r  r  )ri  r  r  s      r   _sympy_pow_by_naturalr    r  r    c                    SSK Jn  U" X5      $ )Nr   )FloatPow)r  r  )ri  r  r  s      r   _sympy_float_powr    r  r    c                ,    SS K nUR                  X5      $ r^   )r_   Andri  r  r_   s      r   
_sympy_andr    s    99Q?r    c                ,    SS K nUR                  X5      $ r^   )r_   Orr  s      r   	_sympy_orr        88A>r    c                    SSK Jn  U" X5      $ )Nr   )LShift)r  r  )ri  r  r  s      r   _sympy_lshiftr        3!<r    c                    SSK Jn  U" X5      $ )Nr   )RShift)r  r  )ri  r  r  s      r   _sympy_rshiftr  	  r  r    c                b   [        U 5      S:X  a  U/$ SSKJnJn  U" U S   5      U" U5      :  a  X/-   $ U" U S   5      U" U5      :  a  U/U -   $ S[        U 5      S-
  pTXE::  a:  XE-   S-  nUR	                  X   U5      nUS:X  a  gUS:  a  US-   nOUS-
  nXE::  a  M:  U R                  XA5        U $ )zg
If new_arg is found in ordered_args None is returned, else the new
ordered_args with new_arg inserted
r   )_args_sortkeyBasicrW     N)lensympy.core.basicr  r  compareinsert)ordered_argsnew_argsort_keyr  lowhighmidcompare_results           r   _binary_search_insert_argr	    s    
 <AyA R !HW$55i'' Q 8G#44y<''3|$q(
+za|'8'BQa'C7D + %r    c                  ^	 SSK m	SSKJn  U	4S jnSSKJn  X&" U 5      -  nX6" U5      -  nU(       a  U(       a  U" U R
                  S   5      U" UR
                  S   5      :  a  U" U R
                  UR
                  -   5      $ U" U R
                  S   5      U" UR
                  S   5      :  a  U" UR
                  U R
                  -   5      $ U(       a;  UR                  (       a*  [        [        U R
                  5      U5      nUb  U" U5      $ U(       a;  U R                  (       a*  [        [        UR
                  5      U 5      nUb  U" U5      $ T	R                  X5      nU" U5      U4$ )a  
Custom optimization for Add used to optimize incremental binary summations of certain properties. The idea
is when we know the expression is a summation of unique symbols all we need to know is the correct order of symbols,
and no other optimizations are needed. We pass evaluate=false, with the correct order of args and save the following.
1. Avoid running other optimizations when the Add is constructed.
2. Manually figure out the order of the args for the new expression in log(n) comparisons instead of nLog(n)
(comparing terms is expensive and shows in the profiles).
The function returns a tuple of (1) a boolean that indicates whether the output is a summation of unique symbols,
(2) the result sympy expression.
r   N)r  c                0   > TR                   " U SS06nSU4$ )NevaluateFT)rs  )r  resultr_   s     r   make_optimized&_optimized_add.<locals>.make_optimizedA  s     L959f~r    )_is_symbols_binary_summationr  )
r_   r  r  r  r  _args	is_symbolr	  listrs  )
lhsrhslhs_is_optimized_summationrhs_is_optimized_summationsortkeyr  r  new_argsr  r_   s
            @r   _optimized_addr  1  s0    9 J">s"CC">s"CC!&@399R=!GCIIaL$99!#))cii"788399Q< 7399R=#99!#))cii"788 "cmm,T#))_cB!(++ "cmm,T#))_cB!(++YYs F(0&99r    c                    SSK Jn  U" X5      $ )Nr   )BitwiseFn_bitwise_and)r  r  )ri  r  r  s      r   rF  rF  b  s    B &&r    c                    SSK Jn  U" X5      $ )Nr   )BitwiseFn_bitwise_or)r  r  )ri  r  r  s      r   rJ  rJ  h  s    A%%r    )r   r   r   r   r   r   r  rG  r  rK  r   r   r   r   r   c                   SS K n[        XR                  5      (       aq  U R                  n[	        U5      S:X  aV  [        US   UR
                  5      (       a8  US   R                  (       a$  UR                  US   5      nUS   U:X  a  XCS   -  $ [        XR
                  5      (       a  XR                  U 5      :X  d  [        XR                  5      (       a  UR                  U 5      $ U" U 5      $ )Nr   r  rW  )r_   r,   Mulrv  r  r`   r  rx   )ri  r  r_   aacoefs        r   _floor_ceil_helperr#    s    !YYVVr7a<Jr!uekk::r!u?O?O==A'D!u}e|#1kk""q!!a''}}Qa5Lr    c                    SSK Jn  U" U 5      $ )Nr   )
FloorToInt)r  r%  )ri  r%  s     r   _sympy_floorr&        7a=r    c                    SSK Jn  U" U 5      $ )Nr   )
TruncToInt)r  r)  )ri  r)  s     r   _sympy_truncr*    r'  r    c                    SSK Jn  U" U 5      $ )Nr   )	CeilToInt)r  r,  )ri  r,  s     r   _sympy_ceilr-    s    6Q<r    c                ,    SS K nUR                  X5      $ r^   )r_   Eqr  s      r   	_sympy_eqr0    r  r    c                ,    SS K nUR                  X5      $ r^   )r_   Ner  s      r   	_sympy_ner3    r  r    c                ,    SS K nUR                  X5      $ r^   )r_   Gtr  s      r   	_sympy_gtr6    r  r    c                ,    SS K nUR                  X5      $ r^   )r_   Ltr  s      r   	_sympy_ltr9    r  r    c                ,    SS K nUR                  X5      $ r^   )r_   Ler  s      r   	_sympy_ler<    r  r    c                ,    SS K nUR                  X5      $ r^   )r_   Ger  s      r   	_sympy_ger?    r  r    c                    SSK Jn  U" X5      $ )Nr   )Min)r  rA  )ri  r  rA  s      r   
_sympy_minrB        0q9r    c                    SSK Jn  U" X5      $ )Nr   Max)r  rF  )ri  r  rF  s      r   
_sympy_maxrG    rC  r    c                4    SS K nUR                  X4US45      $ )Nr   T)r_   	Piecewise)ri  r   fr_   s       r   
_sympy_iterK    s    ??A6At9--r    c                   ^  U 4S jnU$ )Nc                r   > SS K n[        UR                  R                  R                  ST 35      " U 5      $ )Nr   OpaqueUnaryFn_)r  r  utils_sympy	functions)ri  rp  r  s     r   r  _get_sym_math_fn.<locals>.fn  s/    +u{{))33~dV5LMaPPr    r   r  s   ` r   _get_sym_math_fnrS    s    Q
 Ir    _sympy_c                ,    SS K nUR                  U 5      $ r^   )r_   Abs)ri  r_   s     r   
_sympy_absrW    s    99Q<r    c                8    SSK JnJn  Uc  U" U 5      $ U" X5      $ )Nr   )RoundDecimal
RoundToInt)r  rY  rZ  )numberr   rY  rZ  s       r   _sympy_roundr\    s     E&!!F,,r    c                    SSK Jn  U" U 5      $ Nr   )ToFloat)r  r_  )ri  r_  s     r   _sympy_sym_floatr`    s    4 1:r    c                d    SS K nSSKJn  UR                  U" UR	                  U 5      5      U 5      $ r^  )r_   r  r_  r/  r  )ri  r_   r_  s      r   _sympy_is_integerrb  	  s&    488GEKKN+Q//r    )r   r  c                ^    [        U 5      n[        X[        [        US-
  SS5      5      5      $ )NrW  r  )r  sympy_is_contiguous_genericr  range)r%  r&  dims      r   sympy_is_contiguousrg  0  s*    
e*C&utE#'2r<R7STTr    c                   SS K n[        U 5      n[        U5      U:w  a  UR                  $ UR                  nUR                  R
                  nU HI  nXSR                  X   UR                  R
                  5      UR                  X   U5      -  -  nX`U   -  nMK     [        U5       H-  nXSR                  X   UR                  R                  5      -  nM/     U$ r^   )	r_   r  rf   re   SOner/  re  Zero)r%  r&  	dim_orderr_   rf  r'  zds           r   rd  rd  5  s    
e*C
9~{{JJMA%(EGGKK8588GJPQ;RRR	1X  3Z%(EGGLL99 r    c                    [        X/ SQ5      $ N)rW     r  r   rd  r%  r&  s     r   $sympy_is_channels_last_contiguous_2drt  M  s    &u|DDr    c                    [        X/ SQ5      $ N)rW     rq  r  r   rr  rs  s     r   $sympy_is_channels_last_contiguous_3drx  Q  s    &uGGr    c                ~   SS K nSSKJn  [        U 5      nU[        U5      :w  a  UR                  $ UR
                  R                  nUR                  nXsR                  US   S5      -  nU HM  nXsR                  X   S5      X   U:  -  -  nUS:X  a  XsR                  XaS   5      -  nX   U" X   S5      -  nMO     U$ )Nr   rE  rW  )	r_   r  rF  r  rf   ri  rk  re   r2  )	r%  r&  rl  r_   rF  rf  mr  rn  s	            r   &sympy_is_channels_last_strides_genericr{  U  s    0
e*C
c)n{{A

A '!*a	  A	XXeh"gjAo66 6!QZ((A JUXq))' * Hr    c                    [        X/ SQ5      $ rp  r{  rs  s     r   !sympy_is_channels_last_strides_2dr~  }  s    1%,OOr    c                    [        X/ SQ5      $ rv  r}  rs  s     r   !sympy_is_channels_last_strides_3dr    s    1%/RRr    c                "    SSK Jn  U" / U QUQ76 $ )Nr   )!IsNonOverlappingAndDenseIndicator)r  r  )r%  r&  r  s      r   -_sympy_is_non_overlapping_and_dense_indicatorr    s    N,>e>g>>r    )r'  r+  r0  r4  r9  r=  )r   r   c                "   [        U[        5      (       a  UR                  $ [        U5      [        L a  U R                  U5      $ [        U5      [        L a  U R                  U5      $ [        U5      [        L a  U R                  U5      $ [        $ r   )r,   r-   rs   r4   r   r   r   r{   r   r~   NotImplemented)r0   rz   s     r   rX  rX    sq    #x  xx	cd	~~c""	cc	}}S!!	ce	s## r    c                :   [        U [        5      (       a  U R                  b  U R                  $ U R                  5       (       a  [	        U 5      $ U R                  5       (       a  [        U 5      $ U R                  5       (       a  [        U 5      $ [        SU  35      e)Nzunrecognized return type )
r,   r   r7   rj   r   rm   r   rp   r   AssertionErrorr  s    r   rf  rf    st    !W!**"8zzxxzzay	
{	
qz8<==r    c                    [         U    $ r   )METHOD_TO_OPERATOR)methods    r   r   r     s    f%%r    c                \  ^ ^ [        S5      " T5      mT [        ;   a  T  S3nOT nUU 4S jnUU 4S jnT [        ;   a  [        [        SU 3U5        g T S:X  a  UU 4S jn[        [        SU 3U5        g T S:X  a  S	UU 4S jjn[        [        SU 3U5        g [        [        SU 3U5        g )
N   r{  c           
       > SSK JnJn  [        T5      nS nU R                  b*  UR                  b  U" U R                  UR                  5      n[
        R                  T5      nU(       a'  Ub$  [        X" [        U 5      [        U5      5      5      $ U" 5       (       a'  [        X" U[        U 5      [        U5      40 5      5      $ [        U[        5      (       d   eSn TS:X  a  SSKJnJn	  U R                  n
U R                  R                   (       d)  U
R#                  U R                  5      R$                  S:  ab  UR                  R                   (       d)  U
R#                  UR                  5      R$                  S:  a  U" U R                  UR                  5      nOxU	" U R                  UR                  5      nOZTS:X  a6  T" U R                  UR                  U R&                  UR&                  5      u  p{OT" U R                  UR                  5      n [.        R1                  STU R                  UR                  U5        T[2        ;   a  [4        nOJT[6        ;   a  [8        nO9U R:                  [4        L d  UR:                  [4        L a  [4        nOU R:                  nUb   Ub  [        U[<        5      (       d  U" U5      nU R                  R?                  X@R@                  UR@                  45      u  p[        UU R                  UUUUS	9nU$ ! [(         a.    [*        R-                  STU R                  UR                  5        e f = f)
Nr   rb  Fr   r  r   failed to eval %s(%s, %s)z%s %s %s -> %s)r8   r9   )!ro  rc  rd  r   r/    alternate_impl_if_hinted_methodsgetrX  rf  r,   r   r  r  r  r*   r)   r  bound_sympylowerr#   r  r  r  sym_node_logdebugalways_float_magic_methodsr   always_bool_magic_methodsr   r.   r-   ru  r8   )r0   rC   rc  rd  oprz  alternate_implr9   r  r  r*   rx  r.   r8   r{  r  funcr  s                   r   binary_magic_impl+_make_node_magic.<locals>.binary_magic_impl  s   	

  '99 UZZ%;$))UZZ0H9==fEh24	$5AQ!RSS)"y	%@P.QSUV  %))))#	G !NN	II,, ,,TYY7==BJJ-- ,,UZZ8>>!Cdii4C#DIIuzz:C5-1IIJJ--..	.*$c 499ejj1 	+VTYY

CP //F00F[[E!U\\U%:F[[F $x22h'H ^^<<u}}-

 NN 3
 U  	KK3VTYY

S	s   B?L L <;L 8L 8Mc           	       > SSK JnJn  [        T5      nU" 5       (       a  [	        X" U[        U 5      40 5      5      $ U R                  nTS:X  d  TS:X  a  U R                  R                  U5      n T
" U5      n[        R                  ST
XE5        S nU R                  b  U" U R                  5      nT[        ;   a  [         nO.T["        ;   a  [$        nOT[&        ;   a  [(        nOU R*                  nU R                  R-                  X0R.                  45      u  p[1        XPR                  XvUS9$ ! [         a    [        R                  STU5        e f = f)Nr   rb  r  ceilingzfailed to eval %s(%s)z%s %s -> %srn  )ro  rc  rd  r   rX  rf  r)   r*   _simplify_floor_divr  r  r  r  r  r/   always_int_magic_methodsr   r  r   r  r   r.   ru  r8   r   )r0   rc  rd  r  r)   rx  rz  r.   r8   r{  r  r  s             r   unary_magic_impl*_make_node_magic.<locals>.unary_magic_impl#  s,   	

  '4!4R)D/9KR!PQQyyW) 3>>55d;D	t*C 	=$:99 $))}H--F00F11F[[F^^<<R,,Q
sNNFgNN%  	KK/>	s   2D. .#Er   c                  > SSK JnJn  U R                  (       a  UR                  OUR                  nU" 5       (       a6  [	        U U" [
        [        U 5      [        U5      [        U5      40 5      5      $  T	" U R                  UR                  UR                  5      nU R                  R                  [
        U R                  UR                  UR                  45      u  px[        X`R                  UR                  XWS9$ ! [         a9    [        R                  ST
U R                  UR                  UR                  5        e f = f)Nr   rb  zfailed to eval %s(%s, %s, %s)rn  )ro  rc  rd  r/   rX  r   rf  r)   r  r  r  r*   ru  r8   r   r.   )	pred_node	then_node	else_noderc  rd  rz  rx  r8   r{  r  r  s            r   sym_ite_impl&_make_node_magic.<locals>.sym_ite_implK  s   
 *3y~~Y^^H'%i0%i0%i0
  
9>>9>>9>>J #,,EE)++Y->->	@Q@QRJG (()*:*:H   3NNNNNN s   6(D   AEr   c           	     (  > SSK JnJn  [        R                  nU" 5       (       a  [        X" U[        U 5      U40 5      5      $ U R                  n T" XQ5      nUc  [        nOU R                  nS nU R                  b  U" U R                  U5      nU R                  /n	Ub  U	R                  U5        U R                   R#                  U[%        U	5      5      u  p['        X`R                   XxU
S9$ ! [         a    [        R                  STXQ5        e f = f)Nr   rb  z!failed to eval %s(%s, ndigits=%s)rn  )ro  rc  rd  builtinsr   rX  rf  r)   r  r  r  r   r.   r/   r8   r   r*   ru  rr  r   )r0   r   rc  rd  r  r)   rx  r.   rz  rv  r8   r{  r  r  s               r   
round_impl$_make_node_magic.<locals>.round_implv  s   
 B-b9T?G2LbQ  99D4)
 Hyy$dii1 LL>D"G$@@U4[QJG3'RR1  ?Ws   C. .#Dr   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )r  r  method_attrr  r  r  r  s   ``     r   _make_node_magicr    s    S>$DCCl\|"OH 1[M*,<=	9	&	P 	1[M*L9	7	'	S '	SR 	1[M*J71[M*,=>r    c                   ^ ^ UU 4S jn[        [        ST  3U5        UU 4S jn[        [        R                  [
           T 5      (       d#  [        [        R                  [
           T U5        g g )Nc                N  > SSK JnJn  [        [        R
                  [           T5      nU" 5       (       aJ  [        U U" UU Vs/ s H  n[        U5      PM     snU Vs/ s H  n[        U5      PM     sn40 5      5      $ U Vs/ s H  ofR                  PM     nnU Vs/ s H  ofR                  PM     nn T" Xx5      n	/ n
S nU H-  nUR                  c    O\U
R                  UR                  5        M/     / nU H-  nUR                  c    O'UR                  UR                  5        M/     U" X5      nTR                  S5      (       a  [         nO["        n[%        XR&                  X5      $ s  snf s  snf s  snf s  snf ! [         a    [        R                  STXx5        e f = f)Nr   rb  r  
_indicator)ro  rc  rd  r  sysmodulesr  rX  rf  r)   r  r  r  r/   r   endswithr   r   r   r*   )r0   r%  r&  rc  rd  r  s
size_exprsstride_exprsrx  ry  rz  stride_hintsr.   r  r  s                 r   sizes_strides_impl4_make_node_sizes_strides.<locals>.sizes_strides_impl  s   	

 S[[*F3#,12EqilE274S7aYq\74ST  ',,effe
,(/010	z0C 
Avv~aff% 
 L66>##AFF+ 
 j7 ??<((FFsNNF==E 34S -0  	KK3VZV	s$   E-E2E7 E<8F #F$r{  c                D  > SS K nSSKJn  [        R                  " X5       H  n[        U[        5      (       d  M  [        [        UR                  T5      " U  Vs/ s H  n[        UR                  U5      PM     snU Vs/ s H  n[        UR                  U5      PM     sn5      5      s  $    TS:X  a  U" X5      $ [        T" U  Vs/ s H  oBR                  U5      PM     snU Vs/ s H  oBR                  U5      PM     sn5      5      $ s  snf s  snf s  snf s  snf )Nr   )!eval_is_non_overlapping_and_denser=  )r_   r(   r  	itertoolschainr,   r   rf  r  rs   rX  r   sympify)r%  r&  r_   r  ri  r  r  r  s         r   sizes_strides_user4_make_node_sizes_strides.<locals>.sizes_strides_user  s    	
 0A!V$$ AFFF+5:;U+U;5<=W+W=  1 ==4UDD /45u!]]1%u5/67w!]]1%w7  <= 67s    D D	D)D)r  r   hasattrr  r  r  )r  r  r  r  s   ``  r   _make_node_sizes_stridesr    sV    .>` Gq\#56
6 3;;x(&11H%v/AB 2r    c                J  ^ ^	^
^^^ T [         ;   a  ST  3mOT mSS jm	S m
T [        ;   a  S mOS mU 4S jmU	U
U UU4S jnU	U
U UUU4S jnU	U
U UUU4S	 jnT [        ;   a  [        US
T  S
3U5        g T [        ;   a#  [        UT 5      n[        UT [        X%5      5        g T S:X  a  U	U4S jn[        US
T  S
3U5        g T S:X  a  SU	U
U 4S jjn[        US
T  S
3U5        g T nT [        ;   a	  [        T    n[        US
U S
3U5        T [        ;   a  [        USU S
3U5        g g )Nr  c                    [        U [        [        [        45      (       a  U $ [        U [        5      (       a  U R
                  R                  SS5      $ [        S5      e)Nr]  r   z*expect to be called with constant SymBools)r,   r   r   r   r   rs   r  r  r  s    r   get_constant&_make_user_magic.<locals>.get_constant  sK    a#ud+,,Ha!!66$$R++IJJr    c                    [        U [        [        [        45      (       a  g[        U [        [
        [        45      (       a  U R                  R                  5       $ g)NTF)	r,   r   r   r   r   r   r   rs   r  r  s    r   r  %_make_user_magic.<locals>.is_constant  sC    a#ud+,,a&(G45566%%''r    c                    [        U [        5      (       a-  [        U R                  R	                  [        U 5      5      5      $ U $ )z;Implements True+True=2, which works in python but not sympy)r,   r   r   rs   r{   r   r  s    r   promote!_make_user_magic.<locals>.promote5  s0    !W%%affooc!f566Hr    c                    U $ r   r   r  s    r   r  r  =  s    Hr    c                ,  > TS;  a  X4$ [        U [        [        R                  45      n[        U[        [        R                  45      nU(       d  U(       a:  U(       d  [        R                  " U 5      n U(       d  [        R                  " U5      nX4$ )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r,   r   rp  r   r
   )r0   rC   f_selff_otherr  s       r   promote2"_make_user_magic.<locals>.promote2@  su      
 
$ ;D5%.."9:UUENN$;<Wt,.{r    c                   > T" U 5      n T" U 5      (       a  [        T5      " T" U 5      5      $ [        [        U R                  T5      " 5       5      $ r   )r   rf  r  rs   )r0   r  r  r  r  r  s    r   r  *_make_user_magic.<locals>.unary_magic_implj  sE    t}t&v.T0BCCK8:;;r    c           	       > [        U[        [        [        [        [
        [        45      (       d  [        $ [        R                  STX5        T" U 5      n T" U5      nT	" X5      u  pT" U 5      (       a  [        T5      " T" U 5      U5      $ T" U5      (       a  T" U5      n[        U R                  U5      nU[        L a  [        $ [        [        U R                  T5      " U5      5      nT" U5      (       a  T" U5      $ U$ )NzMAGIC %s %s %s)r,   r   r   r   r   r   r   r  r  r  r   rX  rs   rf  r  
r0   rC   
other_noderetr  r  r  r  r  r  s
       r   r  +_make_user_magic.<locals>.binary_magic_implp  s    %#udFHg!NOO!!+VTAt}t+t&v.T0BEJJu 'ETYY.
'!!		;7
CD$/$4$4|C =#=r    c           	       > [        U[        [        [        [        [
        [        45      (       d  [        $ T" U 5      n T" U5      nT	" X5      u  pT" U 5      (       a  [        T5      " T" U 5      U5      $ T" U5      (       a  T" U5      n[        U R                  U5      nU[        L a  [        $ [        [        UT5      " U R                  5      5      nT" U5      (       a  T" U5      $ U$ r   )r,   r   r   r   r   r   r   r  r   rX  rs   rf  r  r  s
       r   rbinary_magic_impl,_make_user_magic.<locals>.rbinary_magic_impl  s    %#udFHg!NOO!!t}t+t&v.T0BEJJu 'ETYY.
'!!
K8CD$/$4$4|C =#=r    __r   c                  > U R                   n[        X15      n[        X25      nU[        L d	  U[        L a  [        $ [        U[        5      (       a/  [        U[        5      (       a  UR
                  UR
                  :X  d   e[        [        U R                   T5      " XE5      5      nUR                   R                  5       (       a  T" U5      $ U$ r   )	rs   rX  r  r,   r   r.   rf  r  r  )	predr  r   r  r  r  r  r  r  s	          r   sym_ite_magic_impl,_make_user_magic.<locals>.sym_ite_magic_impl  s    		I	4I	4IN*i>.I%%9g..y'22$$	(8(889 GDII{;IQRC(+(<(<(>(><$GCGr    r   c                   > T" U 5      (       a  [         R                  " T" U 5      U5      $ [        [        U R                  T5      " U5      5      $ r   )r  r   rf  r  rs   )r0   r   r  r  r  s     r   round_magic_impl*_make_user_magic.<locals>.round_magic_impl  s?    4  ~~l4&8'BBWTYY7@AAr    __r)r  z2Union[SymInt, int, SymFloat, float, SymBool, bool]r   )	r  bool_becomes_int_magic_methodsunary_magic_methodsr  unary_nonmagic_methodsr  r   bitwise_opsreflectable_magic_methods)r  	user_typer  r  r  origr  r  method_namer  r  r  r  r  s   `        @@@@@r   _make_user_magicr    sK    CCVHoKB //		!T< <> >"> >  $$	Rxr?,<=	)	)y&)	6>2B#IJ	9		H 		Rxr?,>?	7		B 	B 		Rxr?,<=[ %f-K	R}B/1BC..I[M46HI /r    )FFr   )
__future__r   r  r  loggingmathoperatorr  	functoolsr   r   typingr   r   r   r	   rp  r
   r   r   r   r   r   r   r   r(   r   	getLoggerr  r  _logginggetArtifactLoggerr  __all__torch.typesr   r-   r   r   r   r   r   r   r  r   r  r   rQ  r   r   r   r   r   r   r   r   r  r   rT  r   r   r   rN  r  r  r  math_op_namesr  sym_namepriv_sym_namer  r  r   r  r  only_bool_magic_methodsr  also_bool_magic_methodsbool_magic_methodsonly_float_magic_methodsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  rF  rJ  r  r#  r&  r*  r-  r0  r3  r6  r9  r<  r?  rB  rG  rK  r  current_modulerS  priv_sympy_namer  r  rW  r\  r`  rb  invertr   rg  rd  rt  rx  r{  r~  r  r  sizes_strides_methodsminmaxr  rX  rf  r   r  r  itemsr  r  r  r   r    r   <module>r
     sq   #      
 / 7 7 	 	 	 >!~~//*E = 1E ER#	8<<#	8<<# 
8<<# 
8==	#
 8==# DII# 	(++# TZZ# TZZ# H%%# 	(++# 	(++# *# 	(++# hoo#  	(++!#" 
8<<##$ 
8<<%#& 	(++'#( 
8<<)#* 	(,,+#, (,,-#. /#0 hll1#2 X^^3#4 hoo5#6 
8<<7#8 9#: w;#< w=#> w?#@ wA#B X%%C#D 8##E# J
  DdV}HzNMGX/56#*5-#@x H%NN8    $&<< > !6 & ,/FF  J  7<T] 2  X DdV}H""8, 
 H  "F LQ.:b'& <<<<+!
)%# &$. X& Dv&O	$	B$33BObkNOR0	  o-0x 
8<< 	)	
 	) 	) 	) 	) 	) \ \ ! K 
8<< z  z!" z#$ 
:%& #)0 DdV}H%nv6FGM(  	(M>U
0EH%PPS? )&J&J#D#D.[	  ||||$  >&d?NTCn "'')LFDVT" * *//1LFDVT* 2tJn "'')LFD(()))*((F6T,T)VV$[ * * r    