§
    ù²Åjî4  ã                   óˆ  — 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Zd dlmZmZ ddlmZ ddlmZ dd	lmZ d
dlmZ d
dl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" ddlmZ# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddgZ+de,de,de,dedej-        f         dej.        f
d„Z/de,de,dedej-        f         dej.        fd„Z0dej-        fd „Z1 G d!„ d"ej-        ¦  «        Z2 G d#„ d$e*¦  «        Z3 G d%„ d&e*¦  «        Z4 G d'„ d(ej-        ¦  «        Z5d)eej6        ej7        f         d*e,dedej-        f         fd+„Z8 G d,„ de¦  «        Z9 e¦   «          ed-e9j:        fd.e"j;        f¬/¦  «        dd0de"j;        ddd1œd2e
e9         d3e<d4e
e,         d5e
e"         d6e
e,         de
edej-        f                  d7ede)fd8„¦   «         ¦   «         Z=dS )9é    N)ÚOrderedDict)Úpartial)ÚAnyÚCallableÚDictÚListÚOptionalÚUnion)ÚnnÚTensoré   )ÚConv2dNormActivation)ÚObjectDetection)Ú_log_api_usage_onceé   )Ú	mobilenet)Úregister_modelÚWeightsÚWeightsEnum)Ú_COCO_CATEGORIES)Ú_ovewrite_value_paramÚhandle_legacy_interface)Úmobilenet_v3_largeÚMobileNet_V3_Large_Weightsé   )Ú_utils)ÚDefaultBoxGenerator)Ú_validate_trainable_layers)ÚSSDÚSSDScoringHeadÚ%SSDLite320_MobileNet_V3_Large_WeightsÚssdlite320_mobilenet_v3_largeÚin_channelsÚout_channelsÚkernel_sizeÚ
norm_layer.Úreturnc           
      óŽ   — t          j        t          | | || |t           j        ¬¦  «        t          j        | |d¦  «        ¦  «        S )N)r%   Úgroupsr&   Úactivation_layerr   )r   Ú
Sequentialr   ÚReLU6ÚConv2d)r#   r$   r%   r&   s       úUC:\Projects\Historical\venv\Lib\site-packages\torchvision/models/detection/ssdlite.pyÚ_prediction_blockr/      sQ   € õ Œ=åØØØ#ØØ!ÝœXð	
ñ 	
ô 	
õ 	Œ	�+˜|¨QÑ/Ô/ñô ð ó    c                 óÀ   — t           j        }|dz  }t          j        t          | |d||¬¦  «        t          ||dd|||¬¦  «        t          ||d||¬¦  «        ¦  «        S )Nr   r   )r%   r&   r*   r   )r%   Ústrider)   r&   r*   )r   r,   r+   r   )r#   r$   r&   Ú
activationÚintermediate_channelss        r.   Ú_extra_blockr5   0   s�   € Ý”€JØ(¨AÑ-ÐÝŒ=åØÐ.¸AÈ*Ðgqð	
ñ 	
ô 	
õ 	Ø!Ø!ØØØ(Ø!Ø'ð	
ñ 	
ô 	
õ 	Ø! <¸QÈ:Ðhrð	
ñ 	
ô 	
ñ!ô ð r0   Úconvc                 ó"  — |                       ¦   «         D ]y}t          |t          j        ¦  «        r]t          j        j                             |j        dd¬¦  «         |j        �*t          j        j         	                    |j        d¦  «         Œzd S )Ng        ç¸…ëQ¸ž?)ÚmeanÚstd)
ÚmodulesÚ
isinstancer   r-   ÚtorchÚinitÚnormal_ÚweightÚbiasÚ	constant_)r6   Úlayers     r.   Ú_normal_initrD   I   s}   € Ø—’‘”ð 9ð 9ˆÝ�e�RœYÑ'Ô'ð 	9ÝŒHŒM×!Ò! %¤,°S¸dÐ!ÑCÔCÐCØŒzÐ%Ý””×'Ò'¨¬
°CÑ8Ô8Ð8øð	9ð 9r0   c            
       óŽ   ‡ — e Zd Zdee         dee         dededej        f         fˆ fd„Zdee	         de
ee	f         fd	„Zˆ xZS )
ÚSSDLiteHeadr#   Únum_anchorsÚnum_classesr&   .c                 ó¢   •— t          ¦   «                              ¦   «          t          ||||¦  «        | _        t	          |||¦  «        | _        d S ©N)ÚsuperÚ__init__ÚSSDLiteClassificationHeadÚclassification_headÚSSDLiteRegressionHeadÚregression_head)Úselfr#   rG   rH   r&   Ú	__class__s        €r.   rL   zSSDLiteHead.__init__R   sM   ø€ õ 	‰Œ×ÒÑÔÐÝ#<¸[È+ÐWbÐdnÑ#oÔ#oˆÔ Ý4°[À+ÈzÑZÔZˆÔÐÐr0   Úxr'   c                 óX   — |                       |¦  «        |                      |¦  «        dœS )N)Úbbox_regressionÚ
cls_logits)rP   rN   )rQ   rS   s     r.   ÚforwardzSSDLiteHead.forwardY   s3   € à#×3Ò3°AÑ6Ô6Ø×2Ò2°1Ñ5Ô5ð
ð 
ð 	
r0   )Ú__name__Ú
__module__Ú__qualname__r   Úintr   r   ÚModulerL   r   r   ÚstrrW   Ú__classcell__©rR   s   @r.   rF   rF   Q   s­   ø€ € € € € ð[Ø œ9ð[Ø37¸´9ð[ØKNð[Ø\dÐehÐjlÔjsÐesÔ\tð[ð [ð [ð [ð [ð [ð
˜˜fœð 
¨$¨s°F¨{Ô*;ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r0   rF   c            
       ób   ‡ — e Zd Zdee         dee         dededej        f         fˆ fd„Zˆ xZ	S )rM   r#   rG   rH   r&   .c           	      ó  •— t          j        ¦   «         }t          ||¦  «        D ]-\  }}|                     t	          |||z  d|¦  «        ¦  «         Œ.t          |¦  «         t          ¦   «                              ||¦  «         d S )Nr   ©r   Ú
ModuleListÚzipÚappendr/   rD   rK   rL   )	rQ   r#   rG   rH   r&   rV   ÚchannelsÚanchorsrR   s	           €r.   rL   z"SSDLiteClassificationHead.__init__a   s‹   ø€ õ ”]‘_”_ˆ
Ý!$ [°+Ñ!>Ô!>ð 	að 	aÑˆH�gØ×ÒÕ/°¸+ÈÑ:OÐQRÐT^Ñ_Ô_Ñ`Ô`Ð`Ð`Ý�ZÑ Ô Ð Ý‰Œ×Ò˜ [Ñ1Ô1Ð1Ð1Ð1r0   ©
rX   rY   rZ   r   r[   r   r   r\   rL   r^   r_   s   @r.   rM   rM   `   st   ø€ € € € € ð2Ø œ9ð2Ø37¸´9ð2ØKNð2Ø\dÐehÐjlÔjsÐesÔ\tð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r0   rM   c                   ó^   ‡ — e Zd Zdee         dee         dedej        f         fˆ fd„Zˆ xZ	S )rO   r#   rG   r&   .c           	      ó  •— t          j        ¦   «         }t          ||¦  «        D ]-\  }}|                     t	          |d|z  d|¦  «        ¦  «         Œ.t          |¦  «         t          ¦   «                              |d¦  «         d S )Né   r   rb   )rQ   r#   rG   r&   Úbbox_regrf   rg   rR   s          €r.   rL   zSSDLiteRegressionHead.__init__l   s„   ø€ Ý”=‘?”?ˆÝ!$ [°+Ñ!>Ô!>ð 	Uð 	UÑˆH�gØ�OŠOÕ-¨h¸¸G¹ÀQÈ
ÑSÔSÑTÔTÐTÐTÝ�XÑÔÐÝ‰Œ×Ò˜ 1Ñ%Ô%Ð%Ð%Ð%r0   rh   r_   s   @r.   rO   rO   k   sj   ø€ € € € € ð& D¨¤Ið &¸DÀ¼Ið &ÐS[Ð\_ÐacÔajÐ\jÔSkð &ð &ð &ð &ð &ð &ð &ð &ð &ð &r0   rO   c                   ó~   ‡ — e Zd Z	 	 ddej        dededej        f         dedef
ˆ fd	„Zd
e	de
ee	f         fd„Zˆ xZS )Ú SSDLiteFeatureExtractorMobileNetç      ð?é   ÚbackboneÚc4_posr&   .Ú
width_multÚ	min_depthc                 óú  •‡‡— t          ¦   «                              ¦   «          t          | ¦  «         ||         j        rt	          d¦  «        ‚t          j        t          j        g |d |…         ¢||         j        d         ‘R Ž t          j        ||         j        dd …         g||dz   d …         ¢R Ž ¦  «        | _        ˆˆfd„}t          j	        t          |d         j         |d¦  «        |¦  «        t           |d¦  «         |d¦  «        |¦  «        t           |d¦  «         |d¦  «        |¦  «        t           |d¦  «         |d¦  «        |¦  «        g¦  «        }t          |¦  «         || _        d S )	Nz0backbone[c4_pos].use_res_connect should be Falser   r   c                 óD   •— t          ‰t          | ‰z  ¦  «        ¦  «        S rJ   )Úmaxr[   )Údrt   rs   s    €€r.   ú<lambda>z;SSDLiteFeatureExtractorMobileNet.__init__.<locals>.<lambda>‰   s   ø€ �c )­S°°Z±Ñ-@Ô-@ÑAÔA€ r0   éÿÿÿÿi   é   é€   )rK   rL   r   Úuse_res_connectÚ
ValueErrorr   r+   ÚblockÚfeaturesrc   r5   r$   rD   Úextra)	rQ   rq   rr   r&   rs   rt   Ú	get_depthr�   rR   s	       ``  €r.   rL   z)SSDLiteFeatureExtractorMobileNet.__init__u   s  øøø€ õ 	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!à�FÔÔ+ð 	QÝÐOÑPÔPÐPåœåŒMÐH˜8 G V GÔ,ÐH¨h°vÔ.>Ô.DÀQÔ.GÐHÐHÐHÝŒM˜( 6Ô*Ô0°°°Ô4ÐN°xÀÈÁ
ÀÀÔ7MÐNÐNÐNñ
ô 
ˆŒð BÐAÐAÐAÐAˆ	Ý”å˜X bœ\Ô6¸	¸	À#¹¼È
ÑSÔSÝ˜Y˜Y s™^œ^¨Y¨Y°s©^¬^¸ZÑHÔHÝ˜Y˜Y s™^œ^¨Y¨Y°s©^¬^¸ZÑHÔHÝ˜Y˜Y s™^œ^¨Y¨Y°s©^¬^¸ZÑHÔHð	ñ
ô 
ˆõ 	�UÑÔÐàˆŒ
ˆ
ˆ
r0   rS   r'   c                 óú   — g }| j         D ]"} ||¦  «        }|                     |¦  «         Œ#| j        D ]"} ||¦  «        }|                     |¦  «         Œ#t          d„ t	          |¦  «        D ¦   «         ¦  «        S )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS © )r]   )Ú.0ÚiÚvs      r.   ú
<listcomp>z<SSDLiteFeatureExtractorMobileNet.forward.<locals>.<listcomp>¡   s&   € ÐFÐFÐF©D¨A¨q�S ™VœV Q˜KÐFÐFÐFr0   )r€   re   r�   r   Ú	enumerate)rQ   rS   Úoutputr   s       r.   rW   z(SSDLiteFeatureExtractorMobileNet.forward–   s’   € àˆØ”]ð 	ð 	ˆEØ��a‘”ˆAØ�MŠM˜!ÑÔÐÐà”Zð 	ð 	ˆEØ��a‘”ˆAØ�MŠM˜!ÑÔÐÐåÐFÐFµI¸fÑ4EÔ4EÐFÑFÔFÑGÔGÐGr0   )ro   rp   )rX   rY   rZ   r   r\   r[   r   ÚfloatrL   r   r   r]   rW   r^   r_   s   @r.   rn   rn   t   s½   ø€ € € € € ð  Øðð à”)ðð ðð ˜S "¤)˜^Ô,ð	ð
 ðð ðð ð ð ð ð ðBH˜ð H D¨¨f¨Ô$5ð Hð Hð Hð Hð Hð Hð Hð Hr0   rn   rq   Útrainable_layersc                 ó¬  — | j         } dgd„ t          | ¦  «        D ¦   «         z   t          | ¦  «        dz
  gz   }t          |¦  «        }d|cxk    r|k    sn t          d¦  «        ‚|dk    rt          | ¦  «        n
|||z
           }| d |…         D ].}|                     ¦   «         D ]}|                     d¦  «         ŒŒ/t          | |d         |¦  «        S )Nr   c                 ó:   — g | ]\  }}t          |d d¦  «        ¯|‘ŒS )Ú_is_cnF)Úgetattr)r†   r‡   Úbs      r.   r‰   z(_mobilenet_extractor.<locals>.<listcomp>¬   s.   € Ð\Ð\Ð\¡  AÅÈÈ8ÐUZÑ@[Ô@[Ð\˜1Ð\Ð\Ð\r0   r   zYtrainable_layers should be in the range [0, {num_stages}], instead got {trainable_layers}Féþÿÿÿ)r€   rŠ   Úlenr~   Ú
parametersÚrequires_grad_rn   )rq   r�   r&   Ústage_indicesÚ
num_stagesÚfreeze_beforer’   Ú	parameters           r.   Ú_mobilenet_extractorr›   ¤   s  € ð
 Ô €Hð �CÐ\Ð\­°8Ñ)<Ô)<Ð\Ñ\Ô\Ñ\Õ`cÐdlÑ`mÔ`mÐpqÑ`qÐ_rÑr€MÝ�]Ñ#Ô#€Jð Ð Ð.Ð.Ò.Ð. JÒ.Ð.Ð.Ð.ÝÐtÑuÔuÐuØ%5¸Ò%:Ð%:•C˜‘M”M�MÀÈjÐ[kÑNkÔ@l€Mà�n�}�nÔ%ð ,ð ,ˆØŸš™œð 	,ð 	,ˆIØ×$Ò$ UÑ+Ô+Ð+Ð+ð	,õ ,¨H°mÀBÔ6GÈÑTÔTÐTr0   c                   óH   — e Zd Z edededddddiidd	d
dœ¬¦  «        ZeZdS )r!   zShttps://download.pytorch.org/models/ssdlite320_mobilenet_v3_large_coco-a79551df.pthi¼}4 )r   r   z]https://github.com/pytorch/vision/tree/main/references/detection#ssdlite320-mobilenetv3-largezCOCO-val2017Úbox_mapgÍÌÌÌÌL5@g-²�ï§â?g¼t“Ö*@zSThese weights were produced by following a similar training recipe as on the paper.)Ú
num_paramsÚ
categoriesÚmin_sizeÚrecipeÚ_metricsÚ_opsÚ
_file_sizeÚ_docs)ÚurlÚ
transformsÚmetaN)rX   rY   rZ   r   r   r   ÚCOCO_V1ÚDEFAULTr…   r0   r.   r!   r!   »   sd   € € € € € ØˆgØaØ"à!Ø*ØØuàØ˜tð!ðð
 Ø Ønð
ð 
ðñ ô €Gð$ €G€G€Gr0   Ú
pretrainedÚpretrained_backbone)ÚweightsÚweights_backboneT)r­   ÚprogressrH   r®   Útrainable_backbone_layersr&   r­   r¯   rH   r®   r°   Úkwargsc           
      óì  — t                                | ¦  «        } t          j        |¦  «        }d|v rt          j        d¦  «         | �,d}t          d|t          | j        d         ¦  «        ¦  «        }n|€d}t          | dup|du|dd¦  «        }|du }|€t          t          j        dd	¬
¦  «        }t          d||||dœ|¤Ž}|€t          |¦  «         t          |||¦  «        }d}	t          d„ t!          d¦  «        D ¦   «         dd¬¦  «        }
t#          j        ||	¦  «        }|
                     ¦   «         }t          |¦  «        t          |
j        ¦  «        k    r4t+          dt          |¦  «        › dt          |
j        ¦  «        › �¦  «        ‚ddddg d¢g d¢dœ}i |¥|¥}t-          ||
|	|fdt/          ||||¦  «        i|¤Ž}| �*|                     |                      |d¬¦  «        ¦  «         |S )aœ  SSDlite model architecture with input size 320x320 and a MobileNetV3 Large backbone, as
    described at `Searching for MobileNetV3 <https://arxiv.org/abs/1905.02244>`__ and
    `MobileNetV2: Inverted Residuals and Linear Bottlenecks <https://arxiv.org/abs/1801.04381>`__.

    .. betastatus:: detection module

    See :func:`~torchvision.models.detection.ssd300_vgg16` for more details.

    Example:

        >>> model = torchvision.models.detection.ssdlite320_mobilenet_v3_large(weights=SSDLite320_MobileNet_V3_Large_Weights.DEFAULT)
        >>> model.eval()
        >>> x = [torch.rand(3, 320, 320), torch.rand(3, 500, 400)]
        >>> predictions = model(x)

    Args:
        weights (:class:`~torchvision.models.detection.SSDLite320_MobileNet_V3_Large_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.detection.SSDLite320_MobileNet_V3_Large_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        num_classes (int, optional): number of output classes of the model
            (including the background).
        weights_backbone (:class:`~torchvision.models.MobileNet_V3_Large_Weights`, optional): The pretrained
            weights for the backbone.
        trainable_backbone_layers (int, optional): number of trainable (not frozen) layers
            starting from final block. Valid values are between 0 and 6, with 6 meaning all
            backbone layers are trainable. If ``None`` is passed (the default) this value is
            set to 6.
        norm_layer (callable, optional): Module specifying the normalization layer to use.
        **kwargs: parameters passed to the ``torchvision.models.detection.ssd.SSD``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/detection/ssdlite.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.detection.SSDLite320_MobileNet_V3_Large_Weights
        :members:
    Úsizez?The size of the model is already fixed; ignoring the parameter.NrH   rŸ   é[   é   gü©ñÒMbP?r8   )ÚepsÚmomentum)r­   r¯   r&   Úreduced_tail)é@  r¹   c                 ó   — g | ]}d dg‘ŒS )r   r   r…   )r†   Ú_s     r.   r‰   z1ssdlite320_mobilenet_v3_large.<locals>.<listcomp>,  s   € Ð+EÐ+EÐ+E°q¨Q°¨FÐ+EÐ+EÐ+Er0   gš™™™™™É?gffffffî?)Ú	min_ratioÚ	max_ratioz4The length of the output channels from the backbone z? do not match the length of the anchor generator aspect ratios gš™™™™™á?i,  )ç      à?r¾   r¾   )Úscore_threshÚ
nms_threshÚdetections_per_imgÚtopk_candidatesÚ
image_meanÚ	image_stdÚheadT)r¯   Ú
check_hashr…   )r!   Úverifyr   ÚwarningsÚwarnr   r”   r¨   r   r   r   ÚBatchNorm2dr   rD   r›   r   ÚrangeÚ	det_utilsÚretrieve_out_channelsÚnum_anchors_per_locationÚaspect_ratiosr~   r   rF   Úload_state_dictÚget_state_dict)r­   r¯   rH   r®   r°   r&   r±   Úreduce_tailrq   r³   Úanchor_generatorr$   rG   ÚdefaultsÚmodels                  r.   r"   r"   Ñ   s±  € õp 4×:Ò:¸7ÑCÔC€GÝ1Ô8Ð9IÑJÔJÐà�ÐÐÝŒÐWÑXÔXÐXàÐØÐÝ+¨M¸;ÍÈGÌLÐYeÔLfÑHgÔHgÑhÔhˆˆØ	Ð	Øˆå :Ø�tÐÐ;Ð/°tÐ;Ð=VÐXYÐ[\ñ!ô !Ðð
 # dÐ*€KàÐÝ�Rœ^°ÀÐFÑFÔFˆ
å!ð Ø ¨8À
ÐYdðð Øhnðð €Hð Ðå�XÑÔÐÝ#ØØ!Øñô €Hð €DÝ*Ð+EÐ+E½EÀ!¹H¼HÐ+EÑ+EÔ+EÐQTÐ`dÐeÑeÔeÐÝÔ2°8¸TÑBÔB€LØ"×;Ò;Ñ=Ô=€KÝ
ˆ<ÑÔ�CÐ 0Ô >Ñ?Ô?Ò?Ð?Ýð {Å3À|ÑCTÔCTð  {ð  {õ  VYð  Zjô  Zxñ  Vyô  Vyð  {ð  {ñ
ô 
ð 	
ð
 ØØ!Øð &�o�oØ$�_�_ð	ð 	€Hð )�XÐ( Ð(€FÝØØØØð	ð õ
 ˜ {°KÀÑLÔLðð ðð €Eð ÐØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐYà€Lr0   )>rÈ   Úcollectionsr   Ú	functoolsr   Útypingr   r   r   r   r	   r
   r=   r   r   Úops.miscr   Útransforms._presetsr   Úutilsr   Ú r   Ú_apir   r   r   Ú_metar   r   r   r   Úmobilenetv3r   r   rÌ   Úanchor_utilsr   Úbackbone_utilsr   Ússdr   r    Ú__all__r[   r\   r+   r/   r5   rD   rF   rM   rO   rn   ÚMobileNetV2ÚMobileNetV3r›   r!   r©   ÚIMAGENET1K_V1Úboolr"   r…   r0   r.   ú<module>rè      sq  ðØ €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à €€€Ø Ð Ð Ð Ð Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø $Ð $Ð $Ð $Ð $Ð $Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ !Ð !Ð !Ð !Ð !Ð !Ø -Ð -Ð -Ð -Ð -Ð -Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ð ,Ø#ð€ðØðØ$'ðØ69ðØGOÐPSÐUWÔU^ÐP^ÔG_ðà„]ðð ð ð ð$˜cð °ð À(È3ÐPRÔPYÈ>ÔBZð Ð_aÔ_lð ð ð ð ð29�r”yð 9ð 9ð 9ð 9ð
ð 
ð 
ð 
ð 
�"”)ñ 
ô 
ð 
ð2ð 2ð 2ð 2ð 2 ñ 2ô 2ð 2ð&ð &ð &ð &ð &˜Nñ &ô &ð &ð-Hð -Hð -Hð -Hð -H r¤yñ -Hô -Hð -Hð`UØ�IÔ)¨9Ô+@Ð@ÔAðUàðUð ˜˜bœi˜Ô(ðUð Uð Uð Uð.ð ð ð ð ¨Kñ ô ð ð, €ÑÔØÐØÐ@ÔHÐIØ+Ð-GÔ-UÐVðñ ô ð @DØØ!%Ø=WÔ=eØ/3Ø59ðuð uð uàÐ;Ô<ðuð ðuð ˜#”ð	uð
 Ð9Ô:ðuð  (¨œ}ðuð ˜ # r¤y .Ô1Ô2ðuð ðuð 	ðuð uð uñ	ô ñ Ôð
uð uð ur0   