+
    œ°³jYs  ã                   óÀ  € R t ^ RIt^ RIHt ^ RIt^ RIt^ RIHu H	t
 ^ RIHt ^ RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^R	IHtHt ^R
IHt ^RIHtHt ^RIHt ^RI H!t!H"t"H#t# ^RI$H%t%H&t&H't' ^RI(H)t)H*t*H+t+ ^RI,H-t- ^RI.H/t/ ^RI0H1t1H2t2H3t3 ^RI4H5t5 ]+Pl                  ! ]74      t8]) ! R R]54      4       t9 ! R R]!RR7      t:])]/! R-R7       ! R R]"4      4       4       t;])! RR7      ] ! R R ]4      4       4       t<R! R" lt= ! R# R$]P|                  4      t? ! R% R&]P|                  4      t@]) ! R' R(]4      4       tA]) ! R) R*]A4      4       tB ! R+ R,]A4      tC. R.OtDR# )/zTPI0 model: PaliGemma + Action Expert with flow matching for robot action prediction.N)ÚCallable)Ústrict)Únn)Úinitialization)ÚCache)ÚPreTrainedConfig)ÚBatchFeature)Ú
ImageInputÚmake_nested_list_of_images)Úcreate_causal_mask)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚPreTrainedModel)ÚProcessingKwargsÚProcessorMixinÚUnpack)Ú
AddedTokenÚPreTokenizedInputÚ	TextInput)Úauto_docstringÚcan_return_tupleÚlogging)Úmaybe_autocast)Úrequires)ÚCONFIG_MAPPINGÚ
AutoConfigÚ	AutoModel)ÚSiglipImageProcessorc                   ó2   € ] tR t^-tR^àR^à/tR^àR^à/tRtRtR# )ÚPI0ImageProcessorÚ
max_heightÚ	max_widthÚheightÚwidthT© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚsizeÚpad_sizeÚdo_padÚ__static_attributes__r$   ó    Úd/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/pi0/modular_pi0.pyr   r   -   s#   † à˜#˜{¨CÐ0€DØ˜#˜w¨Ð,€HØ„Fr-   r   c                   ó2   € ] tR t^4tRRRR^0RR/RRR//tR	tR
# )ÚPI0ProcessorKwargsÚtext_kwargsÚpaddingÚ
max_lengthÚpadding_sideÚrightÚcommon_kwargsÚreturn_tensorsÚptr$   N)r%   r&   r'   r(   Ú	_defaultsr,   r$   r-   r.   r0   r0   4   s-   † àØ�|Ø˜"Ø˜Gð
ð
 	Ð*¨DÐ1ð„Ir-   r0   F)Útotal)Úbackendsc                   ól   a a€ ] tR t^?t oRV 3R llt]RV3R lR ll4       t]V 3R l4       tRt	Vt
V ;t# )ÚPI0Processorc           	     ó¨  <€ VP                   R ,          VP                   R,          uV n        V n        VP                  R. RO4      pVP                  R. RO4      pVP                  R. RO4      pVP                  R. RO4      p\        P
                  ! V4      V n        \        P
                  ! V4      V n        \        P
                  ! V4      V n        \        P
                  ! V4      V n	        VP                  R^ 4      V n
        VP                  R^24      V n        \        VR4      '       g   \        R	4      hVP                  V n        \        VR
4      '       gW   R
V n        \!        V P                  RRR7      p	RV	./p
VP#                  V
4       VP%                  V P                  4      V n        M"VP&                  V n        VP                  V n        TP)                  \+        R4       Uu. uF
  pRVR R2NK  	  up\+        ^€4       Uu. uF
  pRVR R2NK  	  up,           4       RVn        RVn        \0        SV `e  WVR7       R# u upi u upi )r"   r#   Ú
state_meanÚ	state_stdÚactions_meanÚactions_stdÚmax_state_dimÚ
chunk_sizeÚimage_seq_lengthz;Image processor is missing an `image_seq_length` attribute.z<image>FT)Ú
normalizedÚspecialÚadditional_special_tokensé   z<locz0>4Ú>z<segz0>3)Úchat_templateN)gù g³ês¥¿grŠŽäò¢?g•Ô	h"lê?g‡§WÊ2D@g\ AñcÌá¿gZd;ßOÅ¿gB>èÙ¬úœ?g“©‚QI�¿)gt$—ÿ�~»?gL¦
F%uÂ?g.ÿ!ýöuÐ?g/n£¼Ö?gëâ6Àó?g¶óýÔxéÖ?gÌ]KÈ=‹?gF%uš‹?)gÂ&S£’?gâX·Ñ ®?gW[±¿ìž¬¿gHPüs×r?gàœ¥½Ág?gÒ Þ	Š¿gHPüs·¿)g®GázÒ?g`åÐ"ÛùÖ?gÁ9#J{ƒ×?gvOjM£?g>yX¨5Í«?g46<½R¶?gèj+ö—Ýï?)r)   r"   r#   ÚgetÚtorchÚtensorr?   r@   rA   rB   rC   rD   ÚhasattrÚ
ValueErrorrE   Úimage_tokenr   Úadd_special_tokensÚconvert_tokens_to_idsÚimage_token_idÚ
add_tokensÚrangeÚadd_bos_tokenÚadd_eos_tokenÚsuperÚ__init__)ÚselfÚimage_processorÚ	tokenizerrK   Úkwargsr?   r@   rA   rB   rQ   Útokens_to_addÚiÚ	__class__s   &&&&,       €r.   rZ   ÚPI0Processor.__init__B   sø  ø€ Ø"1×"6Ñ"6°xÕ"@À/×BVÑBVÐW^ÕB_ÐˆŒ�T”ZØ—Z‘Z Ò.rÓsˆ
Ø—J‘J˜{Ò,lÓmˆ	Ø—z‘z .Ò2mÓnˆØ—j‘j Ò0hÓiˆäŸ,š, zÓ2ˆŒÜŸš iÓ0ˆŒÜ!ŸLšL¨Ó6ˆÔÜ Ÿ<š<¨Ó4ˆÔØ#ŸZ™Z¨¸Ó<ˆÔØ Ÿ*™* \°2Ó6ˆŒÜ�Ð(:×;Ò;ÜÐZÓ[Ð[à /× @Ñ @ˆÔä�y )×,Ò,ð  )ˆDÔÜ$ T×%5Ñ%5À%ÐQUÔVˆKØ8¸;¸-ÐHˆMØ×(Ñ(¨Ô7Ø"+×"AÑ"AÀ$×BRÑBRÓ"SˆDÕà"+×":Ñ":ˆDÔØ(×4Ñ4ˆDÔà×Ñ´u¸T´{ÓC±{°!  Q s G¨1›o±{ÑCÔ`eÐfiÔ`jÓFkÑ`jÐ[\ÈÈaÐPSÈWÐTUÃÑ`jÑFkÕkÔlØ"'ˆ	ÔØ"'ˆ	Ôä‰Ñ˜À=ÐÖQùò	 DùÒFks   Ç-I
ÈI
c                ó¶  <€ V ^8„  d   QhRS[ S[S[ ,          ,          S[S[S[ ,          ,          ,          R,          RS[S[,          S[S[,          ,          S[S[,          ,          R,          RS[S[P
                  ,          S[P                  ,          R,          RS[S[P
                  ,          S[P                  ,          R,          RS[S[	,          RS[
/# )é   ÚimagesNÚtextÚactionsÚstater^   Úreturn)r	   Úlistr   r   ÚnpÚndarrayrM   ÚTensorr   r0   r   )ÚformatÚ__classdict__s   "€r.   Ú__annotate__ÚPI0Processor.__annotate__g   sÉ   ø€ ÷ WKñ WKá™T¡*Õ-Õ-±±T¹*Õ5EÕ0FÕFÈÕMðWKñ Ñ+Õ+©d±9­oÕ=ÁÑEVÕ@WÕWÐZ^Õ^ðWKñ ™Ÿ
™
Õ"¡U§\¡\Õ1°DÕ8ð	WKñ
 ‘b—j‘jÕ ¡5§<¡<Õ/°$Õ6ðWKñ Ñ+Õ,ðWKñ 
ñWKr-   c                ó¨  € V P                   ! \        3RV P                  P                  /VB pVf   \        P                  R4       Rp\        V\        4      '       d   V.p\        V4      p\        V4      \        V4      8w  d%   \        R\        V4       R\        V4       R24      hVR,          P                  R	R4      pVR
,          P                  R	R4       . p	\        W'4       F^  w  r«V P                  V P                  ,          \        V4      ,           V P                  P                   V
 R2p
V	P!                  V
4       K`  	  V P                  ! V	3/ VR,          B p\#        R V 4       4      p\$        P&                  ! \        V4      V3\$        P(                  R7      p\$        P&                  ! \        V4      V^V P*                  V P,                  4      p\/        V4       FF  w  ppV P0                  ! V3R	R/VR
,          B p\        V4      pRVVRV13&   VR,          VVRV13&   KH  	  / VCRVRV/CpVeÇ   \$        P2                  ! V4      V P4                  ,
          V P6                  R,           ,          pVP8                  R,          V P:                  8  d<   \<        P>                  ! V^ V P:                  VP8                  R,          ,
          34      pVPA                  RV PB                  V P:                  4      VR&   Ve¼   \$        P2                  ! V4      V PD                  ,
          V PF                  R,           ,          pVP8                  R,          V P:                  8  d<   \<        P>                  ! V^ V P:                  VP8                  R,          ,
          34      pVPA                  RV P:                  4      VR&   \I        VVR7      # )aÃ  
actions (`list | np.ndarray | torch.Tensor`, *optional*):
    Actions to be predicted by the model. If provided, padding, mean and std normalization will be applied.
state (`list | np.ndarray | torch.Tensor`, *optional*):
    Robotic states to be predicted by the model. If provided, padding, mean and std normalization will be applied.

Returns:
    [`BatchFeature`]: A [`BatchFeature`] with the following fields:

    - **input_ids** -- List of token ids to be fed to a model. Returned when `text` is not `None`. If `suffix`
      is provided, the `input_ids` will also contain the suffix input ids.
    - **attention_mask** -- List of indices specifying which tokens should be attended to by the model (when
      `return_attention_mask=True` or if *"attention_mask"* is in `self.model_input_names` and if `text` is not
      `None`).
    - **pixel_values** -- Pixel values to be fed to a model. Returned when `images` is not `None`.
    - **pixel_attention_mask** -- Pixel values padding mask to be fed to a model. Returned when `images` is not `None`.
    - **state** -- Robot state compatible with model if `state` is not None
    - **actions** -- Label-actions compatible with training if `actions` is not None
Útokenizer_init_kwargsNzPYou are using PI0 without a text prefix. The processor will use an empty prompt.Ú z	Received z image samples for z\ prompts. Each prompt should be associated with one sample (with one or more camera images).r1   r7   Úimages_kwargsÚ
c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5i©N)Úlen)Ú.0Úsample_imagess   & r.   Ú	<genexpr>Ú(PI0Processor.__call__.<locals>.<genexpr>¡   s   é € ÐUÁn°]œc -×0Ð0Ãnùs   ‚©Údtyper8   TÚpixel_valuesÚpixel_attention_maskg:Œ0âŽyE>rg   rh   )ÚdataÚtensor_typeéÿÿÿÿ)%Ú_merge_kwargsr0   r]   Úinit_kwargsÚloggerÚwarning_onceÚ
isinstanceÚstrr
   ry   rP   ÚpopÚziprQ   rE   Ú	bos_tokenÚappendÚmaxrM   ÚzerosÚboolr"   r#   Ú	enumerater\   rN   rA   rB   ÚshaperC   ÚFÚpadÚviewrD   r?   r@   r   )r[   re   rf   rg   rh   r^   Úoutput_kwargsÚbatched_imagesr7   Úprompt_stringsÚsampleÚ
image_listÚtext_inputsÚmax_num_camerasr�   Úpadded_pixel_valuesÚbatchr{   Ú	processedÚnum_camerasÚmodel_inputss   &&&&&,               r.   Ú__call__ÚPI0Processor.__call__f   so  € ð8 ×*Ò*Üñ
Ø6:·n±n×6PÑ6Pð
ØTZñ
ˆð Š<Ü×ÑÐ rÔsØˆDä�dœC× Ò Ø�6ˆDä3°FÓ;ˆÜˆ~Ó¤# d£)Ô+ÜØœC Ó/Ð0Ð0CÄCÈÃIÀ;ð Oeð eóð ð
 ' }Õ5×9Ñ9Ð:JÈDÓQˆØ�oÕ&×*Ñ*Ð+;¸TÔBàˆÜ"% dÖ";ÑˆFà×#Ñ# d×&;Ñ&;Õ;¼cÀ*»oÕMÐNÈtÏ~É~×OgÑOgÐNhÐioÐhpÐprÐsð ð ×!Ñ! &Ö)ñ	 #<ð —n’n ^ÑT°}À]Õ7SÑTˆô ÑUÁnÓUÓUˆÜ$Ÿ{š{¬C°Ó,?ÀÐ+QÔY^×YcÑYcÔdÐÜ#Ÿkšk¬#¨nÓ*=¸ÐPQÐSW×S^ÑS^Ð`d×`jÑ`jÓkÐä$-¨nÖ$=Ñ ˆE�=Ø×,Ò,¨]ÑrÈ4ÐrÐS`ÐapÕSqÑrˆIä˜mÓ,ˆKØ8<Ð  ¨¨¨Ð!4Ñ5Ø7@ÀÕ7PÐ  |¨ |Ð 3Ó4ñ %>ð
Øð
àÐ/Ø"Ð$8ñ
ˆð ÒÜ—|’| GÓ,¨t×/@Ñ/@Õ@ÀT×EUÑEUÐX]ÕE]Õ^ˆGØ�}‰}˜RÕ  4×#5Ñ#5Ô5ÜŸ%š% ¨!¨T×-?Ñ-?À'Ç-Á-ÐPRÕBSÕ-SÐ)TÓU�Ø&-§l¡l°2°t·±È×HZÑHZÓ&[ˆL˜Ñ#àÒÜ—\’\ %Ó(¨4¯?©?Õ:¸t¿~¹~ÐPUÕ?UÕVˆEØ�{‰{˜2� ×!3Ñ!3Ô3ÜŸš˜e a¨×);Ñ);¸e¿k¹kÈ"½oÕ)MÐ%NÓO�Ø$)§J¡J¨r°4×3EÑ3EÓ$FˆL˜Ñ!ä ¸>ÔJÐJr-   c                ó(   <€ \         SV `  R .,           # )r�   )rY   Úmodel_input_names)r[   ra   s   &€r.   r¦   ÚPI0Processor.model_input_namesÀ   s   ø€ ä‰wÑ(Ð,BÐ+CÕCÐCr-   )rA   rB   rD   r"   rE   rQ   rT   rC   r?   r@   r#   )NNN)r%   r&   r'   r(   rZ   r   r£   Úpropertyr¦   r,   Ú__classdictcell__Ú__classcell__©ra   ro   s   @@r.   r=   r=   ?   sH   ù‡ € ÷"RðH ÷WKñ WKó ðWKðr ôDó ÷Dð Dr-   r=   zlerobot/pi0_base)Ú
checkpointc                   óŒ   a a€ ] tR t^Åt oRtRtR]R]/tRtRt	^2t
^ t^ t^
tRtRtRtR	tR
tRtRtV 3R ltR tV3R ltRtVtV ;t# )Ú	PI0ConfigaX  
vlm_config (`dict`, *optional*):
    Configuration for the vlm backbone (PaliGemmaModel).
dit_config (`dict`, *optional*):
    Configuration for the DiT backbone. Defaults to a Gemma 300M variant.
chunk_size (`int`, *optional*, defaults to 50):
    Number of action steps to predict per chunk.
max_state_dim (`int`, *optional*, defaults to 32):
    Maximum state vector dimension (shorter vectors are zero-padded).
max_action_dim (`int`, *optional*, defaults to 32):
    Maximum action vector dimension (shorter vectors are zero-padded).
num_inference_steps (`int`, *optional*, defaults to 10):
    Number of denoising steps during inference.
time_sampling_beta_alpha (`float`, *optional*, defaults to 1.5):
    Alpha parameter for Beta distribution used to sample diffusion time during training.
time_sampling_beta_beta (`float`, *optional*, defaults to 1.0):
    Beta parameter for Beta distribution used to sample diffusion time during training.
time_sampling_scale (`float`, *optional*, defaults to 0.999):
    Scale factor for sampled time values.
time_sampling_offset (`float`, *optional*, defaults to 0.001):
    Offset added to sampled time values.
min_period (`float`, *optional*, defaults to 0.004):
    Minimum period for sinusoidal time embedding.
max_period (`float`, *optional*, defaults to 4.0):
    Maximum period for sinusoidal time embedding.
loss_reduction (`str`, *optional*, defaults to `"mean"`):
    The reduction to use on MSE loss.

Example:
```python
>>> from transformers import PI0ForConditionalGeneration, PI0Config

>>> config = PI0Config()
>>> model = PI0ForConditionalGeneration(config)
```
Úpi0Ú
vlm_configÚ
dit_configNg      ø?ç      ð?g+‡ÙÎ÷ï?gü©ñÒMbP?gü©ñÒMbp?g      @Úmeanc                óH  <€ \        V P                  \        4      '       d@   V P                  P                  R R4      p\        V,          ! R/ V P                  B V n        MJV P                  f=   \        R,          ! R RRRR^RRR	^R
^RR/R RRRRRR^R^àR^R	^RRRR/	RRR7      V n        \        V P
                  \        4      '       d@   V P
                  P                  R R4      p\        V,          ! R/ V P
                  B V n        MKV P
                  f>   \        R,          ! R^R^^RV P                  P                  P                  R7      V n        RV P
                  n        RV P
                  n	        RV P                  P                  n	        \        SV `,  ! R/ VB  R# )Ú
model_typeÚ	paligemmaNÚgemmaÚhidden_sizei   Únum_hidden_layersÚintermediate_sizei @  Únum_attention_headsÚnum_key_value_headsÚ
vocab_sizei€ì Úsiglip_vision_modeliÐ  i€  Ú
patch_sizeÚ
image_sizeÚvision_use_headF)Útext_configÚvision_configÚprojection_dimrT   rI   i   é   )r¸   r¹   rº   r»   r¼   Úhead_dimr½   Tr$   )r‰   r°   ÚdictrL   r   r±   rÂ   r½   Ú	is_causalÚuse_bidirectional_attentionrY   Ú__post_init__)r[   r^   Úvlm_model_typeÚdit_model_typera   s   &,  €r.   rÊ   ÚPI0Config.__post_init__þ   s  ø€ Ü�d—o‘o¤t×,Ò,Ø!Ÿ_™_×0Ñ0°¸{ÓKˆNÜ,¨^Ö<ÑO¸t¿¹ÑOˆD�OØ�_‰_Ò$Ü,¨[Ö9à  'Ø! 4Ø'¨Ø'¨Ø)¨1Ø)¨1Ø  &ðð !Ð"7Ø'¨Ø! 4Ø  "Ø  #Ø'¨Ø)¨2Ø  &Ø% uð
ð  $Ø%ô-ˆDŒOô2 �d—o‘o¤t×,Ò,Ø!Ÿ_™_×0Ñ0°¸wÓGˆNÜ,¨^Ö<ÑO¸t¿¹ÑOˆD�OØ�_‰_Ò$Ü,¨WÖ5Ø Ø"$Ø"&Ø$%Ø$%ØØŸ?™?×6Ñ6×AÑAôˆDŒOð %)ˆ�‰Ô!Ø6:ˆ�‰Ô3ØBFˆ�‰×#Ñ#Ô?Ü‰ÒÑ' Ô'r-   c                ó¤   € V P                   P                  ^,          ^ 8w  d.   \        RV P                  P                   P                   R24      hR# )zOPart of `@strict`-powered validation. Validates the architecture of the config.zDiT hidden dim=(z) must be divisible by 2N)r±   r¸   rP   Úconfig©r[   s   &r.   Úvalidate_architectureÚPI0Config.validate_architecture0  sE   € à�?‰?×&Ñ&¨Õ*¨aÔ/ÜÐ/°·±×0FÑ0F×0RÑ0RÐ/SÐSkÐlÓmÐmñ 0r-   c                óò   <€ V ^8„  d   Qh/ S[ S[,          R,          ;R&   S[ S[,          R,          ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R	&   S[;R
&   S[;R&   S[;R&   S[;R&   S[;R&   # )rd   Nr°   r±   rD   rC   Úmax_action_dimÚnum_inference_stepsÚtime_sampling_beta_alphaÚtime_sampling_beta_betaÚtime_sampling_scaleÚtime_sampling_offsetÚ
min_periodÚ
max_periodÚloss_reduction)rÇ   r   ÚintÚfloatrŠ   )rn   ro   s   "€r.   rp   ÚPI0Config.__annotate__Å   sÞ   ø‡ ‚ ñV Ñ'Õ'¨$Õ.Ñ5ñW ñX Ñ'Õ'¨$Õ.Ñ5ñY ñZ Ññ[ ñ\ Ññ] ñ^ Ññ_ ñ` Ñ!ña ñb $Ñ)ñc ñd #Ñ(ñe ñf Ñ&ñg ñh  Ñ'ñi ñj Ññk ñl Ññm ñn Ñ òo r-   )r±   r°   )r%   r&   r'   r(   Ú__doc__rµ   r   Úsub_configsr°   r±   rD   rC   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÊ   rÑ   Ú__annotate_func__r,   r©   rª   r«   s   @@r.   r®   r®   Å   sz   ù‡ € ñ#ðJ €JØ ¨\¸:ÐF€Kà15€JØ15€JØ€JØ€MØ€NØ!ÐØ&)ÐØ%(ÐØ!&ÐØ"'ÐØ€JØ€JØ €Nõ0(òdn÷W … r-   r®   c                óD   € V ^8„  d   QhR\         P                  R\        /# )rd   Úblock_boundariesri   )rM   rm   r   )rn   s   "r.   rp   rp   6  s   € ÷ ñ ´5·<±<ð ÄHñ r-   c                 ó   a € R  V 3R llpV# )c          
      óT   € V ^8„  d   QhR\         R\         R\         R\         R\        /# )rd   Ú	batch_idxÚhead_idxÚq_idxÚkv_idxri   )rÝ   r‘   )rn   s   "r.   rp   Ú2blockwise_bidirectional_mask.<locals>.__annotate__7  s/   € ÷ #ñ #œcð #¬Sð #¼ð #Äcð #Ìdñ #r-   c                 óh   <€ \         P                  ! VS4      p\         P                  ! VS4      pWT8*  # rx   )rM   Ú	bucketize)rç   rè   ré   rê   Úq_blockÚkv_blockrä   s   &&&&  €r.   Ú
inner_maskÚ0blockwise_bidirectional_mask.<locals>.inner_mask7  s.   ø€ Ü—/’/ %Ð)9Ó:ˆÜ—?’? 6Ð+;Ó<ˆØÑ"Ð"r-   r$   )rä   rð   s   f r.   Úblockwise_bidirectional_maskrò   6  s   ø€ ÷#ð #ð
 Ðr-   c                   óH   a a€ ] tR tRt oV 3R lt]R 4       tR tRtVt	V ;t
# )ÚPI0TimestepEmbeddingsi?  c                óŒ   <€ \         SV `  4        Wn        V P                  V4      p\        P
                  ! VR R7      V n        R# )F)Ú
persistentN)rY   rZ   rÏ   Úcompute_freqsr   ÚBufferÚsinusoid_freq)r[   rÏ   rù   ra   s   && €r.   rZ   ÚPI0TimestepEmbeddings.__init__@  s6   ø€ Ü‰ÑÔØŒØ×*Ñ*¨6Ó2ˆÜŸYšY }ÀÔGˆÖr-   c                ó@  € \         P                  ! R RV P                  P                  ^,          \         P                  R7      pV P
                  V P                  V P
                  ,          V,          ,          pRV,          ^,          \        P                  ,          pV# )ç        r²   r~   )	rM   Úlinspacer±   r¸   Úfloat32rÚ   rÛ   ÚmathÚpi)rÏ   ÚfractionÚperiodrù   s   &   r.   r÷   Ú#PI0TimestepEmbeddings.compute_freqsF  sr   € ä—>’> # s¨F×,=Ñ,=×,IÑ,IÈQÕ,NÔV[×VcÑVcÔdˆØ×"Ñ" f×&7Ñ&7¸&×:KÑ:KÕ&KÐPXÕ%XÕXˆØ˜f� qÕ(¬4¯7©7Õ2ˆØÐr-   c                óÔ  € \        VP                  P                  \        4      '       d2   VP                  P                  R 8w  d   VP                  P                  MRp\	        VRR7      ;_uu_ 4        V P
                  R,          pW1R,          ,          p\        P                  ! VP                  4       VP                  4       .^R7      pRRR4       V#   + '       g   i     X# ; i)ÚmpsÚcpuF)Údevice_typeÚenabledN©Údim©NºNNN)r  N)
r‰   ÚdeviceÚtyperŠ   r   rù   rM   ÚcatÚsinÚcos)r[   Útimer  rù   ÚembÚtime_embedss   &&    r.   ÚforwardÚPI0TimestepEmbeddings.forwardM  s©   € Ü*4°T·[±[×5EÑ5EÄs×*KÒ*KÐPT×P[ÑP[×P`ÑP`ÐdiÔPi�d—k‘k×&Ò&ÐotˆÜ¨¸U×CÖCØ ×.Ñ.¨wÕ7ˆMØ w¥-Õ/ˆCÜŸ)š) S§W¡W£Y°·±³	Ð$:ÀÔBˆK÷ Dð Ð÷	 DÖCð Ðús   Á3ACÃC'	)rÏ   rù   )r%   r&   r'   r(   rZ   Ústaticmethodr÷   r  r,   r©   rª   r«   s   @@r.   rô   rô   ?  s)   ù‡ € õHð ñó ð÷ò r-   rô   c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚPI0ActionTimeEmbeddingiV  c                óJ  <€ \         SV `  4        \        V4      V n        \        P
                  ! VP                  VP                  P                  4      V n	        \        P
                  ! VP                  VP                  P                  4      V n        \        P
                  ! ^VP                  P                  ,          VP                  P                  4      V n        \        P
                  ! VP                  P                  VP                  P                  4      V n        R# )rd   N)rY   rZ   rô   Úsinusoid_embedsr   ÚLinearrÔ   r±   r¸   Úaction_in_projrC   Ú
state_projÚaction_time_mlp_inÚaction_time_mlp_out©r[   rÏ   ra   s   &&€r.   rZ   ÚPI0ActionTimeEmbedding.__init__W  s¿   ø€ Ü‰ÑÔÜ4°VÓ<ˆÔÜ Ÿiši¨×(=Ñ(=¸v×?PÑ?P×?\Ñ?\Ó]ˆÔÜŸ)š) F×$8Ñ$8¸&×:KÑ:K×:WÑ:WÓXˆŒÜ"$§)¢)¨A°×0AÑ0A×0MÑ0MÕ,MÈv×O`ÑO`×OlÑOlÓ"mˆÔÜ#%§9¢9¨V×->Ñ->×-JÑ-JÈF×L]ÑL]×LiÑLiÓ#jˆÖ r-   c                ó¬  € V P                  V4      pV P                  V4      pV P                  V4      pVR,          P                  V4      P	                  VP
                  R7      p\        P                  ! WV.^R7      pV P                  \        P                  ! V P                  V4      4      4      p\        P                  ! VR,          V.^R7      pV# )r  r~   r	  )r  Nr  )r  r  r  Ú	expand_asÚtor   rM   r  r   r”   Úsilur  )	r[   rh   ÚnoiseÚtimestepÚstate_embedsÚaction_embedsr  Úaction_time_embedsÚaction_embeds_mergeds	   &&&&     r.   r  ÚPI0ActionTimeEmbedding.forward_  s·   € Ø—‘ uÓ-ˆØ×+Ñ+¨EÓ2ˆà×*Ñ*¨8Ó4ˆØ! *Õ-×7Ñ7¸ÓF×IÑIÐP]×PcÑPcÐIÓdˆä"ŸYšY¨Ð'CÈÔKÐØ!×5Ñ5´a·f²f¸T×=TÑ=TÐUgÓ=hÓ6iÓjÐÜ$Ÿyšy¨,°zÕ*BÐDVÐ)WÐ]^Ô_ÐØ#Ð#r-   )r  r  r   r  r  )	r%   r&   r'   r(   rZ   r  r,   r©   rª   r«   s   @@r.   r  r  V  s   ù‡ € õk÷
$ò 
$r-   r  c                   óh   a a€ ] tR tRt oRtRtRtR.tRtRt	Rt
RtRtR	tV 3R ltV3R ltRtVtV ;t# )
ÚPI0PreTrainedModelil  Úmodelrh   TÚpast_key_valuesc                óÊ   <€ \         SV `  V4       \        V\        4      '       d=   \        P
                  ! VP                  VP                  VP                  4      4       R # R # rx   )	rY   Ú_init_weightsr‰   rô   ÚinitÚcopy_rù   r÷   rÏ   )r[   Úmodulera   s   &&€r.   r3  Ú PI0PreTrainedModel._init_weightsz  sF   ø€ Ü‰Ñ˜fÔ%Ü�fÔ3×4Ò4Ü�JŠJ�v×+Ñ+¨V×-AÑ-AÀ&Ç-Á-Ó-PÖQñ 5r-   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # ©rd   rÏ   ©r®   )rn   ro   s   "€r.   rp   ÚPI0PreTrainedModel.__annotate__l  s   ø‡ ‚ áÑò r-   r$   )Úimagerf   )r%   r&   r'   r(   Úbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_supports_attention_backendÚinput_modalitiesr3  râ   r,   r©   rª   r«   s   @@r.   r/  r/  l  sQ   ù‡ € ð  ÐØ€OØ&*Ð#Ø#4Ð"5ÐØÐØ€NØÐØ!ÐØ"&ÐØ(ÐõR÷ … r-   r/  c                   ó~   a a€ ] tR tRt oV3R lV 3R lltR tR tR
R lt]]	RV3R lR ll4       4       t
R	tVtV ;t# )ÚPI0Modeli€  c                ó    <€ V ^8„  d   QhRS[ /# r9  r:  )rn   ro   s   "€r.   rp   ÚPI0Model.__annotate__‚  s   ø€ ÷ ñ ™yñ r-   c                óÚ   <€ \         SV `  V4       \        P                  ! VP                  4      V n        \        P                  ! VP                  4      V n        V P                  4        R # rx   )	rY   rZ   r   Úfrom_configr±   Úditr°   ÚvlmÚ	post_initr!  s   &&€r.   rZ   ÚPI0Model.__init__‚  sJ   ø€ Ü‰Ñ˜Ô Ü×(Ò(¨×):Ñ):Ó;ˆŒÜ×(Ò(¨×):Ñ):Ó;ˆŒØ�‰Ör-   c                ó6   € V P                   P                  4       # rx   )rN  Úget_input_embeddingsrÐ   s   &r.   rR  ÚPI0Model.get_input_embeddingsˆ  s   € Ø�x‰x×,Ñ,Ó.Ð.r-   c                ó<   € V P                   P                  V4       R # rx   )rN  Úset_input_embeddings)r[   Úvalues   &&r.   rU  ÚPI0Model.set_input_embeddings‹  s   € Ø�‰×%Ñ% eÖ,r-   c                óH  € VP                   ^,          pVP                  ^ ^4      pV P                  P                  V4      P                  pVP                  RWVP                   ^,          VP                   ^,          4      p. p\        V4       F%  w  r‰Wh,          V	,          p
VP                  V
4       K'  	  \        P                  ! V^ R7      pVP                  4       p^ W±V P                  P                  P                  8H  &   V P                  P                  4       ! V4      pWP                  P                  P                  8H  P                  R4      P!                  VP"                  4      pVP%                  W×P!                  VP"                  VP&                  4      4      pV# )é   r	  r„   )r“   ÚflattenrN  Úget_image_featuresÚpooler_outputÚreshaper’   rŽ   rM   r  ÚclonerÏ   r°   rT   rR  Ú	unsqueezer%  r  Úmasked_scatterr   )r[   Ú	input_idsr€   r�   Úattention_maskr�   Úimage_featuresÚtotal_image_featuresrç   ÚmaskÚunpadded_image_featuresÚllm_input_idsÚinputs_embedsÚspecial_image_masks   &&&&&         r.   Úembed_prefixÚPI0Model.embed_prefixŽ  sb  € Ø.×4Ñ4°QÕ7ˆØ#×+Ñ+¨A¨qÓ1ˆØŸ™×4Ñ4°\ÓB×PÑPˆØ'×/Ñ/°°O×EYÑEYÐZ[ÕE\Ð^l×^rÑ^rÐstÕ^uÓvˆà!ÐÜ(Ð)=Ö>‰OˆIØ&4Õ&?ÀÕ&EÐ#Ø ×'Ñ'Ð(?Ö@ñ  ?ô  %ŸyšyÐ)=À1ÔEÐà!Ÿ™Ó)ˆØLMˆ 4§;¡;×#9Ñ#9×#HÑ#HÑHÑIØŸ™×5Ñ5Ô7¸ÓFˆàŸ+™+×0Ñ0×?Ñ?Ñ?×JÑJÈ2ÓN×QÑQÐR_×RfÑRfÓgð 	ð &×4Ñ4Ø× 7Ñ 7¸×8LÑ8LÈm×NaÑNaÓ bó
ˆð Ðr-   c                ó>  <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          R	S[R,          R
S[/	# )rd   r*  ra  Nr€   rb  r�   Úposition_idsrh  r1  ri   )rM   rm   Ú
LongTensorr   r   )rn   ro   s   "€r.   rp   rJ  ¨  s°   ø€ ÷ Kñ Ká—|‘|ðKñ —<‘< $Õ&ðKñ —l‘l TÕ)ð	Kñ
 Ÿ™ tÕ+ðKñ $Ÿl™l¨TÕ1ðKñ ×&Ñ&¨Õ-ðKñ —|‘| dÕ*ðKñ  �ðKñ 
!ñKr-   c	                ó®  € Vex   Vft   Ve   Vf   VP                  R4      ^,
          pVf   V P                  W#V4      p\        P                  ! V4      R,          p
V P	                  VVVV
RR7      P
                  pVe   VP                  ^8w  d   \        R4      hR;r¼Ve¦   \        P                  ! VP                  ^ ,          VP                  ^,          VP                  VP                  R7      p\        P                  ! WM.^R7      p\        P                   ! V^R7      ^,
          RVP                  ^,          ) R13,          pVP                  4       p\        P                  ! \        P                  ! V^,           VP                  \        P                  R7      \        P                  ! VP                  ^,          ^,
          VP                  \        P                  R7      .4      pVR,          P!                  VP                  ^ ,          ^4      p\#        V P$                  P&                  VVVVR	7      pV P(                  ! RR
VRVRVRV/V	B pV# )zÓ
action_embeds (`torch.Tensor`, *optional*):
    The embeddings of input actions and robot states.
pixel_attention_mask (`torch.Tensor`, *optional*):
    The mask indicating padded positions in the input image.
Nr  T)rh  rb  rm  Útoken_type_idsÚ	use_cachez:Only two-dimensional attention masks are accepted for now!©r   r  r	  ©r  r   )rÏ   rh  rb  r1  Úblock_sequence_idsrh  rb  rm  r1  r„   ©r  r  é    r  r$   )Úcumsumrj  rM   Ú
zeros_likerN  r1  ÚndimrP   Úonesr“   r   r  r  Úget_seq_lengthr�   ÚlongÚrepeatr   rÏ   r±   rM  )r[   r*  ra  r€   rb  r�   rm  rh  r1  r^   rp  Údit_position_idsÚdit_attention_maskÚ
noise_maskÚvlm_input_lengthrt  Úbidirectional_maskÚ
dit_outputs   &&&&&&&&&,        r.   r  ÚPI0Model.forward¦  sI  € ð( Ò#¨Ò(?ØÒ)¨lÒ.BØ-×4Ñ4°RÓ8¸1Õ<�àÒ$Ø $× 1Ñ 1°)ÐK_Ó `�ô #×-Ò-¨mÓ<¸WÕEˆNØ"Ÿh™hØ+Ø-Ø)Ø-Øð 'ó ÷ ‰oð ð Ò%¨.×*=Ñ*=ÀÔ*BÜÐYÓZÐZð 15Ð4ÐØÒ%ÜŸšØ×#Ñ# AÕ&Ø×#Ñ# AÕ&Ø$×*Ñ*Ø%×,Ñ,ô	ˆJô "'§¢¨NÐ+GÈQÔ!OÐÜ %§¢Ð-?ÀQÔ GÈ!Õ KÈQÐQ^×QdÑQdÐefÕQgÐPgÑPiÐMiÕjÐð +×9Ñ9Ó;ÐÜ"ŸYšYä—’Ð,¨qÕ0¸×9MÑ9MÔUZ×U_ÑU_Ô`Ü—
’
˜=×.Ñ.¨qÕ1°AÕ5¸m×>RÑ>RÔZ_×ZdÑZdÔeðó
Ðð 0°Õ8×?Ñ?À×@SÑ@SÐTUÕ@VÐXYÓZÐÜ/Ø—;‘;×)Ñ)Ø'Ø-Ø+Ø1ô
Ðð —X’Xñ 
Ø'ð
à-ð
ð *ð
ð ,ð	
ð
 ñ
ˆ
ð Ðr-   )rM  rN  rx   )NNNNNNN)r%   r&   r'   r(   rZ   rR  rU  rj  r   r   r  r,   r©   rª   r«   s   @@r.   rH  rH  €  sH   ù‡ € ÷ó ò/ò-ôð0 Ø÷Kñ Kó ó ÷Kð Kr-   rH  c                   ó²   a a€ ] tR tRt oRtRR/tV3R lV 3R llt]]RV3R lR ll4       4       t	]
P                  ! 4       RV3R	 lR
 ll4       tRtVtV ;t# )ÚPI0ForConditionalGenerationiö  z9PI0 model with action projection heads and flow matching.Úaction_out_projÚcolwise_gather_outputc                ó    <€ V ^8„  d   QhRS[ /# r9  r:  )rn   ro   s   "€r.   rp   Ú(PI0ForConditionalGeneration.__annotate__û  s   ø€ ÷ ñ ™yñ r-   c                ó  <€ \         SV `  V4       \        V4      V n        VP                  P
                  V n        \        V4      V n        \        P                  ! V P                  VP                  4      V n        V P                  4        R # rx   )rY   rZ   rH  r0  r±   r¸   Úexpert_hidden_sizer  Úembed_action_timer   r  rÔ   r‡  rO  r!  s   &&€r.   rZ   Ú$PI0ForConditionalGeneration.__init__û  sf   ø€ Ü‰Ñ˜Ô Ü˜fÓ%ˆŒ
Ø"(×"3Ñ"3×"?Ñ"?ˆÔÜ!7¸Ó!?ˆÔÜ!Ÿyšy¨×)@Ñ)@À&×BWÑBWÓXˆÔØ�‰Ör-   c                ó¨  <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          R	S[ P                  R,          R
S[ P                  R,          RS[R,          RS[ P                  RS[/# )rd   rh   r'  Nr(  ra  r€   r�   rb  rm  rh  r1  rg   ri   )rM   ÚFloatTensorrm   Ú
BoolTensorrn  r   r   )rn   ro   s   "€r.   rp   rŠ    sñ   ø€ ÷ T
ñ T
á× Ñ ðT
ñ × Ñ  4Õ'ðT
ñ ×#Ñ# dÕ*ð	T
ñ
 —<‘< $Õ&ðT
ñ —l‘l TÕ)ðT
ñ $×.Ñ.°Õ5ðT
ñ Ÿ™ tÕ+ðT
ñ ×&Ñ&¨Õ-ðT
ñ —|‘| dÕ*ðT
ñ  �ðT
ñ ×"Ñ"ðT
ñ 
 ñT
r-   c                ó4  € VP                   ^ ,          pVEf   \        P                  ! V P                  P                  \        P
                  R7      p\        P                  ! V P                  P                  \        P
                  R7      p\        P                  P                  Wï4      pVP                  V34      P                  VP                  4      pVV P                  P                  ,          V P                  P                  ,           P                  4       pVfX   \        P                  ! VV P                  P                   V P                  P"                  VP                  VP$                  R7      pVeJ   VR,          pVV,          ^V,
          V,          ,           P                  VP$                  4      pW+,
          pMTpV P'                  VVV4      pV P(                  ! RRVRVRVRVR	VR
V	RVRV
/VB pVP*                  RV P                  P                   ) R13,          pV P-                  V4      pRpVe.   \.        P0                  ! XVV P                  P2                  R7      p\5        VVVP6                  VP8                  VP:                  R7      # )aÔ  
state (`torch.Tensor`, *optional*):
    Current robot state.
noise (`torch.Tensor`, *optional*):
    Random noise at current timestep that needs to be denoised
timestep (`torch.Tensor`, *optional*):
    Current denoising timestep.
pixel_attention_mask (`torch.Tensor`, *optional*):
    The mask indicating padded positions in the input image.
actions (`torch.Tensor`, *optional*):
    Input actions that need to be predicted. Used only when training to compute loss.
Nr~   rs  r  ra  r€   rb  r�   rm  rh  r*  r1  )Ú	reduction)ÚlossÚlogitsr1  Úhidden_statesÚ
attentions)r  NNr$   )r“   rM   rN   rÏ   rÖ   rþ   r×   ÚdistributionsÚBetarš   r%  r  rØ   rÙ   rÞ   ÚrandnrD   rÔ   r   r�  r0  Úlast_hidden_stater‡  r”   Úmse_lossrÜ   r   r1  r–  r—  )r[   rh   r'  r(  ra  r€   r�   rb  rm  rh  r1  rg   r^   Ú
batch_sizeÚalpha_tÚbeta_tÚdistÚ	time_betaÚtime_expandedÚnoisy_actionsÚtarget_velocityr+  ÚoutputsÚlast_hidden_statesÚpredicted_velocityr”  s   &&&&&&&&&&&&,             r.   r  Ú#PI0ForConditionalGeneration.forward  sJ  € ð: —[‘[ •^ˆ
ð ÓÜ—l’l 4§;¡;×#GÑ#GÌuÏ}É}Ô]ˆGÜ—\’\ $§+¡+×"EÑ"EÌUÏ]É]Ô[ˆFÜ×&Ñ&×+Ñ+¨GÓ<ˆDØŸ™ Z MÓ2×5Ñ5°e·l±lÓCˆIØ! D§K¡K×$CÑ$CÕCÀdÇkÁk×FfÑFfÕf×mÑmÓoˆHð Š=Ü—K’KØØ—‘×&Ñ&Ø—‘×*Ñ*Ø—|‘|Ø—k‘kôˆEð ÒØ$ ]Õ3ˆMØ*¨UÕ2°a¸-Õ6GÈ7Õ5RÕR×VÑVÐW^×WdÑWdÓeˆMØ#�o‰Oà!ˆMð "×3Ñ3°E¸=È(ÓSÐà—*’*ñ 

Øð

à%ð

ð *ð

ð "6ð	

ð
 &ð

ð (ð

ð -ð

ð ,ð

ð ñ

ˆð %×6Ñ6°q¸4¿;¹;×;QÑ;QÐ:QÑ:SÐ7SÕTÐØ!×1Ñ1Ð2DÓEÐàˆØÒä—:’:˜oÐ/AÈTÏ[É[×MgÑMgÔhˆDä%ØØ%Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r-   c                ó  <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          R	S[ P                  /# )
rd   rh   ra  r€   r'  Nrb  r�   Ú	num_stepsri   )rM   r�  rn  rm   r‘  rÝ   )rn   ro   s   "€r.   rp   rŠ  \  s    ø€ ÷ Añ Aá× Ñ ðAñ ×#Ñ#ðAñ ×'Ñ'ð	Añ
 × Ñ  4Õ'ðAñ Ÿ™ tÕ+ðAñ $×.Ñ.°Õ5ðAñ ˜•:ðAñ 
×	Ñ	ñAr-   c                ó�  € T;'       g    V P                   P                  pVP                  ^ ,          p	VP                  p
VfQ   \        P
                  ! RRV	V P                   P                  V P                   P                  3VP                  V
R7      pRpVe   VP                  R4      ^,
          pV P                  P                  W#V4      p\        P                  ! V4      R,          pV P                  P                  VVVVRRR7      P                  pVP                  4       pRV,          p\!        V4       Fˆ  pRVV,          ,           p\        P"                  ! V\        P$                  V
R7      P'                  V	4      pV ! RRVR	VR
VRVRVRV/VB pVP)                  V4       VVVP*                  ,          ,           pKŠ  	  V# )z0Run flow matching inference to generate actions.Nrü   r²   )r³   Ústdr)   r   r  T)rh  rb  rm  rp  rq  Úreturn_dictrr  rh   r'  r(  r�   rb  r1  r„   ru  g      ð¿r$   )rÏ   rÕ   r“   r  rM   ÚnormalrD   rÔ   r   rw  r0  rj  rx  rN  r1  r{  rV   rN   rþ   ÚexpandÚcropr•  )r[   rh   ra  r€   r'  rb  r�   rª  r^   r�  r  rm  rh  rp  r1  Úprefix_lengthÚdtÚstepr  Útime_tensorÚoutputs   &&&&&&&&,            r.   Úsample_actionsÚ*PI0ForConditionalGeneration.sample_actions[  sÐ  € ð ×@Ð@ §¡×!@Ñ!@ˆ	Ø—_‘_ QÕ'ˆ
Ø×!Ñ!ˆð Š=Ü—L’LØØàØ—K‘K×*Ñ*Ø—K‘K×.Ñ.ðð
 #×(Ñ(Øô
ˆEð ˆØÒ%Ø)×0Ñ0°Ó4°qÕ8ˆLØŸ
™
×/Ñ/°	ÐI]Ó^ˆÜ×)Ò)¨-Ó8¸ÕAˆØŸ*™*Ÿ.™.Ø'Ø)Ø%Ø)ØØð )ó 
÷ ‰/ð 	ð (×6Ñ6Ó8ˆð �IÕˆÜ˜)Ö$ˆDØ˜ �•?ˆDÜŸ,š, t´5·=±=ÈÔP×WÑWÐXbÓcˆKÙñ Øðàðð %ðð &:ð	ð
  .ðð !0ðð ñˆFð × Ñ  Ô/Ø˜B §¡Õ.Õ.ŠEñ %ð  ˆr-   )r‡  r�  rŒ  r0  )
NNNNNNNNNN)NNNN)r%   r&   r'   r(   rà   Ú_tp_planrZ   r   r   r  rM   Úno_gradr¶  r,   r©   rª   r«   s   @@r.   r†  r†  ö  sj   ù‡ € ÙCà!Ð#:Ð;€H÷ó ð Ø÷T
ñ T
ó ó ðT
ðl ‡]‚]ƒ_÷Añ Aó ÷Að Ar-   r†  )ÚvisionrM   )r®   r/  rH  r†  r=   r   )Erà   rÿ   Úcollections.abcr   Únumpyrk   rM   Útorch.nn.functionalr   Ú
functionalr”   Úhuggingface_hub.dataclassesr   rt   r   r4  Úcache_utilsr   Úconfiguration_utilsr   Úfeature_extraction_utilsr   Úimage_utilsr	   r
   Úmasking_utilsr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   r   r   Útokenization_utils_baser   r   r   Úutilsr   r   r   Úutils.genericr   Úutils.import_utilsr   Úautor   r   r   Úsiglip.image_processing_siglipr   Ú
get_loggerr%   r‡   r   r0   r=   r®   rò   ÚModulerô   r  r/  rH  r†  Ú__all__r$   r-   r.   Ú<module>rÑ     st  ðñ [ã Ý $ã Û ß Ð Ý .Ý å &Ý  Ý 3Ý 4ß AÝ /ß OÝ -ß HÑ Hß OÑ Oß >Ñ >Ý +Ý *ß 8Ñ 8Ý Að 
×	Ò	˜HÓ	%€ð ôÐ,ó ó ðôÐ)°õ ð Ù	Ð&Ô'ôAD�>ó ADó (ó ðADñH Ð-Ô.ØôlnÐ ó lnó ó /ðlnõ^ô˜BŸI™Iô ô.$˜RŸY™Yô $ð, ôR˜ó Ró ðRð& ôrÐ!ó ró ðrôjgÐ"4ô gòT‚r-   