
    V|h*                        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  SSK	J
r
  SSKJr  SSKJr  SSKJrJrJrJrJrJrJrJrJrJrJrJr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\
5      r' " S S\5      r( " S S\(5      r)g)    N   )AdobePassIE)InfoExtractor   )compat_etree_fromstring)	HTTPError)ExtractorErrorUnsupportedError
clean_htmldict_getextract_attributesfind_xpath_attrfix_xml_ampersandsfloat_or_noneint_or_nonejoin_nonempty
js_to_jsonmimetype2extparse_iso8601parse_qssmuggle_urlstr_or_nonetry_getunescapeHTMLunsmuggle_urlupdate_url_queryurl_or_none)traverse_objc                   V   \ rS rSrSrSr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S S!S"S#S$S%.S&.S'S(SS)S*S+S,.S-S.S.S/SS0S1S0S2S3S4S.S-S.S5S6S7S8.S9S:S;.S<S=S>S?.S@S:S;.SASBSC./rSDSESSFSGSHS,.SISB0SJSK.SLSMSSNSOSHSPSQSRSS.SISB0STSK.SUSVSWSSXSYSZS[.S\S].S^S_SS`S`SaS,.SbSISB0Sc.SdSeSfSSgShSiSjSkSlSS.SJS].SmSnSSoSoSpSqSRSrS.SISB0SsSK.StSuSvS?.SwSxSBSy.STSz.S{S|SS}S}S~S.STS.SSSSSSSSSS.SISB0SJSK.SSSSSSSSS.SISB0SSK./
r\S 5       r	\S 5       r
\S 5       r\S 5       r\S 5       rS rS rSrg)BrightcoveLegacyIE%   zbrightcove:legacyzN(?:https?://.*brightcove\.com/(services|viewer).*?\?|brightcove:)(?P<query>.*)z~http://c.brightcove.com/services/viewer/htmlFederated?playerID=1654948606001&flashID=myExperience&%40videoPlayer=2371591881001 5423e113865d26e40624dce2e4b45d95z4Test Brightcove downloads and detection in GenericIE2371591881001mp4u]   Xavier Sala i Martín: “Un banc que no presta és un banc zombi que no serveix per a res”8TVz$md5:a950cc4285c43e44d763d036710cd9cdiHQ201305101589608506001)idexttitleuploaderdescription	timestampupload_dateuploader_idz4The player has been deactivated by the content owner)urlmd5note	info_dictskipzzhttp://c.brightcove.com/services/viewer/htmlFederated?playerID=1217746023001&flashID=myPlayer&%40videoPlayer=17854521370011785452137001flvz5JVMLS 2012: Arrays 2.0 - Opportunities and Challengesz<John Rose speaks at the JVM Language Summit, August 1, 2012.Oraclei*P20120814
1460825906)r(   r)   r*   r,   r+   r-   r.   r/   zvideo not playabler0   r3   r4   zhttp://c.brightcove.com/services/viewer/federated_f9?&playerID=1265504713001&publisherID=AQ%7E%7E%2CAAABBzUwv1E%7E%2CxP-xFHVUstiMFlNYfvF4G9yFnNaqCw_9&videoID=27509345480012750934548001z+This Bracelet Acts as a Personal Thermostatz$md5:547b78c64f4112766ccf4e151c20b6a0iH`R201310171130468786001r(   r)   r*   r,   r-   r.   r/   )r0   r3   zhttp://link.brightcove.com/services/player/bcpid756015033001?bckey=AQ~~,AAAApYJi_Ck~,GxhXCegT1Dp39ilhXuxMJxasUhVNZiil&bctid=28788621090012878862109001zLost in Motion IIz$md5:363109c02998fee92ec02211bd8000dfzNational Ballet of Canada)r(   r)   r*   r,   r+   z
Video gonea  http://c.brightcove.com/services/viewer/htmlFederated?%40videoPlayer=ref%3Aevent-stream-356&linkBaseURL=http%3A%2F%2Fwww.redbull.com%2Fen%2Fbike%2Fvideos%2F1331655630249%2Freplay-uci-fort-william-2014-dh&playerKey=AQ%7E%7E%2CAAAApYJ7UqE%7E%2Cxqr_zXk0I-zzNndy8NlHogrCb5QdyZRf&playerID=1398061561001#__youtubedl_smuggle=%7B%22Referer%22%3A+%22http%3A%2F%2Fwww.redbull.com%2Fen%2Fbike%2Fstories%2F1331655643987%2Freplay-uci-dh-world-cup-2014-from-fort-william%22%7D3750436379001z:UCI MTB World Cup 2014: Fort William, UK - Downhill FinalszRBTV Old (do not use)iS20140827710858724001zhttp://c.brightcove.com/services/viewer/htmlFederated?playerID=3550052898001&playerKey=AQ%7E%7E%2CAAABmA9XpXk%7E%2C-Kp7jNgisre1fG5OdqpAFUTcs0lP_ZoLSealife3550319591001)r*   r(      zUnsupported URL)r0   r3   playlist_mincountr4   zhttp://c.brightcove.com/services/json/experience/runtime/?command=get_programming_for_experience&playerKey=AQ%7E%7E,AAABXlLMdok%7E,NJ4EoMlZ4rZdx9eU1rkMVd8EaYPBBUlg1522758701001z	Lesson 08r(   r*   
   zhttps://link.brightcove.com/services/player/bcpid1722935254001/?bctid=5360463607001&autoStart=false&secureConnections=true&width=650&height=350Tr0   only_matchingz\http://www.bfmtv.com/video/bfmbusiness/cours-bourse/cours-bourse-l-analyse-technique-154522/2765128793001u*   Le cours de bourse : l’analyse techniquez$md5:7e9ad046e968cb2d1114004aba466fd9zBFM BUSINESSskip_download404 Not Found)r0   r3   paramsr4   zGhttp://bfmbusiness.bfmtv.com/mediaplayer/chroniques/olivier-delamarche/5255628253001z$md5:37c519b1128915607601e75a87995fc0z$md5:37f7f888b434bb8f8cc8dbd4f7a4cf26876450612001ikYX20161220)r(   r)   r*   r,   r+   r/   r-   r.   zRedirects, page gonezhttp://bcove.me/i6nfkrc3 0ba9446db037002366bab3b3eb30c88c3101154703001zStill no powerzthestar.comzMississauga resident David Farmer is still out of power as a result of the ice storm a month ago. To keep the house warm, Farmer cuts wood from his property for a wood burning stove downstairs.)r(   r)   r*   r+   r,   z
video goner0   r1   r3   r4   zMhttp://www.kijk.nl/sbs6/leermijvrouwenkennen/videos/jqMiXKAYan2S/aflevering-13866516442001z%Leer mij vrouwen kennen: Aflevering 1zSBS Broadcastingz(Restricted to Netherlands, 404 Not Found)r0   r3   r4   rO   z5http://www.un.org/chinese/News/story.asp?NewsID=27724 36d74ef5e37c8b4a2ce92880d208b9685360463607001uS   叙利亚失明儿童在废墟上演唱《心跳》  呼吁获得正常童年生活u  联合国儿童基金会中东和北非区域大使、作曲家扎德·迪拉尼（Zade Dirani）在3月15日叙利亚冲突爆发7周年纪念日之际发布了为叙利亚谱写的歌曲《心跳》（HEARTBEAT），为受到六年冲突影响的叙利亚儿童发出强烈呐喊，呼吁世界做出共同努力，使叙利亚儿童重新获得享有正常童年生活的权利。zUnited Nations1362235914001i!fX20170315z"http://www8.hp.com/cn/zh/home.html5255815316001zSprocket Video - ChinazHP-Video GalleryiYX1107601872001zvideo rotates...weekly?zdhttp://www.newyorker.com/online/blogs/newsdesk/2014/01/always-never-nuclear-command-and-control.htmlzalways-neverzAlways / Never - The New Yorker   F)extract_flatrM   )r0   r3   playlist_countrO   r4   zIhttp://www.geekandsundry.com/tabletop-bonus-wils-final-thoughts-on-dread/4238694884001zTabletop: Dread, Last Thoughtsi  )r(   r)   r*   r,   durationz;https://dl.dropboxusercontent.com/u/29092637/interview.html4785848093001zThe Cardinal Pell InterviewzSky News Contributor Andrew Bolt interviews George Pell in Rome, following the Cardinal's evidence before the Royal Commission into Child Abuse. z!GlobeCast Australia - GlobeStream273377382800120160304iRVr(   r)   r*   r,   r+   r/   r.   r-   zthttp://www.stack.com/video/3167554373001/learn-to-hit-open-three-pointers-with-damian-lillard-s-baseline-drift-drill3167554373001zKLearn to Hit Open Three-Pointers With Damian Lillard's Baseline Drift Drillz$md5:57bacb0e0f29349de4972bfda3191713
107934949320140207iWR)r(   r)   r*   r,   r/   r.   r-   z410 Gonec                 4  ^
^^ [         R                  " SS U5      nUR                  SS5      n[         R                  " SSU5      n[        U5      n [	        UR                  5       5      m[        TSS	S
5      nUbK  [        S [        R                  R                  UR                  S   5      R!                  5        5       5      mO0 mTR                  R#                  SS5      n[        U5      m
U
UU4S jn0 nU" S5      =(       d    U" S5      nUc  [%        S5      eXeS'   U" S5      nUb  XuS'   U" S5      =(       d&    U" S5      =(       d    U" S5      =(       d    U" S5      nUba  ['        U[(        5      (       a  US   nUR+                  5       n[         R,                  " SU5      (       d  UR/                  S5      (       d  gXS'   U" S5      n	U	b  XS'   U R1                  U5      $ ! [        R                  R                  R                   a     gf = f)zl
Build a Brightcove url from a xml string containing
<object class="BrightcoveExperience">{params}</object>
z&(<param(?:\s+[a-zA-Z0-9_]+="[^"]*")*)>c                 *    U R                  S5      S-   $ )Nr   z/>group)ms    U/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/brightcove.py<lambda>:BrightcoveLegacyIE._build_brightcove_url.<locals>.<lambda>5  s    aggaj4&7    z<--z<!--z(<object[^>]*)(xmlns=".*?")z\1N./paramname	flashVarsc              3   2   #    U  H  u  pXS    4v   M     g7f)r   N ).0kvs      rn   	<genexpr>;BrightcoveLegacyIE._build_brightcove_url.<locals>.<genexpr>C  s       RPDA aD	Ps   valuedata c                 |   > U T;   a  TU    $ [        TSSU 5      nUb  UR                  S   $ TR                  U 5      $ )Nrr   rs   r|   )r   attribget)rs   nodedata_url_params	flashvars
object_docs     rn   
find_param<BrightcoveLegacyIE._build_brightcove_url.<locals>.find_paramL  sK    y  &":y&$GD{{7++"&&t,,rq   playerIDplayerIdzCannot find player ID	playerKey@videoPlayervideoIdvideoIDz
@videoListr   zT^(?:\d+|[\da-fA-F]{8}-?[\da-fA-F]{4}-?[\da-fA-F]{4}-?[\da-fA-F]{4}-?[\da-fA-F]{12})$zref:linkBaseURL)resubreplacer   r   encodexmletreeElementTree
ParseErrorr   dicturllibparser   r   itemsr   r	   
isinstanceliststripmatch
startswith_make_brightcove_url)cls
object_strfv_eldata_urlr   rO   	player_id
player_keyvideo_player	link_baser   r   r   s             @@@rn   _build_brightcove_url(BrightcoveLegacyIE._build_brightcove_url,  s    VVE7E
  ''v6
VV:E:N
'
3
	01B1B1DEJ  
Iv{K R"LL11%,,w2GHNNPR RI I$$((4"8,	- z*Dj.D	 !899&z,
!",;!.1Z	5JjYbNcgqr~g#,--+A'--/L HHk " "%1%<%<V%D%D%1>"}-	 $-=!''//e yy$$// 		s   G, ,(HHc                 ~    [         R                  " SU5      nU(       a  U R                  UR                  5       5      $ g )Nar  (?x)customBC\.createVideo\(
                .*?                                                  # skipping width and height
                ["\'](?P<playerID>\d+)["\']\s*,\s*                   # playerID
                ["\'](?P<playerKey>AQ[^"\']{48})[^"\']*["\']\s*,\s*  # playerKey begins with AQ and is 50 characters
                                                                     # in length, however it's appended to itself
                                                                     # in places, so truncate
                ["\'](?P<videoID>\d+)["\']                           # @videoPlayer
            )r   searchr   	groupdict)r   	object_jsrm   s      rn   _build_brightcove_url_from_js0BrightcoveLegacyIE._build_brightcove_url_from_jsr  s=     II  ++AKKM:: rq   c                     [        SU5      $ )Nz6https://c.brightcove.com/services/viewer/htmlFederated)r   )r   rO   s     rn   r   'BrightcoveLegacyIE._make_brightcove_url  s    DfN 	Nrq   c                 @    U R                  U5      nU(       a  US   $ S$ )zVTry to extract the brightcove url from the webpage, returns None
if it can't be found
r   N)_extract_brightcove_urls)r   webpageurlss      rn   _extract_brightcove_url*BrightcoveLegacyIE._extract_brightcove_url  s%    
 ++G4tAw(D(rq   c                 ^   [         R                  " SU5      nU(       a/  [        UR                  S5      5      nSU;   d  SU;   d  SU;   a  U/$ [         R                  " SU5      nU(       a4  [        [        SU Vs/ s H  oPR                  U5      PM     sn5      5      $ [         R                  " SU5      nU(       a5  [        [        SU Vs/ s H  nU R                  U5      PM     sn5      5      $ [         R                  " S	U5       VVs/ s H  u  pxUPM	     snn$ s  snf s  snf s  snnf )
z6Return a list of all Brightcove URLs from the webpage z(?x)
                <meta\s+
                    (?:property|itemprop)=([\'"])(?:og:video|embedURL)\1[^>]+
                    content=([\'"])(?P<url>https?://(?:secure|c)\.brightcove.com/(?:(?!\2).)+)\2
            r0   r   r   idVideoz(?sx)<object
            (?:
                [^>]+?class=[\'"][^>]*?BrightcoveExperience.*?[\'"] |
                [^>]*?>\s*<param\s+name="movie"\s+value="https?://[^/]*brightcove\.com/
            ).+?>\s*</object>Nz(customBC\.createVideo\(.+?\);)zW<iframe[^>]+src=([\'"])((?:https?:)?//link\.brightcove\.com/services/player/(?!\1).+)\1)	r   r   r   rl   findallr   filterr   r   )	r   r   url_mr0   matchesrm   	custom_bc_srcs	            rn   r   +BrightcoveLegacyIE._extract_brightcove_urls  s5    		  u{{512C c!Y#%5c9Iu**!
  tG%TGq&?&?&BG%TUVV**?It!(&*!(I 11)<!(&* + , , #%**fho#q r #q #q r 	r &U&*rs   ;DD$D)c              #      #    U R                  U5      nU H'  nU R                  [        USU05      [        5      v   M)     g 7f)NReferer)r   
url_resultr   r    selfr0   r   bc_urlsbc_urls        rn   _extract_from_webpage(BrightcoveLegacyIE._extract_from_webpage  s=     //8F//+fy#6F"GI[\\    A Ac                    [        U0 5      u  p[        R                  " SSU5      n[        R                  " SSU5      nU R                  U5      nUR	                  S5      n[
        R                  R                  U5      nUR                  S5      nU(       Ga  UR                  SS /5      S   =(       d    UR                  S	U5      nUS   nS
U;  a/  [        R                  " SU5      nUb  UR	                  S5      /US
'   UR                  S5      n	U	(       a  U	S   R                  5       (       a  U	S   n	U	(       d  UR                  S5      n
U
(       a  SU
S   ;   a  U
S   n
OmUR                  S
5      nU(       aU  US   R                  5       (       a=  0 nU(       a  X|S	'   U R                  SUS   -   XSS9nU(       a  U R                  SUSSS9n
U
(       aR  U
R                  S5      S   R                  SS5      n[        R                   " S["        R$                  " U5      5      S   n	U	(       aB  SU	 SU 3nU(       a  ['        USU05      nU R)                  U[*        R-                  5       U5      $ [/        U5      e)Nz$(?<=[?&])(videoI(d|D)|idVideo|bctid)z%40videoPlayerz(?<=[?&])bckeyr   queryr   r   r   r   r   z/bcpid(\d+)r   publisherId,z1https://link.brightcove.com/services/player/bcpidF)headersfatalz.<param\s+name="playerKey"\s+value="([\w~,-]+)"z
player keyr   ~=z>Qhttps://players.brightcove.net/z$/default_default/index.html?videoId=referrer)r   r   r   _match_valid_urlrl   r   r   r   r   r   isdigit_download_webpage_search_regexsplitr   structunpackbase64urlsafe_b64decoder   r   BrightcoveNewIEie_keyr
   )r   r0   smuggled_datamobj	query_strr   r   referervideo_idpublisher_idr   r   r   player_page
enc_pub_idbrightcove_new_urls                   rn   _real_extract BrightcoveLegacyIE._real_extract  sh   *33 ff<>NPSTff&S9$$S)JJw'	%%i0yy0iiv6q9^]=N=NyZ]=^G#AH&yy5#)-AE*% 99]3LQ 7 7 9 9+A"YY{3
#A"6!+AJ %		* 5I Yq\%9%9%;%;"$"18I.&*&<&<OR[\]R^^$U '= 'D ')-);); Q +\ *< *HJ !+!1!1#!6q!9!A!A#s!KJ#)==v7O7OPZ7[#\]^#_L'F|nTx  zB  yC  &D")45G*V]I^)_&'9?;Q;Q;SU]^^
 s##rq   rv   N)__name__
__module____qualname____firstlineno__IE_NAME
_VALID_URL_TESTS_WEBPAGE_TESTSclassmethodr   r   r   r   r   r   r   __static_attributes__rv   rq   rn   r    r    %   s   !GbJ
 T5J%x!E').	 K	
& P%P]$')+	 )	
" A%FE').		
" _%,E7 !	
  d &U3[')-	 !	
( i"% "#%
	
 y%$ "$%		
 e!		
EhF\ n!AA&
 T
  $ Y!;A&)#%	
 T
 '!& *1!%% _
  _!<B*
 ;T
  G1!j ](*#%	
  " 4!-3*#%*	
 T
 *!( v 6
 !!
 '  [!5;
 ' M!2 p;*%#	
 T
  %* F!bA'%#
 T
 OWNr C0 C0J ; ;" N N ) )  r  rD]
4$rq   r    c                        \ rS rSr0 4S jrSrg)BrightcoveNewBaseIEi  c                 	  ^^  / 0 pTUR                  S5      =(       d    / nU GHw  nUR                  S5      n[        UR                  S5      5      n	UR                  S5      n
U	S:X  d  US:X  a1  U
(       d  MU  U R                  XSSS	S
S9u  pU R                  X\5      nGOU	S:X  a/  U
(       d  M  U R	                  XSS
S9u  pU R                  X\5      nGOUR                  S5      nUR                  S5      UR                  S5      pU
(       d  U(       d  U(       a  U(       d  GM  [        UR                  S5      S5      m [        UR                  S5      5      m[        UR                  S5      5      nT [        UR                  S5      5      UU	=(       d    UR                  5       S.nUS:X  a  TS:X  a  UR                  SS05        O$UR                  UTUR                  S5      S.5        UU 4S jnU
(       d  U(       a7  UR                  U
=(       d    UU" U
(       a  SOS5      U
(       a  SOS S!.5        OUR                  UUU" S"5      S#.5        U/nUS$:X  d  UR                  S%5      (       d  U	S&:X  a  U H  nS'US('   M
     UR                  U5        GMz     U(       d`  UR                  S)5      nU(       aH  US   nU R                  UR                  S*5      =(       d    UR                  S+5      =(       d    US,   S'S-9  UR                  S.S 5        U H$  nUR                  S/0 5      R                  U5        M&     UR                  S0/ 5       H  nUR                  S15      S2:w  a  M  [        UR                  S5      5      nU(       d  M=  [        UR                  S35      5      =(       d#    [        UR                  S45      5      =(       d    S5R                  5       nUR                  U/ 5      R                  S6U05        M     S
n[        UR                  S75      S5      nUb  US::  a  S'n/ S8Qn[!        US95      nU(       a7  U VVs/ s H'  u  nn["        R$                  " S:U S;U 3U5      UUS<.PM)     snnOS nUUUUUUS=.['        US>[(        14S?[(        14S@SA[*        1[,        [.        [,        4SB[0        14SC[*        14SD.5      E$ s  snnf )ENsources	containertyper   m3u8M2TSr$   m3u8_nativehlsF)m3u8_idr   mpddashr   streaming_srcstream_nameapp_nameavg_bitratei  heightwidthsize)tbrfilesizer   r)   r   vcodecnonecodec)r
  r	  r  c                 `   > [        U T=(       a    [        T5       S3T=(       a    T S35      $ )Nrx   p)r   int)kindr	  r  s    rn   build_format_idGBrightcoveNewBaseIE._parse_brightcove_metadata.<locals>.build_format_id  s0    (s/E#c(1~vG^U[T\\]R^__rq   httpzhttp-streaming)r0   	format_idsource_preferencertmp)r0   	play_pathr  WVMkey_systemsismThas_drmerrorsmessageerror_subcode
error_codeexpectedAuthorizationhttp_headerstext_tracksr  captionssrclanglabelenr0   ra   )	)   Z   )i@     )i    )i  ih  )   i  )i   i@  )i   r1  )iV  r2  )i  i8  )poster	thumbnailz\d+x\d+x)r0   r
  r	  )r(   
thumbnailsra   formats	subtitlesis_livers   r,   tags.published_at
account_id)r*   r,   r:  r-   r/   )r   r   #_extract_m3u8_formats_and_subtitles_merge_subtitles"_extract_mpd_formats_and_subtitlesr   r   lowerupdateextendraise_no_formatspop
setdefaultr   r   appendr   r   r   r   r   strr   allr   )!r   	json_datar   r   r7  r8  r   sourcer   r)   r   fmtssubsr  r  r  r
  fr  r!  error
text_tracktext_track_urllangr9  ra   
common_resthumb_base_urlwhr6  r	  r  s!                                  @@rn   _parse_brightcove_metadata.BrightcoveNewBaseIE._parse_brightcove_metadata  s   --	*0bF

;/Ivzz&12C**U#Cf}	V 3!EE5-e F U
 11)B	!DDSTZbgDh
 11)B	 &

? ;(.

=(A6::jCYX=+X#FJJ}$=tD$VZZ%9:#FJJw$78 +FJJv,> ?!*3)//"3	 A:&A+HH &  HH!&"("(**W"5 ` -HH"3m%4sVHX%Y25Q2  HH'%0%4V%< 
 s E!VZZ%>%>#,A#'AiL NN4 { ~ ]]8,Fq	%%IIi(]EIIo,F]%P\J]hl & n 	OT*ALL,33G<  $--r:J~~f%3()>?N!
y 9: D":>>'#:;D?CUUW   r*11~3  ;  z!:DAHMG F
!)-DE
 &4j	" !da 66*1QCj.A
 !	" :>	 	 $ "
 9 :,/ -
|<seVS&A,}o> ,se4' 
 	
"s   .Srv   N)r   r   r   r   rV  r   rv   rq   rn   r   r     s    FH t
rq   r   c                      \ rS rSrSrSr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SS.SS S!0S".S#S!S$.S%S!S$.S&S!S$.S'S!S$./rS(S)S*S+SS,S-/S.S/S0S1S2S3.	S4.S5S6S7S/S8S9S:.S;S<SS=S/S>S?S@SASB.0S;SCSSDS/SES?SFSGSB.0/SH.SISJSKSSLSMSNSOSP.SS.SQSRSSS.STSUSSVSWSXSYSZS[.S!S\./SS].S^S_S`SSaSbScSdSeSfSg.ShS./r\Si 5       r	\Sj 5       r
Sk rSl rSmrgn)or   ih  zbrightcove:newzhttps?://players\.brightcove\.net/(?P<account_id>\d+)/(?P<player_id>[^/]+)_(?P<embed>[^/]+)/index\.html\?.*(?P<content_type>video|playlist)Id=(?P<video_id>\d+|ref:[^&]+)zxhttp://players.brightcove.net/929656772001/e41d32dc-ec74-459e-a845-6c69f7b724ea_default/index.html?videoId=4463358922001 c8100925723840d4b0d243f7025703be4463358922001r$   z Meet the man behind Popcorn Timez$md5:eac376a4fe366edc70279bfb681aea16gjtd@icU20150904929656772001zmincount:20)	r(   r)   r*   r,   ra   r-   r.   r/   r7  rN   rU   zyhttp://players.brightcove.net/4036320279001/5d112ed9-283f-485f-a7f9-33f42e8bc042_default/index.html?videoId=42790490780014279049078001zTitansgrave: Chapter 0gZd;h@iVrU201506064036320279001zmincount:39r:   zbhttps://players.brightcove.net/1752604059001/S13cJdUBz_default/index.html?playlistId=57183134300015718313430001zNo Audio PlaylistrH   rE   rM   T)r0   r3   r_   rO   zahttp://players.brightcove.net/5690807595001/HyZNerRl7_default/index.html?playlistId=5743160747001rJ   zwhttp://players.brightcove.net/3910869709001/21519b5c-4b3b-4363-accb-bdc8f358f823_default/index.html?videoId=ref:7069442zbhttp://players.brightcove.net/710858724001/default_default/index.html?videoId=ref:event-stream-356zvhttp://players.brightcove.net/1305187701/c832abfb-641b-44eb-9da0-2fe76786505f_default/index.html?videoId=4377407326001zOhttps://nbc-2.com/weather/forecast/2022/11/16/forecast-warmest-day-of-the-week/ 2934d5372b354d27083ccf8575dbfee26315650313112z'First Alert Forecast: November 15, 2022nbc2forecast6146886170001zre:^https?://.*\.jpg$ikmtcg     ,m@20221116)	r(   r*   r)   r:  r/   r4  r-   ra   r.   )r0   r1   r3   z7https://www.gooddishtv.com/tiktok-rapping-chef-mr-pyrexztiktok-rapping-chef-mr-pyrexz3TikTok's Rapping Chef Makes Jambalaya for the Hostsr   zJust in time for Mardi Gras)r(   r*   r4  	age_limitr,   r3   6299189544001zTGD_01-032_5i+b156956597800120220228g
ףp=&k@)r(   r)   r*   r4  r-   r/   r.   ra   6305565995112z$TGD 01-087 (Airs 05.25.22)_Segment 5io|qb20220503g~jfs@)r0   r3   playlistz[http://www.delawaresportszone.com/video-st-thomas-more-earns-first-trip-to-basketball-semis 2b35148fcf48da41c9fb4591650784f35348741021001201703064191638492001i~ӼXz<VIDEO:  St. Thomas More earns first trip to basketball semis)r(   r)   r.   r/   r-   r*   zhttp://www.programme-tv.net/videos/extraits/81095-guillaume-canet-evoque-les-rumeurs-d-infidelite-de-marion-cotillard-avec-brad-pitt-dans-vivement-dimanche/zo81095-guillaume-canet-evoque-les-rumeurs-d-infidelite-de-marion-cotillard-avec-brad-pitt-dans-vivement-dimancheu   Guillaume Canet évoque les rumeurs d'infidélité de Marion Cotillard avec Brad Pitt dans Vivement Dimanche, Extraits : toutes les vidéos avec Télé-Loisirs 732d22ba3d33f2f3fc253c39f8f365235311302538001uo   Guillaume Canet évoque les rumeurs d'infidélité de Marion Cotillard avec Brad Pitt dans Vivement Dimancheu   Guillaume Canet évoque les rumeurs d'infidélité de Marion Cotillard avec Brad Pitt dans Vivement Dimanche (France 2, 5 février 2017)i,xX20170205800000640001r>   )r1   r3   rK   )r0   r3   rm  r4   zNhttp://www.sportsnet.ca/baseball/mlb/sn-presents-russell-martin-world-citizen/ 4ae374f1f8b91c889c4b9203c8c752af4255764656001z*SN Presents: Russell Martin, World Citizenu   To understand why he was the Toronto Blue Jays’ top off-season priority is to appreciate his background and upbringing in Montreal, where he first developed his baseball skills. Written and narrated by Stephen Brunt.zRogers Sportsnet
170405087120150525iIcUre   z*Page no longer has URL, now has javascriptc                 H    [         R                  X5      nU(       a  US   $ S $ )Nr   )r   r   )ier   r   s      rn   _extract_urlBrightcoveNewIE._extract_url	  s#    77DtAw(D(rq   c           	         / n[         R                  " SU5       H1  u  p4UR                  UR                  S5      (       a  UOSU-   5        M3     [         R                  " SU5       H  u  pVpxn	[	        U5      n
U
R                  S5      nU(       d  M,  U=(       d    U
R                  S5      nU(       d  MO  U=(       d    U
R                  S5      =(       d    SnU	=(       d    U
R                  S	5      =(       d    Sn	S
U SU SU	 SU 3nU(       d  U R                  XS5      (       d  M  UR                  U5        M     U$ )NzZ<iframe[^>]+src=(["\'])((?:https?:)?//players\.brightcove\.net/\d+/[^/]+/index\.html.+?)\1)zhttp:https:r  aj  (?isx)
                    (<video(?:-js)?\s+[^>]*\bdata-video-id\s*=\s*['"]?[^>]+>)
                    (?:.*?
                        (<script[^>]+
                            src=["\'](?:https?:)?//players\.brightcove\.net/
                            (\d+)/([^/]+)_([^/]+)/index(?:\.min)?\.js
                        )
                    )?
                zdata-video-idzdata-accountzdata-playerdefaultz
data-embedr   /r   z/index.html?videoId=zpossible brightcove video)r   r   rF  r   r   r   _is_valid_url)r{  r   entriesr   r0   video
script_tagr<  r   embedattrsr   r   s                rn   r   (BrightcoveNewIE._extract_brightcove_urls  s8     jjmovxFANN#..1D"E"E38VY>Zx @Bzz 	@;Eze 'u-E yy1H#@uyy'@J!JUYY}%=JIAUYY|4A	E6zl!I;aPUwVjksjtuF b&6&6&A'C 'CNN6"M	@P rq   c              #      #    U R                  X5      nU H'  nU R                  [        USU05      [        5      v   M)     g 7f)Nr   )r   r   r   r   r   s        rn   r   %BrightcoveNewIE._extract_from_webpageJ  s<     //>F//+fz36G"H/ZZ r   c                   ^ ^^^^^^^^ [        U0 5      u  nmT R                  TR                  S5      TR                  S5      S.5        T R                  U5      R	                  5       u  mmmnmT ST 3mT R
                  R                  ST5      nSnUU 4S jmUUUU UU4S jnTR                  S	5      nS
U(       a  SOS ST SU ST 3nU(       a  SSU 30O0 mTR                  S5      nU(       a8  TR                  U[        R                  " SU5      R                  S5      S.5        [        S5       H-  n	U(       d	  U" 5       nSnSU 3TS'    T R                  UTTS9n
  O   W
R                  S#5      nU(       a  US   R                  S5      S$:X  ao  U
S%   nS&R/                  U4S' jS( 5       5      nU(       a  [        S)U S*3SS"9eT R1                  TS+   TUS,   US-   TS.   5      nT R                  UTSSU 30S/U0S09n
US1:X  aY  T R3                  UU 4S2 j[5        U
S3S4 45       5       U
R                  S55      U
R                  S65      U
R                  S75      5      $ T R7                  U
TTS9$ ! [         a  n[        UR                  [         5      (       a  UR                  R"                  S;   a  T R%                  UR                  R&                  R)                  5       R+                  5       T5      S   n
U
R                  S5      =(       d    U
S   nU
R                  S5      S:X  a  T R-                  US 9  O-U
R                  S5      S!:X  a  U(       d  S nT" S 5         S nAGM7  [        USS"9ee S nAff = f)8Ngeo_countriesgeo_ip_blocks)	countries	ip_blocksr   
brightcoveFc                 >   > TR                   R                  STU 5      $ )Nr  )cachestore)r5  policy_key_idr   s    rn   ro   /BrightcoveNewIE._real_extract.<locals>.<lambda>[  s    TZZ--lM1Mrq   c                    > ST ST ST S3n TR                  U S-   T
SS9=(       d    0 n[        US 5      nU(       dy  TR                  U S-   T
5      nTR                  S	US
S S9nU(       a2  TR	                  [        U5      T
SS9nU(       a  UR                  S5      nU(       d  TR                  SUSSS9nT	" U5        U$ )Nr   r  r   zconfig.jsonFr   c                     U S   S   $ )Nvideo_cloud
policy_keyrv   )r5  s    rn   ro   KBrightcoveNewIE._real_extract.<locals>.extract_policy_key.<locals>.<lambda>b  s    !M"2<"@rq   zindex.min.jszcatalog\(({.+?})\);catalog)r  	policyKeyz$policyKey\s*:\s*(["\'])(?P<pk>.+?)\1z
policy keypkrk   )_download_jsonr   r   r   _parse_jsonr   r   )base_urlconfigr  r   r  r<  r  r   r   store_pkr   s        rn   extract_policy_key9BrightcoveNewIE._real_extract.<locals>.extract_policy_key]  s   8Ai[PQRWQXXYZH((=((% ) A GDF  @BJ00~-x9 ,,*GY - N".."7+XU / DG%,[[%=
!!%!3!3?T "4 ";J Z rq   tokenzhttps://z	edge-authedgez).api.brightcove.com/playback/v1/accounts/r  zs/r'  zBearer r   zhttps?://[^/]+r   )r   Originr   Tzapplication/json;pk=Accept)r   )i  i  r"  r$  r#  
CLIENT_GEO)msgINVALID_POLICY_KEYr%  r!  TVE_AUTHcustom_fieldsz, c              3   X   >#    U  H  nTR                  U5      (       a  M  Uv   M!     g 7f)N)r   )rw   keyr   s     rn   rz   0BrightcoveNewIE._real_extract.<locals>.<genexpr>  s&      'cC=K\K\]`KaCs   *	*)
source_urlsoftware_statementz!Missing fields in smuggled data: z. This video can be only extracted from the webpage where it is embedded. Pass the URL of the embedding webpage instead of the Brightcove URLr  bcadobepassrequestoridbcadobepassresourceidr  tveToken)r   r   rm  c              3   N   >#    U  H  nTR                  XS    T5      v   M     g7f)r(   N)rV  )rw   vidr   r   s     rn   rz   r    s-      WUS 00$iIIUs   "%videosc                     US   $ )Nr(   rv   )r   ry   s     rn   ro   r    s    AdGrq   r(   rs   r,   )r   _initialize_geo_bypassr   r   groupsr  loadrA  r   r   rl   ranger  r	   r   causer   statusr  responsereaddecoderaise_geo_restrictedjoin_extract_mvpd_authplaylist_resultr   rV  )r   r0   content_typer  policy_key_extractedr  r  api_urlr   r   rI  er"  r!  r  missing_fields	tve_tokenr<  r  r   r   r  r   r  r   s   `                @@@@@@@@rn   r   BrightcoveNewIE._real_extractO  s   *33]##&**?;&**?;%
 	
 @D?T?TUX?Y?`?`?b<
IulH%,a	{3ZZ__\=A
$M	 	4 !!'*E[v>>ghrgsst  vB  uC  CE  FN  EO  P:??geW$56R $$Z0NN#))$5x@FFqI 
 qA/1
'+$"6zl CGH //7/S	 * x(fQimmO4
B%o6M!YY 'cC'c cN$77G HZ [eik k //l+X675623	5I
 ++ 4ZLA, 	 , I :%''W(X?S4TUWd#Y]]6%:m,	. . ..x / 2 	2U " aggy11aggnn
6R $ 0 01A1A1F1F1H1O1O1QS[ \]^ _I'mmI6Q)L:QG }}_5E11g1>"|48LLUi%)
  (4@@s   I::
NC&M<1M<<Nrv   N)r   r   r   r   r   r   r   r   staticmethodr|  r   r   r   r   rv   rq   rn   r   r   h  sq   G ~J J1!7A#%)$

  " K!-3 #%*$

  " t!(
  T
 s
 I t Hk9Fz a1!>Z(*1#%

	" I0K18
 %'5'.)#	
 %?5'.)#	
!F m1!%*#S
   n D z

 6% K  m')- "
   ). `1!A x*'%#	
 =eaNF ) ) 9 9v[
e2rq   r   )*r   r   r   urllib.parser   xml.etree.ElementTreer   	adobepassr   commonr   compatr   networking.exceptionsr   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r    r   r   rv   rq   rn   <module>r     sp     	    " ! , -     . +H$ H$Vu
+ u
pL2) L2rq   