Ë
    þÍ:jî€  ã                   óˆ  — 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	m
Z
 d dlZd dl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 d
dlmZmZ g d¢Ze G d„ d«      «       Z dee!   de!fd„Z"dejF                  de!de!de$ejF                  e!f   fd„Z%dejF                  de!de!de!dejF                  f
d„Z&ejN                  jQ                  d«       ejN                  jQ                  d«        G d„ dejR                  «      Z*dejF                  de!dejF                  fd „Z+d!ejF                  d"ejF                  d#e$e!e!e!f   d$e$e!e!e!f   d%ejF                  d&ejF                  d'ejF                  dejF                  fd(„Z,dejF                  d)ejF                  d*e-fd+„Z.ejN                  jQ                  d,«       ejN                  jQ                  d-«        G d.„ d/ejR                  «      Z/ G d0„ d1ejR                  «      Z0 G d2„ d3ejR                  «      Z1 G d4„ d5ejR                  «      Z2d6e3e    d7e4d8e
e   d9e-d:ede2fd;„Z5 G d<„ d=e«      Z6 G d>„ d?e«      Z7 e«        ed@e6jp                  f¬A«      ddBdCœd8e
e6   d9e-d:ede2fdD„«       «       Z9 e«        ed@e7jp                  f¬A«      ddBdCœd8e
e7   d9e-d:ede2fdE„«       «       Z:y)Fé    N)ÚSequence)Ú	dataclass)Úpartial)ÚAnyÚCallableÚOptionalé   )ÚMLPÚStochasticDepth)ÚVideoClassification)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_KINETICS400_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interface)ÚMViTÚMViT_V1_B_WeightsÚ	mvit_v1_bÚMViT_V2_S_WeightsÚ	mvit_v2_sc                   ól   — e Zd ZU eed<   eed<   eed<   ee   ed<   ee   ed<   ee   ed<   ee   ed<   y)	ÚMSBlockConfigÚ	num_headsÚinput_channelsÚoutput_channelsÚkernel_qÚ	kernel_kvÚstride_qÚ	stride_kvN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__Úlist© ó    úr/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/models/video/mvit.pyr   r      s;   … àƒNØÓØÓØ�3‰iÓØ�C‰yÓØ�3‰iÓØ�C‰yÔr*   r   ÚsÚreturnc                 ó"   — d}| D ]  }||z  }Œ	 |S ©Né   r)   )r,   ÚproductÚvs      r+   Ú_prodr3   '   s$   € Ø€GØò ˆØ�1‰‰ðà€Nr*   ÚxÚ
target_dimÚ
expand_dimc                 óž   — | j                  «       }||dz
  k(  r| j                  |«      } | |fS ||k7  rt        d| j                  › �«      ‚| |fS )Nr0   zUnsupported input dimension )ÚdimÚ	unsqueezeÚ
ValueErrorÚshape©r4   r5   r6   Ú
tensor_dims       r+   Ú
_unsqueezer>   .   s^   € Ø—‘“€JØ�Z !‘^Ò#Ø�K‰K˜
Ó#ˆð ˆjˆ=Ðð 
�zÒ	!ÜÐ7¸¿¹°yÐAÓBÐBØˆjˆ=Ðr*   r=   c                 ó8   — ||dz
  k(  r| j                  |«      } | S r/   )Úsqueezer<   s       r+   Ú_squeezerA   7   s!   € Ø�Z !‘^Ò#Ø�I‰I�jÓ!ˆØ€Hr*   r>   rA   c                   óà   ‡ — e Zd Z	 	 ddej                  deej                     deej                     deddf
ˆ fd„Zdej                  d	e
eeef   de
ej                  e
eeef   f   fd
„Zˆ xZS )ÚPoolNÚpoolÚnormÚ
activationÚnorm_before_poolr-   c                 óÄ   •— t         ‰| �  «        || _        g }|�|j                  |«       |�|j                  |«       |rt	        j
                  |Ž nd | _        || _        y )N)ÚsuperÚ__init__rD   ÚappendÚnnÚ
SequentialÚnorm_actrG   )ÚselfrD   rE   rF   rG   ÚlayersÚ	__class__s         €r+   rJ   zPool.__init__B   s\   ø€ ô 	‰ÑÔØˆŒ	ØˆØÐØ�M‰M˜$ÔØÐ!Ø�M‰M˜*Ô%Ù28œŸ™ vÑ.¸dˆŒØ 0ˆÕr*   r4   Úthwc                 ó€  — t        |dd«      \  }}t        j                  |dd¬«      \  }}|j                  dd«      }|j                  d d \  }}}|j                  ||z  |f|z   «      j                  «       }| j                  r| j                  �| j                  |«      }| j                  |«      }|j                  dd  \  }}	}
|j                  |||d«      j                  dd«      }t        j                  ||fd¬«      }| j                  s| j                  �| j                  |«      }t        |dd|«      }|||	|
ffS )	Né   r0   )r0   r   )Úindicesr8   r	   éÿÿÿÿ©r8   )r>   ÚtorchÚtensor_splitÚ	transposer;   ÚreshapeÚ
contiguousrG   rN   rD   ÚcatrA   )rO   r4   rR   r=   Úclass_tokenÚBÚNÚCÚTÚHÚWs              r+   ÚforwardzPool.forwardS   s3  € Ü" 1 a¨Ó+‰ˆˆ:ô ×+Ñ+¨A°tÀÔC‰ˆ�QØ�K‰K˜˜1ÓˆØ—'‘'˜"˜1�+‰ˆˆ1ˆaØ�I‰I�q˜1‘u˜a�j 3Ñ&Ó'×2Ñ2Ó4ˆð × Ò  T§]¡]Ð%>Ø—‘˜aÓ ˆAð �I‰I�a‹LˆØ—'‘'˜!˜"�+‰ˆˆ1ˆaØ�I‰I�a˜˜A˜rÓ"×,Ñ,¨Q°Ó2ˆÜ�I‰I�{ AÐ&¨AÔ.ˆà×$Ò$¨¯©Ð)BØ—‘˜aÓ ˆAä�Q˜˜1˜jÓ)ˆØ�1�a˜�)ˆ|Ðr*   )NF)r#   r$   r%   rL   ÚModuler   ÚboolrJ   rX   ÚTensorÚtupler&   re   Ú__classcell__©rQ   s   @r+   rC   rC   A   s�   ø„ ð
 +/Ø!&ñ1à�i‰ið1ð �r—y‘yÑ!ð1ð ˜RŸY™YÑ'ð	1ð
 ð1ð 
õ1ð"˜Ÿ™ð ¨E°#°s¸C°-Ñ,@ð ÀUÈ5Ï<É<ÐY^Ð_bÐdgÐilÐ_lÑYmÐKmÑEn÷ r*   rC   Ú	embeddingÚdc                 óê   — | j                   d   |k(  r| S t        j                  j                  | j	                  dd«      j                  d«      |d¬«      j                  d«      j	                  dd«      S )Nr   r0   Úlinear)ÚsizeÚmode)r;   rL   Ú
functionalÚinterpolateÚpermuter9   r@   )rl   rm   s     r+   Ú_interpolateru   m   sn   € Ø‡��qÑ˜QÒØÐô 	�‰×!Ñ!Ø×Ñ˜a Ó#×-Ñ-¨aÓ0ØØð 	"ó 	
÷
 
‰�‹ß	‰��A‹ðr*   ÚattnÚqÚq_thwÚk_thwÚ	rel_pos_hÚ	rel_pos_wÚ	rel_pos_tc                 ó¶  — |\  }}}	|\  }
}}t        dt        ||«      z  dz
  «      }t        dt        |	|«      z  dz
  «      }t        dt        ||
«      z  dz
  «      }t        ||z  d«      }t        ||z  d«      }t        j                  |«      d d …d f   |z  t        j                  |«      d d d …f   d|z
  z   |z  z
  }t        ||	z  d«      }t        |	|z  d«      }t        j                  |	«      d d …d f   |z  t        j                  |«      d d d …f   d|z
  z   |z  z
  }t        |
|z  d«      }t        ||
z  d«      }t        j                  |«      d d …d f   |z  t        j                  |
«      d d d …f   d|
z
  z   |z  z
  }t	        ||«      }t	        ||«      }t	        ||«      }||j                  «          }||j                  «          }||j                  «          }|j                  \  }}}}|d d …d d …dd …f   j                  |||||	|«      } t        j                  d| |«      }!t        j                  d| |«      }"| j                  dddddd	«      j                  |||z  |z  |	z  |«      } t        j                  | |j                  dd«      «      j                  dd«      }#|#j                  ||||	||
«      j                  dddddd	«      }#|!d d …d d …d d …d d …d d …d d d …d f   |"d d …d d …d d …d d …d d …d d d d …f   z   |#d d …d d …d d …d d …d d …d d …d d f   z   j                  ||||z  |	z  |
|z  |z  «      }$| d d …d d …dd …dd …fxx   |$z  cc<   | S )
Nr   r0   ç      ð?zbythwc,hkc->bythwkzbythwc,wkc->bythwkr   r	   rT   é   )r&   ÚmaxrX   Úarangeru   Úlongr;   r[   Úeinsumrt   ÚmatmulrZ   Úview)%rv   rw   rx   ry   rz   r{   r|   Úq_tÚq_hÚq_wÚk_tÚk_hÚk_wÚdhÚdwÚdtÚ	q_h_ratioÚ	k_h_ratioÚdist_hÚ	q_w_ratioÚ	k_w_ratioÚdist_wÚ	q_t_ratioÚ	k_t_ratioÚdist_tÚRhÚRwÚRtr_   Ún_headÚ_r8   Úr_qÚrel_h_qÚrel_w_qÚrel_q_tÚrel_poss%                                        r+   Ú_add_rel_posr¢   |   sy  € ð �M€CˆˆcØ�M€CˆˆcÜ	ˆQ”�S˜#“Ñ Ñ"Ó	#€BÜ	ˆQ”�S˜#“Ñ Ñ"Ó	#€BÜ	ˆQ”�S˜#“Ñ Ñ"Ó	#€Bô �C˜#‘I˜sÓ#€IÜ�C˜#‘I˜sÓ#€IÜ�\‰\˜#Óšq $˜wÑ'¨)Ñ3´u·|±|ÀCÓ7HÈÊqÈÑ7QÐUXÐ[^ÑU^Ñ7_ÐclÑ6lÑl€FÜ�C˜#‘I˜sÓ#€IÜ�C˜#‘I˜sÓ#€IÜ�\‰\˜#Óšq $˜wÑ'¨)Ñ3´u·|±|ÀCÓ7HÈÊqÈÑ7QÐUXÐ[^ÑU^Ñ7_ÐclÑ6lÑl€FÜ�C˜#‘I˜sÓ#€IÜ�C˜#‘I˜sÓ#€IÜ�\‰\˜#Óšq $˜wÑ'¨)Ñ3´u·|±|ÀCÓ7HÈÊqÈÑ7QÐUXÐ[^ÑU^Ñ7_ÐclÑ6lÑl€Fô ˜Y¨Ó+€IÜ˜Y¨Ó+€IÜ˜Y¨Ó+€IØ	�6—;‘;“=Ñ	!€BØ	�6—;‘;“=Ñ	!€BØ	�6—;‘;“=Ñ	!€BàŸ™Ñ€A€vˆq�#à
ŠAŠq�!‘"ˆH‰+×
Ñ
˜a ¨¨c°3¸Ó
<€CÜ�l‰lÐ/°°bÓ9€GÜ�l‰lÐ/°°bÓ9€Gà
�+‰+�a˜˜A˜q ! QÓ
'×
/Ñ
/°°Q¸±ZÀ#Ñ5EÈÑ5KÈSÓ
Q€Cä�l‰l˜3 §¡¨Q°Ó 2Ó3×=Ñ=¸aÀÓC€Gà�l‰l˜1˜f c¨3°°SÓ9×AÑAÀ!ÀQÈÈ1ÈaÐQRÓS€Gð 	’’1’aššA˜t¢Q¨Ð,Ñ-Ø
’!’Qšš1ša  tªQÐ.Ñ
/ñ	0à
’!’Qšš1ša¢ D¨$Ð.Ñ
/ñ	0÷ �gˆa�˜˜s™ S™¨#°©)°c©/Ó:ð	 ð 	ŠŠAˆq‰r�1‘2ˆÓ˜'Ñ!Óà€Kr*   ÚshortcutÚresidual_with_cls_embedc           	      ó€   — |r| j                  |«       | S | d d …d d …dd …d d …fxx   |d d …d d …dd …d d …f   z  cc<   | S r/   )Úadd_)r4   r£   r¤   s      r+   Ú_add_shortcutr§   ¸   sF   € ÙØ	�‰ˆxÔð €Hð 	
Š!ŠQ�‘’Aˆ+‹˜(¢1¢a¨©ªQ ;Ñ/Ñ/‹Ø€Hr*   r¢   r§   c                   ó  ‡ — e Zd Zdej                  fdee   dedededee   dee   dee   d	ee   d
edededede	dej                  f   ddfˆ fd„Zdej                  deeeef   deej                  eeeef   f   fd„Zˆ xZS )ÚMultiscaleAttentionç        Ú
input_sizeÚ	embed_dimÚ
output_dimr   r   r    r!   r"   Úresidual_poolr¤   Úrel_pos_embedÚdropoutÚ
norm_layer.r-   Nc                 ó"  •— t         ‰| �  «        || _        || _        || _        ||z  | _        dt        j                  | j
                  «      z  | _        |	| _	        |
| _
        t        j                  |d|z  «      | _        t        j                  ||«      g}|dkD  r&|j                  t        j                  |d¬«      «       t        j                   |Ž | _        d | _        t'        |«      dkD  st'        |«      dkD  rt|D �cg c]  }t)        |dz  «      ‘Œ }}t+        t        j,                  | j
                  | j
                  |||| j
                  d¬	«       || j
                  «      «      | _        d | _        d | _        t'        |«      dkD  st'        |«      dkD  rÍ|D �cg c]  }t)        |dz  «      ‘Œ }}t+        t        j,                  | j
                  | j
                  |||| j
                  d¬	«       || j
                  «      «      | _        t+        t        j,                  | j
                  | j
                  |||| j
                  d¬	«       || j
                  «      «      | _        d | _        d | _        d | _        |�r…t9        |dd  «      }t;        |«      d
kD  r||d   z  n|}t;        |«      d
kD  r||d   z  n|}dt9        ||«      z  dz
  }d|d
   z  dz
  }t        j<                  t?        j@                  || j
                  «      «      | _        t        j<                  t?        j@                  || j
                  «      «      | _        t        j<                  t?        j@                  || j
                  «      «      | _        t        jB                  jE                  | j2                  d¬«       t        jB                  jE                  | j4                  d¬«       t        jB                  jE                  | j6                  d¬«       y y c c}w c c}w )Nr~   r	   rª   T©Úinplacer0   r   F)ÚstrideÚpaddingÚgroupsÚbiasr   ç{®Gáz”?©Ústd)#rI   rJ   r¬   r­   r   Úhead_dimÚmathÚsqrtÚscalerr®   r¤   rL   ÚLinearÚqkvrK   ÚDropoutrM   ÚprojectÚpool_qr3   r&   rC   ÚConv3dÚpool_kÚpool_vrz   r{   r|   r€   ÚlenÚ	ParameterrX   ÚzerosÚinitÚtrunc_normal_)rO   r«   r¬   r­   r   r   r    r!   r"   r®   r¤   r¯   r°   r±   rP   rw   Ú	padding_qÚkvÚ
padding_kvrp   Úq_sizeÚkv_sizeÚspatial_dimÚtemporal_dimrQ   s                           €r+   rJ   zMultiscaleAttention.__init__Å   sL  ø€ ô  	‰ÑÔØ"ˆŒØ$ˆŒØ"ˆŒØ" iÑ/ˆŒØœDŸI™I d§m¡mÓ4Ñ4ˆŒØ*ˆÔØ'>ˆÔ$ä—9‘9˜Y¨¨J©Ó7ˆŒÜ#%§9¡9¨Z¸Ó#DÐ"EˆØ�SŠ=Ø�M‰Mœ"Ÿ*™* W°dÔ;Ô<Ü—}‘} fÐ-ˆŒà+/ˆŒÜ�‹?˜QÒ¤%¨£/°AÒ"5Ø.6Ö7¨œ˜Q !™V�Ð7ˆIÐ7ÜÜ—	‘	Ø—M‘MØ—M‘MØØ#Ø%ØŸ=™=Øôñ ˜4Ÿ=™=Ó)óˆDŒKð ,0ˆŒØ+/ˆŒÜ�Ó˜aÒ¤5¨Ó#3°aÒ#7Ø1:Ö;¨2œ#˜b A™g�,Ð;ˆJÐ;ÜÜ—	‘	Ø—M‘MØ—M‘MØØ$Ø&ØŸ=™=Øôñ ˜4Ÿ=™=Ó)óˆDŒKô Ü—	‘	Ø—M‘MØ—M‘MØØ$Ø&ØŸ=™=Øôñ ˜4Ÿ=™=Ó)óˆDŒKð 26ˆŒØ15ˆŒØ15ˆŒÚÜ�z ! "�~Ó&ˆDÜ,/°«M¸AÒ,=�T˜X a™[Ò(À4ˆFÜ.1°)«n¸qÒ.@�d˜i¨™lÒ*ÀdˆGØœc &¨'Ó2Ñ2°QÑ6ˆKØ˜z¨!™}Ñ,¨qÑ0ˆLÜŸ\™\¬%¯+©+°kÀ4Ç=Á=Ó*QÓRˆDŒNÜŸ\™\¬%¯+©+°kÀ4Ç=Á=Ó*QÓRˆDŒNÜŸ\™\¬%¯+©+°lÀDÇMÁMÓ*RÓSˆDŒNÜ�G‰G×!Ñ! $§.¡.°dÐ!Ô;Ü�G‰G×!Ñ! $§.¡.°dÐ!Ô;Ü�G‰G×!Ñ! $§.¡.°dÐ!Õ;ð ùò] 8ùò" <s   ÄPÆ Pr4   rR   c           	      óÌ  — |j                   \  }}}| j                  |«      j                  ||d| j                  | j                  «      j                  dd«      j                  d¬«      \  }}}| j                  �| j                  ||«      \  }}	n|}	| j                  �| j                  ||«      d   }| j                  �| j                  ||«      \  }}t        j                  | j                  |z  |j                  dd«      «      }
| j                  �G| j                  �;| j                  �/t!        |
|||	| j                  | j                  | j                  «      }
|
j#                  d¬«      }
t        j                  |
|«      }| j$                  rt'        ||| j(                  «       |j                  dd«      j                  |d| j*                  «      }| j-                  |«      }||fS )Nr	   r0   r   rW   r   rV   )r;   rÁ   r[   r   r¼   rZ   ÚunbindrÆ   rÇ   rÄ   rX   r„   r¿   rz   r{   r|   r¢   Úsoftmaxr®   r§   r¤   r­   rÃ   )rO   r4   rR   r_   r`   ra   rw   Úkr2   ry   rv   s              r+   re   zMultiscaleAttention.forward!  s�  € Ø—'‘'‰ˆˆ1ˆaØ—(‘(˜1“+×%Ñ% a¨¨A¨t¯~©~¸t¿}¹}ÓM×WÑWÐXYÐ[\Ó]×dÑdÐijÐdÓk‰ˆˆ1ˆaà�;‰;Ð"Ø—{‘{ 1 cÓ*‰HˆA‰uàˆEØ�;‰;Ð"Ø—‘˜A˜sÓ# AÑ&ˆAØ�;‰;Ð"Ø—[‘[  CÓ(‰FˆAˆsä�|‰|˜DŸK™K¨!™O¨Q¯[©[¸¸AÓ->Ó?ˆØ�>‰>Ð%¨$¯.©.Ð*DÈÏÉÐIcÜØØØØØ—‘Ø—‘Ø—‘óˆDð �|‰| ˆ|Ó#ˆä�L‰L˜˜qÓ!ˆØ×ÒÜ˜!˜Q × <Ñ <Ô=Ø�K‰K˜˜1Ó×%Ñ% a¨¨T¯_©_Ó=ˆØ�L‰L˜‹Oˆà�#ˆvˆr*   )r#   r$   r%   rL   Ú	LayerNormr(   r&   rg   Úfloatr   rf   rJ   rX   rh   ri   re   rj   rk   s   @r+   r©   r©   Ä   s  ø„ ð Ø/1¯|©|ñZ<à˜‘IðZ<ð ðZ<ð ð	Z<ð
 ðZ<ð �s‘)ðZ<ð ˜‘9ðZ<ð �s‘)ðZ<ð ˜‘9ðZ<ð ðZ<ð "&ðZ<ð ðZ<ð ðZ<ð ˜S "§)¡)˜^Ñ,ðZ<ð 
õZ<ðx ˜Ÿ™ð  ¨E°#°s¸C°-Ñ,@ð  ÀUÈ5Ï<É<ÐY^Ð_bÐdgÐilÐ_lÑYmÐKmÑEn÷  r*   r©   c                   óæ   ‡ — e Zd Zddej                  fdee   dededededede	d	e	d
e
dej                  f   ddfˆ fd„Zdej                  deeeef   deej                  eeeef   f   fd„Zˆ xZS )ÚMultiscaleBlockrª   r«   Úcnfr®   r¤   r¯   Úproj_after_attnr°   Ústochastic_depth_probr±   .r-   Nc
                 ó  •— t         ‰| �  «        || _        d | _        t	        |j
                  «      dkD  ro|j
                  D �
cg c]  }
|
dkD  r|
dz   n|
‘Œ }}
|D �cg c]  }t        |dz  «      ‘Œ }}t        t        j                  ||j
                  |¬«      d «      | _        |r|j                  n|j                  } |	|j                  «      | _         |	|«      | _        t        | j                  t        j                  «      | _        t#        ||j                  ||j$                  |j&                  |j(                  |j
                  |j*                  |||||	¬«      | _        t/        |d|z  |j                  gt        j0                  |d ¬«      | _        t5        |d«      | _        d | _        |j                  |j                  k7  r0t        j:                  |j                  |j                  «      | _        y y c c}
w c c}w )Nr0   r   )rµ   r¶   )	r   r    r!   r"   r¯   r®   r¤   r°   r±   rT   )Úactivation_layerr°   r´   Úrow)rI   rJ   rÝ   Ú	pool_skipr3   r!   r&   rC   rL   Ú	MaxPool3dr   r   Únorm1Únorm2Ú
isinstanceÚBatchNorm1dÚneeds_transposalr©   r   r   r    r"   rv   r
   ÚGELUÚmlpr   Ústochastic_depthrÃ   rÀ   )rO   r«   rÜ   r®   r¤   r¯   rÝ   r°   rÞ   r±   r,   Úkernel_skipr×   Úpadding_skipÚattn_dimrQ   s                  €r+   rJ   zMultiscaleBlock.__init__E  s·  ø€ ô 	‰ÑÔØ.ˆÔà.2ˆŒÜ�—‘Ó Ò"Ø:=¿,¹,ÖG°Q A¨¢E˜1˜qš5¨qÑ0ÐGˆKÐGØ1<Ö=¨AœC  Q¡�KÐ=ˆLÐ=Ü!Ü—‘˜[°·±À|ÔTÐVZóˆDŒNñ +:�3×&Ò&¸s×?QÑ?Qˆá × 2Ñ 2Ó3ˆŒ
Ù Ó)ˆŒ
Ü *¨4¯:©:´r·~±~Ó FˆÔä'ØØ×ÑØØ�M‰MØ—\‘\Ø—m‘mØ—\‘\Ø—m‘mØ'Ø'Ø$;ØØ!ô
ˆŒ	ô ØØ�‰\˜3×.Ñ.Ð/ÜŸW™WØØô
ˆŒô !0Ð0EÀuÓ MˆÔà,0ˆŒØ×Ñ ×!4Ñ!4Ò4ÜŸ9™9 S×%7Ñ%7¸×9LÑ9LÓMˆD�Lð 5ùòM HùÚ=s   ÁG9ÁG>r4   rR   c                 óÈ  — | j                   r1| j                  |j                  dd«      «      j                  dd«      n| j                  |«      }| j                  ||«      \  }}| j                  �| j
                  s|n| j	                  |«      }| j                  €|n| j                  ||«      d   }|| j                  |«      z   }| j                   r1| j                  |j                  dd«      «      j                  dd«      n| j                  |«      }| j                  �| j
                  r|n| j	                  |«      }|| j                  | j                  |«      «      z   |fS )Nr0   r   r   )
rè   rä   rZ   rv   rÃ   rÝ   râ   rë   rå   rê   )	rO   r4   rR   Úx_norm1Úx_attnÚthw_newÚx_skipÚx_norm2Úx_projs	            r+   re   zMultiscaleBlock.forward  s-  € ØCG×CXÒCX�$—*‘*˜QŸ[™[¨¨AÓ.Ó/×9Ñ9¸!¸QÔ?Ð^b×^hÑ^hÐijÓ^kˆØŸ)™) G¨SÓ1‰ˆ�Ø—‘Ð%¨T×-AÒ-A‰AÀtÇ|Á|ÐT[ÓG\ˆØ—n‘nÐ,‘°$·.±.ÀÀCÓ2HÈÑ2KˆØ�T×*Ñ*¨6Ó2Ñ2ˆàCG×CXÒCX�$—*‘*˜QŸ[™[¨¨AÓ.Ó/×9Ñ9¸!¸QÔ?Ð^b×^hÑ^hÐijÓ^kˆØ—l‘lÐ*¨d×.BÒ.B‘ÈÏÉÐU\ÓH]ˆà˜×-Ñ-¨d¯h©h°wÓ.?Ó@Ñ@À'ÐIÐIr*   )r#   r$   r%   rL   rØ   r(   r&   r   rg   rÙ   r   rf   rJ   rX   rh   ri   re   rj   rk   s   @r+   rÛ   rÛ   D  sá   ø„ ð Ø'*Ø/1¯|©|ñ8Nà˜‘Ið8Nð ð8Nð ð	8Nð
 "&ð8Nð ð8Nð ð8Nð ð8Nð  %ð8Nð ˜S "§)¡)˜^Ñ,ð8Nð 
õ8Nðt
J˜Ÿ™ð 
J¨E°#°s¸C°-Ñ,@ð 
JÀUÈ5Ï<É<ÐY^Ð_bÐdgÐilÐ_lÑYmÐKmÑEn÷ 
Jr*   rÛ   c            
       óv   ‡ — e Zd Zdedeeef   dededdf
ˆ fd„Zdej                  dej                  fd	„Z	ˆ xZ
S )
ÚPositionalEncodingÚ
embed_sizeÚspatial_sizeÚtemporal_sizer¯   r-   Nc                 ó(  •— t         ‰| �  «        || _        || _        t	        j
                  t        j                  |«      «      | _        d | _	        d | _
        d | _        |s±t	        j
                  t        j                  | j                  d   | j                  d   z  |«      «      | _	        t	        j
                  t        j                  | j                  |«      «      | _
        t	        j
                  t        j                  |«      «      | _        y y )Nr   r0   )rI   rJ   rù   rú   rL   rÉ   rX   rÊ   r^   Úspatial_posÚtemporal_posÚ	class_pos)rO   rø   rù   rú   r¯   rQ   s        €r+   rJ   zPositionalEncoding.__init__�  sË   ø€ Ü‰ÑÔØ(ˆÔØ*ˆÔäŸ<™<¬¯©°JÓ(?Ó@ˆÔØ37ˆÔØ48ˆÔØ15ˆŒÙÜ!Ÿ|™|¬E¯K©K¸×8IÑ8IÈ!Ñ8LÈt×O`ÑO`ÐabÑOcÑ8cÐeoÓ,pÓqˆDÔÜ "§¡¬U¯[©[¸×9KÑ9KÈZÓ-XÓ YˆDÔÜŸ\™\¬%¯+©+°jÓ*AÓBˆD�Nð r*   r4   c                 ó¸  — | j                   j                  |j                  d«      d«      j                  d«      }t	        j
                  ||fd¬«      }| j                  �ú| j                  �î| j                  �â| j                  j                  \  }}t	        j                  | j                  |d¬«      }|j                  | j                  j                  d«      j                  | j                  dd«      j                  d|«      «       t	        j
                  | j                  j                  d«      |fd¬«      j                  d«      }|j                  |«       |S )Nr   rV   r0   rW   )r^   Úexpandrp   r9   rX   r]   rü   rý   rþ   r;   Úrepeat_interleaver¦   rú   r[   )rO   r4   r^   Úhw_sizerø   Úpos_embeddings         r+   re   zPositionalEncoding.forward›  s  € Ø×&Ñ&×-Ñ-¨a¯f©f°Q«i¸Ó<×FÑFÀqÓIˆÜ�I‰I�{ AÐ&¨AÔ.ˆà×ÑÐ'¨D×,=Ñ,=Ð,IÈdÏnÉnÐNhØ"&×"2Ñ"2×"8Ñ"8ÑˆG�ZÜ!×3Ñ3°D×4EÑ4EÀwÐTUÔVˆMØ×Ñ˜t×/Ñ/×9Ñ9¸!Ó<×CÑCÀD×DVÑDVÐXZÐ\^Ó_×gÑgÐhjÐlvÓwÔxÜ!ŸI™I t§~¡~×'?Ñ'?ÀÓ'BÀMÐ&RÐXYÔZ×dÑdÐefÓgˆMØ�F‰F�=Ô!àˆr*   )r#   r$   r%   r&   ri   rg   rJ   rX   rh   re   rj   rk   s   @r+   r÷   r÷   Œ  sW   ø„ ðC 3ð C°e¸CÀ¸H±oð CÐVYð CÐjnð CÐswõ Cð˜Ÿ™ð ¨%¯,©,÷ r*   r÷   c            $       ó,  ‡ — e Zd Z	 	 	 	 	 	 	 	 	 ddeeef   dedee   dedededed	ed
ededede	e
dej                  f      de	e
dej                  f      deeeef   deeeef   deeeef   ddf"ˆ fd„Zdej                  dej                  fd„Zˆ xZS )r   Nrù   rú   Úblock_settingr®   r¤   r¯   rÝ   r°   Úattention_dropoutrÞ   Únum_classesÚblock.r±   Úpatch_embed_kernelÚpatch_embed_strideÚpatch_embed_paddingr-   c                 ó  •— t         ‰| �  «        t        | «       t        |«      }|dk(  rt	        d«      ‚|€t
        }|€t        t        j                  d¬«      }t        j                  d|d   j                  |||¬«      | _        t        |f|z   | j                  j                  «      D ��cg c]
  \  }}||z  ‘Œ }}}t        |d   j                  |d   |d	   f|d   |¬
«      | _        t        j                   «       | _        t%        |«      D ]~  \  }}|
|z  |dz
  z  }| j"                  j'                   ||||||||	||¬«	      «       t        |j(                  «      dkD  sŒTt        ||j(                  «      D ��cg c]
  \  }}||z  ‘Œ }}}Œ€  ||d   j*                  «      | _        t        j.                  t        j0                  |d¬«      t        j2                  |d   j*                  |«      «      | _        | j7                  «       D �]l  }t9        |t        j2                  «      r~t        j:                  j=                  |j>                  d¬«       t9        |t        j2                  «      sŒd|j@                  €Œqt        j:                  jC                  |j@                  d«       Œœt9        |t        j                  «      ro|j>                  �*t        j:                  jC                  |j>                  d«       |j@                  €Œùt        j:                  jC                  |j@                  d«       �Œ%t9        |t        «      s�Œ7|jE                  «       D ]#  }t        j:                  j=                  |d¬«       Œ% �Œo yc c}}w c c}}w )aÄ  
        MViT main class.

        Args:
            spatial_size (tuple of ints): The spacial size of the input as ``(H, W)``.
            temporal_size (int): The temporal size ``T`` of the input.
            block_setting (sequence of MSBlockConfig): The Network structure.
            residual_pool (bool): If True, use MViTv2 pooling residual connection.
            residual_with_cls_embed (bool): If True, the addition on the residual connection will include
                the class embedding.
            rel_pos_embed (bool): If True, use MViTv2's relative positional embeddings.
            proj_after_attn (bool): If True, apply the projection after the attention.
            dropout (float): Dropout rate. Default: 0.0.
            attention_dropout (float): Attention dropout rate. Default: 0.0.
            stochastic_depth_prob: (float): Stochastic depth rate. Default: 0.0.
            num_classes (int): The number of classes.
            block (callable, optional): Module specifying the layer which consists of the attention and mlp.
            norm_layer (callable, optional): Module specifying the normalization layer to use.
            patch_embed_kernel (tuple of ints): The kernel of the convolution that patchifies the input.
            patch_embed_stride (tuple of ints): The stride of the convolution that patchifies the input.
            patch_embed_padding (tuple of ints): The padding of the convolution that patchifies the input.
        r   z+The configuration parameter can't be empty.Ng�íµ ÷Æ°>)Úepsr	   )Úin_channelsÚout_channelsÚkernel_sizerµ   r¶   r0   r   )rø   rù   rú   r¯   r~   )	r«   rÜ   r®   r¤   r¯   rÝ   r°   rÞ   r±   rV   Tr³   r¹   rº   rª   )#rI   rJ   r   rÈ   r:   rÛ   r   rL   rØ   rÅ   r   Ú	conv_projÚziprµ   r÷   Úpos_encodingÚ
ModuleListÚblocksÚ	enumeraterK   r!   r   rE   rM   rÂ   rÀ   ÚheadÚmodulesræ   rË   rÌ   Úweightr¸   Ú	constant_Ú
parameters)rO   rù   rú   r  r®   r¤   r¯   rÝ   r°   r  rÞ   r  r  r±   r	  r
  r  Útotal_stage_blocksrp   rµ   r«   Ústage_block_idrÜ   Úsd_probÚmÚweightsrQ   s                             €r+   rJ   zMViT.__init__ª  sÿ  ø€ ôR 	‰ÑÔô
 	˜DÔ!Ü  Ó/ÐØ Ò"ÜÐJÓKÐKàˆ=Ü#ˆEàÐÜ ¤§¡°4Ô8ˆJô Ÿ™ØØ& qÑ)×8Ñ8Ø*Ø%Ø'ô
ˆŒô :=¸mÐ=MÐP\Ñ=\Ð^b×^lÑ^l×^sÑ^sÓ9t×u©¨¨v�d˜f“nÐuˆ
Ñuô /Ø$ QÑ'×6Ñ6Ø$ Q™-¨°A©Ð7Ø$ Q™-Ø'ô	
ˆÔô —m‘m“oˆŒÜ#,¨]Ó#;ò 	`ÑˆN˜Cà+¨nÑ<Ð@RÐUXÑ@XÑYˆGà�K‰K×ÑÙØ)ØØ"/Ø,CØ"/Ø$3Ø-Ø*1Ø)ô
ôô �3—<‘<Ó  1Ó$ÜADÀZÐQT×Q]ÑQ]ÓA^×_±°°v˜d f›nÐ_�
Ò_ð'	`ñ( ˜}¨RÑ0×@Ñ@ÓAˆŒ	ô —M‘MÜ�J‰J�w¨Ô-Ü�I‰I�m BÑ'×7Ñ7¸ÓEó
ˆŒ	ð
 —‘“ó 	=ˆAÜ˜!œRŸY™YÔ'Ü—‘×%Ñ% a§h¡h°DÐ%Ô9Ü˜a¤§¡Õ+°·±Ñ0BÜ—G‘G×%Ñ% a§f¡f¨cÕ2Ü˜AœrŸ|™|Ô,Ø—8‘8Ð'Ü—G‘G×%Ñ% a§h¡h°Ô4Ø—6‘6Ñ%Ü—G‘G×%Ñ% a§f¡f¨cÖ2Ü˜AÔ1Ö2Ø Ÿ|™|›~ò =�GÜ—G‘G×)Ñ)¨'°tÐ)Õ<ò=ñ	=ùóQ vùó> `s   Â.M=Å=Nr4   c                 ó˜  — t        |dd«      d   }| j                  |«      }|j                  d«      j                  dd«      }| j	                  |«      }| j                  j
                  f| j                  j                  z   }| j                  D ]  } |||«      \  }}Œ | j                  |«      }|d d …df   }| j                  |«      }|S )Nr   r   r   r0   )
r>   r  ÚflattenrZ   r  rú   rù   r  rE   r  )rO   r4   rR   r  s       r+   re   zMViT.forward"  sÆ   € ä�q˜!˜QÓ Ñ"ˆà�N‰N˜1ÓˆØ�I‰I�a‹L×"Ñ" 1 aÓ(ˆð ×Ñ˜aÓ ˆð × Ñ ×.Ñ.Ð0°4×3DÑ3D×3QÑ3QÑQˆØ—[‘[ò 	#ˆEÙ˜1˜c“]‰FˆA‰sð	#à�I‰I�a‹Lˆð Ša�ˆd‰GˆØ�I‰I�a‹Lˆàˆr*   )	g      à?rª   rª   i�  NN)r	   é   r#  )r   rT   rT   )r0   r	   r	   )r#   r$   r%   ri   r&   r   r   rg   rÙ   r   r   rL   rf   rJ   rX   rh   re   rj   rk   s   @r+   r   r   ©  sM  ø„ ð Ø#&Ø'*ØØ48Ø9=Ø3<Ø3<Ø4=ñ#v=à˜C ˜H‘oðv=ð ðv=ð   Ñ.ð	v=ð
 ðv=ð "&ðv=ð ðv=ð ðv=ð ðv=ð !ðv=ð  %ðv=ð ðv=ð ˜  b§i¡i Ñ0Ñ1ðv=ð ˜X c¨2¯9©9 nÑ5Ñ6ðv=ð " # s¨C -Ñ0ðv=ð  " # s¨C -Ñ0ð!v=ð" # 3¨¨S =Ñ1ð#v=ð$ 
õ%v=ðp˜Ÿ™ð ¨%¯,©,÷ r*   r   r  rÞ   r   ÚprogressÚkwargsc                 ó>  — |�~t        |dt        |j                  d   «      «       |j                  d   d   |j                  d   d   k(  sJ ‚t        |d|j                  d   «       t        |d|j                  d   «       |j                  dd	«      }|j                  dd
«      }t	        d||| |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      |dœ|¤Ž}|�"|j                  |j                  |d¬«      «       |S )Nr  Ú
categoriesÚmin_sizer   r0   rù   rú   Úmin_temporal_size©éà   r+  é   r®   Fr¤   Tr¯   rÝ   )rù   rú   r  r®   r¤   r¯   rÝ   rÞ   )r$  Ú
check_hashr)   )r   rÈ   ÚmetaÚpopr   Úload_state_dictÚget_state_dict)r  rÞ   r   r$  r%  rù   rú   Úmodels           r+   Ú_mvitr3  9  s$  € ð ÐÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUØ�|‰|˜JÑ'¨Ñ*¨g¯l©l¸:Ñ.FÀqÑ.IÒIÐIÐIÜ˜f n°g·l±lÀ:Ñ6NÔOÜ˜f o°w·|±|ÐDWÑ7XÔYØ—:‘:˜n¨jÓ9€LØ—J‘J˜°Ó3€Mäð 
Ø!Ø#Ø#Ø—j‘j °%Ó8Ø &§
¡
Ð+DÀdÓ KØ—j‘j °%Ó8ØŸ
™
Ð#4°eÓ<Ø3ñ
ð ñ
€Eð ÐØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÓXÔYà€Lr*   c                   óZ   — e Zd Z ed eedddd¬«      ddedd	d
ddddœidddœ	¬«      ZeZy)r   z:https://download.pytorch.org/models/mvit_v1_b-dbeb1030.pthr*  ©é   ©çÍÌÌÌÌÌÜ?r8  r8  ©çÍÌÌÌÌÌÌ?r:  r:  ©Ú	crop_sizeÚresize_sizeÚmeanr»   r,  zShttps://github.com/facebookresearch/pytorchvideo/blob/main/docs/source/model_zoo.mdúœThe weights were ported from the paper. The accuracies are estimated on video-level with parameters `frame_rate=7.5`, `clips_per_video=5`, and `clip_len=16`ip¢.úKinetics-400gJ+‡žS@gh‘í|?eW@©zacc@1zacc@5gu“V¦Q@gœÄ °rxa@©	r(  r)  r'  ÚrecipeÚ_docsÚ
num_paramsÚ_metricsÚ_opsÚ
_file_size©ÚurlÚ
transformsr.  N©	r#   r$   r%   r   r   r   r   ÚKINETICS400_V1ÚDEFAULTr)   r*   r+   r   r   Z  sf   „ ÙØHÙØØ ØØ#Ø%ô
ð #Ø!#Ø1Økð[ð #àØ#Ø#ñ!ðð Ø!ñ#
ô€Nð: �Gr*   r   c                   óZ   — e Zd Z ed eedddd¬«      ddedd	d
ddddœidddœ	¬«      ZeZy)r   z:https://download.pytorch.org/models/mvit_v2_s-ae3be167.pthr*  r5  r7  r9  r;  r,  zChttps://github.com/facebookresearch/SlowFast/blob/main/MODEL_ZOO.mdr?  ir@  gœÄ °r0T@gÃõ(\�ªW@rA  gu“VP@g?5^ºI|`@rB  rI  NrL  r)   r*   r+   r   r   {  sf   „ ÙØHÙØØ ØØ#Ø%ô
ð #Ø!#Ø1Ø[ð[ð #àØ#Ø#ñ!ðð Ø!ñ#
ô€Nð: �Gr*   r   Ú
pretrained)r   T)r   r$  c                 ó~  — t         j                  | «      } g d¢g d¢g d¢g g d¢g g d¢g g g g g g g g g g g d¢g gg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gg g d¢g g d¢g g g g g g g g g g g d¢g gg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gd	œ}g }t        t        |d
   «      «      D ]M  }|j	                  t        |d
   |   |d   |   |d   |   |d   |   |d   |   |d   |   |d   |   ¬	«      «       ŒO t        ddd|dd|j                  dd«      | |dœ|¤ŽS )a¿  
    Constructs a base MViTV1 architecture from
    `Multiscale Vision Transformers <https://arxiv.org/abs/2104.11227>`__.

    .. betastatus:: video module

    Args:
        weights (:class:`~torchvision.models.video.MViT_V1_B_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.video.MViT_V1_B_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.video.MViT``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/video/mvit.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.video.MViT_V1_B_Weights
        :members:
    ©r0   r   r   rT   rT   rT   rT   rT   rT   rT   rT   rT   rT   rT   é   rS  ©é`   éÀ   rV  é€  rW  rW  rW  rW  rW  rW  rW  rW  rW  rW  é   rX  )rV  rV  rW  rW  rW  rW  rW  rW  rW  rW  rW  rW  rW  rX  rX  rX  ©r	   r	   r	   ©r0   r   r   ©r0   rS  rS  ©r0   rT   rT   ©r0   r0   r0   ©r   r   r   r   r    r!   r"   r   r   r   r   r    r!   r"   r*  r,  FrÞ   çš™™™™™É?)rù   rú   r  r®   r¤   rÞ   r   r$  r)   )r   ÚverifyÚrangerÈ   rK   r   r3  r/  ©r   r$  r%  Úconfigr  Úis         r+   r   r   œ  s¾  € ô2  ×&Ñ& wÓ/€Gò FÚiÚkØš Bª	°2°r¸2¸rÀ2ÀrÈ2ÈrÐSUÐWYÒ[dÐfhÐiâÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!
ð$ š Bª	°2°r¸2¸rÀ2ÀrÈ2ÈrÐSUÐWYÒ[dÐfhÐiâÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!
ñ1*€FðX €MÜ”3�v˜kÑ*Ó+Ó,ò 
ˆØ×ÑÜØ  Ñ-¨aÑ0Ø%Ð&6Ñ7¸Ñ:Ø &Ð'8Ñ 9¸!Ñ <Ø 
Ñ+¨AÑ.Ø  Ñ-¨aÑ0Ø 
Ñ+¨AÑ.Ø  Ñ-¨aÑ0ôõ
	
ð
ô ð 
ØØØ#ØØ %Ø$Ÿj™jÐ)@À#ÓFØØñ
ð ñ
ð 
r*   c                 óê  — t         j                  | «      } g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gd	œ}g }t        t        |d
   «      «      D ]M  }|j	                  t        |d
   |   |d   |   |d   |   |d   |   |d   |   |d   |   |d   |   ¬	«      «       ŒO t        ddd|dddd|j                  dd«      | |dœ
|¤ŽS )aC  Constructs a small MViTV2 architecture from
    `Multiscale Vision Transformers <https://arxiv.org/abs/2104.11227>`__ and
    `MViTv2: Improved Multiscale Vision Transformers for Classification
    and Detection <https://arxiv.org/abs/2112.01526>`__.

    .. betastatus:: video module

    Args:
        weights (:class:`~torchvision.models.video.MViT_V2_S_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.video.MViT_V2_S_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.video.MViT``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/video/mvit.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.video.MViT_V2_S_Weights
            :members:
    rR  )rU  rU  rV  rV  rW  rW  rW  rW  rW  rW  rW  rW  rW  rW  rW  rX  rT  rY  r]  rZ  r[  r\  r^  r   r   r   r   r    r!   r"   r*  r,  TFrÞ   r_  )
rù   rú   r  r®   r¤   r¯   rÝ   rÞ   r   r$  r)   )r   r`  ra  rÈ   rK   r   r3  r/  rb  s         r+   r   r   þ  sä  € ô4  ×&Ñ& wÓ/€Gò FÚhÚjâÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!
ò& ÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!
ò& ÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!
ò& ÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!
ñuL€Fð\ €MÜ”3�v˜kÑ*Ó+Ó,ò 
ˆØ×ÑÜØ  Ñ-¨aÑ0Ø%Ð&6Ñ7¸Ñ:Ø &Ð'8Ñ 9¸!Ñ <Ø 
Ñ+¨AÑ.Ø  Ñ-¨aÑ0Ø 
Ñ+¨AÑ.Ø  Ñ-¨aÑ0ôõ
	
ð
ô ð ØØØ#ØØ %ØØØ$Ÿj™jÐ)@À#ÓFØØñð ñð r*   );r½   Úcollections.abcr   Údataclassesr   Ú	functoolsr   Útypingr   r   r   rX   Útorch.fxÚtorch.nnrL   Úopsr
   r   Útransforms._presetsr   Úutilsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Ú__all__r   r&   r3   rh   ri   r>   rA   ÚfxÚwraprf   rC   ru   r¢   rg   r§   r©   rÛ   r÷   r   r(   rÙ   r3  r   r   rM  r   r   r)   r*   r+   ú<module>ru     s[  ðÛ Ý $Ý !Ý ß *Ñ *ã Û Ý ç 'Ý 6Ý (ß 7Ñ 7Ý +ß Cò€ð ÷ð ó ððˆX�c‰]ð ˜só ð�%—,‘,ð ¨Cð ¸Sð ÀUÈ5Ï<É<ÐY\ÐK\ÑE]ó ð�—‘ð ¨#ð ¸3ð ÈCð ÐTY×T`ÑT`ó ð ‡�‡�ˆlÔ Ø ‡�‡�ˆjÔ ô)ˆ2�9‰9ô )ðX˜EŸL™Lð ¨Sð °U·\±\ó ð9Ø
�,‰,ð9à‡|�|ð9ð ��c˜3�Ñð9ð ��c˜3�Ñð	9ð
 �|‰|ð9ð �|‰|ð9ð �|‰|ð9ð ‡\�\ó9ðx�U—\‘\ð ¨U¯\©\ð ÐTXó ð ‡�‡�ˆnÔ Ø ‡�‡�ˆoÔ ô}˜"Ÿ)™)ô }ô@EJ�b—i‘iô EJôP˜Ÿ™ô ô:Mˆ2�9‰9ô Mð`Ø˜Ñ&ðà ðð �kÑ"ðð ð	ð
 ðð 
óôB˜ô ôB˜ô ñB ÓÙ ,Ð0A×0PÑ0PÐ!QÔRØ8<Ètò ]˜(Ð#4Ñ5ð ]Èð ]Ð_bð ]Ðgkò ]ó Só ð]ñ@ ÓÙ ,Ð0A×0PÑ0PÐ!QÔRØ8<Ètò B˜(Ð#4Ñ5ð BÈð BÐ_bð BÐgkò Bó Só ñBr*   