§
    Ý˜ºhNA  ã                   ó¨  — d Z ddlmZmZmZ ddlZ	 ddlmZ n# e	e
f$ r	 ddlmZ Y nw xY wddlmZ  eej        j        d¦  «        rej        j        j        Znej        j        Z G d„ d	ej        ¦  «        Z	 	 	 	 	 	 	 	 	 d dedededededededee         dee         dededeee                  fd„Z G d„ de¦  «        Z G d„ d¦  «        ZdS )!z?Functions and classes related to optimization (weight updates).é    )ÚCallableÚOptionalÚUnionN)ÚAdamé   )ÚkerasÚlearning_rate_schedulec                   óV   ‡ — e Zd ZdZ	 	 ddededededee         f
ˆ fd	„Z	d
„ Z
d„ Zˆ xZS )ÚWarmUpaì  
    Applies a warmup schedule on a given learning rate decay schedule.

    Args:
        initial_learning_rate (`float`):
            The initial learning rate for the schedule after the warmup (so this will be the learning rate at the end
            of the warmup).
        decay_schedule_fn (`Callable`):
            The schedule function to apply after the warmup for the rest of training.
        warmup_steps (`int`):
            The number of steps for the warmup part of training.
        power (`float`, *optional*, defaults to 1.0):
            The power to use for the polynomial warmup (defaults is a linear warmup).
        name (`str`, *optional*):
            Optional name prefix for the returned tensors during the schedule.
    ç      ð?NÚinitial_learning_rateÚdecay_schedule_fnÚwarmup_stepsÚpowerÚnamec                 óŽ   •— t          ¦   «                              ¦   «          || _        || _        || _        || _        || _        d S ©N)ÚsuperÚ__init__r   r   r   r   r   )Úselfr   r   r   r   r   Ú	__class__s         €úd/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/optimization_tf.pyr   zWarmUp.__init__7   sE   ø€ õ 	‰Œ×ÒÑÔÐØ%:ˆÔ"Ø(ˆÔØˆŒ
Ø!2ˆÔØˆŒ	ˆ	ˆ	ó    c                 ó¢  ‡ ‡‡— t          j        ‰ j        pd¦  «        5 }t          j        ‰t           j        ¦  «        }t          j        ‰ j        t           j        ¦  «        }||z  }‰ j        t           j                             |‰ j	        ¦  «        z  Št          j
        ||k     ˆfd„ˆ ˆfd„|¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr   c                  ó   •— ‰ S r   © )Úwarmup_learning_rates   €r   ú<lambda>z!WarmUp.__call__.<locals>.<lambda>P   s   ø€ Ð,€ r   c                  ó>   •— ‰                       ‰‰ j        z
  ¦  «        S r   )r   r   )r   Ústeps   €€r   r   z!WarmUp.__call__.<locals>.<lambda>Q   s   ø€ ˜×.Ò.¨t°dÔ6GÑ/GÑHÔH€ r   ©r   )ÚtfÚ
name_scoper   ÚcastÚfloat32r   r   ÚmathÚpowr   Úcond)r   r    r   Úglobal_step_floatÚwarmup_steps_floatÚwarmup_percent_doner   s   ``    @r   Ú__call__zWarmUp.__call__F   s  øøø€ ÝŒ]˜4œ9Ð0¨Ñ1Ô1ð 	°Tõ !#¤¨­b¬jÑ 9Ô 9ÐÝ!#¤¨Ô):½B¼JÑ!GÔ!GÐØ"3Ð6HÑ"HÐØ#'Ô#=ÅÄÇÂÐL_ÐaeÔakÑ@lÔ@lÑ#lÐ Ý”7Ø!Ð$6Ò6Ø,Ð,Ð,Ð,ØHÐHÐHÐHÐHØð	ñ ô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ŸBCÃCÃCc                 óD   — | j         | j        | j        | j        | j        dœS )N©r   r   r   r   r   r.   ©r   s    r   Ú
get_configzWarmUp.get_configU   s-   € à%)Ô%?Ø!%Ô!7Ø Ô-Ø”ZØ”Ið
ð 
ð 	
r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úfloatr   Úintr   Ústrr   r,   r0   Ú__classcell__©r   s   @r   r   r   %   s¦   ø€ € € € € ðð ð, Ø"ðð à$ðð $ðð ð	ð
 ðð �sŒmðð ð ð ð ð ðð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
r   r   ç        çÍÌÌÌÌÌì?ç+‡ÙÎ÷ï?ç:Œ0âŽyE>r   Úinit_lrÚnum_train_stepsÚnum_warmup_stepsÚmin_lr_ratioÚ
adam_beta1Ú
adam_beta2Úadam_epsilonÚadam_clipnormÚadam_global_clipnormÚweight_decay_rater   Úinclude_in_weight_decayc                 ó  — t                                | ||z
  | |z  |
¬¦  «        }|rt          | ||¬¦  «        }|	dk    rt          ||	|||||g d¢|¬¦	  «	        }n%t          j                             ||||||¬¦  «        }||fS )a­  
    Creates an optimizer with a learning rate schedule using a warmup phase followed by a linear decay.

    Args:
        init_lr (`float`):
            The desired learning rate at the end of the warmup phase.
        num_train_steps (`int`):
            The total number of training steps.
        num_warmup_steps (`int`):
            The number of warmup steps.
        min_lr_ratio (`float`, *optional*, defaults to 0):
            The final learning rate at the end of the linear decay will be `init_lr * min_lr_ratio`.
        adam_beta1 (`float`, *optional*, defaults to 0.9):
            The beta1 to use in Adam.
        adam_beta2 (`float`, *optional*, defaults to 0.999):
            The beta2 to use in Adam.
        adam_epsilon (`float`, *optional*, defaults to 1e-8):
            The epsilon to use in Adam.
        adam_clipnorm (`float`, *optional*, defaults to `None`):
            If not `None`, clip the gradient norm for each weight tensor to this value.
        adam_global_clipnorm (`float`, *optional*, defaults to `None`)
            If not `None`, clip gradient norm to this value. When using this argument, the norm is computed over all
            weight tensors, as if they were concatenated into a single vector.
        weight_decay_rate (`float`, *optional*, defaults to 0):
            The weight decay to use.
        power (`float`, *optional*, defaults to 1.0):
            The power to use for PolynomialDecay.
        include_in_weight_decay (`list[str]`, *optional*):
            List of the parameter names (or re patterns) to apply weight decay to. If none is passed, weight decay is
            applied to all parameters except bias and layer norm parameters.
    )r   Údecay_stepsÚend_learning_rater   )r   r   r   r:   )Ú	LayerNormÚ
layer_normÚbias)	Úlearning_raterG   Úbeta_1Úbeta_2ÚepsilonÚclipnormÚglobal_clipnormÚexclude_from_weight_decayrH   )rO   rP   rQ   rR   rS   rT   )Ú	schedulesÚPolynomialDecayr   ÚAdamWeightDecayr   Ú
optimizersr   )r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r   rH   Úlr_scheduleÚ	optimizers                 r   Úcreate_optimizerr\   _   sß   € õ\ ×+Ò+Ø%Ø#Ð&6Ñ6Ø! LÑ0Øð	 ,ñ ô €Kð ð 
ÝØ")Ø)Ø)ð
ñ 
ô 
ˆð
 ˜3ÒÐÝ#Ø%Ø/ØØØ Ø"Ø0Ø&IÐ&IÐ&IØ$;ð

ñ 

ô 

ˆ	ˆ	õ Ô$×)Ò)Ø%ØØØ Ø"Ø0ð *ñ 
ô 
ˆ	ð �kÐ!Ð!r   c                   ó
  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 dd	eeej        f         d
ededededede	e
e                  de	e
e                  defˆ fd„Zeˆ fd„¦   «         Zˆ fd„Zd„ Zdˆ fd„	Zd„ Zdˆ fd„	Zdˆ fd„	Zˆ fd„Zd„ Zˆ xZS )rX   am
  
    Adam enables L2 weight decay and clip_by_global_norm on gradients. Just adding the square of the weights to the
    loss function is *not* the correct way of using L2 regularization/weight decay with Adam, since that will interact
    with the m and v parameters in strange ways as shown in [Decoupled Weight Decay
    Regularization](https://huggingface.co/papers/1711.05101).

    Instead we want to decay the weights in a manner that doesn't interact with the m/v parameters. This is equivalent
    to adding the square of the weights to the loss with plain (non-momentum) SGD.

    Args:
        learning_rate (`Union[float, LearningRateSchedule]`, *optional*, defaults to 0.001):
            The learning rate to use or a schedule.
        beta_1 (`float`, *optional*, defaults to 0.9):
            The beta1 parameter in Adam, which is the exponential decay rate for the 1st momentum estimates.
        beta_2 (`float`, *optional*, defaults to 0.999):
            The beta2 parameter in Adam, which is the exponential decay rate for the 2nd momentum estimates.
        epsilon (`float`, *optional*, defaults to 1e-07):
            The epsilon parameter in Adam, which is a small constant for numerical stability.
        amsgrad (`bool`, *optional*, defaults to `False`):
            Whether to apply AMSGrad variant of this algorithm or not, see [On the Convergence of Adam and
            Beyond](https://huggingface.co/papers/1904.09237).
        weight_decay_rate (`float`, *optional*, defaults to 0.0):
            The weight decay to apply.
        include_in_weight_decay (`list[str]`, *optional*):
            List of the parameter names (or re patterns) to apply weight decay to. If none is passed, weight decay is
            applied to all parameters by default (unless they are in `exclude_from_weight_decay`).
        exclude_from_weight_decay (`list[str]`, *optional*):
            List of the parameter names (or re patterns) to exclude from applying weight decay to. If a
            `include_in_weight_decay` is passed, the names in it will supersede this list.
        name (`str`, *optional*, defaults to `"AdamWeightDecay"`):
            Optional name for the operations created when applying gradients.
        kwargs (`dict[str, Any]`, *optional*):
            Keyword arguments. Allowed to be {`clipnorm`, `clipvalue`, `lr`, `decay`}. `clipnorm` is clip gradients by
            norm; `clipvalue` is clip gradients by value, `decay` is included for backward compatibility to allow time
            inverse decay of learning rate. `lr` is included for backward compatibility, recommended to use
            `learning_rate` instead.
    çü©ñÒMbP?r;   r<   çH¯¼šò×z>Fr:   NrO   rP   rQ   rR   ÚamsgradrG   rH   rU   r   c
                 óp   •—  t          ¦   «         j        ||||||	fi |
¤Ž || _        || _        || _        d S r   )r   r   rG   Ú_include_in_weight_decayÚ_exclude_from_weight_decay)r   rO   rP   rQ   rR   r`   rG   rH   rU   r   Úkwargsr   s              €r   r   zAdamWeightDecay.__init__Ú   sM   ø€ ð 	�‰ŒÔ˜¨°¸ÀÈ$ÐYÐYÐRXÐYÐYÐYØ!2ˆÔØ(?ˆÔ%Ø*CˆÔ'Ð'Ð'r   c                 ó\   •— dt           i}t          ¦   «                              ||¬¦  «        S )z?Creates an optimizer from its config with WarmUp custom object.r   )Úcustom_objects)r   r   Úfrom_config)ÚclsÚconfigrf   r   s      €r   rg   zAdamWeightDecay.from_configì   s,   ø€ ð #¥FÐ+ˆÝ‰wŒw×"Ò" 6¸.Ð"ÑIÔIÐIr   c                 óš   •— t          ¦   «                              |||¦  «         t          j        | j        d¬¦  «        |||f         d<   d S )NÚadam_weight_decay_rater!   rG   )r   Ú_prepare_localr"   ÚconstantrG   )r   Ú
var_deviceÚ	var_dtypeÚapply_stater   s       €r   rl   zAdamWeightDecay._prepare_localò   sW   ø€ Ý‰Œ×Ò˜z¨9°kÑBÔBÐBÝDFÄKØÔ"Ð)AðE
ñ E
ô E
ˆ�Z Ð+Ô,Ð-@ÑAÐAÐAr   c                 óÞ   — |                       |j        ¦  «        }|r?|                     ||z  ||j        |j        j        f         d         z  | j        ¬¦  «        S t          j        ¦   «         S )NrG   )Úuse_locking)	Ú_do_use_weight_decayr   Ú
assign_subÚdeviceÚdtypeÚ
base_dtypeÚ_use_lockingr"   Úno_op)r   ÚvarrO   rp   Údo_decays        r   Ú_decay_weights_opz!AdamWeightDecay._decay_weights_opø   sr   € Ø×,Ò,¨S¬XÑ6Ô6ˆØð 	Ø—>’>Ø Ñ# k°3´:¸s¼yÔ?SÐ2TÔ&UÐViÔ&jÑjØ Ô-ð "ñ ô ð õ Œx‰zŒzÐr   c                 óŠ   •— t          t          |Ž ¦  «        \  }} t          ¦   «         j        t          ||¦  «        fd|i|¤ŽS )Nr   )ÚlistÚzipr   Úapply_gradients)r   Úgrads_and_varsr   rd   ÚgradsÚtvarsr   s         €r   r€   zAdamWeightDecay.apply_gradients  sG   ø€ Ý�C Ð0Ñ1Ô1‰ˆˆuØ&�u‰wŒwÔ&¥s¨5°%Ñ'8Ô'8ÐNÐN¸tÐNÀvÐNÐNÐNr   c                 ó°   — |€| j         |         i fS |pi }|                     ||f¦  «        }|€|                      ||¦  «        }||||f<   |d         d|ifS )z1Retrieves the learning rate with the given state.NÚlr_trp   )Ú_decayed_lr_tÚgetÚ_fallback_apply_state)r   rn   ro   rp   Úcoefficientss        r   Ú_get_lrzAdamWeightDecay._get_lr  sz   € àÐØÔ% iÔ0°"Ð4Ð4à!Ð' RˆØ"—’¨
°IÐ'>Ñ?Ô?ˆØÐØ×5Ò5°jÀ)ÑLÔLˆLØ3?ˆK˜ YÐ/Ñ0à˜FÔ# m°[Ð%AÐAÐAr   c                 ó  •— |                       |j        |j        j        |¦  «        \  }}|                      |||¦  «        }t          j        |g¦  «        5   t          ¦   «         j        ||fi |¤Žcd d d ¦  «         S # 1 swxY w Y   d S r   )	rŠ   ru   rv   rw   r|   r"   Úcontrol_dependenciesr   Ú_resource_apply_dense)r   Úgradrz   rp   r…   rd   Údecayr   s          €r   r�   z%AdamWeightDecay._resource_apply_dense  sã   ø€ Ø—|’| C¤J°´	Ô0DÀkÑRÔR‰ˆˆfØ×&Ò& s¨D°+Ñ>Ô>ˆÝÔ$ e WÑ-Ô-ð 	Fð 	FØ0•5‘7”7Ô0°°sÐEÐE¸fÐEÐEð	Fð 	Fð 	Fð 	Fñ 	Fô 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Føøøð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fs   ÁA?Á?BÂBc                 ó  •— |                       |j        |j        j        |¦  «        \  }}|                      |||¦  «        }t          j        |g¦  «        5   t          ¦   «         j        |||fi |¤Žcd d d ¦  «         S # 1 swxY w Y   d S r   )	rŠ   ru   rv   rw   r|   r"   rŒ   r   Ú_resource_apply_sparse)	r   rŽ   rz   Úindicesrp   r…   rd   r�   r   s	           €r   r‘   z&AdamWeightDecay._resource_apply_sparse  så   ø€ Ø—|’| C¤J°´	Ô0DÀkÑRÔR‰ˆˆfØ×&Ò& s¨D°+Ñ>Ô>ˆÝÔ$ e WÑ-Ô-ð 	Pð 	PØ1•5‘7”7Ô1°$¸¸WÐOÐOÈÐOÐOð	Pð 	Pð 	Pð 	Pñ 	Pô 	Pð 	Pð 	Pð 	Pð 	Pð 	Pð 	Pøøøð 	Pð 	Pð 	Pð 	Pð 	Pð 	Ps   ÁB Â BÂBc                 ó€   •— t          ¦   «                              ¦   «         }|                     d| j        i¦  «         |S )NrG   )r   r0   ÚupdaterG   )r   ri   r   s     €r   r0   zAdamWeightDecay.get_config  s8   ø€ Ý‘”×#Ò#Ñ%Ô%ˆØ�ŠÐ*¨DÔ,BÐCÑDÔDÐDØˆr   c                 ó€   — | j         dk    rdS | j        r| j        D ]	}||v r dS Œ
| j        r| j        D ]	}||v r dS Œ
dS )z0Whether to use L2 weight decay for `param_name`.r   FT)rG   rb   rc   )r   Ú
param_nameÚrs      r   rs   z$AdamWeightDecay._do_use_weight_decay#  s€   € àÔ! QÒ&Ð&Ø�5àÔ(ð 	 ØÔ2ð  ð  �Ø˜
�?�?Ø˜4˜4ð #ð Ô*ð 	!ØÔ4ð !ð !�Ø˜
�?�?Ø ˜5˜5ð #àˆtr   )	r^   r;   r<   r_   Fr:   NNrX   r   )r1   r2   r3   r4   r   r5   rV   ÚLearningRateScheduleÚboolr   r~   r7   r   Úclassmethodrg   rl   r|   r€   rŠ   r�   r‘   r0   rs   r8   r9   s   @r   rX   rX   ³   së  ø€ € € € € ð$ð $ðP GLØØØØØ#&Ø7;Ø9=Ø%ðDð Dà˜U IÔ$BÐBÔCðDð ðDð ð	Dð
 ðDð ðDð !ðDð "*¨$¨s¬)Ô!4ðDð $,¨D°¬IÔ#6ðDð ðDð Dð Dð Dð Dð Dð$ ðJð Jð Jð Jñ „[ðJð

ð 
ð 
ð 
ð 
ðð ð ðOð Oð Oð Oð Oð OðBð Bð BðFð Fð Fð Fð Fð FðPð Pð Pð Pð Pð Pðð ð ð ð ð
ð ð ð ð ð ð r   rX   c                   óP   — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Z	dS )ÚGradientAccumulatoraR  
    Gradient accumulation utility. When used with a distribution strategy, the accumulator should be called in a
    replica context. Gradients will be accumulated locally on each replica and without synchronization. Users should
    then call `.gradients`, scale the gradients if required, and pass the result to `apply_gradients`.
    c                 ó"   — g | _         d| _        dS )zInitializes the accumulator.N)Ú
_gradientsÚ_accum_stepsr/   s    r   r   zGradientAccumulator.__init__@  s   € àˆŒØ ˆÔÐÐr   c                 óô   — | j         €Yt          j        t          j        dt          j        ¬¦  «        dt          j        j        t          j        j        ¬¦  «        | _         | j          	                    ¦   «         S )zNumber of accumulated steps.Nr   )rv   F©Ú	trainableÚsynchronizationÚaggregation)
rŸ   r"   ÚVariablerm   Úint64ÚVariableSynchronizationÚON_READÚVariableAggregationÚONLY_FIRST_REPLICAÚvaluer/   s    r   r    zGradientAccumulator.stepE  sf   € ð ÔÐ$Ý "¤Ý”˜A¥R¤XÐ.Ñ.Ô.ØÝ "Ô :Ô BÝÔ2ÔEð	!ñ !ô !ˆDÔð Ô ×&Ò&Ñ(Ô(Ð(r   c                 óP   — | j         st          d¦  «        ‚d„ | j         D ¦   «         S )z1The accumulated gradients on the current replica.zBThe accumulator should be called first to initialize the gradientsc                 ó>   — g | ]}|�|                      ¦   «         n|‘ŒS r   )r«   ©Ú.0Úgradients     r   ú
<listcomp>z1GradientAccumulator.gradients.<locals>.<listcomp>W  s,   € ÐgÐgÐgÈ8 HÐ$8�—’Ñ Ô Ð ¸hÐgÐgÐgr   )rž   Ú
ValueErrorr/   s    r   Ú	gradientszGradientAccumulator.gradientsR  s6   € ð Œð 	cÝÐaÑbÔbÐbØgÐgÐW[ÔWfÐgÑgÔgÐgr   c                 ó¸  — | j         s+| j        }| j                              d„ |D ¦   «         ¦  «         t          |¦  «        t          | j         ¦  «        k    r4t	          dt          | j         ¦  «        › dt          |¦  «        › �¦  «        ‚t          | j         |¦  «        D ]\  }}|�|�|                     |¦  «         Œ| j                             d¦  «         dS )z/Accumulates `gradients` on the current replica.c                 ó¦   — g | ]N}|�Ht          j        t          j        |¦  «        dt           j        j        t           j        j        ¬¦  «        n|‘ŒOS )NFr¡   )r"   r¥   Ú
zeros_liker§   r¨   r©   rª   r®   s     r   r±   z0GradientAccumulator.__call__.<locals>.<listcomp>^  so   € ð 
ð 
ð 
ð !ð  Ð+õ ”KÝœ hÑ/Ô/Ø"'Ý(*Ô(BÔ(JÝ$&Ô$:Ô$Mð	ñ ô ð ð "ð
ð 
ð 
r   z	Expected z gradients, but got Nr   )rž   r    ÚextendÚlenr²   r   Ú
assign_addrŸ   )r   r³   Ú_Úaccum_gradientr°   s        r   r,   zGradientAccumulator.__call__Y  sø   € àŒð 	Ø”	ˆAØŒO×"Ò"ð
ð 
ð %.ð
ñ 
ô 
ñô ð õ ˆy‰>Œ>�S ¤Ñ1Ô1Ò1Ð1ÝÐc­¨T¬_Ñ)=Ô)=ÐcÐcÕSVÐW`ÑSaÔSaÐcÐcÑdÔdÐdå(+¨D¬O¸YÑ(GÔ(Gð 	4ð 	4Ñ$ˆN˜HØÐ)¨hÐ.BØ×)Ò)¨(Ñ3Ô3Ð3øàÔ×$Ò$ QÑ'Ô'Ð'Ð'Ð'r   c                 ó²   — | j         sdS | j                             d¦  «         | j         D ]+}|�'|                     t          j        |¦  «        ¦  «         Œ,dS )z8Resets the accumulated gradients on the current replica.Nr   )rž   rŸ   Úassignr"   r¶   )r   r°   s     r   ÚresetzGradientAccumulator.resets  sf   € àŒð 	ØˆFØÔ× Ò  Ñ#Ô#Ð#Øœð 	9ð 	9ˆHØÐ#Ø—’¥¤¨hÑ 7Ô 7Ñ8Ô8Ð8øð	9ð 	9r   N)
r1   r2   r3   r4   r   Úpropertyr    r³   r,   r¾   r   r   r   rœ   rœ   5  s„   € € € € € ðð ð!ð !ð !ð
 ð
)ð 
)ñ „Xð
)ð ðhð hñ „Xðhð(ð (ð (ð49ð 9ð 9ð 9ð 9r   rœ   )	r:   r;   r<   r=   NNr:   r   N)r4   Útypingr   r   r   Ú
tensorflowr"   Útf_keras.optimizers.legacyr   ÚImportErrorÚModuleNotFoundErrorÚ"tensorflow.keras.optimizers.legacyÚmodeling_tf_utilsr   ÚhasattrrY   rV   r	   r˜   r   r5   r6   r~   r7   r\   rX   rœ   r   r   r   ú<module>rÈ      sA  ðð FÐ Eà ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à Ð Ð Ð ð8Ø/Ð/Ð/Ð/Ð/Ð/Ð/øØÐ(Ð)ð 8ð 8ð 8Ø7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ð8øøøð %Ð $Ð $Ð $Ð $Ð $ð €7ˆ5ÔÔ%Ð'?Ñ@Ô@ð +ØÔ Ô*ÔA€I€IàÔ Ô*€Ið7
ð 7
ð 7
ð 7
ð 7
ˆYÔ+ñ 7
ô 7
ð 7
ð| ØØØØ%)Ø,0Ø"ØØ37ðQ"ð Q"ØðQ"àðQ"ð ðQ"ð ð	Q"ð
 ðQ"ð ðQ"ð ðQ"ð ˜E”?ðQ"ð # 5œ/ðQ"ð ðQ"ð ðQ"ð & d¨3¤iÔ0ðQ"ð Q"ð Q"ð Q"ðh~ð ~ð ~ð ~ð ~�dñ ~ô ~ð ~ðDE9ð E9ð E9ð E9ð E9ñ E9ô E9ð E9ð E9ð E9s   ’ ™)¨)