
    }i5                       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
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 d dlmZmZmZmZ d dlmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$ ersd d	l%m&Z&m'Z'm(Z( d d
l)m*Z* d dl+Z,d dl-Z.d dl/Z0d dl1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dlm9Z9m:Z:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH  G d de4eedf                   ZI eddd          ZJg dZK G d ded         eee         ed         eee                   ZL G d deLe         ee                   ZM G d  d!e e         e!e         eeef                   ZN G d" d#eNeef         eeef                   ZO G d$ d%eNeef         e	e         eeef                   ZP G d& d'eNeef         e
e         eeef                   ZQ G d( d)eNeef         ee         eeef                   ZR G d* d+eNeef         ee         eeef                   ZS G d, d-eNeef         ee         eeef                   ZT G d. d/eeeJf                   ZUdS )0    )annotations)TYPE_CHECKINGAnyGenericLiteralProtocol)CatNamespaceDateTimeNamespaceListNamespaceStringNamespaceStructNamespace)CompliantColumn)CompliantSeriesT_coEagerDataFrameAnyEagerSeriesTEagerSeriesT_coNativeSeriesTNativeSeriesT_co)FromIterable
FromNativeNumpyConvertible
ToNarwhals)TypeVarassert_never)_StoresCompliant_StoresNativeis_compliant_seriesis_sized_multi_index_selectorunstable)IterableIteratorSequence)
ModuleTypeN)NotRequiredSelf	TypedDict)CompliantDataFrame)EagerNamespace)ImplementationVersion_LimitedContext)DType)Series)Into1DArray	IntoDTypeMultiIndexSelectorPythonLiteralRollingInterpolationMethodSizedMultiIndexSelector_1DArray_SliceIndexc                  $    e Zd ZU ded<   ded<   dS )HistDataz/NotRequired[list[float] | _1DArray | list[Any]]
breakpointz2NativeSeriesT | _1DArray | _CountsT_co | list[Any]countN)__name__
__module____qualname____annotations__     N/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_compliant/series.pyr7   r7   8   s*         CCCCAAAAAAr?   r7   _CountsT_coIterable[Any]T)bound	covariant)	CompliantSeriesEagerSeriesEagerSeriesCatNamespaceEagerSeriesDateTimeNamespaceEagerSeriesHistEagerSeriesListNamespaceEagerSeriesNamespaceEagerSeriesStringNamespaceEagerSeriesStructNamespacec                     e Zd ZU ded<   edd            ZddZdd	Zedd            Z	ddZ
ddZddZedd            Zedd            ZddZdd!Zdd$Zdd&Zdd(Zedd*            Zed+d,d-dd1            Zdd2Zdd3Zdd4Zdd5Zdd6Zdd7Zdd:Zdd;Zdd<Zdd=Zdd>Z dd@Z!ddAZ"ddBZ#ddEZ$ddFZ%ddGZ&ddIZ'ddLZ(ddNZ)ddOZ*ddPZ+ddRZ,ddSZ-ddTZ.ddUZ/ddVZ0ddZZ1dd^Z2ddaZ3ddbZ4ddcZ5ddeZ6ddgZ7ddhZ8ddiZ9ddkZ:ddoZ;ddpZ<ddrZ=ddtZ>ddvZ?dwdxddzZ@ddZAddZBddZCeDdd            ZEeDdd            ZFd,S )rE   r)   _implementationreturnr   c                    d S Nr>   selfs    r@   nativezCompliantSeries.nativeW   s    '*sr?   r%   c                    | S rR   r>   rS   s    r@   __narwhals_series__z#CompliantSeries.__narwhals_series__Y   s    r?   r#   c                    d S rR   r>   rS   s    r@   __native_namespace__z$CompliantSeries.__native_namespace__\         r?   datacontextr+   c                  d S rR   r>   clsr[   r\   s      r@   from_nativezCompliantSeries.from_native]   s    WZWZr?   Series[NativeSeriesT]c                :    | j                             | d          S )Nfull)level)_versionseriesrS   s    r@   to_narwhalszCompliantSeries.to_narwhals_   s    }##D#777r?   rf   r   c                    d S rR   r>   rT   rf   s     r@   _with_nativezCompliantSeries._with_nativeb   rZ   r?   versionr*   c                    d S rR   r>   )rT   rk   s     r@   _with_versionzCompliantSeries._with_versionc   rZ   r?   r,   c                    d S rR   r>   rS   s    r@   dtypezCompliantSeries.dtypef   s    !cr?   strc                    d S rR   r>   rS   s    r@   namezCompliantSeries.nameh   s    3r?   ro   copybool | Noner4   c                   d S rR   r>   )rT   ro   rs   s      r@   	__array__zCompliantSeries.__array__j   rZ   r?   otherboolc                    d S rR   r>   rT   rw   s     r@   __contains__zCompliantSeries.__contains__k   rZ   r?   itemMultiIndexSelector[Self]c                    d S rR   r>   rT   r|   s     r@   __getitem__zCompliantSeries.__getitem__l   rZ   r?   Iterator[Any]c                    d S rR   r>   rS   s    r@   __iter__zCompliantSeries.__iter__m   rZ   r?   intc                *    t          | j                  S rR   )lenrU   rS   s    r@   __len__zCompliantSeries.__len__n   s    4;r?   r.   c                  d S rR   r>   r^   s      r@   
from_numpyzCompliantSeries.from_numpyq   s    TWTWr?    N)rr   ro   rB   rr   IntoDType | Nonec                  d S rR   r>   )r_   r[   r\   rr   ro   s        r@   from_iterablezCompliantSeries.from_iterables   s	     sr?   c                    d S rR   r>   rz   s     r@   __radd__zCompliantSeries.__radd__}   rZ   r?   c                    d S rR   r>   rz   s     r@   __rand__zCompliantSeries.__rand__~   rZ   r?   c                    d S rR   r>   rz   s     r@   __rmul__zCompliantSeries.__rmul__   rZ   r?   c                    d S rR   r>   rz   s     r@   __ror__zCompliantSeries.__ror__   rZ   r?   c                    d S rR   r>   rS   s    r@   allzCompliantSeries.all   rZ   r?   c                    d S rR   r>   rS   s    r@   anyzCompliantSeries.any   rZ   r?   ignore_nullsr1   c                   d S rR   r>   )rT   r   s     r@   	any_valuezCompliantSeries.any_value   rZ   r?   c                    d S rR   r>   rS   s    r@   arg_maxzCompliantSeries.arg_max   rZ   r?   c                    d S rR   r>   rS   s    r@   arg_minzCompliantSeries.arg_min   rZ   r?   c                    d S rR   r>   rS   s    r@   arg_truezCompliantSeries.arg_true   rZ   r?   c                    d S rR   r>   rS   s    r@   r9   zCompliantSeries.count   rZ   r?   	predicatec                    d S rR   r>   )rT   r   s     r@   filterzCompliantSeries.filter   rZ   r?   c                    d S rR   r>   rS   s    r@   firstzCompliantSeries.first   rZ   r?   c                    d S rR   r>   rS   s    r@   lastzCompliantSeries.last   rZ   r?   noffsetc                    d S rR   r>   )rT   r   r   s      r@   gather_everyzCompliantSeries.gather_every   rZ   r?   c                    d S rR   r>   rT   r   s     r@   headzCompliantSeries.head   rZ   r?   c                2    |                                  dk    S Nr   )r   rS   s    r@   is_emptyzCompliantSeries.is_empty   s    xxzzQr?   
descendingc                   d S rR   r>   )rT   r   s     r@   	is_sortedzCompliantSeries.is_sorted   rZ   r?   index
int | Nonec                    d S rR   r>   )rT   r   s     r@   r|   zCompliantSeries.item   rZ   r?   float | Nonec                    d S rR   r>   rS   s    r@   kurtosiszCompliantSeries.kurtosis   rZ   r?   c                    d S rR   r>   rS   s    r@   r   zCompliantSeries.len   rZ   r?   c                    d S rR   r>   rS   s    r@   maxzCompliantSeries.max   rZ   r?   floatc                    d S rR   r>   rS   s    r@   meanzCompliantSeries.mean   rZ   r?   c                    d S rR   r>   rS   s    r@   medianzCompliantSeries.median   rZ   r?   c                    d S rR   r>   rS   s    r@   minzCompliantSeries.min   rZ   r?   c                    d S rR   r>   rS   s    r@   n_uniquezCompliantSeries.n_unique   rZ   r?   c                    d S rR   r>   rS   s    r@   
null_countzCompliantSeries.null_count   rZ   r?   quantileinterpolationr2   c                    d S rR   r>   )rT   r   r   s      r@   r   zCompliantSeries.quantile   s    r?   fractionwith_replacementseedc                   d S rR   r>   )rT   r   r   r   r   s        r@   samplezCompliantSeries.sample   s	     sr?   indicesvaluesc                    d S rR   r>   )rT   r   r   s      r@   scatterzCompliantSeries.scatter   rZ   r?   c                    d S rR   r>   r   s     r@   shiftzCompliantSeries.shift   rZ   r?   c                    d S rR   r>   rS   s    r@   skewzCompliantSeries.skew   rZ   r?   
nulls_lastc                   d S rR   r>   )rT   r   r   s      r@   sortzCompliantSeries.sort   rZ   r?   ddofc                   d S rR   r>   rT   r   s     r@   stdzCompliantSeries.std   rZ   r?   c                    d S rR   r>   rS   s    r@   sumzCompliantSeries.sum   rZ   r?   c                    d S rR   r>   r   s     r@   tailzCompliantSeries.tail   rZ   r?   pa.Array[Any]c                    d S rR   r>   rS   s    r@   to_arrowzCompliantSeries.to_arrow   rZ   r?   	separator
drop_first'CompliantDataFrame[Self, Any, Any, Any]c                   d S rR   r>   )rT   r   r   s      r@   
to_dummieszCompliantSeries.to_dummies       25#r?   c                    d S rR   r>   rS   s    r@   to_framezCompliantSeries.to_frame   rZ   r?   	list[Any]c                    d S rR   r>   rS   s    r@   to_listzCompliantSeries.to_list   rZ   r?   pd.Series[Any]c                    d S rR   r>   rS   s    r@   	to_pandaszCompliantSeries.to_pandas   rZ   r?   	pl.Seriesc                    d S rR   r>   rS   s    r@   	to_polarszCompliantSeries.to_polars   rZ   r?   F)maintain_orderr   c                   d S rR   r>   )rT   r   s     r@   uniquezCompliantSeries.unique   rZ   r?   r   parallel
str | None	normalizec                   d S rR   r>   )rT   r   r   rr   r   s        r@   value_countszCompliantSeries.value_counts   r   r?   c                   d S rR   r>   r   s     r@   varzCompliantSeries.var   rZ   r?   maskc                    d S rR   r>   )rT   r  rw   s      r@   zip_withzCompliantSeries.zip_with   rZ   r?   binslist[float]include_breakpointc                   dS )z(`Series.hist(bins=..., bin_count=None)`.Nr>   )rT   r  r
  s      r@   hist_from_binszCompliantSeries.hist_from_bins   	    
 	r?   	bin_countc                   dS )z(`Series.hist(bins=None, bin_count=...)`.Nr>   )rT   r  r
  s      r@   hist_from_bin_countz#CompliantSeries.hist_from_bin_count   r  r?   rP   r   )rP   r%   )rP   r#   )r[   r   r\   r+   rP   r%   )rP   ra   )rf   r   rP   r%   )rk   r*   rP   r%   )rP   r,   )rP   rp   )ro   r   rs   rt   rP   r4   )rw   r   rP   rx   )r|   r}   rP   r   )rP   r   )rP   r   )r[   r.   r\   r+   rP   r%   )
r[   rB   r\   r+   rr   rp   ro   r   rP   r%   )rw   r   rP   r%   rP   rx   )r   rx   rP   r1   )r   r   rP   r%   )rP   r1   )r   r   r   r   rP   r%   )r   r   rP   r%   )r   rx   rP   rx   )r   r   rP   r   )rP   r   )rP   r   )rP   r   )r   r   r   r2   rP   r   )
r   r   r   r   r   rx   r   r   rP   r%   )r   r%   r   r%   rP   r%   )r   rx   r   rx   rP   r%   )r   r   rP   r   )rP   r   )r   rp   r   rx   rP   r   )rP   r   )rP   r   )rP   r   )rP   r   )r   rx   rP   r%   )
r   rx   r   rx   rr   r   r   rx   rP   r   )r  r   rw   r   rP   r%   )r  r	  r
  rx   rP   r   )r  r   r
  rx   rP   r   )Gr:   r;   r<   r=   propertyrU   rW   rY   classmethodr`   rg   rj   rm   ro   rr   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r9   r   r   r   r   r   r   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r  r  r>   r?   r@   rE   rE   L   s         $###*** X*    6555ZZZ [Z8 8 8 8 5444:::: !!! X! XJJJJ3333EEEE,,,,        WWW [W "&     [ 0///////////....DDDD!!!!!!!!####1111))))((((<<<<''''    :9991111++++    """"""""$$$$       @???((((''''FFFF----'''',,,,6 6 6 6 GFFF''''....))))/4BBBBBB6 6 6 6 .---::::    X    X  r?   rE   )r4   r.   ra   c                     e Zd ZU ded<   ded<   ded<   ded<   ed,d            Zed-d            Zd.dZddd/dZ	d0dZ
d1dZd2dZd3d Zed4d"            Zed5d$            Zed6d&            Zed7d(            Zed8d*            Zd+S )9rF   r   _native_seriesr)   rO   r*   re   rx   
_broadcastrP   tuple[int, ...]c                4    | j                                         S rR   )rO   _backend_versionrS   s    r@   r  zEagerSeries._backend_version   s    #44666r?   rf   r%   Sequence[Self]c                    dS )a  Ensure all of `series` have the same length (and index if `pandas`).

        Scalars get broadcasted to the full length of the longest Series.

        This is useful when you need to construct a full Series anyway, such as:

            DataFrame.select(...)

        It should not be used in binary operations, such as:

            nw.col("a") - nw.col("a").mean()

        because then it's more efficient to extract the right-hand-side's single element as a scalar.
        Nr>   )r_   rf   s     r@   _align_full_broadcastz!EagerSeries._align_full_broadcast   s	      	r?   valuec                >    |                      |g| j        |           S )N)rr   r\   )r   rr   )rT   r  s     r@   _from_scalarzEagerSeries._from_scalar   s!    !!5'	4!HHHr?   F)preserve_broadcastr   r!  c                   dS )a  Return a new `CompliantSeries`, wrapping the native `series`.

        In cases when operations are known to not affect whether a result should
        be broadcast, we can pass `preserve_broadcast=True`.
        Set this with care - it should only be set for unary expressions which don't
        change length or order, such as `.alias` or `.fill_null`. If in doubt, don't
        set it, you probably don't need it.
        Nr>   )rT   rf   r!  s      r@   rj   zEagerSeries._with_native   s	     	r?   2EagerNamespace[Any, Self, Any, Any, NativeSeriesT]c                    d S rR   r>   rS   s    r@   __narwhals_namespace__z"EagerSeries.__narwhals_namespace__   s    =@Sr?   rows&SizedMultiIndexSelector[NativeSeriesT]c                    d S rR   r>   rT   r&  s     r@   _gatherzEagerSeries._gather   rZ   r?   _SliceIndex | rangec                    d S rR   r>   r)  s     r@   _gather_slicezEagerSeries._gather_slice   rZ   r?   r|   r}   c                    t          |t          t          f          r|                     |          S t	          |          r|                     |j                  S t          |          r|                     |          S t          |           d S rR   )	
isinstancesliceranger-  r   r*  rU   r   r   r   s     r@   r   zEagerSeries.__getitem__   s    dUEN++ 	,%%d+++t$$ 	&<<,,,*400 	&<<%%%Tr?   /EagerSeriesStringNamespace[Self, NativeSeriesT]c                    d S rR   r>   rS   s    r@   rp   zEagerSeries.str  s    FIcr?   1EagerSeriesDateTimeNamespace[Self, NativeSeriesT]c                    d S rR   r>   rS   s    r@   dtzEagerSeries.dt  s    GJsr?   ,EagerSeriesCatNamespace[Self, NativeSeriesT]c                    d S rR   r>   rS   s    r@   catzEagerSeries.cat
  s    CF3r?   -EagerSeriesListNamespace[Self, NativeSeriesT]c                    d S rR   r>   rS   s    r@   listzEagerSeries.list  s    EHSr?   /EagerSeriesStructNamespace[Self, NativeSeriesT]c                    d S rR   r>   rS   s    r@   structzEagerSeries.struct  s    ILr?   NrP   r  )rf   r%   rP   r  )r  r   rP   r%   )rf   r   r!  rx   rP   r%   )rP   r#  )r&  r'  rP   r%   )r&  r+  rP   r%   )r|   r}   rP   r%   )rP   r2  )rP   r4  )rP   r7  )rP   r:  )rP   r=  )r:   r;   r<   r=   r  r  r  r  r   rj   r%  r*  r-  r   rp   r6  r9  r<  r?  r>   r?   r@   rF   rF      st        ####7 7 7 X7    ["I I I I DI     A A A A QPPPCCCC    III XIJJJ XJFFF XFHHH XHLLL XLLLr?   rF   c                      e Zd ZU ded<   edd            Zedd            Zedd            Zedd
            Zedd            Z	ddZ
dS )_SeriesNamespacer   _compliant_seriesrP   c                    | j         S rR   rC  rS   s    r@   	compliantz_SeriesNamespace.compliant  s    %%r?   r)   c                    | j         j        S rR   )rF  rO   rS   s    r@   implementationz_SeriesNamespace.implementation  s    ~--r?   r  c                4    | j                                         S rR   )rH  r  rS   s    r@   backend_versionz _SeriesNamespace.backend_version!  s    "33555r?   r*   c                    | j         j        S rR   )rF  re   rS   s    r@   rk   z_SeriesNamespace.version%  s    ~&&r?   r   c                    | j         j        S rR   )rC  rU   rS   s    r@   rU   z_SeriesNamespace.native)  s    %,,r?   rf   r   c               6    | j                             |          S rR   )rF  rj   ri   s     r@   with_nativez_SeriesNamespace.with_native-  s    ~**6222r?   N)rP   r   )rP   r)   r@  )rP   r*   )rP   r   )rf   r   rP   r   )r:   r;   r<   r=   r  rF  rH  rJ  rk   rU   rN  r>   r?   r@   rB  rB    s         
 +***& & & X& . . . X. 6 6 6 X6 ' ' ' X' - - - X-3 3 3 3 3 3r?   rB  c                  "    e Zd ZU ded<   ddZdS )	rK   r   rC  rf   rP   Nonec                   || _         d S rR   rE  ri   s     r@   __init__zEagerSeriesNamespace.__init__7  s    !'r?   N)rf   r   rP   rP  )r:   r;   r<   r=   rR  r>   r?   r@   rK   rK   1  s8          '&&&( ( ( ( ( (r?   rK   c                      e Zd ZdS )rG   Nr:   r;   r<   r>   r?   r@   rG   rG   ;           3r?   rG   c                      e Zd ZdS )rH   NrT  r>   r?   r@   rH   rH   B  rU  r?   rH   c                      e Zd ZdS )rJ   NrT  r>   r?   r@   rJ   rJ   I  rU  r?   rJ   c                      e Zd ZdS )rL   NrT  r>   r?   r@   rL   rL   P  rU  r?   rL   c                      e Zd ZdS )rM   NrT  r>   r?   r@   rM   rM   W  rU  r?   rM   c                      e Zd ZU ded<   ded<   ded<   ed*d	            Zed+d            Zd,dZddd-dZ	d.dZ
d/dZd0dZd1d"Zd2d$Zd3d&Zd4d'Zd5d(Zd)S )6rI   EagerSeries[NativeSeriesT]_seriesrx   _breakpoint$HistData[NativeSeriesT, _CountsT_co]_datarP   r   c                    | j         j        S rR   )r\  rU   rS   s    r@   rU   zEagerSeriesHist.nativec  s    |""r?   rf   r
  r%   c               L    |                      |           }||_        ||_        |S rR   )__new__r\  r]  )r_   rf   r
  objs       r@   from_serieszEagerSeriesHist.from_seriesg  s(     kk#,
r?   r   c                    d S rR   r>   rS   s    r@   r   zEagerSeriesHist.to_framep  rZ   r?   both)closedstartr   endnum_samplesr   rg  Literal['both', 'none']r4   c                   d S rR   r>   )rT   rh  ri  rj  rg  s        r@   _linear_spacezEagerSeriesHist._linear_spaceq  s	     3r?   c                    d S rR   r>   rS   s    r@   is_empty_serieszEagerSeriesHist.is_empty_series{  rZ   r?   c                "    | j         rg g dndg iS )N)r8   r9   r9   )r]  rS   s    r@   
data_emptyzEagerSeriesHist.data_empty~  s"    262BUb2...RTUr?   argint | list[float]c                   d S rR   r>   )rT   rr  s     r@   series_emptyzEagerSeriesHist.series_empty      /2sr?   r  r	  c                   t          |          dk    r|                                 | _        nI|                                 r|                     |          | _        n|                     |          | _        | S )N   )r   rq  r_  ro  ru  _calculate_histrT   r  s     r@   	with_binszEagerSeriesHist.with_bins  si    t99>>**DJJ!!## 	4**400DJJ--d33DJr?   r  c                   |dk    r|                                  | _        n\|                                 r|                     |          | _        n-|                     |                     |                    | _        | S r   )rq  r_  ro  ru  ry  _calculate_binsrT   r  s     r@   with_bin_countzEagerSeriesHist.with_bin_count  sr    >>**DJJ!!## 	O**955DJJ--d.B.B9.M.MNNDJr?   list[float] | _1DArrayc               x    t          |t                    r|                     dd|dz             n|}|dd          S )Nr   rx  )r/  r   rm  )rT   rr  r  s      r@   _calculate_breakpointz%EagerSeriesHist._calculate_breakpoint  s>    4>sC4H4HQt!!!Qa000cABBxr?   c                    d S rR   r>   r~  s     r@   r}  zEagerSeriesHist._calculate_bins  rZ   r?   c                    d S rR   r>   rz  s     r@   ry  zEagerSeriesHist._calculate_hist  rv  r?   Nr  )rf   r[  r
  rx   rP   r%   )rP   r   )
rh  r   ri  r   rj  r   rg  rk  rP   r4   r  )rP   r^  )rr  rs  rP   r^  )r  r	  rP   r%   )r  r   rP   r%   )rr  rs  rP   r  )r  r   rP   r4   )r  r  rP   r^  )r:   r;   r<   r=   r  rU   r  rd  r   rm  ro  rq  ru  r{  r  r  r}  ry  r>   r?   r@   rI   rI   ^  sA        ''''////# # # X#    [ 1000 +1      +***V V V V
3 3 3 3          ?>>>3 3 3 3 3 3r?   rI   )V
__future__r   typingr   r   r   r   r   !narwhals._compliant.any_namespacer	   r
   r   r   r   narwhals._compliant.columnr   narwhals._compliant.typingr   r   r   r   r   r   narwhals._translater   r   r   r   narwhals._typing_compatr   r   narwhals._utilsr   r   r   r   r   collections.abcr    r!   r"   typesr#   pandaspdpolarsplpyarrowpatyping_extensionsr$   r%   r&   narwhals._compliant.dataframer'   narwhals._compliant.namespacer(   r)   r*   r+   narwhals.dtypesr,   narwhals.seriesr-   narwhals.typingr.   r/   r0   r1   r2   r3   r4   r5   r7   rA   __all__rE   rF   rB  rK   rG   rH   rJ   rL   rM   rI   r>   r?   r@   <module>r     s   " " " " " " A A A A A A A A A A A A A A              7 6 6 6 6 6                W V V V V V V V V V V V 9 9 9 9 9 9 9 9               B<<<<<<<<<<      >>>>>>>>>>@@@@@@<<<<<<HHHHHHHHHH%%%%%%&&&&&&	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	B B B B B9gm]&BC B B B
 gm?dKKK
 
 
| | | | |./}&']| | |~DM DM DM DM DM/-0(=2I DM DM DMN3 3 3 3 3()"# "2233 3 3>( ( ( ( (_&667O--.( ( (    _&667!_../      _&667o&_../      \#334,\++,      \#334L!\++,      _&667O$_../  B3 B3 B3 B3 B3h}k9: B3 B3 B3 B3 B3r?   