Ë
    S^(h„:  ã                   ó²  — d dl mZmZmZ ddlmZmZmZ  e«       rd dlZd dl	m
Z
 d dlZd dlmZ d dl	mZ  e«       rd dlmZ  ej&                  e«      Zej,                  dej.                  fd„«       Zd!d	ej2                  d
edeej2                  ej2                  f   fd„Zej,                  dej.                  dej.                  dej.                  dej.                  fd„«       Zej:                  fdej2                  dej2                  dej2                  dej2                  d
ee   dej<                  dej2                  fd„Zej@                  dej:                  fdej2                  dej2                  dej2                  dej2                  d
eeeef      dej<                  dej2                  fd„«       Z! G d„ de
jD                  «      Z#	 	 	 	 	 d"d„Z$	 	 d#d „Z%y)$é    )ÚListÚOptionalÚTupleé   )Úis_accelerate_availableÚis_torch_availableÚloggingN)Ú
functional)Úinit_empty_weightsÚ
BLOCK_SIZEc                 óà  — t        j                  d¬«      }||z  t        j                  d|«      z   }t        j                  | |z   «      j	                  t         j
                  «      }t        j                  t        j                  |«      «      dz  }||z  }|j	                  |j                  j                  «      }t        j                  ||z   |«       t        j                  ||z   |«       y )Nr   ©Úaxisg      |@)ÚtlÚ
program_idÚarangeÚloadÚtoÚfloat32ÚmaxÚabsÚdtypeÚ
element_tyÚstore)	Úx_ptrÚy_ptrÚs_ptrr   ÚpidÚoffsÚxÚsÚys	            úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/integrations/finegrained_fp8.pyÚact_quant_kernelr$   $   s«   € ä
�-‰-˜QÔ
€CØ�ÑœbŸi™i¨¨:Ó6Ñ6€DÜ
�‰�˜‘Ó× Ñ ¤§¡Ó,€AÜ
�‰Œr�v‰v�a‹yÓ˜EÑ!€AØ	ˆA‰€AØ	�‰ˆU�[‰[×#Ñ#Ó$€AÜ‡H�HˆU�T‰\˜1ÔÜ‡H�HˆU�S‰[˜!Õó    r    Ú
block_sizeÚreturnc                 óf  ‡ — ‰ j                  «       sJ ‚‰ j                  d   |z  dk(  sJ ‚t        j                  ‰ t        j                  ¬«      } ‰ j
                  g ‰ j                  «       d d ¢‰ j                  d«      |z  ‘­dt        j                  iŽ}ˆ fd„}t        |   ‰ |||¬«       ||fS )Néÿÿÿÿr   ©r   r   c                 óT   •— t        j                  ‰j                  «       | d   «      fS )Nr   )ÚtritonÚcdivÚnumel)Úmetar    s    €r#   Úgridzact_quant.<locals>.grid6   s"   ø€ Ü—‘˜AŸG™G›I t¨LÑ'9Ó:Ð<Ð<r%   )r   )	Úis_contiguousÚshapeÚtorchÚ
empty_likeÚfloat8_e4m3fnÚ	new_emptyÚsizer   r$   )r    r&   r"   r!   r0   s   `    r#   Ú	act_quantr8   0   s£   ø€ Ø�?‰?ÔÐÐØ�7‰7�2‰;˜Ñ# qÒ(Ð(Ð(Ü×Ñ˜¤%×"5Ñ"5Ô6€AØˆ�‰ÐR�Q—V‘V“X˜c˜r�]ÐR A§F¡F¨2£J°*Ñ$<ÒRÄEÇMÁMÑR€Aô=ô �TÑ˜1˜a ¨zÕ:Øˆaˆ4€Kr%   ÚBLOCK_SIZE_MÚBLOCK_SIZE_NÚBLOCK_SIZE_KÚGROUP_SIZE_Mc                 ó¼  — t        j                  d¬«      }t        j                  ||«      }t        j                  ||«      }||z  }||z  }||z  }t        ||z
  |«      }|||z  z   }||z  |z  } ||z  t        j                  d|«      z   |z  }!| |z  t        j                  d|«      z   |z  }"t        j                  d|«      }#| |!dd…df   |
z  |#ddd…f   |z  z   z   }$||#dd…df   |z  |"ddd…f   |z  z   z   }%||!|z  z   }&|"|z  }'||'|z  z   }(t        j
                  ||ft         j                  ¬«      })t        dt        j                  ||«      «      D ]Ï  }*t        j                  |$|#ddd…f   ||*|z  z
  k  d¬«      }+t        j                  |%|#dd…df   ||*|z  z
  k  d¬«      },|*|z  }-|-|	z  }.t        j                  |&|.|z  z   «      }/t        j                  |(|.|z  z   «      }0|)t        j                  |+|,«      |/dd…df   z  |0ddd…f   z  z  })|$||z  z  }$|%||z  z  }%ŒÑ |j                  j                  t         j                  k(  r |)j                  t         j                  «      }1nf|j                  j                  t         j                  k(  r |)j                  t         j                  «      }1n|)j                  t         j                  «      }1||z  t        j                  d|«      z   }2| |z  t        j                  d|«      z   }3|||2dd…df   z  z   ||3ddd…f   z  z   }4|2dd…df   |k  |3ddd…f   |k  z  }5t        j                  |4|1|5¬«       y)z¾Triton-accelerated function used to perform linear operations (dot
    product) on input tensors `A` and `B` with block-wise quantization, and
    store the result in output tensor `C`.
    r   r   Nr*   g        )ÚmaskÚother)r>   )r   r   r-   Úminr   Úzerosr   Úranger   Údotr   r   Úbfloat16r   Úfloat16r   )6ÚAÚBÚCÚAsÚBsÚMÚNÚKÚgroup_nÚgroup_kÚ	stride_amÚ	stride_akÚ	stride_bkÚ	stride_bnÚ	stride_cmÚ	stride_cnÚstride_As_mÚstride_As_kÚstride_Bs_kÚstride_Bs_nr9   r:   r;   r<   r   Ú	num_pid_mÚ	num_pid_nÚnum_pid_in_groupÚgroup_idÚfirst_pid_mÚgroup_size_mÚpid_mÚpid_nÚoffs_amÚoffs_bnÚoffs_kÚa_ptrsÚb_ptrsÚAs_ptrsÚoffs_bsnÚBs_ptrsÚaccumulatorÚkÚaÚbÚk_startÚoffs_ksÚa_sÚb_sÚcÚoffs_cmÚoffs_cnÚc_ptrsÚc_masks6                                                         r#   Ú_w8a8_block_fp8_matmulrw   >   sb  € ôJ �-‰-˜QÔ
€CÜ—‘˜˜<Ó(€IÜ—‘˜˜<Ó(€IØ# iÑ/ÐØÐ&Ñ&€HØ˜\Ñ)€KÜ�y ;Ñ.°Ó=€LØ˜3 Ñ-Ñ.€EØÐ#Ñ#¨Ñ4€Eà�|Ñ#¤b§i¡i°°<Ó&@Ñ@ÀAÑE€GØ�|Ñ#¤b§i¡i°°<Ó&@Ñ@ÀAÑE€GÜ�Y‰Y�q˜,Ó'€FØ�'š!˜T˜'Ñ" YÑ.°¸ºa¸±À9Ñ1LÑLÑM€FØ�&š˜D˜‘/ IÑ-°¸ºa¸Ñ0@À9Ñ0LÑLÑM€Fà�7˜[Ñ(Ñ(€GØ˜'Ñ!€HØ�8˜kÑ)Ñ)€Gä—(‘(˜L¨,Ð7¼r¿z¹zÔJ€KÜ�1”b—g‘g˜a Ó.Ó/ò +ˆÜ�G‰G�F ¨ªa¨¡°1°q¸<Ñ7GÑ3GÑ!GÈsÔSˆÜ�G‰G�F ª¨4¨¡°1°q¸<Ñ7GÑ3GÑ!GÈsÔSˆà�lÑ"ˆØ˜WÑ$ˆÜ�g‰g�g ¨+Ñ 5Ñ5Ó6ˆÜ�g‰g�g ¨+Ñ 5Ñ5Ó6ˆà”r—v‘v˜a “| cª!¨T¨'¡lÑ2°S¸ºq¸±\ÑAÑAˆØ�, Ñ*Ñ*ˆØ�, Ñ*Ñ*‰ð+ð 	‡w�w×ÑœRŸ[™[Ò(Ø�N‰Nœ2Ÿ;™;Ó'‰Ø	
�‰×	Ñ	œrŸz™zÒ	)Ø�N‰Nœ2Ÿ:™:Ó&‰à�N‰Nœ2Ÿ:™:Ó&ˆà�lÑ"¤R§Y¡Y¨q°,Ó%?Ñ?€GØ�lÑ"¤R§Y¡Y¨q°,Ó%?Ñ?€GØ�˜W¢Q¨ WÑ-Ñ-Ñ-°	¸GÀDÊ!ÀGÑ<LÑ0LÑL€FØ’a˜�gÑ Ñ" w¨t²Q¨wÑ'7¸!Ñ';Ñ<€FÜ‡H�HˆV�Q˜VÖ$r%   rF   rG   rI   rJ   Úoutput_dtypec                 óæ  ‡‡— t        |«      dk(  sJ ‚|d   |d   }}| j                  d   |j                  d   k(  sJ ‚| j                  dd |j                  dd k(  r| j                  «       sJ ‚t        j                  | j                  d   |«      |j                  d   k(  sJ ‚| j                  «       | j                  d   z  Š|j                  dk(  r|j                  «       r|j                  dk(  sJ ‚|j                  \  Š}t        j                  ‰|«      |j                  d   k(  sJ ‚t        j                  ||«      |j                  d   k(  sJ ‚| j                  dd ‰fz   }	| j                  |	|¬«      }
d}‰|k  r!t        j                  ‰«      }t        |d«      }|}||z  dk(  sJ ‚|}ˆˆfd	„}t        |   | ||
||‰‰|||| j                  d
«      | j                  d«      |j                  d«      |j                  d«      |
j                  d
«      |
j                  d«      |j                  d
«      |j                  d«      |j                  d«      |j                  d«      |||d¬«       |
S )a‰  This function performs matrix multiplication with block-wise
    quantization.
    It takes two input tensors `A` and `B` with scales `As` and `Bs`.
    The output is returned in the specified `output_dtype`.
    Args:
        A: The input tensor, e.g., activation.
        B: The input tensor, e.g., weight.
        As: The per-token-group quantization scale for `A`.
        Bs: The per-block quantization scale for `B`.
        block_size: The block size for per-block quantization. It should
        be 2-dim, e.g., [128, 128].
        output_dytpe: The dtype of the returned tensor.
    Returns:
        torch.Tensor: The result of matmul.
    r   r   é   r)   Nr*   é€   é   c                 ól   •— t        j                  ‰| d   «      t        j                  ‰| d   «      z  fS )Nr9   r:   )r,   r-   )ÚMETArK   rL   s    €€r#   r0   z*w8a8_block_fp8_matmul_triton.<locals>.gridÂ   s1   ø€ Ü—‘˜A˜t NÑ3Ó4´v·{±{À1ÀdÈ>ÑFZÓ7[Ñ[Ð]Ð]r%   éþÿÿÿé   )r9   r:   r;   r<   )Úlenr2   r1   r,   r-   r.   Úndimr6   Únext_power_of_2r   rw   Ústride)rF   rG   rI   rJ   r&   rx   Úblock_nÚblock_krM   ÚC_shaperH   r9   r;   r:   r0   rK   rL   s                  @@r#   Úw8a8_block_fp8_matmul_tritonrˆ   “   sG  ù€ ô. ˆz‹?˜aÒÐÐØ! !‘} j°¡mˆW€Gà�7‰7�2‰;˜!Ÿ'™' "™+Ò%Ð%Ð%Ø�7‰7�3�Bˆ<˜2Ÿ8™8 C R˜=Ò(¨Q¯_©_Ô->Ð>Ð>Ü�;‰;�q—w‘w˜r‘{ GÓ,°·±¸±Ò<Ð<Ð<Ø	�‰‹	�Q—W‘W˜R‘[Ñ €Aà�6‰6�QŠ;˜1Ÿ?™?Ô,°·±¸A²Ð=Ð=Ø�7‰7�D€A€qÜ�;‰;�q˜'Ó" b§h¡h¨q¡kÒ1Ð1Ð1Ü�;‰;�q˜'Ó" b§h¡h¨q¡kÒ1Ð1Ð1à�g‰g�c�rˆl˜a˜TÑ!€GØ	�‰�G <ˆÓ0€Aà€LØˆ<ÒÜ×-Ñ-¨aÓ0ˆÜ˜<¨Ó,ˆØ€LØ�\Ñ! QÒ&Ð&Ð&Ø€Lõ^ô ˜4Ñ Ø	Ø	Ø	Ø
Ø
Ø	Ø	Ø	ØØØ	�‰�‹Ø	�‰�‹Ø	�‰�‹Ø	�‰�‹Ø	�‰�‹Ø	�‰�‹Ø
�	‰	�"‹Ø
�	‰	�"‹Ø
�	‰	�!‹Ø
�	‰	�!‹Ø!Ø!Ø!Øõ1ð6 €Hr%   Úinput_qÚweight_qÚinput_scaleÚweight_scalec                 ó~  — | j                   dk(  r| j                  nd| j                  d   | j                  d   f\  }}}|j                  d   }	| j                  d|«      }
|j                  |j                  d   d«      }|	|d   z  }||d   z  }t        j                  ||z  |	ft        j
                  | j                  ¬«      }t        |«      D ]É  }||d   z  }||d   z   }t        |«      D ]©  }||d   z  }||d   z   }|
dd…||…f   }|||…||…f   }|dd…||dz   …f   }|||f   }t        j                  ||j                  «       t        j                  dt        j
                  | j                  ¬«      ||¬«      |z  }|dd…||…fxx   |z  cc<   Œ« ŒË |j                  |||	«      }|j                  |«      S )aÁ  
    Performs blocked matrix multiplication with FP8 quantized matrices.

    Args:
        input_q: Quantized input tensor with 1x128 block quantization
        weight_q: Quantized weight tensor with 128x128 block quantization
        input_scale: Scaling factors for input blocks
        weight_scale: Scaling factors for weight blocks
        block_size: Tuple of (M, N) for weight block dimensions
        output_dtype: Desired output dtype
    é   rz   r   r)   ©r   ÚdeviceN)Úscale_aÚscale_bÚ	out_dtype)r‚   r2   Úviewr3   rA   r   r�   rB   Ú
_scaled_mmÚtÚtensorr   )r‰   rŠ   r‹   rŒ   r&   rx   Ú
batch_sizeÚseq_lenÚ
hidden_dimÚout_featuresÚinput_reshapedÚinput_scale_reshapedÚnum_weight_blocks_mÚnum_weight_blocks_nÚoutputÚiÚm_startÚm_endÚjÚn_startÚn_endÚinput_blockÚweight_blockÚcurr_input_scaleÚcurr_weight_scaleÚblock_results                             r#   Úw8a8_block_fp8_matmul_compiler¬   ä   s  € ð( 8?·|±|ÀqÒ7H g§m¢mÈqÐRY×R_ÑR_Ð`aÑRbÐdk×dqÑdqÐrsÑdtÐNuÑ#€J�˜Ø—>‘> !Ñ$€Lð —\‘\ " jÓ1€NØ&×+Ñ+¨K×,=Ñ,=¸aÑ,@À"ÓEÐà&¨*°Q©-Ñ7ÐØ$¨
°1©Ñ5Ðä�[‰[˜* wÑ.°Ð=ÄUÇ]Á]Ð[b×[iÑ[iÔj€FäÐ&Ó'ò 5ˆØ�j ‘mÑ#ˆØ˜* Q™-Ñ'ˆäÐ*Ó+ò 	5ˆAØ˜* Q™-Ñ'ˆGØ˜j¨™mÑ+ˆEð )ª¨G°E¨MÐ)9Ñ:ˆKØ# G¨E M°7¸5°=Ð$@ÑAˆLð  4²A°q¸1¸q¹5°y°LÑAÐØ ,¨Q°¨TÑ 2Ðô × Ñ ØØ —N‘NÓ$Ü!ŸL™L¨´%·-±-ÈÏÉÔWØ-Ø*ôð #ñ#ð ð ’1�g˜e�mÐ#Ó$¨Ñ4Ô$ñ/	5ð	5ð: �[‰[˜ W¨lÓ;€Fà�9‰9�\Ó"Ð"r%   c                   óœ   ‡ — e Zd Zej                  Z	 	 	 	 	 d	dedededee	eef      fˆ fd„Z
dej                  dej                  fd„Zˆ xZS )
Ú	FP8LinearÚin_featuresr›   Úbiasr&   c                 óª  •— t         ‰
| �  ||«       || _        || _        t        j
                  j                  t	        j                  ||t        j                  |¬«      «      | _
        | j                  j                  «       dk(  rb||d   z   dz
  |d   z  }||d   z   dz
  |d   z  }	t        j                  t	        j                  ||	t        j                  |¬«      «      | _        n| j                  dd «       || _        || _        |r8t        j                  t	        j                  | j                  «      «      | _        y | j                  dd «       y )Nr�   rz   r   Úweight_scale_invr°   )ÚsuperÚ__init__r¯   r›   r3   ÚnnÚ	ParameterÚemptyr®   r   ÚweightÚelement_sizer   r²   Úregister_parameterr&   Úactivation_schemer°   )Úselfr¯   r›   r°   r   r&   r�   r»   Úscale_out_featuresÚscale_in_featuresÚ	__class__s             €r#   r´   zFP8Linear.__init__)  s   ø€ ô 	‰Ñ˜ lÔ3Ø&ˆÔØ(ˆÔä—h‘h×(Ñ(¬¯©°\À;ÔV_×VeÑVeÐntÔ)uÓvˆŒà�;‰;×#Ñ#Ó%¨Ò*Ø".°¸A±Ñ">ÀÑ"BÀzÐRSÁ}Ñ!TÐØ!,¨z¸!©}Ñ!<¸qÑ!@ÀZÐPQÁ]Ñ RÐÜ$&§L¡LÜ—‘Ð.Ð0AÌÏÉÐ_eÔfó%ˆDÕ!ð ×#Ñ#Ð$6¸Ô=à$ˆŒà!2ˆÔáÜŸ™¤U§[¡[°×1BÑ1BÓ%CÓDˆD�Ià×#Ñ# F¨DÕ1r%   Úinputr'   c           	      ób  — | j                   j                  «       dkD  r+t        j                  || j                   | j                  «      S t        || j                  d   «      \  }}t        j                  j                  |j                  «      5  t        || j                   || j                  | j                  |j                  ¬«      }d d d «       t        j                  j                  «        | j                  �| j                  z   }j                  |j                  ¬«      S # 1 sw Y   Œ^xY w)Nrz   )rx   r*   )r¸   r¹   ÚFÚlinearr°   r8   r&   r3   Úcudar�   rˆ   r²   r   Úsynchronizer   )r¼   rÀ   ÚqinputÚscaler    s        r#   ÚforwardzFP8Linear.forwardK  sç   € Ø�;‰;×#Ñ#Ó%¨Ò)Ü—8‘8˜E 4§;¡;°·	±	Ó:Ð:ô & e¨T¯_©_¸QÑ-?Ó@‰MˆF�Eô —‘×"Ñ" 5§<¡<Ó0ñ Ü5ØØ—K‘KØØ×)Ñ)Ø—O‘OØ!&§¡ô�÷ô �J‰J×"Ñ"Ô$Ø�y‰yÐ$Ø $§)¡)Ñ+�Ø—9‘9 5§;¡;�9Ó/Ð/÷ð ús   Â:D%Ä%D.)FNNNÚdynamic)Ú__name__Ú
__module__Ú__qualname__r3   r5   r   ÚintÚboolr   r   r´   ÚTensorrÈ   Ú__classcell__)r¿   s   @r#   r®   r®   &  ss   ø„ Ø×Ñ€Eð ØØ04ØØ#ñ 2àð 2ð ð 2ð ð	 2ð ˜U 3¨ 8™_Ñ-õ 2ðD0˜UŸ\™\ð 0¨e¯l©l÷ 0r%   r®   c                 óÌ  ‡	— |€g }| j                  «       D �]<  \  }}|j                  |«       t        |t        j                  «      rÁ||xs g vr¹dj                  |«      Š	t        ˆ	fd„|xs g D «       «      s�t        «       5  t        |j                  |j                  |j                  du|j                  j                  |j                  j                  |j                  |j                   ¬«      | j"                  |<   d}ddd«       t%        t'        |j)                  «       «      «      dkD  rt+        ||||||¬«      \  }}|j-                  d«       �Œ? | |fS # 1 sw Y   ŒZxY w)	z%Replace Linear layers with FP8Linear.Nú.c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0ÚkeyÚcurrent_key_name_strs     €r#   ú	<genexpr>z+_replace_with_fp8_linear.<locals>.<genexpr>u  s   øè ø€ Ò]°s�sÐ2Ô2Ñ]ùs   ƒ)r¯   r›   r°   r�   r   r»   r&   Tr   )Úhas_been_replacedr)   )Únamed_childrenÚappendÚ
isinstancerµ   ÚLinearÚjoinÚanyr   r®   r¯   r›   r°   r¸   r�   r   r»   Úweight_block_sizeÚ_modulesr�   ÚlistÚchildrenÚ_replace_with_fp8_linearÚpop)
ÚmodelÚtp_planÚmodules_to_not_convertÚcurrent_key_nameÚquantization_configrÙ   ÚnameÚmoduleÚ_r×   s
            @r#   rä   rä   d  sW  ø€ ð ÐØÐà×,Ñ,Ó.ó !‰ˆˆfØ×Ñ Ô%ä�fœbŸi™iÔ(¨TÐ:PÒ:VÐTVÑ-WØ#&§8¡8Ð,<Ó#=Ð ÜÓ]Ð?UÒ?[ÐY[Ô]Ô]Ü'Ó)ñ 
-Ü+4Ø$*×$6Ñ$6Ø%+×%8Ñ%8Ø#Ÿ[™[°Ð4Ø%Ÿ}™}×3Ñ3Ø$Ÿm™m×1Ñ1Ø*=×*OÑ*OØ#6×#HÑ#Hô,�E—N‘N 4Ñ(ð )-Ð%÷
-ô Œt�F—O‘OÓ%Ó&Ó'¨!Ò+Ü#;ØØØ&Ø Ø#Ø"3ô$Ñ ˆAÐ ð 	×Ñ˜RÖ ð;!ð> Ð#Ð#Ð#÷3
-ð 
-ús   ÂA>EÅE#	c                 óð   — |€dgn|}|j                   �|j                  |j                   «       t        t        |«      «      }t	        | | j
                  ||¬«      \  } }|st        j                  d«       | S )z:Helper function to replace model layers with FP8 versions.Úlm_head)rç   rè   rê   z�You are loading your model using fp8 but no linear modules were found in your model. Please double check your model architecture.)rè   Úextendrâ   Úseträ   Ú_tp_planÚloggerÚwarning)ræ   rè   rê   rÙ   s       r#   Úreplace_with_fp8_linearrõ   ’  s„   € ð -CÐ,J˜i™[ÐPfÐà×1Ñ1Ð=Ø×%Ñ%Ð&9×&PÑ&PÔQÜ!¤#Ð&<Ó"=Ó>ÐÜ7ØØ—‘Ø5Ø/ô	 Ñ€EÐñ Ü�‰ð<ô	
ð
 €Lr%   )r{   )NNNNF)NN)&Útypingr   r   r   Úutilsr   r   r	   r3   Útorch.nnrµ   r,   Útriton.languageÚlanguager   r
   rÂ   Ú
accelerater   Ú
get_loggerrÊ   ró   ÚjitÚ	constexprr$   rÏ   rÍ   r8   rw   r   r   rˆ   Úcompiler¬   rÝ   r®   rä   rõ   rÔ   r%   r#   ú<module>r      s'  ð÷  )Ñ (ç HÑ Hñ ÔÛÝÛÝ Ý(áÔÝ-ð 
ˆ×	Ñ	˜HÓ	%€ð ‡�ð°b·l±lò ó ðñ
�—‘ð 
¨3ð 
¸¸u¿|¹|ÈUÏ\É\Ð?YÑ9Zó 
ð ‡�ðQ%ð4 —,‘,ð5Q%ð6 —,‘,ð7Q%ð8 —,‘,ð9Q%ð: —,‘,ò;Q%ó ðQ%ðt !&§¡ñMØ‡|�|ðMà‡|�|ðMð 	�‰ðMð 	�‰ð	Mð
 �S‘	ðMð —+‘+ðMð ‡\�\óMðb ‡�ð -1Ø %§¡ñ>#Ø�\‰\ð>#à�l‰lð>#ð —‘ð>#ð —,‘,ð	>#ð
 ˜˜s C˜x™Ñ)ð>#ð —+‘+ð>#ð ‡\�\ò>#ó ð>#ôB;0�—	‘	ô ;0ð@ ØØØØó+$ð`  Øôr%   