§
    ‚Štj¨a  ã                   óâ  — d Z ddlZddlmZ ddl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	l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 ddlmZmZmZmZ ddlm Z m!Z! ddl"m#Z# ddl$m%Z%  ej&        e'¦  «        Z( G d„ dej)        ¦  «        Z* G d„ dej)        ¦  «        Z+	 	 d>dej)        dej,        dej,        dej,        dej,        dz  de-dz  de-dee         fd„Z. G d „ d!ej)        ¦  «        Z/ G d"„ d#ej)        ¦  «        Z0 G d$„ d%ej)        ¦  «        Z1 G d&„ d'ej)        ¦  «        Z2 G d(„ d)ej)        ¦  «        Z3 G d*„ d+ej)        ¦  «        Z4 G d,„ d-ej)        ¦  «        Z5 G d.„ d/e¦  «        Z6e G d0„ d1e¦  «        ¦   «         Z7 G d2„ d3e7¦  «        Z8e G d4„ d5e7¦  «        ¦   «         Z9 ed6¬7¦  «         G d8„ d9e7¦  «        ¦   «         Z: ed:¬7¦  «         G d;„ d<ee7¦  «        ¦   «         Z;g d=¢Z<dS )?zPyTorch DINOv2 model.é    N)ÚCallable)Únné   )Úinitialization)ÚACT2FN)ÚBackboneMixinÚfilter_output_hidden_states)ÚGradientCheckpointingLayer)ÚBackboneOutputÚBaseModelOutputÚBaseModelOutputWithPoolingÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚloggingÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚDinov2Configc                   ó’   ‡ — e Zd ZdZdeddfˆ fd„Zdej        dededej        fd	„Z	dd
ej        dej        dz  dej        fd„Z
ˆ xZS )ÚDinov2EmbeddingszM
    Construct the CLS token, mask token, position and patch embeddings.
    ÚconfigÚreturnNc                 ó@  •— t          ¦   «                              ¦   «          t          j        t	          j        dd|j        ¦  «        ¦  «        | _        |j        r1t          j        t	          j	        d|j        ¦  «        ¦  «        | _
        t          |¦  «        | _        | j        j        }t          j        t	          j        d|dz   |j        ¦  «        ¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        |j        | _        || _        d S )Nr   )ÚsuperÚ__init__r   Ú	ParameterÚtorchÚrandnÚhidden_sizeÚ	cls_tokenÚuse_mask_tokenÚzerosÚ
mask_tokenÚDinov2PatchEmbeddingsÚpatch_embeddingsÚnum_patchesÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutÚ
patch_sizer   )Úselfr   r,   Ú	__class__s      €úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/dinov2/modeling_dinov2.pyr!   zDinov2Embeddings.__init__+   sÞ   ø€ Ý‰Œ×ÒÑÔÐåœ¥e¤k°!°Q¸Ô8JÑ&KÔ&KÑLÔLˆŒØÔ ð 	OÝ œl­5¬;°q¸&Ô:LÑ+MÔ+MÑNÔNˆDŒOÝ 5°fÑ =Ô =ˆÔØÔ+Ô7ˆÝ#%¤<µ´¸A¸{ÈQ¹ÐPVÔPbÑ0cÔ0cÑ#dÔ#dˆÔ Ý”z &Ô"<Ñ=Ô=ˆŒØ Ô+ˆŒØ$Ô3ˆÔØˆŒˆˆó    Ú
embeddingsÚheightÚwidthc                 ó  — |j         d         dz
  }| j        j         d         dz
  }t          j                             ¦   «         s||k    r||k    r| j        S | j        dd…dd…f         }| j        dd…dd…f         }|j         d         }|| j        z  }	|| j        z  }
t          |dz  ¦  «        }|                     d|||¦  «        }|                     dddd¦  «        }|j	        }t          j                             |                     t          j        ¦  «        |	|
fdd	¬
¦  «                             |¬¦  «        }|                     dddd¦  «                             dd|¦  «        }t          j        ||fd¬¦  «        S )a-  
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing and interpolation at torch.float32 precision.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r   Néÿÿÿÿg      à?r   r   é   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údtype©Údim)Úshaper-   r#   ÚjitÚ
is_tracingr1   r   ÚreshapeÚpermuterA   r   Ú
functionalÚinterpolateÚtoÚfloat32ÚviewÚcat)r2   r6   r7   r8   r,   Únum_positionsÚclass_pos_embedÚpatch_pos_embedrC   Ú
new_heightÚ	new_widthÚsqrt_num_positionsÚtarget_dtypes                r4   Úinterpolate_pos_encodingz)Dinov2Embeddings.interpolate_pos_encoding9   sž  € ð !Ô& qÔ)¨AÑ-ˆØÔ0Ô6°qÔ9¸AÑ=ˆõ Œy×#Ò#Ñ%Ô%ð 	,¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?ØÔ+Ð+àÔ2°1°1°1°b°q°b°5Ô9ˆØÔ2°1°1°1°a°b°b°5Ô9ˆàÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å& }°cÑ'9Ñ:Ô:ÐØ)×1Ò1°!Ð5GÐI[Ð]`ÑaÔaˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆØ&Ô,ˆÝœ-×3Ò3Ø×Ò�uœ}Ñ-Ô-Ø˜iÐ(ØØð	 4ñ 
ô 
÷
 Š"�<ˆ"Ñ
 Ô
 ð 	ð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆåŒy˜/¨?Ð;ÀÐCÑCÔCÐCr5   Úpixel_valuesÚbool_masked_posc                 ó&  — |j         \  }}}}| j        j        j        j        }|                      |                     |¬¦  «        ¦  «        }|�`| j        rYt          j        | 	                    d¦  «        | j
                             |j        ¦  «         	                    d¦  «        |¦  «        }| j                             |dd¦  «        }	t          j        |	|fd¬¦  «        }||                      |||¦  «        z   }|                      |¦  «        }|S )Nr@   r:   r   r   rB   )rD   r+   Ú
projectionÚweightrA   rK   r'   r#   ÚwhereÚ	unsqueezer)   r&   ÚexpandrN   rV   r0   )
r2   rW   rX   Ú
batch_sizeÚ_r7   r8   rU   r6   Ú
cls_tokenss
             r4   ÚforwardzDinov2Embeddings.forwarda   s  € Ø'3Ô'9Ñ$ˆ
�A�v˜uØÔ,Ô7Ô>ÔDˆØ×*Ò*¨<¯?ª?À¨?Ñ+NÔ+NÑOÔOˆ
àÐ&¨4Ô+>Ð&ÝœØ×)Ò)¨"Ñ-Ô-¨t¬×/AÒ/AÀ*ÔBRÑ/SÔ/S×/]Ò/]Ð^_Ñ/`Ô/`Ðblñô ˆJð
 ”^×*Ò*¨:°r¸2Ñ>Ô>ˆ
Ý”Y 
¨JÐ7¸QÐ?Ñ?Ô?ˆ
ð   $×"?Ò"?À
ÈFÐTYÑ"ZÔ"ZÑZˆ
à—\’\ *Ñ-Ô-ˆ
àÐr5   ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   r#   ÚTensorÚintrV   rb   Ú__classcell__©r3   s   @r4   r   r   &   sÑ   ø€ € € € € ðð ð˜|ð °ð ð ð ð ð ð ð&D°5´<ð &DÈð &DÐUXð &DÐ]bÔ]ið &Dð &Dð &Dð &DðPð  E¤Lð À5Ä<ÐRVÑCVð ÐbgÔbnð ð ð ð ð ð ð ð r5   r   c                   óF   ‡ — e Zd ZdZˆ fd„Zdej        dej        fd„Zˆ xZS )r*   zì
    This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
    `hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
    Transformer.
    c                 óÌ  •— t          ¦   «                              ¦   «          |j        |j        }}|j        |j        }}t          |t          j        j	        ¦  «        r|n||f}t          |t          j        j	        ¦  «        r|n||f}|d         |d         z  |d         |d         z  z  }|| _        || _        || _        || _
        t          j        ||||¬¦  «        | _        d S )Nr   r   )Úkernel_sizeÚstride)r    r!   Ú
image_sizer1   Únum_channelsr%   Ú
isinstanceÚcollectionsÚabcÚIterabler,   r   ÚConv2drZ   )r2   r   rp   r1   rq   r%   r,   r3   s          €r4   r!   zDinov2PatchEmbeddings.__init__~   sá   ø€ Ý‰Œ×ÒÑÔÐØ!'Ô!2°FÔ4E�Jˆ
Ø$*Ô$7¸Ô9K�kˆå#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø! !”}¨
°1¬Ñ5¸*ÀQ¼-È:ÐVWÌ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔåœ) L°+È:Ð^hÐiÑiÔiˆŒˆˆr5   rW   r   c                 óä   — |j         d         }|| j        k    rt          d| j        › d|› d�¦  «        ‚|                      |¦  «                             d¦  «                             dd¦  «        }|S )Nr   zoMake sure that the channel dimension of the pixel values match with the one set in the configuration. Expected z	 but got ú.r;   )rD   rq   Ú
ValueErrorrZ   ÚflattenÚ	transpose)r2   rW   rq   r6   s       r4   rb   zDinov2PatchEmbeddings.forward�   s“   € Ø#Ô)¨!Ô,ˆØ˜4Ô,Ò,Ð,ÝðIØ!Ô.ðIð IØ9EðIð Ið Iñô ð ð —_’_ \Ñ2Ô2×:Ò:¸1Ñ=Ô=×GÒGÈÈ1ÑMÔMˆ
ØÐr5   )	rd   re   rf   rg   r!   r#   rh   rb   rj   rk   s   @r4   r*   r*   w   sm   ø€ € € € € ðð ðjð jð jð jð jð E¤Lð °U´\ð ð ð ð ð ð ð ð r5   r*   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr0   Úkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr:   ç      à¿r;   r   rB   )ÚpÚtrainingr   )
r=   r#   Úmatmulr{   r   rI   Úsoftmaxr0   r‡   Ú
contiguous)
r}   r~   r   r€   r�   r‚   r0   rƒ   Úattn_weightsÚattn_outputs
             r4   Úeager_attention_forwardr�   ™   sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r5   c                   ór   ‡ — e Zd Zdefˆ fd„Zdej        dee         de	ej        ej        f         fd„Z
ˆ xZS )ÚDinov2SelfAttentionr   c                 ó¤  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |d¦  «        s t          d|j        › d|j        › d�¦  «        ‚|| _        |j        | _        t          |j        |j        z  ¦  «        | _        | j        | j        z  | _	        |j
        | _        | j        dz  | _        d| _        t          j        |j        | j	        |j        ¬¦  «        | _        t          j        |j        | j	        |j        ¬¦  «        | _        t          j        |j        | j	        |j        ¬¦  «        | _        d S )	Nr   Úembedding_sizezThe hidden size z4 is not a multiple of the number of attention heads rx   r…   F©Úbias)r    r!   r%   Únum_attention_headsÚhasattrry   r   ri   Úattention_head_sizeÚall_head_sizeÚattention_probs_dropout_probÚdropout_probr‚   Ú	is_causalr   ÚLinearÚqkv_biasr~   r   r€   ©r2   r   r3   s     €r4   r!   zDinov2SelfAttention.__init__·   sB  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð7 6Ô#5ð 7ð 7ØÔ3ð7ð 7ð 7ñô ð ð
 ˆŒØ#)Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔØ"Ô?ˆÔØÔ/°Ñ5ˆŒØˆŒå”Y˜vÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
Ý”9˜VÔ/°Ô1CÈ&Ì/ÐZÑZÔZˆŒÝ”Y˜vÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
ˆ
ˆ
r5   Úhidden_statesrƒ   r   c                 ó~  — |j         d         }|d| j        | j        f} |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        }t          j	        | j
        j        t          ¦  «        } || |||d f| j        | j        | j        sdn| j        dœ|¤Ž\  }	}
|	                     ¦   «         d d…         | j        fz   }|	                     |¦  «        }	|	|
fS )Nr   r:   r   r;   r|   )rš   r‚   r0   éþÿÿÿ)rD   r”   r–   r   rM   r{   r€   r~   r   Úget_interfacer   Ú_attn_implementationr�   rš   r‚   r‡   r™   r=   r—   rG   )r2   rž   rƒ   r_   Ú	new_shapeÚ	key_layerÚvalue_layerÚquery_layerÚattention_interfaceÚcontext_layerÚattention_probsÚnew_context_layer_shapes               r4   rb   zDinov2SelfAttention.forwardË   sd  € ð
 #Ô(¨Ô+ˆ
Ø  DÔ$<¸dÔ>VÐVˆ	à0�D—H’H˜]Ñ+Ô+Ô0°)Ð<×FÒFÀqÈ!ÑLÔLˆ	Ø4�d—j’j Ñ/Ô/Ô4°iÐ@×JÒJÈ1ÈaÑPÔPˆØ4�d—j’j Ñ/Ô/Ô4°iÐ@×JÒJÈ1ÈaÑPÔPˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð *=Ð)<ØØØØØð
*
ð ”nØ”LØ#œ}ÐC�C�C°$Ô2Cð
*
ð 
*
ð ð
*
ð 
*
Ñ&ˆ�ð #0×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ%×-Ò-Ð.EÑFÔFˆà˜oÐ-Ð-r5   )rd   re   rf   r   r!   r#   rh   r   r   Útuplerb   rj   rk   s   @r4   r�   r�   ¶   s‘   ø€ € € € € ð]˜|ð ]ð ]ð ]ð ]ð ]ð ]ð(.à”|ð.ð Ð+Ô,ð.ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð	.ð .ð .ð .ð .ð .ð .ð .r5   r�   c                   óZ   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        dej        fd„Zˆ xZ	S )ÚDinov2SelfOutputz£
    The residual connection is defined in Dinov2Layer instead of here (as is the case with other models), due to the
    layernorm applied before each block.
    r   c                 óÌ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        d S rc   )	r    r!   r   r›   r%   Údenser.   r/   r0   r�   s     €r4   r!   zDinov2SelfOutput.__init__ô   sJ   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr5   rž   Úinput_tensorr   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rc   )r¯   r0   )r2   rž   r°   s      r4   rb   zDinov2SelfOutput.forwardù   s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØÐr5   ©
rd   re   rf   rg   r   r!   r#   rh   rb   rj   rk   s   @r4   r­   r­   î   s   ø€ € € € € ðð ð
>˜|ð >ð >ð >ð >ð >ð >ð
 U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r5   r­   c                   óX   ‡ — e Zd Zdefˆ fd„Zdej        dee         dej        fd„Z	ˆ xZ
S )ÚDinov2Attentionr   c                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S rc   )r    r!   r�   Ú	attentionr­   Úoutputr�   s     €r4   r!   zDinov2Attention.__init__  s;   ø€ Ý‰Œ×ÒÑÔÐÝ,¨VÑ4Ô4ˆŒÝ& vÑ.Ô.ˆŒˆˆr5   rž   rƒ   r   c                 óT   —  | j         |fi |¤Ž\  }}|                      ||¦  «        }|S rc   )r¶   r·   )r2   rž   rƒ   Úself_attn_outputr`   r·   s         r4   rb   zDinov2Attention.forward  s<   € ð
 -˜dœn¨]ÐEÐE¸fÐEÐEÑÐ˜!Ø—’Ð-¨}Ñ=Ô=ˆØˆr5   )rd   re   rf   r   r!   r#   rh   r   r   rb   rj   rk   s   @r4   r´   r´      s~   ø€ € € € € ð/˜|ð /ð /ð /ð /ð /ð /ð
à”|ðð Ð+Ô,ðð 
Œð	ð ð ð ð ð ð ð r5   r´   c                   óD   ‡ — e Zd Zdˆ fd„Zdej        dej        fd„Zˆ xZS )ÚDinov2LayerScaler   Nc                 ó¸   •— t          ¦   «                              ¦   «          t          j        |j        t          j        |j        ¦  «        z  ¦  «        | _        d S rc   )	r    r!   r   r"   Úlayerscale_valuer#   Úonesr%   Úlambda1r�   s     €r4   r!   zDinov2LayerScale.__init__  sC   ø€ Ý‰Œ×ÒÑÔÐÝ”| FÔ$;½e¼jÈÔI[Ñ>\Ô>\Ñ$\Ñ]Ô]ˆŒˆˆr5   Úhidden_statec                 ó   — || j         z  S rc   )r¿   ©r2   rÀ   s     r4   rb   zDinov2LayerScale.forward  s   € Ø˜dœlÑ*Ð*r5   ©r   N©rd   re   rf   r!   r#   rh   rb   rj   rk   s   @r4   r»   r»     si   ø€ € € € € ð^ð ^ð ^ð ^ð ^ð ^ð+ E¤Lð +°U´\ð +ð +ð +ð +ð +ð +ð +ð +r5   r»   c                   óD   ‡ — e Zd Zdˆ fd„Zdej        dej        fd„Zˆ xZS )Ú	Dinov2MLPr   Nc                 ó~  •— t          ¦   «                              ¦   «          |j        x}}t          |j        |j        z  ¦  «        }t          j        ||d¬¦  «        | _        t          |j	        t          ¦  «        rt          |j	                 | _        n|j	        | _        t          j        ||d¬¦  «        | _        d S )NTr’   )r    r!   r%   ri   Ú	mlp_ratior   r›   Úfc1rr   Ú
hidden_actÚstrr   Ú
activationÚfc2©r2   r   Úin_featuresÚout_featuresÚhidden_featuresr3   s        €r4   r!   zDinov2MLP.__init__  s¢   ø€ Ý‰Œ×ÒÑÔÐØ%+Ô%7Ð7ˆ�lÝ˜fÔ0°6Ô3CÑCÑDÔDˆÝ”9˜[¨/ÀÐEÑEÔEˆŒÝ�fÔ'­Ñ-Ô-ð 	0Ý$ VÔ%6Ô7ˆDŒOˆOà$Ô/ˆDŒOÝ”9˜_¨lÀÐFÑFÔFˆŒˆˆr5   rÀ   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rc   )rÉ   rÌ   rÍ   rÂ   s     r4   rb   zDinov2MLP.forward%  s;   € Ø—x’x Ñ-Ô-ˆØ—’ |Ñ4Ô4ˆØ—x’x Ñ-Ô-ˆØÐr5   rÃ   rÄ   rk   s   @r4   rÆ   rÆ     si   ø€ € € € € ð	Gð 	Gð 	Gð 	Gð 	Gð 	Gð E¤Lð °U´\ð ð ð ð ð ð ð ð r5   rÆ   c                   óD   ‡ — e Zd Zdˆ fd„Zdej        dej        fd„Zˆ xZS )ÚDinov2SwiGLUFFNr   Nc                 óD  •— t          ¦   «                              ¦   «          |j        x}}t          |j        |j        z  ¦  «        }t          |dz  dz  ¦  «        dz   dz  dz  }t          j        |d|z  d¬¦  «        | _        t          j        ||d¬¦  «        | _        d S )Nr;   r   é   é   Tr’   )	r    r!   r%   ri   rÈ   r   r›   Ú
weights_inÚweights_outrÎ   s        €r4   r!   zDinov2SwiGLUFFN.__init__-  s    ø€ Ý‰Œ×ÒÑÔÐØ%+Ô%7Ð7ˆ�lÝ˜fÔ0°6Ô3CÑCÑDÔDˆÝ˜°Ñ2°QÑ6Ñ7Ô7¸!Ñ;ÀÑAÀAÑEˆåœ) K°°_Ñ1DÈ4ÐPÑPÔPˆŒÝœ9 _°lÈÐNÑNÔNˆÔÐÐr5   rÀ   c                 óÎ   — |                       |¦  «        }|                     dd¬¦  «        \  }}t          j                             |¦  «        |z  }|                      |¦  «        S )Nr;   r:   rB   )rØ   Úchunkr   rI   ÚsilurÙ   )r2   rÀ   Úx1Úx2Úhiddens        r4   rb   zDinov2SwiGLUFFN.forward6  s]   € Ø—’ |Ñ4Ô4ˆØ×#Ò# A¨2Ð#Ñ.Ô.‰ˆˆBÝ”×#Ò# BÑ'Ô'¨"Ñ,ˆØ×Ò Ñ'Ô'Ð'r5   rÃ   rÄ   rk   s   @r4   rÔ   rÔ   ,  si   ø€ € € € € ðOð Oð Oð Oð Oð Oð( E¤Lð (°U´\ð (ð (ð (ð (ð (ð (ð (ð (r5   rÔ   c                   ó^   ‡ — e Zd ZdZd
deddfˆ fd„Zdej        dej        fd„Zde	fd	„Z
ˆ xZS )ÚDinov2DropPathzÏStochastic depth (DropPath) per sample, for residual blocks.

    Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
    <https://arxiv.org/abs/1603.09382>`_.
    r|   Ú	drop_probr   Nc                 óV   •— t          ¦   «                              ¦   «          || _        d S rc   )r    r!   râ   )r2   râ   r3   s     €r4   r!   zDinov2DropPath.__init__E  s$   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒˆˆr5   rž   c                 ó  — | j         dk    s| j        s|S d| j         z
  }|j        d         fd|j        dz
  z  z   }t	          j        ||j        |j        ¬¦  «        }t	          j        ||z   ¦  «        }| 	                    |¦  «        |z  S )Nr|   r   r   )r   )rA   Údevice)
râ   r‡   rD   Úndimr#   ÚrandrA   rå   ÚfloorÚdiv)r2   rž   Ú	keep_probrD   Úrandom_tensors        r4   rb   zDinov2DropPath.forwardI  s“   € ØŒ>˜SÒ Ð ¨¬Ð Ø Ð Ø˜œÑ&ˆ	ØÔ$ QÔ'Ð)¨D°MÔ4FÈÑ4JÑ,KÑKˆÝœ
 5°Ô0CÈMÔL`ÐaÑaÔaˆÝœ M°IÑ$=Ñ>Ô>ˆØ× Ò  Ñ+Ô+¨mÑ;Ð;r5   c                 ó   — d| j         › �S )Nzp=)râ   ©r2   s    r4   Ú
extra_reprzDinov2DropPath.extra_reprR  s   € Ø$�D”NÐ$Ð$Ð$r5   )r|   )rd   re   rf   rg   Úfloatr!   r#   rh   rb   rË   rî   rj   rk   s   @r4   rá   rá   >  s›   ø€ € € € € ðð ð#ð # %ð #°$ð #ð #ð #ð #ð #ð #ð< U¤\ð <°e´lð <ð <ð <ð <ð%˜Cð %ð %ð %ð %ð %ð %ð %ð %r5   rá   c                   óP   ‡ — e Zd ZdZdeddfˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚDinov2LayerzCThis corresponds to the Block class in the original implementation.r   r   Nc                 ó"  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¬¦  «        | _        t          |¦  «        | _        t          |¦  «        | _
        |j        dk    rt          |j        ¦  «        nt          j        ¦   «         | _        t          j        |j        |j        ¬¦  «        | _        |j        rt#          |¦  «        | _        nt'          |¦  «        | _        t          |¦  «        | _        d S )N©Úepsr|   )r    r!   r   Ú	LayerNormr%   Úlayer_norm_epsÚnorm1r´   r¶   r»   Úlayer_scale1Údrop_path_raterá   ÚIdentityÚ	drop_pathÚnorm2Úuse_swiglu_ffnrÔ   ÚmlprÆ   Úlayer_scale2r�   s     €r4   r!   zDinov2Layer.__init__Y  sà   ø€ Ý‰Œ×ÒÑÔÐå”\ &Ô"4¸&Ô:OÐPÑPÔPˆŒ
Ý(¨Ñ0Ô0ˆŒÝ,¨VÑ4Ô4ˆÔØBHÔBWÐZ]ÒB]ÐB]�¨Ô(=Ñ>Ô>Ð>ÕceÔcnÑcpÔcpˆŒå”\ &Ô"4¸&Ô:OÐPÑPÔPˆŒ
àÔ ð 	)Ý& vÑ.Ô.ˆDŒHˆHå  Ñ(Ô(ˆDŒHÝ,¨VÑ4Ô4ˆÔÐÐr5   rž   c                 ób  — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        |z   }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        |z   }|S rc   )r÷   r¶   rø   rû   rü   rþ   rÿ   )r2   rž   Úhidden_states_normÚself_attention_outputÚlayer_outputs        r4   rb   zDinov2Layer.forwardi  s¬   € ð "ŸZšZ¨Ñ6Ô6ÐØ $§¢Ð/AÑ BÔ BÐØ $× 1Ò 1Ð2GÑ HÔ HÐð ŸšÐ'<Ñ=Ô=ÀÑMˆð —z’z -Ñ0Ô0ˆØ—x’x Ñ-Ô-ˆØ×(Ò(¨Ñ6Ô6ˆð —~’~ lÑ3Ô3°mÑCˆàÐr5   r²   rk   s   @r4   rñ   rñ   V  s{   ø€ € € € € ØMÐMð5˜|ð 5°ð 5ð 5ð 5ð 5ð 5ð 5ð à”|ðð 
Œðð ð ð ð ð ð ð r5   rñ   c                   ó¸   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	dZ
dZdZdZeedœZ ej        ¦   «         dej        ej        z  ej        z  d	d
fˆ fd„¦   «         Zˆ xZS )ÚDinov2PreTrainedModelr   Údinov2rW   )ÚimageTrñ   )rž   Ú
attentionsr}   r   Nc                 ó´  •— t          ¦   «                              |¦  «         t          |t          j        t          j        f¦  «        rJt          j        |j        d| j	        j
        ¬¦  «         |j        �t          j        |j        ¦  «         dS dS t          |t          ¦  «        rut          j        |j        d| j	        j
        ¬¦  «         t          j        |j        d| j	        j
        ¬¦  «         | j	        j        rt          j        |j        ¦  «         dS dS t          |t$          ¦  «        r&t          j        |j        | j	        j        ¦  «         dS dS )zInitialize the weightsr|   )ÚmeanÚstdN)r    Ú_init_weightsrr   r   r›   rv   ÚinitÚtrunc_normal_r[   r   Úinitializer_ranger“   Úzeros_r   r-   r&   r'   r)   r»   Ú	constant_r¿   r½   )r2   r}   r3   s     €r4   r  z#Dinov2PreTrainedModel._init_weights�  sC  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�rœy­"¬)Ð4Ñ5Ô5ð 
	IÝÔ˜vœ}°3¸D¼KÔ<YÐZÑZÔZÐZØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð 'Ð&å˜Õ 0Ñ1Ô1ð 	IÝÔ˜vÔ9ÀÈÌÔIfÐgÑgÔgÐgÝÔ˜vÔ/°c¸t¼{Ô?\Ð]Ñ]Ô]Ð]ØŒ{Ô)ð /Ý”˜FÔ-Ñ.Ô.Ð.Ð.Ð.ð/ð /å˜Õ 0Ñ1Ô1ð 	IÝŒN˜6œ>¨4¬;Ô+GÑHÔHÐHÐHÐHð	Ið 	Ir5   )rd   re   rf   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendrñ   r�   Ú_can_record_outputsr#   Úno_gradr   r›   rv   rõ   r  rj   rk   s   @r4   r  r    sÒ   ø€ € € € € € àÐÐÑØ ÐØ$€OØ!ÐØ&*Ð#Ø&˜ÐØ€NØÐØÐØ"&Ðà$Ø)ðð Ðð
 €U„]�_„_ðI B¤I°´	Ñ$9¸B¼LÑ$Hð IÈTð Ið Ið Ið Ið Iñ „_ðIð Ið Ið Ið Ir5   r  c                   ó‚   ‡ — e Zd Zdefˆ fd„Ze ed¬¦  «        dej        de	e
         defd„¦   «         ¦   «         Zˆ xZS )	ÚDinov2Encoderr   c                 óâ   •‡— t          ¦   «                              ‰¦  «         t          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        |                      ¦   «          d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )rñ   ©Ú.0r`   r   s     €r4   ú
<listcomp>z*Dinov2Encoder.__init__.<locals>.<listcomp>¤  s!   ø€ Ð#aÐ#aÐ#a¸A¥K°Ñ$7Ô$7Ð#aÐ#aÐ#ar5   )r    r!   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayerÚ	post_initr�   s    `€r4   r!   zDinov2Encoder.__init__¢  sc   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”]Ð#aÐ#aÐ#aÐ#aÅÀvÔG_ÑA`ÔA`Ð#aÑ#aÔ#aÑbÔbˆŒ
Ø�ŠÑÔÐÐÐr5   F)Útie_last_hidden_statesrž   rƒ   r   c                 óL   — | j         D ]} ||¦  «        }Œt          |¬¦  «        S )N)Úlast_hidden_state)r)  r   )r2   rž   rƒ   Úlayer_modules       r4   rb   zDinov2Encoder.forward§  s7   € ð !œJð 	8ð 	8ˆLØ(˜L¨Ñ7Ô7ˆMˆMå°Ð?Ñ?Ô?Ð?r5   )rd   re   rf   r   r!   r   r   r#   rh   r   r   r   rb   rj   rk   s   @r4   r  r  ¡  s¦   ø€ € € € € ð˜|ð ð ð ð ð ð ð
  Ø€_¨EÐ2Ñ2Ô2ð@ U¤\ð @¸VÐDVÔ=Wð @Ð\kð @ð @ð @ñ 3Ô2ñ  Ôð@ð @ð @ð @ð @r5   r  c                   óš   ‡ — e Zd Zdefˆ fd„Zdefd„Zee	 	 d
de	j
        dz  de	j
        dz  dee         defd	„¦   «         ¦   «         Zˆ xZS )ÚDinov2Modelr   c                 ó  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        t          j        |j	        |j
        ¬¦  «        | _        |                      ¦   «          d S )Nró   )r    r!   r   r   r6   r  Úencoderr   rõ   r%   rö   Ú	layernormr*  r�   s     €r4   r!   zDinov2Model.__init__²  st   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå*¨6Ñ2Ô2ˆŒÝ$ VÑ,Ô,ˆŒåœ fÔ&8¸fÔ>SÐTÑTÔTˆŒð 	�ŠÑÔÐÐÐr5   r   c                 ó   — | j         j        S rc   ©r6   r+   rí   s    r4   Úget_input_embeddingsz Dinov2Model.get_input_embeddings¾  ó   € ØŒÔ/Ð/r5   NrW   rX   rƒ   c                 óþ   — |€t          d¦  «        ‚|                      ||¬¦  «        } | j        |fi |¤Ž}|j        }|                      |¦  «        }|dd…ddd…f         }t          |||j        |j        ¬¦  «        S )zï
        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, sequence_length)`):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0). Only relevant for
            pre-training.
        Nz You have to specify pixel_values)rX   r   )r-  Úpooler_outputrž   r  )ry   r6   r2  r-  r3  r   rž   r  )r2   rW   rX   rƒ   Úembedding_outputÚencoder_outputsÚsequence_outputÚpooled_outputs           r4   rb   zDinov2Model.forwardÁ  s£   € ð ÐÝÐ?Ñ@Ô@Ð@àŸ?š?¨<È˜?ÑYÔYÐà+7¨4¬<Ð8HÐ+SÐ+SÈFÐ+SÐ+SˆØ)Ô;ˆØŸ.š.¨Ñ9Ô9ˆØ'¨¨¨¨1¨a¨a¨a¨Ô0ˆå)Ø-Ø'Ø)Ô7Ø&Ô1ð	
ñ 
ô 
ð 	
r5   ©NN)rd   re   rf   r   r!   r*   r6  r   r   r#   rh   r   r   r   rb   rj   rk   s   @r4   r0  r0  °  sÒ   ø€ € € € € ð
˜|ð 
ð 
ð 
ð 
ð 
ð 
ð0Ð&;ð 0ð 0ð 0ð 0ð Øð -1Ø/3ð
ð 
à”l TÑ)ð
ð œ¨Ñ,ð
ð Ð+Ô,ð	
ð
 
$ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r5   r0  z§
    Dinov2 Model transformer with an image classification head on top (a linear layer on top of the final hidden state
    of the [CLS] token) e.g. for ImageNet.
    )Úcustom_introc                   ó’   ‡ — e Zd Zdeddfˆ fd„Zee	 	 d	dej        dz  dej        dz  de	e
         defd„¦   «         ¦   «         Zˆ xZS )
ÚDinov2ForImageClassificationr   r   Nc                 ó<  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        |j        dk    r"t          j        |j        dz  |j        ¦  «        nt          j        ¦   «         | _	        |  
                    ¦   «          d S )Nr   r;   )r    r!   Ú
num_labelsr0  r  r   r›   r%   rú   Ú
classifierr*  r�   s     €r4   r!   z%Dinov2ForImageClassification.__init__ç  sŽ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ! &Ñ)Ô)ˆŒð EKÔDUÐXYÒDYÐDY�BŒI�fÔ(¨1Ñ,¨fÔ.?Ñ@Ô@Ð@Õ_aÔ_jÑ_lÔ_lð 	Œð
 	�ŠÑÔÐÐÐr5   rW   Úlabelsrƒ   c                 óN  —  | j         |fi |¤Ž}|j        }|dd…df         }|dd…dd…f         }t          j        ||                     d¬¦  «        gd¬¦  «        }|                      |¦  «        }	d}
|� | j        ||	| j        fi |¤Ž}
t          |
|	|j	        |j
        ¬¦  «        S )aŠ  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nr   r   rB   )ÚlossÚlogitsrž   r  )r  r-  r#   rN   r
  rD  Úloss_functionr   r   rž   r  )r2   rW   rE  rƒ   Úoutputsr<  r&   Úpatch_tokensÚlinear_inputrH  rG  s              r4   rb   z$Dinov2ForImageClassification.forwardõ  sÜ   € ð /:¨d¬k¸,Ð.QÐ.QÈ&Ð.QÐ.Qˆà!Ô3ˆØ# A A A q DÔ)ˆ	Ø& q q q¨!¨"¨" uÔ-ˆå”y )¨\×->Ò->À1Ð->Ñ-EÔ-EÐ!FÈAÐNÑNÔNˆØ—’ Ñ.Ô.ˆàˆØÐØ%�4Ô% f¨f°d´kÐLÐLÀVÐLÐLˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r5   r>  )rd   re   rf   r   r!   r   r   r#   rh   r   r   r   rb   rj   rk   s   @r4   rA  rA  à  s½   ø€ € € € € ð˜|ð °ð ð ð ð ð ð ð Øð -1Ø&*ð
ð 
à”l TÑ)ð
ð ”˜tÑ#ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r5   rA  zO
    Dinov2 backbone, to be used with frameworks like DETR and MaskFormer.
    c            	       ó„   ‡ — e Zd Zˆ fd„Zdefd„Zeeede	j
        dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚDinov2Backbonec                 ó^  •‡— t          ¦   «                              ‰¦  «         ˆfd„t          ‰j        dz   ¦  «        D ¦   «         | _        t          ‰¦  «        | _        t          ‰¦  «        | _        t          j
        ‰j        ‰j        ¬¦  «        | _        |                      ¦   «          d S )Nc                 ó   •— g | ]	}‰j         ‘Œ
S r"  )r%   r#  s     €r4   r%  z+Dinov2Backbone.__init__.<locals>.<listcomp>!  s   ø€ Ð]Ð]Ð]°A˜VÔ/Ð]Ð]Ð]r5   r   ró   )r    r!   r'  r(  Únum_featuresr   r6   r  r2  r   rõ   r%   rö   r3  r*  r�   s    `€r4   r!   zDinov2Backbone.__init__  s›   øø€ Ý‰Œ×Ò˜Ñ Ô Ð à]Ð]Ð]Ð]½¸vÔ?WÐZ[Ñ?[Ñ9\Ô9\Ð]Ñ]Ô]ˆÔÝ*¨6Ñ2Ô2ˆŒÝ$ VÑ,Ô,ˆŒåœ fÔ&8¸fÔ>SÐTÑTÔTˆŒð 	�ŠÑÔÐÐÐr5   r   c                 ó   — | j         j        S rc   r5  rí   s    r4   r6  z#Dinov2Backbone.get_input_embeddings*  r7  r5   rW   rƒ   c                 óT  — d|d<   |                       |¦  «        } | j        |fi |¤Ž}|j        }g }t          | j        |¦  «        D ]¾\  }}|| j        v r°| j        j        r|                      |¦  «        }| j        j	        rn|dd…dd…f         }|j
        \  }	}
}}| j        j        }|                     |	||z  ||z  d¦  «        }|                     dddd¦  «                             ¦   «         }|                     |¦  «         Œ¿t!          t#          |¦  «        ||j        ¬	¦  «        S )
av  
        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, AutoBackbone
        >>> import torch
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> processor = AutoImageProcessor.from_pretrained("facebook/dinov2-base")
        >>> model = AutoBackbone.from_pretrained(
        ...     "facebook/dinov2-base", out_features=["stage2", "stage5", "stage8", "stage11"]
        ... )

        >>> inputs = processor(image, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> feature_maps = outputs.feature_maps
        >>> list(feature_maps[-1].shape)
        [1, 768, 16, 16]
        ```TÚoutput_hidden_statesNr   r:   r   r   r;   )Úfeature_mapsrž   r  )r6   r2  rž   ÚzipÚstage_namesrÐ   r   Úapply_layernormr3  Úreshape_hidden_statesrD   r1   rG   rH   rŠ   Úappendr   r«   r  )r2   rW   rƒ   r:  r·   rž   rU  ÚstagerÀ   r_   r`   r7   r8   r1   s                 r4   rb   zDinov2Backbone.forward-  sd  € ðD *.ˆÐ%Ñ&àŸ?š?¨<Ñ8Ô8ÐØ". $¤,Ð/?Ð"JÐ"JÀ6Ð"JÐ"JˆØÔ,ˆàˆÝ#& tÔ'7¸Ñ#GÔ#Gð 	2ð 	2ÑˆE�<Ø˜Ô)Ð)Ð)Ø”;Ô.ð @Ø#'§>¢>°,Ñ#?Ô#?�LØ”;Ô4ð QØ#/°°°°1°2°2°Ô#6�Lð 4@Ô3EÑ0�J  6¨5Ø!%¤Ô!7�JØ#/×#7Ò#7¸
ÀFÈjÑDXÐZ_ÐcmÑZmÐoqÑ#rÔ#r�LØ#/×#7Ò#7¸¸1¸aÀÑ#CÔ#C×#NÒ#NÑ#PÔ#P�LØ×#Ò# LÑ1Ô1Ð1øåÝ˜|Ñ,Ô,Ø'ØÔ(ð
ñ 
ô 
ð 	
r5   )rd   re   rf   r!   r*   r6  r   r	   r   r#   rh   r   r   r   rb   rj   rk   s   @r4   rN  rN    s®   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð0Ð&;ð 0ð 0ð 0ð 0ð Ø Øð8
à”lð8
ð Ð+Ô,ð8
ð 
ð	8
ð 8
ð 8
ñ „^ñ !Ô ñ Ôð8
ð 8
ð 8
ð 8
ð 8
r5   rN  )rA  r0  r  rN  )Nr|   )=rg   Úcollections.abcrs   r   r#   r   Ú r   r  Úactivationsr   Úbackbone_utilsr   r	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_dinov2r   Ú
get_loggerrd   ÚloggerÚModuler   r*   rh   rï   r�   r�   r­   r´   r»   rÆ   rÔ   rá   rñ   r  r  r0  rA  rN  Ú__all__r"  r5   r4   ú<module>rl     s  ðð Ð à Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø rÐ rÐ rÐ rÐ rÐ rÐ rÐ rÐ rÐ rÐ rÐ rØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø .Ð .Ð .Ð .Ð .Ð .ð 
ˆÔ	˜HÑ	%Ô	%€ðNð Nð Nð Nð N�r”yñ Nô Nð Nðbð ð ð ð ˜BœIñ ô ð ðP !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð:4.ð 4.ð 4.ð 4.ð 4.˜"œ)ñ 4.ô 4.ð 4.ðpð ð ð ð �r”yñ ô ð ð$ð ð ð ð �b”iñ ô ð ð +ð +ð +ð +ð +�r”yñ +ô +ð +ðð ð ð ð �”	ñ ô ð ð&(ð (ð (ð (ð (�b”iñ (ô (ð (ð$%ð %ð %ð %ð %�R”Yñ %ô %ð %ð0&ð &ð &ð &ð &Ð,ñ &ô &ð &ðR ðIð Ið Ið Ið I˜Oñ Iô Iñ „ðIðB@ð @ð @ð @ð @Ð)ñ @ô @ð @ð ð,
ð ,
ð ,
ð ,
ð ,
Ð'ñ ,
ô ,
ñ „ð,
ð^ €ððñ ô ð/
ð /
ð /
ð /
ð /
Ð#8ñ /
ô /
ñô ð/
ðd €ððñ ô ð
K
ð K
ð K
ð K
ð K
�]Ð$9ñ K
ô K
ñô ð
K
ð\ eÐ
dÐ
d€€€r5   