
    -Phk                    2   d dl 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mZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ e	r$d d	l%m&Z&m'Z' d d
l(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3  ed          Z4e5e6e7e8e9e:efZ;ej<        ej=        ej>        fZ?edddgd            Z@edddhd            Z@edddid            Z@edjd            Z@ddddkd$Z@edld(            ZAedmd*            ZAednd,            ZAedd-dod4            ZAedddd5dpd7            ZAedddd5dqd8            ZAeddd9drd:            ZAeddd9dsd;            ZAeddd<dtd?            ZAeddd@dudA            ZAedddddBdvdE            ZAedddddBdwdF            ZAeddddGdxdH            ZAeddddIdydL            ZAeddddMdzdN            ZAed{dO            ZAdddPdPddQd|dTZAdPdPdPdPddUd}dYZBd~d\ZCd~d]ZD	 ddddPdPd^dQddbZEdddZFddeZGg dfZHdS )    )annotationsN)Decimalwraps)TYPE_CHECKINGAnyCallableLiteralTypeVaroverload)is_native_arrowis_native_pandas_likeis_native_polarsis_native_spark_like)Version)get_daskget_dask_expr	get_numpy
get_pandasis_cupy_scalaris_dask_dataframeis_duckdb_relationis_ibis_tableis_numpy_scalaris_pandas_like_dataframeis_polars_lazyframeis_polars_seriesis_pyarrow_scalaris_pyarrow_table	DataFrame	LazyFrameSeries)	
DataFrameTIntoDataFrameT	IntoFrame
IntoFrameTIntoLazyFrameT
IntoSeriesIntoSeriesT
LazyFrameTSeriesTT.pass_throughnarwhals_objectDataFrame[IntoDataFrameT]r0   Literal[False]returnr&   c                   d S N r1   r0   s     R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/translate.py	to_nativer:   5   s	     S    LazyFrame[IntoFrameT]r(   c                   d S r6   r7   r8   s     r9   r:   r:   9   s	     r;   Series[IntoSeriesT]r+   c                   d S r6   r7   r8   s     r9   r:   r:   =   s	     #r;   r   boolc                   d S r6   r7   r8   s     r9   r:   r:   A   s    CF3r;   )strictr0   GDataFrame[IntoDataFrameT] | LazyFrame[IntoFrameT] | Series[IntoSeriesT]rB   bool | None/IntoDataFrameT | IntoFrameT | IntoSeriesT | Anyc                   ddl m} ddlm} ddlm}  |||dd          }t          | |          r| j        j        S t          | |          r| j	        j
        S |s"dt          |            d	}t          |          | S )
a,  Convert Narwhals object to native one.

    Arguments:
        narwhals_object: Narwhals object.
        strict: Determine what happens if `narwhals_object` isn't a Narwhals class

            - `True` (default): raise an error
            - `False`: pass object through as-is

            *Deprecated* (v1.13.0)

            Please use `pass_through` instead. Note that `strict` is still available
            (and won't emit a deprecation warning) if you use `narwhals.stable.v1`,
            see [perfect backwards compatibility policy](../backcompat.md/).
        pass_through: Determine what happens if `narwhals_object` isn't a Narwhals class

            - `False` (default): raise an error
            - `True`: pass object through as-is

    Returns:
        Object of class that user started with.
    r   validate_strict_and_pass_though)	BaseFramer#   FTpass_through_defaultemit_deprecation_warningzExpected Narwhals object, got .)narwhals._utilsrH   narwhals.dataframerI   narwhals.seriesr$   
isinstance_compliant_frame_native_frame_compliant_seriesnativetype	TypeError)r1   rB   r0   rH   rI   r$   msgs          r9   r:   r:   E   s    < @?????,,,,,,&&&&&&225SW  L /9-- >/==/6** 8077 GtO/D/DGGGnnr;   native_objectr-   kwdsc                    d S r6   r7   rY   rZ   s     r9   from_nativer]   v   s    ADr;   r%   c                    d S r6   r7   r\   s     r9   r]   r]   z       GJsr;   r,   c                    d S r6   r7   r\   s     r9   r]   r]   ~   r_   r;   )series_onlyIntoDataFrameT | IntoSeriesTLiteral[True]
eager_onlyra   allow_series/DataFrame[IntoDataFrameT] | Series[IntoSeriesT]c                   d S r6   r7   rY   r0   rd   ra   re   s        r9   r]   r]      s	     7:cr;   )rd   ra   re   Nonec                   d S r6   r7   rh   s        r9   r]   r]      	     !$r;   c                   d S r6   r7   rh   s        r9   r]   r]      	     	r;   )ra   re   c                   d S r6   r7   rh   s        r9   r]   r]      rk   r;   c                   d S r6   r7   rh   s        r9   r]   r]      rm   r;   )rd   ra   )IntoFrameT | IntoLazyFrameT | IntoSeriesTGDataFrame[IntoFrameT] | LazyFrame[IntoLazyFrameT] | Series[IntoSeriesT]c                   d S r6   r7   rh   s        r9   r]   r]      s     ORcr;   )rd   re   c                   d S r6   r7   rh   s        r9   r]   r]      	     #r;   r0   rd   ra   re   r)   LazyFrame[IntoLazyFrameT]c                   d S r6   r7   rh   s        r9   r]   r]      rk   r;   c                   d S r6   r7   rh   s        r9   r]   r]      rk   r;   )r0   ra   re   c                   d S r6   r7   rh   s        r9   r]   r]      rk   r;   )r0   rd   ra   IntoFrame | IntoSeries-DataFrame[Any] | LazyFrame[Any] | Series[Any]c                   d S r6   r7   rh   s        r9   r]   r]      s	     58Cr;   )r0   rd   re   c                   d S r6   r7   rh   s        r9   r]   r]      rt   r;   c                   d S r6   r7   rh   s        r9   r]   r]   
  s	     #r;   F)rB   r0   rd   ra   re   FIntoLazyFrameT | IntoFrameT | IntoSeriesT | IntoFrame | IntoSeries | TKLazyFrame[IntoLazyFrameT] | DataFrame[IntoFrameT] | Series[IntoSeriesT] | Tc          	         ddl m}  |||dd          }|r.dt          t          |                    }t	          |          t          | ||d||t          j                  S )aq  Convert `native_object` to Narwhals Dataframe, Lazyframe, or Series.

    Arguments:
        native_object: Raw object from user.
            Depending on the other arguments, input object can be

            - a Dataframe / Lazyframe / Series supported by Narwhals (pandas, Polars, PyArrow, ...)
            - an object which implements `__narwhals_dataframe__`, `__narwhals_lazyframe__`,
              or `__narwhals_series__`
        strict: Determine what happens if the object can't be converted to Narwhals

            - `True` or `None` (default): raise an error
            - `False`: pass object through as-is

            *Deprecated* (v1.13.0)

            Please use `pass_through` instead. Note that `strict` is still available
            (and won't emit a deprecation warning) if you use `narwhals.stable.v1`,
            see [perfect backwards compatibility policy](../backcompat.md/).
        pass_through: Determine what happens if the object can't be converted to Narwhals

            - `False` or `None` (default): raise an error
            - `True`: pass object through as-is
        eager_only: Whether to only allow eager objects

            - `False` (default): don't require `native_object` to be eager
            - `True`: only convert to Narwhals if `native_object` is eager
        series_only: Whether to only allow Series

            - `False` (default): don't require `native_object` to be a Series
            - `True`: only convert to Narwhals if `native_object` is a Series
        allow_series: Whether to allow Series (default is only Dataframe / Lazyframe)

            - `False` or `None` (default): don't convert to Narwhals if `native_object` is a Series
            - `True`: allow `native_object` to be a Series

    Returns:
        DataFrame, LazyFrame, Series, or original object, depending
            on which combination of parameters was passed.
    r   rG   FTrJ   z1from_native() got an unexpected keyword argument )r0   rd   eager_or_interchange_onlyra   re   version)rN   rH   nextiterrW   _from_native_implr   MAIN)	rY   rB   r0   rd   ra   re   rZ   rH   rX   s	            r9   r]   r]     s    d @?????225SW  L  V$tDzzBRBRVVnn!"'!   r;   )r0   rd   r   ra   re   r   r   r   c                  ddl m}m}m}	m}
m} ddlm}m} ddl	m
} t          | ||f          r|s| S t          | |          r|s|r| S |r|du rd}t          |          d}|r|rd}t          |           ||           rS|r|sd	}t          |          | S |                    |                                                     |          d
          S  |	|           rl|r|sd}t          |          | S |s|r|sd}t          |          | S |                    |                                                     |          d
          S  |
|           rS|s|sd}t          |          | S |                    |                                                     |          d
          S t+          |           r|r9t-          |           s*|s&dt/          |           j         }t          |          | S |s|r$t3          |           r|sd}t          |          | S |s$t-          |           r|sd}t          |          | S |j                            |           j                            |                                           S t?          |           rtA          |           r-|r*|s&dt/          |           j         }t          |          | S n|s|sd}t          |          | S |j                            |           j                            |                                           S tC          |           rtE          |           r-|r*|s&dt/          |           j         }t          |          | S n|s|sd}t          |          | S |j                            |           j                            |                                           S tG          |           rddl$m%} |r|sd}t          |          | S |s|r|sd}t          |          | S  |tM                                }|dk    rtO                      d}tQ          |           |||                              |                                           S tS          |           r]|s|r|sd}t          |          | S |j                            |           j                            |                                           S tU          |           r]|s|r|sd}t          |          | S |j                            |           j                            |                                           S tW          |           rj|j                            |           }|s|s|r|sd|j,         d}t          |          | S |j                            |                                           S  ||           rlddl-m.} |s|r|sd}t          |          | S |t^          j0        ur|r| S d}t          |          t^          j0                             ||           d          S |s!dt/          |            }t          |          | S ) Nr   )_supports_dataframe_interchangeis_compliant_dataframeis_compliant_lazyframeis_compliant_seriesparse_versionr    r#   FzJInvalid parameter combination: `series_only=True` and `allow_series=False`TzUInvalid parameter combination: `eager_only=True` and `eager_or_interchange_only=True`z,Cannot only use `series_only` with dataframefull)levelz,Cannot only use `series_only` with lazyframezJCannot only use `eager_only` or `eager_or_interchange_only` with lazyframez4Please set `allow_series=True` or `series_only=True`z#Cannot only use `series_only` with zQCannot only use `eager_only` or `eager_or_interchange_only` with polars.LazyFrame)DaskNamespacez1Cannot only use `series_only` with dask DataFramezOCannot only use `eager_only` or `eager_or_interchange_only` with dask DataFrame)i        zPlease install dask-expr)backend_versionr   zNCannot only use `series_only=True` or `eager_only=False` with DuckDBPyRelationzHCannot only use `series_only=True` or `eager_only=False` with ibis.TablezPCannot only use `series_only`, `eager_only` or `eager_or_interchange_only` with z
 DataFrame)InterchangeFramezhCannot only use `series_only=True` or `eager_only=False` with object which only implements __dataframe__a+  The Dataframe Interchange Protocol is no longer supported in the main `narwhals` namespace.

You may want to:
 - Use `narwhals.stable.v1`, where it is still supported.
    - See https://narwhals-dev.github.io/narwhals/backcompat
 - Use `pass_through=True` to pass the object through without raising.interchangezLExpected pandas-like dataframe, Polars dataframe, or Polars lazyframe, got: )1rN   r   r   r   r   r   rO   r!   r"   rP   r$   rQ   
ValueErrorrW   	dataframe__narwhals_dataframe___with_version	lazyframe__narwhals_lazyframe__series__narwhals_series__r   r   rV   __qualname__r   	namespacefrom_native_object	compliantr]   to_narwhalsr   r   r   r   r   narwhals._dask.namespacer   r   r   ImportErrorr   r   r   implementationnarwhals._interchange.dataframer   r   V1)rY   r0   rd   r   ra   re   r   r   r   r   r   r   r!   r"   r$   rX   r   dask_versionns_sparkr   s                       r9   r   r   [  sv                 87777777&&&&&& -)Y!788  -(( k \  5  ^CS//! / eoo m,, z 	! %Dnn$    0022@@IIQW ! 
 
 	
 
 		.	. q 	! %Dnn$   	!2 	! %bnn$    0022@@IIQW ! 
 
 	
 
	]	+	+ c 	! %Lnn$  ~~--//==gFFf  
 
 	

 
-	(	( X 	!/>> 	! %^D<O<O<\^^nn$   	!3 	!9L:
 :
 	!   %inn$   	!"2="A"A 	! %Lnn$  00??{{=11[]]	
 
}	-	- #M22 
	! %# )b]@S@S@`bbC#C..($$	%
  	! %Lnn$  00??{{=11[]]	
 
	'	' lM** 
	! %# )b]@S@S@`bbC#C..($$	%
  	! %Lnn$  00??{{=11[]]	
 
=	)	) Y:::::: 	! %Inn$   	!2 	! %gnn$  $}XZZ00=((]__-D,Cc"""M,HHH[''[]]	
 
M	*	* A 	! 	! %fnn$  00??{{=11[]]	
 
}	%	% 4 	! 	! %`nn$  00??{{=11[]]	
 
m	,	, '$77FF 	!* 	!(A 	! %@$3@ @ @   nn$  !--m<<HHJJJ 
)	(	7	7 DDDDDD 	! 	! %F   nn$  '*$$ %$$Y  C.. z##$4$4]$C$C=#YYY r]abo]p]prrnnr;   objFDataFrame[Any] | LazyFrame[Any] | Series[Any] | IntoFrame | IntoSeriesc                     | sd}t          |          d | D             }t          |          dk    rd| d}t          |          |                                S )a  Get native namespace from object.

    Arguments:
        obj: Dataframe, Lazyframe, or Series. Multiple objects can be
            passed positionally, in which case they must all have the
            same native namespace (else an error is raised).

    Returns:
        Native module.

    Examples:
        >>> import polars as pl
        >>> import pandas as pd
        >>> import narwhals as nw
        >>> df = nw.from_native(pd.DataFrame({"a": [1, 2, 3]}))
        >>> nw.get_native_namespace(df)
        <module 'pandas'...>
        >>> df = nw.from_native(pl.DataFrame({"a": [1, 2, 3]}))
        >>> nw.get_native_namespace(df)
        <module 'polars'...>
    z=At least one object must be passed to `get_native_namespace`.c                ,    h | ]}t          |          S r7   ) _get_native_namespace_single_obj).0xs     r9   	<setcomp>z'get_native_namespace.<locals>.<setcomp>Y  s!    ???a.q11???r;   r   z0Found objects with different native namespaces: rM   )r   lenpop)r   rX   results      r9   get_native_namespacer   >  sk    0  Moo??3???F
6{{aJJJJoo::<<r;   c                l   ddl m} ddlm}  |t          t
                    5  t          j        j        	                    |           j
                                        cd d d            S # 1 swxY w Y    ||           r|                                 S dt          |            }t	          |          )Nr   )suppress)has_native_namespacez4Could not get native namespace from object of type: )
contextlibr   rN   r   rW   AssertionErrorr   r   r   r   r   to_native_namespace__native_namespace__rV   )r   r   r   rX   s       r9   r   r   `  s    $#####444444	)^	,	, / /|%88
 

,,../ / / / / / / / / / / / / / / /
 C   *'')))
Lc
L
LC
C..s   ;A++A/2A/TfuncCallable[..., Any] | NoneCallable[..., Any]c               d    ddl m}  ||dd          d
fd}| |S  ||           S )a	  Decorate function so it becomes dataframe-agnostic.

    This will try to convert any dataframe/series-like object into the Narwhals
    respective DataFrame/Series, while leaving the other parameters as they are.
    Similarly, if the output of the function is a Narwhals DataFrame or Series, it will be
    converted back to the original dataframe/series type, while if the output is another
    type it will be left as is.
    By setting `pass_through=False`, then every input and every output will be required to be a
    dataframe/series-like object.

    Arguments:
        func: Function to wrap in a `from_native`-`to_native` block.
        strict: Determine what happens if the object can't be converted to Narwhals

            *Deprecated* (v1.13.0)

            Please use `pass_through` instead. Note that `strict` is still available
            (and won't emit a deprecation warning) if you use `narwhals.stable.v1`,
            see [perfect backwards compatibility policy](../backcompat.md/).

            - `True` or `None` (default): raise an error
            - `False`: pass object through as-is
        pass_through: Determine what happens if the object can't be converted to Narwhals

            - `False` or `None` (default): raise an error
            - `True`: pass object through as-is
        eager_only: Whether to only allow eager objects

            - `False` (default): don't require `native_object` to be eager
            - `True`: only convert to Narwhals if `native_object` is eager
        series_only: Whether to only allow Series

            - `False` (default): don't require `native_object` to be a Series
            - `True`: only convert to Narwhals if `native_object` is a Series
        allow_series: Whether to allow Series (default is only Dataframe / Lazyframe)

            - `False` or `None`: don't convert to Narwhals if `native_object` is a Series
            - `True` (default): allow `native_object` to be a Series

    Returns:
        Decorated function.

    Examples:
        Instead of writing

        >>> import narwhals as nw
        >>> def agnostic_group_by_sum(df):
        ...     df = nw.from_native(df, pass_through=True)
        ...     df = df.group_by("a").agg(nw.col("b").sum())
        ...     return nw.to_native(df)

        you can just write

        >>> @nw.narwhalify
        ... def agnostic_group_by_sum(df):
        ...     return df.group_by("a").agg(nw.col("b").sum())
    r   rG   TrJ   r   r   r4   c                H     t                     d fd            }|S )Nargsr   kwargsr4   c                 2   	
fd| D             } 	
fd|                                 D             }fdg | |                                R D             }t          |          dk    rd}t          |           | i |}t	          |	          S )Nc           	     8    g | ]}t          |           S ru   r]   )r   argre   rd   r0   ra   s     r9   
<listcomp>zBnarwhalify.<locals>.decorator.<locals>.wrapper.<locals>.<listcomp>  sI     	 	 	  !-) +!-  	 	 	r;   c           
     @    i | ]\  }}|t          |           S r   r   )r   namevaluere   rd   r0   ra   s      r9   
<dictcomp>zBnarwhalify.<locals>.decorator.<locals>.wrapper.<locals>.<dictcomp>  sO     	 	 	  D% k!-) +!-  	 	 	r;   c                J    h | ]}t          |d d          x              S )r   N)getattr)r   vbs     r9   r   zAnarwhalify.<locals>.decorator.<locals>.wrapper.<locals>.<setcomp>  sG        $:DAAAA  r;   r   z_Found multiple backends. Make sure that all dataframe/series inputs come from the same backend.r/   )itemsvaluesr   r   r:   )r   r   backendsrX   r   r   re   rd   r   r0   ra   s        @r9   wrapperz.narwhalify.<locals>.decorator.<locals>.wrapper  s   	 	 	 	 	 	 	  	 	 	D	 	 	 	 	 	 	 $*<<>>	 	 	F   242&--//22  H 8}}q  w oo%T4*6**FV,????r;   )r   r   r   r   r4   r   r   )r   r   re   rd   r0   ra   s   ` r9   	decoratorznarwhalify.<locals>.decorator  sX    	t#	@ #	@ #	@ #	@ #	@ #	@ #	@ #	@ #	@ 
#	@J r;   N)r   r   r4   r   )rN   rH   )r   rB   r0   rd   ra   re   rH   r   s     ````  r9   
narwhalifyr   r  s    D @?????224RV  L' ' ' ' ' ' ' ' 'R | yr;   scalar_likec                :   t                      }| t          | t                    r| }nqt                      x}rdt          | |j                  rO| j        dk    rD|                                 dz  }t          j        ddd          t          j	        |          z   }nt          |           st          |           r|                                 }n|r*t          | |j                  r|                                 }n|r*t          | |j                  r|                                 }nrt          | t                     r| }nZt#          |           rd}nHt%          |           r|                                 }n$dt)          |            d| }t+          |          |S )	au  If a scalar is not Python native, converts it to Python native.

    Arguments:
        scalar_like: Scalar-like value.

    Returns:
        Python scalar.

    Raises:
        ValueError: If the object is not convertible to a scalar.

    Examples:
        >>> import narwhals as nw
        >>> import pandas as pd
        >>> df = nw.from_native(pd.DataFrame({"a": [1, 2, 3]}))
        >>> nw.to_py_scalar(df["a"].item(0))
        1
        >>> import pyarrow as pa
        >>> df = nw.from_native(pa.table({"a": [1, 2, 3]}))
        >>> nw.to_py_scalar(df["a"].item(0))
        1
        >>> nw.to_py_scalar(1)
        1
    Nzdatetime64[ns]i  i  r   )microsecondsz/Expected object convertible to a scalar, found z.
)r   rQ   NON_TEMPORAL_SCALAR_TYPESr   
datetime64dtypeitemdtdatetime	timedeltar   r   	Timestampto_pydatetime	Timedeltato_pytimedeltaTEMPORAL_SCALAR_TYPES_is_pandas_nar   as_pyrV   r   )r   pdscalarnpmsrX   s         r9   to_py_scalarr     s   4 
Bj6OPP{{	{BM22 !1114'T1a((2<R+H+H+HH		%	% )D)D !!##	 
;55 **,,	 
;55 ++-- 
K!6	7	7 	{	#	# 		;	'	' ""$$d;>O>O    	 ooMr;   c                    t          t                      x}o3|j        j                            |           o|                    |                     S r6   )r@   r   apitypes	is_scalarisna)r   r   s     r9   r   r   %  s@    z||#U)?)?)D)DUQTVVVr;   )r   r   r:   r   )r1   r2   r0   r3   r4   r&   )r1   r<   r0   r3   r4   r(   )r1   r>   r0   r3   r4   r+   )r1   r   r0   r@   r4   r   )r1   rC   rB   rD   r0   rD   r4   rE   )rY   r-   rZ   r   r4   r-   )rY   r%   rZ   r   r4   r%   )rY   r,   rZ   r   r4   r,   )rY   rb   r0   rc   rd   rc   ra   r3   re   rc   r4   rf   )rY   r&   r0   rc   rd   r3   ra   r3   re   ri   r4   r2   )rY   r.   r0   rc   rd   r3   ra   r3   re   ri   r4   r.   )rY   r&   r0   rc   rd   rc   ra   r3   re   ri   r4   r2   )rY   r.   r0   rc   rd   rc   ra   r3   re   ri   r4   r.   )rY   rp   r0   rc   rd   r3   ra   r3   re   rc   r4   rq   )rY   r+   r0   rc   rd   r3   ra   rc   re   ri   r4   r>   )rY   r)   r0   r3   rd   r3   ra   r3   re   ri   r4   rv   )rY   r&   r0   r3   rd   r3   ra   r3   re   ri   r4   r2   )rY   r&   r0   r3   rd   rc   ra   r3   re   ri   r4   r2   )rY   rz   r0   r3   rd   r3   ra   r3   re   rc   r4   r{   )rY   r+   r0   r3   rd   r3   ra   rc   re   ri   r4   r>   )rY   r   r0   r@   rd   r@   ra   r@   re   rD   r4   r   )rY   r   rB   rD   r0   rD   rd   r@   ra   r@   re   rD   rZ   r   r4   r   )rY   r   r0   r@   rd   r@   r   r@   ra   r@   re   rD   r   r   r4   r   )r   r   r4   r   r6   )r   r   rB   rD   r0   rD   rd   r@   ra   r@   re   rD   r4   r   )r   r   r4   r   )r   r   r4   r@   )I
__future__r   r   r   decimalr   	functoolsr   typingr   r   r	   r
   r   r   narwhals._namespacer   r   r   r   rN   r   narwhals.dependenciesr   r   r   r   r   r   r   r   r   r   r   r   r   r   rO   r!   r"   rP   r$   narwhals.typingr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r@   bytesstrintfloatcomplexr   dater   timer   r:   r]   r   r   r   r   r   r   __all__r7   r;   r9   <module>r     s   " " " " " "                 K K K K K K K K K K K K K K K K            $ # # # # #                               "  77777777&&&&&&
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 GCLL!5#sE7GL ",8  
RU     
 
NQ     
 
LO     
 
 F F F 
 F  $. . . . . .b 
 D D D 
 D 
 J J J 
 J 
 J J J 
 J 
 #&: : : : : 
: 

 "%"%$ $ $ $ $ 
$ 

 "%"%     
 
 #&$ $ $ $ $ 
$ 
 #&     
 

 "%"%R R R R R 
R 

 "%     
 
 $'!$"%$ $ $ $ $ 
$ 
 $'!$"%$ $ $ $ $ 
$ 
 $'"%$ $ $ $ $ 
$ 
 $'!$"%8 8 8 8 8 
8 
 $'!$     
 
   
  $ $C C C C C CR &+ $` ` ` ` ` `F   D   & '+u  $ $u u u u u up8 8 8 8vW W W W N
M
Mr;   