1/*! 2 JW Player version 8.30.1 3 Copyright (c) 2023, JW Player, All Rights Reserved 4 This source code and its use and distribution is subject to the terms 5 and conditions of the applicable license agreement. 6 https://www.jwplayer.com/tos/ 7 This product includes portions of other software. For the full text of licenses, see 8 https://ssl.p.jwpcdn.com/player/v/8.30.1/notice.txt 9*/ 10'use strict'; 11(self.webpackChunkjwplayer = self.webpackChunkjwplayer || []).push([ 12 [347], 13 { 14 2776: (e, t, s) => { 15 s.r(t), s.d(t, { default: () => k }); 16 var n = s(1776), 17 r = s(7477); 18 const i = /^(\d+):(\d{2})(:\d{2})?\.(\d{3})/, 19 a = /^-?\d+$/, 20 o = /\r\n|\n/, 21 c = /^NOTE($|[ \t])/, 22 l = /^[^\sa-zA-Z-]+/, 23 u = /:/, 24 f = /\s/, 25 h = /^\s+/, 26 g = /-->/, 27 d = /^WEBVTT([ \t].*)?$/, 28 p = function () { 29 return { 30 decode(e) { 31 if (!e) return ''; 32 if ('string' != typeof e) throw new Error('Error - expected string data.'); 33 return decodeURIComponent(encodeURIComponent(e)); 34 }, 35 }; 36 }, 37 b = function (e, t, s) { 38 (this.window = e), 39 (this.state = 'INITIAL'), 40 (this.buffer = ''), 41 (this.decoder = t || new p()), 42 (this.syncCueParsing = s), 43 (this.regionList = []), 44 (this.maxCueBatch = 1e3); 45 }, 46 E = function () { 47 this.values = Object.create(null); 48 }; 49 E.prototype = { 50 set(e, t) { 51 this.get(e) || '' === t || (this.values[e] = t); 52 }, 53 get(e, t, s) { 54 return s ? (this.has(e) ? this.values[e] : t[s]) : this.has(e) ? this.values[e] : t; 55 }, 56 has(e) { 57 return e in this.values; 58 }, 59 alt(e, t, s) { 60 for (let n = 0; n < s.length; ++n) 61 if (t === s[n]) { 62 this.set(e, t); 63 break; 64 } 65 }, 66 integer(e, t) { 67 a.test(t) && this.set(e, parseInt(t, 10)); 68 }, 69 percent(e, t) { 70 return (t = parseFloat(t)) >= 0 && t <= 100 && (this.set(e, t), !0); 71 }, 72 }; 73 const T = new r.Z(0, 0, 0), 74 m = 'middle' === T.align ? 'middle' : 'center', 75 w = function (e, t, s) { 76 const n = e, 77 r = () => { 78 const t = ((e) => { 79 const t = (e, t, s, n) => 3600 * (0 | e) + 60 * (0 | t) + (0 | s) + (0 | n) / 1e3, 80 s = e.match(i); 81 return s 82 ? s[3] 83 ? t(s[1], s[2], s[3].replace(':', ''), s[4]) 84 : s[1] > 59 85 ? t(s[1], s[2], 0, s[4]) 86 : t(0, s[1], s[2], s[4]) 87 : null; 88 })(e); 89 if (null === t) throw new Error(`Malformed timestamp: ${n}`); 90 return (e = e.replace(l, '')), t; 91 }, 92 a = () => { 93 e = e.replace(h, ''); 94 }; 95 if ((a(), (t.startTime = r()), a(), '--\x3e' !== e.substr(0, 3))) 96 throw new Error( 97 `Malformed time stamp (time stamps must be separated by '--\x3e'): ${n}`, 98 ); 99 (e = e.substr(3)), 100 a(), 101 (t.endTime = r()), 102 a(), 103 (function (e, t) { 104 const n = new E(); 105 ((e, t, s, n) => { 106 const r = n ? e.split(n) : [e]; 107 for (let e = 0; e <= r.length; e += 1) { 108 if ('string' != typeof r[e]) continue; 109 const n = r[e].split(s); 110 2 === n.length && t(n[0], n[1]); 111 } 112 })( 113 e, 114 function (e, t) { 115 switch (e) { 116 case 'region': 117 for (let r = s.length - 1; r >= 0; r--) 118 if (s[r].id === t) { 119 n.set(e, s[r].region); 120 break; 121 } 122 break; 123 case 'vertical': 124 n.alt(e, t, ['rl', 'lr']); 125 break; 126 case 'line': { 127 const s = t.split(','), 128 r = s[0]; 129 n.integer(e, r), 130 n.percent(e, r) && n.set('snapToLines', !1), 131 n.alt(e, r, ['auto']), 132 2 === s.length && n.alt('lineAlign', s[1], ['start', m, 'end']); 133 break; 134 } 135 case 'position': { 136 const s = t.split(','); 137 n.percent(e, s[0]), 138 2 === s.length && 139 n.alt('positionAlign', s[1], [ 140 'start', 141 m, 142 'end', 143 'line-left', 144 'line-right', 145 'auto', 146 ]); 147 break; 148 } 149 case 'size': 150 n.percent(e, t); 151 break; 152 case 'align': 153 n.alt(e, t, ['start', m, 'end', 'left', 'right']); 154 } 155 }, 156 u, 157 f, 158 ), 159 (t.region = n.get('region', null)), 160 (t.vertical = n.get('vertical', '')); 161 let r = n.get('line', 'auto'); 162 'auto' === r && -1 === T.line && (r = -1), 163 (t.line = r), 164 (t.lineAlign = n.get('lineAlign', 'start')), 165 (t.snapToLines = n.get('snapToLines', !0)), 166 (t.size = n.get('size', 100)), 167 (t.align = n.get('align', m)); 168 let i = n.get('position', 'auto'); 169 'auto' === i && 170 50 === T.position && 171 (i = 172 'start' === t.align || 'left' === t.align 173 ? 0 174 : 'end' === t.align || 'right' === t.align 175 ? 100 176 : 50), 177 (t.position = i); 178 })(e, t); 179 }; 180 b.prototype = { 181 parse(e, t) { 182 const s = this; 183 e && (s.buffer += s.decoder.decode(e, { stream: !0 })); 184 const i = function () { 185 const e = s.buffer; 186 let t = 0; 187 for (; t < e.length && '\r' !== e[t] && '\n' !== e[t]; ) ++t; 188 const n = e.substr(0, t);
189 return '\r' === e[t] && ++t, '\n' === e[t] && ++t, (s.buffer = e.substr(t)), n; 190 }, 191 a = function () { 192 'CUETEXT' === s.state && s.cue && s.oncue && s.oncue(s.cue), 193 (s.cue = null), 194 (s.state = 'INITIAL' === s.state ? 'BADWEBVTT' : 'BADCUE'); 195 }; 196 let l; 197 try { 198 if ('INITIAL' === s.state) { 199 if (!o.test(s.buffer)) return this; 200 l = i(); 201 const e = l.match(d); 202 if (!e || !e[0]) throw new Error('Malformed WebVTT signature.'); 203 s.state = 'HEADER'; 204 } 205 } catch (e) { 206 return a(), this; 207 } 208 let f = !1, 209 h = 0; 210 const p = function () { 211 try { 212 for (; s.buffer && (h <= s.maxCueBatch || s.syncCueParsing); ) { 213 if (!o.test(s.buffer)) return s.flush(), this; 214 switch ((f ? (f = !1) : (l = i()), s.state)) { 215 case 'HEADER': 216 u.test(l) || l || (s.state = 'ID'); 217 break; 218 case 'NOTE': 219 l || (s.state = 'ID'); 220 break; 221 case 'ID': 222 if (c.test(l)) { 223 s.state = 'NOTE'; 224 break; 225 } 226 if (!l) break; 227 if (((s.cue = new r.Z(0, 0, '')), (s.state = 'CUE'), !g.test(l))) { 228 s.cue.id = l; 229 break; 230 } 231 case 'CUE': 232 try { 233 w(l, s.cue, s.regionList); 234 } catch (e) { 235 (s.cue = null), (s.state = 'BADCUE'); 236 break; 237 } 238 s.state = 'CUETEXT'; 239 break; 240 case 'CUETEXT': { 241 const e = g.test(l); 242 if ((!l || e) && (f = !0)) { 243 s.oncue && ((h += 1), s.oncue(s.cue)), (s.cue = null), (s.state = 'ID'); 244 break; 245 } 246 s.cue.text && (s.cue.text += '\n'), (s.cue.text += l); 247 break; 248 } 249 case 'BADCUE': 250 l || (s.state = 'ID'); 251 } 252 } 253 if (((h = 0), s.buffer)) (0, n.U)(p); 254 else if (!t) return s.flush(), this; 255 } catch (e) { 256 return a(), this; 257 } 258 }; 259 p(); 260 }, 261 flush() { 262 const e = this; 263 if ( 264 ((e.buffer += e.decoder.decode()), 265 (e.cue || 'HEADER' === e.state) && ((e.buffer += '\n\n'), e.parse(void 0, !0)), 266 'INITIAL' === e.state) 267 ) 268 throw new Error('Malformed WebVTT signature.'); 269 return e.onflush && e.onflush(), this; 270 }, 271 }; 272 const k = b; 273 }, 274 }, 275]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.