Ë
    Gêñi;>  ã                   óZ  — d Z ddlZddlm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 ddlmZmZmZ ddlmZ  ej2                  e«      Ze G d„ de«      «       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e fd„Z! G d„ dej:                  «      Z" G d„ dej:                  «      Z# G d„ d e«      Z$ G d!„ d"ej:                  «      Z% G d#„ d$ej:                  «      Z&y)&zTPyTorch IdeficsVision model: a copy of CLIPVisionModel using a simpler config objecté    N)ÚCallable)Ú	dataclass)Únné   )ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONS)ÚUnpack)ÚModelOutputÚTransformersKwargsÚloggingé   )ÚIdeficsVisionConfigc                   óÆ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
ej                  df   dz  ed<   dZe
ej                  df   dz  ed<   y)ÚIdeficsVisionModelOutputaÝ  
    Base class for vision model's outputs that also contains image embeddings of the pooling of the last hidden states.

    Args:
        image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`):
            The image embeddings obtained by applying the projection layer to the pooler_output.
        last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
            one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
    NÚimage_embedsÚlast_hidden_state.Úhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r   Útupler   © ó    úd/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/models/idefics/vision.pyr   r   '   sr   … ñð* .2€L�%×#Ñ# dÑ*Ó1Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r!   r   c                   ó¢   ‡ — e Zd Zdefˆ fd„Zdej                  dededej                  fd„Zddej                  d	e
dej                  fd
„Zˆ xZS )ÚIdeficsVisionEmbeddingsÚconfigc                 óÚ  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        t        j                  t        j                  | j                  «      «      | _        t        j                  |j                  | j                  | j                  | j                  d¬«      | _        | j
                  | j                  z  dz  | _        | j                  dz   | _        t        j"                  | j                   | j                  «      | _        | j'                  dt        j(                  | j                   «      j+                  d«      d¬«       y )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasé   r   Úposition_ids)r   éÿÿÿÿ)Ú
persistent)ÚsuperÚ__init__r%   Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizer   Ú	Parameterr   ÚrandnÚclass_embeddingÚConv2dÚnum_channelsÚpatch_embeddingÚnum_patchesÚnum_positionsÚ	EmbeddingÚposition_embeddingÚregister_bufferÚarangeÚexpand©Úselfr%   Ú	__class__s     €r"   r1   z IdeficsVisionEmbeddings.__init__F   s	  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä!Ÿ|™|¬E¯K©K¸¿¹Ó,GÓHˆÔä!Ÿy™yØ×+Ñ+ØŸ™ØŸ™Ø—?‘?Øô 
ˆÔð !ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-°Ñ1ˆÔÜ"$§,¡,¨t×/AÑ/AÀ4Ç>Á>Ó"RˆÔØ×Ñ˜^¬U¯\©\¸$×:LÑ:LÓ-M×-TÑ-TÐU\Ó-]ÐjoÐÕpr!   Ú
embeddingsÚheightÚwidthÚreturnc                 ó¼  — |j                   d   dz
  }| j                  | j                  «      }|j                   d   dz
  }||k(  r||k(  r|S |dd…df   }|dd…dd…f   }|j                   d   }	|| j                  j                  z  }
|| j                  j                  z  }|
dz   |dz   }}
t        j                  |«      }|j                  dt        |«      t        |«      |	«      }|j                  dddd«      }|j                  t        j                  k(  }|r4t        j                  d«       |j                  t        j                   «      }t"        j$                  j'                  ||
|z  ||z  fd	d
¬«      }|r|j                  t        j                  «      }t        |
«      |j                   d   k7  st        |«      |j                   d   k7  rBt)        dt        |
«      t        |«      f› d|j                   d   |j                   d   f› d�«      ‚|j                  dddd«      j+                  dd|	«      }t        j,                  |j/                  d«      |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.

        Source:
        https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174
        r   Nr   r.   gš™™™™™¹?r   r,   zËUpcasting patch_pos_embed to fp32 for interpolation since `upsample_bicubic2d_out_frame` in nn.functional.interpolate is not implemented for 'torch.bfloat16' dtype. This will result in a slight overhead.ÚbicubicF)Úscale_factorÚmodeÚalign_cornerséþÿÿÿzNumber of patches for images (z/) don't match the shape of position embedding (ú)©Údim)Úshaper?   r-   r%   r5   ÚmathÚsqrtÚreshapeÚintÚpermuteÚdtyper   Úbfloat16ÚloggerÚwarning_onceÚtoÚfloatr   Ú
functionalÚinterpolateÚ
ValueErrorÚviewÚcatÚ	unsqueeze)rD   rF   rG   rH   r<   Ú	pos_embedr=   Úclass_pos_embedÚpatch_pos_embedr3   Únum_h_patchesÚnum_w_patchesÚsqrt_num_positionsÚfp32_upcastings                 r"   Úinterpolate_pos_encodingz0IdeficsVisionEmbeddings.interpolate_pos_encoding]   sf  € ð !×&Ñ& qÑ)¨AÑ-ˆØ×+Ñ+¨D×,=Ñ,=Ó>ˆ	Ø!Ÿ™¨Ñ*¨QÑ.ˆØ˜-Ò'¨F°eªOØÐØ#¢A q D™/ˆØ#¢A q¡r EÑ*ˆà×$Ñ$ RÑ(ˆ	Ø $§+¡+×"8Ñ"8Ñ8ˆØ §¡×!7Ñ!7Ñ7ˆð (5°sÑ':¸MÈCÑ<O�}ˆÜ!ŸY™Y }Ó5ÐØ)×1Ñ1°!´SÐ9KÓ5LÌcÐRdÓNeÐgpÓqˆØ)×1Ñ1°!°Q¸¸1Ó=ˆØ(×.Ñ.´%·.±.Ñ@ˆÙÜ×Ñðhôð .×0Ñ0´·±Ó=ˆOÜŸ-™-×3Ñ3ØØ'Ð*<Ñ<¸mÐN`Ñ>`ÐaØØð	 4ó 
ˆñ Ø-×0Ñ0´·±Ó@ˆOÜˆ}Ó ×!6Ñ!6°rÑ!:Ò:¼cÀ-Ó>PÐTc×TiÑTiÐjlÑTmÒ>mÜØ0´°]Ó1CÄSÈÓEWÐ1WÐ0Xð Y0Ø0?×0EÑ0EÀbÑ0IÈ?×K`ÑK`ÐacÑKdÐ0dÐ/eÐefðhóð ð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ)ÓTˆÜ�y‰y˜/×3Ñ3°AÓ6¸ÐHÈaÔPÐPr!   Úpixel_valuesrl   c                 ó`  — |j                   \  }}}}|sJ|| j                  k7  s|| j                  k7  r,t        d|› d|› d| j                  › d| j                  › d�	«      ‚| j                  j                  j
                  }| j                  |j                  |¬«      «      }|j                  d«      j                  dd«      }| j                  j                  |dd«      }	t        j                  |	|gd¬	«      }
|r|
| j                  |
||«      z   }
|
S |
| j                  | j                  «      z   }
|
S )
NzInput image size (Ú*z) doesn't match model (z8). You should try to set `interpolate_pos_encoding=True`)rY   r,   r   r.   rQ   )rS   r4   ra   r;   ÚweightrY   r]   ÚflattenÚ	transposer8   rB   r   rc   rl   r?   r-   )rD   rm   rl   Ú
batch_sizer:   rG   rH   Útarget_dtypeÚpatch_embedsÚclass_embedsrF   s              r"   ÚforwardzIdeficsVisionEmbeddings.forwardŽ   s8  € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ù'Ø˜Ÿ™Ò(¨E°T·_±_Ò,DÜ Ø(¨¨°°%°ð 9ØŸ™Ð)¨¨4¯?©?Ð*;Ð;sðuóð ð
 ×+Ñ+×2Ñ2×8Ñ8ˆØ×+Ñ+¨L¯O©OÀ,¨OÓ,OÓPˆà#×+Ñ+¨AÓ.×8Ñ8¸¸AÓ>ˆà×+Ñ+×2Ñ2°:¸qÀ"ÓEˆÜ—Y‘Y ¨lÐ;ÀÔCˆ
ñ $Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^ˆJð Ðð $ d×&=Ñ&=¸d×>OÑ>OÓ&PÑPˆJàÐr!   )F)r   r   r   r   r1   r   ÚTensorrW   rl   r   Úboolrw   Ú__classcell__©rE   s   @r"   r$   r$   E   sm   ø„ ðqÐ2õ qð./Q°5·<±<ð /QÈð /QÐUXð /QÐ]b×]iÑ]ió /Qñb E×$5Ñ$5ð ÐQUð Ðbg×bnÑbn÷ r!   r$   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 óÀ  — t        j                  ||j                  dd«      «      |z  }|�||z   }t        j                  j                  |dt         j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr.   rO   )rR   rY   )ÚpÚtrainingr   r,   )r   Úmatmulrr   r   r_   ÚsoftmaxÚfloat32r]   rY   r‚   r…   Ú
contiguous)
r|   r}   r~   r   r€   r�   r‚   ÚkwargsÚattn_weightsÚattn_outputs
             r"   Úeager_attention_forwardr�   ©   sº   € ô —<‘<  s§}¡}°R¸Ó'<Ó=ÀÑG€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r!   c                   ó°   ‡ — e Zd ZdZdefˆ fd„Z	 d
dej                  dej                  dz  dee	   de
ej                  ej                  dz  f   fd	„Zˆ xZS )ÚIdeficsVisionAttentionz=Multi-headed attention from 'Attention Is All You Need' paperr%   c                 ó  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        | j                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚| j                  dz  | _	        |j                  | _        d| _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿F)r0   r1   r%   r2   r3   Únum_attention_headsÚ	num_headsÚhead_dimra   ÚscaleÚattention_dropoutr‚   Ú	is_causalr   ÚLinearÚk_projÚv_projÚq_projÚout_projrC   s     €r"   r1   zIdeficsVisionAttention.__init__Ã   s  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ò;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒØˆŒä—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜŸ	™	 $§.¡.°$·.±.ÓAˆ�r!   Nr   r€   rŠ   rI   c                 ó¼  — |j                   dd }g |¢d‘| j                  ‘­}| j                  |«      }| j                  |«      }| j	                  |«      }|j                  |«      j                  dd«      }|j                  |«      j                  dd«      }|j                  |«      j                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||f| j                  | j                  | j                  sdn| j                  dœ|¤Ž\  }
} |
j                   g |¢d‘­Ž j#                  «       }
| j%                  |
«      }
|
|fS )z#Input shape: Batch x Time x ChannelNr.   r   r,   ç        )r–   r�   r‚   )rS   r“   rš   r˜   r™   rb   rr   r   Úget_interfacer%   Ú_attn_implementationr�   r–   r”   r…   r‚   rV   r‰   r›   )rD   r   r€   rŠ   Úinput_shapeÚhidden_shapeÚqueriesÚkeysÚvaluesÚattention_interfacerŒ   r‹   s               r"   rw   zIdeficsVisionAttention.forward×   sV  € ð $×)Ñ)¨#¨2Ð.ˆà8˜Ð8 bÐ8¨$¯-©-Ñ8ˆØ—+‘+˜mÓ,ˆØ�{‰{˜=Ó)ˆØ—‘˜]Ó+ˆà—,‘,˜|Ó,×6Ñ6°q¸!Ó<ˆØ�y‰y˜Ó&×0Ñ0°°AÓ6ˆØ—‘˜\Ó*×4Ñ4°Q¸Ó:ˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð —n‘nØ—J‘JØ#Ÿ}š}‘C°$·,±,ñ
%
ð ñ
%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆØ˜LÐ(Ð(r!   ©N)r   r   r   r   r   r1   r   rx   r   r   r   rw   rz   r{   s   @r"   r�   r�   À   so   ø„ ÙGðBÐ2õ Bð. /3ñ%)à—|‘|ð%)ð Ÿ™ tÑ+ð%)ð Ð+Ñ,ð	%)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷%)r!   r�   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚIdeficsVisionMLPc                 ó  •— t         ‰| �  «        || _        t        |j                     | _        t        j                  |j                  |j                  «      | _
        t        j                  |j                  |j                  «      | _        y r¦   )r0   r1   r%   r   Ú
hidden_actÚactivation_fnr   r—   r2   Úintermediate_sizeÚfc1Úfc2rC   s     €r"   r1   zIdeficsVisionMLP.__init__  sd   ø€ Ü‰ÑÔØˆŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆ�r!   r   rI   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r¦   )r­   r«   r®   )rD   r   s     r"   rw   zIdeficsVisionMLP.forward  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr!   )r   r   r   r1   r   rx   rw   rz   r{   s   @r"   r¨   r¨      s$   ø„ ôKð U§\¡\ð °e·l±l÷ r!   r¨   c                   ó~   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  dee   dej                  fd„Z
ˆ xZS )ÚIdeficsVisionEncoderLayerr%   c                 óD  •— t         ‰| �  «        |j                  | _        t	        |«      | _        t        j                  | j                  |j                  ¬«      | _	        t        |«      | _        t        j                  | j                  |j                  ¬«      | _        y ©N)Úeps)r0   r1   r2   r3   r�   Ú	self_attnr   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1r¨   ÚmlpÚlayer_norm2rC   s     €r"   r1   z"IdeficsVisionEncoderLayer.__init__  sm   ø€ Ü‰ÑÔØ×+Ñ+ˆŒÜ/°Ó7ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÔÜ# FÓ+ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÕr!   r   r€   rŠ   rI   c                 ó¸   — |}| j                  |«      } | j                  d||dœ|¤Ž\  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|S )N)r   r€   r    )r¸   rµ   rº   r¹   )rD   r   r€   rŠ   ÚresidualÚ_s         r"   rw   z!IdeficsVisionEncoderLayer.forward  s‚   € ð !ˆà×(Ñ(¨Ó7ˆØ)˜4Ÿ>™>ð 
Ø'Ø)ñ
ð ñ
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ  =Ñ0ˆàÐr!   )r   r   r   r   r1   r   rx   r   r   r   rw   rz   r{   s   @r"   r±   r±     sQ   ø„ ðSÐ2õ Sðà—|‘|ðð Ÿ™ðð Ð+Ñ,ð	ð
 
×	Ñ	÷r!   r±   c                   ó`   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej                  dz  dee	   de
fd„Zˆ xZS )
ÚIdeficsVisionEncoderz¿
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`IdeficsVisionEncoderLayer`].

    Args:
        config: IdeficsVisionConfig
    r%   c                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w ©NF)
r0   r1   r%   r   Ú
ModuleListÚrangeÚnum_hidden_layersr±   ÚlayersÚgradient_checkpointing)rD   r%   r½   rE   s      €r"   r1   zIdeficsVisionEncoder.__init__;  sQ   ø€ Ü‰ÑÔØˆŒÜ—m‘mÔPUÐV\×VnÑVnÓPoÖ$pÈ1Ô%>¸vÕ%FÒ$pÓqˆŒØ&+ˆÕ#ùò %qs   ½A#Nr€   rŠ   rI   c                 óT   — |}| j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S )N)r   )rÅ   r	   )rD   Úinputs_embedsr€   rŠ   r   Úencoder_layers         r"   rw   zIdeficsVisionEncoder.forwardA  sH   € ð &ˆØ!Ÿ[™[ò 	ˆMÙ)ØØñð ñ‰Mð	ô Ø+ô
ð 	
r!   r¦   )r   r   r   r   r   r1   r   rx   r   r   r	   rw   rz   r{   s   @r"   r¿   r¿   2  sL   ø„ ñð,Ð2õ ,ð /3ñ
ð Ÿ™ tÑ+ð
ð Ð+Ñ,ð	
ð
 
÷
r!   r¿   c                   ód   ‡ — e Zd Zdefˆ fd„Z	 	 ddej                  dz  dedz  dee	z  fd„Z
ˆ xZS )	ÚIdeficsVisionTransformerr%   c                 ó   •— t         ‰| �  «        || _        |j                  }t	        |«      | _        t        j                  ||j                  ¬«      | _	        t        |«      | _        t        j                  ||j                  ¬«      | _        y r³   )r0   r1   r%   r2   r$   rF   r   r¶   r·   Úpre_layrnormr¿   ÚencoderÚpost_layernorm)rD   r%   r3   rE   s      €r"   r1   z!IdeficsVisionTransformer.__init__V  sj   ø€ Ü‰ÑÔØˆŒØ×&Ñ&ˆ	ä1°&Ó9ˆŒÜŸL™L¨¸×8MÑ8MÔNˆÔÜ+¨FÓ3ˆŒÜ Ÿl™l¨9¸&×:OÑ:OÔPˆÕr!   Nrm   rl   rI   c                 óø   — |€t        d«      ‚| j                  ||¬«      }| j                  |«      } | j                  dd|i|¤Ž}|j                  }|dd…ddd…f   }| j                  |«      }t        ||¬«      S )z
        Returns:

        Nz You have to specify pixel_values)rl   rÈ   r   )r   Úpooler_outputr    )ra   rF   rÍ   rÎ   r   rÏ   r
   )rD   rm   rl   rŠ   r   Úencoder_outputsr   Úpooled_outputs           r"   rw   z IdeficsVisionTransformer.forwarda  sš   € ð ÐÜÐ?Ó@Ð@àŸ™¨ÐOg˜ÓhˆØ×)Ñ)¨-Ó8ˆà+7¨4¯<©<ñ ,
Ø'ð,
àñ,
ˆð
 ,×=Ñ=ÐØ)ª!¨Q²¨'Ñ2ˆØ×+Ñ+¨MÓ:ˆä)Ø/Ø'ô
ð 	
r!   rÁ   )r   r   r   r   r1   r   r   ry   r   r
   rw   rz   r{   s   @r"   rË   rË   U  sP   ø„ ðQÐ2õ Qð 26Ø05ñ
à×'Ñ'¨$Ñ.ð
ð #'¨¡+ð
ð
 
Ð+Ñ	+÷
r!   rË   )r�   )'r   rT   Úcollections.abcr   Údataclassesr   r   r   Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úconfiguration_ideficsr   Ú
get_loggerr   r[   r   ÚModuler$   rx   r^   r�   r�   r¨   r±   r¿   rË   r    r!   r"   ú<module>rß      s/  ðñ [ã Ý $Ý !ã Ý å !Ý 9ß KÝ 5Ý &÷ñ õ
 7ð 
ˆ×	Ñ	˜HÓ	%€ð ô<˜{ó <ó ð<ô:`˜bŸi™iô `ðV ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô.<)˜RŸY™Yô <)ô@�r—y‘yô ô Ð :ô ôD
˜2Ÿ9™9ô 
ôF(
˜rŸy™yõ (
r!   