Ë
    š„jÞ;  ã                   óö   — d dl Z d dlZd dlZd dlZd dl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  G d„ d	e«      Z G d
„ dej$                  «      Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z G d„ de«      Zy)é    Né   )Ú
FragmentFDé   )Úcompat_etree_fromstring)Ú	HTTPError)Úfix_xml_ampersandsÚ
xpath_textc                   ó   — e Zd Zy)ÚDataTruncatedErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úL/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/downloader/f4m.pyr   r      s   „ Ør   r   c                   óL   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)Ú	FlvReaderzi
    Reader for Flv files
    The file format is documented in https://www.adobe.com/devnet/f4v.html
    c                 óv   — | j                  |«      }t        |«      |k  rt        d|t        |«      fz  «      ‚|S )Nz6FlvReader error: need %d bytes while only %d bytes got)ÚreadÚlenr   )ÚselfÚnÚdatas      r   Ú
read_byteszFlvReader.read_bytes   sE   € Ø�y‰y˜‹|ˆÜˆt‹9�qŠ=Ü$ØHØ”s˜4“yðL"ñ "ó#ð #ð ˆr   c                 óR   — t        j                  d| j                  d«      «      d   S )Nz!Qé   r   ©ÚstructÚunpackr   ©r   s    r   Úread_unsigned_long_longz!FlvReader.read_unsigned_long_long!   ó!   € Ü�}‰}˜T 4§?¡?°1Ó#5Ó6°qÑ9Ð9r   c                 óR   — t        j                  d| j                  d«      «      d   S )Nú!Ié   r   r   r    s    r   Úread_unsigned_intzFlvReader.read_unsigned_int$   r"   r   c                 óR   — t        j                  d| j                  d«      «      d   S )Nz!Br   r   r   r    s    r   Úread_unsigned_charzFlvReader.read_unsigned_char'   r"   r   c                 óF   — d}	 | j                  d«      }|dk(  r	 |S ||z  }Œ)Nr   r   ó    )r   )r   ÚresÚchars      r   Úread_stringzFlvReader.read_string*   s7   € ØˆØØ—?‘? 1Ó%ˆDØ�wŠØàˆ
ð �4‰KˆCð	 r   c                 ó¨   — | j                  «       x}}| j                  d«      }d}|dk(  r| j                  «       }d}||| j                  ||z
  «      fS )z[
        Read a box and return the info as a tuple: (box_size, box_type, box_data)
        r%   r   r   é   )r&   r   r!   )r   Ú	real_sizeÚsizeÚbox_typeÚ
header_ends        r   Úread_box_infozFlvReader.read_box_info3   s_   € ð  ×1Ñ1Ó3Ð3ˆ	�DØ—?‘? 1Ó%ˆØˆ
Ø�1Š9Ø×4Ñ4Ó6ˆIØˆJØ˜( D§O¡O°IÀ
Ñ4JÓ$KÐKÐKr   c                 óV  — | j                  «        | j                  d«       | j                  «       }t        |«      D ]  }| j                  «        Œ | j	                  «       }g }t        |«      D ]5  }| j	                  «       }| j	                  «       }|j                  ||f«       Œ7 d|iS )Né   Úsegment_run)r(   r   Úranger-   r&   Úappend)r   Úquality_entry_countÚ_Úsegment_run_countÚsegmentsÚfirst_segmentÚfragments_per_segments          r   Ú	read_asrtzFlvReader.read_asrt?   s·   € à×ÑÔ!à�‰˜ÔØ"×5Ñ5Ó7ÐäÐ*Ó+ò 	ˆAØ×ÑÕð	ð !×2Ñ2Ó4ÐØˆÜÐ(Ó)ò 	DˆAØ ×2Ñ2Ó4ˆMØ$(×$:Ñ$:Ó$<Ð!Ø�O‰O˜]Ð,AÐBÕCð	Dð ˜8ð
ð 	
r   c                 óÌ  — | j                  «        | j                  d«       | j                  «        | j                  «       }t        |«      D ]  }| j	                  «        Œ | j                  «       }g }t        |«      D ]`  }| j                  «       }| j                  «       }| j                  «       }|dk(  r| j                  «       }nd }|j                  ||||dœ«       Œb d|iS )Nr6   r   )ÚfirstÚtsÚdurationÚdiscontinuity_indicatorÚ	fragments)r(   r   r&   r8   r-   r!   r9   )	r   r:   r;   Úfragments_countrF   rB   Úfirst_tsrD   rE   s	            r   Ú	read_afrtzFlvReader.read_afrtT   sõ   € à×ÑÔ!à�‰˜Ôà×ÑÔ à"×5Ñ5Ó7ÐäÐ*Ó+ò 	ˆAØ×ÑÕð	ð ×0Ñ0Ó2ˆØˆ	Ü�Ó'ò 	ˆAØ×*Ñ*Ó,ˆEØ×3Ñ3Ó5ˆHØ×-Ñ-Ó/ˆHØ˜1Š}Ø*.×*AÑ*AÓ*CÑ'à*.Ð'Ø×ÑØØØ$Ø+Bñ	õ ð	ð  ˜ð
ð 	
r   c                 ó¸  — | j                  «        | j                  d«       | j                  «        | j                  «       }|dz  dk7  }| j                  «        | j                  «        | j                  «        | j	                  «        | j                  «       }t        |«      D ]  }| j	                  «        Œ | j                  «       }t        |«      D ]  }| j	                  «        Œ | j	                  «        | j	                  «        | j                  «       }g }t        |«      D ]G  }| j                  «       \  }}	}
|	dk(  sJ ‚t        |
«      j                  «       }|j                  |«       ŒI | j                  «       }g }t        |«      D ]E  }| j                  «       \  }}	}
|	dk(  sJ ‚|j                  t        |
«      j                  «       «       ŒG |||dœS )Nr6   é    r   s   asrts   afrt)r=   rF   Úlive)r(   r   r&   r!   r-   r8   r4   r   r@   r9   rI   )r   ÚflagsrL   Úserver_countr;   Úquality_countÚsegments_countr=   Ú	_box_sizer2   Úbox_dataÚsegmentÚfragments_run_countrF   s                 r   Ú	read_abstzFlvReader.read_abstv   sÐ  € à×ÑÔ!à�‰˜Ôà×ÑÔ à×'Ñ'Ó)ˆØ�t‰|˜qÑ ˆà×ÑÔ à×$Ñ$Ô&à×$Ñ$Ô&à×ÑÔØ×.Ñ.Ó0ˆä�|Ó$ò 	ˆAØ×ÑÕð	à×/Ñ/Ó1ˆä�}Ó%ò 	ˆAØ×ÑÕð	ð 	×ÑÔà×ÑÔà×0Ñ0Ó2ˆØˆÜ�~Ó&ò 	%ˆAØ,0×,>Ñ,>Ó,@Ñ)ˆI�x Ø˜wÒ&Ð&Ð&Ü Ó)×3Ñ3Ó5ˆGØ�O‰O˜GÕ$ð		%ð
 #×5Ñ5Ó7ÐØˆ	ÜÐ*Ó+ò 	>ˆAØ,0×,>Ñ,>Ó,@Ñ)ˆI�x Ø˜wÒ&Ð&Ð&Ø×ÑœY xÓ0×:Ñ:Ó<Õ=ð	>ð !Ø"Øñ
ð 	
r   c                 ój   — | j                  «       \  }}}|dk(  sJ ‚t        |«      j                  «       S )Ns   abst)r4   r   rU   )r   r;   r2   rR   s       r   Úread_bootstrap_infozFlvReader.read_bootstrap_info©   s9   € Ø $× 2Ñ 2Ó 4Ñˆˆ8�XØ˜7Ò"Ð"Ð"Ü˜Ó"×,Ñ,Ó.Ð.r   N)r   r   r   Ú__doc__r   r!   r&   r(   r-   r4   r@   rI   rU   rW   r   r   r   r   r      s<   „ ñò
ò:ò:ò:òò
Lò
ò* 
òD1
óf/r   r   c                 ó4   — t        | «      j                  «       S ©N)r   rW   )Úbootstrap_bytess    r   rW   rW   ¯   s   € Ü�_Ó%×9Ñ9Ó;Ð;r   c                 ó  — g }| d   d   }| d   d   d   }|d   d   }t        j                  |«      }|d   D ]=  \  }}|dk(  r| d   rd}t        |«      D ]  }|j                  |t	        |«      f«       Œ  Œ? | d   r|d	d
 }|S )zE Return a list of (segment, fragment) for each fragment in the video r=   r   rF   rB   r7   l   ÿÿ rL   r   éþÿÿÿN)Ú	itertoolsÚcountr8   r9   Únext)	Ú	boot_infor+   Úsegment_run_tableÚfragment_run_entry_tableÚfirst_frag_numberÚfragments_counterrS   rG   r;   s	            r   Úbuild_fragments_listrf   ³   sÀ   € à
€CØ! *Ñ-¨aÑ0ÐØ(¨Ñ5°aÑ8¸ÑEÐØ0°Ñ3°GÑ<ÐÜ!Ÿ™Ð(9Ó:ÐØ$5°mÑ$Dò ;Ñ ˆ�ð ˜jÒ(¨Y°vÒ->ØˆOÜ�Ó'ò 	;ˆAØ�J‰J˜¤Ð&7Ó!8Ð9Õ:ñ	;ð;ð �ÒØ�"�#ˆhˆà€Jr   c                 óN   — | j                  t        j                  d|«      «       y )Nr$   ©Úwriter   Úpack©ÚstreamÚvals     r   Úwrite_unsigned_intrn   É   s   € Ø
‡L�L”—‘˜T 3Ó'Õ(r   c                 óT   — | j                  t        j                  d|«      dd  «       y )Nr$   r   rh   rk   s     r   Úwrite_unsigned_int_24rp   Í   s    € Ø
‡L�L”—‘˜T 3Ó'¨¨Ð+Õ,r   c                 óŒ   — | j                  d«       | j                  d«       | j                  d«       | j                  d«       y)zWrites the FLV header to streams   FLVó   s      	s       N)ri   )rl   s    r   Úwrite_flv_headerrs   Ñ   s6   € ð ‡L�L�ÔØ
‡L�L�ÔØ
‡L�LÐ$Ô%Ø
‡L�LÐ$Õ%r   c                 óÒ   — d}d}|ra| j                  |«       t        | t        |«      «       | j                  d«       | j                  |«       t        | |t        |«      z   «       yy)z&Writes optional metadata tag to streamó   é   s          N)ri   rp   r   rn   )rl   ÚmetadataÚ
SCRIPT_TAGÚFLV_TAG_HEADER_LENs       r   Úwrite_metadata_tagrz   Ú   s\   € à€JØÐáØ�‰�ZÔ Ü˜f¤c¨(£mÔ4Ø�‰Ð4Ô5Ø�‰�XÔÜ˜6Ð#5¼¸H»Ñ#EÕFð r   c                 ó.   — t        t        d„ | «      «      S )Nc                 ó>   — d| j                   vxr d| j                   vS )NÚdrmAdditionalHeaderIdÚdrmAdditionalHeaderSetId)Úattrib)Úes    r   ú<lambda>z(remove_encrypted_media.<locals>.<lambda>è   s%   € Ð!8ÀÇÁÐ!Hò "PØ%?ÀqÇxÁxÐ%Oð r   )ÚlistÚfilter)Úmedias    r   Úremove_encrypted_mediar…   ç   s   € Ü”ñ Pàóó ð r   c                 ó   — d|| fz  S )Nz {http://ns.adobe.com/f4m/%d.0}%sr   )ÚpropÚvers     r   Ú_add_nsr‰   í   s   € Ø-°°d°Ñ;Ð;r   c                 ór   — t        | t        d«      t        dd«      gdd ¬«      }|r|j                  «       }|S )NÚbaseURLr   zbase URL)Údefault)r	   r‰   Ústrip)ÚmanifestÚbase_urls     r   Úget_base_urlr�   ñ   s=   € ÜØ”7˜9Ó%¤w¨y¸!Ó'<Ð=Ø˜Dô"€Hñ Ø—>‘>Ó#ˆØ€Or   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚF4mFDz5
    A downloader for f4m manifests or AdobeHDS.
    c                 ó†  — |j                  t        d«      «      }|s| j                  d«       | j                  j	                  d«      se|j                  t        d«      «      |j                  t        d«      «      z   D ]"  }d|j
                  vsŒ| j                  d«       Œ$ t        |«      }|s| j                  d«       |S )	Nr„   zNo media foundÚallow_unplayable_formatsÚdrmAdditionalHeaderÚdrmAdditionalHeaderSetÚidzMissing ID in f4m DRMzUnsupported DRM)Úfindallr‰   Úreport_errorÚparamsÚgetr   r…   )r   Údocr„   r€   s       r   Ú_get_unencrypted_mediazF4mFD._get_unencrypted_mediaÿ   s®   € Ø—‘œG GÓ,Ó-ˆÙØ×ÑÐ.Ô/Ø�{‰{�‰Ð9Ô:Ø—k‘k¤'Ð*?Ó"@ÓAØŸ™¤GÐ,DÓ$EÓFñGò ?�ð ˜qŸx™xÒ'Ø×%Ñ%Ð&=Õ>ð?ô +¨5Ó1ˆEÙØ×ÑÐ/Ô0Øˆr   c                 ój   — | j                   j                  |«      j                  «       }t        |«      S rZ   )ÚydlÚurlopenr   rW   )r   Úbootstrap_urlÚ	bootstraps      r   Ú_get_bootstrap_from_urlzF4mFD._get_bootstrap_from_url  s*   € Ø—H‘H×$Ñ$ ]Ó3×8Ñ8Ó:ˆ	Ü" 9Ó-Ð-r   c                 óü   — g }d}|s]|dkD  rX| j                  |«      }t        |«      }|D �cg c]  }|d   |kD  sŒ|‘Œ }}|st        j                  d«       |dz  }|s|dkD  rŒX|s| j	                  d«       |S c c}w )Né   r   r   g      @zFailed to update fragments)r£   rf   ÚtimeÚsleepr™   )r   r¡   Úlatest_fragmentÚfragments_listÚretriesra   Úfs          r   Ú_update_live_fragmentszF4mFD._update_live_fragments  s�   € ØˆØˆÙ!¨°!ªØ×4Ñ4°]ÓCˆIÜ1°)Ó<ˆNØ)7ÖR A¸1¸Q¹4À/Ó;QšaÐRˆNÐRÙ!ä—
‘
˜3”Ø˜1‘�ñ "¨°!«ñ Ø×ÑÐ:Ô;àÐùò Ss
   ¬A9ºA9c                 óò   — |j                  d«      }|r5t        j                  j                  ||«      }| j	                  |«      }||fS d }t        j                  |j                  «      }t        |«      }||fS )NÚurl)	r›   ÚurllibÚparseÚurljoinr£   Úbase64Ú	b64decodeÚtextrW   )r   Únoder�   r¡   ra   r¢   s         r   Ú_parse_bootstrap_nodezF4mFD._parse_bootstrap_node$  sz   € ð Ÿ™ ›ˆÙÜ"ŸL™L×0Ñ0Ø˜-ó)ˆMà×4Ñ4°]ÓCˆIð
 ˜-Ð'Ð'ð !ˆMÜ×(Ñ(¨¯©Ó3ˆIÜ+¨IÓ6ˆIØ˜-Ð'Ð'r   c           	      óš	  ‡'— |d   }|j                  d«      Š'| j                  d| j                  › d�«       | j                  j	                  | j                  ||«      «      }|j                  }t        |j                  «       j                  dd«      «      j                  «       }t        |«      }| j                  |«      D �cg c])  }t        |j                  j                  dd«      «      |f‘Œ+ }}‰'�t        |«      d	k(  rt!        |d
„ ¬«      }|d   \  }	}
nt#        t%        ˆ'fd„|«      «      \  }	}
t'        |«      xs |}t(        j*                  j-                  ||
j                  d   «      }|j/                  t1        d«      «      }| j3                  ||«      \  }}|d   }|
j/                  t1        d«      «      }|� t5        j6                  |j8                  «      }nd }t;        |«      }| j<                  j                  dd«      }|r|d d	 }t        |«      }t?        |t1        d«      «      }||tA        |«      dœ}| jC                  |«       |d   }|d   dk(  rtE        |«       |stG        ||«       t(        j*                  jI                  |«      }| jK                  ||«       d}|�r–|jM                  d«      \  }}|d	z  }||d   k  rŒ%d||fz  }g }|jN                  r|jQ                  |jN                  «       |r |jQ                  |j                  d«      «       |j                  d«      r|jQ                  |d   «       |jS                  |jT                  |z   djW                  |«      ¬«      }	 | jY                  ||j[                  «       |«      } | sy| j]                  |«      }!t_        |!«      }"	 	 |"ja                  «       \  }	}#}$|#dk(  r| jg                  ||$«       nŒ.|sX|sV|rT|rR| jo                  ||«      }|t        |«      z  }|r0|d   d	   |d	z   kD  r"d!|d   d	   |d	z   z
  z  }&| jm                  |&«       |r�Œ–| jq                  ||«      S c c}w # tb        $ r |r|je                  |!«       Y Œ“‚ w xY w# th        $ rD}%|r7|%jj                  dk(  s|%jj                  dk(  rd |z  }&| jm                  |&«       g }n‚ Y d }%~%Œàd }%~%ww xY w)"Nr®   Útbrú[z] Downloading f4m manifestzutf-8ÚignoreÚbitrateéÿÿÿÿr   c                 ó   — | d   S ©Nr   r   )r«   s    r   r�   z%F4mFD.real_download.<locals>.<lambda>F  s
   € °A°a±D€ r   )Úkeyc                 ó&   •— t        | d   «      ‰k(  S r¾   )Úint)r«   Úrequested_bitrates    €r   r�   z%F4mFD.real_download.<locals>.<lambda>J  s   ø€ œ#˜a ™d›)Ð'8Ñ8€ r   ÚbootstrapInforL   rw   ÚtestFzpv-2.0)ÚfilenameÚtotal_fragsrL   Údest_streamÚcomplete_frags_downloaded_bytesr   Úfragment_indexzSeg%d-Frag%dú;Úextra_param_to_segment_urlú&)ÚpathÚquerys   mdati”  iš  zFragment %d unavailablezMissed %d fragments)9r›   Ú	to_screenÚFD_NAMErŸ   r    Ú_prepare_urlr®   r   r   Údecoder�   r   r�   rÁ   r   r   Úsortedr`   rƒ   r�   r¯   r°   r±   Úfindr‰   r¶   r²   r³   r´   rf   rš   r	   ÚboolÚ_prepare_frag_downloadrs   rz   ÚurlparseÚ_start_frag_downloadÚpoprÎ   r9   Ú_replacerÍ   ÚjoinÚ_download_fragmentÚgeturlÚ_read_fragmentr   r4   r   ri   Ú_append_fragmentr   ÚstatusÚreport_warningr¬   Ú_finish_frag_download)(r   rÅ   Ú	info_dictÚman_urlÚurlhrŽ   rœ   r«   Úformatsr;   r„   Úman_base_urlr�   Úbootstrap_nodera   r¡   rL   Úmetadata_noderw   r©   rÄ   rÆ   Ú	akamai_pvÚctxrÇ   Úbase_url_parsedÚ
frag_indexÚseg_iÚfrag_iÚnamerÎ   Ú
url_parsedÚsuccessÚ	down_dataÚreaderr2   rR   ÚerrÚmsgrÂ   s(                                          @r   Úreal_downloadzF4mFD.real_download5  sÊ  ø€ Ø˜EÑ"ˆØ%ŸM™M¨%Ó0ÐØ�‰˜˜4Ÿ<™<˜.Ð(BÐCÔDà�x‰x×Ñ × 1Ñ 1°)¸WÓ EÓFˆØ—(‘(ˆô & d§i¡i£k×&8Ñ&8¸À(Ó&KÓL×RÑRÓTˆä% hÓ/ˆà ×7Ñ7¸Ó<ö>Øô ˜Ÿ™Ÿ™ Y°Ó3Ó4°aÒ8ð >ˆð >àÐ$¬¨G«¸Ò(9ä˜W©.Ô9ˆGØ˜r‘{‰HˆA‰uäœFÛ8¸'óCó D‰HˆAˆuô $ CÓ(Ò3¨Gˆä—<‘<×'Ñ'¨°e·l±lÀ5Ñ6IÓJˆØŸ™¤'¨/Ó":Ó;ˆØ#'×#=Ñ#=Ø˜Ló$*Ñ ˆ	�=à˜Ñ ˆØŸ
™
¤7¨:Ó#6Ó7ˆØÐ$Ü×'Ñ'¨×(:Ñ(:Ó;‰HàˆHä-¨iÓ8ˆØ�{‰{�‰˜v uÓ-ˆÙà+¨B¨QÐ/ˆNÜ˜.Ó)ˆä˜s¤G¨HÓ$5Ó6ˆ	ð !Ø&Ü˜“Jñ
ˆð 	×#Ñ# CÔ(à˜-Ñ(ˆàÐ0Ñ1°QÒ6Ü˜[Ô)ÙÜ" ;°Ô9ä Ÿ,™,×/Ñ/°Ó9ˆà×!Ñ! # yÔ1àˆ
ÚØ*×.Ñ.¨qÓ1‰MˆE�6Ø˜!‰OˆJØ˜SÐ!1Ñ2Ò2ØØ! U¨F OÑ3ˆDØˆEØ×$Ò$Ø—‘˜_×2Ñ2Ô3ÙØ—‘˜YŸ_™_¨SÓ1Ô2Ø�}‰}Ð9Ô:Ø—‘˜YÐ'CÑDÔEØ(×1Ñ1°×7KÑ7KÈdÑ7RÐZ]×ZbÑZbÐchÓZiÐ1ÓjˆJðØ×1Ñ1°#°z×7HÑ7HÓ7JÈIÓV�ÙØ Ø ×/Ñ/°Ó4�	Ü" 9Ó-�Øð
Ø06×0DÑ0DÓ0FÑ-˜˜8 Xð   7Ò*Ø×-Ñ-¨c°8Ô<Øð ñ2 "©$±4¹MØ!%×!<Ñ!<¸]ÈFÓ!S�Øœs >Ó2Ñ2�Ù! ~°aÑ'8¸Ñ';¸fÀq¹jÒ'HØ/°>À!Ñ3DÀQÑ3GÈ6ÐTUÉ:Ñ3VÑW�CØ×'Ñ'¨Ô,óe ðh ×)Ñ)¨#¨yÓ9Ð9ùòS>øôX .ò Ùð
 (×-Ñ-¨iÔ8Ù!Øðûô ò Ù˜SŸZ™Z¨3Ò.°#·*±*ÀÒ2Cð 4°fÑ<�CØ×'Ñ'¨Ô,Ø%'‘Nàô #ûðúsH   Ã.QÍ6#Q= ÎQ= Î8Q ÏQ= ÑQ:Ñ6Q= Ñ8Q:Ñ:Q= Ñ=	S
Ò:SÓS
N)	r   r   r   rX   r�   r£   r¬   r¶   r÷   r   r   r   r’   r’   ú   s!   „ ñòò .òò"(ó"v:r   r’   )r   )r²   Úior^   r   r¦   Úurllib.parser¯   Úfragmentr   Úcompatr   Únetworking.exceptionsr   Úutilsr   r	   Ú	Exceptionr   ÚBytesIOr   rW   rf   rn   rp   rs   rz   r…   r‰   r�   r’   r   r   r   ú<module>r      s~   ðÛ Û 	Û Û Û Û å  Ý ,Ý -ß 2ô	˜ô 	ôZ/�—
‘
ô Z/òz<òò,)ò-ò&ò
Gòó<òôq:ˆJõ q:r   