§
    ¦˜ºhªU  ã                   óò   — d dl Z d dlmZmZ d dlZddlmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZ 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 d
dlmZ  ej         d
¦  «        Z!d„ Z" G d„ dee
e	e¦  «        Z#dS )é    N)ÚIntegralÚRealé   )ÚBaseEstimatorÚMetaEstimatorMixinÚMultiOutputMixinÚRegressorMixinÚ_fit_contextÚclone)ÚConvergenceWarning)Úcheck_consistent_lengthÚcheck_random_state)Ú
HasMethodsÚIntervalÚOptionsÚ
RealNotIntÚ
StrOptions)Úsample_without_replacement)Ú_check_sample_weightÚcheck_is_fittedÚhas_fit_parameteré   )ÚLinearRegressionc           
      óp  — | t          |¦  «        z  }t          t          d|z
  ¦  «        }t          t          d||z  z
  ¦  «        }|dk    rdS |dk    rt          d¦  «        S t          t          t	          j        t	          j        |¦  «        t	          j        |¦  «        z  ¦  «        ¦  «        ¦  «        S )a  Determine number trials such that at least one outlier-free subset is
    sampled for the given inlier/outlier ratio.

    Parameters
    ----------
    n_inliers : int
        Number of inliers in the data.

    n_samples : int
        Total number of samples in the data.

    min_samples : int
        Minimum number of samples chosen randomly from original data.

    probability : float
        Probability (confidence) that one outlier-free sample is generated.

    Returns
    -------
    trials : int
        Number of trials.

    r   r   Úinf)ÚfloatÚmaxÚ_EPSILONÚabsÚnpÚceilÚlog)Ú	n_inliersÚ	n_samplesÚmin_samplesÚprobabilityÚinlier_ratioÚnomÚdenoms          úd/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/sklearn/linear_model/_ransac.pyÚ_dynamic_max_trialsr+   "   sš   € ð0 �u YÑ/Ô/Ñ/€LÝ
�h˜˜K™Ñ
(Ô
(€CÝ•˜!˜l¨KÑ7Ñ7Ñ8Ô8€EØ
ˆa‚x€xØˆqØ�‚z€zÝ�U‰|Œ|ÐÝ�u•R”W�RœV C™[œ[­2¬6°%©=¬=Ñ8Ñ9Ô9Ñ:Ô:Ñ;Ô;Ð;ó    c                   óD  — e Zd ZU dZ eg d¢¦  «        dg eeddd¬¦  «         eeddd¬¦  «        dg eeddd¬¦  «        dge	dge	dg eeddd¬¦  «         e
eej        h¦  «        g eeddd¬¦  «         e
eej        h¦  «        g eeddd¬¦  «         e
eej        h¦  «        g eeddd¬¦  «        g eeddd¬¦  «        g ed	d
h¦  «        e	gdgdœZeed<   	 ddddddej        ej        ej        dd	ddœd„Z ed¬¦  «        dd„¦   «         Zd„ Zd„ Zd„ ZdS )ÚRANSACRegressora  RANSAC (RANdom SAmple Consensus) algorithm.

    RANSAC is an iterative algorithm for the robust estimation of parameters
    from a subset of inliers from the complete data set.

    Read more in the :ref:`User Guide <ransac_regression>`.

    Parameters
    ----------
    estimator : object, default=None
        Base estimator object which implements the following methods:

         * `fit(X, y)`: Fit model to given training data and target values.
         * `score(X, y)`: Returns the mean accuracy on the given test data,
           which is used for the stop criterion defined by `stop_score`.
           Additionally, the score is used to decide which of two equally
           large consensus sets is chosen as the better one.
         * `predict(X)`: Returns predicted values using the linear model,
           which is used to compute residual error using loss function.

        If `estimator` is None, then
        :class:`~sklearn.linear_model.LinearRegression` is used for
        target values of dtype float.

        Note that the current implementation only supports regression
        estimators.

    min_samples : int (>= 1) or float ([0, 1]), default=None
        Minimum number of samples chosen randomly from original data. Treated
        as an absolute number of samples for `min_samples >= 1`, treated as a
        relative number `ceil(min_samples * X.shape[0])` for
        `min_samples < 1`. This is typically chosen as the minimal number of
        samples necessary to estimate the given `estimator`. By default a
        :class:`~sklearn.linear_model.LinearRegression` estimator is assumed and
        `min_samples` is chosen as ``X.shape[1] + 1``. This parameter is highly
        dependent upon the model, so if a `estimator` other than
        :class:`~sklearn.linear_model.LinearRegression` is used, the user must
        provide a value.

    residual_threshold : float, default=None
        Maximum residual for a data sample to be classified as an inlier.
        By default the threshold is chosen as the MAD (median absolute
        deviation) of the target values `y`. Points whose residuals are
        strictly equal to the threshold are considered as inliers.

    is_data_valid : callable, default=None
        This function is called with the randomly selected data before the
        model is fitted to it: `is_data_valid(X, y)`. If its return value is
        False the current randomly chosen sub-sample is skipped.

    is_model_valid : callable, default=None
        This function is called with the estimated model and the randomly
        selected data: `is_model_valid(model, X, y)`. If its return value is
        False the current randomly chosen sub-sample is skipped.
        Rejecting samples with this function is computationally costlier than
        with `is_data_valid`. `is_model_valid` should therefore only be used if
        the estimated model is needed for making the rejection decision.

    max_trials : int, default=100
        Maximum number of iterations for random sample selection.

    max_skips : int, default=np.inf
        Maximum number of iterations that can be skipped due to finding zero
        inliers or invalid data defined by ``is_data_valid`` or invalid models
        defined by ``is_model_valid``.

        .. versionadded:: 0.19

    stop_n_inliers : int, default=np.inf
        Stop iteration if at least this number of inliers are found.

    stop_score : float, default=np.inf
        Stop iteration if score is greater equal than this threshold.

    stop_probability : float in range [0, 1], default=0.99
        RANSAC iteration stops if at least one outlier-free set of the training
        data is sampled in RANSAC. This requires to generate at least N
        samples (iterations)::

            N >= log(1 - probability) / log(1 - e**m)

        where the probability (confidence) is typically set to high value such
        as 0.99 (the default) and e is the current fraction of inliers w.r.t.
        the total number of samples.

    loss : str, callable, default='absolute_error'
        String inputs, 'absolute_error' and 'squared_error' are supported which
        find the absolute error and squared error per sample respectively.

        If ``loss`` is a callable, then it should be a function that takes
        two arrays as inputs, the true and predicted value and returns a 1-D
        array with the i-th value of the array corresponding to the loss
        on ``X[i]``.

        If the loss on a sample is greater than the ``residual_threshold``,
        then this sample is classified as an outlier.

        .. versionadded:: 0.18

    random_state : int, RandomState instance, default=None
        The generator used to initialize the centers.
        Pass an int for reproducible output across multiple function calls.
        See :term:`Glossary <random_state>`.

    Attributes
    ----------
    estimator_ : object
        Best fitted model (copy of the `estimator` object).

    n_trials_ : int
        Number of random selection trials until one of the stop criteria is
        met. It is always ``<= max_trials``.

    inlier_mask_ : bool array of shape [n_samples]
        Boolean mask of inliers classified as ``True``.

    n_skips_no_inliers_ : int
        Number of iterations skipped due to finding zero inliers.

        .. versionadded:: 0.19

    n_skips_invalid_data_ : int
        Number of iterations skipped due to invalid data defined by
        ``is_data_valid``.

        .. versionadded:: 0.19

    n_skips_invalid_model_ : int
        Number of iterations skipped due to an invalid model defined by
        ``is_model_valid``.

        .. versionadded:: 0.19

    n_features_in_ : int
        Number of features seen during :term:`fit`.

        .. versionadded:: 0.24

    feature_names_in_ : ndarray of shape (`n_features_in_`,)
        Names of features seen during :term:`fit`. Defined only when `X`
        has feature names that are all strings.

        .. versionadded:: 1.0

    See Also
    --------
    HuberRegressor : Linear regression model that is robust to outliers.
    TheilSenRegressor : Theil-Sen Estimator robust multivariate regression model.
    SGDRegressor : Fitted by minimizing a regularized empirical loss with SGD.

    References
    ----------
    .. [1] https://en.wikipedia.org/wiki/RANSAC
    .. [2] https://www.sri.com/wp-content/uploads/2021/12/ransac-publication.pdf
    .. [3] http://www.bmva.org/bmvc/2009/Papers/Paper355/Paper355.pdf

    Examples
    --------
    >>> from sklearn.linear_model import RANSACRegressor
    >>> from sklearn.datasets import make_regression
    >>> X, y = make_regression(
    ...     n_samples=200, n_features=2, noise=4.0, random_state=0)
    >>> reg = RANSACRegressor(random_state=0).fit(X, y)
    >>> reg.score(X, y)
    0.9885...
    >>> reg.predict(X[:1,])
    array([-31.9417...])
    )ÚfitÚscoreÚpredictNr   Úleft)Úclosedr   ÚbothÚabsolute_errorÚsquared_errorÚrandom_state)Ú	estimatorr%   Úresidual_thresholdÚis_data_validÚis_model_validÚ
max_trialsÚ	max_skipsÚstop_n_inliersÚ
stop_scoreÚstop_probabilityÚlossr7   Ú_parameter_constraintséd   g®Gáz®ï?)r%   r9   r:   r;   r<   r=   r>   r?   r@   rA   r7   c                ó®   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        d S ©N)r8   r%   r9   r:   r;   r<   r=   r>   r?   r@   r7   rA   )Úselfr8   r%   r9   r:   r;   r<   r=   r>   r?   r@   rA   r7   s                r*   Ú__init__zRANSACRegressor.__init__  sc   € ð  #ˆŒØ&ˆÔØ"4ˆÔØ*ˆÔØ,ˆÔØ$ˆŒØ"ˆŒØ,ˆÔØ$ˆŒØ 0ˆÔØ(ˆÔØˆŒ	ˆ	ˆ	r,   F)Úprefer_skip_nested_validationc           	      óœ
  — t          dd¬¦  «        }t          d¬¦  «        }|                      ||||f¬¦  «        \  }}t          ||¦  «         | j        �t	          | j        ¦  «        }nt          ¦   «         }| j        €5t          |t
          ¦  «        st          d¦  «        ‚|j	        d         dz   }nOd	| j        cxk     rdk     r+n n(t          j        | j        |j	        d	         z  ¦  «        }n| j        dk    r| j        }||j	        d	         k    rt          d
|j	        d	         z  ¦  «        ‚| j        €<t          j        t          j        |t          j        |¦  «        z
  ¦  «        ¦  «        }n| j        }| j        dk    r|j        dk    rd„ }	n=d„ }	n9| j        dk    r|j        dk    rd„ }	nd„ }	nt#          | j        ¦  «        r| j        }	t%          | j        ¦  «        }
	 |                     |
¬¦  «         n# t          $ r Y nw xY wt+          |d¦  «        }t-          |¦  «        j        }|�|st          d|z  ¦  «        ‚|�t1          ||¦  «        }d}t          j         }d}d}d}d}d	| _        d	| _        d	| _        |j	        d	         }t          j        |¦  «        }d	| _        | j        }| j        |k     �rË| xj        dz  c_        | j        | j        z   | j        z   | j         k    r�n™tC          |||
¬¦  «        }||         }||         }| j"        �'|  "                    ||¦  «        s| xj        dz  c_        ŒŽ|€| #                    ||¦  «         n| #                    ||||         ¬¦  «         | j$        �(|  $                    |||¦  «        s| xj        dz  c_        Œô| %                    |¦  «        } |	||¦  «        }||k    }t          j&        |¦  «        }||k     r| xj        dz  c_        �ŒG||         }||         }||         }| '                    ||¦  «        } ||k    r| |k     r�Œƒ|}| }|}|}|}|}tQ          |tS          |||| j*        ¦  «        ¦  «        }|| j+        k    s|| j,        k    rn| j        |k     �°Ë|€>| j        | j        z   | j        z   | j         k    rt          d¦  «        ‚t          d¦  «        ‚| j        | j        z   | j        z   | j         k    rt[          j.        dt^          ¦  «         |€| #                    ||¦  «         n| #                    ||||         ¬¦  «         || _0        || _1        | S )a  Fit estimator using RANSAC algorithm.

        Parameters
        ----------
        X : {array-like, sparse matrix} of shape (n_samples, n_features)
            Training data.

        y : array-like of shape (n_samples,) or (n_samples, n_targets)
            Target values.

        sample_weight : array-like of shape (n_samples,), default=None
            Individual weights for each sample
            raises error if sample_weight is passed and estimator
            fit method does not support it.

            .. versionadded:: 0.18

        Returns
        -------
        self : object
            Fitted `RANSACRegressor` estimator.

        Raises
        ------
        ValueError
            If no valid consensus set could be found. This occurs if
            `is_data_valid` and `is_model_valid` return False for all
            `max_trials` randomly chosen sub-samples.
        ÚcsrF)Úaccept_sparseÚforce_all_finite)Ú	ensure_2d)Úvalidate_separatelyNzR`min_samples` needs to be explicitly set when estimator is not a LinearRegression.r   r   zG`min_samples` may not be larger than number of samples: n_samples = %d.r5   c                 ó0   — t          j        | |z
  ¦  «        S rE   )r    r   ©Úy_trueÚy_preds     r*   ú<lambda>z%RANSACRegressor.fit.<locals>.<lambda>s  s   € µr´v¸fÀv¹oÑ7NÔ7N€ r,   c                 óX   — t          j        t          j        | |z
  ¦  «        d¬¦  «        S )Nr   ©Úaxis)r    Úsumr   rP   s     r*   rS   z%RANSACRegressor.fit.<locals>.<lambda>u  s*   € µr´vÝ”F˜6 F™?Ñ+Ô+°!ð8ñ 8ô 8€ r,   r6   c                 ó   — | |z
  dz  S )Nr   © rP   s     r*   rS   z%RANSACRegressor.fit.<locals>.<lambda>z  s   € ¸À¹ÈAÑ7M€ r,   c                 ó:   — t          j        | |z
  dz  d¬¦  «        S )Nr   r   rU   )r    rW   rP   s     r*   rS   z%RANSACRegressor.fit.<locals>.<lambda>|  s%   € µr´vØ˜f‘_¨Ñ*°ð8ñ 8ô 8€ r,   )r7   Úsample_weightz\%s does not support sample_weight. Samples weights are only used for the calibration itself.)r[   zèRANSAC skipped more iterations than `max_skips` without finding a valid consensus set. Iterations were skipped because each randomly chosen sub-sample failed the passing criteria. See estimator attributes for diagnostics (n_skips*).zÏRANSAC could not find a valid consensus set. All `max_trials` iterations were skipped because each randomly chosen sub-sample failed the passing criteria. See estimator attributes for diagnostics (n_skips*).zšRANSAC found a valid consensus set but exited early due to skipping more iterations than `max_skips`. See estimator attributes for diagnostics (n_skips*).)2ÚdictÚ_validate_datar   r8   r   r   r%   Ú
isinstanceÚ
ValueErrorÚshaper    r!   r9   Úmedianr   rA   ÚndimÚcallabler   r7   Ú
set_paramsr   ÚtypeÚ__name__r   r   Ún_skips_no_inliers_Ún_skips_invalid_data_Ún_skips_invalid_model_ÚarangeÚ	n_trials_r<   r=   r   r:   r/   r;   r1   rW   r0   Úminr+   r@   r>   r?   ÚwarningsÚwarnr   Ú
estimator_Úinlier_mask_)!rF   ÚXÚyr[   Úcheck_X_paramsÚcheck_y_paramsr8   r%   r9   Úloss_functionr7   Úestimator_fit_has_sample_weightÚestimator_nameÚn_inliers_bestÚ
score_bestÚinlier_mask_bestÚX_inlier_bestÚy_inlier_bestÚinlier_best_idxs_subsetr$   Úsample_idxsr<   Úsubset_idxsÚX_subsetÚy_subsetrR   Úresiduals_subsetÚinlier_mask_subsetÚn_inliers_subsetÚinlier_idxs_subsetÚX_inlier_subsetÚy_inlier_subsetÚscore_subsets!                                    r*   r/   zRANSACRegressor.fit)  sÆ  € õJ ¨EÀEÐJÑJÔJˆÝ¨Ð.Ñ.Ô.ˆØ×"Ò"Øˆq ~°~Ð&Fð #ñ 
ô 
‰ˆˆ1õ 	   1Ñ%Ô%Ð%àŒ>Ð%Ý˜dœnÑ-Ô-ˆIˆIå(Ñ*Ô*ˆIàÔÐ#Ý˜iÕ)9Ñ:Ô:ð Ý ð1ñô ð ð œ' !œ* q™.ˆKˆKØ�Ô!Ð%Ð%Ò%Ð% AÒ%Ð%Ð%Ð%Ð%Ýœ' $Ô"2°Q´W¸Q´ZÑ"?Ñ@Ô@ˆKˆKØÔ Ò"Ð"ØÔ*ˆKØ˜œ œÒ#Ð#Ýð.Ø12´¸´ñ=ñô ð ð
 Ô"Ð*å!#¤­2¬6°!µb´iÀ±l´lÑ2BÑ+CÔ+CÑ!DÔ!DÐÐà!%Ô!8ÐàŒ9Ð(Ò(Ð(ØŒv˜Š{ˆ{Ø NÐ N��ð!ð !��ð ŒY˜/Ò)Ð)ØŒv˜Š{ˆ{Ø MÐ M��ð!ð !��õ �d”iÑ Ô ð 	&Ø œIˆMå)¨$Ô*;Ñ<Ô<ˆð	Ø× Ò ¨lÐ Ñ;Ô;Ð;Ð;øÝð 	ð 	ð 	ØˆDð	øøøõ +<¸IÀÑ*WÔ*WÐ'Ý˜i™œÔ1ˆØÐ$Ð-LÐ$Ýðà+ñ,ñô ð ð
 Ð$Ý0°ÀÑBÔBˆMàˆÝ”f�Wˆ
ØÐØˆØˆØ"&ÐØ#$ˆÔ Ø%&ˆÔ"Ø&'ˆÔ#ð ”G˜A”Jˆ	Ý”i 	Ñ*Ô*ˆàˆŒØ”_ˆ
ØŒn˜zÒ)Ñ)ØˆNŒN˜aÑˆNŒNð Ô(ØÔ,ñ-àÔ-ñ.ð ”ò	ð ñ
 õ 5Ø˜;°\ðñ ô ˆKð ˜”~ˆHØ˜”~ˆHð Ô!Ð-°d×6HÒ6HØ˜(ñ7ô 7Ð-ð Ð*Ô*¨aÑ/Ð*Ô*Øð Ð$Ø—’˜h¨Ñ1Ô1Ð1Ð1à—’Ø˜h°mÀKÔ6Pð ñ ô ð ð
 Ô"Ð.°t×7JÒ7JØ˜8 Xñ8ô 8Ð.ð Ð+Ô+¨qÑ0Ð+Ô+Øð ×&Ò& qÑ)Ô)ˆFØ,˜}¨Q°Ñ7Ô7Ðð "2Ð5GÒ!GÐÝ!œvÐ&8Ñ9Ô9Ðð   .Ò0Ð0ØÐ(Ô(¨AÑ-Ð(Ô(Ùð "-Ð-?Ô!@ÐØÐ 2Ô3ˆOØÐ 2Ô3ˆOð %Ÿ?š?¨?¸OÑLÔLˆLð   >Ò1Ð1°lÀZÒ6OÐ6OÙð .ˆNØ%ˆJØ1ÐØ+ˆMØ+ˆMØ&8Ð#åØÝ#Ø" I¨{¸DÔ<Qñô ñô ˆJð  Ô!4Ò4Ð4¸
ÀdÄoÒ8UÐ8UØðe Œn˜zÒ)Ñ)ðj Ð#àÔ(ØÔ,ñ-àÔ-ñ.ð ”ò	ð õ
 !ð/ñô ð õ !ðLñô ð ð Ô(ØÔ,ñ-àÔ-ñ.ð ”ò	ð õ
 ”ð3õ
 'ñô ð ð Ð Ø�MŠM˜-¨Ñ7Ô7Ð7Ð7à�MŠMØØØ+Ð,CÔDð ñ ô ð ð $ˆŒØ,ˆÔØˆs   Ç(G? Ç?
HÈHc                 ó†   — t          | ¦  «         |                      |ddd¬¦  «        }| j                             |¦  «        S )au  Predict using the estimated model.

        This is a wrapper for `estimator_.predict(X)`.

        Parameters
        ----------
        X : {array-like or sparse matrix} of shape (n_samples, n_features)
            Input data.

        Returns
        -------
        y : array, shape = [n_samples] or [n_samples, n_targets]
            Returns predicted values.
        FT©rL   rK   Úreset)r   r]   ro   r1   )rF   rq   s     r*   r1   zRANSACRegressor.predict,  sP   € õ 	˜ÑÔÐØ×ÒØØ"ØØð	  ñ 
ô 
ˆð Œ×&Ò& qÑ)Ô)Ð)r,   c                 óˆ   — t          | ¦  «         |                      |ddd¬¦  «        }| j                             ||¦  «        S )a­  Return the score of the prediction.

        This is a wrapper for `estimator_.score(X, y)`.

        Parameters
        ----------
        X : (array-like or sparse matrix} of shape (n_samples, n_features)
            Training data.

        y : array-like of shape (n_samples,) or (n_samples, n_targets)
            Target values.

        Returns
        -------
        z : float
            Score of the prediction.
        FTrŠ   )r   r]   ro   r0   )rF   rq   rr   s      r*   r0   zRANSACRegressor.scoreD  sR   € õ$ 	˜ÑÔÐØ×ÒØØ"ØØð	  ñ 
ô 
ˆð Œ×$Ò$ Q¨Ñ*Ô*Ð*r,   c                 ó   — dddiiS )NÚ_xfail_checksÚcheck_sample_weights_invariancez8zero sample_weight is not equivalent to removing samplesrY   )rF   s    r*   Ú
_more_tagszRANSACRegressor._more_tags_  s   € àØ1ØNðð
ð 	
r,   rE   )rf   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   rc   r   r    r   r   rB   r\   Ú__annotations__rG   r
   r/   r1   r0   r�   rY   r,   r*   r.   r.   D   sR  € € € € € € ðgð gðT !�jÐ!<Ð!<Ð!<Ñ=Ô=¸tÐDàˆH�X˜q $¨vÐ6Ñ6Ô6ØˆH�Z  A¨fÐ5Ñ5Ô5Øð
ð
  (˜x¨¨a°¸fÐEÑEÔEÀtÐLØ" DÐ)Ø# TÐ*àˆH�X˜q $¨vÐ6Ñ6Ô6ØˆG�D˜2œ6˜(Ñ#Ô#ð
ð
 ˆH�X˜q $¨vÐ6Ñ6Ô6ØˆG�D˜2œ6˜(Ñ#Ô#ð
ð
 ˆH�X˜q $¨vÐ6Ñ6Ô6ØˆG�D˜2œ6˜(Ñ#Ô#ð
ð  �x  d¨D¸Ð@Ñ@Ô@ÐAØ%˜X d¨A¨q¸Ð@Ñ@Ô@ÐAØ�Ð-¨Ð?Ñ@Ô@À(ÐKØ'Ð(ð3$ð $Ð˜Dð ð ñ ð< ðð ØØØØØ”&Ø”vØ”6ØØØðð ð ð ð ð: €\à&+ðñ ô ð}ð }ð }ñ	ô ð}ð~*ð *ð *ð0+ð +ð +ð6
ð 
ð 
ð 
ð 
r,   r.   )$rm   Únumbersr   r   Únumpyr    Úbaser   r   r   r	   r
   r   Ú
exceptionsr   Úutilsr   r   Úutils._param_validationr   r   r   r   r   Úutils.randomr   Úutils.validationr   r   r   Ú_baser   Úspacingr   r+   r.   rY   r,   r*   ú<module>rŸ      sŸ  ðð
 €€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ #Ð #Ð #Ð #Ð #Ð #àˆ2Œ:�a‰=Œ=€ð<ð <ð <ðDb
ð b
ð b
ð b
ð b
Ø˜Ð(8¸-ñb
ô b
ð b
ð b
ð b
r,   