
    9jU                       d dl mZ d dlZd dlZd dlZd dlmZ d dlZddlm	Z	m
Z
mZmZmZ ddlmZmZmZmZ dZg dZdd	d
ddddddd	Z G d d      ZdQdZi ddddddddddddddddddddddd dd!dd"dd#dd$dd%ddddddddddddd&Zd'dd(d)d*d+d,d-d.Zdd/d0d1d2d3d4d5d6d7d8d9dd:Zd; Zd< Zd= Zd> Zd? Z G d@ dA      Z  e        e _!         G dB dC      Z"dD Z#dQdEdFdGd ddHdIZ$dRddJdKZ%dQddJdLZ&dM Z'dN Z(dSdOZ)dP Z*y)T    )annotationsN)Sequence   )_dtypes_dtypes_impl_funcs_ufuncs_util)	ArrayLikenormalize_array_like
normalizerNotImplementedType)C_CONTIGUOUSF_CONTIGUOUSOWNDATA	WRITEABLEALIGNEDWRITEBACKIFCOPYFNCFORCBEHAVEDCARRAYFARRAYr   r   r   r   r   r   r   r   r   )	CFOWAXBCAFAc                  :     e Zd ZddZddZd Z fdZd Z xZS )Flagsc                l    |D cg c]  }|t         vs| }}|rt        d|       || _        y c c}w )NzInvalid flag keys: )FLAGSAssertionError_flag_to_value)selfflag_to_valuekinvalid_keyss       U/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_numpy/_ndarray.py__init__zFlags.__init__3   s?    #0CaAUNCC #6|n!EFF+ Ds   11c                    |j                         r)|j                         t        v r| |j                            S t        d| d      )NzNo flag attribute '')islowerupperr&   AttributeError)r)   attrs     r-   __getattr__zFlags.__getattr__9   s>    <<>djjle3

%% #6tfA!>??    c                    |t         v r	t         |   }|t        v r	 | j                  |   S t        d| d      # t        $ r}t	        d|      |d }~ww xY w)Nzkey=No flag key 'r0   )SHORTHAND_TO_FLAGSr&   r(   KeyErrorNotImplementedError)r)   keyes      r-   __getitem__zFlags.__getitem__?   sm    $$$S)C%<<**3// ]3%q122  <)TSF)4!;<s   9 	AAAc                    |j                         r*|j                         t        v r|| |j                         <   y t        |   ||       y N)r1   r2   r&   super__setattr__)r)   r4   value	__class__s      r-   rB   zFlags.__setattr__J   s8    <<>djjle3!&DGe,r6   c                V    |t         v s|t        v rt        d      t        d| d      )Nz"Modifying flags is not implementedr8   r0   )r&   r9   r;   r:   )r)   r<   rC   s      r-   __setitem__zFlags.__setitem__P   s1    %<3"44%&JKK]3%q122r6   )r*   dict)r4   str)	__name__
__module____qualname__r.   r5   r>   rB   rF   __classcell__)rD   s   @r-   r$   r$   2   s    ,@	3-3r6   r$   c                T     |xs  j                   } fd}||_         d| |_        |S )Nc                      | i |S r@    )argskwargsfns     r-   fzcreate_method.<locals>.fZ   s    4"6""r6   zndarray.)rI   rK   )rR   namerS   s   `  r-   create_methodrU   W   s2    2;;D# AJv&ANHr6   clipnonzerorepeatroundsqueezeswapaxesraveldiagonaldottraceargsortsearchsortedargmaxargminanyallmax)minptpsumprodmeanvarstdcumsumcumprodtakechooseabsolutepositivenegativegreaterlessgreater_equal
less_equal)absinvertposneggtltgelesubtractmultiplydividefloor_dividepower	remainderbitwise_and
bitwise_orbitwise_xor
left_shiftright_shift)addsubmultruedivfloordivpowmodandorxorlshiftrshiftmatmulc                T   t        | t        j                        rk| j                  t        j                  t        j
                  t        j                  t        j                  fv r| j                  t        j                        S | S t        | t              rt        d | D              S | S )Nc              3  2   K   | ]  }t        |        y wr@   )_upcast_int_indices).0is     r-   	<genexpr>z&_upcast_int_indices.<locals>.<genexpr>   s     ;(+;   )
isinstancetorchTensordtypeint8int16int32uint8toint64tupleindexs    r-   r   r      sq    %&;;5::u{{EKKMM88EKK(( L 
E5	!;U;;;Lr6   c                &    t        d | D              S )z&Check if there's any advanced indexingc              3     K   | ]f  }t        |t        t        f      xsJ t        |t        j                        xr. |j
                  t        j                  k(  xs |j                  d kD   h ywr   N)r   r   boolr   r   r   ndimr   idxs     r-   r   z)_has_advanced_indexing.<locals>.<genexpr>   s`        	34() 	YsELL)WsyyEJJ/F/V#((UV,	Ys   A,A.)rd   r   s    r-   _has_advanced_indexingr      s        r6   c                   t        | t              s| f} t        |       }|s| S g }| D ]  }t        |t              r#t        |t              s|j                  |g       6t        |t        j                        rT|j                  dk(  rEt        j                  |      s0|j                  t        j                  k7  r|j                  |g       |j                  |        t        |      S )zZConvert scalar indices to lists when advanced indexing is present for NumPy compatibility.r   )r   r   r   intr   appendr   r   r   is_floating_pointr   )r   has_advanced	convertedr   s       r-   _numpy_compatible_indexingr      s    eU# *%0L I "c3
3(=cU#sELL)A++C0		UZZ' cU# S!"  r6   c                   t        | t              ryt        | t        j                        r+| j                  t        j                  k(  rd| j
                  fS t        | t              r
| r| d   | k7  syt        | d         \  }}||dz   fS )z.Returns the depth of a boolean sequence/tensor)Tr   Tr   )Fr   r   )r   r   r   r   r   r   r   _get_bool_depth)sis_booldepths      r-   r   r      st    !T!U\\"qww%**'<QVV|q(#adai$QqT*NGUEAIr6   c                   t        | t              s| f} d}t        |       D ]  \  }}|t        u s|} n || d d fS d}| D ](  }t	        |      \  }}|r||z  }|t        u s|$|dz  }* ||z
  }|dk(  r^t        | d|       }	t        | |dz   d       }
|	r=|
r;| d| dz   | |dz   d z   }dt        d | |dz   d D              z   fd}fd	}|||fS | d
 d fS )a  
    Patch for NumPy-compatible ellipsis behavior when ellipsis doesn't match any dimensions.

    In NumPy, when an ellipsis (...) doesn't actually match any dimensions of the input array,
    it still acts as a separator between advanced indices. PyTorch doesn't have this behavior.

    This function detects when we have:
    1. Advanced indexing on both sides of an ellipsis
    2. The ellipsis doesn't actually match any dimensions
    Nc                    | S r@   rO   xs    r-   <lambda>z-_numpy_empty_ellipsis_patch.<locals>.<lambda>   s     r6   c                    | S r@   rO   r   s    r-   r   z-_numpy_empty_ellipsis_patch.<locals>.<lambda>   s    Q r6   r   r   r@   c              3  B   K   | ]  }t        |t              sd   yw)r   N)r   slicer   s     r-   r   z._numpy_empty_ellipsis_patch.<locals>.<genexpr>  s       *S%:P s   c                (    | j                         S r@   )rZ   r   	end_ndimss    r-   
squeeze_fnz/_numpy_empty_ellipsis_patch.<locals>.squeeze_fn  s    yy),,r6   c                ~    t        | t        j                        r!| j                  k\  r| j	                         S | S r@   )r   r   r   r   	unsqueezer   s    r-   unsqueeze_fnz1_numpy_empty_ellipsis_patch.<locals>.unsqueeze_fn  s2    a.166Y3F;;	z22r6   c                    | S r@   rO   r   s    r-   r   z-_numpy_empty_ellipsis_patch.<locals>.<lambda>#  s    A r6   c                    | S r@   rO   r   s    r-   r   z-_numpy_empty_ellipsis_patch.<locals>.<lambda>#  s     r6   )r   r   	enumerateEllipsisr   r   ri   )r   tensor_ndimellipsis_posr   r   consumed_dimsr   r   ellipsis_dimsleft_advancedright_advanced	new_indexr   r   r   s                 @r-   _numpy_empty_ellipsis_patchr      s[    eU# LE" 3(?L k;.. M (-U"MH_QM  -/M .u]l/CD/lQ6F6H0IJ^ m|,w6|a?O?Q9RRIC  "<!#3#56   I-
 j,66+{**r6   c                      e Zd Zy)_UnspecifiedN)rI   rJ   rK   rO   r6   r-   r   r   (  s    r6   r   c                     e Zd Zd;dZej                         D ]#  \  ZZ ee	exs e      Z
 ee
e       e       e<   %  eej                  d      Z eej                        Zej                         D ])  \  ZZ eeexs e      Z
de dZ ee
e       e       e<   + ej                         D ]]  \  ZZ eeexs e      Z
de dZ ee
e       e       e<   de dZ ee
fde       e       e<   de dZ ee
fde       e       e<   _  eej*                  d	      Z ed
 d      Z[[[[[
[ed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Z ed        Z!ed        Z"ed        Z#e#jH                  d        Z#ed        Z%e%jH                  d        Z%ed        Z&d<dZ'e(d=d>d       Z)e(d=d>d       Z*dd d!Z+e,jZ                  e,jZ                  fd"Z.e(d?d#       Z/d$ Z0d% Z1d& Z2 ee2      Z3d' Z4d( Z5d) Z6d* Z7d+ Z8d, Z9d- Z:d. Z;d/ Z<d0 Z=d1 Z>dd2d3Z?d@d4Z@d5 ZAd6 ZBd7 ZCe	j                  ZDe	j                  ZEdd8d9ZFd: ZGy)AndarrayNc                    |t        j                         | _        y t        |t         j                        r|| _        y t	        d      )NzSndarray constructor is not recommended; prefereither array(...) or zeros/empty(...))r   r   tensorr   
ValueError)r)   ts     r-   r.   zndarray.__init__4  s;    9,,.DK5<<(DK8 r6   conj____rc                     |||       S r@   rO   r)   otherrR   s      r-   r   zndarray.<lambda>R  s    5$ r6   __ic                     || ||       S )N)outrO   r   s      r-   r   zndarray.<lambda>U  s    r$4'@ r6   
__divmod__c                .    t        j                  ||       S r@   )r	   divmodr)   r   s     r-   r   zndarray.<lambda>[  s    GNN5$7 r6   __rdivmod__c                @    t        | j                  j                        S r@   )r   r   shaper)   s    r-   r   zndarray.shapea  s    T[[&&''r6   c                6    | j                   j                         S r@   )r   numelr   s    r-   sizezndarray.sizee  s    {{  ""r6   c                .    | j                   j                  S r@   )r   r   r   s    r-   r   zndarray.ndimi  s    {{r6   c                T    t        j                  | j                  j                        S r@   )r   r   r   r   s    r-   r   zndarray.dtypem  s    }}T[[..//r6   c                    | j                   j                         t        fd| j                   j                         D              S )Nc              3  (   K   | ]	  }|z    y wr@   rO   )r   strideelsizes     r-   r   z"ndarray.strides.<locals>.<genexpr>t  s     HVf_Hs   )r   element_sizer   r   )r)   r   s    @r-   strideszndarray.stridesq  s3    ))+H4;;3E3E3GHHHr6   c                6    | j                   j                         S r@   )r   r   r   s    r-   itemsizezndarray.itemsizev  s    {{''))r6   c                    t        | j                  j                         | j                  j                  j                         | j                  j                  d u dd      S )NT)r   r   r   r   )r$   r   is_contiguousT_baser   s    r-   flagszndarray.flagsz  sO      $ 9 9 ; $ ; ; =;;,,4!	
 	
r6   c                6    | j                   j                         S r@   )r   data_ptrr   s    r-   datazndarray.data  s    {{##%%r6   c                R    | j                   j                         j                         S r@   )r   storagenbytesr   s    r-   r  zndarray.nbytes  s    {{""$++--r6   c                "    | j                         S r@   )	transposer   s    r-   r  z	ndarray.T  s    ~~r6   c                ,    t        j                  |       S r@   )r   realr   s    r-   r  zndarray.real      {{4  r6   c                L    t        |      j                  | j                  _        y r@   )asarrayr   r  r)   rC   s     r-   r  zndarray.real      "5>00r6   c                ,    t        j                  |       S r@   )r   imagr   s    r-   r  zndarray.imag  r  r6   c                L    t        |      j                  | j                  _        y r@   )r  r   r  r  s     r-   r  zndarray.imag  r  r6   c                "    | j                         S r@   )r\   r   s    r-   flatzndarray.flat      zz|r6   c                    |dk7  rt        d| d      |dk7  rt        d| d      |st        d| d      |st        d| d      t        j                  |      j                  }| j                  j                  |      }t        |      S )NKzastype(..., order= is not implemented.unsafezastype(..., casting=zastype(..., subok=zastype(..., copy=)r;   r   r   torch_dtyper   r   r   )r)   r   ordercastingsubokcopyr   r   s           r-   astypezndarray.astype  s    C<%(:5'AU&VWWh%&wi/CD  %(:5'AU&VWW%(9$?S&TUUmmE*66KKNN;'qzr6   r   c                "    | j                         S r@   )cloner)   r!  s     r-   r$  zndarray.copy  r  r6   c                ,    t        j                  |       S r@   )r   flattenr(  s     r-   r*  zndarray.flatten  s    }}T""r6   F)refcheckc                  |rt        d| d      |dv ry t        |      dk(  r|d   }t        |t              r|f}t	        j
                  d |D              rt        d      t        j                  |      | j                  j                         }}| j                  j                  |       ||k\  rS| j                  j                         st        d      | j                  j                         }||d  j                          y y )	Nzresize(..., refcheck=r  )rO   r@   r   r   c              3  &   K   | ]	  }|d k    ywr   rO   r   r   s     r-   r   z!ndarray.resize.<locals>.<genexpr>  s     1!A1s   z0all elements of `new_shape` must be non-negativez0tensor must be contiguous for resize with growth)r;   lenr   r   builtinsrd   r   mathrj   r   r   resize_r  r'   r*  zero_)r)   r+  	new_shape	new_numel	old_numelbs         r-   resizezndarray.resize  s    %'z1EF  % y>Q!!Ii%"I<<1y11OPP#yy3T[[5F5F5H9	I&	!;;,,.$%WXX##%AijM! "r6   c                
   |t         j                  u r| j                  }|t         j                  urt        d| d      t	        j                  |      j
                  }| j                  j                  |      }t        |      S )Nzview(..., type=r  )	r   unspecifiedr   r;   r   r   r   viewr   )r)   r   typer   tviews        r-   r;  zndarray.view  sn    L,,,JJE|///%v=Q&RSSmmE*66  -u~r6   c                :    | j                   j                  |       y r@   )r   fill_r  s     r-   fillzndarray.fill  s     	% r6   c                6    | j                   j                         S r@   )r   tolistr   s    r-   rB  zndarray.tolist  s    {{!!##r6   c                D    d | j                   j                         D        S )Nc              3  2   K   | ]  }t        |        y wr@   )r   r.  s     r-   r   z#ndarray.__iter__.<locals>.<genexpr>  s     ;q
;r   )r   __iter__r   s    r-   rE  zndarray.__iter__  s    ;DKK$8$8$:;;r6   c                l    t        | j                        j                  dd      j                  dd      S )Nr   ztorch.ndarrayzdtype=torch.zdtype=)rH   r   replacer   s    r-   __str__zndarray.__str__  s+    WX/W^X.	
r6   c                    	 t        j                  | |      S # t        t        f$ r4 t	        j
                  | j                  dt              }t        |      cY S w xY w)NF)
fill_valuer   )	r	   equalRuntimeError	TypeErrorr   fullr   r   r  )r)   r   falsys      r-   __eq__zndarray.__eq__  sL    	"==u--i( 	"JJtzze4HE5>!	"s    A AAc                    | |k(   S r@   rO   r   s     r-   __ne__zndarray.__ne__  s    r6   c                    	 t        j                  | j                  j                               S # t        $ r}t        d      |d }~ww xY w)Nz=only integer scalar arrays can be converted to a scalar index)operatorr   r   item	ExceptionrM  )r)   excs     r-   	__index__zndarray.__index__  sF    	>>$++"2"2"455 	O	s   ,/ 	A	AA	c                ,    t        | j                        S r@   )r   r   r   s    r-   __bool__zndarray.__bool__  s    DKK  r6   c                ,    t        | j                        S r@   )r   r   r   s    r-   __int__zndarray.__int__  s    4;;r6   c                ,    t        | j                        S r@   )floatr   r   s    r-   	__float__zndarray.__float__  s    T[[!!r6   c                ,    t        | j                        S r@   )complexr   r   s    r-   __complex__zndarray.__complex__  s    t{{##r6   c                |    	 | j                   j                         }t        |      |k(  }|S # t        $ r d}Y |S w xY w)NF)r   rU  r   rV  )r)   vresults      r-   
is_integerzndarray.is_integer  sH    	  "AVq[F   	F	s   (, ;;c                4    | j                   j                  d   S )Nr   )r   r   r   s    r-   __len__zndarray.__len__   s    {{  ##r6   c                8    | j                   j                  |      S r@   )r   __contains__)r)   r   s     r-   rj  zndarray.__contains__#  s    {{''**r6   c                .    t        j                  | |      S r@   )r   r  )r)   axess     r-   r  zndarray.transpose&  s    d++r6   r!  c               2    t        j                  | ||      S )Nrm  )r   reshape)r)   r!  r   s      r-   ro  zndarray.reshape*  s    ~~dE77r6   c           	     \    t        j                  | t        j                  | |||             y r@   )r   copytosort)r)   axiskindr!  s       r-   rr  zndarray.sort.  s    dFKKdD%@Ar6   c                    |dk(  r| j                   j                         S t        |      dk(  r| j                         |d      S | j	                  |      S )NrO   r   r   )r   rU  r/  r\   r>   )r)   rP   s     r-   rU  zndarray.item2  sO     2:;;##%%Y!^::<Q((##D))r6   c                l   | j                   fdt        |t              r$ t        |      fdt	        |      D              }n	 d|      }t        j                  |      }t        |      }t        |      }t        |j                        \  }}} |t        j                  |                  S )Nc                t   t        |t              r|j                  |j                  dk  s|S t        j                  | f      t        |j
                  t              s7|j
                  +t        dt        |j
                        j                         t        |j                  t              s7|j                  +t        dt        |j                        j                         |j                  r|j                  dz   nd }|j
                  r|j
                  dz   nd }t        |||j                         S )Nr   z%slice start must be int or None, got z$slice stop must be int or None, got r   )r   r   stepr   flipstartr   r'   r<  rI   stop)r   r   rz  r{  r   s       r-   neg_stepz%ndarray.__getitem__.<locals>.neg_stepA  s    q%(QVV-?AFFQJ ZZ-F qww,$;DM<R<R;ST  qvvs+qvv~$:4<;P;P:QR  #$&&AFFQJdE"#''177Q;tDqvvg..r6   c              3  6   K   | ]  \  }} ||        y wr@   rO   )r   r   r   r|  s      r-   r   z&ndarray.__getitem__.<locals>.<genexpr>W  s     L41aALs   r   )r   r   r   r<  r   r
   ndarrays_to_tensorsr   r   r   r   r   r>   )r)   r   maybe_squeeze_r|  r   s       @@r-   r>   zndarray.__getitem__>  s    	/* eX&DKL9U;KLLEQ&E))%0#E**51"=eV[["Q}aWV%7%7%>?@@r6   c                x   t        j                  |      }t        |      }t        |      }t	        || j
                  j                        \  }}}t        j                  |      s5t        |      }t        j                  || j
                  j                        }| j
                  j                  | ||            S r@   )r
   r~  r   r   r   r   r   r   	is_scalarr   cast_if_neededr   rF   )r)   r   rC   r  maybe_unsqueezes        r-   rF   zndarray.__setitem__b  s    ))%0#E**51$?t{{GWGW$X!q/%%e,(/E((0A0ABE{{&&uoe.DEEr6   streamc               :    | j                   j                  |      S )Nr  )r   
__dlpack__)r)   r  s     r-   r  zndarray.__dlpack__s  s    {{%%V%44r6   c                6    | j                   j                         S r@   )r   __dlpack_device__r   s    r-   r  zndarray.__dlpack_device__v  s    {{,,..r6   r@   )r  r  TT)r   )r)   r   r!  r   )rC   r   )NN)HrI   rJ   rK   r.   methodsitemsmethodrT   getattrr   rR   rU   varsr	   	conjugater   dunder	ri_dunderplainrvarivarr   r   r   propertyr   r   r   r   r   r  r  r	  r  r  r  setterr  r  r%  r   r$  r*  r8  r   r:  r;  r@  rB  rE  rH  __repr__rP  rR  rX  rZ  r\  r_  rb  rf  rh  rj  r  ro  rr  rU  r>   rF   rp   putr  r  rO   r6   r-   r   r   3  s   	   3VT^V,&r62v3
 **F3Dg//0I 3Wdnf-fXR&r62v3
 ") 	
Wdnf-VHB%b%0uVHB$B%OQUVtVHB$#%@$
t	
 w~~|<J7K
 	dD%V( ( # #     0 0 I I * * 	
 	
 & & . .     ! ! 
[[1 1 ! ! 
[[1 1     # # +0 ": &118P8P  ! !
$<
 W%H" ! "$$+, %( 8B
*"AHF ;;D
**C#' 5/r6   r   c                    g }| D ]n  }t        |t        t        f      rt        |      }t        |t              r*|j                  |j                  j                                ^|j                  |       p |S )z'Recursively convert tensors into lists.)r   listr   _tolistr   r   r   rB  )obja1elems      r-   r  r  z  sb    	B dT5M*4=DdG$IIdkk((*+IIdO Ir6   Tr  F)r$  r!  r#  ndminlikec                  |durt        d      |t        d      |dk7  rt         t        | t              r|du r||| j                  k  r| S t        | t        t
        f      r5| r(t        d | D              rt        j                  |       } nt        |       } t        | t              r| j                  } d }|t        j                  |      j                  }t        j                  | |||      }t        |      S )NFz#'subok' parameter is not supported.z"'like' parameter is not supported.r  c              3  P   K   | ]  }t        |t        j                           y wr@   )r   r   r   r.  s     r-   r   zarray.<locals>.<genexpr>  s     @qz!U\\2@s   $&)r;   r   r   r   r  r   re   r   stackr  r   r   r   r   r
   _coerce_to_tensor)	r  r   r$  r!  r#  r  r  r   r   s	            r-   arrayr    s    E!"GHH!"FGG|!! 	3 EMMSXX
#e}%3@C@@++c"C #,C #wjj KmmE*66$$S+tUCF6?r6   )r  c               $    t        | |||dd      S )NFr   )r   r!  r  r$  r  )r  )ar   r!  r  s       r-   r  r    s    %u4e1MMr6   c                   t        | ||      }|j                  j                         s|j                  j                         |_        |S )N)r   r  )r  r   r  
contiguous)r  r   r  arrs       r-   ascontiguousarrayr    s9    
!5t
,C::##%ZZ**,
Jr6   c               B    t        j                  |       }t        |      S r@   )r   from_dlpackr   )r   r   s     r-   r  r    s    !A1:r6   c                |    	 t        j                  |       }|S # t        $ r t        |       j                  }Y |S w xY wr@   )r   r   rV  r  )entrydtys     r-   _extract_dtyper    sA    #mmE" J  #en""J#s    ;;c                    t        |       } t        |      }t        j                  | j                  |j                  |      S r@   )r  r   can_cast_implr   )from_r   r"  to_s       r-   can_castr    s5    5!E

C%%e&7&7'RRr6   c                 P   g }| D ])  }	 t        |      j                  }|j                  |       + t        j                  | }t        j                  |      S # t        t        t        f$ r9 t        j                  |      }t        j                  d|j                        }Y w xY w)Nr   )r   )r  r   rL  r   rM  r   r   r   emptyr   r   r   result_type_impl)arrays_and_dtypestensorsr  r   r  r   s         r-   result_typer    s    G" 	6%%A 	q //9K==%% j)4 	6--&CAS__5A	6s   AA
B%$B%r@   )Nr  )safe)+
__future__r   r0  r1  rT  collections.abcr   r    r   r   r   r	   r
   _normalizationsr   r   r   r   newaxisr&   r9   r$   rU   r  r  r  r   r   r   r   r   r   r:  r   r  r  r  r  r  r  r  r  rO   r6   r-   <module>r     s=   #    $  ; ;  	 
						


 "3 "3J"
D"t" d" T	"
 t" " T" " 
4" T" t" D"  d!"" d#"$ 
4%"& 
4'"( 
4)"* C"J 



	
 
	"B	?+H	 	 (> D/ D/N

"%4s%qt %PNd NT 
S&r6   