
    '}h4                    "   d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	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 ddlmZ dd	lmZmZmZ g d
Z ej<                  ej>                  d      Z d Z! e d       ejD                  d       ejF                  ddd      ejH                  dd                            Z% e d      ejH                  dd              Z& e d       ejF                  dd      ejH                  dd                     Z' e d       ejF                  dd      ejH                  dd                     Z( e d      ejH                  dd              Z) e d       ejD                  d       ejF                  ddd      ejH                  dd                            Z* e d      ejH                  	 d	 dd               Z+ e d!       ejF                  dd      ejH                  dd"                     Z, e d# e!d$d%d&      g'       e d( e!d)d*d&      g'       e d+ e!d,d-d&      g'       e d. e!d/d%d0      g'       e d1 e!d2d*d0      g'       e d3 e!d4d-d0      g'       e d5 e!d6d*d7      g'      ejH                  dd8                                                        Z- e d9       ejD                  ddddddd      ejH                  	 	 dd:                     Z. e d;       ejF                  dddd      ejH                  ddd<                     Z/ e d=       ejF                  dddd      ejH                  dd>                     Z0 e d?       ejF                  ddd@      ejH                  dddA                     Z1 e dB      ejH                  ddC              Z2 e dD      ejH                  ddE              Z3 e dF      ejH                  ddG              Z4 e dH      ejH                  ddI              Z5 e dJ      ejH                  ddK              Z6 e dL      ejH                  ddM              Z7 e dN      ejH                  dddO              Z8 e dP      ejH                  ddQ              Z9 e dR      ejH                  ddS              Z: e dT      ejH                  ddU              Z; e dV       ejD                  d      ejH                  ddW                     Z< e dX      ejH                  ddY              Z= e dZ       ejF                  dddd      ejH                  dd[                     Z> e d\       ejF                  ddddd      ejH                  	 	 dd]                     Z? e d^       ejF                  dddddd@      ejH                  ddd_                     Z@ e d`       ejF                  dddd@      ejH                  ddda                     ZA e db       ejF                  dddd@      ejH                  dddc                     ZB e dd       ejF                  dd      ejH                  ddde                     ZC e df      ejH                  ddg              ZD e dh       ejF                  dddd      ejH                  dddi                     ZE e dj       ejF                  dddd      ejH                  dddk                     ZF e dl       ejF                  ddd      ejH                  dddm                     ZGejH                  ddn       ZH e do      ejH                  dddp              ZI e dq       e dr       e ds      ejH                  ddt                            ZJ e du       e dv       e dw      ejH                  ddx                            ZK e dy      ejH                  	 	 	 	 	 	 	 	 	 	 ddz              ZL e d{      ejH                  dd|              ZM e d}      ejH                  dd~              ZN e d      ejH                  dd              ZO e d       ejF                  dd      ejH                  dd                     ZP e d       ejD                  dd      ejH                  ddd                     ZQ e d      ejH                  ddd              ZR e d      ejH                  dd              ZS e d      ejH                  dd              ZT e d      ejH                  dd              ZU e d      ejH                  dd              ZV e d      ejH                  dd              ZW e d      ejH                  dd              ZX e d      ejH                  dd              ZYejH                  	 	 dd       ZZejH                  dd       Z[ejH                  dd       Z\ e d       ejF                  ddddd      ejH                  dd                     Z] e d      ejH                  dd              Z^ e d       ejD                  ddd       ejF                  ddd      ejH                  dd                            Z_ e d       ejF                  ddddd      ejH                  	 	 	 	 	 	 dd                     Z` e d       ejF                  ddddddddd	      ejH                  	 	 dd                     Za e d       ejF                  dddd      ejH                  dd                     Zb e d      ejH                  dd              Zc e d      ejH                  	 	 	 	 	 	 d	 dd              Zd e d      ejH                  dd              Ze e d      ejH                  dd              Zf e d      ejH                  dd              Zg e d      ejH                  dd              Zh e d      ejH                  dd              Zi e d      ejH                  dd              Zjy)z(This file exports ONNX ops for opset 11.    )annotationsN)OptionalSequence)_C)_onnx)_type_utilserrorssymbolic_helpersymbolic_opset10symbolic_opset9utils)GLOBALS)	_beartype	jit_utilsregistration)9addappendarangeargsort
atleast_1d
atleast_2d
atleast_3dcatchunk	clamp_max	clamp_minclampconstant_pad_ndcumsumDeleteembedding_bagembedding_renormflattengatherhardtanhhstackim2col
index_fillindex
index_copy	index_putinsert
linalg_detlinalg_vector_normlogdetmasked_scattermasked_selectmmnarrownormalpadpixel_shufflepopprim_constant_chunkreflection_padrelu6	remainderreplication_padroundscatterselectsizesortsplit_with_sizessplitsqueezestacktopkunbind
unique_dim	unsqueezevstack   )opsetc                       fd}|S )z_Returns a decorator that calls the decorated (higher-order) function with the given parameters.c                     | i S N )fnargskwargss    Z/var/www/html/test/engine/venv/lib/python3.12/site-packages/torch/onnx/symbolic_opset11.py_applyz_apply_params.<locals>._apply\   s    4"6""    rP   )rR   rS   rU   s   `` rT   _apply_paramsrW   Y   s    # MrV   zaten::hardtanhTvfc                   t         j                  j                  |t         j                  j                        }| j	                  dt        j                  ||j                                     }| j	                  dt        j                  ||j                                     }t        j                  | d|||d      S )NConstantdtypevalue_tClip   opset_before)
r   JitScalarType
from_valueFLOAToptorchtensorr]   opset9_op_with_optional_float_cast)gselfmin_valmax_valscalar_types        rT   r%   r%   b   s    
 ++66k''--K ddWK,=,=,?@  G ddWK,=,=,?@  G ..	64' rV   zaten::clampc                P    t         j                   fd       }t        j                  j	                  |t        j                  j
                        }|t        j                  j
                  k7  r |||      } |||      }t        j                  |      rt         ||      S t        j                  |      rt         ||      S t        j                  |      dk(  r3t        j                  |      dk(  rt        j                   d|||d      S t         t         ||      |      S )Nc                z    | 7t        j                  |       s"j                  d| |j                               S | S )NCastto_i)r
   _is_nonerg   	onnx_type)ri   r]   rl   s     rT   _cast_if_not_nonez clamp.<locals>._cast_if_not_nonez   sC    o&>&>v&F44__&    MrV   r   r`   ra   rb   )r   beartyper   rd   re   	UNDEFINEDr
   rv   r   r   _get_tensor_rankrj   rk   )rl   rm   minmaxrx   rp   s   `     rT   r   r   w   s      ++66k''11K k//999[1[1$D#&&		!	!#	&D#&& ,,S1Q6005:6664c  Q	!T3 7==rV   zaten::clamp_minc                D   | j                  d|t        j                  j                  |      j	                               }t        j                  |      dk(  r0t        j                  |       }t        j                  | d|||d      S t        j                  | d||d      S )Nrs   rt   r   r`   ra   rb   Max
rg   r   rd   re   rw   r
   r{   rj   unusedrk   )rl   rm   r|   r}   s       rT   r   r           $$vs!:!:!E!Ed!K!U!U!W$
XC'',1mmA22vtS#B
 	
 221eT3UWXXrV   zaten::clamp_maxc                D   | j                  d|t        j                  j                  |      j	                               }t        j                  |      dk(  r0t        j                  |       }t        j                  | d|||d      S t        j                  | d||d      S )Nrs   rt   r   r`   ra   rb   Minr   )rl   rm   r}   r|   s       rT   r   r      r   rV   zaten::relu6c                f   t         j                  j                  |t         j                  j                        }| j	                  dt        j                  d|j                                     }| j	                  dt        j                  d|j                                     }t        | |||      S )Nr[   r   r\   r^      )	r   rd   re   rf   rg   rh   ri   r]   r   )rl   inputrp   rn   ro   s        rT   r:   r:      s     ++66{((..K ddQk&7&7&9:  G ddQk&7&7&9:  G E7G,,rV   zaten::selectic                ,    | j                  d|||      S )NGatheraxis_irg   )rl   rm   dimr)   s       rT   r?   r?      s     44$c422rV   zaten::index_putFc                   t        j                  |      rt        j                  |      }n|g}t        j                         r|g|z   ||gz   } | j                  dg| S t        j
                  |d      }t        |      dk(  r|S t        |      dkD  rt        t        |            D ]3  }t        j                  ||         s| j                  d||         ||<   5 |d   }|dd  D ]  }	t        j                  | ||	      } | j                  d|      }
|D 	cg c]0  }	t        j                  | t        j                  | |	|
d       dg      2 }}	 | j                  dg|d	di}n|d   }|}t        j                  |      rt        j                  |      }||dk(  rt        j                  | |||      S t        j                  |      }t        j                  |      }|1|/||kD  r*t        j                  | |t!        t        ||                  }t#        | |||      S | j                  d|      }
t        j                  | |dg      }t        j$                  | | j                  d|      dgt        |      gt&        j(                  g
      }| j                  d|
|d      }t        j                  |      }||dk(  rt        j                  | ||d       }t        j*                  | ||      }t,        j.                  j1                  |t,        j.                  j2                        }|t,        j.                  j2                  k7  r`t,        j.                  j1                  |t,        j.                  j2                        }||k7  r;| j                  d||j5                               }n|rt7        j8                  d|      |rk| j                  d| j                  d|      t;        j<                  dg|j?                                     }| j                  d|||      }t        | ||      }|S | j                  d|||      }|S c c}	w )Nr+   br      NonZeroShapeConcatr   axesstartsendsr   rs   rt   z'self does not have a valid scalar type.ConstantOfShaper\   r^   	ScatterND) r
   _is_packed_list_unpack_listis_caffe2_aten_fallbackat
_parse_arglenrange_is_boolrg   rj   r   _unsqueeze_helperexpandr{   masked_filllistr0   _slice_helpersysmaxsize_reshape_helperr   rd   re   rz   rw   r	   SymbolicValueErrorrh   ri   r]   )rl   rm   indices_list_valuevalues
accumulateindices_listrR   idx_r)   indbroadcast_index_shapebool_inprank	mask_rank	self_ranksub_data_shapevalues_shapeself_scalar_typevalues_scalar_typezerosresults                        rT   r+   r+      s/   
 &&'9:&334FG*+..0v$
';;qttK'$'' ++J<J
<A
<1#l+, 	ID''T(:;%&TT)\$5G%HT"	I Q# 	.CJJq%-E	. !We 4
 $	
  --6==C)>Et
 
 X88R8P Q##H-"33F;DDAI))!T8VDD'88BI'88>I%)	) +<<xeIy&A!B "!T8V<< !We 411!URDA$22	144aS#l2C1DCKK=N 44"7PQ4RL++F3DDAIq&,=,,QEF"00;;k''11 ;44>>>(66AAK--77
 11TT&&/?/I/I/KTLF	''(QSWXXDD$LL!,<,B,B,DE  

 k5%8Qf% M k47MG
s   5Qzaten::pixel_shufflec                    t        j                  |      }||dk7  rt        j                  dd      S | j                  d||d      S )N   r6   zonly support 4d inputDepthToSpaceCRD)blocksize_imode_s)r
   r{   _unimplementedrg   )rl   rm   upscale_factorr   s       rT   r6   r6   S  sK     ++D1DDAI--o?VWW44.4OOrV   zaten::upsample_nearest1dupsample_nearest1d   nearest)decoratezaten::upsample_nearest2dupsample_nearest2dr   zaten::upsample_nearest3dupsample_nearest3d   zaten::upsample_linear1dupsample_linear1dlinearzaten::upsample_bilinear2dupsample_bilinear2dzaten::upsample_trilinear3dupsample_trilinear3dzaten::upsample_bicubic2dupsample_bicubic2dcubicc                0    t        j                  | ||      S rO   )r
   _interpolate_helper)namer   interpolate_modes      rT   _interpolater   ]  s    < ..tS:JKKrV   zaten::__interpolatec           	     8    t        j                  | ||||||      S rO   )r
   __interpolate_helper)rl   r   r@   scale_factormodealign_cornersrecompute_scale_factor	antialiass           rT   __interpolater   ~  s'     //	5$dM;Q rV   zaten::gatherc                    t        j                  |d      rt        j                  dd      S t        j                         r| j	                  d||||      S | j                  d|||      S )Nr   r$   zsparse_grad == TrueGatherElementsr   )r
   _maybe_get_constr   r   r   rg   )rl   rm   r   r)   sparse_grads        rT   r$   r$     sc     ''S9--h8MNN..0ttHdC<<44 $c4::rV   zaten::scatterc           
     .   t        j                         r| j                  d||||d      S t        j                  j                  |      }t        j                  |      }t        j                  |      r| j                  d||||      S t        j                  j                  |      |k7  r?| j                  d|t        j                  j                  |      j                               }| j                  d||t        j                  | ||      |      S )Nr>   srcoverload_nameScatterElementsr   rs   rt   )r
   r   r   r   rd   re   _maybe_get_scalar	_is_valuerg   rw   rj   	expand_as)rl   rm   r   r)   r   src_types         rT   r>   r>     s     ..0ttItS%EtJJ((33C8H

+
+C
0C  %tt%tUCtDD $$//5A$$ ..99$?IIK  C
 tttUF,<,<QU,KTW  
 	
rV   zaten::cumsumnonec                |   | j                  dt        j                  |t        j                              }|rn|j	                         j                         dk7  rMt        j                  |dd      }| j                  d|t        j                  |      j                               }n|}| j                  d	||      }|S )
Nr[   r\   r^   zprim::Constantr   r]   rs   rt   CumSum)rg   rh   ri   intnodekindr
   
_get_constr   rd   rw   )rl   rm   r   r]   
dim_tensorparsed_dtypecastcsums           rT   r   r     s     j%,,s%))*LMJ""$(88&11%gFttD{88FPPR  
 44$
+DKrV   zaten::masked_selectc                ~    t        j                  | t        j                  | ||            }| j                  d||      S )NGatherND)rj   nonzeror   rg   )rl   rm   maskr)   s       rT   r1   r1     s6     NN1f..q$=>E44
D%((rV   zaten::masked_scatterc                   t        j                  | t        j                  | ||            }t        j                  | |t        j                  dg            }t        j                  | |t        j                  dg      t        j                  dg      t        j                  | |t        j                  dg                  }| j                  d|||      S )Nr   r   r   r   )
rj   r   r   r
   r   rh   
LongTensorr   r@   rg   )rl   rm   r   sourcer)   s        rT   r0   r0     s     NN1f..q$=>E ,,Q8H8H"8NOF**	qc"$[[E5#3#3QC#89F 44T5&11rV   z	aten::lenc           
     &   t        j                  |      s!|j                         j                         dk(  r| j	                  d|      S t        | || j	                  dt        j                  dg                  }t        j                  | |dg      S )Nzonnx::SplitToSequenceSequenceLengthr[   r   r^   )	r
   _is_tensor_listr   r   rg   r@   rh   r   _squeeze_helper)rl   rm   sz_0s      rT   _lenr    s{     	''-99;!88tt$d++4j%2B2BA32GHID**1dQC88rV   zaten::__getitem_c                r    t        j                  |      r| j                  d||      S ddlm}  || ||      S )N
SequenceAtr   )
__getitem_)r
   r  rg   torch.onnx.symbolic_opset9r  )rl   rm   r   getitems       rT   r  r    s7     &&t,ttL$**Dq$""rV   zaten::_set_itemc                P    | j                  d||      }| j                  d|||      S )NSequenceEraseSequenceInsertr   )rl   tensor_listr   rX   s       rT   	_set_itemr    s,     $$Q7K44 +q!44rV   zaten::appendc                (    | j                  d||      S Nr  r   )rl   rm   ri   s      rT   r   r     s     44 $//rV   z	aten::addc                ^   t        j                  |      rt        j                  |      rl|j                         }|j	                         dk7  rt        j
                  dd      S t        j                  |      }|}|D ]  }| j                  d||      } |S t        j                  | |||      S )Nzprim::ListConstructr   z6does not support adding dynamic tensor list to anotherr  )
r
   r   r  r   r   r   r   rg   rj   r   )rl   rm   otheralphatensor_list_nodetensorslts           rT   r   r     s       &?+J+J4+P ::<  "&;;"11O  "..u5 	-A%q!,A	-::aue,,rV   zaten::insertc                *    | j                  d|||      S r  r   )rl   rm   posri   s       rT   r,   r,     s     44 $44rV   z	aten::popc                (    | j                  d||      S Nr  r   rl   r  r   s      rT   r7   r7          44c22rV   zaten::Deletec                (    | j                  d||      S r  r   r  s      rT   r    r      r  rV   z	aten::catc                    t        j                  |      rt        j                  | ||      S t        j                  |dd      }| j                  d||      S )Nr   r   ConcatFromSequencer   )r
   r   rj   r   r   rg   r  s      rT   r   r   %  sO     &&{3zz![#..((c59tt(+ctBBrV   zaten::stackc                    t        j                  |      rt        j                  | ||      S t        j                  |dd      }| j                  d||d      S )Nr   r   r   r   r   
new_axis_i)r
   r   rj   rE   r   rg   r  s      rT   rE   rE   0  sQ     &&{3||A{C00((c59tt(+catPPrV   zaten::_unique2c                @    | j                  d||d      \  }}}}|||fS )NUniquer   )sorted_ioutputsr   )	rl   rm   sortedreturn_inversereturn_countsuindicesinverse_indicescountss	            rT   _unique2r/  :  s8     +,$$$ +/ +'Aw ov%%rV   zaten::unique_dimc                B    | j                  d|||d      \  }}}}	|||	fS )Nr%  r   )r   r&  r'  r   )
rl   rm   r   r(  r)  r*  r+  r,  r-  r.  s
             rT   rH   rH   D  s:     +,$$$sVQ +/ +'Aw ov%%rV   z
aten::topkc           	     :    t        j                  | ||||||      S )N)largestr(  out)r
   _topk_helper)rl   rm   kr   r2  r(  r3  s          rT   rF   rF   P  s&     ''	4CS rV   z
aten::sortc                6    t        j                  | ||||      S N)	decendingr3  r
   _sort_helper)rl   rm   r   r8  r3  s        rT   rA   rA   Y  s     ''4	sSSrV   zaten::argsortc                @    t        j                  | ||||      \  }}|S r7  r9  )rl   rm   r   r8  r3  _r,  s          rT   r   r   `  s*     !--	4	sJAw NrV   zaten::roundc                   t        j                  |      s|S |dk(  r| j                  d|      S | j                  d|| j                  dt        j                  t        d|                        }| j                  d|      }| j                  d|| j                  dt        j                  t        dd|z                          S )Nr   RoundMulr[   
   r^   r   )r
   _is_fprg   rh   ri   pow)rl   rm   decimalsmulr=   s        rT   r=   r=   j  s     !!$'1}ttGT""
$$udADDU\\#b(BS5TDU
VCDD#E44uadd:u||CBM<R/SdT rV   zaten::remainderc                    t        j                  |      st        j                  |      rt        j                  | ||      S | j	                  d||d      S )NModr   )fmod_i)r
   rA  rj   r;   rg   )rl   r   r  s      rT   r;   r;   y  sK     e$(>(>u(E5%0044ueA4..rV   zaten::splitc                   t        j                  ||      s| j                  d|||      }||S t        j                  |      rt	        t        j
                  |            |k(  rt        j
                  |      D cg c]  }t        j                  | |dg       }}| j                  dt        j                  dgt        j                              }| j                  dt        j                  |gt        j                              }	g }
t        |      D ]>  }| j                  d|||         }|
j                  | j                  d||||	             |}@ |
S t        |      D cg c]J  }| j                  d	|| j                  dt        j                  |gt        j                                    L c}S t        j                  | ||||      S c c}w c c}w )
NSplitToSequencer   r   r[   r\   r^   AddSlicer  )r
   _is_split_staticrg   r   r   r   r   rh   ri   longr   r   rj   rC   )rl   rm   split_size_or_sizesr   _outputs	split_outrX   split_sizesstartaxisresr   ends                rT   rC   rC     s    ++,?JDD*D2EcDR	 ++,?@O001DEF(R )556IJ  11!Q<K  DDU\\1#UZZ-PDQE44
ELL#ejj,Q4RDC8_ dd5+a. 

144uc4@A J 8_
  DDZqc)LM
 	
 ||At%8#xHH/
s   ?G+AGzaten::split_with_sizesc                     t        | ||||      S rO   )rC   )rl   rm   rQ  r   rO  s        rT   rB   rB     s     D+sH55rV   zaten::unbindc                    |J| j                  d|| j                  dt        j                  dt        j                              |d      S t	        j
                  | |||      S )NrI  r[   r   r\   r^   r   )r   
keepdims_i)rg   rh   ri   rM  rj   rG   )rl   rm   r   rO  s       rT   rG   rG     sb     ttDDU\\!5::%FDG  
 	
 }}Qc844rV   c                F   t        j                  |      s?t        j                  |      r*t        j                  |      r| j	                  d|dd      }t        j                  | || j	                  dt        j                  dg                  }t        j                  |      }|#| j	                  d| j	                  d|            }n6| j	                  dt        j                  |t        j                  	            }| j	                  d
| j	                  d|| j	                  dt        j                  dt        j                  	                  |      }| j	                  d|t        j                  j                        }| j	                  d|| j	                  d|t        j                  dgt        j                  	            d      }t        j                  | || j	                  dt        j                  ddg                  }| j	                  dt        j                   | |dg      ddg      }t        j                  | || j	                  dt        j                  dg                  }| j	                  d|t        j                  j                        }|S )a!  Generate paddings in ONNX order based on pad in pytorch.

    Args:
        input: the input tensor.
        pad: the paddings in pytorch.
            The order is dim_n_begin, dim_n_end, dim_n-1_begin, dim_n-1_end, ..., dim_m_begin, dim_m_end,
            where m is in range [0, n].
    r   r   r   r"  r[   r^   Sizer   r\   Subr?     rs   rt   r   r   r   r   	Transposeperm_i)r
   r   _is_list_is_scalar_listrg   rj   r@   rh   ri   r{   int64_C_onnxTensorProtoDataTypeINT64r   opset10flip)rl   r   r5   pad_lenr   	extensionpaddings	padding_cs           rT   _prepare_onnx_paddingsrl    s    ++C0$$S)++C0dd'Q1dE
 kk!S!$$z5<<;L$"MNG++E2D|ttFADD%01ttJT(MtN	UD!$$z5<<3U$VWI $$vs!<!<!B!B$
CCtt	y%,,s%++2V 	 	
   H ..	8QTT*ellB7.CTDH ttKaA3!?AtOH..	8QTT*ellB4.@TAH VXG,G,G,M,MNIrV   zaten::constant_pad_ndc                    d}t        j                  |      }t        j                  ||      }t        | ||      }| j	                  d||||      S )NconstantPadr   )r
   r   _if_scalar_type_asrl  rg   )rl   r   paddingvaluer   r5   s         rT   r   r     sR     D--e4E..ue<E
 E7
3C44uc5466rV   zaten::reflection_pad1dzaten::reflection_pad2dzaten::reflection_pad3dc                J    d}t        | ||      }| j                  d|||      S )Nreflectro  rp  rl  rg   rl   r   rr  r   rj  s        rT   r9   r9     s.    
 D%a8H44uht444rV   zaten::replication_pad1dzaten::replication_pad2dzaten::replication_pad3dc                J    d}t        | ||      }| j                  d|||      S )Nedgero  rp  rv  rw  s        rT   r<   r<     s.    
 D%a8H44uht444rV   z	aten::padc                   t        j                  |d      }|dk(  rt        | ||      S |dk(  rt        | ||      S |dk(  rt	        | |||      S |dk(  rt        j                  | ||      S t        j                  d| |      )Ns	replicateru  rn  circularzUnrecognized padding mode )	r
   r   r<   r9   r   rj   _pad_circularr	   r   )rl   r   r5   r   rs  s        rT   r5   r5     s     %%dC0D{q%--		a,,		q%e44		##Auc22''*DTF(KUSSrV   zaten::linalg_detc                &    | j                  d|      S )NDetr   )rl   rm   s     rT   r-   r-   -  s     44trV   zaten::logdetc                B    t        j                  | t        | |            S rO   )rj   logr-   )rl   r   s     rT   r/   r/   3  s     ::aAu-..rV   aten::arangec                x   d }t        |      dk(  rt        d |D              rt        j                  }| j	                  dt        j
                  |d   |            }| j	                  dt        j
                  |d   |            }| j	                  dt        j
                  d|            }| j	                  d	|||      S t        |      dk(  st        |      d
k(  rt        |      dk(  rd }n ||d         }t        j                  | |d   |      \  }}}}| j	                  dt        j
                  d|j                                     }	| j	                  dt        j
                  d|j                                     }| j	                  d	|	||      S t        |      dk(  st        |      dk(  rXt        |      dk(  rd }n ||d         }t        j                  | |d   |d   |d   |      \  }
}}}| j	                  d	|||      S t        |      dk(  ry ||d         }t        j                  | |d   |d   |      \  }}}}| j	                  dt        j
                  d|j                                     }| j	                  d	|||      S t        j                  ddt        |       d      S )Nc                2    t        j                  | d      } | S )Nr   )r
   r   r\   s    rT   _get_arange_dtypez!arange.<locals>._get_arange_dtype<  s    00<rV   r\  c              3  <   K   | ]  }t        |t                y wrO   )
isinstancer   ).0vals     rT   	<genexpr>zarange.<locals>.<genexpr>@  s     Csjc2Cs   r[   r   r\   r^   r   Ranger   )rU  r]   r      r   )rR  rU  stepr]   r   )rR  rU  r]   r  zwith z
 arguments)
r   allrh   rb  rg   ri   r
   _arange_cast_helperr]   r   )rl   rR   r  r]   rR  rU  delta_defaulttype_r  start_defaultr<  s              rT   r   r   9  s    4yA~#CdCCLLa6  

 ddLLa6  

 LL%0  
 ttGUC77	Ta3t9>t9>E &d1g.E"1"E"E47%#
sE4 LL%++-8  
 LL%++-8  
 ttG]C??	Ta3t9>t9>E &d1g.E-AAT!W$q'Qu
3t ttGUC..	Ta!$q'*"1"E"ET!W$q'#
sE4 LL%++-8  
 ttGUC77--eCI;j9
 	
rV   zaten::_dim_arangec           
        | j                  d|      }| j                  d|| j                  dt        j                  |            d      }t        j                         r| j                  d|      S t        | |dd d d       S )	Nr   r   r[   r^   r   r   z_caffe2::Ranger   )rg   rh   ri   r
   r   r   )rl   liker   
like_shapestops        rT   _dim_aranger    s|     gt$J44*add:u||C7HdIRS  D ..0tt$d++!T1dD$//rV   z
aten::size)quantize_outputc                X    || j                  d|      S t        j                  | ||      S )Nr   )rg   r
   _size_helperrl   rm   r   s      rT   r@   r@     s/     {ttGT""''455rV   zaten::squeezec                   || j                  d|      S t        j                  |      st        j                  | ||g      S t        j                  |dd      }t        j
                  |      }|}|
|dk  r||z  }t        j                  ||      }|dk  r||| j                  dt        j                  |g            }t        j                  | ||      }| j                  dt        j                  dt        j                              }| j                  d	||      }	t        j                  | d
|	d      \  }
\  }}}t        j                  |||g      }t        j                  |j                   |       |j                  d|      }t        j                  |j                   |       |
S |}|dkD  r>t#        j$                  dt'        |      z   dz   dz   t'        |      z   dz   dz   dz          |S t        j                  | ||g      S )NSqueezer   r   r   r[   r^   r   r\   EqualIfr\  n_blocksIdentityz5This model contains a squeeze operation on dimension z. The size of z%this dimension in the given input is z. The model will zWbe exported without the squeeze node. If the model is intended to be used with dynamic z7input shapes, please export with dynamic_axes argument.)rg   r
   _is_constantr  r   r{   _get_tensor_dim_sizerh   ri   r  onesrb  r   add_op_with_blocksr   _add_output_to_blockblockwarningswarnstr)rl   rm   r   
input_rankadjusted_dimdim_sizedim_constantr@   	const_onecondif_op
if_contextelse_contextr<  squeeze_	identity_s                   rT   rD   rD     s    {ttIt$$ '',..q$>>

$
$S#u
5C 11$7JL#'
"33D,GHaJ&8+; ttJcU0CtD++At\BDDUZZ-MDN	ttGT9-/8/K/KtTA0
,)
L1 #22:tcUK"":#3#3X> OOJ5	""<#5#5yA C!|C#h 66 (m	
 "" hh HH		
 **1dSE::rV   zaten::unsqueezec                    t        j                  |      rt        j                  |dd      }t        j                  | ||g      S )Nr   r   )r
   r  r   r   r  s      rT   rI   rI     s=     ##C(((c59,,Qse<<rV   zaten::mmc                .    | j                  d||dd      S )NGemmg        g      ?)beta_falpha_fr   )rl   rm   r  s      rT   r2   r2     s     44eC4==rV   zaten::indexc                   t        j                         r| j                  d||d      S t        j                  |      rt        j                  |      }n|g}t        |      dk(  r|d   }t        j                  |      sxt        j                  |      s:t        j                  j                  |      t        j                  j                  k(  r)t        j                  | |      }| j                  d||      S t        j                  | ||      S )Nr)   Tensorr   r   r   r   )r
   r   r   r   r   r   rv   r   r   rd   re   UINT8rj   r   rg   r)   )rl   rm   r)   r,  s       rT   r)   r)     s     ..0ttGT5tAA&&u-!..u5' 7|q
''.$$U+((33E:((../ NN1e,E44
D%00<<4''rV   zaten::index_fillc                ^   t        j                  |d      }t        j                         r| j                  d|||d|      S t        j                  | |||      \  }}t        j
                  |      }t        j                  ||      }t        j                  | ||d       }t        | ||||      S )Nr   r(   
int_Scalar)r   dim_i)
r
   r   r   r   _index_fill_reshape_helperr   rq  rj   r   r>   )	rl   rm   r   r)   rs  	dim_valueexpanded_index_shapeexpanded_indexexpanded_values	            rT   r(   r(     s      **34I..0tt&  
 	
 ,;+U+U	4e,(. --e4E..ud;E]]1e-A4HN1dC@@rV   zaten::index_copyc                    t        j                  |d      }t        j                         r| j                  d||||      S t        j                  | |||      \  }}t        | ||||      S )Nr   r*   )r  )r
   r   r   r   r  r>   )rl   rm   r   r)   r   r  r  r  s           rT   r*   r*   
  so      **34I..0ttL$vYtGG+:+U+U	4e,(. 1dC88rV   zaten::__rshift_c                   t         j                  j                  |t         j                  j                        t         j                  j                  |      k7  r?| j	                  d|t         j                  j                  |      j                               }t         j                  j                  |t         j                  j                        t         j                  j                  k(  r| j	                  d||d      S | j	                  dt        j                  dt        j                        	      }t        j                  |      s,| j	                  d|t        j                  j                        }| j	                  d
||      }| j	                  d|t         j                  j                  |      j                               }| j	                  d||      }|S )Nrs   rt   BitShiftRIGHTdirection_sr[   r\  r\   r^   PowDivr   rd   re   rz   rg   rw   r  rh   ri   float32r
   rA  rc  rd  rf   )rl   rm   r  twotwo_powrshifts         rT   	__rshift_r    s{   
   ++{((22		"	"	-	-d	34 **55d;EEG  
 	!!,,T;3L3L3V3VW$$**	+ ttJetAA
$$z5<<#G$
HC!!$'VU)D)D)J)JKdd5#u%Gdd&&11$7AAC  G
 TT%w'FMrV   zaten::__lshift_c                   t         j                  j                  |t         j                  j                        t         j                  j                  |      k7  r?| j	                  d|t         j                  j                  |      j                               }t         j                  j                  |t         j                  j                        t         j                  j                  k(  r| j	                  d||d      S | j	                  dt        j                  dt        j                        	      }t        j                  |      s,| j	                  d|t        j                  j                        }| j	                  d
||      }| j	                  d|t         j                  j                  |      j                               }| j	                  d||      }|S )Nrs   rt   r  LEFTr  r[   r\  r\   r^   r  r?  r  )rl   rm   r  r  r  lshifts         rT   	__lshift_r  8  s{   
   ++{((22		"	"	-	-d	34 **55d;EEG  
 	!!,,T;3L3L3V3VW$$**	+ ttJet@@
$$z5<<#G$
HC!!$'VU)D)D)J)JKdd5#u%Gdd&&11$7AAC  G
 TT%w'FMrV   c                   | j                  d|| j                  dt        j                  |dz                    }| j                  d|| j                  dt        j                  ||dz
  z                    }| j                  d| j                  dt        j                  d            || j                  dt        j                  |                  }t        j                  d||z  |      }| j                  d|j	                  d            }t        j                  | |dg      }t        j                  | || j                  dt        j                  d	dg                  }	| j                  d||	      }
|
S )
NrJ  r[   r\  r^   r[  r   r  r   r   )rg   rh   ri   r   rI   r
   r   r   )rl   input_dkernel_size_d
dilation_d	padding_dstride_dblocks_dblocks_d_indiceskernel_gridkernel_mask
block_masks              rT   _get_im2col_indices_along_dimr  Z  sU    ttwZi!m1LMH tt	ZjMA<M.N!OPH tt	Za1	Zh!78	 ,,q-*"<jIK$$z;+@+@+C$DK '88	aS "11	;Zr1g1FGK e-{;JrV   c           	         | j                  dt        j                  dd||gdz              }| j                  d||      S )Nr[   r   r\  r^   ro  )rg   rh   r   )rl   r   	padding_h	padding_wr5   s        rT   _get_im2col_padded_inputr    sC    
 $$z5#3#3Q9i4PST4T#U$
VC44uc""rV   c                   t        | || j                  dt        j                  d                  }t        | || j                  dt        j                  d                  }| j                  d|| j                  dt        j                  ||z                    }| j                  dt	        j
                  | |dg      t	        j
                  | |dg      | j                  dt        j                  dg            d      S )	Nr[   r   r^   r   r?  r   r   r   )r@   rg   rh   ri   r
   r   )rl   r   kernel_hkernel_w	batch_dimchannel_dimchannel_unfoldeds          rT   _get_im2col_output_shaper    s    QqttJQtHIIq%j%,,q/!JKKtt{ADDU\\(XBU5VDW 44))!Y<))!-=sC	Zrd!34   rV   zaten::im2colisc           
     <   t        | || j                  dt        j                  d                  }t        | || j                  dt        j                  d                  }|d   |d   }	}|d   |d   }}
|d   |d   }}|d   |d   }}t	        | ||||
|      }t	        | |||||	      }t        | |||      }t        | ||
|      }| j                  d||d      }| j                  d||d	      }| j                  d
|g d      }t        j                  | ||      S )Nr[   r\  r^   r   r   r   r   r   r   r]  )r   r   r\  r   r   r   r^  )	r@   rg   rh   ri   r  r  r  r
   r   )rl   r   kernel_sizedilationrr  strideinput_hinput_wstride_hstride_wr  r  
dilation_h
dilation_wr  r  blocks_row_indicesblocks_col_indicesoutput_shapepadded_inputoutputs                        rT   r'   r'     s<    1eQTT*ell1oTFGG1eQTT*ell1oTFGGF1IhH"1:wqzyI%a[(1+
J$QQhH6	7Hj)X 7	7Hj)X ,AuhIL+AuiKL2 TT(L*<QTGFTT(F$6qTAFTT+v.@TAF**1flCCrV   zaten::narrowc                \    | j                  d||      }t        j                  | ||||      S )NrJ  r   )rg   r
   r   )rl   r   r   rR  lengthrU  s         rT   r3   r3     s0     $$ueV
$C((EEPSTTrV   zaten::flattenc                V   t        j                  |      }|dk(  r|S |dk(  r#|dk(  s
|G||dz
  k(  r?| j                  d||      S |dk(  r&|dk(  s
|||dz
  k(  r| j                  d||dz         S |t        j                  dd	      S |dk  r||z   }t        j                  | ||||      S )
Nr   r   Flattenr   r   r\  r   zfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.)r
   r{   rg   r   _flatten_helper)rl   r   	start_dimend_dimr   s        rT   r#   r#     s    
 
*
*5
1C
axA~b=S_C!G1C44	54;;	ab=S_C!G1C44	514==
{--7
 	
 {-**1eYMMrV   zaten::linalg_vector_normr   c                    |dk(  r|Nt        j                  | || j                  dt        j                  dgt        j
                                    }d}| j                  d| j                  d|| j                  dt        j                  dg                        }| j                  d	|t        j                  j                  |      j                         
      }t        j                  | |||      S t        j                  | |||||      S )Nr   r[   r   r\   r^   FNotr  rs   rt   axes_irX  )r
   r   rg   rh   ri   rb  r   r   rd   re   rw   _reducesum_helperrj   r.   )rl   rm   ordr   keepdimr]   cond_ops          rT   r.   r.     s     ax;"224j%,,t5;;2WXD G$$144qttJ@P@PRSQT@Ut'VW
 $$**55d;EEG  

 00wsw
 	
 ((D#sGUKKrV   zaten::embedding_bagc
                `   |r%t         j                  rt        j                  d      S |	|	dk\  rt	        d      | j                  dt        j                  d            }
| j                  d|
t        j                  j                        }
| j                  dt        j                  dg            }t        j                  | t        j                  | || j                  dt        j                  d                  dg      }|s||g} | j
                  d	g|d
di}t        j                  | |dgdgt        j                  gdg      }t        j                  | |dgdgt        j                  gdg      }t        j                  | || j                  dt        j                  d                  }t!        j"                  | d||
d      \  }\  }}|j$                  }t'        j(                  |      }t'        j(                  |      }|j                  d||d      }|j                  d||d      }t        j                  ||dg      }t        j                  ||dg      }|j                  d||||      }|j                  d||d      }t        j*                  |      s@|j                  d||||      }t        j                  ||dg      }|j                  d||      }|dk(  rt        j,                  ||dgd      }n2|dk(  r|j                  d|dgd      }n|j                  d|dgd      }|j                  d|
t        j                  j                        }t'        j.                  ||       t'        j.                  ||       |j1                         j3                         d d d fS )Nz7embedding_bag with scale_grad_by_freq for training moder   zembedding_bag with padding_idxr[   r   r^   rs   rt   r   r   )r   r   r   stepsLoopr  r   r   rK  r?  r  
ReduceMean	ReduceMax)r   export_trainingr
   _onnx_unsupportedRuntimeErrorrg   rh   ri   rc  rd  BOOLr   r  r   r   r   r   r  r  r   _add_input_to_blockrv   r  r  r   r   )rl   embedding_matrixr,  offsetsscale_grad_by_freqr   sparseper_sample_weightsinclude_last_offsetpadding_idxloop_conditionzeroindices_lenoffsets_startsoffsets_endsloop_lenlooploop_contextr<  
loop_blockblock_input_iterr  indices_startindices_endindices_row
embeddingsper_sample_weights_rowcond_outs                               rT   r!   r!     s    g5500E
 	
 ;!#3;<<TT*ell1oT>NTT&.w7R7R7W7WTXN44
ELL!$546D!33	$$wZaA	
 
K K(!$$x4'4!4
 %22	7!aS}QCN #00	7!aS}QCL ++	<j%,,q/BH  );;	68^a D/<1 ##J 00<$$Z0D OO."21 $ M //(L:JST/UK#55lMTUSVWM!33L+PQsSK//'7M;PTUK+;[QRSJ##$67!-'T"
 "1!B!B01#"
 "__UJ8NO
qy$66*aSQ

 
!__\:qcVW_X
!__[*aSUV_W
W%@%@%E%E  H 
z84	z:6 99;tT11rV   zaten::embedding_renormc           
     d   | j                  d|      }| j                  d||      }t        |      }|dk(  rd}n"|dk(  rd}nt        j                  d| d|      | j                  ||dgd	      }| j                  d
|| j                  dt	        j
                  d                  }	t	        j
                  |      }| j                  d||	      }
| j                  d||
      }| j                  d| j                  d||      ||      }| j                  d|t        j                  | |dg      |      S )Nr%  r   r   ReduceL1r\  ReduceL2z8Unsupported: ONNX export of embedding_renorm with norm: z. Only 1. and 2. are supported.r  rJ  r[   gHz>r^   r  r?  WhereGreaterr   )rg   r   r	   r   rh   ri   r
   r   )rl   weightr,  max_norm	norm_typeunique_indicespartial_weightnorm_ipartial_weight_normpartial_weight_norm_scalespartial_weight_renorms               rT   r"   r"   {  sI    TT(G,NTT(FN;N^F{		1	''Fvh O, ,
 	

 $$y.!QR$S 44"ADDU\\$=OD$P ||H%HTT%#78FDD?DD	Y+X6	 44))!^aSA	 rV   zaten::chunkc                   | j                  d| j                  d|      |d      }| j                  d|| j                  dt        j                  dgt        j                        	            }| j                  d
| j                  d||      |      }t	        j
                  | ||d       | j                  d|| j                  d||            g} | j                   dg|ddi}t        | |||      S )Nr   r   r   r   r[  r[   r   r\   r^   r  rJ  r?  r   r   )rg   rh   ri   rM  rj   r   rC   )rl   rm   chunksr   r  chunk_size_s
chunk_size	chunk_vecs           rT   r   r     s     ttHadd7D13qtAH44vqttJaS

0StTL eQTT%<@&IJ 	a\48	UHadd5*lCDI X4	4!4ID)S))rV   zaten::normalc	                    |-t        j                  |      st        j                  | ||d       }t        j                  | || j                  d|            }	t        | |	|      S )NRandomNormalLike)r
   rv   rj   r   rD  rg   r   )
rl   meanstdsizes	generatorr]   layoutdevice
pin_memoryr   s
             rT   r4   r4     sX    $ !9!9%!@}}QeT2ZZ3%7 >?Fq&$rV   zaten::atleast_1dc                :   t        j                  |      rt        j                  |      rt        j                  |      }g }|D ]k  }|}t        j                  |      }|dk(  r<t        j
                  | || j                  dt        j                  dg                  }|j                  |       m  | j                  dg| S t        j                  |      }|dk(  r<t        j
                  | || j                  dt        j                  dg                  }|S )Nr   r[   r   r^   SequenceConstruct)
r
   r   r   r   r{   r   rg   rh   ri   r   rl   rm   r  new_tensor_listri   
new_tensortensor_ranks          rT   r   r     s      &?+J+J4+P%2248! 	/FJ)::6BKa,<<z144
ELL!<M4#N
 "":.	/ qtt':/::!2248Ka..tQTT*ellA3.?T@
 KrV   zaten::atleast_2dc                   t        j                  |      rt        j                  |      rt        j                  |      }g }|D ]  }|}t        j                  |      }|dk(  r>t        j
                  | || j                  dt        j                  ddg                  }n|dk(  rt        j                  | |dg      }|j                  |         | j                  dg| S t        j                  |      }|dk(  r?t        j
                  | || j                  dt        j                  ddg                  }|S |dk(  rt        j                  | |dg      }|S )Nr   r[   r   r^   r  rP  r
   r   r   r   r{   r   rg   rh   ri   r   r   rQ  s          rT   r   r     sR      &?+J+J4+P%2248! 	/FJ)::6BKa,<<z144
ELL!Q<P4#Q
 !,>>z1#
 "":.	/ qtt':/::!2248Ka..tQTT*ellAq6.BTC

 K 
	00D!EKrV   zaten::atleast_3dc                   t        j                  |      rt        j                  |      rt        j                  |      }g }|D ]  }|}t        j                  |      }|dk(  r>t        j
                  | || j                  dt        j                  g d                  }nV|dk(  r3t        j                  | |dg      }t        j                  | |dg      }n|dk(  rt        j                  | |dg      }|j                  |         | j                  d	g| S t        j                  |      }|dk(  r?t        j
                  | || j                  dt        j                  g d                  }|S |dk(  r4t        j                  | |dg      }t        j                  | |dg      }|S |dk(  rt        j                  | |dg      }|S )
Nr   r[   )r   r   r   r^   r   rV  r   r\  rP  rW  rQ  s          rT   r   r   
  s      &?+J+J4+P%2248! 	/FJ)::6BKa,<<z144
ELL<S4#T
 !,>>z1#
 ->>z2$
 !,>>z2$
 "":.%	/& qtt':/::!2248Ka..tQTT*ell9.ETF
 K 
	00D!E00D"F K 
	00D"FKrV   zprim::ConstantChunkc           
     h   | j                  d|      }| j                  dt        j                  |gt        j                              }| j                  d||d      }| j                  dt        j                  dgt        j                              }| j                  dt        j                  |gt        j                              }| j                  dt        j                  |dz
  gt        j                              }	| j                  d	||	      }
| j                  d
|
|      }g }t	        |      D ]u  }| j                  dt        j                  |dz   gt        j                              }| j                  d||      }|j                  | j                  d||||             |}w |S )Nr   r[   r\   r^   r   r   r   r   rJ  r  r?  rK  )rg   rh   ri   rM  r   r   )rl   rm   rB  r   input_shaperS  input_shape_dimrR  rD  chunk_size_minus_1input_shape_dim_shift	chunk_dimrT  r   r)   rU  s                   rT   r8   r8   7  sd    $$w%K44
ELL#ejj$I4JDdd8[$qdAODDU\\1#UZZ%HDIEj%,,xuzz*RSJELL&1*UZZH   DD9KLU1:>I
C6] Zq1ugUZZ)PQdd5)U+

144uc489	
 JrV   zaten::hstackc                   t        | |      }| j                  d|| j                  dt        j                  dt        j                                    }| j                  d|      }| j                  d|      }| j                  dt        j                  dt        j                              }| j                  d	||      }t        j                  | d
|dd      \  }\  }}	}
|j                  d|dd      }t        j                  |j                  |       |	j                  d|dd      }t        j                  |	j                  |       |j                         j                         }|S )Nr  r[   r   r\   r^   r   rZ  r   r  r  r\  )r  r'  r   r"  )r   rg   rh   ri   rM  r   r  r   r  r  r   r   )rl   r  first_tensorfirst_tensor_shapefirst_tensor_dimr  equal_to_oneif_op_greaterif_context_equalelse_context_equalr<  	result_ifresult_elser   s                 rT   r&   r&   M  sS    Q,K44	Zauzz!BCL
 g|4ttF$67Zauzz)JKI44!19=L 	$$QlQPQR	.	-	 ##k! $ I 
/55yA$''k! ( K 
177E!((*FMrV   zaten::vstackc                D    t        | |      }| j                  d|dd      S )Nr   r   r"  )r   rg   )rl   r  s     rT   rJ   rJ   n  s(     Q,K44$k!4JJrV   )rl   jit_utils.GraphContextrm   _C.Valuern   floatro   rl  )rl   rj  )F)r   r  r   r   r   r  rO   )r   )r   N)
rl   rj  r   rk  r5   rk  r   rk  rs  rk  )rl   rj  r   zOptional[Sequence[int]]r  bool)NNNNNN)rl   rj  rm   ztorch._C.Value)rl   rj  r  rk  )k__doc__
__future__r   	functoolsr   r  typingr   r   rh   r   torch._Cr   rc  
torch.onnxr   r	   r
   r   rf  r   rj   r   torch.onnx._globalsr   torch.onnx._internalr   r   r   __all__partialonnx_symbolic_onnx_symbolicrW   quantized_args
parse_argsry   r%   r   r   r   r:   r?   r+   r6   r   r   r$   r>   r   r1   r0   r  r  r  r   r   r,   r7   r    r   rE   r/  rH   rF   rA   r   r=   r;   rC   rB   rG   rl  r   r9   r<   r5   r-   r/   r   r  r@   rD   rI   r2   r)   r(   r*   r  r  r  r  r  r'   r3   r#   r.   r!   r"   r   r4   r   r   r   r8   r&   rJ   rP   rV   rT   <module>r|     s   . "  
  %   %  ( C C
:x #""<#=#=RH  !%Cc*
  + & "" 
 >   >F !"C%
Y  & #Y !"C%
Y  & #Y 
-  - %Cc*
3  + &  
3 !"
LQ||  #|~ %&C%
P  & 'P 0!Y?@ 0!Y?@ 0!Y?@ /H=> 11h?@  2Ax@A 0!W=> L 							:L %&eUE5%O
  P ' Cc3/
;  0  ;  Cc3/

  0 !
* Cf-

  .  
 %&
)  ')
 &'
2  (2  
9  9 "#
#  $# !"
5  #5
 
0   0 
-  -  
5   5 
3  3 
3   3 %
C  & C 
Q  Q  !Cc3/
&  0 "& "#Cc34
&&  5 $& Cc3V<
  =  Cc62
T  3 T  Cc62
  3 ! C%
	  & 	 !"
/  #/ Cc3/
!I  0 !IH ()Cc3/
6  0 *6 Cc*

5  +  
5 6 6r '(
7  )7 ()()()
5  * * *5 )*)*)*
5  + + +5 
TTT 
T 	T
 T  T( "#
  $ 
/   / 
D
   D
N #$C%
0  & %0 e<
6  = 6  
/;  !/;d !"
=  #= 

>  > 
(  (, "#
A  $A* "#
9  $9 !"
  #@ !"
  #@ (( (V # #    CtT48
0D  9  0Df 
U   U
  eU3Cc*
N  + 4 !N0 *+CdC5
LL 
!	L
 L  6 ,L< %&Cc3S#sCH
[2[2  I '[2| ()Cc3/
"  0 *"J 
*  *  

 
      , "#
  $2 "#
  $@ "#
(  $(V %&
  '( 
   > 
K   KrV   