
    ' j_U                       S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrSSKJrJrJrJrJrJrJrJrJr  SSKJr  SSKJr  SSKJrJrJ r J!r!  SSK"J#r#  SSK$J%r%J&r&  S	S
K'J(r(  S	SK)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrN  S	SKOJPrPJQrQJRrR  SrSSrTSrUSrVSrWSrXSrYSrZ " S S\5      r[g)    N   )	INNERTUBE_CLIENTS	BadgeTypeGvsPoTokenPolicyPlayerPoTokenPolicyStreamingProtocolYoutubeBaseInfoExtractor_PoTokenContext_split_innertube_clientshort_client_name)_EJS_WIKI_URL)initialize_jsc_director)JsChallengeRequestJsChallengeTypeNChallengeInputSigChallengeInput)initialize_pot_director)PoTokenContextPoTokenRequest   )	HTTPError)%
NO_DEFAULTExtractorErrorLazyListbug_reports_message
clean_htmldatetime_from_strfilesize_from_tbrfloat_or_noneformat_field	get_firstint_or_nonejoin_nonemptymimetype2ext
orderedSetparse_codecsparse_countparse_durationparse_iso8601parse_qs	qualities
remove_endremove_startsmuggle_urlstr_or_none
str_to_intstrftime_or_nonetraverse_objtry_calltry_getunescapeHTMLunified_strdateunsmuggle_url
update_urlupdate_url_queryurl_or_noneurljoinvariadic)clean_headersclean_proxiesselect_proxy__yt_dlp_client__yt_dlp_fetch_subs_po_token__yt_dlp_fetch_gvs_po_token__yt_dlp_player_token_provided__yt_dlp_innertube_context__yt_dlp_is_premium_subscriber__yt_dlp_available_at_timestampz4https://github.com/yt-dlp/yt-dlp/wiki/PO-Token-Guidec                   <%  ^ \ rS rSrSrSR                  SR                  \R                  5      S9r	SS/r
SrS	rS
rSrSrSrSrSrSrSr/ S0 SS_SS_SS_SS_SS_SS/_SS _S!\_S"S#_S$S%_S&\_S'S(_S)S*_S+S,_S-S._S/\_S0S1_S2S3S4S5S6S7S S8S9\S:.
ES;S<.PS=S>S?SS@SASBSCSD.SESF.PSGSH0 SS_SS_SS_SS_SS_SS/_SS _S!\_S"S#_S$S%_S&\_S'S(_S)S*_S-S._S/\_S0S1_SIS2_S4S5S6S7S S8S9\SJ.ES;SF.PSKSL0 SSM_SSN_SSO_SS_SS_SS/_SSP_S!\_S"SQ_S$SR_S&\_S'SS_S)ST_S/\_S0S1_SUS_SIS2_SVS5SWS7SPSXSY\SJ.ESZS2S2S[.S\S].PS^0 SS__SSN_SS`_SS_SS_SSa/_SSb_S!\_S"Sc_SdS2_S$Se_S&\_S'Sf_S)Sg_S-S._S/\_S0S1_SS2ShS5SiSjSbSkSl\Sm.
ESnS2S2S[.So.PSpSq0 SSr_SS_SSs_SSA_SSt_SSu/_SSv_S!\_S"Sw_SdS2_S$Sx_S&\_S'Sy_S)Sz_S-S._S/\_S0S1_SS2S{S5S|S}SvS~S\Sm.
ESS20SS].PSS0 SS_SS_SS_SS_SS_SS/_SS_S!\_S"S_SdS2_S$S_S&\_S'S_S)S_S-S._S/\_S0S1_SS2SS5SSSSS\Sm.
ESS20S.PSS0 SS_SS_SS_SSA_SSt_SS/_SS_S!\_S"S_S$S_S&\_S'S_S)S_S/\_S0S1_SUS_SIS2_SS5SSSSS\SJ.ESSF.PSS0 SS_SS_SS_SS_SS_SSa/_SS_S!\_S"S_S$S_S'S_S)S_S/\_S0S1_SUS_SIS_SS_S5SSSSS\S.ES.PSSS2S.PS0 SS_SS_SS_SS_SS_SSa/_SS_S!\_S"S_SdS2_S$S_S&\_S'S_S)S_S-S._S/\_S0S1_SS2SS5SSSSS\Sm.
ES/SS20S.PS0 SS_SS_SS_SS_SS_SS/_SS_S!\_S"S_SdS2_S$S_S'S_S)S_S/\_S0S_SUS_SIS2_SSSS5SSSSS\S.
ESS20So.PS0 SS_SS_SS_SS_SS_SS/_SS_S!\_S"S_S$S_S&\_S'S_S)S_S/\_S0S1_SUS_SIS2_SSS5SSSSS\S.	ESS20So.PSS2S.PS0 SS_SS_SS_SS_SS_SS/_SS_S!\_S"S_S$S_S'S_S)S_S/\_S0S1_SUS_SIS2_SS_S5SSSSS\S.ESS20So.PS0 SS_SS_SS_SS_SS_SS/_SS_S!\_S"S_S$S_S&\_S'S_S)S_S/\_S0S_SUS_SIS2_SSSS5SSSGS GS\S.
EGSS2S2S[.So.PGSS2S.PGSS2S.PGSS2S.PGSS2S.PGS0 SGS_SS_SGS	_SS_SS_SGS
/_SGS_S!\_S"GS_S$GS_S&\_S'GS_S)GS_S/\_S0S1_SUS_SIS2_GSS5GSGSGSGSGS\SJ.ESS20So.PGSS2S.PGSGSSGSGSGSGS.GSS<.PGSS2S.PGS0 SGS_SS_SGS _SS_SS_SGS!/_SGS"_S!\_S"GS#_S$GS$_GS%GS&_S'GS'_S)GS(_GS)GS*_S/\_S0S1_SUS_S2GS+S5GS,GS-GS"GS.GS/\GS0.	ESS20So.PGS10 SGS2_SS_SGS3_SS_SS_SGS4/_SGS5_S!\_S"GS6_SdS2_S$GS7_GS%S_S&\_S'GS8_S)GS9_S-S._GS)GS*_\S1SS2SS5GS:GS;GS5GS<GS=\GS>.ESS20So.PGS?S2S.PGS@S2S.PGSAGSBSGSCGSDGSEGSFGSG.GSHS<.PGSI0 SGSJ_SS_SGSK_SS_SS_SS/_SGSL_S!\_S"GSM_SdS2_S$GSN_S&\_S'GSO_S)GSP_S-S._S/\_S0S1_SS2SS5GSQGSRGSLGSSGST\Sm.
EGSU/SS20S.PGSVGSWSGSXGSYGSZGS[GS\.GS]S<.PGS^S2S.PGS_S2S.PGS`S2S.PGSaS2S.PGSbS2S.PGScS2S.PGSdS2S.PGSe0 SGSf_SS_SGSg_SS_GShGSi_GSjGSg_GSkGSl/_SS_SSa/_SGSl_S!\_S"GSm_SdS2_S$GSn_S&\_GSoGSl/_S'GSp_GSqS.\S1SS2GSrSS5GSsGSgGStGSl\GSu.ESS20So.PGSvS2S.PGSwGSxSGSyGSzGS{GS|GS}GS~GS.S;S<.PGS0 SGS_SS_SGS_SS_SS_SGS/_SGS_S!\_S"GS_S$GS_S'SS_S)GS_S/\_S0S1_SUS_SIS2_S/ _S5GSGSGSGSGS\S.ESS20So.PGS0 SGS_SS_SGS_SS_SS_SGS!/_SGS_S!\_S"GS_SdS2_S$GS_GS%GS&_S&\_S'GS_S)GS_S-S._S/\_S1SS2SS5GSGSGSGSGS\GS.ESS20So.PGSS2S.PGSS2S.PGS0 SGS_SS_SGS_SS_GShGS_GSjGS_GSkGS/_SS_SSa/_SGS_S!\_S"GS_SdS2_S$GS_S&\_GSoGS/_S'GS_GSS.\S1SS2GSGSGS+S5GSGSGSGS\GS.ESS20So.PGSS2S.PGS0 SGS_SS_SGS_SSA_SSt_SGS4/_SGS_S!\_S"GS_SdS2_S$GS_S&\_S'GS_S)GS_S/\_S0S1_SUS_S2SS5GSGSGSGSGS\GS0.	ESS<.PGS0 SGS_SS_SGS_SS_SS_SGS/_SGS_S!\_S"GS_S$GS_S'GS_S)GS_S0S1_SUS_SIS2_SS_GSS5_GSGSGSGSGS\GS.ESS20So.PGSS2S.PGSS2S.PGSS2S.PGS0 SGS_SGS_SGS_SS_SS_SS/_SGS_S!\_S"GS_SdS2_S$GS_GS%GS&_S&\_S'GS_S)GS_S-S._S/\_S1SS2GSS5GSGSGSGSGS\GS.ESGSGS/00GSS2GS.GSGS.PGSeS2GSSGSGS/000GS.PGSS2S.PGSGS0 SGS_SGS_SGS_SS_SS_SGS!/_SGS_S!\_S"GS_SdS2_S$GS_GS%S_S&\_S'GS_S)GS_S-S._S/\_S1SS2SS5GSGSGSGSGS\GS.EGSS2GS.S.PGS0 SGS_SS_SGS_SS_SS_SSu/_SGS_S!\_S"GS_S$GS_S&\_S'GS_S)GS_S-S._S/\_S0S1_SUS_S2GSS5GSGSGSGSGS\GS0.	ESS20So.PGS0 SGS_SS_SGS_SS_SS_SS/_SGS_S!\_S"GS_SdS2_S$GS _S&\_S'GS_S)GS_S-S._S/\_S0S1_SS2GSGSGSS5GSGSGSGSGS\GS.ESS20So.PGS0 SGS	_SS_S\_SS_SS_SSa/_SGS
_S!\_S"GS_SdS2_S$GS_GS\_S'GS_S/\_S0GS_SUS_SIS2_GSGSGSS5GSGSGS
GSGS\S.
ESS20So.PGS0 SGS_SS_SGS_SS_SS_SSa/_SGS_S!\_S"GS_S$GS_S'SS_S)GS_S/\_S0S1_SUGS_SIS2_S/ _S5GSGSGSGS GS!\S.ESS20So.PGS"0 SGS#_SS_SGS$_SS_SS_SS/_SGS%_S"GS&_S$GS'_S'SS_S)GS(_S/\_S0S1_SUS_SIS2_S/ _GSS5_GS)GS*GS%GS+GS,\GS.ESS20So.PGS-0 SGS._SS_SGS/_SS_SS_SS/_SGS%_S"GS&_S$GS'_S'GS0_S)GS(_S/\_S0S1_SUS_SIS2_S/ _GSS5_GS1GS2GS%GS+GS,\GS.ESGS3GS4/00S2GS5.GS6/GS7.PGS8GS9S2S.PGS:GS;0 SGS<_SS_SGS=_SS_SS_SS/_SGS>_S!\_S"GS?_SdS2_S$GS@_S&\_S'GSA_S)GSB_S-S._S/\_S0S1_SS2/ S5GSCGSDGS>GSEGSF\Sm.
ESGSGSG/00GSHS2GS.GSIS].PGSJGSK0 SS_SGSL_SS_SSA_SSt_SS/_SS_S!\_S"S_S$S_S&\_S'S_S)S_S/\_S0S1_SUS_SIS2_SS5SSSSS\SJ.EGSMS2GS.SS].PGSNGSO0 SGSP_SS_SGSQ_SS_SS_SS/_SGSR_S!\_S"GSS_SdS2_S$GST_GS%GS_S&\_S'GSU_S)GSV_S-S._S/\_SSS2GSWGSXGSS5GSYGSWGSRGSZGS[\GS\.ESS20S.PGS]0 SGS^_SGSL_SGS__SS_SGS`_S!\_S"GSa_SdS2_S$GSb_GS%S_S&\_S'GSc_S)GSd_S-S._S/\_S0S1_SUS_S2SVS5GSeGSfGS`GSgGSh\GS0.	ESGSG/GSi/GSj.0S2GS5.GSIGS.PGSk0 SGSl_SS_SGSm_SS_SS_SS/_SGSn_S!\_S"GSo_S$GSp_S'SS_S)GSq_S/\_S0S1_SUGS_SIS2_S/ _S5GSrGSsGSnGStGSu\S.ESS20So.PGSv0 SGSw_SS_SGSx_GSkGSy/_GSzGSx_GShGS{_GS|GS}_GS~GS_GSjGSx_S'GS_SUS_GSGS_SGS_S"GS_S$GS_SdS2_S!\_\\\SGSGSS.Sa// GSQGSy/GSGSS2SS1GS.ESS20So.PGS0 SGS_SS_SGS_S'GS_SUS_GSGS_GSGS_GSGS_SGS_S"GS_S$GS_S&\_GS\_S/\_SS_S)GS_GSGS_S// GSQGSGS/GSGSS2SS1GS.ESS20So.PGS0 SGS_SS_SGS_S'GS_SUS_GSGS_GSGS_GSGS_SGS_S"GS_S$GS_S&\_GS\_S/\_SS_S)GS_GSGS_Sa// / GSQGSGSGSGSS2SS1GS.
ESS20So.PGS0 SGS_SS_SGS_S'SS_SUS_GSGS%_GSGS+_GSGS,_SGS%_S"GS&_S$GS'_S!\_GS\_S/\_SS_S)GS(_GSGS_S// GSGSGSGSS2SS1GSGSGS.ES2S2GS.So.PGS0 SGS_SS_SGS_S'SS_SUS_GSGS_GSGS_GSGS_SGS_S"GS_S$GS_GS\_S/\_SS_S)GS_GSGS_SS/_/ GSGSS2SS1S,GSGS.ES2S2GS.So.PrGS0 SGS_SS_SGS_GSGS_S'GS_SS_SSV_S"GS_SIS2_GSS5_S/\_S&\_SGS_S0S1_S$GS_SS_S)GS_\S/\GSGSGSS.GSSGS.	ESS20So.GS0 SGS_SS_SGS_SS_SS_SS/_SGS_S!\_S"GS_S$GS_S&\_S'GS_S)GS_S/\_S0S1_SUS_SIS2_GSS5GSGSGSGSGS\SJ.ESS20So.GS0 SGS_SS_SGS_SS_SS_SSa/_SGS_S!\_S"GS_S$GS_S&\_S'SS_S)GS_S/\_S0S1_GSGS_SUGS_S2GSS5GSGSGSGSGS\GS0.	ESS20So.GS0 SGS_SS_SGS_SS_SS_SS/_SGS_S!\_S"GS_S$GS_S'GS_S)GS_S/\_S0S1_SUS_SIS2_SGS_S5GSGSGSGSGS\S.EGSGSGS/00S2GS5.So.GSGSGSSGS GSGS.S*SS20GS./rGSrGSrGSGSGSGS	GS
GSGSGSGSGSGSGS.r\R9                  5        V VVs0 s H  u  pX!_M	     snnn r\R>                  GS 5       r \R>                  GS 5       r!\R>                  GS 5       r"\#U4GS j5       r$U4GS jr%U4GS jr&GS r'GS r(GS r)GSGSGS.GS jr*GSGS.GS jr+GSOGS  jr,GS! r-GS" r.\#GS# 5       r/GSPGS$ jr0SGS%.GS& jr1SGS%.GS' jr2GSQGS( jr3GS) r4\#U4GS* j5       r5\#GS+ 5       r6GS, r7GS- r8GS. r9GSRGS/ jr:GSRGS0 jr;GSSGS1 jr<\=GS2 5       r>GS3 r?\=GS4 5       r@\#GSTGS5 j5       rAGS6\GS7\B4GS8 jrCGS9\BR                  GSGSGSGSGSGSGSS4
GS7\B4GS: jjrEGS; rF\=GS< 5       rG\=GS= 5       rHGS> rIGS? rJGS@ rKGSA rLGSB rMGSC rNGSRGSD jrOGSE rPGSF rQGSG rRGSH rSGSRGSI jrTGSJ rUGSK rVGSL rWGSM rXGSNrYU=rZ$ s  snnn f (U  	YoutubeIET   YouTubea
  (?x)^
                     (
                         (?:https?://|//)                                    # http(s):// or protocol-independent URL
                         (?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie|kids)?\.com|
                            (?:www\.)?deturl\.com/www\.youtube\.com|
                            (?:www\.)?pwnyoutube\.com|
                            (?:www\.)?hooktube\.com|
                            (?:www\.)?yourepeat\.com|
                            tube\.majestyc\.net|
                            {invidious}|
                            youtube\.googleapis\.com)/                        # the various hostnames, with wildcard subdomains
                         (?:.*?\#/)?                                          # handle anchor (#/) redirect urls
                         (?:                                                  # the various things that can precede the ID:
                             (?:(?:v|embed|e|shorts|live)/(?!videoseries|live_stream))  # v/ or embed/ or e/ or shorts/
                             |(?:                                             # or the v= param in all its forms
                                 (?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)?  # preceding watch(_popup|.php) or nothing (like /?v=xxxx)
                                 (?:\?|\#!?)                                  # the params delimiter ? or # or #!
                                 (?:.*?[&;])??                                # any other preceding param (like /?s=tuff&v=xxxx or ?s=tuff&amp;v=V36LpHqtcDY)
                                 v=
                             )
                         ))
                         |(?:
                            youtu\.be|                                        # just youtu.be/xxxx
                            vid\.plus|                                        # or vid.plus/xxxx
                            zwearz\.com/watch|                                # or zwearz.com/watch/xxxx
                            {invidious}
                         )/
                         |(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
                         )
                     )?                                                       # all until now is optional -> you can pass the naked ID
                     (?P<id>[0-9A-Za-z_-]{{11}})                              # here is it! the YouTube video ID
                     (?(1).+)?                                                # if we found the ID, everything can follow
                     (?:\#|$)|)	invidiousa  (?x)
            (?:
                <(?:[0-9A-Za-z-]+?)?iframe[^>]+?src=|
                data-video-url=|
                <embed[^>]+?src=|
                embedSWF\(?:\s*|
                <object[^>]+data=|
                new\s+SWFObject\(
            )
            (["\'])
                (?P<url>(?:https?:)?//(?:www\.)?youtube(?:-nocookie)?\.com/
                (?:embed|v|p)/[0-9A-Za-z_-]{11}.*?)
            \1z(?xs)
            <a\s[^>]*\bhref="(?P<url>https://www\.youtube\.com/watch\?v=[0-9A-Za-z_-]{11})"
            \s[^>]*\bclass="[^"]*\blazy-load-youtubevideo)json3srv1srv2srv3ttmlsrtvtt)
android_vr
web_safari)rU   )tv_downgradedrV   )rW   web_creatorwebrV   rV   Fyoutubez6https://www.youtube.com/watch?v=BaW_jenozKc&t=1s&end=9idBaW_jenozKcextmp4titleu#   youtube-dl test video "'/\ä↭𝕐	age_limitr   availabilitypublic
categorieszScience & TechnologychannelzPhilipp Hagemeisterchannel_follower_count
channel_idUCLqxVugv74EIW3VWh2NOa3Qchannel_urlz8https://www.youtube.com/channel/UCLqxVugv74EIW3VWh2NOa3Qcomment_countdescriptionz$md5:8fb536f4877b8a7455c2ec23794dbc22duration
   end_time	   heatmapz	count:100
like_countlive_statusnot_liveTr   zcount:1zre:https?://i\.ytimg\.com/.+i!kP20121002z@PhilippHagemeisterz+https://www.youtube.com/@PhilippHagemeister)
playable_in_embed
start_timetags	thumbnail	timestampupload_dateuploaderuploader_iduploader_url
view_countzVideo unavailable)url	info_dictskipzEmbed-only video (#1746)z%//www.YouTube.com/watch?v=yZIXLfi8CZQyZIXLfi8CZQzCPrincipal Sexually Assaults A Teacher - Episode 117 - 8th June 2012   z$md5:09b78bd971f1e3e289601dfba15ca4f720120608)r\   r^   r`   ra   rk   rz   zPrivate video)noter   r   r   z!Use the first video ID in the URLz9https://www.youtube.com/watch?v=BaW_jenozKc&v=yZIXLfi8CZQru   )rw   rx   ry   rz   r{   r|   r}   r~   z.256k DASH audio (format 141) via DASH manifestz+https://www.youtube.com/watch?v=a9LDPn-MO4Iza9LDPn-MO4Im4azUHDTV TEST 8K VIDEO.mp48KVIDEOzUC8cn-cnCZ2FnxmjfkoLGpsQz8https://www.youtube.com/channel/UC8cn-cnCZ2FnxmjfkoLGpsQ <   
media_typezcount:8ijPz@8KVIDEOz https://www.youtube.com/@8KVIDEO141)formatskip_downloadyoutube_include_dash_manifestzformat 141 not served anymore)r   r   r   paramsr   z+https://www.youtube.com/watch?v=IB3lcPjvWLAIB3lcPjvWLAzJAfrojack, Spree Wilson - The Spark (Official Music Video) ft. Spree WilsonMusicAfrojackUChuZAo1RKL85gev3Eal9_zgchannel_is_verifiedz8https://www.youtube.com/channel/UChuZAo1RKL85gev3Eal9_zgz$md5:8f5e2b82460520b619ccac1f509d43bf   zcount:19iTWR20131011z@AfrojackVEVOz%https://www.youtube.com/@AfrojackVEVO)
r   ru   rw   rx   ry   rz   r{   r|   r}   r~   z141/bestaudio[ext=m4a])r   r   r   z6Embed allowed age-gated video; works with web_embeddedz'https://youtube.com/watch?v=HtVdAasjOgUHtVdAasjOgUz7The Witcher 3: Wild Hunt - The Sword Of Destiny Trailer
needs_authGamingzThe WitcherUCzybXLxv08IApdjdN0mJhEgz8https://www.youtube.com/channel/UCzybXLxv08IApdjdN0mJhEgz$md5:595a43060c51c2a8cb61dd33c18e5fbd   zcount:17iﱐS20140605z@thewitcherz#https://www.youtube.com/@thewitcherr   z'Age-restricted; requires authenticationz=Formerly an age-gated video with embed allowed in public sitez'https://youtube.com/watch?v=HsUATh_Nc2UHsUATh_Nc2UzGodzilla 2 (Official Video)EntertainmentFlyingKittyUCYQT13AtrJC0gsM1far_zJgz8https://www.youtube.com/channel/UCYQT13AtrJC0gsM1far_zJgz$md5:bf77e03fcae5529475e500129b05668a   zcount:2it^20200408z@FlyingKitty900z'https://www.youtube.com/@FlyingKitty900)r   r   r   r   z6Age-gated video embedable only with clientScreen=EMBEDz'https://youtube.com/watch?v=Tq92D6wQ1mgTq92D6wQ1mgz#[MMD] Adios - EVERGLOW [+Motion DL]zProjekt MelodyzUC1yoRdFoFJaCY-AGfD9W0wQz8https://www.youtube.com/channel/UC1yoRdFoFJaCY-AGfD9W0wQz$md5:17eccca93a786d51bc67646756894066j   zcount:5it^20191228z@ProjektMelodyz&https://www.youtube.com/@ProjektMelodyz"Non-age-gated non-embeddable videoz'https://youtube.com/watch?v=MeJVWBSsPAYMeJVWBSsPAYz%OOMPH! - Such Mich Find Mich (Lyrics)z
Herr LurikzUCdR3RSDPqub28LjZx0v9-aAz8https://www.youtube.com/channel/UCdR3RSDPqub28LjZx0v9-aAz$md5:205c1049102a4dffa61e4831c1f16851   rw   iQ20130730z
@HerrLurikz"https://www.youtube.com/@HerrLurik)rx   ry   rz   r{   r|   r}   r~   )r   r   r   zNon-bypassable age-gated videoz'https://youtube.com/watch?v=Cr381pDsSsA)r   r   only_matching__2ABJjxzNozDeadmau5 - Some Chords (HD)deadmau5zUCYEK6xds6eo-3tr4xRdflmQz8https://www.youtube.com/channel/UCYEK6xds6eo-3tr4xRdflmQz$md5:c27e1e9e095a3d9dd99de2f0f377ba06i
  zcount:14i<K20100430z	@deadmau5z!https://www.youtube.com/@deadmau5zDASH manifest missing)r   r   expected_warningsr   lqQg6PlCWgIz5Hockey - Women -  GER-AUS - London 2012 Olympic GamesSportsOlympicsUCTl3QQTvqHFjurroKxexy2Qz8https://www.youtube.com/channel/UCTl3QQTvqHFjurroKxexy2Qz$md5:04bbbf3ccceb6795947572ca36f45904i  was_live
livestream20120731iDPzcount:10iZtU20150827z	@Olympicsz!https://www.youtube.com/@Olympics)
release_daterelease_timestamprw   rx   ry   rz   r{   r|   r}   r~   z+https://www.youtube.com/watch?v=_b-2C3KPAM0z_b-2C3KPAM0u8   [A-made] 變態妍字幕版 太妍 我就是這樣的人unlistedzPeople & Blogsu	   孫ᄋᄅzUCS-xxCmRaA6BFdmgDPA_BIwz8https://www.youtube.com/channel/UCS-xxCmRaA6BFdmgDPA_BIwz$md5:636f03cf211e7687daffe5bded88a94fU   gqq?zcount:11iyM20110310z
@AllenMeowz"https://www.youtube.com/@AllenMeow)	stretched_ratiorw   rx   ry   rz   r{   r|   r}   r~   qEJwOuvDf7I)r   r   z+https://www.youtube.com/watch?v=FIl7x6_3R5YFIl7x6_3R5Yuc   [60fps] 150614  마마무 솔라 'Mr. 애매모호' 라이브 직캠 @대학로 게릴라 콘서트dorappi2000UCNlmrKRHLHcd2gq6LtPOTlQz8https://www.youtube.com/channel/UCNlmrKRHLHcd2gq6LtPOTlQz$md5:116377fd2963b81ec4ce64b542173306   zcount:12iU20150626z@dorappi2000z$https://www.youtube.com/@dorappi2000z)https://www.youtube.com/embed/CsmdDsKjzN8CsmdDsKjzN8u1   Retransmisión XVIII Media maratón Zaragoza 2015zAirtek | LED streamingUCzTzUmjXxxacNnL8I3m4LnQz8https://www.youtube.com/channel/UCzTzUmjXxxacNnL8I3m4LnQz$md5:fcac84e6c545114766f670236fc10196i*  20150510i3OUzcount:31iCU20150501z@airtekledstreaming7916z/https://www.youtube.com/@airtekledstreaming7916135z+https://www.youtube.com/watch?v=zaPI8MvL8pgz+https://www.youtube.com/watch?v=gVfLd0zydlozhttps://vid.plus/FlRa-iH7PGwz_https://zwearz.com/watch/9lWxNJF-ufM/electra-woman-dyna-girl-official-trailer-grace-helbig.htmlz+https://www.youtube.com/watch?v=lsguqyKfVQglsguqyKfVQgz4{dark walk}; Loki/AC/Dishonored; collab w/Elflover21zFilm & AnimationIronSoulElfUCTSRgz5jylBvFt_S7wnsqLQz8https://www.youtube.com/channel/UCTSRgz5jylBvFt_S7wnsqLQz$md5:8085699c11dc3f597ce0410b0dcbb34a   zcount:13iNV20151119z@IronSoulElfz$https://www.youtube.com/@IronSoulElfz+https://www.youtube.com/watch?v=Ms7iBXnlUO8z+https://www.youtube.com/watch?v=Q39EVAstoRMQ39EVAstoRMz+Clash Of Clans#14 Dicas De Ataque Para CV 4z$md5:ee18a25c350637c8faff806845bddee920151107)r\   r^   r`   rk   rz   zThis video does not exist.z+https://www.youtube.com/watch?v=FRhJzUSJbGIz+https://www.youtube.com/watch?v=M4gD1WSo5mAM4gD1WSo5mAz`William Fisher, CopyrightX: Lecture 3.2, The Subject Matter of Copyright: Drama and choreography	Educationz/The Berkman Klein Center for Internet & SocietyUCuLGmD72gJDBwmLw06X58SAz8https://www.youtube.com/channel/UCuLGmD72gJDBwmLw06X58SAchapterszcount:4z$md5:a677553cf0840649b731a3024aeff4cci  licensez4Creative Commons Attribution license (reuse allowed)zcount:3i<pT20150128z@BKCHarvardz#https://www.youtube.com/@BKCHarvard)	ru   rw   rx   ry   rz   r{   r|   r}   r~   z+https://www.youtube.com/watch?v=eQcmzGIKrzgeQcmzGIKrzgz8Democratic Socialism and Foreign Policy | Bernie SanderszNews & PoliticszBernie SandersUCH1dpzjCEiGAt8CXkryhkZgz8https://www.youtube.com/channel/UCH1dpzjCEiGAt8CXkryhkZgz$md5:13a2503d7b5904ef4b223aa101628f39i  iNV20151120z@BernieSandersz&https://www.youtube.com/@BernieSanders)rq   rr   r   ru   rw   rx   ry   rz   r{   r|   r}   r~   zKhttps://www.youtube.com/watch?feature=player_embedded&amp;amp;v=V36LpHqtcDYz+https://www.youtube.com/watch?v=i1Ko8UG-Tdoz+https://www.youtube.com/watch?v=yYr8q0y5JfguGpuVWrhIzEzPiku - Trailerz$md5:c36bd60c3fd6f1954086c083c72092eb20150811zStandard YouTube License)r\   r^   r`   rk   rz   r   zThis video is not available.z+https://www.youtube.com/watch?v=iqKdEhx-dD4ziqKdEhx-dD4zIsolation - Mind Field (Ep 1)VsaucezUC6nSFpj9HTCZ5t-N3Rm3-HAz8https://www.youtube.com/channel/UC6nSFpj9HTCZ5t-N3Rm3-HAz$md5:f540112edec5d09fc8cc752d3d4ba3cdi%  iקX20170118z@Vsaucezhttps://www.youtube.com/@VsaucezSkipping DASH manifestz+https://www.youtube.com/watch?v=6SJNVb0GnPI6SJNVb0GnPIz Race Differences in Intelligencez$md5:5d161533167390427a1f8ee89a1fc6f1i  20140124)r\   r^   r`   rk   rl   rz   zJThis video has been removed for violating YouTube's policy on hate speech.1t24XAntNCYzsJL6WA-aGkQz&https://invidio.us/watch?v=BaW_jenozKcz1https://redirect.invidious.io/watch?v=BaW_jenozKcz)https://redirect.invidious.io/Yh0AhrY9GjAz+https://www.youtube.com/watch?v=s7_qI6_mIXcz+https://www.youtube.com/watch?v=Z4Vy8R84T1Uz-https://music.youtube.com/watch?v=MgNrAu2pzNsMgNrAu2pzNszVoyeur Girlalbumz"it's too much love to know my dear	alt_titleartistsStephenzUC-pWHpBjdGG69N9mM2auIAAz8https://www.youtube.com/channel/UC-pWHpBjdGG69N9mM2auIAAcreatorsz$md5:7ae382a65843d6df2685993e90a8628f   20190313i\20190312)rl   rp   rq   rr   r   ru   r   rw   rx   ry   trackrz   r{   r~   z/https://www.youtubekids.com/watch?v=3b8nCWDgZ6QDJztXj2GPflDJztXj2GPfkz9Panjabi MC - Mundian To Bach Ke (The Dictator Soundtrack)z$md5:bf577a41da97918e94fa9798d922882520090125z
Panjabi MCz@Beware of the Boys (Mundian to Bach Ke) - Motivo Hi-Lectro Remixz'Beware of the Boys (Mundian To Bach Ke))r\   r^   r`   rk   rz   artistr   r   z+https://www.youtube.com/watch?v=x41yOUIvK2kx41yOUIvK2kzIMG 3456zPets & Animalszl'Or Vert asblUCo03ZQPBW5U4UC3regpt1nwz8https://www.youtube.com/channel/UCo03ZQPBW5U4UC3regpt1nw   i?Y20170613z@ElevageOrVertz&https://www.youtube.com/@ElevageOrVertz+https://www.youtube.com/watch?v=CHqg6qOn4noCHqg6qOn4noz+Part 77   Sort a list of simple types in c#	kudvenkatUCCTVrRB5KpIiK6V2GGVsR1Qz8https://www.youtube.com/channel/UCCTVrRB5KpIiK6V2GGVsR1Qz$md5:b8746fa52e10cdbf47997903f13b20dci
  i@"R20130831z@Csharp-video-tutorialsBlogspotz7https://www.youtube.com/@Csharp-video-tutorialsBlogspot)rr   r   ru   rw   rx   ry   rz   r{   r|   r}   r~   z+https://www.youtube.com/watch?v=gVfgbahppCYz1https://www.youtube.com/watch_popup?v=63RmMXCd_bQOtqTfy26tG0zBurn Outz	Every DayzThe Cinematic OrchestraUCIzsJBIyo8hhpFm1NK0uLgwz8https://www.youtube.com/channel/UCIzsJBIyo8hhpFm1NK0uLgwz$md5:fee8b19b7ba433cc2957d1c7582067acif  20020513i  inT20141120)rl   rp   rq   rr   r   ru   r   release_yearrw   rx   ry   r   rz   r{   r~   z+https://www.youtube.com/watch?v=nGC3D_FkCmgz+https://www.youtube.com/watch?v=SZJvDhaSDncSZJvDhaSDnczESan Diego teen commits suicide after bullying over embarrassing videozCBS MorningszUC-SJ6nODDmufqBzPBwCvYvQz8https://www.youtube.com/channel/UC-SJ6nODDmufqBzPBwCvYvQz$md5:acde3a73d3f133fc97e837a9f76b53b7   i6oS20140716z@CBSMorningsz$https://www.youtube.com/@CBSMorningscBvYw8_A0vQu:   4K Ueno Okachimachi  Street  Scenes  上野御徒町歩きzTravel & EventszWalk around JapanUC3o_t8PzBmXf5S9b7GLx1Mwz8https://www.youtube.com/channel/UC3o_t8PzBmXf5S9b7GLx1Mwz$md5:ea770e474b7cd6722b4c95b833c03630i  rx   i ڷ_20201120z@walkaroundjapan7124z,https://www.youtube.com/@walkaroundjapan7124)ry   rz   r{   r|   r}   r~   WaOKSUlf4TMz-https://music.youtube.com/watch?v=XclachpHxisz+https://www.youtube.com/watch?v=wsQiKKfKxugz+https://www.youtube.com/watch?v=YOelRv7fMxYYOelRv7fMxY3gpzDIGGING A SECRET TUNNEL Part 1
colinfurzezUCp68_FLety0O-n9QU6phsgwz8https://www.youtube.com/channel/UCp68_FLety0O-n9QU6phsgwz$md5:5d5991195d599b56cd0c4148907eec50iT  zcount:6i`20210624z@colinfurzez#https://www.youtube.com/@colinfurzeplayer_clientandroid17)extractor_argsr   r   zAndroid client broken)r   r   r   r   r  player_skipconfigs)r   r   r   z*https://www.youtube.com/shorts/BGQWPY4IigYStoryboardsz+https://www.youtube.com/watch?v=5KLPxDtMqe85KLPxDtMqe8mhtmlzYour Brain is PlasticSciShowzUCZYTClx2T1of7BRZ86-8fowz8https://www.youtube.com/channel/UCZYTClx2T1of7BRZ86-8fowz$md5:89cd86034bdb5466cd87c6ba206cd2bc   iOx0S20140324z@SciShowz https://www.youtube.com/@SciShow)r   r   z+https://www.youtube.com/watch?v=2NUZ8W2llS42NUZ8W2llS4u,   The NP that test your phone performance 🙂zLeon NguyenUCRqNBSOHgilHfAczlUmlWHAz8https://www.youtube.com/channel/UCRqNBSOHgilHfAczlUmlWHAz$md5:144494b24d4f9dfacb97c1bbef5de84d   zcount:23iGa20220103z@LeonNguyenz#https://www.youtube.com/@LeonNguyenz+https://www.youtube.com/watch?v=mzZzzBU6lrMmzZzzBU6lrMz$I Met GeorgeNotFound In Real Life...QuackityUC_8NknAFiyhOUaZqHR3lq3Qz8https://www.youtube.com/channel/UC_8NknAFiyhOUaZqHR3lq3Qz$md5:42e72df3d4d5965903a2b9359c3ccd25i  iNazcount:26z	@Quackityz!https://www.youtube.com/@Quackity)r   ru   r   r   rw   rx   ry   rz   r{   r|   r}   r~   z+https://www.youtube.com/watch?v=jfKfPfyJRdkjfKfPfyJRdkz	Lofi GirlUCSJ4gkVC6NrvII8umztf0Owz8https://www.youtube.com/channel/UCSJ4gkVC6NrvII8umztf0Owconcurrent_view_countz$md5:48841fcfc1be6131d729fa7b4a7784cbis_live20220712ibbzcount:32i-ebz	@LofiGirlz!https://www.youtube.com/@LofiGirlz+https://www.youtube.com/watch?v=tjjjtzRLHvAtjjjtzRLHvAu*   ハッシュタグ無し };if window.ytcsi
LesmiscoreUCdqltm_7iv1Vs6kp6Syke5Az8https://www.youtube.com/channel/UCdqltm_7iv1Vs6kp6Syke5A   shorti:b20220323z@lesmiscorez#https://www.youtube.com/@lesmiscorez+https://www.youtube.com/watch?v=el3E4MbxRqQel3E4MbxRqQz%dlp test video 2 - primary sv no desczcole-dlp-test-acczUCiu-3thuViMebBjw_5nWYrAz8https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA   iqc20220908z
@coletdjnzz"https://www.youtube.com/@coletdjnzz+https://www.youtube.com/watch?v=gHKT4uU8ZnggHKT4uU8Zngz$dlp test video title primary (en-GB)z$md5:e8c098ba19888e08554f960ffbf6f90eirb20220729langfr)r  r   z!Preferring "fr" translated fields)r   r   r   r   z6 channel audioz+https://www.youtube.com/watch?v=zgdo7-RRjgoz#Multiple HLS formats with same itagz+https://www.youtube.com/watch?v=kX3nB4PpJkokX3nB4PpJkoz$Last To Take Hand Off Jet, Keeps It!MrBeastUCX6OQ3DkcsbYNE6H8uQQuVAz8https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVAz$md5:42731fced13eff2c48c099fbb5c1b3a0i  iP	pc20221112z@MrBeastz https://www.youtube.com/@MrBeastiosz233-1zPO Token Requiredz,Audio formats with Dynamic Range Compressionz+https://www.youtube.com/watch?v=Tq92D6wQ1mgwebmz251-drcz5Support /live/ URL + media type for post-live contentz(https://www.youtube.com/live/qVv6vCqciTMqVv6vCqciTMu   【 #インターネット女クリスマス 】3Dで歌ってはしゃぐインターネットの女たち【月ノ美兎/名取さな】u   さなちゃんねるUCIdEIHpS0TdkqRkHL5OkLtAz8https://www.youtube.com/channel/UCIdEIHpS0TdkqRkHL5OkLtAz$md5:6aebf95cc4a1d731aebc01ad6cc9806diV  20221223ici`cz@sana_natoriz$https://www.youtube.com/@sana_natori)rr   r   ru   r   r   rw   rx   ry   rz   r{   r|   r}   r~   z+https://www.youtube.com/watch?v=wSSmNUl9SnwwSSmNUl9Snwz&The Computer Hack That Saved Apollo 14zScott ManleyzUCxzC4EngIsMrPmbm6Nxvb-Az8https://www.youtube.com/channel/UCxzC4EngIsMrPmbm6Nxvb-Az$md5:f4bed7b200404b72a394c2f97b782c02i  i9@Y20170831z@scottmanleyz$https://www.youtube.com/@scottmanleywebpage)r  r  z*https://www.youtube.com/shorts/18NGQq7p3LY18NGQq7p3LYu8   아이브 이서 장원영 리즈 삐끼삐끼 챌린지u   ㅇㅇUCC25oTm2J7ZVoi5TngOHg9gz8https://www.youtube.com/channel/UCC25oTm2J7ZVoi5TngOHg9gr   if20240822u   @으아-v1ku#   https://www.youtube.com/@으아-v1kz-https://music.youtube.com/watch?v=DbCvuSGfR3YDbCvuSGfR3YBack Around   half·aliver   Conditions Of A Punkr   20221202r   i  z$md5:bfc0e2b3cc903a608d8a85a13cb50f95r{   u   half•aliveUCYQrYophdVI3nVDPOnXyIngz8https://www.youtube.com/channel/UCYQrYophdVI3nVDPOnXyIng   z:https://i.ytimg.com/vi_webp/DbCvuSGfR3Y/maxresdefault.webp)r:  r;  r9  i}c20221201)rj   r~   rq   ra   rl   rx   rp   rd   rw   r   ry   rz   ru   rb   rr   z+https://www.youtube.com/watch?v=brhfDfLdDZ8brhfDfLdDZ8z/This is the WORST Movie Science We've Ever Seenz$md5:8afd0a3cd69ec63438fc573580436f92
Open Saucer|   z@opensauceliver}   z&https://www.youtube.com/@opensauceliveUC2EiGVmCeD79l_vZ204DUSwz8https://www.youtube.com/channel/UC2EiGVmCeD79l_vZ204DUSwr~   i  z0https://i.ytimg.com/vi/brhfDfLdDZ8/hqdefault.jpg)MoonfallzBad SciencerA  zSauce+zThe Backyard ScientistzWilliam Osmanz	Allen PanzWilliam Osman 2ih20251003)rd   rw   r   ry   rz   ru   rb   rr   z+https://www.youtube.com/watch?v=_A9KsMbWh4E_A9KsMbWh4Eu)   【MV】薫習 - LIVE UNION【RK Music】z$md5:9b3dc2b91103f303fcc0dac8617e7938RK Musicz@RKMusic_incz$https://www.youtube.com/@RKMusic_inczUCiLhMk-gmE2zgF7KGVyqvFwz8https://www.youtube.com/channel/UCiLhMk-gmE2zgF7KGVyqvFw   z:https://i.ytimg.com/vi_webp/_A9KsMbWh4E/maxresdefault.webp)rF  HACHIu   焔魔るり CH. / Ruri Enmau   瀬戸乃ととu   水瀬 凪/MINASE Nagiii20251031)
rd   rw   r   ry   rz   r   r   ru   rb   rr   z+https://www.youtube.com/watch?v=f6HNySwZV4cf6HNySwZV4cdlptestvideo2z4https://i.ytimg.com/vi/f6HNySwZV4c/maxresdefault.jpgiUe20240308   zcount:15)rd   rw   ry   rz   r   r   ru   rb   rr   rj   comments)r   getcommentsz+https://www.youtube.com/watch?v=3dHQb2Nhma03dHQb2Nhma0u   Tɪtleabcdefgz@abcdefg-d5t2cz&https://www.youtube.com/@abcdefg-d5t2cUCayEJzV8XSSJkPdA7OAsbewz8https://www.youtube.com/channel/UCayEJzV8XSSJkPdA7OAsbew   z4https://i.ytimg.com/vi/3dHQb2Nhma0/maxresdefault.jpgiTi20251231zcount:9)rw   ry   rz   ru   rb   rr   rj   rN  zehttp://www.improbable.com/2017/04/03/untrained-modern-youths-and-ancient-masters-in-selfie-portraits/zmsN87y-iEx0z!Feynman: Mirrors FUN TO IMAGINE 6rz   20080526z$md5:873c81d308b979f0e23ee7e620b312a3zUCCeo--lls1vna5YJABWAcVAzChristopher Sykesz8https://www.youtube.com/channel/UCCeo--lls1vna5YJABWAcVA   z6https://www.youtube.com/@ChristopherSykesDocumentariesz@ChristopherSykesDocumentariesi :H)	r~   rd   rf   r{   r}   r|   rp   ry   r   z?https://badzine.de/news/als-marc-zwiebler-taufik-hidayat-schlugbSVcWOq397gzPTAUFIK TUNJUKKAN KELASNYA !!! : Taufik Hidayat VS Marc Zwiebler Canada Open 2011zBadminton Addict IdUCfCpKOwQGUe2FUJzYNadQcQz8https://www.youtube.com/channel/UCfCpKOwQGUe2FUJzYNadQcQz$md5:2c3737da9a575f301a8380b4d60592a8i  i`20210519z@badmintonaddictid8958z.https://www.youtube.com/@badmintonaddictid8958zMhttps://lothype.com/2025-chino-hills-hs-snare-quad-features-wgi2025-drumline/lC21AX_pCfAz=2025 Chino Hills HS Snare & Quad Features! #wgi2025 #drumline
DrumlineAVUCqdfUdyiQOZMvW5PcTTYikQz8https://www.youtube.com/channel/UCqdfUdyiQOZMvW5PcTTYikQ0   locationWESTMINSTERzcount:72ig20250218z@DrumlineAVz#https://www.youtube.com/@DrumlineAVzIhttps://rabota7.ru/%D0%91%D1%83%D1%85%D0%B3%D0%B0%D0%BB%D1%82%D0%B5%D1%80DexR8_tTSsQu3   Работа бухгалтером в Москвеu:   Работа в Москве свежие вакансииUCG3qz_gefGaMiSBvmaxN5WQz8https://www.youtube.com/channel/UCG3qz_gefGaMiSBvmaxN5WQz$md5:b779d3d70af4efda26cf62b76808c0e3*   zcount:7i<1Y20170602u7   @РаботавМосквесвежиевакансииuO   https://www.youtube.com/@РаботавМосквесвежиевакансииgenericimpersonatechromezhttps://www.uca.ac.uk/z
www.uca.aczAUCA | Creative Arts Degrees UK | University for the Creative Artsz$md5:179c7a06ea1ed01b94ff5d56cb18d73bz8/media/uca-2020/hero-headers/2025-prospectus-all-2x2.jpg)r\   r`   ra   rk   rx   )r   r   playlist_countr   actualmainzplayer_ias.vflset/en_US/base.jsz#player_ias_tcc.vflset/en_US/base.jsz#player_ias_tce.vflset/en_US/base.jszplayer_es5.vflset/en_US/base.jszplayer_es6.vflset/en_US/base.jsz#player_es6_tcc.vflset/en_US/base.jsz#player_es6_tce.vflset/en_US/base.jsz%tv-player-ias.vflset/tv-player-ias.jsz%tv-player-es6.vflset/tv-player-es6.jsz,player-plasma-ias-phone-en_US.vflset/base.jsz'house_brand_player.vflset/en_US/base.js)rj  tcctcees5es6es6_tcces6_tcetvtv_es6phonehousec                 T    U R                  SS /5      S   =(       d    U R                  $ )Nplayer_js_versionr   )_configuration_arg_DEFAULT_PLAYER_JS_VERSIONselfs    p/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/yt_dlp/extractor/youtube/_video.py_player_js_versionYoutubeIE._player_js_versiong  s(    &&':TFCAFi$JiJii    c                     U R                  SU R                  /5      S   nXR                  ;  a,  U R                  SU SU R                   3SS9  U R                  nU$ )Nwebpage_clientr   zInvalid webpage_client "z" requested; falling back to T	only_once)rw  _DEFAULT_WEBPAGE_CLIENT_WEBPAGE_CLIENTSreport_warning)rz  r  s     r{  _webpage_clientYoutubeIE._webpage_clientk  sy    001ADD`D`Cabcde!6!66*>*: ;##'#?#?"@BMQ   S "99Nr~  c                 |    [        U R                  S5      5      nU R                  S:w  a  UR                  S5        U$ )Nwebpage_skipri  player_response)setrw  r|  add)rz  skippeds     r{  _skipped_webpage_dataYoutubeIE._skipped_webpage_datau  s7    d--n=>""h.KK)*r~  c                 v   > SSK Jn  U" U5      nUR                  SS /5      S   (       a  g[        TU ]  U5      $ )Nr   )r*   listF)yt_dlp.utilsr*   getsupersuitable)clsr   r*   qs	__class__s       r{  r  YoutubeIE.suitable}  s7    )c]66&4&!!$w$$r~  c                 P   > [         TU ]  " U0 UD6  0 U l        0 U l        S U l        g N)r  __init___code_cache_player_cache_pot_director)rz  argskwargsr  s      r{  r  YoutubeIE.__init__  s-    $)&)!r~  c                 b   > [         TU ]  5         [        U 5      U l        [	        U 5      U l        g r  )r  _real_initializer   r  r   _jsc_director)rz  r  s    r{  r  YoutubeIE._real_initialize  s(     "4T:4T:r~  c                   ^ ^^^^^^^^^ [         R                  " 5       m[        R                  " 5       mT Vs/ s H  oR                  S5      (       d  M  UPM     snmUUU UUUUU4S jmUUUUU U4S jn	T Hx  nTUS'   [        R
                  " T R                  TUS   US   X9T(       + =(       a    UR                  5       5      n
T(       a  XS'   SUS	'   Ma  [        U
" 0 5      5      US'   US	 Mz     g s  snf )
Nis_from_startc                 (  > [         R                   " 5       TU-   ::  a  g TR                  TTTTR                  T5      u        p4n[        US[        S9n[        US[        S9nTR                  TXvXE5      u  p8m	nUS:H  m
[         R                   " 5       mg )N.videoDetailsexpected_type.microformatplayerMicroformatRendererr  )time_initial_extractr  r2   dict_list_formats)itagclient_namedelay_prs
player_urlvideo_detailsmicroformatsrr   formatsr  rz  smuggled_datarv   r   video_idwebpage_urls            r{  refetch_manifestDYoutubeIE._prepare_live_from_start_formats.<locals>.refetch_manifest  s    yy{j500*.*?*?]K1E1Ex+Q'Aq!QZ(.CSWXM'F"$L *.););Hlcf)s&AGQ!Y.GJr~  c                 T  >^ ^ T	R                  SS9 H  nT   T" T TU5        SSS5        [        UU 4S jT 5       S5      nU(       d(  T(       d  T
 S3Ul        OST  [        5        3Ul        M^  UR	                  S5      (       d    gUS   US   T4s  $    g! , (       d  f       N|= f)	zB
@returns (manifest_url, manifest_stream_number, is_live) or None
FfatalNc              3      >#    U  H4  oR                  S 5      T:X  d  M  UR                  S5      T:X  d  M0  Uv   M6     g7f)_itag_clientNr  ).0fr  r  s     r{  	<genexpr>OYoutubeIE._prepare_live_from_start_formats.<locals>.mpd_feed.<locals>.<genexpr>  s4     kWg$0F!155QZK[_jKj!!Ws   ??	?z: Video is no longer livez*Cannot find refreshed manifest for format manifest_urlmanifest_stream_number)RetryManagernexterrorr   r  )r  r  r  retryr  r  r  lockr  rz  r  s   ``   r{  mpd_feed<YoutubeIE._prepare_live_from_start_formats.<locals>.mpd_feed  s     ***7$T;>  kWkmqr")1
2K&L(RSWRXYlYnXo&p uu^,,  (!,D*EwNN# 8$ # Ts   B
B'	r  r  r  	fragmentshttp_dash_segments_generatorprotocol)		threadingLockr  r  	functoolspartial_live_dash_fragmentscopyr   )rz  r  r  live_start_timer   r  r  r  r  r  genr  r  rv   s   ``` ````   @@@r{   _prepare_live_from_start_formats*YoutubeIE._prepare_live_from_start_formats  s    ~~YY[
%@g)?1g@	% 	%	 	0 A"AiL##D$=$=x7UVW`Ua$37{?WqvvxYC!$+ >*!)#b'!2+o& S As   C6C6c              #   ~  ^ ^^^^^^^^^^^^#    Su  pSu  mmmSn
TR                  S5      =(       d    [        R                  " 5       nX=(       d    U-
  U	:  nU(       a  T R                  [        S5      SS9  SnU
SS snmnSu  mmUUUUUUUUUUUU U4S	 jnT R	                  S
U ST 35        T(       Ga_  [        R                  " 5       nTS:  a  g U(       a.   T R                  US SSSS9n[        US 5      mTc	  TS-  mS nMX  OU" STS:  5      u  nmTS-  mU(       d  Mv  UT:  a  S nM  TS-  mU
S:  a  US:  a  TU
-   nU(       a!  [        UT[        U	TS   S   -  5      -
  5      n [        UT5       H<  nU" SS5      u  nnU(       d  US-
  n[        S5      e[        TSU 35      nUTS.v   M>     UT:X  a  TS-  mOSmTnT(       a  g [        R                  " [        SUU-   [        R                  " 5       -
  5      5        T(       a  GM^  g g ! [         a    S n GN8f = f! [         a     GM  f = f7f)N)r#  i )NNTr   startzStarting download from the last 120 hours of the live stream since YouTube does not have data before that. If you think this is wrong,Tr  NNc                 n  > TnT
R                  SS 5      nU=(       d/    U=(       a&    [        U[        5      =(       a    UR                  S:H  nT" TT	U(       a  SOS5      =(       d    TTS4u  mmmU (       d  U(       a  T(       d  ST4$ UT:X  a  ST4$ T(       a  TnO; TR	                  TS SSSS9u  pgU(       d	  TS-  mST4$ [        U4S	 jU 5       5      nUS
   mUS   mT(       d   e[        [        R                  " STS   S   5      R                  S5      5      nSU4$ ! [
         a    S n Nf = f)N
last_errori  r#  iPF  FTr   errnoter     c              3   <   >#    U  H  oS    T:X  d  M  Uv   M     g7f)r  N )r  xstream_numbers     r{  r  UYoutubeIE._live_dash_fragments.<locals>._extract_sequence_from_mpd.<locals>.<genexpr>  s     `4a5M3NR_3_4s   	r  fragment_base_urlz(?:/|^)sq/(\d+)pathr   )pop
isinstancer   status"_extract_mpd_formats_and_subtitlesr   r  intresearchgroup)refresh_sequence	immediateold_mpd_urlr  expire_fastfmt_infofmtsr  	_last_seqr  ctxr  r  r  r  last_seqmanifestless_orig_fmtr  mpd_urlno_fragment_scorerz  r  s            r{  _extract_sequence_from_mpdBYoutubeIE._live_dash_fragments.<locals>._extract_sequence_from_mpd  sX    "Kt4J#v
(uz*i7X(u]g]n]nru]uK/7kP[1af/g 0R3:M52Q ,G]G#w (?* G+>)$0 "EEE5 F OGD %*% (?*`4`` -I ()< =$$$BII&8)B-:OPVVWXYZI?" &  D s   D% %D43D4[z"] Generating fragments for format    Fr  c                 2    [        U R                  S   5      $ )NzX-Head-Seqnum)r"   headersr  s    r{  <lambda>0YoutubeIE._live_dash_fragments.<locals>.<lambda>  s    ;qyy?Y3Zr~  r  rM  r   r  rl   zbreaking out of outer loopzsq/)r   fragment_countr#  )r  r  r  r   write_debug_request_webpager   r4   maxr  ranger;   sleep)rz  r  r  r  r  r  r  r  
FETCH_SPANMAX_DURATIONbegin_indexdownload_start_timelack_early_segments	known_idxlast_segment_urlr  
fetch_timeurlhshould_continueidxr  r  r  r  r  r  r  r  s   ` `` ```             @@@@@@@r{  r  YoutubeIE._live_dash_fragments  s    #, 
*:'!ggg.=$))+15[H[\_kk 3V!Wbf   h #'9Da6	$&6'1$	$	# 	# 	#@ 	1XJ&HOPJ 2% 00($UEQV 1 XD #4)Z[#%*%'+$ $
 -GtM^acMc,d)!Q&!&8##' MHQ9q=${2	"	8c,)TV-XbJc:c6d+de	 H5C)CE5)Q&OQ*$'!G	,-IJJ'./@Cu+'N$/*2  6 (%*%()%$	 % JJs1j:5		CDEu g &  D R " sW   CH=H /A?H=/AH+ AH=H=H($H='H((H=+
H:5H=9H::H=c                     U R                   S:X  a  g[        R                  " SU R                   5      (       d  U R                  SU R                    S3SS9  gU R                   R	                  S5      $ )	Nri  r  z[0-9]{5,}@[0-9a-f]{8,}zInvalid player JS version "z?" specified. It should be "actual" or in the format of STS@HASHTr  @)r|  r  	fullmatchr  splitry  s    r{  _get_player_js_version YoutubeIE._get_player_js_version7  sy    ""h.||5t7N7NOO-d.E.E-F GE FQU   W &&,,S11r~  N)	player_idr  c          	      P   U(       d  U(       d   S5       eU(       d  U R                  U5      nSnU R                  5       S   nU(       a  XA:w  a
  SU SU 3nUnU R                  SS/5      S   =(       d    U R                  nU/ U R                  QS	P7;  a;  U R                  S
U SSR                  U R                  5       3SS9  U R                  nU(       d>  U(       a  U R                  USS9  US	:X  a  Sn[        SSU SU R                  U    35      $ U R                  U5      S   nU(       d  US	:X  d  XV:X  a  [        SU5      $ US	:X  a  U(       a  UnOSnU R                  [        UXV:g  =(       a    SU SU 3SU 3SS9SS9  [        SSU SU R                  U    35      $ )Nz>_construct_player_url must take one of player_id or player_urlFr   Forcing player z in place of player player_js_variantr   r   ri  z Invalid player JS variant name "z " requested. Valid choices are: , Tr  rj  https://www.youtube.com
/s/player//z	Forcing "z" player JS variant for player zoriginal url = z	
        delim)_extract_player_infor'  rw  _DEFAULT_PLAYER_JS_VARIANT_PLAYER_JS_VARIANT_MAPr  joinr  r;   _get_player_id_variant_and_pathr#   )rz  r)  r  force_player_idplayer_id_overridevariantactual_variants          r{  _construct_player_urlYoutubeIE._construct_player_urlA  s   Jh(hh&11*=I!88:1="4"A /0B/CCWXaWbcO*I))*=tDQGj4KjKjBD77BBB27) <&&*ii0K0K&L%MOZ^   ` 55G  D A(" 4
9+QtOjOjkrOsNt6uvv==jI!LGx$77;T4jAAh( !%iIgY>]^g]h*ij\*	  ,0	 	 	1 0Jyk4KfKfgnKoJp2qrrr~  r4  c                R    [        USSS[        S9nU(       d  g U R                  US9$ )N).PLAYER_JS_URL).WEB_PLAYER_CONTEXT_CONFIGS.jsUrlF)get_allr  )r  )r2   strr<  )rz  r4  ytcfgsr  s       r{  _extract_player_urlYoutubeIE._extract_player_urln  s6    !*,].
 ))Z)@@r~  c                     U R                  5       S   =n(       a"  U R                  SU 3SS9  U R                  US9$ U R                  SSXS9nU(       a)  U R	                  S	US
US9nU(       a  U R                  US9$ g g )Nr   r+  Tr  )r)  z"https://www.youtube.com/iframe_apizDownloading iframe API JS)r   r  retry_fatalzplayer\\?/([0-9a-fA-F]{8})\\?/zplayer versionr  )r'  r  r<  _download_webpage_with_retries_search_regex)rz  r  r  r9  iframe_webpageplayer_versions         r{  _download_player_urlYoutubeIE._download_player_urlv  s    !%!<!<!>q!AAA/A.BCtT--8J-KK<<0, = 2
 !//1>CS[` 0 bN11N1KK  r~  c                 p  ^ U R                  U5      n[        [        R                  R	                  U5      R
                  SU S35      mU R                  R                  T5      =(       d.    [        U4S jU R                  R                  5        5       S 5      nU(       d  U R                  SU 3SS9  X#T4$ )Nr/  r0  c              3      >#    U  HK  u  p[         R                  " [         R                  " U5      R                  S S5      T5      (       d  MG  Uv   MM     g7f)en_USz[a-zA-Z0-9_]+N)r  r%  escapereplace)r  kvplayer_paths      r{  r  <YoutubeIE._get_player_id_variant_and_path.<locals>.<genexpr>  sB      P[E$!||BIIaL00:JK[Y AEs   AA	Az7Unable to determine player JS variant
        player = Tr  )r3  r-   urllibparseurlparser  _INVERSE_PLAYER_JS_VARIANT_MAPr  r  itemsr  rz  r  r)  r:  rW  s       @r{  r7  )YoutubeIE._get_player_id_variant_and_path  s    --j9	"6<<#8#8#D#I#IZXaWbbcKde5599+F b$ P[==CCEP[\`Kb $$.<1<@  B ;..r~  c                     U R                  U5      u  p#nU(       d"  [        R                  " SS[        US5      5      nU SU 3$ )Nz[^a-zA-Z0-9]r  z.js-)r7  r  subr,   r^  s        r{  _player_js_cache_keyYoutubeIE._player_js_cache_key  sD    *.*N*Nz*Z'	Kff_c:k53QRGAgY''r~  c                 ~    [         R                  " SU5      =n(       a  UR                  S5      $ [        SU< 35      e)Nz"/s/player/(?P<id>[a-fA-F0-9]{8,})/r\   zCannot identify player )r  r  r  r   )r  r  ms      r{  r3  YoutubeIE._extract_player_info  s:    		?LL1L774= 6znEFFr~  c           	          U R                  U5      nX@R                  ;  a.  U R                  X!USU 3SU S3S9nU(       a  XPR                  U'   U R                  R                  U5      $ )NzDownloading player zDownload of z failed)r  r   r  )rc  r  _download_webpager  )rz  r  r  r  player_js_keycodes         r{  _load_playerYoutubeIE._load_player  sx    11*= 0 00))E*=/:&}oW= * ?D 26  /##M22r~  use_disk_cachec                   SU 3U R                  U5      /[        [        U5      Q7nXPR                  ;   a  U R                  U   $ U(       d  g U R                  R                  US   [        USS  6 SS9nU(       a  X`R                  U'   U$ )Nyoutube-r   r   z
2025.07.21)min_ver)rc  mapr/   r  cacheloadr#   )rz  namer  ro  
cache_keyscache_iddatas          r{  _load_player_data_from_cache&YoutubeIE._load_player_data_from_cache  s    tf%t'@'@'LlsS^`jOkl)))%%h//zzx{M8AB<,HR^_+/x(r~  c                    SU 3U R                  U5      /[        [        U5      Q7nX`R                  ;  a@  XR                  U'   U(       a*  U R                  R                  US   [        USS  6 U5        g g g )Nrq  r   r   )rc  rs  r/   r  rt  storer#   )rz  ry  rv  r  ro  rw  rx  s          r{  _store_player_data_to_cache%YoutubeIE._store_player_data_to_cache  sx    tf%t'@'@'LlsS^`jOkl---+/x(

  !mXab\.JDQ  .r~  c           
         U R                  5       S   nU(       a  [        U5      $ [        US[        145      nU(       a  U$ U(       d&  SnU(       a  [	        U5      eU R                  U5        gU R                  SU5      =n(       a  U$ U R                  XUS9=n(       a6  [        U R                  SUSSUS	95      nU(       a  U R                  USU5        U$ )
zZ
Extract signatureTimestamp (sts)
Required to tell API what sig/player version is in use.
r   STSz5Cannot extract signature timestamp without player urlNstsr  z2(?:signatureTimestamp|sts)\s*:\s*(?P<sts>[0-9]{5})zJS player signature timestamp)r  r  )
r'  r  r2   r"   r   r  rz  rl  rK  r~  )	rz  r  r  ytcfgr  player_sts_overrider  	error_msgrk  s	            r{  _extract_signature_timestamp&YoutubeIE._extract_signature_timestamp  s     #99;A>*++55;-"89JOI$Y//	* 33E:FF3FJ$$X$GG4Gd00Et/uE 1 K LC 00eZH
r~  c           	        ^ SmSR                  U4S j[        S5       5       5      n[        S5       GHP  u  pEU(       a  SOSn[        USUS4[        S	9nU(       d  U R                  S
U S35          g [        R                  R                  U5      n[        R                  R                  UR                  5      n	[        [        U	R                  S5      =(       d    S/S   5      S-
  5      /n
U	R                  S/U/U
SS.5        U(       a  U	R                  SU
S.5        [        R                  R                  UR!                  [        R                  R#                  U	S5      S95      nU R%                  XqSU S3SSS9  GMS     g )Nz@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_r   c              3   ^   >#    U  H"  nT[         R                  " S S5      S-     v   M$     g7f)r      ?   N)randomrandint)r  r  CPN_ALPHABETs     r{  r  *YoutubeIE._mark_watched.<locals>.<genexpr>  s&     SAl6>>!S#9B#>?s   *-   )videostatsPlaybackUrlvideostatsWatchtimeUrlzfully playbackTrackingbaseUrlr  zUnable to mark watchedlenz1.5r   r   2
detailpage)vercpncmtel)stetT)queryzMarking zUnable to mark watchedFr  )r6  r  	enumerater!   r:   r  rY  rZ  r[  r*   r  rD  floatr  update
urlunparse_replace	urlencoderi  )rz  r  player_responsesr  is_fullkeylabelr   
parsed_urlr  video_lengthr  s              @r{  _mark_watchedYoutubeIE._mark_watched  sq    ZggSrSS%&YZLG 'HRE,/A3	.R*57C##oeWG$DE..s3J&&z'7'78B  rvve}'?&C Dq HIJLIIuu#"	   		& 
 ,,))##&,,*@*@T*J#KMC ""%8( # 7? [r~  c              #     >#    [         R                  " SU5      nU(       a/  U R                  UR                  S5      U 5      v   U R                  e[
        TU ]  X5       S h  vN   [         R                  " SU5       H   nU R                  [        U5      X5      v   M"     [         R                  " SU5       H  nU R                  US   XS   5      v   M     g  Nx7f)NzZ<link rel="alternate" href="(?P<url>https://www\.youtube\.com/watch\?v=[0-9A-Za-z_-]{11})"r   z(class="lazyYT" data-youtube-id="([^"]+)"z(?x)<div[^>]+
                class=(?P<q1>[\'"])[^\'"]*\byvii_single_video_player\b[^\'"]*(?P=q1)[^>]+
                data-video_id=(?P<q2>[\'"])([^\'"]+)(?P=q2)r  )	r  r  
url_resultr  StopExtractionr  _extract_from_webpagefindallr5   )r  r   r4  mobjid_rf  r  s         r{  r  YoutubeIE._extract_from_webpage
	  s     
 yyi ..E!2C88$$$70>>> ::I7SC..c!2C== T  ?@GIA ..2rU33I 	?s   A C#C$A9Cc                 R    U R                  U5      nU(       d  [        SU 35      eU$ )NzInvalid URL: )get_temp_idr   )r  r   r  s      r{  
extract_idYoutubeIE.extract_id"	  s*    ??3' =!677r~  c                 H    [        US[        S9nU R                  US S US9$ )N)playerOverlaysplayerOverlayRendererdecoratedPlayerBarRendererr  	playerBarchapteredPlayerBarRendererr   r  c                 *    [        [        U S5      SS9$ )N)chapterRenderertimeRangeStartMillis  scale)r   r2   chapters    r{  r  7YoutubeIE._extract_chapters_from_json.<locals>.<lambda>2	  s    =W&QRZ^,`r~  c                      [        U S[        S9$ )N)r  r`   
simpleTextr  )r2   rD  r  s    r{  r  r  4	  s    <CSV,Xr~  )start_functiontitle_functionrl   )r2   r  _extract_chapters_helper)rz  ry  rl   chapter_lists       r{  _extract_chapters_from_json%YoutubeIE._extract_chapters_from_json)	  sE    #  "	# ,,`X -  	r~  c           	         ^ ^^^ [        US[        S9nU 4S jmU 4S jm[        [        S UUUU 4S jU 5       5      / 5      $ )N)engagementPanels."engagementPanelSectionListRenderercontentmacroMarkersListRenderercontentsr  c                 :   > [        TR                  U S5      5      $ )NtimeDescription)r(   	_get_textr  rz  s    r{  r  CYoutubeIE._extract_chapters_from_engagement_panel.<locals>.<lambda>=	  s    ~dnnWN_6`'ar~  c                 (   > TR                  U S5      $ )Nr`   )r  r  s    r{  r  r  >	  s    w(Hr~  c              3   `   >#    U  H#  nTR                  [        US 5      TTT5      v   M%     g7f)).macroMarkersListItemRendererN)r  r2   )r  r  chapter_timechapter_titlerl   rz  s     r{  r  DYoutubeIE._extract_chapters_from_engagement_panel.<locals>.<genexpr>@	  s=      "* ) )),xAf*g*6xQ Q(s   +.)r2   r  r  filter)rz  ry  rl   content_listr  r  s   ` ` @@r{  '_extract_chapters_from_engagement_panel1YoutubeIE._extract_chapters_from_engagement_panel8	  sM    #~  bHF4 "* )"* + -/0 	0r~  c                 p    [        USSSS SSSSS	S
[        SS914S 1S[        14S.4
5      =(       d    S $ )NframeworkUpdatesentityBatchUpdate	mutationsc                 $    US   S   S   S   S:H  $ )NpayloadmacroMarkersListEntitymarkersList
markerTypeMARKER_TYPE_HEATMAPr  r  rV  s     r{  r  ,YoutubeIE._extract_heatmap.<locals>.<lambda>H	  s    9&>?N|\`uur~  r  r  r  markers.startMillisr  r  c                 B    [        U S   5      [        U S   5      -   S-  $ )Nr  durationMillisr  )r  r  s    r{  r  r  K	  s$    Am,<(=AFVDW@X(X\`'`r~  intensityScoreNormalized)rv   rn   value)r2   r   )rz  ry  s     r{  _extract_heatmapYoutubeIE._extract_heatmapE	  s]    D 3[u/	3,}4/H.IJ`a4}oFQ#   	r~  c                    [        USS[        145      n[        USS[        145      =n(       d  g [        USS[        145      n[        USS[        145      =(       d    SnUU=(       d    SS	.[        USS
S
[        14SS[        14SSU R
                  14SS[        14SS[        14SS[        14SS[        14SSSS[        S5      14S.SS9EUc  S OUR                  S5      S:H  UU R                  U5      S.E$ )Nr  commentEntityPayload
properties	commentId#engagementToolbarStateEntityPayloadpublishedTimer   root)r\   parentr  toolbarlikeCountA11yauthor	channelIddisplayNameavatarThumbnailUrl	isCreator
isVerifiedchannelCommandinnertubeCommandbrowseEndpointcanonicalBaseUrlcommandMetadatawebCommandMetadatar   r.  )textrq   	author_idr  author_thumbnailauthor_is_uploaderauthor_is_verified
author_urlFrC  
heartStateTOOLBAR_HEART_STATE_HEARTED)is_favorited
_time_textry   )r!   r  r2   rD  r'   ucid_or_noner:   boolr;   r  _parse_time_text)rz  entitiesr  comment_entity_payload
comment_idtoolbar_entity_payload	time_texts          r{  _extract_commentYoutubeIE._extract_commentO	  sY   !*8iAWZ^Y_5`!a*+ALR]`c_dCeff
f!*8iAfimhn5o!p !7,Z]Y^9_`fdf	 &
 1%y)cUC(/K=I&d6G6G5HI#]SE:%-/Ck]$S'/tf&E'/v&F')9;M P56794 
 &<%CT377EIff#..y9%
 	
r~  c                    UR                  S5      nU(       d  g UU R                  US5      U R                  US5      [        USSSU R                  145      U R                  US5      [        USS	S
S[
        145      U=(       d    SS.nU R                  US5      =(       d    SnU R                  U5      nUR                  UUS.5        [        S[        US[        SS95      US'   [        US5      nUb  XtS'   [        US[        S9nUb  SU;   US'   U R                  [        US5      /5      n	U R                  U	[        R                  5      (       a  SUS'   [        US5      n
U
(       a  SUS '   U$ )!Nr  contentText	voteCountauthorEndpointr  browseId
authorTextauthorThumbnail
thumbnailsr  r   r   )r\   r  rq   r  r  r  r  publishedTimeTextr   )r  ry   r.  )r+  r  Fr  rC  r  authorIsChannelOwnerr  )actionButtonscommentActionButtonsRendererr  creatorHeartr  authorCommentBadgeTr  pinnedCommentBadge	is_pinned)r  r  
_get_countr2   r  r:   r   r  r;   rD  r  _extract_badges
_has_badger   VERIFIED)rz  comment_rendererr  r#  infor%  ry   r  comment_abrbadgesr8  s              r{  _extract_comment_oldYoutubeIE._extract_comment_oldl	  s   %))+6
 NN#3]C//*:KH%&69IK[]gjnj{j{i|8}~nn%5|D ,-=@QS_acejmxly?z {&
 NN#35HIOR	)))4	#"
 	 %%|4D Gk!5(23\
 **:<RS));%&"O_ce"#1[#@D %%|4DFZ'[&\]??69#5#566)-D%& !13GH	 $Dr~  c              #     ^ ^^^^^^^^^#    U 4S jmUU U4S jnUUUUUU UUU4	S jmT(       d  SS SSS[        5       [        5       S.mS T R                  S5      S/S	-  -    5       tnmmmmn	TU:  a  g T R                  U5      n
S nS
nUS L nU(       a)  U
(       d"  T R                  T R	                  T5      5      n
SnSn[
        R                  " S5       GHL  nU
(       d    GOCT R                  TT R                  U5      S9nSTS    STS    S3nUS:X  a  U(       a  SnO1STS   U4-  nO&SR                  U(       a  SOSU(       a  SOSUU5      nS nU(       d$  TS   S:X  a	  TS   S:X  d  / UQSPU(       a  SOSP/n T R                  S U
STUUUS9nS
nS n
[!        US$S%S&S["        145      n[!        X[$        / S'9 H_  nU(       a  U" U5      n
S
nU
(       a    GM  M!  T" UUXF5       H  nU(       d        g Uv   M     T R                  S(U05      n
U
(       d  M]    GMJ     GMO     T R'                  US)S*S+9nU(       a2  U(       d*  TS   S:X  a   T R                  S,U 3TSS-9  T R(                  eg g g ! [         a`  nS[        U5      R                  5       ;   a=  U(       a6  T R                  S5      S ;   a  T R                  S!5         S nA  g [        S"SS#9ee S nAff = f7f).Nc                 0   > TR                  U S/5      S   $ )Nr   r   )rw  )crz  s    r{  r  ,YoutubeIE._comment_entries.<locals>.<lambda>	  s    $*A*A!bT*J1*Mr~  c                 2  >^ S nU  GH  n[        US5      nT
R                  USS5      nUb  UTS'   T
R                  SU S35        [        T	" S5      S:g  5      m[	        UU4S	 j[
        5      =(       d    0 nUR                  S
5      =(       d    0 nT
R                  U5      =(       d    T
R                  U5      nU(       d  M  [        UR                  S5      5      nU(       d
  TS:X  a  SOSnT
R                  SUR                  5        35          U$    U$ )NcommentsHeaderRenderer	countTextcommentsCount	est_totalzDownloading ~z	 commentscomment_sorttopc                     > U S   S   S   T   $ )NsortMenusortFilterSubMenuRenderersubMenuItemsr  )r  comment_sort_indexs    r{  r  DYoutubeIE._comment_entries.<locals>.extract_header.<locals>.<lambda>	  s    a
m,GHXYklr~  serviceEndpointr`   r   ztop commentsznewest firstzSorting comments by )r2   r9  	to_screenr  r4   r  r  _extract_continuation_ep_data_extract_continuationr/   lower)r  _continuationr  comments_header_rendererexpected_comment_countsort_menu_itemsort_continuation_ep	sort_textrR  get_single_config_argrz  trackers           @r{  extract_header2YoutubeIE._comment_entries.<locals>.extract_header	  s8    M#+7AY+Z()-,k?*L& *5+AGK(NN]3I2J)#TU%()>~)NRW)W%X"!(,lnr"t "zwy  (6'9'9:K'L'RPR$ $ B BCW X  !G\`\v\v  xF  ]G$'(:(:7(CD	 2D2I~I!5ioo6G5HIJ  1 $0 ! r~  c              3   0  >	^#    U(       d  STS'   TU:  a  g U  GHt  nU(       d  TS   T:  a  S v   [        US 5      nU(       d&  [        XT4SS//[        0 S9nTR                  Xb5      nO[	        USS[        145      =(       d    [	        US[        145      n[	        US	[
        145      mT(       d  M  [	        UU4S
 j5      n	TR                  X5      nU(       a  [	        US[
        145      S LUS'   U(       d  M  US   n
UR                  S5      (       a  TS   R                  U
5        U
TS   ;   aF  U
TS   ;   a  UR                  S5      (       d  GM?  TR                  SU(       a  SOS S35        S v     g TS   R                  U
5        TS==   S-  ss'   TU(       a  SOS==   S-  ss'   Uv   [        US [        5      nU(       d  GM  [	        USS[        145      n[	        US 5      =n(       a5  T" XXS-   5       H  nU(       d  M  Uv   M     [	        US 5      (       d  GM  TS==   S-  ss'   TR                  UTTU
TUS-   S9n[        R                  " U[        T[        STTS   -
  5      5      5       S h  vN   GMw     g  N
7f)Nr   current_page_threadtotal_parent_commentsc                     U S   $ NcommentThreadRendererr  r  s    r{  r  DYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s
    QG^E_r~  commentRenderer)commentrj  r  defaultcommentViewModel)
commentKeytoolbarStateKeyc                    > US   T;   $ )N	entityKeyr  )r  rV  comment_keyss     r{  r  ri  	  s    !K.\hJhr~  
pinnedTextr8  r\   pinned_comment_idsseen_comment_idsz?Detected YouTube comments looping. Stopping comment extraction zfor this threadr   z$ as we probably cannot get any more.running_totalr   total_reply_commentsc                     U S   S   $ )NrepliescommentRepliesRendererr  r  s    r{  r  ri  	  s    q|D\7]r~  
subThreads.c                     US   $ rg  r  r  s     r{  r  ri  	  s
    JaHbr~  c                     US   $ )NcontinuationItemRendererr  r  s     r{  r  ri  
  s
    QGaEbr~  )r  r`  depth)r4   r!   r  rA  r2   rD  r&  r  r  r  _comment_entries	itertoolsisliceminr  )r  entity_payloadsthread_parentthread_depthr  comment_thread_rendererr=  rk  
view_modelr!  r#  comment_replies_renderer
subthreadsthreadsentrycomment_entries_iterrs  extract_thread	max_depthmax_parentsmax_repliesmax_replies_per_threadrz  r`  r  r  s                   @r{  r  2YoutubeIE._comment_entries.<locals>.extract_thread	  s     12-.<'#$1H)I[)X*1';_*`' ''00:>OQo=p<q&*B(8$ #778HXG
 %%<?QSehlgm>no O'2Dtf1MN  $0
=^ad`e<f#gL' +O=hiH"33HLG/;JX[W\H]/^fj/j,$T]
;;{++0155jA );!<<!W-A%BB7;;WbKcKc !''Y0=,2FFjlm ./33J?(A-(-.E\]abb] ,3+-]_c,e( ,+!-.FWZ]a\bHc!dJ".z;b"ccwc%3GjijZj%kE$u&+ &l  ,J8bcc %12a72+/+@+@0%)7,QRBR ,A ,T(  )//0Dc.A{WMcEd7d0eGg  h h hQ $Phs   GJ<JA5J	J
Jr   )rw  rK  rd  re  rx  rv  ru  c              3   R   #    U  H  n[        U[        R                  S 9v   M     g7f)rm  N)r"   sysmaxsizer  ps     r{  r  -YoutubeIE._comment_entries.<locals>.<genexpr>
  s!      Zm9kAK3;;/9ks   %'max_commentsr   r#  FT)onResponseReceivedEndpoints.)reloadContinuationItemsCommandappendContinuationItemsActioncontinuationItems)r  visitor_data(rw  z/~rK  )z$Downloading comment section API JSONz3    Downloading comment API JSON reply thread %d %srd  z+{}Downloading comment{} API JSON page {} {}z       z replies.rH  )rh  rn  rj  r  )item_idr  epr  r  r   check_get_keyszincomplete dataignoreerrors)Tonly_downloadzReceived incomplete data for a comment reply thread and retrying did not help. Ignoring to let other comments be downloaded. Pass --no-ignore-errors to not ignore.zyIncomplete data received for comment reply thread. Pass --ignore-errors to ignore and allow rest of comments to download.expectedr  r  r  rl  r  )r  .messageRendererr  r   max_runszYoutube said: r  r  )r  rw  rW  _build_api_continuation_query_generate_comment_continuationr  countgenerate_api_headers_extract_visitor_datar   _extract_responser   rD  rX  	get_paramr  r2   r  r  r  CommentsDisabled)rz  root_continuation_datar  r  r  r`  r  ra  _max_commentsr  continuationresponseis_forced_continuationis_first_continuationcontinuation_items_pathpage_numr  comment_prog_strnote_prefixr  er  continuation_itemsr  messager  r_  r  r  r  r  s   ` `` `                   @@@@@@r{  r  YoutubeIE._comment_entries	  s     M	!8P	h P	hf !"!'()*()$'E&)eGZm9=9P9PQ_9`dfcgjkck9kZmV{K1GUV u112HI!& &$ 
  ==d>a>abj>klL%)"#J!*H//e$JdJdemJn/oG!"7?#;"<Bw{?S>TTUV1}("HK"W 568H[J #JK LRR!'IRv2.0 "N)7;3G13LQXYhQimnQn#N$; #NS #N0E,  LL#N "O11 UG+#1 2 3* &+"L$X0BDWYdfilpkq/rsI&28dhrt&u"(#12D#EL,1)#+,>	6YE K Z  $99:GY:Z[< 'va +@ ..!79epq.r6go&>!&C.	 :XY]^''' 'D67K " 
 %A66~~n59PP++st ,e%)+ + !s?   E5K I3BK AK 3
K=A
KK KKK c                 x    SU  SU  S3n[         R                  " UR                  5       5      R                  5       $ )zJ
Generates initial comment section continuation token from given video id
zz2'""z0 x0 Bcomments-section)base64	b64encodeencodedecode)r  tokens     r{  r  (YoutubeIE._generate_comment_continuationu
  s:    
 !
*?zImn/6688r~  c                    ^ ^^ U UU4S jn[        T R                  SS/5      S   5      n[        R                  " U" U5      SU5      $ )zEntry for comment extractionc           	   3      >#    [        S [        U S0 S9 5       S 5      nTR                  UTT5       S h  vN   g  N7f)Nc              3   T   #    U  H  nUR                  S 5      S:X  d  M  Uv   M      g7f)sectionIdentifiercomment-item-sectionNr  )r  items     r{  r  IYoutubeIE._get_comments.<locals>._real_comment_extract.<locals>.<genexpr>
  s-      L!a88/04JJ !as   (	().itemSectionRendererr  )r  r2   r  )r  rendererrz  r  r  s     r{  _real_comment_extract6YoutubeIE._get_comments.<locals>._real_comment_extract
  sH      L!-h8T^`!aLMQSH ,,XuhGGGs   3><>r  r   r   )r"   rw  r  r  )rz  r  r  r  r4  r  r  s   ```    r{  _get_commentsYoutubeIE._get_comments}
  sE    	H #4#:#:>B4#PQR#ST 5h ?LQQr~  c                      SSS.$ )NT)contentCheckOkracyCheckOkr  r  r~  r{  _get_checkok_paramsYoutubeIE._get_checkok_params
  s    "&t<<r~  c                 z    SS0nUb  XS'   U(       a  X4S'   SU0nU(       a  SS0US'   S	U0U R                  5       E$ )
Nhtml5PreferenceHTML5_PREF_WANTSsignatureTimestampencryptedHostFlagscontentPlaybackContextpyvTadPlaybackContextplaybackContext)r  )r  r  use_ad_playback_contextencrypted_contextcontextplayback_contexts         r{  _generate_player_context"YoutubeIE._generate_player_context
  sw     1
 ?,/(),=() %g
 #t501
 /
%%'
 	
r~  clientr  c           	         U R                  S/ [        SS9nU GH	  nUR                  S5      u  pVnU(       d  U R                  SU S3SS9  M5  UR                  S5      u  pn	UR	                  5       U:w  a  M_  U(       d.  U R                  S	U S
3SS9  [        R                  R                  n	U	R	                  5       UR                  :w  a  M   [        R                  " [        R                  " [        R                  R                  U5      5      5      R                  5       s  $    g ! [         R"                  [$        4 a    U R                  SU SU	 S3SS9   GMD  f = f)Npo_tokenT)ie_key	casesense+zPInvalid po_token configuration format. Expected "CLIENT.CONTEXT+PO_TOKEN", got ""r  .zpo_token configuration for zo client is missing a context; assuming GVS. You can provide a context with the format "CLIENT.CONTEXT+PO_TOKEN"z#Invalid po_token configuration for z	 client: z/ PO Token should be a base64url-encoded string.)rw  rH   	partitionr  rX  r  r
   GVSr  r  urlsafe_b64encodeurlsafe_b64decoderY  rZ  unquoter  binasciiError
ValueError)
rz  r  r  po_token_strs	token_strpo_token_metasepr  po_token_clientpo_token_contexts
             r{  _get_config_po_tokenYoutubeIE._get_config_po_token
  sv   //
By\`/a&I+4+>+>s+C(M##@@I{!MX\ $ ^ 5B5L5LS5Q2O"2$$&&0  1& :Z Z" ! $ $3#6#6#<#< %%'7==8//0H0HI]I]^fIg0hipprr5 '6 NNJ/ ##9&'((WY" $ $ s   AD((1EErZ   c                    Sn[        USSS[        R                  R                  145      nS[        US5      ;   a  U R	                  U SU S3S	S
9  S	nU(       aH  U[
        R                  :X  a4  U(       d-  U R                  (       d  U(       d  U R                  SU S3S	S
9  gU[
        R                  :X  a  U(       d  U R                  SU S35        gU R                  X5      nU(       au  U(       aH  U[
        R                  :X  a4  U(       d-  U R                  (       a  U(       d  U R                  SU S35        U R	                  U SUR                   SU S35        U$ U(       aA  U[
        R                  :X  a-  U(       d&  U R                  (       a  U R                  SU S3S	S
9  gU R                  " SUUR                  UUUUUUU	U
US.UD6nU(       a&  U R	                  U SUR                   SU S35        U$ g)a&  
Fetch a PO Token for a given client and context. This function will validate required parameters for a given context and client.

EXPERIMENTAL: This method is unstable and may change or be removed without notice.

@param client: The client to fetch the PO Token for.
@param context: The context in which the PO Token is used.
@param ytcfg: The ytcfg for the client.
@param visitor_data: visitor data.
@param data_sync_id: data sync ID.
@param session_index: session index.
@param player_url: player URL.
@param video_id: video ID.
@param webpage: video webpage.
@param required: Whether the PO Token is required (i.e. try to fetch unless policy is "never").
@param kwargs: Additional arguments to pass down. May be more added in the future.
@return: The fetched PO Token. None if it could not be fetched.
FrA  .serializedExperimentFlagstrue).html5_generate_content_po_tokenr  z;: Detected experiment to bind GVS PO Token to video ID for z clientTr  z!Unable to fetch GVS PO Token for zz client: Missing required Visitor Data. You may need to pass Visitor Data with --extractor-args "youtube:visitor_data=XXX"Nz$Unable to fetch Player PO Token for z" client: Missing required Video IDzGot a GVS PO Token for z client, but missing Data Sync ID for account. Formats may not work.You may need to pass a Data Sync ID with --extractor-args "youtube:data_sync_id=XXX"z: Retrieved a z PO Token for z client from configz client: Missing required Data Sync ID for account. You may need to pass a Data Sync ID with --extractor-args "youtube:data_sync_id=XXX")r  r  r  r  data_sync_idsession_indexr  r  video_webpagerequired_gvs_bind_to_video_idr  )r2   rY  rZ  r*   r  r
   r  is_authenticatedr  PLAYERr  r  _fetch_po_token)rz  r  r  r  r  r	  r
  r  r  r4  r  r  gvs_bind_to_video_idexperimentsconfig_po_tokenr  s                   r{  fetch_po_tokenYoutubeIE.fetch_po_token
  sC   2  %"5(#/JV\\MbMbLc+e f\+/[\\* ##)('3>B  D $( 
 7o&9&99 )>)>G[3F8 <e fqu   w o,,,X6vh>`ac33FD w/*=*==$)>)>G[##-fX 6k lm znU[T\\opq"" '_%8%88RVRgRg3F8 <g hsw   y '' 
MM%%'!!"6
 
 znU[T\\cdeO r~  c           	         UR                  S5      nU R                  SS/[        S9S   nUS;  a  SnUS:X  d  US:X  a  UR                  S	S
5      (       d  g U R                  S5      R	                  5       nU R
                  R                  R	                  5       n[        U5        [        Xe5        U R                  S US9n[        S%0 S[        U5      _S[        US5      _SU_SU_SUR                  S5      _SUR                  S5      _SUR                  S5      _SU R                  _SUR                  S5      _SUR                  S5      _SUR                  S5      _SU R
                  R                  _SUR                  SS
5      _S[        SU5      =(       d    [        SU 3U5      _SU_SU R                  S5      _S U R                  S!5      (       + _S"U R                  S#5      _S$S
_6nU R                   R#                  U5      $ )&Nr  	fetch_potr   )r  r   )neverautoalwaysr  r  r  Fhttp_headers)default_clientinnertube_context)r  INNERTUBE_CONTEXTinnertube_hostinternal_client_namer
  r  r  r  r  r	  r  request_cookiejarr  request_proxyr.  zhttps://request_headersrequest_timeoutsocket_timeoutrequest_verify_tlsnocheckcertificaterequest_source_addresssource_addressbypass_cacher  )r  rw  rH   r  r  _downloaderproxiesr=   r>   _select_api_hostnamer   r   r2   r  	cookiejarr?   r  get_po_token)	rz  r  r  r  fetch_pot_policyr  r,  r  pot_requests	            r{  r  YoutubeIE._fetch_po_token!  s=   **Y'  22;Y2WXYZ#>>%' F*

:u55 ..0557""**//1gg'2242O$ 
"7+
*63QR
 *
 "(	

 !**_5
 zz,/
 !**_5
 "22
  N3
  N3
 ZZ
+
 #..88
 #)**-De"L
$ 6@ F(>*: ;WE'
* $+
, !NN+;<-
. $(>>2F#GG/
0 $(>>2B#C1
4 5
: !!..{;;r~  c                 n   ^ [        U S5      (       a  g[        U S5      mSn[        U4S jU 5       5      $ )N)playabilityStatusdesktopLegacyAgeGateReasonT)r4  )r  reason)zconfirm your agezage-restrictedinappropriateage_verification_requiredage_check_requiredc              3   @   >#    U  H  nT  H	  o!U;   v   M     M     g 7fr  r  )r  r  r6  reasonss      r{  r  )YoutubeIE._is_agegated.<locals>.<genexpr>a  s!     ]6F(U\6v%U\%6F   )r2   any)r  AGE_GATE_REASONSr;  s     @r{  _is_agegatedYoutubeIE._is_agegatedW  s=    )\]]0[\
 ]6F]]]r~  c                      [        U S5      S:H  $ )N)r4  r  
UNPLAYABLEr2   )r  s    r{  _is_unplayableYoutubeIE._is_unplayablec  s    O-LMQ]]]r~  c
                 Z   U R                  UUUU R                  X45      U R                  U5      S   =(       d    U R                  X6U5      U R                  U5      S   =(       d    U R	                  X6U5      S9n
SU0n[        [        [        U5      S   S[        145      nU R                  SU/SS9S   =n(       a  XS	'   U	(       a  S
U	0US'   U(       a  U R                  X%USS9OS nU R                  SS/5      S   S:g  =(       a    [        [        US[        145      nS n[        U5      S   S:X  a  [        US5      nUR                  U R                  UUUS95        U R                  USUXJSUSR                  UR!                  SS5      R#                  5       5      S9=(       d    S $ )Nr   r   )r  r  r  r
  delegated_session_iduser_session_idvideoIdPLAYER_PARAMSplayer_paramsTr  r   poTokenserviceIntegrityDimensionsFr  r  falseSUPPORTS_AD_PLAYBACK_CONTEXTr  embedded)rA  ,WEB_PLAYER_CONTEXT_CONFIG_ID_EMBEDDED_PLAYERr  )r  r  r  playerzDownloading {} player API JSONr   )r  r  r  r  r  r  r  r   )r  _extract_session_index_parse_data_sync_id_extract_delegated_session_id_extract_user_session_idr2   r   r   rD  rw  r  r  r  r  r  r   rT  strip)rz  r  r  webpage_ytcfgplayer_ytcfgr  
initial_prr  r	  r  r  yt_query
default_pprL  r  r  r  s                    r{  _extract_player_response"YoutubeIE._extract_player_responseg  s   ++!%55mR((6q9 _55mQ]^ ((6q9 Z00LY , 
  x
 " 7 ? BOVYUZ[]
 33Oj\]a3bcdee=e!.X6?5JH12eod//m[`/auy ##$=yI!LPWW b.9WZ^Y_0`a 	  !"6*1-; ,\ <t !u 	))(?"3 * 5	6 %%t!188S9Q9W9W9YZ	 & 
 
 	r~  c                    / n/ n[        S U R                  R                  R                  5        5       5      nU(       a  U R                  O;U R
                  (       a  U R                  OU(       d  U R                  OU R                  n[        S [         5       S SS9nU R                  S5       H  n	U	S:X  a  UR                  U5        M  U	S:X  a  UR                  U5        M5  U	R                  S	5      (       a  UR                  U	S
S  5        Ma  X;  a  U R                  SU	 S35        M}  UR                  U	5        M     U(       d.  U(       d'  XpR                  :X  a  U R                  S[          S3SS9  U(       d  UR                  U5        U H  n
X;   d  M
  UR#                  U
5        M     U(       d
  [%        SSS9eU R
                  (       a  UR'                  S5      (       d  U R)                  U5      (       a  SU;  a  UR                  S5        U V	s/ s H  n	[        U	   S   (       a  M  U	PM     nn	U H(  n	U R                  SU	 S3SS9  UR#                  U	5        M*     [+        U5      $ s  sn	f )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  is_availabler  s     r{  r  3YoutubeIE._get_requested_clients.<locals>.<genexpr>  s     "c=b>>#3#3=b   c              3   :   #    U  H  oS S S:w  d  M  Uv   M     g 7f)Nr   r  r  )r  r  s     r{  r  rf    s     I"3bqzS7HVV"3s   	c                     [         U    S   $ )Npriority)r   )r  s    r{  r  2YoutubeIE._get_requested_clients.<locals>.<lambda>  s    08Dr~  T)r  reverser  rm  allra  r   zSkipping unsupported client "r  a  No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add  --js-runtimes RUNTIME[:PATH]  to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See  z  for details on installing oner  z%No player clients have been requestedr  is_music_url	web_musicSUPPORTS_COOKIESzSkipping client "z#" since it does not support cookies)r>  r  	providersvalues_DEFAULT_PREMIUM_CLIENTSr  _DEFAULT_AUTHED_CLIENTS_DEFAULT_JSLESS_CLIENTS_DEFAULT_CLIENTSsortedr   rw  extend
startswithappendr  r   remover   r  rn  r%   )rz  r   r  is_premium_subscriberrequested_clientsexcluded_clientsjs_runtime_availabledefault_clientsallowed_clientsr  excluded_clientunsupported_clientss               r{  _get_requested_clients YoutubeIE._get_requested_clients  sZ   ""cT=O=O=Y=Y=`=`=b"cc-BD))151F1F--5I--&&	 	 !I"3IDdT --o>F"!((95!((9""3'' ''qr
3.##&CF81$MN!((0 ? "%5?NjNj;j &&EG SW	   X !$$_5/O3!((9  0 ! !HSWXX  !!.11T5F5Fs5K5KQ\duQu!((5 &7#%66>OPV>WXj>k%6   # .##&7x?b$cos#t!((0 . +,,#s   I32I3c                 *    [        US5      =o2:w  a  U$ g )N)r  rJ  rD  )rz  prr  pr_ids       r{  _invalid_player_response"YoutubeIE._invalid_player_response  s"     ""&ABBEOL Pr~  c                   ^^# S nU(       a   U R                  U R                  UU S3USS9n/ n/ n	U(       a-  U R                  Xr5      (       d  UR                  0 UESS 0E5        [	        T5      m#TS S S2   mU#U4S jn
SnS =n=p0 nT(       Ga  Sn[        TR                  5       5      u  nnnUU:X  a  UO0 nSU R                  S5      ;  a!  UU:w  a  U R                  UU5      =(       d    UnU=(       d    U R                  UUUS	9nU R                  U5      R                  S
5      nSU R                  S5      ;   a  SnS nU(       d!  U(       d  U(       a  U R                  U5      nSnS nUU:X  a  SU R                  ;  a  UnU=(       d    U R                  XWU5      nU=(       d    U R                  XWU5      nUUUU R                   (       a  UOS U(       a  UOS UU R#                  UU5      U=(       d    U R                  U5      S.nU R                  U5      S   nU(       a  S OBU R$                  " S,S[&        R(                  0UDSUR*                  =(       d    UR,                  0D6n[.        R0                  " U R$                  4S[&        R2                  0UD6n[.        R0                  " U R$                  4S[&        R4                  0UD6n U=(       d     U R7                  UUU=(       d    UUUUUUUS9	nU R                  UU5      =n(       a  UUU'   GO	U(       Ga  [=        U=(       d    U R                  U5      S5      nUR?                  S0 5      nUU[@        '   UU[B        '   [E        U5      U[F        '   UU[H        '   UU[J        '   UU[L        '   U RO                  UUU5      U[P        '   [=        USS[R        145       H0  n UU [@        '   UU [B        '   UU [L        '   [E        U5      U [F        '   M2     U(       a  U	R                  U5        OUR                  U5        US:X  ad  U RU                  U5      (       aN  U(       aG  SU;   aA  [W        S U RX                  RZ                  R]                  5        5       5      (       a  U
" S5        U R_                  U5      (       a  US:w  a  U
" SU 35        U R_                  U5      (       a0  U R                   (       d  U Ra                  U SU Rb                   3SS9  US:H  =(       a    U RU                  U5      n!U R                   (       a8  U R_                  U5      (       d  U!(       a  U Ra                  U S3SS9  U
" S5        [=        USS [d        145      n"U"S!;  a  U Rg                  U S"U S#U" 35        T(       a  GM  URi                  U	5        U(       ae  U R;                  S$S%Rk                  U5       S&S%Rk                  [	        UR]                  5       5      5       S'U S(35        U(       d
  [9        S)SS*9e X4$ U(       d  [9        S+5      eX4$ ! [8         a  nU R;                  U5         S nAGM  S nAff = f)-Nz client initial player responseFr  streamingDatar  c                     > U  HG  n[        U5      S   nU[        ;   d  M  UT;  d  M%  TR                  U5        TR                  U5          g   g)z>Append the first client name that exists but not already used r   N)r   r   rz  r  )client_namesr  actual_clientall_clientsclientss      r{  append_client:YoutubeIE._extract_player_responses.<locals>.append_client  sH    + 7 DQ G $55$K7{3#6  ,r~  r	  r  r>  REQUIRE_JS_PLAYERjsTr  )r  r  r  r	  r  r4  r
  r  PLAYER_PO_TOKEN_POLICYr  r  )r[  r\  r  r]  r  r	  r  r  r  adaptiveFormats.rU   zmade for kidsc              3   @   #    U  H  oR                  5       v   M     g 7fr  rd  r  s     r{  r  6YoutubeIE._extract_player_responses.<locals>.<genexpr>S  s     X2WQ((2Wrg  web_embeddedzweb_embedded.zT: This video is age-restricted; some formats may be missing without authentication. r  zm: This video is age-restricted and YouTube is requiring account age-verification; some formats may be missingrX   r4  r  )OKLIVE_STREAM_OFFLINEAGE_CHECK_REQUIREDAGE_VERIFICATION_REQUIRED: z% player response playability status: zSkipping player responses from r0  z* clients (got player responses for video "z" instead of "z")zLAll player responses are invalid. Your IP is likely being blocked by Youtuber  z%Failed to extract any player responser  )6_search_json_YT_INITIAL_PLAYER_RESPONSE_REr  rz  r  r   r  rw  _download_ytcfgrF  _get_default_ytcfgr  rN  r  r  _extract_data_sync_idr  rV  r  r
   r  r  recommendedr  r  r  SUBSr`  r   r  r2   
setdefaultSTREAMING_DATA_CLIENT_NAME!STREAMING_DATA_FETCH_GVS_PO_TOKENr  $STREAMING_DATA_PLAYER_TOKEN_PROVIDED STREAMING_DATA_INNERTUBE_CONTEXT"STREAMING_DATA_FETCH_SUBS_PO_TOKEN$STREAMING_DATA_IS_PREMIUM_SUBSCRIBER_get_available_at_timestamp%STREAMING_DATA_AVAILABLE_AT_TIMESTAMPr  rE  r>  r  rq  rr  r@  rU  _youtube_login_hintrD  r  rx  r6  )$rz  r  r  r4  r  r[  r|  r]  r  deprioritized_prsr  tried_iframe_fallbackr  r  r	  skipped_clientsdeprioritize_prr  base_clientr:  r\  require_js_playerr  fetch_po_token_argsplayer_pot_policyplayer_po_tokenfetch_gvs_po_token_funcfetch_subs_po_token_funcr  r  r  sdr  embedding_is_disabledr  r  s$    `                                 @r{  _extract_player_responses#YoutubeIE._extract_player_responses  s   
**33W!""ABHTY + [J d;;JQQ
 JJ<*<ot<='l$B$-	 !&377
7\#O+B7;;=+Q(FK,2n,D="L 7 7 FF6UcKc#33FHEU#mt'?'?|el'?'mJ $ 7 7 ? C CDW Xt..}==$)!!
&;@Q!66x@
(,%B',=TE_E_,_'n4+E+Emam+nL'n4+E+Emam+nL ! ,$040E0E4,=j4"!%!<!<]L!Y%H)@)@)H	# 6:5L5LV5TUm5n&(dd.A.A /V'../V2E/V*33T7H7T7T/VO '0&7&7##'Y-<-@-@'YDW'Y# (1'8'8##(Z-<-A-A(ZEX(Z$ .488H"."?-!-))!-!-, 9 . 55b(CCuC*/'$01`AXAXY_A`bu$v!]]?B717-.8O45;?;P787H349Q56;P78<@<\<\]_aikq<r89%b+I3QUPV*WXA4:A01;RA78>SA:;>B?>SA:;	 Y
 #%,,R0JJrN ,&4+>+>r+B+B7 :X$2D2D2N2N2U2U2WXXXn-   $$N)Bk];<  $$T-B-Bj !//3/G/G.HJUY  [ %,~$=$Y$BUBUVXBY!$$$*;*;B*?*?CXj !L LW[  ] m,!"':Hse&LMFmm  H:Rx7\]c\d!efe gh 	

$%1#((?2K1L M447HHSAWAWAY=Z4[3\\jksjttvxy $bmqs s 
   !HIIM " ##A&s   )X) )
Y3YYc                 l    US:X  a  U R                  S5      (       d  US:X  a  U=(       d    SS:  a  U$ g g )Nr  live_from_start	post_liver   i   )r  )rz  rr   rl   s      r{  _needs_live_processing YoutubeIE._needs_live_processing{  s;    I%$..9J*K*K;.HMX3M 4N.r~  c           	          U SU SU SU S[          3	nU/ U R                  QU R                  Q7;   a  U R                  USS9  g U R	                  USS9  g )Nr   client z formats require a GVS PO Token which was not provided. They will be skipped as they may yield HTTP Error 403. You can manually pass a GVS PO Token for this client with --extractor-args "youtube:po_token=z+.gvs+XXX". For more information, refer to  Tr  )PO_TOKEN_GUIDE_URLrv  rt  r  r  )rz  r  r  protomsgs        r{  _report_pot_format_skipped$YoutubeIE._report_pot_format_skipped  s}    j;-xw 7llwkx y//A.BD 	 QD11QD4P4PQQSD1t4r~  c                 <   U=(       d    U SU SU S[          3n[        U R                  S5      U R                  S5      U R                  S5      45      nU(       a  U/ U R                  QU R                  Q7;   a  U R                  USS9  g U R                  USS9  g )	Nz: Some z client subtitles require a PO Token which was not provided. They will be discarded since they are not downloadable as-is. You can manually pass a Subtitles PO Token for this client with --extractor-args "youtube:po_token=z-.subs+XXX" . For more information, refer to  writesubtitleswriteautomaticsublistsubtitlesTr  )r  r>  r  rv  rt  r  r  )rz  r  r  r  subs_wanteds        r{  _report_pot_subtitles_skipped'YoutubeIE._report_pot_subtitles_skipped  s     Ej} -2 3> ?//A.B	D 	 NN+,NN./NN?+- . k-dt/D/D-dtGcGc-ddSD1t4r~  c              #     ^ ^^^^^#^$^%^&^'^(^)^*^+^,^-^.^/^0^1^2^3^4^5^6^7^8^9^:^;^<^=^>^?^@#    Sm#Sm%Sm$T%S T$S 0m4[         R                  " [        5      / sm3m?0 SS 0sm2m90 n[        / SQ5      m8ST R	                  S5      ;   m<T R	                  S5      m+S	T+;  m;S
T+;   m&T R	                  S5      (       a  Sm&T R
                  R                  S5        S m1S m>U#4S jm(S m.0 m/U$U%U44S jm,U 4S jn[        5       m5[        5       m:U5UU:U U4S jm=[        USS[        145       H  n[        USS[        145       H  n	U	R                  S5      n
S nU
(       dN  [        R                  R                  U	R                  S5      5      n[        USS[        145      n
[        US5      nU(       a  T:R                  [        U5      5        [        U
[        1SS45      =n(       d  M  T5R                  U5        M     T5R!                  [        USU145      5        M     U GH  n[        US5      nU(       d  M  U["           m*U[$           m0U[&           m6UR                  [(        5      m)U[*           m'[        US5      m@S m-SBU&U)UU,U2U8U9U U4	S  jjm7U#U&U'U(U)U*U+U,U-U.U/U0U1U3UU6UU7U U;U<U=U>U?U@U4S! jnU" 5        S h  vN   T R-                  TT5      n[        T R	                  S"5      5      nUS#:X  d  U(       a  T;(       a  UR                  S$5        T;(       a  TS#:X  a  US#:w  a  UR                  S%5        U$U%U&U'U2U3U4UU8U9U 4S& jnS$U;  =(       a    UR                  S'5      nU(       Ga  [        R                  R/                  U5      R0                  n[2        R4                  " S(U5      =n(       a  UR7                  S)S*5      u  nnOS+nSnU" U5      nU(       aE  T<(       d>  T=" 5         T R9                  STU5      nU(       a  UR;                  S,U 3S,U 35      nUU;   nT R=                  T)5      S-   [>        R@                     nT." UT0T65      nT/R                  T)T*" U=(       d    URB                  S.95      nU(       a"  URE                  S/5      S0U 3-   nT)T/;  a  UT/T)'   U(       a0  U(       d)  S1T R	                  S5      ;  a  T RG                  TT)S$5        OU(       d  U(       d  [I        UU U 3S29nT RK                  UTS3STS#:H  S49u  nn[        USS[        145       H  nT)U[(        '   M     T RM                  UU5      nU H;  nU" US$T)T RO                  S5US   S6S S79U=(       a    U(       + 5      (       d  M7  Uv   M=     S%U;  =(       a    UR                  S85      n U (       d  GM  [        R                  R/                  U 5      R0                  nSnU" U 5      nU(       aE  T<(       d>  T=" 5         T R9                  STU5      nU(       a  UR;                  S,U 3S,U 35      nUU;   nT R=                  T)5      S-   [>        RP                     nT." UT0T65      nT/R                  T)T*" U=(       d    URB                  S.95      nU(       a"  URE                  S/5      S0U 3-   nT)T/;  a  UT/T)'   U(       a2  U(       d+  S1T R	                  S5      ;  a  T RG                  TT)S%5        GM  U(       d
  U(       a  GM  [I        U US29n T RS                  U TSS99u  n!n[        USS[        145       H  nT)U[(        '   M     T RM                  UU5      nU! H|  nUS:   n"U" US%T)U"U=(       a    U(       + 5      (       d  M)  [U        T RO                  S;UR                  S<5      =(       d    US   S=S S795      US>'   U(       a  SUS?'   U"US@'   T)USA'   Uv   M~     GM     Uv   g  GN7f)CNi   rm   r#  r   )tinyaudio_quality_ultralowaudio_quality_lowaudio_quality_mediumaudio_quality_highsmallmediumlargehd720hd1080hd1440hd2160hd2880highresr  r  r  
incomplete	duplicateinclude_duplicate_formatsTzv[youtube] include_duplicate_formats extractor argument is deprecated. Use formats=duplicate extractor argument insteadc           
      h    S[        U [        1SS[        R                  R                  1SS45      ;   $ )N1xtags.sr)r2   r*   rY  rZ  )f_urls    r{  is_super_resolutionEYoutubeIE._extract_formats_and_subtitles.<locals>.is_super_resolution  s2    ,uz7C&,,J_J_I`bfhk.lmmmr~  c                 :   ^  SR                  U 4S jU 5       5      $ )Nr   c              3   .   >#    U  H
  nTU   v   M     g 7fr  r  )r  iss     r{  r  NYoutubeIE._extract_formats_and_subtitles.<locals>.solve_sig.<locals>.<genexpr>  s     .A1Q4s   )r6  )r  specs   ` r{  	solve_sig;YoutubeIE._extract_formats_and_subtitles.<locals>.solve_sig  s    77....r~  c                 N   >^  [        UU 4S j[        ST S   T5       5       5      $ )Nc              3   z   >#    U  H0  nS [        TS    SU S[        UT-   S-
  TS   5       305      0v   M2     g7f)r   r  ra  r   filesizeN)r9   r  )r  range_start
CHUNK_SIZEr  s     r{  r  TYoutubeIE._extract_formats_and_subtitles.<locals>.build_fragments.<locals>.<genexpr>  s`      F "E+ '%}Ac+
2JQ2NPQR\P].^-_`3  "Es   8;r   r  )r   r  )r  r  s   `r{  build_fragmentsAYoutubeIE._extract_formats_and_subtitles.<locals>.build_fragments  s0     F "'q!J-!D	F F Fr~  c                     U R                   =(       a;    U R                  =(       a    U(       + =(       a    U R                  =(       a    U(       + $ r  )r  not_required_with_player_tokennot_required_for_premium)policyr|  has_player_tokens      r{  gvs_pot_requiredBYoutubeIE._extract_formats_and_subtitles.<locals>.gvs_pot_required  s?     T>>SCSTT88R=RSUr~  c                   > U R                  S5      =(       d    0 nUR                  S5      =(       d    SnUR                  SS5      R                  S5      S   =(       d    S nSUR                  5       ;   a  [        US5      S	4$ S
UR                  5       ;   a&  U(       a  TR                  T5      (       d  UTT'   UT4$ UR                  S5      (       a&  U(       a  TR                  T5      (       d  UTT'   UT4$ US4$ )N
audioTrackr  r   r\   r  r   descriptivedescoriginalaudioIsDefaultr  )r  r&  rX  r#   )
fmt_streamaudio_trackdisplay_namelanguage_codeDEFAULT_LANG_VALUEORIGINAL_LANG_VALUElanguage_maps       r{   get_language_code_and_preferenceRYoutubeIE._extract_formats_and_subtitles.<locals>.get_language_code_and_preference  s    $..6<"K&??=9?RL'OOD"5;;C@CKtM 2 2 44$]F;S@@\//11 )9)9:M)N)N8EL!45$&999/00 )9)9:L)M)M7DL!34$&888 "$$r~  c                    > [        U 5      (       d  g TR                  S[        R                  R	                  U 5      R
                  SS S9$ )Nz/n/([^/]+)/zn challenger  )r:   rK  rY  rZ  r[  r  )r  rz  s    r{  get_manifest_n_challengeJYoutubeIE._extract_formats_and_subtitles.<locals>.get_manifest_n_challenge  sH    |,,%% 5 5l C H Ht & - -r~  c                  b  > / n T	(       a9  U R                  [        [        R                  T[	        [        T	5      T
S9S95        T(       a  [        5       nT H-  nTR                  ST
USS9(       d  M  UR                  U5        M/     TR                  U5        U R                  [        [        R                  T[        T Vs/ s H+  nSR                  [        [        [        U5      5      5      PM-     snT
S9S95        U (       Ga  TR                   R#                  U 5       GH  u  p4UR$                  [        R                  :X  a  UR&                  R(                  R+                  5        HV  u  pV[-        U5      nTR/                  U Vs/ s H  n[1        U5      PM     snST
USS9  UT;   d  ME  TR3                  U5        MX     M  UR$                  [        R                  :X  d  M  UR&                  R(                  R+                  5        H2  u  pVTR/                  UST
U5        UT	;   d  M!  T	R3                  U5        M4     GM!     S[4         3nT(       a  TR7                  S	U 3TSS
9  T	(       a  TR7                  SU 3TSS
9  TR9                  5         T	R9                  5         g g s  snf s  snf )N)
challengesr  )typer  inputsigfuncsTrn  r   nzEnsure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to  z7Signature solving failed: Some formats may be missing. r  z9n challenge solving failed: Some formats may be missing. )rz  r   r   Nr   r  r  rz  r  difference_updateSIGr   r6  rs  chrr  r  
bulk_solver  outputresultsr]  r  r~  ordr{  r   r  clear)challenge_requestscached_sigfuncsspec_id_challenge_requestchallenge_response	challengeresultrE  help_messagen_challengesr  s_challengesrz  r  s            r{  solve_js_challengesEYoutubeIE._extract_formats_and_subtitles.<locals>.solve_js_challenges  s   !#"))*<(**%)T,5GT^_+a b "%%+G88ZQXim8nn'++G4  , ..?"))*<(,,%+Ua#bUa'BGGCU7^,D$EUa#b#-/+0 1 ">B>P>P>[>[\n>o:&)../2E2EE1C1J1J1R1R1X1X1Z-I&))nG <<17 8AQ 8* *GD = J  ',6 , 3 3G < 2[ ,00O4E4EE1C1J1J1R1R1X1X1Z-I <<VS*V_`(L8 , 3 3I > 2[ ?p&3 4A/C 
  ''QR^Q_`!)T ( ;  ''ST`Sab!)T ( ;
 ""$""$G " $c !9s   2J'
J,.r  r  r   signatureCipherr  r   r  )hlsManifestUrldashManifestUrl)r  .c                 p    [        U R                  S5      5      [        U SS5      U R                  S5      4$ )Nr  r  r\   isDrc)r/   r  r2   )r  s    r{  get_stream_id?YoutubeIE._extract_formats_and_subtitles.<locals>.get_stream_idH  sC    ":>>&#9:LUacg<hjtjxjx  zA  kB  B  Br~  Fc                 \	  >	^ [        U R                  S5      5      nU R                  S5      =(       d    0 nU R                  S5      n[        U R                  S5      5      nUS:X  d  U(       d)  U R                  SS5      R                  5       =(       d    UnUS:X  a  SnU(       a  U(       a  UTU'   U(       a  UTU'   T" U 5      u  p[	        U R                  S	5      5      n
U
(       a;  S
T SU S3nTS:X  a  UTR
                  (       a  SOS S3-  nTR                  UTSS9  [        U R                  S5      =(       d    U R                  S5      S5      n[        U S[        SS9145      m[        UU4S j5      nU(       a  TR                  S
T SU S3TSS9  U(       a)  STR                  S5      ;  a  TR                  TTU5        g U R                  S5      =(       d    UR                  SS5      =(       d    Sn[        U R                  S5      5      =(       d    Sn0 S [        U R                  S!5      5      _S"[        U R                  S#5      5      _S$[        UU R                  S%5      (       a  S&O
U(       a  S'OS 5      _S([        [        UR                  S)5      UR                  S*5      =(       a    S+S,S-9XR                  S%5      =(       a    S.U=(       a    S/[        U S0 5      [        U S1 5      U=(       a    S2U=(       a    S3TR                  S45      =(       d    T=(       a    [!        T5      S5S-9
_S6US7:X  a  S8OS9S:U;   a  S;OS-   _SUS<:  a  UOS _S=U R                  S>5      _SU_ST" U5      [	        U R                  S%5      5      S?-  -
  _S@U
_SAU_SB[#        UT5      _SC[        U R                  SC5      5      _SDU_SEU	_SFU(       a  SGO	US:X  a  SHOS _n[$        R&                  " SIU R                  SJ5      =(       d    S5      nU(       aF  [)        UR+                  S<5      5      USK'   UR-                  [/        UR+                  S?5      5      5        SLUR                  SM5      UR                  SN5      4;   nU(       a!  UR                  SK5      (       a  USK   SO-   USP'   U$ )QNr  r  qualityheightr  audioQualityr   r  drmFamilieszSome r  z6 formats have been skipped as they are DRM protected. rq  Your accountThe current sessionz may have an experiment that applies DRM to all videos on the tv client. See  https://github.com/yt-dlp/yt-dlp/issues/12563  for more details.Tr  averageBitratebitrater  approxDurationMsr  c                     > TT S-  :  $ )Nr  r  )rl   format_durations   r{  r  YYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_stream.<locals>.<lambda>p  s    oA.Mr~  z9 formats are possibly damaged. They will be deprioritizedmissing_potr  qualityLabelaudio_quality_fpsr   asraudioSampleRater  contentLength	format_idr7  drcr  format_noter  r
  	(default)rU  r1  DRCzAI-upscaledc                 H    U S   R                  SS5      R                  5       $ )NprojectionTypeRECTANGULARr   rT  rX  r  s    r{  r  rF    s"    a8H6I6Q6QR_ac6d6j6j6lr~  c                 H    U S   R                  SS5      R                  5       $ )NspatialAudioTypeSPATIAL_AUDIO_TYPE_r   rV  r  s    r{  r  rF    s"    a8J6K6S6STikm6n6t6t6vr~  DAMAGEDMISSING POTverboser-  source_preference22r  Premiumd   r   audio_channelsaudioChannelsr  has_drmtbrfilesize_approxwidthlanguagelanguage_preference
preferencer  z.((?:[^/]+)/(?:[^;]+))(?:;\s*codecs="([^"]+)")?mimeTyper^   noneacodecvcodec_dash	container)r/   r  r"   rX  r  r  r  r   r2   r3   rw  r  rT  r#   r4   r  r   r   r  matchr$   r  r  r&   )r  r  rG  super_resolutionr  r  r;  r<  r  ri  rd  r  re  
is_damagedrv  rJ  dct	mime_mobjsingle_streamrE  all_formatsr  rl   r  itag_qualitiesqres_qualitiesrz  r  s                      @r{  process_format_streamGYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_streamK  s   ":>>&#9:(nn\:@b$..3$Z^^H%=>f$G(nn^R@FFHSGG 4<$G/6t,07f-5UV`5a2z~~m<=!+hug=stC"d*151F1F~Lab cd e
 ''X'F#JNN3C$D$a
W`Hacgh".z<NQ^eiQjPk;l"m
 &&MN
''}HUG;tuw  LP ( Q =8O8OPY8Z#Z33Hk5Q!~~n5dIY[]9^dbd!*.."78=A;z~~6G'HIJNN?,K L  t!+!8!8%5T!"$ "=%koom&DkooVfFgFwlw  @C  DnnW5?%AQAcVc
,lm
,vw"0y+2O-	2AkeGXYdGe"$$  (""PY]aPagh)i!" #'3t#$ %jnn_&E%& f'( qzD1H,IA,MM)* w+, 3-. &'8o'N/0 [)@A12 34 *+>58 !#tt|QU9< HHEz~~V`GaGgegi	!-iooa.@!ACJJJ|IOOA,>?@ &3778+<cggh>O*P P SWWU^^'*5zG';C$
r~  c            	   3     >#    Sn / nT) GHV  nUR                  S5      (       a	  T$(       a  M#  UR                  S5      S:X  a!  [        UR                  S5      5      (       d  MY  T" U5      nT(       d  UT(;   a  Mp  T#R                  T5      S   [        R                     nUS   S;  =(       a
    T" UTT 5      nTR                  T5      =(       d    T" U=(       d    UR
                  S	9nU(       a  TT;  a  UTT'   UR                  S
5      nSu  pU(       d  T" U5        [        R                  R                  UR                  S5      5      n	[        U	S
S[        145      n[        U	S5      n[        XT%=(       d    T!U45      (       dj  Sn
TS;   a%  T#R                  U
R                  T* S3TS5      SS9  O:ST#R                  (       a  SOS 3nT#R                  U
R                  STU5      T*SS9  GM  T"" X U=(       a    U(       + T" U5      S9nU(       d  GM  U(       ad  T%(       a  GM   T&" 5         T#R!                  ST![#        U5      SS9nU(       d  GML  USR                  [        U	S5      =(       d    ST'" X5      5      -  n[        U5      nUR                  S5      (       aD  T%(       a  GM  US   S   nT&" 5         T#R!                  ST!U5      nU(       d  GM  [%        USU05      nU(       a  [%        USU05      nX|S
'   US   (       a8  TUS      R'                  XR                  S 5      45        T(R)                  U5        TS!;  a  TUS"'   UR)                  U5        GMY     U HX  nT(       d  S#T;   a.  US$   (       a$  0 UET(       a  US%    S&3OUS%   S'T" U5      S(.Ev   T(       d  S#T;  d  MM  S)T0US*'   Uv   MZ     g 7f)+NhttpstargetDurationSecr  FORMAT_STREAM_TYPE_OTFr>  GVS_PO_TOKEN_POLICYr   )18r  r   r  r2  r3  z{}Some {} client https formats have been skipped as they are missing a URL. {}. See  https://github.com/yt-dlp/yt-dlp/issues/12482  for more detailsrY   r  z1YouTube is forcing SABR streaming for this clientTr  z@YouTube may have enabled the SABR-only streaming experiment for zyour accountzthe current sessionr   )rG  rs  r  rn  z&{}={})spr  	signaturer  potrh  r  r  available_atdashyr  rN  z-dashyhttp_dash_segments)rN  r  r  http_chunk_sizedownloader_options)r  r  r  r   HTTPSr  rY  rZ  r*   r2   r:   rm  r  r   r  r  rz  r  r9   r  rz  )+r  
https_fmtsr  	stream_id
pot_policyrequire_po_tokenr  fmt_urlencrypted_sigscmsg_tmplr  fmtr  r  n_challengen_resultr  rx  r  r  r  fetch_po_token_funcformat_typesr  r8  r  gvs_potsr|  r  itagsrr   player_token_providedr  r|  rz  skip_bad_formatsskip_player_jsr0  r  
stream_idsstreaming_formatsr  s+                    r{  process_https_formatsGYoutubeIE._extract_formats_and_subtitles.<locals>.process_https_formats  s     
"3J!~~&9::?O 
 "~~f-1IIRVWaWeWefsWtRuRu  -j 9I&$
2$373J3J;3WXm3n  pA  pG  pG  4HJ "!F2 g,Z9NPef %
 ![1 d.8H8bJLbLbc   &h64<H[1(nnU3G(2%M" 9D#\\22:>>BS3TU".rE1{m3L"M(4R(B"B1M:}#]^^!k %  +.CC $ 0 0'/jO[$W2Ydh !1 !j
 'g9=9N9N~Ti&j%l !$ !% 3 3HOOBUX4Y[cos 3 t$/"7G7XPXL)<W)EGC   %)$+-#@@&
C4FW[  A  ]#$8??(Z8GK%m:$< <
 %W-Eyy~~)$&+Cjm+-#'#D#DS*Va#b'$"27S(O"L"27UH<M"N!(J |il+//
8K0LM")))4 #*BB.:N+%%c*C #4F &C#w,'>C
O!HSC,<+=V)DY\]hYi(<)8)=	  #g\&A5F
4S01!	 &s   N-O4Or   r  hlsdashc                 (  >^ ^ TT R                  S5      4nT	(       d
  UTU   ;   a  gTS;  a  T
T S'   T R                  S5      c  ST S'   US:X  a  TS:X  a  TS	:w  a  T S==   S
-  ss'   U(       a*  [        T R                  S5      SSS9T S'   T S==   S-  ss'   TU   R                  U5        U(       a  T	(       a  U ST 3T S'   O4[        U4S jTU    5       5      (       a  U ST 3T S'   OU(       a  UT S'   T R                  S5      nU(       a,  UTT   :X  a#  [        T R                  S5      SSS9T S'   TT S'   O2U(       a+  UTT   :X  a"  [        T R                  S5      SSS9T S'   TT S'   US;   a*  [        T R                  S5      SSS9T S'   T S==   S-  ss'   T" TR                  [	        T S 5      S5      5      T S'   T S   S:X  a0  T R                  S5      (       a  T" T[        TU 4S jS9   5      T S'   TR                  S5      (       d  T	(       a&  [        T R                  S5      [        U5      SS9T S'   T R                  S 5      (       a  T S    S
::  a  T S 	 TS:X  a(  T R                  S!5      (       a  S"T S!'   T S==   S#-  ss'   g$)%Nrh  Fr  r  r]  r  rV   r  r  r   rP  r[  rU  r1     ra  rN  c              3   2   >#    U  H  u  pUT:g  v   M     g 7fr  r  )r  r  r  r  s      r{  r  \YoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format.<locals>.<genexpr><  s     <es   z
(original)ri  rQ  )616235r`  ra  c                 0    U S   R                  S5      S   $ )NrN  ra  r   )r&  )r  s    r{  r  [YoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format.<locals>.<lambda>M  s    ;I]I]^aIbcdIer~  r;  r<  c                 &   > [        U TS   -
  5      $ )Nr<  )abs)r  r  s    r{  r  r  O  s    TWXY\]^f\gXgThr~  )r  r\  r-  rJ  rd  mayber#  T)r  r#   r  r>  r4   r  r  r   )r  r  r  r  rG  r  	lang_coder  r  rx  r  ry  r  r  rr   rz  r{  rz  s   ``     r{  process_manifest_formatIYoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format$  s   aeeJ/0"seDk'9  &>>(4An%55,-5-/A)* ,.5E>kU^F^)*a/*'4QUU=5I=`c'dAm$)*b0*d$K(,vQug%6AkN<d<<<(,vQug%6AkN%)AkNEE*-	l;N.O!O'4QUU=5I<_b'cAm$/BA+,9=O0P#P'4QUU=5I;^a'bAm$/AA+,>)'4QUU=5I9\_'`Am$)*c1* !3!3GA?e4fhj!kl)Y<2%!%%//#$]3}Jh3i%j#kAiL>>),,'4m,.?.LTX(ZAm$55<<AeHM%E>aeeI&6&6#*AiL)*a/*r~  r4  z6(?P<path>.+)(?P<suffix>/(?:file|playlist)/index\.m3u8)r  suffixr   z/n/r  r  r0  z/pot/rG  )r  r_   )r  livez/itag/(\d+)r  r  r5  r  rN  z/clen/(\d+)r  z	file sizer  r  r  r  F)+collectionsdefaultdictr  r+   rw  r+  deprecated_featurer2   r  r  rY  rZ  r*   r:   r  r  r  r  r  r  r  r  r  r[  r  r  r%  r  rz  rT  r  r   HLSr  rstripr  r8   #_extract_m3u8_formats_and_subtitles_merge_subtitlesrK  DASHr  r"   )Arz  r  r  r  rr   rl   	subtitlesr  streaming_datar  r  s_challenger  r  r  r  needs_live_processingskip_manifestsr  hls_manifest_urlmanifest_pathrf  manifest_suffixsolved_nr  r  r  r  r  subsrb  r  dash_manifest_urlr  rN  r  r  r  rx  r  r  r  r  r  r  r8  r  r  r|  r  ry  r  r  r.  r  r|  rz  r{  r/  r  r  r0  r  r  r  sA   `` ```                             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@r{  _extract_formats_and_subtitles(YoutubeIE._extract_formats_and_subtitles  s    
 
 (33C8"z(*QI%	 
  !8!8!GG..y9'|;!\1""#>??K// 1c d	n	/	F	U 	% 	- uu9	% 9	%x ++;c?UYTZ=[\N*><Z\_bfag;hi
$../"..z~~>O/PQB*2q;-/HIG".r8"<K $$S%56".w(S!8L"MM;M $$[1 j !FIaHb c!e f# ]* #B)"o>N!"01R"S$23W$X!$23W$X!(,,-GHK)*OPL ,^=b cBX Xtq" q" q" q"f -...$($?$?X$V! !8!8!@AN%2-2B""5)K9$<AVZcAc""6*5 5n  %N:c~?Q?QRb?c & 5 56F G L L%^`mnn1n56WWVX5N2M?&(O 67GH~')#@@jR]^H(5(=(=K=>QUXYaXbSc(d#+}#</3/F/F0!!6088I8M8M0O
#3J@UWl#m #<<5HRbR|fpf|f|5}~$1$8$8$=%z@R$RM"(208-#HdNeNefoNp9p33Hk5Q['12BM?[jZkIl'm$!%!I!I((E[\eMe "J "gJD$+D3dV2DE ;F67  F !% 5 5dI FI!21e[$J\J\ .%&$ K] KPQaQrjrfrt t"#G "
 !'n < fASASTeAf   & 5 56G H M M 67HI~')#@@jR]^H(5(=(=K=>QUXYaXbSc(d#+}#</3/F/F0!!6088I8N8N0P
#3J@UWl#m #<<5HRbR|fpf|f|5}~$1$8$8$=%z@R$RM"(208-#HdNeNefoNp9p33Hk6R[[(23D=(Y%$($K$KL]_got$K$uMGT+D3dV2DE ;F67  F !% 5 5dI FI$$%kN	21fk9VfVwowkwxx,78J8J .6I0J0VaPUhXcmq 9K 9s -tAjM459/ 2-6'
/:)"#G %Q #f q /s5   F/_C_+_,J;_+*_E_$A;_#A"_c              #   |  #    [        USSS9R                  S5      S S S2   n[        [        SUR	                  5       =(       d    S 5      5      nU(       d  g [        U5      S-
  n[        U5       GHA  u  pgUR                  S5      n[        [        [        US S	 5      5      n[        U5      S
:w  d  [        U5      (       d2  U R                  SU SSR                  U5       [        5        35        M  Uu  ppnUSS  u  pUR                  S[        XV-
  5      5      R                  SU5      SU 3-   nXU-  -  nUU-  nSU 3SSSSSUU	U
X-  UU[!        ["        R$                  " U5      5       Vs/ s H1  nUR                  S[        U5      5      ['        UUUU-  -
  5      S.PM3     snS.v   GMD     g s  snf 7f)N)storyboardsplayerStoryboardSpecRendererr  r   r  rK   r  zhttps://i.ytimg.com/r   #r#     zMalformed storyboard r  r  z$Lz$Nz&sigh=sb
storyboardr  rm  z$M)r   rl   )rN  rP  r^   r  rn  ro  r   rg  r<  rJ  rowscolumnsr  )r!   r&  r:   r;   r  r  r  r  rs  r"   rm  r  r6  r   rT  rD  r  mathceilr  )rz  r  rl   r  base_urlLr  r  countsrg  r<  frame_countcolsr  r  sighr   r  fragment_durationjs                       r{  _extract_storyboardYoutubeIE._extract_storyboard  s    U_acchchilcmnrprnrtw'=txxz?QTRSIM GA::c?D#k4845F4yA~S[[##&;A3b$@PQdQfPg$hi5;2E;d12hGA""4QU4<<T1E&QUPVWC(4K8N (> 9!!X+#   "- !>!:;= <a ;;tSV4 #$5x1GXCX7Y Z <=  '2=s   E0F<28F7*F<c                 4   S nU(       a  SU R                  S5      ;  ay  SSS.nU R                  SS /SS9S	   =(       d    [        [        US
[        145      nU(       a  XeS'   U R	                  XU[        U R                  U5      SSSS[        1405      S9nU$ )Nr4  r  
9999999999r  )bpctrhas_verifiedrL  TrM  r   rK  ppz
User-Agentr  r  	userAgent)r  r  )rw  r2   r   rD  rJ  r  )rz  r  r  r  r4  r  r  s          r{  _download_initial_webpage#YoutubeIE._download_initial_webpage  s    9D,C,CM,RR*C@E''$4'PQRS ] 1NOVYUZ3[\   d99U$T%<%<^%L #6+PSu"UO  : G
 r~  c                    [         R                   " 5       nSn[        USS SSSSSS	S
[        14
5       H  n[        US[        R                  R
                  1SS[        145      nUc  SOSU S3n[        US[        SS9145      n	U	b"  U	S-  (       a  U	O
[        U	5      n	USU	 S3-  nU	nUc  M}  U R                  U SU SU 35        XW-  nM     U(       a  [        R                  " U5      U-   $ [        U5      $ )Nr   adSlotsc                     US   S   S   S:H  $ )NadSlotRendereradSlotMetadatatriggerEvent!SLOT_TRIGGER_EVENT_BEFORE_CONTENTr  r  s     r{  r  7YoutubeIE._get_available_at_timestamp.<locals>.<lambda>  s"    A&6$78H$I.$Y  ^A  %Ar~  r  fulfillmentContentfulfilledLayoutplayerBytesAdLayoutRendererrenderingContent)N)#playerBytesSequentialLayoutRenderersequentialLayouts.r  r  instreamVideoAdRenderer
playerVarslength_secondsr  zan adza zs adskipOffsetMillisecondsr  r  r   z skippable after r  z: Detected z for )r  r2   r  rY  rZ  r*   r"   r   r  r  r  r  )
rz  r  r  r  nowwait_secondsr  rl   ad	skip_times
             r{  r  %YoutubeIE._get_available_at_timestamp  s)   iik$_  A24EGdfx { )4&7
 H $H|fll>S>S=TVfhjmxly.z{H$,Bxj2EB$X0H=_cKdJe/fgI$)2QIC	N	))A66$#  H:[E&!JK('* 99S>L003xr~  c                 r   [        US5      n[        US5      nUc  [        US5      n[        US5      n	[        US5      n
[        US5      nU(       a  SO%U(       a  SOU
(       a  S	OU	(       a  S
O
SX4;   a  SOS nU R                  XX\U5      Gt p[        S U 5       5      (       a  U H  nSUS'   M
     X|X4$ )N).liveBroadcastDetailsisLive	isLiveNowisLiveContent
isUpcomingisPostLiveDvrr  r  is_upcomingr   Frs   c              3   B   #    U  H  oR                  S 5      v   M     g7f)rd  Nr  )r  r  s     r{  r  *YoutubeIE._list_formats.<locals>.<genexpr>  s     1AuuYs   Trd  )r2   r!   r  rm  )rz  r  r  r  r  r  rl   live_broadcast_detailsr  live_contentr  r  rr   r  r  r  s                   r{  r  YoutubeIE._list_formats  s    !-l<Y!ZM84? 6DG @|<m_=	&/{)0I-8M*6J*/G3J*JJ  	 #AA(^hw  A1111#)  &GFFr~  c                 H   S nU(       aD  SU R                   ;  a4  U R                  XSS9n[        US5      (       d  U R                  S5        S nU(       dM  SU R	                  S5      ;  a8  SU0nUR                  U R                  5       5        U R                  USSXFSS	US
9nU$ )Ninitial_dataFr  r  zIIncomplete data received in embedded initial data; re-fetching using API.r  rJ  r  z!Downloading initial data API JSON)r  r  r  r  r  r  r   r  )r  extract_yt_initial_datar2   r  rw  r  r  r  )rz  r  r4  r  r[  r  r  s          r{  _download_initial_data YoutubeIE._download_initial_data  s    ~T-G-GG77QV7WLj99##$op#d6M6Mm6\ \)ELL113411 V5#8 2 YL r~  c                     U R                   (       a  U(       d  g[        US5      n[        US5      S:H  =(       d,    SU R                  US5      =(       d    SR                  5       ;   $ )NF)topbardesktopTopbarRendererlogotopbarLogoRenderer)	iconImageiconTypeYOUTUBE_PREMIUM_LOGOpremiumtooltipTextr   )r  r2   r  rX  )rz  r  tlrs      r{  _is_premium_subscriber YoutubeIE._is_premium_subscriber-  s`    $$L[] 78<RR OT^^C?E2LLNN	
r~  c                 D   U R                  X4U5      nU R                  XV5      =(       d    U R                  U5      nU R                  XVXG5      nU R	                  U5      n	U	(       a  U R                  S5        U R                  U R                  XU	5      XVXGU	5      u  pXgXX4$ )Nz%Detected YouTube Premium subscription)r  extract_ytcfgr  r  r  r  r  r  )rz  r   r  r  r  r  r4  r[  r  r|  r  r  s               r{  r  YoutubeIE._initial_extract8  s    00hW**8=hAXAXYgAh228nd $ ; ;L I DE'+'E'E''<QR~>S(U$ |L\hhr~  c                 *3  ^ ^^^^^^^^ [        U0 5      u  pT R                  U5      mT R                  5       S-   nUS-   T-   nT R                  XUT R                  T5      u  mpVpxn	[        US[        S9n
[        U
S[        S9nU(       a!  T R                  UT R                  5       U5      $ T(       a  U U4S jOS n[        US[        S9n[        US	[        S9n[        US
SSSS[        1[        45      n[        USSSSS[        1[        45      n[        USSS[        1[        45      =(       d    0 n[        USSSS[        145      =(       d    0 nT R                  US5      =(       d    T R                  US5      nT R                  US5      nT R                  =(       a    U=(       d&    [        US5      =(       d    U=(       d
    U" / SQ5      nU(       d  U(       a  T R                  S5        UnT R                  US5      n[        US5      nUb  T R                  =(       a    U=(       d    UOUnUc  Un[        US[        S9nU(       GaZ  UR                  S5      (       GdC  T R!                  S5      (       a  T R#                  S T S!35        GO/ n/ nUR%                  S"5       H  n[&        R(                  R+                  [&        R(                  R-                  U5      5      mU4S# jnU" S$5      nU(       d  MV  U" S5      nUn U(       a	  U S%U S&3-  n UR/                  S'S([1        S)R3                  UTS$   S*   5      SS+05      U S,.5        UR/                  U5        M     T R#                  S-R3                  S.R5                  U5      T5      5        T R7                  UTUU5      $ [9        [        US/5      5      =(       d6    [9        [        US/5      5      =(       d    [;        U" S05      5      =(       d    S n!T R=                  TXXU!5      u  n"mmn#[        US15      n$TS2:X  a  T R?                  T S335        T(       Gd  T R!                  S45      (       d"  [        U$S55      (       a  T RA                  T5        [        U
S6[        S9=(       d    0 n%T R                  U%S75      =(       d    [        U
S75      n&[C        T R                  U%S85      =(       d    S95      n'U'(       ad  U'RE                  S:5      (       aF  [        US;5      n(U((       d"  U" S<5      n)U)(       a  U)R%                  S"5      OS n(T RG                  U'U(S+S=9  U&S>U' 3-  n&U&(       a  S?U&RI                  5       ;   a6  [K        U&S@5      n&[K        U&RM                  5       SA5       S>T RN                   3n&OX[        U
SBSC[        145      (       a  U&SD-  n&O9SEU&;   a3  [K        U&RM                  5       SA5       S>T RP                  (       a  SFOSG SH3n&T RS                  U&S+SI9  [        USJ[T        S9=(       d    / n*U*(       dU  T(       aN  [V        RX                  " T R[                  SK5      T5       V+s/ s H  n+[]        U+R_                  S5      5      PM     n*n+U* H  n,U,RE                  SL5      (       d  M  [V        R`                  " SMU,5      n-U-(       d  M;  SN U-Rc                  5        5       u  n.n/U.S*:  d  M]  U/S*:  d  Me  U.U/-  n0T H  n1U1R                  SO5      SP:w  d  M  U0U1SQ'   M!       O   T Re                  X4SR5      n2U" SSST/5      n3U3(       a  U2R/                  SUU305        U2Rg                  5       n4/ SVQn5[i        U55      n6U2Rk                  UU4SW jU5 5       5        U2 H9  m[m        UU4SX j[o        U55       5       U65      n7SYTSU   ;   a  S*OSZS[U7-  -
  TS\'   M;     T Rq                  U25        T Rr                  Ru                  U45        [        US]5      =(       d    U" S^5      n8T Rw                  [y        [        US_5      =(       d    [        US`5      =(       d    U" S_5      5      5      n9[        USa5      n:[{        [        U"Sb5      5      n;[{        [        U"Sc5      5      n<U!(       d  U<(       a  U;(       a  U<U;-
  n!T R}                  TU!5      n=GSOSd jn>TSe;   a  T H  n?U?R                  Sf5      n@U@Sg;   nATS2:X  a  WA(       a
  U>" U?ShSiSj9  M0  U=(       a"  U?R                  Sk5      (       d
  U>" U?5        MW  MY  TSl:X  d  Ma  W@Sm:X  a
  U>" U?5        Mq  WA(       d  Mz  U>" U?SnSoSj9  M     U=(       a  T R                  TTU;XUTSl:H  5        TRk                  T R                  UU!5      5        T R                  U:5      nB0 S$T_SU_SpT_SqU2_Sr[        U4Ss5      _StU_SuU9_Sv[        U9S SwS Sx9_S0U!_Sy[9        [        X4Sz5      =(       d    U" S{5      5      _S|[        [        US}5      5      _S~[        US5      SL d  U" S5      S:X  d  U" S5      S:X  a  SOS*_SU_SU8(       a  U8/OS _SU*_S[        U
S5      _ST_[        US5      (       a  SO[        US5      (       a  SOSU;SSSSSST R!                  S/ 5      ;   a  SOSOSSSS4
S.EnCS nDU 4S jnEU4S jnF0 nG[        5       nH[        USSSSS 45       VIs0 s H  nIUIS   T R                  UIS   SS9_M     nJnIST R                  S5      ;  =(       a*    T R!                  SS5      =(       d    T R!                  S5      nK[        US 5      nL[        ULSSSSS[        145      nMUM VNs1 s H"  nNUNR                  S5      S:w  d  M  WD" WN5      iM$     nOnNWM VNs1 s H,  nNUNR                  S5      S:X  d  M  [        WD" WN5      S5      iM.     nPnNWL GH  nQUQS   S   nRUQS   [           nSUQS   [           S   S   nTT R                  US5      S   nUUQS   [           nV0 nWSnX[        URSS 45       GHF  nYUYS   n[+        U5      mWD" UY5      nZ[        U4S jS 5       5      =(       d-    WUR                  =(       a    WUR                  =(       a    U(       + n[WX(       d7  S+nXWV" W[=(       d    WUR                  S9=n\(       a  WWR                  W\SWTS.5        WW(       d-  W[(       a&  WHR                  WS5        T R                  TUS5          GOtTR                  SS /5      SZ   n]T R                  WYSSS9n^UYR                  S5      S:g  n_U_(       a0  WZ(       d  GM#  WE" WGUWZW^WSWW5        WYR                  S5      (       d  GMI  WJR                  5        H|  u  n`naU`(       d  M  W`nbW_(       a'  W`S:w  a!  WK(       d  M'  W`SWZ 3-  n`Wa[        W^S S5      -  naWZSWb 3:X  a  WF" Wb5        WE" U#UW` S3Wa S3WSWW5        WE" U#UW`WaWSW]Wb:X  a  WWOSW`0WWE5        M~     [        WZS5      nZW_(       d  WZ(       a  WZU#;   a  GM  [K        W^S5      n^WYR                  S5      (       a  WF" WZ5        WE" U#UUZ S3W^ S3WSWW5        WE" U#UWZW^WSWW5        GMI     WOR                  WG5        WPR                  U#5        UO(       a  GM  WP(       a  GM    O   WH(       a^  WO(       d  WP(       aP  T R                  TS+[        T S3WO=(       a    SS.R5                  WO5       SA3WP=(       a    S[i        WP5       S3SS9S9  U#WCS'   WGUCS'   [&        R(                  R                  U5      ncUcR                  UcR                  4 Hn  nd[&        R(                  R+                  Ud5      neUeR                  5        H8  u  nfngS H,  u  nhniUhS-  nhUhWC;  d  M  WfWi;   d  M  [;        WgS*   5      WCWh'   M.     M:     Mp     U=(       d    S9RM                  5       R                  S5      (       Ga  [V        R`                  " SU5      n-U-(       a  U-R_                  S5      njU-R_                  S5      nkUk(       a  WkR                  SS95      nkWj(       d  WkS S njWCR                  U-R_                  SRM                  5       5      U-R_                  S5      =nl(       a  Wl/O>U-R_                  S5      R%                  S5       Vls/ s H  nlUlRM                  5       PM     snlU-R_                  S5      RM                  5       Wk[9        Wj5      S.5        Sm[        USS
U4S jSSSS4T R                  SS9WCS'    US   S   S   S   S   S*   S   S     ST S3TSTS;   a  SOSS./WCR                  S0 5      S'   U(       ad  T R                  UU!5      =(       d4    T R                  UU!5      =(       d    T R                  UU!5      =(       d    S WCS'   T R                  U5      UCS'   [        US[T        / S9nm[        UmS5      nnUn(       Ga   WnR                  S5      noUo(       a  T R                  Wo5      no[        WnS 5      S:X  a  WoWCS'   Or[V        R`                  " SWo5      n-U-(       aT  WCR                  U-R_                  S5      [        U-R_                  S[5      5      [        U-R_                  S5      5      S.5        [        WnS [T        5      =(       d    /  H  np[        [        UpGS GS5      5      nqUq H  nrGS GS4GS GS /GS44 H  u  nsnt[        WrUs[        5      =(       d    0 R                  GS5      nuUu(       d  M9  [V        R                  " WtWu5      n-U-(       d  MY  [        U-R_                  GS5      5      WCU-R_                  GS	5      GS
-   '     M     M     M     [        WnGSGSGSSGSGSGSGSGSGSGSGS[        14SGS9WCGS'   [        UnGS5      nvUv(       aH  T R                  WvGS5      nwUvR                  GS5      (       a  WwWCGS'   OWCR                  Sy5      c  WwWCSy'   [        WmGS5      nxUx(       Ga  [        WxGS5      ny[        UyGSGSSGSGSGS GS!GS"GS#GS$GS%GS&SGS'SS[        145      nzWCR                  T R                  UyS5      =(       d    Wz(       a  WzS*   OS T R                  WyGS(5      Wz(       a  WzOS GS).5        WB(       d%  T R                  [        WyGS*GS+[        14SGS95      nB[        WxGS, [T        5      =(       d    / n{Sn|U{ H  n}[        U}GS- 5      S+L d  M  S+n|  O   W{ H  n}U}R                  GS.5      =(       d    0 n~U~R                  S5      nU(       d  M8  T R                  W~S5      nT R                  U~GS/5      nUGS0:X  a  WWCGS1'   Ml  W|(       a  Mu  WGS2:X  a  WWCS'   M  WGS3:X  a  W(       a  W/OS WCGS4'   M  WGS5:X  d  M  WWCS'   M     T R                  [        WxGS65      5      nT R                  U[        R                  5      (       a  S+WCGS7'   WCR                  UCR                  GS85      WB[        UBS GS9S Sx9GS:.5        [{        [        UGS;5      [        GS<9=(       d    [{        U" GS;5      [        GS<9nU(       aH  [        R                  R                  W[        R                  R                  5      R                  GS=5      O.[        [        UGS;5      5      =(       d    [        U" GS;5      5      nU(       a  W(       d;  TGS>;   a4  [        T R                  T R                  WnGS?5      5      5      =(       d    WnWWCGS@'   WUCGSA'   U(       ar  TGSB;  ak  [        W5      R                  [        R                  R                  GSC9nU[        GSD5      :  a*  WCSp    H!  n?U?R                  Sf5      GSE:X  d  M  S+U?GSF'   M#     GSG H%  u  nnhWCR                  U5      ngUg(       d  M   WgWCWh'   M'     T R                  [        WnGSH5      5      nT R                  U[        R                  5      =(       d    [        UGSI[        S9nT R                  W[        R                  5      (       a  GSJOT R                  WU(       a,  Wb)  T R                  W[        R                  5      =(       d    SOS U(       a,  Wb)  T R                  W[        R                  5      =(       d    SOS WCS~   S:  Wc  S O6T R                  W[        R                  5      =(       d    [        UGSK[        S9GSL9WCGSM'   T R                  UTWmT5      UCGSN'   T R                  TU5        UC$ s  sn+f s  snIf s  snNf s  snNf s  snlf ! [        [        [        4 a     GN)f = f(P  Nz//www.youtube.com/zwatch?v=).r4  r  )errorScreen%playerLegacyDesktopYpcTrailerRenderertrailerVideoIdc                 &   > TR                  U TS S9$ )Nr  )_html_search_meta)r  rz  r4  s    r{  r  )YoutubeIE._real_extract.<locals>.<lambda>^  s    $"8"8GT"8"Rr~  c                     g r  r  r  s    r{  r  r)  _  s    $r~  r  r  r  .r  r  $structuredDescriptionContentRendererr]  &expandableVideoDescriptionBodyRendererattributedDescriptionBodyTextvideoDescriptionHeaderRendererr  r  r  !playerOverlayVideoDetailsRendererr`   ).r`   )zog:titleztwitter:titler`   zoNo title found in player responses; falling back to title from initial data. Other metadata may also be missing).rk   shortDescription)multicameraplayerLegacyMulticameraRenderermetadataListforce_singlefeed
noplaylistzDownloading just video z because of --no-playlist,c                 0   >^  [        TU 4S j[        5      $ )Nc                    > U T   S   $ )Nr   r  )r  rv  s    r{  r  =YoutubeIE._real_extract.<locals>.feed_entry.<locals>.<lambda>  s    4r~  )r4   rD  )rv  	feed_datas   `r{  
feed_entry+YoutubeIE._real_extract.<locals>.feed_entry  s    &%';S B Br~  r\   z (r  url_transparentYoutubez{}watch?v={}r   T)_typer  r   r`   zNDownloading multifeed video ({}) - add --no-playlist to just download video {}r-  lengthSecondsrl   ).r  r  z): Video is in Post-Live Manifestless modeallow_unplayable_formats).licenseInfos)r$  playerErrorMessageRendererr6  	subreasonr   z>The uploader has not made this video available in your countryavailableCountriesregionsAllowed)metadata_availablez. zsign inz,This helps protect our community. Learn morer  r$  playerCaptchaViewModelz:. YouTube is requiring a captcha challenge before playbackz-This content isn't available, try again laterr?  r@  a   has been rate-limited by YouTube for up to an hour. It is recommended to use `-t sleep` to add a delay between video requests to avoid exceeding the rate limit. For more information, refer to  https://github.com/yt-dlp/yt-dlp/wiki/Extractors#this-content-isnt-available-try-again-laterr  keywordszog:video:tagzyt:stretch=z(\d+)\s*:\s*(\d+)c              3   8   #    U  H  n[        U5      v   M     g 7fr  )r  )r  rV  s     r{  r  *YoutubeIE._real_extract.<locals>.<genexpr>  s     <mE!HHms   ro  rm  r   )..rx   zog:imageztwitter:imager   )maxresdefaulthq720	sddefault	hqdefault0	mqdefaultrm  sd1sd2sd3hq1hq2hq3mq1mq2mq3r  r  3c              3      >#    U  H3  nS   H)  nSSR                  TXUS:X  a  SOSTS:X  a  SOSS90v   M+     M5     g	7f)
)webpjpgr   z:https://i.ytimg.com/vi{webp}/{video_id}/{name}{live}.{ext}r]  _webpr   r  _live)r  rv  r^   r]  r  N)r   )r  rv  r^   rr   r  s      r{  r  rK    sc      B &d# OVV! #vW2{V_G_Geg W i
 2A	
 &s   ;>c              3   N   >#    U  H  u  pS T S U 3TS   ;   d  M  Uv   M     g7f)r0  r   Nr  )r  r  tthumbr  s      r{  r  rK    s4     e$>DAAhZqQRPSBTX]^cXdBdaa$>s   %	%z.webpr  r  rj  categorygenrer  externalChannelIdownerProfileUrlstartTimestampendTimestampc                 ~    U R                  S5      =(       d    SU-   U S'   [        U R                  S5      USS9U S'   g )Nrj  r  rP  rU  r1  )r  r#   )r  note_suffixpref_adjustments      r{  adjust_incomplete_format9YoutubeIE._real_extract.<locals>.adjust_incomplete_format  s<    !$!6!<" OC!.sww}/E{Z]!^Cr~  r  r  )Nhttpr  z(ended)ix)rk  rl  r  r  r  z(incomplete)ir  r/  rx   )r  r   rk   rg   ri   z"https://www.youtube.com/channel/%sr  r~   ).	viewCountinteractionCountaverage_ratingaverageRatingra   isFamilySafeFisFamilyFriendlyrP  zog:restrictions:agez18+r   r  rd   rw   ru   playableInEmbedrr   r  r   isShortsEligibler   rM   r;  resrJ  zhdr:12sourcezprefer-vp9-sortcompat_optszvcodec:vp9.2channelsrn  r'  r  )r   r   _format_sort_fieldsc                     [        U R                  S5      =(       d    SS5      R                  SS5      =(       d    U R                  S5      $ )NvssIdr   r  ra  languageCode)r-   r  rT  )r   s    r{  get_lang_code.YoutubeIE._real_extract.<locals>.get_lang_codec  s=     7!3!9r3?GGSQ 1yy02r~  c                    > U R                  U/ 5      nTR                   H>  n0 UEU/ S.EnUR                  SUS[        S[	        X5      5      SUSS[
        U05        M@     g )N)r  xosfr^   r   r.  rv  rf  T)r  _SUBTITLE_FORMATSrz  r;   r9   r  )	rq  r  r  sub_namer  r  	lang_subsr  rz  s	           r{  process_language1YoutubeIE._real_extract.<locals>.process_languageg  sr    !,,Y;I-- :59b9  37#<>Nx>_`H!4." 	 .r~  c                 ~   > T H6  nUR                  S5      S:w  d  M  UR                  S5      (       a  M2  XS'   M8     g )Nrn  rm  rh  r  )r  r  r  s     r{  "set_audio_lang_from_orig_subs_langCYoutubeIE._real_extract.<locals>.set_audio_lang_from_orig_subs_langu  s2    55?f,QUU:5F5F$-jM r~  captionsplayerCaptionsTracklistRenderertranslationLanguagesc                 $    US   =(       a    US   $ )Nr  languageNamer  r  s     r{  r  r)    s    Q~.D1^3DDr~  r  r  r   r  translated_subsr   r  r  c                 *    US   =(       a    US   S   $ )Nr  r  r  r  r  s     r{  r  r)    s    ?+`*>_0``r~  captionTrackskindrK  za-r  r  
clientNameSUBS_PO_TOKEN_POLICYc                     US   $ )Nr  r  r  s     r{  r  r)    s    STU^S_r~  r  c              3   @   >#    U  H  o[        TS 5      ;   v   M     g7f))exp.NrD  )r  r  r  s     r{  r  rK    s     T^\"l;;^r=  )xpexpvr  r  )r  potcrE  rv  isTranslatableundra  z from %sz-origz (Original)tlangz (auto-generated)zL: There are missing subtitles languages because a PO token was not provided.z+Subtitles for these languages are missing: zAutomatic captions for z languages are missing.rU  r1  )r  automatic_captionsr  ))r  )r  rb  )end)r  _timez
Auto-generated by YouTube.u  (?xs)
                    (?:\n|^)(?P<track>[^\n·]+)\ ·\ (?P<artist>[^\n]+)\n+
                    (?P<album>[^\n]+)\n+
                    (?:℗\s*(?P<release_year>\d{4}))?
                    (?:.+?\nReleased\ on\s*:\s*(?P<release_date>\d{4}-\d{2}-\d{2}))?
                    (?:.+?\nArtist\s*:\s*(?P<clean_artist>[^\n]+)\n)?
                    .+\nAuto-generated\ by\ YouTube\.\s*$
                r   r      r   clean_artistr   u    · r   )r   r   r   r   r   )r  z!engagement-panel-comments-section)r  twoColumnWatchNextResultsr#  r#  r  .r  r  . commentsEntryPointHeaderRenderercommentCountc                    > US   S   T;   $ )Nr  panelIdentifierr  )r  rV  COMMENTS_SECTION_IDSs     r{  r  r)    s    Q/S-TUf-gk-r~  header"engagementPanelTitleHeaderRenderercontextualInfor1  rj   r  r  conversationBarliveChatRenderercontinuationsreloadContinuationDatar  z https://www.youtube.com/watch?v=z &bpctr=9999999999&has_verified=1json)r  r  youtube_live_chatyoutube_live_chat_replay)r   r  r^   r  	live_chatr   rp   )r  r  r#  r#  r  rl  videoPrimaryInfoRenderersuperTitleLinkc                     U S   S   $ )NsuperTitleIconr  r  r  s    r{  r  r)  A  s    !$4"5j"Ar~  LOCATION_PINr^  u   (.+?)\s*S(\d+)\s*•?\s*E(\d+)r   )seriesseason_numberepisode_numberc                     U S   S   S   $ )NvideoActionsmenuRenderertopLevelButtonsr  r  s    r{  r  r)  M  s    a/?@QRr~  )toggleButtonRenderer.)"segmentedLikeDislikeButtonRenderer.r  c                     U S   S   S   $ )NdefaultTextaccessibilityaccessibilityDatar  r  s    r{  r  r)  U  s    a&6&GH[&\r~  z*(?P<count>[\d,]+)\s*(?P<type>(?:dis)?like)c                     U S   $ )Nr  r  r  s    r{  r  r)  W  s	    !O*<r~  c                     U S   S   $ )Nr  r  r  s    r{  r  r)  X  s    !,?*@AT*Ur~  zK(?P<type>(?:dis)?like) this video along with (?P<count>[\d,]+) other peopler  r  r  _countr  r  r  #segmentedLikeDislikeButtonViewModellikeButtonViewModeltoggleButtonViewModeldefaultButtonViewModelbuttonViewModelaccessibilityTextr  rq   )rp  videoViewCountRendererrp  r  r  videoSecondaryInfoRenderer)ownervideoOwnerRendererattributedTitlecommandRunsonTapr  showDialogCommandpanelLoadingStrategyinlineContentdialogViewModelcustomContentlistViewModel	listItemslistItemViewModelsubscriberCountText)re   rf   r   )navigationEndpoint)r`   runs.r  )r  r  c                     U S   S   S   $ )NmetadataRowContainermetadataRowContainerRendererr  r  r  s    r{  r  r)    s    !234RSTZ[r~  c                     U S   S   $ )NmetadataRowRendererhasDividerLiner  r  s    r{  r  r)    s    !,A*BCS*Tr~  r  )r  r   Licenser   AlbumArtistr   Song)r  r  r@  r   re   zhttps://www.youtube.com/%s)r{   r|   r}   
uploadDate)timezonez%Y%m%d)rs   NdateTextrz   ry   )r  r  r  )tzinfoztoday-2daysm3u8_native__needs_testing))r   r   )r   r   r@  	isPrivaterc   
isUnlisted)
is_privateneeds_premiumneeds_subscriptionr   is_unlistedrb   __post_extractor)z(Last 2 hours)r  )r7   	_match_idhttp_schemer  r  r2   r  r!   rD  r  r  r>  r  _preferred_langr  r  r  rU  r&  rY  rZ  r*   unquote_plusrz  r.   r   r6  playlist_resultr"   r(   r  r  
report_drmr   ry  raise_geo_restrictedrX  r,   rZ  r  r  raise_no_formatsr  r  finditer_meta_regexr5   r  r  groups_extract_thumbnailsr  r  rx  r  r  _remove_duplicate_formatsr+  _sort_thumbnailsr  r/   r)   r  r  r  handle_from_urlr    r   r  rw  r-   r  r  r  r  r  r  r  r  r  r  r]  r  r#   r[  fragmentr  endswithrT  r9  r  KeyError
IndexError	TypeErrorr  r  "_extract_chapters_from_descriptionr  r4   r  r<   rr  r0   r'   r:  r;  r   r<  r   dtdatetimefromtimestampr  utcstrftimer6   r1   r   r   AVAILABILITY_PRIVATEr  AVAILABILITY_PUBLIC_availabilityAVAILABILITY_PREMIUMAVAILABILITY_SUBSCRIPTIONAVAILABILITY_UNLISTEDextract_commentsmark_watched)rz  r   r  r  r  r[  r  r|  r  r  playability_statusestrailer_video_idsearch_metar  r  initial_sdcrinitial_descriptioninitial_vdhrinitial_video_details_rendererinitial_titletranslated_titlevideo_titletranslated_descriptionoriginal_descriptionvideo_descriptionmultifeed_metadata_listentriesfeed_idsfeedr;  feed_id
feed_titler`   rl   r  r  r  pemrr6  rD  	countriesregions_allowedrI  rf  keywordr  whratior  r/  thumbnail_urloriginal_thumbnailsthumbnail_namesn_thumbnail_namesr  rd  rg   owner_profile_urlr  live_end_timer  rm  r  r  is_adaptivechannel_handler>  r  r  r  r  skipped_subs_clientsr'  translation_languagesget_translated_subsr  all_captionsrb  need_subs_langsneed_caps_langsr  pctrr  innertube_client_namer  r  
pot_paramsalready_fetched_potcaption_trackr  requires_potsubs_po_token	orig_lang	lang_nameis_manual_subs
trans_code
trans_nameorig_trans_coder  	componentr  rU  rV  d_ks_ksr   r   ar  vpirstltlbtbrsre  getterregexr  vcrvcvsirvorcollaboratorsr  multiple_songsrowmrr	mrr_titlemrr_contents_textowner_badgesry   rz   upload_datetimes_kr@  r  r  r:  r  rr   r  rc  r  r4  s   `                                                                                                                                       @@@@@@@@r{  _real_extractYoutubeIE._real_extractI  s   *33>>#&##%(<<+h6dhdydyT-A-A8eMa.CWa  ,8 N % V ?? $++-1AC C " S(6 	 %%57L\`a#O 
 $L%I=vs3L M +<SB+Ys:D E $LS:TFC3I J PMO 	)5l5~/$E9 *: *@=? 	' NN<1 G~~<gF 	  >>,G,,A1A N#M7;N*N &&LM 	 }56 (K!%>R!S(8JK
 (<'G !!<&< $ $Mc	 	
 $ 3"+N# #=+<+<=O+P+P~~l++!8
B[\]399#>D !' 5 511$7!9IB ).G" !+G!4J'E!2j\!33NN!2"+**11(IdOA<NO/6 8 "'$  OOG,5 ?6 dkk		(+X78 ++X{4EG G  	- IJ G"9\?#KLG%k*&=>GBF 	
 xFVdlm 	IW6H%&68NO+%z)RST>>"<==,~_tBuBu)$=TS YVX  ^^D(3`yAUW_7`F"4>>$#D#JKI''(hii ),8L MI$*56F*GBQO$9$9#$>W[	--iW[-\Byk**.'0^_F *6<<>3 ?@4C[C[B\]F3mE]`d_e5fggZZFDN%fllnc:;2PTPePen  lA  >B Bw x  %%ft%<]JdKQrG T%5%5n%EwOQOA QWWY/0O  Q  G!!-00yy!5w?4<dkkm<DAq1uQ !A!(A uuX&87<"3 4 ")    --}.KMde
#Z$AB}  )oo/

  0 B &	B 	B
  EeIo$>egxyA(/5<(?1RAPQE"RE,   	&&z2))*=>\:6N+g:N&&{m[1 (':;(;'() *
 &l4EF'	2HJZ([\%i0F&WXMo$6H $ ; ;K R	_
 2277:.&*AA+-+ -SiY^_*77?3305 4 !I-#7705$0.bef) , !11?CmU`dmUmo 	t//0@(KL--.?@"
("
["
 w"
 *	"
 &9;G"
 ,"
 *"
 <
D:^hlm"
 "
 +=79KL 3124"
 mIm_,UV"
  ,75@12g=45>  FG'"
( ;)"
* 8*d+"
, H-"
.  +?AR!S/"
0 ;1"
4 !*- I I ),8J K KW!05%8"3t~~mUW7X"X^fHfg$7="
H	2		.
 	"u
 %%5Z!BDZD8F G!
G  $..n1EPQ."RRG 	 !
 0t7N7Nv7VV [NN.6Y$..:Y 	 +`c#C>QTW[V\*^ _9Eb#QW\aIa-=-b $A#swwv%'? 3Ls+T2# 	 A Bj>"CDD_-.HIK$&$78X$YZb$cdp$q!+/+B+B;+OPf+gJ')/':;]'^$J"'!-d_F_4`!a(3h')-8	 T^TT u"++sZ5X5X5r]r0s 
 +*.'(@,JpZdZpZp(qq}q"))#0$'!6+  "l(,,[966xMFF6D6226	 NN=&1NM	!.!2!26!:e!C!$ $!8Y	;PZ\(,,-=>> .C.I.I.K*J
% &0O%**=2$")o5
"l9dJ&OO
 b(9$:::?K ).ZL:N)l+6ZQ %*Hj*k&/?&B
R\Hk`jHkm% /L0 )D9	!iCU6U&y2EF	 $$%5666yA$*H56I$+[1;
L !&)YU_aG "bN --i8--.@A#Oi l  _..x=*hio&QRVR[R[\kRlQmmn$ok&=c/>R=SSj$k	D.  &8!"%[\\**3/
$--z/?/?@ILL)))4E1!OIC7NC$19$21Q4$8S	 "P & A #**,556TUU99 '(D #zz.9#zz.9#/#7#7R#@L''3BQ'7!ZZ8-1ZZ-G(G(G9=H9M9S9STZ9[%\9[Aaggi9[%\!ZZ0668$0$/$=   ] ,\ <
  0(<`br
 %!9_	$%@ABSTUghixyz{|  ~V  W  Xf  g :(Ccd$4?C]4]0"<> =DOOK,[9 00xH ??hW::;LhW 	  #33LADOe, #=>((+,CnnS)ACFTU (+D$99%FLD&*jjm-0A-?.1$**Q-.@% 
  R        :[]^  C\I+K != UN  nMo*p ")fd!;!Ar F Fw O 5#%88E5#9D#tFPQUQ[Q[\cQdFeTZZ%7(%B C %*p   , ".d0A357LNc')@BZ!#6	5G QV	"WD t%LMC__S+6778$$46D01XXl+3)+D&#?@t%DEC(!=#w@RTg&9JO]lS"5w	C5/R SM KK>>#w7hP]M!<Lcg*.//#?T*U-:M  "!%!5!5 \r' )./"0 [    #N3 TUY]]%)N  gg34:GGG,	  NN38	$(NN3$H!	)&7DO' G+(9W"h.AR+<*=X\Y"f,(9W    //TCl0mnL|Y-?-?@@.2*++)(?[eij
 	 )L,?*U M[6L 	
 YbBKK%%iAJJ8T	, EF >";|#<=	 	 9@R1R*%%dnnT:&FGI XLW  *]%[;.UU/<DDBKKOOD\O"3M"BB	?Cwwz*m;15-. + JHCAqS	 J
 %%l4&BCoofi.L.LM S"=+TR 	 	0M0MNNH##% !-1G OOFI,J,JK T !-1G OOFI,O,OP T,2$.$6DOOFI,K,KL Q |4P $ S 	^ $(#8#8RZ\c#d ($45IQz!
 cAD &]" *i0 		sJ   $Ae !Ae%Ae*8Ae*
Ae/'Ae/B4Ae4
D'Ae9 e9AffAf)r  r  r  r  r  )T)NFr  )NNr   )NFN)[__name__
__module____qualname____firstlineno__IE_DESCr   r6  r	   _INVIDIOUS_SITES
_VALID_URL_EMBED_REGEX_RETURN_TYPEr  rv  ru  rt  rs  r  r  _GEO_BYPASSIE_NAMEr  rD  _TESTS_WEBPAGE_TESTSrx  r4  r5  r]  r\  r  cached_propertyr|  r  r  classmethodr  r  r  r  r  r'  r<  rF  rN  r7  rc  r3  rl  rz  r~  r  r  r  r  r  r  r  r&  rA  r  staticmethodr  r  r  r  r
   r  r  r  r  r@  rE  r`  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rh  __static_attributes____classcell__)r  rU  rV  r  s   000@r{  rH   rH   T   s7   G !@ "(((3DDE "( "A H		8L& LO3-=?,*KGhG
-
5
 <
 	

 H
 12
 ,
 %c
 4
 U
 S
 A
 
 
 {
  #!
" :#
$ "&8#%-0I7
: $?  hB +6ZA%
  AhZ 4J
-
5
 <
 	

 H
 12
 ,
 %c
 4
 U
 S
 A
 
 {
 #
  :!
"  #
$ 8#%-0I3
6 $=YhX A<
-
5
 .
 	

 H
 12
 y
 %c
 4
 U
 S
 2
 
 #
 :
  '!
"  #
$ 8#%!%>3
8 !-1

 0G$Whb =
-
5
 a
 	

 H
 7)
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%"*C7
< /!-1
A%_hn I8
-
5
 N
 	

 L
 8*
 }
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%%(A7
: #D)9G$ihr P8
-
5
 2
 	

 H
 ?+
 }
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%%,E7
: #D)A!qht I8
-
5
 :
 	

 L
 ?+
 '
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%(+D3
6 :=shr 58
-
5
 <
 	

 H
 7)
 |
 %c
 4
 U
 A
 
 #
 :
 '
   !
" I#
$ 9#%$'@1
qhl 18khz 
-
5
 2
 	

 H
 7)
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%"&?7
: 66"D)G$sh~	 
-
5
 L
 	

 H
 8*
 z
 %c
 4
 "4
 U
 A
 
 #
 :
  ,!
"  #
$ '!+8#%"&?7
: #D)A!{	h@ =
-
5
 O
 	

 J
 +,
 {
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$  '8#%#'@5
8 #D)? }
hD }hN =
-
5
 |
 	

 H
 +,
 }
 %c
 4
 U
 A
 
 #
 :
 '
   !
" J#
$ 9#%%)B1
4 #D)=IhL ;
-
5
 H
 	

 J
 8*
 /
 %c
 4
 U
 S
 A
 
 #
 :
  ,!
"  #
$ '!+8#%04M7
< !-1
C&GhX =	Shb =	]hh .ghn qmh~ =
-
5
 K
 	

 H
 -.
 }
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%%)B3
6 #D)E#sh~ =	yhF =BA%
 -Ch\ =Yhd =
-
5
 w
 	

 H
 ;-
 H
 %c
 4
 U
 	
 A
 
 M
 #
  :!
" '#
$ "&8#%I(A5
8 #D)? ahd =
-
5
 O
 	

 H
 ,-
 '
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" M#
$ %!!%8#%(+D;
> #D)E#ahh ]ghr =	mh| =%A%1
 /whT =
-
5
 4
 	

 H
 ?+
 x
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#% $=7
: 77"D)C"QhZ =7A%
 ^Uhr ohz wh@ 8hF CEhN ;KhV =Sh` =	[hl ? 
- 
5 
 ] 
 	 

 : 
  
 	{ 
 H 
 7) 
 y 
 %c 
 4 
 "4 
 U 
 S 
  ! 
" A# 
$ "%!!%&8#"%!? 
B #D)M'eht Ash~ PA%"W>	
 $yh\ =
-
5
 Z
 	

 H
 +,
 (
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#%)+D1
4 #D)=Wh^ =
-
5
 B
 	

 H
 ;-
 {
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%#<U9
< #D)I%Uhb =_hh Cghp !
-!
5!
 Z!
 	!

 [!
 !
 12!
 H!
 7)!
 0!
 %c!
 4!
 "4!
 U!
 S!
  23!!
" A#!
$ "%!!%& 8#%1A!
D #D)K&mh| =yhD =
-
5
 \
 	

 L
 ,-
 ~
 %c
 4
 "4
 U
 S
 A
 
 #
  :!
" '#
$ "&8#%&)B5
8 :? AhF 
-
5
 Q
 	

 H
 ,-
 *
 %c
 4
 U
 A
 
 :
 '
  
  I!
" 8#
$ $%+1J/
2 #D);Ah@ }hH ?EhP =MhX =
-
5
 5
 	

 H
 ?+
 |
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%$(A9
>  )?YK*HI!

 (M'Uhf ?#i-)1M%NO	chp <mhv <
-
7
 ,
 	

 H
 ;-
 y
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%!%>9
> !
C%uhB  =
-
5
 C
 	

 H
 8*
 }
 %c
 4
 U
 S
 A
 
 {
 #
  :!
" '#
$ "&8#%%(A5
8 #D)? hB! =
-
5
 ;
 	

 H
 ?+
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%&!+8#%"&?;
> #D)E# hJ" =
-
5
 S
 	

 H
 7)
 {
 %c
 4
 "4
 U
 $S
 A
 #
 9
  ,!
"  #
$ '!+8#%#&?7
: #D)C"E"hJ# =
-
5
 A
 	

 J
 7)
 |
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#%$(A1
4 #D)9I#hH$ =
-
5
 <
 	

 J
 +,
 *
 4
 U
 2
 
 #
 :
 '
  
  B!
" 8#
$ $%+'@/
2 #D);C$hB% =
-
5
 ;
 	

 H
 +,
 *
 4
 U
 A
 
 #
 :
 '
  
  B!
" 8#
$ $%+'@/
4  )6D6*:;!
 CCA!$hB& "<A&hJ& 6<
-
5
 ;
 	

 H
 ?+
 y
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%!%>7
<  )?UG*DE!

 $K&I&hV' ?<
-
6
 :
 	

 L
 ?+
 '
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%(+D3
8  !
 :E#U'h\( H9
-
5
   b
 	

 H
 ?+
 .
 %c
 4
 "4
 U
 

 S
 A
 
  {!
" ##
$ &&!%&!+8#%/)B=
@ #D)G$[(hf) =
-
6
 =
 	
 ~
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ :%
& ''
( "&8#%&)B9
>  )"' ){+  "
 $Q)c)hz* <
-
5
 O
 	

 H
 +,
 x
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#% (A1
4 #D)=u*hv+ ?!
-!
5!
 ]!
 	!

 ]!
 +!
 J!
 D!
 !
 A!
 '!
 !
 ~!
 4!
 U!
  "4!!
" %c#!
$ !U"")J&#%!%$%A!
F T
K(s+hF- =
-
5
 G
 A	

 '
 
 +
 D
 |
 4
 U
 S
 #
 #
 
  !
" K#
$ ++%'89#%!%$%3
6 #D)=C-hD. =
-
5
 @
 A	

 '
 

 >
 B
 z
 4
 U
 S
 #
 #
 
  !
" U#
$ #)z#%!+&!%$%7
: #D)A!A.hF/ =
-
5
 _
 2	

 '
 +
 <
 @
 *
 4
 U
 %c
 #
 #
 
  !
" O#
$ ,,#%!+&!%$%"9
> "
C%C/hP0 =
-
5
 X
 2	

 '
 	
 +
 D
 y
 4
 U
 #
 #
 
 
  O!
" +,#
$ #%!%&%!3
8 "
="M0hFX1 w
-
5
 8
 :	

 A
 
 I
 4
  
 8
 #
 S
 *
 :
 U
  H!
" #
$ 12&)+T;"#!5
8 #D)A!H Q
-
5
 g
 	

 H
 8*
 ,
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%-3L3
6 #D)? F _
-
5
 T
 	

 H
 7)
 |
 %c
 4
 U
 S
 2
 
 #
 :
  !
" '#
$ "&8#%$(A5
8 #D)A!H [
-
5
 J
 	

 H
 +,
 S
 %c
 4
 U
 A
 
 #
 :
 '
   !
" I#
$ 9#%TTm1
6  )=8**EF!
="J (XAS
 "D)IQNf "*!'144008859?: 8N7S7S7U%V7Utqad7U%V"j j     % %";
5'nmF^2 26$ +sZ 48 AL 
/( G G
	3 Z_  _d R!F'7R 4 4.  0
:/bV(p 9 9	R = = 
 
,"3 " "H %*oFYFYaetx$(X\fj %XO Xt4<l 	^ 	^ ^ ^5n3-j`D
55&Pd$L"<G, 	
i"\
 \
I? &Ws   C%AJrH   )\r  r  r  r  r  r  r  r  r  r  r  r  r  urllib.parserY  _baser   r   r   r   r   r	   r
   r   r   jsc._builtin.ejsr   jsc._directorr   jsc.providerr   r   r   r   pot._directorr   pot.providerr   r   networking.exceptionsr   utilsr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   utils.networkingr=   r>   r?   r  r  r  r  r  r  r  r  rH   r  r~  r{  <module>r     s            	 
   
 
 
 , 2 a a 2 8 .& & & & & & & & & &N K J. %C "$A !'G $#?  'G $(I %K QF( QFr~  