
    Vpf[                    2   d Z ddlmZ ddlm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 dd	l
mZ dd
l
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z% e$e&cZ&Z'e%e(cZ(Z) ej*        d          Z+e+,                     eej-        e+                     e.ee/e0ef         df         Z1dndZ2dod%Z3dpdqd'Z4 ej*        d(          Z5e5,                     eej-        e5                     	 drdsd-Z6dtd/Z7 ej*        d0          Z8d1e8_9        e8,                     eej-        e8                     dud4Z:dvd9Z;dwd;Z<e+=                    e<           dxd?Z>e5=                    e>           dxd@Z?e8=                    e?            eej@        ejA        jB        ejC        jD        A          ZEdydFZFdzdJZGd{dKZHd|dLZId}dMZJeJejK        e+<   d}dNZLeLejK        e5<   d}dOZMeMejK        e8<   d~dTZNeNejO        e+<   d~dUZPePejO        e5<   d~dVZQeQejO        e8<   dW ZReRejS        e+<   dX ZTeTejS        e5<   dY ZUeUejS        e8<   dZ ZV eeVe+          ejW        e+<    eeVe5          ejW        e5<    eeVe8          ejW        e8<   dd^ZXdddZYde ZZeZej[        e+<   df Z\e\ej[        e5<   dg Z]e]ej[        e8<    ej*        dh          Z^ddjZ_e^j,        dk             Z`e^ja        dl             Zb ejc        e^ ejd        e`dm                     dS )zModule for state primitives.    )annotations)partial)AnyUnionN)ad_util)core)dispatch)pretty_printer)	tree_util)ad)batching)partial_eval)mlir)lax)Array)indexing)AbstractRefRefView
ReadEffectWriteEffectAccumEffect)safe_mapsafe_zipget.in_shapetuple[int, ...]
idx_shapestuple[tuple[int, ...], ...]indexed_dimstuple[bool, ...]returnc                p    d t          ||           D             }t          |          pdg\  }g ||R }|S )Nc                    g | ]	\  }}||
S  r$   ).0ids      Y/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/state/primitives.py
<listcomp>z+_get_slice_output_shape.<locals>.<listcomp>A   s!    EEE11E!EEE    r$   )zipset)r   r   r   shape_suffixshape_prefixshapes         r(   _get_slice_output_shaper0   >   sM     FEL( ; ;EEE,j//)bT-,
(L
(<
(
(%	,r*   ref_or_viewr   idxIndexer | Nonefunction_namestr*tuple[Any, tuple[indexing.NDIndexer, ...]]c                ~   t          | t                    r| j        | j        }}n| d}}t	          j        |          }t          |t                    st          d| d| d          t          |j        t          j	                  s|dfS |||fS t          j                            || j                  }|g ||R fS )Nr$   zCan only call `z` on a `Ref`: .)
isinstancer   refindexersr   get_avalr   
ValueError
inner_avalShapedArrayr   	NDIndexerfrom_indices_shaper/   )r1   r2   r4   r:   r;   ref_aval
nd_indexers          r(   get_ref_and_indexersrD   H   s     W%% $O[%9CCC]3(	Hk	*	* L
J}JJCJJJ
K
KK	H')9	:	: 7N[=!44S+:KLL*	%%*%%	%%r*   r   c                    t          | |d          \  }}t          j        |          \  }}t          j        |g|R d|iS )z5Reads a value from a `Ref`, a.k.a. value <- ref[idx].ref_gettree)rD   r   tree_flattenget_pbind)r1   r2   r:   r;   flat_indexersrG   s         r(   rF   rF   Z   sL    &{CCC-#x!.x88-	C	3-	3	3	3d	3	33r*   swapref_swapAbstractRef | RefViewvalue_function_namec                    t          | ||          \  }}t          j        |          \  }}t          j        ||g|R d|iS )z4Sets a `Ref`'s value and returns the original value.rG   )rD   r   rH   swap_prJ   )r1   r2   rO   rP   r:   r;   rK   rG   s           r(   rM   rM   s   sP     '{CHH-#x!.x88-	S%	;-	;	;	;d	;	;;r*   Nonec                ,    t          | ||d           dS )z/Sets a `Ref`'s value, a.k.a. ref[idx] <- value.ref_set)rP   NrM   )r1   r2   rO   s      r(   rU   rU   z   s    
;U9======r*   	addupdateTr   xc                    t          | |d          \  }}t          j        |          \  }}t          j        ||g|R d|iS )z;Mutates a ref with an additive update i.e. `ref[idx] += x`.ref_addupdaterG   )rD   r   rH   addupdate_prJ   )r1   r2   rX   r:   r;   rK   rG   s          r(   rZ   rZ      sO    &{CII-#x!.x88-		#q	<=	<	<	<t	<	<<r*   r/   tuple[int | Array, ...]r;   tuple[indexing.NDIndexer, ...]c                ~    |D ]9}|j         s|j        | k    sJ |j        | f            |                                } :| S N)is_dynamic_sizer/   get_indexer_shape)r/   r;   indexers      r(   _shape_after_indexingrc      sX      ( (g" <]e###gmU%;###%%''EE	,r*   rB   c               p   t          j        ||          }t          | t                    st	          d|  d          t          | j        t          j                  r1t          | j	        |          }| j        
                    |          }n|rt	          d          | j        }|t          d          hfS )Nz%`get` must be called on `Ref` types: r8   r/   6Cannot index non-shaped array with nontrivial indices.r   )r   tree_unflattenr9   r   r=   r>   r   r?   rc   r/   updater   )rB   rG   argsr;   	out_shapeout_avals         r(   _get_abstract_evalrl      s    %dD11(	Hk	*	* J
HXHHH
I
II#T%566 #%hnh??I"))	)::HH QOPPP"H
Z]]O	$$r*   val_avalcore.AbstractValueri   c                  t          j        ||          }t          | t                    st	          d|  d          t          | j        t          j                  rt          j        |          }t          |t          j                  sJ t          | j
        |          }||j
        k    r&t	          d| j
         d| d|j
         d| d	          | j        |j        k    r'|j        s t	          d| j         d	|j         d          t          j        || j                  }n|rt	          d
          | j        }|t          d          hfS )Nz&`swap` must be called on `Ref` types: r8   z%Invalid shape for `swap`. Ref shape: z. Expected shape: . Value shape: . Indices: . z%Invalid dtype for `swap`. Ref dtype: z. Value dtype: rf   r   )r   rg   r9   r   r=   r>   r   r?   raise_to_shapedrc   r/   dtype	weak_typer   )rB   rm   rG   ri   r;   expected_out_shaperk   s          r(   _swap_abstract_evalrw      s    %dD11(	Hk	*	* K
IhIII
J
JJ#T%566 ##H--Hh 011111.x~xHHX^++ 0%-^0 0*<0 0 (0~0 0 $,	0 0 0 1 1 1
 ~''0B' :%-^: :'/~: : : ; ; ;  2HNCCHH QOPPP"H
[^^$	%%r*   c               N   t          j        ||          }t          | t                    st	          d|  d          t          | j        t          j                  rt          j        |          }t          | j
        |          }t          |t          j                  sJ ||j
        k    r&t	          d| j
         d| d|j
         d| d	          | j        |j        k    r t	          d| j         d|j         d          n|rt	          d	          g t          d
          hfS )Nz+`addupdate` must be called on `Ref` types: r8   z*Invalid shape for `addupdate`. Ref shape: z. Slice shape: rp   rq   rr   z*Invalid dtype for `addupdate`. Ref dtype: rf   r   )r   rg   r9   r   r=   r>   r   r?   rs   rc   r/   rt   r   )rB   rm   rG   ri   r;   slice_shapes         r(   _addupdate_abstract_evalrz      sy    %dD11(	Hk	*	* P
N8NNN
O
OO#T%566 Q#H--H'AAKh 011111hn$$ 0%-^0 0'20 0 (0~0 0 $,	0 0 0 1 1 1
 ~'' :%-^: :'/~: : : ; ; ; (  QOPPP	k!nn	r*   )	intensity
foregroundcontextcore.JaxprPpContextslcindexing.Slicec                    |j         |j        }}t          |t          j                  r]t          j        ||           }t          |t          j                  rt          j        ||           nt          |          }| d| d| S t          |          }|dk    rd}t          |t          j                  r&t          j        ||           }|r
| d| d| S d| S ||z   }||k    rdnt          |          }| d| S )N:+r    )startsizer9   r   Varpp_varr5   )	r}   dimr   r   r   	start_strsize_strendend_strs	            r(   	_pp_slicer      s)   	38%tx   &E7++I dDH%%	D'"""YY 
 00)00h000E

Izzi$!! 	&T7++h	 44i44(4448~~DLcSjjc#hhg%%G%%%r*   rb   indexing.NDIndexerpp.Docc                   g }t          |j        |j                  D ]l\  }}t          |t          j                  r%|                    t          | ||                     D|                    t          j	        ||                      mt          j        t          j        d          t          j        d                    |                    t          j        d          g          S )N[,])r+   indicesr/   r9   r   Sliceappendr   r   r   ppconcattextjoin)r}   rb   r   r2   r   s        r(   
pp_indexerr     s    'gow}55 0 0hc3#x~&& 0nnYwS112222nnT[g..////	BGCLL"'#((7*;*;"<"<bgcllK	L	LLr*   c                p     |st          j        d          S t          j         fd|D                       S )Nz[...]c                0    g | ]}t          |          S r$   )r   )r%   rb   r}   s     r(   r)   z _pp_indexers.<locals>.<listcomp>  s#    <<<z'7##<<<r*   )r   r   r   )r}   r;   s   ` r(   _pp_indexersr     sH     
 77	<<<<8<<<
 
 r*   c           
         t          t          j        t          j        t	          j        ||                     t          | |          g                    S r_   )
pp_ref_varr   r   r   r   r   r   )r}   r:   r;   s      r(   pp_ref_indexersr     sN    	i
'$+c7++
,
,
w
)
) 	 	
 
 r*   c           	        | j         \  }| j        ^}}t          j        | j        d         |          }t          j        |g||j                  }t          j	        |t          j
        d          t          |||          g          S )NrG   print_shapes <- )outvarsinvarsr   rg   paramsr   pp_varsr   r   r   r   r   )eqnr}   settingsyrX   flat_idxr;   lhss           r(   _get_pp_ruler   #  s    
{"!,!h%cj&8(CC(aS'0EFFF#		gfoogq(++ 
 
 r*   c                   | j         \  }| j        ^}}}t          j        | j        d         |          }t          |          t          j        u r^~t          j	        t          |||          t          j        d          t          j        t          j        ||                    g          S t          |||          }t          j        |g||j                  }t          j	        |t          j        d          |t          j        d          |t          j        d          t          j        t          j        ||                    g          S )NrG   r   r   z, )r   r   r   rg   r   typer   DropVarr   r   r   r   r   r   r   )	r   r}   r   r   rX   vr   r;   x_is	            r(   _swap_pp_ruler   0  s   
{"!J/!Q%cj&8(CC(	!WW 	
9H--

Aw''((
    '1h
/
/CaS'0EFFFA9aRWV__274==gdk!W55668 9 9 9r*   c           
     "   ~| j         \   | j        ^}}}t          j        | j        d         |          }t          j        t          |||          t          j        d          t          j        t          j
        ||                    g          S )NrG   z += )r   r   r   rg   r   r   r   r   r   r   r   )r   r}   r   rX   r   r   r;   s          r(   _addupdate_pp_ruler   F  s~    
{"J/!Q%cj&8(CC(	GQ))GFOOGDK7##$$& 
' 
' 'r*   primals	list[Any]tangentsr   c                    | ^}}t          |j        t                    sJ |^}}t          |j        t                    sJ t          j        |g|R i |t          j        |g|R i |fS r_   )r9   avalr   rI   rJ   )r   r   r   
ref_primalr2   ref_tangent_s          r(   _get_jvpr   T  s    *s	JO[	1	1111/+	K$k	2	2222
*Z
0#
0
0
0
0
0
*[
13
1
1
1&
1
1
3 3r*   c                   | ^}}}t          |j        t                    sJ |^}}}t          |j        t                    sJ t          j        |          }t          j        ||g|R i |t          j        ||g|R i |fS r_   )r9   r   r   r   instantiaterR   rJ   	r   r   r   r   x_primalr2   r   	x_tangentr   s	            r(   	_swap_jvpr   ]  s    &*h	JO[	1	1111'+y1	K$k	2	2222!),,)
+j(
;S
;
;
;F
;
;
+k9
=s
=
=
=f
=
=
? ?r*   c                    | ^}}}|^}}}t          j        |          }t          j        ||g|R i | t          j        ||g|R i | g g fS r_   )r   r   r[   rJ   r   s	            r(   addupdate_jvp_ruler   g  sy    &*h'+y1!),,):x8#888888;	:C:::6:::	R-r*   c                    t          |           t          j        urt          j        || g|R i | d gd gt          |          z  z   S r_   )r   r   Zeror[   rJ   len)gr:   r2   r   s       r(   _get_transposer   r  sR    	!WWGL  S!,c,,,V,,,
4&3s88#	##r*   c                    ~t          j        |t          j        |           g|R i |}d |gd gt	          |          z  z   S r_   )rR   rJ   r   r   r   )r   r:   rX   r2   r   x_bars         r(   _swap_transposer   y  sM    
+c7.q11
BC
B
B
B6
B
B%
$#c((*	**r*   c                `    ~ ~t          j        |g|R i |}d |gd gt          |          z  z   S r_   )rI   rJ   r   )cts_inr:   rX   r2   r   r   s         r(   addupdate_transposer     sB    aj%s%%%f%%!
dVc#hh&	&&r*   c                   t          |          rRd t          |j        |          D             }d |dgt          |j                  z  dgt          |j                  z  |fS  || gd |j        D             R i |j        r3|d dgt          |j                  z  dgt          |j                  z  g fS d t          |j        |          D             }||dgt          |j                  z  dgt          |j                  z  |fS )Nc                    g | ]	\  }}||
S r$   r$   r%   r   insts      r(   r)   z._state_partial_eval_custom.<locals>.<listcomp>  s!    
A
A
ADD
A1
A
A
Ar*   Tc                    g | ]	}|j         
S r$   )r   )r%   vars     r(   r)   z._state_partial_eval_custom.<locals>.<listcomp>  s    777S777r*   Fc                    g | ]	\  }}||
S r$   r$   r   s      r(   r)   z._state_partial_eval_custom.<locals>.<listcomp>  s!    ???wq$$????r*   )anyr+   r   r   r   r   )primsaveableunks_ininst_inr   ress         r(   _state_partial_eval_customr     s   \\ Q
A
AC
G44
A
A
ACtfs3;///$#ck:J:J1JCOOxF77CJ777FFF3:FF QugCK 0 005'C<L<L2LbPP??#cj'22???#	cE7S---vCK8H8H/H#	MMr*   ref_dimint
idxs_shapec                Z    t          | d |                   }||z
  t          |          z   S r_   )sumr   )r   r   r   num_idxs_to_lefts       r(   _output_bdimr     s0    hwh/00	#	#c*oo	55r*   	axis_size	ref_shapeint | batching.NotMappedidx_is_batchedboolc           	     ~   | j         }|j         }g }|g| j        R }	t          ||          D ] \  }
}|ryt          |
t          j                  rzt          t          j        |
                    dk    }|r|	                    |
           `|j
        }|t          j        u r|	                    |
           t          d|
           t          |
d          sJ |
j        sH|t          j        ur$|
j        |fk    sJ t!          j        |
|	d          }
|	                    |
           |t          j        u rIt%          t'          dt)          j        |
          dz                       }t!          j        |
|	|          }
nt          j        |
|d          }
|	                    |
           |t          j        ur{t          |
t          j                  sat          |
d          sJ |
j        rHt%          t'          dt)          j        |
          dz                       }t!          j        |
|	|          }
|	                    |
           "|t          j        ur>t!          j        t)          j        d          |	d          }|                    ||           t	          j        t%          |          ||	d          S )	Nr   z9No support for vmapping over nontrivial slices just yet: r/   )r      int32T)validate)r   int_indexer_shaper+   r9   r   r   r   r   tree_leavesr   r   r   
not_mappedNotImplementedErrorhasattrr/   r   broadcast_in_dimtuplerangenpndimmoveaxisbroadcasted_iotart   insertr@   )rb   dimsr   r   r   r   r   indices_dimsnew_indicesnew_integer_indexer_shaper2   r   is_static_slice
bcast_dimsiotas                  r(   _batch_indexerr    s   
 O',46+(E7+DEEg|,, + +hc3 * 
C	(	( " i3C8899Q> 	


S
!
!
!
i(%%%


S
!
!
!
!#O#OOQ Q Q
 sG$$$$$y 	"+++9,,,,&s,EtLLC


S
!
!
!
!H'''uQq(899::J&s,E'13 3CC #Ca00C


S
!
!
!
!	+	+	+#x~.. 	2g&&
&
&
&Y 2uQq(899::J&s,E&02 2CH''' 1 13LaPPDw%%%		E+..	5%)
+ 
+ 
+ +r*   c                 	
 d t          | |          D             \  | ^
}|^}t          j        ||          }t          j        ||          }t          d |D                       	t	          |          dk    rt          d          t          	
fdt          ||          D                       }t          j        |          \  }}t          j	        
g|R d|idfS )Nc                J    h | ] \  }}|t           j        u|j        |         !S r$   r   r   r/   r%   rX   r'   s      r(   	<setcomp>z_get_vmap.<locals>.<setcomp>  9     1 1 1tq!H/// 
///r*   c              3  2   K   | ]}|t           j        uV  d S r_   r   r   r%   i_dims     r(   	<genexpr>z_get_vmap.<locals>.<genexpr>  >       3 3  H$77 3 3 3 3 3 3r*   r   .Batching with multiple indexers not supported.c           	   3  P   K   | ] \  }}t          ||j                  V  !d S r_   r  r/   r%   rb   r   r   r   r:   r   s      r(   r  z_get_vmap.<locals>.<genexpr>  ^       H H&$ "'4"%)WnF F H H H H H Hr*   rG   r   )
r+   r   rg   r   r   r   r   rH   rI   rJ   )batched_argsbatched_dimsrG   	flat_idxsflat_idx_dimsr;   indexers_dimsrK   r   r   r:   r   s           @@@@r(   	_get_vmapr    sG   1 1s<'F'F 1 1 1*) /#	('M%dI66(*4??- 3 3$13 3 3 3 3.]]Q
N
O
OO H H H H H H H*-h*F*FH H H H H( ".x88-	C	3-	3	3	3d	3	3Q	66r*   c               v   d t          | |          D             \  | ^}}|^}}t          j        ||          }t          j        ||          }t          j        u}	|t          j        u}
t          d |D                       t          |          dk    rt          d          t          fdt          ||          D                       }t          j	        |          \  }}|	sr|
st          j
        |d          }|
rt          j        ||d          }t          j        |g|R d|idfS )Nc                J    h | ] \  }}|t           j        u|j        |         !S r$   r
  r  s      r(   r  z_swap_vmap.<locals>.<setcomp>  r  r*   c              3  2   K   | ]}|t           j        uV  d S r_   r  r  s     r(   r  z_swap_vmap.<locals>.<genexpr>  r  r*   r   r  c           	   3  P   K   | ] \  }}t          ||j                  V  !d S r_   r  r  s      r(   r  z_swap_vmap.<locals>.<genexpr>  r  r*   r   rG   )r+   r   rg   r   r   r   r   r   r   rH   	broadcastr   rR   rJ   r  r  rG   valr  val_dimr  r;   r  ref_is_batchedval_is_batchedrK   r   r   r:   r   s               @@@@r(   
_swap_vmapr)    s   1 1s<'F'F 1 1 1*)%#sY%1"'7]%dI66(*4??-("55.("55. 3 3$13 3 3 3 3.]]Q
N
O
OO H H H H H H H*-h*F*FH H H H H( ".x88- 0 0 0

S)Q
/
/C -

C!
,
,C	S#	9	9	9	9D	9	91	<<r*   c               v   d t          | |          D             \  | ^}}|^}}t          j        ||          }t          j        ||          }t          j        u}	|t          j        u}
t          d |D                       t          |          dk    rt          d          t          fdt          ||          D                       }t          j	        |          \  }}|	sr|
st          j
        |d          }|
rt          j        ||d          }t          j        |g|R d|ig fS )Nc                J    h | ] \  }}|t           j        u|j        |         !S r$   r
  r  s      r(   r  z"_addupdate_vmap.<locals>.<setcomp>  r  r*   c              3  2   K   | ]}|t           j        uV  d S r_   r  r  s     r(   r  z"_addupdate_vmap.<locals>.<genexpr>  r  r*   r   r  c           	   3  P   K   | ] \  }}t          ||j                  V  !d S r_   r  r  s      r(   r  z"_addupdate_vmap.<locals>.<genexpr>  r  r*   r   rG   )r+   r   rg   r   r   r   r   r   r   rH   r#  r   r[   rJ   r$  s               @@@@r(   _addupdate_vmapr.  
  s   1 1s<'F'F 1 1 1*)%#sY%1"'7]%dI66(*4??-("55.("55. 3 3$13 3 3 3 3.]]Q
N
O
OO H H H H H H H*-h*F*FH H H H H( ".x88- 0 0 0

S)Q
/
/C -

C!
,
,C		#s	>]	>	>	>	>	>	BBr*   broadcast_toac                    dd l m} |                    |           } | j        |k    r| S t                              | |          S )Nr   re   )	jax.numpynumpyasarrayr/   broadcast_to_prJ   r0  r/   jnps      r(   r/  r/  ,  sN    	kk!nn!WH			Qe		,	,,r*   c               :    dd l m} |                    | |          S )Nr   )r2  r3  r/  r6  s      r(   _broadcast_to_implr9  3  s*    			!U	#	##r*   c               6    t          j        || j                  S r_   )r   r?   rt   )r   r/   s     r(   _broadcast_to_abstract_evalr;  8  s    		%	,	,,r*   F)r   r   r   r   r   r    r!   r   )r1   r   r2   r3   r4   r5   r!   r6   r_   )r1   r   r2   r3   r!   r   rV   )
r1   rN   r2   r3   rO   r   rP   r5   r!   r   )r1   rN   r2   r3   rO   r   r!   rS   )r1   r   r2   r3   rX   r   r!   rS   )r/   r\   r;   r]   r!   r\   )rB   r   )rB   r   rm   rn   ri   r   )r}   r~   r   r   r!   r5   )r}   r~   rb   r   r!   r   )r}   r~   r;   r]   )r}   r~   )r!   r   )r   r   r   r   r   r   )r   r    r   r   r   r   )rb   r   r   r   r   r   r   r   r   r   r!   r   )r0  r   r/   r   r!   r   )e__doc__
__future__r   	functoolsr   typingr   r   r3  r   jax._srcr   r   r	   r
   r   r   jax._src.interpretersr   r   r   per   jax._src.laxr   jax._src.typingr   jax._src.stater   jax._src.state.typesr   r   r   r   r   jax._src.utilr   r   map
unsafe_mapr+   
unsafe_zip	PrimitiverI   def_implapply_primitiver   r   sliceIndexerr0   rD   rF   rR   rM   rU   r[   multiple_resultsrZ   rc   rl   def_effectful_abstract_evalrw   rz   color	IntensityNORMALColorGREENr   r   r   r   r   r   pp_eqn_rulesr   r   r   primitive_jvpsr   r   r   primitive_transposesr   r   r   partial_eval_jaxpr_custom_rulesr   r  r  primitive_batchersr)  r.  r5  r/  r9  def_abstract_evalr;  register_lowering	lower_funr$   r*   r(   <module>r_     s   # " " " " " " "                                     ) ) ) ) ) )       $ $ $ $ $ $ * * * * * * 4 4 4 4 4 4 & & & & & &       ! ! ! ! ! ! # # # # # #/ / / / / / / / / / / / / / , , , , , , , , CZCZ 	u wwx/77 8 8 8
c5%'(#-
.   & & & &$4 4 4 4 4, 
		 0&99 : : : $.< < < < <> > > > dn[))#    WWX5{CC D D D= = = =   % % % %  ! !"4 5 5 5& & & &6  " "#6 7 7 7   2  ' '(@ A A A WRX)<HN, , ,
& & & &4M M M M      
 
 
 
 ( % 9 9 9 9( * & 	' 	' 	' 	' "4 + 3 3 3 3 $ % ? ? ? ? & &     "4 + $ $ $
 "0  + + +
 #2  ' ' '
 (;  $N N N -4G4N49-; -; "5 )-4W5O5;.= .= "6 *29'3- 3- "; /
6 6 6 6
:+ :+ :+ :+x7 7 7$ &/ E "= = =0 '1 F #C C C0 ,; K (  //- - - - $ $ $ !- - "!-  NDN#5u==    r*   