{"version":3,"sources":["../work/node_modules/browser-pack/_prelude.js","../work/node_modules/@hola.org/mux.js/lib/aac/index.js","../work/node_modules/@hola.org/mux.js/lib/codecs/adts.js","../work/node_modules/@hola.org/mux.js/lib/codecs/h264.js","../work/node_modules/@hola.org/mux.js/lib/codecs/index.js","../work/node_modules/@hola.org/mux.js/lib/flv/flv-tag.js","../work/node_modules/@hola.org/mux.js/lib/flv/index.js","../work/node_modules/@hola.org/mux.js/lib/flv/transmuxer.js","../work/node_modules/@hola.org/mux.js/lib/index.js","../work/node_modules/@hola.org/mux.js/lib/m2ts/caption-stream.js","../work/node_modules/@hola.org/mux.js/lib/m2ts/index.js","../work/node_modules/@hola.org/mux.js/lib/m2ts/m2ts.js","../work/node_modules/@hola.org/mux.js/lib/m2ts/metadata-stream.js","../work/node_modules/@hola.org/mux.js/lib/m2ts/stream-types.js","../work/node_modules/@hola.org/mux.js/lib/m2ts/timestamp-rollover-stream.js","../work/node_modules/@hola.org/mux.js/lib/mp4/index.js","../work/node_modules/@hola.org/mux.js/lib/mp4/mp4-generator.js","../work/node_modules/@hola.org/mux.js/lib/mp4/mp4-parser.js","../work/node_modules/@hola.org/mux.js/lib/mp4/transmuxer.js","../work/node_modules/@hola.org/mux.js/lib/tools/flv-inspector.js","../work/node_modules/@hola.org/mux.js/lib/tools/mp4-inspector.js","../work/node_modules/@hola.org/mux.js/lib/utils/exp-golomb.js","../work/node_modules/@hola.org/mux.js/lib/utils/stream.js","../work/node_modules/@hola.org/videojs-contrib-ads/es5/cancelContentPlay.js","../work/node_modules/@hola.org/videojs-contrib-ads/es5/contentupdate.js","../work/node_modules/@hola.org/videojs-contrib-ads/es5/cueTextTracks.js","../work/node_modules/@hola.org/videojs-contrib-ads/es5/macros.js","../work/node_modules/@hola.org/videojs-contrib-ads/es5/plugin.js","../work/node_modules/@hola.org/videojs-contrib-ads/es5/redispatch.js","../work/node_modules/@hola.org/videojs-contrib-ads/es5/snapshot.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/add-text-track-data.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/codec-utils.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/create-text-tracks-if-necessary.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/flash-constants.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/flash-media-source.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/flash-source-buffer.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/html-media-source.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/remove-cues-from-track.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/transmuxer-worker.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/videojs-contrib-media-sources.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/es5/virtual-source-buffer.js","../work/node_modules/@hola.org/videojs-contrib-media-sources/node_modules/webworkify/index.js","../work/node_modules/@hola.org/videojs-hola-skin/src/js/videojs-hola-skin.js","../work/node_modules/@hola.org/videojs-ima/src/videojs.ima.js","../work/node_modules/@hola.org/videojs-osmf/dist/videojs-osmf.js","../work/node_modules/@hola.org/videojs-settings/src/videojs-settings.js","../work/node_modules/@hola.org/videojs-thumbnails/videojs.thumbnails.js","../work/node_modules/@hola.org/videojs-utils/src/videojs-utils.js","../work/node_modules/browserify-css/browser.js","../work/node_modules/clipboard/lib/clipboard-action.js","../work/node_modules/clipboard/lib/clipboard.js","../work/node_modules/delegate/src/closest.js","../work/node_modules/delegate/src/delegate.js","../work/node_modules/global/document.js","../work/node_modules/global/window.js","../work/node_modules/good-listener/src/is.js","../work/node_modules/good-listener/src/listen.js","../work/node_modules/lodash/_DataView.js","../work/node_modules/lodash/_Hash.js","../work/node_modules/lodash/_ListCache.js","../work/node_modules/lodash/_Map.js","../work/node_modules/lodash/_MapCache.js","../work/node_modules/lodash/_Promise.js","../work/node_modules/lodash/_Set.js","../work/node_modules/lodash/_SetCache.js","../work/node_modules/lodash/_Stack.js","../work/node_modules/lodash/_Symbol.js","../work/node_modules/lodash/_Uint8Array.js","../work/node_modules/lodash/_WeakMap.js","../work/node_modules/lodash/_apply.js","../work/node_modules/lodash/_arrayFilter.js","../work/node_modules/lodash/_arrayLikeKeys.js","../work/node_modules/lodash/_arrayMap.js","../work/node_modules/lodash/_arrayPush.js","../work/node_modules/lodash/_arraySome.js","../work/node_modules/lodash/_assignValue.js","../work/node_modules/lodash/_assocIndexOf.js","../work/node_modules/lodash/_baseAssignValue.js","../work/node_modules/lodash/_baseEach.js","../work/node_modules/lodash/_baseFindIndex.js","../work/node_modules/lodash/_baseFlatten.js","../work/node_modules/lodash/_baseFor.js","../work/node_modules/lodash/_baseForOwn.js","../work/node_modules/lodash/_baseGet.js","../work/node_modules/lodash/_baseGetAllKeys.js","../work/node_modules/lodash/_baseGetTag.js","../work/node_modules/lodash/_baseHasIn.js","../work/node_modules/lodash/_baseIsArguments.js","../work/node_modules/lodash/_baseIsEqual.js","../work/node_modules/lodash/_baseIsEqualDeep.js","../work/node_modules/lodash/_baseIsMatch.js","../work/node_modules/lodash/_baseIsNative.js","../work/node_modules/lodash/_baseIsTypedArray.js","../work/node_modules/lodash/_baseIteratee.js","../work/node_modules/lodash/_baseKeys.js","../work/node_modules/lodash/_baseMap.js","../work/node_modules/lodash/_baseMatches.js","../work/node_modules/lodash/_baseMatchesProperty.js","../work/node_modules/lodash/_basePick.js","../work/node_modules/lodash/_basePickBy.js","../work/node_modules/lodash/_baseProperty.js","../work/node_modules/lodash/_basePropertyDeep.js","../work/node_modules/lodash/_baseSet.js","../work/node_modules/lodash/_baseSetToString.js","../work/node_modules/lodash/_baseSome.js","../work/node_modules/lodash/_baseTimes.js","../work/node_modules/lodash/_baseToString.js","../work/node_modules/lodash/_baseUnary.js","../work/node_modules/lodash/_cacheHas.js","../work/node_modules/lodash/_castPath.js","../work/node_modules/lodash/_coreJsData.js","../work/node_modules/lodash/_createBaseEach.js","../work/node_modules/lodash/_createBaseFor.js","../work/node_modules/lodash/_createFind.js","../work/node_modules/lodash/_defineProperty.js","../work/node_modules/lodash/_equalArrays.js","../work/node_modules/lodash/_equalByTag.js","../work/node_modules/lodash/_equalObjects.js","../work/node_modules/lodash/_flatRest.js","../work/node_modules/lodash/_freeGlobal.js","../work/node_modules/lodash/_getAllKeys.js","../work/node_modules/lodash/_getMapData.js","../work/node_modules/lodash/_getMatchData.js","../work/node_modules/lodash/_getNative.js","../work/node_modules/lodash/_getRawTag.js","../work/node_modules/lodash/_getSymbols.js","../work/node_modules/lodash/_getTag.js","../work/node_modules/lodash/_getValue.js","../work/node_modules/lodash/_hasPath.js","../work/node_modules/lodash/_hashClear.js","../work/node_modules/lodash/_hashDelete.js","../work/node_modules/lodash/_hashGet.js","../work/node_modules/lodash/_hashHas.js","../work/node_modules/lodash/_hashSet.js","../work/node_modules/lodash/_isFlattenable.js","../work/node_modules/lodash/_isIndex.js","../work/node_modules/lodash/_isIterateeCall.js","../work/node_modules/lodash/_isKey.js","../work/node_modules/lodash/_isKeyable.js","../work/node_modules/lodash/_isMasked.js","../work/node_modules/lodash/_isPrototype.js","../work/node_modules/lodash/_isStrictComparable.js","../work/node_modules/lodash/_listCacheClear.js","../work/node_modules/lodash/_listCacheDelete.js","../work/node_modules/lodash/_listCacheGet.js","../work/node_modules/lodash/_listCacheHas.js","../work/node_modules/lodash/_listCacheSet.js","../work/node_modules/lodash/_mapCacheClear.js","../work/node_modules/lodash/_mapCacheDelete.js","../work/node_modules/lodash/_mapCacheGet.js","../work/node_modules/lodash/_mapCacheHas.js","../work/node_modules/lodash/_mapCacheSet.js","../work/node_modules/lodash/_mapToArray.js","../work/node_modules/lodash/_matchesStrictComparable.js","../work/node_modules/lodash/_memoizeCapped.js","../work/node_modules/lodash/_nativeCreate.js","../work/node_modules/lodash/_nativeKeys.js","../work/node_modules/lodash/_nodeUtil.js","../work/node_modules/lodash/_objectToString.js","../work/node_modules/lodash/_overArg.js","../work/node_modules/lodash/_overRest.js","../work/node_modules/lodash/_root.js","../work/node_modules/lodash/_setCacheAdd.js","../work/node_modules/lodash/_setCacheHas.js","../work/node_modules/lodash/_setToArray.js","../work/node_modules/lodash/_setToString.js","../work/node_modules/lodash/_shortOut.js","../work/node_modules/lodash/_stackClear.js","../work/node_modules/lodash/_stackDelete.js","../work/node_modules/lodash/_stackGet.js","../work/node_modules/lodash/_stackHas.js","../work/node_modules/lodash/_stackSet.js","../work/node_modules/lodash/_stringToPath.js","../work/node_modules/lodash/_toKey.js","../work/node_modules/lodash/_toSource.js","../work/node_modules/lodash/constant.js","../work/node_modules/lodash/debounce.js","../work/node_modules/lodash/eq.js","../work/node_modules/lodash/find.js","../work/node_modules/lodash/findIndex.js","../work/node_modules/lodash/flatten.js","../work/node_modules/lodash/get.js","../work/node_modules/lodash/hasIn.js","../work/node_modules/lodash/identity.js","../work/node_modules/lodash/isArguments.js","../work/node_modules/lodash/isArray.js","../work/node_modules/lodash/isArrayLike.js","../work/node_modules/lodash/isBuffer.js","../work/node_modules/lodash/isFunction.js","../work/node_modules/lodash/isLength.js","../work/node_modules/lodash/isObject.js","../work/node_modules/lodash/isObjectLike.js","../work/node_modules/lodash/isSymbol.js","../work/node_modules/lodash/isTypedArray.js","../work/node_modules/lodash/keys.js","../work/node_modules/lodash/map.js","../work/node_modules/lodash/memoize.js","../work/node_modules/lodash/now.js","../work/node_modules/lodash/pick.js","../work/node_modules/lodash/property.js","../work/node_modules/lodash/some.js","../work/node_modules/lodash/stubArray.js","../work/node_modules/lodash/stubFalse.js","../work/node_modules/lodash/throttle.js","../work/node_modules/lodash/toFinite.js","../work/node_modules/lodash/toInteger.js","../work/node_modules/lodash/toNumber.js","../work/node_modules/lodash/toString.js","../work/node_modules/punycode/punycode.js","../work/node_modules/querystring-es3/decode.js","../work/node_modules/querystring-es3/encode.js","../work/node_modules/querystring-es3/index.js","../work/node_modules/select/src/select.js","../work/node_modules/tiny-emitter/index.js","../work/node_modules/url/url.js","../work/node_modules/url/util.js","../work/node_modules/video.js/dist/video.js","../work/node_modules/videojs-watermark/es5/plugin.js","../work/src/css/dvr.css","../work/src/css/videojs-contrib-ads.css","../work/src/css/videojs-hola-skin.css","../work/src/css/videojs-ima.css","../work/src/css/videojs-thumbnails.css","../work/src/css/videojs-watermark.css","../work/src/css/videojs.css","../work/src/dvr.js","../work/src/flashls_source_handler.js","../work/src/hola_player.patched.js","../work/src/id3.js","../work/src/mime.js","../work/src/util.js","../work/node_modules/@hola.org/hap.js/lib/conf.js","../work/node_modules/@hola.org/hap.js/lib/external_util.js","../work/node_modules/@hola.org/hap.js/lib/hola_videojs_hls.js","../work/node_modules/@hola.org/hap.js/lib/zdot_conf.js","../work/node_modules/@hola.org/hls.js/lib/controller/abr-controller.js","../work/node_modules/@hola.org/hls.js/lib/controller/buffer-controller.js","../work/node_modules/@hola.org/hls.js/lib/controller/cap-level-controller.js","../work/node_modules/@hola.org/hls.js/lib/controller/fps-controller.js","../work/node_modules/@hola.org/hls.js/lib/controller/level-controller.js","../work/node_modules/@hola.org/hls.js/lib/controller/stream-controller.js","../work/node_modules/@hola.org/hls.js/lib/controller/timeline-controller.js","../work/node_modules/@hola.org/hls.js/lib/crypt/aes.js","../work/node_modules/@hola.org/hls.js/lib/crypt/aes128-decrypter.js","../work/node_modules/@hola.org/hls.js/lib/crypt/decrypter.js","../work/node_modules/@hola.org/hls.js/lib/demux/aacdemuxer.js","../work/node_modules/@hola.org/hls.js/lib/demux/adts.js","../work/node_modules/@hola.org/hls.js/lib/demux/demuxer-inline.js","../work/node_modules/@hola.org/hls.js/lib/demux/demuxer-worker.js","../work/node_modules/@hola.org/hls.js/lib/demux/demuxer.js","../work/node_modules/@hola.org/hls.js/lib/demux/exp-golomb.js","../work/node_modules/@hola.org/hls.js/lib/demux/id3.js","../work/node_modules/@hola.org/hls.js/lib/demux/tsdemuxer.js","../work/node_modules/@hola.org/hls.js/lib/errors.js","../work/node_modules/@hola.org/hls.js/lib/event-handler.js","../work/node_modules/@hola.org/hls.js/lib/events.js","../work/node_modules/@hola.org/hls.js/lib/helper/aac.js","../work/node_modules/@hola.org/hls.js/lib/helper/buffer-helper.js","../work/node_modules/@hola.org/hls.js/lib/helper/level-helper.js","../work/node_modules/@hola.org/hls.js/lib/hls.js","../work/node_modules/@hola.org/hls.js/lib/loader/fragment-loader.js","../work/node_modules/@hola.org/hls.js/lib/loader/key-loader.js","../work/node_modules/@hola.org/hls.js/lib/loader/playlist-loader.js","../work/node_modules/@hola.org/hls.js/lib/remux/mp4-generator.js","../work/node_modules/@hola.org/hls.js/lib/remux/mp4-remuxer.js","../work/node_modules/@hola.org/hls.js/lib/remux/passthrough-remuxer.js","../work/node_modules/@hola.org/hls.js/lib/utils/attr-list.js","../work/node_modules/@hola.org/hls.js/lib/utils/binary-search.js","../work/node_modules/@hola.org/hls.js/lib/utils/browser.js","../work/node_modules/@hola.org/hls.js/lib/utils/cea-608-parser.js","../work/node_modules/@hola.org/hls.js/lib/utils/cues.js","../work/node_modules/@hola.org/hls.js/lib/utils/logger.js","../work/node_modules/@hola.org/hls.js/lib/utils/polyfill.js","../work/node_modules/@hola.org/hls.js/lib/utils/url.js","../work/node_modules/@hola.org/hls.js/lib/utils/xhr-loader.js","../work/node_modules/@hola.org/videojs5-hlsjs-source-handler/lib/videojs5-hlsjs-source-handler.js","../work/node_modules/events/events.js","../work/node_modules/webworkify/index.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","hola_player","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","AacStream","Stream","everything","Uint8Array","timeStamp","prototype","init","setTimestamp","timestamp","parseId3TagSize","header","byteIndex","returnSize","parseAdtsSize","lowThree","middle","push","bytes","bytesLeft","chunk","packet","tempLength","frameSize","byteLength","set","subarray","charCodeAt","type","data","pts","dts","trigger","AdtsStream","ADTS_SAMPLING_FREQUENCIES","buffer","frameLength","protectionSkipBytes","frameEnd","oldBuffer","sampleCount","adtsFrameDuration","frameNum","audioobjecttype","channelcount","samplerate","samplingfrequencyindex","samplesize","undefined","flush","H264Stream","NalByteStream","ExpGolomb","PROFILES_WITH_OPTIONAL_SPS_DATA","100","110","122","244","44","83","86","118","128","138","139","134","unitTypes","slice_layer_without_partitioning_rbsp","slice_layer_without_partitioning_rbsp_idr","sei_rbsp","seq_parameter_set_rbsp","pic_parameter_set_rbsp","access_unit_delimiter_rbsp","syncPoint","swapBuffer","trackId","currentPts","currentDts","discardEmulationPreventionBytes","readSequenceParameterSet","skipScalingList","nalByteStream","on","event","ev_type","nalUnitType","escapedRBSP","config","count","expGolombDecoder","j","deltaScale","lastScale","nextScale","readExpGolomb","newLength","newData","emulationPreventionBytesPositions","sourceIndex","shift","profileIdc","levelIdc","profileCompatibility","chromaFormatIdc","picOrderCntType","numRefFramesInPicOrderCntCycle","picWidthInMbsMinus1","picHeightInMapUnitsMinus1","frameMbsOnlyFlag","scalingListCount","sarRatio","frameCropLeftOffset","frameCropRightOffset","frameCropTopOffset","frameCropBottomOffset","sarScale","readUnsignedByte","skipUnsignedExpGolomb","readUnsignedExpGolomb","skipBits","readBoolean","skipExpGolomb","readBits","width","Math","ceil","height","adts","h264","FlvTag","extraData","adHoc","bufferStartSize","prepareWrite","flv","minLength","position","view","DataView","widthBytes","heightBytes","videocodecidBytes","keyFrame","VIDEO_TAG","AUDIO_TAG","METADATA_TAG","writeBytes","offset","end","start","max","writeByte","byte","writeShort","short","setUint16","negIndex","pos","nalUnitSize","startNalUnit","endNalUnit","nalContainer","nalStart","nalLength","setUint32","writeMetaDataDouble","key","val","setFloat64","writeMetaDataBoolean","setUint8","finalize","dtsDelta","len","frameTime","isAudioFrame","tag","isVideoFrame","isMetaData","isKeyFrame","Transmuxer","tools","VideoSegmentStream","AudioSegmentStream","CoalesceStream","collectTimelineInfo","metaDataTag","extraDataTag","m2ts","codecs","track","timelineStartInfo","min","sps","pps","oldExtraData","adtsFrames","round","currentFrame","adtsFrame","lastMetaPts","tags","Infinity","h264Frame","nalUnits","finishFrame","frame","newMetadata","currentNal","options","numberOfTracks","metadataStream","videoTags","audioTags","videoTrack","audioTrack","pendingCaptions","pendingMetadata","pendingTracks","output","text","frames","id3","caption","timelineStartPts","captions","metadata","startTime","startPts","endTime","endPts","cueTime","dispatchType","packetStream","parseStream","elementaryStream","adtsStream","h264Stream","videoSegmentStream","audioSegmentStream","captionStream","coalesceStream","MetadataStream","TransportPacketStream","TransportParseStream","ElementaryStream","pipe","CaptionStream","tracks","getFlvHeader","duration","audio","video","result","metadataLength","headBytes","head","muxjs","mp4","mp2t","parseSei","payloadType","payloadSize","payload","parseUserData","sei","String","fromCharCode","parseCaptionPackets","userData","results","ccData","captionPackets_","field1_","Cea608Stream","bind","concat","sort","b","forEach","BASIC_CHARACTER_TRANSLATION","42","92","94","95","96","123","124","125","126","127","getCharFromCode","createDisplayBuffer","BOTTOM_ROW","mode_","topRow_","startPts_","displayed_","nonDisplayed_","lastControlCode_","swap","char0","char1","flushDisplayed","shiftRowsUp_","slice","content","map","row","trim","filter","join","popOn","baseRow","rollUp","StreamTypes","TimestampRolloverStream","m2tsStreamTypes","bytesInBuffer","startIndex","endIndex","parsePsi","parsePat","parsePmt","packetsWaitingForPmt","programMapTable","psi","payloadUnitStartIndicator","pat","section_number","last_section_number","pmtPid","pmt","sectionLength","tableEnd","programInfoLength","processPes_","apply","pid","streamType","STREAM_TYPES","size","timedMetadata","parsePes","pes","extract_ts","arr","index","ts","ptsDtsFlags","dataAlignmentIndicator","flushStream","stream","fragment","packetData","H264_STREAM_TYPE","ADTS_STREAM_TYPE","METADATA_STREAM_TYPE","k","hasOwnProperty","baseMediaDecodeTime","id","codec","PAT_PID","MP2T_PACKET_LENGTH","percentEncode","toString","parseUtf8","decodeURIComponent","parseIso88591","unescape","parseSyncSafeInteger","tagParsers","TXXX","description","value","WXXX","url","PRIV","owner","privateData","settings","debug","descriptor","tagSize","bufferSize","frameStart","frameHeader","console","log","d","handleRollover","reference","direction","abs","lastDTS","referenceDTS","type_","generator","MP4ParserStream","MP4BuilderStream","uint32_to_arr","num","uint16_to_arr","box","cslg","dinf","esds","ftyp","edts","elst","mdat","mfhd","minf","moof","moov","mvex","mvhd","trak","tkhd","mdia","mdhd","hdlr","sdtp","stbl","stsd","traf","trep","trex","trun","types","MAJOR_BRAND","MINOR_VERSION","AVC1_BRAND","VIDEO_HDLR","AUDIO_HDLR","HDLR_TYPES","VMHD","SMHD","DREF","STCO","STSC","STSZ","STTS","UINT32_MAX","pow","avc1","avcC","btrt","dref","mp4a","smhd","stco","stsc","stsz","stts","styp","tfdt","tfhd","vmhd","arguments","byteOffset","obj","ctts_shift","min_ctts","max_ctts","min_cts","max_cts","edit_list","segment_duration","media_time","media_rate","opt","params","compatible","unshift","major","sequenceNumber","trackFragments","boxes","set_duration","floor","flags","samples","isLeading","dependsOn","isDependedOn","videoSample","audioSample","sequenceParameterSets","pictureParameterSets","Array","trackFragmentHeader","trackFragmentDecodeTime","trackFragmentRun","sampleDependencyTable","dataOffset","upperWordBaseMediaDecodeTime","lowerWordBaseMediaDecodeTime","no_multi_init","param","splice","sample","was_neg","hasRedundancy","paddingValue","isNonSyncSample","degradationPriority","compositionTimeOffset","initSegment","fileType","movie","byte_to_hex","bt","int_to_str","tp","getUint64","ptr","getUint32","getInt64","getUint8","Bit_reader","read","peek","ret","p","c","bits","get_hd_times","is_tk","ver","get_table","cnt","tbl","sample_type","vide","soun","full_box","raw_copy","containers","name","multi","exts","Box_parser","b_pos","branch","last","_id","root","h_parsed","parent","b_size","includes","extra","parse","cont","_buff","Object","keys","elm","new_branch","movie_box","start_hdr_sz","end_hdr_sz","major_brand","minor_version","free","wide","skip","hdr","mv_hdr","times","creation_time","modification_time","time_scale","rate","volume","getUint16","matrix","next_track","tk_hdr","enabled","in_movie","in_preview","track_id","layer","alternate_group","getInt16","md_hdr","lang","list","getInt32","handler","_parse_avcc","avc_p_i","prof_compat","avc_l_i","l_size_m_1","n_sps","nal","n_pps","_parse_esds","sb","sz","es_id","obj_t","str_t","ext_type","br","aot","freq","channel","ext_freq_index","ext_freq","dsi","last_ptr","h_res","v_res","f_count","compressor","depth","skip_boxes","avcc","c_count","s_size","s_rate","dtts","u_cnt","ctts","table","s_t_c","f_c","s_p_c","s_d_i","c1","c2","stss","s_sync","stps","s_psync","s_dep","red","is_dep","dep","lead","s_sz","s_count","c_off","co64","Chunk_parser","conf_update","conf","break_on_count","frag_size","process","brands","_this","timescale","s_info","s_p","track_info","tr","media_box","s_off","s_time","s_dri","media_info","sample_table","s_ctts","s_cslg","s_list","c_n","sn","dt","is_sz_arr","isArray","off","max_t","v_idx","dr","event_elm","bitrate","reduce","track_width","track_height","nb_samples","s_i","info","avc_prof_compat","b_start","b_end","pc","max_dcd","sinfo","time","synced","advance","new_pos","finish","seek","use_ss","get_frame","target","m","m_time","tt","i_ss","scale","res_sn","min_t","m_pos","v_fr","v_sn","idx","s_sn","Buffer","_newbuff","c_len","b_parser","c_parser","constructor","get_tl","t_i","use_ssync","seek_info","AudioFilterStream","VideoFilterStream","au","inited","seqno","sc","seg_sz","inits","seg_slice","segment","sd","createDefaultSample","isLikelyAacData","collectDtsInfo","clearDtsInfo","calculateTrackBaseMediaDecodeTime","arrayEquals","sumFrameByteLengths","mp4p","AUDIO_PROPERTIES","VIDEO_PROPERTIES","array","currentObj","sum","earliestAllowedDts","prop","setEarliestDts","earliestDts","trimAdtsFramesByEarliestDts_","generateSampleTable_","concatenateFrameData_","minSegmentDts","minSegmentPts","minPTS","gopCache_","nalUnit","gopForFusion","gops","resetStream_","groupNalsIntoFrames_","groupFramesIntoGops_","getGopForFusion_","nalCount","extendFirstKeyFrame_","concatenateNalData_","gop","pop","dtsDistance","nearestGopObj","currentGop","currentGopObj","nearestDistance","baseDataOffset","h","nalsByteLength","numberOfNals","totalByteLength","maxSegmentPts","maxSegmentDts","timeSinceStartOfTimeline","firstSampleCompositionOffset","remux","remuxTracks","pendingBoxes","pendingBytes","emittedTracks","flushSource","hasFlushed","input_type","transmuxPipeline_","setupAacPipeline","pipeline","aacStream","audioTimestampRolloverStream","timedMetadataTimestampRolloverStream","headOfPipeline","setupTsPipeline","videoTimestampRolloverStream","mp4BuilderStream","ss","setBaseMediaDecodeTime","isAac","appendBuffer","tagTypes","8","9","18","hex","toUpperCase","hexStringList","parseAVCTag","avcPacketTypes","compositionTime","parseInt","avcPacketType","CompositionTime","nalUnitTypeRaw","parseVideoTag","frameTypes","codecID","frameType","parseAACTag","packetTypes","aacPacketType","parseAudioTag","formatTable","samplingRateTable","soundFormat","soundRate","soundSize","soundType","parseGenericTag","tagType","dataSize","streamID","inspectFlvTag","inspectFlv","parsedResults","textifyFlv","flvTagArray","JSON","stringify","inspectTag","inspect","textify","inspectMp4","textifyMp4","parseType","parseMp4Date","seconds","Date","parseSampleFlags","nalParse","avcStream","avcView","dataReferenceIndex","horizresolution","vertresolution","frameCount","numOfPictureParameterSets","nalSize","configurationVersion","avcProfileIndication","avcLevelIndication","lengthSizeMinusOne","numOfSequenceParameterSets","bufferSizeDB","maxBitrate","avgBitrate","version","esId","streamPriority","decoderConfig","objectProfileIndication","decoderConfigDescriptor","audioObjectType","samplingFrequencyIndex","channelConfiguration","majorBrand","minorVersion","compatibleBrands","dataReferences","handlerType","escape","nals","language","creationTime","modificationTime","streamDescriptor","Uint32Array","nextTrackId","pdin","initialDelay","sidx","references","referenceId","earliestPresentationTime","firstOffset","referenceCount","referenceType","referencedSize","subsegmentDuration","startsWithSap","sapType","sapDeltaTime","balance","chunkOffsets","entryCount","sampleToChunks","firstChunk","samplesPerChunk","sampleDescriptionIndex","sampleDescriptions","sampleSize","entries","timeToSamples","sampleDelta","baseDataOffsetPresent","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","alternateGroup","defaultSampleDescriptionIndex","sampleDependsOn","sampleIsDependedOn","sampleHasRedundancy","samplePaddingValue","sampleIsDifferenceSample","sampleDegradationPriority","dataOffsetPresent","firstSampleFlagsPresent","sampleDurationPresent","sampleSizePresent","sampleFlagsPresent","sampleCompositionTimeOffsetPresent","url ","graphicsmode","opcolor","Uint16Array","ab","ArrayBuffer","v","z","inspectedMp4","indent","prefix","match","line","split","workingData","workingBytesAvailable","workingWord","workingBitsAvailable","bitsAvailable","loadWord","workingBytes","availableBytes","skipBytes","valu","skipLeadingZeros","leadingZeroCount","clz","listeners","listener","indexOf","callbacks","args","dispose","destination","_interopRequireDefault","__esModule","default","cancelContentPlay","player","ads","cancelPlayTimeout","_video2","browser","IS_IOS","IS_IPHONE","el_","hasAttribute","currentWidth","currentHeight","placeholder","_document2","createElement","style","background","parentNode","insertBefore","display","one","remove","hasClass","_window2","setTimeout","paused","pause","cancelledPlay","_window","_document","_video","initializeContentupdate","contentSrc","currentSrc","checkSrc","state","src","oldValue","newValue","processMetadataTracks","processMetadataTrack","textTracks","setModeAndProcess","kind","cueTextTracks","setMetadataTrackMode","addEventListener","getSupportedAdCue","cue","getCueId","processAdTrack","cues","processCue","cancelAds","includedCues","cueData","warn","cueId","cueAlreadySeen","setCueAlreadySeen","adMacroReplacement","string","uriEncode","customMacros","macros","options_","mediainfo","reference_id","ad_keys","getTime","referrer","location","href","random","customFields","uriEncodeIfNeeded","replace","context","names","_i","_typeof","Symbol","iterator","encodeURIComponent","customFieldsName","fields","fieldNames","_interopRequireWildcard","newObj","_redispatch","_redispatch2","_snapshot","snapshot","_contentupdate","_contentupdate2","_cancelContentPlay","_cancelContentPlay2","_macros","_macros2","_cueTextTracks","VIDEO_EVENTS","getComponent","Events","removeNativePoster","tech","$","removeAttribute","defaults","timeout","prerollTimeout","postrollTimeout","stitchedAds","contribAdsPlugin","mergeOptions","videoEvents","addClass","play","nopreroll_","nopostroll_","removeClass","disableNextSnapshotRestore","_contentHasEnded","VERSION","reset","startLinearAdMode","endLinearAdMode","skipLinearAdMode","arg","_stitchedAds","videoElementRecycled","srcChanged","currentSrcChanged","isLive","somePlayer","IOS_VERSION","shouldPlayContentBehindAd","disablePlayContentBehindAd","IS_ANDROID","states","content-set","events","adscanceled","adsready","adserror","adskip","ads-ready","preroll?","enter","adTimeoutTimeout","leave","clearTimeout","adstart","adtimeout","nopreroll","ads-ready?","ad-playback","getPlayerSnapshot","preAdVolume_","restorePlayerSnapshot","adend","content-resuming","_fireEndedTimeout","contentupdate","contentresumed","playing","ended","postroll?","content-playback","triggerevent","contentended","processEvent","eventHandlers","previousState","newState","plugin","redispatch","prefixEvent","cancelEvent","isImmediatePropagationStopped","cancelBubble","isPropagationStopped","originalEvent","currentTime","seekable","remoteTracks","remoteTextTracks","suppressedRemoteTracks","suppressedTracks","snapshotObject","currentType","nativePoster","poster","getAttribute","mode","_track","attempts","trackSnapshot","restoreTracks","_i2","resume","tryToResume","tryToResumeTimeout_","el","querySelector","readyState","setAttribute","load","defineProperty","_holaOrgVideoJs","_holaOrgVideoJs2","deprecateOldCue","defineProperties","get","addTextTrackData","sourceHandler","captionArray","metadataArray","Cue","WebKitDataCue","VTTCue","inbandTextTrack_","addCue","timestampOffset","metadataTrack_","isAudioCodec","test","isVideoCodec","parseContentType","object","parameters","parameter","pair","_name","createTextTracksIfNecessary","sourceBuffer","mediaSource","player_","addTextTrack","inBandMetadataTrackDispatchType","flashConstants","TIME_BETWEEN_CHUNKS","BYTES_PER_CHUNK","_classCallCheck","instance","Constructor","TypeError","_inherits","subClass","superClass","create","enumerable","writable","configurable","setPrototypeOf","__proto__","_createClass","props","protoProps","staticProps","_get","_x","_x2","_x3","_again","property","receiver","Function","desc","getOwnPropertyDescriptor","getter","getPrototypeOf","_flashSourceBuffer","_flashSourceBuffer2","_flashConstants","_flashConstants2","_codecUtils","FlashMediaSource","_videojs$EventTarget","sourceBuffers","swfObj","document","getElementById","swfId","tech_","abort","vjs_load","parsedType","error","vjs_endOfStream","EventTarget","vjs_getProperty","NaN","oldDuration","vjs_setProperty","_holaOrgMuxJs","_holaOrgMuxJs2","_removeCuesFromTrack","_removeCuesFromTrack2","_createTextTracksIfNecessary","_createTextTracksIfNecessary2","_addTextTrackData","_addTextTrackData2","scheduleTick","func","generateRandomString","toDecimalPlaces","places","byteArrayToString","str","FlashSourceBuffer","encodedHeader","chunkSize_","buffer_","bufferSize_","basePtsOffset_","updating","timestampOffset_","segmentParser_","receiveBuffer_","btoa","safePlayerId","flashEncodedHeaderName_","flashEncodedDataName_","vjs_appendChunkReady","vjs_discontinuity","createTimeRange","buffered","createTimeRanges","_this2","chunkInData","vjs_abort","_this3","flvBytes","convertTagsToData_","processBuffer_","_this4","chunkSize","b64str","segmentData","segmentByteLength","targetPts","filteredTags","getOrderedTags_","isNaN","_virtualSourceBuffer","_virtualSourceBuffer2","translateLegacyCodecs","orig","profile","avcLevel","Number","HtmlMediaSource","nativeMediaSource_","MediaSource","duration_","activeSourceBuffers_","updateActiveSourceBuffers_","combined","audioOnly","audioTracks","videoCodec_","audioCodec_","audioDisabled_","eventName","url_","transmuxer_","terminate","createRealSourceBuffers_","addSourceBuffer","removeCuesFromTrack","removeCue","wireTransmuxerEvents","transmuxer","typedArray","postMessage","action","MessageHandlers","Worker","onmessage","messageHandlers","_flashMediaSource","_flashMediaSource2","_htmlMediaSource","_htmlMediaSource2","urlCount","mediaSources","open","msObjectURL","supportsNativeMediaSources","isTypeSupported","URL","createObjectURL","_webworkify","_webworkify2","_transmuxerWorker","_transmuxerWorker2","VirtualSourceBuffer","pendingBuffers_","bufferUpdating_","mediaSource_","codecs_","data_","done_","videoBuffer_","audioBuffer_","appendWindowStart","arity","extents","ranges","videoBuffered","audioBuffered","processPendingSegments_","every","sortedSegments","segments","segmentObj","concatAndAppendSegments_","destinationBuffer","tempBuffer","bundleFn","sources","cache","fn","wkey","cacheKeys","wcache","skey","scache","webkitURL","mozURL","msURL","Blob","vjs","add_css","link","getElementsByTagName","appendChild","get_class_name","element","className","add_class_name","class_name","classes","remove_class_name","class_index","toggle_class_name","add","HolaSkin","intv","stagger","steptotal","classes_added","_resize","resize","show_controls_before_start","show_time_for_live","no_vjs_large","offsetWidth","play1","play2","pause1","pause2","morph_html","umorph_html","slider_gaps","set_play_button_state","btn_svg","mk_transition","from","to","steps","parseFloat","delta","mk_transform","from_path","to_path","path1pts","path2pts","pathgen","coord","fld","prev","curr","prv","crr","play_state","first_update","umorph","bars","stepcnt","clearInterval","render_cnt","render_intv","setInterval","is_transformed","mk_path3","mk_path4","mk_path1","mk_path2","no_play_transform","has_played","controlBar","playToggle","insertAdjacentHTML","bigPlayButton","is_ended","update_state","t1","t2","has_pos","volumeMenuButton","volumeBar","progressControl","seekBar","play_button","big_play_button","removeEventListener","MenuButton","VolumeMenuButton","createEl","icon","icon_","innerHTML","firstChild","tooltipHandler","Button","FullscreenToggle","controlText_","updateHint","isFullscreen","controlText","ControlsWatermark","extend","img","buildCSSClass","registerComponent","SeekBar","orig_createEl","css","videojs","factory","ima_defaults","adLabel","showControlsForJSAds","eventTypes","click","mousedown","mouseup","mousemove","readyCallback","ima","ImaPlugin","assignControlAttributes_","controlName","controlPrefix","getClassRegexp_","RegExp","addClass_","classToAdd","removeClass_","classToRemove","classRegexp","createAdContainer_","vjsControls","getChild","adContainerDiv","zIndex","showAdControls_","hideAdControls_","createControls_","adDisplayContainer","google","AdDisplayContainer","contentPlayer","controlsDiv","countdownDiv","showCountdown","seekBarDiv","progressDiv","playPauseDiv","playPauseIcon","playIcon","pauseIcon","playButtonInnerHTML","onAdPlayPauseClick_","muteDiv","getElementsByClassName","onAdMuteClick_","sliderDiv","onAdVolumeSliderMouseDown_","sliderLevelDiv","fullscreenDiv","onAdFullscreenClick_","spacer","initializeAdDisplayContainer","adDisplayContainerInitialized","initialize","requestAds","adsRequest","AdsRequest","adTagUrl","adsResponse","forceNonLinearFullSlot","linearAdSlotWidth","getPlayerWidth","linearAdSlotHeight","getPlayerHeight","nonLinearAdSlotWidth","nonLinearWidth","nonLinearAdSlotHeight","nonLinearHeight","adsLoader","onAdsManagerLoaded_","adsManagerLoadedEvent","adsManager","getAdsManager","contentPlayheadTracker","adsRenderingSettings","AdErrorEvent","Type","AD_ERROR","onAdError_","AdEvent","AD_BREAK_READY","onAdBreakReady_","CONTENT_PAUSE_REQUESTED","onContentPauseRequested_","CONTENT_RESUME_REQUESTED","onContentResumeRequested_","ALL_ADS_COMPLETED","onAllAdsCompleted_","LOADED","onAdLoaded_","STARTED","onAdStarted_","CLICK","COMPLETE","onAdComplete_","SKIPPED","eventsMap","ad-started","ad-ended","ad-skipped","first-quartile","FIRST_QUARTILE","midpoint","MIDPOINT","third-quartile","THIRD_QUARTILE","impression","IMPRESSION","PAUSED","RESUMED","mute","VOLUME_MUTED","autoPlayAdBreaks","initWidth","initHeight","adsManagerDimensions","ViewMode","NORMAL","setVolume","muted","updateVolumeIcon_","adError","cuepoints","getCuePoints","foundpreroll","foundpostroll","startFromReadyCallback","onAdsLoaderError_","getError","destroy","AdError","adErrorEvent","errorMessage","stack","show","adEvent","adBreakReadyListener","playAdBreak","contentSource","localContentEndedListener","getAd","getContentType","hide","showPlayButton","adsActive","adPlaying","contentResumeTimer","currentAd","isLinear","allAdsCompleted","contentComplete","contentAndAdsEndedListeners","adTrackingTimer","onAdPlayheadTrackerInterval_","pod","getAdPodInfo","getAdPosition","getTotalAds","remainingTime","getRemainingTime","getDuration","adPosition","isPod","totalAds","remainingMinutes","remainingSeconds","podCount","playProgressRatio","playProgressPercent","getComputedStyle","showPauseButton","adMuted","onMouseUp_","onMouseMove_","setVolumeSlider_","vol","level","clientX","changedTouches","percent","getBoundingClientRect","left","exitFullscreen","requestFullscreen","onFullscreenChange_","screen","FULLSCREEN","onVolumeChange_","newVolume","seekContentToZero_","playContentFromZero_","resetIMA_","callback","setContent","adTag","playOnLoad","setContentWithAdTag","changeSource_","setContentWithAdsResponse","playAd","addContentEndedListener","contentEndedListeners","addContentAndAdsEndedListener","setAdBreakReadyListener","pauseAd","resumeAd","setUpPlayerIntervals_","updateTimeIntervalHandle","updateCurrentTime_","seekCheckInterval","seekCheckIntervalHandle","checkForSeeking_","resizeCheckIntervalHandle","checkForResize_","resizeCheckInterval","updateStartTime_","cur","seeking","tempCurrentTime","diff","previousTime","seekThreshold","setShowCountdown","showCountdownIn","contentTrackingTimer","adPlayheadTracker","playerDisposedListener","intervalsToClear","interval","contrib_ads_defaults","ads_plugin_settings","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","setting","setLocale","AdsLoader","getSettings","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","vpaidAllowed","DISABLED","vpaidMode","locale","numRedirects","setNumRedirects","setPlayerType","setPlayerVersion","setAutoPlayAdBreaks","AdsManagerLoadedEvent","ADS_MANAGER_LOADED","ready","Flash","Osmf","source","_player","playerId","osmf","flashVars","readyFunction","eventProxyFunction","errorEventProxyFunction","firstplay","loadstart","onLoadedData","onEnded","formats","application/adobe-f4m","application/adobe-f4v","application/dash+xml","canPlaySource","toLowerCase","log_enabled","api","readWrite","readOnly","createSetter","attr","attrUpper","charAt","createGetter","vjs_play","vjs_paused","vjs_pause","streamStatus","isSupported","autoplay","preload","loop","onReady","currentSwf","vjs_src","onError","err","reconnectOnError","reconnecting_","msg","onEvent","supportsFullScreen","enterFullScreen","techOrder","toFixed","is_wrapper_attached","check_bws","hola","hola_cdn","get_wrapper","_get_bws","Clipboard","find","Menu","popped","oncontextmenu","evt","preventDefault","oX","offsetX","oY","offsetY","left_shift","top_shift","offsetHeight","top","check_items","menuEnabled","debugging","addChild","LogButton","label","CopyLogButton","report","ReportButton","InfoButton","graph","GraphButton","about","MenuItemLink","stopPropagation","children","item","enablePopupMenu","disablePopupMenu","is_visible","toggleClass","updateSelected","settings_button","createItems","items","quality","QualityButton","createMenu","menu","component","handleClick","buttonPressed_","unpressButton","pressButton","current_src","cache_","wrapper","w","get_url","selected","level_id","selectedLevel","auto","levels","curLevel","currentLevel","setMinorText","levelsChanged","current","updateQuality","update","Component","custom_class","proto_component","container","createContent","Overlay","info_data","units","title","range","downloaded","buf_sec","create_el","close_btn","close","toggle","title_text","caller","last_caller","visible","flash","MenuItem","prot","localize","overlay","clipboard","hola_logs","onClick","currentTarget","selectable","CustomEvent","createEvent","initCustomEvent","defaultPrevented","current_time","remain_paused","techName_","on_timeupdate","minorLabel","local_storage_set","utils","localStorage","setItem","local_storage_get","getItem","add_settings_button","is_hls_provider","flashlsProvider","hlsProvider","label_sav","source_def","source_sav","class","override_local_storage","ls_level","ls_mute","pseudo","currentStyle","offsetParent","nodeName","getScrollOffset","pageXOffset","x","y","pageYOffset","documentElement","scrollLeft","scrollTop","unfoldSpritesConf","sprites","rows","cols","androidHack","navigator","userAgent","addFakeActive","removeFakeActive","resolveUrl","baseUrl","base","removeChild","getConfByVtt","res","thumb","substring","_thumbs","div","moveListener","clientRect","right","pageX","body","mouseTime","calculateDistance","active","re","naturalWidth","naturalHeight","halfWidth","moveCancel","vtt","trackEl","addRemoteTextTrack","onLoad","getTrackById","get_cookie_item","has_cookie_item","reg_ex","cookie","set_cookie_item","path","domain","secure","expires","toGMTString","removeItem","styleElementsInsertedAtTop","insertStyleElement","styleElement","lastStyleElementInsertedAtTop","insertAt","nextSibling","createLink","attributes","rel","createStyle","cssText","extraOptions","sheet","styleSheet","createTextNode","mod","select","clipboardAction","_select","_select2","ClipboardAction","resolveOptions","initSelection","emitter","selectedText","selectFake","selectTarget","isRTL","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","fontSize","border","padding","margin","yPosition","copyText","succeeded","execCommand","handleResult","emit","clearSelection","focus","getSelection","removeAllRanges","_action","nodeType","_target","tinyEmitter","goodListener","_clipboardAction","_tinyEmitter","_goodListener","_possibleConstructorReturn","ReferenceError","getAttributeValue","suffix","attribute","_clipboardAction2","_tinyEmitter2","_goodListener2","_Emitter","listenClick","defaultAction","defaultTarget","defaultText","delegateTarget","selector","actions","support","queryCommandSupported","closest","DOCUMENT_NODE_TYPE","matches","Element","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","delegate","useCapture","listenerFn","doccy","topLevel","minDoc","win","node","HTMLElement","nodeList","listen","is","listenNode","listenNodeList","listenSelector","getNative","Hash","clear","entry","hashClear","hashDelete","hashGet","hashHas","hashSet","has","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","Map","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","Promise","Set","SetCache","values","__data__","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","WeakMap","thisArg","arrayFilter","predicate","resIndex","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","baseTimes","isIndex","objectProto","arrayMap","iteratee","arrayPush","arraySome","assignValue","objValue","eq","baseAssignValue","assocIndexOf","baseForOwn","createBaseEach","baseEach","baseFindIndex","fromIndex","fromRight","baseFlatten","isStrict","isFlattenable","createBaseFor","baseFor","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","undefinedTag","nullTag","symToStringTag","getRawTag","objectToString","toStringTag","baseHasIn","baseIsArguments","isObjectLike","argsTag","baseIsEqual","other","bitmask","customizer","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","arrayTag","getTag","othTag","objectTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","COMPARE_PARTIAL_FLAG","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_UNORDERED_FLAG","baseIsNative","isObject","isMasked","isFunction","reIsNative","reIsHostCtor","toSource","reRegExpChar","funcProto","funcToString","baseIsTypedArray","isLength","typedArrayTags","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","nativeKeys","baseMap","collection","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","basePick","paths","basePickBy","baseSet","baseProperty","basePropertyDeep","lastIndex","nested","constant","baseSetToString","baseSome","baseToString","isSymbol","symbolToString","INFINITY","symbolProto","baseUnary","cacheHas","stringToPath","coreJsData","eachFunc","iterable","createFind","findIndexFunc","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","dataViewTag","arrayBufferTag","boolTag","dateTag","numberTag","errorTag","message","regexpTag","stringTag","mapTag","convert","mapToArray","setTag","setToArray","symbolTag","symbolValueOf","valueOf","objProps","getAllKeys","objLength","skipCtor","objCtor","othCtor","flatRest","setToString","overRest","flatten","freeGlobal","getSymbols","getMapData","isKeyable","getValue","isOwn","unmasked","nativeObjectToString","stubArray","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","symbol","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","resolve","Ctor","ctorString","hasPath","hasFunc","nativeCreate","HASH_UNDEFINED","spreadableSymbol","isConcatSpreadable","MAX_SAFE_INTEGER","reIsUint","isIterateeCall","reIsPlainProp","reIsDeepProp","maskSrcKey","uid","exec","IE_PROTO","arrayProto","hash","memoizeCapped","memoize","MAX_MEMOIZE_SIZE","overArg","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","binding","transform","nativeMax","otherArgs","freeSelf","shortOut","lastCalled","stamp","nativeNow","remaining","HOT_SPAN","HOT_COUNT","now","pairs","LARGE_ARRAY_SIZE","reLeadingDot","rePropName","reEscapeChar","number","quote","debounce","wait","invokeFunc","lastArgs","lastThis","lastInvokeTime","leadingEdge","timerId","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","maxing","nativeMin","maxWait","shouldInvoke","trailingEdge","trailing","cancel","debounced","isInvoking","FUNC_ERROR_TEXT","toNumber","findIndex","toInteger","defaultValue","stubFalse","nativeIsBuffer","funcTag","genTag","asyncTag","proxyTag","nodeIsTypedArray","resolver","memoized","Cache","pick","some","guard","throttle","toFinite","MAX_INTEGER","remainder","NAN","reTrim","isBinary","reIsBinary","reIsOctal","freeParseInt","reIsBadHex","RangeError","errors","mapDomain","parts","regexSeparators","ucs2decode","counter","ucs2encode","stringFromCharCode","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","numPoints","firstTime","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","delimiter","maxInt","tMin","encode","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toASCII","regexNonASCII","punycode","overflow","not-basic","invalid-input","ucs2","qs","sep","regexp","maxKeys","kstr","vstr","substr","xs","stringifyPrimitive","isFinite","objectKeys","ks","isReadOnly","setSelectionRange","selection","createRange","selectNodeContents","addRange","E","ctx","once","_","evtArr","evts","liveEvents","Url","protocol","slashes","auth","host","port","hostname","search","query","pathname","urlParse","parseQueryString","slashesDenoteHost","util","urlFormat","isString","format","urlResolve","relative","urlResolveObject","resolveObject","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","queryIndex","splitter","uSplit","slashRegex","rest","simplePath","lowerProto","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","ae","esc","qm","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","isNull","hasTrailingSlash","up","isAbsolute","2","foreach","hasSymbols","toStr","supportsDescriptors","predicates","object-keys","3","forEachArray","forEachString","forEachObject","is-function","4","hasOwn","5","that","bound","binder","boundLength","boundArgs","Empty","6","implementation","./implementation","7","min-document","alert","confirm","prompt","10","../internal/getNative","11","timeoutId","maxTimeoutId","trailingCall","complete","isCalled","delayed","maxDelayed","leadingCall","../date/now","../lang/isObject","12","restParam","13","./debounce","14","arrayCopy","15","arrayEach","16","baseCopy","17","./createBaseFor","baseForIn","keysIn","../object/keysIn","./baseFor","19","baseMerge","stackA","stackB","isSrcArr","baseMergeDeep","isCommon","../lang/isArray","../lang/isTypedArray","../object/keys","./arrayEach","./baseMergeDeep","./isArrayLike","./isObjectLike","20","mergeFunc","isPlainObject","toPlainObject","../lang/isArguments","../lang/isPlainObject","../lang/toPlainObject","./arrayCopy","21","toObject","./toObject","22","bindCallback","argCount","accumulator","../utility/identity","23","createAssigner","assigner","../function/restParam","./bindCallback","./isIterateeCall","24","25","getLength","./baseProperty","26","isNative","../lang/isNative","27","./getLength","./isLength","28","isHostObject","29","30","./isIndex","31","32","33","shimKeys","propsLength","allowIndexes","../lang/isString","34","unindexedChars","../support","35","../internal/isArrayLike","../internal/isObjectLike","36","objToString","nativeIsArray","../internal/isLength","37","./isObject","38","fnToString","../internal/isHostObject","./isFunction","39","40","ownLast","subValue","../internal/baseForIn","./isArguments","41","43","../internal/baseCopy","enumPrototypes","../internal/shimKeys","45","isProto","skipErrorProps","enumErrorProps","errorProto","skipProto","nonEnumShadows","stringProto","nonEnums","nonEnumProps","shadowProps","nonEnum","toLocaleString","../internal/arrayEach","../internal/isIndex","../lang/isFunction","46","merge","../internal/baseMerge","../internal/createAssigner","47","0","spliceObjects","48","49","isArgs","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","excludedKeys","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","keysShim","theKeys","skipConstructor","shim","originalKeys","50","callee","51","sym","symObj","getOwnPropertyNames","syms","52","canBeObject","propIsEnumerable","originalGetSymbols","source1","objTarget","./hasSymbols","function-bind","53","getPolyfill","polyfill","./polyfill","./shim","define-properties","54","lacksProperEnumerationOrder","assign","letters","actual","assignHasPendingExceptions","preventExtensions","thrower","55","56","headers","for-each","57","SafeParseTuple","reviver","json","58","59","clean","sa","60","isEmpty","initParams","uri","xtend","createXHR","_createXHR","readystatechange","xhr","loadFunc","getBody","response","responseText","getXml","isJson","errorFunc","timeoutTimer","statusCode","failureResponse","aborted","status","useXDR","method","rawRequest","getAllResponseHeaders","parseHeaders","called","cors","XDomainRequest","XMLHttpRequest","sync","onreadystatechange","onload","onerror","onprogress","ontimeout","username","password","withCredentials","setRequestHeader","responseType","beforeSend","send","responseXML","firefoxBugTakenEffect","noop","global/window","parse-headers","61","62","_buttonJs","_buttonJs2","_componentJs","_componentJs2","BigPlayButton","_Button","tooltip","./button.js","./component.js","63","_clickableComponentJs","_clickableComponentJs2","_component","_component2","_utilsEventsJs","_utilsFnJs","_utilsLogJs","_utilsLogJs2","_globalDocument","_objectAssign","_objectAssign2","_ClickableComponent","tabIndex","role","aria-live","createControlTextEl","child","handleKeyPress","which","./clickable-component.js","./component","./utils/events.js","./utils/fn.js","./utils/log.js","global/document","object.assign","64","_utilsDomJs","Dom","Fn","_globalDocument2","_tooltip","_tooltip2","ClickableComponent","_Component","appendTooltip","emitTapEvents","handleFocus","handleBlur","controlTextEl_","enable","disable","tooltips","getEl","./tooltip","./utils/dom.js","65","_button","_button2","CloseButton","bubbles","./button","66","_globalWindow","_globalWindow2","_utilsGuidJs","Guid","_utilsToTitleCaseJs","_utilsToTitleCaseJs2","_utilsMergeOptionsJs","_utilsMergeOptionsJs2","id_","newGUID","name_","children_","childIndex_","childNameIndex_","initChildren","reportTouchActivity","enableTouchActivity","removeElData","tagName","properties","languages","primaryCode","primaryLang","contentEl","contentEl_","getChildById","componentName","componentClassName","componentClass","ComponentClass","childNodes","refNode","childFound","compEl","parentOptions","handleAdd","opts","playerOptions","newChild","workingChildren","Tech","wchild","isTech","first","second","third","removeOnDispose","guid","cleanRemover","_arguments","newFunc","isReady_","readyQueue_","triggerReady","readyQueue","$$","classToCheck","hasElClass","addElClass","removeElClass","classToToggle","toggleElClass","lockShowing","unlockShowing","skipListeners","dimension","dimensions","widthOrHeight","pxIndex","currentDimension","computedWidthOrHeight","computedStyle","getPropertyValue","rule","currentDimensions","touchStart","firstTouch","couldBeTap","touches","pageY","xdiff","ydiff","touchDistance","sqrt","noTap","cancelable","reportUserActivity","touchHolding","touchEnd","disposeFn","intervalId","comp","components_","subObj","./utils/guid.js","./utils/merge-options.js","./utils/to-title-case.js","67","_trackButtonJs","_trackButtonJs2","_audioTrackMenuItemJs","_audioTrackMenuItemJs2","AudioTrackButton","_TrackButton","../../component.js","../../utils/fn.js","../track-button.js","./audio-track-menu-item.js","68","_menuMenuItemJs","_menuMenuItemJs2","AudioTrackMenuItem","_MenuItem","changeHandler","handleTracksChange","../../menu/menu-item.js","69","_playToggleJs","_timeControlsCurrentTimeDisplayJs","_timeControlsDurationDisplayJs","_timeControlsTimeDividerJs","_timeControlsRemainingTimeDisplayJs","_liveDisplayJs","_progressControlProgressControlJs","_fullscreenToggleJs","_volumeControlVolumeControlJs","_volumeMenuButtonJs","_muteToggleJs","_textTrackControlsChaptersButtonJs","_textTrackControlsDescriptionsButtonJs","_textTrackControlsSubtitlesButtonJs","_textTrackControlsCaptionsButtonJs","_audioTrackControlsAudioTrackButtonJs","_playbackRateMenuPlaybackRateMenuButtonJs","_spacerControlsCustomControlSpacerJs","ControlBar","dir","loadEvent","../component.js","./audio-track-controls/audio-track-button.js","./fullscreen-toggle.js","./live-display.js","./mute-toggle.js","./play-toggle.js","./playback-rate-menu/playback-rate-menu-button.js","./progress-control/progress-control.js","./spacer-controls/custom-control-spacer.js","./text-track-controls/captions-button.js","./text-track-controls/chapters-button.js","./text-track-controls/descriptions-button.js","./text-track-controls/subtitles-button.js","./time-controls/current-time-display.js","./time-controls/duration-display.js","./time-controls/remaining-time-display.js","./time-controls/time-divider.js","./volume-control/volume-control.js","./volume-menu-button.js","70","../button.js","../utils/fn.js","71","LiveDisplay","updateShowing","../component","../utils/dom.js","72","MuteToggle","toMute","../button","73","PlayToggle","handlePlay","handlePause","74","_menuMenuButtonJs","_menuMenuButtonJs2","_menuMenuJs","_menuMenuJs2","_playbackRateMenuItemJs","_playbackRateMenuItemJs2","PlaybackRateMenuButton","_MenuButton","updateVisibility","updateLabel","labelEl_","rates","playbackRates","updateARIAAttributes","playbackRate","currentRate","newRate","playbackRateSupported","../../menu/menu-button.js","../../menu/menu.js","../../utils/dom.js","./playback-rate-menu-item.js","75","PlaybackRateMenuItem","contentElType","76","LoadProgressBar","bufferedEnd","percentify","77","_utilsFormatTimeJs","_utilsFormatTimeJs2","_lodashCompatFunctionThrottle","_lodashCompatFunctionThrottle2","MouseTimeDisplay","keepTooltipsInside","progressEl","handleMouseMove","isPercent","newTime","maxLeft","findElPosition","tooltipWidth","maxTooltipLeft","tooltipPosition","clampedPosition","clampPosition_","difference","tooltipWidthHalf","getPointerPosition","playerWidth","actualPosition","../../utils/format-time.js","lodash-compat/function/throttle","78","PlayProgressBar","updateDataAttr","scrubbing","getCache","79","_seekBarJs","_mouseTimeDisplayJs","ProgressControl","./mouse-time-display.js","./seek-bar.js","80","_sliderSliderJs","_sliderSliderJs2","_loadProgressBarJs","_playProgressBarJs","_tooltipProgressBarJs","_utilsBrowserJs","_Slider","updateProgress","tooltipProgressBar","aria-label","updateAriaAttributes","bar","tooltipStyle","maxWidth","minWidth","getPercent","handleMouseDown","videoWasPlaying","handleMouseUp","stepForward","stepBack","barName","IE_VERSION","playerEvent","../../slider/slider.js","../../utils/browser.js","./load-progress-bar.js","./play-progress-bar.js","./tooltip-progress-bar.js","81","TooltipProgressBar","formattedTime","82","_spacerJs","_spacerJs2","CustomControlSpacer","_Spacer","./spacer.js","Spacer","84","_textTrackMenuItemJs","_textTrackMenuItemJs2","CaptionSettingsMenuItem","_TextTrackMenuItem","./text-track-menu-item.js","85","_textTrackButtonJs","_textTrackButtonJs2","_captionSettingsMenuItemJs","_captionSettingsMenuItemJs2","CaptionsButton","_TextTrackButton","threshold","kind_","./caption-settings-menu-item.js","./text-track-button.js","_chaptersTrackMenuItemJs","_chaptersTrackMenuItemJs2","ChaptersButton","chaptersTrack","_length","insertElFirst","remoteTextTrackEl","remoteTextTrackEls","getTrackElementByTrack_","mi","../../utils/to-title-case.js","./chapters-track-menu-item.js","87","ChaptersTrackMenuItem","88","DescriptionsButton","disabled","89","OffTextTrackMenuItem","90","SubtitlesButton","91","_offTextTrackMenuItemJs","_offTextTrackMenuItemJs2","TextTrackButton","./off-text-track-menu-item.js","TextTrackMenuItem","onchange","Event","initEvent","dispatchEvent","93","CurrentTimeDisplay","updateContent","localizedText","formattedTime_","DurationDisplay","RemainingTimeDisplay","TimeDivider","97","TrackButton","updateHandler","../menu/menu-button.js","98","_volumeLevelJs","_volumeDisplayJs","VolumeBar","checkMuted","./volume-display.js","./volume-level.js","99","_volumeBarJs","VolumeControl","./volume-bar.js","VolumeDisplay","handleHover","handleLeave","tooltipClassName","tooltipParentLeft","minTooltipLeft","101","VolumeLevel","102","_popupPopupJs","_popupPopupJs2","_popupPopupButtonJs","_popupPopupButtonJs2","_muteToggleJs2","_volumeControlVolumeBarJs","_volumeControlVolumeBarJs2","_PopupButton","inline","vertical","volumeUpdate","orientationClass","createPopup","popup","vb","menuContent","attachVolumeBarEvents","ownerDocument","../popup/popup-button.js","../popup/popup.js","./volume-control/volume-bar.js","103","_modalDialog","_modalDialog2","_utilsDom","_utilsMergeOptions","_utilsMergeOptions2","ErrorDisplay","_ModalDialog","fillAlways","temporary","uncloseable","./modal-dialog","./utils/dom","./utils/merge-options","104","allowedEvents_","ael","fixEvent","105","_utilsLog","_utilsLog2","super_","extendFn","subClassMethods","methods","./utils/log","106","FullscreenApi","apiMap","specApi","browserApi","107","LoadingSpinner","108","MediaError","defaultMessages","errorTypes","errNum","109","_menuJs","_menuJs2","enabled_","handleSubmenuKeyPress","addItem","menuButtonClass","blur","../clickable-component.js","../utils/to-title-case.js","./menu.js","attrs","_selected","111","focusedChild_","append","stopImmediatePropagation","stepChild","../utils/events.js","112","_utilsFn","_closeButton","MODAL_CLASS_NAME","ModalDialog","opened_","hasBeenOpened_","hasBeenFilled_","closeable","descEl_","textContent","aria-describedby","aria-hidden","fill","wasPlaying_","controls","opened","closeable_","_close","temp","fillWith","parentEl","nextSiblingEl","empty","insertContent","emptyEl","content_","./close-button","./utils/fn","113","_utilsTimeRangesJs","_utilsBufferJs","_utilsStylesheetJs","stylesheet","_fullscreenApiJs","_fullscreenApiJs2","_mediaErrorJs","_mediaErrorJs2","_safeJsonParseTuple","_safeJsonParseTuple2","_tracksTextTrackListConverterJs","_tracksTextTrackListConverterJs2","_tracksAudioTrackListJs","_tracksAudioTrackListJs2","_tracksVideoTrackListJs","_tracksVideoTrackListJs2","_techLoaderJs","_posterImageJs","_tracksTextTrackDisplayJs","_loadingSpinnerJs","_bigPlayButtonJs","_controlBarControlBarJs","_errorDisplayJs","_tracksTextTrackSettingsJs","_techTechJs","_techTechJs2","_techHtml5Js","Player","getTagSettings","tagAttributes","getElAttributes","languagesToLower","languages_","poster_","controls_","scrubbing_","playerOptionsCopy","plugins","isAudio","flexNotSupported_","players","userActive","listenForUserActivity_","handleFullscreenChange_","handleStageClick_","styleEl_","VIDEOJS_NO_DYNAMIC_STYLE","createStyleElement","defaultsStyleEl","fluid","aspectRatio","links","linkEl","initNetworkState_","networkState","_dimension","privDimension","parsedVal","updateStyleEl_","bool","fluid_","ratio","aspectRatio_","_width","width_","_height","height_","techEl","idClass","videoWidth","videoHeight","ratioParts","ratioMultiplier","setTextContent","loadTech_","techName","unloadTech_","getTech","disposeMediaElement","techOptions","nativeControlsForTouch","techId","videoTracks","videoTracks_","textTracks_","audioTracks_","vtt.js","currentType_","techComponent","handleTechReady_","jsonToTextTracks","textTracksJson_","handleTechLoadStart_","handleTechWaiting_","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechEnded_","handleTechSeeking_","handleTechSeeked_","handleTechPlay_","handleTechFirstPlay_","handleTechPause_","handleTechProgress_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechError_","handleTechSuspend_","handleTechAbort_","handleTechEmptied_","handleTechStalled_","handleTechLoadedMetaData_","handleTechLoadedData_","handleTechTimeUpdate_","handleTechRateChange_","handleTechVolumeChange_","handleTechTextTrackChange_","handleTechPosterChange_","textTracksToJson","safety","IWillNotUseThisInPlugins","errorText","addTechControlsListeners_","removeTechControlsListeners_","handleTechClick_","handleTechTouchStart_","handleTechTouchMove_","handleTechTouchEnd_","handleTechTap_","usingNativeControls","techGet_","techCall_","hasStarted","_hasStarted","hasStarted_","starttime","button","userWasActive","isScrubbing","bufferedPercent","percentAsDecimal","_muted","isFS","isFullscreen_","fsApi","fullscreenchange","documentFullscreenChange","fullscreenElement","enterFullWindow","exitFullWindow","isFullWindow","docOrigOverflow","fullWindowOnEscKey","keyCode","canPlayType","can","selectSource","techs","_ref","findFirstPassingTechSourcePair","outerArray","innerArray","tester","found","outerChoice","innerChoice","finder","_ref2","sourceOrder","currentTech","sourceList_","sourceTech","notSupportedMessage","usingNativeControls_","error_","errorDisplay","userActivity_","userActive_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","inactivityTimeout","isAudio_","removeRemoteTextTrack","_ref3","_ref3$track","language_","toJSON","createModal","modal","baseOptions","tagOptions","dataSetup","_safeParseTuple","hasChildNodes","childName","html5","defaultVolume","userLanguage","handleLoadedMetaData_","handleLoadedData_","handleUserActive_","handleUserInactive_","handleTimeUpdate_","handleVolumeChange_","handleError_","elem","./big-play-button.js","./control-bar/control-bar.js","./error-display.js","./fullscreen-api.js","./loading-spinner.js","./media-error.js","./poster-image.js","./tech/html5.js","./tech/loader.js","./tech/tech.js","./tracks/audio-track-list.js","./tracks/text-track-display.js","./tracks/text-track-list-converter.js","./tracks/text-track-settings.js","./tracks/video-track-list.js","./utils/browser.js","./utils/buffer.js","./utils/stylesheet.js","./utils/time-ranges.js","safe-json-parse/tuple","114","_playerJs","_playerJs2","./player.js","115","_popupJs","PopupButton","./popup.js","116","Popup","117","PosterImage","BACKGROUND_SIZE_SUPPORTED","fallbackImg_","setSrc","backgroundImage","_windowLoaded","autoSetup","vids","audios","mediaEls","mediaEl","autoSetupTimeout","hasLoaded","119","Slider","aria-valuenow","aria-valuemin","aria-valuemax","doc","blockTextSelection","unblockTextSelection","progress","percentage","vertical_","120","FlashRtmpDecorator","streamingFormats","rtmp/mp4","rtmp/flv","streamFromParts","connection","streamToParts","connEnd","streamBegin","isStreamingType","srcType","RTMP_RE","isStreamingSrc","rtmpSourceHandler","canHandleSource","handleSource","srcParts","registerSourceHandler","121","_createGetter","_api","_tech","_tech2","_utilsUrlJs","_flashRtmp","_flashRtmp2","_Tech","setSource","lastSeekTarget_","swf","objId","accelerated","allowfullscreen","wmode","bgcolor","embed","setCurrentTime","_src","getAbsoluteURL","currentSource_","_readWrite","_readOnly","withSourceHandlers","nativeSourceHandler","ext","getFileExtension","video/flv","video/x-flv","video/mp4","video/m4v","currSwf","checkReady","swfID","ActiveXObject","GetVariable","mimeTypes","enabledPlugin","getEmbedCode","flashVarsString","paramsString","attrsString","flashvars","allowScriptAccess","allowNetworking","registerTech","../utils/time-ranges.js","../utils/url.js","./flash-rtmp","./tech","_templateObject","strings","raw","_techJs","_techJs2","_tsml","_tsml2","_srcJsTracksTextTrackJs","Html5","crossoriginTracks","handleLateInit_","nodes","nodesLength","removeNodes","featuresNativeTextTracks","addTrackElement_","addTrack_","isCrossOrigin","capitalType","tl","handleTextTrackChange_","handleTextTrackChange","handleTextTrackAdd_","handleTextTrackAdd","handleTextTrackRemove_","handleTextTrackRemove","proxyNativeTextTracks_","TOUCH_ENABLED","IS_NATIVE_ANDROID","setControls","clone","cloneNode","setElAttributes","settingsAttrs","overwriteAttrs","_ret","loadstartFired","setLoadstartFired","triggerLoadstart","eventsToTrigger","srcElement","removeTrack_","handleVideoTrackChange_","vt","handleVideoTrackAdd_","handleVideoTrackRemove_","handleAudioTrackChange_","audioTrackList","handleAudioTrackAdd_","handleAudioTrackRemove_","playPromise","then","setMuted","webkitEnterFullScreen","HAVE_METADATA","exitFullScreen","webkitExitFullScreen","resetMediaElement","setPoster","setPreload","setAutoplay","setLoop","defaultMuted","played","setPlaybackRate","htmlTrackElement","srclang","trackElement","removeTrackElement_","TEST_VID","canControlVolume","canControlPlaybackRate","IS_CHROME","supportsNativeTextTracks","IS_ANY_SAFARI","supportsNativeVideoTracks","supportsNativeAudioTracks","mpegurlRE","mp4RE","patchCanPlayType","ANDROID_VERSION","IS_OLD_ANDROID","unpatchCanPlayType","querySelectorAll","../../../src/js/tracks/text-track.js","../utils/browser.js","../utils/log.js","../utils/merge-options.js","./tech.js","tsml","MediaLoader","_tracksHtmlTrackElement","_tracksHtmlTrackElement2","_tracksHtmlTrackElementList","_tracksHtmlTrackElementList2","_tracksTextTrack","_tracksTextTrack2","_tracksTextTrackList","_tracksTextTrackList2","_tracksVideoTrack","_tracksVideoTrackList","_tracksVideoTrackList2","_tracksAudioTrackList","_tracksAudioTrackList2","_tracksAudioTrack","featuresProgressEvents","manualProgressOn","featuresTimeupdateEvents","manualTimeUpdatesOn","nativeCaptions","nativeTextTracks","emulateTextTracks","initTextTrackListeners","initTrackListeners","onDurationChange","manualProgress","trackProgress","manualProgressOff","stopTrackingProgress","progressInterval","numBufferedPercent","bufferedPercent_","manualTimeUpdates","trackCurrentTime","stopTrackingCurrentTime","manualTimeUpdatesOff","currentTimeInterval","manuallyTriggered","clearTracks","textTrackListChanges","trackListChanges","script","updateDisplay","textTracksChanges","remoteTextTracks_","remoteTextTrackEls_","createTrackHelper","techs_","featuresVolumeControl","featuresFullscreenResize","featuresPlaybackRate","handlers","sourceHandlers","selectSourceHandler","srcObj","sh","fnName","originalFn","sourceHandler_","disposeSourceHandler","firstLoadStartListener_","successiveLoadStartListener_","../media-error.js","../tracks/audio-track","../tracks/audio-track-list","../tracks/html-track-element","../tracks/html-track-element-list","../tracks/text-track","../tracks/text-track-list","../tracks/video-track","../tracks/video-track-list","../utils/buffer.js","Tooltip","handleHover_","handleLeave_","_text","text_","_handler","handler_","parent_","parentWidth","parentLeft","minSkew","maxSkew","_trackList","_trackList2","disableOthers","AudioTrackList","_TrackList","IS_IE8","changing_","addTrack","removeTrack","./track-list","_trackEnums","_track2","AudioTrack","_Track","AudioTrackKind","newEnabled","loaded_","../utils/merge-options","./track","./track-enums","HtmlTrackElementList","trackElements","trackElements_","trackElement_","_length2","_length3","129","_eventTarget","_eventTarget2","NONE","HTMLTrackElement","_EventTarget","LOADING","ERROR","../event-target","130","TextTrackCueList","setCues_","length_","oldLength","cues_","defineProp","getCueById","131","constructColor","color","opacity","tryUpdateStyle","fontMap","monospace","sansSerif","serif","monospaceSansSerif","monospaceSerif","proportionalSansSerif","proportionalSerif","casual","smallcaps","TextTrackDisplay","toggleDisplay","modes","subtitles","trackList","firstDesc","firstCaptions","aria-atomic","clearDisplay","descriptionsTrack","captionsSubtitlesTrack","updateForTrack","overrides","getValues","cueDiv","displayState","textOpacity","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","bottom","fontFamily","fontVariant","../menu/menu-item.js","../menu/menu.js","132","trackToJson_","acc","trackEls","trackObjs","addedTrack","133","TextTrackList","rtrack","tracks_","getSelectedOptionValue","selectedOption","selectedOptions","selectedIndex","setSelectedOption","captionOptionsMenuTemplate","TextTrackSettings","persistTextTrackSettings","saveSettings","restoreSettings","textEdge","fgColor","bgColor","bgOpacity","setValues","ttDisplay","135","_textTrackCueList","_textTrackCueList2","_trackJs","_trackJs2","_xhr","_xhr2","parseCues","srcContent","parser","WebVTT","Parser","vttjs","StringDecoder","oncue","onparsingerror","onflush","groupCollapsed","groupEnd","loadTrack","crossOrigin","responseBody","loadHandler","TextTrack","TextTrackKind","TextTrackMode","default_","activeCues_","activeCues","changed","timeupdateHandler","newMode","ct","_removeCue","removed","cuechange","./text-track-cue-list","./track.js","136","VideoTrackKind","alternative","main","sign","commentary","descriptions","main-desc","translation","chapters","hidden","showing","137","TrackList","change","addtrack","removetrack","_event","Track","trackProps","../utils/guid.js","VideoTrackList","140","VideoTrack","newSelected","141","USER_AGENT","webkitVersionMap","appleWebkitVersion","IS_IPAD","IS_IPOD","minor","IS_FIREFOX","IS_EDGE","IS_SAFARI","DocumentTouch","142","bufferedDuration","_timeRangesJs","./time-ranges.js","143","_logJs","_logJs2","defaultBehaviors","messages","Proxy","./log.js","144","isNonBlankString","throwIfWhitespace","classRegExp","createQuerier","isEl","propName","attrName","innerText","getElData","elIdAttr","elData","hasElData","classList","contains","attrValue","knownBooleans","attrVal","onselectstart","docEl","clientLeft","clientTop","boxW","boxH","boxY","boxX","isTextNode","normalizeContent","appendContent","_guidJs","./guid.js","145","_handleMultipleEvents","dispatcher","handlersCopy","attachEvent","removeType","_cleanUpEvents","elemData","targetData","returnTrue","returnFalse","old","relatedTarget","fromElement","toElement","returnValue","clientY","charCode","detachEvent","_domJs","./dom.js","146","147","formatTime","guide","gm","gh","148","_guid","149","_logType","argsArray","history","150","isPlain","_lodashCompatObjectMerge2","_lodashCompatObjectMerge","lodash-compat/object/merge","151","152","createTimeRangesObj","getRange","valueIndex","rangeIndex","rangeCheck","maxIndex","153","toTitleCase","154","parseUrl","addToBody","details","splitPathRe","pathParts","winLoc","urlInfo","155","_setup","setup","_player2","_pluginsJs","_pluginsJs2","_srcJsUtilsMergeOptionsJs","_srcJsUtilsMergeOptionsJs2","_tracksTextTrackJs","_tracksTextTrackJs2","_tracksAudioTrackJs","_tracksAudioTrackJs2","_tracksVideoTrackJs","_tracksVideoTrackJs2","_extendJs","_extendJs2","_utilsCreateDeprecationProxyJs","_utilsCreateDeprecationProxyJs2","_techFlashJs","HTMLVideoElement","getPlayers","HOLA_VERSION","addLanguage","_merge","setAttributes","getAttributes","../../src/js/utils/merge-options.js","./event-target","./extend.js","./player","./plugins.js","./setup","./tech/flash.js","./tracks/audio-track.js","./tracks/text-track.js","./tracks/video-track.js","./utils/create-deprecation-proxy.js","./utils/format-time.js","./utils/url.js","cueShim","regionShim","VTTRegion","oldVTTCue","oldVTTRegion","restore","findDirectionSetting","directionSetting","findAlignSetting","alignSetting","cobj","isIE8","baseObj","hasBeenReset","_pauseOnExit","_startTime","_endTime","_region","_vertical","_snapToLines","_line","_lineAlign","_position","_positionAlign","_size","_align","SyntaxError","autoKeyword","lr","rl","getCueAsHTML","convertCueToDOMTree","findScrollSetting","scrollSetting","isValidPercentValue","_lines","_regionAnchorX","_regionAnchorY","_viewportAnchorX","_viewportAnchorY","_scroll","lines","regionAnchorY","regionAnchorX","viewportAnchorY","viewportAnchorX","scroll","ParsingError","errorData","parseTimeStamp","computeSeconds","Settings","_objCreate","parseOptions","keyValueDelim","groupDelim","groups","kv","parseCue","regionList","consumeTimeStamp","Errors","BadTimeStamp","oInput","skipWhitespace","region","alt","vals","vals0","integer","lineAlign","snapToLines","align","positionAlign","parseContent","unescape1","ESCAPE","rootDiv","tagStack","createProcessingInstruction","annotation","TAG_NAME","localName","TAG_ANNOTATION","NEEDS_PARENT","isStrongRTLChar","strongRTLRanges","currentRange","determineBidi","pushNodes","nodeStack","nextTextNode","computeLinePos","textTrackList","mediaElement","StyleBox","CueStyleBox","styleOptions","styles","writingMode","unicodeBidi","applyStyles","textAlign","font","whiteSpace","stylesunicodeBidi","textPos","formatStyle","move","BoxPosition","lh","offsetTop","rects","getClientRects","lineHeight","moveBoxToLinePosition","styleBox","containerBox","boxPositions","boxPosition","linePos","axis","step","maxPosition","initialAxis","reverse","calculatedPercentage","bestPosition","specifiedPosition","overlapsOppositeAxis","within","overlapsAny","intersectPercentage","toCSSCompatValues","F","BadSignature","dflt","defaultKey","&","<",">","‎","‏"," ","ruby","rt","unit","toMove","overlaps","b2","getSimpleBoxPosition","cuetext","processCues","paddedOverlay","decoder","TextDecoder","reportOrThrowError","collectNextLine","parseRegion","xy","anchor","onregion","parseTimestampMap","ontimestampmap","MPEGTS","LOCAL","alreadyCollectedLine","hasSubstring","_videoJs","_videoJs2","fadeTime","image","setupWatermark","videoEl","onclick","fadeWatermark","onPlayerReady","watermark","el_pos","client","remove_child","child_name","hls","hls_obj","flashls","dvr","seek_to_live","is_live","live_threshold","avg_duration","targetduration","format_time","max_left","tp_width","max_tp_left","tp_pos","partEls_","buff","total","FlashlsProvider","height_label","bitrate_label","scaled_number","level_label","switch_quality","qualityId","manual_level","update_quality","hola_hls_get_levels","on_msg","player_id","averageduration","sliding_start","mediatime","live_sliding_main","on_hola_attach","hola_settings","find_player","hola_hls_get_type","mime","is_hls_type","is_hls_link","ready_cb","pl","set_defaults","auto_play","base_url","video_url","video_type","guess_link_type","load_deps","deps","dashjs","MediaPlayer","init_element","init_vjs","tech_call_rewrites","tech_call","on_cdn_graph_overlay","bws","cdn_graph","_get_mode","ldr","loader","gopt","player_obj","zdot","load_script","get_existing_handler","init_ads_id3","played_cues","ad","parse_id3","adID","is_hls","is_dash","is_dash_link","is_dash_type","is_hds","is_hds_link","is_hds_type","is_adaptive","reset_native_hls","load_cdn_loader","current_script","customer","async","hlsjs_source_handler","hola_vjs_provider_require","flashls_source_handler","attach","unique_id","videoel","cb","vjs_opt","get_vjs_opt","videojs-settings","videojs-hola-skin","hola_skin","videojs-thumbnails","thumbnails","videojs-contrib-ads","videojs-ima","videojs-contrib-dash","videojs-watermark","init_ads","init_captions","init_watermark","controls_watermark","MEDIA_ERR_SRC_NOT_SUPPORTED","only_flash","is_flv_link","get_settings_opt","origin_opts","osmf_swf","hlsjsConfig","fragLoadingLoopThreshold","manifestLoadingTimeOut","manifestLoadingMaxRetry","levelLoadingTimeOut","levelLoadingMaxRetry","xhrSetup","inactivity_timeout","skin","videojs_options","add_rewrite","remove_rewrite","existing","cursor","hideAdContainer","manual","get_ima","handle_play_pause","contribAdsSettings","player_tracks","read_int","read_utf","parse_txxx","parse_frames","is_rx_link","rx","mp4_suffix","hls_suffix","hds_suffix","dash_suffix","flv_suffix","webm_suffix","is_mp4_link","is_webm_link","currentScript","scripts","id_counter","rand","sizes","trunc","get_str_conf","get_url_conf","urls","get_conf","def_empty","hp_key","provider_id","ls","zdot_conf","check_filter","is_filter_in","is_register_disabled","external_util","user_agent","guess_browser","guess","platform","mobile","tv","opera","browser_in","browser_out","os_in","os","os_out","platform_in","platform_out","init_conf","autoinit","hls_params","embedded_provider","conv","parse_obj","parse_leaf","__Function__","__RegExp__","parsed","v2","ios_ua","ua","safari_ver","ios_ver","ios","hola_ios","is_browser","hola_cdn_sdk","check_ios_cdn","check_chromium","check_webview","check_opera","group","win_versions","10.0","6.3","6.2","6.1","6.0","5.2","5.1","5.0","arch_mapping","x86_64","i686","arm","check_hola","check_android_cdn","check_edge","check_xbox","check_ucbrowser","ucbrowser","xbox","edge","android","webview","hola_android","hola_app","chromium_based","opera_version","ucbrowser_version","webos_app","palemoon","release_version","arch","nix","detach","Hls","provider","provider_version","hls_version","init_failure","register_percent","register_browser","_events","_events2","_eventHandler","_eventHandler2","_bufferHelper","_bufferHelper2","_errors","_logger","AbrController","_EventHandler","FRAG_LOADING","FRAG_LOAD_PROGRESS","FRAG_LOADED","lastLoadedFragLevel","_autoLevelCapping","_nextAutoLevel","onCheck","abandonRulesCheck","clearTimer","timer","fragCurrent","frag","stats","loadCounter","lastfetchduration","performance","trequest","lastbw","loaded","media","logger","autoLevel","requestDelay","loadRate","expectedLen","fragLoadedDelay","bufferStarvationDelay","bufferInfo","maxBufferHole","fragLevelNextLoadedDelay","nextLoadLevel","FRAG_LOAD_EMERGENCY_ABORTED","ErrorDetails","FRAG_LOAD_ERROR","FRAG_LOAD_TIMEOUT","newLevel","maxAutoLevel","maxLevelBitrate","nextLevel","BufferController","MEDIA_ATTACHING","MEDIA_DETACHING","BUFFER_RESET","BUFFER_APPENDING","BUFFER_CODECS","BUFFER_EOS","BUFFER_FLUSHING","FRAG_PARSING_DATA","FRAG_APPENDING","LEVEL_UPDATED","_msDuration","_levelDuration","onsbue","onSBUpdateEnd","onsbe","onSBUpdateError","audioBuffer","startPTS","audioTimestampOffset","ms","onmso","onMediaSourceOpen","onmse","onMediaSourceEnded","onmsc","onMediaSourceClose","endOfStream","flushRange","appended","waitForAppended","MEDIA_DETACHED","MEDIA_ATTACHED","onBufferCodecs","doAppending","isSbUpdating","FRAG_APPENDED","keepSec","st","dump","_needsFlush","doFlush","_needsEos","onBufferEos","updateMediaElementDuration","keep","keepBuffered","lastSegment","printDump","ErrorTypes","MEDIA_ERROR","BUFFER_APPENDING_ERROR","fatal","removeSourceBuffer","dumpSegments","levelCodec","isMp3","isTrackChanged","detachMedia","attachMedia","trackName","mimeType","BUFFER_ADD_CODEC_ERROR","startOffset","endOffset","flushBufferCounter","fragments","totalduration","levelDuration","flushBuffer","BUFFER_FLUSHED","dumpSegment","appendError","BUFFER_APPEND_ERROR","reason","appendErrorMaxRetry","BUFFER_FULL_ERROR","bufStart","bufEnd","flushStart","flushEnd","isFirefox","POSITIVE_INFINITY","CapLevelController","FPS_DROP_LEVEL_CAPPING","MANIFEST_PARSED","capLevelToPlayerSize","restrictedLevels","autoLevelCapping","isLevelRestricted","droppedLevel","firstLevel","getMaxLevel","detectPlayerSize","levelsLength","streamController","nextLevelSwitch","capLevelIndex","mWidth","mediaWidth","mHeight","mediaHeight","lWidth","lHeight","pixelRatio","devicePixelRatio","clientWidth","contentScaleFactor","clientHeight","FPSController","isVideoPlaybackQualityAvailable","capLevelOnFPSDrop","getVideoPlaybackQuality","checkFPSInterval","fpsDroppedMonitoringPeriod","decodedFrames","droppedFrames","lastTime","currentPeriod","currentDropped","lastDroppedFrames","currentDecoded","lastDecodedFrames","droppedFPS","FPS_DROP","totalDroppedFrames","fpsDroppedMonitoringThreshold","videoPlaybackQuality","checkFPS","totalVideoFrames","droppedVideoFrames","webkitDecodedFrameCount","webkitDroppedFrameCount","_levelHelper","_levelHelper2","LevelController","MANIFEST_LOADED","MANIFEST_REPLACE","LEVEL_LOADED","ontick","tick","_manualLevel","_levels","loadError","levelDetails","live","canload","_level","videoCodec","audioCodec","levels0","bitrateSet","videoCodecFound","audioCodecFound","brokenmp4inmp3","isChrome","checkSupported","isVideoLevel","AUDIO","redundantLevelId","urlId","parseManifest","bitrateStart","_firstLevel","MANIFEST_INCOMPATIBLE_CODECS_ERROR","LEVEL_SWITCH","LEVEL_LOADING","OTHER_ERROR","LEVEL_SWITCH_ERROR","levelId","levelError","FRAG_LOOP_LOADING_ERROR","KEY_LOAD_ERROR","KEY_LOAD_TIMEOUT","LEVEL_LOAD_ERROR","LEVEL_LOAD_TIMEOUT","clearLevelDetailsOnSwitching","recoverable","abrController","nextAutoLevel","newDetails","reloadInterval","averagetargetduration","curDetails","endSN","levelsPreload","setLevelInternal","_startLevel","_demuxer","_demuxer2","_binarySearch","_binarySearch2","State","STOPPED","STARTING","IDLE","KEY_LOADING","FRAG_LOADING_WAITING_RETRY","WAITING_LEVEL","PARSING","PARSED","ENDED","StreamController","MANIFEST_LOADING","LEVEL_REPLACE","LEVEL_PTS_UPDATED","KEY_LOADED","FRAG_CHUNK_LOADED","FRAG_PARSING_INIT_SEGMENT","FRAG_PARSED","DEMUXER_QUEUE_EMPTY","audioCodecSwap","ticks","noMediaCount","stopLoad","fragPreviousSaved","startPosition","lastCurrentTime","lastLevel","demuxer","fragParsing","fragPrevious","fragLoadError","_lastLevel","loadLevel","waitLiveLevel","startLevel","nextLoadPosition","stopDemuxer","enableWorker","waitQueue","doTick","loadedmetadata","bufferController","_doTickIdle","startSN","retryDate","_checkBuffer","_checkFragmentChanged","levelLastLoaded","startFragRequested","startFragPrefetch","maxBufLen","maxBufferSize","maxBufferLength","maxMaxBufferLength","bufferLen","trace","_fetchPayloadOrEos","fragLen","bufferEnd","_ensureFragmentAtLivePoint","_findFragment","_loadFragmentOrKey","maxLatency","liveMaxLatencyDuration","liveMaxLatencyDurationCount","maxFragLookUpTolerance","liveSyncPosition","computeLivePosition","PTSKnown","targetSN","holaSeek","foundFrag","seekFlag","candidate","lastGop","firstGop","curSNIdx","prevFrag","nextFrag","ignoreBacktrack","backtracked","dropped","deltaPTS","maxSeekHole","isBuffered","forceQid","_ref4","decryptdata","autoLevelEnabled","fragLoadIdx","maxThreshold","loadIdx","fragTimeOffset","tfirst","bufferRange","getBufferRange","immediateSwitch","previouslyPaused","flushMainBuffer","fetchdelay","nextRange","nextLevelId","fragLastKbps","followingBufferRange","flushScope","altAudio","onvseeking","onMediaSeeking","onvseeked","onMediaSeeked","onvended","onMediaEnded","autoStartLoad","startLoad","checkPrevious","fragStartOffset","fragEndOffset","seekDuringFirst","stalled","aac","heaac","audioCodecSwitch","startLevelLoaded","newLevelId","levelPreload","sliding","lastDetails","canMerge","reinit","adjustSliding","clearLevelDetails","mergeDetails","keymaps","savedKeymaps","savedChunk","newdata","final","keymapObject","new_map","switchPoint","old_map","firstSN","idr","indr","fragLevel","defaultAudioCodec","lastAudioCodec","cc","mediaSeeking","accurateTimeOffset","tload","channelCount","isAndroid","unique","mergedTrack","audiovideo","tparse2","endPTS","startDTS","endDTS","nb","data1","data2","tparsed","lastGopPTS","drift","updateFragPTS","detFrag","sameLevel","disableBacktrack","timeRangesToString","tbuffered","FRAG_BUFFERED","fragLoadingMaxRetry","delay","fragLoadingRetryDelay","_reduceMaxBufferLength","startPositionBuffered","expectedPlaying","playheadMoving","stallReported","dur","BUF_STATISTICS","bufNotStalled","lowBuf","stallLowBuf","nudgeRetry","tnow","stalledDuration","lowBufferWatchdogPeriod","BUFFER_STALLED_ERROR","bufStalledLow","nextBufferStart","nextStart","nudgeOffset","BUFFER_SEEK_OVER_HOLE","hole","bufSeekOverHole","highBufferWatchdogPeriod","bufStalledHigh","nudgeMaxRetry","_currentTime","targetTime","BUFFER_NUDGE_ON_STALL","bufNudge","immediateLevelSwitchEnd","lu","oldDetails","targetLatency","liveSyncDuration","liveSyncDurationCount","nextState","_state","STREAM_STATE_TRANSITION","nextBufferRange","_cea608Parser","_cea608Parser2","_cues","_cues2","TimelineController","FRAG_PARSING_USERDATA","enableCEA708Captions","channel1","newCue","textTrack1","createTextTrack","channel2","textTrack2","cea608Parser","lastPts","NEGATIVE_INFINITY","closedCaptions","clearCurrentCues","ccdatas","extractCea608Data","addData","byteArray","tmpByte","ccbyte1","ccbyte2","ccValid","ccType","actualCCBytes","AES","_tables","_precompute","tmp","encKey","decKey","sbox","decTable","keyLen","rcon","_key","xInv","x2","x4","x8","tEnc","tDec","encTable","sboxInv","th","encrypted0","encrypted1","encrypted2","encrypted3","a2","nInnerRounds","kIndex","table0","table1","table2","table3","_aes","_aes2","AES128Decrypter","initVector","iv","word","encrypted","init0","init1","init2","init3","wordIx","encrypted32","Int32Array","decipher","decrypted","decrypted32","ntoh","decrypt","doDecrypt","localDecrypt","_aes128Decrypter","_aes128Decrypter2","Decrypter","browserCrypto","crypto","subtle","webkitSubtle","disableWebCrypto","enableSoftwareAES","decryptBySoftware","decryptByWebCrypto","importKey","importedKey","catch","onWebCryptoError","key8","iv8","decrypter","ivview","FRAG_DECRYPT_ERROR","_adts","_adts2","_id2","AACDemuxer","observer","remuxerClass","typeSupported","remuxer","_aacTrack","isAAC","timeOffset","accurate","frameDuration","frameIndex","headerLength","aacSample","fragStats","keyFrames","notFirstKeyframe","audiosamplerate","getAudioConfig","PES_TIMESCALE","initDTS","_initDTS","nextAvcDts","_PTSNormalize","hasTimeStamp","ADTS","hlsConfig","adtsObjectType","adtsSampleingIndex","adtsExtensionSampleingIndex","adtsChanelConfig","adtsSampleingRates","FRAG_PARSING_ERROR","_aacdemuxer","_aacdemuxer2","_tsdemuxer","_tsdemuxer2","_mp4Remuxer","_mp4Remuxer2","_passthroughRemuxer","_passthroughRemuxer2","DemuxerInline","onFragParsingData","ev","lastSN","probe","_demuxerInline","_demuxerInline2","_events3","_events4","DemuxerWorker","_len","_len2","_key2","removeListener","cmd","objData","FRAG_STATISTICS","FRAG_PARSING_METADATA","_demuxerWorker","_demuxerWorker2","_decrypter","_decrypter2","Demuxer","trail","enableMP2TPassThrough","mpeg","mp3","disableMp3","work","onwmsg","onWorkerMessage","demuxInitialized","traillen","newlen","olddata","newtrail","localthis","decryptedData","pushDecrypted","bytesAvailable","skipLZ","readUEG","readEG","readUByte","skipUEG","skipEG","ID3","_hasTimeStamp","byte1","byte2","byte3","byte4","endPos","readUTF","_parseID3Frames","_payload","tagId","pts33Bit","_timeStamp","_expGolomb","_expGolomb2","TSDemuxer","lastCC","_setEmptyTracks","_clearAllData","levelParams","clearParams","_avcTrack","oldParams","inputTimeScale","nbNalu","_id3Track","_txtTrack","smooth","audioConfig","pmtParsed","_pmtId","_clearIDs","aacOverFlow","aacLastPTS","avcNaluState","switchLevel","_avcData","_aacData","_id3Data","_clearAvcData","_clearAacData","_clearID3Data","insertDiscontinuity","stt","avcData","aacData","id3Data","codecsOnly","passthrough","unknownPIDs","convertPS","lastAVCFrameStart","_duration","contiguous","numSample","trackSwitch","currentSN","avcId","aacId","id3Id","lastContiguous","framesCount","keymap","avc","remuxAVCCount","remuxAACCount","fragStartPts","fragStartDts","gopStartDTS","fragStartAVCPos","fragStartAACPos","_parsePES","_parseAVCPES","pmtId","_parseAACPES","_parseMPEGPES","_parseID3PES","_parsePAT","_parsePMT","avcSample","pushAccessUnit","_save","_new","_recalcTrack","forceReinit","maxk","segStartDTS","segEndDTS","_saveAVCSamples","_saveAACSamples","_saveID3Samples","_saveTextSamples","nextAacPts","videoStartDTS","videoEndDTS","expectedSampleDuration","nextAacPTS","AVUnsync","disableBrakeByGop","gopEndDTS","ISGenerated","_filterSamples","nextStartPts","_initPTS","mpegSupported","mpg","HEVC","unknownStream","pesFlags","pesLen","pesHdrLen","pesData","pesPts","pesDts","payloadStartOffset","avcTrack","_parseAVCNALu","spsfound","createAVCSample","lastUnit","debugString","_addKey","lastPos","_arr","check","sliceType","readSliceType","discardEPB","endOfCaptions","wholeBytesAvailable","disableSEIkeyframes","readUShort","readUInt","firstByte","secondByte","totalCCs","_insertSampleInOrder","readSPS","codecarray","codecstring","unitType","lastUnitStart","lastUnitType","lastState","_units","_avcSample","_units2","_lastUnit","EPBPositions","newPTS","_parseMpeg","bitRate","sampleRate","BitratesMap","SamplingRateMap","headerB","headerC","headerE","headerF","headerG","columnInBitrates","columnInSampleRates","_onMpegFrame","_onMpegNoise","NETWORK_ERROR","MANIFEST_LOAD_ERROR","MANIFEST_LOAD_TIMEOUT","MANIFEST_PARSING_ERROR","INTERNAL_EXCEPTION","EventHandler","handledEvents","useGenericHandler","registerListeners","unregisterListeners","isEventHandler","onEventGeneric","eventToFunction","funcName","PLAYER_CREATED","PLAYER_DESTROYED","FRAG_CHANGED","DESTROYING","AAC","BufferHelper","maxHoleDuration","vbuffered","bufferedInfo","bufferStart","bufferStartNext","buffered2","buf2len","buf2end","LevelHelper","_LevelHelper$probeDet","probeDetails","getTimes","startTS","endTS","programDateTime","oldTimes","newTimes","PTSFrag","oldfragments","newfragments","ccOffset","_LevelHelper$probeDet2","oldFrag","newFrag","fragIdx","updatePTS","fromIdx","toIdx","fragFrom","fragTo","fragToPTS","_playlistLoader","_playlistLoader2","_fragmentLoader","_fragmentLoader2","_abrController","_abrController2","_bufferController","_bufferController2","_capLevelController","_capLevelController2","_streamController","_streamController2","_levelController","_levelController2","_timelineController","_timelineController2","_fpsController","_fpsController2","_xhrLoader","_xhrLoader2","_keyLoader","_keyLoader2","_browser","_browser2","defaultConfig","DefaultConfig","enableLogs","playlistLoader","fragmentLoader","levelController","capLevelController","fpsController","timelineController","keyLoader","checkOpera","checkChrome","isIe","enableSmoothStreaming","manifestLoadingRetryDelay","levelLoadingRetryDelay","fragLoadingTimeOut","fLoader","pLoader","cueHandler","stretchShortVideoTrack","removeAllListeners","globalId","swapAudioCodec","immediateLevelSwitch","manualLevel","FragmentLoader","loadsuccess","loaderror","loadtimeout","loadprogress","loadchunk","KeyLoader","decryptkey","decrypturl","_url","_url2","_attrList","_attrList2","PlaylistLoader","loading","id2","parseMasterPlaylist","parseLevelPlaylist","id1","retry","retryDelay","buildAbsoluteURL","baseurl","resolution","decimalResolution","decimalInteger","NAME","enumeratedString","CODECS","avc1toavcoti","segmentNumber","uint8View","levelkey","cloneObj","createInitializationVector","avcdata","fragdecryptdata","byteRangeEndOffset","byteRangeStartOffset","minDuration","tagList","fragmentDecryptdataFromLevelkey","decryptparams","keyAttrs","decryptmethod","decrypturi","URI","decryptiv","hexadecimalInteger","responseURL","mtime","getResponseHeader","MP4",".mp3","pasp","videoHdlr","audioHdlr","STSD","avc1Brand","FTYP","DINF","hSpacing","vSpacing","configlen","cts","arraylen","isNonSync","degradPrio","_aac","_aac2","_mp4Generator","_mp4Generator2","MP4Remuxer","PES2MP4SCALEFACTOR","MP4_TIMESCALE","id3Track","textTrack","generateIS","audioData","remuxAudio","audioTrackLength","audioStartPTS","remuxVideo","videoData","remuxEmptyAudio","remuxID3","remuxText","initPTS","audioSamples","videoSamples","pesTimeScale","computePTSDTS","greatestCommonDivisor","mp4SampleDuration","firstPTS","firstDTS","lastPTS","pes2mp4ScaleFactor","inputSamples","outputSamples","ptsNormalize","timeScale","isSafari","deltadts","deltapts","PTSDTSshift","videoGap","lastSamples","_sample","videoDurAvg","videoDurStd","cttsError","mp4SampleLength","lastFrameDuration","gapTolerance","deltaToFrameEnd","mp4Sample","ptsnorm","dtsnorm","fillFrame","newStamp","mp4timeScale","rawMPEG","samples0","pesFrameDuration","nextPtsNorm","ptsNorm","_i3","audioGap","missing","getSilentFrame","_delta","numMissingFrames","_i4","lastSampleDuration","nbSamples","audioDurAvg","audioDurStd","_i5","silentFrame","noSilentFrame","PassThroughRemuxer","rawData","AttrList","parseAttrList","intValue","stringValue","BinarySearch","comparisonFunction","minIndex","currentIndex","currentElement","comparisonResult","vendor","specialCea608CharsCodes","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","getCharForByte","NR_ROWS","NR_COLS","rowsLowCh1","rowsHighCh1","rowsLowCh2","rowsHighCh2","backgroundColors","verboseFilter","DATA","DEBUG","INFO","WARNING","TEXT","verboseLevel","setTime","severity","minLevel","numArrayToHexArray","numArray","hexArray","PenState","foreground","underline","italics","attribs","newPenState","StyledUnicodeChar","uchar","penState","copy","equals","newChar","isDefault","Row","chars","currPenState","equal","absPos","relPos","newPos","setPenState","setCursor","moveCursor","setChar","backSpace","char","startPos","clearFromPos","setStyles","CaptionScreen","currRow","nrRollUpRows","clearToEndOfRow","insertChar","setPenStyles","pacData","newRow","prevPos","setPen","bkgData","nrRows","getDisplayText","topRowIndex","topRow","asOneRow","displayText","rowNr","rowText","getTextString","Cea608Channel","channelNumber","outputFilter","chNr","verbose","displayedMemory","nonDisplayedMemory","lastOutputScreen","currRollUpRow","writeScreen","cueStartTime","lastCueEndTime","newHandler","setPAC","setBkgData","outputDataUpdate","setMode","setRollUpRows","nrCols","colorIndex","colors","updateData","Cea608Parser","field","out1","out2","outputs","channels","currChNr","lastCmdA","lastCmdB","bufferedData","dataCounters","getHandler","setHandler","byteList","cmdFound","charsFound","parseCmd","parseMidrow","parsePAC","parseBackgroundAttributes","parseChars","insertChars","cond1","cond2","ccRCL","ccBS","ccAOF","ccAON","ccDER","ccRU","ccFON","ccRDC","ccTR","ccRTD","ccEDM","ccCR","ccENM","ccEOC","ccTO","ccMIDROW","case1","case2","interpretPAC","pacIndex","channelNr","charCodes","charCode1","oneCode","hexCodes","cueSplitAtTime","Cues","captionScreen","indenting","TextTrackCue","formatMsg","consolePrintFn","checkRepeatWrapper","lastMsg","exportLoggerFunctions","debugConfig","_len3","functions","_key3","exportedLogger","holaLog","fakeLogger","hlsObject","resultArray","URLHelper","baseURL","relativeURL","relativeURLQuery","relativeURLHash","relativeURLHashSplit","relativeURLQuerySplit","baseURLHashSplit","baseURLQuerySplit","baseURLDomainSplit","baseURLProtocol","baseURLProtocolDomain","baseURLPath","builtURL","buildAbsolutePath","basePath","relativePath","nUpLn","nEnd","sRelPath","sDir","sPath","nStart","XhrLoader","timeoutHandle","retryHandle","onSuccess","onTimeout","maxRetry","onProgress","byteRange","loadInternal","onloadend","loadend","lengthComputable","HolaProviderHLS","_log","_hls","loadSource","switchQuality","hola_adaptive","_handleMediaError","_errorCounts","recoverMediaError","_onError","scaledNumber","heightLabel","bitrateLabel","levelLabel","_onWaitingForData","_preload","_seekableStart","_seekableEnd","errorTxt","mediaError","MEDIA_ERR_ABORTED","MEDIA_ERR_DECODE","MEDIA_ERR_NETWORK","hls_","hlsHandler","hola_log","attached","obsolete_param","hlsjsConfig_","videojs2","registered_techs","_can_play_type","EventEmitter","_maxListeners","isNumber","isUndefined","defaultMaxListeners","setMaxListeners","er","addListener","newListener","warned","fired","listenerCount","evlistener","resolveSources","workerSources","depPath","depKey","exp","blob","bare","workerUrl","worker","objectURL"],"mappings":"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","file":"hola_player.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","/**\n * mux.js\n *\n * Copyright (c) 2016 Brightcove\n * All rights reserved.\n *\n * A stream-based aac to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n'use strict';\nvar Stream = require('../utils/stream.js');\n\n// Constants\nvar AacStream;\n\n/**\n * Splits an incoming stream of binary data into ADTS and ID3 Frames.\n */\n\nAacStream = function() {\n var\n everything = new Uint8Array(),\n timeStamp = 0;\n\n AacStream.prototype.init.call(this);\n\n this.setTimestamp = function(timestamp) {\n timeStamp = timestamp;\n };\n\n this.parseId3TagSize = function(header, byteIndex) {\n var\n returnSize = (header[byteIndex + 6] << 21) |\n (header[byteIndex + 7] << 14) |\n (header[byteIndex + 8] << 7) |\n (header[byteIndex + 9]),\n flags = header[byteIndex + 5],\n footerPresent = (flags & 16) >> 4;\n\n if (footerPresent) {\n return returnSize + 20;\n }\n return returnSize + 10;\n };\n\n this.parseAdtsSize = function(header, byteIndex) {\n var\n lowThree = (header[byteIndex + 5] & 0xE0) >> 5,\n middle = header[byteIndex + 4] << 3,\n highTwo = header[byteIndex + 3] & 0x3 << 11;\n\n return (highTwo | middle) | lowThree;\n };\n\n this.push = function(bytes) {\n var\n frameSize = 0,\n byteIndex = 0,\n bytesLeft,\n chunk,\n packet,\n tempLength;\n\n // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n if (everything.length) {\n tempLength = everything.length;\n everything = new Uint8Array(bytes.byteLength + tempLength);\n everything.set(everything.subarray(0, tempLength));\n everything.set(bytes, tempLength);\n } else {\n everything = bytes;\n }\n\n while (everything.length - byteIndex >= 3) {\n if ((everything[byteIndex] === 'I'.charCodeAt(0)) &&\n (everything[byteIndex + 1] === 'D'.charCodeAt(0)) &&\n (everything[byteIndex + 2] === '3'.charCodeAt(0))) {\n\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (everything.length - byteIndex < 10) {\n break;\n }\n\n // check framesize\n frameSize = this.parseId3TagSize(everything, byteIndex);\n\n // Exit early if we don't have enough in the buffer\n // to emit a full packet\n if (frameSize > everything.length) {\n break;\n }\n chunk = {\n type: 'timed-metadata',\n data: everything.subarray(byteIndex, byteIndex + frameSize)\n };\n this.trigger('data', chunk);\n byteIndex += frameSize;\n continue;\n } else if ((everything[byteIndex] & 0xff === 0xff) &&\n ((everything[byteIndex + 1] & 0xf0) === 0xf0)) {\n\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (everything.length - byteIndex < 7) {\n break;\n }\n\n frameSize = this.parseAdtsSize(everything, byteIndex);\n\n // Exit early if we don't have enough in the buffer\n // to emit a full packet\n if (frameSize > everything.length) {\n break;\n }\n\n packet = {\n type: 'audio',\n data: everything.subarray(byteIndex, byteIndex + frameSize),\n pts: timeStamp,\n dts: timeStamp\n };\n this.trigger('data', packet);\n byteIndex += frameSize;\n continue;\n }\n byteIndex++;\n }\n bytesLeft = everything.length - byteIndex;\n\n if (bytesLeft > 0) {\n everything = everything.subarray(byteIndex);\n } else {\n everything = new Uint8Array();\n }\n };\n};\n\nAacStream.prototype = new Stream();\n\nmodule.exports = AacStream;\n","'use strict';\n\nvar Stream = require('../utils/stream.js');\n\nvar AdtsStream;\n\nvar\n ADTS_SAMPLING_FREQUENCIES = [\n 96000,\n 88200,\n 64000,\n 48000,\n 44100,\n 32000,\n 24000,\n 22050,\n 16000,\n 12000,\n 11025,\n 8000,\n 7350\n ];\n\n/*\n * Accepts a ElementaryStream and emits data events with parsed\n * AAC Audio Frames of the individual packets. Input audio in ADTS\n * format is unpacked and re-emitted as AAC frames.\n *\n * @see http://wiki.multimedia.cx/index.php?title=ADTS\n * @see http://wiki.multimedia.cx/?title=Understanding_AAC\n */\nAdtsStream = function() {\n var buffer;\n\n AdtsStream.prototype.init.call(this);\n\n this.push = function(packet) {\n var\n i = 0,\n frameNum = 0,\n frameLength,\n protectionSkipBytes,\n frameEnd,\n oldBuffer,\n sampleCount,\n adtsFrameDuration;\n\n if (packet.type !== 'audio') {\n // ignore non-audio data\n return;\n }\n\n // Prepend any data in the buffer to the input data so that we can parse\n // aac frames the cross a PES packet boundary\n if (buffer) {\n oldBuffer = buffer;\n buffer = new Uint8Array(oldBuffer.byteLength + packet.data.byteLength);\n buffer.set(oldBuffer);\n buffer.set(packet.data, oldBuffer.byteLength);\n } else {\n buffer = packet.data;\n }\n\n // unpack any ADTS frames which have been fully received\n // for details on the ADTS header, see http://wiki.multimedia.cx/index.php?title=ADTS\n while (i + 5 < buffer.length) {\n\n // Loook for the start of an ADTS header..\n if (buffer[i] !== 0xFF || (buffer[i + 1] & 0xF6) !== 0xF0) {\n // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n i++;\n continue;\n }\n\n // The protection skip bit tells us if we have 2 bytes of CRC data at the\n // end of the ADTS header\n protectionSkipBytes = (~buffer[i + 1] & 0x01) * 2;\n\n // Frame length is a 13 bit integer starting 16 bits from the\n // end of the sync sequence\n frameLength = ((buffer[i + 3] & 0x03) << 11) |\n (buffer[i + 4] << 3) |\n ((buffer[i + 5] & 0xe0) >> 5);\n\n sampleCount = ((buffer[i + 6] & 0x03) + 1) * 1024;\n adtsFrameDuration = (sampleCount * 90000) /\n ADTS_SAMPLING_FREQUENCIES[(buffer[i + 2] & 0x3c) >>> 2];\n\n frameEnd = i + frameLength;\n\n // If we don't have enough data to actually finish this ADTS frame, return\n // and wait for more data\n if (buffer.byteLength < frameEnd) {\n return;\n }\n\n // Otherwise, deliver the complete AAC frame\n this.trigger('data', {\n pts: packet.pts + (frameNum * adtsFrameDuration),\n dts: packet.dts + (frameNum * adtsFrameDuration),\n sampleCount: sampleCount,\n audioobjecttype: ((buffer[i + 2] >>> 6) & 0x03) + 1,\n channelcount: ((buffer[i + 2] & 1) << 2) |\n ((buffer[i + 3] & 0xc0) >>> 6),\n samplerate: ADTS_SAMPLING_FREQUENCIES[(buffer[i + 2] & 0x3c) >>> 2],\n samplingfrequencyindex: (buffer[i + 2] & 0x3c) >>> 2,\n // assume ISO/IEC 14496-12 AudioSampleEntry default of 16\n samplesize: 16,\n data: buffer.subarray(i + 7 + protectionSkipBytes, frameEnd)\n });\n\n // If the buffer is empty, clear it and return\n if (buffer.byteLength === frameEnd) {\n buffer = undefined;\n return;\n }\n\n frameNum++;\n\n // Remove the finished frame from the buffer and start the process again\n buffer = buffer.subarray(frameEnd);\n }\n };\n this.flush = function() {\n this.trigger('done');\n };\n};\n\nAdtsStream.prototype = new Stream();\n\nmodule.exports = AdtsStream;\n","'use strict';\n\nvar Stream = require('../utils/stream.js');\nvar ExpGolomb = require('../utils/exp-golomb.js');\n\nvar H264Stream, NalByteStream;\n// values of profile_idc that indicate additional fields are included in the SPS\n// see Recommendation ITU-T H.264 (4/2013),\n// 7.3.2.1.1 Sequence parameter set data syntax\nvar PROFILES_WITH_OPTIONAL_SPS_DATA = {\n 100: true,\n 110: true,\n 122: true,\n 244: true,\n 44: true,\n 83: true,\n 86: true,\n 118: true,\n 128: true,\n 138: true,\n 139: true,\n 134: true\n};\nvar unitTypes = {\n slice_layer_without_partitioning_rbsp: 1,\n slice_layer_without_partitioning_rbsp_idr: 5,\n sei_rbsp: 6,\n seq_parameter_set_rbsp: 7,\n pic_parameter_set_rbsp: 8,\n access_unit_delimiter_rbsp: 9,\n};\n\n/**\n * Accepts a NAL unit byte stream and unpacks the embedded NAL units.\n */\nNalByteStream = function() {\n var\n syncPoint = 0,\n i,\n buffer;\n NalByteStream.prototype.init.call(this);\n\n this.push = function(data) {\n var swapBuffer;\n\n if (!buffer) {\n buffer = data.data;\n } else {\n swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength);\n swapBuffer.set(buffer);\n swapBuffer.set(data.data, buffer.byteLength);\n buffer = swapBuffer;\n }\n\n // Rec. ITU-T H.264, Annex B\n // scan for NAL unit boundaries\n\n // a match looks like this:\n // 0 0 1 .. NAL .. 0 0 1\n // ^ sync point ^ i\n // or this:\n // 0 0 1 .. NAL .. 0 0 0\n // ^ sync point ^ i\n\n // advance the sync point to a NAL start, if necessary\n for (; syncPoint < buffer.byteLength - 3; syncPoint++) {\n if (buffer[syncPoint + 2] === 1) {\n // the sync point is properly aligned\n i = syncPoint + 5;\n break;\n }\n }\n\n while (i < buffer.byteLength) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (buffer[i]) {\n case 0:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0) {\n i += 2;\n break;\n } else if (buffer[i - 2] !== 0) {\n i++;\n break;\n }\n\n // deliver the NAL unit if it isn't empty\n if (syncPoint + 3 !== i - 2) {\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n }\n\n // drop trailing zeroes\n do {\n i++;\n } while (buffer[i] !== 1 && i < buffer.length);\n syncPoint = i - 2;\n i += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0 ||\n buffer[i - 2] !== 0) {\n i += 3;\n break;\n }\n\n // deliver the NAL unit\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n syncPoint = i - 2;\n i += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n i += 3;\n break;\n }\n }\n // filter out the NAL units that were delivered\n buffer = buffer.subarray(syncPoint);\n i -= syncPoint;\n syncPoint = 0;\n };\n\n this.flush = function() {\n // deliver the last buffered NAL unit\n if (buffer && buffer.byteLength > 3) {\n this.trigger('data', buffer.subarray(syncPoint + 3));\n }\n // reset the stream state\n buffer = null;\n syncPoint = 0;\n this.trigger('done');\n };\n};\nNalByteStream.prototype = new Stream();\n\n/**\n * Accepts input from a ElementaryStream and produces H.264 NAL unit data\n * events.\n */\nH264Stream = function() {\n var\n nalByteStream = new NalByteStream(),\n self,\n trackId,\n currentPts,\n currentDts,\n\n discardEmulationPreventionBytes,\n readSequenceParameterSet,\n skipScalingList;\n\n H264Stream.prototype.init.call(this);\n self = this;\n\n this.push = function(packet) {\n if (packet.type !== 'video') {\n return;\n }\n trackId = packet.trackId;\n currentPts = packet.pts;\n currentDts = packet.dts;\n\n nalByteStream.push(packet);\n };\n\n nalByteStream.on('data', function(data) {\n var\n event = {\n trackId: trackId,\n pts: currentPts,\n dts: currentDts,\n data: data\n };\n var ev_type = data[0] & 0x1f;\n\n if (ev_type==1 || ev_type>=5 && ev_type<=9) {\n event.nalUnitType = ev_type;\n }\n if (ev_type==7 || ev_type==6) {\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n event.config = ev_type==7 ? readSequenceParameterSet(event.escapedRBSP) : null;\n }\n self.trigger('data', event);\n });\n nalByteStream.on('done', function() { self.trigger('done'); });\n this.flush = function() { nalByteStream.flush(); };\n\n /**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @param expGolombDecoder {object} an ExpGolomb pointed to the\n * start of a scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n skipScalingList = function(count, expGolombDecoder) {\n var\n lastScale = 8,\n nextScale = 8,\n j,\n deltaScale;\n\n for (j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = expGolombDecoder.readExpGolomb();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n\n lastScale = (nextScale === 0) ? lastScale : nextScale;\n }\n };\n\n /**\n * Expunge any \"Emulation Prevention\" bytes from a \"Raw Byte\n * Sequence Payload\"\n * @param data {Uint8Array} the bytes of a RBSP from a NAL\n * unit\n * @return {Uint8Array} the RBSP without any Emulation\n * Prevention Bytes\n */\n discardEmulationPreventionBytes = function(data) {\n var\n length = data.byteLength,\n emulationPreventionBytesPositions = [],\n i = 1,\n newLength, newData;\n\n // Find all `Emulation Prevention Bytes`\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n }\n\n // If no Emulation Prevention Bytes were found just return the original\n // array\n if (emulationPreventionBytesPositions.length === 0) {\n return data;\n }\n\n // Create a new array to hold the NAL unit data\n newLength = length - emulationPreventionBytesPositions.length;\n newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n // Skip this byte\n sourceIndex++;\n // Remove this position index\n emulationPreventionBytesPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n\n return newData;\n };\n\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n readSequenceParameterSet = function(data) {\n var\n frameCropLeftOffset = 0,\n frameCropRightOffset = 0,\n frameCropTopOffset = 0,\n frameCropBottomOffset = 0,\n sarScale = 1,\n expGolombDecoder, profileIdc, levelIdc, profileCompatibility,\n chromaFormatIdc, picOrderCntType,\n numRefFramesInPicOrderCntCycle, picWidthInMbsMinus1,\n picHeightInMapUnitsMinus1,\n frameMbsOnlyFlag,\n scalingListCount,\n sarRatio,\n aspectRatioIdc,\n i;\n\n expGolombDecoder = new ExpGolomb(data);\n profileIdc = expGolombDecoder.readUnsignedByte(); // profile_idc\n profileCompatibility = expGolombDecoder.readUnsignedByte(); // constraint_set[0-5]_flag\n levelIdc = expGolombDecoder.readUnsignedByte(); // level_idc u(8)\n expGolombDecoder.skipUnsignedExpGolomb(); // seq_parameter_set_id\n\n // some profiles have more optional data we don't need\n if (PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]) {\n chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb();\n if (chromaFormatIdc === 3) {\n expGolombDecoder.skipBits(1); // separate_colour_plane_flag\n }\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_luma_minus8\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_chroma_minus8\n expGolombDecoder.skipBits(1); // qpprime_y_zero_transform_bypass_flag\n if (expGolombDecoder.readBoolean()) { // seq_scaling_matrix_present_flag\n scalingListCount = (chromaFormatIdc !== 3) ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (expGolombDecoder.readBoolean()) { // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n skipScalingList(16, expGolombDecoder);\n } else {\n skipScalingList(64, expGolombDecoder);\n }\n }\n }\n }\n }\n\n expGolombDecoder.skipUnsignedExpGolomb(); // log2_max_frame_num_minus4\n picOrderCntType = expGolombDecoder.readUnsignedExpGolomb();\n\n if (picOrderCntType === 0) {\n expGolombDecoder.readUnsignedExpGolomb(); // log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n expGolombDecoder.skipBits(1); // delta_pic_order_always_zero_flag\n expGolombDecoder.skipExpGolomb(); // offset_for_non_ref_pic\n expGolombDecoder.skipExpGolomb(); // offset_for_top_to_bottom_field\n numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n expGolombDecoder.skipExpGolomb(); // offset_for_ref_frame[ i ]\n }\n }\n\n expGolombDecoder.skipUnsignedExpGolomb(); // max_num_ref_frames\n expGolombDecoder.skipBits(1); // gaps_in_frame_num_value_allowed_flag\n\n picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n\n frameMbsOnlyFlag = expGolombDecoder.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n expGolombDecoder.skipBits(1); // mb_adaptive_frame_field_flag\n }\n\n expGolombDecoder.skipBits(1); // direct_8x8_inference_flag\n if (expGolombDecoder.readBoolean()) { // frame_cropping_flag\n frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb();\n }\n if (expGolombDecoder.readBoolean()) {\n // vui_parameters_present_flag\n if (expGolombDecoder.readBoolean()) {\n // aspect_ratio_info_present_flag\n aspectRatioIdc = expGolombDecoder.readUnsignedByte();\n switch (aspectRatioIdc) {\n case 1: sarRatio = [1, 1]; break;\n case 2: sarRatio = [12, 11]; break;\n case 3: sarRatio = [10, 11]; break;\n case 4: sarRatio = [16, 11]; break;\n case 5: sarRatio = [40, 33]; break;\n case 6: sarRatio = [24, 11]; break;\n case 7: sarRatio = [20, 11]; break;\n case 8: sarRatio = [32, 11]; break;\n case 9: sarRatio = [80, 33]; break;\n case 10: sarRatio = [18, 11]; break;\n case 11: sarRatio = [15, 11]; break;\n case 12: sarRatio = [64, 33]; break;\n case 13: sarRatio = [160, 99]; break;\n case 14: sarRatio = [4, 3]; break;\n case 15: sarRatio = [3, 2]; break;\n case 16: sarRatio = [2, 1]; break;\n case 255: {\n sarRatio = [expGolombDecoder.readUnsignedByte() << 8 |\n expGolombDecoder.readUnsignedByte(),\n expGolombDecoder.readUnsignedByte() << 8 |\n expGolombDecoder.readUnsignedByte() ];\n break;\n }\n }\n if (sarRatio) {\n sarScale = sarRatio[0] / sarRatio[1];\n }\n }\n }\n return {\n profileIdc: profileIdc,\n levelIdc: levelIdc,\n profileCompatibility: profileCompatibility,\n width: Math.ceil((((picWidthInMbsMinus1 + 1) * 16) - frameCropLeftOffset * 2 - frameCropRightOffset * 2) * sarScale),\n height: ((2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16) - (frameCropTopOffset * 2) - (frameCropBottomOffset * 2)\n };\n };\n\n};\nH264Stream.prototype = new Stream();\n\nmodule.exports = {\n H264Stream: H264Stream,\n NalByteStream: NalByteStream,\n unitTypes: unitTypes,\n};\n","module.exports = {\n adts: require('./adts'),\n h264: require('./h264'),\n};\n","/**\n * An object that stores the bytes of an FLV tag and methods for\n * querying and manipulating that data.\n * @see http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf\n */\n'use strict';\n\nvar FlvTag;\n\n// (type:uint, extraData:Boolean = false) extends ByteArray\nFlvTag = function(type, extraData) {\n var\n // Counter if this is a metadata tag, nal start marker if this is a video\n // tag. unused if this is an audio tag\n adHoc = 0, // :uint\n\n // The default size is 16kb but this is not enough to hold iframe\n // data and the resizing algorithm costs a bit so we create a larger\n // starting buffer for video tags\n bufferStartSize = 16384,\n\n // checks whether the FLV tag has enough capacity to accept the proposed\n // write and re-allocates the internal buffers if necessary\n prepareWrite = function(flv, count) {\n var\n bytes,\n minLength = flv.position + count;\n if (minLength < flv.bytes.byteLength) {\n // there's enough capacity so do nothing\n return;\n }\n\n // allocate a new buffer and copy over the data that will not be modified\n bytes = new Uint8Array(minLength * 2);\n bytes.set(flv.bytes.subarray(0, flv.position), 0);\n flv.bytes = bytes;\n flv.view = new DataView(flv.bytes.buffer);\n },\n\n // commonly used metadata properties\n widthBytes = FlvTag.widthBytes || new Uint8Array('width'.length),\n heightBytes = FlvTag.heightBytes || new Uint8Array('height'.length),\n videocodecidBytes = FlvTag.videocodecidBytes || new Uint8Array('videocodecid'.length),\n i;\n\n if (!FlvTag.widthBytes) {\n // calculating the bytes of common metadata names ahead of time makes the\n // corresponding writes faster because we don't have to loop over the\n // characters\n // re-test with test/perf.html if you're planning on changing this\n for (i = 0; i < 'width'.length; i++) {\n widthBytes[i] = 'width'.charCodeAt(i);\n }\n for (i = 0; i < 'height'.length; i++) {\n heightBytes[i] = 'height'.charCodeAt(i);\n }\n for (i = 0; i < 'videocodecid'.length; i++) {\n videocodecidBytes[i] = 'videocodecid'.charCodeAt(i);\n }\n\n FlvTag.widthBytes = widthBytes;\n FlvTag.heightBytes = heightBytes;\n FlvTag.videocodecidBytes = videocodecidBytes;\n }\n\n this.keyFrame = false; // :Boolean\n\n switch(type) {\n case FlvTag.VIDEO_TAG:\n this.length = 16;\n // Start the buffer at 256k\n bufferStartSize *= 6;\n break;\n case FlvTag.AUDIO_TAG:\n this.length = 13;\n this.keyFrame = true;\n break;\n case FlvTag.METADATA_TAG:\n this.length = 29;\n this.keyFrame = true;\n break;\n default:\n throw(\"Error Unknown TagType\");\n }\n\n this.bytes = new Uint8Array(bufferStartSize);\n this.view = new DataView(this.bytes.buffer);\n this.bytes[0] = type;\n this.position = this.length;\n this.keyFrame = extraData; // Defaults to false\n\n // presentation timestamp\n this.pts = 0;\n // decoder timestamp\n this.dts = 0;\n\n // ByteArray#writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0)\n this.writeBytes = function(bytes, offset, length) {\n var\n start = offset || 0,\n end;\n length = length || bytes.byteLength;\n end = start + length;\n\n prepareWrite(this, length);\n this.bytes.set(bytes.subarray(start, end), this.position);\n\n this.position += length;\n this.length = Math.max(this.length, this.position);\n };\n\n // ByteArray#writeByte(value:int):void\n this.writeByte = function(byte) {\n prepareWrite(this, 1);\n this.bytes[this.position] = byte;\n this.position++;\n this.length = Math.max(this.length, this.position);\n };\n\n // ByteArray#writeShort(value:int):void\n this.writeShort = function(short) {\n prepareWrite(this, 2);\n this.view.setUint16(this.position, short);\n this.position += 2;\n this.length = Math.max(this.length, this.position);\n };\n\n // Negative index into array\n // (pos:uint):int\n this.negIndex = function(pos) {\n return this.bytes[this.length - pos];\n };\n\n // The functions below ONLY work when this[0] == VIDEO_TAG.\n // We are not going to check for that because we dont want the overhead\n // (nal:ByteArray = null):int\n this.nalUnitSize = function() {\n if (adHoc === 0) {\n return 0;\n }\n\n return this.length - (adHoc + 4);\n };\n\n this.startNalUnit = function() {\n // remember position and add 4 bytes\n if (adHoc > 0) {\n throw new Error(\"Attempted to create new NAL wihout closing the old one\");\n }\n\n // reserve 4 bytes for nal unit size\n adHoc = this.length;\n this.length += 4;\n this.position = this.length;\n };\n\n // (nal:ByteArray = null):void\n this.endNalUnit = function(nalContainer) {\n var\n nalStart, // :uint\n nalLength; // :uint\n\n // Rewind to the marker and write the size\n if (this.length === adHoc + 4) {\n // we started a nal unit, but didnt write one, so roll back the 4 byte size value\n this.length -= 4;\n } else if (adHoc > 0) {\n nalStart = adHoc + 4;\n nalLength = this.length - nalStart;\n\n this.position = adHoc;\n this.view.setUint32(this.position, nalLength);\n this.position = this.length;\n\n if (nalContainer) {\n // Add the tag to the NAL unit\n nalContainer.push(this.bytes.subarray(nalStart, nalStart + nalLength));\n }\n }\n\n adHoc = 0;\n };\n\n /**\n * Write out a 64-bit floating point valued metadata property. This method is\n * called frequently during a typical parse and needs to be fast.\n */\n // (key:String, val:Number):void\n this.writeMetaDataDouble = function(key, val) {\n var i;\n prepareWrite(this, 2 + key.length + 9);\n\n // write size of property name\n this.view.setUint16(this.position, key.length);\n this.position += 2;\n\n // this next part looks terrible but it improves parser throughput by\n // 10kB/s in my testing\n\n // write property name\n if (key === 'width') {\n this.bytes.set(widthBytes, this.position);\n this.position += 5;\n } else if (key === 'height') {\n this.bytes.set(heightBytes, this.position);\n this.position += 6;\n } else if (key === 'videocodecid') {\n this.bytes.set(videocodecidBytes, this.position);\n this.position += 12;\n } else {\n for (i = 0; i < key.length; i++) {\n this.bytes[this.position] = key.charCodeAt(i);\n this.position++;\n }\n }\n\n // skip null byte\n this.position++;\n\n // write property value\n this.view.setFloat64(this.position, val);\n this.position += 8;\n\n // update flv tag length\n this.length = Math.max(this.length, this.position);\n ++adHoc;\n };\n\n // (key:String, val:Boolean):void\n this.writeMetaDataBoolean = function(key, val) {\n var i;\n prepareWrite(this, 2);\n this.view.setUint16(this.position, key.length);\n this.position += 2;\n for (i = 0; i < key.length; i++) {\n // if key.charCodeAt(i) >= 255, handle error\n prepareWrite(this, 1);\n this.bytes[this.position] = key.charCodeAt(i);\n this.position++;\n }\n prepareWrite(this, 2);\n this.view.setUint8(this.position, 0x01);\n this.position++;\n this.view.setUint8(this.position, val ? 0x01 : 0x00);\n this.position++;\n this.length = Math.max(this.length, this.position);\n ++adHoc;\n };\n\n // ():ByteArray\n this.finalize = function() {\n var\n dtsDelta, // :int\n len; // :int\n\n switch(this.bytes[0]) {\n // Video Data\n case FlvTag.VIDEO_TAG:\n this.bytes[11] = ((this.keyFrame || extraData) ? 0x10 : 0x20 ) | 0x07; // We only support AVC, 1 = key frame (for AVC, a seekable frame), 2 = inter frame (for AVC, a non-seekable frame)\n this.bytes[12] = extraData ? 0x00 : 0x01;\n\n dtsDelta = this.pts - this.dts;\n this.bytes[13] = (dtsDelta & 0x00FF0000) >>> 16;\n this.bytes[14] = (dtsDelta & 0x0000FF00) >>> 8;\n this.bytes[15] = (dtsDelta & 0x000000FF) >>> 0;\n break;\n\n case FlvTag.AUDIO_TAG:\n this.bytes[11] = 0xAF; // 44 kHz, 16-bit stereo\n this.bytes[12] = extraData ? 0x00 : 0x01;\n break;\n\n case FlvTag.METADATA_TAG:\n this.position = 11;\n this.view.setUint8(this.position, 0x02); // String type\n this.position++;\n this.view.setUint16(this.position, 0x0A); // 10 Bytes\n this.position += 2;\n // set \"onMetaData\"\n this.bytes.set([0x6f, 0x6e, 0x4d, 0x65,\n 0x74, 0x61, 0x44, 0x61,\n 0x74, 0x61], this.position);\n this.position += 10;\n this.bytes[this.position] = 0x08; // Array type\n this.position++;\n this.view.setUint32(this.position, adHoc);\n this.position = this.length;\n this.bytes.set([0, 0, 9], this.position);\n this.position += 3; // End Data Tag\n this.length = this.position;\n break;\n }\n\n len = this.length - 11;\n\n // write the DataSize field\n this.bytes[ 1] = (len & 0x00FF0000) >>> 16;\n this.bytes[ 2] = (len & 0x0000FF00) >>> 8;\n this.bytes[ 3] = (len & 0x000000FF) >>> 0;\n // write the Timestamp\n this.bytes[ 4] = (this.dts & 0x00FF0000) >>> 16;\n this.bytes[ 5] = (this.dts & 0x0000FF00) >>> 8;\n this.bytes[ 6] = (this.dts & 0x000000FF) >>> 0;\n this.bytes[ 7] = (this.dts & 0xFF000000) >>> 24;\n // write the StreamID\n this.bytes[ 8] = 0;\n this.bytes[ 9] = 0;\n this.bytes[10] = 0;\n\n // Sometimes we're at the end of the view and have one slot to write a\n // uint32, so, prepareWrite of count 4, since, view is uint8\n prepareWrite(this, 4);\n this.view.setUint32(this.length, this.length);\n this.length += 4;\n this.position += 4;\n\n // trim down the byte buffer to what is actually being used\n this.bytes = this.bytes.subarray(0, this.length);\n this.frameTime = FlvTag.frameTime(this.bytes);\n // if bytes.bytelength isn't equal to this.length, handle error\n return this;\n };\n};\n\nFlvTag.AUDIO_TAG = 0x08; // == 8, :uint\nFlvTag.VIDEO_TAG = 0x09; // == 9, :uint\nFlvTag.METADATA_TAG = 0x12; // == 18, :uint\n\n// (tag:ByteArray):Boolean {\nFlvTag.isAudioFrame = function(tag) {\n return FlvTag.AUDIO_TAG === tag[0];\n};\n\n// (tag:ByteArray):Boolean {\nFlvTag.isVideoFrame = function(tag) {\n return FlvTag.VIDEO_TAG === tag[0];\n};\n\n// (tag:ByteArray):Boolean {\nFlvTag.isMetaData = function(tag) {\n return FlvTag.METADATA_TAG === tag[0];\n};\n\n// (tag:ByteArray):Boolean {\nFlvTag.isKeyFrame = function(tag) {\n if (FlvTag.isVideoFrame(tag)) {\n return tag[11] === 0x17;\n }\n\n if (FlvTag.isAudioFrame(tag)) {\n return true;\n }\n\n if (FlvTag.isMetaData(tag)) {\n return true;\n }\n\n return false;\n};\n\n// (tag:ByteArray):uint {\nFlvTag.frameTime = function(tag) {\n var pts = tag[ 4] << 16; // :uint\n pts |= tag[ 5] << 8;\n pts |= tag[ 6] << 0;\n pts |= tag[ 7] << 24;\n return pts;\n};\n\nmodule.exports = FlvTag;\n","module.exports = {\n tag: require('./flv-tag'),\n Transmuxer: require('./transmuxer'),\n tools: require('../tools/flv-inspector'),\n};\n","'use strict';\n\nvar Stream = require('../utils/stream.js');\nvar FlvTag = require('./flv-tag.js');\nvar m2ts = require('../m2ts/m2ts.js');\nvar codecs = require('../codecs');\nvar AdtsStream = codecs.adts;\nvar H264Stream = codecs.h264.H264Stream;\n\nvar\n MetadataStream,\n Transmuxer,\n VideoSegmentStream,\n AudioSegmentStream,\n CoalesceStream,\n collectTimelineInfo,\n metaDataTag,\n extraDataTag;\n\n/**\n * Store information about the start and end of the tracka and the\n * duration for each frame/sample we process in order to calculate\n * the baseMediaDecodeTime\n */\ncollectTimelineInfo = function (track, data) {\n if (typeof data.pts === 'number') {\n if (track.timelineStartInfo.pts === undefined) {\n track.timelineStartInfo.pts = data.pts;\n } else {\n track.timelineStartInfo.pts =\n Math.min(track.timelineStartInfo.pts, data.pts);\n }\n }\n\n if (typeof data.dts === 'number') {\n if (track.timelineStartInfo.dts === undefined) {\n track.timelineStartInfo.dts = data.dts;\n } else {\n track.timelineStartInfo.dts =\n Math.min(track.timelineStartInfo.dts, data.dts);\n }\n }\n};\n\nmetaDataTag = function(track, pts) {\n var\n tag = new FlvTag(FlvTag.METADATA_TAG); // :FlvTag\n\n tag.dts = pts;\n tag.pts = pts;\n\n tag.writeMetaDataDouble(\"videocodecid\", 7);\n tag.writeMetaDataDouble(\"width\", track.width);\n tag.writeMetaDataDouble(\"height\", track.height);\n\n return tag;\n};\n\nextraDataTag = function(track, pts) {\n var\n i,\n tag = new FlvTag(FlvTag.VIDEO_TAG, true);\n\n tag.dts = pts;\n tag.pts = pts;\n\n tag.writeByte(0x01);// version\n tag.writeByte(track.profileIdc);// profile\n tag.writeByte(track.profileCompatibility);// compatibility\n tag.writeByte(track.levelIdc);// level\n tag.writeByte(0xFC | 0x03); // reserved (6 bits), NULA length size - 1 (2 bits)\n tag.writeByte(0xE0 | 0x01 ); // reserved (3 bits), num of SPS (5 bits)\n tag.writeShort( track.sps[0].length ); // data of SPS\n tag.writeBytes( track.sps[0] ); // SPS\n\n tag.writeByte(track.pps.length); // num of PPS (will there ever be more that 1 PPS?)\n for (i = 0 ; i < track.pps.length ; ++i) {\n tag.writeShort(track.pps[i].length); // 2 bytes for length of PPS\n tag.writeBytes(track.pps[i]); // data of PPS\n }\n\n return tag;\n};\n\n/**\n * Constructs a single-track, media segment from AAC data\n * events. The output of this stream can be fed to flash.\n */\nAudioSegmentStream = function(track) {\n var\n adtsFrames = [],\n adtsFramesLength = 0,\n sequenceNumber = 0,\n earliestAllowedDts = 0,\n oldExtraData;\n\n AudioSegmentStream.prototype.init.call(this);\n\n this.push = function(data) {\n collectTimelineInfo(track, data);\n\n if (track && track.channelcount === undefined) {\n track.audioobjecttype = data.audioobjecttype;\n track.channelcount = data.channelcount;\n track.samplerate = data.samplerate;\n track.samplingfrequencyindex = data.samplingfrequencyindex;\n track.samplesize = data.samplesize;\n track.extraData = (track.audioobjecttype << 11) |\n (track.samplingfrequencyindex << 7) |\n (track.channelcount << 3);\n }\n\n data.pts = Math.round(data.pts / 90);\n data.dts = Math.round(data.dts / 90);\n\n // buffer audio data until end() is called\n adtsFrames.push(data);\n };\n\n this.flush = function() {\n var currentFrame, adtsFrame, deltaDts,lastMetaPts, tags = [];\n // return early if no audio data has been observed\n if (adtsFrames.length === 0) {\n this.trigger('done');\n return;\n }\n\n lastMetaPts = -Infinity;\n\n while (adtsFrames.length) {\n currentFrame = adtsFrames.shift();\n\n // write out metadata tags every 1 second so that the decoder\n // is re-initialized quickly after seeking into a different\n // audio configuration\n if (track.extraData !== oldExtraData || currentFrame.pts - lastMetaPts >= 1000) {\n adtsFrame = new FlvTag(FlvTag.METADATA_TAG);\n adtsFrame.pts = currentFrame.pts;\n adtsFrame.dts = currentFrame.dts;\n\n // AAC is always 10\n adtsFrame.writeMetaDataDouble(\"audiocodecid\", 10);\n adtsFrame.writeMetaDataBoolean(\"stereo\", 2 === track.channelcount);\n adtsFrame.writeMetaDataDouble (\"audiosamplerate\", track.samplerate);\n // Is AAC always 16 bit?\n adtsFrame.writeMetaDataDouble (\"audiosamplesize\", 16);\n\n tags.push(adtsFrame);\n\n oldExtraData = track.extraData;\n\n adtsFrame = new FlvTag(FlvTag.AUDIO_TAG, true);\n // For audio, DTS is always the same as PTS. We want to set the DTS\n // however so we can compare with video DTS to determine approximate\n // packet order\n adtsFrame.pts = currentFrame.pts;\n adtsFrame.dts = currentFrame.dts;\n\n adtsFrame.view.setUint16(adtsFrame.position, track.extraData);\n adtsFrame.position += 2;\n adtsFrame.length = Math.max(adtsFrame.length, adtsFrame.position);\n\n tags.push(adtsFrame);\n\n lastMetaPts = currentFrame.pts;\n }\n adtsFrame = new FlvTag(FlvTag.AUDIO_TAG);\n adtsFrame.pts = currentFrame.pts;\n adtsFrame.dts = currentFrame.dts;\n\n adtsFrame.writeBytes(currentFrame.data);\n\n tags.push(adtsFrame);\n }\n\n oldExtraData = null;\n this.trigger('data', {track: track, tags: tags});\n\n this.trigger('done');\n };\n};\nAudioSegmentStream.prototype = new Stream();\n\n/**\n * Store FlvTags for the h264 stream\n * @param track {object} track metadata configuration\n */\nVideoSegmentStream = function(track) {\n var\n sequenceNumber = 0,\n nalUnits = [],\n nalUnitsLength = 0,\n config,\n h264Frame;\n VideoSegmentStream.prototype.init.call(this);\n\n this.finishFrame = function(tags, frame) {\n if (!frame) {\n return;\n }\n // Check if keyframe and the length of tags.\n // This makes sure we write metadata on the first frame of a segment.\n if (config && track && track.newMetadata &&\n (frame.keyFrame || tags.length === 0)) {\n // Push extra data on every IDR frame in case we did a stream change + seek\n tags.push(metaDataTag(config, frame.pts));\n tags.push(extraDataTag(track, frame.pts));\n track.newMetadata = false;\n }\n\n frame.endNalUnit();\n tags.push(frame);\n };\n\n this.push = function(data) {\n collectTimelineInfo(track, data);\n\n data.pts = Math.round(data.pts / 90);\n data.dts = Math.round(data.dts / 90);\n\n // buffer video until flush() is called\n nalUnits.push(data);\n };\n\n this.flush = function() {\n var\n currentNal,\n tags = [];\n\n // Throw away nalUnits at the start of the byte stream until we find\n // the first AUD\n while (nalUnits.length && nalUnits[0].nalUnitType !== codecs.h264.unitTypes.access_unit_delimiter_rbsp) {\n nalUnits.shift();\n }\n\n // return early if no video data has been observed\n if (nalUnits.length === 0) {\n this.trigger('done');\n return;\n }\n\n while (nalUnits.length) {\n currentNal = nalUnits.shift();\n\n // record the track config\n switch (currentNal.nalUnitType){\n case codecs.h264.unitTypes.seq_parameter_set_rbsp:\n track.newMetadata = true;\n config = currentNal.config;\n track.width = config.width;\n track.height = config.height;\n track.sps = [currentNal.data];\n track.profileIdc = config.profileIdc;\n track.levelIdc = config.levelIdc;\n track.profileCompatibility = config.profileCompatibility;\n h264Frame.endNalUnit();\n break;\n case codecs.h264.unitTypes.pic_parameter_set_rbsp:\n track.newMetadata = true;\n track.pps = [currentNal.data];\n h264Frame.endNalUnit();\n break;\n case codecs.h264.unitTypes.access_unit_delimiter_rbsp:\n if (h264Frame) {\n this.finishFrame(tags, h264Frame);\n }\n h264Frame = new FlvTag(FlvTag.VIDEO_TAG);\n h264Frame.pts = currentNal.pts;\n h264Frame.dts = currentNal.dts;\n break;\n case codecs.h264.unitTypes.slice_layer_without_partitioning_rbsp_idr:\n // the current sample is a key frame\n h264Frame.keyFrame = true;\n h264Frame.endNalUnit();\n break;\n default:\n h264Frame.endNalUnit();\n break;\n }\n h264Frame.startNalUnit();\n h264Frame.writeBytes(currentNal.data);\n }\n if (h264Frame) {\n this.finishFrame(tags, h264Frame);\n }\n\n this.trigger('data', {track: track, tags: tags});\n\n // Continue with the flush process now\n this.trigger('done');\n };\n};\n\nVideoSegmentStream.prototype = new Stream();\n\n/**\n * The final stage of the transmuxer that emits the flv tags\n * for audio, video, and metadata. Also tranlates in time and\n * outputs caption data and id3 cues.\n */\nCoalesceStream = function(options) {\n // Number of Tracks per output segment\n // If greater than 1, we combine multiple\n // tracks into a single segment\n this.numberOfTracks = 0;\n this.metadataStream = options.metadataStream;\n\n this.videoTags = [];\n this.audioTags = [];\n this.videoTrack = null;\n this.audioTrack = null;\n this.pendingCaptions = [];\n this.pendingMetadata = [];\n this.pendingTracks = 0;\n\n CoalesceStream.prototype.init.call(this);\n\n // Take output from multiple\n this.push = function(output) {\n // buffer incoming captions until the associated video segment\n // finishes\n if (output.text) {\n return this.pendingCaptions.push(output);\n }\n // buffer incoming id3 tags until the final flush\n if (output.frames) {\n return this.pendingMetadata.push(output);\n }\n\n if (output.track.type === 'video') {\n this.videoTrack = output.track;\n this.videoTags = output.tags;\n this.pendingTracks++;\n }\n if (output.track.type === 'audio') {\n this.audioTrack = output.track;\n this.audioTags = output.tags;\n this.pendingTracks++;\n }\n };\n};\n\nCoalesceStream.prototype = new Stream();\nCoalesceStream.prototype.flush = function() {\n var\n id3,\n caption,\n i,\n timelineStartPts,\n event = {\n tags: {},\n captions: [],\n metadata: []\n };\n\n if (this.pendingTracks < this.numberOfTracks) {\n return;\n }\n\n if (this.videoTrack) {\n timelineStartPts = this.videoTrack.timelineStartInfo.pts;\n } else if (this.audioTrack) {\n timelineStartPts = this.audioTrack.timelineStartInfo.pts;\n }\n\n event.tags.videoTags = this.videoTags;\n event.tags.audioTags = this.audioTags;\n\n // Translate caption PTS times into second offsets into the\n // video timeline for the segment\n for (i = 0; i < this.pendingCaptions.length; i++) {\n caption = this.pendingCaptions[i];\n caption.startTime = caption.startPts - timelineStartPts;\n caption.startTime /= 90e3;\n caption.endTime = caption.endPts - timelineStartPts;\n caption.endTime /= 90e3;\n event.captions.push(caption);\n }\n\n // Translate ID3 frame PTS times into second offsets into the\n // video timeline for the segment\n for (i = 0; i < this.pendingMetadata.length; i++) {\n id3 = this.pendingMetadata[i];\n id3.cueTime = id3.pts - timelineStartPts;\n id3.cueTime /= 90e3;\n event.metadata.push(id3);\n }\n // We add this to every single emitted segment even though we only need\n // it for the first\n event.metadata.dispatchType = this.metadataStream.dispatchType;\n\n // Reset stream state\n this.videoTrack = null;\n this.audioTrack = null;\n this.videoTags = [];\n this.audioTags = [];\n this.pendingCaptions.length = 0;\n this.pendingMetadata.length = 0;\n this.pendingTracks = 0;\n\n // Emit the final segment\n this.trigger('data', event);\n\n this.trigger('done');\n};\n\n/**\n * An object that incrementally transmuxes MPEG2 Trasport Stream\n * chunks into an FLV.\n */\nTransmuxer = function(options) {\n var\n self = this,\n videoTrack,\n audioTrack,\n\n packetStream, parseStream, elementaryStream,\n adtsStream, h264Stream,\n videoSegmentStream, audioSegmentStream, captionStream,\n coalesceStream;\n\n Transmuxer.prototype.init.call(this);\n\n options = options || {};\n\n // expose the metadata stream\n this.metadataStream = new m2ts.MetadataStream();\n\n options.metadataStream = this.metadataStream;\n\n // set up the parsing pipeline\n packetStream = new m2ts.TransportPacketStream();\n parseStream = new m2ts.TransportParseStream();\n elementaryStream = new m2ts.ElementaryStream();\n adtsStream = new AdtsStream();\n h264Stream = new H264Stream();\n coalesceStream = new CoalesceStream(options);\n\n // disassemble MPEG2-TS packets into elementary streams\n packetStream\n .pipe(parseStream)\n .pipe(elementaryStream);\n\n // !!THIS ORDER IS IMPORTANT!!\n // demux the streams\n elementaryStream\n .pipe(h264Stream);\n elementaryStream\n .pipe(adtsStream);\n\n elementaryStream\n .pipe(this.metadataStream)\n .pipe(coalesceStream);\n // if CEA-708 parsing is available, hook up a caption stream\n captionStream = new m2ts.CaptionStream();\n h264Stream.pipe(captionStream)\n .pipe(coalesceStream);\n\n // hook up the segment streams once track metadata is delivered\n elementaryStream.on('data', function(data) {\n var i, videoTrack, audioTrack;\n\n if (data.type === 'metadata') {\n i = data.tracks.length;\n\n // scan the tracks listed in the metadata\n while (i--) {\n if (data.tracks[i].type === 'video') {\n videoTrack = data.tracks[i];\n } else if (data.tracks[i].type === 'audio') {\n audioTrack = data.tracks[i];\n }\n }\n\n // hook up the video segment stream to the first track with h264 data\n if (videoTrack && !videoSegmentStream) {\n coalesceStream.numberOfTracks++;\n videoSegmentStream = new VideoSegmentStream(videoTrack);\n\n // Set up the final part of the video pipeline\n h264Stream\n .pipe(videoSegmentStream)\n .pipe(coalesceStream);\n }\n\n if (audioTrack && !audioSegmentStream) {\n // hook up the audio segment stream to the first track with aac data\n coalesceStream.numberOfTracks++;\n audioSegmentStream = new AudioSegmentStream(audioTrack);\n\n // Set up the final part of the audio pipeline\n adtsStream\n .pipe(audioSegmentStream)\n .pipe(coalesceStream);\n }\n }\n });\n\n // feed incoming data to the front of the parsing pipeline\n this.push = function(data) {\n packetStream.push(data);\n };\n\n // flush any buffered data\n this.flush = function() {\n // Start at the top of the pipeline and flush all pending work\n packetStream.flush();\n };\n\n // Re-emit any data coming from the coalesce stream to the outside world\n coalesceStream.on('data', function (event) {\n self.trigger('data', event);\n });\n\n // Let the consumer know we have finished flushing the entire pipeline\n coalesceStream.on('done', function () {\n self.trigger('done');\n });\n\n // For information on the FLV format, see\n // http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf.\n // Technically, this function returns the header and a metadata FLV tag\n // if duration is greater than zero\n // duration in seconds\n // @return {object} the bytes of the FLV header as a Uint8Array\n this.getFlvHeader = function(duration, audio, video) { // :ByteArray {\n var\n headBytes = new Uint8Array(3 + 1 + 1 + 4),\n head = new DataView(headBytes.buffer),\n metadata,\n result,\n metadataLength;\n\n // default arguments\n duration = duration || 0;\n audio = audio === undefined? true : audio;\n video = video === undefined? true : video;\n\n // signature\n head.setUint8(0, 0x46); // 'F'\n head.setUint8(1, 0x4c); // 'L'\n head.setUint8(2, 0x56); // 'V'\n\n // version\n head.setUint8(3, 0x01);\n\n // flags\n head.setUint8(4, (audio ? 0x04 : 0x00) | (video ? 0x01 : 0x00));\n\n // data offset, should be 9 for FLV v1\n head.setUint32(5, headBytes.byteLength);\n\n // init the first FLV tag\n if (duration <= 0) {\n // no duration available so just write the first field of the first\n // FLV tag\n result = new Uint8Array(headBytes.byteLength + 4);\n result.set(headBytes);\n result.set([0, 0, 0, 0], headBytes.byteLength);\n return result;\n }\n\n // write out the duration metadata tag\n metadata = new FlvTag(FlvTag.METADATA_TAG);\n metadata.pts = metadata.dts = 0;\n metadata.writeMetaDataDouble(\"duration\", duration);\n metadataLength = metadata.finalize().length;\n result = new Uint8Array(headBytes.byteLength + metadataLength);\n result.set(headBytes);\n result.set(head.byteLength, metadataLength);\n\n return result;\n };\n};\nTransmuxer.prototype = new Stream();\n\n// forward compatibility\nmodule.exports = Transmuxer;\n","'use strict';\n\nvar muxjs = {\n codecs: require('./codecs'),\n mp4: require('./mp4'),\n flv: require('./flv'),\n mp2t: require('./m2ts'),\n};\nmodule.exports = muxjs;\n","/**\n * mux.js\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * Reads in-band caption information from a video elementary\n * stream. Captions must follow the CEA-708 standard for injection\n * into an MPEG-2 transport streams.\n * @see https://en.wikipedia.org/wiki/CEA-708\n */\n\n'use strict';\n\n// -----------------\n// Link To Transport\n// -----------------\n\n// Supplemental enhancement information (SEI) NAL units have a\n// payload type field to indicate how they are to be\n// interpreted. CEAS-708 caption content is always transmitted with\n// payload type 0x04.\nvar USER_DATA_REGISTERED_ITU_T_T35 = 4,\n RBSP_TRAILING_BITS = 128,\n Stream = require('../utils/stream'),\n codecs = require('../codecs');\n\n/**\n * Parse a supplemental enhancement information (SEI) NAL unit.\n * Stops parsing once a message of type ITU T T35 has been found.\n *\n * @param bytes {Uint8Array} the bytes of a SEI NAL unit\n * @return {object} the parsed SEI payload\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n */\nvar parseSei = function(bytes) {\n var\n i = 0,\n result = {\n payloadType: -1,\n payloadSize: 0,\n },\n payloadType = 0,\n payloadSize = 0;\n\n // go through the sei_rbsp parsing each each individual sei_message\n while (i < bytes.byteLength) {\n // stop once we have hit the end of the sei_rbsp\n if (bytes[i] === RBSP_TRAILING_BITS) {\n break;\n }\n\n // Parse payload type\n while (bytes[i] === 0xFF) {\n payloadType += 255;\n i++;\n }\n payloadType += bytes[i++];\n\n // Parse payload size\n while (bytes[i] === 0xFF) {\n payloadSize += 255;\n i++;\n }\n payloadSize += bytes[i++];\n\n // this sei_message is a 608/708 caption so save it and break\n // there can only ever be one caption message in a frame's sei\n if (!result.payload && payloadType === USER_DATA_REGISTERED_ITU_T_T35) {\n result.payloadType = payloadType;\n result.payloadSize = payloadSize;\n result.payload = bytes.subarray(i, i + payloadSize);\n break;\n }\n\n // skip the payload and parse the next message\n i += payloadSize;\n payloadType = 0;\n payloadSize = 0;\n }\n\n return result;\n};\n\n// see ANSI/SCTE 128-1 (2013), section 8.1\nvar parseUserData = function(sei) {\n // itu_t_t35_contry_code must be 181 (United States) for\n // captions\n if (sei.payload[0] !== 181) {\n return null;\n }\n\n // itu_t_t35_provider_code should be 49 (ATSC) for captions\n if (((sei.payload[1] << 8) | sei.payload[2]) !== 49) {\n return null;\n }\n\n // the user_identifier should be \"GA94\" to indicate ATSC1 data\n if (String.fromCharCode(sei.payload[3],\n sei.payload[4],\n sei.payload[5],\n sei.payload[6]) !== 'GA94') {\n return null;\n }\n\n // finally, user_data_type_code should be 0x03 for caption data\n if (sei.payload[7] !== 0x03) {\n return null;\n }\n\n // return the user_data_type_structure and strip the trailing\n // marker bits\n return sei.payload.subarray(8, sei.payload.length - 1);\n};\n\n// see CEA-708-D, section 4.4\nvar parseCaptionPackets = function(pts, userData) {\n var results = [], i, count, offset, data;\n\n // if this is just filler, return immediately\n if (!(userData[0] & 0x40)) {\n return results;\n }\n\n // parse out the cc_data_1 and cc_data_2 fields\n count = userData[0] & 0x1f;\n for (i = 0; i < count; i++) {\n offset = i * 3;\n data = {\n type: userData[offset + 2] & 0x03,\n pts: pts\n };\n\n // capture cc data when cc_valid is 1\n if (userData[offset + 2] & 0x04) {\n data.ccData = (userData[offset + 3] << 8) | userData[offset + 4];\n results.push(data);\n }\n }\n return results;\n};\n\nvar CaptionStream = function() {\n var self = this;\n CaptionStream.prototype.init.call(this);\n\n this.captionPackets_ = [];\n\n this.field1_ = new Cea608Stream();\n\n // forward data and done events from field1_ to this CaptionStream\n this.field1_.on('data', this.trigger.bind(this, 'data'));\n this.field1_.on('done', this.trigger.bind(this, 'done'));\n};\nCaptionStream.prototype = new Stream();\nCaptionStream.prototype.push = function(event) {\n var sei, userData, captionPackets;\n\n // only examine SEI NALs\n if (event.nalUnitType !== codecs.h264.unitTypes.sei_rbsp) {\n return;\n }\n\n // parse the sei\n sei = parseSei(event.escapedRBSP);\n\n // ignore everything but user_data_registered_itu_t_t35\n if (sei.payloadType !== USER_DATA_REGISTERED_ITU_T_T35) {\n return;\n }\n\n // parse out the user data payload\n userData = parseUserData(sei);\n\n // ignore unrecognized userData\n if (!userData) {\n return;\n }\n\n // parse out CC data packets and save them for later\n this.captionPackets_ = this.captionPackets_.concat(parseCaptionPackets(event.pts, userData));\n};\n\nCaptionStream.prototype.flush = function () {\n // make sure we actually parsed captions before proceeding\n if (!this.captionPackets_.length) {\n this.field1_.flush();\n return;\n }\n\n // sort caption byte-pairs based on their PTS values\n this.captionPackets_.sort(function(a, b) {\n return a.pts - b.pts;\n });\n\n // Push each caption into Cea608Stream\n this.captionPackets_.forEach(this.field1_.push, this.field1_);\n\n this.captionPackets_.length = 0;\n this.field1_.flush();\n return;\n};\n// ----------------------\n// Session to Application\n// ----------------------\n\nvar BASIC_CHARACTER_TRANSLATION = {\n 0x2a: 0xe1,\n 0x5c: 0xe9,\n 0x5e: 0xed,\n 0x5f: 0xf3,\n 0x60: 0xfa,\n 0x7b: 0xe7,\n 0x7c: 0xf7,\n 0x7d: 0xd1,\n 0x7e: 0xf1,\n 0x7f: 0x2588\n};\n\nvar getCharFromCode = function(code) {\n if(code === null) {\n return '';\n }\n code = BASIC_CHARACTER_TRANSLATION[code] || code;\n return String.fromCharCode(code);\n};\n\n// Constants for the byte codes recognized by Cea608Stream. This\n// list is not exhaustive. For a more comprehensive listing and\n// semantics see\n// http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/pdf/CFR-2010-title47-vol1-sec15-119.pdf\nvar PADDING = 0x0000,\n\n // Pop-on Mode\n RESUME_CAPTION_LOADING = 0x1420,\n END_OF_CAPTION = 0x142f,\n\n // Roll-up Mode\n ROLL_UP_2_ROWS = 0x1425,\n ROLL_UP_3_ROWS = 0x1426,\n ROLL_UP_4_ROWS = 0x1427,\n RESUME_DIRECT_CAPTIONING = 0x1429,\n CARRIAGE_RETURN = 0x142d,\n // Erasure\n BACKSPACE = 0x1421,\n ERASE_DISPLAYED_MEMORY = 0x142c,\n ERASE_NON_DISPLAYED_MEMORY = 0x142e;\n\n// the index of the last row in a CEA-608 display buffer\nvar BOTTOM_ROW = 14;\n// CEA-608 captions are rendered onto a 34x15 matrix of character\n// cells. The \"bottom\" row is the last element in the outer array.\nvar createDisplayBuffer = function() {\n var result = [], i = BOTTOM_ROW + 1;\n while (i--) {\n result.push('');\n }\n return result;\n};\n\nvar Cea608Stream = function() {\n Cea608Stream.prototype.init.call(this);\n\n this.mode_ = 'popOn';\n // When in roll-up mode, the index of the last row that will\n // actually display captions. If a caption is shifted to a row\n // with a lower index than this, it is cleared from the display\n // buffer\n this.topRow_ = 0;\n this.startPts_ = 0;\n this.displayed_ = createDisplayBuffer();\n this.nonDisplayed_ = createDisplayBuffer();\n this.lastControlCode_ = null;\n\n this.push = function(packet) {\n // Ignore other channels\n if (packet.type !== 0) {\n return;\n }\n var data, swap, char0, char1;\n // remove the parity bits\n data = packet.ccData & 0x7f7f;\n\n // ignore duplicate control codes\n if (data === this.lastControlCode_) {\n this.lastControlCode_ = null;\n return;\n }\n\n // Store control codes\n if ((data & 0xf000) === 0x1000) {\n this.lastControlCode_ = data;\n } else {\n this.lastControlCode_ = null;\n }\n\n switch (data) {\n case PADDING:\n break;\n case RESUME_CAPTION_LOADING:\n this.mode_ = 'popOn';\n break;\n case END_OF_CAPTION:\n // if a caption was being displayed, it's gone now\n this.flushDisplayed(packet.pts);\n\n // flip memory\n swap = this.displayed_;\n this.displayed_ = this.nonDisplayed_;\n this.nonDisplayed_ = swap;\n\n // start measuring the time to display the caption\n this.startPts_ = packet.pts;\n break;\n\n case ROLL_UP_2_ROWS:\n this.topRow_ = BOTTOM_ROW - 1;\n this.mode_ = 'rollUp';\n break;\n case ROLL_UP_3_ROWS:\n this.topRow_ = BOTTOM_ROW - 2;\n this.mode_ = 'rollUp';\n break;\n case ROLL_UP_4_ROWS:\n this.topRow_ = BOTTOM_ROW - 3;\n this.mode_ = 'rollUp';\n break;\n case CARRIAGE_RETURN:\n this.flushDisplayed(packet.pts);\n this.shiftRowsUp_();\n this.startPts_ = packet.pts;\n break;\n\n case BACKSPACE:\n if (this.mode_ === 'popOn') {\n this.nonDisplayed_[BOTTOM_ROW] = this.nonDisplayed_[BOTTOM_ROW].slice(0, -1);\n } else {\n this.displayed_[BOTTOM_ROW] = this.displayed_[BOTTOM_ROW].slice(0, -1);\n }\n break;\n case ERASE_DISPLAYED_MEMORY:\n this.flushDisplayed(packet.pts);\n this.displayed_ = createDisplayBuffer();\n break;\n case ERASE_NON_DISPLAYED_MEMORY:\n this.nonDisplayed_ = createDisplayBuffer();\n break;\n default:\n char0 = data >>> 8;\n char1 = data & 0xff;\n\n // Look for a Channel 1 Preamble Address Code\n if (char0 >= 0x10 && char0 <= 0x17 &&\n char1 >= 0x40 && char1 <= 0x7F &&\n (char0 !== 0x10 || char1 < 0x60)) {\n // Follow Safari's lead and replace the PAC with a space\n char0 = 0x20;\n // we only want one space so make the second character null\n // which will get become '' in getCharFromCode\n char1 = null;\n }\n\n // Look for special character sets\n if ((char0 === 0x11 || char0 === 0x19) &&\n (char1 >= 0x30 && char1 <= 0x3F)) {\n // Put in eigth note and space\n char0 = 0x266A;\n char1 = '';\n }\n\n // ignore unsupported control codes\n if ((char0 & 0xf0) === 0x10) {\n return;\n }\n\n // character handling is dependent on the current mode\n this[this.mode_](packet.pts, char0, char1);\n break;\n }\n };\n};\nCea608Stream.prototype = new Stream();\n// Trigger a cue point that captures the current state of the\n// display buffer\nCea608Stream.prototype.flushDisplayed = function(pts) {\n var content = this.displayed_\n // remove spaces from the start and end of the string\n .map(function(row) { return row.trim(); })\n // remove empty rows\n .filter(function(row) { return row.length; })\n // combine all text rows to display in one cue\n .join('\\n');\n\n if (content.length) {\n this.trigger('data', {\n startPts: this.startPts_,\n endPts: pts,\n text: content\n });\n }\n};\n\n// Mode Implementations\nCea608Stream.prototype.popOn = function(pts, char0, char1) {\n var baseRow = this.nonDisplayed_[BOTTOM_ROW];\n\n // buffer characters\n baseRow += getCharFromCode(char0);\n baseRow += getCharFromCode(char1);\n this.nonDisplayed_[BOTTOM_ROW] = baseRow;\n};\n\nCea608Stream.prototype.rollUp = function(pts, char0, char1) {\n var baseRow = this.displayed_[BOTTOM_ROW];\n if (baseRow === '') {\n // we're starting to buffer new display input, so flush out the\n // current display\n this.flushDisplayed(pts);\n\n this.startPts_ = pts;\n }\n\n baseRow += getCharFromCode(char0);\n baseRow += getCharFromCode(char1);\n\n this.displayed_[BOTTOM_ROW] = baseRow;\n};\nCea608Stream.prototype.shiftRowsUp_ = function() {\n var i;\n // clear out inactive rows\n for (i = 0; i < this.topRow_; i++) {\n this.displayed_[i] = '';\n }\n // shift displayed rows up\n for (i = this.topRow_; i < BOTTOM_ROW; i++) {\n this.displayed_[i] = this.displayed_[i + 1];\n }\n // clear out the bottom row\n this.displayed_[BOTTOM_ROW] = '';\n};\n\n// exports\nmodule.exports = {\n CaptionStream: CaptionStream,\n Cea608Stream: Cea608Stream,\n};\n\n","module.exports = require('./m2ts');\n","/**\n * mux.js\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n'use strict';\nvar Stream = require('../utils/stream.js'),\n CaptionStream = require('./caption-stream'),\n StreamTypes = require('./stream-types'),\n TimestampRolloverStream = require('./timestamp-rollover-stream').TimestampRolloverStream;\n\nvar m2tsStreamTypes = require('./stream-types.js');\n\n// object types\nvar TransportPacketStream, TransportParseStream, ElementaryStream;\n\n// constants\nvar\n MP2T_PACKET_LENGTH = 188, // bytes\n SYNC_BYTE = 0x47;\n\n/**\n * Splits an incoming stream of binary data into MPEG-2 Transport\n * Stream packets.\n */\nTransportPacketStream = function() {\n var\n buffer = new Uint8Array(MP2T_PACKET_LENGTH),\n bytesInBuffer = 0;\n\n TransportPacketStream.prototype.init.call(this);\n\n // Deliver new bytes to the stream.\n\n this.push = function(bytes) {\n var\n startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n everything;\n\n // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n if (bytesInBuffer) {\n everything = new Uint8Array(bytes.byteLength + bytesInBuffer);\n everything.set(buffer.subarray(0, bytesInBuffer));\n everything.set(bytes, bytesInBuffer);\n bytesInBuffer = 0;\n } else {\n everything = bytes;\n }\n\n // While we have enough data for a packet\n while (endIndex < everything.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (everything[startIndex] === SYNC_BYTE && everything[endIndex] === SYNC_BYTE) {\n // We found a packet so emit it and jump one whole packet forward in\n // the stream\n this.trigger('data', everything.subarray(startIndex, endIndex));\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n }\n // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n startIndex++;\n endIndex++;\n }\n\n // If there was some data left over at the end of the segment that couldn't\n // possibly be a whole packet, keep it because it might be the start of a packet\n // that continues in the next segment\n if (startIndex < everything.byteLength) {\n buffer.set(everything.subarray(startIndex), 0);\n bytesInBuffer = everything.byteLength - startIndex;\n }\n };\n\n this.flush = function() {\n // If the buffer contains a whole packet when we are being flushed, emit it\n // and empty the buffer. Otherwise hold onto the data because it may be\n // important for decoding the next segment\n if (bytesInBuffer === MP2T_PACKET_LENGTH && buffer[0] === SYNC_BYTE) {\n this.trigger('data', buffer);\n bytesInBuffer = 0;\n }\n this.trigger('done');\n };\n};\nTransportPacketStream.prototype = new Stream();\n\n/**\n * Accepts an MP2T TransportPacketStream and emits data events with parsed\n * forms of the individual transport stream packets.\n */\nTransportParseStream = function() {\n var parsePsi, parsePat, parsePmt, parsePes, self;\n TransportParseStream.prototype.init.call(this);\n self = this;\n\n this.packetsWaitingForPmt = [];\n this.programMapTable = undefined;\n\n parsePsi = function(payload, psi) {\n var offset = 0;\n\n // PSI packets may be split into multiple sections and those\n // sections may be split into multiple packets. If a PSI\n // section starts in this packet, the payload_unit_start_indicator\n // will be true and the first byte of the payload will indicate\n // the offset from the current position to the start of the\n // section.\n if (psi.payloadUnitStartIndicator) {\n offset += payload[offset] + 1;\n }\n\n if (psi.type === 'pat') {\n parsePat(payload.subarray(offset), psi);\n } else {\n parsePmt(payload.subarray(offset), psi);\n }\n };\n\n parsePat = function(payload, pat) {\n pat.section_number = payload[7];\n pat.last_section_number = payload[8];\n\n // skip the PSI header and parse the first PMT entry\n self.pmtPid = (payload[10] & 0x1F) << 8 | payload[11];\n pat.pmtPid = self.pmtPid;\n };\n\n /**\n * Parse out the relevant fields of a Program Map Table (PMT).\n * @param payload {Uint8Array} the PMT-specific portion of an MP2T\n * packet. The first byte in this array should be the table_id\n * field.\n * @param pmt {object} the object that should be decorated with\n * fields parsed from the PMT.\n */\n parsePmt = function(payload, pmt) {\n var sectionLength, tableEnd, programInfoLength, offset;\n\n // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n if (!(payload[5] & 0x01)) {\n return;\n }\n\n // overwrite any existing program map table\n self.programMapTable = {};\n\n // the mapping table ends at the end of the current section\n sectionLength = (payload[1] & 0x0f) << 8 | payload[2];\n tableEnd = 3 + sectionLength - 4;\n\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n programInfoLength = (payload[10] & 0x0f) << 8 | payload[11];\n\n // advance the offset to the first entry in the mapping table\n offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n // add an entry that maps the elementary_pid to the stream_type\n self.programMapTable[(payload[offset + 1] & 0x1F) << 8 | payload[offset + 2]] = payload[offset];\n\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += ((payload[offset + 3] & 0x0F) << 8 | payload[offset + 4]) + 5;\n }\n\n // record the map on the packet as well\n pmt.programMapTable = self.programMapTable;\n\n // if there are any packets waiting for a PMT to be found, process them now\n while (self.packetsWaitingForPmt.length) {\n self.processPes_.apply(self, self.packetsWaitingForPmt.shift());\n }\n };\n\n /**\n * Deliver a new MP2T packet to the stream.\n */\n this.push = function(packet) {\n var\n result = {},\n offset = 4;\n\n result.payloadUnitStartIndicator = !!(packet[1] & 0x40);\n\n // pid is a 13-bit field starting at the last bit of packet[1]\n result.pid = packet[1] & 0x1f;\n result.pid <<= 8;\n result.pid |= packet[2];\n\n // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n if (((packet[3] & 0x30) >>> 4) > 0x01) {\n offset += packet[offset] + 1;\n }\n\n // parse the rest of the packet based on the type\n if (result.pid === 0) {\n result.type = 'pat';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result);\n } else if (result.pid === this.pmtPid) {\n result.type = 'pmt';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result);\n } else if (this.programMapTable === undefined) {\n // When we have not seen a PMT yet, defer further processing of\n // PES packets until one has been parsed\n this.packetsWaitingForPmt.push([packet, offset, result]);\n } else {\n this.processPes_(packet, offset, result);\n }\n };\n\n this.processPes_ = function(packet, offset, result) {\n result.streamType = this.programMapTable[result.pid];\n result.type = 'pes';\n result.data = packet.subarray(offset);\n\n this.trigger('data', result);\n };\n\n};\nTransportParseStream.prototype = new Stream();\nTransportParseStream.STREAM_TYPES = {\n h264: 0x1b,\n adts: 0x0f\n};\n\n/**\n * Reconsistutes program elementary stream (PES) packets from parsed\n * transport stream packets. That is, if you pipe an\n * mp2t.TransportParseStream into a mp2t.ElementaryStream, the output\n * events will be events which capture the bytes for individual PES\n * packets plus relevant metadata that has been extracted from the\n * container.\n */\nElementaryStream = function() {\n var\n self = this,\n // PES packet fragments\n video = {\n data: [],\n size: 0\n },\n audio = {\n data: [],\n size: 0\n },\n timedMetadata = {\n data: [],\n size: 0\n },\n parsePes = function(payload, pes) {\n var ptsDtsFlags;\n function extract_ts(arr, index) {\n var ts = (arr[index] & 0x0E) * 536870912 + // 1 << 29\n (arr[index+1] & 0xFF) * 4194304 + // 1 << 22\n (arr[index+2] & 0xFE) * 16384 + // 1 << 14\n (arr[index+3] & 0xFF) * 128 + // 1 << 7\n (arr[index+4] & 0xFE) / 2;\n // check if greater than 2^32 -1\n if (ts > 4294967295) {\n // decrement 2^33\n ts -= 8589934592;\n }\n return ts;\n }\n\n // find out if this packets starts a new keyframe\n pes.dataAlignmentIndicator = (payload[6] & 0x04) !== 0;\n // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n ptsDtsFlags = payload[7];\n\n // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n if (ptsDtsFlags & 0xC0) {\n // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n pes.pts = extract_ts(payload, 9);\n pes.dts = ptsDtsFlags & 0x40 ? extract_ts(payload, 14) : pes.pts;\n }\n // the data section starts immediately after the PES header.\n // pes_header_data_length specifies the number of header bytes\n // that follow the last byte of the field.\n pes.data = payload.subarray(9 + payload[8]);\n },\n flushStream = function(stream, type) {\n var\n packetData = new Uint8Array(stream.size),\n event = {\n type: type\n },\n i = 0,\n fragment;\n\n // do nothing if there is no buffered data\n if (!stream.data.length) {\n return;\n }\n event.trackId = stream.data[0].pid;\n\n // reassemble the packet\n while (stream.data.length) {\n fragment = stream.data.shift();\n\n packetData.set(fragment.data, i);\n i += fragment.data.byteLength;\n }\n\n // parse assembled packet's PES header\n parsePes(packetData, event);\n\n stream.size = 0;\n\n self.trigger('data', event);\n };\n\n ElementaryStream.prototype.init.call(this);\n\n this.push = function(data) {\n ({\n pat: function() {\n // we have to wait for the PMT to arrive as well before we\n // have any meaningful metadata\n },\n pes: function() {\n var stream, streamType;\n\n switch (data.streamType) {\n case StreamTypes.H264_STREAM_TYPE:\n case m2tsStreamTypes.H264_STREAM_TYPE:\n stream = video;\n streamType = 'video';\n break;\n case StreamTypes.ADTS_STREAM_TYPE:\n stream = audio;\n streamType = 'audio';\n break;\n case StreamTypes.METADATA_STREAM_TYPE:\n stream = timedMetadata;\n streamType = 'timed-metadata';\n break;\n default:\n // ignore unknown stream types\n return;\n }\n\n // if a new packet is starting, we can flush the completed\n // packet\n if (data.payloadUnitStartIndicator) {\n flushStream(stream, streamType);\n }\n\n // buffer this fragment until we are sure we've received the\n // complete payload\n stream.data.push(data);\n stream.size += data.data.byteLength;\n },\n pmt: function() {\n var\n event = {\n type: 'metadata',\n tracks: []\n },\n programMapTable = data.programMapTable,\n k,\n track;\n\n // translate streams to tracks\n for (k in programMapTable) {\n if (programMapTable.hasOwnProperty(k)) {\n track = {\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n }\n };\n track.id = +k;\n if (programMapTable[k] === m2tsStreamTypes.H264_STREAM_TYPE) {\n track.codec = 'avc';\n track.type = 'video';\n } else if (programMapTable[k] === m2tsStreamTypes.ADTS_STREAM_TYPE) {\n track.codec = 'adts';\n track.type = 'audio';\n }\n event.tracks.push(track);\n }\n }\n self.trigger('data', event);\n }\n })[data.type]();\n };\n\n /**\n * Flush any remaining input. Video PES packets may be of variable\n * length. Normally, the start of a new video packet can trigger the\n * finalization of the previous packet. That is not possible if no\n * more video is forthcoming, however. In that case, some other\n * mechanism (like the end of the file) has to be employed. When it is\n * clear that no additional data is forthcoming, calling this method\n * will flush the buffered packets.\n */\n this.flush = function() {\n // !!THIS ORDER IS IMPORTANT!!\n // video first then audio\n flushStream(video, 'video');\n flushStream(audio, 'audio');\n flushStream(timedMetadata, 'timed-metadata');\n this.trigger('done');\n };\n};\nElementaryStream.prototype = new Stream();\n\nvar m2ts = {\n PAT_PID: 0x0000,\n MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH,\n TransportPacketStream: TransportPacketStream,\n TransportParseStream: TransportParseStream,\n ElementaryStream: ElementaryStream,\n TimestampRolloverStream: TimestampRolloverStream,\n CaptionStream: CaptionStream.CaptionStream,\n Cea608Stream: CaptionStream.Cea608Stream,\n MetadataStream: require('./metadata-stream')\n};\n\nfor (var type in StreamTypes) {\n if (StreamTypes.hasOwnProperty(type)) {\n m2ts[type] = StreamTypes[type];\n }\n}\n\nmodule.exports = m2ts;\n","/**\n * Accepts program elementary stream (PES) data events and parses out\n * ID3 metadata from them, if present.\n * @see http://id3.org/id3v2.3.0\n */\n'use strict';\nvar\n Stream = require('../utils/stream'),\n StreamTypes = require('./stream-types'),\n // return a percent-encoded representation of the specified byte range\n // @see http://en.wikipedia.org/wiki/Percent-encoding\n percentEncode = function(bytes, start, end) {\n var i, result = '';\n for (i = start; i < end; i++) {\n result += '%' + ('00' + bytes[i].toString(16)).slice(-2);\n }\n return result;\n },\n // return the string representation of the specified byte range,\n // interpreted as UTf-8.\n parseUtf8 = function(bytes, start, end) {\n return decodeURIComponent(percentEncode(bytes, start, end));\n },\n // return the string representation of the specified byte range,\n // interpreted as ISO-8859-1.\n parseIso88591 = function(bytes, start, end) {\n return unescape(percentEncode(bytes, start, end)); // jshint ignore:line\n },\n parseSyncSafeInteger = function (data) {\n return (data[0] << 21) |\n (data[1] << 14) |\n (data[2] << 7) |\n (data[3]);\n },\n tagParsers = {\n 'TXXX': function(tag) {\n var i;\n if (tag.data[0] !== 3) {\n // ignore frames with unrecognized character encodings\n return;\n }\n\n for (i = 1; i < tag.data.length; i++) {\n if (tag.data[i] === 0) {\n // parse the text fields\n tag.description = parseUtf8(tag.data, 1, i);\n // do not include the null terminator in the tag value\n tag.value = parseUtf8(tag.data, i + 1, tag.data.length - 1);\n break;\n }\n }\n tag.data = tag.value;\n },\n 'WXXX': function(tag) {\n var i;\n if (tag.data[0] !== 3) {\n // ignore frames with unrecognized character encodings\n return;\n }\n\n for (i = 1; i < tag.data.length; i++) {\n if (tag.data[i] === 0) {\n // parse the description and URL fields\n tag.description = parseUtf8(tag.data, 1, i);\n tag.url = parseUtf8(tag.data, i + 1, tag.data.length);\n break;\n }\n }\n },\n 'PRIV': function(tag) {\n var i;\n\n for (i = 0; i < tag.data.length; i++) {\n if (tag.data[i] === 0) {\n // parse the description and URL fields\n tag.owner = parseIso88591(tag.data, 0, i);\n break;\n }\n }\n tag.privateData = tag.data.subarray(i + 1);\n tag.data = tag.privateData;\n }\n },\n MetadataStream;\n\nMetadataStream = function(options) {\n var\n settings = {\n debug: !!(options && options.debug),\n\n // the bytes of the program-level descriptor field in MP2T\n // see ISO/IEC 13818-1:2013 (E), section 2.6 \"Program and\n // program element descriptors\"\n descriptor: options && options.descriptor\n },\n // the total size in bytes of the ID3 tag being parsed\n tagSize = 0,\n // tag data that is not complete enough to be parsed\n buffer = [],\n // the total number of bytes currently in the buffer\n bufferSize = 0,\n i;\n\n MetadataStream.prototype.init.call(this);\n\n // calculate the text track in-band metadata track dispatch type\n // https://html.spec.whatwg.org/multipage/embedded-content.html#steps-to-expose-a-media-resource-specific-text-track\n this.dispatchType = StreamTypes.METADATA_STREAM_TYPE.toString(16);\n if (settings.descriptor) {\n for (i = 0; i < settings.descriptor.length; i++) {\n this.dispatchType += ('00' + settings.descriptor[i].toString(16)).slice(-2);\n }\n }\n\n this.push = function(chunk) {\n var tag, frameStart, frameSize, frame, i, frameHeader;\n if (chunk.type !== 'timed-metadata') {\n return;\n }\n\n // if data_alignment_indicator is set in the PES header,\n // we must have the start of a new ID3 tag. Assume anything\n // remaining in the buffer was malformed and throw it out\n if (chunk.dataAlignmentIndicator) {\n bufferSize = 0;\n buffer.length = 0;\n }\n\n // ignore events that don't look like ID3 data\n if (buffer.length === 0 &&\n (chunk.data.length < 10 ||\n chunk.data[0] !== 'I'.charCodeAt(0) ||\n chunk.data[1] !== 'D'.charCodeAt(0) ||\n chunk.data[2] !== '3'.charCodeAt(0))) {\n if (settings.debug) {\n console.log('Skipping unrecognized metadata packet');\n }\n return;\n }\n\n // add this chunk to the data we've collected so far\n\n buffer.push(chunk);\n bufferSize += chunk.data.byteLength;\n\n // grab the size of the entire frame from the ID3 header\n if (buffer.length === 1) {\n // the frame size is transmitted as a 28-bit integer in the\n // last four bytes of the ID3 header.\n // The most significant bit of each byte is dropped and the\n // results concatenated to recover the actual value.\n tagSize = parseSyncSafeInteger(chunk.data.subarray(6, 10));\n\n // ID3 reports the tag size excluding the header but it's more\n // convenient for our comparisons to include it\n tagSize += 10;\n }\n\n // if the entire frame has not arrived, wait for more data\n if (bufferSize < tagSize) {\n return;\n }\n\n // collect the entire frame so it can be parsed\n tag = {\n data: new Uint8Array(tagSize),\n frames: [],\n pts: buffer[0].pts,\n dts: buffer[0].dts\n };\n for (i = 0; i < tagSize;) {\n tag.data.set(buffer[0].data.subarray(0, tagSize - i), i);\n i += buffer[0].data.byteLength;\n bufferSize -= buffer[0].data.byteLength;\n buffer.shift();\n }\n\n // find the start of the first frame and the end of the tag\n frameStart = 10;\n if (tag.data[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n frameStart += parseSyncSafeInteger(tag.data.subarray(10, 14));\n\n // clip any padding off the end\n tagSize -= parseSyncSafeInteger(tag.data.subarray(16, 20));\n }\n\n // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger(tag.data.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n return console.log('Malformed ID3 frame encountered. Skipping metadata parsing.');\n }\n frameHeader = String.fromCharCode(tag.data[frameStart],\n tag.data[frameStart + 1],\n tag.data[frameStart + 2],\n tag.data[frameStart + 3]);\n\n\n frame = {\n id: frameHeader,\n data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10)\n };\n frame.key = frame.id;\n if (tagParsers[frame.id]) {\n tagParsers[frame.id](frame);\n if (frame.owner === 'com.apple.streaming.transportStreamTimestamp') {\n var\n d = frame.data,\n size = ((d[3] & 0x01) << 30) |\n (d[4] << 22) |\n (d[5] << 14) |\n (d[6] << 6) |\n (d[7] >>> 2);\n\n size *= 4;\n size += d[7] & 0x03;\n frame.timeStamp = size;\n this.trigger('timestamp', frame);\n }\n }\n tag.frames.push(frame);\n\n frameStart += 10; // advance past the frame header\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < tagSize);\n this.trigger('data', tag);\n };\n};\nMetadataStream.prototype = new Stream();\n\nmodule.exports = MetadataStream;\n","'use strict';\n\nmodule.exports = {\n H264_STREAM_TYPE: 0x1B,\n ADTS_STREAM_TYPE: 0x0F,\n METADATA_STREAM_TYPE: 0x15\n};\n","/**\n * mux.js\n *\n * Copyright (c) 2016 Brightcove\n * All rights reserved.\n *\n * Accepts program elementary stream (PES) data events and corrects\n * decode and presentation time stamps to account for a rollover\n * of the 33 bit value.\n */\n\n'use strict';\n\nvar Stream = require('../utils/stream');\n\nvar MAX_TS = 8589934592;\n\nvar RO_THRESH = 4294967296;\n\nvar handleRollover = function(value, reference) {\n var direction = 1;\n\n if (value > reference) {\n // If the current timestamp value is greater than our reference timestamp and we detect a\n // timestamp rollover, this means the roll over is happening in the opposite direction.\n // Example scenario: Enter a long stream/video just after a rollover occurred. The reference\n // point will be set to a small number, e.g. 1. The user then seeks backwards over the\n // rollover point. In loading this segment, the timestamp values will be very large,\n // e.g. 2^33 - 1. Since this comes before the data we loaded previously, we want to adjust\n // the time stamp to be `value - 2^33`.\n direction = -1;\n }\n\n // Note: A seek forwards or back that is greater than the RO_THRESH (2^32, ~13 hours) will\n // cause an incorrect adjustment.\n while (Math.abs(reference - value) > RO_THRESH) {\n value += (direction * MAX_TS);\n }\n\n return value;\n};\n\nvar TimestampRolloverStream = function(type) {\n var lastDTS, referenceDTS;\n\n TimestampRolloverStream.prototype.init.call(this);\n\n this.type_ = type;\n\n this.push = function(data) {\n if (data.type !== this.type_) {\n return;\n }\n\n if (referenceDTS === undefined) {\n referenceDTS = data.dts;\n }\n\n data.dts = handleRollover(data.dts, referenceDTS);\n data.pts = handleRollover(data.pts, referenceDTS);\n\n lastDTS = data.dts;\n\n this.trigger('data', data);\n };\n\n this.flush = function() {\n referenceDTS = lastDTS;\n this.trigger('done');\n };\n\n};\n\nTimestampRolloverStream.prototype = new Stream();\n\nmodule.exports = {\n TimestampRolloverStream: TimestampRolloverStream,\n handleRollover: handleRollover\n};\n","module.exports = {\n generator: require('./mp4-generator'),\n Transmuxer: require('./transmuxer').Transmuxer,\n AudioSegmentStream: require('./transmuxer').AudioSegmentStream,\n VideoSegmentStream: require('./transmuxer').VideoSegmentStream,\n tools: require('../tools/mp4-inspector'),\n MP4ParserStream: require('./mp4-parser').MP4ParserStream,\n MP4BuilderStream: require('./mp4-parser').MP4BuilderStream,\n};\n","/**\n * mux.js\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * Functions that generate fragmented MP4s suitable for use with Media\n * Source Extensions.\n */\n'use strict';\n\nvar UINT32_MAX = Math.pow(2, 32) - 1;\nvar box, cslg, dinf, esds, ftyp, edts, elst, mdat, mfhd, minf, moof, moov,\n mvex, mvhd, trak, tkhd, mdia, mdhd, hdlr, sdtp, stbl, stsd, styp, traf,\n trep, trex, trun, types, MAJOR_BRAND, MINOR_VERSION, AVC1_BRAND,\n VIDEO_HDLR, AUDIO_HDLR, HDLR_TYPES, VMHD, SMHD, DREF, STCO, STSC, STSZ,\n STTS, Uint8Array, DataView;\n\nUint8Array = window.Uint8Array;\nDataView = window.DataView;\n\n// pre-calculate constants\n(function() {\n var i;\n types = {\n avc1: [], // codingname\n avcC: [],\n btrt: [],\n cslg: [],\n dinf: [],\n dref: [],\n edts: [],\n elst: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [], // codingname\n mvex: [],\n mvhd: [],\n sdtp: [],\n smhd: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n styp: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trep: [],\n trex: [],\n tkhd: [],\n vmhd: []\n };\n\n // In environments where Uint8Array is undefined (e.g., IE8), skip set up so that we\n // don't throw an error\n if (typeof Uint8Array === 'undefined') {\n return;\n }\n\n for (i in types) {\n if (types.hasOwnProperty(i)) {\n types[i] = [\n i.charCodeAt(0),\n i.charCodeAt(1),\n i.charCodeAt(2),\n i.charCodeAt(3)\n ];\n }\n }\n\n MAJOR_BRAND = new Uint8Array([\n 'i'.charCodeAt(0),\n 's'.charCodeAt(0),\n 'o'.charCodeAt(0),\n 'm'.charCodeAt(0)\n ]);\n AVC1_BRAND = new Uint8Array([\n 'a'.charCodeAt(0),\n 'v'.charCodeAt(0),\n 'c'.charCodeAt(0),\n '1'.charCodeAt(0)\n ]);\n MINOR_VERSION = new Uint8Array([0, 0, 0, 1]);\n VIDEO_HDLR = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65,\n 0x6f, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]);\n AUDIO_HDLR = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x53, 0x6f, 0x75, 0x6e,\n 0x64, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ]);\n HDLR_TYPES = {\n video: VIDEO_HDLR,\n audio: AUDIO_HDLR\n };\n DREF = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]);\n SMHD = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance, 0 means centered\n 0x00, 0x00 // reserved\n ]);\n STCO = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n STSC = STCO;\n STSZ = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00, // sample_count\n ]);\n STTS = STCO;\n VMHD = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00,\n 0x00, 0x00,\n 0x00, 0x00 // opcolor\n ]);\n}());\n\nfunction uint32_to_arr(num){\n return [num>>>24&255, num>>>16&255, num>>>8&255, num&255];\n}\n\nfunction uint16_to_arr(num){\n return [num>>>8&255, num&255];\n}\n\nbox = function(type) {\n var\n payload = [],\n size = 0,\n i,\n result,\n view;\n\n for (i = 1; i < arguments.length; i++) {\n payload.push(arguments[i]);\n }\n\n i = payload.length;\n\n // calculate the total size we need to allocate\n while (i--) {\n size += payload[i].byteLength;\n }\n result = new Uint8Array(size + 8);\n view = new DataView(result.buffer, result.byteOffset, result.byteLength);\n view.setUint32(0, result.byteLength);\n result.set(type, 4);\n\n // copy the payload into the result\n for (i = 0, size = 8; i < payload.length; i++) {\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n};\n\ncslg = function(cslg) {\n var obj = {};\n for (var k in cslg)\n obj[k] = cslg[k]>>>0;\n return box(types.cslg, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n (obj.ctts_shift >>> 24) & 0xFF,\n (obj.ctts_shift >>> 16) & 0xFF,\n (obj.ctts_shift >>> 8) & 0xFF,\n obj.ctts_shift & 0xFF,\n (obj.min_ctts >>> 24) & 0xFF,\n (obj.min_ctts >>> 16) & 0xFF,\n (obj.min_ctts >>> 8) & 0xFF,\n obj.min_ctts & 0xFF,\n (obj.max_ctts >>> 24) & 0xFF,\n (obj.max_ctts >>> 16) & 0xFF,\n (obj.max_ctts >>> 8) & 0xFF,\n obj.max_ctts & 0xFF,\n (obj.min_cts >>> 24) & 0xFF,\n (obj.min_cts >>> 16) & 0xFF,\n (obj.min_cts >>> 8) & 0xFF,\n obj.min_cts & 0xFF,\n (obj.max_cts >>> 24) & 0xFF,\n (obj.max_cts >>> 16) & 0xFF,\n (obj.max_cts >>> 8) & 0xFF,\n obj.max_cts & 0xFF,\n ]));\n};\n\ndinf = function() {\n return box(types.dinf, box(types.dref, DREF));\n};\n\nedts = function(track) {\n return box(types.edts, elst(track));\n};\n\nelst = function(track) {\n var count = track.edit_list.length, i;\n var bytes = [\n 0x00, // version\n 0x00, 0x00, 0x00\n ].concat(uint32_to_arr(count)); // entries count\n for (i = 0; i < count; i++)\n {\n bytes = bytes.concat(uint32_to_arr(track.edit_list[i].segment_duration))\n .concat(uint32_to_arr(track.edit_list[i].media_time))\n .concat(uint16_to_arr(track.edit_list[i].media_rate))\n .concat(uint16_to_arr(0)); // reserved\n }\n return box(types.elst, new Uint8Array(bytes));\n};\n\nesds = function(track) {\n return box(types.esds, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n\n // ES_Descriptor\n 0x03, // tag, ES_DescrTag\n 0x19, // length\n 0x00, 0x00, // ES_ID\n 0x00, // streamDependenceFlag, URL_flag, reserved, streamPriority\n\n // DecoderConfigDescriptor\n 0x04, // tag, DecoderConfigDescrTag\n 0x11, // length\n 0x40, // object type\n 0x15, // streamType\n 0x00, 0x06, 0x00, // bufferSizeDB\n 0x00, 0x00, 0xda, 0xc0, // maxBitrate\n 0x00, 0x00, 0xda, 0xc0, // avgBitrate\n\n // DecoderSpecificInfo\n 0x05, // tag, DecoderSpecificInfoTag\n 0x02, // length\n // ISO/IEC 14496-3, AudioSpecificConfig\n // for samplingFrequencyIndex see ISO/IEC 13818-7:2006, 8.1.3.2.2, Table 35\n (track.audioobjecttype << 3) | (track.samplingfrequencyindex >>> 1),\n (track.samplingfrequencyindex << 7) | (track.channelcount << 3),\n 0x06, 0x01, 0x02 // GASpecificConfig\n ]));\n};\n\nftyp = function(opt) {\n opt = opt||{};\n var params = opt.compatible||[MAJOR_BRAND, AVC1_BRAND];\n params = params.slice(0);\n params.unshift(types.ftyp, opt.major||MAJOR_BRAND, MINOR_VERSION);\n return box.apply(null, params);\n};\n\nhdlr = function(type) {\n return box(types.hdlr, HDLR_TYPES[type]);\n};\nmdat = function(data) {\n return box(types.mdat, data);\n};\nmdhd = function(track) {\n var result = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x03, // modification_time\n 0x00, 0x01, 0x5f, 0x90, // timescale, 90,000 \"ticks\" per second\n\n (track.duration >>> 24) & 0xFF,\n (track.duration >>> 16) & 0xFF,\n (track.duration >>> 8) & 0xFF,\n track.duration & 0xFF, // duration\n 0x55, 0xc4, // 'und' language (undetermined)\n 0x00, 0x00\n ]);\n\n // Use the sample rate from the track metadata, when it is\n // defined. The sample rate can be parsed out of an ADTS header, for\n // instance.\n if (track.samplerate) {\n result[12] = (track.samplerate >>> 24) & 0xFF;\n result[13] = (track.samplerate >>> 16) & 0xFF;\n result[14] = (track.samplerate >>> 8) & 0xFF;\n result[15] = (track.samplerate) & 0xFF;\n }\n\n return box(types.mdhd, result);\n};\nmdia = function(track) {\n return box(types.mdia, mdhd(track), hdlr(track.type), minf(track));\n};\nmfhd = function(sequenceNumber) {\n return box(types.mfhd, new Uint8Array([\n 0x00,\n 0x00, 0x00, 0x00, // flags\n (sequenceNumber & 0xFF000000) >> 24,\n (sequenceNumber & 0xFF0000) >> 16,\n (sequenceNumber & 0xFF00) >> 8,\n sequenceNumber & 0xFF, // sequence_number\n ]));\n};\nminf = function(track) {\n return box(types.minf,\n track.type === 'video' ? box(types.vmhd, VMHD) : box(types.smhd, SMHD),\n dinf(), stbl(track));\n};\nmoof = function(sequenceNumber, tracks, opt) {\n var\n trackFragments = [],\n i = tracks.length;\n opt = opt||{};\n // build traf boxes for each track fragment\n while (i--) {\n trackFragments[i] = traf(tracks[i], opt);\n }\n return box.apply(null, [\n types.moof,\n mfhd(sequenceNumber)\n ].concat(trackFragments));\n};\n/**\n * Returns a movie box.\n * @param tracks {array} the tracks associated with this movie\n * @see ISO/IEC 14496-12:2012(E), section 8.2.1\n */\nmoov = function(tracks, opt) {\n var\n i = tracks.length,\n boxes = [],\n duration = 0;\n opt = opt||{};\n while (i--) {\n boxes[i] = trak(tracks[i]);\n if (opt.set_duration) {\n duration = Math.max(duration,\n Math.floor(tracks[i].duration*90000/tracks[i].samplerate));\n }\n }\n duration = opt.duration||duration||0xFFFFFFFF;\n return box.apply(null, [types.moov, mvhd(duration)].concat(boxes)\n .concat(mvex(tracks)));\n};\nmvex = function(tracks) {\n var\n i = tracks.length,\n boxes = [];\n\n while (i--) {\n boxes[i] = trex(tracks[i]);\n if (tracks[i].cslg && tracks[i].cslg.max_cts) {\n boxes.push(trep(tracks[i]));\n }\n }\n return box.apply(null, [types.mvex].concat(boxes));\n};\nmvhd = function(duration) {\n var\n bytes = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // creation_time\n 0x00, 0x00, 0x00, 0x02, // modification_time\n 0x00, 0x01, 0x5f, 0x90, // timescale, 90,000 \"ticks\" per second\n (duration & 0xFF000000) >> 24,\n (duration & 0xFF0000) >> 16,\n (duration & 0xFF00) >> 8,\n duration & 0xFF, // duration\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]);\n return box(types.mvhd, bytes);\n};\n\nsdtp = function(track) {\n var\n samples = track.samples || [],\n bytes = new Uint8Array(4 + samples.length),\n flags,\n i;\n\n // leave the full box header (4 bytes) all zero\n\n // write the sample table\n for (i = 0; i < samples.length; i++) {\n flags = samples[i].flags;\n\n bytes[i + 4] = (flags.isLeading << 6) |\n (flags.dependsOn << 4) |\n (flags.isDependedOn << 2) |\n (flags.hasRedundancy);\n }\n\n return box(types.sdtp,\n bytes);\n};\n\nstbl = function(track) {\n return box(types.stbl,\n stsd(track),\n box(types.stts, STTS),\n box(types.stsc, STSC),\n box(types.stsz, STSZ),\n box(types.stco, STCO));\n};\n\n(function() {\n var videoSample, audioSample;\n\n stsd = function(track) {\n\n return box(types.stsd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01\n ]), track.type === 'video' ? videoSample(track) : audioSample(track));\n };\n\n videoSample = function(track) {\n var\n sps = track.sps || [],\n pps = track.pps || [],\n sequenceParameterSets = [],\n pictureParameterSets = [],\n i;\n\n // assemble the SPSs\n for (i = 0; i < sps.length; i++) {\n sequenceParameterSets.push((sps[i].byteLength & 0xFF00) >>> 8);\n sequenceParameterSets.push((sps[i].byteLength & 0xFF)); // sequenceParameterSetLength\n sequenceParameterSets = sequenceParameterSets.concat(Array.prototype.slice.call(sps[i])); // SPS\n }\n\n // assemble the PPSs\n for (i = 0; i < pps.length; i++) {\n pictureParameterSets.push((pps[i].byteLength & 0xFF00) >>> 8);\n pictureParameterSets.push((pps[i].byteLength & 0xFF));\n pictureParameterSets = pictureParameterSets.concat(Array.prototype.slice.call(pps[i]));\n }\n\n return box(types.avc1, new Uint8Array([\n 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (track.width & 0xff00) >> 8,\n track.width & 0xff, // width\n (track.height & 0xff00) >> 8,\n track.height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x13,\n 0x76, 0x69, 0x64, 0x65,\n 0x6f, 0x6a, 0x73, 0x2d,\n 0x63, 0x6f, 0x6e, 0x74,\n 0x72, 0x69, 0x62, 0x2d,\n 0x68, 0x6c, 0x73, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11 // pre_defined = -1\n ]), box(types.avcC, new Uint8Array([\n 0x01, // configurationVersion\n track.profileIdc, // AVCProfileIndication\n track.profileCompatibility, // profile_compatibility\n track.levelIdc, // AVCLevelIndication\n 0xff // lengthSizeMinusOne, hard-coded to 4 bytes\n ].concat([\n sps.length|0xE0 // reserved (high 3 bits) | numOfSequenceParameterSets\n ]).concat(sequenceParameterSets).concat([\n pps.length // numOfPictureParameterSets\n ]).concat(pictureParameterSets))), // \"PPS\"\n box(types.btrt, new Uint8Array([\n 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0\n ])) // avgBitrate\n );\n };\n\n audioSample = function(track) {\n return box(types.mp4a, new Uint8Array([\n\n // SampleEntry, ISO/IEC 14496-12\n 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n\n // AudioSampleEntry, ISO/IEC 14496-12\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n (track.channelcount & 0xff00) >> 8,\n (track.channelcount & 0xff), // channelcount\n\n (track.samplesize & 0xff00) >> 8,\n (track.samplesize & 0xff), // samplesize\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n\n (track.samplerate & 0xff00) >> 8,\n (track.samplerate & 0xff),\n 0x00, 0x00 // samplerate, 16.16\n\n // MP4AudioSampleEntry, ISO/IEC 14496-14\n ]), esds(track));\n };\n}());\n\nstyp = function() {\n return box(types.styp, MAJOR_BRAND, MINOR_VERSION, MAJOR_BRAND);\n};\n\ntkhd = function(track) {\n var duration = track.duration;\n if (track.samplerate) {\n // tkhd duration should be in movie scale\n duration = Math.floor(duration*90000/track.samplerate);\n }\n var result = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x07, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (track.id & 0xFF000000) >> 24,\n (track.id & 0xFF0000) >> 16,\n (track.id & 0xFF00) >> 8,\n track.id & 0xFF, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n (track.duration & 0xFF000000) >> 24,\n (track.duration & 0xFF0000) >> 16,\n (track.duration & 0xFF00) >> 8,\n track.duration & 0xFF, // duration\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, 0x00, // alternate_group\n +(track.type=='audio'), 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n (track.width & 0xFF00) >> 8,\n track.width & 0xFF,\n 0x00, 0x00, // width\n (track.height & 0xFF00) >> 8,\n track.height & 0xFF,\n 0x00, 0x00 // height\n ]);\n\n return box(types.tkhd, result);\n};\n\n/**\n * Generate a track fragment (traf) box. A traf box collects metadata\n * about tracks in a movie fragment (moof) box.\n */\ntraf = function(track, opt) {\n var trackFragmentHeader, trackFragmentDecodeTime,\n trackFragmentRun, sampleDependencyTable, dataOffset,\n upperWordBaseMediaDecodeTime, lowerWordBaseMediaDecodeTime;\n opt = opt||{};\n trackFragmentHeader = box(types.tfhd, new Uint8Array([\n 0x00, // version 0\n opt.no_multi_init ? 0x02 : 0x00, 0x00, 0x3a, // flags\n (track.id & 0xFF000000) >> 24,\n (track.id & 0xFF0000) >> 16,\n (track.id & 0xFF00) >> 8,\n (track.id & 0xFF), // track_ID\n 0x00, 0x00, 0x00, 0x01, // sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x00, 0x00, 0x00 // default_sample_flags\n ]));\n\n upperWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime / (UINT32_MAX + 1));\n lowerWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime % (UINT32_MAX + 1));\n trackFragmentDecodeTime = box(types.tfdt, new Uint8Array([\n 0x01, // version 1\n 0x00, 0x00, 0x00, // flags\n // baseMediaDecodeTime\n (upperWordBaseMediaDecodeTime >>> 24) & 0xFF,\n (upperWordBaseMediaDecodeTime >>> 16) & 0xFF,\n (upperWordBaseMediaDecodeTime >>> 8) & 0xFF,\n upperWordBaseMediaDecodeTime & 0xFF,\n (lowerWordBaseMediaDecodeTime >>> 24) & 0xFF,\n (lowerWordBaseMediaDecodeTime >>> 16) & 0xFF,\n (lowerWordBaseMediaDecodeTime >>> 8) & 0xFF,\n lowerWordBaseMediaDecodeTime & 0xFF\n ]));\n\n // the data offset specifies the number of bytes from the start of\n // the containing moof to the first payload byte of the associated\n // mdat\n dataOffset = (32 + // tfhd\n 20 + // tfdt\n 8 + // traf header\n 16 + // mfhd\n 8 + // moof header\n 8); // mdat header\n\n // audio tracks require less metadata\n if (track.type === 'audio') {\n trackFragmentRun = trun(track, dataOffset);\n return box(types.traf,\n trackFragmentHeader,\n trackFragmentDecodeTime,\n trackFragmentRun);\n }\n\n // video tracks should contain an independent and disposable samples\n // box (sdtp)\n // generate one and adjust offsets to match\n sampleDependencyTable = sdtp(track);\n trackFragmentRun = trun(track,\n sampleDependencyTable.length + dataOffset);\n return box(types.traf,\n trackFragmentHeader,\n trackFragmentDecodeTime,\n trackFragmentRun,\n sampleDependencyTable);\n};\n\n/**\n * Generate a track box.\n * @param track {object} a track definition\n * @return {Uint8Array} the track box\n */\ntrak = function(track) {\n track.duration = track.duration || 0xffffffff;\n var param = [types.trak, tkhd(track), mdia(track)];\n if (track.edit_list && track.edit_list.length)\n param.splice(2, 0, edts(track));\n return box.apply(null, param);\n};\n\ntrep = function(track){\n return box(types.trep, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (track.id & 0xFF000000) >> 24,\n (track.id & 0xFF0000) >> 16,\n (track.id & 0xFF00) >> 8,\n (track.id & 0xFF), // track_ID\n ]), cslg(track.cslg));\n};\n\ntrex = function(track) {\n var result = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (track.id & 0xFF000000) >> 24,\n (track.id & 0xFF0000) >> 16,\n (track.id & 0xFF00) >> 8,\n (track.id & 0xFF), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]);\n // the last two bytes of default_sample_flags is the sample\n // degradation priority, a hint about the importance of this sample\n // relative to others. Lower the degradation priority for all sample\n // types other than video.\n if (track.type !== 'video') {\n result[result.length - 1] = 0x00;\n }\n\n return box(types.trex, result);\n};\n\ntrun = function(track, offset) {\n function get_flags(sample){\n return ('duration' in sample&&0x1)|('size' in sample&&0x2)|\n ('flags' in sample&&0x4)|('compositionTimeOffset' in sample&&0x8);\n }\n function trun_header(samples, offset, flags) {\n return [\n 0x00, // version 0\n 0x00,\n flags,\n 0x01, // flags\n (samples.length & 0xFF000000) >>> 24,\n (samples.length & 0xFF0000) >>> 16,\n (samples.length & 0xFF00) >>> 8,\n samples.length & 0xFF, // sample_count\n (offset & 0xFF000000) >>> 24,\n (offset & 0xFF0000) >>> 16,\n (offset & 0xFF00) >>> 8,\n offset & 0xFF // data_offset\n ];\n }\n var samples = track.samples||[];\n var flags = get_flags(samples[0]||{});\n offset += 20+4*samples.length*((flags>>3&1)+(flags>>2&1)+(flags>>1&1)+\n (flags&1));\n var bytes = trun_header(samples, offset, flags);\n var was_neg = false;\n for (var i=0; i<samples.length; i++) {\n var sample = samples[i];\n if (flags&1){\n bytes.push(sample.duration>>24&0xFF, sample.duration>>16&0xFF,\n sample.duration>>8&0xFF, sample.duration&0xFF); // sample_duration\n }\n if (flags&2){\n bytes.push(sample.size>>24&0xFF, sample.size>>16&0xFF,\n sample.size>>8&0xFF, sample.size&0xFF); // sample_size\n }\n if (flags&4){\n bytes.push(sample.flags.isLeading<<2|sample.flags.dependsOn,\n sample.flags.isDependedOn<<6|sample.flags.hasRedundancy<<4|\n sample.flags.paddingValue<<1|sample.flags.isNonSyncSample,\n sample.flags.degradationPriority>>8&0xFF,\n sample.flags.degradationPriority&0xFF); // sample_flags\n }\n if (flags&8){\n was_neg = was_neg||sample.compositionTimeOffset<0;\n bytes.push(sample.compositionTimeOffset>>24&0xFF,\n sample.compositionTimeOffset>>16&0xFF,\n sample.compositionTimeOffset>>8&0xFF,\n sample.compositionTimeOffset&0xFF); // sample_composition_time_offset\n }\n }\n bytes[0] = +!!was_neg;\n return box(types.trun, new Uint8Array(bytes));\n};\n\nmodule.exports = {\n ftyp: ftyp,\n mdat: mdat,\n moof: moof,\n moov: moov,\n initSegment: function(tracks, opt) {\n var\n fileType = ftyp(opt),\n movie = moov(tracks, opt),\n result;\n\n result = new Uint8Array(fileType.byteLength + movie.byteLength);\n result.set(fileType);\n result.set(movie, fileType.byteLength);\n return result;\n }\n};\n","'use strict';\n\nvar Stream = require('../utils/stream.js');\nvar mp4 = require('./mp4-generator.js');\nvar sample_type={vide: 'video', soun: 'audio'};\nvar full_box = ['meta', 'mvhd', 'tkhd', 'mdhd', 'smhd', 'vmhd', 'dref',\n 'hdlr', 'stsd', 'esds', 'stts', 'stps', 'stss', 'ctts', 'stsc', 'stsz',\n 'stco', 'esds', 'elst', 'nmhd', 'cslg', 'sdtp', 'co64'];\n// tgas, elng - non-standard unknown boxes seen in some videos\nvar raw_copy = ['udta', 'smhd', 'vmhd', 'dref', 'iods', 'btrt', 'pasp', 'clap',\n 'uuid', 'colr', 'sbgp', 'sgpd', 'gmhd', 'tref', 'nmhd', 'svcC', 'hmhd',\n 'fiel', 'tapt', 'load', 'meta', 'sefd', 'beam', 'tgas', 'elng'];\nvar containers = {\n trak: {name: 'track_info', multi: 1},\n edts: {name: 'edit_list'},\n exts: {name: 'edit_list'},\n mdia: {name: 'media_box'},\n minf: {name: 'media_info'},\n dinf: {name: 'data_info'},\n stbl: {name: 'sample_table'},\n};\nfunction byte_to_hex(bt){ return ('0'+bt.toString(16)).slice(-2); }\nfunction int_to_str(tp){\n return String.fromCharCode(tp>>24&255, tp>>16&255, tp>>8&255, tp&255); }\nfunction getUint64(view, ptr){\n return view.getUint32(ptr+4)+view.getUint32(ptr)*0x100000000; }\nfunction getInt64(view, ptr){\n var hib = view.getUint8(ptr);\n if (hib<128)\n return getUint64(view, ptr);\n return view.getUint32(ptr+4)+0x100000000*(view.getUint32(ptr)-0x100000000);\n}\nfunction Bit_reader(view, ptr, size){\n var pos = 0, len = size*8;\n this.read = function(count, peek){\n var ret = 0, p = pos>>3, r = 7-pos%8;\n for (var i = 0, c = view.getUint8(p+ptr); i<count; i++, r--)\n {\n ret = (ret<<1)|((c>>r)&1);\n if (r)\n continue;\n p++;\n r = 8;\n c = view.getUint8(p+ptr);\n }\n if (!peek)\n pos += count;\n return ret;\n };\n this.bits = function(){ return len-pos; };\n}\nvar Box_parser = function(){};\nBox_parser.prototype = {};\nBox_parser.prototype.header = function(opt){\n while (opt.ptr+opt.buffer.b_pos>=opt.branch.last)\n {\n if (opt.branch._id=='movie_box')\n opt.root.h_parsed = true;\n opt.branch = opt.branch.parent;\n }\n opt.type = null;\n opt.offset = 8;\n if (opt.buffer.b_size-opt.ptr<8)\n return (opt.offset = 0);\n opt.size = opt.view.getUint32(opt.ptr);\n if (opt.size==1)\n {\n opt.offset = 16;\n if (opt.buffer.b_size-opt.ptr<16)\n return (opt.offset = 0);\n opt.size = (opt.view.getUint32(opt.ptr+8)<<32)+\n opt.view.getUint32(opt.ptr+12);\n }\n opt.type = int_to_str(opt.view.getUint32(opt.ptr+4));\n if (full_box.includes(opt.type))\n {\n opt.offset += 4;\n if (opt.buffer.b_size-opt.ptr<opt.offset)\n return (opt.offset = 0);\n var extra = opt.view.getUint8(opt.ptr+opt.offset-4);\n opt.ver = extra>>>24;\n opt.flags = extra&&0xFFFFFF;\n }\n opt.size -= opt.offset;\n opt.ptr += opt.offset;\n};\nBox_parser.prototype.parse = function(opt){\n if (!this[opt.type])\n throw new Error('Unknown box type: '+opt.type);\n this[opt.type](opt);\n};\nraw_copy.forEach(function(cont){\n Box_parser.prototype[cont] = function(opt){\n var data = opt.branch[cont] = new Uint8Array(opt.size);\n data.set(opt.buffer._buff.subarray(opt.ptr, opt.ptr+opt.size));\n };\n});\nObject.keys(containers).forEach(function(cont){\n Box_parser.prototype[cont] = function(opt){\n var elm = containers[cont];\n opt.branch[elm.name] = opt.branch[elm.name]||(elm.multi ? [] : {});\n var new_branch = opt.branch[elm.name];\n if (elm.multi)\n {\n new_branch.push({});\n new_branch = new_branch[new_branch.length-1];\n }\n new_branch.parent = opt.branch;\n new_branch.last = opt.buffer.b_pos+opt.ptr+opt.size;\n new_branch._id = elm.name;\n opt.branch = new_branch;\n opt.size = 0;\n };\n});\nBox_parser.prototype.moov = function(opt){\n var new_branch = opt.branch.movie_box = opt.branch.movie_box||{};\n new_branch.parent = opt.branch;\n new_branch.last = opt.buffer.b_pos+opt.ptr+opt.size;\n new_branch._id = 'movie_box';\n // only ftyp can exist prior to moov in a file beginning\n if (opt.buffer.b_pos<256)\n opt.branch.start_hdr_sz = opt.size;\n else\n opt.branch.end_hdr_sz = opt.size;\n opt.branch = new_branch;\n opt.size = 0;\n};\nfunction get_hd_times(opt){\n var view = opt.view, ptr = opt.ptr, is_tk = opt.type=='tkhd';\n if (!opt.ver)\n {\n return [view.getUint32(ptr), view.getUint32(ptr+4),\n view.getUint32(ptr+8), view.getUint32(ptr+(is_tk ? 16 : 12))];\n }\n return [getUint64(view, ptr), getUint64(view, ptr+8),\n view.getUint32(ptr+16), getUint64(view, ptr+(is_tk ? 24 : 20))];\n\n}\nfunction get_table(view, ptr, cnt, tbl){\n for (var i=0; i<cnt; i++)\n tbl[i] = view.getUint32(ptr+i*4);\n}\nBox_parser.prototype.ftyp = function(opt){\n opt.branch.major_brand = int_to_str(opt.view.getUint32(opt.ptr));\n opt.branch.minor_version = opt.view.getUint32(opt.ptr+4);\n opt.branch.compatible = [opt.branch.major_brand];\n for (var i=8; i<opt.size; i+=4)\n opt.branch.compatible.push(int_to_str(opt.view.getUint32(opt.ptr+i)));\n};\nBox_parser.prototype.mdat = function(){};\nBox_parser.prototype.free = function(){};\nBox_parser.prototype.wide = function(){};\nBox_parser.prototype.skip = function(){};\nBox_parser.prototype.mvhd = function(opt){\n var view = opt.view, ptr = opt.ptr;\n var offset = opt.ver ? 28 : 16;\n var hdr = opt.branch.mv_hdr = {};\n var times = get_hd_times(opt);\n hdr.creation_time = times[0];\n hdr.modification_time = times[1];\n hdr.time_scale = times[2];\n hdr.duration = times[3];\n ptr += offset;\n hdr.rate = view.getUint32(ptr)/65536.0;\n hdr.volume = view.getUint16(ptr+4)/256.0;\n get_table(opt.view, ptr+16, 9, hdr.matrix = []);\n hdr.next_track = view.getUint32(ptr+76);\n};\nBox_parser.prototype.tkhd = function(opt){\n var view = opt.view, ptr = opt.ptr;\n var offset = opt.ver ? 40 : 28;\n var hdr = opt.branch.tk_hdr = {};\n var times = get_hd_times(opt);\n hdr.enabled = !!(opt.flags&1);\n hdr.in_movie = !!(opt.flags&2);\n hdr.in_preview = !!(opt.flags&4);\n hdr.creation_time = times[0];\n hdr.modification_time = times[1];\n hdr.track_id = times[2];\n hdr.duration = times[3];\n ptr += offset;\n hdr.layer = view.getUint16(ptr);\n hdr.alternate_group = view.getUint16(ptr+2);\n hdr.volume = view.getInt16(ptr+4)/256.0;\n get_table(opt.view, ptr+8, 9, hdr.matrix = []);\n hdr.width = view.getUint32(ptr+44)/65536.0;\n hdr.height = view.getUint32(ptr+48)/65536.0;\n};\nBox_parser.prototype.mdhd = function(opt){\n var view = opt.view, ptr = opt.ptr;\n var offset = opt.ver ? 28 : 16;\n var hdr = opt.branch.md_hdr = {};\n var times = get_hd_times(opt);\n hdr.creation_time = times[0];\n hdr.modification_time = times[1];\n hdr.time_scale = times[2];\n hdr.duration = times[3];\n var lang = view.getUint16(ptr+offset);\n hdr.lang = String.fromCharCode(lang>>10|96, lang>>5&31|96, lang&31|96);\n};\nBox_parser.prototype.elst = function(opt){\n var view = opt.view, ptr = opt.ptr+4;\n var count = view.getUint32(opt.ptr);\n opt.branch.list = [];\n for (var i=0; i<count; ptr += 4, i++)\n {\n var elm = {};\n elm.segment_duration = opt.ver ?\n getUint64(view, ptr) : view.getUint32(ptr);\n elm.media_time = opt.ver ?\n getInt64(view, ptr+8) : view.getInt32(ptr+4);\n ptr += opt.ver ? 16 : 8;\n elm.media_rate = view.getInt16(ptr);\n opt.branch.list.push(elm);\n }\n};\nBox_parser.prototype.cslg = function(opt){\n var view = opt.view, ptr = opt.ptr;\n opt.branch.cslg = {\n ctts_shift: view.getInt32(ptr),\n min_ctts: view.getInt32(ptr+4),\n max_ctts: view.getInt32(ptr+8),\n min_cts: view.getInt32(ptr+12),\n max_cts: view.getInt32(ptr+16),\n };\n};\nBox_parser.prototype.hdlr = function(opt){\n opt.branch.handler = int_to_str(opt.view.getUint32(opt.ptr+4)); };\nBox_parser.prototype._parse_avcc = function(opt, elm){\n var view = opt.view, ptr = opt.ptr;\n var sps = elm.sps = [];\n var pps = elm.pps = [];\n elm.avc_p_i = view.getUint8(ptr+1);\n elm.prof_compat = view.getUint8(ptr+2);\n elm.avc_l_i = view.getUint8(ptr+3);\n elm.l_size_m_1 = view.getUint8(ptr+4)&3;\n elm.n_sps = view.getUint8(ptr+5)&31;\n var offset = 6;\n for (var i=0; i<elm.n_sps; i++)\n {\n sps[i] = {l: view.getUint16(ptr+offset)};\n offset += 2;\n sps[i].nal = new Uint8Array(opt.buffer._buff.subarray(ptr+offset,\n ptr+offset+sps[i].l));\n offset += sps[i].l;\n }\n elm.n_pps = view.getUint8(ptr+offset++);\n for (i=0; i<elm.n_pps; i++)\n {\n pps[i] = {l: view.getUint16(ptr+offset)};\n offset += 2;\n pps[i].nal = new Uint8Array(opt.buffer._buff.subarray(ptr+offset,\n ptr+offset+pps[i].l));\n offset += pps[i].l;\n }\n};\nBox_parser.prototype._parse_esds = function(opt, elm){\n var view = opt.view, ptr = opt.ptr;\n while (ptr<opt.ptr+opt.size)\n {\n var tag = view.getUint8(ptr++);\n var sz = 0, sb;\n do {\n sb = view.getUint8(ptr++);\n sz = (sz<<7)+(sb&0x7F);\n } while (sb&0x80);\n switch (tag)\n {\n case 3: // ES_DescrTag\n elm.es_id = view.getUint16(ptr);\n var flags = view.getUint8(ptr+2);\n ptr += 3+(flags>>6&2)+(flags>>4&2);\n break;\n case 4: // DecoderConfigDescrTag\n elm.obj_t = view.getUint8(ptr);\n elm.str_t = view.getUint8(ptr+1)&0x3F;\n ptr += 13;\n break;\n case 5: // DecoderSpecificInfoTag\n var ext_type, br = new Bit_reader(view, ptr, sz);\n elm.aot = br.read(5);\n if (elm.aot==31)\n elm.aot = 32+br.read(6);\n elm.freq = br.read(4);\n if (elm.freq==15)\n elm.freq = br.read(24);\n elm.channel = br.read(4);\n // Read ext configuration for explicitly signaled HE-AAC profiles\n // 5 = HEv1, 29 = HEv2\n if (elm.aot==5 || elm.aot==29)\n {\n ext_type = 5;\n if ((elm.ext_freq_index = br.read(4))==0xf)\n elm.ext_freq = br.read(24);\n // With HE extensions now known, determine underlying profile.\n elm.aot = br.read(5);\n if (elm.aot==31)\n elm.aot = 32+br.read(6);\n }\n if (ext_type!=5 && elm.aot!=36)\n {\n while (br.bits()>=16)\n {\n if (br.read(11, 1)==0x2b7) // sync_ext_type\n {\n br.read(11);\n if (br.read(5)==5) // type_ext\n {\n if (br.read(1)) // sbr\n {\n if (br.read(4)==0xf) // sr_ext\n br.read(24);\n if (br.bits()>=12 && br.read(11)==0x548 &&\n br.read(1)!=1)\n {\n elm.dsi = 5;\n }\n }\n }\n }\n else\n br.read(1);\n }\n }\n ptr += sz;\n break;\n default:\n ptr += sz;\n }\n }\n};\nBox_parser.prototype.stsd = function(opt){\n var view = opt.view, count = view.getUint32(opt.ptr);\n var handler = opt.branch.parent.parent.handler, i, j;\n opt.branch.list = {};\n opt.ptr += 4;\n for (i=0; i<count; i++)\n {\n this.header(opt);\n var elm = {};\n var index = view.getUint16(opt.ptr+6);\n var last_ptr = opt.ptr+opt.size;\n switch (handler)\n {\n case 'vide':\n elm.width = view.getUint16(opt.ptr+24);\n elm.height = view.getUint16(opt.ptr+26);\n elm.h_res = view.getUint32(opt.ptr+28)/65536.0;\n elm.v_res = view.getUint32(opt.ptr+32)/65536.0;\n elm.f_count = view.getUint16(opt.ptr+40);\n elm.compressor = '';\n for (j=0; j<32; j++)\n {\n var c = view.getUint8(opt.ptr+42+j);\n if (!c)\n break;\n elm.compressor += String.fromCharCode();\n }\n elm.depth = view.getUint16(opt.ptr+74);\n // 'colr', 'clap', 'pasp' & 'fiel'\n var skip_boxes = [0x636F6C72, 0x636C6170, 0x70617370, 0x6669656C];\n while (skip_boxes.includes(view.getUint32(opt.ptr+82)))\n opt.ptr += view.getUint32(opt.ptr+78);\n if (view.getUint32(opt.ptr+82)==0x61766343) // avcC\n {\n elm.avcc = {};\n opt.ptr += 78;\n this.header(opt);\n this._parse_avcc(opt, elm.avcc);\n }\n // XXX pavelki: optional boxes\n break;\n case 'soun':\n elm.c_count = view.getUint16(opt.ptr+16);\n elm.s_size = view.getUint16(opt.ptr+18);\n elm.s_rate = view.getUint32(opt.ptr+24)/65536.0;\n for (j=32; j<opt.size-12; j++)\n {\n if (view.getUint32(opt.ptr+j)==0x65736473) // esds\n {\n elm.esds = {};\n opt.ptr += j-4;\n this.header(opt);\n this._parse_esds(opt, elm.esds);\n break;\n }\n }\n break;\n default:\n }\n opt.ptr = last_ptr;\n opt.branch.list[index] = elm;\n }\n opt.size = 0;\n};\nBox_parser.prototype.stts = function(opt){\n var cnt = opt.view.getUint32(opt.ptr), ptr = opt.ptr+4;\n opt.branch.dtts = [];\n for (var i=0; i<cnt; i++)\n {\n var u_cnt = opt.view.getUint32(opt.ptr+4+i*8);\n var data = opt.view.getUint32(ptr+i*8+4);\n for (var j=0; j<u_cnt; j++)\n opt.branch.dtts.push(data);\n }\n};\nBox_parser.prototype.ctts = function(opt){\n var cnt = opt.view.getUint32(opt.ptr), ptr = opt.ptr+4;\n opt.branch.ctts = [];\n for (var i=0; i<cnt; i++)\n {\n var u_cnt = opt.view.getUint32(ptr+i*8);\n var data = opt.view.getInt32(ptr+i*8+4);\n for (var j=0; j<u_cnt; j++)\n opt.branch.ctts.push(data);\n }\n};\nBox_parser.prototype.stsc = function(opt){\n var count = opt.view.getUint32(opt.ptr);\n var table = opt.branch.s_t_c = [];\n var view = opt.view, ptr = opt.ptr+4;\n for (var i=0; i<count; i++)\n {\n table[i] = {\n f_c: view.getUint32(ptr+i*12),\n s_p_c: view.getUint32(ptr+i*12+4),\n s_d_i: view.getUint32(ptr+i*12+8),\n };\n }\n table.sort(function(c1, c2){ return c1.f_c-c2.f_c; });\n};\nBox_parser.prototype.stss = function(opt){\n get_table(opt.view, opt.ptr+4, opt.view.getUint32(opt.ptr),\n opt.branch.s_sync = []);\n};\nBox_parser.prototype.stps = function(opt){\n get_table(opt.view, opt.ptr+4, opt.view.getUint32(opt.ptr),\n opt.branch.s_psync = []);\n};\nBox_parser.prototype.sdtp = function(opt){\n opt.branch.s_dep = [];\n for (var i=0; i<opt.size; i++)\n {\n var bt = opt.view.getUint8(opt.ptr+i);\n opt.branch.s_dep[i] = {\n red: bt&3,\n is_dep: bt>>2&3,\n dep: bt>>4&3,\n lead: bt>>6&3,\n };\n }\n};\nBox_parser.prototype.stsz = function(opt){\n var size = opt.view.getUint32(opt.ptr);\n opt.branch.s_sz = [];\n opt.branch.s_count = opt.view.getUint32(opt.ptr+4);\n if (!size)\n get_table(opt.view, opt.ptr+8, opt.branch.s_count, opt.branch.s_sz);\n else\n {\n for (var i=0; i<opt.branch.s_count; i++)\n opt.branch.s_sz.push(size);\n }\n};\nBox_parser.prototype.stco = function(opt){\n get_table(opt.view, opt.ptr+4, opt.view.getUint32(opt.ptr),\n opt.branch.c_off = []);\n};\nBox_parser.prototype.co64 = function(opt){\n var cnt = opt.view.getUint32(opt.ptr);\n opt.branch.c_off = [];\n for (var i=0; i<cnt; i++)\n opt.branch.c_off[i] = getUint64(opt.view, opt.ptr+4+i*8);\n};\n\nvar Chunk_parser = function(opt){\n this.conf_update(opt);\n};\nChunk_parser.prototype = {};\nChunk_parser.prototype.conf_update = function(conf){\n this.break_on_count = conf.break_on_count;\n this.frag_size = conf.frag_size||10;\n};\nChunk_parser.prototype.process = function(opt){\n var event = {\n type: 'metadata',\n tracks: [],\n brands: ['iso5', 'iso6'],\n matrix: opt.root.movie_box.mv_hdr.matrix,\n start_hdr_sz: opt.root.start_hdr_sz,\n end_hdr_sz: opt.root.end_hdr_sz,\n };\n var _this = this;\n event.duration = Math.floor(opt.root.movie_box.mv_hdr.duration*90000/\n opt.root.movie_box.mv_hdr.time_scale);\n event.timescale = 90000;\n event.s_info = this.s_info = [];\n event.s_p = this.s_p = [];\n opt.root.movie_box.track_info.forEach(function(tr){\n if (!['vide', 'soun'].includes(tr.media_box.handler))\n return;\n var elm = {\n id: tr.tk_hdr.track_id,\n ts: tr.media_box.md_hdr.time_scale,\n type: tr.media_box.handler,\n s_off: [],\n s_time: [],\n s_dri: [],\n s_sync: tr.media_box.media_info.sample_table.s_sync||[],\n s_psync: tr.media_box.media_info.sample_table.s_psync||[],\n s_sz: tr.media_box.media_info.sample_table.s_sz,\n s_dep: tr.media_box.media_info.sample_table.s_dep||[],\n s_ctts: tr.media_box.media_info.sample_table.ctts||[],\n s_cslg: tr.media_box.media_info.sample_table.cslg||{},\n s_list: tr.media_box.media_info.sample_table.list,\n };\n if (tr.edit_list && tr.edit_list.list.length)\n elm.elst = tr.edit_list.list;\n var c_off = tr.media_box.media_info.sample_table.c_off;\n var s_t_c = tr.media_box.media_info.sample_table.s_t_c;\n var dtts = tr.media_box.media_info.sample_table.dtts;\n var c_n = 1;\n var sn = 0;\n var dt = 0;\n var is_sz_arr = Array.isArray(elm.s_sz);\n for (var i = 0; i<s_t_c.length; i++)\n {\n for (; c_n<(s_t_c[i+1] ? s_t_c[i+1].f_c : c_off.length+1); c_n++)\n {\n var off = c_off[c_n-1];\n for (var j=0; j<s_t_c[i].s_p_c; j++)\n {\n elm.s_off[sn] = off;\n elm.s_time[sn] = dt;\n elm.s_dri[sn] = s_t_c[i].s_d_i;\n dt += dtts[sn];\n off += is_sz_arr ? elm.s_sz[sn++] : elm.s_sz;\n }\n }\n }\n _this.s_info.push(elm);\n _this.s_p.push({s: 0, max_t: 0});\n if (elm.type=='vide')\n event.v_idx = _this.v_idx = _this.s_info.length-1;\n var dr = elm.s_list[1];\n var event_elm = {\n id: elm.id,\n type: sample_type[elm.type],\n edit_list: elm.elst,\n cslg: elm.s_cslg,\n dr: dr,\n timelineStartInfo: {baseMediaDecodeTime: 0},\n bitrate: Math.floor(elm.s_sz.reduce(function(a, b){ return a+b; })*\n 8*elm.ts/tr.media_box.md_hdr.duration),\n duration: elm.type=='soun' ?\n tr.media_box.md_hdr.duration :\n Math.floor(tr.media_box.md_hdr.duration*90000/elm.ts),\n samplerate: elm.type=='soun' ? elm.ts : 90000,\n matrix: tr.tk_hdr.matrix,\n track_width: tr.tk_hdr.width,\n track_height: tr.tk_hdr.height,\n nb_samples: elm.s_time.length,\n };\n if (elm.type=='soun')\n {\n var aot = dr.esds.dsi||dr.esds.aot;\n event_elm.codec = 'mp4a.'+byte_to_hex(dr.esds.obj_t.toString(16))+\n (aot ? '.'+aot : '');\n event_elm.s_i = new Uint8Array([dr.esds.aot<<3|dr.esds.freq>>>1,\n dr.esds.freq<<7|dr.esds.channel<<3]);\n }\n else\n {\n event_elm.codec = 'avc1.'+byte_to_hex(dr.avcc.avc_p_i)+\n byte_to_hex(dr.avcc.prof_compat)+byte_to_hex(dr.avcc.avc_l_i);\n var info = [1, dr.avcc.avc_p_i, dr.avcc.avc_prof_compat,\n dr.avcc.avc_l_i, 255, dr.avcc.sps.length+224];\n dr.avcc.sps.forEach(function(e){\n info = info.concat([e.nal.length>>8, e.nal.length&255]);\n Array.prototype.push.apply(info, e.nal);\n });\n info.push(dr.avcc.pps.length);\n dr.avcc.pps.forEach(function(e){\n info = info.concat([e.nal.length>>8, e.nal.length&255]);\n Array.prototype.push.apply(info, e.nal);\n });\n event_elm.s_i = new Uint8Array(info);\n }\n if (event_elm.edit_list)\n {\n event_elm.edit_list.forEach(function(e){\n if (elm.type!='soun')\n e.media_time = Math.floor(e.media_time*90000/elm.ts);\n e.segment_duration = Math.floor(e.segment_duration*90000/\n opt.root.movie_box.mv_hdr.time_scale);\n });\n }\n if (event_elm.cslg)\n {\n for (var k in event_elm.cslg)\n event_elm.cslg[k] = Math.floor(event_elm.cslg[k]*90000/elm.ts);\n }\n event.tracks.push(event_elm);\n });\n opt.stream.trigger('data', event);\n};\nChunk_parser.prototype.parse = function(opt){\n if (!this.s_info)\n this.process(opt);\n var b_start = opt.buffer.b_pos;\n var b_end = opt.buffer.b_size+b_start;\n var pc = -1, max_dcd = 0, i;\n var v_fin = false;\n while (pc)\n {\n pc = 0;\n for (i=0; i<this.s_p.length; i++)\n {\n var sinfo = this.s_info[i];\n var sn = this.s_p[i].s;\n var pos = sinfo.s_off[sn];\n var sz = sinfo.s_sz[sn];\n var time = sinfo.s_time;\n if (pos>=b_start && pos+sz<=b_end)\n {\n this.s_p[i].s++;\n pc++;\n var sample = {trackId: sinfo.id};\n sample.type = sample_type[sinfo.type];\n sample.dts = time[sn];\n sample.pts = sample.dts+(sinfo.s_ctts[sn]||0);\n sample.duration = sn==time.length-1 ?\n time[sn]-time[sn-1] : time[sn+1]-time[sn];\n sample.size = sz;\n this.s_p[i].max_t = sample.dts/sinfo.ts;\n sample.data = opt.buffer._buff.subarray(pos-b_start,\n pos+sz-b_start);\n sample.dr = sinfo.s_list[sinfo.s_dri[sn]];\n sample.ts = sinfo.ts;\n sample.synced = !sinfo.s_sync.length ||\n sinfo.s_sync.includes(sn+1);\n sample.sn = sn;\n sample.dep = sinfo.s_dep[sn];\n if (sinfo.type=='vide' && (this.break_on_count ?\n sn%this.frag_size===0 : sn&&sample.synced))\n {\n opt.stream.flush();\n }\n opt.stream.trigger('data', sample);\n max_dcd = pos+sz-b_start;\n }\n else if (pos+sz>b_end&&i==this.v_idx)\n v_fin = true;\n }\n }\n if (max_dcd)\n opt.buffer.advance(max_dcd);\n var new_pos = Infinity;\n for (i=0; i<this.s_p.length; i++)\n {\n if (this.s_p[i].s==this.s_info[i].s_off.length)\n {\n this.s_p[i].finish = true;\n continue;\n }\n new_pos = Math.min(new_pos, this.s_info[i].s_off[this.s_p[i].s]);\n }\n if (new_pos==Infinity)\n opt.stream.flush();\n if (new_pos==Infinity || new_pos>=b_start&&new_pos<b_end)\n new_pos = b_end;\n return new_pos;\n};\nChunk_parser.prototype.seek = function(time, use_ss){\n if (!this.s_info)\n throw new Error('No metadata information for seeking');\n var target = time*90000;\n var m_pos = Infinity;\n function get_frame(target, elm, use_ss){\n var l, r, sn, m, m_time, tt;\n var i_ss = use_ss&&elm.s_sync.length>0;\n var i_soun = elm.type=='soun';\n var scale = elm.ts/90000;\n l = 0;\n r = i_ss ? elm.s_sync.length : elm.s_time.length;\n tt = Math.floor(target*scale);\n while (l<r-1)\n {\n m = (l+r)>>1;\n sn = i_ss ? elm.s_sync[m]-1 : m;\n if ((m_time = elm.s_time[sn]+(elm.s_ctts[sn]|0))>tt)\n r = m;\n else\n {\n l = m;\n if (m_time==tt)\n break;\n }\n }\n var res_sn = i_ss ? elm.s_sync[l]-1 : l;\n tt = m_time = elm.s_time[res_sn]+(elm.s_ctts[res_sn]|0);\n if (!i_ss&&elm.s_ctts.length)\n {\n for (sn=l-1; sn>l-10; sn--)\n {\n if (elm.s_time[sn]+(elm.s_ctts[sn]|0)>tt)\n res_sn = sn;\n }\n for (sn=res_sn; sn<l+10; sn++)\n {\n m_time = elm.s_time[sn]+(elm.s_ctts[sn]|0);\n if (m_time > ((elm.s_cslg&&elm.s_cslg.min_ctts)|0) &&\n m_time<tt)\n {\n tt = m_time;\n }\n }\n }\n return {sn: res_sn, min_t: tt/elm.ts};\n }\n if (this.v_idx!==undefined)\n {\n var elm = this.s_info[this.v_idx];\n var v_fr = get_frame(target, elm, use_ss);\n var v_sn = v_fr.sn;\n this.s_p[this.v_idx].s = v_sn;\n this.s_p[this.v_idx].max_t =\n (elm.s_time[v_sn]+(elm.s_ctts[v_sn]|0))/elm.ts;\n // sync audio track(s) to video\n target = v_fr.min_t*90000;\n m_pos = elm.s_off[v_sn];\n }\n var _this = this;\n this.s_info.forEach(function(elm, idx){\n if (idx==_this.v_idx)\n return;\n var s_sn = get_frame(target, elm, use_ss).sn;\n _this.s_p[idx].s = s_sn;\n _this.s_p[idx].max_t = (elm.s_time[s_sn]+(elm.s_ctts[s_sn]|0))/elm.ts;\n m_pos = Math.min(elm.s_off[s_sn], m_pos);\n });\n return {\n offset: m_pos,\n time: this.s_p[this.v_idx!==undefined ? this.v_idx : 0].max_t,\n };\n};\n\nvar Buffer = function(){\n this._buff = new Uint8Array(3*1048576);\n this.b_pos = 0;\n this.b_size = 0;\n this.pos = 0;\n};\nBuffer.prototype = {};\nBuffer.prototype.advance = function(ptr){\n this._buff.set(this._buff.subarray(ptr, this.b_size));\n this.b_pos += ptr;\n this.b_size -= ptr;\n};\nBuffer.prototype.push = function(chunk){\n var _newbuff;\n var c_len = chunk.length;\n while (c_len+this.b_size>this._buff.length)\n {\n _newbuff = new Uint8Array(2*this._buff.length);\n _newbuff.set(this._buff);\n this._buff = _newbuff;\n }\n if (this.pos<this.b_pos+this.b_size && this.pos+c_len>=this.b_pos)\n {\n _newbuff = new Uint8Array(Math.max(this.pos+c_len,\n this.b_pos+this.b_size)-Math.min(this.pos, this.b_pos));\n if (this.pos<=this.b_pos)\n {\n _newbuff.set(chunk);\n if (this.pos+c_len<this.b_pos+this.b_size)\n {\n _newbuff.set(this._buff.subarray(this.pos+c_len-this.b_pos,\n this.b_size), c_len);\n }\n }\n else\n {\n _newbuff.set(this._buff.subarray(0, this.pos-this.b_pos));\n _newbuff.set(chunk, this.pos-this.b_pos);\n }\n this._buff.set(_newbuff);\n this.b_size = _newbuff.length;\n _newbuff = null;\n this.b_pos = Math.min(this.b_pos, this.pos);\n }\n else if (this.pos==this.b_pos+this.b_size)\n {\n this._buff.set(chunk, this.b_size);\n this.b_size += c_len;\n }\n else\n {\n this._buff.set(chunk);\n this.b_size = c_len;\n this.b_pos = this.pos;\n }\n this.view = new DataView(this._buff.buffer, this._buff.byteOffset,\n this.b_size);\n};\n\nvar MP4ParserStream = function(opt){\n if (!(this instanceof MP4ParserStream))\n return new MP4ParserStream(opt);\n MP4ParserStream.prototype.init.call(this);\n this.buffer = new Buffer();\n this.b_parser = new Box_parser();\n this.c_parser = new Chunk_parser(opt);\n this.on('confupdate', function(conf){\n this.c_parser.conf_update(conf);\n });\n this.metadata = {};\n this.buffer.pos = opt.pos||0;\n if (opt.metadata)\n {\n this.metadata.h_parsed = true;\n this.c_parser.s_info = opt.metadata.s_info.slice();\n this.c_parser.s_p = opt.metadata.s_p.slice();\n this.c_parser.v_idx = opt.metadata.v_idx;\n }\n};\nMP4ParserStream.prototype = new Stream();\nMP4ParserStream.prototype.constructor = MP4ParserStream;\nMP4ParserStream.prototype.get_tl = function(id){\n if (!this.metadata.h_parsed)\n throw new Error('No metadata information for time map');\n var t_i = this.c_parser.s_info.filter(function(e){ return e.id==id; });\n if (!t_i.length)\n throw new Error('No track information for time map');\n return {\n offset: t_i[0].s_off.slice(0),\n time: t_i[0].s_time.map(function(e){ return e/t_i[0].ts; }),\n };\n};\nMP4ParserStream.prototype.push = function(chunk){\n this.buffer.push(chunk);\n var opt = {\n root: this.metadata,\n branch: this.metadata,\n buffer: this.buffer,\n view: this.buffer.view,\n stream: this,\n ptr: 0,\n };\n while (!this.metadata.h_parsed)\n {\n this.b_parser.header(opt);\n if (!opt.type || opt.size+opt.ptr>this.buffer.b_size)\n break;\n this.b_parser.parse(opt);\n opt.ptr += opt.size;\n }\n if (this.metadata.h_parsed)\n this.buffer.pos = this.c_parser.parse(opt);\n else\n {\n this.buffer.advance(opt.ptr-opt.offset);\n this.buffer.pos = opt.type=='mdat' ?\n opt.ptr+opt.size : this.buffer.b_pos+this.buffer.b_size;\n }\n return this.buffer.pos;\n};\nMP4ParserStream.prototype.seek = function(time, use_ssync){\n this.trigger('data', {type: 'seek'});\n var seek_info = this.c_parser.seek(time, use_ssync);\n this.buffer.pos = seek_info.offset;\n return seek_info;\n};\n\nvar AudioFilterStream = function(){\n if (!(this instanceof AudioFilterStream))\n return new AudioFilterStream();\n AudioFilterStream.prototype.init.call(this);\n};\nAudioFilterStream.prototype = new Stream();\nAudioFilterStream.prototype.constructor = AudioFilterStream;\nAudioFilterStream.prototype.push = function(packet){\n if (packet.type!='audio')\n return;\n var scale = 90000/packet.ts;\n packet.pts = Math.floor(packet.pts*scale);\n packet.dts = Math.floor(packet.dts*scale);\n this.trigger('data', {\n type: 'audio',\n samplerate: packet.dr.s_rate,\n samplesize: packet.dr.s_size,\n audioobjecttype: packet.dr.esds.aot,\n samplingfrequencyindex: packet.dr.esds.freq,\n channelcount: packet.dr.esds.channel,\n ts: packet.ts,\n dts: packet.dts,\n pts: packet.pts,\n data: new Uint8Array(packet.data),\n });\n};\n\nvar VideoFilterStream = function(){\n if (!(this instanceof VideoFilterStream))\n return new VideoFilterStream();\n VideoFilterStream.prototype.init.call(this);\n this.synced = false;\n this.au = new Uint8Array([0x09, 0xF0]);\n};\nVideoFilterStream.prototype = new Stream();\nVideoFilterStream.prototype.constructor = VideoFilterStream;\nVideoFilterStream.prototype.flush = function(){\n this.dr = null;\n this.synced = false;\n this.trigger('done');\n};\nVideoFilterStream.prototype.push = function(packet){\n if (packet.type!='video')\n return;\n var pos = 0, i;\n var view = new DataView(packet.data.buffer, packet.data.byteOffset,\n packet.data.byteLength);\n var scale = 90000/packet.ts;\n packet.pts = Math.floor(packet.pts*scale);\n packet.dts = Math.floor(packet.dts*scale);\n this.trigger('data', {\n trackId: packet.trackId,\n pts: packet.pts,\n dts: packet.dts,\n data: this.au,\n nalUnitType: 'access_unit_delimiter_rbsp',\n });\n if (this.dr!=packet.dr||!this.synced)\n {\n this.dr = packet.dr;\n // pseudo-nals for config info\n if (this.dr.avcc.n_sps)\n {\n for (i=0; i<this.dr.avcc.n_sps; i++)\n {\n this.trigger('data', {\n trackId: packet.trackId,\n pts: packet.pts,\n dts: packet.dts,\n nalUnitType: 'seq_parameter_set_rbsp',\n data: this.dr.avcc.sps[i].nal,\n config: {\n profileIdc: this.dr.avcc.avc_p_i,\n levelIdc: this.dr.avcc.avc_l_i,\n profileCompatibility: this.dr.avcc.prof_compat,\n width: this.dr.width,\n height: this.dr.height,\n },\n });\n }\n }\n if (this.dr.avcc.n_pps)\n {\n for (i=0; i<this.dr.avcc.n_pps; i++)\n {\n this.trigger('data', {\n trackId: packet.trackId,\n pts: packet.pts,\n dts: packet.dts,\n nalUnitType: 'pic_parameter_set_rbsp',\n data: this.dr.avcc.pps[0].nal,\n });\n }\n }\n this.synced = true;\n }\n while (pos<packet.data.length)\n {\n var sz = view.getUint32(pos);\n var event = {\n trackId: packet.trackId,\n pts: packet.pts,\n dts: packet.dts,\n data: new Uint8Array(packet.data.subarray(pos+4, pos+sz+4)),\n };\n if ((event.data[0]&0x1f)==5)\n event.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr';\n event.synced = !pos && packet.synced;\n pos += sz+4;\n this.trigger('data', event);\n }\n};\n\nvar MP4BuilderStream = function(opt){\n if (!(this instanceof MP4BuilderStream))\n return new MP4BuilderStream(opt);\n MP4BuilderStream.prototype.init.call(this);\n this.options = opt||{};\n this.tracks = {};\n this.options.no_multi_init = true;\n this.options.major = new Uint8Array([105, 115, 111, 53]); // 'iso5'\n this.options.compatible = [new Uint8Array([105, 115, 111, 54])]; // 'iso6'\n this.options.set_duration = true;\n this.on('confupdate', function(conf){\n this.options.break_on_count = conf.break_on_count; });\n this.metadata = opt.metadata;\n this.inited = !!this.metadata;\n};\nMP4BuilderStream.prototype = new Stream();\nMP4BuilderStream.prototype.constructor = MP4BuilderStream;\nMP4BuilderStream.prototype.push = function(packet){\n var id;\n if (packet.type=='metadata')\n return void (this.metadata = packet);\n if (packet.type=='seek')\n {\n for (id in this.tracks)\n this.tracks[id].samples = [];\n return;\n }\n id = packet.trackId;\n this.tracks[id] = this.tracks[id]||{samples: [], seqno: 0, sc: 0,\n type: packet.type};\n var sample = {\n duration: packet.duration,\n size: packet.size,\n dts: packet.dts,\n pts: packet.pts,\n data: new Uint8Array(packet.data),\n sn: packet.sn,\n };\n if (packet.type=='video')\n {\n var scale = 90000/packet.ts;\n sample.duration = Math.floor(sample.duration*scale);\n sample.pts = Math.floor(sample.pts*scale);\n sample.dts = Math.floor(sample.dts*scale);\n sample.flags = {\n dependsOn: (sample.dep&&sample.dep.dep)|0,\n isDependedOn: (sample.dep&&sample.dep.is_dep)|0,\n hasRedundancy: ((sample.dep&&sample.dep.red)|0) || 2*packet.synced,\n isLeading: (sample.dep&&sample.dep.lead)|0,\n };\n if (!this.options.break_on_count)\n sample.flags.isNonSyncSample = +!packet.synced;\n sample.compositionTimeOffset = sample.pts-sample.dts;\n }\n packet.data = null;\n this.tracks[id].samples.push(sample);\n};\nMP4BuilderStream.prototype.flush = function(){\n var moof, mdat, seg_sz, _this = this;\n if (!this.inited)\n {\n // build and emit init segments\n this.inited = true;\n var inits = [];\n this.metadata.tracks.forEach(function(tr){\n switch (tr.type)\n {\n case 'video':\n tr.profileIdc = tr.dr.avcc.avc_p_i;\n tr.levelIdc = tr.dr.avcc.avc_l_i;\n tr.profileCompatibility = tr.dr.avcc.prof_compat;\n tr.width = tr.track_width;\n tr.height = tr.track_height;\n tr.sps = tr.dr.avcc.sps.map(function(e){ return e.nal; });\n tr.pps = tr.dr.avcc.pps.map(function(e){ return e.nal; });\n break;\n case 'audio':\n tr.samplesize = tr.dr.s_size;\n tr.audioobjecttype = tr.dr.esds.aot;\n tr.samplingfrequencyindex = tr.dr.esds.freq;\n tr.channelcount = tr.dr.esds.channel;\n }\n inits.push({\n id: tr.id,\n buffer: mp4.initSegment([tr], _this.options),\n });\n });\n this.trigger('data', {init: true, inits: inits});\n }\n for (var id in this.tracks)\n {\n var track = this.tracks[id];\n if (!track.samples.length)\n continue;\n var seg_slice = track.samples;\n seg_sz = seg_slice.reduce(function(a, b){\n return a+b.data.length; }, 0);\n moof = mp4.moof(++track.seqno, [{\n id: id,\n baseMediaDecodeTime: seg_slice[0].dts,\n samples: seg_slice,\n type: track.type,\n }], _this.options);\n var segment = new Uint8Array(8+seg_sz+moof.length);\n var sd = new Uint8Array(seg_sz);\n var offset = 0;\n for (var i=0; i<seg_slice.length; i++)\n {\n sd.set(seg_slice[i].data, offset);\n offset += seg_slice[i].data.length;\n }\n mdat = mp4.mdat(sd);\n segment.set(moof);\n segment.set(mdat, moof.length);\n segment.sn = seg_slice[seg_slice.length-1].sn;\n sd = mdat = moof = null;\n this.tracks[id].sc += seg_slice.length;\n this.trigger('data', {id: id, data: segment,\n sc: this.tracks[id].sc});\n this.tracks[id].samples = [];\n }\n this.trigger('done');\n};\n\nmodule.exports = {\n MP4ParserStream: MP4ParserStream,\n AudioFilterStream: AudioFilterStream,\n VideoFilterStream: VideoFilterStream,\n MP4BuilderStream: MP4BuilderStream,\n};\n","/**\n * mux.js\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n'use strict';\n\nvar Stream = require('../utils/stream.js');\nvar mp4 = require('./mp4-generator.js');\nvar mp4p = require('./mp4-parser.js');\nvar m2ts = require('../m2ts/m2ts.js');\nvar codecs = require('../codecs');\nvar AdtsStream = codecs.adts;\nvar H264Stream = codecs.h264.H264Stream;\nvar AacStream = require('../aac');\n\n// constants\nvar AUDIO_PROPERTIES = [\n 'audioobjecttype',\n 'channelcount',\n 'samplerate',\n 'samplingfrequencyindex',\n 'samplesize'\n];\n\nvar VIDEO_PROPERTIES = [\n 'width',\n 'height',\n 'profileIdc',\n 'levelIdc',\n 'profileCompatibility'\n];\n\nvar ONE_SECOND_IN_TS = 90000; // 90kHz clock\n\n// object types\nvar VideoSegmentStream, AudioSegmentStream, Transmuxer, CoalesceStream;\n\n// Helper functions\nvar\n createDefaultSample,\n isLikelyAacData,\n collectDtsInfo,\n clearDtsInfo,\n calculateTrackBaseMediaDecodeTime,\n arrayEquals,\n sumFrameByteLengths;\n\n/**\n * Default sample object\n * see ISO/IEC 14496-12:2012, section 8.6.4.3\n */\ncreateDefaultSample = function() {\n return {\n size: 0,\n flags: {\n isLeading: 0,\n dependsOn: 1,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradationPriority: 0\n }\n };\n};\n\nisLikelyAacData = function(data) {\n if ((data[0] === 'I'.charCodeAt(0)) &&\n (data[1] === 'D'.charCodeAt(0)) &&\n (data[2] === '3'.charCodeAt(0))) {\n return true;\n }\n return false;\n};\n\n/**\n * Compare two arrays (even typed) for same-ness\n */\narrayEquals = function(a, b) {\n var\n i;\n\n if (a.length !== b.length) {\n return false;\n }\n\n // compare the value of each element in the array\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Sum the `byteLength` properties of the data in each AAC frame\n */\nsumFrameByteLengths = function(array) {\n var\n i,\n currentObj,\n sum = 0;\n\n // sum the byteLength's all each nal unit in the frame\n for (i = 0; i < array.length; i++) {\n currentObj = array[i];\n sum += currentObj.data.byteLength;\n }\n\n return sum;\n};\n\n/**\n * Constructs a single-track, ISO BMFF media segment from AAC data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n */\nAudioSegmentStream = function(track) {\n var\n adtsFrames = [],\n sequenceNumber = 0,\n earliestAllowedDts = 0;\n\n AudioSegmentStream.prototype.init.call(this);\n\n this.push = function(data) {\n collectDtsInfo(track, data);\n\n if (track) {\n AUDIO_PROPERTIES.forEach(function(prop) {\n track[prop] = data[prop];\n });\n }\n\n // buffer audio data until end() is called\n adtsFrames.push(data);\n };\n\n this.setEarliestDts = function(earliestDts) {\n earliestAllowedDts = earliestDts - track.timelineStartInfo.baseMediaDecodeTime;\n };\n\n this.flush = function() {\n var\n frames,\n moof,\n mdat,\n boxes;\n\n // return early if no audio data has been observed\n if (adtsFrames.length === 0) {\n this.trigger('done', 'AudioSegmentStream');\n return;\n }\n\n frames = this.trimAdtsFramesByEarliestDts_(adtsFrames);\n\n // we have to build the index from byte locations to\n // samples (that is, adts frames) in the audio data\n track.samples = this.generateSampleTable_(frames);\n\n // concatenate the audio data to constuct the mdat\n mdat = mp4.mdat(this.concatenateFrameData_(frames));\n\n adtsFrames = [];\n\n calculateTrackBaseMediaDecodeTime(track);\n moof = mp4.moof(sequenceNumber, [track]);\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength);\n\n // bump the sequence number for next time\n sequenceNumber++;\n\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n\n clearDtsInfo(track);\n\n this.trigger('data', {track: track, boxes: boxes});\n this.trigger('done', 'AudioSegmentStream');\n };\n\n // If the audio segment extends before the earliest allowed dts\n // value, remove AAC frames until starts at or after the earliest\n // allowed DTS so that we don't end up with a negative baseMedia-\n // DecodeTime for the audio track\n this.trimAdtsFramesByEarliestDts_ = function(adtsFrames) {\n if (track.minSegmentDts >= earliestAllowedDts) {\n return adtsFrames;\n }\n\n // We will need to recalculate the earliest segment Dts\n track.minSegmentDts = Infinity;\n\n return adtsFrames.filter(function(currentFrame) {\n // If this is an allowed frame, keep it and record it's Dts\n if (currentFrame.dts >= earliestAllowedDts) {\n track.minSegmentDts = Math.min(track.minSegmentDts, currentFrame.dts);\n track.minSegmentPts = track.minSegmentDts;\n return true;\n }\n // Otherwise, discard it\n return false;\n });\n };\n\n // generate the track's raw mdat data from an array of frames\n this.generateSampleTable_ = function(frames) {\n var\n i,\n currentFrame,\n samples = [];\n\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n samples.push({\n size: currentFrame.data.byteLength,\n duration: 1024 // For AAC audio, all samples contain 1024 samples\n });\n }\n return samples;\n };\n\n // generate the track's sample table from an array of frames\n this.concatenateFrameData_ = function(frames) {\n var\n i,\n currentFrame,\n dataOffset = 0,\n data = new Uint8Array(sumFrameByteLengths(frames));\n\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n\n data.set(currentFrame.data, dataOffset);\n dataOffset += currentFrame.data.byteLength;\n }\n return data;\n };\n};\n\nAudioSegmentStream.prototype = new Stream();\n\n/**\n * Constructs a single-track, ISO BMFF media segment from H264 data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n */\nVideoSegmentStream = function(track) {\n var\n sequenceNumber = 0,\n nalUnits = [],\n config,\n pps;\n\n VideoSegmentStream.prototype.init.call(this);\n\n delete track.minPTS;\n\n this.gopCache_ = [];\n\n this.push = function(nalUnit) {\n collectDtsInfo(track, nalUnit);\n\n // record the track config\n if (nalUnit.nalUnitType === codecs.h264.unitTypes.seq_parameter_set_rbsp && !config) {\n config = nalUnit.config;\n track.sps = [nalUnit.data];\n VIDEO_PROPERTIES.forEach(function(prop) {\n track[prop] = config[prop];\n }, this);\n }\n\n if (nalUnit.nalUnitType === codecs.h264.unitTypes.pic_parameter_set_rbsp &&\n !pps) {\n pps = nalUnit.data;\n track.pps = [nalUnit.data];\n }\n\n // buffer video until flush() is called\n nalUnits.push(nalUnit);\n };\n\n this.flush = function() {\n var\n frames,\n gopForFusion,\n gops,\n moof,\n mdat,\n boxes;\n\n // Throw away nalUnits at the start of the byte stream until\n // we find the first AUD\n while (nalUnits.length && nalUnits[0].nalUnitType !== codecs.h264.unitTypes.access_unit_delimiter_rbsp) {\n nalUnits.shift();\n }\n\n // Return early if no video data has been observed\n if (nalUnits.length === 0) {\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n }\n\n // Organize the raw nal-units into arrays that represent\n // higher-level constructs such as frames and gops\n // (group-of-pictures)\n frames = this.groupNalsIntoFrames_(nalUnits);\n gops = this.groupFramesIntoGops_(frames);\n\n // If the first frame of this fragment is not a keyframe we have\n // a problem since MSE (on Chrome) requires a leading keyframe.\n //\n // We have two approaches to repairing this situation:\n // 1) GOP-FUSION:\n // This is where we keep track of the GOPS (group-of-pictures)\n // from previous fragments and attempt to find one that we can\n // prepend to the current fragment in order to create a valid\n // fragment.\n // 2) KEYFRAME-PULLING:\n // Here we search for the first keyframe in the fragment and\n // throw away all the frames between the start of the fragment\n // and that keyframe. We then extend the duration and pull the\n // PTS of the keyframe forward so that it covers the time range\n // of the frames that were disposed of.\n //\n // #1 is far prefereable over #2 which can cause \"stuttering\" but\n // requires more things to be just right.\n if (!gops[0][0].keyFrame) {\n // Search for a gop for fusion from our gopCache\n gopForFusion = this.getGopForFusion_(nalUnits[0], track);\n\n if (gopForFusion) {\n gops.unshift(gopForFusion);\n // Adjust Gops' metadata to account for the inclusion of the\n // new gop at the beginning\n gops.byteLength += gopForFusion.byteLength;\n gops.nalCount += gopForFusion.nalCount;\n gops.pts = gopForFusion.pts;\n gops.dts = gopForFusion.dts;\n gops.duration += gopForFusion.duration;\n } else {\n // If we didn't find a candidate gop fall back to keyrame-pulling\n gops = this.extendFirstKeyFrame_(gops);\n }\n }\n collectDtsInfo(track, gops);\n\n // First, we have to build the index from byte locations to\n // samples (that is, frames) in the video data\n track.samples = this.generateSampleTable_(gops);\n\n // Concatenate the video data and construct the mdat\n mdat = mp4.mdat(this.concatenateNalData_(gops));\n\n // save all the nals in the last GOP into the gop cache\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n });\n\n // Keep a maximum of 6 GOPs in the cache\n this.gopCache_.length = Math.min(6, this.gopCache_.length);\n\n // Clear nalUnits\n nalUnits = [];\n\n calculateTrackBaseMediaDecodeTime(track);\n\n this.trigger('timelineStartInfo', track.timelineStartInfo);\n\n moof = mp4.moof(sequenceNumber, [track]);\n\n // it would be great to allocate this array up front instead of\n // throwing away hundreds of media segment fragments\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength);\n\n // Bump the sequence number for next time\n sequenceNumber++;\n\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n\n this.trigger('data', {track: track, boxes: boxes});\n\n this.resetStream_();\n\n // Continue with the flush process now\n this.trigger('done', 'VideoSegmentStream');\n };\n\n this.resetStream_ = function() {\n clearDtsInfo(track);\n\n // reset config and pps because they may differ across segments\n // for instance, when we are rendition switching\n config = undefined;\n pps = undefined;\n };\n\n // Search for a candidate Gop for gop-fusion from the gop cache and\n // return it or return null if no good candidate was found\n this.getGopForFusion_ = function(nalUnit) {\n var\n halfSecond = 45000, // Half-a-second in a 90khz clock\n allowableOverlap = 10000, // About 3 frames @ 30fps\n nearestDistance = Infinity,\n dtsDistance,\n nearestGopObj,\n currentGop,\n currentGopObj,\n i;\n\n // Search for the GOP nearest to the beginning of this nal unit\n for (i = 0; i < this.gopCache_.length; i++) {\n currentGopObj = this.gopCache_[i];\n currentGop = currentGopObj.gop;\n\n // Reject Gops with different SPS or PPS\n if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) ||\n !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) {\n continue;\n }\n\n // Reject Gops that would require a negative baseMediaDecodeTime\n if (currentGop.dts < track.timelineStartInfo.dts) {\n continue;\n }\n\n // The distance between the end of the gop and the start of the nalUnit\n dtsDistance = (nalUnit.dts - currentGop.dts) - currentGop.duration;\n\n // Only consider GOPS that start before the nal unit and end within\n // a half-second of the nal unit\n if (dtsDistance >= -allowableOverlap &&\n dtsDistance <= halfSecond) {\n\n // Always use the closest GOP we found if there is more than\n // one candidate\n if (!nearestGopObj ||\n nearestDistance > dtsDistance) {\n nearestGopObj = currentGopObj;\n nearestDistance = dtsDistance;\n }\n }\n }\n\n if (nearestGopObj) {\n return nearestGopObj.gop;\n }\n return null;\n };\n\n this.extendFirstKeyFrame_ = function(gops) {\n var currentGop;\n\n if (!gops[0][0].keyFrame && gops.length > 1) {\n // Remove the first GOP\n currentGop = gops.shift();\n\n gops.byteLength -= currentGop.byteLength;\n gops.nalCount -= currentGop.nalCount;\n\n // Extend the first frame of what is now the\n // first gop to cover the time period of the\n // frames we just removed\n gops[0][0].dts = currentGop.dts;\n gops[0][0].pts = currentGop.pts;\n gops[0][0].duration += currentGop.duration;\n }\n\n return gops;\n };\n\n // Convert an array of nal units into an array of frames with each frame being\n // composed of the nal units that make up that frame\n // Also keep track of cummulative data about the frame from the nal units such\n // as the frame duration, starting pts, etc.\n this.groupNalsIntoFrames_ = function(nalUnits) {\n var\n i,\n currentNal,\n currentFrame = [],\n frames = [];\n\n currentFrame.byteLength = 0;\n\n for (i = 0; i < nalUnits.length; i++) {\n currentNal = nalUnits[i];\n\n // Split on 'aud'-type nal units\n if (currentNal.nalUnitType === codecs.h264.unitTypes.access_unit_delimiter_rbsp) {\n // Since the very first nal unit is expected to be an AUD\n // only push to the frames array when currentFrame is not empty\n if (currentFrame.length) {\n currentFrame.duration = currentNal.dts - currentFrame.dts;\n frames.push(currentFrame);\n }\n currentFrame = [currentNal];\n currentFrame.byteLength = currentNal.data.byteLength;\n currentFrame.pts = currentNal.pts;\n currentFrame.dts = currentNal.dts;\n } else {\n // Specifically flag key frames for ease of use later\n if (currentNal.nalUnitType === codecs.h264.unitTypes.slice_layer_without_partitioning_rbsp_idr) {\n currentFrame.keyFrame = true;\n }\n currentFrame.duration = currentNal.dts - currentFrame.dts;\n currentFrame.byteLength += currentNal.data.byteLength;\n currentFrame.push(currentNal);\n }\n }\n\n // For the last frame, use the duration of the previous frame if we\n // have nothing better to go on\n if (frames.length &&\n (!currentFrame.duration ||\n currentFrame.duration <= 0)) {\n currentFrame.duration = frames[frames.length - 1].duration;\n }\n\n // Push the final frame\n frames.push(currentFrame);\n return frames;\n };\n\n // Convert an array of frames into an array of Gop with each Gop being composed\n // of the frames that make up that Gop\n // Also keep track of cummulative data about the Gop from the frames such as the\n // Gop duration, starting pts, etc.\n this.groupFramesIntoGops_ = function(frames) {\n var\n i,\n currentFrame,\n currentGop = [],\n gops = [];\n\n // We must pre-set some of the values on the Gop since we\n // keep running totals of these values\n currentGop.byteLength = 0;\n currentGop.nalCount = 0;\n currentGop.duration = 0;\n currentGop.pts = frames[0].pts;\n currentGop.dts = frames[0].dts;\n\n // store some metadata about all the Gops\n gops.byteLength = 0;\n gops.nalCount = 0;\n gops.duration = 0;\n gops.pts = frames[0].pts;\n gops.dts = frames[0].dts;\n\n for (i = 0; i < frames.length; i++) {\n currentFrame = frames[i];\n\n if (currentFrame.keyFrame) {\n // Since the very first frame is expected to be an keyframe\n // only push to the gops array when currentGop is not empty\n if (currentGop.length) {\n gops.push(currentGop);\n gops.byteLength += currentGop.byteLength;\n gops.nalCount += currentGop.nalCount;\n gops.duration += currentGop.duration;\n }\n\n currentGop = [currentFrame];\n currentGop.nalCount = currentFrame.length;\n currentGop.byteLength = currentFrame.byteLength;\n currentGop.pts = currentFrame.pts;\n currentGop.dts = currentFrame.dts;\n currentGop.duration = currentFrame.duration;\n } else {\n currentGop.duration += currentFrame.duration;\n currentGop.nalCount += currentFrame.length;\n currentGop.byteLength += currentFrame.byteLength;\n currentGop.push(currentFrame);\n }\n }\n\n if (gops.length && currentGop.duration <= 0) {\n currentGop.duration = gops[gops.length - 1].duration;\n }\n gops.byteLength += currentGop.byteLength;\n gops.nalCount += currentGop.nalCount;\n gops.duration += currentGop.duration;\n\n // push the final Gop\n gops.push(currentGop);\n return gops;\n };\n\n // generate the track's sample table from an array of gops\n this.generateSampleTable_ = function(gops, baseDataOffset) {\n var\n h, i,\n sample,\n currentGop,\n currentFrame,\n dataOffset = baseDataOffset || 0,\n samples = [];\n\n for (h = 0; h < gops.length; h++) {\n currentGop = gops[h];\n\n for (i = 0; i < currentGop.length; i++) {\n currentFrame = currentGop[i];\n\n sample = createDefaultSample();\n\n sample.dataOffset = dataOffset;\n sample.compositionTimeOffset = currentFrame.pts - currentFrame.dts;\n sample.duration = currentFrame.duration;\n sample.size = 4 * currentFrame.length; // Space for nal unit size\n sample.size += currentFrame.byteLength;\n\n if (currentFrame.keyFrame) {\n sample.flags.dependsOn = 2;\n }\n\n dataOffset += sample.size;\n\n samples.push(sample);\n }\n }\n return samples;\n };\n\n // generate the track's raw mdat data from an array of gops\n this.concatenateNalData_ = function(gops) {\n var\n h, i, j,\n currentGop,\n currentFrame,\n currentNal,\n dataOffset = 0,\n nalsByteLength = gops.byteLength,\n numberOfNals = gops.nalCount,\n totalByteLength = nalsByteLength + 4 * numberOfNals,\n data = new Uint8Array(totalByteLength),\n view = new DataView(data.buffer);\n\n // For each Gop..\n for (h = 0; h < gops.length; h++) {\n currentGop = gops[h];\n\n // For each Frame..\n for (i = 0; i < currentGop.length; i++) {\n currentFrame = currentGop[i];\n\n // For each NAL..\n for (j = 0; j < currentFrame.length; j++) {\n currentNal = currentFrame[j];\n\n view.setUint32(dataOffset, currentNal.data.byteLength);\n dataOffset += 4;\n data.set(currentNal.data, dataOffset);\n dataOffset += currentNal.data.byteLength;\n }\n }\n }\n return data;\n };\n};\n\nVideoSegmentStream.prototype = new Stream();\n\n/**\n * Store information about the start and end of the track and the\n * duration for each frame/sample we process in order to calculate\n * the baseMediaDecodeTime\n */\ncollectDtsInfo = function(track, data) {\n if (typeof data.pts === 'number') {\n if (track.timelineStartInfo.pts === undefined) {\n track.timelineStartInfo.pts = data.pts;\n }\n\n if (track.minSegmentPts === undefined) {\n track.minSegmentPts = data.pts;\n } else {\n track.minSegmentPts = Math.min(track.minSegmentPts, data.pts);\n }\n\n if (track.maxSegmentPts === undefined) {\n track.maxSegmentPts = data.pts;\n } else {\n track.maxSegmentPts = Math.max(track.maxSegmentPts, data.pts);\n }\n }\n\n if (typeof data.dts === 'number') {\n if (track.timelineStartInfo.dts === undefined) {\n track.timelineStartInfo.dts = data.dts;\n }\n\n if (track.minSegmentDts === undefined) {\n track.minSegmentDts = data.dts;\n } else {\n track.minSegmentDts = Math.min(track.minSegmentDts, data.dts);\n }\n\n if (track.maxSegmentDts === undefined) {\n track.maxSegmentDts = data.dts;\n } else {\n track.maxSegmentDts = Math.max(track.maxSegmentDts, data.dts);\n }\n }\n};\n\n/**\n * Clear values used to calculate the baseMediaDecodeTime between\n * tracks\n */\nclearDtsInfo = function(track) {\n delete track.minSegmentDts;\n delete track.maxSegmentDts;\n delete track.minSegmentPts;\n delete track.maxSegmentPts;\n};\n\n/**\n * Calculate the track's baseMediaDecodeTime based on the earliest\n * DTS the transmuxer has ever seen and the minimum DTS for the\n * current track\n */\ncalculateTrackBaseMediaDecodeTime = function(track) {\n var\n oneSecondInPTS = 90000, // 90kHz clock\n scale,\n // Calculate the distance, in time, that this segment starts from the start\n // of the timeline (earliest time seen since the transmuxer initialized)\n timeSinceStartOfTimeline = track.minSegmentDts - track.timelineStartInfo.dts,\n // Calculate the first sample's effective compositionTimeOffset\n firstSampleCompositionOffset = track.minSegmentPts - track.minSegmentDts;\n\n // track.timelineStartInfo.baseMediaDecodeTime is the location, in time, where\n // we want the start of the first segment to be placed\n track.baseMediaDecodeTime = track.timelineStartInfo.baseMediaDecodeTime;\n\n // Add to that the distance this segment is from the very first\n track.baseMediaDecodeTime += timeSinceStartOfTimeline;\n\n // Subtract this segment's \"compositionTimeOffset\" so that the first frame of\n // this segment is displayed exactly at the `baseMediaDecodeTime` or at the\n // end of the previous segment\n track.baseMediaDecodeTime -= firstSampleCompositionOffset;\n\n // baseMediaDecodeTime must not become negative\n track.baseMediaDecodeTime = Math.max(0, track.baseMediaDecodeTime);\n\n if (track.type === 'audio') {\n // Audio has a different clock equal to the sampling_rate so we need to\n // scale the PTS values into the clock rate of the track\n scale = track.samplerate / oneSecondInPTS;\n track.baseMediaDecodeTime *= scale;\n track.baseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime);\n }\n\n return track.baseMediaDecodeTime;\n};\n\n/**\n * A Stream that can combine multiple streams (ie. audio & video)\n * into a single output segment for MSE. Also supports audio-only\n * and video-only streams.\n */\nCoalesceStream = function(options, metadataStream) {\n // Number of Tracks per output segment\n // If greater than 1, we combine multiple\n // tracks into a single segment\n this.numberOfTracks = 0;\n this.metadataStream = metadataStream;\n\n if (typeof options.remux !== 'undefined') {\n this.remuxTracks = !!options.remux;\n } else {\n this.remuxTracks = true;\n }\n\n this.pendingTracks = [];\n this.videoTrack = null;\n this.pendingBoxes = [];\n this.pendingCaptions = [];\n this.pendingMetadata = [];\n this.pendingBytes = 0;\n this.emittedTracks = 0;\n\n CoalesceStream.prototype.init.call(this);\n\n // Take output from multiple\n this.push = function(output) {\n // buffer incoming captions until the associated video segment\n // finishes\n if (output.text) {\n return this.pendingCaptions.push(output);\n }\n // buffer incoming id3 tags until the final flush\n if (output.frames) {\n return this.pendingMetadata.push(output);\n }\n\n // Add this track to the list of pending tracks and store\n // important information required for the construction of\n // the final segment\n this.pendingTracks.push(output.track);\n this.pendingBoxes.push(output.boxes);\n this.pendingBytes += output.boxes.byteLength;\n\n if (output.track.type === 'video') {\n this.videoTrack = output.track;\n }\n if (output.track.type === 'audio') {\n this.audioTrack = output.track;\n }\n };\n};\n\nCoalesceStream.prototype = new Stream();\nCoalesceStream.prototype.flush = function(flushSource) {\n var\n offset = 0,\n event = {\n captions: [],\n metadata: [],\n info: {}\n },\n caption,\n id3,\n initSegment,\n timelineStartPts = 0,\n i;\n\n if (this.pendingTracks.length < this.numberOfTracks) {\n if (flushSource !== 'VideoSegmentStream' &&\n flushSource !== 'AudioSegmentStream') {\n // Return because we haven't received a flush from a data-generating\n // portion of the segment (meaning that we have only recieved meta-data\n // or captions.)\n return;\n } else if (this.remuxTracks) {\n // Return until we have enough tracks from the pipeline to remux (if we\n // are remuxing audio and video into a single MP4)\n return;\n } else if (this.pendingTracks.length === 0) {\n // In the case where we receive a flush without any data having been\n // received we consider it an emitted track for the purposes of coalescing\n // `done` events.\n // We do this for the case where there is an audio and video track in the\n // segment but no audio data. (seen in several playlists with alternate\n // audio tracks and no audio present in the main TS segments.)\n this.emittedTracks++;\n\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n return;\n }\n }\n\n if (this.videoTrack) {\n timelineStartPts = this.videoTrack.timelineStartInfo.pts;\n VIDEO_PROPERTIES.forEach(function(prop) {\n event.info[prop] = this.videoTrack[prop];\n }, this);\n } else if (this.audioTrack) {\n timelineStartPts = this.audioTrack.timelineStartInfo.pts;\n AUDIO_PROPERTIES.forEach(function(prop) {\n event.info[prop] = this.audioTrack[prop];\n }, this);\n }\n\n if (this.pendingTracks.length === 1) {\n event.type = this.pendingTracks[0].type;\n } else {\n event.type = 'combined';\n }\n\n this.emittedTracks += this.pendingTracks.length;\n\n initSegment = mp4.initSegment(this.pendingTracks, this.options);\n this.pendingBytes += initSegment.byteLength;\n this.pendingBoxes.unshift(initSegment);\n\n // Create a new typed array large enough to hold the init\n // segment and all tracks\n event.data = new Uint8Array(this.pendingBytes);\n\n // Append each moof+mdat (one per track) after the init segment\n for (i = 0; i < this.pendingBoxes.length; i++) {\n event.data.set(this.pendingBoxes[i], offset);\n offset += this.pendingBoxes[i].byteLength;\n }\n\n // Translate caption PTS times into second offsets into the\n // video timeline for the segment\n for (i = 0; i < this.pendingCaptions.length; i++) {\n caption = this.pendingCaptions[i];\n caption.startTime = (caption.startPts - timelineStartPts);\n caption.startTime /= 90e3;\n caption.endTime = (caption.endPts - timelineStartPts);\n caption.endTime /= 90e3;\n event.captions.push(caption);\n }\n\n // Translate ID3 frame PTS times into second offsets into the\n // video timeline for the segment\n for (i = 0; i < this.pendingMetadata.length; i++) {\n id3 = this.pendingMetadata[i];\n id3.cueTime = (id3.pts - timelineStartPts);\n id3.cueTime /= 90e3;\n event.metadata.push(id3);\n }\n // We add this to every single emitted segment even though we only need\n // it for the first\n event.metadata.dispatchType = this.metadataStream.dispatchType;\n\n // Reset stream state\n this.pendingTracks.length = 0;\n this.videoTrack = null;\n this.pendingBoxes.length = 0;\n this.pendingCaptions.length = 0;\n this.pendingBytes = 0;\n this.pendingMetadata.length = 0;\n\n // Emit the built segment\n this.trigger('data', event);\n\n // Only emit `done` if all tracks have been flushed and emitted\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n};\n/**\n * A Stream that expects MP2T binary data as input and produces\n * corresponding media segments, suitable for use with Media Source\n * Extension (MSE) implementations that support the ISO BMFF byte\n * stream format, like Chrome.\n */\nTransmuxer = function(options) {\n var\n self = this,\n hasFlushed = true,\n videoTrack,\n audioTrack;\n\n Transmuxer.prototype.init.call(this);\n\n options = options || {};\n options.input_type = options.input_type||'ts';\n if (options.break_on_count===undefined) {\n options.break_on_count = true;\n }\n this.baseMediaDecodeTime = options.baseMediaDecodeTime || 0;\n this.transmuxPipeline_ = {};\n\n this.setupAacPipeline = function() {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n\n pipeline.type = 'aac';\n pipeline.metadataStream = new m2ts.MetadataStream();\n\n // set up the parsing pipeline\n pipeline.aacStream = new AacStream();\n pipeline.audioTimestampRolloverStream = new m2ts.TimestampRolloverStream('audio');\n pipeline.timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream('timed-metadata');\n pipeline.adtsStream = new AdtsStream();\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.aacStream;\n\n pipeline.aacStream\n .pipe(pipeline.audioTimestampRolloverStream)\n .pipe(pipeline.adtsStream);\n pipeline.aacStream\n .pipe(pipeline.timedMetadataTimestampRolloverStream)\n .pipe(pipeline.metadataStream)\n .pipe(pipeline.coalesceStream);\n\n pipeline.metadataStream.on('timestamp', function(frame) {\n pipeline.aacStream.setTimestamp(frame.timeStamp);\n });\n\n pipeline.aacStream.on('data', function(data) {\n if (data.type === 'timed-metadata' && !pipeline.audioSegmentStream) {\n audioTrack = audioTrack || {\n timelineStartInfo: {\n baseMediaDecodeTime: self.baseMediaDecodeTime\n },\n codec: 'adts',\n type: 'audio'\n };\n // hook up the audio segment stream to the first track with aac data\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack);\n // Set up the final part of the audio pipeline\n pipeline.adtsStream\n .pipe(pipeline.audioSegmentStream)\n .pipe(pipeline.coalesceStream);\n }\n });\n\n // Re-emit any data coming from the coalesce stream to the outside world\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data'));\n // Let the consumer know we have finished flushing the entire pipeline\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n };\n\n this.setupTsPipeline = function() {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n\n pipeline.type = options.input_type;\n if (pipeline.type=='ts')\n {\n options.metadataStream = pipeline.metadataStream =\n new m2ts.MetadataStream();\n // set up the parsing pipeline\n pipeline.packetStream = new m2ts.TransportPacketStream();\n pipeline.parseStream = new m2ts.TransportParseStream();\n pipeline.elementaryStream = new m2ts.ElementaryStream();\n pipeline.videoTimestampRolloverStream = new m2ts.TimestampRolloverStream('video');\n pipeline.audioTimestampRolloverStream = new m2ts.TimestampRolloverStream('audio');\n pipeline.timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream('timed-metadata');\n pipeline.adtsStream = new AdtsStream();\n pipeline.h264Stream = new H264Stream();\n pipeline.captionStream = new m2ts.CaptionStream();\n pipeline.coalesceStream = new CoalesceStream(options,\n pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.packetStream;\n // disassemble MPEG2-TS packets into elementary streams\n pipeline.packetStream.pipe(pipeline.parseStream)\n .pipe(pipeline.elementaryStream);\n // !!THIS ORDER IS IMPORTANT!!\n // demux the streams\n pipeline.elementaryStream\n .pipe(pipeline.videoTimestampRolloverStream)\n .pipe(pipeline.h264Stream);\n pipeline.elementaryStream\n .pipe(pipeline.audioTimestampRolloverStream)\n .pipe(pipeline.adtsStream);\n\n pipeline.elementaryStream\n .pipe(pipeline.timedMetadataTimestampRolloverStream)\n .pipe(pipeline.metadataStream)\n .pipe(pipeline.coalesceStream);\n // Hook up CEA-608/708 caption stream\n pipeline.h264Stream.pipe(pipeline.captionStream)\n .pipe(pipeline.coalesceStream);\n }\n else\n {\n pipeline.headOfPipeline = pipeline.elementaryStream =\n new mp4p.MP4ParserStream(options);\n pipeline.mp4BuilderStream = new mp4p.MP4BuilderStream(options);\n pipeline.elementaryStream.pipe(pipeline.mp4BuilderStream);\n this.seek = function(pos, ss){\n return pipeline.elementaryStream.seek(pos, ss); };\n this.get_tl = function(id){\n return pipeline.elementaryStream.get_tl(id); };\n this.conf_update = function(conf){\n pipeline.elementaryStream.trigger('confupdate', conf);\n pipeline.mp4BuilderStream.trigger('confupdate', conf);\n };\n }\n\n pipeline.elementaryStream.on('data', function(data) {\n var i;\n\n if (data.type === 'metadata') {\n if (options.input_type === 'mp4') {\n return void self.trigger('metadata', data);\n }\n i = data.tracks.length;\n\n // scan the tracks listed in the metadata\n while (i--) {\n if (!videoTrack && data.tracks[i].type === 'video') {\n videoTrack = data.tracks[i];\n videoTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n } else if (!audioTrack && data.tracks[i].type === 'audio') {\n audioTrack = data.tracks[i];\n audioTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n }\n }\n\n // hook up the video segment stream to the first track with h264 data\n if (videoTrack && !pipeline.videoSegmentStream) {\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.videoSegmentStream = new VideoSegmentStream(videoTrack);\n\n pipeline.videoSegmentStream.on('timelineStartInfo', function(timelineStartInfo) {\n // When video emits timelineStartInfo data after a flush, we forward that\n // info to the AudioSegmentStream, if it exists, because video timeline\n // data takes precedence.\n if (audioTrack) {\n audioTrack.timelineStartInfo = timelineStartInfo;\n // On the first segment we trim AAC frames that exist before the\n // very earliest DTS we have seen in video because Chrome will\n // interpret any video track with a baseMediaDecodeTime that is\n // non-zero as a gap.\n pipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts);\n }\n });\n\n // Set up the final part of the video pipeline\n pipeline.h264Stream\n .pipe(pipeline.videoSegmentStream)\n .pipe(pipeline.coalesceStream);\n }\n\n if (audioTrack && !pipeline.audioSegmentStream) {\n // hook up the audio segment stream to the first track with aac data\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack);\n\n // Set up the final part of the audio pipeline\n pipeline.adtsStream\n .pipe(pipeline.audioSegmentStream)\n .pipe(pipeline.coalesceStream);\n }\n }\n });\n if (options.input_type==='mp4')\n {\n pipeline.mp4BuilderStream.on('data', this.trigger.bind(this, 'data'));\n pipeline.mp4BuilderStream.on('done', this.trigger.bind(this, 'done'));\n }\n else\n {\n // Re-emit any data coming from the coalesce stream to the outside world\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data'));\n // Let the consumer know we have finished flushing the entire pipeline\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n }\n };\n\n // hook up the segment streams once track metadata is delivered\n this.setBaseMediaDecodeTime = function (baseMediaDecodeTime) {\n var pipeline = this.transmuxPipeline_;\n\n this.baseMediaDecodeTime = baseMediaDecodeTime;\n if (audioTrack) {\n audioTrack.timelineStartInfo.dts = undefined;\n audioTrack.timelineStartInfo.pts = undefined;\n clearDtsInfo(audioTrack);\n audioTrack.timelineStartInfo.baseMediaDecodeTime = baseMediaDecodeTime;\n }\n // XXX pavelki: to check how to act if mp4\n if (videoTrack) {\n if (pipeline.videoSegmentStream) {\n pipeline.videoSegmentStream.gopCache_ = [];\n }\n videoTrack.timelineStartInfo.dts = undefined;\n videoTrack.timelineStartInfo.pts = undefined;\n clearDtsInfo(videoTrack);\n videoTrack.timelineStartInfo.baseMediaDecodeTime = baseMediaDecodeTime;\n }\n };\n\n // feed incoming data to the front of the parsing pipeline\n this.push = function(data) {\n if (hasFlushed) {\n var isAac = isLikelyAacData(data) && options.input_type!='mp4';\n\n if (isAac && this.transmuxPipeline_.type !== 'aac') {\n this.setupAacPipeline();\n }\n else if (!isAac && this.transmuxPipeline_.type !== options.input_type)\n {\n this.setupTsPipeline();\n }\n hasFlushed = false;\n }\n return this.transmuxPipeline_.headOfPipeline.push(data);\n };\n\n this.appendBuffer = function(data) {\n return this.push(new Uint8Array(data));\n };\n\n // flush any buffered data\n this.flush = function() {\n hasFlushed = true;\n // Start at the top of the pipeline and flush all pending work\n this.transmuxPipeline_.headOfPipeline.flush();\n };\n};\nTransmuxer.prototype = new Stream();\n\nmodule.exports = {\n Transmuxer: Transmuxer,\n VideoSegmentStream: VideoSegmentStream,\n AudioSegmentStream: AudioSegmentStream,\n AUDIO_PROPERTIES: AUDIO_PROPERTIES,\n VIDEO_PROPERTIES: VIDEO_PROPERTIES\n};\n","'use strict';\n\nvar\n tagTypes = {\n 0x08: 'audio',\n 0x09: 'video',\n 0x12: 'metadata'\n },\n hex = function (val) {\n return '0x' + ('00' + val.toString(16)).slice(-2).toUpperCase();\n },\n hexStringList = function (data) {\n var arr = [], i;\n /* jshint -W086 */\n while(data.byteLength > 0) {\n i = 0;\n switch(data.byteLength) {\n default:\n arr.push(hex(data[i++]));\n case 7:\n arr.push(hex(data[i++]));\n case 6:\n arr.push(hex(data[i++]));\n case 5:\n arr.push(hex(data[i++]));\n case 4:\n arr.push(hex(data[i++]));\n case 3:\n arr.push(hex(data[i++]));\n case 2:\n arr.push(hex(data[i++]));\n case 1:\n arr.push(hex(data[i++]));\n }\n data = data.subarray(i);\n }\n /* jshint +W086 */\n return arr.join(' ');\n },\n parseAVCTag = function (tag, obj) {\n var\n avcPacketTypes = [\n 'AVC Sequence Header',\n 'AVC NALU',\n 'AVC End-of-Sequence'\n ],\n nalUnitTypes = [\n 'unspecified',\n 'slice_layer_without_partitioning',\n 'slice_data_partition_a_layer',\n 'slice_data_partition_b_layer',\n 'slice_data_partition_c_layer',\n 'slice_layer_without_partitioning_idr',\n 'sei',\n 'seq_parameter_set',\n 'pic_parameter_set',\n 'access_unit_delimiter',\n 'end_of_seq',\n 'end_of_stream',\n 'filler',\n 'seq_parameter_set_ext',\n 'prefix_nal_unit',\n 'subset_seq_parameter_set',\n 'reserved',\n 'reserved',\n 'reserved'\n ],\n compositionTime = (tag[1] & parseInt('01111111', 2) << 16) | (tag[2] << 8) | tag[3];\n\n obj = obj || {};\n\n obj.avcPacketType = avcPacketTypes[tag[0]];\n obj.CompositionTime = (tag[1] & parseInt('10000000', 2)) ? -compositionTime : compositionTime;\n\n if (tag[0] === 1) {\n obj.nalUnitTypeRaw = hexStringList(tag.subarray(4, 100));\n } else {\n obj.data = hexStringList(tag.subarray(4));\n }\n\n return obj;\n },\n parseVideoTag = function (tag, obj) {\n var\n frameTypes = [\n 'Unknown',\n 'Keyframe (for AVC, a seekable frame)',\n 'Inter frame (for AVC, a nonseekable frame)',\n 'Disposable inter frame (H.263 only)',\n 'Generated keyframe (reserved for server use only)',\n 'Video info/command frame'\n ],\n codecIDs = [\n 'JPEG (currently unused)',\n 'Sorenson H.263',\n 'Screen video',\n 'On2 VP6',\n 'On2 VP6 with alpha channel',\n 'Screen video version 2',\n 'AVC'\n ],\n codecID = tag[0] & parseInt('00001111', 2);\n\n obj = obj || {};\n\n obj.frameType = frameTypes[(tag[0] & parseInt('11110000', 2)) >>> 4];\n obj.codecID = codecID;\n\n if (codecID === 7) {\n return parseAVCTag(tag.subarray(1), obj);\n }\n return obj;\n },\n parseAACTag = function (tag, obj) {\n var packetTypes = [\n 'AAC Sequence Header',\n 'AAC Raw'\n ];\n\n obj = obj || {};\n\n obj.aacPacketType = packetTypes[tag[0]];\n obj.data = hexStringList(tag.subarray(1));\n\n return obj;\n },\n parseAudioTag = function (tag, obj) {\n var\n formatTable = [\n 'Linear PCM, platform endian',\n 'ADPCM',\n 'MP3',\n 'Linear PCM, little endian',\n 'Nellymoser 16-kHz mono',\n 'Nellymoser 8-kHz mono',\n 'Nellymoser',\n 'G.711 A-law logarithmic PCM',\n 'G.711 mu-law logarithmic PCM',\n 'reserved',\n 'AAC',\n 'Speex',\n 'MP3 8-Khz',\n 'Device-specific sound'\n ],\n samplingRateTable = [\n '5.5-kHz',\n '11-kHz',\n '22-kHz',\n '44-kHz'\n ],\n soundFormat = (tag[0] & parseInt('11110000', 2)) >>> 4;\n\n obj = obj || {};\n\n obj.soundFormat = formatTable[soundFormat];\n obj.soundRate = samplingRateTable[(tag[0] & parseInt('00001100', 2)) >>> 2];\n obj.soundSize = ((tag[0] & parseInt('00000010', 2)) >>> 1) ? '16-bit' : '8-bit';\n obj.soundType = (tag[0] & parseInt('00000001', 2)) ? 'Stereo' : 'Mono';\n\n if (soundFormat === 10) {\n return parseAACTag(tag.subarray(1), obj);\n }\n return obj;\n },\n parseGenericTag = function (tag) {\n return {\n tagType: tagTypes[tag[0]],\n dataSize: (tag[1] << 16) | (tag[2] << 8) | tag[3],\n timestamp: (tag[7] << 24) | (tag[4] << 16) | (tag[5] << 8) | tag[6],\n streamID: (tag[8] << 16) | (tag[9] << 8) | tag[10]\n };\n },\n inspectFlvTag = function (tag) {\n var header = parseGenericTag(tag);\n switch (tag[0]) {\n case 0x08:\n parseAudioTag(tag.subarray(11), header);\n break;\n case 0x09:\n parseVideoTag(tag.subarray(11), header);\n break;\n case 0x12:\n }\n return header;\n },\n inspectFlv = function (bytes) {\n var i = 9, // header\n dataSize,\n parsedResults = [],\n tag;\n\n // traverse the tags\n i += 4; // skip previous tag size\n while (i < bytes.byteLength) {\n dataSize = bytes[i + 1] << 16;\n dataSize |= bytes[i + 2] << 8;\n dataSize |= bytes[i + 3];\n dataSize += 11;\n\n tag = bytes.subarray(i, i + dataSize);\n parsedResults.push(inspectFlvTag(tag));\n i += dataSize + 4;\n }\n return parsedResults;\n },\n textifyFlv = function (flvTagArray) {\n return JSON.stringify(flvTagArray, null, 2);\n };\n\nmodule.exports = {\n inspectTag: inspectFlvTag,\n inspect: inspectFlv,\n textify: textifyFlv\n};\n","'use strict';\n\nvar\n inspectMp4,\n textifyMp4,\n /**\n * Returns the string representation of an ASCII encoded four byte buffer.\n * @param buffer {Uint8Array} a four-byte buffer to translate\n * @return {string} the corresponding string\n */\n parseType = function(buffer) {\n var result = '';\n result += String.fromCharCode(buffer[0]);\n result += String.fromCharCode(buffer[1]);\n result += String.fromCharCode(buffer[2]);\n result += String.fromCharCode(buffer[3]);\n return result;\n },\n parseMp4Date = function(seconds) {\n return new Date(seconds * 1000 - 2082844800000);\n },\n parseSampleFlags = function(flags) {\n return {\n isLeading: (flags[0] & 0x0c) >>> 2,\n dependsOn: flags[0] & 0x03,\n isDependedOn: (flags[1] & 0xc0) >>> 6,\n hasRedundancy: (flags[1] & 0x30) >>> 4,\n paddingValue: (flags[1] & 0x0e) >>> 1,\n isNonSyncSample: flags[1] & 0x01,\n degradationPriority: (flags[2] << 8) | flags[3]\n };\n },\n nalParse = function(avcStream) {\n var\n avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength),\n result = [],\n i,\n length;\n for (i = 0; i + 4 < avcStream.length; i += length) {\n length = avcView.getUint32(i);\n i += 4;\n\n // bail if this doesn't appear to be an H264 stream\n if (length <= 0) {\n result.push('<span style=\\'color:red;\\'>MALFORMED DATA</span>');\n continue;\n }\n\n switch(avcStream[i] & 0x1F) {\n case 0x01:\n result.push('slice_layer_without_partitioning_rbsp');\n break;\n case 0x05:\n result.push('slice_layer_without_partitioning_rbsp_idr');\n break;\n case 0x06:\n result.push('sei_rbsp');\n break;\n case 0x07:\n result.push('seq_parameter_set_rbsp');\n break;\n case 0x08:\n result.push('pic_parameter_set_rbsp');\n break;\n case 0x09:\n result.push('access_unit_delimiter_rbsp');\n break;\n default:\n result.push('UNKNOWN NAL - ' + avcStream[i] & 0x1F);\n break;\n }\n }\n return result;\n },\n\n // registry of handlers for individual mp4 box types\n parse = {\n // codingname, not a first-class box type. stsd entries share the\n // same format as real boxes so the parsing infrastructure can be\n // shared\n avc1: function(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n dataReferenceIndex: view.getUint16(6),\n width: view.getUint16(24),\n height: view.getUint16(26),\n horizresolution: view.getUint16(28) + (view.getUint16(30) / 16),\n vertresolution: view.getUint16(32) + (view.getUint16(34) / 16),\n frameCount: view.getUint16(40),\n depth: view.getUint16(74),\n config: inspectMp4(data.subarray(78, data.byteLength))\n };\n },\n avcC: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n configurationVersion: data[0],\n avcProfileIndication: data[1],\n profileCompatibility: data[2],\n avcLevelIndication: data[3],\n lengthSizeMinusOne: data[4] & 0x03,\n sps: [],\n pps: []\n },\n numOfSequenceParameterSets = data[5] & 0x1f,\n numOfPictureParameterSets,\n nalSize,\n offset,\n i;\n\n // iterate past any SPSs\n offset = 6;\n for (i = 0; i < numOfSequenceParameterSets; i++) {\n nalSize = view.getUint16(offset);\n offset += 2;\n result.sps.push(new Uint8Array(data.subarray(offset, offset + nalSize)));\n offset += nalSize;\n }\n // iterate past any PPSs\n numOfPictureParameterSets = data[offset];\n offset++;\n for (i = 0; i < numOfPictureParameterSets; i++) {\n nalSize = view.getUint16(offset);\n offset += 2;\n result.pps.push(new Uint8Array(data.subarray(offset, offset + nalSize)));\n offset += nalSize;\n }\n return result;\n },\n btrt: function(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n bufferSizeDB: view.getUint32(0),\n maxBitrate: view.getUint32(4),\n avgBitrate: view.getUint32(8)\n };\n },\n esds: function(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n esId: (data[6] << 8) | data[7],\n streamPriority: data[8] & 0x1f,\n decoderConfig: {\n objectProfileIndication: data[11],\n streamType: (data[12] >>> 2) & 0x3f,\n bufferSize: (data[13] << 16) | (data[14] << 8) | data[15],\n maxBitrate: (data[16] << 24) |\n (data[17] << 16) |\n (data[18] << 8) |\n data[19],\n avgBitrate: (data[20] << 24) |\n (data[21] << 16) |\n (data[22] << 8) |\n data[23],\n decoderConfigDescriptor: {\n tag: data[24],\n length: data[25],\n audioObjectType: (data[26] >>> 3) & 0x1f,\n samplingFrequencyIndex: ((data[26] & 0x07) << 1) |\n ((data[27] >>> 7) & 0x01),\n channelConfiguration: (data[27] >>> 3) & 0x0f\n }\n }\n };\n },\n ftyp: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n majorBrand: parseType(data.subarray(0, 4)),\n minorVersion: view.getUint32(4),\n compatibleBrands: []\n },\n i = 8;\n while (i < data.byteLength) {\n result.compatibleBrands.push(parseType(data.subarray(i, i + 4)));\n i += 4;\n }\n return result;\n },\n dinf: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n dref: function(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n dataReferences: inspectMp4(data.subarray(8))\n };\n },\n hdlr: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n language,\n result = {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4)),\n handlerType: parseType(data.subarray(8, 12)),\n name: ''\n },\n i = 8;\n\n // parse out the name field\n for (i = 24; i < data.byteLength; i++) {\n if (data[i] === 0x00) {\n // the name field is null-terminated\n i++;\n break;\n }\n result.name += String.fromCharCode(data[i]);\n }\n // decode UTF-8 to javascript's internal representation\n // see http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.html\n result.name = decodeURIComponent(global.escape(result.name));\n\n return result;\n },\n mdat: function(data) {\n return {\n byteLength: data.byteLength,\n nals: nalParse(data)\n };\n },\n mdhd: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n i = 4,\n language,\n result = {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4)),\n language: ''\n };\n if (result.version === 1) {\n i += 4;\n result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n i += 8;\n result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n i += 4;\n result.timescale = view.getUint32(i);\n i += 8;\n result.duration = view.getUint32(i); // truncating top 4 bytes\n } else {\n result.creationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.modificationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.timescale = view.getUint32(i);\n i += 4;\n result.duration = view.getUint32(i);\n }\n i += 4;\n // language is stored as an ISO-639-2/T code in an array of three 5-bit fields\n // each field is the packed difference between its ASCII value and 0x60\n language = view.getUint16(i);\n result.language += String.fromCharCode((language >> 10) + 0x60);\n result.language += String.fromCharCode(((language & 0x03c0) >> 5) + 0x60);\n result.language += String.fromCharCode((language & 0x1f) + 0x60);\n\n return result;\n },\n mdia: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n mfhd: function(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n sequenceNumber: (data[4] << 24) |\n (data[5] << 16) |\n (data[6] << 8) |\n (data[7])\n };\n },\n minf: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n // codingname, not a first-class box type. stsd entries share the\n // same format as real boxes so the parsing infrastructure can be\n // shared\n mp4a: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n // 6 bytes reserved\n dataReferenceIndex: view.getUint16(6),\n // 4 + 4 bytes reserved\n channelcount: view.getUint16(16),\n samplesize: view.getUint16(18),\n // 2 bytes pre_defined\n // 2 bytes reserved\n samplerate: view.getUint16(24) + (view.getUint16(26) / 65536)\n };\n\n // if there are more bytes to process, assume this is an ISO/IEC\n // 14496-14 MP4AudioSampleEntry and parse the ESDBox\n if (data.byteLength > 28) {\n result.streamDescriptor = inspectMp4(data.subarray(28))[0];\n }\n return result;\n },\n moof: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n moov: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n mvex: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n mvhd: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n i = 4,\n result = {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4))\n };\n\n if (result.version === 1) {\n i += 4;\n result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n i += 8;\n result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n i += 4;\n result.timescale = view.getUint32(i);\n i += 8;\n result.duration = view.getUint32(i); // truncating top 4 bytes\n } else {\n result.creationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.modificationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.timescale = view.getUint32(i);\n i += 4;\n result.duration = view.getUint32(i);\n }\n i += 4;\n\n // convert fixed-point, base 16 back to a number\n result.rate = view.getUint16(i) + (view.getUint16(i + 2) / 16);\n i += 4;\n result.volume = view.getUint8(i) + (view.getUint8(i + 1) / 8);\n i += 2;\n i += 2;\n i += 2 * 4;\n result.matrix = new Uint32Array(data.subarray(i, i + (9 * 4)));\n i += 9 * 4;\n i += 6 * 4;\n result.nextTrackId = view.getUint32(i);\n return result;\n },\n pdin: function(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4)),\n rate: view.getUint32(4),\n initialDelay: view.getUint32(8)\n };\n },\n sdtp: function(data) {\n var\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n samples: []\n }, i;\n\n for (i = 4; i < data.byteLength; i++) {\n result.samples.push({\n dependsOn: (data[i] & 0x30) >> 4,\n isDependedOn: (data[i] & 0x0c) >> 2,\n hasRedundancy: data[i] & 0x03\n });\n }\n return result;\n },\n sidx: function(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n references: [],\n referenceId: view.getUint32(4),\n timescale: view.getUint32(8),\n earliestPresentationTime: view.getUint32(12),\n firstOffset: view.getUint32(16)\n },\n referenceCount = view.getUint16(22),\n i;\n\n for (i = 24; referenceCount; i += 12, referenceCount-- ) {\n result.references.push({\n referenceType: (data[i] & 0x80) >>> 7,\n referencedSize: view.getUint32(i) & 0x7FFFFFFF,\n subsegmentDuration: view.getUint32(i + 4),\n startsWithSap: !!(data[i + 8] & 0x80),\n sapType: (data[i + 8] & 0x70) >>> 4,\n sapDeltaTime: view.getUint32(i + 8) & 0x0FFFFFFF\n });\n }\n\n return result;\n },\n smhd: function(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n balance: data[4] + (data[5] / 256)\n };\n },\n stbl: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n stco: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n chunkOffsets: []\n },\n entryCount = view.getUint32(4),\n i;\n for (i = 8; entryCount; i += 4, entryCount--) {\n result.chunkOffsets.push(view.getUint32(i));\n }\n return result;\n },\n stsc: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n entryCount = view.getUint32(4),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n sampleToChunks: []\n },\n i;\n for (i = 8; entryCount; i += 12, entryCount--) {\n result.sampleToChunks.push({\n firstChunk: view.getUint32(i),\n samplesPerChunk: view.getUint32(i + 4),\n sampleDescriptionIndex: view.getUint32(i + 8)\n });\n }\n return result;\n },\n stsd: function(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n sampleDescriptions: inspectMp4(data.subarray(8))\n };\n },\n stsz: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n sampleSize: view.getUint32(4),\n entries: []\n },\n i;\n for (i = 12; i < data.byteLength; i += 4) {\n result.entries.push(view.getUint32(i));\n }\n return result;\n },\n stts: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n timeToSamples: []\n },\n entryCount = view.getUint32(4),\n i;\n\n for (i = 8; entryCount; i += 8, entryCount--) {\n result.timeToSamples.push({\n sampleCount: view.getUint32(i),\n sampleDelta: view.getUint32(i + 4)\n });\n }\n return result;\n },\n styp: function(data) {\n return parse.ftyp(data);\n },\n tfdt: function(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n baseMediaDecodeTime: data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]\n };\n },\n tfhd: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n trackId: view.getUint32(4)\n },\n baseDataOffsetPresent = result.flags[2] & 0x01,\n sampleDescriptionIndexPresent = result.flags[2] & 0x02,\n defaultSampleDurationPresent = result.flags[2] & 0x08,\n defaultSampleSizePresent = result.flags[2] & 0x10,\n defaultSampleFlagsPresent = result.flags[2] & 0x20,\n i;\n\n i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n result.baseDataOffset = view.getUint32(12);\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n result.sampleDescriptionIndex = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n result.defaultSampleDuration = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleSizePresent) {\n result.defaultSampleSize = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n result.defaultSampleFlags = view.getUint32(i);\n }\n return result;\n },\n tkhd: function(data) {\n var\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n i = 4,\n result = {\n version: view.getUint8(0),\n flags: new Uint8Array(data.subarray(1, 4)),\n };\n if (result.version === 1) {\n i += 4;\n result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n i += 8;\n result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes\n i += 4;\n result.trackId = view.getUint32(i);\n i += 4;\n i += 8;\n result.duration = view.getUint32(i); // truncating top 4 bytes\n } else {\n result.creationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.modificationTime = parseMp4Date(view.getUint32(i));\n i += 4;\n result.trackId = view.getUint32(i);\n i += 4;\n i += 4;\n result.duration = view.getUint32(i);\n }\n i += 4;\n i += 2 * 4;\n result.layer = view.getUint16(i);\n i += 2;\n result.alternateGroup = view.getUint16(i);\n i += 2;\n // convert fixed-point, base 16 back to a number\n result.volume = view.getUint8(i) + (view.getUint8(i + 1) / 8);\n i += 2;\n i += 2;\n result.matrix = new Uint32Array(data.subarray(i, i + (9 * 4)));\n i += 9 * 4;\n result.width = view.getUint16(i) + (view.getUint16(i + 2) / 16);\n i += 4;\n result.height = view.getUint16(i) + (view.getUint16(i + 2) / 16);\n return result;\n },\n traf: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n trak: function(data) {\n return {\n boxes: inspectMp4(data)\n };\n },\n trex: function(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n trackId: view.getUint32(4),\n defaultSampleDescriptionIndex: view.getUint32(8),\n defaultSampleDuration: view.getUint32(12),\n defaultSampleSize: view.getUint32(16),\n sampleDependsOn: data[20] & 0x03,\n sampleIsDependedOn: (data[21] & 0xc0) >> 6,\n sampleHasRedundancy: (data[21] & 0x30) >> 4,\n samplePaddingValue: (data[21] & 0x0e) >> 1,\n sampleIsDifferenceSample: !!(data[21] & 0x01),\n sampleDegradationPriority: view.getUint16(22)\n };\n },\n trun: function(data) {\n var\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n samples: []\n },\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n dataOffsetPresent = result.flags[2] & 0x01,\n firstSampleFlagsPresent = result.flags[2] & 0x04,\n sampleDurationPresent = result.flags[1] & 0x01,\n sampleSizePresent = result.flags[1] & 0x02,\n sampleFlagsPresent = result.flags[1] & 0x04,\n sampleCompositionTimeOffsetPresent = result.flags[1] & 0x08,\n sampleCount = view.getUint32(4),\n offset = 8,\n sample;\n\n if (dataOffsetPresent) {\n result.dataOffset = view.getUint32(offset);\n offset += 4;\n }\n\n if (firstSampleFlagsPresent && sampleCount) {\n sample = {\n flags: parseSampleFlags(data.subarray(offset, offset + 4))\n };\n offset += 4;\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n sample.compositionTimeOffset = view.getUint32(offset);\n offset += 4;\n }\n result.samples.push(sample);\n sampleCount--;\n }\n\n while (sampleCount--) {\n sample = {};\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n if (sampleFlagsPresent) {\n sample.flags = parseSampleFlags(data.subarray(offset, offset + 4));\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n sample.compositionTimeOffset = view.getUint32(offset);\n offset += 4;\n }\n result.samples.push(sample);\n }\n return result;\n },\n 'url ': function(data) {\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4))\n };\n },\n vmhd: function(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n return {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n graphicsmode: view.getUint16(4),\n opcolor: new Uint16Array([view.getUint16(6),\n view.getUint16(8),\n view.getUint16(10)])\n };\n }\n };\n\n\n/**\n * Return a javascript array of box objects parsed from an ISO base\n * media file.\n * @param data {Uint8Array} the binary data of the media to be inspected\n * @return {array} a javascript array of potentially nested box objects\n */\ninspectMp4 = function(data) {\n var\n i = 0,\n result = [],\n view,\n size,\n type,\n end,\n box;\n\n // Convert data from Uint8Array to ArrayBuffer, to follow Dataview API\n var ab = new ArrayBuffer(data.length);\n var v = new Uint8Array(ab);\n for (var z = 0; z < data.length; ++z) {\n v[z] = data[z];\n }\n view = new DataView(ab);\n\n\n while (i < data.byteLength) {\n // parse box data\n size = view.getUint32(i);\n type = parseType(data.subarray(i + 4, i + 8));\n end = size > 1 ? i + size : data.byteLength;\n\n // parse type-specific data\n box = (parse[type] || function(data) {\n return {\n data: data\n };\n })(data.subarray(i + 8, end));\n box.size = size;\n box.type = type;\n\n // store this box and move to the next\n result.push(box);\n i = end;\n }\n return result;\n};\n\n/**\n * Returns a textual representation of the javascript represtentation\n * of an MP4 file. You can use it as an alternative to\n * JSON.stringify() to compare inspected MP4s.\n * @param inspectedMp4 {array} the parsed array of boxes in an MP4\n * file\n * @param depth {number} (optional) the number of ancestor boxes of\n * the elements of inspectedMp4. Assumed to be zero if unspecified.\n * @return {string} a text representation of the parsed MP4\n */\ntextifyMp4 = function(inspectedMp4, depth) {\n var indent;\n depth = depth || 0;\n indent = new Array(depth * 2 + 1).join(' ');\n\n // iterate over all the boxes\n return inspectedMp4.map(function(box, index) {\n\n // list the box type first at the current indentation level\n return indent + box.type + '\\n' +\n\n // the type is already included and handle child boxes separately\n Object.keys(box).filter(function(key) {\n return key !== 'type' && key !== 'boxes';\n\n // output all the box properties\n }).map(function(key) {\n var prefix = indent + ' ' + key + ': ',\n value = box[key];\n\n // print out raw bytes as hexademical\n if (value instanceof Uint8Array || value instanceof Uint32Array) {\n var bytes = Array.prototype.slice.call(new Uint8Array(value.buffer, value.byteOffset, value.byteLength))\n .map(function(byte) {\n return ' ' + ('00' + byte.toString(16)).slice(-2);\n }).join('').match(/.{1,24}/g);\n if (!bytes) {\n return prefix + '<>';\n }\n if (bytes.length === 1) {\n return prefix + '<' + bytes.join('').slice(1) + '>';\n }\n return prefix + '<\\n' + bytes.map(function(line) {\n return indent + ' ' + line;\n }).join('\\n') + '\\n' + indent + ' >';\n }\n\n // stringify generic objects\n return prefix +\n JSON.stringify(value, null, 2)\n .split('\\n').map(function(line, index) {\n if (index === 0) {\n return line;\n }\n return indent + ' ' + line;\n }).join('\\n');\n }).join('\\n') +\n\n // recursively textify the child boxes\n (box.boxes ? '\\n' + textifyMp4(box.boxes, depth + 1) : '');\n }).join('\\n');\n};\n\nmodule.exports = {\n inspect: inspectMp4,\n textify: textifyMp4\n};\n","'use strict';\n\nvar ExpGolomb;\n\n/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding\n * scheme used by h264.\n */\nExpGolomb = function(workingData) {\n var\n // the number of bytes left to examine in workingData\n workingBytesAvailable = workingData.byteLength,\n\n // the current word being examined\n workingWord = 0, // :uint\n\n // the number of bits left to examine in the current word\n workingBitsAvailable = 0; // :uint;\n\n // ():uint\n this.length = function() {\n return (8 * workingBytesAvailable);\n };\n\n // ():uint\n this.bitsAvailable = function() {\n return (8 * workingBytesAvailable) + workingBitsAvailable;\n };\n\n // ():void\n this.loadWord = function() {\n var\n position = workingData.byteLength - workingBytesAvailable,\n workingBytes = new Uint8Array(4),\n availableBytes = Math.min(4, workingBytesAvailable);\n\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n\n workingBytes.set(workingData.subarray(position,\n position + availableBytes));\n workingWord = new DataView(workingBytes.buffer).getUint32(0);\n\n // track the amount of workingData that has been processed\n workingBitsAvailable = availableBytes * 8;\n workingBytesAvailable -= availableBytes;\n };\n\n // (count:int):void\n this.skipBits = function(count) {\n var skipBytes; // :int\n if (workingBitsAvailable > count) {\n workingWord <<= count;\n workingBitsAvailable -= count;\n } else {\n count -= workingBitsAvailable;\n skipBytes = Math.floor(count / 8);\n\n count -= (skipBytes * 8);\n workingBytesAvailable -= skipBytes;\n\n this.loadWord();\n\n workingWord <<= count;\n workingBitsAvailable -= count;\n }\n };\n\n // (size:int):uint\n this.readBits = function(size) {\n var\n bits = Math.min(workingBitsAvailable, size), // :uint\n valu = workingWord >>> (32 - bits); // :uint\n // if size > 31, handle error\n workingBitsAvailable -= bits;\n if (workingBitsAvailable > 0) {\n workingWord <<= bits;\n } else if (workingBytesAvailable > 0) {\n this.loadWord();\n }\n\n bits = size - bits;\n return bits > 0 && workingBitsAvailable ? valu << bits | this.readBits(bits) : valu;\n };\n\n // ():uint\n this.skipLeadingZeros = function() {\n var leadingZeroCount; // :uint\n for (leadingZeroCount = 0 ; leadingZeroCount < workingBitsAvailable ; ++leadingZeroCount) {\n if (0 !== (workingWord & (0x80000000 >>> leadingZeroCount))) {\n // the first bit of working word is 1\n workingWord <<= leadingZeroCount;\n workingBitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n }\n\n // we exhausted workingWord and still have not found a 1\n this.loadWord();\n return leadingZeroCount + this.skipLeadingZeros();\n };\n\n // ():void\n this.skipUnsignedExpGolomb = function() {\n this.skipBits(1 + this.skipLeadingZeros());\n };\n\n // ():void\n this.skipExpGolomb = function() {\n this.skipBits(1 + this.skipLeadingZeros());\n };\n\n // ():uint\n this.readUnsignedExpGolomb = function() {\n var clz = this.skipLeadingZeros(); // :uint\n return this.readBits(clz + 1) - 1;\n };\n\n // ():int\n this.readExpGolomb = function() {\n var valu = this.readUnsignedExpGolomb(); // :int\n return valu & 0x01 ? (1 + valu) >>> 1 : -(valu >>> 1);\n };\n\n // Some convenience functions\n // :Boolean\n this.readBoolean = function() {\n return 1 === this.readBits(1);\n };\n\n // ():int\n this.readUnsignedByte = function() {\n return this.readBits(8);\n };\n\n this.loadWord();\n};\n\nmodule.exports = ExpGolomb;\n","/**\n * mux.js\n *\n * Copyright (c) 2014 Brightcove\n * All rights reserved.\n *\n * A lightweight readable stream implemention that handles event dispatching.\n * Objects that inherit from streams should call init in their constructors.\n */\n'use strict';\n\nvar Stream = function() {\n this.init = function() {\n var listeners = {};\n /**\n * Add a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} the callback to be invoked when an event of\n * the specified type occurs\n */\n this.on = function(type, listener) {\n if (!listeners[type]) {\n listeners[type] = [];\n }\n listeners[type].push(listener);\n };\n /**\n * Remove a listener for a specified event type.\n * @param type {string} the event name\n * @param listener {function} a function previously registered for this\n * type of event through `on`\n */\n this.off = function(type, listener) {\n var index;\n if (!listeners[type]) {\n return false;\n }\n index = listeners[type].indexOf(listener);\n listeners[type].splice(index, 1);\n return index > -1;\n };\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n * @param type {string} the event name\n */\n this.trigger = function(type) {\n var callbacks, i, length, args;\n callbacks = listeners[type];\n if (!callbacks) {\n return;\n }\n // Copy handlers so if handlers are added/removed during the process it\n // doesn't throw everything off.\n callbacks = callbacks.slice(0);\n // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n if (arguments.length === 2) {\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n args = [];\n i = arguments.length;\n for (i = 1; i < arguments.length; ++i) {\n args.push(arguments[i]);\n }\n length = callbacks.length;\n for (i = 0; i < length; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n };\n /**\n * Destroys the stream and cleans up.\n */\n this.dispose = function() {\n listeners = {};\n };\n };\n};\n\n/**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n * @param destination {stream} the stream that will receive all `data` events\n * @param autoFlush {boolean} if false, we will not call `flush` on the destination\n * when the current stream emits a 'done' event\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\nStream.prototype.pipe = function(destination) {\n this.on('data', function(data) {\n destination.push(data);\n });\n\n this.on('done', function(flushSource) {\n destination.flush(flushSource);\n });\n\n return destination;\n};\n\n// Default stream functions that are expected to be overridden to perform\n// actual work. These are provided by the prototype as a sort of no-op\n// implementation so that we don't have to check for their existence in the\n// `pipe` function above.\nStream.prototype.push = function(data) {\n this.trigger('data', data);\n};\n\nStream.prototype.flush = function(flushSource) {\n this.trigger('done', flushSource);\n};\n\nmodule.exports = Stream;\n","'use strict';\n\nexports.__esModule = true;\nexports.default = cancelContentPlay;\n\nvar _window = require('global/window');\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = require('global/document');\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _video = require('video.js');\n\nvar _video2 = _interopRequireDefault(_video);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction cancelContentPlay(player) {\n if (player.ads.cancelPlayTimeout) {\n // another cancellation is already in flight, so do nothing\n return;\n }\n\n // Avoid content flash on non-iPad iOS and iPhones on iOS10 with playsinline\n if (_video2.default.browser.IS_IOS && _video2.default.browser.IS_IPHONE && !player.el_.hasAttribute('playsinline')) {\n\n var width = player.currentWidth ? player.currentWidth() : player.width();\n var height = player.currentHeight ? player.currentHeight() : player.height();\n\n // A placeholder black box will be shown in the document while the player is hidden.\n var placeholder = _document2.default.createElement('div');\n\n placeholder.style.width = width + 'px';\n placeholder.style.height = height + 'px';\n placeholder.style.background = 'black';\n player.el_.parentNode.insertBefore(placeholder, player.el_);\n\n // Hide the player. While in full-screen video playback mode on iOS, this\n // makes the player show a black screen instead of content flash.\n player.el_.style.display = 'none';\n\n // Unhide the player and remove the placeholder once we're ready to move on.\n player.one(['adstart', 'adplaying', 'adtimeout', 'adserror', 'adscanceled', 'adskip', 'playing'], function () {\n player.el_.style.display = 'block';\n placeholder.remove();\n });\n\n // Detect fullscreen change, if returning from fullscreen and placeholder exists,\n // remove placeholder and show player whether or not playsinline was attached.\n player.on('fullscreenchange', function () {\n if (placeholder && player.hasClass('vjs-fullscreen')) {\n player.el_.style.display = 'block';\n placeholder.remove();\n }\n });\n }\n\n // The timeout is necessary because pausing a video element while processing a `play`\n // event on iOS can cause the video element to continuously toggle between playing and\n // paused states.\n player.ads.cancelPlayTimeout = _window2.default.setTimeout(function () {\n // deregister the cancel timeout so subsequent cancels are scheduled\n player.ads.cancelPlayTimeout = null;\n\n // pause playback so ads can be handled.\n if (!player.paused()) {\n player.pause();\n }\n\n // When the 'content-playback' state is entered, this will let us know to play\n player.ads.cancelledPlay = true;\n }, 1);\n} /*\n This feature makes sure the player is paused during ad loading.\n \n It does this by pausing the player immediately after a \"play\" where ads will be requested,\n then signalling that we should play after the ad is done.\n */","'use strict';\n\nexports.__esModule = true;\nexports.default = initializeContentupdate;\n\nvar _window = require('global/window');\n\nvar _window2 = _interopRequireDefault(_window);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Start sending contentupdate events\nfunction initializeContentupdate(player) {\n\n // Keep track of the current content source\n // If you want to change the src of the video without triggering\n // the ad workflow to restart, you can update this variable before\n // modifying the player's source\n player.ads.contentSrc = player.currentSrc();\n\n // Check if a new src has been set, if so, trigger contentupdate\n var checkSrc = function checkSrc() {\n if (player.ads.state !== 'ad-playback') {\n var src = player.currentSrc();\n\n if (src !== player.ads.contentSrc) {\n player.trigger({\n type: 'contentupdate',\n oldValue: player.ads.contentSrc,\n newValue: src\n });\n player.ads.contentSrc = src;\n }\n }\n };\n\n // loadstart reliably indicates a new src has been set\n player.on('loadstart', checkSrc);\n // check immediately in case we missed the loadstart\n _window2.default.setTimeout(checkSrc, 1);\n} /*\n This feature sends a `contentupdate` event when the player source changes.\n */","'use strict';\n\nexports.__esModule = true;\nexports.processMetadataTracks = processMetadataTracks;\nexports.setMetadataTrackMode = setMetadataTrackMode;\nexports.getSupportedAdCue = getSupportedAdCue;\nexports.getCueId = getCueId;\nexports.processAdTrack = processAdTrack;\n\nvar _video = require('video.js');\n\nvar _video2 = _interopRequireDefault(_video);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n* This feature allows metadata text tracks to be manipulated once they are available,\n* usually after the 'loadstart' event is observed on the player\n* @param player A reference to a player\n* @param processMetadataTrack A callback that performs some operations on a\n* metadata text track\n**/\nfunction processMetadataTracks(player, processMetadataTrack) {\n var tracks = player.textTracks();\n var setModeAndProcess = function setModeAndProcess(track) {\n if (track.kind === 'metadata') {\n player.ads.cueTextTracks.setMetadataTrackMode(track);\n processMetadataTrack(player, track);\n }\n };\n\n // Text tracks are available\n if (tracks.length > 0) {\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n\n setModeAndProcess(track);\n }\n // Wait until text tracks are added\n // We avoid always setting the event handler in case\n // integrations decide to handle this separately\n // with a different handler for the same event\n } else {\n tracks.addEventListener('addtrack', function (event) {\n var track = event.track;\n\n setModeAndProcess(track);\n });\n }\n}\n\n/**\n* Sets the track mode to one of 'disabled', 'hidden' or 'showing'\n* @see https://github.com/videojs/video.js/blob/master/docs/guides/text-tracks.md\n* Default behavior is to do nothing, @override if this is not desired\n* @param track The text track to set the mode on\n*/\n/**\n* This feature allows metadata text tracks to be manipulated once available\n* @see processMetadataTracks.\n* It also allows ad implementations to leverage ad cues coming through\n* text tracks, @see processAdTrack\n**/\n\nfunction setMetadataTrackMode(track) {\n return;\n}\n\n/**\n* Determines whether cue is an ad cue and returns the cue data.\n* @param player A reference to the player\n* @param cue The cue to be checked\n* Returns the given cue by default @override if futher processing is required\n* @return the cueData in JSON if cue is a supported ad cue, or -1 if not\n**/\nfunction getSupportedAdCue(player, cue) {\n return cue;\n}\n\n/**\n* Gets the id associated with a cue.\n* @param cue The cue to extract an ID from\n* @returns The first occurance of 'id' in the object,\n* @override if this is not the desired cue id\n**/\nfunction getCueId(player, cue) {\n return cue.id;\n}\n\n/**\n* Checks whether a cue has already been used\n* @param cueId The Id associated with a cue\n**/\nvar cueAlreadySeen = function cueAlreadySeen(player, cueId) {\n return cueId !== undefined && player.ads.includedCues[cueId];\n};\n\n/**\n* Indicates that a cue has been used\n* @param cueId The Id associated with a cue\n**/\nvar setCueAlreadySeen = function setCueAlreadySeen(player, cueId) {\n if (cueId !== undefined && cueId !== '') {\n player.ads.includedCues[cueId] = true;\n }\n};\n\n/**\n* This feature allows ad metadata tracks to be manipulated in ad implementations\n* @param player A reference to the player\n* @param cues The set of cues to work with\n* @param processCue A method that uses a cue to make some\n* ad request in the ad implementation\n* @param [cancelAds] A method that dynamically cancels ads in the ad implementation\n**/\nfunction processAdTrack(player, cues, processCue, cancelAds) {\n player.ads.includedCues = {};\n\n // loop over set of cues\n for (var i = 0; i < cues.length; i++) {\n var cue = cues[i];\n var cueData = this.getSupportedAdCue(player, cue);\n\n // Exit if this is not a supported cue\n if (cueData === -1) {\n _video2.default.log.warn('Skipping as this is not a supported ad cue.', cue);\n return;\n }\n\n // Continue processing supported cue\n var cueId = this.getCueId(player, cue);\n var startTime = cue.startTime;\n\n // Skip ad if cue was already used\n if (cueAlreadySeen(player, cueId)) {\n _video2.default.log('Skipping ad already seen with ID ' + cueId);\n return;\n }\n\n // Process cue as an ad cue\n processCue(player, cueData, cueId, startTime);\n\n // Indicate that this cue has been used\n setCueAlreadySeen(player, cueId);\n\n // Optional dynamic ad cancellation\n if (cancelAds !== undefined) {\n cancelAds(player, cueData);\n }\n }\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; /*\n This feature provides an optional method for ad integrations to insert run-time values\n into an ad server URL or configuration.\n */\n\nexports.default = adMacroReplacement;\n\nvar _window = require('global/window');\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _document = require('global/document');\n\nvar _document2 = _interopRequireDefault(_document);\n\nvar _video = require('video.js');\n\nvar _video2 = _interopRequireDefault(_video);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Return URI encoded version of value if uriEncode is true\nvar uriEncodeIfNeeded = function uriEncodeIfNeeded(value, uriEncode) {\n if (uriEncode) {\n return encodeURIComponent(value);\n }\n return value;\n};\n\n// Add custom field macros to macros object\n// based on given name for custom fields property of mediainfo object.\nvar customFields = function customFields(mediainfo, macros, customFieldsName) {\n if (mediainfo && mediainfo[customFieldsName]) {\n var fields = mediainfo[customFieldsName];\n var fieldNames = Object.keys(fields);\n\n for (var i = 0; i < fieldNames.length; i++) {\n var tag = '{mediainfo.' + customFieldsName + '.' + fieldNames[i] + '}';\n\n macros[tag] = fields[fieldNames[i]];\n }\n }\n};\n\n// Public method that integrations use for ad macros.\n// \"string\" is any string with macros to be replaced\n// \"uriEncode\" if true will uri encode macro values when replaced\n// \"customMacros\" is a object with custom macros and values to map them to\n// - For example: {'{five}': 5}\n// Return value is is \"string\" with macros replaced\n// - For example: adMacroReplacement('{player.id}') returns a string of the player id\nfunction adMacroReplacement(string, uriEncode, customMacros) {\n\n if (uriEncode === undefined) {\n uriEncode = false;\n }\n\n var macros = {};\n\n if (customMacros !== undefined) {\n macros = customMacros;\n }\n\n // Static macros\n macros['{player.id}'] = this.options_['data-player'];\n macros['{mediainfo.id}'] = this.mediainfo ? this.mediainfo.id : '';\n macros['{mediainfo.name}'] = this.mediainfo ? this.mediainfo.name : '';\n macros['{mediainfo.description}'] = this.mediainfo ? this.mediainfo.description : '';\n macros['{mediainfo.tags}'] = this.mediainfo ? this.mediainfo.tags : '';\n macros['{mediainfo.reference_id}'] = this.mediainfo ? this.mediainfo.reference_id : '';\n macros['{mediainfo.duration}'] = this.mediainfo ? this.mediainfo.duration : '';\n macros['{mediainfo.ad_keys}'] = this.mediainfo ? this.mediainfo.ad_keys : '';\n macros['{player.duration}'] = this.duration();\n macros['{timestamp}'] = new Date().getTime();\n macros['{document.referrer}'] = _document2.default.referrer;\n macros['{window.location.href}'] = _window2.default.location.href;\n macros['{random}'] = Math.floor(Math.random() * 1000000000000);\n\n // Custom fields in mediainfo\n customFields(this.mediainfo, macros, 'custom_fields');\n customFields(this.mediainfo, macros, 'customFields');\n\n // Go through all the replacement macros and apply them to the string.\n // This will replace all occurrences of the replacement macros.\n for (var i in macros) {\n string = string.split(i).join(uriEncodeIfNeeded(macros[i], uriEncode));\n }\n\n // Page variables\n string = string.replace(/{pageVariable\\.([^}]+)}/g, function (match, name) {\n var value = void 0;\n var context = _window2.default;\n var names = name.split('.');\n\n // Iterate down multiple levels of selector without using eval\n // This makes things like pageVariable.foo.bar work\n for (var _i = 0; _i < names.length; _i++) {\n if (_i === names.length - 1) {\n value = context[names[_i]];\n } else {\n context = context[names[_i]];\n }\n }\n\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n // Only allow certain types of values. Anything else is probably a mistake.\n if (value === null) {\n return 'null';\n } else if (value === undefined) {\n _video2.default.log.warn('Page variable \"' + name + '\" not found');\n return '';\n } else if (type !== 'string' && type !== 'number' && type !== 'boolean') {\n _video2.default.log.warn('Page variable \"' + name + '\" is not a supported type');\n return '';\n }\n\n return uriEncodeIfNeeded(String(value), uriEncode);\n });\n\n return string;\n}","'use strict';\n\nvar _window = require('global/window');\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _video = require('video.js');\n\nvar _video2 = _interopRequireDefault(_video);\n\nvar _redispatch = require('./redispatch.js');\n\nvar _redispatch2 = _interopRequireDefault(_redispatch);\n\nvar _snapshot = require('./snapshot.js');\n\nvar snapshot = _interopRequireWildcard(_snapshot);\n\nvar _contentupdate = require('./contentupdate.js');\n\nvar _contentupdate2 = _interopRequireDefault(_contentupdate);\n\nvar _cancelContentPlay = require('./cancelContentPlay.js');\n\nvar _cancelContentPlay2 = _interopRequireDefault(_cancelContentPlay);\n\nvar _macros = require('./macros.js');\n\nvar _macros2 = _interopRequireDefault(_macros);\n\nvar _cueTextTracks = require('./cueTextTracks.js');\n\nvar cueTextTracks = _interopRequireWildcard(_cueTextTracks);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\nThis main plugin file is responsible for integration logic and enabling the features\nthat live in in separate files.\n*/\n\nvar VIDEO_EVENTS = _video2.default.getComponent('Html5').Events;\n\n/**\n * Remove the poster attribute from the video element tech, if present. When\n * reusing a video element for multiple videos, the poster image will briefly\n * reappear while the new source loads. Removing the attribute ahead of time\n * prevents the poster from showing up between videos.\n *\n * @param {Object} player The videojs player object\n */\nvar removeNativePoster = function removeNativePoster(player) {\n var tech = player.$('.vjs-tech');\n\n if (tech) {\n tech.removeAttribute('poster');\n }\n};\n\n// ---------------------------------------------------------------------------\n// Ad Framework\n// ---------------------------------------------------------------------------\n\n// default framework settings\nvar defaults = {\n // maximum amount of time in ms to wait to receive `adsready` from the ad\n // implementation after play has been requested. Ad implementations are\n // expected to load any dynamic libraries and make any requests to determine\n // ad policies for a video during this time.\n timeout: 5000,\n\n // maximum amount of time in ms to wait for the ad implementation to start\n // linear ad mode after `readyforpreroll` has fired. This is in addition to\n // the standard timeout.\n prerollTimeout: 100,\n\n // maximum amount of time in ms to wait for the ad implementation to start\n // linear ad mode after `contentended` has fired.\n postrollTimeout: 100,\n\n // when truthy, instructs the plugin to output additional information about\n // plugin state to the video.js log. On most devices, the video.js log is\n // the same as the developer console.\n debug: false,\n\n // set this to true when using ads that are part of the content video\n stitchedAds: false\n};\n\nvar contribAdsPlugin = function contribAdsPlugin(options) {\n\n var player = this; // eslint-disable-line consistent-this\n\n var settings = _video2.default.mergeOptions(defaults, options);\n\n // prefix all video element events during ad playback\n // if the video element emits ad-related events directly,\n // plugins that aren't ad-aware will break. prefixing allows\n // plugins that wish to handle ad events to do so while\n // avoiding the complexity for common usage\n var videoEvents = VIDEO_EVENTS.concat(['firstplay', 'loadedalldata', 'playing']);\n\n // Set up redispatching of player events\n player.on(videoEvents, _redispatch2.default);\n\n // \"vjs-has-started\" should be present at the end of a video. This makes sure it's\n // always there.\n player.on('ended', function () {\n if (!player.hasClass('vjs-has-started')) {\n player.addClass('vjs-has-started');\n }\n });\n\n // We now auto-play when an ad gets loaded if we're playing ads in the same video\n // element as the content.\n // The problem is that in IE11, we cannot play in addurationchange but in iOS8, we\n // cannot play from adcanplay.\n // This will prevent ad-integrations from needing to do this themselves.\n player.on(['addurationchange', 'adcanplay'], function () {\n if (player.currentSrc() === player.ads.snapshot.currentSrc) {\n return;\n }\n\n player.play();\n });\n\n player.on('nopreroll', function () {\n player.ads.nopreroll_ = true;\n });\n\n player.on('nopostroll', function () {\n player.ads.nopostroll_ = true;\n });\n\n // Remove ad-loading class when ad plays or when content plays (in case there was no ad)\n // If you remove this class too soon you can get a flash of content!\n player.on(['ads-ad-started', 'playing'], function () {\n player.removeClass('vjs-ad-loading');\n });\n\n // Replace the plugin constructor with the ad namespace\n player.ads = {\n state: 'content-set',\n disableNextSnapshotRestore: false,\n\n // This is set to true if the content has ended once. After that, the user can\n // seek backwards and replay content, but _contentHasEnded remains true.\n _contentHasEnded: false,\n\n VERSION: '4.2.0-5',\n\n reset: function reset() {\n player.ads.disableNextSnapshotRestore = false;\n player.ads._contentHasEnded = false;\n player.ads.snapshot = null;\n },\n\n\n // Call this when an ad response has been received and there are\n // linear ads ready to be played.\n startLinearAdMode: function startLinearAdMode() {\n if (player.ads.state === 'preroll?' || player.ads.state === 'content-playback' || player.ads.state === 'postroll?') {\n player.trigger('adstart');\n }\n },\n\n\n // Call this when a linear ad pod has finished playing.\n endLinearAdMode: function endLinearAdMode() {\n if (player.ads.state === 'ad-playback' || player.ads.state === 'preroll?') {\n // In the case of an empty ad response, we want to make sure that\n // the vjs-ad-loading class is always removed. We could probably check for\n // duration on adPlayer for an empty ad but we remove it here just to make sure\n player.removeClass('vjs-ad-loading');\n }\n if (player.ads.state === 'ad-playback') {\n player.trigger('adend');\n }\n if (player.ads.state === 'preroll?') {\n player.trigger('nopreroll');\n }\n },\n\n\n // Call this when an ad response has been received but there are no\n // linear ads to be played (i.e. no ads available, or overlays).\n // This has no effect if we are already in a linear ad mode. Always\n // use endLinearAdMode() to exit from linear ad-playback state.\n skipLinearAdMode: function skipLinearAdMode() {\n if (player.ads.state !== 'ad-playback') {\n player.trigger('adskip');\n }\n },\n stitchedAds: function stitchedAds(arg) {\n if (arg !== undefined) {\n this._stitchedAds = !!arg;\n }\n return this._stitchedAds;\n },\n\n\n // Returns whether the video element has been modified since the\n // snapshot was taken.\n // We test both src and currentSrc because changing the src attribute to a URL that\n // AdBlocker is intercepting doesn't update currentSrc.\n videoElementRecycled: function videoElementRecycled() {\n if (!this.snapshot) {\n throw new Error('You cannot use videoElementRecycled while there is no snapshot.');\n }\n\n var srcChanged = player.src() !== this.snapshot.src;\n var currentSrcChanged = player.currentSrc() !== this.snapshot.currentSrc;\n\n return srcChanged || currentSrcChanged;\n },\n\n\n // Returns a boolean indicating if given player is in live mode.\n // Can be replaced when this is fixed: https://github.com/videojs/video.js/issues/3262\n isLive: function isLive(somePlayer) {\n if (somePlayer.duration() === Infinity) {\n return true;\n } else if (_video2.default.browser.IOS_VERSION === '8' && somePlayer.duration() === 0) {\n return true;\n }\n return false;\n },\n\n\n // Return true if content playback should mute and continue during ad breaks.\n // This is only done during live streams on platforms where it's supported.\n // This improves speed and accuracy when returning from an ad break.\n shouldPlayContentBehindAd: function shouldPlayContentBehindAd(somePlayer) {\n return !settings.disablePlayContentBehindAd && !_video2.default.browser.IS_IOS && !_video2.default.browser.IS_ANDROID && somePlayer.duration() === Infinity;\n }\n };\n\n player.ads.stitchedAds(settings.stitchedAds);\n\n player.ads.cueTextTracks = cueTextTracks;\n player.ads.adMacroReplacement = _macros2.default.bind(player);\n\n // Start sending contentupdate events for this player\n (0, _contentupdate2.default)(player);\n\n // Global contentupdate handler for resetting plugin state\n player.on('contentupdate', player.ads.reset);\n\n // Ad Playback State Machine\n var states = {\n 'content-set': {\n events: {\n adscanceled: function adscanceled() {\n this.state = 'content-playback';\n },\n adsready: function adsready() {\n this.state = 'ads-ready';\n },\n play: function play() {\n this.state = 'ads-ready?';\n (0, _cancelContentPlay2.default)(player);\n // remove the poster so it doesn't flash between videos\n removeNativePoster(player);\n },\n adserror: function adserror() {\n this.state = 'content-playback';\n },\n adskip: function adskip() {\n this.state = 'content-playback';\n }\n }\n },\n 'ads-ready': {\n events: {\n play: function play() {\n this.state = 'preroll?';\n (0, _cancelContentPlay2.default)(player);\n },\n adskip: function adskip() {\n this.state = 'content-playback';\n },\n adserror: function adserror() {\n this.state = 'content-playback';\n }\n }\n },\n 'preroll?': {\n enter: function enter() {\n if (player.ads.nopreroll_) {\n // This will start the ads manager in case there are later ads\n player.trigger('readyforpreroll');\n\n // If we don't wait a tick, entering content-playback will cancel\n // cancelPlayTimeout, causing the video to not pause for the ad\n _window2.default.setTimeout(function () {\n // Don't wait for a preroll\n player.trigger('nopreroll');\n }, 1);\n } else {\n // change class to show that we're waiting on ads\n player.addClass('vjs-ad-loading');\n // schedule an adtimeout event to fire if we waited too long\n player.ads.adTimeoutTimeout = _window2.default.setTimeout(function () {\n player.trigger('adtimeout');\n }, settings.prerollTimeout);\n // signal to ad plugin that it's their opportunity to play a preroll\n player.trigger('readyforpreroll');\n }\n },\n leave: function leave() {\n _window2.default.clearTimeout(player.ads.adTimeoutTimeout);\n },\n\n events: {\n play: function play() {\n (0, _cancelContentPlay2.default)(player);\n },\n adstart: function adstart() {\n this.state = 'ad-playback';\n },\n adskip: function adskip() {\n this.state = 'content-playback';\n },\n adtimeout: function adtimeout() {\n this.state = 'content-playback';\n },\n adserror: function adserror() {\n this.state = 'content-playback';\n },\n nopreroll: function nopreroll() {\n this.state = 'content-playback';\n }\n }\n },\n 'ads-ready?': {\n enter: function enter() {\n player.addClass('vjs-ad-loading');\n player.ads.adTimeoutTimeout = _window2.default.setTimeout(function () {\n player.trigger('adtimeout');\n }, settings.timeout);\n },\n leave: function leave() {\n _window2.default.clearTimeout(player.ads.adTimeoutTimeout);\n player.removeClass('vjs-ad-loading');\n },\n\n events: {\n play: function play() {\n (0, _cancelContentPlay2.default)(player);\n },\n adscanceled: function adscanceled() {\n this.state = 'content-playback';\n },\n adsready: function adsready() {\n this.state = 'preroll?';\n },\n adskip: function adskip() {\n this.state = 'content-playback';\n },\n adtimeout: function adtimeout() {\n this.state = 'content-playback';\n },\n adserror: function adserror() {\n this.state = 'content-playback';\n }\n }\n },\n 'ad-playback': {\n enter: function enter() {\n // capture current player state snapshot (playing, currentTime, src)\n if (!player.ads.shouldPlayContentBehindAd(player)) {\n this.snapshot = snapshot.getPlayerSnapshot(player);\n }\n\n // Mute the player behind the ad\n if (player.ads.shouldPlayContentBehindAd(player)) {\n this.preAdVolume_ = player.volume();\n player.volume(0);\n }\n\n // add css to the element to indicate and ad is playing.\n player.addClass('vjs-ad-playing');\n\n // We should remove the vjs-live class if it has been added in order to\n // show the adprogress control bar on Android devices for falsely\n // determined LIVE videos due to the duration incorrectly reported as Infinity\n if (player.hasClass('vjs-live')) {\n player.removeClass('vjs-live');\n }\n\n // remove the poster so it doesn't flash between ads\n removeNativePoster(player);\n\n // We no longer need to supress play events once an ad is playing.\n // Clear it if we were.\n if (player.ads.cancelPlayTimeout) {\n // If we don't wait a tick, we could cancel the pause for cancelContentPlay,\n // resulting in content playback behind the ad\n _window2.default.setTimeout(function () {\n _window2.default.clearTimeout(player.ads.cancelPlayTimeout);\n player.ads.cancelPlayTimeout = null;\n }, 1);\n }\n },\n leave: function leave() {\n player.removeClass('vjs-ad-playing');\n\n // We should add the vjs-live class back if the video is a LIVE video\n // If we dont do this, then for a LIVE Video, we will get an incorrect\n // styled control, which displays the time for the video\n if (player.ads.isLive(player)) {\n player.addClass('vjs-live');\n }\n if (!player.ads.shouldPlayContentBehindAd(player)) {\n snapshot.restorePlayerSnapshot(player, this.snapshot);\n }\n\n // Reset the volume to pre-ad levels\n if (player.ads.shouldPlayContentBehindAd(player)) {\n player.volume(this.preAdVolume_);\n }\n },\n\n events: {\n adend: function adend() {\n this.state = 'content-resuming';\n },\n adserror: function adserror() {\n this.state = 'content-resuming';\n // Trigger 'adend' to notify that we are exiting 'ad-playback'\n player.trigger('adend');\n }\n }\n },\n 'content-resuming': {\n enter: function enter() {\n if (this._contentHasEnded) {\n _window2.default.clearTimeout(player.ads._fireEndedTimeout);\n // in some cases, ads are played in a swf or another video element\n // so we do not get an ended event in this state automatically.\n // If we don't get an ended event we can use, we need to trigger\n // one ourselves or else we won't actually ever end the current video.\n player.ads._fireEndedTimeout = _window2.default.setTimeout(function () {\n player.trigger('ended');\n }, 1000);\n }\n },\n leave: function leave() {\n _window2.default.clearTimeout(player.ads._fireEndedTimeout);\n },\n\n events: {\n contentupdate: function contentupdate() {\n this.state = 'content-set';\n },\n contentresumed: function contentresumed() {\n this.state = 'content-playback';\n },\n playing: function playing() {\n this.state = 'content-playback';\n },\n ended: function ended() {\n this.state = 'content-playback';\n }\n }\n },\n 'postroll?': {\n enter: function enter() {\n this.snapshot = snapshot.getPlayerSnapshot(player);\n if (player.ads.nopostroll_) {\n _window2.default.setTimeout(function () {\n // content-resuming happens after the timeout for backward-compatibility\n // with plugins that relied on a postrollTimeout before nopostroll was\n // implemented\n player.ads.state = 'content-resuming';\n player.trigger('ended');\n }, 1);\n } else {\n player.addClass('vjs-ad-loading');\n\n player.ads.adTimeoutTimeout = _window2.default.setTimeout(function () {\n player.trigger('adtimeout');\n }, settings.postrollTimeout);\n }\n },\n leave: function leave() {\n _window2.default.clearTimeout(player.ads.adTimeoutTimeout);\n player.removeClass('vjs-ad-loading');\n },\n\n events: {\n adstart: function adstart() {\n this.state = 'ad-playback';\n },\n adskip: function adskip() {\n this.state = 'content-resuming';\n _window2.default.setTimeout(function () {\n player.trigger('ended');\n }, 1);\n },\n adtimeout: function adtimeout() {\n this.state = 'content-resuming';\n _window2.default.setTimeout(function () {\n player.trigger('ended');\n }, 1);\n },\n adserror: function adserror() {\n this.state = 'content-resuming';\n _window2.default.setTimeout(function () {\n player.trigger('ended');\n }, 1);\n },\n contentupdate: function contentupdate() {\n this.state = 'ads-ready?';\n }\n }\n },\n 'content-playback': {\n enter: function enter() {\n // make sure that any cancelPlayTimeout is cleared\n if (player.ads.cancelPlayTimeout) {\n _window2.default.clearTimeout(player.ads.cancelPlayTimeout);\n player.ads.cancelPlayTimeout = null;\n }\n\n // This was removed because now that \"playing\" is fixed to only play after\n // preroll, any integration should just use the \"playing\" event. However,\n // we found out some 3rd party code relied on this event, so we've temporarily\n // added it back in to give people more time to update their code.\n player.trigger({\n type: 'contentplayback',\n triggerevent: player.ads.triggerevent\n });\n\n // Play the content\n if (player.ads.cancelledPlay) {\n player.ads.cancelledPlay = false;\n if (player.paused()) {\n player.play();\n }\n }\n },\n\n events: {\n // In the case of a timeout, adsready might come in late.\n // This assumes the behavior that if an ad times out, it could still\n // interrupt the content and start playing. An integration could\n // still decide to behave otherwise.\n adsready: function adsready() {\n player.trigger('readyforpreroll');\n },\n adstart: function adstart() {\n this.state = 'ad-playback';\n },\n contentupdate: function contentupdate() {\n // We know sources have changed, so we call CancelContentPlay\n // to avoid playback of video in the background of an ad. Playback Occurs on\n // Android devices if we do not call cancelContentPlay. This is because\n // the sources do not get updated in time on Android due to timing issues.\n // So instead of checking if the sources have changed in the play handler\n // and calling cancelContentPlay() there we call it here.\n // This does not happen on Desktop as the sources do get updated in time.\n if (!player.ads.shouldPlayContentBehindAd(player)) {\n (0, _cancelContentPlay2.default)(player);\n }\n if (player.paused()) {\n this.state = 'content-set';\n } else {\n this.state = 'ads-ready?';\n }\n },\n contentended: function contentended() {\n\n // If _contentHasEnded is true it means we already checked for postrolls and\n // played postrolls if needed, so now we're ready to send an ended event\n if (this._contentHasEnded) {\n // Causes ended event to trigger in content-resuming.enter.\n // From there, the ended event event is not redispatched.\n // Then we end up back in content-playback state.\n this.state = 'content-resuming';\n return;\n }\n\n this._contentHasEnded = true;\n this.state = 'postroll?';\n }\n }\n }\n };\n\n var processEvent = function processEvent(event) {\n\n var state = player.ads.state;\n\n // Execute the current state's handler for this event\n var eventHandlers = states[state].events;\n\n if (eventHandlers) {\n var handler = eventHandlers[event.type];\n\n if (handler) {\n handler.apply(player.ads);\n }\n }\n\n // If the state has changed...\n if (state !== player.ads.state) {\n var previousState = state;\n var newState = player.ads.state;\n\n // Record the event that caused the state transition\n player.ads.triggerevent = event.type;\n\n // Execute \"leave\" method for the previous state\n if (states[previousState].leave) {\n states[previousState].leave.apply(player.ads);\n }\n\n // Execute \"enter\" method for the new state\n if (states[newState].enter) {\n states[newState].enter.apply(player.ads);\n }\n\n // Debug log message for state changes\n if (settings.debug) {\n _video2.default.log('ads', player.ads.triggerevent + ' triggered: ' + previousState + ' -> ' + newState);\n }\n }\n };\n\n // Register our handler for the events that the state machine will process\n player.on(VIDEO_EVENTS.concat([\n // Events emitted by this plugin\n 'adtimeout', 'contentupdate', 'contentplaying', 'contentended', 'contentresumed',\n // Triggered by startLinearAdMode()\n 'adstart',\n // Triggered by endLinearAdMode()\n 'adend',\n // Triggered by skipLinearAdMode()\n 'adskip',\n\n // Events emitted by integrations\n 'adsready', 'adserror', 'adscanceled', 'nopreroll']), processEvent);\n\n // If we're autoplaying, the state machine will immidiately process\n // a synthetic play event\n if (!player.paused()) {\n processEvent({ type: 'play' });\n }\n};\n\n// Register this plugin with videojs\n_video2.default.plugin('ads', contribAdsPlugin);","'use strict';\n\nexports.__esModule = true;\nexports.default = redispatch;\n/*\nThe goal of this feature is to make player events work as an integrator would\nexpect despite the presense of ads. For example, an integrator would expect\nan `ended` event to happen once the content is ended. If an `ended` event is sent\nas a result of an ad ending, that is a bug. The `redispatch` method should recognize\nsuch `ended` events and prefix them so they are sent as `adended`, and so on with\nall other player events.\n*/\n\n// Stop propogation for an event\nvar cancelEvent = function cancelEvent(player, event) {\n // Pretend we called stopImmediatePropagation because we want the native\n // element events to continue propagating\n event.isImmediatePropagationStopped = function () {\n return true;\n };\n event.cancelBubble = true;\n event.isPropagationStopped = function () {\n return true;\n };\n};\n\n// Stop propogation for an event, then send a new event with the type of the original\n// event with the given prefix added.\nvar prefixEvent = function prefixEvent(player, prefix, event) {\n cancelEvent(player, event);\n player.trigger({\n type: prefix + event.type,\n state: player.ads.state,\n originalEvent: event\n });\n};\n\n// Handle a player event, either by redispatching it with a prefix, or by\n// letting it go on its way without any meddling.\nfunction redispatch(event) {\n\n // We do a quick play/pause before we check for prerolls. This creates a \"playing\"\n // event. This conditional block prefixes that event so it's \"adplaying\" if it\n // happens while we're in the \"preroll?\" state. Not every browser is in the\n // \"preroll?\" state for this event, so the following browsers come through here:\n // * iPad\n // * iPhone\n // * Android\n // * Safari\n // This is too soon to check videoElementRecycled because there is no snapshot\n // yet. We rely on the coincidence that all browsers for which\n // videoElementRecycled would be true also happen to send their initial playing\n // event during \"preroll?\"\n if (event.type === 'playing' && this.ads.state === 'preroll?') {\n prefixEvent(this, 'ad', event);\n\n // Here we send \"adplaying\" for browsers that send their initial \"playing\" event\n // (caused by the the initial play/pause) during the \"ad-playback\" state.\n // The following browsers come through here:\n // * Chrome\n // * IE11\n // If the ad plays in the content tech (aka videoElementRecycled) there will be\n // another playing event when the ad starts. We check videoElementRecycled to\n // avoid a second adplaying event. Thankfully, at this point a snapshot exists\n // so we can safely check videoElementRecycled.\n } else if (event.type === 'playing' && this.ads.state === 'ad-playback' && !this.ads.videoElementRecycled()) {\n prefixEvent(this, 'ad', event);\n\n // If the ad takes a long time to load, \"playing\" caused by play/pause can happen\n // during \"ads-ready?\" instead of \"preroll?\" or \"ad-playback\", skipping the\n // other conditions that would normally catch it\n } else if (event.type === 'playing' && this.ads.state === 'ads-ready?') {\n prefixEvent(this, 'ad', event);\n\n // When an ad is playing in content tech, we would normally prefix\n // \"playing\" with \"ad\" to send \"adplaying\". However, when we did a play/pause\n // before the preroll, we already sent \"adplaying\". This condition prevents us\n // from sending another.\n } else if (event.type === 'playing' && this.ads.state === 'ad-playback' && this.ads.videoElementRecycled()) {\n cancelEvent(this, event);\n return;\n\n // When ad is playing in content tech, prefix everything with \"ad\".\n // This block catches many events such as emptied, play, timeupdate, and ended.\n } else if (this.ads.state === 'ad-playback') {\n if (this.ads.videoElementRecycled() || this.ads.stitchedAds()) {\n prefixEvent(this, 'ad', event);\n }\n\n // Send contentended if ended happens during content.\n // We will make sure an ended event is sent after postrolls.\n } else if (this.ads.state === 'content-playback' && event.type === 'ended') {\n prefixEvent(this, 'content', event);\n\n // Event prefixing during content resuming is complicated\n } else if (this.ads.state === 'content-resuming') {\n\n // This does not happen during normal circumstances. I wasn't able to reproduce\n // it, but the working theory is that it handles cases where restoring the\n // snapshot takes a long time, such as in iOS7 and older Firefox.\n if (this.ads.snapshot && this.currentSrc() !== this.ads.snapshot.currentSrc) {\n\n // Don't prefix `loadstart` event\n if (event.type === 'loadstart') {\n return;\n }\n\n // All other events get \"content\" prefix\n return prefixEvent(this, 'content', event);\n\n // Content resuming after postroll\n } else if (this.ads.snapshot && this.ads.snapshot.ended) {\n\n // Don't prefix `pause` and `ended` events\n // They don't always happen during content-resuming, but they might.\n // It seems to happen most often on iOS and Android.\n if (event.type === 'pause' || event.type === 'ended') {\n return;\n }\n\n // All other events get \"content\" prefix\n return prefixEvent(this, 'content', event);\n }\n\n // Content resuming after preroll or midroll\n // Events besides \"playing\" get \"content\" prefix\n if (event.type !== 'playing') {\n prefixEvent(this, 'content', event);\n }\n }\n}","'use strict';\n\nexports.__esModule = true;\nexports.getPlayerSnapshot = getPlayerSnapshot;\nexports.restorePlayerSnapshot = restorePlayerSnapshot;\n\nvar _window = require('global/window');\n\nvar _window2 = _interopRequireDefault(_window);\n\nvar _video = require('video.js');\n\nvar _video2 = _interopRequireDefault(_video);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Returns an object that captures the portions of player state relevant to\n * video playback. The result of this function can be passed to\n * restorePlayerSnapshot with a player to return the player to the state it\n * was in when this function was invoked.\n * @param {Object} player The videojs player object\n */\n/*\nThe snapshot feature is responsible for saving the player state before an ad, then\nrestoring the player state after an ad.\n*/\n\nfunction getPlayerSnapshot(player) {\n\n var currentTime = void 0;\n\n if (_video2.default.browser.IS_IOS && player.ads.isLive(player)) {\n // Record how far behind live we are\n if (player.seekable().length > 0) {\n currentTime = player.currentTime() - player.seekable().end(0);\n } else {\n currentTime = player.currentTime();\n }\n } else {\n currentTime = player.currentTime();\n }\n\n var tech = player.$('.vjs-tech');\n var remoteTracks = player.remoteTextTracks ? player.remoteTextTracks() : [];\n var tracks = player.textTracks ? player.textTracks() : [];\n var suppressedRemoteTracks = [];\n var suppressedTracks = [];\n var snapshotObject = {\n ended: player.ended(),\n currentSrc: player.currentSrc(),\n src: player.src(),\n currentTime: currentTime,\n type: player.currentType()\n };\n\n if (tech) {\n snapshotObject.nativePoster = tech.poster;\n snapshotObject.style = tech.getAttribute('style');\n }\n\n for (var i = 0; i < remoteTracks.length; i++) {\n var track = remoteTracks[i];\n\n suppressedRemoteTracks.push({\n track: track,\n mode: track.mode\n });\n track.mode = 'disabled';\n }\n snapshotObject.suppressedRemoteTracks = suppressedRemoteTracks;\n\n for (var _i = 0; _i < tracks.length; _i++) {\n var _track = tracks[_i];\n\n suppressedTracks.push({\n track: _track,\n mode: _track.mode\n });\n _track.mode = 'disabled';\n }\n snapshotObject.suppressedTracks = suppressedTracks;\n\n return snapshotObject;\n}\n\n/**\n * Attempts to modify the specified player so that its state is equivalent to\n * the state of the snapshot.\n * @param {Object} player - the videojs player object\n * @param {Object} snapshotObject - the player state to apply\n */\nfunction restorePlayerSnapshot(player, snapshotObject) {\n\n if (player.ads.disableNextSnapshotRestore === true) {\n player.ads.disableNextSnapshotRestore = false;\n return;\n }\n\n // The playback tech\n var tech = player.$('.vjs-tech');\n\n // the number of[ remaining attempts to restore the snapshot\n var attempts = 20;\n\n var suppressedRemoteTracks = snapshotObject.suppressedRemoteTracks;\n var suppressedTracks = snapshotObject.suppressedTracks;\n var trackSnapshot = void 0;\n var restoreTracks = function restoreTracks() {\n for (var i = 0; i < suppressedRemoteTracks.length; i++) {\n trackSnapshot = suppressedRemoteTracks[i];\n trackSnapshot.track.mode = trackSnapshot.mode;\n }\n\n for (var _i2 = 0; _i2 < suppressedTracks.length; _i2++) {\n trackSnapshot = suppressedTracks[_i2];\n trackSnapshot.track.mode = trackSnapshot.mode;\n }\n };\n\n // finish restoring the playback state\n var resume = function resume() {\n var currentTime = void 0;\n\n if (_video2.default.browser.IS_IOS && player.ads.isLive(player)) {\n if (snapshotObject.currentTime < 0) {\n // Playback was behind real time, so seek backwards to match\n if (player.seekable().length > 0) {\n currentTime = player.seekable().end(0) + snapshotObject.currentTime;\n } else {\n currentTime = player.currentTime();\n }\n player.currentTime(currentTime);\n }\n } else if (snapshotObject.ended) {\n player.currentTime(player.duration());\n } else {\n player.currentTime(snapshotObject.currentTime);\n }\n\n // Resume playback if this wasn't a postroll\n if (!snapshotObject.ended) {\n player.play();\n }\n };\n\n // determine if the video element has loaded enough of the snapshot source\n // to be ready to apply the rest of the state\n var tryToResume = function tryToResume() {\n\n // tryToResume can either have been called through the `contentcanplay`\n // event or fired through setTimeout.\n // When tryToResume is called, we should make sure to clear out the other\n // way it could've been called by removing the listener and clearing out\n // the timeout.\n player.off('contentcanplay', tryToResume);\n if (player.ads.tryToResumeTimeout_) {\n player.clearTimeout(player.ads.tryToResumeTimeout_);\n player.ads.tryToResumeTimeout_ = null;\n }\n\n // Tech may have changed depending on the differences in sources of the\n // original video and that of the ad\n tech = player.el().querySelector('.vjs-tech');\n\n if (tech.readyState > 1) {\n // some browsers and media aren't \"seekable\".\n // readyState greater than 1 allows for seeking without exceptions\n return resume();\n }\n\n if (tech.seekable === undefined) {\n // if the tech doesn't expose the seekable time ranges, try to\n // resume playback immediately\n return resume();\n }\n\n if (tech.seekable.length > 0) {\n // if some period of the video is seekable, resume playback\n return resume();\n }\n\n // delay a bit and then check again unless we're out of attempts\n if (attempts--) {\n _window2.default.setTimeout(tryToResume, 50);\n } else {\n try {\n resume();\n } catch (e) {\n _video2.default.log.warn('Failed to resume the content after an advertisement', e);\n }\n }\n };\n\n if (snapshotObject.nativePoster) {\n tech.poster = snapshotObject.nativePoster;\n }\n\n if ('style' in snapshotObject) {\n // overwrite all css style properties to restore state precisely\n tech.setAttribute('style', snapshotObject.style || '');\n }\n\n // Determine whether the player needs to be restored to its state\n // before ad playback began. With a custom ad display or burned-in\n // ads, the content player state hasn't been modified and so no\n // restoration is required\n\n if (player.ads.videoElementRecycled()) {\n // on ios7, fiddling with textTracks too early will cause safari to crash\n player.one('contentloadedmetadata', restoreTracks);\n\n // if the src changed for ad playback, reset it\n player.src({ src: snapshotObject.currentSrc, type: snapshotObject.type });\n // safari requires a call to `load` to pick up a changed source\n player.load();\n // and then resume from the snapshots time once the original src has loaded\n // in some browsers (firefox) `canplay` may not fire correctly.\n // Reace the `canplay` event with a timeout.\n player.one('contentcanplay', tryToResume);\n player.ads.tryToResumeTimeout_ = player.setTimeout(tryToResume, 2000);\n } else if (!player.ended() || !snapshotObject.ended) {\n // if we didn't change the src, just restore the tracks\n restoreTracks();\n // the src didn't change and this wasn't a postroll\n // just resume playback at the current time.\n player.play();\n }\n}","/**\n * @file add-text-track-data.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _holaOrgVideoJs = (typeof window !== \"undefined\" ? window['videojs'] : typeof global !== \"undefined\" ? global['videojs'] : null);\n\nvar _holaOrgVideoJs2 = _interopRequireDefault(_holaOrgVideoJs);\n\n/**\n * Define properties on a cue for backwards compatability,\n * but warn the user that the way that they are using it\n * is depricated and will be removed at a later date.\n *\n * @param {Cue} cue the cue to add the properties on\n * @private\n */\nvar deprecateOldCue = function deprecateOldCue(cue) {\n Object.defineProperties(cue.frame, {\n id: {\n get: function get() {\n _holaOrgVideoJs2['default'].log.warn('cue.frame.id is deprecated. Use cue.value.key instead.');\n return cue.value.key;\n }\n },\n value: {\n get: function get() {\n _holaOrgVideoJs2['default'].log.warn('cue.frame.value is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n },\n privateData: {\n get: function get() {\n _holaOrgVideoJs2['default'].log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n }\n });\n};\n\n/**\n * Add text track data to a source handler given the captions and\n * metadata from the buffer.\n *\n * @param {Object} sourceHandler the flash or virtual source buffer\n * @param {Array} captionArray an array of caption data\n * @param {Array} cue an array of meta data\n * @private\n */\nvar addTextTrackData = function addTextTrackData(sourceHandler, captionArray, metadataArray) {\n var Cue = window.WebKitDataCue || window.VTTCue;\n\n if (captionArray) {\n captionArray.forEach(function (caption) {\n this.inbandTextTrack_.addCue(new Cue(caption.startTime + this.timestampOffset, caption.endTime + this.timestampOffset, caption.text));\n }, sourceHandler);\n }\n\n if (metadataArray) {\n metadataArray.forEach(function (metadata) {\n var time = metadata.cueTime + this.timestampOffset;\n\n metadata.frames.forEach(function (frame) {\n var cue = new Cue(time, time, frame.value || frame.url || frame.data || '');\n\n cue.frame = frame;\n cue.value = frame;\n deprecateOldCue(cue);\n this.metadataTrack_.addCue(cue);\n }, this);\n }, sourceHandler);\n }\n};\n\nexports['default'] = addTextTrackData;\nmodule.exports = exports['default'];","/**\n * @file codec-utils.js\n */\n\n/**\n * Check if a codec string refers to an audio codec.\n *\n * @param {String} codec codec string to check\n * @return {Boolean} if this is an audio codec\n * @private\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nvar isAudioCodec = function isAudioCodec(codec) {\n return (/mp4a\\.\\d+.\\d+/i.test(codec)\n );\n};\n\n/**\n * Check if a codec string refers to a video codec.\n *\n * @param {String} codec codec string to check\n * @return {Boolean} if this is a video codec\n * @private\n */\nvar isVideoCodec = function isVideoCodec(codec) {\n return (/avc1\\.[\\da-f]+/i.test(codec)\n );\n};\n\n/**\n * Parse a content type header into a type and parameters\n * object\n *\n * @param {String} type the content type header\n * @return {Object} the parsed content-type\n * @private\n */\nvar parseContentType = function parseContentType(type) {\n var object = { type: '', parameters: {} };\n var parameters = type.trim().split(';');\n\n // first parameter should always be content-type\n object.type = parameters.shift().trim();\n parameters.forEach(function (parameter) {\n var pair = parameter.trim().split('=');\n\n if (pair.length > 1) {\n var _name = pair[0].replace(/\"/g, '').trim();\n var value = pair[1].replace(/\"/g, '').trim();\n\n object.parameters[_name] = value;\n }\n });\n\n return object;\n};\n\nexports['default'] = {\n isAudioCodec: isAudioCodec,\n parseContentType: parseContentType,\n isVideoCodec: isVideoCodec\n};\nmodule.exports = exports['default'];","/**\n * @file create-text-tracks-if-necessary.js\n */\n\n/**\n * Create text tracks on video.js if they exist on a segment.\n *\n * @param {Object} sourceBuffer the VSB or FSB\n * @param {Object} mediaSource the HTML or Flash media source\n * @param {Object} segment the segment that may contain the text track\n * @private\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nvar createTextTracksIfNecessary = function createTextTracksIfNecessary(sourceBuffer, mediaSource, segment) {\n // create an in-band caption track if one is present in the segment\n if (segment.captions && segment.captions.length && !sourceBuffer.inbandTextTrack_) {\n sourceBuffer.inbandTextTrack_ = mediaSource.player_.addTextTrack('captions', 'cc1');\n }\n\n if (segment.metadata && segment.metadata.length && !sourceBuffer.metadataTrack_) {\n sourceBuffer.metadataTrack_ = mediaSource.player_.addTextTrack('metadata', 'Timed Metadata');\n sourceBuffer.metadataTrack_.inBandMetadataTrackDispatchType = segment.metadata.dispatchType;\n }\n};\n\nexports['default'] = createTextTracksIfNecessary;\nmodule.exports = exports['default'];","/**\n * @file flash-constants.js\n */\n/**\n * The maximum size in bytes for append operations to the video.js\n * SWF. Calling through to Flash blocks and can be expensive so\n * we chunk data and pass through 4KB at a time, yielding to the\n * browser between chunks. This gives a theoretical maximum rate of\n * 1MB/s into Flash. Any higher and we begin to drop frames and UI\n * responsiveness suffers.\n *\n * @private\n */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar flashConstants = {\n // times in milliseconds\n TIME_BETWEEN_CHUNKS: 1,\n BYTES_PER_CHUNK: 1024 * 32\n};\n\nexports[\"default\"] = flashConstants;\nmodule.exports = exports[\"default\"];","/**\n * @file flash-media-source.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _holaOrgVideoJs = (typeof window !== \"undefined\" ? window['videojs'] : typeof global !== \"undefined\" ? global['videojs'] : null);\n\nvar _holaOrgVideoJs2 = _interopRequireDefault(_holaOrgVideoJs);\n\nvar _flashSourceBuffer = require('./flash-source-buffer');\n\nvar _flashSourceBuffer2 = _interopRequireDefault(_flashSourceBuffer);\n\nvar _flashConstants = require('./flash-constants');\n\nvar _flashConstants2 = _interopRequireDefault(_flashConstants);\n\nvar _codecUtils = require('./codec-utils');\n\n/**\n * A flash implmentation of HTML MediaSources and a polyfill\n * for browsers that don't support native or HTML MediaSources..\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource\n * @class FlashMediaSource\n * @extends videojs.EventTarget\n */\n\nvar FlashMediaSource = (function (_videojs$EventTarget) {\n _inherits(FlashMediaSource, _videojs$EventTarget);\n\n function FlashMediaSource() {\n var _this = this;\n\n _classCallCheck(this, FlashMediaSource);\n\n _get(Object.getPrototypeOf(FlashMediaSource.prototype), 'constructor', this).call(this);\n this.sourceBuffers = [];\n this.readyState = 'closed';\n\n this.on(['sourceopen', 'webkitsourceopen'], function (event) {\n // find the swf where we will push media data\n _this.swfObj = document.getElementById(event.swfId);\n _this.player_ = (0, _holaOrgVideoJs2['default'])(_this.swfObj.parentNode);\n _this.tech_ = _this.swfObj.tech;\n _this.readyState = 'open';\n\n _this.tech_.on('seeking', function () {\n var i = _this.sourceBuffers.length;\n\n while (i--) {\n _this.sourceBuffers[i].abort();\n }\n });\n\n // trigger load events\n if (_this.swfObj) {\n _this.swfObj.vjs_load();\n }\n });\n }\n\n /**\n * Set or return the presentation duration.\n *\n * @param {Double} value the duration of the media in seconds\n * @param {Double} the current presentation duration\n * @link http://www.w3.org/TR/media-source/#widl-MediaSource-duration\n */\n\n /**\n * We have this function so that the html and flash interfaces\n * are the same.\n *\n * @private\n */\n\n _createClass(FlashMediaSource, [{\n key: 'addSeekableRange_',\n value: function addSeekableRange_() {}\n // intentional no-op\n\n /**\n * Create a new flash source buffer and add it to our flash media source.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/addSourceBuffer\n * @param {String} type the content-type of the source\n * @return {Object} the flash source buffer\n */\n\n }, {\n key: 'addSourceBuffer',\n value: function addSourceBuffer(type) {\n var parsedType = (0, _codecUtils.parseContentType)(type);\n var sourceBuffer = undefined;\n\n // if this is an FLV type, we'll push data to flash\n if (parsedType.type === 'video/mp2t') {\n // Flash source buffers\n sourceBuffer = new _flashSourceBuffer2['default'](this);\n } else {\n throw new Error('NotSupportedError (Video.js)');\n }\n\n this.sourceBuffers.push(sourceBuffer);\n return sourceBuffer;\n }\n\n /**\n * Signals the end of the stream.\n *\n * @link https://w3c.github.io/media-source/#widl-MediaSource-endOfStream-void-EndOfStreamError-error\n * @param {String=} error Signals that a playback error\n * has occurred. If specified, it must be either \"network\" or\n * \"decode\".\n */\n }, {\n key: 'endOfStream',\n value: function endOfStream(error) {\n if (error === 'network') {\n // MEDIA_ERR_NETWORK\n this.tech_.error(2);\n } else if (error === 'decode') {\n // MEDIA_ERR_DECODE\n this.tech_.error(3);\n }\n if (this.readyState !== 'ended') {\n this.readyState = 'ended';\n this.swfObj.vjs_endOfStream();\n }\n }\n }]);\n\n return FlashMediaSource;\n})(_holaOrgVideoJs2['default'].EventTarget);\n\nexports['default'] = FlashMediaSource;\ntry {\n Object.defineProperty(FlashMediaSource.prototype, 'duration', {\n /**\n * Return the presentation duration.\n *\n * @return {Double} the duration of the media in seconds\n * @link http://www.w3.org/TR/media-source/#widl-MediaSource-duration\n */\n get: function get() {\n if (!this.swfObj) {\n return NaN;\n }\n // get the current duration from the SWF\n return this.swfObj.vjs_getProperty('duration');\n },\n /**\n * Set the presentation duration.\n *\n * @param {Double} value the duration of the media in seconds\n * @return {Double} the duration of the media in seconds\n * @link http://www.w3.org/TR/media-source/#widl-MediaSource-duration\n */\n set: function set(value) {\n var i = undefined;\n var oldDuration = this.swfObj.vjs_getProperty('duration');\n\n this.swfObj.vjs_setProperty('duration', value);\n\n if (value < oldDuration) {\n // In MSE, this triggers the range removal algorithm which causes\n // an update to occur\n for (i = 0; i < this.sourceBuffers.length; i++) {\n this.sourceBuffers[i].remove(value, oldDuration);\n }\n }\n\n return value;\n }\n });\n} catch (e) {\n // IE8 throws if defineProperty is called on a non-DOM node. We\n // don't support IE8 but we shouldn't throw an error if loaded\n // there.\n FlashMediaSource.prototype.duration = NaN;\n}\n\nfor (var property in _flashConstants2['default']) {\n FlashMediaSource[property] = _flashConstants2['default'][property];\n}\nmodule.exports = exports['default'];","/**\n * @file flash-source-buffer.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _holaOrgVideoJs = (typeof window !== \"undefined\" ? window['videojs'] : typeof global !== \"undefined\" ? global['videojs'] : null);\n\nvar _holaOrgVideoJs2 = _interopRequireDefault(_holaOrgVideoJs);\n\nvar _holaOrgMuxJs = require('@hola.org/mux.js');\n\nvar _holaOrgMuxJs2 = _interopRequireDefault(_holaOrgMuxJs);\n\nvar _removeCuesFromTrack = require('./remove-cues-from-track');\n\nvar _removeCuesFromTrack2 = _interopRequireDefault(_removeCuesFromTrack);\n\nvar _createTextTracksIfNecessary = require('./create-text-tracks-if-necessary');\n\nvar _createTextTracksIfNecessary2 = _interopRequireDefault(_createTextTracksIfNecessary);\n\nvar _addTextTrackData = require('./add-text-track-data');\n\nvar _addTextTrackData2 = _interopRequireDefault(_addTextTrackData);\n\nvar _flashConstants = require('./flash-constants');\n\nvar _flashConstants2 = _interopRequireDefault(_flashConstants);\n\n/**\n * A wrapper around the setTimeout function that uses\n * the flash constant time between ticks value.\n *\n * @param {Function} func the function callback to run\n * @private\n */\nvar scheduleTick = function scheduleTick(func) {\n // Chrome doesn't invoke requestAnimationFrame callbacks\n // in background tabs, so use setTimeout.\n window.setTimeout(func, _flashConstants2['default'].TIME_BETWEEN_CHUNKS);\n};\n\n/**\n * Generates a random string of max length 6\n *\n * @return {String} the randomly generated string\n * @function generateRandomString\n * @private\n */\nvar generateRandomString = function generateRandomString() {\n return Math.random().toString(36).slice(2, 8);\n};\n\n/**\n * Round a number to a specified number of places much like\n * toFixed but return a number instead of a string representation.\n *\n * @param {Number} num A number\n * @param {Number} places The number of decimal places which to\n * round\n * @private\n */\nvar toDecimalPlaces = function toDecimalPlaces(num, places) {\n if (typeof places !== 'number' || places < 0) {\n places = 0;\n }\n\n var scale = Math.pow(10, places);\n\n return Math.round(num * scale) / scale;\n};\n\nvar byteArrayToString = function byteArrayToString(buffer) {\n var CHUNK_SIZE = 8 * 1024;\n var str = '';\n\n if (buffer.length <= CHUNK_SIZE) {\n return String.fromCharCode.apply(null, buffer);\n }\n for (var i = 0; i < buffer.length; i += CHUNK_SIZE) {\n str += String.fromCharCode.apply(null, buffer.subarray(i, i + CHUNK_SIZE));\n }\n return str;\n};\n\n/**\n * A SourceBuffer implementation for Flash rather than HTML.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource\n * @param {Object} mediaSource the flash media source\n * @class FlashSourceBuffer\n * @extends videojs.EventTarget\n */\n\nvar FlashSourceBuffer = (function (_videojs$EventTarget) {\n _inherits(FlashSourceBuffer, _videojs$EventTarget);\n\n function FlashSourceBuffer(mediaSource) {\n var _this = this;\n\n _classCallCheck(this, FlashSourceBuffer);\n\n _get(Object.getPrototypeOf(FlashSourceBuffer.prototype), 'constructor', this).call(this);\n var encodedHeader = undefined;\n\n // Start off using the globally defined value but refine\n // as we append data into flash\n this.chunkSize_ = _flashConstants2['default'].BYTES_PER_CHUNK;\n\n // byte arrays queued to be appended\n this.buffer_ = [];\n\n // the total number of queued bytes\n this.bufferSize_ = 0;\n\n // to be able to determine the correct position to seek to, we\n // need to retain information about the mapping between the\n // media timeline and PTS values\n this.basePtsOffset_ = NaN;\n\n this.mediaSource = mediaSource;\n\n // indicates whether the asynchronous continuation of an operation\n // is still being processed\n // see https://w3c.github.io/media-source/#widl-SourceBuffer-updating\n this.updating = false;\n this.timestampOffset_ = 0;\n\n // TS to FLV transmuxer\n this.segmentParser_ = new _holaOrgMuxJs2['default'].flv.Transmuxer();\n this.segmentParser_.on('data', this.receiveBuffer_.bind(this));\n encodedHeader = window.btoa(String.fromCharCode.apply(null, Array.prototype.slice.call(this.segmentParser_.getFlvHeader())));\n\n var safePlayerId = this.mediaSource.player_.id().replace(/[^a-zA-Z0-9]/g, '_');\n\n this.flashEncodedHeaderName_ = 'vjs_flashEncodedHeader_' + safePlayerId + generateRandomString();\n this.flashEncodedDataName_ = 'vjs_flashEncodedData_' + safePlayerId + generateRandomString();\n\n window[this.flashEncodedHeaderName_] = function () {\n delete window[_this.flashEncodedHeaderName_];\n return encodedHeader;\n };\n\n this.mediaSource.swfObj.vjs_appendChunkReady(this.flashEncodedHeaderName_);\n\n Object.defineProperty(this, 'timestampOffset', {\n get: function get() {\n return this.timestampOffset_;\n },\n set: function set(val) {\n if (typeof val === 'number' && val >= 0) {\n this.timestampOffset_ = val;\n this.segmentParser_ = new _holaOrgMuxJs2['default'].flv.Transmuxer();\n this.segmentParser_.on('data', this.receiveBuffer_.bind(this));\n // We have to tell flash to expect a discontinuity\n this.mediaSource.swfObj.vjs_discontinuity();\n // the media <-> PTS mapping must be re-established after\n // the discontinuity\n this.basePtsOffset_ = NaN;\n }\n }\n });\n\n Object.defineProperty(this, 'buffered', {\n get: function get() {\n if (!this.mediaSource || !this.mediaSource.swfObj || !('vjs_getProperty' in this.mediaSource.swfObj)) {\n return _holaOrgVideoJs2['default'].createTimeRange();\n }\n\n var buffered = this.mediaSource.swfObj.vjs_getProperty('buffered');\n\n if (buffered && buffered.length) {\n buffered[0][0] = toDecimalPlaces(buffered[0][0], 3);\n buffered[0][1] = toDecimalPlaces(buffered[0][1], 3);\n }\n return _holaOrgVideoJs2['default'].createTimeRanges(buffered);\n }\n });\n\n // On a seek we remove all text track data since flash has no concept\n // of a buffered-range and everything else is reset on seek\n this.mediaSource.player_.on('seeked', function () {\n (0, _removeCuesFromTrack2['default'])(0, Infinity, _this.metadataTrack_);\n (0, _removeCuesFromTrack2['default'])(0, Infinity, _this.inbandTextTrack_);\n });\n }\n\n /**\n * Append bytes to the sourcebuffers buffer, in this case we\n * have to append it to swf object.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/appendBuffer\n * @param {Array} bytes\n */\n\n _createClass(FlashSourceBuffer, [{\n key: 'appendBuffer',\n value: function appendBuffer(bytes) {\n var _this2 = this;\n\n var error = undefined;\n var chunk = 512 * 1024;\n var i = 0;\n\n if (this.updating) {\n error = new Error('SourceBuffer.append() cannot be called ' + 'while an update is in progress');\n error.name = 'InvalidStateError';\n error.code = 11;\n throw error;\n }\n\n this.updating = true;\n this.mediaSource.readyState = 'open';\n this.trigger({ type: 'update' });\n\n // this is here to use recursion\n var chunkInData = function chunkInData() {\n _this2.segmentParser_.push(bytes.subarray(i, i + chunk));\n i += chunk;\n if (i < bytes.byteLength) {\n scheduleTick(chunkInData);\n } else {\n scheduleTick(_this2.segmentParser_.flush.bind(_this2.segmentParser_));\n }\n };\n\n chunkInData();\n }\n\n /**\n * Reset the parser and remove any data queued to be sent to the SWF.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/abort\n */\n }, {\n key: 'abort',\n value: function abort() {\n this.buffer_ = [];\n this.bufferSize_ = 0;\n this.mediaSource.swfObj.vjs_abort();\n\n // report any outstanding updates have ended\n if (this.updating) {\n this.updating = false;\n this.trigger({ type: 'updateend' });\n }\n }\n\n /**\n * Flash cannot remove ranges already buffered in the NetStream\n * but seeking clears the buffer entirely. For most purposes,\n * having this operation act as a no-op is acceptable.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/remove\n * @param {Double} start start of the section to remove\n * @param {Double} end end of the section to remove\n */\n }, {\n key: 'remove',\n value: function remove(start, end) {\n (0, _removeCuesFromTrack2['default'])(start, end, this.metadataTrack_);\n (0, _removeCuesFromTrack2['default'])(start, end, this.inbandTextTrack_);\n this.trigger({ type: 'update' });\n this.trigger({ type: 'updateend' });\n }\n\n /**\n * Receive a buffer from the flv.\n *\n * @param {Object} segment\n * @private\n */\n }, {\n key: 'receiveBuffer_',\n value: function receiveBuffer_(segment) {\n var _this3 = this;\n\n // create an in-band caption track if one is present in the segment\n (0, _createTextTracksIfNecessary2['default'])(this, this.mediaSource, segment);\n (0, _addTextTrackData2['default'])(this, segment.captions, segment.metadata);\n\n // Do this asynchronously since convertTagsToData_ can be time consuming\n scheduleTick(function () {\n var flvBytes = _this3.convertTagsToData_(segment);\n\n if (_this3.buffer_.length === 0) {\n scheduleTick(_this3.processBuffer_.bind(_this3));\n }\n\n if (flvBytes) {\n _this3.buffer_.push(flvBytes);\n _this3.bufferSize_ += flvBytes.byteLength;\n }\n });\n }\n\n /**\n * Append a portion of the current buffer to the SWF.\n *\n * @private\n */\n }, {\n key: 'processBuffer_',\n value: function processBuffer_() {\n var _this4 = this;\n\n var chunkSize = _flashConstants2['default'].BYTES_PER_CHUNK;\n\n if (!this.buffer_.length) {\n if (this.updating !== false) {\n this.updating = false;\n this.trigger({ type: 'updateend' });\n }\n // do nothing if the buffer is empty\n return;\n }\n\n // concatenate appends up to the max append size\n var payload = new Uint8Array(Math.min(chunkSize, this.bufferSize_));\n var i = payload.byteLength;\n\n while (i) {\n var chunk = this.buffer_[0].subarray(0, i);\n\n payload.set(chunk, payload.byteLength - i);\n // requeue any bytes that won't make it this round\n if (chunk.byteLength < this.buffer_[0].byteLength) {\n this.buffer_[0] = this.buffer_[0].subarray(i);\n } else {\n this.buffer_.shift();\n }\n i -= chunk.byteLength;\n }\n this.bufferSize_ -= payload.byteLength;\n\n var b64str = window.btoa(byteArrayToString(payload));\n\n window[this.flashEncodedDataName_] = function () {\n // schedule another processBuffer to process any left over data or to\n // trigger updateend\n scheduleTick(_this4.processBuffer_.bind(_this4));\n delete window[_this4.flashEncodedDataName_];\n return b64str;\n };\n\n // Notify the swf that segment data is ready to be appended\n this.mediaSource.swfObj.vjs_appendChunkReady(this.flashEncodedDataName_);\n }\n\n /**\n * Turns an array of flv tags into a Uint8Array representing the\n * flv data. Also removes any tags that are before the current\n * time so that playback begins at or slightly after the right\n * place on a seek\n *\n * @private\n * @param {Object} segmentData object of segment data\n */\n }, {\n key: 'convertTagsToData_',\n value: function convertTagsToData_(segmentData) {\n var segmentByteLength = 0;\n var tech = this.mediaSource.tech_;\n var targetPts = 0;\n var i = undefined;\n var j = undefined;\n var segment = undefined;\n var filteredTags = [];\n var tags = this.getOrderedTags_(segmentData);\n\n // Establish the media timeline to PTS translation if we don't\n // have one already\n if (isNaN(this.basePtsOffset_) && tags.length) {\n this.basePtsOffset_ = tags[0].pts;\n }\n\n // Trim any tags that are before the end of the end of\n // the current buffer\n if (tech.buffered().length) {\n targetPts = tech.buffered().end(0) - this.timestampOffset;\n }\n // Trim to currentTime if it's ahead of buffered or buffered doesn't exist\n targetPts = Math.max(targetPts, tech.currentTime() - this.timestampOffset);\n\n // PTS values are represented in milliseconds\n targetPts *= 1e3;\n targetPts += this.basePtsOffset_;\n\n // skip tags with a presentation time less than the seek target\n for (i = 0; i < tags.length; i++) {\n if (tags[i].pts >= targetPts) {\n filteredTags.push(tags[i]);\n }\n }\n\n if (filteredTags.length === 0) {\n return;\n }\n\n // concatenate the bytes into a single segment\n for (i = 0; i < filteredTags.length; i++) {\n segmentByteLength += filteredTags[i].bytes.byteLength;\n }\n segment = new Uint8Array(segmentByteLength);\n for (i = 0, j = 0; i < filteredTags.length; i++) {\n segment.set(filteredTags[i].bytes, j);\n j += filteredTags[i].bytes.byteLength;\n }\n\n return segment;\n }\n\n /**\n * Assemble the FLV tags in decoder order.\n *\n * @private\n * @param {Object} segmentData object of segment data\n */\n }, {\n key: 'getOrderedTags_',\n value: function getOrderedTags_(segmentData) {\n var videoTags = segmentData.tags.videoTags;\n var audioTags = segmentData.tags.audioTags;\n var tag = undefined;\n var tags = [];\n\n while (videoTags.length || audioTags.length) {\n if (!videoTags.length) {\n // only audio tags remain\n tag = audioTags.shift();\n } else if (!audioTags.length) {\n // only video tags remain\n tag = videoTags.shift();\n } else if (audioTags[0].dts < videoTags[0].dts) {\n // audio should be decoded next\n tag = audioTags.shift();\n } else {\n // video should be decoded next\n tag = videoTags.shift();\n }\n\n tags.push(tag.finalize());\n }\n\n return tags;\n }\n }]);\n\n return FlashSourceBuffer;\n})(_holaOrgVideoJs2['default'].EventTarget);\n\nexports['default'] = FlashSourceBuffer;\nmodule.exports = exports['default'];","/**\n * @file html-media-source.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _holaOrgVideoJs = (typeof window !== \"undefined\" ? window['videojs'] : typeof global !== \"undefined\" ? global['videojs'] : null);\n\nvar _holaOrgVideoJs2 = _interopRequireDefault(_holaOrgVideoJs);\n\nvar _virtualSourceBuffer = require('./virtual-source-buffer');\n\nvar _virtualSourceBuffer2 = _interopRequireDefault(_virtualSourceBuffer);\n\nvar _codecUtils = require('./codec-utils');\n\n/**\n * Replace the old apple-style `avc1.<dd>.<dd>` codec string with the standard\n * `avc1.<hhhhhh>`\n *\n * @param {Array} codecs an array of codec strings to fix\n * @return {Array} the translated codec array\n * @private\n */\nvar translateLegacyCodecs = function translateLegacyCodecs(codecs) {\n return codecs.map(function (codec) {\n return codec.replace(/avc1\\.(\\d+)\\.(\\d+)/i, function (orig, profile, avcLevel) {\n var profileHex = ('00' + Number(profile).toString(16)).slice(-2);\n var avcLevelHex = ('00' + Number(avcLevel).toString(16)).slice(-2);\n\n return 'avc1.' + profileHex + '00' + avcLevelHex;\n });\n });\n};\n\n/**\n * Our MediaSource implementation in HTML, mimics native\n * MediaSource where/if possible.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource\n * @class HtmlMediaSource\n * @extends videojs.EventTarget\n */\n\nvar HtmlMediaSource = (function (_videojs$EventTarget) {\n _inherits(HtmlMediaSource, _videojs$EventTarget);\n\n function HtmlMediaSource() {\n var _this = this;\n\n _classCallCheck(this, HtmlMediaSource);\n\n _get(Object.getPrototypeOf(HtmlMediaSource.prototype), 'constructor', this).call(this);\n var property = undefined;\n\n this.nativeMediaSource_ = new window.MediaSource();\n // delegate to the native MediaSource's methods by default\n for (property in this.nativeMediaSource_) {\n if (!(property in HtmlMediaSource.prototype) && typeof this.nativeMediaSource_[property] === 'function') {\n this[property] = this.nativeMediaSource_[property].bind(this.nativeMediaSource_);\n }\n }\n\n // emulate `duration` and `seekable` until seeking can be\n // handled uniformly for live streams\n // see https://github.com/w3c/media-source/issues/5\n this.duration_ = NaN;\n Object.defineProperty(this, 'duration', {\n get: function get() {\n if (this.duration_ === Infinity) {\n return this.duration_;\n }\n return this.nativeMediaSource_.duration;\n },\n set: function set(duration) {\n this.duration_ = duration;\n if (duration !== Infinity) {\n this.nativeMediaSource_.duration = duration;\n return;\n }\n }\n });\n Object.defineProperty(this, 'seekable', {\n get: function get() {\n if (this.duration_ === Infinity) {\n return _holaOrgVideoJs2['default'].createTimeRanges([[0, this.nativeMediaSource_.duration]]);\n }\n return this.nativeMediaSource_.seekable;\n }\n });\n\n Object.defineProperty(this, 'readyState', {\n get: function get() {\n return this.nativeMediaSource_.readyState;\n }\n });\n\n Object.defineProperty(this, 'activeSourceBuffers', {\n get: function get() {\n return this.activeSourceBuffers_;\n }\n });\n\n // the list of virtual and native SourceBuffers created by this\n // MediaSource\n this.sourceBuffers = [];\n\n this.activeSourceBuffers_ = [];\n\n /**\n * update the list of active source buffers based upon various\n * imformation from HLS and video.js\n *\n * @private\n */\n this.updateActiveSourceBuffers_ = function () {\n // Retain the reference but empty the array\n _this.activeSourceBuffers_.length = 0;\n\n // By default, the audio in the combined virtual source buffer is enabled\n // and the audio-only source buffer (if it exists) is disabled.\n var combined = false;\n var audioOnly = true;\n\n // TODO: maybe we can store the sourcebuffers on the track objects?\n // safari may do something like this\n for (var i = 0; i < _this.player_.audioTracks().length; i++) {\n var track = _this.player_.audioTracks()[i];\n\n if (track.enabled && track.kind !== 'main') {\n // The enabled track is an alternate audio track so disable the audio in\n // the combined source buffer and enable the audio-only source buffer.\n combined = true;\n audioOnly = false;\n break;\n }\n }\n\n // Since we currently support a max of two source buffers, add all of the source\n // buffers (in order).\n _this.sourceBuffers.forEach(function (sourceBuffer) {\n /* eslinst-disable */\n // TODO once codecs are required, we can switch to using the codecs to determine\n // what stream is the video stream, rather than relying on videoTracks\n /* eslinst-enable */\n\n if (sourceBuffer.videoCodec_ && sourceBuffer.audioCodec_) {\n // combined\n sourceBuffer.audioDisabled_ = combined;\n } else if (sourceBuffer.videoCodec_ && !sourceBuffer.audioCodec_) {\n // If the \"combined\" source buffer is video only, then we do not want\n // disable the audio-only source buffer (this is mostly for demuxed\n // audio and video hls)\n sourceBuffer.audioDisabled_ = true;\n audioOnly = false;\n } else if (!sourceBuffer.videoCodec_ && sourceBuffer.audioCodec_) {\n // audio only\n sourceBuffer.audioDisabled_ = audioOnly;\n if (audioOnly) {\n return;\n }\n }\n\n _this.activeSourceBuffers_.push(sourceBuffer);\n });\n };\n\n // Re-emit MediaSource events on the polyfill\n ['sourceopen', 'sourceclose', 'sourceended'].forEach(function (eventName) {\n this.nativeMediaSource_.addEventListener(eventName, this.trigger.bind(this));\n }, this);\n\n // capture the associated player when the MediaSource is\n // successfully attached\n this.on('sourceopen', function (event) {\n // Get the player this MediaSource is attached to\n var video = document.querySelector('[src=\"' + _this.url_ + '\"]');\n\n if (!video) {\n return;\n }\n\n _this.player_ = (0, _holaOrgVideoJs2['default'])(video.parentNode);\n\n _this.player_.audioTracks().on('change', _this.updateActiveSourceBuffers_);\n _this.player_.audioTracks().on('addtrack', _this.updateActiveSourceBuffers_);\n _this.player_.audioTracks().on('removetrack', _this.updateActiveSourceBuffers_);\n });\n\n // explicitly terminate any WebWorkers that were created\n // by SourceHandlers\n this.on('sourceclose', function (event) {\n this.sourceBuffers.forEach(function (sourceBuffer) {\n if (sourceBuffer.transmuxer_) {\n sourceBuffer.transmuxer_.terminate();\n }\n });\n this.sourceBuffers.length = 0;\n if (!this.player_) {\n return;\n }\n\n this.player_.audioTracks().off('change', this.updateActiveSourceBuffers_);\n this.player_.audioTracks().off('addtrack', this.updateActiveSourceBuffers_);\n this.player_.audioTracks().off('removetrack', this.updateActiveSourceBuffers_);\n });\n }\n\n /**\n * Add a range that that can now be seeked to.\n *\n * @param {Double} start where to start the addition\n * @param {Double} end where to end the addition\n * @private\n */\n\n _createClass(HtmlMediaSource, [{\n key: 'addSeekableRange_',\n value: function addSeekableRange_(start, end) {\n var error = undefined;\n\n if (this.duration !== Infinity) {\n error = new Error('MediaSource.addSeekableRange() can only be invoked ' + 'when the duration is Infinity');\n error.name = 'InvalidStateError';\n error.code = 11;\n throw error;\n }\n\n if (end > this.nativeMediaSource_.duration || isNaN(this.nativeMediaSource_.duration)) {\n this.nativeMediaSource_.duration = end;\n }\n }\n\n /**\n * Add a source buffer to the media source.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/addSourceBuffer\n * @param {String} type the content-type of the content\n * @return {Object} the created source buffer\n */\n }, {\n key: 'addSourceBuffer',\n value: function addSourceBuffer(type) {\n var buffer = undefined;\n var parsedType = (0, _codecUtils.parseContentType)(type);\n\n // Create a VirtualSourceBuffer to transmux MPEG-2 transport\n // stream segments into fragmented MP4s\n if (parsedType.type === 'video/mp2t') {\n var codecs = [];\n\n if (parsedType.parameters && parsedType.parameters.codecs) {\n codecs = parsedType.parameters.codecs.split(',');\n codecs = translateLegacyCodecs(codecs);\n // XXX alexeym: fix bug in firefox when audio codec begins from\n // whitespace character\n codecs = codecs.map(function (codec) {\n return codec.trim();\n });\n codecs = codecs.filter(function (codec) {\n return (0, _codecUtils.isAudioCodec)(codec) || (0, _codecUtils.isVideoCodec)(codec);\n });\n }\n\n if (codecs.length === 0) {\n codecs = ['avc1.4d400d', 'mp4a.40.2'];\n }\n\n buffer = new _virtualSourceBuffer2['default'](this, codecs);\n\n if (this.sourceBuffers.length !== 0) {\n // If another VirtualSourceBuffer already exists, then we are creating a\n // SourceBuffer for an alternate audio track and therefore we know that\n // the source has both an audio and video track.\n // That means we should trigger the manual creation of the real\n // SourceBuffers instead of waiting for the transmuxer to return data\n this.sourceBuffers[0].createRealSourceBuffers_();\n buffer.createRealSourceBuffers_();\n\n // Automatically disable the audio on the first source buffer if\n // a second source buffer is ever created\n this.sourceBuffers[0].audioDisabled_ = true;\n }\n } else {\n // delegate to the native implementation\n buffer = this.nativeMediaSource_.addSourceBuffer(type);\n }\n\n this.sourceBuffers.push(buffer);\n return buffer;\n }\n }]);\n\n return HtmlMediaSource;\n})(_holaOrgVideoJs2['default'].EventTarget);\n\nexports['default'] = HtmlMediaSource;\nmodule.exports = exports['default'];","/**\n * @file remove-cues-from-track.js\n */\n\n/**\n * Remove cues from a track on video.js.\n *\n * @param {Double} start start of where we should remove the cue\n * @param {Double} end end of where the we should remove the cue\n * @param {Object} track the text track to remove the cues from\n * @private\n */\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar removeCuesFromTrack = function removeCuesFromTrack(start, end, track) {\n var i = undefined;\n var cue = undefined;\n\n if (!track) {\n return;\n }\n\n i = track.cues.length;\n\n while (i--) {\n cue = track.cues[i];\n\n // Remove any overlapping cue\n if (cue.startTime <= end && cue.endTime >= start) {\n track.removeCue(cue);\n }\n }\n};\n\nexports[\"default\"] = removeCuesFromTrack;\nmodule.exports = exports[\"default\"];","/**\n * @file transmuxer-worker.js\n */\n\n/**\n * videojs-contrib-media-sources\n *\n * Copyright (c) 2015 Brightcove\n * All rights reserved.\n *\n * Handles communication between the browser-world and the mux.js\n * transmuxer running inside of a WebWorker by exposing a simple\n * message-based interface to a Transmuxer object.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _holaOrgMuxJs = require('@hola.org/mux.js');\n\nvar _holaOrgMuxJs2 = _interopRequireDefault(_holaOrgMuxJs);\n\n/**\n * Re-emits tranmsuxer events by converting them into messages to the\n * world outside the worker.\n *\n * @param {Object} transmuxer the transmuxer to wire events on\n * @private\n */\nvar wireTransmuxerEvents = function wireTransmuxerEvents(transmuxer) {\n transmuxer.on('data', function (segment) {\n // transfer ownership of the underlying ArrayBuffer\n // instead of doing a copy to save memory\n // ArrayBuffers are transferable but generic TypedArrays are not\n // @link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects)\n var typedArray = segment.data;\n\n segment.data = typedArray.buffer;\n postMessage({\n action: 'data',\n segment: segment,\n byteOffset: typedArray.byteOffset,\n byteLength: typedArray.byteLength\n }, [segment.data]);\n });\n\n if (transmuxer.captionStream) {\n transmuxer.captionStream.on('data', function (caption) {\n postMessage({\n action: 'caption',\n data: caption\n });\n });\n }\n\n transmuxer.on('done', function (data) {\n postMessage({ action: 'done' });\n });\n};\n\n/**\n * All incoming messages route through this hash. If no function exists\n * to handle an incoming message, then we ignore the message.\n *\n * @class MessageHandlers\n * @param {Object} options the options to initialize with\n */\n\nvar MessageHandlers = (function () {\n function MessageHandlers(options) {\n _classCallCheck(this, MessageHandlers);\n\n this.options = options || {};\n this.init();\n }\n\n /**\n * Our web wroker interface so that things can talk to mux.js\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n *\n * @param {Object} self the scope for the web worker\n */\n\n /**\n * initialize our web worker and wire all the events.\n */\n\n _createClass(MessageHandlers, [{\n key: 'init',\n value: function init() {\n if (this.transmuxer) {\n this.transmuxer.dispose();\n }\n this.transmuxer = new _holaOrgMuxJs2['default'].mp4.Transmuxer(this.options);\n wireTransmuxerEvents(this.transmuxer);\n }\n\n /**\n * Adds data (a ts segment) to the start of the transmuxer pipeline for\n * processing.\n *\n * @param {ArrayBuffer} data data to push into the muxer\n */\n }, {\n key: 'push',\n value: function push(data) {\n // Cast array buffer to correct type for transmuxer\n var segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n\n this.transmuxer.push(segment);\n }\n\n /**\n * Recreate the transmuxer so that the next segment added via `push`\n * start with a fresh transmuxer.\n */\n }, {\n key: 'reset',\n value: function reset() {\n this.init();\n }\n\n /**\n * Set the value that will be used as the `baseMediaDecodeTime` time for the\n * next segment pushed in. Subsequent segments will have their `baseMediaDecodeTime`\n * set relative to the first based on the PTS values.\n *\n * @param {Object} data used to set the timestamp offset in the muxer\n */\n }, {\n key: 'setTimestampOffset',\n value: function setTimestampOffset(data) {\n var timestampOffset = data.timestampOffset || 0;\n\n this.transmuxer.setBaseMediaDecodeTime(Math.round(timestampOffset * 90000));\n }\n\n /**\n * Forces the pipeline to finish processing the last segment and emit it's\n * results.\n *\n * @param {Object} data event data, not really used\n */\n }, {\n key: 'flush',\n value: function flush(data) {\n this.transmuxer.flush();\n }\n }]);\n\n return MessageHandlers;\n})();\n\nvar Worker = function Worker(self) {\n self.onmessage = function (event) {\n if (event.data.action === 'init' && event.data.options) {\n this.messageHandlers = new MessageHandlers(event.data.options);\n return;\n }\n\n if (!this.messageHandlers) {\n this.messageHandlers = new MessageHandlers();\n }\n\n if (event.data && event.data.action && event.data.action !== 'init') {\n if (this.messageHandlers[event.data.action]) {\n this.messageHandlers[event.data.action](event.data);\n }\n }\n };\n};\n\nexports['default'] = function (self) {\n return new Worker(self);\n};\n\nmodule.exports = exports['default'];","/**\n * @file videojs-contrib-media-sources.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _flashMediaSource = require('./flash-media-source');\n\nvar _flashMediaSource2 = _interopRequireDefault(_flashMediaSource);\n\nvar _htmlMediaSource = require('./html-media-source');\n\nvar _htmlMediaSource2 = _interopRequireDefault(_htmlMediaSource);\n\nvar _holaOrgVideoJs = (typeof window !== \"undefined\" ? window['videojs'] : typeof global !== \"undefined\" ? global['videojs'] : null);\n\nvar _holaOrgVideoJs2 = _interopRequireDefault(_holaOrgVideoJs);\n\nvar urlCount = 0;\n\n// ------------\n// Media Source\n// ------------\n\nvar defaults = {\n // how to determine the MediaSource implementation to use. There\n // are three available modes:\n // - auto: use native MediaSources where available and Flash\n // everywhere else\n // - html5: always use native MediaSources\n // - flash: always use the Flash MediaSource polyfill\n mode: 'auto'\n};\n\n// store references to the media sources so they can be connected\n// to a video element (a swf object)\n// TODO: can we store this somewhere local to this module?\n_holaOrgVideoJs2['default'].mediaSources = {};\n\n/**\n * Provide a method for a swf object to notify JS that a\n * media source is now open.\n *\n * @param {String} msObjectURL string referencing the MSE Object URL\n * @param {String} swfId the swf id\n */\nvar open = function open(msObjectURL, swfId) {\n var mediaSource = _holaOrgVideoJs2['default'].mediaSources[msObjectURL];\n\n if (mediaSource) {\n mediaSource.trigger({ type: 'sourceopen', swfId: swfId });\n } else {\n throw new Error('Media Source not found (Video.js)');\n }\n};\n\n/**\n * Check to see if the native MediaSource object exists and supports\n * an MP4 container with both H.264 video and AAC-LC audio.\n *\n * @return {Boolean} if native media sources are supported\n */\nvar supportsNativeMediaSources = function supportsNativeMediaSources() {\n return !!window.MediaSource && !!window.MediaSource.isTypeSupported && window.MediaSource.isTypeSupported('video/mp4;codecs=\"avc1.4d400d,mp4a.40.2\"');\n};\n\n/**\n * An emulation of the MediaSource API so that we can support\n * native and non-native functionality such as flash and\n * video/mp2t videos. returns an instance of HtmlMediaSource or\n * FlashMediaSource depending on what is supported and what options\n * are passed in.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/MediaSource\n * @param {Object} options options to use during setup.\n */\nvar MediaSource = function MediaSource(options) {\n var settings = _holaOrgVideoJs2['default'].mergeOptions(defaults, options);\n\n this.MediaSource = {\n open: open,\n supportsNativeMediaSources: supportsNativeMediaSources\n };\n\n // determine whether HTML MediaSources should be used\n if (settings.mode === 'html5' || settings.mode === 'auto' && supportsNativeMediaSources()) {\n return new _htmlMediaSource2['default']();\n }\n\n // otherwise, emulate them through the SWF\n return new _flashMediaSource2['default']();\n};\n\nexports.MediaSource = MediaSource;\nMediaSource.open = open;\nMediaSource.supportsNativeMediaSources = supportsNativeMediaSources;\n\n/**\n * A wrapper around the native URL for our MSE object\n * implementation, this object is exposed under videojs.URL\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/URL\n */\nvar URL = {\n /**\n * A wrapper around the native createObjectURL for our objects.\n * This function maps a native or emulated mediaSource to a blob\n * url so that it can be loaded into video.js\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n * @param {MediaSource} object the object to create a blob url to\n */\n createObjectURL: function createObjectURL(object) {\n var objectUrlPrefix = 'blob:vjs-media-source/';\n var url = undefined;\n\n // use the native MediaSource to generate an object URL\n if (object instanceof _htmlMediaSource2['default']) {\n url = window.URL.createObjectURL(object.nativeMediaSource_);\n object.url_ = url;\n return url;\n }\n // if the object isn't an emulated MediaSource, delegate to the\n // native implementation\n if (!(object instanceof _flashMediaSource2['default'])) {\n url = window.URL.createObjectURL(object);\n object.url_ = url;\n return url;\n }\n\n // build a URL that can be used to map back to the emulated\n // MediaSource\n url = objectUrlPrefix + urlCount;\n\n urlCount++;\n\n // setup the mapping back to object\n _holaOrgVideoJs2['default'].mediaSources[url] = object;\n\n return url;\n }\n};\n\nexports.URL = URL;\n_holaOrgVideoJs2['default'].MediaSource = MediaSource;\n_holaOrgVideoJs2['default'].URL = URL;","/**\n * @file virtual-source-buffer.js\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _holaOrgVideoJs = (typeof window !== \"undefined\" ? window['videojs'] : typeof global !== \"undefined\" ? global['videojs'] : null);\n\nvar _holaOrgVideoJs2 = _interopRequireDefault(_holaOrgVideoJs);\n\nvar _createTextTracksIfNecessary = require('./create-text-tracks-if-necessary');\n\nvar _createTextTracksIfNecessary2 = _interopRequireDefault(_createTextTracksIfNecessary);\n\nvar _removeCuesFromTrack = require('./remove-cues-from-track');\n\nvar _removeCuesFromTrack2 = _interopRequireDefault(_removeCuesFromTrack);\n\nvar _addTextTrackData = require('./add-text-track-data');\n\nvar _addTextTrackData2 = _interopRequireDefault(_addTextTrackData);\n\nvar _webworkify = require('webworkify');\n\nvar _webworkify2 = _interopRequireDefault(_webworkify);\n\nvar _transmuxerWorker = require('./transmuxer-worker');\n\nvar _transmuxerWorker2 = _interopRequireDefault(_transmuxerWorker);\n\nvar _codecUtils = require('./codec-utils');\n\n/**\n * VirtualSourceBuffers exist so that we can transmux non native formats\n * into a native format, but keep the same api as a native source buffer.\n * It creates a transmuxer, that works in its own thread (a web worker) and\n * that transmuxer muxes the data into a native format. VirtualSourceBuffer will\n * then send all of that data to the naive sourcebuffer so that it is\n * indestinguishable from a natively supported format.\n *\n * @param {HtmlMediaSource} mediaSource the parent mediaSource\n * @param {Array} codecs array of codecs that we will be dealing with\n * @class VirtualSourceBuffer\n * @extends video.js.EventTarget\n */\n\nvar VirtualSourceBuffer = (function (_videojs$EventTarget) {\n _inherits(VirtualSourceBuffer, _videojs$EventTarget);\n\n function VirtualSourceBuffer(mediaSource, codecs) {\n var _this = this;\n\n _classCallCheck(this, VirtualSourceBuffer);\n\n _get(Object.getPrototypeOf(VirtualSourceBuffer.prototype), 'constructor', this).call(this, _holaOrgVideoJs2['default'].EventTarget);\n this.timestampOffset_ = 0;\n this.pendingBuffers_ = [];\n this.bufferUpdating_ = false;\n this.mediaSource_ = mediaSource;\n this.codecs_ = codecs;\n this.audioCodec_ = null;\n this.videoCodec_ = null;\n this.audioDisabled_ = false;\n\n var options = {\n remux: false\n };\n\n this.codecs_.forEach(function (codec) {\n if ((0, _codecUtils.isAudioCodec)(codec)) {\n _this.audioCodec_ = codec;\n } else if ((0, _codecUtils.isVideoCodec)(codec)) {\n _this.videoCodec_ = codec;\n }\n });\n\n // append muxed segments to their respective native buffers as\n // soon as they are available\n this.transmuxer_ = (0, _webworkify2['default'])(_transmuxerWorker2['default']);\n this.transmuxer_.postMessage({ action: 'init', options: options });\n\n this.transmuxer_.onmessage = function (event) {\n if (event.data.action === 'data') {\n return _this.data_(event);\n }\n\n if (event.data.action === 'done') {\n return _this.done_(event);\n }\n };\n\n // this timestampOffset is a property with the side-effect of resetting\n // baseMediaDecodeTime in the transmuxer on the setter\n Object.defineProperty(this, 'timestampOffset', {\n get: function get() {\n return this.timestampOffset_;\n },\n set: function set(val) {\n if (typeof val === 'number' && val >= 0) {\n this.timestampOffset_ = val;\n\n // We have to tell the transmuxer to set the baseMediaDecodeTime to\n // the desired timestampOffset for the next segment\n this.transmuxer_.postMessage({\n action: 'setTimestampOffset',\n timestampOffset: val\n });\n }\n }\n });\n\n // setting the append window affects both source buffers\n Object.defineProperty(this, 'appendWindowStart', {\n get: function get() {\n return (this.videoBuffer_ || this.audioBuffer_).appendWindowStart;\n },\n set: function set(start) {\n if (this.videoBuffer_) {\n this.videoBuffer_.appendWindowStart = start;\n }\n if (this.audioBuffer_) {\n this.audioBuffer_.appendWindowStart = start;\n }\n }\n });\n\n // this buffer is \"updating\" if either of its native buffers are\n Object.defineProperty(this, 'updating', {\n get: function get() {\n return !!(this.bufferUpdating_ || !this.audioDisabled_ && this.audioBuffer_ && this.audioBuffer_.updating || this.videoBuffer_ && this.videoBuffer_.updating);\n }\n });\n\n // the buffered property is the intersection of the buffered\n // ranges of the native source buffers\n Object.defineProperty(this, 'buffered', {\n get: function get() {\n var start = null;\n var end = null;\n var arity = 0;\n var extents = [];\n var ranges = [];\n\n if (!this.videoBuffer_ && (this.audioDisabled_ || !this.audioBuffer_)) {\n return _holaOrgVideoJs2['default'].createTimeRange();\n }\n\n // Handle the case where we only have one buffer\n if (!this.videoBuffer_) {\n return this.audioBuffer_.buffered;\n } else if (this.audioDisabled_ || !this.audioBuffer_) {\n return this.videoBuffer_.buffered;\n }\n\n // Handle the case where there is no buffer data\n if ((!this.videoBuffer_ || this.videoBuffer_.buffered.length === 0) && (!this.audioBuffer_ || this.audioBuffer_.buffered.length === 0)) {\n return _holaOrgVideoJs2['default'].createTimeRange();\n }\n\n // Handle the case where we have both buffers and create an\n // intersection of the two\n var videoBuffered = this.videoBuffer_.buffered;\n var audioBuffered = this.audioBuffer_.buffered;\n var count = videoBuffered.length;\n\n // A) Gather up all start and end times\n while (count--) {\n extents.push({ time: videoBuffered.start(count), type: 'start' });\n extents.push({ time: videoBuffered.end(count), type: 'end' });\n }\n count = audioBuffered.length;\n while (count--) {\n extents.push({ time: audioBuffered.start(count), type: 'start' });\n extents.push({ time: audioBuffered.end(count), type: 'end' });\n }\n // B) Sort them by time\n extents.sort(function (a, b) {\n return a.time - b.time;\n });\n\n // C) Go along one by one incrementing arity for start and decrementing\n // arity for ends\n for (count = 0; count < extents.length; count++) {\n if (extents[count].type === 'start') {\n arity++;\n\n // D) If arity is ever incremented to 2 we are entering an\n // overlapping range\n if (arity === 2) {\n start = extents[count].time;\n }\n } else if (extents[count].type === 'end') {\n arity--;\n\n // E) If arity is ever decremented to 1 we leaving an\n // overlapping range\n if (arity === 1) {\n end = extents[count].time;\n }\n }\n\n // F) Record overlapping ranges\n if (start !== null && end !== null) {\n ranges.push([start, end]);\n start = null;\n end = null;\n }\n }\n\n return _holaOrgVideoJs2['default'].createTimeRanges(ranges);\n }\n });\n }\n\n /**\n * When we get a data event from the transmuxer\n * we call this function and handle the data that\n * was sent to us\n *\n * @private\n * @param {Event} event the data event from the transmuxer\n */\n\n _createClass(VirtualSourceBuffer, [{\n key: 'data_',\n value: function data_(event) {\n var segment = event.data.segment;\n\n // Cast ArrayBuffer to TypedArray\n segment.data = new Uint8Array(segment.data, event.data.byteOffset, event.data.byteLength);\n\n (0, _createTextTracksIfNecessary2['default'])(this, this.mediaSource_, segment);\n\n // Add the segments to the pendingBuffers array\n this.pendingBuffers_.push(segment);\n return;\n }\n\n /**\n * When we get a done event from the transmuxer\n * we call this function and we process all\n * of the pending data that we have been saving in the\n * data_ function\n *\n * @private\n * @param {Event} event the done event from the transmuxer\n */\n }, {\n key: 'done_',\n value: function done_(event) {\n // All buffers should have been flushed from the muxer\n // start processing anything we have received\n this.processPendingSegments_();\n return;\n }\n\n /**\n * Create our internal native audio/video source buffers and add\n * event handlers to them with the following conditions:\n * 1. they do not already exist on the mediaSource\n * 2. this VSB has a codec for them\n *\n * @private\n */\n }, {\n key: 'createRealSourceBuffers_',\n value: function createRealSourceBuffers_() {\n var _this2 = this;\n\n var types = ['audio', 'video'];\n\n types.forEach(function (type) {\n // Don't create a SourceBuffer of this type if we don't have a\n // codec for it\n if (!_this2[type + 'Codec_']) {\n return;\n }\n\n // Do nothing if a SourceBuffer of this type already exists\n if (_this2[type + 'Buffer_']) {\n return;\n }\n\n var buffer = null;\n\n // If the mediasource already has a SourceBuffer for the codec\n // use that\n if (_this2.mediaSource_[type + 'Buffer_']) {\n buffer = _this2.mediaSource_[type + 'Buffer_'];\n } else {\n buffer = _this2.mediaSource_.nativeMediaSource_.addSourceBuffer(type + '/mp4;codecs=\"' + _this2[type + 'Codec_'] + '\"');\n _this2.mediaSource_[type + 'Buffer_'] = buffer;\n }\n\n _this2[type + 'Buffer_'] = buffer;\n\n // Wire up the events to the SourceBuffer\n ['update', 'updatestart', 'updateend'].forEach(function (event) {\n buffer.addEventListener(event, function () {\n // if audio is disabled\n if (type === 'audio' && _this2.audioDisabled_) {\n return;\n }\n\n var shouldTrigger = types.every(function (t) {\n // skip checking audio's updating status if audio\n // is not enabled\n if (t === 'audio' && _this2.audioDisabled_) {\n return true;\n }\n // if the other type if updating we don't trigger\n if (type !== t && _this2[t + 'Buffer_'] && _this2[t + 'Buffer_'].updating) {\n return false;\n }\n return true;\n });\n\n if (shouldTrigger) {\n return _this2.trigger(event);\n }\n });\n });\n });\n }\n\n /**\n * Emulate the native mediasource function, but our function will\n * send all of the proposed segments to the transmuxer so that we\n * can transmux them before we append them to our internal\n * native source buffers in the correct format.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/appendBuffer\n * @param {Uint8Array} segment the segment to append to the buffer\n */\n }, {\n key: 'appendBuffer',\n value: function appendBuffer(segment) {\n // Start the internal \"updating\" state\n this.bufferUpdating_ = true;\n\n this.transmuxer_.postMessage({\n action: 'push',\n // Send the typed-array of data as an ArrayBuffer so that\n // it can be sent as a \"Transferable\" and avoid the costly\n // memory copy\n data: segment.buffer,\n\n // To recreate the original typed-array, we need information\n // about what portion of the ArrayBuffer it was a view into\n byteOffset: segment.byteOffset,\n byteLength: segment.byteLength\n }, [segment.buffer]);\n this.transmuxer_.postMessage({ action: 'flush' });\n }\n }, {\n key: 'pushBuffer',\n value: function pushBuffer(segment) {\n this.transmuxer_.postMessage({\n action: 'push',\n // Send the typed-array of data as an ArrayBuffer so that\n // it can be sent as a \"Transferable\" and avoid the costly\n // memory copy\n data: segment.buffer,\n\n // To recreate the original typed-array, we need information\n // about what portion of the ArrayBuffer it was a view into\n byteOffset: segment.byteOffset,\n byteLength: segment.byteLength\n }, [segment.buffer]);\n }\n }, {\n key: 'flushBuffer',\n value: function flushBuffer() {\n this.bufferUpdating_ = true;\n this.transmuxer_.postMessage({ action: 'flush' });\n }\n\n /**\n * Emulate the native mediasource function and remove parts\n * of the buffer from any of our internal buffers that exist\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/remove\n * @param {Double} start position to start the remove at\n * @param {Double} end position to end the remove at\n */\n }, {\n key: 'remove',\n value: function remove(start, end) {\n if (this.videoBuffer_) {\n this.videoBuffer_.remove(start, end);\n }\n if (!this.audioDisabled_ && this.audioBuffer_) {\n this.audioBuffer_.remove(start, end);\n }\n\n // Remove Metadata Cues (id3)\n (0, _removeCuesFromTrack2['default'])(start, end, this.metadataTrack_);\n\n // Remove Any Captions\n (0, _removeCuesFromTrack2['default'])(start, end, this.inbandTextTrack_);\n }\n\n /**\n * Process any segments that the muxer has output\n * Concatenate segments together based on type and append them into\n * their respective sourceBuffers\n *\n * @private\n */\n }, {\n key: 'processPendingSegments_',\n value: function processPendingSegments_() {\n var sortedSegments = {\n video: {\n segments: [],\n bytes: 0\n },\n audio: {\n segments: [],\n bytes: 0\n },\n captions: [],\n metadata: []\n };\n\n // Sort segments into separate video/audio arrays and\n // keep track of their total byte lengths\n sortedSegments = this.pendingBuffers_.reduce(function (segmentObj, segment) {\n var type = segment.type;\n var data = segment.data;\n\n segmentObj[type].segments.push(data);\n segmentObj[type].bytes += data.byteLength;\n\n // Gather any captions into a single array\n if (segment.captions) {\n segmentObj.captions = segmentObj.captions.concat(segment.captions);\n }\n\n if (segment.info) {\n segmentObj[type].info = segment.info;\n }\n\n // Gather any metadata into a single array\n if (segment.metadata) {\n segmentObj.metadata = segmentObj.metadata.concat(segment.metadata);\n }\n\n return segmentObj;\n }, sortedSegments);\n\n // Create the real source buffers if they don't exist by now since we\n // finally are sure what tracks are contained in the source\n if (!this.videoBuffer_ && !this.audioBuffer_) {\n // Remove any codecs that may have been specified by default but\n // are no longer applicable now\n if (sortedSegments.video.bytes === 0) {\n this.videoCodec_ = null;\n }\n if (sortedSegments.audio.bytes === 0) {\n this.audioCodec_ = null;\n }\n\n this.createRealSourceBuffers_();\n }\n\n if (sortedSegments.audio.info) {\n this.mediaSource_.trigger({ type: 'audioinfo', info: sortedSegments.audio.info });\n }\n if (sortedSegments.video.info) {\n this.mediaSource_.trigger({ type: 'videoinfo', info: sortedSegments.video.info });\n }\n\n // Merge multiple video and audio segments into one and append\n if (this.videoBuffer_) {\n this.concatAndAppendSegments_(sortedSegments.video, this.videoBuffer_);\n // TODO: are video tracks the only ones with text tracks?\n (0, _addTextTrackData2['default'])(this, sortedSegments.captions, sortedSegments.metadata);\n }\n if (!this.audioDisabled_ && this.audioBuffer_) {\n this.concatAndAppendSegments_(sortedSegments.audio, this.audioBuffer_);\n }\n\n this.pendingBuffers_.length = 0;\n\n // We are no longer in the internal \"updating\" state\n this.bufferUpdating_ = false;\n }\n\n /**\n * Combine all segments into a single Uint8Array and then append them\n * to the destination buffer\n *\n * @param {Object} segmentObj\n * @param {SourceBuffer} destinationBuffer native source buffer to append data to\n * @private\n */\n }, {\n key: 'concatAndAppendSegments_',\n value: function concatAndAppendSegments_(segmentObj, destinationBuffer) {\n var offset = 0;\n var tempBuffer = undefined;\n\n if (segmentObj.bytes) {\n tempBuffer = new Uint8Array(segmentObj.bytes);\n\n // Combine the individual segments into one large typed-array\n segmentObj.segments.forEach(function (segment) {\n tempBuffer.set(segment, offset);\n offset += segment.byteLength;\n });\n\n destinationBuffer.appendBuffer(tempBuffer);\n }\n }\n\n /**\n * Emulate the native mediasource function. abort any soureBuffer\n * actions and throw out any un-appended data.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer/abort\n */\n }, {\n key: 'abort',\n value: function abort() {\n if (this.videoBuffer_) {\n this.videoBuffer_.abort();\n }\n if (this.audioBuffer_) {\n this.audioBuffer_.abort();\n }\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({ action: 'reset' });\n }\n this.pendingBuffers_.length = 0;\n this.bufferUpdating_ = false;\n }\n }]);\n\n return VirtualSourceBuffer;\n})(_holaOrgVideoJs2['default'].EventTarget);\n\nexports['default'] = VirtualSourceBuffer;\nmodule.exports = exports['default'];","var bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn) {\n var keys = [];\n var wkey;\n var cacheKeys = Object.keys(cache);\n \n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n if (cache[key].exports === fn) {\n wkey = key;\n break;\n }\n }\n \n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n Function(['require','module','exports'], '(' + fn + ')(self)'),\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n \n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n Function(['require'],'require(' + stringify(wkey) + ')(self)'),\n scache\n ];\n \n var src = '(' + bundleFn + ')({'\n + Object.keys(sources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n \n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n \n return new Worker(URL.createObjectURL(\n new Blob([src], { type: 'text/javascript' })\n ));\n};\n","(function(window, vjs){\n'use strict';\n\n// helpers\n\nfunction add_css(url, ver){\n var link = document.createElement('link');\n link.setAttribute('rel', 'stylesheet');\n link.setAttribute('href', url+(ver ? '?'+ver : ''));\n document.getElementsByTagName('head')[0].appendChild(link);\n}\n\nfunction get_class_name(element){\n return element.className.split(/\\s+/g);\n}\n\nfunction add_class_name(element, class_name){\n var classes = get_class_name(element);\n if (classes.indexOf(class_name)==-1)\n {\n classes.push(class_name);\n element.className = classes.join(' ');\n return true;\n }\n return false;\n}\n\nfunction remove_class_name(element, class_name){\n var classes = get_class_name(element);\n var class_index = classes.indexOf(class_name);\n if (class_index>=0)\n {\n classes.splice(class_index, 1);\n element.className = classes.join(' ');\n }\n}\n\nfunction toggle_class_name(element, class_name, add){\n if (add)\n add_class_name(element, class_name);\n else\n remove_class_name(element, class_name);\n}\n\n// main skin code\n\nvar HolaSkin = function(video, opt){\n var _this = this;\n this.vjs = video;\n this.el = video.el();\n this.opt = opt;\n this.intv = 0;\n this.stagger = 5;\n this.steptotal = 5;\n this.classes_added = [];\n this.vjs.on('dispose', function(){ _this.dispose(); });\n this.vjs.on('ready', function(){ _this.init(); });\n this._resize = this.resize.bind(this);\n this.vjs.on('resize', this._resize);\n window.addEventListener('resize', this._resize);\n this.apply();\n this.resize();\n};\n\nHolaSkin.prototype.apply = function(){\n var c, classes = [this.opt.className];\n if (this.opt.show_controls_before_start)\n classes.push('vjs-show-controls-before-start');\n if (this.opt.show_time_for_live)\n classes.push('vjs-show-time-for-live');\n while ((c = classes.shift()))\n {\n if (add_class_name(this.el, c))\n this.classes_added.push(c);\n }\n};\n\nHolaSkin.prototype.resize = function(){\n if (!this.opt.no_vjs_large)\n toggle_class_name(this.el, 'vjs-large', this.el.offsetWidth>=768);\n toggle_class_name(this.el, 'vjs-small', this.el.offsetWidth<=480);\n};\n\n// play/pause curves and transform\nvar play1 = 'M 0,0 0,20 14,10 Z';\nvar play2 = 'M 0,0 0,20 0,10 Z';\nvar pause1 = 'M 0,0 0,0 0,20 0,20 M 0,0 0,0 0,20 0,20 Z';\nvar pause2 = 'M 0,0 5,0 5,20 0,20 M 9,0 14,0 14,20 9,20 Z';\nvar replay = '';\nvar morph_html = [\n '<svg height=\"3em\" width=\"3em\" viewBox=\"-13 -10 40 40\">',\n '<g id=\"move\">',\n '<g id=\"{morph}\">',\n '<path d=\"M 0,0 5,0 5,20 0,20 M 9,0 14,0 14,20 9,20 Z\"/>',\n '<path d=\"M 0,0 0,20 14,10 Z\"/>',\n // css transform doesn't work for svg in IE\n '<g class=\"replay\" transform=\"scale(0.45) translate(-20, -14)\">',\n '<g class=\"arrow\">',\n '<path class=\"st1\" d=\"M50,50.3c-3.6,3.5-8.5,5.7-14,5.7c-11,0-20-9-20-20s9-20,20-20s20,9,20,20\"/>',\n '<polygon class=\"st2\" points=\"64,36 48,36 56,46\"/>',\n '</g>',\n '</g>',\n '</g>',\n '</g>',\n '</svg>'].join('');\nvar umorph_html = [\n '<svg width=\"100%\" height=\"100%\" viewBox=\"-15 -10 40 40\">',\n '<use id=\"u{morph}\" xlink:href=\"#{morph}\" x=\"0\" y=\"0\"/>',\n '</svg>'].join('');\n\nvar volume_icon_svg = '<svg height=\"2.8em\" width=\"2.8em\" viewBox=\"-5 -7 30 30\">'\n +'<polygon points=\"4,5 4,5 0,5 0,11 4,11 4,11 8,16 8,0\"/>'\n +'<polygon class=\"volume-level-0\" points=\"11.5,4 10,5.5 12.5,8 10,10.5 11.5,12 14,9.5 16.5,12 18,10.5 15.5,8 18,5.5 16.5,4 14,6.5\"/>'\n +'<g>'\n +'<path class=\"volume-level-1\" d=\"M10,4.6v6.9c1.2-0.7,2-2,2-3.4S11.2,5.2,10,4.6z\"/>'\n +'<path class=\"volume-level-2\" d=\"M16,8c0-2.2-0.9-4.2-2.3-5.6L12,3.6c1.2,1.1,2,2.7,2,4.4c0,1.8-0.8,3.3-2,4.4l1.7,1.2C15.1,12.2,16,10.2,16,8z\"/>'\n +'<path class=\"volume-level-3\" d=\"M16.9,0l-1.6,1.2C17,3,18,5.4,18,8c0,2.6-1,5-2.7,6.8l1.6,1.2c1.9-2.1,3.1-4.9,3.1-8C20,4.9,18.8,2.1,16.9,0z\"/>'\n +'</g>'\n+'</svg>';\n\nvar gap_name = 'vjs-slider-gap';\nvar slider_gaps = '<div class=\"'+gap_name+'-left\"></div><div class=\"'+gap_name+'-right\"></div>';\n\nHolaSkin.prototype.set_play_button_state = function(btn_svg, state){\n if (this.play_state==state)\n return;\n var first_update = this.play_state===undefined;\n this.play_state = state;\n var intv = this.intv;\n var _this = this;\n var steptotal = this.steptotal;\n var stagger = this.stagger;\n function mk_transition(from, to, steps){\n return (function(){\n var start = isNaN(from) ? from : parseFloat(from);\n var delta = isNaN(from) ? '' : (parseFloat(to)-start)/\n parseFloat(steps);\n return (function(){ return start += delta; });\n }());\n }\n function mk_transform(from_path, to_path, steps){\n var path1pts = from_path.split(' ').slice(1, -1);\n var path2pts = to_path.split(' ').slice(1, -1);\n return (function(){\n var pathgen = path1pts.map(function(coord, index){\n return coord.split(',').map(function(fld, idx){\n return mk_transition(fld,\n path2pts[index].split(',')[idx], steps);\n });\n });\n return (function(){\n return pathgen.reduce(function(prev, curr){\n if (curr.length==1)\n return prev+' '+curr[0]();\n return prev+' '+curr.reduce(function(prv, crr){\n return prv()+','+crr();\n });\n }, 'M')+' Z';\n });\n }());\n }\n var umorph = document.getElementById('umorph_'+this.vjs.id());\n var bars = btn_svg.getElementsByTagName('path');\n var stepcnt = 0, stepcnt1 = 0;\n if (intv)\n clearInterval(intv);\n if (state=='ended')\n {\n umorph.setAttribute('transform', 'translate(-2, 0)');\n // XXX michaelg workaround: chrome sometimes won't re-render <use> tag\n // when the xlinked group is updated by css. This forces the update\n // by applying transform to one of the invisible elements of xlinked\n // group.\n var render_cnt = 5;\n var render_intv = setInterval(function(){\n bars[0].setAttribute('transform', 'rotate('+render_cnt+')');\n render_cnt--;\n if(render_cnt<0)\n clearInterval(render_intv);\n }, 100);\n // end workaround\n btn_svg.parentNode.setAttribute('transform', 'translate(0, 0)');\n bars[0].setAttribute('d', replay);\n bars[1].setAttribute('display', 'none');\n return;\n }\n bars[1].removeAttribute('display');\n var is_transformed = btn_svg.parentNode.getAttribute('transform');\n btn_svg.parentNode.removeAttribute('transform');\n umorph.removeAttribute('transform');\n // need to clear the attribute to avoid glitch with transition from\n // replay icon to animated pause icon\n if (is_transformed)\n bars[0].setAttribute('d', '');\n if (first_update)\n {\n bars[0].setAttribute('d', state=='paused' ? play1 : pause2);\n bars[1].setAttribute('d', state=='paused' ? pause1 : play2);\n return;\n }\n if (state=='paused')\n {\n var mk_path3 = mk_transform(play2, play1, steptotal);\n var mk_path4 = mk_transform(pause2, pause1, steptotal);\n this.intv = setInterval(function(){\n if (stepcnt < steptotal)\n bars[1].setAttribute('d', mk_path4());\n if (stepcnt >= stagger)\n bars[0].setAttribute('d', mk_path3());\n stepcnt++;\n if (stepcnt >= steptotal+stagger)\n {\n clearInterval(_this.intv);\n _this.intv = 0;\n }\n }, 20);\n return;\n }\n\n var mk_path1 = mk_transform(play1, play2, steptotal);\n var mk_path2 = mk_transform(pause1, pause2, steptotal);\n this.intv = setInterval(function(){\n if (stepcnt < steptotal)\n bars[0].setAttribute('d', mk_path1());\n if (stepcnt >= stagger)\n bars[1].setAttribute('d', mk_path2());\n stepcnt++;\n if (stepcnt >= steptotal+stagger)\n {\n clearInterval(_this.intv);\n _this.intv = 0;\n }\n }, 20);\n};\n\nHolaSkin.prototype.init = function(){\n var _this = this;\n var player = this.vjs;\n // play button special treatment: both buttons share a single shape\n // that's how it is morphed simultaneously\n if (!!this.opt.no_play_transform)\n {\n this.steptotal = 1;\n this.stagger = 0;\n }\n this.has_played = false;\n var play_button = player.controlBar.playToggle.el();\n play_button.insertAdjacentHTML('beforeend',\n morph_html.replace(/{morph}/g, 'morph_'+player.id()));\n player.bigPlayButton.el().insertAdjacentHTML('beforeend',\n umorph_html.replace(/{morph}/g, 'morph_'+player.id()));\n player.on('play', function(){\n _this.is_ended = false;\n _this.update_state(player);\n })\n .on('pause', function(){ _this.update_state(player); })\n .on('adend', function(){ _this.update_state(player); })\n .on('ended', function(){\n _this.is_ended = true;\n _this.update_state(player);\n })\n .on('seeking', function(){\n // hide replay button if it's not rewind to the start (cur time == 0)\n if (player.currentTime())\n {\n _this.is_ended = false;\n _this.has_played = true;\n }\n else\n _this.has_played = false;\n _this.update_state(player);\n })\n .on('timeupdate', function(val, t1, t2){\n var has_pos = !!player.currentTime();\n if (has_pos==_this.has_played)\n return;\n _this.has_played = has_pos;\n _this.update_state(player);\n });\n this.update_state(player);\n var volume_slider = player.controlBar.volumeMenuButton.volumeBar.el();\n volume_slider.insertAdjacentHTML('beforeend', slider_gaps);\n var progress_holder = player.controlBar.progressControl.seekBar.el();\n progress_holder.insertAdjacentHTML('beforeend', slider_gaps);\n};\n\nHolaSkin.prototype.update_state = function(player){\n var play_button = player.controlBar.playToggle.el();\n var big_play_button = player.bigPlayButton.el();\n var replay_classname = 'vjs-play-control-replay';\n toggle_class_name(play_button, replay_classname, this.is_ended);\n toggle_class_name(big_play_button, replay_classname, this.is_ended);\n toggle_class_name(player.el_, 'vjs-pos-ended',\n this.is_ended && this.has_played);\n toggle_class_name(player.el_, 'vjs-pos-started', this.has_played);\n this.set_play_button_state(document.getElementById('morph_'+player.id()),\n this.is_ended ? 'ended' : player.paused() ? 'paused' : 'playing');\n};\n\nHolaSkin.prototype.dispose = function(){\n while (this.classes_added.length)\n remove_class_name(this.el, this.classes_added.pop());\n window.removeEventListener('resize', this._resize);\n};\n\n// update some vjs controls\n\nvar MenuButton = vjs.getComponent('MenuButton');\nvar VolumeMenuButton = vjs.getComponent('VolumeMenuButton');\nVolumeMenuButton.prototype.createEl = function(){\n var el = MenuButton.prototype.createEl.call(this);\n\n var icon = this.icon_ = document.createElement('div');\n icon.setAttribute('class', 'vjs-button-icon');\n icon.innerHTML = volume_icon_svg;\n el.insertBefore(icon, el.firstChild);\n\n return el;\n};\n\nVolumeMenuButton.prototype.tooltipHandler = function(){\n return this.icon_;\n};\n\nvar Button = vjs.getComponent('Button');\nvar FullscreenToggle = vjs.getComponent('FullscreenToggle');\nFullscreenToggle.prototype.controlText_ = 'Full screen';\nFullscreenToggle.prototype.createEl = function(){\n var el = Button.prototype.createEl.call(this);\n\n var icon = this.icon_ = document.createElement('div');\n icon.setAttribute('class', 'vjs-button-icon');\n el.insertBefore(icon, el.firstChild);\n\n return el;\n};\nFullscreenToggle.prototype.updateHint = function(){\n if (this.player_.isFullscreen()) {\n this.controlText('Exit full screen');\n } else {\n this.controlText('Full screen');\n }\n};\n\nvar ControlsWatermark = vjs.extend(Button, {\n constructor: function(player, opt) {\n Button.apply(this, arguments);\n },\n createEl: function(){\n var opt = this.options_;\n var el = Button.prototype.createEl.apply(this, arguments);\n if (!opt.src)\n return el;\n var img = document.createElement('img');\n img.src = opt.src;\n el.appendChild(img);\n return el;\n },\n buildCSSClass: function() {\n var super_class = Button.prototype.buildCSSClass.apply(this, arguments);\n return 'vjs-controls-watermark '+super_class;\n }\n});\nvjs.registerComponent('ControlsWatermark', ControlsWatermark);\n\nvar SeekBar = vjs.getComponent('SeekBar');\nvar orig_createEl = SeekBar.prototype.createEl;\nSeekBar.prototype.createEl = function(){\n var el = orig_createEl.call(this);\n el.appendChild(vjs.createEl('div', {className: 'vjs-slider-padding'}));\n return el;\n};\n\nvar defaults = {\n className: 'vjs5-hola-skin',\n css: '/css/videojs-hola-skin.css',\n ver: 'ver={[version]}'\n};\n\n// VideoJS plugin register\n\nvjs.plugin('hola_skin', function(options){\n if (options === false)\n options = {css: false, className: false};\n var opt = vjs.mergeOptions(defaults, options);\n if (opt.css && (!options.className || options.css))\n add_css(opt.css, opt.ver);\n new HolaSkin(this, opt);\n});\n\n}(window, window.videojs));\n","/**\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * IMA SDK integration plugin for Video.js. For more information see\n * https://www.github.com/googleads/videojs-ima\n */\n\n(function(factory) {\n if (typeof define === 'function' && define['amd']) {\n define(['video.js', 'videojs-contrib-ads'], function(videojs){ factory(window, document, videojs) });\n } else if (typeof exports === 'object' && typeof module === 'object') {\n var vjs = (window.videojs);\n (null);\n factory(window, document, vjs);\n } else {\n factory(window, document, videojs);\n }\n})(function(window, document, videojs) {\n \"use strict\";\n\n var extend = function(obj) {\n var arg;\n var index;\n var key;\n for (index = 1; index < arguments.length; index++) {\n arg = arguments[index];\n for (key in arg) {\n if (arg.hasOwnProperty(key)) {\n obj[key] = arg[key];\n }\n }\n }\n return obj;\n };\n\n var ima_defaults = {\n debug: false,\n timeout: 5000,\n prerollTimeout: 100,\n adLabel: 'Advertisement',\n showControlsForJSAds: true\n };\n\n var eventTypes = (videojs.browser.IS_ANDROID || videojs.browser.IS_IOS) ? {\n click: 'touchend',\n mousedown: 'touchstart',\n mouseup: 'touchend',\n mousemove: 'touchmove'\n } : {\n click: 'click',\n mousedown: 'mousedown',\n mouseup: 'mouseup',\n mousemove: 'mousemove'\n };\n\n var init = function(options, readyCallback) {\n this.ima = new ImaPlugin(this, options, readyCallback);\n };\n\n var ImaPlugin = function(player, options, readyCallback) {\n this.player = player;\n\n /**\n * Assigns the unique id and class names to the given element as well as the style class\n * @param element\n * @param controlName\n * @private\n */\n var assignControlAttributes_ = function(element, controlName) {\n element.id = this.controlPrefix + controlName;\n element.className = this.controlPrefix + controlName + ' ' + controlName;\n }.bind(this);\n\n /**\n * Returns a regular expression to test a string for the given className\n * @param className\n * @returns {RegExp}\n * @private\n */\n var getClassRegexp_ = function(className){\n // Matches on\n // (beginning of string OR NOT word char)\n // classname\n // (negative lookahead word char OR end of string)\n return new RegExp('(^|[^A-Za-z-])' + className + '((?![A-Za-z-])|$)', 'gi');\n };\n\n /**\n * Adds a class to the given element if it doesn't already have the class\n * @param element\n * @param classToAdd\n * @private\n */\n var addClass_ = function(element, classToAdd){\n if(getClassRegexp_(classToAdd).test(element.className)){\n return element;\n }\n\n return element.className = element.className.trim() + ' ' + classToAdd;\n };\n\n /**\n * Removes a class from the given element if it has the given class\n * @param element\n * @param classToRemove\n * @private\n */\n var removeClass_ = function(element, classToRemove){\n var classRegexp = getClassRegexp_(classToRemove);\n\n if(!classRegexp.test(element.className)){\n return element;\n }\n\n return element.className = element.className.trim().replace(classRegexp, '');\n };\n\n /**\n * Creates the ad container passed to the IMA SDK.\n * @private\n */\n var createAdContainer_ = function() {\n // The adContainerDiv is the DOM of the element that will house\n // the ads and ad controls.\n this.vjsControls = this.player.getChild('controlBar');\n this.adContainerDiv =\n this.vjsControls.el().parentNode.appendChild(\n document.createElement('div'));\n assignControlAttributes_(this.adContainerDiv, 'ima-ad-container');\n this.adContainerDiv.style.position = \"absolute\";\n this.adContainerDiv.style.zIndex = 1111;\n this.adContainerDiv.addEventListener(\n 'mouseenter',\n showAdControls_,\n false);\n this.adContainerDiv.addEventListener(\n 'mouseleave',\n hideAdControls_,\n false);\n createControls_();\n this.adDisplayContainer =\n new google.ima.AdDisplayContainer(this.adContainerDiv, this.contentPlayer);\n }.bind(this);\n\n /**\n * Creates the controls for the ad.\n * @private\n */\n var createControls_ = function() {\n this.controlsDiv = document.createElement('div');\n assignControlAttributes_(this.controlsDiv, 'ima-controls-div');\n this.controlsDiv.style.width = '100%';\n this.countdownDiv = document.createElement('div');\n assignControlAttributes_(this.countdownDiv, 'ima-countdown-div');\n this.countdownDiv.innerHTML = this.settings.adLabel;\n this.countdownDiv.style.display = this.showCountdown ? 'block' : 'none';\n this.seekBarDiv = document.createElement('div');\n assignControlAttributes_(this.seekBarDiv, 'ima-seek-bar-div');\n this.seekBarDiv.style.width = '100%';\n this.progressDiv = document.createElement('div');\n assignControlAttributes_(this.progressDiv, 'ima-progress-div');\n this.playPauseDiv = document.createElement('div');\n assignControlAttributes_(this.playPauseDiv, 'ima-play-pause-div');\n // XXX alexeym: find a way to reuse existing control-bar from the player\n var play1 = 'M 0,0 0,20 14,10 Z';\n var play2 = 'M 0,0 0,0 0,20 0,20 M 0,0 0,0 0,20 0,20 Z';\n var pause1 = 'M 0,0 0,0 0,20 0,20 M 0,0 0,0 0,20 0,20 Z';\n var pause2 = 'M 0,0 5,0 5,20 0,20 M 9,0 14,0 14,20 9,20 Z';\n var playPauseIcon = '<svg class=\"%class%\" height=\"3em\" width=\"3em\" viewBox=\"-13 -10 40 40\" class=\"ima-play-icon\">'\n +'<g><g><path d=\"%d1%\"></path><path d=\"%d2%\"></path></g></g></svg>';\n var playIcon = playPauseIcon.replace('%class%', 'ima-play-icon')\n .replace('%d1%', play1).replace('%d2%', play2);\n var pauseIcon = playPauseIcon.replace('%class%', 'ima-pause-icon')\n .replace('%d1%', pause1).replace('%d2%', pause2);\n var playButtonInnerHTML = '<span class=\"vjs-control-text\">Play</span>'\n +'<div class=\"vjs-tooltip\">Play</div>'+playIcon+pauseIcon;\n this.playPauseDiv.innerHTML = playButtonInnerHTML;\n addClass_(this.playPauseDiv, 'vjs-play-control vjs-control vjs-button');\n addClass_(this.playPauseDiv, 'ima-playing');\n this.playPauseDiv.addEventListener(\n eventTypes.click,\n onAdPlayPauseClick_,\n false);\n this.muteDiv = document.createElement('div');\n assignControlAttributes_(this.muteDiv, 'ima-mute-div');\n var volumeButtonInnerHTML = '<div class=\"vjs-menu\"><div class=\"vjs-menu-content\">'\n +'<div class=\"vjs-volume-bar vjs-slider-bar vjs-slider vjs-slider-horizontal\">'\n +'<div class=\"vjs-volume-level\"><span class=\"vjs-control-text\"></span></div>'\n +'<div class=\"vjs-slider-gap-left\"></div><div class=\"vjs-slider-gap-right\"></div>'\n +'</div></div></div><div class=\"vjs-button-icon\">'\n +'<svg height=\"2.8em\" width=\"2.8em\" viewBox=\"-5 -7 30 30\">'\n +'<polygon points=\"4,5 4,5 0,5 0,11 4,11 4,11 8,16 8,0\"></polygon>'\n +'<polygon class=\"volume-level-0\" points=\"11.5,4 10,5.5 12.5,8 10,10.5 11.5,12 14,9.5 16.5,12 18,10.5 15.5,8 18,5.5 16.5,4 14,6.5\"></polygon>'\n +'<g><path class=\"volume-level-1\" d=\"M10,4.6v6.9c1.2-0.7,2-2,2-3.4S11.2,5.2,10,4.6z\"></path>'\n +'<path class=\"volume-level-2\" d=\"M16,8c0-2.2-0.9-4.2-2.3-5.6L12,3.6c1.2,1.1,2,2.7,2,4.4c0,1.8-0.8,3.3-2,4.4l1.7,1.2C15.1,12.2,16,10.2,16,8z\"></path>'\n +'<path class=\"volume-level-3\" d=\"M16.9,0l-1.6,1.2C17,3,18,5.4,18,8c0,2.6-1,5-2.7,6.8l1.6,1.2c1.9-2.1,3.1-4.9,3.1-8C20,4.9,18.8,2.1,16.9,0z\"></path>'\n +'</g></svg></div><span class=\"vjs-control-text\">Mute</span>'\n +'<div class=\"vjs-tooltip\">Mute</div>';\n this.muteDiv.innerHTML = volumeButtonInnerHTML;\n addClass_(this.muteDiv, 'vjs-volume-menu-button vjs-menu-button vjs-menu-button-inline vjs-control vjs-button vjs-volume-menu-button-horizontal');\n addClass_(this.muteDiv, 'ima-non-muted');\n var muteToggle = this.muteDiv.getElementsByClassName('vjs-button-icon')[0];\n muteToggle.addEventListener(\n eventTypes.click,\n onAdMuteClick_,\n false);\n this.sliderDiv = this.muteDiv.getElementsByClassName('vjs-volume-bar')[0]\n this.sliderDiv.addEventListener(\n eventTypes.mousedown,\n onAdVolumeSliderMouseDown_,\n false);\n this.sliderLevelDiv = this.muteDiv.getElementsByClassName('vjs-volume-level')[0]\n this.fullscreenDiv = document.createElement('div');\n assignControlAttributes_(this.fullscreenDiv, 'ima-fullscreen-div');\n var fullscreenToggleInnerHTML = '<div class=\"vjs-button-icon\"></div>'\n +'<span class=\"vjs-control-text\">Full screen</span>'\n +'<div class=\"vjs-tooltip\">Full screen</div></div>';\n this.fullscreenDiv.innerHTML = fullscreenToggleInnerHTML;\n addClass_(this.fullscreenDiv, 'vjs-fullscreen-control vjs-control vjs-button');\n addClass_(this.fullscreenDiv, 'ima-non-fullscreen');\n this.fullscreenDiv.addEventListener(\n eventTypes.click,\n onAdFullscreenClick_,\n false);\n var spacer = document.createElement('div');\n assignControlAttributes_(spacer, 'ima-controls-spacer');\n this.adContainerDiv.appendChild(this.controlsDiv);\n this.controlsDiv.appendChild(this.countdownDiv);\n this.controlsDiv.appendChild(this.seekBarDiv);\n this.controlsDiv.appendChild(this.playPauseDiv);\n this.controlsDiv.appendChild(this.muteDiv);\n this.controlsDiv.appendChild(spacer);\n this.controlsDiv.appendChild(this.fullscreenDiv);\n this.seekBarDiv.appendChild(this.progressDiv);\n }.bind(this);\n\n /**\n * Initializes the AdDisplayContainer. On mobile, this must be done as a\n * result of user action.\n */\n this.initializeAdDisplayContainer = function() {\n this.adDisplayContainerInitialized = true;\n this.adDisplayContainer.initialize();\n }.bind(this);\n\n /**\n * Creates the AdsRequest and request ads through the AdsLoader.\n */\n this.requestAds = function() {\n if (!this.adDisplayContainerInitialized) {\n this.adDisplayContainer.initialize();\n }\n var adsRequest = new google.ima.AdsRequest();\n if (this.settings.adTagUrl) {\n adsRequest.adTagUrl = this.settings.adTagUrl;\n } else {\n adsRequest.adsResponse = this.settings.adsResponse;\n }\n if (this.settings.forceNonLinearFullSlot) {\n adsRequest.forceNonLinearFullSlot = true;\n }\n\n adsRequest.linearAdSlotWidth = this.getPlayerWidth();\n adsRequest.linearAdSlotHeight = this.getPlayerHeight();\n adsRequest.nonLinearAdSlotWidth =\n this.settings.nonLinearWidth || this.getPlayerWidth();\n adsRequest.nonLinearAdSlotHeight =\n this.settings.nonLinearHeight || (this.getPlayerHeight() / 3);\n\n this.adsLoader.requestAds(adsRequest);\n }.bind(this);\n\n /**\n * Listener for the ADS_MANAGER_LOADED event. Creates the AdsManager,\n * sets up event listeners, and triggers the 'adsready' event for\n * videojs-ads-contrib.\n * @private\n */\n var onAdsManagerLoaded_ = function(adsManagerLoadedEvent) {\n this.adsManager = adsManagerLoadedEvent.getAdsManager(\n this.contentPlayheadTracker, this.adsRenderingSettings);\n\n this.adsManager.addEventListener(\n google.ima.AdErrorEvent.Type.AD_ERROR,\n onAdError_);\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.AD_BREAK_READY,\n onAdBreakReady_);\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,\n this.onContentPauseRequested_);\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,\n this.onContentResumeRequested_);\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.ALL_ADS_COMPLETED,\n onAllAdsCompleted_);\n\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.LOADED,\n onAdLoaded_);\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.STARTED,\n onAdStarted_);\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.CLICK,\n onAdPlayPauseClick_);\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.COMPLETE,\n this.onAdComplete_);\n this.adsManager.addEventListener(\n google.ima.AdEvent.Type.SKIPPED,\n this.onAdComplete_);\n var eventsMap = {\n 'load': google.ima.AdEvent.Type.LOADED,\n 'ad-started': google.ima.AdEvent.Type.STARTED,\n 'click': google.ima.AdEvent.Type.CLICK,\n 'ad-ended': google.ima.AdEvent.Type.COMPLETE,\n 'ad-skipped': google.ima.AdEvent.Type.SKIPPED,\n 'first-quartile': google.ima.AdEvent.Type.FIRST_QUARTILE,\n 'midpoint': google.ima.AdEvent.Type.MIDPOINT,\n 'third-quartile': google.ima.AdEvent.Type.THIRD_QUARTILE,\n 'impression': google.ima.AdEvent.Type.IMPRESSION,\n 'pause': google.ima.AdEvent.Type.PAUSED,\n 'play': google.ima.AdEvent.Type.RESUMED,\n 'mute': google.ima.AdEvent.Type.VOLUME_MUTED,\n };\n Object.keys(eventsMap).forEach(function(event){\n this.adsManager.addEventListener(eventsMap[event], function(){\n this.player.trigger('ads-'+event);\n }.bind(this));\n }.bind(this));\n\n if (!this.autoPlayAdBreaks) {\n try {\n var initWidth = this.getPlayerWidth();\n var initHeight = this.getPlayerHeight();\n this.adsManagerDimensions.width = initWidth;\n this.adsManagerDimensions.height = initHeight;\n this.adsManager.init(\n initWidth,\n initHeight,\n google.ima.ViewMode.NORMAL);\n this.adsManager.setVolume(this.player.muted() ? 0 : this.player.volume());\n updateVolumeIcon_();\n } catch (adError) {\n onAdError_(adError);\n }\n }\n\n var cuepoints = this.adsManager.getCuePoints();\n var foundpreroll = !cuepoints.length; // no playlist, just preroll\n var foundpostroll = false;;\n cuepoints.forEach(function(offset){\n if (!offset)\n foundpreroll = true;\n else if (offset==-1)\n foundpostroll = true;\n });\n if (!foundpreroll)\n this.player.trigger('nopreroll');\n if (!foundpostroll)\n this.player.trigger('nopostroll');\n if (cuepoints.length)\n this.player.trigger('ads-cuepoints', cuepoints);\n\n this.player.trigger('adsready');\n }.bind(this);\n\n /**\n * DEPRECATED: Use startFromReadyCallback\n * Start ad playback, or content video playback in the absence of a\n * pre-roll.\n */\n this.start = function() {\n window.console.log(\n 'WARNING: player.ima.start is deprecated. Use ' +\n 'player.ima.startFromReadyCallback instead.');\n };\n\n /**\n * Start ad playback, or content video playback in the absence of a\n * pre-roll. **NOTE**: This method only needs to be called if you provide\n * your own readyCallback as the second parameter to player.ima(). If you\n * only provide options and do not provide your own readyCallback,\n * **DO NOT** call this method. If you do provide your own readyCallback,\n * you should call this method in the last line of that callback. For more\n * info, see this method's usage in our advanced and playlist examples.\n */\n this.startFromReadyCallback = function() {\n if (this.autoPlayAdBreaks && this.adsManager) {\n try {\n this.adsManager.init(\n this.getPlayerWidth(),\n this.getPlayerHeight(),\n google.ima.ViewMode.NORMAL);\n this.adsManager.setVolume(this.player.muted() ? 0 : this.player.volume());\n updateVolumeIcon_();\n this.adsManager.start();\n } catch (adError) {\n onAdError_(adError);\n }\n }\n }.bind(this);\n\n /**\n * Listener for errors fired by the AdsLoader.\n * @param {google.ima.AdErrorEvent} event The error event thrown by the\n * AdsLoader. See\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdError.Type\n * @private\n */\n var onAdsLoaderError_ = function(event) {\n window.console.log('AdsLoader error: ' + event.getError());\n this.adContainerDiv.style.display = 'none';\n if (this.adsManager) {\n this.adsManager.destroy();\n }\n this.player.trigger({type: 'adserror', data: { AdError: event.getError(), AdErrorEvent: event }});\n }.bind(this);\n\n /**\n * Listener for errors thrown by the AdsManager.\n * @param {google.ima.AdErrorEvent} adErrorEvent The error event thrown by\n * the AdsManager.\n * @private\n */\n var onAdError_ = function(adErrorEvent) {\n var errorMessage = adErrorEvent.getError !== undefined ? adErrorEvent.getError() : adErrorEvent.stack;\n window.console.log('Ad error: ' + errorMessage);\n this.vjsControls.show();\n this.adsManager.destroy();\n this.adContainerDiv.style.display = 'none';\n this.player.trigger({ type: 'adserror', data: { AdError: errorMessage, AdErrorEvent: adErrorEvent }});\n }.bind(this);\n\n /**\n * Listener for AD_BREAK_READY. Passes event on to publisher's listener.\n * @param {google.ima.AdEvent} adEvent AdEvent thrown by the AdsManager.\n * @private\n */\n var onAdBreakReady_ = function(adEvent) {\n this.adBreakReadyListener(adEvent);\n }.bind(this);\n\n /**\n * Called by publishers in manual ad break playback mode to start an ad\n * break.\n */\n this.playAdBreak = function() {\n if (!this.autoPlayAdBreaks) {\n this.adsManager.start();\n }\n }.bind(this);\n\n /**\n * Pauses the content video and displays the ad container so ads can play.\n * @param {google.ima.AdEvent} adEvent The AdEvent thrown by the AdsManager.\n * @private\n */\n this.onContentPauseRequested_ = function(adEvent) {\n this.contentSource = this.player.currentSrc();\n this.player.off('contentended', this.localContentEndedListener);\n this.player.ads.startLinearAdMode();\n this.adContainerDiv.style.display = 'block';\n\n var contentType = adEvent.getAd().getContentType();\n if ((contentType === 'application/javascript') && !this.settings.showControlsForJSAds) {\n this.controlsDiv.style.display = 'none';\n } else {\n this.controlsDiv.style.display = 'flex';\n }\n\n this.vjsControls.hide();\n showPlayButton();\n this.player.pause();\n this.adsActive = true;\n this.adPlaying = true;\n }.bind(this);\n\n /**\n * Resumes content video and hides the ad container.\n * @param {google.ima.AdEvent} adEvent The AdEvent thrown by the AdsManager.\n * @private\n */\n this.onContentResumeRequested_ = function(adEvent) {\n this.contentResumeTimer = clearTimeout(this.contentResumeTimer);\n this.adsActive = false;\n this.adPlaying = false;\n this.player.on('contentended', this.localContentEndedListener);\n if (this.currentAd == null || // hide for post-roll only playlist\n this.currentAd.isLinear()) { // don't hide for non-linear ads\n this.adContainerDiv.style.display = 'none';\n }\n this.vjsControls.show();\n this.player.ads.endLinearAdMode();\n this.countdownDiv.innerHTML = '';\n }.bind(this);\n\n /**\n * Records that ads have completed and calls contentAndAdsEndedListeners\n * if content is also complete.\n * @param {google.ima.AdEvent} adEvent The AdEvent thrown by the AdsManager.\n * @private\n */\n var onAllAdsCompleted_ = function(adEvent) {\n this.allAdsCompleted = true;\n this.adContainerDiv.style.display = 'none';\n if (this.contentComplete == true) {\n if (this.contentPlayer.src && !/^blob:/.test(this.contentPlayer.src) &&\n this.contentPlayer.src != this.contentSource) {\n this.player.src(this.contentSource);\n }\n for (var index in this.contentAndAdsEndedListeners) {\n this.contentAndAdsEndedListeners[index]();\n }\n }\n }.bind(this);\n\n /**\n * Starts the content video when a non-linear ad is loaded.\n * @param {google.ima.AdEvent} adEvent The AdEvent thrown by the AdsManager.\n * @private\n */\n var onAdLoaded_ = function(adEvent) {\n if (!adEvent.getAd().isLinear()) {\n this.player.play();\n }\n }.bind(this);\n\n /**\n * Starts the interval timer to check the current ad time when an ad starts\n * playing.\n * @param {google.ima.AdEvent} adEvent The AdEvent thrown by the AdsManager.\n * @private\n */\n var onAdStarted_ = function(adEvent) {\n this.currentAd = adEvent.getAd();\n if (this.currentAd.isLinear()) {\n this.adTrackingTimer = setInterval(\n onAdPlayheadTrackerInterval_, 250);\n // Don't bump container when controls are shown\n removeClass_(this.adContainerDiv, 'bumpable-ima-ad-container');\n } else {\n // Bump container when controls are shown\n addClass_(this.adContainerDiv, 'bumpable-ima-ad-container');\n this.player.addClass('vjs-ima-non-linear');\n this.adContainerDiv.style.display = 'block';\n }\n }.bind(this);\n\n /**\n * Clears the interval timer for current ad time when an ad completes.\n * @param {google.ima.AdEvent} adEvent The AdEvent thrown by the AdsManager.\n * @private\n */\n this.onAdComplete_ = function(adEvent) {\n if (this.currentAd.isLinear()) {\n clearInterval(this.adTrackingTimer);\n var pod = this.currentAd.getAdPodInfo();\n if (pod && pod.getAdPosition()<pod.getTotalAds())\n return;\n // this is the final ad so we excpect ima sdk to trigger\n // CONTENT_RESUME_REQUESTED, but for some reason it isn't triggered\n // reliably on iOS, so we fake it\n this.contentResumeTimer = setTimeout(function(){\n this.onContentResumeRequested_(null);\n }.bind(this), 1000);\n } else {\n this.player.removeClass('vjs-ima-non-linear');\n }\n }.bind(this);\n\n /**\n * Gets the current time and duration of the ad and calls the method to\n * update the ad UI.\n * @private\n */\n var onAdPlayheadTrackerInterval_ = function() {\n var remainingTime = this.adsManager.getRemainingTime();\n var duration = this.currentAd.getDuration();\n var currentTime = duration - remainingTime;\n currentTime = currentTime > 0 ? currentTime : 0;\n var isPod = false;\n var totalAds = 0;\n var adPosition;\n if (this.currentAd.getAdPodInfo()) {\n isPod = true;\n adPosition = this.currentAd.getAdPodInfo().getAdPosition();\n totalAds = this.currentAd.getAdPodInfo().getTotalAds();\n }\n\n // Update countdown timer data\n var remainingMinutes = Math.floor(remainingTime / 60);\n var remainingSeconds = Math.floor(remainingTime % 60);\n if (remainingSeconds.toString().length < 2) {\n remainingSeconds = '0' + remainingSeconds;\n }\n var podCount = ': ';\n if (isPod && (totalAds > 1)) {\n podCount = ' (' + adPosition + ' of ' + totalAds + '): ';\n }\n this.countdownDiv.innerHTML =\n this.settings.adLabel + podCount +\n remainingMinutes + ':' + remainingSeconds;\n\n // Update UI\n var playProgressRatio = currentTime / duration;\n var playProgressPercent = playProgressRatio * 100;\n this.progressDiv.style.width = playProgressPercent + '%';\n }.bind(this);\n\n this.getPlayerWidth = function() {\n var retVal = parseInt(getComputedStyle(this.player.el()).width, 10) ||\n this.player.width();\n return retVal;\n }.bind(this);\n\n this.getPlayerHeight = function() {\n var retVal = parseInt(getComputedStyle(this.player.el()).height, 10) ||\n this.player.height();\n return retVal;\n }.bind(this);\n\n /**\n * Hides the ad controls on mouseout.\n * @private\n */\n var hideAdControls_ = function() {\n this.controlsDiv.style.height = '14px';\n this.playPauseDiv.style.display = 'none';\n this.muteDiv.style.display = 'none';\n this.sliderDiv.style.display = 'none';\n this.fullscreenDiv.style.display = 'none';\n }.bind(this);\n\n /**\n * Shows ad controls on mouseover.\n * @private\n */\n var showAdControls_ = function() {\n this.controlsDiv.style.height = '50px';\n this.playPauseDiv.style.display = 'block';\n this.muteDiv.style.display = 'block';\n this.sliderDiv.style.display = 'block';\n this.fullscreenDiv.style.display = 'block';\n }.bind(this);\n\n /**\n * Show pause and hide play button\n */\n var showPauseButton = function() {\n addClass_(this.playPauseDiv, 'ima-paused');\n removeClass_(this.playPauseDiv, 'ima-playing');\n }.bind(this);\n\n /**\n * Show play and hide pause button\n */\n var showPlayButton = function() {\n addClass_(this.playPauseDiv, 'ima-playing');\n removeClass_(this.playPauseDiv, 'ima-paused');\n }.bind(this);\n\n /**\n * Listener for clicks on the play/pause button during ad playback.\n * @private\n */\n var onAdPlayPauseClick_ = function() {\n if (this.adPlaying) {\n showPauseButton();\n this.adsManager.pause();\n this.adPlaying = false;\n } else {\n showPlayButton();\n this.adsManager.resume();\n this.adPlaying = true;\n }\n }.bind(this);\n\n /**\n * Listener for clicks on the mute button during ad playback.\n * @private\n */\n var onAdMuteClick_ = function() {\n if (this.adMuted) {\n addClass_(this.muteDiv, 'ima-non-muted');\n removeClass_(this.muteDiv, 'ima-muted');\n this.adsManager.setVolume(1);\n // Bubble down to content player\n this.player.muted(false);\n this.adMuted = false;\n this.sliderLevelDiv.style.width = this.player.volume() * 100 + \"%\";\n } else {\n addClass_(this.muteDiv, 'ima-muted');\n removeClass_(this.muteDiv, 'ima-non-muted');\n this.adsManager.setVolume(0);\n // Bubble down to content player\n this.player.muted(true);\n this.adMuted = true;\n this.sliderLevelDiv.style.width = \"0%\";\n }\n updateVolumeIcon_();\n }.bind(this);\n\n /* Listener for mouse down events during ad playback. Used for volume.\n * @private\n */\n var onAdVolumeSliderMouseDown_ = function() {\n document.addEventListener(eventTypes.mouseup, onMouseUp_, false);\n document.addEventListener(eventTypes.mousemove, onMouseMove_, false);\n };\n\n /* Mouse movement listener used for volume slider.\n * @private\n */\n var onMouseMove_ = function(event) {\n setVolumeSlider_(event);\n };\n\n /* Mouse release listener used for volume slider.\n * @private\n */\n var onMouseUp_ = function(event) {\n setVolumeSlider_(event);\n document.removeEventListener(eventTypes.mousemove, onMouseMove_);\n document.removeEventListener(eventTypes.mouseup, onMouseUp_);\n };\n\n var updateVolumeIcon_ = function(){\n var vol = this.player.volume();\n var level = 3;\n if (vol === 0 || this.player.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n for (var i = 0; i < 4; i++) {\n removeClass_(this.muteDiv, 'vjs-vol-'+i);\n }\n addClass_(this.muteDiv, 'vjs-vol-'+level);\n }.bind(this);\n\n /* Utility function to set volume and associated UI\n * @private\n */\n var setVolumeSlider_ = function(event) {\n var clientX = event.changedTouches ? event.changedTouches[0].clientX :\n event.clientX;\n var percent = (clientX - this.sliderDiv.getBoundingClientRect().left) /\n this.sliderDiv.offsetWidth;\n percent *= 100;\n //Bounds value 0-100 if mouse is outside slider region.\n percent = Math.min(Math.max(percent, 0), 100);\n this.sliderLevelDiv.style.width = percent + \"%\";\n this.player.volume(percent / 100); //0-1\n this.adsManager.setVolume(percent / 100);\n if (this.player.volume() == 0) {\n addClass_(this.muteDiv, 'ima-muted');\n removeClass_(this.muteDiv, 'ima-non-muted');\n this.player.muted(true);\n this.adMuted = true;\n }\n else\n {\n addClass_(this.muteDiv, 'ima-non-muted');\n removeClass_(this.muteDiv, 'ima-muted');\n this.player.muted(false);\n this.adMuted = false;\n }\n updateVolumeIcon_();\n }.bind(this);\n\n /**\n * Listener for clicks on the fullscreen button during ad playback.\n * @private\n */\n var onAdFullscreenClick_ = function() {\n if (this.player.isFullscreen()) {\n this.player.exitFullscreen();\n } else {\n this.player.requestFullscreen();\n }\n }.bind(this);\n\n /**\n * Listens for the video.js player to change its fullscreen status. This\n * keeps the fullscreen-ness of the AdContainer in sync with the player.\n * @private\n */\n var onFullscreenChange_ = function() {\n if (this.player.isFullscreen()) {\n addClass_(this.fullscreenDiv, 'ima-fullscreen');\n removeClass_(this.fullscreenDiv, 'ima-non-fullscreen');\n if (this.adsManager) {\n this.adsManager.resize(\n window.screen.width,\n window.screen.height,\n google.ima.ViewMode.FULLSCREEN);\n }\n } else {\n addClass_(this.fullscreenDiv, 'ima-non-fullscreen');\n removeClass_(this.fullscreenDiv, 'ima-fullscreen');\n if (this.adsManager) {\n this.adsManager.resize(\n this.getPlayerWidth(),\n this.getPlayerHeight(),\n google.ima.ViewMode.NORMAL);\n }\n }\n }.bind(this);\n\n /**\n * Listens for the video.js player to change its volume. This keeps the ad\n * volume in sync with the content volume if the volume of the player is\n * changed while content is playing\n * @private\n */\n var onVolumeChange_ = function() {\n var newVolume = this.player.muted() ? 0 : this.player.volume();\n if (this.adsManager) {\n this.adsManager.setVolume(newVolume);\n }\n // Update UI\n if (newVolume == 0) {\n this.adMuted = true;\n addClass_(this.muteDiv, 'ima-muted');\n removeClass_(this.muteDiv, 'ima-non-muted');\n this.sliderLevelDiv.style.width = '0%';\n } else {\n this.adMuted = false;\n addClass_(this.muteDiv, 'ima-non-muted');\n removeClass_(this.muteDiv, 'ima-muted');\n this.sliderLevelDiv.style.width = newVolume * 100 + '%';\n }\n updateVolumeIcon_();\n }.bind(this);\n\n /**\n * Seeks content to 00:00:00. This is used as an event handler for the\n * loadedmetadata event, since seeking is not possible until that event has\n * fired.\n * @private\n */\n var seekContentToZero_ = function() {\n this.player.off('loadedmetadata', seekContentToZero_);\n this.player.currentTime(0);\n }.bind(this);\n\n /**\n * Seeks content to 00:00:00 and starts playback. This is used as an event\n * handler for the loadedmetadata event, since seeking is not possible until\n * that event has fired.\n * @private\n */\n var playContentFromZero_ = function() {\n this.player.off('loadedmetadata', playContentFromZero_);\n this.player.currentTime(0);\n this.player.play();\n }.bind(this);\n\n /**\n * Destroys the AdsManager, sets it to null, and calls contentComplete to\n * reset correlators. Once this is done it requests ads again to keep the\n * inventory available.\n * @private\n */\n var resetIMA_ = function() {\n this.adsActive = false;\n this.adPlaying = false;\n this.player.on('contentended', this.localContentEndedListener);\n if (this.currentAd && this.currentAd.isLinear()) {\n this.adContainerDiv.style.display = 'none';\n }\n this.vjsControls.show();\n this.player.ads.endLinearAdMode();\n if (this.adTrackingTimer) {\n // If this is called while an ad is playing, stop trying to get that\n // ad's current time.\n clearInterval(this.adTrackingTimer);\n }\n if (this.adsManager) {\n this.adsManager.destroy();\n this.adsManager = null;\n }\n if (this.adsLoader && !this.contentComplete) {\n this.adsLoader.contentComplete();\n }\n this.contentComplete = false;\n this.allAdsCompleted = false;\n }.bind(this);\n\n /**\n * Ads an EventListener to the AdsManager. For a list of available events,\n * see\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {google.ima.AdEvent.Type} event The AdEvent.Type for which to listen.\n * @param {function} callback The method to call when the event is fired.\n */\n this.addEventListener = function(event, callback) {\n if (this.adsManager) {\n this.adsManager.addEventListener(event, callback);\n }\n }.bind(this);\n\n /**\n * Returns the instance of the AdsManager.\n * @return {google.ima.AdsManager} The AdsManager being used by the plugin.\n */\n this.getAdsManager = function() {\n return this.adsManager;\n }.bind(this);\n\n /**\n * DEPRECATED: Use setContentWithAdTag.\n * Sets the content of the video player. You should use this method instead\n * of setting the content src directly to ensure the proper ad tag is\n * requested when the video content is loaded.\n * @param {?string} contentSrc The URI for the content to be played. Leave\n * blank to use the existing content.\n * @param {?string} adTag The ad tag to be requested when the content loads.\n * Leave blank to use the existing ad tag.\n * @param {?boolean} playOnLoad True to play the content once it has loaded,\n * false to only load the content but not start playback.\n */\n this.setContent = function(contentSrc, adTag, playOnLoad) {\n window.console.log(\n 'WARNING: player.ima.setContent is deprecated. Use ' +\n 'player.ima.setContentWithAdTag instead.');\n this.setContentWithAdTag(contentSrc, adTag, playOnLoad);\n }.bind(this);\n\n /**\n * Sets the content of the video player. You should use this method instead\n * of setting the content src directly to ensure the proper ad tag is\n * requested when the video content is loaded.\n * @param {?string} contentSrc The URI for the content to be played. Leave\n * blank to use the existing content.\n * @param {?string} adTag The ad tag to be requested when the content loads.\n * Leave blank to use the existing ad tag.\n * @param {?boolean} playOnLoad True to play the content once it has loaded,\n * false to only load the content but not start playback.\n */\n this.setContentWithAdTag = function(contentSrc, adTag, playOnLoad) {\n resetIMA_();\n this.settings.adTagUrl = adTag ? adTag : this.settings.adTagUrl;\n changeSource_(contentSrc, playOnLoad);\n }.bind(this);\n\n /**\n * Sets the content of the video player. You should use this method instead\n * of setting the content src directly to ensure the proper ads response is\n * used when the video content is loaded.\n * @param {?string} contentSrc The URI for the content to be played. Leave\n * blank to use the existing content.\n * @param {?string} adsResponse The ads response to be requested when the\n * content loads. Leave blank to use the existing ads response.\n * @param {?boolean} playOnLoad True to play the content once it has loaded,\n * false to only load the content but not start playback.\n */\n this.setContentWithAdsResponse = function(contentSrc, adsResponse, playOnLoad) {\n resetIMA_();\n this.settings.adsResponse = adsResponse ? adsResponse : this.settings.adsResponse;\n changeSource_(contentSrc, playOnLoad);\n }.bind(this);\n\n /**\n * Plays an ad immediately\n * @param {?string} adTag The ad tag to be requested.\n * Leave blank to use the existing ad tag.\n */\n this.playAd = function(adTag) {\n resetIMA_();\n this.settings.adTagUrl = adTag ? adTag : this.settings.adTagUrl;\n this.requestAds();\n }.bind(this);\n\n /**\n * Changes the player source.\n * @param {?string} contentSrc The URI for the content to be played. Leave\n * blank to use the existing content.\n * @param {?boolean} playOnLoad True to play the content once it has loaded,\n * false to only load the content but not start playback.\n * @private\n */\n var changeSource_ = function(contentSrc, playOnLoad) {\n // Only try to pause the player when initialised with a source already\n if (!!this.player.currentSrc()) {\n this.player.currentTime(0);\n this.player.pause();\n }\n if (contentSrc) {\n this.player.src(contentSrc);\n }\n if (playOnLoad) {\n this.player.on('loadedmetadata', playContentFromZero_);\n } else {\n this.player.on('loadedmetadata', seekContentToZero_);\n }\n }.bind(this);\n\n /**\n * Adds a listener for the 'contentended' event of the video player. This should be\n * used instead of setting an 'contentended' listener directly to ensure that the\n * ima can do proper cleanup of the SDK before other event listeners\n * are called.\n * @param {function} listener The listener to be called when content completes.\n */\n this.addContentEndedListener = function(listener) {\n this.contentEndedListeners.push(listener);\n }.bind(this);\n\n /**\n * Adds a listener that will be called when content and all ads have\n * finished playing.\n * @param {function} listener The listener to be called when content and ads complete.\n */\n this.addContentAndAdsEndedListener = function(listener) {\n this.contentAndAdsEndedListeners.push(listener);\n }.bind(this);\n\n /**\n * Sets the listener to be called to trigger manual ad break playback.\n * @param {function} listener The listener to be called to trigger manual ad break playback.\n */\n this.setAdBreakReadyListener = function(listener) {\n this.adBreakReadyListener = listener;\n }.bind(this);\n\n /**\n * Pauses the ad.\n */\n this.pauseAd = function() {\n if (this.adsActive && this.adPlaying) {\n showPauseButton();\n this.adsManager.pause();\n this.adPlaying = false;\n }\n }.bind(this);\n\n /**\n * Resumes the ad.\n */\n this.resumeAd = function() {\n if (this.adsActive && !this.adPlaying) {\n showPlayButton();\n this.adsManager.resume();\n this.adPlaying = true;\n }\n }.bind(this);\n\n /**\n * Set up intervals to check for seeking and update current video time.\n * @private\n */\n var setUpPlayerIntervals_ = function() {\n this.updateTimeIntervalHandle =\n setInterval(updateCurrentTime_, this.seekCheckInterval);\n this.seekCheckIntervalHandle =\n setInterval(checkForSeeking_, this.seekCheckInterval);\n this.resizeCheckIntervalHandle =\n setInterval(checkForResize_, this.resizeCheckInterval);\n }.bind(this);\n\n /**\n * Updates the start time of the video\n * @private\n */\n var updateStartTime_ = function(){\n var cur = this.player.currentTime();\n if (!cur || this.player.ads.state!='content-playback')\n return;\n // first time that isn't zero is our start time, but only if it's\n // more than the 1sec\n if (cur<1)\n cur = 0;\n this.contentPlayheadTracker.startTime = cur;\n this.player.off('timeupdate', updateStartTime_);\n }.bind(this);\n\n /**\n * Updates the current time of the video\n * @private\n */\n var updateCurrentTime_ = function() {\n if (this.player.ads.state=='content-playback' &&\n !this.contentPlayheadTracker.seeking &&\n this.contentPlayheadTracker.startTime>=0) {\n this.contentPlayheadTracker.currentTime = this.player.currentTime() -\n this.contentPlayheadTracker.startTime;\n }\n }.bind(this);\n\n /**\n * Detects when the user is seeking through a video.\n * This is used to prevent mid-rolls from playing while a user is seeking.\n *\n * There *is* a seeking property of the HTML5 video element, but it's not\n * properly implemented on all platforms (e.g. mobile safari), so we have to\n * check ourselves to be sure.\n *\n * @private\n */\n var checkForSeeking_ = function() {\n if (this.player.ads.state!='content-playback')\n return;\n var tempCurrentTime = this.player.currentTime();\n var diff = (tempCurrentTime - this.contentPlayheadTracker.previousTime) * 1000;\n if (Math.abs(diff) > this.seekCheckInterval + this.seekThreshold) {\n this.contentPlayheadTracker.seeking = true;\n } else {\n this.contentPlayheadTracker.seeking = false;\n }\n this.contentPlayheadTracker.previousTime = this.player.currentTime();\n }.bind(this);\n\n /**\n * Detects when the player is resized (for fluid support) and resizes the\n * ads manager to match.\n *\n * @private\n */\n var checkForResize_ = function() {\n var currentWidth = this.getPlayerWidth();\n var currentHeight = this.getPlayerHeight();\n\n if (this.adsManager && (currentWidth != this.adsManagerDimensions.width ||\n currentHeight != this.adsManagerDimensions.height)) {\n this.adsManagerDimensions.width = currentWidth;\n this.adsManagerDimensions.height = currentHeight;\n this.adsManager.resize(currentWidth, currentHeight, google.ima.ViewMode.NORMAL);\n }\n }.bind(this);\n\n /**\n * Changes the flag to show or hide the ad countdown timer.\n *\n * @param {boolean} showCountdownIn Show or hide the countdown timer.\n */\n this.setShowCountdown = function(showCountdownIn) {\n this.showCountdown = showCountdownIn;\n this.countdownDiv.style.display = this.showCountdown ? 'block' : 'none';\n }.bind(this);\n\n /**\n * Current plugin version.\n */\n this.VERSION = '0.2.0';\n\n /**\n * Stores user-provided settings.\n */\n this.settings;\n\n /**\n * Used to prefix videojs ima\n */\n this.controlPrefix;\n\n /**\n * Video element playing content.\n */\n this.contentPlayer;\n\n /**\n * Boolean flag to show or hide the ad countdown timer.\n */\n this.showCountdown;\n\n /**\n * Boolena flag to enable manual ad break playback.\n */\n this.autoPlayAdBreaks;\n\n /**\n * Video.js control bar.\n */\n this.vjsControls;\n\n /**\n * Div used as an ad container.\n */\n this.adContainerDiv;\n\n /**\n * Div used to display ad controls.\n */\n this.controlsDiv;\n\n /**\n * Div used to display ad countdown timer.\n */\n this.countdownDiv;\n\n /**\n * Div used to display add seek bar.\n */\n this.seekBarDiv;\n\n /**\n * Div used to display ad progress (in seek bar).\n */\n this.progressDiv;\n\n /**\n * Div used to display ad play/pause button.\n */\n this.playPauseDiv;\n\n /**\n * Div used to display ad mute button.\n */\n this.muteDiv;\n\n /**\n * Div used by the volume slider.\n */\n this.sliderDiv;\n\n /**\n * Volume slider level visuals\n */\n this.sliderLevelDiv;\n\n /**\n * Div used to display ad fullscreen button.\n */\n this.fullscreenDiv;\n\n /**\n * IMA SDK AdDisplayContainer.\n */\n this.adDisplayContainer;\n\n /**\n * True if the AdDisplayContainer has been initialized. False otherwise.\n */\n this.adDisplayContainerInitialized = false;\n\n /**\n * IMA SDK AdsLoader\n */\n this.adsLoader;\n\n /**\n * IMA SDK AdsManager\n */\n this.adsManager;\n\n /**\n * IMA SDK AdsRenderingSettings.\n */\n this.adsRenderingSettings = null;\n\n /**\n * Ad tag URL. Should return VAST, VMAP, or ad rules.\n */\n this.adTagUrl;\n\n /**\n * VAST, VMAP, or ad rules response. Used in lieu of fetching a response\n * from an ad tag URL.\n */\n this.adsResponse;\n\n /**\n * Current IMA SDK Ad.\n */\n this.currentAd;\n\n /**\n * Timer used to track content progress.\n */\n this.contentTrackingTimer;\n\n /**\n * Timer used to track ad progress.\n */\n this.adTrackingTimer;\n\n /**\n * True if ads are currently displayed, false otherwise.\n * True regardless of ad pause state if an ad is currently being displayed.\n */\n this.adsActive = false;\n\n /**\n * True if ad is currently playing, false if ad is paused or ads are not\n * currently displayed.\n */\n this.adPlaying = false;\n\n /**\n * True if the ad is muted, false otherwise.\n */\n this.adMuted = false;\n\n /**\n * True if our content video has completed, false otherwise.\n */\n this.contentComplete = false;\n\n /**\n * True if ALL_ADS_COMPLETED has fired, false until then.\n */\n this.allAdsCompleted = false;\n\n /**\n * Handle to interval that repeatedly updates current time.\n */\n this.updateTimeIntervalHandle;\n\n /**\n * Handle to interval that repeatedly checks for seeking.\n */\n this.seekCheckIntervalHandle;\n\n /**\n * Interval (ms) on which to check if the user is seeking through the\n * content.\n */\n this.seekCheckInterval = 1000;\n\n /**\n * Handle to interval that repeatedly checks for player resize.\n */\n this.resizeCheckIntervalHandle;\n\n /**\n * Interval (ms) to check for player resize for fluid support.\n */\n this.resizeCheckInterval = 250;\n\n /**\n * Threshold by which to judge user seeking. We check every 1000 ms to see\n * if the user is seeking. In order for us to decide that they are *not*\n * seeking, the content video playhead must only change by 900-1100 ms\n * between checks. Any greater change and we assume the user is seeking\n * through the video.\n */\n this.seekThreshold = 100;\n\n /**\n * Stores data for the content playhead tracker.\n */\n this.contentPlayheadTracker = {\n currentTime: 0,\n previousTime: 0,\n seeking: false,\n duration: 0,\n startTime: -1\n };\n\n /**\n * Stores data for the ad playhead tracker.\n */\n this.adPlayheadTracker = {\n currentTime: 0,\n duration: 0,\n isPod: false,\n adPosition: 0,\n totalAds: 0\n };\n\n /**\n * Stores the dimensions for the ads manager.\n */\n this.adsManagerDimensions = {\n width: 0,\n height: 0\n };\n\n /**\n * Content ended listeners passed by the publisher to the plugin. Publishers\n * should allow the plugin to handle content ended to ensure proper support\n * of custom ad playback.\n */\n this.contentEndedListeners = [];\n\n /**\n * Content and ads ended listeners passed by the publisher to the plugin.\n * These will be called when the plugin detects that content *and all\n * ads* have completed. This differs from the contentEndedListeners in that\n * contentEndedListeners will fire between content ending and a post-roll\n * playing, whereas the contentAndAdsEndedListeners will fire after the\n * post-roll completes.\n */\n this.contentAndAdsEndedListeners = [];\n\n /**\n * Listener to be called to trigger manual ad break playback.\n */\n this.adBreakReadyListener = undefined;\n\n /**\n * Stores the content source so we can re-populate it manually after a\n * post-roll on iOS.\n */\n this.contentSource = '';\n\n /**\n * Local content ended listener for contentComplete.\n */\n this.localContentEndedListener = function() {\n if (this.adsLoader && !this.contentComplete) {\n this.adsLoader.contentComplete();\n this.contentComplete = true;\n }\n for (var index in this.contentEndedListeners) {\n this.contentEndedListeners[index]();\n }\n if (this.allAdsCompleted) {\n for (var index in this.contentAndAdsEndedListeners) {\n this.contentAndAdsEndedListeners[index]();\n }\n }\n clearInterval(this.updateTimeIntervalHandle);\n clearInterval(this.seekCheckIntervalHandle);\n clearInterval(this.resizeCheckIntervalHandle);\n if(this.player.el()) {\n this.player.one('play', setUpPlayerIntervals_);\n }\n }.bind(this);\n\n this.playerDisposedListener = function(){\n this.contentEndedListeners, this.contentAndAdsEndedListeners = [], [];\n this.contentComplete = true;\n this.player.off('contentended', this.localContentEndedListener);\n this.player.off('timeupdate', updateStartTime_);\n\n // Bug fix: https://github.com/googleads/videojs-ima/issues/306\n if (this.player.ads.adTimeoutTimeout) {\n clearTimeout(this.player.ads.adTimeoutTimeout);\n }\n\n var intervalsToClear = [this.updateTimeIntervalHandle, this.seekCheckIntervalHandle,\n this.adTrackingTimer, this.resizeCheckIntervalHandle];\n for (var index in intervalsToClear) {\n var interval = intervalsToClear[index];\n if (interval) {\n clearInterval(interval);\n }\n }\n if (this.adsManager) {\n this.adsManager.destroy();\n this.adsManager = null;\n }\n }.bind(this);\n\n this.settings = extend({}, ima_defaults, options || {});\n\n // Currently this isn't used but I can see it being needed in the future, so\n // to avoid implementation problems with later updates I'm requiring it.\n if (!this.settings['id']) {\n window.console.log('Error: must provide id of video.js div');\n return;\n }\n\n this.controlPrefix = (this.settings.id + '_') || '';\n\n this.contentPlayer = this.player.$('.vjs-tech');\n // Default showing countdown timer to true.\n this.showCountdown = true;\n if (this.settings['showCountdown'] == false) {\n this.showCountdown = false;\n }\n\n this.autoPlayAdBreaks = true;\n if (this.settings['autoPlayAdBreaks'] == false) {\n this.autoPlayAdBreaks = false;\n }\n\n var contrib_ads_defaults = {\n debug: this.settings.debug,\n timeout: this.settings.timeout,\n prerollTimeout: this.settings.prerollTimeout\n };\n\n var ads_plugin_settings =\n extend({}, contrib_ads_defaults, options['contribAdsSettings'] || {});\n\n player.ads(ads_plugin_settings);\n\n player.one('play', setUpPlayerIntervals_);\n player.on('contentended', this.localContentEndedListener);\n player.on('dispose', this.playerDisposedListener);\n player.on('timeupdate', updateStartTime_);\n this.adsRenderingSettings = new google.ima.AdsRenderingSettings();\n this.adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n if (this.settings['adsRenderingSettings']) {\n for (var setting in this.settings['adsRenderingSettings']) {\n this.adsRenderingSettings[setting] =\n this.settings['adsRenderingSettings'][setting];\n }\n }\n\n if (this.settings['locale']) {\n google.ima.settings.setLocale(this.settings['locale']);\n }\n\n createAdContainer_();\n this.adsLoader = new google.ima.AdsLoader(this.adDisplayContainer);\n\n this.adsLoader.getSettings().setVpaidMode(\n google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n if (this.settings.vpaidAllowed == false) {\n this.adsLoader.getSettings().setVpaidMode(\n google.ima.ImaSdkSettings.VpaidMode.DISABLED);\n }\n if (this.settings.vpaidMode) {\n this.adsLoader.getSettings().setVpaidMode(this.settings.vpaidMode);\n }\n\n if (this.settings.locale) {\n this.adsLoader.getSettings().setLocale(this.settings.locale);\n }\n\n if (this.settings.numRedirects) {\n this.adsLoader.getSettings().setNumRedirects(this.settings.numRedirects);\n }\n\n this.adsLoader.getSettings().setPlayerType('videojs-ima');\n this.adsLoader.getSettings().setPlayerVersion(this.VERSION);\n this.adsLoader.getSettings().setAutoPlayAdBreaks(this.autoPlayAdBreaks);\n\n this.adsLoader.addEventListener(\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n onAdsManagerLoaded_,\n false);\n this.adsLoader.addEventListener(\n google.ima.AdErrorEvent.Type.AD_ERROR,\n onAdsLoaderError_,\n false);\n\n if (!readyCallback) {\n readyCallback = this.startFromReadyCallback;\n }\n player.on('readyforpreroll', readyCallback);\n player.ready(function() {\n player.on('fullscreenchange', onFullscreenChange_);\n player.on('volumechange', onVolumeChange_);\n });\n };\n\n videojs.plugin('ima', init);\n});\n\n","(function(window, videojs, document, undefined){\n'use strict';\n/*jshint browser:true*/\n\nvar Flash = videojs.getComponent('Flash');\n\nvar Osmf = videojs.extend(Flash, {\n constructor: function(options, ready){\n var source = options.source;\n var _player = videojs(options.playerId);\n _player.osmf = this;\n options.flashVars = {\n 'playerId': options.playerId,\n 'readyFunction': 'onReady',\n 'eventProxyFunction': 'onEvent',\n 'errorEventProxyFunction': 'onError'\n };\n Flash.call(this, options, ready);\n this.firstplay = false;\n this.loadstart = false;\n _player.on('loadeddata', Osmf.onLoadedData);\n _player.on('ended', Osmf.onEnded);\n options.source = source;\n }\n});\n\nOsmf.formats = {\n 'application/adobe-f4m': 'F4M',\n 'application/adobe-f4v': 'F4V',\n 'application/dash+xml': 'MPD'\n};\n\nOsmf.canPlaySource = function(src){\n var type = src.type.replace(/;.*/, '').toLowerCase();\n return type in Osmf.formats ? 'maybe' : '';\n};\n\nOsmf.log_enabled = false;\n\nvar api = Osmf.prototype;\nvar readWrite = ['preload', 'defaultPlaybackRate', 'playbackRate', 'autoplay',\n 'loop', 'mediaGroup', 'controller', 'controls', 'volume', 'muted',\n 'defaultMuted'];\nvar readOnly = ['error', 'networkState', 'readyState', 'seeking', 'videoWidth',\n 'startOffsetTime', 'paused', 'played', 'ended', 'streamType',\n 'initialTime', 'videoHeight', 'currentLevel', 'levels'];\n\nvar createSetter = function(attr){\n var attrUpper = attr.charAt(0).toUpperCase()+attr.slice(1);\n api['set'+attrUpper] = function(val){\n if (!this.el_.vjs_setProperty)\n return;\n return this.el_.vjs_setProperty(attr, val);\n };\n};\n\nvar createGetter = function(attr){\n api[attr] = function(){\n if (!this.el_.vjs_getProperty)\n return;\n return this.el_.vjs_getProperty(attr);\n };\n};\n\n(function(){\n for (var i = 0; i<readWrite.length; i++)\n {\n createGetter(readWrite[i]);\n createSetter(readWrite[i]);\n }\n for (i = 0; i<readOnly.length; i++)\n createGetter(readOnly[i]);\n})();\n\nOsmf.prototype.duration = function(){\n return this.el_ ? (this.streamType() == 'live' ? Infinity :\n this.el_.vjs_getProperty('duration')) : 0;\n};\n\nOsmf.prototype.play = function(){ this.el_.vjs_play(); };\n\nOsmf.prototype.load = function(){ this.el_.vjs_load(); };\n\nOsmf.prototype.paused = function(){ return this.el_.vjs_paused(); };\n\nOsmf.prototype.pause = function(){ this.el_.vjs_pause(); };\n\nOsmf.prototype.currentTime = function(value){\n if (!value)\n return this.el_.vjs_getProperty('currentTime');\n this.el_.vjs_setProperty('currentTime');\n};\n\nOsmf.prototype.streamStatus = function(){ return this.el_.streamStatus(); };\n\nOsmf.isSupported = function(){ return Flash.version()[0]>=10; };\n\nOsmf.onLoadedData = function(){\n var player = this;\n if (player.options_.autoplay)\n player.play();\n else if (player.options_.preload && player.options_.preload!=='none')\n {\n if (player.currentTime())\n player.currentTime(0);\n player.play();\n player.pause();\n player.bigPlayButton.show();\n player.bigPlayButton.one('click', function(){\n player.bigPlayButton.hide(); });\n }\n};\n\nOsmf.onEnded = function(){\n if (this.options().loop)\n this.currentTime(0);\n this.pause();\n};\n\nOsmf.onReady = function(currentSwf){\n if (Osmf.log_enabled)\n videojs.log('OSMF', 'Ready', currentSwf);\n Flash.onReady(currentSwf);\n var tech = document.getElementById(currentSwf).tech;\n if (tech.currentSrc() && tech.currentSrc().length>0)\n tech.el_.vjs_src(tech.currentSrc());\n};\n\nOsmf.onError = function(currentSwf, err){\n var tech = document.getElementById(currentSwf).tech;\n if (err=='loaderror')\n err = 'srcnotfound';\n if (Osmf.log_enabled)\n videojs.log('OSMF', 'Error', err);\n if (tech.options_.reconnectOnError && !tech.reconnecting_)\n {\n tech.reconnecting_ = true;\n tech.trigger(\"waiting\");\n setTimeout(function(){\n tech.src(tech.currentSrc());\n tech.reconnecting_ = false;\n tech.error(null);\n }, 5000);\n }\n tech.error({code: 4, msg: \"\"});\n};\n\nOsmf.onEvent = function(currentSwf, event, data){\n var tech = document.getElementById(currentSwf).tech;\n switch (event)\n {\n case 'playing':\n if (tech.firstplay===false)\n {\n if (Osmf.log_enabled)\n videojs.log('OSMF', 'Event', currentSwf, 'loadstart');\n tech.trigger('loadstart');\n tech.loadstart = true;\n if (Osmf.log_enabled)\n videojs.log('OSMF', 'Event', currentSwf, 'firstplay');\n tech.trigger('firstplay');\n tech.firstplay = true;\n }\n break;\n case 'buffering':\n event = 'waiting';\n break;\n case 'ready':\n event = 'loadeddata';\n break;\n }\n tech.trigger(event, data);\n if (event!=='timeupdate' && Osmf.log_enabled)\n videojs.log('OSMF', 'Event', currentSwf, event);\n};\n\nOsmf.prototype.supportsFullScreen = function(){ return false; };\n\nOsmf.prototype.enterFullScreen = function(){ return false; };\n\nvideojs.options.osmf = {};\nvideojs.options.techOrder.push('osmf');\nvideojs.registerComponent('Osmf', Osmf);\n\n})(window, window.videojs, document);\n","(function(window, vjs){\n'use strict';\nrequire('@hola.org/videojs-utils');\nvar Clipboard = require('clipboard');\nvar find = require('lodash/find');\nvar settings_icon_svg = '<svg height=\"100%\" width=\"100%\" viewBox=\"0 0 16 16\">'\n +'<path class=\"st0\" d=\"M16,9.4V6.6h-2.2c-0.2-0.6-0.4-1.3-0.8-1.8l1.5-1.5l-1.9-1.9l-1.5,1.5C10.6,2.6,10,2.3,9.4,2.2V0H6.6v2.2'\n +'C6,2.3,5.4,2.6,4.8,2.9L3.3,1.4L1.4,3.3l1.5,1.5C2.6,5.4,2.3,6,2.2,6.6H0v2.7h2.2c0.2,0.6,0.4,1.3,0.8,1.8l-1.5,1.5l1.9,1.9l1.5-1.5'\n +'c0.5,0.3,1.2,0.6,1.8,0.8V16h2.7v-2.2c0.6-0.2,1.3-0.4,1.8-0.8l1.5,1.5l1.9-1.9l-1.5-1.5c0.3-0.5,0.6-1.2,0.8-1.8H16z M8,11'\n +'c-1.7,0-3-1.3-3-3s1.3-3,3-3s3,1.3,3,3S9.7,11,8,11z\"/>'\n +'</svg>';\nvar Menu = vjs.getComponent('Menu');\nvjs.registerComponent('PopupMenu', vjs.extend(Menu, {\n className: 'vjs-rightclick-popup',\n popped: false,\n constructor: function(player, options){\n Menu.call(this, player, options);\n var player_ = player;\n this.addClass(this.className);\n this.hide();\n var _this = this;\n var opt = this.options_;\n var offset = opt.offset||5;\n _this.menuEnabled = true;\n if (opt.debugging)\n {\n this.addChild(new LogButton(player, {label: 'Download log'}));\n this.addChild(\n new CopyLogButton(player, {label: 'Copy debug info'}));\n }\n if (opt.report)\n {\n opt.report = vjs.mergeOptions({label: 'Report playback issue'},\n opt.report);\n this.addChild(new ReportButton(player, opt.report));\n }\n if (opt.info)\n {\n opt.info = vjs.mergeOptions({label: 'Stats for nerds'}, opt.info);\n this.addChild(new InfoButton(player, opt.info));\n }\n if (opt.graph)\n {\n opt.graph = vjs.mergeOptions({label: 'CDN overlay'}, opt.graph);\n this.addChild(new GraphButton(player, opt.graph));\n }\n if (opt.about)\n {\n this.addChild(new MenuItemLink(player, {\n href: 'https://holacdn.com/player',\n label: 'About Hola Player',\n }));\n }\n function oncontextmenu(evt){\n evt.preventDefault();\n if (_this.popped)\n {\n _this.hide();\n _this.popped = false;\n }\n else\n {\n _this.show();\n var oX = evt.offsetX;\n var oY = evt.offsetY;\n var left_shift =\n _this.el_.offsetWidth+oX+offset-player_.el_.offsetWidth;\n left_shift = Math.max(0, left_shift);\n var top_shift =\n _this.el_.offsetHeight+oY+offset-player_.el_.offsetHeight;\n top_shift = Math.max(0, top_shift);\n oX = oX-left_shift;\n oY = oY-top_shift;\n _this.el_.style.top=oY+'px';\n _this.el_.style.left=oX+'px';\n _this.popped = true;\n _this.check_items();\n }\n }\n player_.on('contextmenu', oncontextmenu);\n player_.on(['tap', 'click'], function(evt){\n if (_this.popped)\n {\n _this.hide();\n _this.popped = false;\n evt.stopPropagation();\n evt.preventDefault();\n return false;\n }\n });\n this.children().forEach(function(item){\n item.on(['tap', 'click'], function(evt){\n _this.hide();\n _this.popped = false;\n });\n });\n player.enablePopupMenu = function(){\n if (!_this.menuEnabled)\n {\n player_.off('contextmenu');\n player_.on('contextmenu', oncontextmenu);\n _this.menuEnabled = true;\n }\n };\n player.disablePopupMenu = function(){\n if (_this.menuEnabled)\n {\n player_.off('contextmenu');\n player_.on('contextmenu', function(evt){\n evt.preventDefault(); });\n _this.menuEnabled = false;\n }\n };\n },\n check_items: function(){\n this.children().forEach(function(item){\n if (item.is_visible)\n item.toggleClass('vjs-hidden', !item.is_visible());\n });\n },\n}));\nvar MenuButton = vjs.getComponent('MenuButton');\nvjs.registerComponent('SettingsButton', vjs.extend(MenuButton, {\n controlText_: 'Settings',\n constructor: function(player, options){\n MenuButton.call(this, player, options);\n player.one('play', vjs.bind(this, this.updateSelected));\n player.on('resolutionchange', vjs.bind(this, this.updateSelected));\n this.updateSelected();\n },\n createEl: function(){\n var settings_button = MenuButton.prototype.createEl.call(this);\n var icon = this.icon_ = document.createElement('div');\n icon.setAttribute('class', 'vjs-button-icon');\n icon.innerHTML = settings_icon_svg;\n settings_button.insertBefore(icon, settings_button.firstChild);\n return settings_button;\n },\n buildCSSClass: function(){\n var className = MenuButton.prototype.buildCSSClass.call(this);\n return className+' vjs-settings-button';\n },\n createItems: function(){\n var items = [];\n var player = this.player_;\n var quality = this.options_.quality;\n var sources = quality && quality.sources ? quality.sources :\n player.options_.sources;\n if (!sources || !sources.length)\n return [];\n var label;\n for (var i=0; i<sources.length; i+=1)\n {\n label = sources[i].label || (sources.length==1 ?\n 'Auto' : ('Source '+(i+1)));\n items.push(new QualityButton(player, vjs.mergeOptions(sources[i],\n {label: label, callback: quality.callback})));\n }\n return items;\n },\n createMenu: function(){\n var _this = this;\n var menu = MenuButton.prototype.createMenu.call(this);\n menu.addClass('vjs-menu-popup-on-click');\n // videojs removes the locking state on menu item click that causes\n // settings button to hide without updating buttonPressed state\n menu.children().forEach(function(component){\n component.on('click', function(){ _this.handleClick(); });\n });\n return menu;\n },\n handleClick: function(){\n var expanded_classname = 'vjs-settings-expanded';\n if (this.buttonPressed_)\n {\n this.player_.removeClass(expanded_classname);\n this.unpressButton();\n }\n else\n {\n this.player_.addClass(expanded_classname);\n this.pressButton();\n }\n },\n tooltipHandler: function(){\n return this.icon_;\n },\n updateSelected: function(){\n var _this = this;\n var player = this.player_;\n var current_src = player.cache_.src;\n var hola = window.hola_cdn;\n var wrapper = hola && hola.wrapper && find(hola.wrapper, function(w){\n return w.player && w.player.vjs==player;\n });\n // in case of hola_cdn attached get origin video url instead of blob\n if (wrapper && wrapper.player)\n current_src = wrapper.player.get_url();\n var items = this.menu.children();\n items.forEach(function(item){\n item.selected(item.options_.src ? item.options_.src==current_src :\n item.options_.level_id==_this.selectedLevel);\n });\n if (this.selectedLevel!==undefined)\n {\n var auto = find(items, function(item){\n return item.options_.level_id==-1;\n });\n if (!auto)\n return;\n var levels = (this.options_.quality||{}).sources||[];\n var curLevel = this.currentLevel!==undefined && find(levels,\n function(l){ return l.level_id==_this.currentLevel; });\n auto.setMinorText(this.selectedLevel==-1 && curLevel ?\n curLevel.label : '');\n }\n },\n levelsChanged: function(levels){\n var current = (this.options_.quality||{}).sources||[];\n if (current.length!=levels.length)\n return true;\n for (var i=0; i<levels.length; i++)\n {\n if (current[i].level_id!=levels[i].id)\n return true;\n }\n return false;\n },\n updateQuality: function(data){\n var sources = [];\n var callback = data.callback;\n var levels = data.quality.list;\n this.selectedLevel = data.quality.selected;\n this.currentLevel = data.quality.current;\n var quality = this.options_.quality = this.options_.quality||{};\n if (this.levelsChanged(levels) || callback!=quality.callback)\n {\n levels.forEach(function(item){\n sources.push({level_id: item.id, label: item.label});\n });\n quality.sources = sources;\n quality.callback = callback;\n this.update();\n }\n this.updateSelected();\n }\n}));\nvar Component = vjs.getComponent('Component');\nvjs.registerComponent('Overlay', vjs.extend(Component, {\n createEl: function(type, props){\n var custom_class = this.options_['class'];\n custom_class = custom_class ? ' '+custom_class : '';\n var proto_component = Component.prototype;\n var container = proto_component.createEl.call(this, 'div',\n vjs.mergeOptions({className: 'vjs-info-overlay'+custom_class},\n props));\n this.createContent(container);\n return container;\n },\n createContent: function(container){},\n}));\nfunction round(val){\n if (typeof val!='number')\n return val;\n return val.toFixed(3);\n}\nfunction is_wrapper_attached(check_bws){\n var hola = window.hola_cdn;\n return hola && hola.get_wrapper() && (!check_bws || !!hola._get_bws());\n}\nvar Overlay = vjs.getComponent('Overlay');\nvjs.registerComponent('InfoOverlay', vjs.extend(Overlay, {\n constructor: function(player, options){\n this.info_data = {\n duration: {\n units: 'sec',\n title: 'Duration',\n get: function(p){ return round(p.duration()); },\n },\n position: {\n units: 'sec',\n title: 'Position',\n get: function(p){\n return round(p.currentTime());\n },\n },\n buffered: {\n units: 'sec',\n title: 'Current buffer',\n get: function(p){\n var range = p.buffered();\n var pos = p.currentTime();\n if (range && range.length)\n {\n for (var i=0; i<range.length; i+=1)\n {\n if (range.start(i)<=pos && range.end(i)>=pos)\n return round(range.end(i)-pos);\n }\n }\n return '--';\n },\n },\n downloaded: {\n units: 'sec',\n title: 'Downloaded',\n get: function(p){\n var range = p.buffered();\n var buf_sec = 0;\n if (range && range.length)\n {\n for (var i=0; i<range.length; i+=1)\n buf_sec += range.end(i)-range.start(i);\n }\n return round(buf_sec);\n },\n },\n };\n Overlay.call(this, player, options);\n },\n createContent: function(container){\n var _this = this;\n var player = this.player_;\n function create_el(el, opt){\n opt = opt ? vjs.mergeOptions(opt) : opt;\n var proto_component = Component.prototype;\n return proto_component.createEl.call(_this, el, opt);\n }\n var title = create_el('div', {\n className: 'vjs-info-overlay-title',\n innerHTML: 'Technical info',\n });\n var close_btn = create_el('div', {className: 'vjs-info-overlay-x'});\n var close = this.toggle.bind(this, null, true);\n close_btn.addEventListener('click', close);\n close_btn.addEventListener('touchend', close);\n var content = create_el('div', {\n className: 'vjs-info-overlay-content'});\n var list = create_el('ul', {className: 'vjs-info-overlay-list'});\n var item;\n var title_text;\n for (var i in this.info_data)\n {\n item = create_el('li', {className: 'vjs-info-overlay-list-item'});\n title_text = this.info_data[i].title;\n if (this.info_data[i].units)\n title_text += ' ['+this.info_data[i].units+']';\n title_text += ': ';\n item.appendChild(create_el('strong', {\n innerHTML: title_text}));\n this.info_data[i].el = create_el('span');\n item.appendChild(this.info_data[i].el);\n list.appendChild(item);\n }\n content.appendChild(list);\n container.appendChild(title);\n container.appendChild(close_btn);\n container.appendChild(content);\n this.update();\n player.on('timeupdate', function(){ _this.update(); });\n // force updates when player is paused\n setInterval(function(){ _this.update(); }, 1000);\n },\n update: function(){\n var player = this.player_;\n var info = this.info_data;\n for (var i in info)\n info[i].el.innerHTML = info[i].get(player);\n },\n toggle: function(caller, hide){\n if (caller)\n this.last_caller = caller;\n if (this.visible||hide)\n {\n this.visible = false;\n if (this.last_caller)\n this.last_caller.selected(false);\n this.addClass('vjs-hidden');\n return;\n }\n this.update();\n this.visible = true;\n this.removeClass('vjs-hidden');\n },\n}));\nvjs.registerComponent('NotifyOverlay', vjs.extend(Overlay, {\n createContent: function(container){\n var _this = this;\n function create_el(el, opt){\n opt = opt ? vjs.mergeOptions(opt) : opt;\n var proto_component = Component.prototype;\n return proto_component.createEl.call(_this, el, opt);\n }\n var title = create_el('div', {\n className: 'vjs-notify-overlay-title',\n innerHTML: 'Issue report sent.',\n });\n var content = create_el('div', {\n className: 'vjs-notify-overlay-content',\n innerHTML: 'Thank you!',\n });\n container.appendChild(title);\n container.appendChild(content);\n },\n flash: function(){\n if (this.visible)\n return;\n this.visible = true;\n this.removeClass('vjs-hidden');\n var _this = this;\n setTimeout(function(){\n _this.addClass('vjs-notify-flash');\n }, 50);\n setTimeout(function(){\n _this.visible = false;\n _this.removeClass('vjs-notify-flash');\n _this.addClass('vjs-hidden');\n }, 3500);\n },\n}));\nvar MenuItem = vjs.getComponent('MenuItem');\nvjs.registerComponent('MenuItemLink', vjs.extend(MenuItem, {\n createEl: function(type, props){\n var prot = MenuItem.prototype;\n var label = this.localize(this.options_.label);\n var el = prot.createEl.call(this, 'li', vjs.mergeOptions({\n className: 'vjs-menu-item vjs-menu-item-link',\n innerHTML: '',\n }, props));\n this.link = Component.prototype.createEl('a', {\n className: 'vjs-menu-link',\n innerHTML: label,\n }, {\n target: '_blank',\n href: this.options_.href||'#',\n });\n el.appendChild(this.link);\n this.link.addEventListener('touchstart', function(e){\n e.stopPropagation(); });\n return el;\n },\n handleClick: function(e){ e.stopPropagation(); },\n}));\nvar MenuItemLink = vjs.getComponent('MenuItemLink');\nvjs.registerComponent('ReportButton', vjs.extend(MenuItem, {\n is_visible: is_wrapper_attached,\n handleClick: function(){\n this.player_.trigger({type: 'problem_report'});\n var overlay;\n if (overlay = this.player_.getChild('NotifyOverlay'))\n overlay.flash();\n this.selected(false);\n },\n}));\nvar ReportButton = vjs.getComponent('ReportButton');\nvjs.registerComponent('LogButton', vjs.extend(MenuItem, {\n is_visible: is_wrapper_attached,\n handleClick: function(){\n this.player_.trigger({type: 'save_logs'});\n this.selected(false);\n },\n}));\nvar LogButton = vjs.getComponent('LogButton');\nvjs.registerComponent('GraphButton', vjs.extend(MenuItem, {\n is_visible: is_wrapper_attached.bind(null, true),\n handleClick: function(){\n this.player_.trigger({type: 'cdn_graph_overlay'});\n this.selected(false);\n },\n}));\nvar GraphButton = vjs.getComponent('GraphButton');\nvjs.registerComponent('CopyLogButton', vjs.extend(MenuItem, {\n constructor: function(player, options){\n MenuItem.call(this, player, options);\n var player_ = player;\n this.clipboard = new Clipboard(this.el_, {\n text: function(){\n if (!player_.hola_logs)\n return 'Can\\'t find hola_logs method!';\n return player_.hola_logs();\n },\n });\n this.on('tap', function(e){\n this.clipboard.onClick({currentTarget: e.target});\n });\n },\n dispose: function(){\n this.clipboard.destroy();\n MenuItem.prototype.dispose.call(this);\n },\n is_visible: is_wrapper_attached,\n}));\nvar CopyLogButton = vjs.getComponent('CopyLogButton');\nvjs.registerComponent('InfoButton', vjs.extend(MenuItem, {\n handleClick: function(){\n var overlay;\n if (overlay = this.player_.getChild('InfoOverlay'))\n overlay.toggle(this);\n },\n}));\nvar InfoButton = vjs.getComponent('InfoButton');\nvjs.registerComponent('MenuLabel', vjs.extend(Component, {\n createEl: function(type, props){\n var prot = Component.prototype;\n return prot.createEl.call(this, 'li', vjs.mergeOptions({\n className: 'vjs-menu-item vjs-menu-label',\n innerHTML: this.options_.label,\n }, props));\n },\n}));\nvar MenuLabel = vjs.getComponent('MenuLabel');\nvjs.registerComponent('QualityButton', vjs.extend(MenuItem, {\n constructor: function(player, options){\n options = vjs.mergeOptions({selectable: true}, options);\n MenuItem.call(this, player, options);\n if (options['default'])\n this.player_.src(options.src);\n },\n handleClick: function(){\n if (this.hasClass('vjs-selected'))\n return;\n var player = this.player_;\n var quality = this.options_;\n var level_id = quality.level_id;\n var event, event_name = 'beforeresolutionchange';\n try { event = new window.CustomEvent(event_name); }\n catch(e){\n // XXX stanislav: IE 11 fix\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(event_name, true, true, {});\n }\n player.trigger(event, quality);\n if (event.defaultPrevented)\n return;\n if (level_id!==undefined)\n {\n if (quality.callback)\n quality.callback(level_id);\n player.trigger('resolutionchange');\n return;\n }\n var current_time = player.currentTime();\n var remain_paused = player.paused();\n player.pause();\n player.src(quality.src);\n player.ready(function(){\n player.one('loadeddata', function(){\n if (player.techName_=='Html5')\n {\n player.currentTime(current_time);\n return;\n }\n // XXX andrey: if seek immediately, video can stuck\n // or play without sound, probably loadeddata is triggered\n // when flash NetStream is not ready to seek yet\n player.on('timeupdate', function on_timeupdate(){\n if (!player.currentTime())\n return;\n player.off('timeupdate', on_timeupdate);\n player.currentTime(current_time);\n });\n });\n player.trigger('resolutionchange');\n if (!remain_paused)\n {\n player.load();\n player.play();\n }\n });\n },\n createEl: function(){\n var el = MenuItem.prototype.createEl.apply(this, arguments);\n this.minorLabel = document.createElement('span');\n el.appendChild(this.minorLabel);\n return el;\n },\n setMinorText: function(label){\n this.minorLabel.innerHTML = label ? ' '+label : '';\n },\n}));\nvar QualityButton = vjs.getComponent('QualityButton');\n\nvjs.plugin('settings', function(opt){\n var video = this;\n opt = vjs.mergeOptions({\n info: true,\n report: true,\n quality: false,\n volume: {level: 1, mute: !!video.options_.muted},\n debugging: true,\n about: true,\n }, opt);\n video.ready(function(){\n function local_storage_set(key, value){\n try { vjs.utils.localStorage.setItem(key, value); } catch(e){}\n }\n function local_storage_get(key){\n try { return vjs.utils.localStorage.getItem(key); }\n catch(e){ return null; }\n }\n function sources_normalize(sources, label_sav){\n var i, source_def, source_sav;\n sources = sources.filter(function(e){ return e.src; });\n for (i=0; i<sources.length; i+=1)\n {\n if (!sources[i].label)\n sources[i].label = sources[i].type;\n if (!source_def && sources[i]['default']!==undefined)\n source_def = sources[i];\n if (label_sav && label_sav==sources[i].label &&\n sources[i]['prevent-default']===undefined)\n {\n source_sav = sources[i];\n }\n }\n for (i=0; i<sources.length; i+=1)\n {\n sources[i]['default'] =\n source_sav ? sources[i]===source_sav :\n source_def ? sources[i]===source_def : false;\n }\n return sources;\n }\n function add_settings_button(){\n return video.controlBar.addChild('SettingsButton',\n vjs.mergeOptions(opt));\n }\n // XXX bahaa/alexeym: make it an opt instead of detecting provider\n var is_hls_provider = video.tech_ &&\n (video.tech_.flashlsProvider||video.tech_.hlsProvider);\n if (opt.quality===true)\n opt.quality = {sources: video.options_.sources};\n if (opt.quality && !is_hls_provider)\n {\n var quality_key = 'vjs5_quality';\n opt.quality.sources = sources_normalize(opt.quality.sources,\n local_storage_get(quality_key));\n video.on('resolutionchange', function(){\n var sources = opt.quality.sources;\n for (var i=0; i<sources.length; i++)\n {\n if (video.currentSrc()!=sources[i].src)\n continue;\n local_storage_set(quality_key, sources[i].label);\n break;\n }\n });\n }\n var settings_button;\n if (opt.quality && opt.quality.sources && opt.quality.sources.length>1)\n settings_button = add_settings_button();\n if (opt.quality && is_hls_provider)\n {\n video.tech_.on('loadedqualitydata', function(e, data){\n var sources = data && data.quality && data.quality.list || [];\n if (sources.length<2)\n return;\n if (!settings_button)\n settings_button = add_settings_button();\n settings_button.updateQuality(data);\n });\n }\n if (opt.info)\n video.addChild('InfoOverlay', {}).addClass('vjs-hidden');\n if (opt.report)\n {\n video.addChild('NotifyOverlay', {'class': 'vjs-notify-overlay'})\n .addClass('vjs-hidden');\n }\n if (opt.volume)\n {\n var volume_key = 'vjs5_volume', mute_key = 'vjs5_mute';\n // quality configuration above might have reset the source\n // thus make sure video is ready before changing the volume\n video.ready(function(){\n if (!opt.volume.override_local_storage)\n {\n var ls_level, ls_mute;\n if ((ls_level = local_storage_get(volume_key))!=null)\n opt.volume.level = ls_level;\n if ((ls_mute = local_storage_get(mute_key))!=null)\n opt.volume.mute = ls_mute=='true';\n }\n video.volume(opt.volume.level);\n video.muted(opt.volume.mute);\n });\n video.on('volumechange', function(){\n local_storage_set(volume_key, video.volume());\n local_storage_set(mute_key, video.muted());\n });\n }\n var menu = video.addChild('PopupMenu', vjs.mergeOptions(opt));\n video.on('hola.wrapper_attached', menu.check_items.bind(menu));\n video.on('hola.wrapper_detached', menu.check_items.bind(menu));\n });\n});\n\n}(window, window.videojs));\n","(function() {\n 'use strict';\n var extend = function() {\n var args, target, i, object, property;\n args = Array.prototype.slice.call(arguments);\n target = args.shift() || {};\n for (i in args) {\n object = args[i];\n for (property in object) {\n if (object.hasOwnProperty(property)) {\n if (typeof object[property] === 'object') {\n target[property] = extend(target[property], object[property]);\n } else {\n target[property] = object[property];\n }\n }\n }\n }\n return target;\n },\n getComputedStyle = function(el, pseudo) {\n return function(prop) {\n if (window.getComputedStyle) {\n return window.getComputedStyle(el, pseudo)[prop];\n } else {\n return el.currentStyle[prop];\n }\n };\n },\n offsetParent = function(el) {\n if (el.nodeName !== 'HTML' && getComputedStyle(el)('position') === 'static') {\n return offsetParent(el.offsetParent);\n }\n return el;\n },\n getScrollOffset = function() {\n if (window.pageXOffset) {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n return {\n x: document.documentElement.scrollLeft,\n y: document.documentElement.scrollTop\n };\n },\n // unfold sprites configuration by automatically calculating correct window\n // for each sprite image\n unfoldSpritesConf = function(options) {\n var last = {};\n Object.keys(options).forEach(function(key) {\n var s;\n if (!(s = options[key].sprites))\n return;\n delete options[key].sprites;\n if (!s.position && s.interval && s.count) {\n s.position = [];\n for (var i=0; i<s.count; i++)\n s.position.push(+key+i*s.interval);\n }\n var rows = s.rows||1;\n var cols = Math.ceil(s.position.length/rows);\n s.position.forEach(function(pos, i) {\n var x = i%cols, y = Math.floor(i/cols);\n options[pos] = options[pos]||{};\n options[pos] = extend({}, last, options[pos], {\n width: s.width,\n height: s.height,\n style: {\n left: '-'+s.width*x+'px',\n top: '-'+s.height*y+'px',\n }\n });\n last = options[key];\n });\n });\n return options;\n },\n androidHack = function(player) {\n // Android doesn't support :active and :hover on non-anchor and non-button elements\n // so, we need to fake the :active selector for thumbnails to show up.\n if (navigator.userAgent.toLowerCase().indexOf('android') !== -1) {\n var progressControl = player.controlBar.progressControl;\n var addFakeActive = function() {\n progressControl.addClass('fake-active');\n };\n var removeFakeActive = function() {\n progressControl.removeClass('fake-active');\n };\n progressControl.on('touchstart', addFakeActive);\n progressControl.on('touchend', removeFakeActive);\n progressControl.on('touchcancel', removeFakeActive);\n }\n },\n resolveUrl = function(baseUrl, url) {\n var base = document.createElement('base');\n base.href = baseUrl;\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(base, head.firstChild);\n var a = document.createElement('a');\n a.href = url;\n var result = a.href;\n head.removeChild(base);\n return result;\n },\n getConfByVtt = function(track, baseUrl) {\n var res = {}, cues = track.cues;\n for (var i = 0; i < cues.length; i++) {\n var cue = cues[i];\n var thumb = res[cue.startTime] = {\n src: resolveUrl(baseUrl, cue.text.split('#')[0]),\n };\n var opt = cue.text.split('#')[1];\n if (opt && opt.substring(0, 5) === 'xywh=') {\n var params = opt.substring(5).split(',');\n thumb.width = params[2];\n thumb.height = params[3];\n thumb.style = {\n left: '-'+params[0]+'px',\n top: '-'+params[1]+'px',\n };\n }\n }\n return res;\n },\n init = function(player, options) {\n if (player._thumbs) {\n player._thumbs.settings = options;\n return;\n }\n player._thumbs = {settings: options};\n androidHack(player);\n\n // create the thumbnail\n var div = document.createElement('div');\n div.className = 'vjs-thumbnail-holder';\n var img = document.createElement('img');\n div.appendChild(img);\n img.className = 'vjs-thumbnail';\n\n // keep track of the duration to calculate correct thumbnail to display\n var duration = player.duration();\n\n // when the container is MP4\n player.on('durationchange', function(event) {\n duration = player.duration();\n });\n\n // when the container is HLS\n player.on('loadedmetadata', function(event) {\n duration = player.duration();\n });\n\n // add the thumbnail to the player\n var progressControl = player.controlBar.progressControl;\n var seekBar = progressControl.seekBar;\n var el = progressControl.el();\n if (el.firstChild)\n el.insertBefore(div, el.firstChild);\n else\n el.appendChild(div);\n\n var moveListener = function(event) {\n if (event.target === div || event.target === img) {\n return;\n }\n var pageXOffset = getScrollOffset().x;\n var clientRect = offsetParent(progressControl.el()).getBoundingClientRect();\n var right = (clientRect.width || clientRect.right) + pageXOffset;\n\n var pageX = event.pageX;\n if (event.changedTouches) {\n pageX = event.changedTouches[0].pageX;\n }\n\n // find the page offset of the mouse\n var left = pageX || (event.clientX + document.body.scrollLeft +\n document.documentElement.scrollLeft);\n // subtract the page offset of the positioned offset parent\n left -= offsetParent(progressControl.el()).getBoundingClientRect().left +\n pageXOffset;\n\n // apply updated styles to the thumbnail if necessary\n // mouseTime is the position of the mouse along the progress control bar\n // `left` applies to the mouse position relative to the player so we need\n // to remove the progress control's left offset to know the mouse position\n // relative to the progress control\n var mouseTime = Math.floor(seekBar.calculateDistance(event)*duration);\n var active = 0, settings = player._thumbs.settings;\n for (var time in settings) {\n if (mouseTime > time) {\n active = Math.max(active, time);\n }\n }\n var setting = settings[active];\n if (!setting) {\n return;\n }\n var re = /^https?:\\/\\//i;\n if (setting.src && img.src.replace(re, '//') !=\n setting.src.replace(re, '//')) {\n img.src = setting.src;\n }\n var scale = player.hasClass('vjs-fullscreen') ? 1.5 : 1;\n if (setting.style) {\n img.style.left = parseFloat(setting.style.left)*scale+'px';\n img.style.top = parseFloat(setting.style.top)*scale+'px';\n }\n if (img.naturalWidth) {\n img.style.width = img.naturalWidth*scale+'px';\n img.style.height = img.naturalHeight*scale+'px';\n }\n\n var width = parseFloat(setting.width || settings[0].width)*scale;\n var height = parseFloat(setting.height || settings[0].height)*scale;\n var halfWidth = width / 2;\n\n // make sure that the thumbnail doesn't fall off the right side of the\n // left side of the player\n if ((left + halfWidth) > right) {\n left = right - width;\n } else if (left < halfWidth) {\n left = 0;\n } else {\n left -= halfWidth;\n }\n\n div.style.width = width + 'px';\n div.style.height = height + 'px';\n div.style.left = left + 'px';\n div.style.top = '-' + height + 'px';\n div.style.display = 'block';\n };\n\n // update the thumbnail while hovering\n progressControl.on('mousemove', moveListener);\n progressControl.on('touchmove', moveListener);\n\n var moveCancel = function(event) {\n div.style.display = 'none';\n };\n\n // move the placeholder out of the way when not hovering\n progressControl.on('mouseout', moveCancel);\n progressControl.on('touchcancel', moveCancel);\n progressControl.on('touchend', moveCancel);\n player.on('userinactive', moveCancel);\n };\n\n /**\n * register the thubmnails plugin\n */\n videojs.plugin('thumbnails', function(options) {\n if (!options) {\n return;\n }\n var player = this;\n if (!options.vtt) {\n init(player, unfoldSpritesConf(options));\n return;\n }\n var trackEl = player.addRemoteTextTrack({\n id: 'thumbnails',\n kind: 'metadata',\n src: options.vtt,\n });\n trackEl.addEventListener('load', function onLoad() {\n trackEl.removeEventListener('load', onLoad);\n var track = player.textTracks().getTrackById('thumbnails');\n init(player, getConfByVtt(track, options.vtt));\n });\n });\n})();\n","(function(window, vjs){\n'use strict';\nvjs.utils = vjs.utils||{};\n\nfunction local_storage_init(){\n // Cookie functions from\n // https://developer.mozilla.org/en-US/docs/DOM/document.cookie\n function get_cookie_item(key){\n if (!key || !has_cookie_item(key))\n return null;\n var reg_ex = new RegExp('(?:^|.*;\\\\s*)'\n +window.escape(key).replace(/[\\-\\.\\+\\*]/g, '\\\\$&')\n +'\\\\s*\\\\=\\\\s*((?:[^;](?!;))*[^;]?).*');\n return window.unescape(document.cookie.replace(reg_ex, '$1'));\n }\n function set_cookie_item(key, value, end, path, domain, secure){\n if (!key || /^(?:expires|max\\-age|path|domain|secure)$/i.test(key))\n return;\n var expires = '';\n if (end)\n {\n switch (end.constructor)\n {\n case Number:\n expires = end===Infinity\n ? '; expires=Tue, 19 Jan 2038 03:14:07 GMT'\n : '; max-age=' + end;\n break;\n case String:\n expires = '; expires=' + end;\n break;\n case Date:\n expires = '; expires=' + end.toGMTString();\n break;\n }\n }\n document.cookie = window.escape(key)+'='+window.escape(value)+\n expires+(domain ? '; domain='+domain : '')+\n (path ? '; path=' + path : '')+\n (secure ? '; secure' : '');\n }\n function has_cookie_item(key){\n return (new RegExp('(?:^|;\\\\s*)'\n +window.escape(key).replace(/[\\-\\.\\+\\*]/g, '\\\\$&')+'\\\\s*\\\\=')\n ).test(document.cookie);\n }\n function has_local_storage(){\n try {\n window.localStorage.setItem('vjs-storage-test', 'value');\n window.localStorage.removeItem('vjs-storage-test');\n return true;\n } catch(e){ return false; }\n }\n vjs.utils.localStorage = has_local_storage() ? window.localStorage : {\n getItem: get_cookie_item,\n setItem: function(key, value){\n set_cookie_item(key, value, Infinity, '/');\n }\n };\n}\nlocal_storage_init();\n\n})(window, window.videojs);\n","'use strict';\n// For more information about browser field, check out the browser field at https://github.com/substack/browserify-handbook#browser-field.\n\nvar styleElementsInsertedAtTop = [];\n\nvar insertStyleElement = function(styleElement, options) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\n\n options = options || {};\n options.insertAt = options.insertAt || 'bottom';\n\n if (options.insertAt === 'top') {\n if (!lastStyleElementInsertedAtTop) {\n head.insertBefore(styleElement, head.firstChild);\n } else if (lastStyleElementInsertedAtTop.nextSibling) {\n head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\n } else {\n head.appendChild(styleElement);\n }\n styleElementsInsertedAtTop.push(styleElement);\n } else if (options.insertAt === 'bottom') {\n head.appendChild(styleElement);\n } else {\n throw new Error('Invalid value for parameter \\'insertAt\\'. Must be \\'top\\' or \\'bottom\\'.');\n }\n};\n\nmodule.exports = {\n // Create a <link> tag with optional data attributes\n createLink: function(href, attributes) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var link = document.createElement('link');\n\n link.href = href;\n link.rel = 'stylesheet';\n\n for (var key in attributes) {\n if ( ! attributes.hasOwnProperty(key)) {\n continue;\n }\n var value = attributes[key];\n link.setAttribute('data-' + key, value);\n }\n\n head.appendChild(link);\n },\n // Create a <style> tag with optional data attributes\n createStyle: function(cssText, attributes, extraOptions) {\n extraOptions = extraOptions || {};\n\n var style = document.createElement('style');\n style.type = 'text/css';\n\n for (var key in attributes) {\n if ( ! attributes.hasOwnProperty(key)) {\n continue;\n }\n var value = attributes[key];\n style.setAttribute('data-' + key, value);\n }\n\n if (style.sheet) { // for jsdom and IE9+\n style.innerHTML = cssText;\n style.sheet.cssText = cssText;\n insertStyleElement(style, { insertAt: extraOptions.insertAt });\n } else if (style.styleSheet) { // for IE8 and below\n insertStyleElement(style, { insertAt: extraOptions.insertAt });\n style.styleSheet.cssText = cssText;\n } else { // for Chrome, Firefox, and Safari\n style.appendChild(document.createTextNode(cssText));\n insertStyleElement(style, { insertAt: extraOptions.insertAt });\n }\n }\n};\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});","var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n","var closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n","var topLevel = typeof global !== 'undefined' ? global :\n typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n doccy = document;\n} else {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n}\n\nmodule.exports = doccy;\n","var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\"){\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n","/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n","var is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;\n","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nmodule.exports = baseSome;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var arraySome = require('./_arraySome'),\n baseIteratee = require('./_baseIteratee'),\n baseSome = require('./_baseSome'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","function select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","/**\n * @license\n * Video.js 5.10.2 <http://videojs.com/>\n * Copyright Brightcove, Inc. <https://www.brightcove.com/>\n * Available under Apache License Version 2.0\n * <https://github.com/videojs/video.js/blob/master/LICENSE>\n *\n * Includes vtt.js <https://github.com/mozilla/vtt.js>\n * Available under Apache License Version 2.0\n * <https://github.com/mozilla/vtt.js/blob/master/LICENSE>\n */\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.videojs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\n\nvar keys = _dereq_('object-keys');\nvar foreach = _dereq_('foreach');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\n\nvar toStr = Object.prototype.toString;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\tObject.defineProperty(obj, 'x', { enumerable: false, value: obj });\n /* eslint-disable no-unused-vars, no-restricted-syntax */\n for (var _ in obj) { return false; }\n /* eslint-enable no-unused-vars, no-restricted-syntax */\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\tObject.defineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = props.concat(Object.getOwnPropertySymbols(map));\n\t}\n\tforeach(props, function (name) {\n\t\tdefineProperty(object, name, map[name], predicates[name]);\n\t});\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n\n},{\"foreach\":4,\"object-keys\":49}],3:[function(_dereq_,module,exports){\nvar isFunction = _dereq_('is-function')\n\nmodule.exports = forEach\n\nvar toString = Object.prototype.toString\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction forEach(list, iterator, context) {\n if (!isFunction(iterator)) {\n throw new TypeError('iterator must be a function')\n }\n\n if (arguments.length < 3) {\n context = this\n }\n \n if (toString.call(list) === '[object Array]')\n forEachArray(list, iterator, context)\n else if (typeof list === 'string')\n forEachString(list, iterator, context)\n else\n forEachObject(list, iterator, context)\n}\n\nfunction forEachArray(array, iterator, context) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n iterator.call(context, array[i], i, array)\n }\n }\n}\n\nfunction forEachString(string, iterator, context) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n iterator.call(context, string.charAt(i), i, string)\n }\n}\n\nfunction forEachObject(object, iterator, context) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n iterator.call(context, object[k], k, object)\n }\n }\n}\n\n},{\"is-function\":9}],4:[function(_dereq_,module,exports){\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n\n},{}],5:[function(_dereq_,module,exports){\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n\n},{}],6:[function(_dereq_,module,exports){\nvar implementation = _dereq_('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n\n},{\"./implementation\":5}],7:[function(_dereq_,module,exports){\n(function (global){\nvar topLevel = typeof global !== 'undefined' ? global :\n typeof window !== 'undefined' ? window : {}\nvar minDoc = _dereq_('min-document');\n\nif (typeof document !== 'undefined') {\n module.exports = document;\n} else {\n var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n\n module.exports = doccy;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"min-document\":1}],8:[function(_dereq_,module,exports){\n(function (global){\nif (typeof window !== \"undefined\") {\n module.exports = window;\n} else if (typeof global !== \"undefined\") {\n module.exports = global;\n} else if (typeof self !== \"undefined\"){\n module.exports = self;\n} else {\n module.exports = {};\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],9:[function(_dereq_,module,exports){\nmodule.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n var string = toString.call(fn)\n return string === '[object Function]' ||\n (typeof fn === 'function' && string !== '[object RegExp]') ||\n (typeof window !== 'undefined' &&\n // IE8 and below\n (fn === window.setTimeout ||\n fn === window.alert ||\n fn === window.confirm ||\n fn === window.prompt))\n};\n\n},{}],10:[function(_dereq_,module,exports){\nvar getNative = _dereq_('../internal/getNative');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeNow = getNative(Date, 'now');\n\n/**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\nvar now = nativeNow || function() {\n return new Date().getTime();\n};\n\nmodule.exports = now;\n\n},{\"../internal/getNative\":26}],11:[function(_dereq_,module,exports){\nvar isObject = _dereq_('../lang/isObject'),\n now = _dereq_('../date/now');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\nfunction debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n debounced.cancel = cancel;\n return debounced;\n}\n\nmodule.exports = debounce;\n\n},{\"../date/now\":10,\"../lang/isObject\":39}],12:[function(_dereq_,module,exports){\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n\n},{}],13:[function(_dereq_,module,exports){\nvar debounce = _dereq_('./debounce'),\n isObject = _dereq_('../lang/isObject');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed invocations. Provide an options object to indicate\n * that `func` should be invoked on the leading and/or trailing edge of the\n * `wait` timeout. Subsequent calls to the throttled function return the\n * result of the last `func` call.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the throttled function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=true] Specify invoking on the leading\n * edge of the timeout.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // avoid excessively updating the position while scrolling\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\n * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n * 'trailing': false\n * }));\n *\n * // cancel a trailing throttled call\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (options === false) {\n leading = false;\n } else if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n}\n\nmodule.exports = throttle;\n\n},{\"../lang/isObject\":39,\"./debounce\":11}],14:[function(_dereq_,module,exports){\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = arrayCopy;\n\n},{}],15:[function(_dereq_,module,exports){\n/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n\n},{}],16:[function(_dereq_,module,exports){\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n\n},{}],17:[function(_dereq_,module,exports){\nvar createBaseFor = _dereq_('./createBaseFor');\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n\n},{\"./createBaseFor\":24}],18:[function(_dereq_,module,exports){\nvar baseFor = _dereq_('./baseFor'),\n keysIn = _dereq_('../object/keysIn');\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n return baseFor(object, iteratee, keysIn);\n}\n\nmodule.exports = baseForIn;\n\n},{\"../object/keysIn\":45,\"./baseFor\":17}],19:[function(_dereq_,module,exports){\nvar arrayEach = _dereq_('./arrayEach'),\n baseMergeDeep = _dereq_('./baseMergeDeep'),\n isArray = _dereq_('../lang/isArray'),\n isArrayLike = _dereq_('./isArrayLike'),\n isObject = _dereq_('../lang/isObject'),\n isObjectLike = _dereq_('./isObjectLike'),\n isTypedArray = _dereq_('../lang/isTypedArray'),\n keys = _dereq_('../object/keys');\n\n/**\n * The base implementation of `_.merge` without support for argument juggling,\n * multiple sources, and `this` binding `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {Object} Returns `object`.\n */\nfunction baseMerge(object, source, customizer, stackA, stackB) {\n if (!isObject(object)) {\n return object;\n }\n var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n props = isSrcArr ? undefined : keys(source);\n\n arrayEach(props || source, function(srcValue, key) {\n if (props) {\n key = srcValue;\n srcValue = source[key];\n }\n if (isObjectLike(srcValue)) {\n stackA || (stackA = []);\n stackB || (stackB = []);\n baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n }\n else {\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n }\n if ((result !== undefined || (isSrcArr && !(key in object))) &&\n (isCommon || (result === result ? (result !== value) : (value === value)))) {\n object[key] = result;\n }\n }\n });\n return object;\n}\n\nmodule.exports = baseMerge;\n\n},{\"../lang/isArray\":36,\"../lang/isObject\":39,\"../lang/isTypedArray\":42,\"../object/keys\":44,\"./arrayEach\":15,\"./baseMergeDeep\":20,\"./isArrayLike\":27,\"./isObjectLike\":32}],20:[function(_dereq_,module,exports){\nvar arrayCopy = _dereq_('./arrayCopy'),\n isArguments = _dereq_('../lang/isArguments'),\n isArray = _dereq_('../lang/isArray'),\n isArrayLike = _dereq_('./isArrayLike'),\n isPlainObject = _dereq_('../lang/isPlainObject'),\n isTypedArray = _dereq_('../lang/isTypedArray'),\n toPlainObject = _dereq_('../lang/toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n var length = stackA.length,\n srcValue = source[key];\n\n while (length--) {\n if (stackA[length] == srcValue) {\n object[key] = stackB[length];\n return;\n }\n }\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n result = isArray(value)\n ? value\n : (isArrayLike(value) ? arrayCopy(value) : []);\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n result = isArguments(value)\n ? toPlainObject(value)\n : (isPlainObject(value) ? value : {});\n }\n else {\n isCommon = false;\n }\n }\n // Add the source value to the stack of traversed objects and associate\n // it with its merged value.\n stackA.push(srcValue);\n stackB.push(result);\n\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n } else if (result === result ? (result !== value) : (value === value)) {\n object[key] = result;\n }\n}\n\nmodule.exports = baseMergeDeep;\n\n},{\"../lang/isArguments\":35,\"../lang/isArray\":36,\"../lang/isPlainObject\":40,\"../lang/isTypedArray\":42,\"../lang/toPlainObject\":43,\"./arrayCopy\":14,\"./isArrayLike\":27}],21:[function(_dereq_,module,exports){\nvar toObject = _dereq_('./toObject');\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : toObject(object)[key];\n };\n}\n\nmodule.exports = baseProperty;\n\n},{\"./toObject\":34}],22:[function(_dereq_,module,exports){\nvar identity = _dereq_('../utility/identity');\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\nmodule.exports = bindCallback;\n\n},{\"../utility/identity\":48}],23:[function(_dereq_,module,exports){\nvar bindCallback = _dereq_('./bindCallback'),\n isIterateeCall = _dereq_('./isIterateeCall'),\n restParam = _dereq_('../function/restParam');\n\n/**\n * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return restParam(function(object, sources) {\n var index = -1,\n length = object == null ? 0 : sources.length,\n customizer = length > 2 ? sources[length - 2] : undefined,\n guard = length > 2 ? sources[2] : undefined,\n thisArg = length > 1 ? sources[length - 1] : undefined;\n\n if (typeof customizer == 'function') {\n customizer = bindCallback(customizer, thisArg, 5);\n length -= 2;\n } else {\n customizer = typeof thisArg == 'function' ? thisArg : undefined;\n length -= (customizer ? 1 : 0);\n }\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n},{\"../function/restParam\":12,\"./bindCallback\":22,\"./isIterateeCall\":30}],24:[function(_dereq_,module,exports){\nvar toObject = _dereq_('./toObject');\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var iterable = toObject(object),\n props = keysFunc(object),\n length = props.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length)) {\n var key = props[index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n\n},{\"./toObject\":34}],25:[function(_dereq_,module,exports){\nvar baseProperty = _dereq_('./baseProperty');\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\nmodule.exports = getLength;\n\n},{\"./baseProperty\":21}],26:[function(_dereq_,module,exports){\nvar isNative = _dereq_('../lang/isNative');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n\n},{\"../lang/isNative\":38}],27:[function(_dereq_,module,exports){\nvar getLength = _dereq_('./getLength'),\n isLength = _dereq_('./isLength');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\nmodule.exports = isArrayLike;\n\n},{\"./getLength\":25,\"./isLength\":31}],28:[function(_dereq_,module,exports){\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nvar isHostObject = (function() {\n try {\n Object({ 'toString': 0 } + '');\n } catch(e) {\n return function() { return false; };\n }\n return function(value) {\n // IE < 9 presents many host objects as `Object` objects that can coerce\n // to strings despite having improperly defined `toString` methods.\n return typeof value.toString != 'function' && typeof (value + '') == 'string';\n };\n}());\n\nmodule.exports = isHostObject;\n\n},{}],29:[function(_dereq_,module,exports){\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;\n\n},{}],30:[function(_dereq_,module,exports){\nvar isArrayLike = _dereq_('./isArrayLike'),\n isIndex = _dereq_('./isIndex'),\n isObject = _dereq_('../lang/isObject');\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n},{\"../lang/isObject\":39,\"./isArrayLike\":27,\"./isIndex\":29}],31:[function(_dereq_,module,exports){\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n\n},{}],32:[function(_dereq_,module,exports){\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n},{}],33:[function(_dereq_,module,exports){\nvar isArguments = _dereq_('../lang/isArguments'),\n isArray = _dereq_('../lang/isArray'),\n isIndex = _dereq_('./isIndex'),\n isLength = _dereq_('./isLength'),\n isString = _dereq_('../lang/isString'),\n keysIn = _dereq_('../object/keysIn');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = !!length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = shimKeys;\n\n},{\"../lang/isArguments\":35,\"../lang/isArray\":36,\"../lang/isString\":41,\"../object/keysIn\":45,\"./isIndex\":29,\"./isLength\":31}],34:[function(_dereq_,module,exports){\nvar isObject = _dereq_('../lang/isObject'),\n isString = _dereq_('../lang/isString'),\n support = _dereq_('../support');\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n if (support.unindexedChars && isString(value)) {\n var index = -1,\n length = value.length,\n result = Object(value);\n\n while (++index < length) {\n result[index] = value.charAt(index);\n }\n return result;\n }\n return isObject(value) ? value : Object(value);\n}\n\nmodule.exports = toObject;\n\n},{\"../lang/isObject\":39,\"../lang/isString\":41,\"../support\":47}],35:[function(_dereq_,module,exports){\nvar isArrayLike = _dereq_('../internal/isArrayLike'),\n isObjectLike = _dereq_('../internal/isObjectLike');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n return isObjectLike(value) && isArrayLike(value) &&\n hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n\n},{\"../internal/isArrayLike\":27,\"../internal/isObjectLike\":32}],36:[function(_dereq_,module,exports){\nvar getNative = _dereq_('../internal/getNative'),\n isLength = _dereq_('../internal/isLength'),\n isObjectLike = _dereq_('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\nmodule.exports = isArray;\n\n},{\"../internal/getNative\":26,\"../internal/isLength\":31,\"../internal/isObjectLike\":32}],37:[function(_dereq_,module,exports){\nvar isObject = _dereq_('./isObject');\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 which returns 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\nmodule.exports = isFunction;\n\n},{\"./isObject\":39}],38:[function(_dereq_,module,exports){\nvar isFunction = _dereq_('./isFunction'),\n isHostObject = _dereq_('../internal/isHostObject'),\n isObjectLike = _dereq_('../internal/isObjectLike');\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = isNative;\n\n},{\"../internal/isHostObject\":28,\"../internal/isObjectLike\":32,\"./isFunction\":37}],39:[function(_dereq_,module,exports){\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n},{}],40:[function(_dereq_,module,exports){\nvar baseForIn = _dereq_('../internal/baseForIn'),\n isArguments = _dereq_('./isArguments'),\n isHostObject = _dereq_('../internal/isHostObject'),\n isObjectLike = _dereq_('../internal/isObjectLike'),\n support = _dereq_('../support');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n var Ctor;\n\n // Exit early for non `Object` objects.\n if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||\n (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n return false;\n }\n // IE < 9 iterates inherited properties before own properties. If the first\n // iterated property is an object's own property then there are no inherited\n // enumerable properties.\n var result;\n if (support.ownLast) {\n baseForIn(value, function(subValue, key, object) {\n result = hasOwnProperty.call(object, key);\n return false;\n });\n return result !== false;\n }\n // In most environments an object's own properties are iterated before\n // its inherited properties. If the last iterated property is an object's\n // own property then there are no inherited enumerable properties.\n baseForIn(value, function(subValue, key) {\n result = key;\n });\n return result === undefined || hasOwnProperty.call(value, result);\n}\n\nmodule.exports = isPlainObject;\n\n},{\"../internal/baseForIn\":18,\"../internal/isHostObject\":28,\"../internal/isObjectLike\":32,\"../support\":47,\"./isArguments\":35}],41:[function(_dereq_,module,exports){\nvar isObjectLike = _dereq_('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n\n},{\"../internal/isObjectLike\":32}],42:[function(_dereq_,module,exports){\nvar isLength = _dereq_('../internal/isLength'),\n isObjectLike = _dereq_('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n\n},{\"../internal/isLength\":31,\"../internal/isObjectLike\":32}],43:[function(_dereq_,module,exports){\nvar baseCopy = _dereq_('../internal/baseCopy'),\n keysIn = _dereq_('../object/keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable\n * properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return baseCopy(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n\n},{\"../internal/baseCopy\":16,\"../object/keysIn\":45}],44:[function(_dereq_,module,exports){\nvar getNative = _dereq_('../internal/getNative'),\n isArrayLike = _dereq_('../internal/isArrayLike'),\n isObject = _dereq_('../lang/isObject'),\n shimKeys = _dereq_('../internal/shimKeys'),\n support = _dereq_('../support');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object == null ? undefined : object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\nmodule.exports = keys;\n\n},{\"../internal/getNative\":26,\"../internal/isArrayLike\":27,\"../internal/shimKeys\":33,\"../lang/isObject\":39,\"../support\":47}],45:[function(_dereq_,module,exports){\nvar arrayEach = _dereq_('../internal/arrayEach'),\n isArguments = _dereq_('../lang/isArguments'),\n isArray = _dereq_('../lang/isArray'),\n isFunction = _dereq_('../lang/isFunction'),\n isIndex = _dereq_('../internal/isIndex'),\n isLength = _dereq_('../internal/isLength'),\n isObject = _dereq_('../lang/isObject'),\n isString = _dereq_('../lang/isString'),\n support = _dereq_('../support');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n stringTag = '[object String]';\n\n/** Used to fix the JScript `[[DontEnum]]` bug. */\nvar shadowProps = [\n 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n 'toLocaleString', 'toString', 'valueOf'\n];\n\n/** Used for native method references. */\nvar errorProto = Error.prototype,\n objectProto = Object.prototype,\n stringProto = String.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to avoid iterating over non-enumerable properties in IE < 9. */\nvar nonEnumProps = {};\nnonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };\nnonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };\nnonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };\nnonEnumProps[objectTag] = { 'constructor': true };\n\narrayEach(shadowProps, function(key) {\n for (var tag in nonEnumProps) {\n if (hasOwnProperty.call(nonEnumProps, tag)) {\n var props = nonEnumProps[tag];\n props[key] = hasOwnProperty.call(props, key);\n }\n }\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n\n length = (length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object)) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,\n isProto = proto === object,\n result = Array(length),\n skipIndexes = length > 0,\n skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),\n skipProto = support.enumPrototypes && isFunction(object);\n\n while (++index < length) {\n result[index] = (index + '');\n }\n // lodash skips the `constructor` property when it infers it's iterating\n // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`\n // attribute of an existing property and the `constructor` property of a\n // prototype defaults to non-enumerable.\n for (var key in object) {\n if (!(skipProto && key == 'prototype') &&\n !(skipErrorProps && (key == 'message' || key == 'name')) &&\n !(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n if (support.nonEnumShadows && object !== objectProto) {\n var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),\n nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];\n\n if (tag == objectTag) {\n proto = objectProto;\n }\n length = shadowProps.length;\n while (length--) {\n key = shadowProps[length];\n var nonEnum = nonEnums[key];\n if (!(isProto && nonEnum) &&\n (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {\n result.push(key);\n }\n }\n }\n return result;\n}\n\nmodule.exports = keysIn;\n\n},{\"../internal/arrayEach\":15,\"../internal/isIndex\":29,\"../internal/isLength\":31,\"../lang/isArguments\":35,\"../lang/isArray\":36,\"../lang/isFunction\":37,\"../lang/isObject\":39,\"../lang/isString\":41,\"../support\":47}],46:[function(_dereq_,module,exports){\nvar baseMerge = _dereq_('../internal/baseMerge'),\n createAssigner = _dereq_('../internal/createAssigner');\n\n/**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * overwrite property assignments of previous sources. If `customizer` is\n * provided it's invoked to produce the merged values of the destination and\n * source properties. If `customizer` returns `undefined` merging is handled\n * by the method instead. The `customizer` is bound to `thisArg` and invoked\n * with five arguments: (objectValue, sourceValue, key, object, source).\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var users = {\n * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n * };\n *\n * var ages = {\n * 'data': [{ 'age': 36 }, { 'age': 40 }]\n * };\n *\n * _.merge(users, ages);\n * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n *\n * // using a customizer callback\n * var object = {\n * 'fruits': ['apple'],\n * 'vegetables': ['beet']\n * };\n *\n * var other = {\n * 'fruits': ['banana'],\n * 'vegetables': ['carrot']\n * };\n *\n * _.merge(object, other, function(a, b) {\n * if (_.isArray(a)) {\n * return a.concat(b);\n * }\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n */\nvar merge = createAssigner(baseMerge);\n\nmodule.exports = merge;\n\n},{\"../internal/baseMerge\":19,\"../internal/createAssigner\":23}],47:[function(_dereq_,module,exports){\n/** Used for native method references. */\nvar arrayProto = Array.prototype,\n errorProto = Error.prototype,\n objectProto = Object.prototype;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n var Ctor = function() { this.x = x; },\n object = { '0': x, 'length': x },\n props = [];\n\n Ctor.prototype = { 'valueOf': x, 'y': x };\n for (var key in new Ctor) { props.push(key); }\n\n /**\n * Detect if `name` or `message` properties of `Error.prototype` are\n * enumerable by default (IE < 9, Safari < 5.1).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||\n propertyIsEnumerable.call(errorProto, 'name');\n\n /**\n * Detect if `prototype` properties are enumerable by default.\n *\n * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1\n * (if the prototype or a property on the prototype has been set)\n * incorrectly set the `[[Enumerable]]` value of a function's `prototype`\n * property to `true`.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');\n\n /**\n * Detect if properties shadowing those on `Object.prototype` are non-enumerable.\n *\n * In IE < 9 an object's own properties, shadowing non-enumerable ones,\n * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.nonEnumShadows = !/valueOf/.test(props);\n\n /**\n * Detect if own properties are iterated after inherited properties (IE < 9).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.ownLast = props[0] != 'x';\n\n /**\n * Detect if `Array#shift` and `Array#splice` augment array-like objects\n * correctly.\n *\n * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array\n * `shift()` and `splice()` functions that fail to remove the last element,\n * `value[0]`, of array-like objects even though the \"length\" property is\n * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,\n * while `splice()` is buggy regardless of mode in IE < 9.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.spliceObjects = (splice.call(object, 0, 1), !object[0]);\n\n /**\n * Detect lack of support for accessing string characters by index.\n *\n * IE < 8 can't access characters by index. IE 8 can only access characters\n * by index on string literals, not string objects.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';\n}(1, 0));\n\nmodule.exports = support;\n\n},{}],48:[function(_dereq_,module,exports){\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n\n},{}],49:[function(_dereq_,module,exports){\n'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = _dereq_('./isArguments');\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\nvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\nvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar excludedKeys = {\n\t$console: true,\n\t$external: true,\n\t$frame: true,\n\t$frameElement: true,\n\t$frames: true,\n\t$innerHeight: true,\n\t$innerWidth: true,\n\t$outerHeight: true,\n\t$outerWidth: true,\n\t$pageXOffset: true,\n\t$pageYOffset: true,\n\t$parent: true,\n\t$scrollLeft: true,\n\t$scrollTop: true,\n\t$scrollX: true,\n\t$scrollY: true,\n\t$self: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true,\n\t$window: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\ttry {\n\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\ttry {\n\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n\n},{\"./isArguments\":50}],50:[function(_dereq_,module,exports){\n'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n\n},{}],51:[function(_dereq_,module,exports){\n'use strict';\n\nvar keys = _dereq_('object-keys');\n\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; }\n\tif (keys(obj).length !== 0) { return false; }\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n\n},{\"object-keys\":49}],52:[function(_dereq_,module,exports){\n'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = _dereq_('object-keys');\nvar bind = _dereq_('function-bind');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = _dereq_('./hasSymbols')();\nvar toObject = Object;\nvar push = bind.call(Function.call, Array.prototype.push);\nvar propIsEnumerable = bind.call(Function.call, Object.prototype.propertyIsEnumerable);\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\nmodule.exports = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms, value, key;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tsyms = getSymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tkey = syms[i];\n\t\t\t\tif (propIsEnumerable(source, key)) {\n\t\t\t\t\tpush(props, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tkey = props[i];\n\t\t\tvalue = source[key];\n\t\t\tif (propIsEnumerable(source, key)) {\n\t\t\t\tobjTarget[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn objTarget;\n};\n\n},{\"./hasSymbols\":51,\"function-bind\":6,\"object-keys\":49}],53:[function(_dereq_,module,exports){\n'use strict';\n\nvar defineProperties = _dereq_('define-properties');\n\nvar implementation = _dereq_('./implementation');\nvar getPolyfill = _dereq_('./polyfill');\nvar shim = _dereq_('./shim');\n\nvar polyfill = getPolyfill();\n\ndefineProperties(polyfill, {\n\timplementation: implementation,\n\tgetPolyfill: getPolyfill,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n\n},{\"./implementation\":52,\"./polyfill\":54,\"./shim\":55,\"define-properties\":2}],54:[function(_dereq_,module,exports){\n'use strict';\n\nvar implementation = _dereq_('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t// v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t// note: this does not detect the bug unless there's 20 characters\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t// which is 72% slower than our shim, and Firefox 40's native implementation.\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n\n},{\"./implementation\":52}],55:[function(_dereq_,module,exports){\n'use strict';\n\nvar define = _dereq_('define-properties');\nvar getPolyfill = _dereq_('./polyfill');\n\nmodule.exports = function shimAssign() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tObject,\n\t\t{ assign: polyfill },\n\t\t{ assign: function () { return Object.assign !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n\n},{\"./polyfill\":54,\"define-properties\":2}],56:[function(_dereq_,module,exports){\nvar trim = _dereq_('trim')\n , forEach = _dereq_('for-each')\n , isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }\n\nmodule.exports = function (headers) {\n if (!headers)\n return {}\n\n var result = {}\n\n forEach(\n trim(headers).split('\\n')\n , function (row) {\n var index = row.indexOf(':')\n , key = trim(row.slice(0, index)).toLowerCase()\n , value = trim(row.slice(index + 1))\n\n if (typeof(result[key]) === 'undefined') {\n result[key] = value\n } else if (isArray(result[key])) {\n result[key].push(value)\n } else {\n result[key] = [ result[key], value ]\n }\n }\n )\n\n return result\n}\n},{\"for-each\":3,\"trim\":58}],57:[function(_dereq_,module,exports){\nmodule.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n\n},{}],58:[function(_dereq_,module,exports){\n\nexports = module.exports = trim;\n\nfunction trim(str){\n return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n return str.replace(/\\s*$/, '');\n};\n\n},{}],59:[function(_dereq_,module,exports){\nfunction clean (s) {\n return s.replace(/\\n\\r?\\s*/g, '')\n}\n\n\nmodule.exports = function tsml (sa) {\n var s = ''\n , i = 0\n\n for (; i < arguments.length; i++)\n s += clean(sa[i]) + (arguments[i + 1] || '')\n\n return s\n}\n},{}],60:[function(_dereq_,module,exports){\n\"use strict\";\nvar window = _dereq_(\"global/window\")\nvar isFunction = _dereq_(\"is-function\")\nvar parseHeaders = _dereq_(\"parse-headers\")\nvar xtend = _dereq_(\"xtend\")\n\nmodule.exports = createXHR\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function(method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function(uri, options, callback) {\n options = initParams(uri, options, callback)\n options.method = method.toUpperCase()\n return _createXHR(options)\n }\n})\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i])\n }\n}\n\nfunction isEmpty(obj){\n for(var i in obj){\n if(obj.hasOwnProperty(i)) return false\n }\n return true\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri\n\n if (isFunction(options)) {\n callback = options\n if (typeof uri === \"string\") {\n params = {uri:uri}\n }\n } else {\n params = xtend(options, {uri: uri})\n }\n\n params.callback = callback\n return params\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback)\n return _createXHR(options)\n}\n\nfunction _createXHR(options) {\n if(typeof options.callback === \"undefined\"){\n throw new Error(\"callback argument missing\")\n }\n\n var called = false\n var callback = function cbOnce(err, response, body){\n if(!called){\n called = true\n options.callback(err, response, body)\n }\n }\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n loadFunc()\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined\n\n if (xhr.response) {\n body = xhr.response\n } else {\n body = xhr.responseText || getXml(xhr)\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body)\n } catch (e) {}\n }\n\n return body\n }\n\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer)\n if(!(evt instanceof Error)){\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n }\n evt.statusCode = 0\n return callback(evt, failureResponse)\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return\n var status\n clearTimeout(timeoutTimer)\n if(options.useXDR && xhr.status===undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200\n } else {\n status = (xhr.status === 1223 ? 204 : xhr.status)\n }\n var response = failureResponse\n var err = null\n\n if (status !== 0){\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n }\n if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders())\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\")\n }\n return callback(err, response, response.body)\n }\n\n var xhr = options.xhr || null\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest()\n }else{\n xhr = new createXHR.XMLHttpRequest()\n }\n }\n\n var key\n var aborted\n var uri = xhr.url = options.uri || options.url\n var method = xhr.method = options.method || \"GET\"\n var body = options.body || options.data || null\n var headers = xhr.headers = options.headers || {}\n var sync = !!options.sync\n var isJson = false\n var timeoutTimer\n\n if (\"json\" in options) {\n isJson = true\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n body = JSON.stringify(options.json)\n }\n }\n\n xhr.onreadystatechange = readystatechange\n xhr.onload = loadFunc\n xhr.onerror = errorFunc\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n }\n xhr.ontimeout = errorFunc\n xhr.open(method, uri, !sync, options.username, options.password)\n //has to be after open\n if(!sync) {\n xhr.withCredentials = !!options.withCredentials\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0 ) {\n timeoutTimer = setTimeout(function(){\n aborted=true//IE9 may still call readystatechange\n xhr.abort(\"timeout\")\n var e = new Error(\"XMLHttpRequest timeout\")\n e.code = \"ETIMEDOUT\"\n errorFunc(e)\n }, options.timeout )\n }\n\n if (xhr.setRequestHeader) {\n for(key in headers){\n if(headers.hasOwnProperty(key)){\n xhr.setRequestHeader(key, headers[key])\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType\n }\n\n if (\"beforeSend\" in options &&\n typeof options.beforeSend === \"function\"\n ) {\n options.beforeSend(xhr)\n }\n\n xhr.send(body)\n\n return xhr\n\n\n}\n\nfunction getXml(xhr) {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML\n }\n var firefoxBugTakenEffect = xhr.status === 204 && xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\"\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML\n }\n\n return null\n}\n\nfunction noop() {}\n\n},{\"global/window\":8,\"is-function\":9,\"parse-headers\":56,\"xtend\":61}],61:[function(_dereq_,module,exports){\nmodule.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n\n},{}],62:[function(_dereq_,module,exports){\n/**\n * @file big-play-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _buttonJs = _dereq_('./button.js');\n\nvar _buttonJs2 = _interopRequireDefault(_buttonJs);\n\nvar _componentJs = _dereq_('./component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Button\n * @class BigPlayButton\n */\n\nvar BigPlayButton = (function (_Button) {\n _inherits(BigPlayButton, _Button);\n\n function BigPlayButton(player, options) {\n _classCallCheck(this, BigPlayButton);\n\n _Button.call(this, player, options);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n BigPlayButton.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-big-play-button';\n };\n\n /**\n * Handles click for play\n *\n * @method handleClick\n */\n\n BigPlayButton.prototype.handleClick = function handleClick() {\n this.player_.play();\n };\n\n /**\n * Return handler for the tooltip\n *\n * @return {Object} Dom element to serve as a handler for the tooltip\n * @method tooltipHandler\n */\n\n BigPlayButton.prototype.tooltipHandler = function tooltipHandler() {\n if (this.options_.tooltip !== undefined) {\n return _Button.prototype.tooltipHandler.call(this);\n }\n };\n\n return BigPlayButton;\n})(_buttonJs2['default']);\n\nBigPlayButton.prototype.controlText_ = 'Play Video';\n\n_componentJs2['default'].registerComponent('BigPlayButton', BigPlayButton);\nexports['default'] = BigPlayButton;\nmodule.exports = exports['default'];\n\n},{\"./button.js\":63,\"./component.js\":66}],63:[function(_dereq_,module,exports){\n/**\n * @file button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _clickableComponentJs = _dereq_('./clickable-component.js');\n\nvar _clickableComponentJs2 = _interopRequireDefault(_clickableComponentJs);\n\nvar _component = _dereq_('./component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _utilsEventsJs = _dereq_('./utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar _utilsFnJs = _dereq_('./utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsLogJs = _dereq_('./utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends ClickableComponent\n * @class Button\n */\n\nvar Button = (function (_ClickableComponent) {\n _inherits(Button, _ClickableComponent);\n\n function Button(player, options) {\n _classCallCheck(this, Button);\n\n _ClickableComponent.call(this, player, options);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Element's node type. e.g. 'div'\n * @param {Object=} props An object of properties that should be set on the element\n * @param {Object=} attributes An object of attributes that should be set on the element\n * @return {Element}\n * @method createEl\n */\n\n Button.prototype.createEl = function createEl() {\n var tag = arguments.length <= 0 || arguments[0] === undefined ? 'button' : arguments[0];\n var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n props = _objectAssign2['default']({\n className: this.buildCSSClass()\n }, props);\n\n if (tag !== 'button') {\n _utilsLogJs2['default'].warn('Creating a Button with an HTML element of ' + tag + ' is deprecated; use ClickableComponent instead.');\n\n // Add properties for clickable element which is not a native HTML button\n props = _objectAssign2['default']({\n tabIndex: 0\n }, props);\n\n // Add ARIA attributes for clickable element which is not a native HTML button\n attributes = _objectAssign2['default']({\n role: 'button'\n }, attributes);\n }\n\n // Add attributes for button element\n attributes = _objectAssign2['default']({\n type: 'button', // Necessary since the default button type is \"submit\"\n 'aria-live': 'polite' // let the screen reader user know that the text of the button may change\n }, attributes);\n\n var el = _component2['default'].prototype.createEl.call(this, tag, props, attributes);\n\n this.createControlTextEl(el);\n\n return el;\n };\n\n /**\n * Adds a child component inside this button\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @deprecated\n * @method addChild\n */\n\n Button.prototype.addChild = function addChild(child) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var className = this.constructor.name;\n _utilsLogJs2['default'].warn('Adding an actionable (user controllable) child to a Button (' + className + ') is not supported; use a ClickableComponent instead.');\n\n // Avoid the error message generated by ClickableComponent's addChild method\n return _component2['default'].prototype.addChild.call(this, child, options);\n };\n\n /**\n * Handle KeyPress (document level) - Extend with specific functionality for button\n *\n * @method handleKeyPress\n */\n\n Button.prototype.handleKeyPress = function handleKeyPress(event) {\n // Ignore Space (32) or Enter (13) key operation, which is handled by the browser for a button.\n if (event.which === 32 || event.which === 13) {} else {\n _ClickableComponent.prototype.handleKeyPress.call(this, event); // Pass keypress handling up for unsupported keys\n }\n };\n\n return Button;\n})(_clickableComponentJs2['default']);\n\n_component2['default'].registerComponent('Button', Button);\nexports['default'] = Button;\nmodule.exports = exports['default'];\n\n},{\"./clickable-component.js\":64,\"./component\":66,\"./utils/events.js\":145,\"./utils/fn.js\":146,\"./utils/log.js\":149,\"global/document\":7,\"object.assign\":53}],64:[function(_dereq_,module,exports){\n/**\n * @file button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _component = _dereq_('./component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _utilsDomJs = _dereq_('./utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsEventsJs = _dereq_('./utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar _utilsFnJs = _dereq_('./utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsLogJs = _dereq_('./utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _tooltip = _dereq_('./tooltip');\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\n/**\n * Clickable Component which is clickable or keyboard actionable, but is not a native HTML button\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class ClickableComponent\n */\n\nvar ClickableComponent = (function (_Component) {\n _inherits(ClickableComponent, _Component);\n\n function ClickableComponent(player, options) {\n _classCallCheck(this, ClickableComponent);\n\n _Component.call(this, player, options);\n\n this.appendTooltip();\n\n this.emitTapEvents();\n\n this.on('tap', this.handleClick);\n this.on('click', this.handleClick);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Element's node type. e.g. 'div'\n * @param {Object=} props An object of properties that should be set on the element\n * @param {Object=} attributes An object of attributes that should be set on the element\n * @return {Element}\n * @method createEl\n */\n\n ClickableComponent.prototype.createEl = function createEl() {\n var tag = arguments.length <= 0 || arguments[0] === undefined ? 'div' : arguments[0];\n var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n props = _objectAssign2['default']({\n className: this.buildCSSClass(),\n tabIndex: 0\n }, props);\n\n if (tag === 'button') {\n _utilsLogJs2['default'].error('Creating a ClickableComponent with an HTML element of ' + tag + ' is not supported; use a Button instead.');\n }\n\n // Add ARIA attributes for clickable element which is not a native HTML button\n attributes = _objectAssign2['default']({\n role: 'button',\n 'aria-live': 'polite' // let the screen reader user know that the text of the element may change\n }, attributes);\n\n var el = _Component.prototype.createEl.call(this, tag, props, attributes);\n\n this.createControlTextEl(el);\n\n return el;\n };\n\n /**\n * create control text\n *\n * @param {Element} el Parent element for the control text\n * @return {Element}\n * @method controlText\n */\n\n ClickableComponent.prototype.createControlTextEl = function createControlTextEl(el) {\n this.controlTextEl_ = Dom.createEl('span', {\n className: 'vjs-control-text'\n });\n\n if (el) {\n el.appendChild(this.controlTextEl_);\n }\n\n this.controlText(this.controlText_);\n\n return this.controlTextEl_;\n };\n\n /**\n * Controls text - both request and localize\n *\n * @param {String} text Text for element\n * @return {String}\n * @method controlText\n */\n\n ClickableComponent.prototype.controlText = function controlText(text) {\n if (!text) return this.controlText_ || 'Need Text';\n\n this.controlText_ = text;\n this.controlTextEl_.innerHTML = this.localize(this.controlText_);\n\n if (this.tooltip) {\n this.tooltip.text(this.controlText_);\n } else {\n this.appendTooltip();\n }\n\n return this;\n };\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String}\n * @method buildCSSClass\n */\n\n ClickableComponent.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-control vjs-button ' + _Component.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Adds a child component inside this clickable-component\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @method addChild\n */\n\n ClickableComponent.prototype.addChild = function addChild(child) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // TODO: Fix adding an actionable child to a ClickableComponent; currently\n // it will cause issues with assistive technology (e.g. screen readers)\n // which support ARIA, since an element with role=\"button\" cannot have\n // actionable child elements.\n\n //let className = this.constructor.name;\n //log.warn(`Adding a child to a ClickableComponent (${className}) can cause issues with assistive technology which supports ARIA, since an element with role=\"button\" cannot have actionable child elements.`);\n\n return _Component.prototype.addChild.call(this, child, options);\n };\n\n /**\n * Enable the component element\n *\n * @return {Component}\n * @method enable\n */\n\n ClickableComponent.prototype.enable = function enable() {\n this.removeClass('vjs-disabled');\n this.el_.setAttribute('aria-disabled', 'false');\n return this;\n };\n\n /**\n * Disable the component element\n *\n * @return {Component}\n * @method disable\n */\n\n ClickableComponent.prototype.disable = function disable() {\n this.addClass('vjs-disabled');\n this.el_.setAttribute('aria-disabled', 'true');\n return this;\n };\n\n /**\n * Handle Click - Override with specific functionality for component\n *\n * @method handleClick\n */\n\n ClickableComponent.prototype.handleClick = function handleClick() {};\n\n /**\n * Handle Focus - Add keyboard functionality to element\n *\n * @method handleFocus\n */\n\n ClickableComponent.prototype.handleFocus = function handleFocus() {\n Events.on(_globalDocument2['default'], 'keydown', Fn.bind(this, this.handleKeyPress));\n };\n\n /**\n * Handle KeyPress (document level) - Trigger click when Space or Enter key is pressed\n *\n * @method handleKeyPress\n */\n\n ClickableComponent.prototype.handleKeyPress = function handleKeyPress(event) {\n // Support Space (32) or Enter (13) key operation to fire a click event\n if (event.which === 32 || event.which === 13) {\n event.preventDefault();\n this.handleClick(event);\n } else if (_Component.prototype.handleKeyPress) {\n _Component.prototype.handleKeyPress.call(this, event); // Pass keypress handling up for unsupported keys\n }\n };\n\n /**\n * Handle Blur - Remove keyboard triggers\n *\n * @method handleBlur\n */\n\n ClickableComponent.prototype.handleBlur = function handleBlur() {\n Events.off(_globalDocument2['default'], 'keydown', Fn.bind(this, this.handleKeyPress));\n };\n\n /**\n * Append a tooltip to the component\n *\n * @method appendTooltip\n */\n\n ClickableComponent.prototype.appendTooltip = function appendTooltip() {\n if (this.tooltip || !this.controlText_ || !this.el()) {\n return;\n }\n\n var tooltipHandler = this.tooltipHandler();\n\n if (tooltipHandler) {\n this.tooltip = new _tooltip2['default'](this.player_);\n this.el().appendChild(this.tooltip.el());\n this.tooltip.text(this.controlText_);\n this.tooltip.handler(tooltipHandler);\n }\n };\n\n /**\n * Return handler for the tooltip\n *\n * @return {Object} Dom element to serve as a handler for the tooltip\n * @method tooltipHandler\n */\n\n ClickableComponent.prototype.tooltipHandler = function tooltipHandler() {\n var handler = this.options_.tooltip;\n\n if (handler === false) {\n return;\n }\n\n if (handler === true || this.player_.options_ && this.player_.options_.tooltips) {\n return this.el();\n }\n\n if (typeof handler === 'string') {\n return Dom.getEl(handler);\n }\n\n if (handler && typeof handler.el === 'function') {\n return handler.el();\n }\n\n return handler;\n };\n\n return ClickableComponent;\n})(_component2['default']);\n\n_component2['default'].registerComponent('ClickableComponent', ClickableComponent);\nexports['default'] = ClickableComponent;\nmodule.exports = exports['default'];\n\n},{\"./component\":66,\"./tooltip\":125,\"./utils/dom.js\":144,\"./utils/events.js\":145,\"./utils/fn.js\":146,\"./utils/log.js\":149,\"global/document\":7,\"object.assign\":53}],65:[function(_dereq_,module,exports){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _button = _dereq_('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _component = _dereq_('./component');\n\nvar _component2 = _interopRequireDefault(_component);\n\n/**\n * The `CloseButton` component is a button which fires a \"close\" event\n * when it is activated.\n *\n * @extends Button\n * @class CloseButton\n */\n\nvar CloseButton = (function (_Button) {\n _inherits(CloseButton, _Button);\n\n function CloseButton(player, options) {\n _classCallCheck(this, CloseButton);\n\n _Button.call(this, player, options);\n this.controlText(options && options.controlText || this.localize('Close'));\n }\n\n CloseButton.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-close-button ' + _Button.prototype.buildCSSClass.call(this);\n };\n\n CloseButton.prototype.handleClick = function handleClick() {\n this.trigger({ type: 'close', bubbles: false });\n };\n\n return CloseButton;\n})(_button2['default']);\n\n_component2['default'].registerComponent('CloseButton', CloseButton);\nexports['default'] = CloseButton;\nmodule.exports = exports['default'];\n\n},{\"./button\":63,\"./component\":66}],66:[function(_dereq_,module,exports){\n/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _utilsDomJs = _dereq_('./utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('./utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsGuidJs = _dereq_('./utils/guid.js');\n\nvar Guid = _interopRequireWildcard(_utilsGuidJs);\n\nvar _utilsEventsJs = _dereq_('./utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar _utilsLogJs = _dereq_('./utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _utilsToTitleCaseJs = _dereq_('./utils/to-title-case.js');\n\nvar _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs);\n\nvar _utilsMergeOptionsJs = _dereq_('./utils/merge-options.js');\n\nvar _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs);\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n * // adding a button to the player\n * var button = player.addChild('button');\n * button.el(); // -> button element\n * ```\n * ```html\n * <div class=\"video-js\">\n * <div class=\"vjs-button\">Button</div>\n * </div>\n * ```\n * Components are also event targets.\n * ```js\n * button.on('click', function(){\n * console.log('Button Clicked!');\n * });\n * button.trigger('customevent');\n * ```\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @class Component\n */\n\nvar Component = (function () {\n function Component(player, options, ready) {\n _classCallCheck(this, Component);\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n // Make a copy of prototype.options_ to protect against overriding defaults\n this.options_ = _utilsMergeOptionsJs2['default']({}, this.options_);\n\n // Updated options with supplied options\n options = this.options_ = _utilsMergeOptionsJs2['default'](this.options_, options);\n\n // Get ID from options or options element if one is supplied\n this.id_ = options.id || options.el && options.el.id;\n\n // If there was no ID from the options, generate one\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n var id = player && player.id && player.id() || 'no_player';\n\n this.id_ = id + '_component_' + Guid.newGUID();\n }\n\n this.name_ = options.name || null;\n\n // Create element if one wasn't provided in options\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n\n // Add any child components in options\n if (options.initChildren !== false) {\n this.initChildren();\n }\n\n this.ready(ready);\n // Don't want to trigger ready here or it will before init is actually\n // finished for all children that run this constructor\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n\n /**\n * Dispose of the component and all child components\n *\n * @method dispose\n */\n\n Component.prototype.dispose = function dispose() {\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (var i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n }\n\n // Delete child references\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n\n // Remove all event listeners.\n this.off();\n\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n Dom.removeElData(this.el_);\n this.el_ = null;\n };\n\n /**\n * Return the component's player\n *\n * @return {Player}\n * @method player\n */\n\n Component.prototype.player = function player() {\n return this.player_;\n };\n\n /**\n * Deep merge of options objects\n * Whenever a property is an object on both options objects\n * the two properties will be merged using mergeOptions.\n *\n * ```js\n * Parent.prototype.options_ = {\n * optionSet: {\n * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n * 'childTwo': {},\n * 'childThree': {}\n * }\n * }\n * newOptions = {\n * optionSet: {\n * 'childOne': { 'foo': 'baz', 'abc': '123' }\n * 'childTwo': null,\n * 'childFour': {}\n * }\n * }\n *\n * this.options(newOptions);\n * ```\n * RESULT\n * ```js\n * {\n * optionSet: {\n * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n * 'childTwo': null, // Disabled. Won't be initialized.\n * 'childThree': {},\n * 'childFour': {}\n * }\n * }\n * ```\n *\n * @param {Object} obj Object of new option values\n * @return {Object} A NEW object of this.options_ and obj merged\n * @method options\n */\n\n Component.prototype.options = function options(obj) {\n _utilsLogJs2['default'].warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = _utilsMergeOptionsJs2['default'](this.options_, obj);\n return this.options_;\n };\n\n /**\n * Get the component's DOM element\n * ```js\n * var domEl = myComponent.el();\n * ```\n *\n * @return {Element}\n * @method el\n */\n\n Component.prototype.el = function el() {\n return this.el_;\n };\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} tagName Element's node type. e.g. 'div'\n * @param {Object=} properties An object of properties that should be set\n * @param {Object=} attributes An object of attributes that should be set\n * @return {Element}\n * @method createEl\n */\n\n Component.prototype.createEl = function createEl(tagName, properties, attributes) {\n return Dom.createEl(tagName, properties, attributes);\n };\n\n Component.prototype.localize = function localize(string) {\n var code = this.player_.language && this.player_.language();\n var languages = this.player_.languages && this.player_.languages();\n\n if (!code || !languages) {\n return string;\n }\n\n var language = languages[code];\n\n if (language && language[string]) {\n return language[string];\n }\n\n var primaryCode = code.split('-')[0];\n var primaryLang = languages[primaryCode];\n\n if (primaryLang && primaryLang[string]) {\n return primaryLang[string];\n }\n\n return string;\n };\n\n /**\n * Return the component's DOM element where children are inserted.\n * Will either be the same as el() or a new element defined in createEl().\n *\n * @return {Element}\n * @method contentEl\n */\n\n Component.prototype.contentEl = function contentEl() {\n return this.contentEl_ || this.el_;\n };\n\n /**\n * Get the component's ID\n * ```js\n * var id = myComponent.id();\n * ```\n *\n * @return {String}\n * @method id\n */\n\n Component.prototype.id = function id() {\n return this.id_;\n };\n\n /**\n * Get the component's name. The name is often used to reference the component.\n * ```js\n * var name = myComponent.name();\n * ```\n *\n * @return {String}\n * @method name\n */\n\n Component.prototype.name = function name() {\n return this.name_;\n };\n\n /**\n * Get an array of all child components\n * ```js\n * var kids = myComponent.children();\n * ```\n *\n * @return {Array} The children\n * @method children\n */\n\n Component.prototype.children = function children() {\n return this.children_;\n };\n\n /**\n * Returns a child component with the provided ID\n *\n * @return {Component}\n * @method getChildById\n */\n\n Component.prototype.getChildById = function getChildById(id) {\n return this.childIndex_[id];\n };\n\n /**\n * Returns a child component with the provided name\n *\n * @return {Component}\n * @method getChild\n */\n\n Component.prototype.getChild = function getChild(name) {\n return this.childNameIndex_[name];\n };\n\n /**\n * Adds a child component inside this component\n * ```js\n * myComponent.el();\n * // -> <div class='my-component'></div>\n * myComponent.children();\n * // [empty array]\n *\n * var myButton = myComponent.addChild('MyButton');\n * // -> <div class='my-component'><div class=\"my-button\">myButton<div></div>\n * // -> myButton === myComponent.children()[0];\n * ```\n * Pass in options for child constructors and options for children of the child\n * ```js\n * var myButton = myComponent.addChild('MyButton', {\n * text: 'Press Me',\n * buttonChildExample: {\n * buttonChildOption: true\n * }\n * });\n * ```\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @param {Number} index into our children array to attempt to add the child\n * @return {Component} The child component (created by this process if a string was used)\n * @method addChild\n */\n\n Component.prototype.addChild = function addChild(child) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var index = arguments.length <= 2 || arguments[2] === undefined ? this.children_.length : arguments[2];\n\n var component = undefined;\n var componentName = undefined;\n\n // If child is a string, create nt with options\n if (typeof child === 'string') {\n componentName = child;\n\n // Options can also be specified as a boolean, so convert to an empty object if false.\n if (!options) {\n options = {};\n }\n\n // Same as above, but true is deprecated so show a warning.\n if (options === true) {\n _utilsLogJs2['default'].warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n options = {};\n }\n\n // If no componentClass in options, assume componentClass is the name lowercased\n // (e.g. playButton)\n var componentClassName = options.componentClass || _utilsToTitleCaseJs2['default'](componentName);\n\n // Set name through options\n options.name = componentName;\n\n // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n var ComponentClass = Component.getComponent(componentClassName);\n\n if (!ComponentClass) {\n throw new Error('Component ' + componentClassName + ' does not exist');\n }\n\n // data stored directly on the videojs object may be\n // misidentified as a component to retain\n // backwards-compatibility with 4.x. check to make sure the\n // component class can be instantiated.\n if (typeof ComponentClass !== 'function') {\n return null;\n }\n\n component = new ComponentClass(this.player_ || this, options);\n\n // child is a component instance\n } else {\n component = child;\n }\n\n this.children_.splice(index, 0, component);\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n }\n\n // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n componentName = componentName || component.name && component.name();\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n }\n\n // Add the UI object's element to the container div (box)\n // Having an element is not required\n if (typeof component.el === 'function' && component.el()) {\n var childNodes = this.contentEl().children;\n var refNode = childNodes[index] || null;\n this.contentEl().insertBefore(component.el(), refNode);\n }\n\n // Return so it can stored on parent object if desired.\n return component;\n };\n\n /**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param {Component} component Component to remove\n * @method removeChild\n */\n\n Component.prototype.removeChild = function removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n var childFound = false;\n\n for (var i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[component.name()] = null;\n\n var compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n };\n\n /**\n * Add and initialize default child components from options\n * ```js\n * // when an instance of MyComponent is created, all children in options\n * // will be added to the instance by their name strings and options\n * MyComponent.prototype.options_ = {\n * children: [\n * 'myChildComponent'\n * ],\n * myChildComponent: {\n * myChildOption: true\n * }\n * };\n *\n * // Or when creating the component\n * var myComp = new MyComponent(player, {\n * children: [\n * 'myChildComponent'\n * ],\n * myChildComponent: {\n * myChildOption: true\n * }\n * });\n * ```\n * The children option can also be an array of\n * child options objects (that also include a 'name' key).\n * This can be used if you have two child components of the\n * same type that need different options.\n * ```js\n * var myComp = new MyComponent(player, {\n * children: [\n * 'button',\n * {\n * name: 'button',\n * someOtherOption: true\n * },\n * {\n * name: 'button',\n * someOtherOption: false\n * }\n * ]\n * });\n * ```\n *\n * @method initChildren\n */\n\n Component.prototype.initChildren = function initChildren() {\n var _this = this;\n\n var children = this.options_.children;\n\n if (children) {\n (function () {\n // `this` is `parent`\n var parentOptions = _this.options_;\n\n var handleAdd = function handleAdd(child) {\n var name = child.name;\n var opts = child.opts;\n\n // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n }\n\n // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n if (opts === false) {\n return;\n }\n\n // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n if (opts === true) {\n opts = {};\n }\n\n // We also want to pass the original player options to each component as well so they don't need to\n // reach back into the player for options later.\n opts.playerOptions = _this.options_.playerOptions;\n\n // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n var newChild = _this.addChild(name, opts);\n if (newChild) {\n _this[name] = newChild;\n }\n };\n\n // Allow for an array of children details to passed in the options\n var workingChildren = undefined;\n var Tech = Component.getComponent('Tech');\n\n if (Array.isArray(children)) {\n workingChildren = children;\n } else {\n workingChildren = Object.keys(children);\n }\n\n workingChildren\n // children that are in this.options_ but also in workingChildren would\n // give us extra children we do not want. So, we want to filter them out.\n .concat(Object.keys(_this.options_).filter(function (child) {\n return !workingChildren.some(function (wchild) {\n if (typeof wchild === 'string') {\n return child === wchild;\n } else {\n return child === wchild.name;\n }\n });\n })).map(function (child) {\n var name = undefined,\n opts = undefined;\n\n if (typeof child === 'string') {\n name = child;\n opts = children[name] || _this.options_[name] || {};\n } else {\n name = child.name;\n opts = child;\n }\n\n return { name: name, opts: opts };\n }).filter(function (child) {\n // we have to make sure that child.name isn't in the techOrder since\n // techs are registerd as Components but can't aren't compatible\n // See https://github.com/videojs/video.js/issues/2772\n var c = Component.getComponent(child.opts.componentClass || _utilsToTitleCaseJs2['default'](child.name));\n return c && !Tech.isTech(c);\n }).forEach(handleAdd);\n })();\n }\n };\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n Component.prototype.buildCSSClass = function buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n };\n\n /**\n * Add an event listener to this component's element\n * ```js\n * var myFunc = function(){\n * var myComponent = this;\n * // Do something when the event is fired\n * };\n *\n * myComponent.on('eventType', myFunc);\n * ```\n * The context of myFunc will be myComponent unless previously bound.\n * Alternatively, you can add a listener to another element or component.\n * ```js\n * myComponent.on(otherElement, 'eventName', myFunc);\n * myComponent.on(otherComponent, 'eventName', myFunc);\n * ```\n * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n * will be automatically cleaned up when either component is disposed.\n * It will also bind myComponent as the context of myFunc.\n * **NOTE**: When using this on elements in the page other than window\n * and document (both permanent), if you remove the element from the DOM\n * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n * references to it and allow the browser to garbage collect it.\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The event handler or event type\n * @param {Function} third The event handler\n * @return {Component}\n * @method on\n */\n\n Component.prototype.on = function on(first, second, third) {\n var _this2 = this;\n\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.on(this.el_, first, Fn.bind(this, second));\n\n // Targeting another component or element\n } else {\n (function () {\n var target = first;\n var type = second;\n var fn = Fn.bind(_this2, third);\n\n // When this component is disposed, remove the listener from the other component\n var removeOnDispose = function removeOnDispose() {\n return _this2.off(target, type, fn);\n };\n\n // Use the same function ID so we can remove it later it using the ID\n // of the original listener\n removeOnDispose.guid = fn.guid;\n _this2.on('dispose', removeOnDispose);\n\n // If the other component is disposed first we need to clean the reference\n // to the other component in this component's removeOnDispose listener\n // Otherwise we create a memory leak.\n var cleanRemover = function cleanRemover() {\n return _this2.off('dispose', removeOnDispose);\n };\n\n // Add the same function ID so we can easily remove it later\n cleanRemover.guid = fn.guid;\n\n // Check if this is a DOM node\n if (first.nodeName) {\n // Add the listener to the other element\n Events.on(target, type, fn);\n Events.on(target, 'dispose', cleanRemover);\n\n // Should be a component\n // Not using `instanceof Component` because it makes mock players difficult\n } else if (typeof first.on === 'function') {\n // Add the listener to the other component\n target.on(type, fn);\n target.on('dispose', cleanRemover);\n }\n })();\n }\n\n return this;\n };\n\n /**\n * Remove an event listener from this component's element\n * ```js\n * myComponent.off('eventType', myFunc);\n * ```\n * If myFunc is excluded, ALL listeners for the event type will be removed.\n * If eventType is excluded, ALL listeners will be removed from the component.\n * Alternatively you can use `off` to remove listeners that were added to other\n * elements or components using `myComponent.on(otherComponent...`.\n * In this case both the event type and listener function are REQUIRED.\n * ```js\n * myComponent.off(otherElement, 'eventType', myFunc);\n * myComponent.off(otherComponent, 'eventType', myFunc);\n * ```\n *\n * @param {String=|Component} first The event type or other component\n * @param {Function=|String} second The listener function or event type\n * @param {Function=} third The listener for other component\n * @return {Component}\n * @method off\n */\n\n Component.prototype.off = function off(first, second, third) {\n if (!first || typeof first === 'string' || Array.isArray(first)) {\n Events.off(this.el_, first, second);\n } else {\n var target = first;\n var type = second;\n // Ensure there's at least a guid, even if the function hasn't been used\n var fn = Fn.bind(this, third);\n\n // Remove the dispose listener on this component,\n // which was given the same guid as the event listener\n this.off('dispose', fn);\n\n if (first.nodeName) {\n // Remove the listener\n Events.off(target, type, fn);\n // Remove the listener for cleaning the dispose listener\n Events.off(target, 'dispose', fn);\n } else {\n target.off(type, fn);\n target.off('dispose', fn);\n }\n }\n\n return this;\n };\n\n /**\n * Add an event listener to be triggered only once and then removed\n * ```js\n * myComponent.one('eventName', myFunc);\n * ```\n * Alternatively you can add a listener to another element or component\n * that will be triggered only once.\n * ```js\n * myComponent.one(otherElement, 'eventName', myFunc);\n * myComponent.one(otherComponent, 'eventName', myFunc);\n * ```\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The listener function or event type\n * @param {Function=} third The listener function for other component\n * @return {Component}\n * @method one\n */\n\n Component.prototype.one = function one(first, second, third) {\n var _this3 = this,\n _arguments = arguments;\n\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.one(this.el_, first, Fn.bind(this, second));\n } else {\n (function () {\n var target = first;\n var type = second;\n var fn = Fn.bind(_this3, third);\n\n var newFunc = function newFunc() {\n _this3.off(target, type, newFunc);\n fn.apply(null, _arguments);\n };\n\n // Keep the same function ID so we can remove it later\n newFunc.guid = fn.guid;\n\n _this3.on(target, type, newFunc);\n })();\n }\n\n return this;\n };\n\n /**\n * Trigger an event on an element\n * ```js\n * myComponent.trigger('eventName');\n * myComponent.trigger({'type':'eventName'});\n * myComponent.trigger('eventName', {data: 'some data'});\n * myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n * ```\n *\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Component} self\n * @method trigger\n */\n\n Component.prototype.trigger = function trigger(event, hash) {\n Events.trigger(this.el_, event, hash);\n return this;\n };\n\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @param {Function} fn Ready listener\n * @param {Boolean} sync Exec the listener synchronously if component is ready\n * @return {Component}\n * @method ready\n */\n\n Component.prototype.ready = function ready(fn) {\n var sync = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n if (fn) {\n if (this.isReady_) {\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n } else {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n }\n }\n return this;\n };\n\n /**\n * Trigger the ready listeners\n *\n * @return {Component}\n * @method triggerReady\n */\n\n Component.prototype.triggerReady = function triggerReady() {\n this.isReady_ = true;\n\n // Ensure ready is triggerd asynchronously\n this.setTimeout(function () {\n var readyQueue = this.readyQueue_;\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function (fn) {\n fn.call(this);\n }, this);\n }\n\n // Allow for using event listeners also\n this.trigger('ready');\n }, 1);\n };\n\n /**\n * Finds a single DOM element matching `selector` within the component's\n * `contentEl` or another custom context.\n *\n * @method $\n * @param {String} selector\n * A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {Element|null}\n */\n\n Component.prototype.$ = function $(selector, context) {\n return Dom.$(selector, context || this.contentEl());\n };\n\n /**\n * Finds a all DOM elements matching `selector` within the component's\n * `contentEl` or another custom context.\n *\n * @method $$\n * @param {String} selector\n * A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {NodeList}\n */\n\n Component.prototype.$$ = function $$(selector, context) {\n return Dom.$$(selector, context || this.contentEl());\n };\n\n /**\n * Check if a component's element has a CSS class name\n *\n * @param {String} classToCheck Classname to check\n * @return {Component}\n * @method hasClass\n */\n\n Component.prototype.hasClass = function hasClass(classToCheck) {\n return Dom.hasElClass(this.el_, classToCheck);\n };\n\n /**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {Component}\n * @method addClass\n */\n\n Component.prototype.addClass = function addClass(classToAdd) {\n Dom.addElClass(this.el_, classToAdd);\n return this;\n };\n\n /**\n * Remove a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {Component}\n * @method removeClass\n */\n\n Component.prototype.removeClass = function removeClass(classToRemove) {\n Dom.removeElClass(this.el_, classToRemove);\n return this;\n };\n\n /**\n * Add or remove a CSS class name from the component's element\n *\n * @param {String} classToToggle\n * @param {Boolean|Function} [predicate]\n * Can be a function that returns a Boolean. If `true`, the class\n * will be added; if `false`, the class will be removed. If not\n * given, the class will be added if not present and vice versa.\n *\n * @return {Component}\n * @method toggleClass\n */\n\n Component.prototype.toggleClass = function toggleClass(classToToggle, predicate) {\n Dom.toggleElClass(this.el_, classToToggle, predicate);\n return this;\n };\n\n /**\n * Show the component element if hidden\n *\n * @return {Component}\n * @method show\n */\n\n Component.prototype.show = function show() {\n this.removeClass('vjs-hidden');\n return this;\n };\n\n /**\n * Hide the component element if currently showing\n *\n * @return {Component}\n * @method hide\n */\n\n Component.prototype.hide = function hide() {\n this.addClass('vjs-hidden');\n return this;\n };\n\n /**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method lockShowing\n */\n\n Component.prototype.lockShowing = function lockShowing() {\n this.addClass('vjs-lock-showing');\n return this;\n };\n\n /**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method unlockShowing\n */\n\n Component.prototype.unlockShowing = function unlockShowing() {\n this.removeClass('vjs-lock-showing');\n return this;\n };\n\n /**\n * Set or get the width of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num Optional width number\n * @param {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {Component} This component, when setting the width\n * @return {Number|String} The width, when getting\n * @method width\n */\n\n Component.prototype.width = function width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n };\n\n /**\n * Get or set the height of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num New component height\n * @param {Boolean=} skipListeners Skip the resize event trigger\n * @return {Component} This component, when setting the height\n * @return {Number|String} The height, when getting\n * @method height\n */\n\n Component.prototype.height = function height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n };\n\n /**\n * Set both width and height at the same time\n *\n * @param {Number|String} width Width of player\n * @param {Number|String} height Height of player\n * @return {Component} The component\n * @method dimensions\n */\n\n Component.prototype.dimensions = function dimensions(width, height) {\n // Skip resize listeners on width for optimization\n return this.width(width, true).height(height);\n };\n\n /**\n * Get or set width or height\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param {String} widthOrHeight 'width' or 'height'\n * @param {Number|String=} num New dimension\n * @param {Boolean=} skipListeners Skip resize event trigger\n * @return {Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n * @method dimension\n */\n\n Component.prototype.dimension = function dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n }\n\n // Check if using css width/height (% or px) and adjust\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n }\n\n // skipListeners allows us to avoid triggering the resize event when setting both width and height\n if (!skipListeners) {\n this.trigger('resize');\n }\n\n // Return component\n return this;\n }\n\n // Not setting a value, so getting it\n // Make sure element exists\n if (!this.el_) {\n return 0;\n }\n\n // Get dimension value from style\n var val = this.el_.style[widthOrHeight];\n var pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n }\n\n // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n return parseInt(this.el_['offset' + _utilsToTitleCaseJs2['default'](widthOrHeight)], 10);\n };\n\n /**\n * Get width or height of computed style\n * @param {String} widthOrHeight 'width' or 'height'\n * @return {Number|Boolean} The bolean false if nothing was set\n * @method currentDimension\n */\n\n Component.prototype.currentDimension = function currentDimension(widthOrHeight) {\n var computedWidthOrHeight = 0;\n\n if (widthOrHeight !== 'width' && widthOrHeight !== 'height') {\n throw new Error('currentDimension only accepts width or height value');\n }\n\n if (typeof _globalWindow2['default'].getComputedStyle === 'function') {\n var computedStyle = _globalWindow2['default'].getComputedStyle(this.el_);\n computedWidthOrHeight = computedStyle.getPropertyValue(widthOrHeight) || computedStyle[widthOrHeight];\n } else if (this.el_.currentStyle) {\n // ie 8 doesn't support computed style, shim it\n // return clientWidth or clientHeight instead for better accuracy\n var rule = 'offset' + _utilsToTitleCaseJs2['default'](widthOrHeight);\n computedWidthOrHeight = this.el_[rule];\n }\n\n // remove 'px' from variable and parse as integer\n computedWidthOrHeight = parseFloat(computedWidthOrHeight);\n return computedWidthOrHeight;\n };\n\n /**\n * Get an object which contains width and height values of computed style\n * @return {Object} The dimensions of element\n * @method currentDimensions\n */\n\n Component.prototype.currentDimensions = function currentDimensions() {\n return {\n width: this.currentDimension('width'),\n height: this.currentDimension('height')\n };\n };\n\n /**\n * Get width of computed style\n * @return {Integer}\n * @method currentWidth\n */\n\n Component.prototype.currentWidth = function currentWidth() {\n return this.currentDimension('width');\n };\n\n /**\n * Get height of computed style\n * @return {Integer}\n * @method currentHeight\n */\n\n Component.prototype.currentHeight = function currentHeight() {\n return this.currentDimension('height');\n };\n\n /**\n * Emit 'tap' events when touch events are supported\n * This is used to support toggling the controls through a tap on the video.\n * We're requiring them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n *\n * @private\n * @method emitTapEvents\n */\n\n Component.prototype.emitTapEvents = function emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n var touchStart = 0;\n var firstTouch = null;\n\n // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n var tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n var touchTimeThreshold = 200;\n\n var couldBeTap = undefined;\n\n this.on('touchstart', function (event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy pageX/pageY from the object\n firstTouch = {\n pageX: event.touches[0].pageX,\n pageY: event.touches[0].pageY\n };\n // Record start time so we can detect a tap vs. \"touch and hold\"\n touchStart = new Date().getTime();\n // Reset couldBeTap tracking\n couldBeTap = true;\n }\n });\n\n this.on('touchmove', function (event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n var xdiff = event.touches[0].pageX - firstTouch.pageX;\n var ydiff = event.touches[0].pageY - firstTouch.pageY;\n var touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n var noTap = function noTap() {\n couldBeTap = false;\n };\n\n // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap);\n\n // When the touch ends, measure how long it took and trigger the appropriate\n // event\n this.on('touchend', function (event) {\n firstTouch = null;\n // Proceed only if the touchmove/leave/cancel event didn't happen\n if (couldBeTap === true && event.cancelable) {\n // Measure how long the touch lasted\n var touchTime = new Date().getTime() - touchStart;\n\n // Make sure the touch was less than the threshold to be considered a tap\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n this.trigger('tap');\n // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n };\n\n /**\n * Report user touch activity when touch events occur\n * User activity is used to determine when controls should show/hide. It's\n * relatively simple when it comes to mouse events, because any mouse event\n * should show the controls. So we capture mouse events that bubble up to the\n * player and report activity when that happens.\n * With touch events it isn't as easy. We can't rely on touch events at the\n * player level, because a tap (touchstart + touchend) on the video itself on\n * mobile devices is meant to turn controls off (and on). User activity is\n * checked asynchronously, so what could happen is a tap event on the video\n * turns the controls off, then the touchend event bubbles up to the player,\n * which if it reported user activity, would turn the controls right back on.\n * (We also don't want to completely block touch events from bubbling up)\n * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n * to turn the controls back on on a mobile device.\n * Here we're setting the default component behavior to report user activity\n * whenever touch events happen, and this can be turned off by components that\n * want touch events to act differently.\n *\n * @method enableTouchActivity\n */\n\n Component.prototype.enableTouchActivity = function enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n }\n\n // listener for reporting that the user is active\n var report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n var touchHolding = undefined;\n\n this.on('touchstart', function () {\n report();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(touchHolding);\n // report at the same interval as activityCheck\n touchHolding = this.setInterval(report, 250);\n });\n\n var touchEnd = function touchEnd(event) {\n report();\n // stop the interval that maintains activity if the touch is holding\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n };\n\n /**\n * Creates timeout and sets up disposal automatically.\n *\n * @param {Function} fn The function to run after the timeout.\n * @param {Number} timeout Number of ms to delay before executing specified function.\n * @return {Number} Returns the timeout ID\n * @method setTimeout\n */\n\n Component.prototype.setTimeout = function setTimeout(fn, timeout) {\n fn = Fn.bind(this, fn);\n\n // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n var timeoutId = _globalWindow2['default'].setTimeout(fn, timeout);\n\n var disposeFn = function disposeFn() {\n this.clearTimeout(timeoutId);\n };\n\n disposeFn.guid = 'vjs-timeout-' + timeoutId;\n\n this.on('dispose', disposeFn);\n\n return timeoutId;\n };\n\n /**\n * Clears a timeout and removes the associated dispose listener\n *\n * @param {Number} timeoutId The id of the timeout to clear\n * @return {Number} Returns the timeout ID\n * @method clearTimeout\n */\n\n Component.prototype.clearTimeout = function clearTimeout(timeoutId) {\n _globalWindow2['default'].clearTimeout(timeoutId);\n\n var disposeFn = function disposeFn() {};\n\n disposeFn.guid = 'vjs-timeout-' + timeoutId;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n };\n\n /**\n * Creates an interval and sets up disposal automatically.\n *\n * @param {Function} fn The function to run every N seconds.\n * @param {Number} interval Number of ms to delay before executing specified function.\n * @return {Number} Returns the interval ID\n * @method setInterval\n */\n\n Component.prototype.setInterval = function setInterval(fn, interval) {\n fn = Fn.bind(this, fn);\n\n var intervalId = _globalWindow2['default'].setInterval(fn, interval);\n\n var disposeFn = function disposeFn() {\n this.clearInterval(intervalId);\n };\n\n disposeFn.guid = 'vjs-interval-' + intervalId;\n\n this.on('dispose', disposeFn);\n\n return intervalId;\n };\n\n /**\n * Clears an interval and removes the associated dispose listener\n *\n * @param {Number} intervalId The id of the interval to clear\n * @return {Number} Returns the interval ID\n * @method clearInterval\n */\n\n Component.prototype.clearInterval = function clearInterval(intervalId) {\n _globalWindow2['default'].clearInterval(intervalId);\n\n var disposeFn = function disposeFn() {};\n\n disposeFn.guid = 'vjs-interval-' + intervalId;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n };\n\n /**\n * Registers a component\n *\n * @param {String} name Name of the component to register\n * @param {Object} comp The component to register\n * @static\n * @method registerComponent\n */\n\n Component.registerComponent = function registerComponent(name, comp) {\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n Component.components_[name] = comp;\n return comp;\n };\n\n /**\n * Gets a component by name\n *\n * @param {String} name Name of the component to get\n * @return {Component}\n * @static\n * @method getComponent\n */\n\n Component.getComponent = function getComponent(name) {\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n\n if (_globalWindow2['default'] && _globalWindow2['default'].videojs && _globalWindow2['default'].videojs[name]) {\n _utilsLogJs2['default'].warn('The ' + name + ' component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)');\n return _globalWindow2['default'].videojs[name];\n }\n };\n\n /**\n * Sets up the constructor using the supplied init method\n * or uses the init of the parent object\n *\n * @param {Object} props An object of properties\n * @static\n * @deprecated\n * @method extend\n */\n\n Component.extend = function extend(props) {\n props = props || {};\n\n _utilsLogJs2['default'].warn('Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead');\n\n // Set up the constructor using the supplied init method\n // or using the init of the parent object\n // Make sure to check the unobfuscated version for external libs\n var init = props.init || props.init || this.prototype.init || this.prototype.init || function () {};\n // In Resig's simple class inheritance (previously used) the constructor\n // is a function that calls `this.init.apply(arguments)`\n // However that would prevent us from using `ParentObject.call(this);`\n // in a Child constructor because the `this` in `this.init`\n // would still refer to the Child and cause an infinite loop.\n // We would instead have to do\n // `ParentObject.prototype.init.apply(this, arguments);`\n // Bleh. We're not creating a _super() function, so it's good to keep\n // the parent constructor reference simple.\n var subObj = function subObj() {\n init.apply(this, arguments);\n };\n\n // Inherit from this object's prototype\n subObj.prototype = Object.create(this.prototype);\n // Reset the constructor property for subObj otherwise\n // instances of subObj would have the constructor of the parent Object\n subObj.prototype.constructor = subObj;\n\n // Make the class extendable\n subObj.extend = Component.extend;\n\n // Extend subObj's prototype with functions and other properties from props\n for (var _name in props) {\n if (props.hasOwnProperty(_name)) {\n subObj.prototype[_name] = props[_name];\n }\n }\n\n return subObj;\n };\n\n return Component;\n})();\n\nComponent.registerComponent('Component', Component);\nexports['default'] = Component;\nmodule.exports = exports['default'];\n\n},{\"./utils/dom.js\":144,\"./utils/events.js\":145,\"./utils/fn.js\":146,\"./utils/guid.js\":148,\"./utils/log.js\":149,\"./utils/merge-options.js\":150,\"./utils/to-title-case.js\":153,\"global/window\":8}],67:[function(_dereq_,module,exports){\n/**\n * @file audio-track-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _trackButtonJs = _dereq_('../track-button.js');\n\nvar _trackButtonJs2 = _interopRequireDefault(_trackButtonJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _audioTrackMenuItemJs = _dereq_('./audio-track-menu-item.js');\n\nvar _audioTrackMenuItemJs2 = _interopRequireDefault(_audioTrackMenuItemJs);\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TrackButton\n * @class AudioTrackButton\n */\n\nvar AudioTrackButton = (function (_TrackButton) {\n _inherits(AudioTrackButton, _TrackButton);\n\n function AudioTrackButton(player) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, AudioTrackButton);\n\n options.tracks = player.audioTracks && player.audioTracks();\n\n _TrackButton.call(this, player, options);\n\n this.el_.setAttribute('aria-label', 'Audio Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n AudioTrackButton.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-audio-button ' + _TrackButton.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Create a menu item for each audio track\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n\n AudioTrackButton.prototype.createItems = function createItems() {\n var items = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n var tracks = this.player_.audioTracks && this.player_.audioTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n\n items.push(new _audioTrackMenuItemJs2['default'](this.player_, {\n // MenuItem is selectable\n 'selectable': true,\n 'track': track\n }));\n }\n\n return items;\n };\n\n return AudioTrackButton;\n})(_trackButtonJs2['default']);\n\n_componentJs2['default'].registerComponent('AudioTrackButton', AudioTrackButton);\nexports['default'] = AudioTrackButton;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/fn.js\":146,\"../track-button.js\":97,\"./audio-track-menu-item.js\":68}],68:[function(_dereq_,module,exports){\n/**\n * @file audio-track-menu-item.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _menuMenuItemJs = _dereq_('../../menu/menu-item.js');\n\nvar _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\n/**\n * The audio track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class AudioTrackMenuItem\n */\n\nvar AudioTrackMenuItem = (function (_MenuItem) {\n _inherits(AudioTrackMenuItem, _MenuItem);\n\n function AudioTrackMenuItem(player, options) {\n var _this = this;\n\n _classCallCheck(this, AudioTrackMenuItem);\n\n var track = options.track;\n var tracks = player.audioTracks();\n\n // Modify options for parent MenuItem class's init.\n options.label = track.label || track.language || 'Unknown';\n options.selected = track.enabled;\n\n _MenuItem.call(this, player, options);\n\n this.track = track;\n\n if (tracks) {\n (function () {\n var changeHandler = Fn.bind(_this, _this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n _this.on('dispose', function () {\n tracks.removeEventListener('change', changeHandler);\n });\n })();\n }\n }\n\n /**\n * Handle click on audio track\n *\n * @method handleClick\n */\n\n AudioTrackMenuItem.prototype.handleClick = function handleClick(event) {\n var tracks = this.player_.audioTracks();\n\n _MenuItem.prototype.handleClick.call(this, event);\n\n if (!tracks) return;\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n\n if (track === this.track) {\n track.enabled = true;\n }\n }\n };\n\n /**\n * Handle audio track change\n *\n * @method handleTracksChange\n */\n\n AudioTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {\n this.selected(this.track.enabled);\n };\n\n return AudioTrackMenuItem;\n})(_menuMenuItemJs2['default']);\n\n_componentJs2['default'].registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);\nexports['default'] = AudioTrackMenuItem;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../menu/menu-item.js\":110,\"../../utils/fn.js\":146}],69:[function(_dereq_,module,exports){\n/**\n * @file control-bar.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n// Required children\n\nvar _playToggleJs = _dereq_('./play-toggle.js');\n\nvar _playToggleJs2 = _interopRequireDefault(_playToggleJs);\n\nvar _timeControlsCurrentTimeDisplayJs = _dereq_('./time-controls/current-time-display.js');\n\nvar _timeControlsCurrentTimeDisplayJs2 = _interopRequireDefault(_timeControlsCurrentTimeDisplayJs);\n\nvar _timeControlsDurationDisplayJs = _dereq_('./time-controls/duration-display.js');\n\nvar _timeControlsDurationDisplayJs2 = _interopRequireDefault(_timeControlsDurationDisplayJs);\n\nvar _timeControlsTimeDividerJs = _dereq_('./time-controls/time-divider.js');\n\nvar _timeControlsTimeDividerJs2 = _interopRequireDefault(_timeControlsTimeDividerJs);\n\nvar _timeControlsRemainingTimeDisplayJs = _dereq_('./time-controls/remaining-time-display.js');\n\nvar _timeControlsRemainingTimeDisplayJs2 = _interopRequireDefault(_timeControlsRemainingTimeDisplayJs);\n\nvar _liveDisplayJs = _dereq_('./live-display.js');\n\nvar _liveDisplayJs2 = _interopRequireDefault(_liveDisplayJs);\n\nvar _progressControlProgressControlJs = _dereq_('./progress-control/progress-control.js');\n\nvar _progressControlProgressControlJs2 = _interopRequireDefault(_progressControlProgressControlJs);\n\nvar _fullscreenToggleJs = _dereq_('./fullscreen-toggle.js');\n\nvar _fullscreenToggleJs2 = _interopRequireDefault(_fullscreenToggleJs);\n\nvar _volumeControlVolumeControlJs = _dereq_('./volume-control/volume-control.js');\n\nvar _volumeControlVolumeControlJs2 = _interopRequireDefault(_volumeControlVolumeControlJs);\n\nvar _volumeMenuButtonJs = _dereq_('./volume-menu-button.js');\n\nvar _volumeMenuButtonJs2 = _interopRequireDefault(_volumeMenuButtonJs);\n\nvar _muteToggleJs = _dereq_('./mute-toggle.js');\n\nvar _muteToggleJs2 = _interopRequireDefault(_muteToggleJs);\n\nvar _textTrackControlsChaptersButtonJs = _dereq_('./text-track-controls/chapters-button.js');\n\nvar _textTrackControlsChaptersButtonJs2 = _interopRequireDefault(_textTrackControlsChaptersButtonJs);\n\nvar _textTrackControlsDescriptionsButtonJs = _dereq_('./text-track-controls/descriptions-button.js');\n\nvar _textTrackControlsDescriptionsButtonJs2 = _interopRequireDefault(_textTrackControlsDescriptionsButtonJs);\n\nvar _textTrackControlsSubtitlesButtonJs = _dereq_('./text-track-controls/subtitles-button.js');\n\nvar _textTrackControlsSubtitlesButtonJs2 = _interopRequireDefault(_textTrackControlsSubtitlesButtonJs);\n\nvar _textTrackControlsCaptionsButtonJs = _dereq_('./text-track-controls/captions-button.js');\n\nvar _textTrackControlsCaptionsButtonJs2 = _interopRequireDefault(_textTrackControlsCaptionsButtonJs);\n\nvar _audioTrackControlsAudioTrackButtonJs = _dereq_('./audio-track-controls/audio-track-button.js');\n\nvar _audioTrackControlsAudioTrackButtonJs2 = _interopRequireDefault(_audioTrackControlsAudioTrackButtonJs);\n\nvar _playbackRateMenuPlaybackRateMenuButtonJs = _dereq_('./playback-rate-menu/playback-rate-menu-button.js');\n\nvar _playbackRateMenuPlaybackRateMenuButtonJs2 = _interopRequireDefault(_playbackRateMenuPlaybackRateMenuButtonJs);\n\nvar _spacerControlsCustomControlSpacerJs = _dereq_('./spacer-controls/custom-control-spacer.js');\n\nvar _spacerControlsCustomControlSpacerJs2 = _interopRequireDefault(_spacerControlsCustomControlSpacerJs);\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\n\nvar ControlBar = (function (_Component) {\n _inherits(ControlBar, _Component);\n\n function ControlBar() {\n _classCallCheck(this, ControlBar);\n\n _Component.apply(this, arguments);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n ControlBar.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-control-bar',\n dir: 'ltr'\n }, {\n 'role': 'group' // The control bar is a group, so it can contain menuitems\n });\n };\n\n return ControlBar;\n})(_componentJs2['default']);\n\nControlBar.prototype.options_ = {\n loadEvent: 'play',\n children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'descriptionsButton', 'subtitlesButton', 'captionsButton', 'audioTrackButton', 'fullscreenToggle']\n};\n\n_componentJs2['default'].registerComponent('ControlBar', ControlBar);\nexports['default'] = ControlBar;\nmodule.exports = exports['default'];\n\n},{\"../component.js\":66,\"./audio-track-controls/audio-track-button.js\":67,\"./fullscreen-toggle.js\":70,\"./live-display.js\":71,\"./mute-toggle.js\":72,\"./play-toggle.js\":73,\"./playback-rate-menu/playback-rate-menu-button.js\":74,\"./progress-control/progress-control.js\":79,\"./spacer-controls/custom-control-spacer.js\":82,\"./text-track-controls/captions-button.js\":85,\"./text-track-controls/chapters-button.js\":86,\"./text-track-controls/descriptions-button.js\":88,\"./text-track-controls/subtitles-button.js\":90,\"./time-controls/current-time-display.js\":93,\"./time-controls/duration-display.js\":94,\"./time-controls/remaining-time-display.js\":95,\"./time-controls/time-divider.js\":96,\"./volume-control/volume-control.js\":99,\"./volume-menu-button.js\":102}],70:[function(_dereq_,module,exports){\n/**\n * @file fullscreen-toggle.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _buttonJs = _dereq_('../button.js');\n\nvar _buttonJs2 = _interopRequireDefault(_buttonJs);\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\n/**\n * Toggle fullscreen video\n *\n * @extends Button\n * @class FullscreenToggle\n */\n\nvar FullscreenToggle = (function (_Button) {\n _inherits(FullscreenToggle, _Button);\n\n function FullscreenToggle(player, options) {\n var _this = this;\n\n _classCallCheck(this, FullscreenToggle);\n\n _Button.call(this, player, options);\n\n player.on('ready', function () {\n _this.player_.on('fullscreenchange', Fn.bind(_this, _this.updateHint));\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n FullscreenToggle.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-fullscreen-control ' + _Button.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Handles click for full screen\n *\n * @method handleClick\n */\n\n FullscreenToggle.prototype.handleClick = function handleClick() {\n if (!this.player_.isFullscreen()) {\n this.player_.requestFullscreen();\n } else {\n this.player_.exitFullscreen();\n }\n\n this.updateHint();\n };\n\n /**\n * Update button controlText\n *\n * @method update\n */\n\n FullscreenToggle.prototype.updateHint = function updateHint() {\n if (this.player_.isFullscreen()) {\n this.controlText('Exit fullscreen');\n } else {\n this.controlText('Fullscreen');\n }\n };\n\n return FullscreenToggle;\n})(_buttonJs2['default']);\n\nFullscreenToggle.prototype.controlText_ = 'Fullscreen';\n\n_componentJs2['default'].registerComponent('FullscreenToggle', FullscreenToggle);\nexports['default'] = FullscreenToggle;\nmodule.exports = exports['default'];\n\n},{\"../button.js\":63,\"../component.js\":66,\"../utils/fn.js\":146}],71:[function(_dereq_,module,exports){\n/**\n * @file live-display.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _component = _dereq_('../component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n *\n * @extends Component\n * @class LiveDisplay\n */\n\nvar LiveDisplay = (function (_Component) {\n _inherits(LiveDisplay, _Component);\n\n function LiveDisplay(player, options) {\n _classCallCheck(this, LiveDisplay);\n\n _Component.call(this, player, options);\n\n this.updateShowing();\n this.on(this.player(), 'durationchange', this.updateShowing);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n LiveDisplay.prototype.createEl = function createEl() {\n var el = _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-live-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: '<span class=\"vjs-control-text\">' + this.localize('Stream Type') + '</span>' + this.localize('LIVE')\n }, {\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n };\n\n LiveDisplay.prototype.updateShowing = function updateShowing() {\n if (this.player().duration() === Infinity) {\n this.show();\n } else {\n this.hide();\n }\n };\n\n return LiveDisplay;\n})(_component2['default']);\n\n_component2['default'].registerComponent('LiveDisplay', LiveDisplay);\nexports['default'] = LiveDisplay;\nmodule.exports = exports['default'];\n\n},{\"../component\":66,\"../utils/dom.js\":144}],72:[function(_dereq_,module,exports){\n/**\n * @file mute-toggle.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _button = _dereq_('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _component = _dereq_('../component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\n\nvar MuteToggle = (function (_Button) {\n _inherits(MuteToggle, _Button);\n\n function MuteToggle(player, options) {\n _classCallCheck(this, MuteToggle);\n\n _Button.call(this, player, options);\n\n this.on(player, 'volumechange', this.update);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n\n this.on(player, 'loadstart', function () {\n this.update(); // We need to update the button to account for a default muted state.\n\n if (player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n MuteToggle.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-mute-control ' + _Button.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Handle click on mute\n *\n * @method handleClick\n */\n\n MuteToggle.prototype.handleClick = function handleClick() {\n this.player_.muted(this.player_.muted() ? false : true);\n };\n\n /**\n * Update volume\n *\n * @method update\n */\n\n MuteToggle.prototype.update = function update() {\n var vol = this.player_.volume(),\n level = 3;\n\n if (vol === 0 || this.player_.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n\n // Don't rewrite the button text if the actual text doesn't change.\n // This causes unnecessary and confusing information for screen reader users.\n // This check is needed because this function gets called every time the volume level is changed.\n var toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n if (this.controlText() !== toMute) {\n this.controlText(toMute);\n }\n\n /* TODO improve muted icon classes */\n for (var i = 0; i < 4; i++) {\n Dom.removeElClass(this.el_, 'vjs-vol-' + i);\n }\n Dom.addElClass(this.el_, 'vjs-vol-' + level);\n };\n\n return MuteToggle;\n})(_button2['default']);\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\n_component2['default'].registerComponent('MuteToggle', MuteToggle);\nexports['default'] = MuteToggle;\nmodule.exports = exports['default'];\n\n},{\"../button\":63,\"../component\":66,\"../utils/dom.js\":144}],73:[function(_dereq_,module,exports){\n/**\n * @file play-toggle.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _buttonJs = _dereq_('../button.js');\n\nvar _buttonJs2 = _interopRequireDefault(_buttonJs);\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * Button to toggle between play and pause\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PlayToggle\n */\n\nvar PlayToggle = (function (_Button) {\n _inherits(PlayToggle, _Button);\n\n function PlayToggle(player, options) {\n _classCallCheck(this, PlayToggle);\n\n _Button.call(this, player, options);\n\n this.on(player, 'play', this.handlePlay);\n this.on(player, 'pause', this.handlePause);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n PlayToggle.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-play-control ' + _Button.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Handle click to toggle between play and pause\n *\n * @method handleClick\n */\n\n PlayToggle.prototype.handleClick = function handleClick() {\n if (this.player_.paused()) {\n this.player_.play();\n } else {\n this.player_.pause();\n }\n };\n\n /**\n * Add the vjs-playing class to the element so it can change appearance\n *\n * @method handlePlay\n */\n\n PlayToggle.prototype.handlePlay = function handlePlay() {\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n this.controlText('Pause'); // change the button text to \"Pause\"\n };\n\n /**\n * Add the vjs-paused class to the element so it can change appearance\n *\n * @method handlePause\n */\n\n PlayToggle.prototype.handlePause = function handlePause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.controlText('Play'); // change the button text to \"Play\"\n };\n\n return PlayToggle;\n})(_buttonJs2['default']);\n\nPlayToggle.prototype.controlText_ = 'Play';\n\n_componentJs2['default'].registerComponent('PlayToggle', PlayToggle);\nexports['default'] = PlayToggle;\nmodule.exports = exports['default'];\n\n},{\"../button.js\":63,\"../component.js\":66}],74:[function(_dereq_,module,exports){\n/**\n * @file playback-rate-menu-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _menuMenuButtonJs = _dereq_('../../menu/menu-button.js');\n\nvar _menuMenuButtonJs2 = _interopRequireDefault(_menuMenuButtonJs);\n\nvar _menuMenuJs = _dereq_('../../menu/menu.js');\n\nvar _menuMenuJs2 = _interopRequireDefault(_menuMenuJs);\n\nvar _playbackRateMenuItemJs = _dereq_('./playback-rate-menu-item.js');\n\nvar _playbackRateMenuItemJs2 = _interopRequireDefault(_playbackRateMenuItemJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\n\nvar PlaybackRateMenuButton = (function (_MenuButton) {\n _inherits(PlaybackRateMenuButton, _MenuButton);\n\n function PlaybackRateMenuButton(player, options) {\n _classCallCheck(this, PlaybackRateMenuButton);\n\n _MenuButton.call(this, player, options);\n\n this.updateVisibility();\n this.updateLabel();\n\n this.on(player, 'loadstart', this.updateVisibility);\n this.on(player, 'ratechange', this.updateLabel);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n PlaybackRateMenuButton.prototype.createEl = function createEl() {\n var el = _MenuButton.prototype.createEl.call(this);\n\n this.labelEl_ = Dom.createEl('div', {\n className: 'vjs-playback-rate-value',\n innerHTML: 1.0\n });\n\n el.appendChild(this.labelEl_);\n\n return el;\n };\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n PlaybackRateMenuButton.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-playback-rate ' + _MenuButton.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Create the playback rate menu\n *\n * @return {Menu} Menu object populated with items\n * @method createMenu\n */\n\n PlaybackRateMenuButton.prototype.createMenu = function createMenu() {\n var menu = new _menuMenuJs2['default'](this.player());\n var rates = this.playbackRates();\n\n if (rates) {\n for (var i = rates.length - 1; i >= 0; i--) {\n menu.addChild(new _playbackRateMenuItemJs2['default'](this.player(), { 'rate': rates[i] + 'x' }));\n }\n }\n\n return menu;\n };\n\n /**\n * Updates ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n\n PlaybackRateMenuButton.prototype.updateARIAAttributes = function updateARIAAttributes() {\n // Current playback rate\n this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n };\n\n /**\n * Handle menu item click\n *\n * @method handleClick\n */\n\n PlaybackRateMenuButton.prototype.handleClick = function handleClick() {\n // select next rate option\n var currentRate = this.player().playbackRate();\n var rates = this.playbackRates();\n\n // this will select first one if the last one currently selected\n var newRate = rates[0];\n for (var i = 0; i < rates.length; i++) {\n if (rates[i] > currentRate) {\n newRate = rates[i];\n break;\n }\n }\n this.player().playbackRate(newRate);\n };\n\n /**\n * Get possible playback rates\n *\n * @return {Array} Possible playback rates\n * @method playbackRates\n */\n\n PlaybackRateMenuButton.prototype.playbackRates = function playbackRates() {\n return this.options_['playbackRates'] || this.options_.playerOptions && this.options_.playerOptions['playbackRates'];\n };\n\n /**\n * Get whether playback rates is supported by the tech\n * and an array of playback rates exists\n *\n * @return {Boolean} Whether changing playback rate is supported\n * @method playbackRateSupported\n */\n\n PlaybackRateMenuButton.prototype.playbackRateSupported = function playbackRateSupported() {\n return this.player().tech_ && this.player().tech_['featuresPlaybackRate'] && this.playbackRates() && this.playbackRates().length > 0;\n };\n\n /**\n * Hide playback rate controls when they're no playback rate options to select\n *\n * @method updateVisibility\n */\n\n PlaybackRateMenuButton.prototype.updateVisibility = function updateVisibility() {\n if (this.playbackRateSupported()) {\n this.removeClass('vjs-hidden');\n } else {\n this.addClass('vjs-hidden');\n }\n };\n\n /**\n * Update button label when rate changed\n *\n * @method updateLabel\n */\n\n PlaybackRateMenuButton.prototype.updateLabel = function updateLabel() {\n if (this.playbackRateSupported()) {\n this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n }\n };\n\n return PlaybackRateMenuButton;\n})(_menuMenuButtonJs2['default']);\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\n_componentJs2['default'].registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexports['default'] = PlaybackRateMenuButton;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../menu/menu-button.js\":109,\"../../menu/menu.js\":111,\"../../utils/dom.js\":144,\"./playback-rate-menu-item.js\":75}],75:[function(_dereq_,module,exports){\n/**\n * @file playback-rate-menu-item.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _menuMenuItemJs = _dereq_('../../menu/menu-item.js');\n\nvar _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class PlaybackRateMenuItem\n */\n\nvar PlaybackRateMenuItem = (function (_MenuItem) {\n _inherits(PlaybackRateMenuItem, _MenuItem);\n\n function PlaybackRateMenuItem(player, options) {\n _classCallCheck(this, PlaybackRateMenuItem);\n\n var label = options['rate'];\n var rate = parseFloat(label, 10);\n\n // Modify options for parent MenuItem class's init.\n options['label'] = label;\n options['selected'] = rate === 1;\n _MenuItem.call(this, player, options);\n\n this.label = label;\n this.rate = rate;\n\n this.on(player, 'ratechange', this.update);\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n\n PlaybackRateMenuItem.prototype.handleClick = function handleClick() {\n _MenuItem.prototype.handleClick.call(this);\n this.player().playbackRate(this.rate);\n };\n\n /**\n * Update playback rate with selected rate\n *\n * @method update\n */\n\n PlaybackRateMenuItem.prototype.update = function update() {\n this.selected(this.player().playbackRate() === this.rate);\n };\n\n return PlaybackRateMenuItem;\n})(_menuMenuItemJs2['default']);\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\n_componentJs2['default'].registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexports['default'] = PlaybackRateMenuItem;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../menu/menu-item.js\":110}],76:[function(_dereq_,module,exports){\n/**\n * @file load-progress-bar.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class LoadProgressBar\n */\n\nvar LoadProgressBar = (function (_Component) {\n _inherits(LoadProgressBar, _Component);\n\n function LoadProgressBar(player, options) {\n _classCallCheck(this, LoadProgressBar);\n\n _Component.call(this, player, options);\n this.on(player, 'progress', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n LoadProgressBar.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-load-progress',\n innerHTML: '<span class=\"vjs-control-text\"><span>' + this.localize('Loaded') + '</span>: 0%</span>'\n });\n };\n\n /**\n * Update progress bar\n *\n * @method update\n */\n\n LoadProgressBar.prototype.update = function update() {\n var buffered = this.player_.buffered();\n var duration = this.player_.duration();\n var bufferedEnd = this.player_.bufferedEnd();\n var children = this.el_.children;\n\n // get the percent width of a time compared to the total end\n var percentify = function percentify(time, end) {\n var percent = time / end || 0; // no NaN\n return (percent >= 1 ? 1 : percent) * 100 + '%';\n };\n\n // update the width of the progress bar\n this.el_.style.width = percentify(bufferedEnd, duration);\n\n // add child elements to represent the individual buffered time ranges\n for (var i = 0; i < buffered.length; i++) {\n var start = buffered.start(i);\n var end = buffered.end(i);\n var part = children[i];\n\n if (!part) {\n part = this.el_.appendChild(Dom.createEl());\n }\n\n // set the percent based on the width of the progress bar (bufferedEnd)\n part.style.left = percentify(start, bufferedEnd);\n part.style.width = percentify(end - start, bufferedEnd);\n }\n\n // remove unused buffered range elements\n for (var i = children.length; i > buffered.length; i--) {\n this.el_.removeChild(children[i - 1]);\n }\n };\n\n return LoadProgressBar;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('LoadProgressBar', LoadProgressBar);\nexports['default'] = LoadProgressBar;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/dom.js\":144}],77:[function(_dereq_,module,exports){\n/**\n * @file mouse-time-display.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsFormatTimeJs = _dereq_('../../utils/format-time.js');\n\nvar _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs);\n\nvar _lodashCompatFunctionThrottle = _dereq_('lodash-compat/function/throttle');\n\nvar _lodashCompatFunctionThrottle2 = _interopRequireDefault(_lodashCompatFunctionThrottle);\n\n/**\n * The Mouse Time Display component shows the time you will seek to\n * when hovering over the progress bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class MouseTimeDisplay\n */\n\nvar MouseTimeDisplay = (function (_Component) {\n _inherits(MouseTimeDisplay, _Component);\n\n function MouseTimeDisplay(player, options) {\n var _this = this;\n\n _classCallCheck(this, MouseTimeDisplay);\n\n _Component.call(this, player, options);\n\n if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n }\n\n if (this.keepTooltipsInside) {\n this.tooltip = Dom.createEl('div', { className: 'vjs-time-tooltip' });\n this.el().appendChild(this.tooltip);\n this.addClass('vjs-keep-tooltips-inside');\n }\n\n this.update(0, 0, 0);\n\n player.on('ready', function () {\n var progressEl = _this.player_.controlBar.progressControl.el();\n progressEl.appendChild(_this.tooltip);\n _this.on(progressEl, 'mousemove', _lodashCompatFunctionThrottle2['default'](Fn.bind(_this, _this.handleMouseMove), 25));\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n MouseTimeDisplay.prototype.createEl = function createEl() {\n this.tooltip = Dom.createEl('div', {\n className: 'vjs-mouse-display-tooltip'\n });\n var el = _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-mouse-display'\n });\n return el;\n };\n\n MouseTimeDisplay.prototype.dispose = function dispose() {\n if (this.tooltip.parentNode) {\n this.tooltip.parentNode.removeChild(this.tooltip);\n }\n\n Dom.removeElData(this.tooltip);\n this.tooltip = null;\n\n _Component.prototype.dispose.call(this);\n };\n\n MouseTimeDisplay.prototype.handleMouseMove = function handleMouseMove(event) {\n var isPercent = false;\n var duration = this.player_.duration();\n if (!duration) {\n isPercent = true;\n duration = 100;\n }\n var newTime = this.calculateDistance(event) * duration;\n\n var maxLeft = this.player().controlBar.progressControl.seekBar.width() - this.width();\n var position = event.pageX - Dom.findElPosition(this.el().parentNode).left;\n position = Math.min(Math.max(0, position), maxLeft);\n\n var tooltipWidth = this.tooltip.offsetWidth;\n var maxTooltipLeft = this.tooltip.parentNode.offsetWidth - tooltipWidth;\n var tooltipPosition = event.pageX - Dom.findElPosition(this.tooltip.parentNode).left - tooltipWidth / 2;\n tooltipPosition = Math.min(Math.max(0, tooltipPosition), maxTooltipLeft);\n\n this.update(newTime, position, tooltipPosition, isPercent);\n };\n\n MouseTimeDisplay.prototype.update = function update(newTime, position, tooltipPosition, isPercent) {\n var time = isPercent ? Math.round(newTime) + '%' : _utilsFormatTimeJs2['default'](newTime, this.player_.duration());\n\n this.el().style.left = position + 'px';\n this.tooltip.innerHTML = time;\n\n if (this.keepTooltipsInside) {\n var clampedPosition = this.clampPosition_(position);\n var difference = position - clampedPosition + 1;\n var tooltipWidth = parseFloat(_globalWindow2['default'].getComputedStyle(this.tooltip).width);\n var tooltipWidthHalf = tooltipWidth / 2;\n\n this.tooltip.style.left = 'auto';\n this.tooltip.style.right = '-' + (tooltipWidthHalf - difference) + 'px';\n } else {\n this.tooltip.style.right = 'auto';\n this.tooltip.style.left = tooltipPosition + 'px';\n }\n };\n\n MouseTimeDisplay.prototype.calculateDistance = function calculateDistance(event) {\n return Dom.getPointerPosition(this.el().parentNode, event).x;\n };\n\n /**\n * This takes in a horizontal position for the bar and returns a clamped position.\n * Clamped position means that it will keep the position greater than half the width\n * of the tooltip and smaller than the player width minus half the width o the tooltip.\n * It will only clamp the position if `keepTooltipsInside` option is set.\n *\n * @param {Number} position the position the bar wants to be\n * @return {Number} newPosition the (potentially) clamped position\n * @method clampPosition_\n */\n\n MouseTimeDisplay.prototype.clampPosition_ = function clampPosition_(position) {\n if (!this.keepTooltipsInside) {\n return position;\n }\n\n var playerWidth = parseFloat(_globalWindow2['default'].getComputedStyle(this.player().el()).width);\n var tooltipWidth = parseFloat(_globalWindow2['default'].getComputedStyle(this.tooltip).width);\n var tooltipWidthHalf = tooltipWidth / 2;\n var actualPosition = position;\n\n if (position < tooltipWidthHalf) {\n actualPosition = Math.ceil(tooltipWidthHalf);\n } else if (position > playerWidth - tooltipWidthHalf) {\n actualPosition = Math.floor(playerWidth - tooltipWidthHalf);\n }\n\n return actualPosition;\n };\n\n return MouseTimeDisplay;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('MouseTimeDisplay', MouseTimeDisplay);\nexports['default'] = MouseTimeDisplay;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/dom.js\":144,\"../../utils/fn.js\":146,\"../../utils/format-time.js\":147,\"global/window\":8,\"lodash-compat/function/throttle\":13}],78:[function(_dereq_,module,exports){\n/**\n * @file play-progress-bar.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFormatTimeJs = _dereq_('../../utils/format-time.js');\n\nvar _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs);\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\n\nvar PlayProgressBar = (function (_Component) {\n _inherits(PlayProgressBar, _Component);\n\n function PlayProgressBar(player, options) {\n _classCallCheck(this, PlayProgressBar);\n\n _Component.call(this, player, options);\n this.updateDataAttr();\n this.on(player, 'timeupdate', this.updateDataAttr);\n player.ready(Fn.bind(this, this.updateDataAttr));\n\n if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n }\n\n if (this.keepTooltipsInside) {\n this.addClass('vjs-keep-tooltips-inside');\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n PlayProgressBar.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-play-progress vjs-slider-bar',\n innerHTML: '<span class=\"vjs-control-text\"><span>' + this.localize('Progress') + '</span>: 0%</span>'\n });\n };\n\n PlayProgressBar.prototype.updateDataAttr = function updateDataAttr() {\n var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('data-current-time', _utilsFormatTimeJs2['default'](time, this.player_.duration()));\n };\n\n return PlayProgressBar;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('PlayProgressBar', PlayProgressBar);\nexports['default'] = PlayProgressBar;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/dom.js\":144,\"../../utils/fn.js\":146,\"../../utils/format-time.js\":147}],79:[function(_dereq_,module,exports){\n/**\n * @file progress-control.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _seekBarJs = _dereq_('./seek-bar.js');\n\nvar _seekBarJs2 = _interopRequireDefault(_seekBarJs);\n\nvar _mouseTimeDisplayJs = _dereq_('./mouse-time-display.js');\n\nvar _mouseTimeDisplayJs2 = _interopRequireDefault(_mouseTimeDisplayJs);\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\n\nvar ProgressControl = (function (_Component) {\n _inherits(ProgressControl, _Component);\n\n function ProgressControl() {\n _classCallCheck(this, ProgressControl);\n\n _Component.apply(this, arguments);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n ProgressControl.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-progress-control vjs-control'\n });\n };\n\n return ProgressControl;\n})(_componentJs2['default']);\n\nProgressControl.prototype.options_ = {\n children: ['seekBar']\n};\n\n_componentJs2['default'].registerComponent('ProgressControl', ProgressControl);\nexports['default'] = ProgressControl;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"./mouse-time-display.js\":77,\"./seek-bar.js\":80}],80:[function(_dereq_,module,exports){\n/**\n * @file seek-bar.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _sliderSliderJs = _dereq_('../../slider/slider.js');\n\nvar _sliderSliderJs2 = _interopRequireDefault(_sliderSliderJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _loadProgressBarJs = _dereq_('./load-progress-bar.js');\n\nvar _loadProgressBarJs2 = _interopRequireDefault(_loadProgressBarJs);\n\nvar _playProgressBarJs = _dereq_('./play-progress-bar.js');\n\nvar _playProgressBarJs2 = _interopRequireDefault(_playProgressBarJs);\n\nvar _tooltipProgressBarJs = _dereq_('./tooltip-progress-bar.js');\n\nvar _tooltipProgressBarJs2 = _interopRequireDefault(_tooltipProgressBarJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsBrowserJs = _dereq_('../../utils/browser.js');\n\nvar _utilsFormatTimeJs = _dereq_('../../utils/format-time.js');\n\nvar _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\n\nvar SeekBar = (function (_Slider) {\n _inherits(SeekBar, _Slider);\n\n function SeekBar(player, options) {\n _classCallCheck(this, SeekBar);\n\n _Slider.call(this, player, options);\n this.on(player, 'timeupdate', this.updateProgress);\n this.on(player, 'ended', this.updateProgress);\n player.ready(Fn.bind(this, this.updateProgress));\n\n if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n }\n\n if (this.keepTooltipsInside) {\n this.tooltipProgressBar = this.addChild('TooltipProgressBar');\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n SeekBar.prototype.createEl = function createEl() {\n return _Slider.prototype.createEl.call(this, 'div', {\n className: 'vjs-progress-holder'\n }, {\n 'aria-label': 'progress bar'\n });\n };\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n\n SeekBar.prototype.updateProgress = function updateProgress() {\n this.updateAriaAttributes(this.el_);\n\n if (this.keepTooltipsInside) {\n this.updateAriaAttributes(this.tooltipProgressBar.el_);\n this.tooltipProgressBar.el_.style.width = this.bar.el_.style.width;\n\n var playerWidth = parseFloat(_globalWindow2['default'].getComputedStyle(this.player().el()).width);\n var tooltipWidth = parseFloat(_globalWindow2['default'].getComputedStyle(this.tooltipProgressBar.tooltip).width);\n var tooltipStyle = this.tooltipProgressBar.el().style;\n tooltipStyle.maxWidth = Math.floor(playerWidth - tooltipWidth / 2) + 'px';\n tooltipStyle.minWidth = Math.ceil(tooltipWidth / 2) + 'px';\n tooltipStyle.right = '-' + tooltipWidth / 2 + 'px';\n }\n };\n\n SeekBar.prototype.updateAriaAttributes = function updateAriaAttributes(el) {\n // Allows for smooth scrubbing, when player can't keep up.\n var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();\n el.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n el.setAttribute('aria-valuetext', _utilsFormatTimeJs2['default'](time, this.player_.duration())); // human readable value of progress bar (time complete)\n };\n\n /**\n * Get percentage of video played\n *\n * @return {Number} Percentage played\n * @method getPercent\n */\n\n SeekBar.prototype.getPercent = function getPercent() {\n var percent = this.player_.currentTime() / this.player_.duration();\n return percent >= 1 ? 1 : percent;\n };\n\n /**\n * Handle mouse down on seek bar\n *\n * @method handleMouseDown\n */\n\n SeekBar.prototype.handleMouseDown = function handleMouseDown(event) {\n this.player_.scrubbing(true);\n\n this.videoWasPlaying = !this.player_.paused();\n this.player_.pause();\n\n _Slider.prototype.handleMouseDown.call(this, event);\n };\n\n /**\n * Handle mouse move on seek bar\n *\n * @method handleMouseMove\n */\n\n SeekBar.prototype.handleMouseMove = function handleMouseMove(event) {\n var newTime = this.calculateDistance(event) * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration()) {\n newTime = newTime - 0.1;\n }\n\n // Set new time (tell player to seek to new time)\n this.player_.currentTime(newTime);\n };\n\n /**\n * Handle mouse up on seek bar\n *\n * @method handleMouseUp\n */\n\n SeekBar.prototype.handleMouseUp = function handleMouseUp(event) {\n _Slider.prototype.handleMouseUp.call(this, event);\n\n this.player_.scrubbing(false);\n if (this.videoWasPlaying) {\n this.player_.play();\n }\n };\n\n /**\n * Move more quickly fast forward for keyboard-only users\n *\n * @method stepForward\n */\n\n SeekBar.prototype.stepForward = function stepForward() {\n this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n };\n\n /**\n * Move more quickly rewind for keyboard-only users\n *\n * @method stepBack\n */\n\n SeekBar.prototype.stepBack = function stepBack() {\n this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n };\n\n return SeekBar;\n})(_sliderSliderJs2['default']);\n\nSeekBar.prototype.options_ = {\n children: ['loadProgressBar', 'playProgressBar'],\n 'barName': 'playProgressBar'\n};\n\n// MouseTimeDisplay tooltips should not be added to a player on mobile devices or IE8\nif ((!_utilsBrowserJs.IE_VERSION || _utilsBrowserJs.IE_VERSION > 8) && !_utilsBrowserJs.IS_IOS && !_utilsBrowserJs.IS_ANDROID) {\n SeekBar.prototype.options_.children.splice(1, 0, 'mouseTimeDisplay');\n}\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\n_componentJs2['default'].registerComponent('SeekBar', SeekBar);\nexports['default'] = SeekBar;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../slider/slider.js\":119,\"../../utils/browser.js\":141,\"../../utils/fn.js\":146,\"../../utils/format-time.js\":147,\"./load-progress-bar.js\":76,\"./play-progress-bar.js\":78,\"./tooltip-progress-bar.js\":81,\"global/window\":8,\"object.assign\":53}],81:[function(_dereq_,module,exports){\n/**\n * @file play-progress-bar.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFormatTimeJs = _dereq_('../../utils/format-time.js');\n\nvar _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs);\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\n\nvar TooltipProgressBar = (function (_Component) {\n _inherits(TooltipProgressBar, _Component);\n\n function TooltipProgressBar(player, options) {\n _classCallCheck(this, TooltipProgressBar);\n\n _Component.call(this, player, options);\n this.updateDataAttr();\n this.on(player, 'timeupdate', this.updateDataAttr);\n player.ready(Fn.bind(this, this.updateDataAttr));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n TooltipProgressBar.prototype.createEl = function createEl() {\n var el = _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-tooltip-progress-bar vjs-slider-bar',\n innerHTML: '<div class=\"vjs-time-tooltip\"></div>\\n <span class=\"vjs-control-text\"><span>' + this.localize('Progress') + '</span>: 0%</span>'\n });\n\n this.tooltip = el.querySelector('.vjs-time-tooltip');\n\n return el;\n };\n\n TooltipProgressBar.prototype.updateDataAttr = function updateDataAttr() {\n var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();\n var formattedTime = _utilsFormatTimeJs2['default'](time, this.player_.duration());\n this.el_.setAttribute('data-current-time', formattedTime);\n this.tooltip.innerHTML = formattedTime;\n };\n\n return TooltipProgressBar;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('TooltipProgressBar', TooltipProgressBar);\nexports['default'] = TooltipProgressBar;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/dom.js\":144,\"../../utils/fn.js\":146,\"../../utils/format-time.js\":147}],82:[function(_dereq_,module,exports){\n/**\n * @file custom-control-spacer.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _spacerJs = _dereq_('./spacer.js');\n\nvar _spacerJs2 = _interopRequireDefault(_spacerJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\n\nvar CustomControlSpacer = (function (_Spacer) {\n _inherits(CustomControlSpacer, _Spacer);\n\n function CustomControlSpacer() {\n _classCallCheck(this, CustomControlSpacer);\n\n _Spacer.apply(this, arguments);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n CustomControlSpacer.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-custom-control-spacer ' + _Spacer.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n CustomControlSpacer.prototype.createEl = function createEl() {\n var el = _Spacer.prototype.createEl.call(this, {\n className: this.buildCSSClass()\n });\n\n // No-flex/table-cell mode requires there be some content\n // in the cell to fill the remaining space of the table.\n el.innerHTML = ' ';\n return el;\n };\n\n return CustomControlSpacer;\n})(_spacerJs2['default']);\n\n_componentJs2['default'].registerComponent('CustomControlSpacer', CustomControlSpacer);\nexports['default'] = CustomControlSpacer;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"./spacer.js\":83}],83:[function(_dereq_,module,exports){\n/**\n * @file spacer.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\n\nvar Spacer = (function (_Component) {\n _inherits(Spacer, _Component);\n\n function Spacer() {\n _classCallCheck(this, Spacer);\n\n _Component.apply(this, arguments);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n Spacer.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-spacer ' + _Component.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n Spacer.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: this.buildCSSClass()\n });\n };\n\n return Spacer;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('Spacer', Spacer);\n\nexports['default'] = Spacer;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66}],84:[function(_dereq_,module,exports){\n/**\n * @file caption-settings-menu-item.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _textTrackMenuItemJs = _dereq_('./text-track-menu-item.js');\n\nvar _textTrackMenuItemJs2 = _interopRequireDefault(_textTrackMenuItemJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * The menu item for caption track settings menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class CaptionSettingsMenuItem\n */\n\nvar CaptionSettingsMenuItem = (function (_TextTrackMenuItem) {\n _inherits(CaptionSettingsMenuItem, _TextTrackMenuItem);\n\n function CaptionSettingsMenuItem(player, options) {\n _classCallCheck(this, CaptionSettingsMenuItem);\n\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' settings',\n 'selectable': false,\n 'default': false,\n mode: 'disabled'\n };\n\n // CaptionSettingsMenuItem has no concept of 'selected'\n options['selectable'] = false;\n\n _TextTrackMenuItem.call(this, player, options);\n this.addClass('vjs-texttrack-settings');\n this.controlText(', opens ' + options['kind'] + ' settings dialog');\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n\n CaptionSettingsMenuItem.prototype.handleClick = function handleClick() {\n this.player().getChild('textTrackSettings').show();\n this.player().getChild('textTrackSettings').el_.focus();\n };\n\n return CaptionSettingsMenuItem;\n})(_textTrackMenuItemJs2['default']);\n\n_componentJs2['default'].registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexports['default'] = CaptionSettingsMenuItem;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"./text-track-menu-item.js\":92}],85:[function(_dereq_,module,exports){\n/**\n * @file captions-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _textTrackButtonJs = _dereq_('./text-track-button.js');\n\nvar _textTrackButtonJs2 = _interopRequireDefault(_textTrackButtonJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _captionSettingsMenuItemJs = _dereq_('./caption-settings-menu-item.js');\n\nvar _captionSettingsMenuItemJs2 = _interopRequireDefault(_captionSettingsMenuItemJs);\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\n\nvar CaptionsButton = (function (_TextTrackButton) {\n _inherits(CaptionsButton, _TextTrackButton);\n\n function CaptionsButton(player, options, ready) {\n _classCallCheck(this, CaptionsButton);\n\n _TextTrackButton.call(this, player, options, ready);\n this.el_.setAttribute('aria-label', 'Captions Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n CaptionsButton.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-captions-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Update caption menu items\n *\n * @method update\n */\n\n CaptionsButton.prototype.update = function update() {\n var threshold = 2;\n _TextTrackButton.prototype.update.call(this);\n\n // if native, then threshold is 1 because no settings button\n if (this.player().tech_ && this.player().tech_['featuresNativeTextTracks']) {\n threshold = 1;\n }\n\n if (this.items && this.items.length > threshold) {\n this.show();\n } else {\n this.hide();\n }\n };\n\n /**\n * Create caption menu items\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n\n CaptionsButton.prototype.createItems = function createItems() {\n var items = [];\n\n if (!(this.player().tech_ && this.player().tech_['featuresNativeTextTracks'])) {\n items.push(new _captionSettingsMenuItemJs2['default'](this.player_, { 'kind': this.kind_ }));\n }\n\n return _TextTrackButton.prototype.createItems.call(this, items);\n };\n\n return CaptionsButton;\n})(_textTrackButtonJs2['default']);\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\n_componentJs2['default'].registerComponent('CaptionsButton', CaptionsButton);\nexports['default'] = CaptionsButton;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"./caption-settings-menu-item.js\":84,\"./text-track-button.js\":91}],86:[function(_dereq_,module,exports){\n/**\n * @file chapters-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _textTrackButtonJs = _dereq_('./text-track-button.js');\n\nvar _textTrackButtonJs2 = _interopRequireDefault(_textTrackButtonJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _textTrackMenuItemJs = _dereq_('./text-track-menu-item.js');\n\nvar _textTrackMenuItemJs2 = _interopRequireDefault(_textTrackMenuItemJs);\n\nvar _chaptersTrackMenuItemJs = _dereq_('./chapters-track-menu-item.js');\n\nvar _chaptersTrackMenuItemJs2 = _interopRequireDefault(_chaptersTrackMenuItemJs);\n\nvar _menuMenuJs = _dereq_('../../menu/menu.js');\n\nvar _menuMenuJs2 = _interopRequireDefault(_menuMenuJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsToTitleCaseJs = _dereq_('../../utils/to-title-case.js');\n\nvar _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\n/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class ChaptersButton\n */\n\nvar ChaptersButton = (function (_TextTrackButton) {\n _inherits(ChaptersButton, _TextTrackButton);\n\n function ChaptersButton(player, options, ready) {\n _classCallCheck(this, ChaptersButton);\n\n _TextTrackButton.call(this, player, options, ready);\n this.el_.setAttribute('aria-label', 'Chapters Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n ChaptersButton.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-chapters-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Create a menu item for each text track\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n\n ChaptersButton.prototype.createItems = function createItems() {\n var items = [];\n\n var tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n if (track['kind'] === this.kind_) {\n items.push(new _textTrackMenuItemJs2['default'](this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n };\n\n /**\n * Create menu from chapter buttons\n *\n * @return {Menu} Menu of chapter buttons\n * @method createMenu\n */\n\n ChaptersButton.prototype.createMenu = function createMenu() {\n var _this = this;\n\n var tracks = this.player_.textTracks() || [];\n var chaptersTrack = undefined;\n var items = this.items = [];\n\n for (var i = 0, _length = tracks.length; i < _length; i++) {\n var track = tracks[i];\n\n if (track['kind'] === this.kind_) {\n chaptersTrack = track;\n\n break;\n }\n }\n\n var menu = this.menu;\n if (menu === undefined) {\n menu = new _menuMenuJs2['default'](this.player_);\n var title = Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: _utilsToTitleCaseJs2['default'](this.kind_),\n tabIndex: -1\n });\n menu.children_.unshift(title);\n Dom.insertElFirst(title, menu.contentEl());\n }\n\n if (chaptersTrack && chaptersTrack.cues == null) {\n chaptersTrack['mode'] = 'hidden';\n\n var remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(chaptersTrack);\n\n if (remoteTextTrackEl) {\n remoteTextTrackEl.addEventListener('load', function (event) {\n return _this.update();\n });\n }\n }\n\n if (chaptersTrack && chaptersTrack.cues && chaptersTrack.cues.length > 0) {\n var cues = chaptersTrack['cues'],\n cue = undefined;\n\n for (var i = 0, l = cues.length; i < l; i++) {\n cue = cues[i];\n\n var mi = new _chaptersTrackMenuItemJs2['default'](this.player_, {\n 'track': chaptersTrack,\n 'cue': cue\n });\n\n items.push(mi);\n\n menu.addChild(mi);\n }\n\n this.addChild(menu);\n }\n\n if (this.items.length > 0) {\n this.show();\n }\n\n return menu;\n };\n\n return ChaptersButton;\n})(_textTrackButtonJs2['default']);\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.controlText_ = 'Chapters';\n\n_componentJs2['default'].registerComponent('ChaptersButton', ChaptersButton);\nexports['default'] = ChaptersButton;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../menu/menu.js\":111,\"../../utils/dom.js\":144,\"../../utils/fn.js\":146,\"../../utils/to-title-case.js\":153,\"./chapters-track-menu-item.js\":87,\"./text-track-button.js\":91,\"./text-track-menu-item.js\":92,\"global/window\":8}],87:[function(_dereq_,module,exports){\n/**\n * @file chapters-track-menu-item.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _menuMenuItemJs = _dereq_('../../menu/menu-item.js');\n\nvar _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\n/**\n * The chapter track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class ChaptersTrackMenuItem\n */\n\nvar ChaptersTrackMenuItem = (function (_MenuItem) {\n _inherits(ChaptersTrackMenuItem, _MenuItem);\n\n function ChaptersTrackMenuItem(player, options) {\n _classCallCheck(this, ChaptersTrackMenuItem);\n\n var track = options['track'];\n var cue = options['cue'];\n var currentTime = player.currentTime();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = cue.text;\n options['selected'] = cue['startTime'] <= currentTime && currentTime < cue['endTime'];\n _MenuItem.call(this, player, options);\n\n this.track = track;\n this.cue = cue;\n track.addEventListener('cuechange', Fn.bind(this, this.update));\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n\n ChaptersTrackMenuItem.prototype.handleClick = function handleClick() {\n _MenuItem.prototype.handleClick.call(this);\n this.player_.currentTime(this.cue.startTime);\n this.update(this.cue.startTime);\n };\n\n /**\n * Update chapter menu item\n *\n * @method update\n */\n\n ChaptersTrackMenuItem.prototype.update = function update() {\n var cue = this.cue;\n var currentTime = this.player_.currentTime();\n\n // vjs.log(currentTime, cue.startTime);\n this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n };\n\n return ChaptersTrackMenuItem;\n})(_menuMenuItemJs2['default']);\n\n_componentJs2['default'].registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexports['default'] = ChaptersTrackMenuItem;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../menu/menu-item.js\":110,\"../../utils/fn.js\":146}],88:[function(_dereq_,module,exports){\n/**\n * @file descriptions-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _textTrackButtonJs = _dereq_('./text-track-button.js');\n\nvar _textTrackButtonJs2 = _interopRequireDefault(_textTrackButtonJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\n/**\n * The button component for toggling and selecting descriptions\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class DescriptionsButton\n */\n\nvar DescriptionsButton = (function (_TextTrackButton) {\n _inherits(DescriptionsButton, _TextTrackButton);\n\n function DescriptionsButton(player, options, ready) {\n var _this = this;\n\n _classCallCheck(this, DescriptionsButton);\n\n _TextTrackButton.call(this, player, options, ready);\n this.el_.setAttribute('aria-label', 'Descriptions Menu');\n\n var tracks = player.textTracks();\n\n if (tracks) {\n (function () {\n var changeHandler = Fn.bind(_this, _this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n _this.on('dispose', function () {\n tracks.removeEventListener('change', changeHandler);\n });\n })();\n }\n }\n\n /**\n * Handle text track change\n *\n * @method handleTracksChange\n */\n\n DescriptionsButton.prototype.handleTracksChange = function handleTracksChange(event) {\n var tracks = this.player().textTracks();\n var disabled = false;\n\n // Check whether a track of a different kind is showing\n for (var i = 0, l = tracks.length; i < l; i++) {\n var track = tracks[i];\n if (track['kind'] !== this.kind_ && track['mode'] === 'showing') {\n disabled = true;\n break;\n }\n }\n\n // If another track is showing, disable this menu button\n if (disabled) {\n this.disable();\n } else {\n this.enable();\n }\n };\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n DescriptionsButton.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-descriptions-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);\n };\n\n return DescriptionsButton;\n})(_textTrackButtonJs2['default']);\n\nDescriptionsButton.prototype.kind_ = 'descriptions';\nDescriptionsButton.prototype.controlText_ = 'Descriptions';\n\n_componentJs2['default'].registerComponent('DescriptionsButton', DescriptionsButton);\nexports['default'] = DescriptionsButton;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/fn.js\":146,\"./text-track-button.js\":91}],89:[function(_dereq_,module,exports){\n/**\n * @file off-text-track-menu-item.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _textTrackMenuItemJs = _dereq_('./text-track-menu-item.js');\n\nvar _textTrackMenuItemJs2 = _interopRequireDefault(_textTrackMenuItemJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class OffTextTrackMenuItem\n */\n\nvar OffTextTrackMenuItem = (function (_TextTrackMenuItem) {\n _inherits(OffTextTrackMenuItem, _TextTrackMenuItem);\n\n function OffTextTrackMenuItem(player, options) {\n _classCallCheck(this, OffTextTrackMenuItem);\n\n // Create pseudo track info\n // Requires options['kind']\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' off',\n 'default': false,\n 'mode': 'disabled'\n };\n\n // MenuItem is selectable\n options['selectable'] = true;\n\n _TextTrackMenuItem.call(this, player, options);\n this.selected(true);\n }\n\n /**\n * Handle text track change\n *\n * @param {Object} event Event object\n * @method handleTracksChange\n */\n\n OffTextTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {\n var tracks = this.player().textTracks();\n var selected = true;\n\n for (var i = 0, l = tracks.length; i < l; i++) {\n var track = tracks[i];\n if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n selected = false;\n break;\n }\n }\n\n this.selected(selected);\n };\n\n return OffTextTrackMenuItem;\n})(_textTrackMenuItemJs2['default']);\n\n_componentJs2['default'].registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexports['default'] = OffTextTrackMenuItem;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"./text-track-menu-item.js\":92}],90:[function(_dereq_,module,exports){\n/**\n * @file subtitles-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _textTrackButtonJs = _dereq_('./text-track-button.js');\n\nvar _textTrackButtonJs2 = _interopRequireDefault(_textTrackButtonJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class SubtitlesButton\n */\n\nvar SubtitlesButton = (function (_TextTrackButton) {\n _inherits(SubtitlesButton, _TextTrackButton);\n\n function SubtitlesButton(player, options, ready) {\n _classCallCheck(this, SubtitlesButton);\n\n _TextTrackButton.call(this, player, options, ready);\n this.el_.setAttribute('aria-label', 'Subtitles Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n SubtitlesButton.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-subtitles-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);\n };\n\n return SubtitlesButton;\n})(_textTrackButtonJs2['default']);\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.controlText_ = 'Subtitles';\n\n_componentJs2['default'].registerComponent('SubtitlesButton', SubtitlesButton);\nexports['default'] = SubtitlesButton;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"./text-track-button.js\":91}],91:[function(_dereq_,module,exports){\n/**\n * @file text-track-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _trackButtonJs = _dereq_('../track-button.js');\n\nvar _trackButtonJs2 = _interopRequireDefault(_trackButtonJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _textTrackMenuItemJs = _dereq_('./text-track-menu-item.js');\n\nvar _textTrackMenuItemJs2 = _interopRequireDefault(_textTrackMenuItemJs);\n\nvar _offTextTrackMenuItemJs = _dereq_('./off-text-track-menu-item.js');\n\nvar _offTextTrackMenuItemJs2 = _interopRequireDefault(_offTextTrackMenuItemJs);\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TextTrackButton\n */\n\nvar TextTrackButton = (function (_TrackButton) {\n _inherits(TextTrackButton, _TrackButton);\n\n function TextTrackButton(player) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, TextTrackButton);\n\n options.tracks = player.textTracks();\n\n _TrackButton.call(this, player, options);\n }\n\n /**\n * Create a menu item for each text track\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n\n TextTrackButton.prototype.createItems = function createItems() {\n var items = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n // Add an OFF menu item to turn all tracks off\n items.push(new _offTextTrackMenuItemJs2['default'](this.player_, { 'kind': this.kind_ }));\n\n var tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n\n // only add tracks that are of the appropriate kind and have a label\n if (track['kind'] === this.kind_) {\n items.push(new _textTrackMenuItemJs2['default'](this.player_, {\n // MenuItem is selectable\n 'selectable': true,\n 'track': track\n }));\n }\n }\n\n return items;\n };\n\n return TextTrackButton;\n})(_trackButtonJs2['default']);\n\n_componentJs2['default'].registerComponent('TextTrackButton', TextTrackButton);\nexports['default'] = TextTrackButton;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/fn.js\":146,\"../track-button.js\":97,\"./off-text-track-menu-item.js\":89,\"./text-track-menu-item.js\":92}],92:[function(_dereq_,module,exports){\n/**\n * @file text-track-menu-item.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _menuMenuItemJs = _dereq_('../../menu/menu-item.js');\n\nvar _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class TextTrackMenuItem\n */\n\nvar TextTrackMenuItem = (function (_MenuItem) {\n _inherits(TextTrackMenuItem, _MenuItem);\n\n function TextTrackMenuItem(player, options) {\n var _this = this;\n\n _classCallCheck(this, TextTrackMenuItem);\n\n var track = options['track'];\n var tracks = player.textTracks();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = track['label'] || track['language'] || 'Unknown';\n options['selected'] = track['default'] || track['mode'] === 'showing';\n\n _MenuItem.call(this, player, options);\n\n this.track = track;\n\n if (tracks) {\n (function () {\n var changeHandler = Fn.bind(_this, _this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n _this.on('dispose', function () {\n tracks.removeEventListener('change', changeHandler);\n });\n })();\n }\n\n // iOS7 doesn't dispatch change events to TextTrackLists when an\n // associated track's mode changes. Without something like\n // Object.observe() (also not present on iOS7), it's not\n // possible to detect changes to the mode attribute and polyfill\n // the change event. As a poor substitute, we manually dispatch\n // change events whenever the controls modify the mode.\n if (tracks && tracks.onchange === undefined) {\n (function () {\n var event = undefined;\n\n _this.on(['tap', 'click'], function () {\n if (typeof _globalWindow2['default'].Event !== 'object') {\n // Android 2.3 throws an Illegal Constructor error for window.Event\n try {\n event = new _globalWindow2['default'].Event('change');\n } catch (err) {}\n }\n\n if (!event) {\n event = _globalDocument2['default'].createEvent('Event');\n event.initEvent('change', true, true);\n }\n\n tracks.dispatchEvent(event);\n });\n })();\n }\n }\n\n /**\n * Handle click on text track\n *\n * @method handleClick\n */\n\n TextTrackMenuItem.prototype.handleClick = function handleClick(event) {\n var kind = this.track['kind'];\n var tracks = this.player_.textTracks();\n\n _MenuItem.prototype.handleClick.call(this, event);\n\n if (!tracks) return;\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n\n if (track['kind'] !== kind) {\n continue;\n }\n\n if (track === this.track) {\n track['mode'] = 'showing';\n } else {\n track['mode'] = 'disabled';\n }\n }\n };\n\n /**\n * Handle text track change\n *\n * @method handleTracksChange\n */\n\n TextTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {\n this.selected(this.track['mode'] === 'showing');\n };\n\n return TextTrackMenuItem;\n})(_menuMenuItemJs2['default']);\n\n_componentJs2['default'].registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexports['default'] = TextTrackMenuItem;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../menu/menu-item.js\":110,\"../../utils/fn.js\":146,\"global/document\":7,\"global/window\":8}],93:[function(_dereq_,module,exports){\n/**\n * @file current-time-display.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFormatTimeJs = _dereq_('../../utils/format-time.js');\n\nvar _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs);\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\n\nvar CurrentTimeDisplay = (function (_Component) {\n _inherits(CurrentTimeDisplay, _Component);\n\n function CurrentTimeDisplay(player, options) {\n _classCallCheck(this, CurrentTimeDisplay);\n\n _Component.call(this, player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n CurrentTimeDisplay.prototype.createEl = function createEl() {\n var el = _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-current-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-current-time-display',\n // label the current time for screen reader users\n innerHTML: '<span class=\"vjs-control-text\">Current Time </span>' + '0:00'\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n };\n\n /**\n * Update current time display\n *\n * @method updateContent\n */\n\n CurrentTimeDisplay.prototype.updateContent = function updateContent() {\n // Allows for smooth scrubbing, when player can't keep up.\n var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();\n var localizedText = this.localize('Current Time');\n var formattedTime = _utilsFormatTimeJs2['default'](time, this.player_.duration());\n if (formattedTime !== this.formattedTime_) {\n this.formattedTime_ = formattedTime;\n this.contentEl_.innerHTML = '<span class=\"vjs-control-text\">' + localizedText + '</span> ' + formattedTime;\n }\n };\n\n return CurrentTimeDisplay;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexports['default'] = CurrentTimeDisplay;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/dom.js\":144,\"../../utils/format-time.js\":147}],94:[function(_dereq_,module,exports){\n/**\n * @file duration-display.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFormatTimeJs = _dereq_('../../utils/format-time.js');\n\nvar _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs);\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\n\nvar DurationDisplay = (function (_Component) {\n _inherits(DurationDisplay, _Component);\n\n function DurationDisplay(player, options) {\n _classCallCheck(this, DurationDisplay);\n\n _Component.call(this, player, options);\n\n // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n // however the durationchange event fires before this.player_.duration() is set,\n // so the value cannot be written out using this method.\n // Once the order of durationchange and this.player_.duration() being set is figured out,\n // this can be updated.\n this.on(player, 'timeupdate', this.updateContent);\n this.on(player, 'loadedmetadata', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n DurationDisplay.prototype.createEl = function createEl() {\n var el = _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-duration vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-duration-display',\n // label the duration time for screen reader users\n innerHTML: '<span class=\"vjs-control-text\">' + this.localize('Duration Time') + '</span> 0:00'\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n };\n\n /**\n * Update duration time display\n *\n * @method updateContent\n */\n\n DurationDisplay.prototype.updateContent = function updateContent() {\n var duration = this.player_.duration();\n if (duration && this.duration_ !== duration) {\n this.duration_ = duration;\n var localizedText = this.localize('Duration Time');\n var formattedTime = _utilsFormatTimeJs2['default'](duration);\n this.contentEl_.innerHTML = '<span class=\"vjs-control-text\">' + localizedText + '</span> ' + formattedTime; // label the duration time for screen reader users\n }\n };\n\n return DurationDisplay;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('DurationDisplay', DurationDisplay);\nexports['default'] = DurationDisplay;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/dom.js\":144,\"../../utils/format-time.js\":147}],95:[function(_dereq_,module,exports){\n/**\n * @file remaining-time-display.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFormatTimeJs = _dereq_('../../utils/format-time.js');\n\nvar _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs);\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\n\nvar RemainingTimeDisplay = (function (_Component) {\n _inherits(RemainingTimeDisplay, _Component);\n\n function RemainingTimeDisplay(player, options) {\n _classCallCheck(this, RemainingTimeDisplay);\n\n _Component.call(this, player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n RemainingTimeDisplay.prototype.createEl = function createEl() {\n var el = _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-remaining-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-remaining-time-display',\n // label the remaining time for screen reader users\n innerHTML: '<span class=\"vjs-control-text\">' + this.localize('Remaining Time') + '</span> -0:00'\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n };\n\n /**\n * Update remaining time display\n *\n * @method updateContent\n */\n\n RemainingTimeDisplay.prototype.updateContent = function updateContent() {\n if (this.player_.duration()) {\n var localizedText = this.localize('Remaining Time');\n var formattedTime = _utilsFormatTimeJs2['default'](this.player_.remainingTime());\n if (formattedTime !== this.formattedTime_) {\n this.formattedTime_ = formattedTime;\n this.contentEl_.innerHTML = '<span class=\"vjs-control-text\">' + localizedText + '</span> -' + formattedTime;\n }\n }\n\n // Allows for smooth scrubbing, when player can't keep up.\n // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n };\n\n return RemainingTimeDisplay;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexports['default'] = RemainingTimeDisplay;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/dom.js\":144,\"../../utils/format-time.js\":147}],96:[function(_dereq_,module,exports){\n/**\n * @file time-divider.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class TimeDivider\n */\n\nvar TimeDivider = (function (_Component) {\n _inherits(TimeDivider, _Component);\n\n function TimeDivider() {\n _classCallCheck(this, TimeDivider);\n\n _Component.apply(this, arguments);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n TimeDivider.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-time-control vjs-time-divider',\n innerHTML: '<div><span>/</span></div>'\n });\n };\n\n return TimeDivider;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('TimeDivider', TimeDivider);\nexports['default'] = TimeDivider;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66}],97:[function(_dereq_,module,exports){\n/**\n * @file track-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _menuMenuButtonJs = _dereq_('../menu/menu-button.js');\n\nvar _menuMenuButtonJs2 = _interopRequireDefault(_menuMenuButtonJs);\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TrackButton\n */\n\nvar TrackButton = (function (_MenuButton) {\n _inherits(TrackButton, _MenuButton);\n\n function TrackButton(player, options) {\n _classCallCheck(this, TrackButton);\n\n var tracks = options.tracks;\n\n _MenuButton.call(this, player, options);\n\n if (this.items.length <= 1) {\n this.hide();\n }\n\n if (!tracks) {\n return;\n }\n\n var updateHandler = Fn.bind(this, this.update);\n tracks.addEventListener('removetrack', updateHandler);\n tracks.addEventListener('addtrack', updateHandler);\n\n this.player_.on('dispose', function () {\n tracks.removeEventListener('removetrack', updateHandler);\n tracks.removeEventListener('addtrack', updateHandler);\n });\n }\n\n return TrackButton;\n})(_menuMenuButtonJs2['default']);\n\n_componentJs2['default'].registerComponent('TrackButton', TrackButton);\nexports['default'] = TrackButton;\nmodule.exports = exports['default'];\n\n},{\"../component.js\":66,\"../menu/menu-button.js\":109,\"../utils/fn.js\":146}],98:[function(_dereq_,module,exports){\n/**\n * @file volume-bar.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _sliderSliderJs = _dereq_('../../slider/slider.js');\n\nvar _sliderSliderJs2 = _interopRequireDefault(_sliderSliderJs);\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\n// Required children\n\nvar _volumeLevelJs = _dereq_('./volume-level.js');\n\nvar _volumeLevelJs2 = _interopRequireDefault(_volumeLevelJs);\n\nvar _volumeDisplayJs = _dereq_('./volume-display.js');\n\nvar _volumeDisplayJs2 = _interopRequireDefault(_volumeDisplayJs);\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\n\nvar VolumeBar = (function (_Slider) {\n _inherits(VolumeBar, _Slider);\n\n function VolumeBar(player, options) {\n _classCallCheck(this, VolumeBar);\n\n _Slider.call(this, player, options);\n this.on(player, 'volumechange', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n VolumeBar.prototype.createEl = function createEl() {\n return _Slider.prototype.createEl.call(this, 'div', {\n className: 'vjs-volume-bar vjs-slider-bar'\n }, {\n 'aria-label': 'volume level'\n });\n };\n\n /**\n * Handle mouse move on volume bar\n *\n * @method handleMouseMove\n */\n\n VolumeBar.prototype.handleMouseMove = function handleMouseMove(event) {\n this.checkMuted();\n this.player_.volume(this.calculateDistance(event));\n };\n\n VolumeBar.prototype.checkMuted = function checkMuted() {\n if (this.player_.muted()) {\n this.player_.muted(false);\n }\n };\n\n /**\n * Get percent of volume level\n *\n * @retun {Number} Volume level percent\n * @method getPercent\n */\n\n VolumeBar.prototype.getPercent = function getPercent() {\n if (this.player_.muted()) {\n return 0;\n } else {\n return this.player_.volume();\n }\n };\n\n /**\n * Increase volume level for keyboard users\n *\n * @method stepForward\n */\n\n VolumeBar.prototype.stepForward = function stepForward() {\n this.checkMuted();\n this.player_.volume(this.player_.volume() + 0.1);\n };\n\n /**\n * Decrease volume level for keyboard users\n *\n * @method stepBack\n */\n\n VolumeBar.prototype.stepBack = function stepBack() {\n this.checkMuted();\n this.player_.volume(this.player_.volume() - 0.1);\n };\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n\n VolumeBar.prototype.updateARIAAttributes = function updateARIAAttributes() {\n // Current value of volume bar as a percentage\n var volume = (this.player_.volume() * 100).toFixed(2);\n this.el_.setAttribute('aria-valuenow', volume);\n this.el_.setAttribute('aria-valuetext', volume + '%');\n };\n\n return VolumeBar;\n})(_sliderSliderJs2['default']);\n\nVolumeBar.prototype.options_ = {\n children: ['volumeLevel', 'volumeDisplay'],\n 'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\n_componentJs2['default'].registerComponent('VolumeBar', VolumeBar);\nexports['default'] = VolumeBar;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../slider/slider.js\":119,\"../../utils/fn.js\":146,\"./volume-display.js\":100,\"./volume-level.js\":101}],99:[function(_dereq_,module,exports){\n/**\n * @file volume-control.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n// Required children\n\nvar _volumeBarJs = _dereq_('./volume-bar.js');\n\nvar _volumeBarJs2 = _interopRequireDefault(_volumeBarJs);\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\n\nvar VolumeControl = (function (_Component) {\n _inherits(VolumeControl, _Component);\n\n function VolumeControl(player, options) {\n _classCallCheck(this, VolumeControl);\n\n _Component.call(this, player, options);\n\n // hide volume controls when they're not supported by the current tech\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function () {\n if (player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n VolumeControl.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-volume-control vjs-control'\n });\n };\n\n return VolumeControl;\n})(_componentJs2['default']);\n\nVolumeControl.prototype.options_ = {\n children: ['volumeBar']\n};\n\n_componentJs2['default'].registerComponent('VolumeControl', VolumeControl);\nexports['default'] = VolumeControl;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"./volume-bar.js\":98}],100:[function(_dereq_,module,exports){\n/**\n * @file volume-display.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('../../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _lodashCompatFunctionThrottle = _dereq_('lodash-compat/function/throttle');\n\nvar _lodashCompatFunctionThrottle2 = _interopRequireDefault(_lodashCompatFunctionThrottle);\n\n/**\n * The Mouse Time Display component shows the time you will seek to\n * when hovering over the progress bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeDisplay\n */\n\nvar VolumeDisplay = (function (_Component) {\n _inherits(VolumeDisplay, _Component);\n\n function VolumeDisplay(player, options) {\n var _this = this;\n\n _classCallCheck(this, VolumeDisplay);\n\n _Component.call(this, player, options);\n\n this.update(0, 0, 0);\n\n player.on('ready', function () {\n player.controlBar.progressControl.el().appendChild(_this.tooltip);\n\n _this.parent = player.controlBar.volumeMenuButton.volumeBar;\n _this.on(_this.parent.el(), 'mousemove', _lodashCompatFunctionThrottle2['default'](Fn.bind(_this, _this.handleMouseMove), 25));\n _this.on(_this.parent.el(), 'mouseover', _lodashCompatFunctionThrottle2['default'](Fn.bind(_this, _this.handleHover), 25));\n _this.on(_this.parent.el(), 'mouseout', _lodashCompatFunctionThrottle2['default'](Fn.bind(_this, _this.handleLeave), 25));\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n VolumeDisplay.prototype.createEl = function createEl() {\n this.className = 'vjs-volume-display';\n this.tooltipClassName = this.className + '-tooltip';\n\n this.tooltip = Dom.createEl('div', {\n className: this.tooltipClassName\n });\n return _Component.prototype.createEl.call(this, 'div', {\n className: this.className\n });\n };\n\n /**\n * Dispose of the component and all child components\n *\n * @method dispose\n */\n\n VolumeDisplay.prototype.dispose = function dispose() {\n // Remove tooltipelement from DOM\n if (this.tooltip.parentNode) {\n this.tooltip.parentNode.removeChild(this.tooltip);\n }\n\n Dom.removeElData(this.tooltip);\n this.tooltip = null;\n\n _Component.prototype.dispose.call(this);\n };\n\n VolumeDisplay.prototype.handleMouseMove = function handleMouseMove(event) {\n var newValue = this.calculateDistance(event) * 100;\n\n var maxLeft = this.parent.width() - this.width();\n var position = event.pageX - Dom.findElPosition(this.el().parentNode).left;\n position = Math.min(Math.max(0, position), maxLeft);\n\n var tooltipWidth = this.tooltip.offsetWidth;\n var tooltipParentLeft = Dom.findElPosition(this.tooltip.parentNode).left;\n var minTooltipLeft = Dom.findElPosition(this.parent.el()).left - tooltipParentLeft - tooltipWidth / 2;\n var maxTooltipLeft = minTooltipLeft + this.parent.width();\n\n var tooltipPosition = event.pageX - tooltipParentLeft - tooltipWidth / 2;\n tooltipPosition = Math.min(Math.max(minTooltipLeft, tooltipPosition), maxTooltipLeft);\n\n this.update(newValue, position, tooltipPosition);\n };\n\n VolumeDisplay.prototype.handleHover = function handleHover(event) {\n this.player_.trigger('tooltipShown');\n Dom.addElClass(this.tooltip, this.tooltipClassName + '-active');\n };\n\n VolumeDisplay.prototype.handleLeave = function handleLeave(event) {\n Dom.removeElClass(this.tooltip, this.tooltipClassName + '-active');\n };\n\n VolumeDisplay.prototype.update = function update(newValue, position, tooltipPosition) {\n var value = Math.round(newValue) + '%';\n\n this.el().style.left = position + 'px';\n\n this.tooltip.style.left = tooltipPosition + 'px';\n this.tooltip.innerHTML = value;\n };\n\n VolumeDisplay.prototype.calculateDistance = function calculateDistance(event) {\n return Dom.getPointerPosition(this.el().parentNode, event).x;\n };\n\n return VolumeDisplay;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('VolumeDisplay', VolumeDisplay);\nexports['default'] = VolumeDisplay;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66,\"../../utils/dom.js\":144,\"../../utils/fn.js\":146,\"lodash-compat/function/throttle\":13}],101:[function(_dereq_,module,exports){\n/**\n * @file volume-level.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeLevel\n */\n\nvar VolumeLevel = (function (_Component) {\n _inherits(VolumeLevel, _Component);\n\n function VolumeLevel() {\n _classCallCheck(this, VolumeLevel);\n\n _Component.apply(this, arguments);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n VolumeLevel.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-volume-level',\n innerHTML: '<span class=\"vjs-control-text\"></span>'\n });\n };\n\n return VolumeLevel;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('VolumeLevel', VolumeLevel);\nexports['default'] = VolumeLevel;\nmodule.exports = exports['default'];\n\n},{\"../../component.js\":66}],102:[function(_dereq_,module,exports){\n/**\n * @file volume-menu-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _popupPopupJs = _dereq_('../popup/popup.js');\n\nvar _popupPopupJs2 = _interopRequireDefault(_popupPopupJs);\n\nvar _popupPopupButtonJs = _dereq_('../popup/popup-button.js');\n\nvar _popupPopupButtonJs2 = _interopRequireDefault(_popupPopupButtonJs);\n\nvar _muteToggleJs = _dereq_('./mute-toggle.js');\n\nvar _muteToggleJs2 = _interopRequireDefault(_muteToggleJs);\n\nvar _volumeControlVolumeBarJs = _dereq_('./volume-control/volume-bar.js');\n\nvar _volumeControlVolumeBarJs2 = _interopRequireDefault(_volumeControlVolumeBarJs);\n\n/**\n * Button for volume popup\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends PopupButton\n * @class VolumeMenuButton\n */\n\nvar VolumeMenuButton = (function (_PopupButton) {\n _inherits(VolumeMenuButton, _PopupButton);\n\n function VolumeMenuButton(player) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, VolumeMenuButton);\n\n // Default to inline\n if (options.inline === undefined) {\n options.inline = true;\n }\n\n // If the vertical option isn't passed at all, default to true.\n if (options.vertical === undefined) {\n // If an inline volumeMenuButton is used, we should default to using\n // a horizontal slider for obvious reasons.\n if (options.inline) {\n options.vertical = false;\n } else {\n options.vertical = true;\n }\n }\n\n // The vertical option needs to be set on the volumeBar as well,\n // since that will need to be passed along to the VolumeBar constructor\n options.volumeBar = options.volumeBar || {};\n options.volumeBar.vertical = !!options.vertical;\n\n _PopupButton.call(this, player, options);\n\n // Same listeners as MuteToggle\n this.on(player, 'volumechange', this.volumeUpdate);\n this.on(player, 'loadstart', this.volumeUpdate);\n\n // hide mute toggle if the current tech doesn't support volume control\n function updateVisibility() {\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n }\n\n updateVisibility.call(this);\n this.on(player, 'loadstart', updateVisibility);\n\n this.on(this.volumeBar, ['slideractive', 'focus'], function () {\n this.addClass('vjs-slider-active');\n });\n\n this.on(this.volumeBar, ['sliderinactive', 'blur'], function () {\n this.removeClass('vjs-slider-active');\n });\n\n this.on(this.volumeBar, ['focus'], function () {\n this.addClass('vjs-lock-showing');\n });\n\n this.on(this.volumeBar, ['blur'], function () {\n this.removeClass('vjs-lock-showing');\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n VolumeMenuButton.prototype.buildCSSClass = function buildCSSClass() {\n var orientationClass = '';\n if (!!this.options_.vertical) {\n orientationClass = 'vjs-volume-menu-button-vertical';\n } else {\n orientationClass = 'vjs-volume-menu-button-horizontal';\n }\n\n return 'vjs-volume-menu-button ' + _PopupButton.prototype.buildCSSClass.call(this) + ' ' + orientationClass;\n };\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {Popup} The volume popup button\n * @method createPopup\n */\n\n VolumeMenuButton.prototype.createPopup = function createPopup() {\n var popup = new _popupPopupJs2['default'](this.player_, {\n contentElType: 'div'\n });\n\n var vb = new _volumeControlVolumeBarJs2['default'](this.player_, this.options_.volumeBar);\n\n popup.addChild(vb);\n\n this.menuContent = popup;\n this.volumeBar = vb;\n\n this.attachVolumeBarEvents();\n\n return popup;\n };\n\n /**\n * Handle click on volume popup and calls super\n *\n * @method handleClick\n */\n\n VolumeMenuButton.prototype.handleClick = function handleClick() {\n _muteToggleJs2['default'].prototype.handleClick.call(this);\n _PopupButton.prototype.handleClick.call(this);\n };\n\n VolumeMenuButton.prototype.attachVolumeBarEvents = function attachVolumeBarEvents() {\n this.menuContent.on(['mousedown', 'touchdown'], Fn.bind(this, this.handleMouseDown));\n };\n\n VolumeMenuButton.prototype.handleMouseDown = function handleMouseDown(event) {\n this.on(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));\n this.on(this.el_.ownerDocument, ['mouseup', 'touchend'], this.handleMouseUp);\n };\n\n VolumeMenuButton.prototype.handleMouseUp = function handleMouseUp(event) {\n this.off(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));\n };\n\n return VolumeMenuButton;\n})(_popupPopupButtonJs2['default']);\n\nVolumeMenuButton.prototype.volumeUpdate = _muteToggleJs2['default'].prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\n_componentJs2['default'].registerComponent('VolumeMenuButton', VolumeMenuButton);\nexports['default'] = VolumeMenuButton;\nmodule.exports = exports['default'];\n\n},{\"../component.js\":66,\"../popup/popup-button.js\":115,\"../popup/popup.js\":116,\"../utils/fn.js\":146,\"./mute-toggle.js\":72,\"./volume-control/volume-bar.js\":98}],103:[function(_dereq_,module,exports){\n/**\n * @file error-display.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _component = _dereq_('./component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _modalDialog = _dereq_('./modal-dialog');\n\nvar _modalDialog2 = _interopRequireDefault(_modalDialog);\n\nvar _utilsDom = _dereq_('./utils/dom');\n\nvar Dom = _interopRequireWildcard(_utilsDom);\n\nvar _utilsMergeOptions = _dereq_('./utils/merge-options');\n\nvar _utilsMergeOptions2 = _interopRequireDefault(_utilsMergeOptions);\n\n/**\n * Display that an error has occurred making the video unplayable.\n *\n * @extends ModalDialog\n * @class ErrorDisplay\n */\n\nvar ErrorDisplay = (function (_ModalDialog) {\n _inherits(ErrorDisplay, _ModalDialog);\n\n /**\n * Constructor for error display modal.\n *\n * @param {Player} player\n * @param {Object} [options]\n */\n\n function ErrorDisplay(player, options) {\n _classCallCheck(this, ErrorDisplay);\n\n _ModalDialog.call(this, player, options);\n this.on(player, 'error', this.open);\n }\n\n /**\n * Include the old class for backward-compatibility.\n *\n * This can be removed in 6.0.\n *\n * @method buildCSSClass\n * @deprecated\n * @return {String}\n */\n\n ErrorDisplay.prototype.buildCSSClass = function buildCSSClass() {\n return 'vjs-error-display ' + _ModalDialog.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Generates the modal content based on the player error.\n *\n * @return {String|Null}\n */\n\n ErrorDisplay.prototype.content = function content() {\n var error = this.player().error();\n return error ? this.localize(error.message) : '';\n };\n\n return ErrorDisplay;\n})(_modalDialog2['default']);\n\nErrorDisplay.prototype.options_ = _utilsMergeOptions2['default'](_modalDialog2['default'].prototype.options_, {\n fillAlways: true,\n temporary: false,\n uncloseable: true\n});\n\n_component2['default'].registerComponent('ErrorDisplay', ErrorDisplay);\nexports['default'] = ErrorDisplay;\nmodule.exports = exports['default'];\n\n},{\"./component\":66,\"./modal-dialog\":112,\"./utils/dom\":144,\"./utils/merge-options\":150}],104:[function(_dereq_,module,exports){\n/**\n * @file event-target.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utilsEventsJs = _dereq_('./utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar EventTarget = function EventTarget() {};\n\nEventTarget.prototype.allowedEvents_ = {};\n\nEventTarget.prototype.on = function (type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n var ael = this.addEventListener;\n this.addEventListener = function () {};\n Events.on(this, type, fn);\n this.addEventListener = ael;\n};\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\nEventTarget.prototype.off = function (type, fn) {\n Events.off(this, type, fn);\n};\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\nEventTarget.prototype.one = function (type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n var ael = this.addEventListener;\n this.addEventListener = function () {};\n Events.one(this, type, fn);\n this.addEventListener = ael;\n};\n\nEventTarget.prototype.trigger = function (event) {\n var type = event.type || event;\n\n if (typeof event === 'string') {\n event = {\n type: type\n };\n }\n event = Events.fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\nexports['default'] = EventTarget;\nmodule.exports = exports['default'];\n\n},{\"./utils/events.js\":145}],105:[function(_dereq_,module,exports){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utilsLog = _dereq_('./utils/log');\n\nvar _utilsLog2 = _interopRequireDefault(_utilsLog);\n\n/*\n * @file extend.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nvar _inherits = function _inherits(subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (superClass) {\n // node\n subClass.super_ = superClass;\n }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extend(Button, {\n * constructor: function(player, options) {\n * Button.call(this, player, options);\n * },\n * onClick: function() {\n * // doSomething\n * }\n * });\n * ```\n */\nvar extendFn = function extendFn(superClass) {\n var subClassMethods = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var subClass = function subClass() {\n superClass.apply(this, arguments);\n };\n var methods = {};\n\n if (typeof subClassMethods === 'object') {\n if (typeof subClassMethods.init === 'function') {\n _utilsLog2['default'].warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n subClassMethods.constructor = subClassMethods.init;\n }\n if (subClassMethods.constructor !== Object.prototype.constructor) {\n subClass = subClassMethods.constructor;\n }\n methods = subClassMethods;\n } else if (typeof subClassMethods === 'function') {\n subClass = subClassMethods;\n }\n\n _inherits(subClass, superClass);\n\n // Extend subObj's prototype with functions and other properties from props\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n subClass.prototype[name] = methods[name];\n }\n }\n\n return subClass;\n};\n\nexports['default'] = extendFn;\nmodule.exports = exports['default'];\n\n},{\"./utils/log\":149}],106:[function(_dereq_,module,exports){\n/**\n * @file fullscreen-api.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/*\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nvar FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nvar apiMap = [\n// Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'],\n// WebKit\n['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror'],\n// Old WebKit (Safari 5.1)\n['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange', 'webkitfullscreenerror'],\n// Mozilla\n['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'],\n// Microsoft\n['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']];\n\nvar specApi = apiMap[0];\nvar browserApi = undefined;\n\n// determine the supported set of functions\nfor (var i = 0; i < apiMap.length; i++) {\n // check for exitFullscreen function\n if (apiMap[i][1] in _globalDocument2['default']) {\n browserApi = apiMap[i];\n break;\n }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n for (var i = 0; i < browserApi.length; i++) {\n FullscreenApi[specApi[i]] = browserApi[i];\n }\n}\n\nexports['default'] = FullscreenApi;\nmodule.exports = exports['default'];\n\n},{\"global/document\":7}],107:[function(_dereq_,module,exports){\n/**\n * @file loading-spinner.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _component = _dereq_('./component');\n\nvar _component2 = _interopRequireDefault(_component);\n\n/* Loading Spinner\n================================================================================ */\n/**\n * Loading spinner for waiting events\n *\n * @extends Component\n * @class LoadingSpinner\n */\n\nvar LoadingSpinner = (function (_Component) {\n _inherits(LoadingSpinner, _Component);\n\n function LoadingSpinner() {\n _classCallCheck(this, LoadingSpinner);\n\n _Component.apply(this, arguments);\n }\n\n /**\n * Create the component's DOM element\n *\n * @method createEl\n */\n\n LoadingSpinner.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-loading-spinner',\n dir: 'ltr'\n });\n };\n\n return LoadingSpinner;\n})(_component2['default']);\n\n_component2['default'].registerComponent('LoadingSpinner', LoadingSpinner);\nexports['default'] = LoadingSpinner;\nmodule.exports = exports['default'];\n\n},{\"./component\":66}],108:[function(_dereq_,module,exports){\n/**\n * @file media-error.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\n/*\n * Custom MediaError to mimic the HTML5 MediaError\n *\n * @param {Number} code The media error code\n */\nvar MediaError = function MediaError(code) {\n if (typeof code === 'number') {\n this.code = code;\n } else if (typeof code === 'string') {\n // default code is zero, so this is a custom error\n this.message = code;\n } else if (typeof code === 'object') {\n // object\n _objectAssign2['default'](this, code);\n }\n\n if (!this.message) {\n this.message = MediaError.defaultMessages[this.code] || '';\n }\n};\n\n/*\n * The error code that refers two one of the defined\n * MediaError types\n *\n * @type {Number}\n */\nMediaError.prototype.code = 0;\n\n/*\n * An optional message to be shown with the error.\n * Message is not part of the HTML5 video spec\n * but allows for more informative custom errors.\n *\n * @type {String}\n */\nMediaError.prototype.message = '';\n\n/*\n * An optional status code that can be set by plugins\n * to allow even more detail about the error.\n * For example the HLS plugin might provide the specific\n * HTTP status code that was returned when the error\n * occurred, then allowing a custom error overlay\n * to display more information.\n *\n * @type {Array}\n */\nMediaError.prototype.status = null;\n\nMediaError.errorTypes = ['MEDIA_ERR_CUSTOM', // = 0\n'MEDIA_ERR_ABORTED', // = 1\n'MEDIA_ERR_NETWORK', // = 2\n'MEDIA_ERR_DECODE', // = 3\n'MEDIA_ERR_SRC_NOT_SUPPORTED', // = 4\n'MEDIA_ERR_ENCRYPTED' // = 5\n];\n\nMediaError.defaultMessages = {\n 1: 'You aborted the media playback',\n 2: 'A network error caused the media download to fail part-way.',\n 3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',\n 4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.',\n 5: 'The media is encrypted and we do not have the keys to decrypt it.'\n};\n\n// Add types as properties on MediaError\n// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\nfor (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) {\n MediaError[MediaError.errorTypes[errNum]] = errNum;\n // values should be accessible on both the class and instance\n MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;\n}\n\nexports['default'] = MediaError;\nmodule.exports = exports['default'];\n\n},{\"object.assign\":53}],109:[function(_dereq_,module,exports){\n/**\n * @file menu-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _clickableComponentJs = _dereq_('../clickable-component.js');\n\nvar _clickableComponentJs2 = _interopRequireDefault(_clickableComponentJs);\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _menuJs = _dereq_('./menu.js');\n\nvar _menuJs2 = _interopRequireDefault(_menuJs);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsToTitleCaseJs = _dereq_('../utils/to-title-case.js');\n\nvar _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs);\n\n/**\n * A button class with a popup menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuButton\n */\n\nvar MenuButton = (function (_ClickableComponent) {\n _inherits(MenuButton, _ClickableComponent);\n\n function MenuButton(player) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, MenuButton);\n\n _ClickableComponent.call(this, player, options);\n\n this.update();\n\n this.enabled_ = true;\n\n this.el_.setAttribute('aria-haspopup', 'true');\n this.el_.setAttribute('role', 'menuitem');\n this.on('keydown', this.handleSubmenuKeyPress);\n }\n\n /**\n * Update menu\n *\n * @method update\n */\n\n MenuButton.prototype.update = function update() {\n var menu = this.createMenu();\n\n if (this.menu) {\n this.removeChild(this.menu);\n }\n\n this.menu = menu;\n this.addChild(menu);\n\n /**\n * Track the state of the menu button\n *\n * @type {Boolean}\n * @private\n */\n this.buttonPressed_ = false;\n this.el_.setAttribute('aria-expanded', 'false');\n\n if (this.items && this.items.length === 0) {\n this.hide();\n } else if (this.items && this.items.length > 1) {\n this.show();\n }\n };\n\n /**\n * Create menu\n *\n * @return {Menu} The constructed menu\n * @method createMenu\n */\n\n MenuButton.prototype.createMenu = function createMenu() {\n var menu = new _menuJs2['default'](this.player_);\n\n // Add a title list item to the top\n if (this.options_.title) {\n var title = Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: _utilsToTitleCaseJs2['default'](this.options_.title),\n tabIndex: -1\n });\n menu.children_.unshift(title);\n Dom.insertElFirst(title, menu.contentEl());\n }\n\n this.items = this['createItems']();\n\n if (this.items) {\n // Add menu items to the menu\n for (var i = 0; i < this.items.length; i++) {\n menu.addItem(this.items[i]);\n }\n }\n\n return menu;\n };\n\n /**\n * Create the list of menu items. Specific to each subclass.\n *\n * @method createItems\n */\n\n MenuButton.prototype.createItems = function createItems() {};\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n MenuButton.prototype.createEl = function createEl() {\n return _ClickableComponent.prototype.createEl.call(this, 'div', {\n className: this.buildCSSClass()\n });\n };\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n MenuButton.prototype.buildCSSClass = function buildCSSClass() {\n var menuButtonClass = 'vjs-menu-button';\n\n // If the inline option is passed, we want to use different styles altogether.\n if (this.options_.inline === true) {\n menuButtonClass += '-inline';\n } else {\n menuButtonClass += '-popup';\n }\n\n return 'vjs-menu-button ' + menuButtonClass + ' ' + _ClickableComponent.prototype.buildCSSClass.call(this);\n };\n\n /**\n * When you click the button it adds focus, which\n * will show the menu indefinitely.\n * So we'll remove focus when the mouse leaves the button.\n * Focus is needed for tab navigation.\n * Allow sub components to stack CSS class names\n *\n * @method handleClick\n */\n\n MenuButton.prototype.handleClick = function handleClick() {\n this.one('mouseout', Fn.bind(this, function () {\n this.menu.unlockShowing();\n this.el_.blur();\n }));\n if (this.buttonPressed_) {\n this.unpressButton();\n } else {\n this.pressButton();\n }\n };\n\n /**\n * Handle key press on menu\n *\n * @param {Object} event Key press event\n * @method handleKeyPress\n */\n\n MenuButton.prototype.handleKeyPress = function handleKeyPress(event) {\n\n // Escape (27) key or Tab (9) key unpress the 'button'\n if (event.which === 27 || event.which === 9) {\n if (this.buttonPressed_) {\n this.unpressButton();\n }\n // Don't preventDefault for Tab key - we still want to lose focus\n if (event.which !== 9) {\n event.preventDefault();\n }\n // Up (38) key or Down (40) key press the 'button'\n } else if (event.which === 38 || event.which === 40) {\n if (!this.buttonPressed_) {\n this.pressButton();\n event.preventDefault();\n }\n } else {\n _ClickableComponent.prototype.handleKeyPress.call(this, event);\n }\n };\n\n /**\n * Handle key press on submenu\n *\n * @param {Object} event Key press event\n * @method handleSubmenuKeyPress\n */\n\n MenuButton.prototype.handleSubmenuKeyPress = function handleSubmenuKeyPress(event) {\n\n // Escape (27) key or Tab (9) key unpress the 'button'\n if (event.which === 27 || event.which === 9) {\n if (this.buttonPressed_) {\n this.unpressButton();\n }\n // Don't preventDefault for Tab key - we still want to lose focus\n if (event.which !== 9) {\n event.preventDefault();\n }\n }\n };\n\n /**\n * Makes changes based on button pressed\n *\n * @method pressButton\n */\n\n MenuButton.prototype.pressButton = function pressButton() {\n if (this.enabled_) {\n this.buttonPressed_ = true;\n this.menu.lockShowing();\n this.el_.setAttribute('aria-expanded', 'true');\n this.menu.focus(); // set the focus into the submenu\n }\n };\n\n /**\n * Makes changes based on button unpressed\n *\n * @method unpressButton\n */\n\n MenuButton.prototype.unpressButton = function unpressButton() {\n if (this.enabled_) {\n this.buttonPressed_ = false;\n this.menu.unlockShowing();\n this.el_.setAttribute('aria-expanded', 'false');\n this.el_.focus(); // Set focus back to this menu button\n }\n };\n\n /**\n * Disable the menu button\n *\n * @return {Component}\n * @method disable\n */\n\n MenuButton.prototype.disable = function disable() {\n // Unpress, but don't force focus on this button\n this.buttonPressed_ = false;\n this.menu.unlockShowing();\n this.el_.setAttribute('aria-expanded', 'false');\n\n this.enabled_ = false;\n\n return _ClickableComponent.prototype.disable.call(this);\n };\n\n /**\n * Enable the menu button\n *\n * @return {Component}\n * @method disable\n */\n\n MenuButton.prototype.enable = function enable() {\n this.enabled_ = true;\n\n return _ClickableComponent.prototype.enable.call(this);\n };\n\n /**\n * Return handler for the tooltip\n *\n * @return {Object} Dom element to serve as a handler for the tooltip\n * @method tooltipHandler\n */\n\n MenuButton.prototype.tooltipHandler = function tooltipHandler() {\n // TODO: Fix menu button to have a real icon element to make it as tooltip handler\n return;\n };\n\n return MenuButton;\n})(_clickableComponentJs2['default']);\n\n_componentJs2['default'].registerComponent('MenuButton', MenuButton);\nexports['default'] = MenuButton;\nmodule.exports = exports['default'];\n\n},{\"../clickable-component.js\":64,\"../component.js\":66,\"../utils/dom.js\":144,\"../utils/fn.js\":146,\"../utils/to-title-case.js\":153,\"./menu.js\":111}],110:[function(_dereq_,module,exports){\n/**\n * @file menu-item.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _clickableComponentJs = _dereq_('../clickable-component.js');\n\nvar _clickableComponentJs2 = _interopRequireDefault(_clickableComponentJs);\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\n/**\n * The component for a menu item. `<li>`\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\n\nvar MenuItem = (function (_ClickableComponent) {\n _inherits(MenuItem, _ClickableComponent);\n\n function MenuItem(player, options) {\n _classCallCheck(this, MenuItem);\n\n _ClickableComponent.call(this, player, options);\n\n this.selectable = options['selectable'];\n\n this.selected(options['selected']);\n\n if (this.selectable) {\n // TODO: May need to be either menuitemcheckbox or menuitemradio,\n // and may need logical grouping of menu items.\n this.el_.setAttribute('role', 'menuitemcheckbox');\n } else {\n this.el_.setAttribute('role', 'menuitem');\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Desc\n * @param {Object=} props Desc\n * @return {Element}\n * @method createEl\n */\n\n MenuItem.prototype.createEl = function createEl(type, props, attrs) {\n return _ClickableComponent.prototype.createEl.call(this, 'li', _objectAssign2['default']({\n className: 'vjs-menu-item',\n innerHTML: this.localize(this.options_['label']),\n tabIndex: -1\n }, props), attrs);\n };\n\n /**\n * Handle a click on the menu item, and set it to selected\n *\n * @method handleClick\n */\n\n MenuItem.prototype.handleClick = function handleClick() {\n this.selected(true);\n };\n\n /**\n * Set this menu item as selected or not\n *\n * @param {Boolean} selected\n * @method selected\n */\n\n MenuItem.prototype.selected = function selected(_selected) {\n if (this.selectable) {\n if (_selected) {\n this.addClass('vjs-selected');\n this.el_.setAttribute('aria-checked', 'true');\n // aria-checked isn't fully supported by browsers/screen readers,\n // so indicate selected state to screen reader in the control text.\n this.controlText(', selected');\n } else {\n this.removeClass('vjs-selected');\n this.el_.setAttribute('aria-checked', 'false');\n // Indicate un-selected state to screen reader\n // Note that a space clears out the selected state text\n this.controlText(' ');\n }\n }\n };\n\n /**\n * Return handler for the tooltip\n *\n * @return {Object} Dom element to serve as a handler for the tooltip\n * @method tooltipHandler\n */\n\n MenuItem.prototype.tooltipHandler = function tooltipHandler() {\n if (this.options_.tooltip !== undefined) {\n return _ClickableComponent.prototype.tooltipHandler.call(this);\n }\n };\n\n return MenuItem;\n})(_clickableComponentJs2['default']);\n\n_componentJs2['default'].registerComponent('MenuItem', MenuItem);\nexports['default'] = MenuItem;\nmodule.exports = exports['default'];\n\n},{\"../clickable-component.js\":64,\"../component.js\":66,\"object.assign\":53}],111:[function(_dereq_,module,exports){\n/**\n * @file menu.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsEventsJs = _dereq_('../utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n * @class Menu\n */\n\nvar Menu = (function (_Component) {\n _inherits(Menu, _Component);\n\n function Menu(player, options) {\n _classCallCheck(this, Menu);\n\n _Component.call(this, player, options);\n\n this.focusedChild_ = -1;\n\n this.on('keydown', this.handleKeyPress);\n }\n\n /**\n * Add a menu item to the menu\n *\n * @param {Object|String} component Component or component type to add\n * @method addItem\n */\n\n Menu.prototype.addItem = function addItem(component) {\n this.addChild(component);\n component.on('click', Fn.bind(this, function () {\n this.unlockShowing();\n //TODO: Need to set keyboard focus back to the menuButton\n }));\n };\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n Menu.prototype.createEl = function createEl() {\n var contentElType = this.options_.contentElType || 'ul';\n this.contentEl_ = Dom.createEl(contentElType, {\n className: 'vjs-menu-content'\n });\n this.contentEl_.setAttribute('role', 'menu');\n var el = _Component.prototype.createEl.call(this, 'div', {\n append: this.contentEl_,\n className: 'vjs-menu'\n });\n el.setAttribute('role', 'presentation');\n el.appendChild(this.contentEl_);\n\n // Prevent clicks from bubbling up. Needed for Menu Buttons,\n // where a click on the parent is significant\n Events.on(el, 'click', function (event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n\n return el;\n };\n\n /**\n * Handle key press for menu\n *\n * @param {Object} event Event object\n * @method handleKeyPress\n */\n\n Menu.prototype.handleKeyPress = function handleKeyPress(event) {\n if (event.which === 37 || event.which === 40) {\n // Left and Down Arrows\n event.preventDefault();\n this.stepForward();\n } else if (event.which === 38 || event.which === 39) {\n // Up and Right Arrows\n event.preventDefault();\n this.stepBack();\n }\n };\n\n /**\n * Move to next (lower) menu item for keyboard users\n *\n * @method stepForward\n */\n\n Menu.prototype.stepForward = function stepForward() {\n var stepChild = 0;\n\n if (this.focusedChild_ !== undefined) {\n stepChild = this.focusedChild_ + 1;\n }\n this.focus(stepChild);\n };\n\n /**\n * Move to previous (higher) menu item for keyboard users\n *\n * @method stepBack\n */\n\n Menu.prototype.stepBack = function stepBack() {\n var stepChild = 0;\n\n if (this.focusedChild_ !== undefined) {\n stepChild = this.focusedChild_ - 1;\n }\n this.focus(stepChild);\n };\n\n /**\n * Set focus on a menu item in the menu\n *\n * @param {Object|String} item Index of child item set focus on\n * @method focus\n */\n\n Menu.prototype.focus = function focus() {\n var item = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];\n\n var children = this.children().slice();\n var haveTitle = children.length && children[0].className && /vjs-menu-title/.test(children[0].className);\n\n if (haveTitle) {\n children.shift();\n }\n\n if (children.length > 0) {\n if (item < 0) {\n item = 0;\n } else if (item >= children.length) {\n item = children.length - 1;\n }\n\n this.focusedChild_ = item;\n\n children[item].el_.focus();\n }\n };\n\n return Menu;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('Menu', Menu);\nexports['default'] = Menu;\nmodule.exports = exports['default'];\n\n},{\"../component.js\":66,\"../utils/dom.js\":144,\"../utils/events.js\":145,\"../utils/fn.js\":146}],112:[function(_dereq_,module,exports){\n/**\n * @file modal-dialog.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _utilsDom = _dereq_('./utils/dom');\n\nvar Dom = _interopRequireWildcard(_utilsDom);\n\nvar _utilsFn = _dereq_('./utils/fn');\n\nvar Fn = _interopRequireWildcard(_utilsFn);\n\nvar _utilsLog = _dereq_('./utils/log');\n\nvar _utilsLog2 = _interopRequireDefault(_utilsLog);\n\nvar _component = _dereq_('./component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _closeButton = _dereq_('./close-button');\n\nvar _closeButton2 = _interopRequireDefault(_closeButton);\n\nvar MODAL_CLASS_NAME = 'vjs-modal-dialog';\nvar ESC = 27;\n\n/**\n * The `ModalDialog` displays over the video and its controls, which blocks\n * interaction with the player until it is closed.\n *\n * Modal dialogs include a \"Close\" button and will close when that button\n * is activated - or when ESC is pressed anywhere.\n *\n * @extends Component\n * @class ModalDialog\n */\n\nvar ModalDialog = (function (_Component) {\n _inherits(ModalDialog, _Component);\n\n /**\n * Constructor for modals.\n *\n * @param {Player} player\n * @param {Object} [options]\n * @param {Mixed} [options.content=undefined]\n * Provide customized content for this modal.\n *\n * @param {String} [options.description]\n * A text description for the modal, primarily for accessibility.\n *\n * @param {Boolean} [options.fillAlways=false]\n * Normally, modals are automatically filled only the first time\n * they open. This tells the modal to refresh its content\n * every time it opens.\n *\n * @param {String} [options.label]\n * A text label for the modal, primarily for accessibility.\n *\n * @param {Boolean} [options.temporary=true]\n * If `true`, the modal can only be opened once; it will be\n * disposed as soon as it's closed.\n *\n * @param {Boolean} [options.uncloseable=false]\n * If `true`, the user will not be able to close the modal\n * through the UI in the normal ways. Programmatic closing is\n * still possible.\n *\n */\n\n function ModalDialog(player, options) {\n _classCallCheck(this, ModalDialog);\n\n _Component.call(this, player, options);\n this.opened_ = this.hasBeenOpened_ = this.hasBeenFilled_ = false;\n\n this.closeable(!this.options_.uncloseable);\n this.content(this.options_.content);\n\n // Make sure the contentEl is defined AFTER any children are initialized\n // because we only want the contents of the modal in the contentEl\n // (not the UI elements like the close button).\n this.contentEl_ = Dom.createEl('div', {\n className: MODAL_CLASS_NAME + '-content'\n }, {\n role: 'document'\n });\n\n this.descEl_ = Dom.createEl('p', {\n className: MODAL_CLASS_NAME + '-description vjs-offscreen',\n id: this.el().getAttribute('aria-describedby')\n });\n\n Dom.textContent(this.descEl_, this.description());\n this.el_.appendChild(this.descEl_);\n this.el_.appendChild(this.contentEl_);\n }\n\n /*\n * Modal dialog default options.\n *\n * @type {Object}\n * @private\n */\n\n /**\n * Create the modal's DOM element\n *\n * @method createEl\n * @return {Element}\n */\n\n ModalDialog.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: this.buildCSSClass(),\n tabIndex: -1\n }, {\n 'aria-describedby': this.id() + '_description',\n 'aria-hidden': 'true',\n 'aria-label': this.label(),\n role: 'dialog'\n });\n };\n\n /**\n * Build the modal's CSS class.\n *\n * @method buildCSSClass\n * @return {String}\n */\n\n ModalDialog.prototype.buildCSSClass = function buildCSSClass() {\n return MODAL_CLASS_NAME + ' vjs-hidden ' + _Component.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Handles key presses on the document, looking for ESC, which closes\n * the modal.\n *\n * @method handleKeyPress\n * @param {Event} e\n */\n\n ModalDialog.prototype.handleKeyPress = function handleKeyPress(e) {\n if (e.which === ESC && this.closeable()) {\n this.close();\n }\n };\n\n /**\n * Returns the label string for this modal. Primarily used for accessibility.\n *\n * @return {String}\n */\n\n ModalDialog.prototype.label = function label() {\n return this.options_.label || this.localize('Modal Window');\n };\n\n /**\n * Returns the description string for this modal. Primarily used for\n * accessibility.\n *\n * @return {String}\n */\n\n ModalDialog.prototype.description = function description() {\n var desc = this.options_.description || this.localize('This is a modal window.');\n\n // Append a universal closeability message if the modal is closeable.\n if (this.closeable()) {\n desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.');\n }\n\n return desc;\n };\n\n /**\n * Opens the modal.\n *\n * @method open\n * @return {ModalDialog}\n */\n\n ModalDialog.prototype.open = function open() {\n if (!this.opened_) {\n var player = this.player();\n\n this.trigger('beforemodalopen');\n this.opened_ = true;\n\n // Fill content if the modal has never opened before and\n // never been filled.\n if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) {\n this.fill();\n }\n\n // If the player was playing, pause it and take note of its previously\n // playing state.\n this.wasPlaying_ = !player.paused();\n\n if (this.wasPlaying_) {\n player.pause();\n }\n\n if (this.closeable()) {\n this.on(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n player.controls(false);\n this.show();\n this.el().setAttribute('aria-hidden', 'false');\n this.trigger('modalopen');\n this.hasBeenOpened_ = true;\n }\n return this;\n };\n\n /**\n * Whether or not the modal is opened currently.\n *\n * @method opened\n * @param {Boolean} [value]\n * If given, it will open (`true`) or close (`false`) the modal.\n *\n * @return {Boolean}\n */\n\n ModalDialog.prototype.opened = function opened(value) {\n if (typeof value === 'boolean') {\n this[value ? 'open' : 'close']();\n }\n return this.opened_;\n };\n\n /**\n * Closes the modal.\n *\n * @method close\n * @return {ModalDialog}\n */\n\n ModalDialog.prototype.close = function close() {\n if (this.opened_) {\n var player = this.player();\n\n this.trigger('beforemodalclose');\n this.opened_ = false;\n\n if (this.wasPlaying_) {\n player.play();\n }\n\n if (this.closeable()) {\n this.off(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n player.controls(true);\n this.hide();\n this.el().setAttribute('aria-hidden', 'true');\n this.trigger('modalclose');\n\n if (this.options_.temporary) {\n this.dispose();\n }\n }\n return this;\n };\n\n /**\n * Whether or not the modal is closeable via the UI.\n *\n * @method closeable\n * @param {Boolean} [value]\n * If given as a Boolean, it will set the `closeable` option.\n *\n * @return {Boolean}\n */\n\n ModalDialog.prototype.closeable = function closeable(value) {\n if (typeof value === 'boolean') {\n var closeable = this.closeable_ = !!value;\n var _close = this.getChild('closeButton');\n\n // If this is being made closeable and has no close button, add one.\n if (closeable && !_close) {\n\n // The close button should be a child of the modal - not its\n // content element, so temporarily change the content element.\n var temp = this.contentEl_;\n this.contentEl_ = this.el_;\n _close = this.addChild('closeButton');\n this.contentEl_ = temp;\n this.on(_close, 'close', this.close);\n }\n\n // If this is being made uncloseable and has a close button, remove it.\n if (!closeable && _close) {\n this.off(_close, 'close', this.close);\n this.removeChild(_close);\n _close.dispose();\n }\n }\n return this.closeable_;\n };\n\n /**\n * Fill the modal's content element with the modal's \"content\" option.\n *\n * The content element will be emptied before this change takes place.\n *\n * @method fill\n * @return {ModalDialog}\n */\n\n ModalDialog.prototype.fill = function fill() {\n return this.fillWith(this.content());\n };\n\n /**\n * Fill the modal's content element with arbitrary content.\n *\n * The content element will be emptied before this change takes place.\n *\n * @method fillWith\n * @param {Mixed} [content]\n * The same rules apply to this as apply to the `content` option.\n *\n * @return {ModalDialog}\n */\n\n ModalDialog.prototype.fillWith = function fillWith(content) {\n var contentEl = this.contentEl();\n var parentEl = contentEl.parentNode;\n var nextSiblingEl = contentEl.nextSibling;\n\n this.trigger('beforemodalfill');\n this.hasBeenFilled_ = true;\n\n // Detach the content element from the DOM before performing\n // manipulation to avoid modifying the live DOM multiple times.\n parentEl.removeChild(contentEl);\n this.empty();\n Dom.insertContent(contentEl, content);\n this.trigger('modalfill');\n\n // Re-inject the re-filled content element.\n if (nextSiblingEl) {\n parentEl.insertBefore(contentEl, nextSiblingEl);\n } else {\n parentEl.appendChild(contentEl);\n }\n\n return this;\n };\n\n /**\n * Empties the content element.\n *\n * This happens automatically anytime the modal is filled.\n *\n * @method empty\n * @return {ModalDialog}\n */\n\n ModalDialog.prototype.empty = function empty() {\n this.trigger('beforemodalempty');\n Dom.emptyEl(this.contentEl());\n this.trigger('modalempty');\n return this;\n };\n\n /**\n * Gets or sets the modal content, which gets normalized before being\n * rendered into the DOM.\n *\n * This does not update the DOM or fill the modal, but it is called during\n * that process.\n *\n * @method content\n * @param {Mixed} [value]\n * If defined, sets the internal content value to be used on the\n * next call(s) to `fill`. This value is normalized before being\n * inserted. To \"clear\" the internal content value, pass `null`.\n *\n * @return {Mixed}\n */\n\n ModalDialog.prototype.content = function content(value) {\n if (typeof value !== 'undefined') {\n this.content_ = value;\n }\n return this.content_;\n };\n\n return ModalDialog;\n})(_component2['default']);\n\nModalDialog.prototype.options_ = {\n temporary: true\n};\n\n_component2['default'].registerComponent('ModalDialog', ModalDialog);\nexports['default'] = ModalDialog;\nmodule.exports = exports['default'];\n\n},{\"./close-button\":65,\"./component\":66,\"./utils/dom\":144,\"./utils/fn\":146,\"./utils/log\":149}],113:[function(_dereq_,module,exports){\n/**\n * @file player.js\n */\n// Subclasses Component\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('./component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _utilsEventsJs = _dereq_('./utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar _utilsDomJs = _dereq_('./utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('./utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsGuidJs = _dereq_('./utils/guid.js');\n\nvar Guid = _interopRequireWildcard(_utilsGuidJs);\n\nvar _utilsBrowserJs = _dereq_('./utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _utilsLogJs = _dereq_('./utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _utilsToTitleCaseJs = _dereq_('./utils/to-title-case.js');\n\nvar _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs);\n\nvar _utilsTimeRangesJs = _dereq_('./utils/time-ranges.js');\n\nvar _utilsBufferJs = _dereq_('./utils/buffer.js');\n\nvar _utilsStylesheetJs = _dereq_('./utils/stylesheet.js');\n\nvar stylesheet = _interopRequireWildcard(_utilsStylesheetJs);\n\nvar _fullscreenApiJs = _dereq_('./fullscreen-api.js');\n\nvar _fullscreenApiJs2 = _interopRequireDefault(_fullscreenApiJs);\n\nvar _mediaErrorJs = _dereq_('./media-error.js');\n\nvar _mediaErrorJs2 = _interopRequireDefault(_mediaErrorJs);\n\nvar _safeJsonParseTuple = _dereq_('safe-json-parse/tuple');\n\nvar _safeJsonParseTuple2 = _interopRequireDefault(_safeJsonParseTuple);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _utilsMergeOptionsJs = _dereq_('./utils/merge-options.js');\n\nvar _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs);\n\nvar _tracksTextTrackListConverterJs = _dereq_('./tracks/text-track-list-converter.js');\n\nvar _tracksTextTrackListConverterJs2 = _interopRequireDefault(_tracksTextTrackListConverterJs);\n\nvar _tracksAudioTrackListJs = _dereq_('./tracks/audio-track-list.js');\n\nvar _tracksAudioTrackListJs2 = _interopRequireDefault(_tracksAudioTrackListJs);\n\nvar _tracksVideoTrackListJs = _dereq_('./tracks/video-track-list.js');\n\nvar _tracksVideoTrackListJs2 = _interopRequireDefault(_tracksVideoTrackListJs);\n\n// Include required child components (importing also registers them)\n\nvar _techLoaderJs = _dereq_('./tech/loader.js');\n\nvar _techLoaderJs2 = _interopRequireDefault(_techLoaderJs);\n\nvar _posterImageJs = _dereq_('./poster-image.js');\n\nvar _posterImageJs2 = _interopRequireDefault(_posterImageJs);\n\nvar _tracksTextTrackDisplayJs = _dereq_('./tracks/text-track-display.js');\n\nvar _tracksTextTrackDisplayJs2 = _interopRequireDefault(_tracksTextTrackDisplayJs);\n\nvar _loadingSpinnerJs = _dereq_('./loading-spinner.js');\n\nvar _loadingSpinnerJs2 = _interopRequireDefault(_loadingSpinnerJs);\n\nvar _bigPlayButtonJs = _dereq_('./big-play-button.js');\n\nvar _bigPlayButtonJs2 = _interopRequireDefault(_bigPlayButtonJs);\n\nvar _controlBarControlBarJs = _dereq_('./control-bar/control-bar.js');\n\nvar _controlBarControlBarJs2 = _interopRequireDefault(_controlBarControlBarJs);\n\nvar _errorDisplayJs = _dereq_('./error-display.js');\n\nvar _errorDisplayJs2 = _interopRequireDefault(_errorDisplayJs);\n\nvar _tracksTextTrackSettingsJs = _dereq_('./tracks/text-track-settings.js');\n\nvar _tracksTextTrackSettingsJs2 = _interopRequireDefault(_tracksTextTrackSettingsJs);\n\nvar _modalDialog = _dereq_('./modal-dialog');\n\nvar _modalDialog2 = _interopRequireDefault(_modalDialog);\n\n// Require html5 tech, at least for disposing the original video tag\n\nvar _techTechJs = _dereq_('./tech/tech.js');\n\nvar _techTechJs2 = _interopRequireDefault(_techTechJs);\n\nvar _techHtml5Js = _dereq_('./tech/html5.js');\n\nvar _techHtml5Js2 = _interopRequireDefault(_techHtml5Js);\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * <video id=\"example_video_1\" data-setup='{}' controls>\n * <source src=\"my-source.mp4\" type=\"video/mp4\">\n * </video>\n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Player\n */\n\nvar Player = (function (_Component) {\n _inherits(Player, _Component);\n\n /**\n * player's constructor function\n *\n * @constructs\n * @method init\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Player options\n * @param {Function=} ready Ready callback function\n */\n\n function Player(tag, options, ready) {\n var _this = this;\n\n _classCallCheck(this, Player);\n\n // Make sure tag ID exists\n tag.id = tag.id || 'vjs_video_' + Guid.newGUID();\n\n // Set Options\n // The options argument overrides options set in the video tag\n // which overrides globally set options.\n // This latter part coincides with the load order\n // (tag must exist before Player)\n options = _objectAssign2['default'](Player.getTagSettings(tag), options);\n\n // Delay the initialization of children because we need to set up\n // player properties first, and can't use `this` before `super()`\n options.initChildren = false;\n\n // Same with creating the element\n options.createEl = false;\n\n // we don't want the player to report touch activity on itself\n // see enableTouchActivity in Component\n options.reportTouchActivity = false;\n\n // Run base component initializing with new options\n _Component.call(this, null, options, ready);\n\n // if the global option object was accidentally blown away by\n // someone, bail early with an informative error\n if (!this.options_ || !this.options_.techOrder || !this.options_.techOrder.length) {\n throw new Error('No techOrder specified. Did you overwrite ' + 'videojs.options instead of just changing the ' + 'properties you want to override?');\n }\n\n this.tag = tag; // Store the original tag used to set options\n\n // Store the tag attributes used to restore html5 element\n this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n // Update current language\n this.language(this.options_.language);\n\n // Update Supported Languages\n if (options.languages) {\n (function () {\n // Normalise player option languages to lowercase\n var languagesToLower = {};\n\n Object.getOwnPropertyNames(options.languages).forEach(function (name) {\n languagesToLower[name.toLowerCase()] = options.languages[name];\n });\n _this.languages_ = languagesToLower;\n })();\n } else {\n this.languages_ = Player.prototype.options_.languages;\n }\n\n // Cache for video property values.\n this.cache_ = {};\n\n // Set poster\n this.poster_ = options.poster || '';\n\n // Set controls\n this.controls_ = !!options.controls;\n\n // Original tag settings stored in options\n // now remove immediately so native controls don't flash.\n // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n tag.controls = false;\n\n /*\n * Store the internal state of scrubbing\n *\n * @private\n * @return {Boolean} True if the user is scrubbing\n */\n this.scrubbing_ = false;\n\n this.el_ = this.createEl();\n\n // We also want to pass the original player options to each component and plugin\n // as well so they don't need to reach back into the player for options later.\n // We also need to do another copy of this.options_ so we don't end up with\n // an infinite loop.\n var playerOptionsCopy = _utilsMergeOptionsJs2['default'](this.options_);\n\n // Load plugins\n if (options.plugins) {\n (function () {\n var plugins = options.plugins;\n\n Object.getOwnPropertyNames(plugins).forEach(function (name) {\n if (typeof this[name] === 'function') {\n this[name](plugins[name]);\n } else {\n _utilsLogJs2['default'].error('Unable to find plugin:', name);\n }\n }, _this);\n })();\n }\n\n this.options_.playerOptions = playerOptionsCopy;\n\n this.initChildren();\n\n // Set isAudio based on whether or not an audio tag was used\n this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n // Update controls className. Can't do this when the controls are initially\n // set because the element doesn't exist yet.\n if (this.controls()) {\n this.addClass('vjs-controls-enabled');\n } else {\n this.addClass('vjs-controls-disabled');\n }\n\n // Set ARIA label and region role depending on player type\n this.el_.setAttribute('role', 'region');\n if (this.isAudio()) {\n this.el_.setAttribute('aria-label', 'audio player');\n } else {\n this.el_.setAttribute('aria-label', 'video player');\n }\n\n if (this.isAudio()) {\n this.addClass('vjs-audio');\n }\n\n if (this.flexNotSupported_()) {\n this.addClass('vjs-no-flex');\n }\n\n // TODO: Make this smarter. Toggle user state between touching/mousing\n // using events, since devices can have both touch and mouse events.\n // if (browser.TOUCH_ENABLED) {\n // this.addClass('vjs-touch-enabled');\n // }\n\n // iOS Safari has broken hover handling\n if (!browser.IS_IOS) {\n this.addClass('vjs-workinghover');\n }\n\n // Make player easily findable by ID\n Player.players[this.id_] = this;\n\n // When the player is first initialized, trigger activity so components\n // like the control bar show themselves if needed\n this.userActive(true);\n this.reportUserActivity();\n this.listenForUserActivity_();\n\n this.on('fullscreenchange', this.handleFullscreenChange_);\n this.on('stageclick', this.handleStageClick_);\n }\n\n /*\n * Global player list\n *\n * @type {Object}\n */\n\n /**\n * Destroys the video player and does any necessary cleanup\n * ```js\n * myPlayer.dispose();\n * ```\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n *\n * @method dispose\n */\n\n Player.prototype.dispose = function dispose() {\n this.trigger('dispose');\n // prevent dispose from being called twice\n this.off('dispose');\n\n if (this.styleEl_ && this.styleEl_.parentNode) {\n this.styleEl_.parentNode.removeChild(this.styleEl_);\n }\n\n // Kill reference to this player\n Player.players[this.id_] = null;\n if (this.tag && this.tag.player) {\n this.tag.player = null;\n }\n if (this.el_ && this.el_.player) {\n this.el_.player = null;\n }\n\n if (this.tech_) {\n this.tech_.dispose();\n }\n\n _Component.prototype.dispose.call(this);\n };\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n Player.prototype.createEl = function createEl() {\n var el = this.el_ = _Component.prototype.createEl.call(this, 'div');\n var tag = this.tag;\n\n // Remove width/height attrs from tag so CSS can make it 100% width/height\n tag.removeAttribute('width');\n tag.removeAttribute('height');\n\n // Copy over all the attributes from the tag, including ID and class\n // ID will now reference player box, not the video tag\n var attrs = Dom.getElAttributes(tag);\n\n Object.getOwnPropertyNames(attrs).forEach(function (attr) {\n // workaround so we don't totally break IE7\n // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n if (attr === 'class') {\n el.className = attrs[attr];\n } else {\n el.setAttribute(attr, attrs[attr]);\n }\n });\n\n // Update tag id/class for use as HTML5 playback tech\n // Might think we should do this after embedding in container so .vjs-tech class\n // doesn't flash 100% width/height, but class only applies with .video-js parent\n tag.playerId = tag.id;\n tag.id += '_html5_api';\n tag.className = 'vjs-tech';\n\n // Make player findable on elements\n tag.player = el.player = this;\n // Default state of video is paused\n this.addClass('vjs-paused');\n\n // Add a style element in the player that we'll use to set the width/height\n // of the player in a way that's still overrideable by CSS, just like the\n // video element\n if (_globalWindow2['default'].VIDEOJS_NO_DYNAMIC_STYLE !== true) {\n this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n var defaultsStyleEl = Dom.$('.vjs-styles-defaults');\n var head = Dom.$('head');\n head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n }\n\n // Pass in the width/height/aspectRatio options which will update the style el\n this.width(this.options_.width);\n this.height(this.options_.height);\n this.fluid(this.options_.fluid);\n this.aspectRatio(this.options_.aspectRatio);\n\n // Hide any links within the video/audio tag, because IE doesn't hide them completely.\n var links = tag.getElementsByTagName('a');\n for (var i = 0; i < links.length; i++) {\n var linkEl = links.item(i);\n Dom.addElClass(linkEl, 'vjs-hidden');\n linkEl.setAttribute('hidden', 'hidden');\n }\n\n // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n // keep track of the original for later so we can know if the source originally failed\n tag.initNetworkState_ = tag.networkState;\n\n // Wrap video tag in div (el/box) container\n if (tag.parentNode) {\n tag.parentNode.insertBefore(el, tag);\n }\n\n // insert the tag as the first child of the player element\n // then manually add it to the children array so that this.addChild\n // will work properly for other components\n Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n this.children_.unshift(tag);\n\n this.el_ = el;\n\n return el;\n };\n\n /**\n * Get/set player width\n *\n * @param {Number=} value Value for width\n * @return {Number} Width when getting\n * @method width\n */\n\n Player.prototype.width = function width(value) {\n return this.dimension('width', value);\n };\n\n /**\n * Get/set player height\n *\n * @param {Number=} value Value for height\n * @return {Number} Height when getting\n * @method height\n */\n\n Player.prototype.height = function height(value) {\n return this.dimension('height', value);\n };\n\n /**\n * Get/set dimension for player\n *\n * @param {String} dimension Either width or height\n * @param {Number=} value Value for dimension\n * @return {Component}\n * @method dimension\n */\n\n Player.prototype.dimension = function dimension(_dimension, value) {\n var privDimension = _dimension + '_';\n\n if (value === undefined) {\n return this[privDimension] || 0;\n }\n\n if (value === '') {\n // If an empty string is given, reset the dimension to be automatic\n this[privDimension] = undefined;\n } else {\n var parsedVal = parseFloat(value);\n\n if (isNaN(parsedVal)) {\n _utilsLogJs2['default'].error('Improper value \"' + value + '\" supplied for for ' + _dimension);\n return this;\n }\n\n this[privDimension] = parsedVal;\n }\n\n this.updateStyleEl_();\n return this;\n };\n\n /**\n * Add/remove the vjs-fluid class\n *\n * @param {Boolean} bool Value of true adds the class, value of false removes the class\n * @method fluid\n */\n\n Player.prototype.fluid = function fluid(bool) {\n if (bool === undefined) {\n return !!this.fluid_;\n }\n\n this.fluid_ = !!bool;\n\n if (bool) {\n this.addClass('vjs-fluid');\n } else {\n this.removeClass('vjs-fluid');\n }\n };\n\n /**\n * Get/Set the aspect ratio\n *\n * @param {String=} ratio Aspect ratio for player\n * @return aspectRatio\n * @method aspectRatio\n */\n\n Player.prototype.aspectRatio = function aspectRatio(ratio) {\n if (ratio === undefined) {\n return this.aspectRatio_;\n }\n\n // Check for width:height format\n if (!/^\\d+\\:\\d+$/.test(ratio)) {\n throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n }\n this.aspectRatio_ = ratio;\n\n // We're assuming if you set an aspect ratio you want fluid mode,\n // because in fixed mode you could calculate width and height yourself.\n this.fluid(true);\n\n this.updateStyleEl_();\n };\n\n /**\n * Update styles of the player element (height, width and aspect ratio)\n *\n * @method updateStyleEl_\n */\n\n Player.prototype.updateStyleEl_ = function updateStyleEl_() {\n if (_globalWindow2['default'].VIDEOJS_NO_DYNAMIC_STYLE === true) {\n var _width = typeof this.width_ === 'number' ? this.width_ : this.options_.width;\n var _height = typeof this.height_ === 'number' ? this.height_ : this.options_.height;\n var techEl = this.tech_ && this.tech_.el();\n\n if (techEl) {\n if (_width >= 0) {\n techEl.width = _width;\n }\n if (_height >= 0) {\n techEl.height = _height;\n }\n }\n\n return;\n }\n\n var width = undefined;\n var height = undefined;\n var aspectRatio = undefined;\n var idClass = undefined;\n\n // The aspect ratio is either used directly or to calculate width and height.\n if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n // Use any aspectRatio that's been specifically set\n aspectRatio = this.aspectRatio_;\n } else if (this.videoWidth()) {\n // Otherwise try to get the aspect ratio from the video metadata\n aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n } else {\n // Or use a default. The video element's is 2:1, but 16:9 is more common.\n aspectRatio = '16:9';\n }\n\n // Get the ratio as a decimal we can use to calculate dimensions\n var ratioParts = aspectRatio.split(':');\n var ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n if (this.width_ !== undefined) {\n // Use any width that's been specifically set\n width = this.width_;\n } else if (this.height_ !== undefined) {\n // Or calulate the width from the aspect ratio if a height has been set\n width = this.height_ / ratioMultiplier;\n } else {\n // Or use the video's metadata, or use the video el's default of 300\n width = this.videoWidth() || 300;\n }\n\n if (this.height_ !== undefined) {\n // Use any height that's been specifically set\n height = this.height_;\n } else {\n // Otherwise calculate the height from the ratio and the width\n height = width * ratioMultiplier;\n }\n\n // Ensure the CSS class is valid by starting with an alpha character\n if (/^[^a-zA-Z]/.test(this.id())) {\n idClass = 'dimensions-' + this.id();\n } else {\n idClass = this.id() + '-dimensions';\n }\n\n // Ensure the right class is still on the player for the style element\n this.addClass(idClass);\n\n stylesheet.setTextContent(this.styleEl_, '\\n .' + idClass + ' {\\n width: ' + width + 'px;\\n height: ' + height + 'px;\\n }\\n\\n .' + idClass + '.vjs-fluid {\\n padding-top: ' + ratioMultiplier * 100 + '%;\\n }\\n ');\n };\n\n /**\n * Load the Media Playback Technology (tech)\n * Load/Create an instance of playback technology including element and API methods\n * And append playback element in player div.\n *\n * @param {String} techName Name of the playback technology\n * @param {String} source Video source\n * @method loadTech_\n * @private\n */\n\n Player.prototype.loadTech_ = function loadTech_(techName, source) {\n\n // Pause and remove current playback technology\n if (this.tech_) {\n this.unloadTech_();\n }\n\n // get rid of the HTML5 video tag as soon as we are using another tech\n if (techName !== 'Html5' && this.tag) {\n _techTechJs2['default'].getTech('Html5').disposeMediaElement(this.tag);\n this.tag.player = null;\n this.tag = null;\n }\n\n this.techName_ = techName;\n\n // Turn off API access because we're loading a new tech that might load asynchronously\n this.isReady_ = false;\n\n // Grab tech-specific options from player options and add source and parent element to use.\n var techOptions = _objectAssign2['default']({\n 'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n 'source': source,\n 'playerId': this.id(),\n 'techId': this.id() + '_' + techName + '_api',\n 'videoTracks': this.videoTracks_,\n 'textTracks': this.textTracks_,\n 'audioTracks': this.audioTracks_,\n 'autoplay': this.options_.autoplay,\n 'controls': this.options_.controls,\n 'preload': this.options_.preload,\n 'loop': this.options_.loop,\n 'muted': this.options_.muted,\n 'poster': this.poster(),\n 'language': this.language(),\n 'vtt.js': this.options_['vtt.js']\n }, this.options_[techName.toLowerCase()]);\n\n if (this.tag) {\n techOptions.tag = this.tag;\n }\n\n if (source) {\n this.currentType_ = source.type;\n if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n techOptions.startTime = this.cache_.currentTime;\n }\n\n this.cache_.src = source.src;\n }\n\n // Initialize tech instance\n var techComponent = _techTechJs2['default'].getTech(techName);\n // Support old behavior of techs being registered as components.\n // Remove once that deprecated behavior is removed.\n if (!techComponent) {\n techComponent = _componentJs2['default'].getComponent(techName);\n }\n this.tech_ = new techComponent(techOptions);\n\n // player.triggerReady is always async, so don't need this to be async\n this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);\n\n _tracksTextTrackListConverterJs2['default'].jsonToTextTracks(this.textTracksJson_ || [], this.tech_);\n\n // Listen to all HTML5-defined events and trigger them on the player\n this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);\n this.on(this.tech_, 'waiting', this.handleTechWaiting_);\n this.on(this.tech_, 'canplay', this.handleTechCanPlay_);\n this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);\n this.on(this.tech_, 'playing', this.handleTechPlaying_);\n this.on(this.tech_, 'ended', this.handleTechEnded_);\n this.on(this.tech_, 'seeking', this.handleTechSeeking_);\n this.on(this.tech_, 'seeked', this.handleTechSeeked_);\n this.on(this.tech_, 'play', this.handleTechPlay_);\n this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);\n this.on(this.tech_, 'pause', this.handleTechPause_);\n this.on(this.tech_, 'progress', this.handleTechProgress_);\n this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);\n this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);\n this.on(this.tech_, 'error', this.handleTechError_);\n this.on(this.tech_, 'suspend', this.handleTechSuspend_);\n this.on(this.tech_, 'abort', this.handleTechAbort_);\n this.on(this.tech_, 'emptied', this.handleTechEmptied_);\n this.on(this.tech_, 'stalled', this.handleTechStalled_);\n this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);\n this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);\n this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);\n this.on(this.tech_, 'ratechange', this.handleTechRateChange_);\n this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);\n this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);\n this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);\n this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);\n\n // Add the tech element in the DOM if it was not already there\n // Make sure to not insert the original video element if using Html5\n if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n Dom.insertElFirst(this.tech_.el(), this.el());\n }\n\n // Get rid of the original video tag reference after the first tech is loaded\n if (this.tag) {\n this.tag.player = null;\n this.tag = null;\n }\n };\n\n /**\n * Unload playback technology\n *\n * @method unloadTech_\n * @private\n */\n\n Player.prototype.unloadTech_ = function unloadTech_() {\n // Save the current text tracks so that we can reuse the same text tracks with the next tech\n this.videoTracks_ = this.videoTracks();\n this.textTracks_ = this.textTracks();\n this.audioTracks_ = this.audioTracks();\n this.textTracksJson_ = _tracksTextTrackListConverterJs2['default'].textTracksToJson(this.tech_);\n\n this.isReady_ = false;\n\n this.tech_.dispose();\n\n this.tech_ = false;\n };\n\n /**\n * Return a reference to the current tech.\n * It will only return a reference to the tech if given an object with the\n * `IWillNotUseThisInPlugins` property on it. This is try and prevent misuse\n * of techs by plugins.\n *\n * @param {Object}\n * @return {Object} The Tech\n * @method tech\n */\n\n Player.prototype.tech = function tech(safety) {\n if (safety && safety.IWillNotUseThisInPlugins) {\n return this.tech_;\n }\n var errorText = '\\n Please make sure that you are not using this inside of a plugin.\\n To disable this alert and error, please pass in an object with\\n `IWillNotUseThisInPlugins` to the `tech` method. See\\n https://github.com/videojs/video.js/issues/2617 for more info.\\n ';\n _globalWindow2['default'].alert(errorText);\n throw new Error(errorText);\n };\n\n /**\n * Set up click and touch listeners for the playback element\n *\n * On desktops, a click on the video itself will toggle playback,\n * on a mobile device a click on the video toggles controls.\n * (toggling controls is done by toggling the user state between active and\n * inactive)\n * A tap can signal that a user has become active, or has become inactive\n * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n * quick tap should hide them again (signaling the user is in an inactive\n * viewing state)\n * In addition to this, we still want the user to be considered inactive after\n * a few seconds of inactivity.\n * Note: the only part of iOS interaction we can't mimic with this setup\n * is a touch and hold on the video element counting as activity in order to\n * keep the controls showing, but that shouldn't be an issue. A touch and hold\n * on any controls will still keep the user active\n *\n * @private\n * @method addTechControlsListeners_\n */\n\n Player.prototype.addTechControlsListeners_ = function addTechControlsListeners_() {\n // Make sure to remove all the previous listeners in case we are called multiple times.\n this.removeTechControlsListeners_();\n\n // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n // trigger mousedown/up.\n // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n // Any touch events are set to block the mousedown event from happening\n this.on(this.tech_, 'mousedown', this.handleTechClick_);\n\n // If the controls were hidden we don't want that to change without a tap event\n // so we'll check if the controls were already showing before reporting user\n // activity\n this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);\n this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);\n this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);\n\n // The tap listener needs to come after the touchend listener because the tap\n // listener cancels out any reportedUserActivity when setting userActive(false)\n this.on(this.tech_, 'tap', this.handleTechTap_);\n };\n\n /**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n *\n * @method removeTechControlsListeners_\n * @private\n */\n\n Player.prototype.removeTechControlsListeners_ = function removeTechControlsListeners_() {\n // We don't want to just use `this.off()` because there might be other needed\n // listeners added by techs that extend this.\n this.off(this.tech_, 'tap', this.handleTechTap_);\n this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);\n this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);\n this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);\n this.off(this.tech_, 'mousedown', this.handleTechClick_);\n };\n\n /**\n * Player waits for the tech to be ready\n *\n * @method handleTechReady_\n * @private\n */\n\n Player.prototype.handleTechReady_ = function handleTechReady_() {\n this.usingNativeControls(this.techGet_('controls'));\n\n if (this.controls() && !this.usingNativeControls()) {\n this.addTechControlsListeners_();\n }\n\n this.triggerReady();\n\n // Keep the same volume as before\n if (this.cache_.volume) {\n this.techCall_('setVolume', this.cache_.volume);\n }\n\n // Look if the tech found a higher resolution poster while loading\n this.handleTechPosterChange_();\n\n // Update the duration if available\n this.handleTechDurationChange_();\n\n // Chrome and Safari both have issues with autoplay.\n // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n // This fixes both issues. Need to wait for API, so it updates displays correctly\n if (this.src() && this.tag && this.options_.autoplay && this.paused()) {\n delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n this.play();\n }\n };\n\n /**\n * Fired when the user agent begins looking for media data\n *\n * @private\n * @method handleTechLoadStart_\n */\n\n Player.prototype.handleTechLoadStart_ = function handleTechLoadStart_() {\n // TODO: Update to use `emptied` event instead. See #1277.\n\n this.removeClass('vjs-ended');\n this.removeClass('vjs-seeking');\n\n // reset the error state\n this.error(null);\n\n // If it's already playing we want to trigger a firstplay event now.\n // The firstplay event relies on both the play and loadstart events\n // which can happen in any order for a new source\n if (!this.paused()) {\n this.trigger('loadstart');\n this.trigger('firstplay');\n } else {\n // reset the hasStarted state\n this.hasStarted(false);\n this.trigger('loadstart');\n }\n };\n\n /**\n * Add/remove the vjs-has-started class\n *\n * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n * @return {Boolean} Boolean value if has started\n * @private\n * @method hasStarted\n */\n\n Player.prototype.hasStarted = function hasStarted(_hasStarted) {\n if (_hasStarted !== undefined) {\n // only update if this is a new value\n if (this.hasStarted_ !== _hasStarted) {\n this.hasStarted_ = _hasStarted;\n if (_hasStarted) {\n this.addClass('vjs-has-started');\n // trigger the firstplay event if this newly has played\n this.trigger('firstplay');\n } else {\n this.removeClass('vjs-has-started');\n }\n }\n return this;\n }\n return !!this.hasStarted_;\n };\n\n /**\n * Fired whenever the media begins or resumes playback\n *\n * @private\n * @method handleTechPlay_\n */\n\n Player.prototype.handleTechPlay_ = function handleTechPlay_() {\n this.removeClass('vjs-ended');\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n\n // hide the poster when the user hits play\n // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n this.hasStarted(true);\n\n this.trigger('play');\n };\n\n /**\n * Fired whenever the media begins waiting\n *\n * @private\n * @method handleTechWaiting_\n */\n\n Player.prototype.handleTechWaiting_ = function handleTechWaiting_() {\n var _this2 = this;\n\n this.addClass('vjs-waiting');\n this.trigger('waiting');\n this.one('timeupdate', function () {\n return _this2.removeClass('vjs-waiting');\n });\n };\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechCanPlay_\n */\n\n Player.prototype.handleTechCanPlay_ = function handleTechCanPlay_() {\n this.removeClass('vjs-waiting');\n this.trigger('canplay');\n };\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechCanPlayThrough_\n */\n\n Player.prototype.handleTechCanPlayThrough_ = function handleTechCanPlayThrough_() {\n this.removeClass('vjs-waiting');\n this.trigger('canplaythrough');\n };\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechPlaying_\n */\n\n Player.prototype.handleTechPlaying_ = function handleTechPlaying_() {\n this.removeClass('vjs-waiting');\n this.trigger('playing');\n };\n\n /**\n * Fired whenever the player is jumping to a new time\n *\n * @private\n * @method handleTechSeeking_\n */\n\n Player.prototype.handleTechSeeking_ = function handleTechSeeking_() {\n this.addClass('vjs-seeking');\n this.trigger('seeking');\n };\n\n /**\n * Fired when the player has finished jumping to a new time\n *\n * @private\n * @method handleTechSeeked_\n */\n\n Player.prototype.handleTechSeeked_ = function handleTechSeeked_() {\n this.removeClass('vjs-seeking');\n this.trigger('seeked');\n };\n\n /**\n * Fired the first time a video is played\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @private\n * @method handleTechFirstPlay_\n */\n\n Player.prototype.handleTechFirstPlay_ = function handleTechFirstPlay_() {\n //If the first starttime attribute is specified\n //then we will start at the given offset in seconds\n if (this.options_.starttime) {\n this.currentTime(this.options_.starttime);\n }\n\n this.addClass('vjs-has-started');\n this.trigger('firstplay');\n };\n\n /**\n * Fired whenever the media has been paused\n *\n * @private\n * @method handleTechPause_\n */\n\n Player.prototype.handleTechPause_ = function handleTechPause_() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.trigger('pause');\n };\n\n /**\n * Fired while the user agent is downloading media data\n *\n * @private\n * @method handleTechProgress_\n */\n\n Player.prototype.handleTechProgress_ = function handleTechProgress_() {\n this.trigger('progress');\n };\n\n /**\n * Fired when the end of the media resource is reached (currentTime == duration)\n *\n * @private\n * @method handleTechEnded_\n */\n\n Player.prototype.handleTechEnded_ = function handleTechEnded_() {\n this.addClass('vjs-ended');\n if (this.options_.loop) {\n this.currentTime(0);\n this.play();\n } else if (!this.paused()) {\n this.pause();\n }\n\n this.trigger('ended');\n };\n\n /**\n * Fired when the duration of the media resource is first known or changed\n *\n * @private\n * @method handleTechDurationChange_\n */\n\n Player.prototype.handleTechDurationChange_ = function handleTechDurationChange_() {\n this.duration(this.techGet_('duration'));\n };\n\n /**\n * Handle a click on the media element to play/pause\n *\n * @param {Object=} event Event object\n * @private\n * @method handleTechClick_\n */\n\n Player.prototype.handleTechClick_ = function handleTechClick_(event) {\n // We're using mousedown to detect clicks thanks to Flash, but mousedown\n // will also be triggered with right-clicks, so we need to prevent that\n if (event.button !== 0) return;\n\n // When controls are disabled a click should not toggle playback because\n // the click is considered a control\n if (this.controls()) {\n if (this.paused()) {\n this.play();\n } else {\n this.pause();\n }\n }\n };\n\n /**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n *\n * @private\n * @method handleTechTap_\n */\n\n Player.prototype.handleTechTap_ = function handleTechTap_() {\n this.userActive(!this.userActive());\n };\n\n /**\n * Handle touch to start\n *\n * @private\n * @method handleTechTouchStart_\n */\n\n Player.prototype.handleTechTouchStart_ = function handleTechTouchStart_() {\n this.userWasActive = this.userActive();\n };\n\n /**\n * Handle touch to move\n *\n * @private\n * @method handleTechTouchMove_\n */\n\n Player.prototype.handleTechTouchMove_ = function handleTechTouchMove_() {\n if (this.userWasActive) {\n this.reportUserActivity();\n }\n };\n\n /**\n * Handle touch to end\n *\n * @private\n * @method handleTechTouchEnd_\n */\n\n Player.prototype.handleTechTouchEnd_ = function handleTechTouchEnd_(event) {\n // Stop the mouse events from also happening\n event.preventDefault();\n };\n\n /**\n * Fired when the player switches in or out of fullscreen mode\n *\n * @private\n * @method handleFullscreenChange_\n */\n\n Player.prototype.handleFullscreenChange_ = function handleFullscreenChange_() {\n if (this.isFullscreen()) {\n this.addClass('vjs-fullscreen');\n } else {\n this.removeClass('vjs-fullscreen');\n }\n };\n\n /**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n *\n * @private\n * @method handleStageClick_\n */\n\n Player.prototype.handleStageClick_ = function handleStageClick_() {\n this.reportUserActivity();\n };\n\n /**\n * Handle Tech Fullscreen Change\n *\n * @private\n * @method handleTechFullscreenChange_\n */\n\n Player.prototype.handleTechFullscreenChange_ = function handleTechFullscreenChange_(event, data) {\n if (data) {\n this.isFullscreen(data.isFullscreen);\n }\n this.trigger('fullscreenchange');\n };\n\n /**\n * Fires when an error occurred during the loading of an audio/video\n *\n * @private\n * @method handleTechError_\n */\n\n Player.prototype.handleTechError_ = function handleTechError_() {\n var error = this.tech_.error();\n this.error(error && error.code);\n };\n\n /**\n * Fires when the browser is intentionally not getting media data\n *\n * @private\n * @method handleTechSuspend_\n */\n\n Player.prototype.handleTechSuspend_ = function handleTechSuspend_() {\n this.trigger('suspend');\n };\n\n /**\n * Fires when the loading of an audio/video is aborted\n *\n * @private\n * @method handleTechAbort_\n */\n\n Player.prototype.handleTechAbort_ = function handleTechAbort_() {\n this.trigger('abort');\n };\n\n /**\n * Fires when the current playlist is empty\n *\n * @private\n * @method handleTechEmptied_\n */\n\n Player.prototype.handleTechEmptied_ = function handleTechEmptied_() {\n this.trigger('emptied');\n };\n\n /**\n * Fires when the browser is trying to get media data, but data is not available\n *\n * @private\n * @method handleTechStalled_\n */\n\n Player.prototype.handleTechStalled_ = function handleTechStalled_() {\n this.trigger('stalled');\n };\n\n /**\n * Fires when the browser has loaded meta data for the audio/video\n *\n * @private\n * @method handleTechLoadedMetaData_\n */\n\n Player.prototype.handleTechLoadedMetaData_ = function handleTechLoadedMetaData_() {\n this.trigger('loadedmetadata');\n };\n\n /**\n * Fires when the browser has loaded the current frame of the audio/video\n *\n * @private\n * @method handleTechLoadedData_\n */\n\n Player.prototype.handleTechLoadedData_ = function handleTechLoadedData_() {\n this.trigger('loadeddata');\n };\n\n /**\n * Fires when the current playback position has changed\n *\n * @private\n * @method handleTechTimeUpdate_\n */\n\n Player.prototype.handleTechTimeUpdate_ = function handleTechTimeUpdate_() {\n this.trigger('timeupdate');\n };\n\n /**\n * Fires when the playing speed of the audio/video is changed\n *\n * @private\n * @method handleTechRateChange_\n */\n\n Player.prototype.handleTechRateChange_ = function handleTechRateChange_() {\n this.trigger('ratechange');\n };\n\n /**\n * Fires when the volume has been changed\n *\n * @private\n * @method handleTechVolumeChange_\n */\n\n Player.prototype.handleTechVolumeChange_ = function handleTechVolumeChange_() {\n this.trigger('volumechange');\n };\n\n /**\n * Fires when the text track has been changed\n *\n * @private\n * @method handleTechTextTrackChange_\n */\n\n Player.prototype.handleTechTextTrackChange_ = function handleTechTextTrackChange_() {\n this.trigger('texttrackchange');\n };\n\n /**\n * Get object for cached values.\n *\n * @return {Object}\n * @method getCache\n */\n\n Player.prototype.getCache = function getCache() {\n return this.cache_;\n };\n\n /**\n * Pass values to the playback tech\n *\n * @param {String=} method Method\n * @param {Object=} arg Argument\n * @private\n * @method techCall_\n */\n\n Player.prototype.techCall_ = function techCall_(method, arg) {\n // If it's not ready yet, call method when it is\n if (this.tech_ && !this.tech_.isReady_) {\n this.tech_.ready(function () {\n this[method](arg);\n }, true);\n\n // Otherwise call method now\n } else {\n try {\n if (this.tech_) {\n this.tech_[method](arg);\n }\n } catch (e) {\n _utilsLogJs2['default'](e);\n throw e;\n }\n }\n };\n\n /**\n * Get calls can't wait for the tech, and sometimes don't need to.\n *\n * @param {String} method Tech method\n * @return {Method}\n * @private\n * @method techGet_\n */\n\n Player.prototype.techGet_ = function techGet_(method) {\n if (this.tech_ && this.tech_.isReady_) {\n\n // Flash likes to die and reload when you hide or reposition it.\n // In these cases the object methods go away and we get errors.\n // When that happens we'll catch the errors and inform tech that it's not ready any more.\n try {\n return this.tech_[method]();\n } catch (e) {\n // When building additional tech libs, an expected method may not be defined yet\n if (this.tech_[method] === undefined) {\n _utilsLogJs2['default']('Video.js: ' + method + ' method not defined for ' + this.techName_ + ' playback technology.', e);\n } else {\n // When a method isn't available on the object it throws a TypeError\n if (e.name === 'TypeError') {\n _utilsLogJs2['default']('Video.js: ' + method + ' unavailable on ' + this.techName_ + ' playback technology element.', e);\n this.tech_.isReady_ = false;\n } else {\n _utilsLogJs2['default'](e);\n }\n }\n throw e;\n }\n }\n\n return;\n };\n\n /**\n * start media playback\n * ```js\n * myPlayer.play();\n * ```\n *\n * @return {Player} self\n * @method play\n */\n\n Player.prototype.play = function play() {\n this.techCall_('play');\n return this;\n };\n\n /**\n * Pause the video playback\n * ```js\n * myPlayer.pause();\n * ```\n *\n * @return {Player} self\n * @method pause\n */\n\n Player.prototype.pause = function pause() {\n this.techCall_('pause');\n return this;\n };\n\n /**\n * Check if the player is paused\n * ```js\n * var isPaused = myPlayer.paused();\n * var isPlaying = !myPlayer.paused();\n * ```\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n * @method paused\n */\n\n Player.prototype.paused = function paused() {\n // The initial state of paused should be true (in Safari it's actually false)\n return this.techGet_('paused') === false ? false : true;\n };\n\n /**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n * has clicked the progress bar handle and is dragging it along the progress bar.\n *\n * @param {Boolean} isScrubbing True/false the user is scrubbing\n * @return {Boolean} The scrubbing status when getting\n * @return {Object} The player when setting\n * @method scrubbing\n */\n\n Player.prototype.scrubbing = function scrubbing(isScrubbing) {\n if (isScrubbing !== undefined) {\n this.scrubbing_ = !!isScrubbing;\n\n if (isScrubbing) {\n this.addClass('vjs-scrubbing');\n } else {\n this.removeClass('vjs-scrubbing');\n }\n\n return this;\n }\n\n return this.scrubbing_;\n };\n\n /**\n * Get or set the current time (in seconds)\n * ```js\n * // get\n * var whereYouAt = myPlayer.currentTime();\n * // set\n * myPlayer.currentTime(120); // 2 minutes into the video\n * ```\n *\n * @param {Number|String=} seconds The time to seek to\n * @return {Number} The time in seconds, when not setting\n * @return {Player} self, when the current time is set\n * @method currentTime\n */\n\n Player.prototype.currentTime = function currentTime(seconds) {\n if (seconds !== undefined) {\n\n this.techCall_('setCurrentTime', seconds);\n\n return this;\n }\n\n // cache last currentTime and return. default to 0 seconds\n //\n // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n // currentTime when scrubbing, but may not provide much performance benefit afterall.\n // Should be tested. Also something has to read the actual current time or the cache will\n // never get updated.\n return this.cache_.currentTime = this.techGet_('currentTime') || 0;\n };\n\n /**\n * Get the length in time of the video in seconds\n * ```js\n * var lengthOfVideo = myPlayer.duration();\n * ```\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @param {Number} seconds Duration when setting\n * @return {Number} The duration of the video in seconds when getting\n * @method duration\n */\n\n Player.prototype.duration = function duration(seconds) {\n if (seconds === undefined) {\n return this.cache_.duration || 0;\n }\n\n seconds = parseFloat(seconds) || 0;\n\n // Standardize on Inifity for signaling video is live\n if (seconds < 0) {\n seconds = Infinity;\n }\n\n if (seconds !== this.cache_.duration) {\n // Cache the last set value for optimized scrubbing (esp. Flash)\n this.cache_.duration = seconds;\n\n if (seconds === Infinity) {\n this.addClass('vjs-live');\n } else {\n this.removeClass('vjs-live');\n }\n\n this.trigger('durationchange');\n }\n\n return this;\n };\n\n /**\n * Calculates how much time is left.\n * ```js\n * var timeLeft = myPlayer.remainingTime();\n * ```\n * Not a native video element function, but useful\n *\n * @return {Number} The time remaining in seconds\n * @method remainingTime\n */\n\n Player.prototype.remainingTime = function remainingTime() {\n return this.duration() - this.currentTime();\n };\n\n // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n // Buffered returns a timerange object.\n // Kind of like an array of portions of the video that have been downloaded.\n\n /**\n * Get a TimeRange object with the times of the video that have been downloaded\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n * ```js\n * // Number of different ranges of time have been buffered. Usually 1.\n * numberOfRanges = bufferedTimeRange.length,\n * // Time in seconds when the first range starts. Usually 0.\n * firstRangeStart = bufferedTimeRange.start(0),\n * // Time in seconds when the first range ends\n * firstRangeEnd = bufferedTimeRange.end(0),\n * // Length in seconds of the first time range\n * firstRangeLength = firstRangeEnd - firstRangeStart;\n * ```\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n * @method buffered\n */\n\n Player.prototype.buffered = function buffered() {\n var buffered = this.techGet_('buffered');\n\n if (!buffered || !buffered.length) {\n buffered = _utilsTimeRangesJs.createTimeRange(0, 0);\n }\n\n return buffered;\n };\n\n /**\n * Get the percent (as a decimal) of the video that's been downloaded\n * ```js\n * var howMuchIsDownloaded = myPlayer.bufferedPercent();\n * ```\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n * @method bufferedPercent\n */\n\n Player.prototype.bufferedPercent = function bufferedPercent() {\n return _utilsBufferJs.bufferedPercent(this.buffered(), this.duration());\n };\n\n /**\n * Get the ending time of the last buffered time range\n * This is used in the progress bar to encapsulate all time ranges.\n *\n * @return {Number} The end of the last buffered time range\n * @method bufferedEnd\n */\n\n Player.prototype.bufferedEnd = function bufferedEnd() {\n var buffered = this.buffered(),\n duration = this.duration(),\n end = buffered.end(buffered.length - 1);\n\n if (end > duration) {\n end = duration;\n }\n\n return end;\n };\n\n /**\n * Get or set the current volume of the media\n * ```js\n * // get\n * var howLoudIsIt = myPlayer.volume();\n * // set\n * myPlayer.volume(0.5); // Set volume to half\n * ```\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number} The current volume when getting\n * @return {Player} self when setting\n * @method volume\n */\n\n Player.prototype.volume = function volume(percentAsDecimal) {\n var vol = undefined;\n\n if (percentAsDecimal !== undefined) {\n vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n this.cache_.volume = vol;\n this.techCall_('setVolume', vol);\n\n return this;\n }\n\n // Default to 1 when returning current volume.\n vol = parseFloat(this.techGet_('volume'));\n return isNaN(vol) ? 1 : vol;\n };\n\n /**\n * Get the current muted state, or turn mute on or off\n * ```js\n * // get\n * var isVolumeMuted = myPlayer.muted();\n * // set\n * myPlayer.muted(true); // mute the volume\n * ```\n *\n * @param {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not when getting\n * @return {Player} self when setting mute\n * @method muted\n */\n\n Player.prototype.muted = function muted(_muted) {\n if (_muted !== undefined) {\n this.techCall_('setMuted', _muted);\n return this;\n }\n return this.techGet_('muted') || false; // Default to false\n };\n\n // Check if current tech can support native fullscreen\n // (e.g. with built in controls like iOS, so not our flash swf)\n /**\n * Check to see if fullscreen is supported\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n\n Player.prototype.supportsFullScreen = function supportsFullScreen() {\n return this.techGet_('supportsFullScreen') || false;\n };\n\n /**\n * Check if the player is in fullscreen mode\n * ```js\n * // get\n * var fullscreenOrNot = myPlayer.isFullscreen();\n * // set\n * myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n * ```\n * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {Boolean=} isFS Update the player's fullscreen state\n * @return {Boolean} true if fullscreen false if not when getting\n * @return {Player} self when setting\n * @method isFullscreen\n */\n\n Player.prototype.isFullscreen = function isFullscreen(isFS) {\n if (isFS !== undefined) {\n this.isFullscreen_ = !!isFS;\n return this;\n }\n return !!this.isFullscreen_;\n };\n\n /**\n * Increase the size of the video to full screen\n * ```js\n * myPlayer.requestFullscreen();\n * ```\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {Player} self\n * @method requestFullscreen\n */\n\n Player.prototype.requestFullscreen = function requestFullscreen() {\n var fsApi = _fullscreenApiJs2['default'];\n\n this.isFullscreen(true);\n\n if (fsApi.requestFullscreen) {\n // the browser supports going fullscreen at the element level so we can\n // take the controls fullscreen as well as the video\n\n // Trigger fullscreenchange event after change\n // We have to specifically add this each time, and remove\n // when canceling fullscreen. Otherwise if there's multiple\n // players on a page, they would all be reacting to the same fullscreen\n // events\n Events.on(_globalDocument2['default'], fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e) {\n this.isFullscreen(_globalDocument2['default'][fsApi.fullscreenElement]);\n\n // If cancelling fullscreen, remove event listener.\n if (this.isFullscreen() === false) {\n Events.off(_globalDocument2['default'], fsApi.fullscreenchange, documentFullscreenChange);\n }\n\n this.trigger('fullscreenchange');\n }));\n\n this.el_[fsApi.requestFullscreen]();\n } else if (this.tech_.supportsFullScreen()) {\n // we can't take the video.js controls fullscreen but we can go fullscreen\n // with native controls\n this.techCall_('enterFullScreen');\n } else {\n // fullscreen isn't supported so we'll just stretch the video element to\n // fill the viewport\n this.enterFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n };\n\n /**\n * Return the video to its normal size after having been in full screen mode\n * ```js\n * myPlayer.exitFullscreen();\n * ```\n *\n * @return {Player} self\n * @method exitFullscreen\n */\n\n Player.prototype.exitFullscreen = function exitFullscreen() {\n var fsApi = _fullscreenApiJs2['default'];\n this.isFullscreen(false);\n\n // Check for browser element fullscreen support\n if (fsApi.requestFullscreen) {\n _globalDocument2['default'][fsApi.exitFullscreen]();\n } else if (this.tech_.supportsFullScreen()) {\n this.techCall_('exitFullScreen');\n } else {\n this.exitFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n };\n\n /**\n * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n *\n * @method enterFullWindow\n */\n\n Player.prototype.enterFullWindow = function enterFullWindow() {\n this.isFullWindow = true;\n\n // Storing original doc overflow value to return to when fullscreen is off\n this.docOrigOverflow = _globalDocument2['default'].documentElement.style.overflow;\n\n // Add listener for esc key to exit fullscreen\n Events.on(_globalDocument2['default'], 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n // Hide any scroll bars\n _globalDocument2['default'].documentElement.style.overflow = 'hidden';\n\n // Apply fullscreen styles\n Dom.addElClass(_globalDocument2['default'].body, 'vjs-full-window');\n\n this.trigger('enterFullWindow');\n };\n\n /**\n * Check for call to either exit full window or full screen on ESC key\n *\n * @param {String} event Event to check for key press\n * @method fullWindowOnEscKey\n */\n\n Player.prototype.fullWindowOnEscKey = function fullWindowOnEscKey(event) {\n if (event.keyCode === 27) {\n if (this.isFullscreen() === true) {\n this.exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n }\n };\n\n /**\n * Exit full window\n *\n * @method exitFullWindow\n */\n\n Player.prototype.exitFullWindow = function exitFullWindow() {\n this.isFullWindow = false;\n Events.off(_globalDocument2['default'], 'keydown', this.fullWindowOnEscKey);\n\n // Unhide scroll bars.\n _globalDocument2['default'].documentElement.style.overflow = this.docOrigOverflow;\n\n // Remove fullscreen styles\n Dom.removeElClass(_globalDocument2['default'].body, 'vjs-full-window');\n\n // Resize the box, controller, and poster to original sizes\n // this.positionAll();\n this.trigger('exitFullWindow');\n };\n\n /**\n * Check whether the player can play a given mimetype\n *\n * @param {String} type The mimetype to check\n * @return {String} 'probably', 'maybe', or '' (empty string)\n * @method canPlayType\n */\n\n Player.prototype.canPlayType = function canPlayType(type) {\n var can = undefined;\n\n // Loop through each playback technology in the options order\n for (var i = 0, j = this.options_.techOrder; i < j.length; i++) {\n var techName = _utilsToTitleCaseJs2['default'](j[i]);\n var tech = _techTechJs2['default'].getTech(techName);\n\n // Support old behavior of techs being registered as components.\n // Remove once that deprecated behavior is removed.\n if (!tech) {\n tech = _componentJs2['default'].getComponent(techName);\n }\n\n // Check if the current tech is defined before continuing\n if (!tech) {\n _utilsLogJs2['default'].error('The \"' + techName + '\" tech is undefined. Skipped browser support check for that tech.');\n continue;\n }\n\n // Check if the browser supports this technology\n if (tech.isSupported()) {\n can = tech.canPlayType(type);\n\n if (can) {\n return can;\n }\n }\n }\n\n return '';\n };\n\n /**\n * Select source based on tech-order or source-order\n * Uses source-order selection if `options.sourceOrder` is truthy. Otherwise,\n * defaults to tech-order selection\n *\n * @param {Array} sources The sources for a media asset\n * @return {Object|Boolean} Object of source and tech order, otherwise false\n * @method selectSource\n */\n\n Player.prototype.selectSource = function selectSource(sources) {\n // Get only the techs specified in `techOrder` that exist and are supported by the\n // current platform\n var techs = this.options_.techOrder.map(_utilsToTitleCaseJs2['default']).map(function (techName) {\n // `Component.getComponent(...)` is for support of old behavior of techs\n // being registered as components.\n // Remove once that deprecated behavior is removed.\n return [techName, _techTechJs2['default'].getTech(techName) || _componentJs2['default'].getComponent(techName)];\n }).filter(function (_ref) {\n var techName = _ref[0];\n var tech = _ref[1];\n\n // Check if the current tech is defined before continuing\n if (tech) {\n // Check if the browser supports this technology\n return tech.isSupported();\n }\n\n _utilsLogJs2['default'].error('The \"' + techName + '\" tech is undefined. Skipped browser support check for that tech.');\n return false;\n });\n\n // Iterate over each `innerArray` element once per `outerArray` element and execute\n // `tester` with both. If `tester` returns a non-falsy value, exit early and return\n // that value.\n var findFirstPassingTechSourcePair = function findFirstPassingTechSourcePair(outerArray, innerArray, tester) {\n var found = undefined;\n\n outerArray.some(function (outerChoice) {\n return innerArray.some(function (innerChoice) {\n found = tester(outerChoice, innerChoice);\n\n if (found) {\n return true;\n }\n });\n });\n\n return found;\n };\n\n var foundSourceAndTech = undefined;\n var flip = function flip(fn) {\n return function (a, b) {\n return fn(b, a);\n };\n };\n var finder = function finder(_ref2, source) {\n var techName = _ref2[0];\n var tech = _ref2[1];\n\n if (tech.canPlaySource(source)) {\n return { source: source, tech: techName };\n }\n };\n\n // Depending on the truthiness of `options.sourceOrder`, we swap the order of techs and sources\n // to select from them based on their priority.\n if (this.options_.sourceOrder) {\n // Source-first ordering\n foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder));\n } else {\n // Tech-first ordering\n foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder);\n }\n\n return foundSourceAndTech || false;\n };\n\n /**\n * The source function updates the video source\n * There are three types of variables you can pass as the argument.\n * **URL String**: A URL to the the video file. Use this method if you are sure\n * the current playback technology (HTML5/Flash) can support the source you\n * provide. Currently only MP4 files can be used in both HTML5 and Flash.\n * ```js\n * myPlayer.src(\"http://www.example.com/path/to/video.mp4\");\n * ```\n * **Source Object (or element):* * A javascript object containing information\n * about the source file. Use this method if you want the player to determine if\n * it can support the file using the type information.\n * ```js\n * myPlayer.src({ type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" });\n * ```\n * **Array of Source Objects:* * To provide multiple versions of the source so\n * that it can be played using HTML5 across browsers you can use an array of\n * source objects. Video.js will detect which version is supported and load that\n * file.\n * ```js\n * myPlayer.src([\n * { type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" },\n * { type: \"video/webm\", src: \"http://www.example.com/path/to/video.webm\" },\n * { type: \"video/ogg\", src: \"http://www.example.com/path/to/video.ogv\" }\n * ]);\n * ```\n *\n * @param {String|Object|Array=} source The source URL, object, or array of sources\n * @return {String} The current video source when getting\n * @return {String} The player when setting\n * @method src\n */\n\n Player.prototype.src = function src(source) {\n if (source === undefined) {\n return this.techGet_('src');\n }\n\n var currentTech = _techTechJs2['default'].getTech(this.techName_);\n // Support old behavior of techs being registered as components.\n // Remove once that deprecated behavior is removed.\n if (!currentTech) {\n currentTech = _componentJs2['default'].getComponent(this.techName_);\n }\n\n // case: Array of source objects to choose from and pick the best to play\n if (Array.isArray(source)) {\n this.sourceList_(source);\n\n // case: URL String (http://myvideo...)\n } else if (typeof source === 'string') {\n // create a source object from the string\n this.src({ src: source });\n\n // case: Source object { src: '', type: '' ... }\n } else if (source instanceof Object) {\n // check if the source has a type and the loaded tech cannot play the source\n // if there's no type we'll just try the current tech\n if (source.type && !currentTech.canPlaySource(source)) {\n // create a source list with the current source and send through\n // the tech loop to check for a compatible technology\n this.sourceList_([source]);\n } else {\n this.cache_.src = source.src;\n this.currentType_ = source.type || '';\n\n // wait until the tech is ready to set the source\n this.ready(function () {\n\n // The setSource tech method was added with source handlers\n // so older techs won't support it\n // We need to check the direct prototype for the case where subclasses\n // of the tech do not support source handlers\n if (currentTech.prototype.hasOwnProperty('setSource')) {\n this.techCall_('setSource', source);\n } else {\n this.techCall_('src', source.src);\n }\n\n if (this.options_.preload === 'auto') {\n this.load();\n }\n\n if (this.options_.autoplay) {\n this.play();\n }\n\n // Set the source synchronously if possible (#2326)\n }, true);\n }\n }\n\n return this;\n };\n\n /**\n * Handle an array of source objects\n *\n * @param {Array} sources Array of source objects\n * @private\n * @method sourceList_\n */\n\n Player.prototype.sourceList_ = function sourceList_(sources) {\n var sourceTech = this.selectSource(sources);\n\n if (sourceTech) {\n if (sourceTech.tech === this.techName_) {\n // if this technology is already loaded, set the source\n this.src(sourceTech.source);\n } else {\n // load this technology with the chosen source\n this.loadTech_(sourceTech.tech, sourceTech.source);\n }\n } else {\n // We need to wrap this in a timeout to give folks a chance to add error event handlers\n this.setTimeout(function () {\n this.error({ code: 4, message: this.localize(this.options_.notSupportedMessage) });\n }, 0);\n\n // we could not find an appropriate tech, but let's still notify the delegate that this is it\n // this needs a better comment about why this is needed\n this.triggerReady();\n }\n };\n\n /**\n * Begin loading the src data.\n *\n * @return {Player} Returns the player\n * @method load\n */\n\n Player.prototype.load = function load() {\n this.techCall_('load');\n return this;\n };\n\n /**\n * Reset the player. Loads the first tech in the techOrder,\n * and calls `reset` on the tech`.\n *\n * @return {Player} Returns the player\n * @method reset\n */\n\n Player.prototype.reset = function reset() {\n this.loadTech_(_utilsToTitleCaseJs2['default'](this.options_.techOrder[0]), null);\n this.techCall_('reset');\n return this;\n };\n\n /**\n * Returns the fully qualified URL of the current source value e.g. http://mysite.com/video.mp4\n * Can be used in conjuction with `currentType` to assist in rebuilding the current source object.\n *\n * @return {String} The current source\n * @method currentSrc\n */\n\n Player.prototype.currentSrc = function currentSrc() {\n return this.techGet_('currentSrc') || this.cache_.src || '';\n };\n\n /**\n * Get the current source type e.g. video/mp4\n * This can allow you rebuild the current source object so that you could load the same\n * source and tech later\n *\n * @return {String} The source MIME type\n * @method currentType\n */\n\n Player.prototype.currentType = function currentType() {\n return this.currentType_ || '';\n };\n\n /**\n * Get or set the preload attribute\n *\n * @param {Boolean} value Boolean to determine if preload should be used\n * @return {String} The preload attribute value when getting\n * @return {Player} Returns the player when setting\n * @method preload\n */\n\n Player.prototype.preload = function preload(value) {\n if (value !== undefined) {\n this.techCall_('setPreload', value);\n this.options_.preload = value;\n return this;\n }\n return this.techGet_('preload');\n };\n\n /**\n * Get or set the autoplay attribute.\n *\n * @param {Boolean} value Boolean to determine if video should autoplay\n * @return {String} The autoplay attribute value when getting\n * @return {Player} Returns the player when setting\n * @method autoplay\n */\n\n Player.prototype.autoplay = function autoplay(value) {\n if (value !== undefined) {\n this.techCall_('setAutoplay', value);\n this.options_.autoplay = value;\n return this;\n }\n return this.techGet_('autoplay', value);\n };\n\n /**\n * Get or set the loop attribute on the video element.\n *\n * @param {Boolean} value Boolean to determine if video should loop\n * @return {String} The loop attribute value when getting\n * @return {Player} Returns the player when setting\n * @method loop\n */\n\n Player.prototype.loop = function loop(value) {\n if (value !== undefined) {\n this.techCall_('setLoop', value);\n this.options_['loop'] = value;\n return this;\n }\n return this.techGet_('loop');\n };\n\n /**\n * Get or set the poster image source url\n *\n * ##### EXAMPLE:\n * ```js\n * // get\n * var currentPoster = myPlayer.poster();\n * // set\n * myPlayer.poster('http://example.com/myImage.jpg');\n * ```\n *\n * @param {String=} src Poster image source URL\n * @return {String} poster URL when getting\n * @return {Player} self when setting\n * @method poster\n */\n\n Player.prototype.poster = function poster(src) {\n if (src === undefined) {\n return this.poster_;\n }\n\n // The correct way to remove a poster is to set as an empty string\n // other falsey values will throw errors\n if (!src) {\n src = '';\n }\n\n // update the internal poster variable\n this.poster_ = src;\n\n // update the tech's poster\n this.techCall_('setPoster', src);\n\n // alert components that the poster has been set\n this.trigger('posterchange');\n\n return this;\n };\n\n /**\n * Some techs (e.g. YouTube) can provide a poster source in an\n * asynchronous way. We want the poster component to use this\n * poster source so that it covers up the tech's controls.\n * (YouTube's play button). However we only want to use this\n * soruce if the player user hasn't set a poster through\n * the normal APIs.\n *\n * @private\n * @method handleTechPosterChange_\n */\n\n Player.prototype.handleTechPosterChange_ = function handleTechPosterChange_() {\n if (!this.poster_ && this.tech_ && this.tech_.poster) {\n this.poster_ = this.tech_.poster() || '';\n\n // Let components know the poster has changed\n this.trigger('posterchange');\n }\n };\n\n /**\n * Get or set whether or not the controls are showing.\n *\n * @param {Boolean} bool Set controls to showing or not\n * @return {Boolean} Controls are showing\n * @method controls\n */\n\n Player.prototype.controls = function controls(bool) {\n if (bool !== undefined) {\n bool = !!bool; // force boolean\n // Don't trigger a change event unless it actually changed\n if (this.controls_ !== bool) {\n this.controls_ = bool;\n\n if (this.usingNativeControls()) {\n this.techCall_('setControls', bool);\n }\n\n if (bool) {\n this.removeClass('vjs-controls-disabled');\n this.addClass('vjs-controls-enabled');\n this.trigger('controlsenabled');\n\n if (!this.usingNativeControls()) {\n this.addTechControlsListeners_();\n }\n } else {\n this.removeClass('vjs-controls-enabled');\n this.addClass('vjs-controls-disabled');\n this.trigger('controlsdisabled');\n\n if (!this.usingNativeControls()) {\n this.removeTechControlsListeners_();\n }\n }\n }\n return this;\n }\n return !!this.controls_;\n };\n\n /**\n * Toggle native controls on/off. Native controls are the controls built into\n * devices (e.g. default iPhone controls), Flash, or other techs\n * (e.g. Vimeo Controls)\n * **This should only be set by the current tech, because only the tech knows\n * if it can support native controls**\n *\n * @param {Boolean} bool True signals that native controls are on\n * @return {Player} Returns the player\n * @private\n * @method usingNativeControls\n */\n\n Player.prototype.usingNativeControls = function usingNativeControls(bool) {\n if (bool !== undefined) {\n bool = !!bool; // force boolean\n // Don't trigger a change event unless it actually changed\n if (this.usingNativeControls_ !== bool) {\n this.usingNativeControls_ = bool;\n if (bool) {\n this.addClass('vjs-using-native-controls');\n\n /**\n * player is using the native device controls\n *\n * @event usingnativecontrols\n * @memberof Player\n * @instance\n * @private\n */\n this.trigger('usingnativecontrols');\n } else {\n this.removeClass('vjs-using-native-controls');\n\n /**\n * player is using the custom HTML controls\n *\n * @event usingcustomcontrols\n * @memberof Player\n * @instance\n * @private\n */\n this.trigger('usingcustomcontrols');\n }\n }\n return this;\n }\n return !!this.usingNativeControls_;\n };\n\n /**\n * Set or get the current MediaError\n *\n * @param {*} err A MediaError or a String/Number to be turned into a MediaError\n * @return {MediaError|null} when getting\n * @return {Player} when setting\n * @method error\n */\n\n Player.prototype.error = function error(err) {\n if (err === undefined) {\n return this.error_ || null;\n }\n\n // restoring to default\n if (err === null) {\n this.error_ = err;\n this.removeClass('vjs-error');\n this.errorDisplay.close();\n return this;\n }\n\n // error instance\n if (err instanceof _mediaErrorJs2['default']) {\n this.error_ = err;\n } else {\n this.error_ = new _mediaErrorJs2['default'](err);\n }\n\n // add the vjs-error classname to the player\n this.addClass('vjs-error');\n\n // log the name of the error type and any message\n // ie8 just logs \"[object object]\" if you just log the error object\n _utilsLogJs2['default'].error('(CODE:' + this.error_.code + ' ' + _mediaErrorJs2['default'].errorTypes[this.error_.code] + ')', this.error_.message, this.error_);\n\n // fire an error event on the player\n this.trigger('error');\n\n return this;\n };\n\n /**\n * Returns whether or not the player is in the \"ended\" state.\n *\n * @return {Boolean} True if the player is in the ended state, false if not.\n * @method ended\n */\n\n Player.prototype.ended = function ended() {\n return this.techGet_('ended');\n };\n\n /**\n * Returns whether or not the player is in the \"seeking\" state.\n *\n * @return {Boolean} True if the player is in the seeking state, false if not.\n * @method seeking\n */\n\n Player.prototype.seeking = function seeking() {\n return this.techGet_('seeking');\n };\n\n /**\n * Returns the TimeRanges of the media that are currently available\n * for seeking to.\n *\n * @return {TimeRanges} the seekable intervals of the media timeline\n * @method seekable\n */\n\n Player.prototype.seekable = function seekable() {\n return this.techGet_('seekable');\n };\n\n /**\n * Report user activity\n *\n * @param {Object} event Event object\n * @method reportUserActivity\n */\n\n Player.prototype.reportUserActivity = function reportUserActivity(event) {\n this.userActivity_ = true;\n };\n\n /**\n * Get/set if user is active\n *\n * @param {Boolean} bool Value when setting\n * @return {Boolean} Value if user is active user when getting\n * @method userActive\n */\n\n Player.prototype.userActive = function userActive(bool) {\n if (bool !== undefined) {\n bool = !!bool;\n if (bool !== this.userActive_) {\n this.userActive_ = bool;\n if (bool) {\n // If the user was inactive and is now active we want to reset the\n // inactivity timer\n this.userActivity_ = true;\n this.removeClass('vjs-user-inactive');\n this.addClass('vjs-user-active');\n this.trigger('useractive');\n } else {\n // We're switching the state to inactive manually, so erase any other\n // activity\n this.userActivity_ = false;\n\n // Chrome/Safari/IE have bugs where when you change the cursor it can\n // trigger a mousemove event. This causes an issue when you're hiding\n // the cursor when the user is inactive, and a mousemove signals user\n // activity. Making it impossible to go into inactive mode. Specifically\n // this happens in fullscreen when we really need to hide the cursor.\n //\n // When this gets resolved in ALL browsers it can be removed\n // https://code.google.com/p/chromium/issues/detail?id=103041\n if (this.tech_) {\n this.tech_.one('mousemove', function (e) {\n e.stopPropagation();\n e.preventDefault();\n });\n }\n\n this.removeClass('vjs-user-active');\n this.addClass('vjs-user-inactive');\n this.trigger('userinactive');\n }\n }\n return this;\n }\n return this.userActive_;\n };\n\n /**\n * Listen for user activity based on timeout value\n *\n * @private\n * @method listenForUserActivity_\n */\n\n Player.prototype.listenForUserActivity_ = function listenForUserActivity_() {\n var mouseInProgress = undefined,\n lastMoveX = undefined,\n lastMoveY = undefined;\n\n var handleActivity = Fn.bind(this, this.reportUserActivity);\n\n var handleMouseMove = function handleMouseMove(e) {\n // #1068 - Prevent mousemove spamming\n // Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970\n if (e.screenX !== lastMoveX || e.screenY !== lastMoveY) {\n lastMoveX = e.screenX;\n lastMoveY = e.screenY;\n handleActivity();\n }\n };\n\n var handleMouseDown = function handleMouseDown() {\n handleActivity();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(mouseInProgress);\n // Setting userActivity=true now and setting the interval to the same time\n // as the activityCheck interval (250) should ensure we never miss the\n // next activityCheck\n mouseInProgress = this.setInterval(handleActivity, 250);\n };\n\n var handleMouseUp = function handleMouseUp(event) {\n handleActivity();\n // Stop the interval that maintains activity if the mouse/touch is down\n this.clearInterval(mouseInProgress);\n };\n\n // Any mouse movement will be considered user activity\n this.on('mousedown', handleMouseDown);\n this.on('mousemove', handleMouseMove);\n this.on('mouseup', handleMouseUp);\n\n // Listen for keyboard navigation\n // Shouldn't need to use inProgress interval because of key repeat\n this.on('keydown', handleActivity);\n this.on('keyup', handleActivity);\n\n // Run an interval every 250 milliseconds instead of stuffing everything into\n // the mousemove/touchmove function itself, to prevent performance degradation.\n // `this.reportUserActivity` simply sets this.userActivity_ to true, which\n // then gets picked up by this loop\n // http://ejohn.org/blog/learning-from-twitter/\n var inactivityTimeout = undefined;\n var activityCheck = this.setInterval(function () {\n // Check to see if mouse/touch activity has happened\n if (this.userActivity_) {\n // Reset the activity tracker\n this.userActivity_ = false;\n\n // If the user state was inactive, set the state to active\n this.userActive(true);\n\n // Clear any existing inactivity timeout to start the timer over\n this.clearTimeout(inactivityTimeout);\n\n var timeout = this.options_['inactivityTimeout'];\n if (timeout > 0) {\n // In <timeout> milliseconds, if no more activity has occurred the\n // user will be considered inactive\n inactivityTimeout = this.setTimeout(function () {\n // Protect against the case where the inactivityTimeout can trigger just\n // before the next user activity is picked up by the activityCheck loop\n // causing a flicker\n if (!this.userActivity_) {\n this.userActive(false);\n }\n }, timeout);\n }\n }\n }, 250);\n };\n\n /**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n *\n * @param {Number} rate New playback rate to set.\n * @return {Number} Returns the new playback rate when setting\n * @return {Number} Returns the current playback rate when getting\n * @method playbackRate\n */\n\n Player.prototype.playbackRate = function playbackRate(rate) {\n if (rate !== undefined) {\n this.techCall_('setPlaybackRate', rate);\n return this;\n }\n\n if (this.tech_ && this.tech_['featuresPlaybackRate']) {\n return this.techGet_('playbackRate');\n } else {\n return 1.0;\n }\n };\n\n /**\n * Gets or sets the audio flag\n *\n * @param {Boolean} bool True signals that this is an audio player.\n * @return {Boolean} Returns true if player is audio, false if not when getting\n * @return {Player} Returns the player if setting\n * @private\n * @method isAudio\n */\n\n Player.prototype.isAudio = function isAudio(bool) {\n if (bool !== undefined) {\n this.isAudio_ = !!bool;\n return this;\n }\n\n return !!this.isAudio_;\n };\n\n /**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n * @return {Number} the current network activity state\n * @method networkState\n */\n\n Player.prototype.networkState = function networkState() {\n return this.techGet_('networkState');\n };\n\n /**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n * @return {Number} the current playback rendering state\n * @method readyState\n */\n\n Player.prototype.readyState = function readyState() {\n return this.techGet_('readyState');\n };\n\n /**\n * Get a video track list\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist\n *\n * @return {VideoTrackList} thes current video track list\n * @method videoTracks\n */\n\n Player.prototype.videoTracks = function videoTracks() {\n // if we have not yet loadTech_, we create videoTracks_\n // these will be passed to the tech during loading\n if (!this.tech_) {\n this.videoTracks_ = this.videoTracks_ || new _tracksVideoTrackListJs2['default']();\n return this.videoTracks_;\n }\n\n return this.tech_.videoTracks();\n };\n\n /**\n * Get an audio track list\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist\n *\n * @return {AudioTrackList} thes current audio track list\n * @method audioTracks\n */\n\n Player.prototype.audioTracks = function audioTracks() {\n // if we have not yet loadTech_, we create videoTracks_\n // these will be passed to the tech during loading\n if (!this.tech_) {\n this.audioTracks_ = this.audioTracks_ || new _tracksAudioTrackListJs2['default']();\n return this.audioTracks_;\n }\n\n return this.tech_.audioTracks();\n };\n\n /*\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impaired\n * Subtitles - text displayed over the video for those who don't understand language in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n /**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n *\n * @return {Array} Array of track objects\n * @method textTracks\n */\n\n Player.prototype.textTracks = function textTracks() {\n // cannot use techGet_ directly because it checks to see whether the tech is ready.\n // Flash is unlikely to be ready in time but textTracks should still work.\n return this.tech_ && this.tech_['textTracks']();\n };\n\n /**\n * Get an array of remote text tracks\n *\n * @return {Array}\n * @method remoteTextTracks\n */\n\n Player.prototype.remoteTextTracks = function remoteTextTracks() {\n return this.tech_ && this.tech_['remoteTextTracks']();\n };\n\n /**\n * Get an array of remote html track elements\n *\n * @return {HTMLTrackElement[]}\n * @method remoteTextTrackEls\n */\n\n Player.prototype.remoteTextTrackEls = function remoteTextTrackEls() {\n return this.tech_ && this.tech_['remoteTextTrackEls']();\n };\n\n /**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n *\n * @param {String} kind Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label Optional label\n * @param {String=} language Optional language\n * @method addTextTrack\n */\n\n Player.prototype.addTextTrack = function addTextTrack(kind, label, language) {\n return this.tech_ && this.tech_['addTextTrack'](kind, label, language);\n };\n\n /**\n * Add a remote text track\n *\n * @param {Object} options Options for remote text track\n * @method addRemoteTextTrack\n */\n\n Player.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) {\n return this.tech_ && this.tech_['addRemoteTextTrack'](options);\n };\n\n /**\n * Remove a remote text track\n *\n * @param {Object} track Remote text track to remove\n * @method removeRemoteTextTrack\n */\n // destructure the input into an object with a track argument, defaulting to arguments[0]\n // default the whole argument to an empty object if nothing was passed in\n\n Player.prototype.removeRemoteTextTrack = function removeRemoteTextTrack() {\n var _ref3 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n var _ref3$track = _ref3.track;\n var track = _ref3$track === undefined ? arguments[0] : _ref3$track;\n // jshint ignore:line\n this.tech_ && this.tech_['removeRemoteTextTrack'](track);\n };\n\n /**\n * Get video width\n *\n * @return {Number} Video width\n * @method videoWidth\n */\n\n Player.prototype.videoWidth = function videoWidth() {\n return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;\n };\n\n /**\n * Get video height\n *\n * @return {Number} Video height\n * @method videoHeight\n */\n\n Player.prototype.videoHeight = function videoHeight() {\n return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;\n };\n\n // Methods to add support for\n // initialTime: function(){ return this.techCall_('initialTime'); },\n // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); },\n // played: function(){ return this.techCall_('played'); },\n // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); },\n // defaultMuted: function(){ return this.techCall_('defaultMuted'); }\n\n /**\n * The player's language code\n * NOTE: The language should be set in the player options if you want the\n * the controls to be built with a specific language. Changing the lanugage\n * later will not update controls text.\n *\n * @param {String} code The locale string\n * @return {String} The locale string when getting\n * @return {Player} self when setting\n * @method language\n */\n\n Player.prototype.language = function language(code) {\n if (code === undefined) {\n return this.language_;\n }\n\n this.language_ = ('' + code).toLowerCase();\n return this;\n };\n\n /**\n * Get the player's language dictionary\n * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n * Languages specified directly in the player options have precedence\n *\n * @return {Array} Array of languages\n * @method languages\n */\n\n Player.prototype.languages = function languages() {\n return _utilsMergeOptionsJs2['default'](Player.prototype.options_.languages, this.languages_);\n };\n\n /**\n * Converts track info to JSON\n *\n * @return {Object} JSON object of options\n * @method toJSON\n */\n\n Player.prototype.toJSON = function toJSON() {\n var options = _utilsMergeOptionsJs2['default'](this.options_);\n var tracks = options.tracks;\n\n options.tracks = [];\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n\n // deep merge tracks and null out player so no circular references\n track = _utilsMergeOptionsJs2['default'](track);\n track.player = undefined;\n options.tracks[i] = track;\n }\n\n return options;\n };\n\n /**\n * Creates a simple modal dialog (an instance of the `ModalDialog`\n * component) that immediately overlays the player with arbitrary\n * content and removes itself when closed.\n *\n * @param {String|Function|Element|Array|Null} content\n * Same as `ModalDialog#content`'s param of the same name.\n *\n * The most straight-forward usage is to provide a string or DOM\n * element.\n *\n * @param {Object} [options]\n * Extra options which will be passed on to the `ModalDialog`.\n *\n * @return {ModalDialog}\n */\n\n Player.prototype.createModal = function createModal(content, options) {\n var player = this;\n\n options = options || {};\n options.content = content || '';\n\n var modal = new _modalDialog2['default'](player, options);\n\n player.addChild(modal);\n modal.on('dispose', function () {\n player.removeChild(modal);\n });\n\n return modal.open();\n };\n\n /**\n * Gets tag settings\n *\n * @param {Element} tag The player tag\n * @return {Array} An array of sources and track objects\n * @static\n * @method getTagSettings\n */\n\n Player.getTagSettings = function getTagSettings(tag) {\n var baseOptions = {\n 'sources': [],\n 'tracks': []\n };\n\n var tagOptions = Dom.getElAttributes(tag);\n var dataSetup = tagOptions['data-setup'];\n\n // Check if data-setup attr exists.\n if (dataSetup !== null) {\n // Parse options JSON\n\n var _safeParseTuple = _safeJsonParseTuple2['default'](dataSetup || '{}');\n\n var err = _safeParseTuple[0];\n var data = _safeParseTuple[1];\n\n if (err) {\n _utilsLogJs2['default'].error(err);\n }\n _objectAssign2['default'](tagOptions, data);\n }\n\n _objectAssign2['default'](baseOptions, tagOptions);\n\n // Get tag children settings\n if (tag.hasChildNodes()) {\n var children = tag.childNodes;\n\n for (var i = 0, j = children.length; i < j; i++) {\n var child = children[i];\n // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/\n var childName = child.nodeName.toLowerCase();\n if (childName === 'source') {\n baseOptions.sources.push(Dom.getElAttributes(child));\n } else if (childName === 'track') {\n baseOptions.tracks.push(Dom.getElAttributes(child));\n }\n }\n }\n\n return baseOptions;\n };\n\n return Player;\n})(_componentJs2['default']);\n\nPlayer.players = {};\n\nvar navigator = _globalWindow2['default'].navigator;\n/*\n * Player instance options, surfaced using options\n * options = Player.prototype.options_\n * Make changes in options, not here.\n *\n * @type {Object}\n * @private\n */\nPlayer.prototype.options_ = {\n // Default order of fallback technology\n techOrder: ['html5', 'flash'],\n // techOrder: ['flash','html5'],\n\n html5: {},\n flash: {},\n\n // defaultVolume: 0.85,\n defaultVolume: 0.00, // The freakin seaguls are driving me crazy!\n\n // default inactivity timeout\n inactivityTimeout: 2000,\n\n // default playback rates\n playbackRates: [],\n // Add playback rate selection by adding rates\n // 'playbackRates': [0.5, 1, 1.5, 2],\n\n // Included control sets\n children: ['mediaLoader', 'posterImage', 'textTrackDisplay', 'loadingSpinner', 'bigPlayButton', 'controlBar', 'errorDisplay', 'textTrackSettings'],\n\n language: _globalDocument2['default'].getElementsByTagName('html')[0].getAttribute('lang') || navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language || 'en',\n\n // locales and their language translations\n languages: {},\n\n // Default message to show when a video cannot be played.\n notSupportedMessage: 'No compatible source was found for this media.'\n};\n\n/**\n * Fired when the player has initial duration and dimension information\n *\n * @event loadedmetadata\n */\nPlayer.prototype.handleLoadedMetaData_;\n\n/**\n * Fired when the player has downloaded data at the current playback position\n *\n * @event loadeddata\n */\nPlayer.prototype.handleLoadedData_;\n\n/**\n * Fired when the user is active, e.g. moves the mouse over the player\n *\n * @event useractive\n */\nPlayer.prototype.handleUserActive_;\n\n/**\n * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction\n *\n * @event userinactive\n */\nPlayer.prototype.handleUserInactive_;\n\n/**\n * Fired when the current playback position has changed *\n * During playback this is fired every 15-250 milliseconds, depending on the\n * playback technology in use.\n *\n * @event timeupdate\n */\nPlayer.prototype.handleTimeUpdate_;\n\n/**\n * Fired when video playback ends\n *\n * @event ended\n */\nPlayer.prototype.handleTechEnded_;\n\n/**\n * Fired when the volume changes\n *\n * @event volumechange\n */\nPlayer.prototype.handleVolumeChange_;\n\n/**\n * Fired when an error occurs\n *\n * @event error\n */\nPlayer.prototype.handleError_;\n\nPlayer.prototype.flexNotSupported_ = function () {\n var elem = _globalDocument2['default'].createElement('i');\n\n // Note: We don't actually use flexBasis (or flexOrder), but it's one of the more\n // common flex features that we can rely on when checking for flex support.\n return !('flexBasis' in elem.style || 'webkitFlexBasis' in elem.style || 'mozFlexBasis' in elem.style || 'msFlexBasis' in elem.style || 'msFlexOrder' in elem.style) /* IE10-specific (2012 flex spec) */;\n};\n\n_componentJs2['default'].registerComponent('Player', Player);\nexports['default'] = Player;\nmodule.exports = exports['default'];\n// If empty string, make it a parsable json object.\n\n},{\"./big-play-button.js\":62,\"./component.js\":66,\"./control-bar/control-bar.js\":69,\"./error-display.js\":103,\"./fullscreen-api.js\":106,\"./loading-spinner.js\":107,\"./media-error.js\":108,\"./modal-dialog\":112,\"./poster-image.js\":117,\"./tech/html5.js\":122,\"./tech/loader.js\":123,\"./tech/tech.js\":124,\"./tracks/audio-track-list.js\":126,\"./tracks/text-track-display.js\":131,\"./tracks/text-track-list-converter.js\":132,\"./tracks/text-track-settings.js\":134,\"./tracks/video-track-list.js\":139,\"./utils/browser.js\":141,\"./utils/buffer.js\":142,\"./utils/dom.js\":144,\"./utils/events.js\":145,\"./utils/fn.js\":146,\"./utils/guid.js\":148,\"./utils/log.js\":149,\"./utils/merge-options.js\":150,\"./utils/stylesheet.js\":151,\"./utils/time-ranges.js\":152,\"./utils/to-title-case.js\":153,\"global/document\":7,\"global/window\":8,\"object.assign\":53,\"safe-json-parse/tuple\":57}],114:[function(_dereq_,module,exports){\n/**\n * @file plugins.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _playerJs = _dereq_('./player.js');\n\nvar _playerJs2 = _interopRequireDefault(_playerJs);\n\n/**\n * The method for registering a video.js plugin\n *\n * @param {String} name The name of the plugin\n * @param {Function} init The function that is run when the player inits\n * @method plugin\n */\nvar plugin = function plugin(name, init) {\n _playerJs2['default'].prototype[name] = init;\n};\n\nexports['default'] = plugin;\nmodule.exports = exports['default'];\n\n},{\"./player.js\":113}],115:[function(_dereq_,module,exports){\n/**\n * @file popup-button.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _clickableComponentJs = _dereq_('../clickable-component.js');\n\nvar _clickableComponentJs2 = _interopRequireDefault(_clickableComponentJs);\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _popupJs = _dereq_('./popup.js');\n\nvar _popupJs2 = _interopRequireDefault(_popupJs);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsToTitleCaseJs = _dereq_('../utils/to-title-case.js');\n\nvar _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs);\n\n/**\n * A button class with a popup control\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends ClickableComponent\n * @class PopupButton\n */\n\nvar PopupButton = (function (_ClickableComponent) {\n _inherits(PopupButton, _ClickableComponent);\n\n function PopupButton(player) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n _classCallCheck(this, PopupButton);\n\n _ClickableComponent.call(this, player, options);\n\n this.update();\n }\n\n /**\n * Update popup\n *\n * @method update\n */\n\n PopupButton.prototype.update = function update() {\n var popup = this.createPopup();\n\n if (this.popup) {\n this.removeChild(this.popup);\n }\n\n this.popup = popup;\n this.addChild(popup);\n\n if (this.items && this.items.length === 0) {\n this.hide();\n } else if (this.items && this.items.length > 1) {\n this.show();\n }\n };\n\n /**\n * Create popup - Override with specific functionality for component\n *\n * @return {Popup} The constructed popup\n * @method createPopup\n */\n\n PopupButton.prototype.createPopup = function createPopup() {};\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n PopupButton.prototype.createEl = function createEl() {\n return _ClickableComponent.prototype.createEl.call(this, 'div', {\n className: this.buildCSSClass()\n });\n };\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n\n PopupButton.prototype.buildCSSClass = function buildCSSClass() {\n var menuButtonClass = 'vjs-menu-button';\n\n // If the inline option is passed, we want to use different styles altogether.\n if (this.options_.inline === true) {\n menuButtonClass += '-inline';\n } else {\n menuButtonClass += '-popup';\n }\n\n return 'vjs-menu-button ' + menuButtonClass + ' ' + _ClickableComponent.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Return handler for the tooltip\n *\n * @return {Object} Dom element to serve as a handler for the tooltip\n * @method tooltipHandler\n */\n\n PopupButton.prototype.tooltipHandler = function tooltipHandler() {\n // TODO: Fix popup button to have a real icon element to make it as tooltip handler\n return;\n };\n\n return PopupButton;\n})(_clickableComponentJs2['default']);\n\n_componentJs2['default'].registerComponent('PopupButton', PopupButton);\nexports['default'] = PopupButton;\nmodule.exports = exports['default'];\n\n},{\"../clickable-component.js\":64,\"../component.js\":66,\"../utils/dom.js\":144,\"../utils/fn.js\":146,\"../utils/to-title-case.js\":153,\"./popup.js\":116}],116:[function(_dereq_,module,exports){\n/**\n * @file popup.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsEventsJs = _dereq_('../utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\n/**\n * The Popup component is used to build pop up controls.\n *\n * @extends Component\n * @class Popup\n */\n\nvar Popup = (function (_Component) {\n _inherits(Popup, _Component);\n\n function Popup() {\n _classCallCheck(this, Popup);\n\n _Component.apply(this, arguments);\n }\n\n /**\n * Add a popup item to the popup\n *\n * @param {Object|String} component Component or component type to add\n * @method addItem\n */\n\n Popup.prototype.addItem = function addItem(component) {\n this.addChild(component);\n component.on('click', Fn.bind(this, function () {\n this.unlockShowing();\n }));\n };\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n Popup.prototype.createEl = function createEl() {\n var contentElType = this.options_.contentElType || 'ul';\n this.contentEl_ = Dom.createEl(contentElType, {\n className: 'vjs-menu-content'\n });\n var el = _Component.prototype.createEl.call(this, 'div', {\n append: this.contentEl_,\n className: 'vjs-menu'\n });\n el.appendChild(this.contentEl_);\n\n // Prevent clicks from bubbling up. Needed for Popup Buttons,\n // where a click on the parent is significant\n Events.on(el, 'click', function (event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n\n return el;\n };\n\n return Popup;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('Popup', Popup);\nexports['default'] = Popup;\nmodule.exports = exports['default'];\n\n},{\"../component.js\":66,\"../utils/dom.js\":144,\"../utils/events.js\":145,\"../utils/fn.js\":146}],117:[function(_dereq_,module,exports){\n/**\n * @file poster-image.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _clickableComponentJs = _dereq_('./clickable-component.js');\n\nvar _clickableComponentJs2 = _interopRequireDefault(_clickableComponentJs);\n\nvar _componentJs = _dereq_('./component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsFnJs = _dereq_('./utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsDomJs = _dereq_('./utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsBrowserJs = _dereq_('./utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\n/**\n * The component that handles showing the poster image.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PosterImage\n */\n\nvar PosterImage = (function (_ClickableComponent) {\n _inherits(PosterImage, _ClickableComponent);\n\n function PosterImage(player, options) {\n _classCallCheck(this, PosterImage);\n\n _ClickableComponent.call(this, player, options);\n\n this.update();\n player.on('posterchange', Fn.bind(this, this.update));\n }\n\n /**\n * Clean up the poster image\n *\n * @method dispose\n */\n\n PosterImage.prototype.dispose = function dispose() {\n this.player().off('posterchange', this.update);\n _ClickableComponent.prototype.dispose.call(this);\n };\n\n /**\n * Create the poster's image element\n *\n * @return {Element}\n * @method createEl\n */\n\n PosterImage.prototype.createEl = function createEl() {\n var el = Dom.createEl('div', {\n className: 'vjs-poster',\n\n // Don't want poster to be tabbable.\n tabIndex: -1\n });\n\n // To ensure the poster image resizes while maintaining its original aspect\n // ratio, use a div with `background-size` when available. For browsers that\n // do not support `background-size` (e.g. IE8), fall back on using a regular\n // img element.\n if (!browser.BACKGROUND_SIZE_SUPPORTED) {\n this.fallbackImg_ = Dom.createEl('img');\n el.appendChild(this.fallbackImg_);\n }\n\n return el;\n };\n\n /**\n * Event handler for updates to the player's poster source\n *\n * @method update\n */\n\n PosterImage.prototype.update = function update() {\n var url = this.player().poster();\n\n this.setSrc(url);\n\n // If there's no poster source we should display:none on this component\n // so it's not still clickable or right-clickable\n if (url) {\n this.show();\n } else {\n this.hide();\n }\n };\n\n /**\n * Set the poster source depending on the display method\n *\n * @param {String} url The URL to the poster source\n * @method setSrc\n */\n\n PosterImage.prototype.setSrc = function setSrc(url) {\n if (this.fallbackImg_) {\n this.fallbackImg_.src = url;\n } else {\n var backgroundImage = '';\n // Any falsey values should stay as an empty string, otherwise\n // this will throw an extra error\n if (url) {\n backgroundImage = 'url(\"' + url + '\")';\n }\n\n this.el_.style.backgroundImage = backgroundImage;\n }\n };\n\n /**\n * Event handler for clicks on the poster image\n *\n * @method handleClick\n */\n\n PosterImage.prototype.handleClick = function handleClick() {\n // We don't want a click to trigger playback when controls are disabled\n // but CSS should be hiding the poster to prevent that from happening\n if (this.player_.paused()) {\n this.player_.play();\n } else {\n this.player_.pause();\n }\n };\n\n return PosterImage;\n})(_clickableComponentJs2['default']);\n\n_componentJs2['default'].registerComponent('PosterImage', PosterImage);\nexports['default'] = PosterImage;\nmodule.exports = exports['default'];\n\n},{\"./clickable-component.js\":64,\"./component.js\":66,\"./utils/browser.js\":141,\"./utils/dom.js\":144,\"./utils/fn.js\":146}],118:[function(_dereq_,module,exports){\n/**\n * @file setup.js\n *\n * Functions for automatically setting up a player\n * based on the data-setup attribute of the video tag\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utilsEventsJs = _dereq_('./utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _windowLoaded = false;\nvar videojs = undefined;\n\n// Automatically set up any tags that have a data-setup attribute\nvar autoSetup = function autoSetup() {\n // One day, when we stop supporting IE8, go back to this, but in the meantime...*hack hack hack*\n // var vids = Array.prototype.slice.call(document.getElementsByTagName('video'));\n // var audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));\n // var mediaEls = vids.concat(audios);\n\n // Because IE8 doesn't support calling slice on a node list, we need to loop through each list of elements\n // to build up a new, combined list of elements.\n var vids = _globalDocument2['default'].getElementsByTagName('video');\n var audios = _globalDocument2['default'].getElementsByTagName('audio');\n var mediaEls = [];\n if (vids && vids.length > 0) {\n for (var i = 0, e = vids.length; i < e; i++) {\n mediaEls.push(vids[i]);\n }\n }\n if (audios && audios.length > 0) {\n for (var i = 0, e = audios.length; i < e; i++) {\n mediaEls.push(audios[i]);\n }\n }\n\n // Check if any media elements exist\n if (mediaEls && mediaEls.length > 0) {\n\n for (var i = 0, e = mediaEls.length; i < e; i++) {\n var mediaEl = mediaEls[i];\n\n // Check if element exists, has getAttribute func.\n // IE seems to consider typeof el.getAttribute == 'object' instead of 'function' like expected, at least when loading the player immediately.\n if (mediaEl && mediaEl.getAttribute) {\n\n // Make sure this player hasn't already been set up.\n if (mediaEl['player'] === undefined) {\n var options = mediaEl.getAttribute('data-setup');\n\n // Check if data-setup attr exists.\n // We only auto-setup if they've added the data-setup attr.\n if (options !== null) {\n // Create new video.js instance.\n var player = videojs(mediaEl);\n }\n }\n\n // If getAttribute isn't defined, we need to wait for the DOM.\n } else {\n autoSetupTimeout(1);\n break;\n }\n }\n\n // No videos were found, so keep looping unless page is finished loading.\n } else if (!_windowLoaded) {\n autoSetupTimeout(1);\n }\n};\n\n// Pause to let the DOM keep processing\nvar autoSetupTimeout = function autoSetupTimeout(wait, vjs) {\n if (vjs) {\n videojs = vjs;\n }\n\n setTimeout(autoSetup, wait);\n};\n\nif (_globalDocument2['default'].readyState === 'complete') {\n _windowLoaded = true;\n} else {\n Events.one(_globalWindow2['default'], 'load', function () {\n _windowLoaded = true;\n });\n}\n\nvar hasLoaded = function hasLoaded() {\n return _windowLoaded;\n};\n\nexports.autoSetup = autoSetup;\nexports.autoSetupTimeout = autoSetupTimeout;\nexports.hasLoaded = hasLoaded;\n\n},{\"./utils/events.js\":145,\"global/document\":7,\"global/window\":8}],119:[function(_dereq_,module,exports){\n/**\n * @file slider.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\n/**\n * The base functionality for sliders like the volume bar and seek bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class Slider\n */\n\nvar Slider = (function (_Component) {\n _inherits(Slider, _Component);\n\n function Slider(player, options) {\n _classCallCheck(this, Slider);\n\n _Component.call(this, player, options);\n\n // Set property names to bar to match with the child Slider class is looking for\n this.bar = this.getChild(this.options_.barName);\n\n // Set a horizontal or vertical class on the slider depending on the slider type\n this.vertical(!!this.options_.vertical);\n\n this.on('mousedown', this.handleMouseDown);\n this.on('touchstart', this.handleMouseDown);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n this.on('click', this.handleClick);\n\n this.on(player, 'controlsvisible', this.update);\n this.on(player, this.playerEvent, this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String} type Type of element to create\n * @param {Object=} props List of properties in Object form\n * @return {Element}\n * @method createEl\n */\n\n Slider.prototype.createEl = function createEl(type) {\n var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n // Add the slider element class to all sub classes\n props.className = props.className + ' vjs-slider';\n props = _objectAssign2['default']({\n tabIndex: 0\n }, props);\n\n attributes = _objectAssign2['default']({\n 'role': 'slider',\n 'aria-valuenow': 0,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n tabIndex: 0\n }, attributes);\n\n return _Component.prototype.createEl.call(this, type, props, attributes);\n };\n\n /**\n * Handle mouse down on slider\n *\n * @param {Object} event Mouse down event object\n * @method handleMouseDown\n */\n\n Slider.prototype.handleMouseDown = function handleMouseDown(event) {\n var doc = this.bar.el_.ownerDocument;\n\n event.preventDefault();\n Dom.blockTextSelection();\n\n this.addClass('vjs-sliding');\n this.trigger('slideractive');\n\n this.on(doc, 'mousemove', this.handleMouseMove);\n this.on(doc, 'mouseup', this.handleMouseUp);\n this.on(doc, 'touchmove', this.handleMouseMove);\n this.on(doc, 'touchend', this.handleMouseUp);\n\n this.handleMouseMove(event);\n };\n\n /**\n * To be overridden by a subclass\n *\n * @method handleMouseMove\n */\n\n Slider.prototype.handleMouseMove = function handleMouseMove() {};\n\n /**\n * Handle mouse up on Slider\n *\n * @method handleMouseUp\n */\n\n Slider.prototype.handleMouseUp = function handleMouseUp() {\n var doc = this.bar.el_.ownerDocument;\n\n Dom.unblockTextSelection();\n\n this.removeClass('vjs-sliding');\n this.trigger('sliderinactive');\n\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n\n this.update();\n };\n\n /**\n * Update slider\n *\n * @method update\n */\n\n Slider.prototype.update = function update() {\n // In VolumeBar init we have a setTimeout for update that pops and update to the end of the\n // execution stack. The player is destroyed before then update will cause an error\n if (!this.el_) return;\n\n // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.\n // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.\n // var progress = (this.player_.scrubbing()) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();\n var progress = this.getPercent();\n var bar = this.bar;\n\n // If there's no bar...\n if (!bar) return;\n\n // Protect against no duration and other division issues\n if (typeof progress !== 'number' || progress !== progress || progress < 0 || progress === Infinity) {\n progress = 0;\n }\n\n // Convert to a percentage for setting\n var percentage = (progress * 100).toFixed(2) + '%';\n\n // Set the new bar width or height\n if (this.vertical()) {\n bar.el().style.height = percentage;\n } else {\n bar.el().style.width = percentage;\n }\n };\n\n /**\n * Calculate distance for slider\n *\n * @param {Object} event Event object\n * @method calculateDistance\n */\n\n Slider.prototype.calculateDistance = function calculateDistance(event) {\n var position = Dom.getPointerPosition(this.el_, event);\n if (this.vertical()) {\n return position.y;\n }\n return position.x;\n };\n\n /**\n * Handle on focus for slider\n *\n * @method handleFocus\n */\n\n Slider.prototype.handleFocus = function handleFocus() {\n this.on(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);\n };\n\n /**\n * Handle key press for slider\n *\n * @param {Object} event Event object\n * @method handleKeyPress\n */\n\n Slider.prototype.handleKeyPress = function handleKeyPress(event) {\n if (event.which === 37 || event.which === 40) {\n // Left and Down Arrows\n event.preventDefault();\n this.stepBack();\n } else if (event.which === 38 || event.which === 39) {\n // Up and Right Arrows\n event.preventDefault();\n this.stepForward();\n }\n };\n\n /**\n * Handle on blur for slider\n *\n * @method handleBlur\n */\n\n Slider.prototype.handleBlur = function handleBlur() {\n this.off(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);\n };\n\n /**\n * Listener for click events on slider, used to prevent clicks\n * from bubbling up to parent elements like button menus.\n *\n * @param {Object} event Event object\n * @method handleClick\n */\n\n Slider.prototype.handleClick = function handleClick(event) {\n event.stopImmediatePropagation();\n event.preventDefault();\n };\n\n /**\n * Get/set if slider is horizontal for vertical\n *\n * @param {Boolean} bool True if slider is vertical, false is horizontal\n * @return {Boolean} True if slider is vertical, false is horizontal\n * @method vertical\n */\n\n Slider.prototype.vertical = function vertical(bool) {\n if (bool === undefined) {\n return this.vertical_ || false;\n }\n\n this.vertical_ = !!bool;\n\n if (this.vertical_) {\n this.addClass('vjs-slider-vertical');\n } else {\n this.addClass('vjs-slider-horizontal');\n }\n\n return this;\n };\n\n return Slider;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('Slider', Slider);\nexports['default'] = Slider;\nmodule.exports = exports['default'];\n\n},{\"../component.js\":66,\"../utils/dom.js\":144,\"object.assign\":53}],120:[function(_dereq_,module,exports){\n/**\n * @file flash-rtmp.js\n */\n'use strict';\n\nexports.__esModule = true;\nfunction FlashRtmpDecorator(Flash) {\n Flash.streamingFormats = {\n 'rtmp/mp4': 'MP4',\n 'rtmp/flv': 'FLV'\n };\n\n Flash.streamFromParts = function (connection, stream) {\n return connection + '&' + stream;\n };\n\n Flash.streamToParts = function (src) {\n var parts = {\n connection: '',\n stream: ''\n };\n\n if (!src) return parts;\n\n // Look for the normal URL separator we expect, '&'.\n // If found, we split the URL into two pieces around the\n // first '&'.\n var connEnd = src.search(/&(?!\\w+=)/);\n var streamBegin = undefined;\n if (connEnd !== -1) {\n streamBegin = connEnd + 1;\n } else {\n // If there's not a '&', we use the last '/' as the delimiter.\n connEnd = streamBegin = src.lastIndexOf('/') + 1;\n if (connEnd === 0) {\n // really, there's not a '/'?\n connEnd = streamBegin = src.length;\n }\n }\n parts.connection = src.substring(0, connEnd);\n parts.stream = src.substring(streamBegin, src.length);\n\n return parts;\n };\n\n Flash.isStreamingType = function (srcType) {\n return srcType in Flash.streamingFormats;\n };\n\n // RTMP has four variations, any string starting\n // with one of these protocols should be valid\n Flash.RTMP_RE = /^rtmp[set]?:\\/\\//i;\n\n Flash.isStreamingSrc = function (src) {\n return Flash.RTMP_RE.test(src);\n };\n\n /**\n * A source handler for RTMP urls\n * @type {Object}\n */\n Flash.rtmpSourceHandler = {};\n\n /**\n * Check if Flash can play the given videotype\n * @param {String} type The mimetype to check\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n Flash.rtmpSourceHandler.canPlayType = function (type) {\n if (Flash.isStreamingType(type)) {\n return 'maybe';\n }\n\n return '';\n };\n\n /**\n * Check if Flash can handle the source natively\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n Flash.rtmpSourceHandler.canHandleSource = function (source) {\n var can = Flash.rtmpSourceHandler.canPlayType(source.type);\n\n if (can) {\n return can;\n }\n\n if (Flash.isStreamingSrc(source.src)) {\n return 'maybe';\n }\n\n return '';\n };\n\n /**\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n * @param {Object} options The options to pass to the source\n */\n Flash.rtmpSourceHandler.handleSource = function (source, tech, options) {\n var srcParts = Flash.streamToParts(source.src);\n\n tech['setRtmpConnection'](srcParts.connection);\n tech['setRtmpStream'](srcParts.stream);\n };\n\n // Register the native source handler\n Flash.registerSourceHandler(Flash.rtmpSourceHandler);\n\n return Flash;\n}\n\nexports['default'] = FlashRtmpDecorator;\nmodule.exports = exports['default'];\n\n},{}],121:[function(_dereq_,module,exports){\n/**\n * @file flash.js\n * VideoJS-SWF - Custom Flash Player with HTML5-ish API\n * https://github.com/zencoder/video-js-swf\n * Not using setupTriggers. Using global onEvent func to distribute events\n */\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _tech = _dereq_('./tech');\n\nvar _tech2 = _interopRequireDefault(_tech);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsUrlJs = _dereq_('../utils/url.js');\n\nvar Url = _interopRequireWildcard(_utilsUrlJs);\n\nvar _utilsTimeRangesJs = _dereq_('../utils/time-ranges.js');\n\nvar _flashRtmp = _dereq_('./flash-rtmp');\n\nvar _flashRtmp2 = _interopRequireDefault(_flashRtmp);\n\nvar _component = _dereq_('../component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar navigator = _globalWindow2['default'].navigator;\n/**\n * Flash Media Controller - Wrapper for fallback SWF API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Flash\n */\n\nvar Flash = (function (_Tech) {\n _inherits(Flash, _Tech);\n\n function Flash(options, ready) {\n _classCallCheck(this, Flash);\n\n _Tech.call(this, options, ready);\n\n // Set the source when ready\n if (options.source) {\n this.ready(function () {\n this.setSource(options.source);\n }, true);\n }\n\n // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers\n // This allows resetting the playhead when we catch the reload\n if (options.startTime) {\n this.ready(function () {\n this.load();\n this.play();\n this.currentTime(options.startTime);\n }, true);\n }\n\n // Add global window functions that the swf expects\n // A 4.x workflow we weren't able to solve for in 5.0\n // because of the need to hard code these functions\n // into the swf for security reasons\n _globalWindow2['default'].videojs = _globalWindow2['default'].videojs || {};\n _globalWindow2['default'].videojs.Flash = _globalWindow2['default'].videojs.Flash || {};\n _globalWindow2['default'].videojs.Flash.onReady = Flash.onReady;\n _globalWindow2['default'].videojs.Flash.onEvent = Flash.onEvent;\n _globalWindow2['default'].videojs.Flash.onError = Flash.onError;\n\n this.on('seeked', function () {\n this.lastSeekTarget_ = undefined;\n });\n }\n\n // Create setters and getters for attributes\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n Flash.prototype.createEl = function createEl() {\n var options = this.options_;\n\n // If video.js is hosted locally you should also set the location\n // for the hosted swf, which should be relative to the page (not video.js)\n // Otherwise this adds a CDN url.\n // The CDN also auto-adds a swf URL for that specific version.\n if (!options.swf) {\n options.swf = '//cdn.rawgit.com/hola/video-js-swf-sv/v5.1.0-4/dist/video-js.swf';\n }\n\n // Generate ID for swf object\n var objId = options.techId;\n\n if (options.accelerated) {\n // setup params needed for hardware acceleration\n options.params = _objectAssign2['default'](options.params || {}, {\n allowfullscreen: true,\n wmode: 'direct'\n });\n }\n\n // Merge default flashvars with ones passed in to init\n var flashVars = _objectAssign2['default']({\n\n // SWF Callback Functions\n 'readyFunction': 'videojs.Flash.onReady',\n 'eventProxyFunction': 'videojs.Flash.onEvent',\n 'errorEventProxyFunction': 'videojs.Flash.onError',\n\n // Player Settings\n 'accelerated': options.accelerated,\n 'autoplay': options.autoplay,\n 'controls': options.controls,\n 'poster': options.poster,\n 'preload': options.preload,\n 'loop': options.loop,\n 'muted': options.muted\n\n }, options.flashVars);\n\n // Merge default parames with ones passed in\n var params = _objectAssign2['default']({\n 'allowfullscreen': true,\n 'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance\n 'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading\n }, options.params);\n\n // Merge default attributes with ones passed in\n var attributes = _objectAssign2['default']({\n 'id': objId,\n 'name': objId, // Both ID and Name needed or swf to identify itself\n 'class': 'vjs-tech'\n }, options.attributes);\n\n this.el_ = Flash.embed(options.swf, flashVars, params, attributes);\n this.el_.tech = this;\n\n return this.el_;\n };\n\n /**\n * Play for flash tech\n *\n * @method play\n */\n\n Flash.prototype.play = function play() {\n if (this.ended()) {\n this.setCurrentTime(0);\n }\n this.el_.vjs_play();\n };\n\n /**\n * Pause for flash tech\n *\n * @method pause\n */\n\n Flash.prototype.pause = function pause() {\n this.el_.vjs_pause();\n };\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n\n Flash.prototype.src = function src(_src) {\n if (_src === undefined) {\n return this.currentSrc();\n }\n\n // Setting src through `src` not `setSrc` will be deprecated\n return this.setSrc(_src);\n };\n\n /**\n * Set video\n *\n * @param {Object=} src Source object\n * @deprecated\n * @method setSrc\n */\n\n Flash.prototype.setSrc = function setSrc(src) {\n // Make sure source URL is absolute.\n src = Url.getAbsoluteURL(src);\n this.el_.vjs_src(src);\n\n // Currently the SWF doesn't autoplay if you load a source later.\n // e.g. Load player w/ no source, wait 2s, set src.\n if (this.autoplay()) {\n var tech = this;\n this.setTimeout(function () {\n tech.play();\n }, 0);\n }\n };\n\n /**\n * Returns true if the tech is currently seeking.\n * @return {boolean} true if seeking\n */\n\n Flash.prototype.seeking = function seeking() {\n return this.lastSeekTarget_ !== undefined;\n };\n\n /**\n * Set current time\n *\n * @param {Number} time Current time of video\n * @method setCurrentTime\n */\n\n Flash.prototype.setCurrentTime = function setCurrentTime(time) {\n var seekable = this.seekable();\n if (seekable.length) {\n // clamp to the current seekable range\n time = time > seekable.start(0) ? time : seekable.start(0);\n time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n this.lastSeekTarget_ = time;\n this.trigger('seeking');\n this.el_.vjs_setProperty('currentTime', time);\n _Tech.prototype.setCurrentTime.call(this);\n }\n };\n\n /**\n * Get current time\n *\n * @param {Number=} time Current time of video\n * @return {Number} Current time\n * @method currentTime\n */\n\n Flash.prototype.currentTime = function currentTime(time) {\n // when seeking make the reported time keep up with the requested time\n // by reading the time we're seeking to\n if (this.seeking()) {\n return this.lastSeekTarget_ || 0;\n }\n return this.el_.vjs_getProperty('currentTime');\n };\n\n /**\n * Get current source\n *\n * @method currentSrc\n */\n\n Flash.prototype.currentSrc = function currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.vjs_getProperty('currentSrc');\n }\n };\n\n /**\n * Load media into player\n *\n * @method load\n */\n\n Flash.prototype.load = function load() {\n this.el_.vjs_load();\n };\n\n /**\n * Determine if can seek in media\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n\n Flash.prototype.seekable = function seekable() {\n var duration = this.duration();\n if (duration === 0) {\n return _utilsTimeRangesJs.createTimeRange();\n }\n return _utilsTimeRangesJs.createTimeRange(0, duration);\n };\n\n /**\n * Get buffered time range\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n\n Flash.prototype.buffered = function buffered() {\n var ranges = this.el_.vjs_getProperty('buffered');\n if (ranges.length === 0) {\n return _utilsTimeRangesJs.createTimeRange();\n }\n return _utilsTimeRangesJs.createTimeRange(ranges[0][0], ranges[0][1]);\n };\n\n /**\n * Get fullscreen support -\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method supportsFullScreen\n */\n\n Flash.prototype.supportsFullScreen = function supportsFullScreen() {\n return false; // Flash does not allow fullscreen through javascript\n };\n\n /**\n * Request to enter fullscreen\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method enterFullScreen\n */\n\n Flash.prototype.enterFullScreen = function enterFullScreen() {\n return false;\n };\n\n return Flash;\n})(_tech2['default']);\n\nvar _api = Flash.prototype;\nvar _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted,poster'.split(',');\nvar _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr) {\n var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n _api['set' + attrUpper] = function (val) {\n return this.el_.vjs_setProperty(attr, val);\n };\n}\nfunction _createGetter(attr) {\n _api[attr] = function () {\n return this.el_.vjs_getProperty(attr);\n };\n}\n\n// Create getter and setters for all read/write attributes\nfor (var i = 0; i < _readWrite.length; i++) {\n _createGetter(_readWrite[i]);\n _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (var i = 0; i < _readOnly.length; i++) {\n _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function () {\n return Flash.version()[0] >= 10;\n // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\n_tech2['default'].withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/**\n * Check if Flash can play the given videotype\n * @param {String} type The mimetype to check\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canPlayType = function (type) {\n if (type in Flash.formats) {\n return 'maybe';\n }\n\n return '';\n};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function (source) {\n var type;\n\n function guessMimeType(src) {\n var ext = Url.getFileExtension(src);\n if (ext) {\n return 'video/' + ext;\n }\n return '';\n }\n\n if (!source.type) {\n type = guessMimeType(source.src);\n } else {\n // Strip code information from the type because we don't get that specific\n type = source.type.replace(/;.*/, '').toLowerCase();\n }\n\n return Flash.nativeSourceHandler.canPlayType(type);\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n * @param {Object} options The options to pass to the source\n */\nFlash.nativeSourceHandler.handleSource = function (source, tech, options) {\n tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function () {};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n 'video/flv': 'FLV',\n 'video/x-flv': 'FLV',\n 'video/mp4': 'MP4',\n 'video/m4v': 'MP4'\n};\n\nFlash.onReady = function (currSwf) {\n var el = Dom.getEl(currSwf);\n var tech = el && el.tech;\n\n // if there is no el then the tech has been disposed\n // and the tech element was removed from the player div\n if (tech && tech.el()) {\n // check that the flash object is really ready\n Flash.checkReady(tech);\n }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function (tech) {\n // stop worrying if the tech has been disposed\n if (!tech.el()) {\n return;\n }\n\n // check if API property exists\n if (tech.el().vjs_getProperty) {\n // tell tech it's ready\n tech.triggerReady();\n } else {\n // wait longer\n this.setTimeout(function () {\n Flash['checkReady'](tech);\n }, 50);\n }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function (swfID, eventName) {\n var tech = Dom.getEl(swfID).tech;\n tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function (swfID, err) {\n var tech = Dom.getEl(swfID).tech;\n\n // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n if (err === 'srcnotfound') {\n return tech.error(4);\n }\n\n // trigger a custom error\n tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function () {\n var version = '0,0,0';\n\n // IE\n try {\n version = new _globalWindow2['default'].ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n // other browsers\n } catch (e) {\n try {\n if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {\n version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n }\n } catch (err) {}\n }\n return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function (swf, flashVars, params, attributes) {\n var code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n // Get element by embedding code and retrieving created element\n var obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n return obj;\n};\n\nFlash.getEmbedCode = function (swf, flashVars, params, attributes) {\n var objTag = '<object type=\"application/x-shockwave-flash\" ';\n var flashVarsString = '';\n var paramsString = '';\n var attrsString = '';\n\n // Convert flash vars to string\n if (flashVars) {\n Object.getOwnPropertyNames(flashVars).forEach(function (key) {\n flashVarsString += key + '=' + flashVars[key] + '&';\n });\n }\n\n // Add swf, flashVars, and other default params\n params = _objectAssign2['default']({\n 'movie': swf,\n 'flashvars': flashVarsString,\n 'allowScriptAccess': 'always', // Required to talk to swf\n 'allowNetworking': 'all' // All should be default, but having security issues.\n }, params);\n\n // Create param tags string\n Object.getOwnPropertyNames(params).forEach(function (key) {\n paramsString += '<param name=\"' + key + '\" value=\"' + params[key] + '\" />';\n });\n\n attributes = _objectAssign2['default']({\n // Add swf to attributes (need both for IE and Others to work)\n 'data': swf,\n\n // Default to 100% width/height\n 'width': '100%',\n 'height': '100%'\n\n }, attributes);\n\n // Create Attributes string\n Object.getOwnPropertyNames(attributes).forEach(function (key) {\n attrsString += key + '=\"' + attributes[key] + '\" ';\n });\n\n return '' + objTag + attrsString + '>' + paramsString + '</object>';\n};\n\n// Run Flash through the RTMP decorator\n_flashRtmp2['default'](Flash);\n\n_component2['default'].registerComponent('Flash', Flash);\n_tech2['default'].registerTech('Flash', Flash);\nexports['default'] = Flash;\nmodule.exports = exports['default'];\n\n},{\"../component\":66,\"../utils/dom.js\":144,\"../utils/time-ranges.js\":152,\"../utils/url.js\":154,\"./flash-rtmp\":120,\"./tech\":124,\"global/window\":8,\"object.assign\":53}],122:[function(_dereq_,module,exports){\n/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _templateObject = _taggedTemplateLiteralLoose(['Text Tracks are being loaded from another origin but the crossorigin attribute isn\\'t used. \\n This may prevent text tracks from loading.'], ['Text Tracks are being loaded from another origin but the crossorigin attribute isn\\'t used. \\n This may prevent text tracks from loading.']);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }\n\nvar _techJs = _dereq_('./tech.js');\n\nvar _techJs2 = _interopRequireDefault(_techJs);\n\nvar _component = _dereq_('../component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _utilsDomJs = _dereq_('../utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsUrlJs = _dereq_('../utils/url.js');\n\nvar Url = _interopRequireWildcard(_utilsUrlJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsLogJs = _dereq_('../utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _tsml = _dereq_('tsml');\n\nvar _tsml2 = _interopRequireDefault(_tsml);\n\nvar _srcJsTracksTextTrackJs = _dereq_('../../../src/js/tracks/text-track.js');\n\nvar _srcJsTracksTextTrackJs2 = _interopRequireDefault(_srcJsTracksTextTrackJs);\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _utilsMergeOptionsJs = _dereq_('../utils/merge-options.js');\n\nvar _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs);\n\nvar _utilsToTitleCaseJs = _dereq_('../utils/to-title-case.js');\n\nvar _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs);\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\n\nvar Html5 = (function (_Tech) {\n _inherits(Html5, _Tech);\n\n function Html5(options, ready) {\n var _this = this;\n\n _classCallCheck(this, Html5);\n\n _Tech.call(this, options, ready);\n\n var source = options.source;\n var crossoriginTracks = false;\n\n // Set the source if one is provided\n // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n // anyway so the error gets fired.\n if (source && (this.el_.currentSrc !== source.src || options.tag && options.tag.initNetworkState_ === 3)) {\n this.setSource(source);\n } else {\n this.handleLateInit_(this.el_);\n }\n\n if (this.el_.hasChildNodes()) {\n\n var nodes = this.el_.childNodes;\n var nodesLength = nodes.length;\n var removeNodes = [];\n\n while (nodesLength--) {\n var node = nodes[nodesLength];\n var nodeName = node.nodeName.toLowerCase();\n\n if (nodeName === 'track') {\n if (!this.featuresNativeTextTracks) {\n // Empty video tag tracks so the built-in player doesn't use them also.\n // This may not be fast enough to stop HTML5 browsers from reading the tags\n // so we'll need to turn off any default tracks if we're manually doing\n // captions and subtitles. videoElement.textTracks\n removeNodes.push(node);\n } else {\n // store HTMLTrackElement and TextTrack to remote list\n this.remoteTextTrackEls().addTrackElement_(node);\n this.remoteTextTracks().addTrack_(node.track);\n if (!crossoriginTracks && !this.el_.hasAttribute('crossorigin') && Url.isCrossOrigin(node.src)) {\n crossoriginTracks = true;\n }\n }\n }\n }\n\n for (var i = 0; i < removeNodes.length; i++) {\n this.el_.removeChild(removeNodes[i]);\n }\n }\n\n var trackTypes = ['audio', 'video'];\n\n // ProxyNativeTextTracks\n trackTypes.forEach(function (type) {\n var capitalType = _utilsToTitleCaseJs2['default'](type);\n\n if (!_this['featuresNative' + capitalType + 'Tracks']) {\n return;\n }\n var tl = _this.el()[type + 'Tracks'];\n\n if (tl && tl.addEventListener) {\n tl.addEventListener('change', Fn.bind(_this, _this['handle' + capitalType + 'TrackChange_']));\n tl.addEventListener('addtrack', Fn.bind(_this, _this['handle' + capitalType + 'TrackAdd_']));\n tl.addEventListener('removetrack', Fn.bind(_this, _this['handle' + capitalType + 'TrackRemove_']));\n }\n });\n\n if (this.featuresNativeTextTracks) {\n if (crossoriginTracks) {\n _utilsLogJs2['default'].warn(_tsml2['default'](_templateObject));\n }\n\n this.handleTextTrackChange_ = Fn.bind(this, this.handleTextTrackChange);\n this.handleTextTrackAdd_ = Fn.bind(this, this.handleTextTrackAdd);\n this.handleTextTrackRemove_ = Fn.bind(this, this.handleTextTrackRemove);\n this.proxyNativeTextTracks_();\n }\n\n // Determine if native controls should be used\n // Our goal should be to get the custom controls on mobile solid everywhere\n // so we can remove this all together. Right now this will block custom\n // controls on touch enabled laptops like the Chrome Pixel\n if (browser.TOUCH_ENABLED && options.nativeControlsForTouch === true || browser.IS_IPHONE || browser.IS_NATIVE_ANDROID) {\n this.setControls(true);\n }\n\n this.triggerReady();\n }\n\n /* HTML5 Support Testing ---------------------------------------------------- */\n\n /*\n * Element for testing browser HTML5 video capabilities\n *\n * @type {Element}\n * @constant\n * @private\n */\n\n /**\n * Dispose of html5 media element\n *\n * @method dispose\n */\n\n Html5.prototype.dispose = function dispose() {\n var _this2 = this;\n\n // Un-ProxyNativeTracks\n ['audio', 'video', 'text'].forEach(function (type) {\n var capitalType = _utilsToTitleCaseJs2['default'](type);\n var tl = _this2.el_[type + 'Tracks'];\n\n if (tl && tl.removeEventListener) {\n tl.removeEventListener('change', _this2['handle' + capitalType + 'TrackChange_']);\n tl.removeEventListener('addtrack', _this2['handle' + capitalType + 'TrackAdd_']);\n tl.removeEventListener('removetrack', _this2['handle' + capitalType + 'TrackRemove_']);\n }\n });\n\n Html5.disposeMediaElement(this.el_);\n // tech will handle clearing of the emulated track list\n _Tech.prototype.dispose.call(this);\n };\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n Html5.prototype.createEl = function createEl() {\n var el = this.options_.tag;\n\n // Check if this browser supports moving the element into the box.\n // On the iPhone video will break if you move the element,\n // So we have to create a brand new element.\n if (!el || this['movingMediaElementInDOM'] === false) {\n\n // If the original tag is still there, clone and remove it.\n if (el) {\n var clone = el.cloneNode(true);\n el.parentNode.insertBefore(clone, el);\n Html5.disposeMediaElement(el);\n el = clone;\n } else {\n el = _globalDocument2['default'].createElement('video');\n\n // determine if native controls should be used\n var tagAttributes = this.options_.tag && Dom.getElAttributes(this.options_.tag);\n var attributes = _utilsMergeOptionsJs2['default']({}, tagAttributes);\n if (!browser.TOUCH_ENABLED || this.options_.nativeControlsForTouch !== true) {\n delete attributes.controls;\n }\n\n Dom.setElAttributes(el, _objectAssign2['default'](attributes, {\n id: this.options_.techId,\n 'class': 'vjs-tech'\n }));\n }\n }\n\n // Update specific tag settings, in case they were overridden\n var settingsAttrs = ['autoplay', 'preload', 'loop', 'muted'];\n for (var i = settingsAttrs.length - 1; i >= 0; i--) {\n var attr = settingsAttrs[i];\n var overwriteAttrs = {};\n if (typeof this.options_[attr] !== 'undefined') {\n overwriteAttrs[attr] = this.options_[attr];\n }\n Dom.setElAttributes(el, overwriteAttrs);\n }\n\n return el;\n // jenniisawesome = true;\n };\n\n // If we're loading the playback object after it has started loading\n // or playing the video (often with autoplay on) then the loadstart event\n // has already fired and we need to fire it manually because many things\n // rely on it.\n\n Html5.prototype.handleLateInit_ = function handleLateInit_(el) {\n var _this3 = this;\n\n if (el.networkState === 0 || el.networkState === 3) {\n // The video element hasn't started loading the source yet\n // or didn't find a source\n return;\n }\n\n if (el.readyState === 0) {\n var _ret = (function () {\n // NetworkState is set synchronously BUT loadstart is fired at the\n // end of the current stack, usually before setInterval(fn, 0).\n // So at this point we know loadstart may have already fired or is\n // about to fire, and either way the player hasn't seen it yet.\n // We don't want to fire loadstart prematurely here and cause a\n // double loadstart so we'll wait and see if it happens between now\n // and the next loop, and fire it if not.\n // HOWEVER, we also want to make sure it fires before loadedmetadata\n // which could also happen between now and the next loop, so we'll\n // watch for that also.\n var loadstartFired = false;\n var setLoadstartFired = function setLoadstartFired() {\n loadstartFired = true;\n };\n _this3.on('loadstart', setLoadstartFired);\n\n var triggerLoadstart = function triggerLoadstart() {\n // We did miss the original loadstart. Make sure the player\n // sees loadstart before loadedmetadata\n if (!loadstartFired) {\n this.trigger('loadstart');\n }\n };\n _this3.on('loadedmetadata', triggerLoadstart);\n\n _this3.ready(function () {\n this.off('loadstart', setLoadstartFired);\n this.off('loadedmetadata', triggerLoadstart);\n\n if (!loadstartFired) {\n // We did miss the original native loadstart. Fire it now.\n this.trigger('loadstart');\n }\n });\n\n return {\n v: undefined\n };\n })();\n\n if (typeof _ret === 'object') return _ret.v;\n }\n\n // From here on we know that loadstart already fired and we missed it.\n // The other readyState events aren't as much of a problem if we double\n // them, so not going to go to as much trouble as loadstart to prevent\n // that unless we find reason to.\n var eventsToTrigger = ['loadstart'];\n\n // loadedmetadata: newly equal to HAVE_METADATA (1) or greater\n eventsToTrigger.push('loadedmetadata');\n\n // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater\n if (el.readyState >= 2) {\n eventsToTrigger.push('loadeddata');\n }\n\n // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater\n if (el.readyState >= 3) {\n eventsToTrigger.push('canplay');\n }\n\n // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)\n if (el.readyState >= 4) {\n eventsToTrigger.push('canplaythrough');\n }\n\n // We still need to give the player time to add event listeners\n this.ready(function () {\n eventsToTrigger.forEach(function (type) {\n this.trigger(type);\n }, this);\n });\n };\n\n Html5.prototype.proxyNativeTextTracks_ = function proxyNativeTextTracks_() {\n var tt = this.el().textTracks;\n\n if (tt) {\n // Add tracks - if player is initialised after DOM loaded, textTracks\n // will not trigger addtrack\n for (var i = 0; i < tt.length; i++) {\n this.textTracks().addTrack_(tt[i]);\n }\n\n if (tt.addEventListener) {\n tt.addEventListener('change', this.handleTextTrackChange_);\n tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n }\n }\n };\n\n Html5.prototype.handleTextTrackChange = function handleTextTrackChange(e) {\n var tt = this.textTracks();\n this.textTracks().trigger({\n type: 'change',\n target: tt,\n currentTarget: tt,\n srcElement: tt\n });\n };\n\n Html5.prototype.handleTextTrackAdd = function handleTextTrackAdd(e) {\n this.textTracks().addTrack_(e.track);\n };\n\n Html5.prototype.handleTextTrackRemove = function handleTextTrackRemove(e) {\n this.textTracks().removeTrack_(e.track);\n };\n\n Html5.prototype.handleVideoTrackChange_ = function handleVideoTrackChange_(e) {\n var vt = this.videoTracks();\n this.videoTracks().trigger({\n type: 'change',\n target: vt,\n currentTarget: vt,\n srcElement: vt\n });\n };\n\n Html5.prototype.handleVideoTrackAdd_ = function handleVideoTrackAdd_(e) {\n this.videoTracks().addTrack_(e.track);\n };\n\n Html5.prototype.handleVideoTrackRemove_ = function handleVideoTrackRemove_(e) {\n this.videoTracks().removeTrack_(e.track);\n };\n\n Html5.prototype.handleAudioTrackChange_ = function handleAudioTrackChange_(e) {\n var audioTrackList = this.audioTracks();\n this.audioTracks().trigger({\n type: 'change',\n target: audioTrackList,\n currentTarget: audioTrackList,\n srcElement: audioTrackList\n });\n };\n\n Html5.prototype.handleAudioTrackAdd_ = function handleAudioTrackAdd_(e) {\n this.audioTracks().addTrack_(e.track);\n };\n\n Html5.prototype.handleAudioTrackRemove_ = function handleAudioTrackRemove_(e) {\n this.audioTracks().removeTrack_(e.track);\n };\n\n /**\n * Play for html5 tech\n *\n * @method play\n */\n\n Html5.prototype.play = function play() {\n var playPromise = this.el_.play();\n\n // Catch/silence error when a pause interrupts a play request\n // on browsers which return a promise\n if (playPromise !== undefined && typeof playPromise.then === 'function') {\n playPromise.then(null, function (e) {});\n }\n };\n\n /**\n * Pause for html5 tech\n *\n * @method pause\n */\n\n Html5.prototype.pause = function pause() {\n this.el_.pause();\n };\n\n /**\n * Paused for html5 tech\n *\n * @return {Boolean}\n * @method paused\n */\n\n Html5.prototype.paused = function paused() {\n return this.el_.paused;\n };\n\n /**\n * Get current time\n *\n * @return {Number}\n * @method currentTime\n */\n\n Html5.prototype.currentTime = function currentTime() {\n return this.el_.currentTime;\n };\n\n /**\n * Set current time\n *\n * @param {Number} seconds Current time of video\n * @method setCurrentTime\n */\n\n Html5.prototype.setCurrentTime = function setCurrentTime(seconds) {\n try {\n this.el_.currentTime = seconds;\n } catch (e) {\n _utilsLogJs2['default'](e, 'Video is not ready. (Video.js)');\n // this.warning(VideoJS.warnings.videoNotReady);\n }\n };\n\n /**\n * Get duration\n *\n * @return {Number}\n * @method duration\n */\n\n Html5.prototype.duration = function duration() {\n return this.el_.duration || 0;\n };\n\n /**\n * Get a TimeRange object that represents the intersection\n * of the time ranges for which the user agent has all\n * relevant media\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n\n Html5.prototype.buffered = function buffered() {\n return this.el_.buffered;\n };\n\n /**\n * Get volume level\n *\n * @return {Number}\n * @method volume\n */\n\n Html5.prototype.volume = function volume() {\n return this.el_.volume;\n };\n\n /**\n * Set volume level\n *\n * @param {Number} percentAsDecimal Volume percent as a decimal\n * @method setVolume\n */\n\n Html5.prototype.setVolume = function setVolume(percentAsDecimal) {\n this.el_.volume = percentAsDecimal;\n };\n\n /**\n * Get if muted\n *\n * @return {Boolean}\n * @method muted\n */\n\n Html5.prototype.muted = function muted() {\n return this.el_.muted;\n };\n\n /**\n * Set muted\n *\n * @param {Boolean} If player is to be muted or note\n * @method setMuted\n */\n\n Html5.prototype.setMuted = function setMuted(muted) {\n this.el_.muted = muted;\n };\n\n /**\n * Get player width\n *\n * @return {Number}\n * @method width\n */\n\n Html5.prototype.width = function width() {\n return this.el_.offsetWidth;\n };\n\n /**\n * Get player height\n *\n * @return {Number}\n * @method height\n */\n\n Html5.prototype.height = function height() {\n return this.el_.offsetHeight;\n };\n\n /**\n * Get if there is fullscreen support\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n\n Html5.prototype.supportsFullScreen = function supportsFullScreen() {\n if (typeof this.el_.webkitEnterFullScreen === 'function') {\n var userAgent = _globalWindow2['default'].navigator.userAgent;\n // Seems to be broken in Chromium/Chrome && Safari in Leopard\n if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n return true;\n }\n }\n return false;\n };\n\n /**\n * Request to enter fullscreen\n *\n * @method enterFullScreen\n */\n\n Html5.prototype.enterFullScreen = function enterFullScreen() {\n var video = this.el_;\n\n if ('webkitDisplayingFullscreen' in video) {\n this.one('webkitbeginfullscreen', function () {\n this.one('webkitendfullscreen', function () {\n this.trigger('fullscreenchange', { isFullscreen: false });\n });\n\n this.trigger('fullscreenchange', { isFullscreen: true });\n });\n }\n\n if (video.paused && video.networkState <= video.HAVE_METADATA) {\n // attempt to prime the video element for programmatic access\n // this isn't necessary on the desktop but shouldn't hurt\n this.play();\n\n // playing and pausing synchronously during the transition to fullscreen\n // can get iOS ~6.1 devices into a play/pause loop\n this.setTimeout(function () {\n video.pause();\n video.webkitEnterFullScreen();\n }, 0);\n } else {\n video.webkitEnterFullScreen();\n }\n };\n\n /**\n * Request to exit fullscreen\n *\n * @method exitFullScreen\n */\n\n Html5.prototype.exitFullScreen = function exitFullScreen() {\n this.el_.webkitExitFullScreen();\n };\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n\n Html5.prototype.src = function src(_src) {\n if (_src === undefined) {\n return this.el_.src;\n } else {\n // Setting src through `src` instead of `setSrc` will be deprecated\n this.setSrc(_src);\n }\n };\n\n /**\n * Set video\n *\n * @param {Object} src Source object\n * @deprecated\n * @method setSrc\n */\n\n Html5.prototype.setSrc = function setSrc(src) {\n this.el_.src = src;\n };\n\n /**\n * Load media into player\n *\n * @method load\n */\n\n Html5.prototype.load = function load() {\n this.el_.load();\n };\n\n /**\n * Reset the tech. Removes all sources and calls `load`.\n *\n * @method reset\n */\n\n Html5.prototype.reset = function reset() {\n Html5.resetMediaElement(this.el_);\n };\n\n /**\n * Get current source\n *\n * @return {Object}\n * @method currentSrc\n */\n\n Html5.prototype.currentSrc = function currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.currentSrc;\n }\n };\n\n /**\n * Get poster\n *\n * @return {String}\n * @method poster\n */\n\n Html5.prototype.poster = function poster() {\n return this.el_.poster;\n };\n\n /**\n * Set poster\n *\n * @param {String} val URL to poster image\n * @method\n */\n\n Html5.prototype.setPoster = function setPoster(val) {\n this.el_.poster = val;\n };\n\n /**\n * Get preload attribute\n *\n * @return {String}\n * @method preload\n */\n\n Html5.prototype.preload = function preload() {\n return this.el_.preload;\n };\n\n /**\n * Set preload attribute\n *\n * @param {String} val Value for preload attribute\n * @method setPreload\n */\n\n Html5.prototype.setPreload = function setPreload(val) {\n this.el_.preload = val;\n };\n\n /**\n * Get autoplay attribute\n *\n * @return {String}\n * @method autoplay\n */\n\n Html5.prototype.autoplay = function autoplay() {\n return this.el_.autoplay;\n };\n\n /**\n * Set autoplay attribute\n *\n * @param {String} val Value for preload attribute\n * @method setAutoplay\n */\n\n Html5.prototype.setAutoplay = function setAutoplay(val) {\n this.el_.autoplay = val;\n };\n\n /**\n * Get controls attribute\n *\n * @return {String}\n * @method controls\n */\n\n Html5.prototype.controls = function controls() {\n return this.el_.controls;\n };\n\n /**\n * Set controls attribute\n *\n * @param {String} val Value for controls attribute\n * @method setControls\n */\n\n Html5.prototype.setControls = function setControls(val) {\n this.el_.controls = !!val;\n };\n\n /**\n * Get loop attribute\n *\n * @return {String}\n * @method loop\n */\n\n Html5.prototype.loop = function loop() {\n return this.el_.loop;\n };\n\n /**\n * Set loop attribute\n *\n * @param {String} val Value for loop attribute\n * @method setLoop\n */\n\n Html5.prototype.setLoop = function setLoop(val) {\n this.el_.loop = val;\n };\n\n /**\n * Get error value\n *\n * @return {String}\n * @method error\n */\n\n Html5.prototype.error = function error() {\n return this.el_.error;\n };\n\n /**\n * Get whether or not the player is in the \"seeking\" state\n *\n * @return {Boolean}\n * @method seeking\n */\n\n Html5.prototype.seeking = function seeking() {\n return this.el_.seeking;\n };\n\n /**\n * Get a TimeRanges object that represents the\n * ranges of the media resource to which it is possible\n * for the user agent to seek.\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n\n Html5.prototype.seekable = function seekable() {\n return this.el_.seekable;\n };\n\n /**\n * Get if video ended\n *\n * @return {Boolean}\n * @method ended\n */\n\n Html5.prototype.ended = function ended() {\n return this.el_.ended;\n };\n\n /**\n * Get the value of the muted content attribute\n * This attribute has no dynamic effect, it only\n * controls the default state of the element\n *\n * @return {Boolean}\n * @method defaultMuted\n */\n\n Html5.prototype.defaultMuted = function defaultMuted() {\n return this.el_.defaultMuted;\n };\n\n /**\n * Get desired speed at which the media resource is to play\n *\n * @return {Number}\n * @method playbackRate\n */\n\n Html5.prototype.playbackRate = function playbackRate() {\n return this.el_.playbackRate;\n };\n\n /**\n * Returns a TimeRanges object that represents the ranges of the\n * media resource that the user agent has played.\n * @return {TimeRangeObject} the range of points on the media\n * timeline that has been reached through normal playback\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n */\n\n Html5.prototype.played = function played() {\n return this.el_.played;\n };\n\n /**\n * Set desired speed at which the media resource is to play\n *\n * @param {Number} val Speed at which the media resource is to play\n * @method setPlaybackRate\n */\n\n Html5.prototype.setPlaybackRate = function setPlaybackRate(val) {\n this.el_.playbackRate = val;\n };\n\n /**\n * Get the current state of network activity for the element, from\n * the list below\n * NETWORK_EMPTY (numeric value 0)\n * NETWORK_IDLE (numeric value 1)\n * NETWORK_LOADING (numeric value 2)\n * NETWORK_NO_SOURCE (numeric value 3)\n *\n * @return {Number}\n * @method networkState\n */\n\n Html5.prototype.networkState = function networkState() {\n return this.el_.networkState;\n };\n\n /**\n * Get a value that expresses the current state of the element\n * with respect to rendering the current playback position, from\n * the codes in the list below\n * HAVE_NOTHING (numeric value 0)\n * HAVE_METADATA (numeric value 1)\n * HAVE_CURRENT_DATA (numeric value 2)\n * HAVE_FUTURE_DATA (numeric value 3)\n * HAVE_ENOUGH_DATA (numeric value 4)\n *\n * @return {Number}\n * @method readyState\n */\n\n Html5.prototype.readyState = function readyState() {\n return this.el_.readyState;\n };\n\n /**\n * Get width of video\n *\n * @return {Number}\n * @method videoWidth\n */\n\n Html5.prototype.videoWidth = function videoWidth() {\n return this.el_.videoWidth;\n };\n\n /**\n * Get height of video\n *\n * @return {Number}\n * @method videoHeight\n */\n\n Html5.prototype.videoHeight = function videoHeight() {\n return this.el_.videoHeight;\n };\n\n /**\n * Get text tracks\n *\n * @return {TextTrackList}\n * @method textTracks\n */\n\n Html5.prototype.textTracks = function textTracks() {\n return _Tech.prototype.textTracks.call(this);\n };\n\n /**\n * Creates and returns a text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n\n Html5.prototype.addTextTrack = function addTextTrack(kind, label, language) {\n if (!this['featuresNativeTextTracks']) {\n return _Tech.prototype.addTextTrack.call(this, kind, label, language);\n }\n\n return this.el_.addTextTrack(kind, label, language);\n };\n\n /**\n * Creates a remote text track object and returns a html track element\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {HTMLTrackElement}\n * @method addRemoteTextTrack\n */\n\n Html5.prototype.addRemoteTextTrack = function addRemoteTextTrack() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n if (!this['featuresNativeTextTracks']) {\n return _Tech.prototype.addRemoteTextTrack.call(this, options);\n }\n\n var htmlTrackElement = _globalDocument2['default'].createElement('track');\n\n if (options.kind) {\n htmlTrackElement.kind = options.kind;\n }\n if (options.label) {\n htmlTrackElement.label = options.label;\n }\n if (options.language || options.srclang) {\n htmlTrackElement.srclang = options.language || options.srclang;\n }\n if (options['default']) {\n htmlTrackElement['default'] = options['default'];\n }\n if (options.id) {\n htmlTrackElement.id = options.id;\n }\n if (options.src) {\n htmlTrackElement.src = options.src;\n }\n\n this.el().appendChild(htmlTrackElement);\n\n // store HTMLTrackElement and TextTrack to remote list\n this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);\n this.remoteTextTracks().addTrack_(htmlTrackElement.track);\n\n return htmlTrackElement;\n };\n\n /**\n * Remove remote text track from TextTrackList object\n *\n * @param {TextTrackObject} track Texttrack object to remove\n * @method removeRemoteTextTrack\n */\n\n Html5.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) {\n if (!this['featuresNativeTextTracks']) {\n return _Tech.prototype.removeRemoteTextTrack.call(this, track);\n }\n\n var tracks = undefined,\n i = undefined;\n\n var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);\n\n // remove HTMLTrackElement and TextTrack from remote list\n this.remoteTextTrackEls().removeTrackElement_(trackElement);\n this.remoteTextTracks().removeTrack_(track);\n\n tracks = this.$$('track');\n\n i = tracks.length;\n while (i--) {\n if (track === tracks[i] || track === tracks[i].track) {\n this.el().removeChild(tracks[i]);\n }\n }\n };\n\n return Html5;\n})(_techJs2['default']);\n\nHtml5.TEST_VID = _globalDocument2['default'].createElement('video');\nvar track = _globalDocument2['default'].createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function () {\n // IE9 with no Media Player is a LIAR! (#984)\n try {\n Html5.TEST_VID['volume'] = 0.5;\n } catch (e) {\n return false;\n }\n\n return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\n_techJs2['default'].withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can play the given videotype\n *\n * @param {String} type The mimetype to check\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canPlayType = function (type) {\n // IE9 on Windows 7 without MediaPlayer throws an error here\n // https://github.com/videojs/video.js/issues/519\n try {\n return Html5.TEST_VID.canPlayType(type);\n } catch (e) {\n return '';\n }\n};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function (source) {\n var match, ext;\n\n // If a type was provided we should rely on that\n if (source.type) {\n return Html5.nativeSourceHandler.canPlayType(source.type);\n } else if (source.src) {\n // If no type, fall back to checking 'video/[EXTENSION]'\n ext = Url.getFileExtension(source.src);\n\n return Html5.nativeSourceHandler.canPlayType('video/' + ext);\n }\n\n return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the Html5 tech\n * @param {Object} options The options to pass to the source\n */\nHtml5.nativeSourceHandler.handleSource = function (source, tech, options) {\n tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function () {};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function () {\n var volume = Html5.TEST_VID.volume;\n Html5.TEST_VID.volume = volume / 2 + 0.1;\n return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Boolean}\n */\nHtml5.canControlPlaybackRate = function () {\n // Playback rate API is implemented in Android Chrome, but doesn't do anything\n // https://github.com/videojs/video.js/issues/3180\n if (browser.IS_ANDROID && browser.IS_CHROME) {\n return false;\n }\n var playbackRate = Html5.TEST_VID.playbackRate;\n Html5.TEST_VID.playbackRate = playbackRate / 2 + 0.1;\n return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function () {\n return browser.IS_ANY_SAFARI;\n};\n\n/*\n * Check to see if native video tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeVideoTracks = function () {\n var supportsVideoTracks = !!Html5.TEST_VID.videoTracks;\n return supportsVideoTracks;\n};\n\n/*\n * Check to see if native audio tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeAudioTracks = function () {\n var supportsAudioTracks = !!Html5.TEST_VID.audioTracks;\n return supportsAudioTracks;\n};\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = ['loadstart', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough', 'playing', 'waiting', 'seeking', 'seeked', 'ended', 'durationchange', 'timeupdate', 'progress', 'play', 'pause', 'ratechange', 'volumechange'];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n/**\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeVideoTracks'] = Html5.supportsNativeVideoTracks();\n\n/**\n * Sets the tech's status on native audio track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeAudioTracks'] = Html5.supportsNativeAudioTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nvar canPlayType = undefined;\nvar mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nvar mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function () {\n // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n if (browser.ANDROID_VERSION >= 4.0) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function (type) {\n if (type && mpegurlRE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n\n // Override Android 2.2 and less canPlayType method which is broken\n if (browser.IS_OLD_ANDROID) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function (type) {\n if (type && mp4RE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n};\n\nHtml5.unpatchCanPlayType = function () {\n var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n canPlayType = null;\n return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function (el) {\n if (!el) {\n return;\n }\n\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // remove any child track or source nodes to prevent their loading\n while (el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n\n // remove any src reference. not setting `src=''` because that causes a warning\n // in firefox\n el.removeAttribute('src');\n\n // force the media element to update its loading state by calling load()\n // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function () {\n try {\n el.load();\n } catch (e) {\n // not supported\n }\n })();\n }\n};\n\nHtml5.resetMediaElement = function (el) {\n if (!el) {\n return;\n }\n\n var sources = el.querySelectorAll('source');\n var i = sources.length;\n while (i--) {\n el.removeChild(sources[i]);\n }\n\n // remove any src reference.\n // not setting `src=''` because that throws an error\n el.removeAttribute('src');\n\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function () {\n try {\n el.load();\n } catch (e) {}\n })();\n }\n};\n\n_component2['default'].registerComponent('Html5', Html5);\n_techJs2['default'].registerTech('Html5', Html5);\nexports['default'] = Html5;\nmodule.exports = exports['default'];\n\n},{\"../../../src/js/tracks/text-track.js\":135,\"../component\":66,\"../utils/browser.js\":141,\"../utils/dom.js\":144,\"../utils/fn.js\":146,\"../utils/log.js\":149,\"../utils/merge-options.js\":150,\"../utils/to-title-case.js\":153,\"../utils/url.js\":154,\"./tech.js\":124,\"global/document\":7,\"global/window\":8,\"object.assign\":53,\"tsml\":59}],123:[function(_dereq_,module,exports){\n/**\n * @file loader.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _componentJs = _dereq_('../component.js');\n\nvar _componentJs2 = _interopRequireDefault(_componentJs);\n\nvar _techJs = _dereq_('./tech.js');\n\nvar _techJs2 = _interopRequireDefault(_techJs);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _utilsToTitleCaseJs = _dereq_('../utils/to-title-case.js');\n\nvar _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs);\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class MediaLoader\n */\n\nvar MediaLoader = (function (_Component) {\n _inherits(MediaLoader, _Component);\n\n function MediaLoader(player, options, ready) {\n _classCallCheck(this, MediaLoader);\n\n _Component.call(this, player, options, ready);\n\n // If there are no sources when the player is initialized,\n // load the first supported playback technology.\n\n if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n for (var i = 0, j = options.playerOptions['techOrder']; i < j.length; i++) {\n var techName = _utilsToTitleCaseJs2['default'](j[i]);\n var tech = _techJs2['default'].getTech(techName);\n // Support old behavior of techs being registered as components.\n // Remove once that deprecated behavior is removed.\n if (!techName) {\n tech = _componentJs2['default'].getComponent(techName);\n }\n\n // Check if the browser supports this technology\n if (tech && tech.isSupported()) {\n player.loadTech_(techName);\n break;\n }\n }\n } else {\n // // Loop through playback technologies (HTML5, Flash) and check for support.\n // // Then load the best source.\n // // A few assumptions here:\n // // All playback technologies respect preload false.\n player.src(options.playerOptions['sources']);\n }\n }\n\n return MediaLoader;\n})(_componentJs2['default']);\n\n_componentJs2['default'].registerComponent('MediaLoader', MediaLoader);\nexports['default'] = MediaLoader;\nmodule.exports = exports['default'];\n\n},{\"../component.js\":66,\"../utils/to-title-case.js\":153,\"./tech.js\":124,\"global/window\":8}],124:[function(_dereq_,module,exports){\n/**\n * @file tech.js\n * Media Technology Controller - Base class for media playback\n * technology controllers like Flash and HTML5\n */\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _component = _dereq_('../component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _tracksHtmlTrackElement = _dereq_('../tracks/html-track-element');\n\nvar _tracksHtmlTrackElement2 = _interopRequireDefault(_tracksHtmlTrackElement);\n\nvar _tracksHtmlTrackElementList = _dereq_('../tracks/html-track-element-list');\n\nvar _tracksHtmlTrackElementList2 = _interopRequireDefault(_tracksHtmlTrackElementList);\n\nvar _utilsMergeOptionsJs = _dereq_('../utils/merge-options.js');\n\nvar _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs);\n\nvar _tracksTextTrack = _dereq_('../tracks/text-track');\n\nvar _tracksTextTrack2 = _interopRequireDefault(_tracksTextTrack);\n\nvar _tracksTextTrackList = _dereq_('../tracks/text-track-list');\n\nvar _tracksTextTrackList2 = _interopRequireDefault(_tracksTextTrackList);\n\nvar _tracksVideoTrack = _dereq_('../tracks/video-track');\n\nvar _tracksVideoTrack2 = _interopRequireDefault(_tracksVideoTrack);\n\nvar _tracksVideoTrackList = _dereq_('../tracks/video-track-list');\n\nvar _tracksVideoTrackList2 = _interopRequireDefault(_tracksVideoTrackList);\n\nvar _tracksAudioTrackList = _dereq_('../tracks/audio-track-list');\n\nvar _tracksAudioTrackList2 = _interopRequireDefault(_tracksAudioTrackList);\n\nvar _tracksAudioTrack = _dereq_('../tracks/audio-track');\n\nvar _tracksAudioTrack2 = _interopRequireDefault(_tracksAudioTrack);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsLogJs = _dereq_('../utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _utilsTimeRangesJs = _dereq_('../utils/time-ranges.js');\n\nvar _utilsBufferJs = _dereq_('../utils/buffer.js');\n\nvar _mediaErrorJs = _dereq_('../media-error.js');\n\nvar _mediaErrorJs2 = _interopRequireDefault(_mediaErrorJs);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/**\n * Base class for media (HTML5 Video, Flash) controllers\n *\n * @param {Object=} options Options object\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Tech\n */\n\nvar Tech = (function (_Component) {\n _inherits(Tech, _Component);\n\n function Tech() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n var ready = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1];\n\n _classCallCheck(this, Tech);\n\n // we don't want the tech to report user activity automatically.\n // This is done manually in addControlsListeners\n options.reportTouchActivity = false;\n _Component.call(this, null, options, ready);\n\n // keep track of whether the current source has played at all to\n // implement a very limited played()\n this.hasStarted_ = false;\n this.on('playing', function () {\n this.hasStarted_ = true;\n });\n this.on('loadstart', function () {\n this.hasStarted_ = false;\n });\n\n this.textTracks_ = options.textTracks;\n this.videoTracks_ = options.videoTracks;\n this.audioTracks_ = options.audioTracks;\n\n // Manually track progress in cases where the browser/flash player doesn't report it.\n if (!this.featuresProgressEvents) {\n this.manualProgressOn();\n }\n\n // Manually track timeupdates in cases where the browser/flash player doesn't report it.\n if (!this.featuresTimeupdateEvents) {\n this.manualTimeUpdatesOn();\n }\n\n if (options.nativeCaptions === false || options.nativeTextTracks === false) {\n this.featuresNativeTextTracks = false;\n }\n\n if (!this.featuresNativeTextTracks) {\n this.on('ready', this.emulateTextTracks);\n }\n\n this.initTextTrackListeners();\n this.initTrackListeners();\n\n // Turn on component tap events\n this.emitTapEvents();\n }\n\n /**\n * List of associated text tracks\n *\n * @type {TextTrackList}\n * @private\n */\n\n /* Fallbacks for unsupported event types\n ================================================================================ */\n // Manually trigger progress events based on changes to the buffered amount\n // Many flash players and older HTML5 browsers don't send progress or progress-like events\n /**\n * Turn on progress events\n *\n * @method manualProgressOn\n */\n\n Tech.prototype.manualProgressOn = function manualProgressOn() {\n this.on('durationchange', this.onDurationChange);\n\n this.manualProgress = true;\n\n // Trigger progress watching when a source begins loading\n this.one('ready', this.trackProgress);\n };\n\n /**\n * Turn off progress events\n *\n * @method manualProgressOff\n */\n\n Tech.prototype.manualProgressOff = function manualProgressOff() {\n this.manualProgress = false;\n this.stopTrackingProgress();\n\n this.off('durationchange', this.onDurationChange);\n };\n\n /**\n * Track progress\n *\n * @method trackProgress\n */\n\n Tech.prototype.trackProgress = function trackProgress() {\n this.stopTrackingProgress();\n this.progressInterval = this.setInterval(Fn.bind(this, function () {\n // Don't trigger unless buffered amount is greater than last time\n\n var numBufferedPercent = this.bufferedPercent();\n\n if (this.bufferedPercent_ !== numBufferedPercent) {\n this.trigger('progress');\n }\n\n this.bufferedPercent_ = numBufferedPercent;\n\n if (numBufferedPercent === 1) {\n this.stopTrackingProgress();\n }\n }), 500);\n };\n\n /**\n * Update duration\n *\n * @method onDurationChange\n */\n\n Tech.prototype.onDurationChange = function onDurationChange() {\n this.duration_ = this.duration();\n };\n\n /**\n * Create and get TimeRange object for buffering\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n\n Tech.prototype.buffered = function buffered() {\n return _utilsTimeRangesJs.createTimeRange(0, 0);\n };\n\n /**\n * Get buffered percent\n *\n * @return {Number}\n * @method bufferedPercent\n */\n\n Tech.prototype.bufferedPercent = function bufferedPercent() {\n return _utilsBufferJs.bufferedPercent(this.buffered(), this.duration_);\n };\n\n /**\n * Stops tracking progress by clearing progress interval\n *\n * @method stopTrackingProgress\n */\n\n Tech.prototype.stopTrackingProgress = function stopTrackingProgress() {\n this.clearInterval(this.progressInterval);\n };\n\n /*! Time Tracking -------------------------------------------------------------- */\n /**\n * Set event listeners for on play and pause and tracking current time\n *\n * @method manualTimeUpdatesOn\n */\n\n Tech.prototype.manualTimeUpdatesOn = function manualTimeUpdatesOn() {\n this.manualTimeUpdates = true;\n\n this.on('play', this.trackCurrentTime);\n this.on('pause', this.stopTrackingCurrentTime);\n };\n\n /**\n * Remove event listeners for on play and pause and tracking current time\n *\n * @method manualTimeUpdatesOff\n */\n\n Tech.prototype.manualTimeUpdatesOff = function manualTimeUpdatesOff() {\n this.manualTimeUpdates = false;\n this.stopTrackingCurrentTime();\n this.off('play', this.trackCurrentTime);\n this.off('pause', this.stopTrackingCurrentTime);\n };\n\n /**\n * Tracks current time\n *\n * @method trackCurrentTime\n */\n\n Tech.prototype.trackCurrentTime = function trackCurrentTime() {\n if (this.currentTimeInterval) {\n this.stopTrackingCurrentTime();\n }\n this.currentTimeInterval = this.setInterval(function () {\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }, 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n };\n\n /**\n * Turn off play progress tracking (when paused or dragging)\n *\n * @method stopTrackingCurrentTime\n */\n\n Tech.prototype.stopTrackingCurrentTime = function stopTrackingCurrentTime() {\n this.clearInterval(this.currentTimeInterval);\n\n // #1002 - if the video ends right before the next timeupdate would happen,\n // the progress bar won't make it all the way to the end\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n };\n\n /**\n * Turn off any manual progress or timeupdate tracking\n *\n * @method dispose\n */\n\n Tech.prototype.dispose = function dispose() {\n\n // clear out all tracks because we can't reuse them between techs\n this.clearTracks(['audio', 'video', 'text']);\n\n // Turn off any manual progress or timeupdate tracking\n if (this.manualProgress) {\n this.manualProgressOff();\n }\n\n if (this.manualTimeUpdates) {\n this.manualTimeUpdatesOff();\n }\n\n _Component.prototype.dispose.call(this);\n };\n\n /**\n * clear out a track list, or multiple track lists\n *\n * Note: Techs without source handlers should call this between\n * sources for video & audio tracks, as usually you don't want\n * to use them between tracks and we have no automatic way to do\n * it for you\n *\n * @method clearTracks\n * @param {Array|String} types type(s) of track lists to empty\n */\n\n Tech.prototype.clearTracks = function clearTracks(types) {\n var _this = this;\n\n types = [].concat(types);\n // clear out all tracks because we can't reuse them between techs\n types.forEach(function (type) {\n var list = _this[type + 'Tracks']() || [];\n var i = list.length;\n while (i--) {\n var track = list[i];\n if (type === 'text') {\n _this.removeRemoteTextTrack(track);\n }\n list.removeTrack_(track);\n }\n });\n };\n\n /**\n * Reset the tech. Removes all sources and resets readyState.\n *\n * @method reset\n */\n\n Tech.prototype.reset = function reset() {};\n\n /**\n * When invoked without an argument, returns a MediaError object\n * representing the current error state of the player or null if\n * there is no error. When invoked with an argument, set the current\n * error state of the player.\n * @param {MediaError=} err Optional an error object\n * @return {MediaError} the current error object or null\n * @method error\n */\n\n Tech.prototype.error = function error(err) {\n if (err !== undefined) {\n if (err instanceof _mediaErrorJs2['default']) {\n this.error_ = err;\n } else {\n this.error_ = new _mediaErrorJs2['default'](err);\n }\n this.trigger('error');\n }\n return this.error_;\n };\n\n /**\n * Return the time ranges that have been played through for the\n * current source. This implementation is incomplete. It does not\n * track the played time ranges, only whether the source has played\n * at all or not.\n * @return {TimeRangeObject} a single time range if this video has\n * played or an empty set of ranges if not.\n * @method played\n */\n\n Tech.prototype.played = function played() {\n if (this.hasStarted_) {\n return _utilsTimeRangesJs.createTimeRange(0, 0);\n }\n return _utilsTimeRangesJs.createTimeRange();\n };\n\n /**\n * Set current time\n *\n * @method setCurrentTime\n */\n\n Tech.prototype.setCurrentTime = function setCurrentTime() {\n // improve the accuracy of manual timeupdates\n if (this.manualTimeUpdates) {\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }\n };\n\n /**\n * Initialize texttrack listeners\n *\n * @method initTextTrackListeners\n */\n\n Tech.prototype.initTextTrackListeners = function initTextTrackListeners() {\n var textTrackListChanges = Fn.bind(this, function () {\n this.trigger('texttrackchange');\n });\n\n var tracks = this.textTracks();\n\n if (!tracks) return;\n\n tracks.addEventListener('removetrack', textTrackListChanges);\n tracks.addEventListener('addtrack', textTrackListChanges);\n\n this.on('dispose', Fn.bind(this, function () {\n tracks.removeEventListener('removetrack', textTrackListChanges);\n tracks.removeEventListener('addtrack', textTrackListChanges);\n }));\n };\n\n /**\n * Initialize audio and video track listeners\n *\n * @method initTrackListeners\n */\n\n Tech.prototype.initTrackListeners = function initTrackListeners() {\n var _this2 = this;\n\n var trackTypes = ['video', 'audio'];\n\n trackTypes.forEach(function (type) {\n var trackListChanges = function trackListChanges() {\n _this2.trigger(type + 'trackchange');\n };\n\n var tracks = _this2[type + 'Tracks']();\n\n tracks.addEventListener('removetrack', trackListChanges);\n tracks.addEventListener('addtrack', trackListChanges);\n\n _this2.on('dispose', function () {\n tracks.removeEventListener('removetrack', trackListChanges);\n tracks.removeEventListener('addtrack', trackListChanges);\n });\n });\n };\n\n /**\n * Emulate texttracks\n *\n * @method emulateTextTracks\n */\n\n Tech.prototype.emulateTextTracks = function emulateTextTracks() {\n var _this3 = this;\n\n var tracks = this.textTracks();\n if (!tracks) {\n return;\n }\n\n if (!_globalWindow2['default']['WebVTT'] && this.el().parentNode != null) {\n (function () {\n var script = _globalDocument2['default'].createElement('script');\n script.src = _this3.options_['vtt.js'] || 'https://cdn.rawgit.com/gkatsev/vtt.js/vjs-v0.12.1/dist/vtt.min.js';\n script.onload = function () {\n _this3.trigger('vttjsloaded');\n };\n script.onerror = function () {\n _this3.trigger('vttjserror');\n };\n _this3.on('dispose', function () {\n script.onload = null;\n script.onerror = null;\n });\n // but have not loaded yet and we set it to true before the inject so that\n // we don't overwrite the injected window.WebVTT if it loads right away\n _globalWindow2['default']['WebVTT'] = true;\n _this3.el().parentNode.appendChild(script);\n })();\n }\n\n var updateDisplay = function updateDisplay() {\n return _this3.trigger('texttrackchange');\n };\n var textTracksChanges = function textTracksChanges() {\n updateDisplay();\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n };\n\n textTracksChanges();\n tracks.addEventListener('change', textTracksChanges);\n\n this.on('dispose', function () {\n tracks.removeEventListener('change', textTracksChanges);\n });\n };\n\n /**\n * Get videotracks\n *\n * @returns {VideoTrackList}\n * @method videoTracks\n */\n\n Tech.prototype.videoTracks = function videoTracks() {\n this.videoTracks_ = this.videoTracks_ || new _tracksVideoTrackList2['default']();\n return this.videoTracks_;\n };\n\n /**\n * Get audiotracklist\n *\n * @returns {AudioTrackList}\n * @method audioTracks\n */\n\n Tech.prototype.audioTracks = function audioTracks() {\n this.audioTracks_ = this.audioTracks_ || new _tracksAudioTrackList2['default']();\n return this.audioTracks_;\n };\n\n /*\n * Provide default methods for text tracks.\n *\n * Html5 tech overrides these.\n */\n\n /**\n * Get texttracks\n *\n * @returns {TextTrackList}\n * @method textTracks\n */\n\n Tech.prototype.textTracks = function textTracks() {\n this.textTracks_ = this.textTracks_ || new _tracksTextTrackList2['default']();\n return this.textTracks_;\n };\n\n /**\n * Get remote texttracks\n *\n * @returns {TextTrackList}\n * @method remoteTextTracks\n */\n\n Tech.prototype.remoteTextTracks = function remoteTextTracks() {\n this.remoteTextTracks_ = this.remoteTextTracks_ || new _tracksTextTrackList2['default']();\n return this.remoteTextTracks_;\n };\n\n /**\n * Get remote htmltrackelements\n *\n * @returns {HTMLTrackElementList}\n * @method remoteTextTrackEls\n */\n\n Tech.prototype.remoteTextTrackEls = function remoteTextTrackEls() {\n this.remoteTextTrackEls_ = this.remoteTextTrackEls_ || new _tracksHtmlTrackElementList2['default']();\n return this.remoteTextTrackEls_;\n };\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n\n Tech.prototype.addTextTrack = function addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n };\n\n /**\n * Creates a remote text track object and returns a emulated html track element\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {HTMLTrackElement}\n * @method addRemoteTextTrack\n */\n\n Tech.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) {\n var track = _utilsMergeOptionsJs2['default'](options, {\n tech: this\n });\n\n var htmlTrackElement = new _tracksHtmlTrackElement2['default'](track);\n\n // store HTMLTrackElement and TextTrack to remote list\n this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);\n this.remoteTextTracks().addTrack_(htmlTrackElement.track);\n\n // must come after remoteTextTracks()\n this.textTracks().addTrack_(htmlTrackElement.track);\n\n return htmlTrackElement;\n };\n\n /**\n * Remove remote texttrack\n *\n * @param {TextTrackObject} track Texttrack to remove\n * @method removeRemoteTextTrack\n */\n\n Tech.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) {\n this.textTracks().removeTrack_(track);\n\n var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);\n\n // remove HTMLTrackElement and TextTrack from remote list\n this.remoteTextTrackEls().removeTrackElement_(trackElement);\n this.remoteTextTracks().removeTrack_(track);\n };\n\n /**\n * Provide a default setPoster method for techs\n * Poster support for techs should be optional, so we don't want techs to\n * break if they don't have a way to set a poster.\n *\n * @method setPoster\n */\n\n Tech.prototype.setPoster = function setPoster() {};\n\n /*\n * Check if the tech can support the given type\n *\n * The base tech does not support any type, but source handlers might\n * overwrite this.\n *\n * @param {String} type The mimetype to check\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n\n Tech.prototype.canPlayType = function canPlayType() {\n return '';\n };\n\n /*\n * Return whether the argument is a Tech or not.\n * Can be passed either a Class like `Html5` or a instance like `player.tech_`\n *\n * @param {Object} component An item to check\n * @return {Boolean} Whether it is a tech or not\n */\n\n Tech.isTech = function isTech(component) {\n return component.prototype instanceof Tech || component instanceof Tech || component === Tech;\n };\n\n /**\n * Registers a Tech\n *\n * @param {String} name Name of the Tech to register\n * @param {Object} tech The tech to register\n * @static\n * @method registerComponent\n */\n\n Tech.registerTech = function registerTech(name, tech) {\n if (!Tech.techs_) {\n Tech.techs_ = {};\n }\n\n if (!Tech.isTech(tech)) {\n throw new Error('Tech ' + name + ' must be a Tech');\n }\n\n Tech.techs_[name] = tech;\n return tech;\n };\n\n /**\n * Gets a component by name\n *\n * @param {String} name Name of the component to get\n * @return {Component}\n * @static\n * @method getComponent\n */\n\n Tech.getTech = function getTech(name) {\n if (Tech.techs_ && Tech.techs_[name]) {\n return Tech.techs_[name];\n }\n\n if (_globalWindow2['default'] && _globalWindow2['default'].videojs && _globalWindow2['default'].videojs[name]) {\n _utilsLogJs2['default'].warn('The ' + name + ' tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)');\n return _globalWindow2['default'].videojs[name];\n }\n };\n\n return Tech;\n})(_component2['default']);\n\nTech.prototype.textTracks_;\n\n/**\n * List of associated audio tracks\n *\n * @type {AudioTrackList}\n * @private\n */\nTech.prototype.audioTracks_;\n\n/**\n * List of associated video tracks\n *\n * @type {VideoTrackList}\n * @private\n */\nTech.prototype.videoTracks_;\n\nvar createTrackHelper = function createTrackHelper(self, kind, label, language) {\n var options = arguments.length <= 4 || arguments[4] === undefined ? {} : arguments[4];\n\n var tracks = self.textTracks();\n\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n if (language) {\n options.language = language;\n }\n options.tech = self;\n\n var track = new _tracksTextTrack2['default'](options);\n tracks.addTrack_(track);\n\n return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n * Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function (_Tech) {\n /*\n * Register a source handler\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * @param {Function} handler The source handler\n * @param {Boolean} first Register it before any existing handlers\n */\n _Tech.registerSourceHandler = function (handler, index) {\n var handlers = _Tech.sourceHandlers;\n\n if (!handlers) {\n handlers = _Tech.sourceHandlers = [];\n }\n\n if (index === undefined) {\n // add to the end of the list\n index = handlers.length;\n }\n\n handlers.splice(index, 0, handler);\n };\n\n /*\n * Check if the tech can support the given type\n * @param {String} type The mimetype to check\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlayType = function (type) {\n var handlers = _Tech.sourceHandlers || [];\n var can = undefined;\n\n for (var i = 0; i < handlers.length; i++) {\n can = handlers[i].canPlayType(type);\n\n if (can) {\n return can;\n }\n }\n\n return '';\n };\n\n /*\n * Return the first source handler that supports the source\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n * @param {Object} source The source object\n * @returns {Object} The first source handler that supports the source\n * @returns {null} Null if no source handler is found\n */\n _Tech.selectSourceHandler = function (source) {\n var handlers = _Tech.sourceHandlers || [];\n var can = undefined;\n\n for (var i = 0; i < handlers.length; i++) {\n can = handlers[i].canHandleSource(source);\n\n if (can) {\n return handlers[i];\n }\n }\n\n return null;\n };\n\n /*\n * Check if the tech can support the given source\n * @param {Object} srcObj The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlaySource = function (srcObj) {\n var sh = _Tech.selectSourceHandler(srcObj);\n\n if (sh) {\n return sh.canHandleSource(srcObj);\n }\n\n return '';\n };\n\n /*\n * When using a source handler, prefer its implementation of\n * any function normally provided by the tech.\n */\n var deferrable = ['seekable', 'duration'];\n\n deferrable.forEach(function (fnName) {\n var originalFn = this[fnName];\n\n if (typeof originalFn !== 'function') {\n return;\n }\n\n this[fnName] = function () {\n if (this.sourceHandler_ && this.sourceHandler_[fnName]) {\n return this.sourceHandler_[fnName].apply(this.sourceHandler_, arguments);\n }\n return originalFn.apply(this, arguments);\n };\n }, _Tech.prototype);\n\n /*\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n * @param {Object} source A source object with src and type keys\n * @return {Tech} self\n */\n _Tech.prototype.setSource = function (source) {\n var sh = _Tech.selectSourceHandler(source);\n\n if (!sh) {\n // Fall back to a native source hander when unsupported sources are\n // deliberately set\n if (_Tech.nativeSourceHandler) {\n sh = _Tech.nativeSourceHandler;\n } else {\n _utilsLogJs2['default'].error('No source hander found for the current source.');\n }\n }\n\n // Dispose any existing source handler\n this.disposeSourceHandler();\n this.off('dispose', this.disposeSourceHandler);\n\n // if we have a source and get another one\n // then we are loading something new\n // than clear all of our current tracks\n if (this.currentSource_) {\n this.clearTracks(['audio', 'video']);\n\n this.currentSource_ = null;\n }\n\n if (sh !== _Tech.nativeSourceHandler) {\n\n this.currentSource_ = source;\n\n // Catch if someone replaced the src without calling setSource.\n // If they do, set currentSource_ to null and dispose our source handler.\n this.off(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);\n this.off(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);\n this.one(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);\n }\n\n this.sourceHandler_ = sh.handleSource(source, this, this.options_);\n this.on('dispose', this.disposeSourceHandler);\n\n return this;\n };\n\n // On the first loadstart after setSource\n _Tech.prototype.firstLoadStartListener_ = function () {\n this.one(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);\n };\n\n // On successive loadstarts when setSource has not been called again\n _Tech.prototype.successiveLoadStartListener_ = function () {\n this.currentSource_ = null;\n this.disposeSourceHandler();\n this.one(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);\n };\n\n /*\n * Clean up any existing source handler\n */\n _Tech.prototype.disposeSourceHandler = function () {\n if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n this.off(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);\n this.off(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);\n this.sourceHandler_.dispose();\n }\n };\n};\n\n_component2['default'].registerComponent('Tech', Tech);\n// Old name for Tech\n_component2['default'].registerComponent('MediaTechController', Tech);\nTech.registerTech('Tech', Tech);\nexports['default'] = Tech;\nmodule.exports = exports['default'];\n\n},{\"../component\":66,\"../media-error.js\":108,\"../tracks/audio-track\":127,\"../tracks/audio-track-list\":126,\"../tracks/html-track-element\":129,\"../tracks/html-track-element-list\":128,\"../tracks/text-track\":135,\"../tracks/text-track-list\":133,\"../tracks/video-track\":140,\"../tracks/video-track-list\":139,\"../utils/buffer.js\":142,\"../utils/fn.js\":146,\"../utils/log.js\":149,\"../utils/merge-options.js\":150,\"../utils/time-ranges.js\":152,\"global/document\":7,\"global/window\":8}],125:[function(_dereq_,module,exports){\n/**\n * @file tooltip.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _component = _dereq_('./component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _utilsDomJs = _dereq_('./utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsEventsJs = _dereq_('./utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar _utilsFnJs = _dereq_('./utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _lodashCompatFunctionThrottle = _dereq_('lodash-compat/function/throttle');\n\nvar _lodashCompatFunctionThrottle2 = _interopRequireDefault(_lodashCompatFunctionThrottle);\n\n/**\n * Base class for all tooltips\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class Tooltip\n */\n\nvar Tooltip = (function (_Component) {\n _inherits(Tooltip, _Component);\n\n function Tooltip(player, options) {\n _classCallCheck(this, Tooltip);\n\n _Component.call(this, player, options);\n\n this.handleHover_ = _lodashCompatFunctionThrottle2['default'](Fn.bind(this, this.handleHover), 25);\n this.handleLeave_ = _lodashCompatFunctionThrottle2['default'](Fn.bind(this, this.handleLeave), 25);\n }\n\n Tooltip.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-tooltip'\n });\n };\n\n Tooltip.prototype.text = function text(_text) {\n if (!_text) return this.text_ || '';\n\n this.text_ = _text;\n this.el_.innerHTML = this.localize(this.text_);\n\n this.update();\n\n return this;\n };\n\n Tooltip.prototype.handler = function handler(_handler) {\n if (!_handler) return this.handler;\n\n if (this.handler_) {\n this.off(this.handler_, 'mouseover', this.handleHover_);\n this.off(this.handler_, 'mouseout', this.handleLeave_);\n }\n\n this.handler_ = _handler;\n this.on(this.handler_, 'mouseover', this.handleHover_);\n this.on(this.handler_, 'mouseout', this.handleLeave_);\n\n return this;\n };\n\n Tooltip.prototype.handleHover = function handleHover() {\n var _this = this;\n\n if (this.timeout) {\n this.clearTimeout(this.timeout);\n this.timeout = 0;\n }\n this.timeout = this.setTimeout(function () {\n return _this.hide();\n }, 1000);\n this.show();\n };\n\n Tooltip.prototype.handleLeave = function handleLeave(event) {\n var _this2 = this;\n\n if (this.timeout) {\n this.clearTimeout(this.timeout);\n this.timeout = 0;\n }\n this.timeout = this.setTimeout(function () {\n return _this2.hide();\n }, 50);\n };\n\n Tooltip.prototype.show = function show() {\n var _this3 = this;\n\n this.player_.trigger('tooltipShown');\n this.player_.on('tooltipShown', function () {\n return _this3.hide();\n });\n\n this.addClass('vjs-tooltip-active');\n this.update();\n };\n\n Tooltip.prototype.hide = function hide() {\n this.removeClass('vjs-tooltip-active');\n\n this.player_.off('tooltipShown');\n };\n\n Tooltip.prototype.update = function update() {\n var width = this.width();\n\n if (!width) {\n return this;\n }\n\n var parent_ = this.handler_;\n var parentWidth = parent_ ? parent_.offsetWidth : 0;\n\n var parentLeft = Dom.findElPosition(parent_).left - Dom.findElPosition(this.player_.el()).left;\n var skew = parentWidth / 2 - width / 2;\n\n var minSkew = -parentLeft;\n // TODO: player_.width() is not working properly after switch to fullscreen\n var maxSkew = this.player_.el().offsetWidth - parentLeft - width;\n\n skew = Math.min(Math.max(minSkew, skew), maxSkew);\n\n this.el_.style.left = skew + 'px';\n\n return this;\n };\n\n return Tooltip;\n})(_component2['default']);\n\n_component2['default'].registerComponent('Tooltip', Tooltip);\nexports['default'] = Tooltip;\nmodule.exports = exports['default'];\n\n},{\"./component\":66,\"./utils/dom.js\":144,\"./utils/events.js\":145,\"./utils/fn.js\":146,\"global/document\":7,\"lodash-compat/function/throttle\":13}],126:[function(_dereq_,module,exports){\n/**\n * @file audio-track-list.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _trackList = _dereq_('./track-list');\n\nvar _trackList2 = _interopRequireDefault(_trackList);\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/**\n * anywhere we call this function we diverge from the spec\n * as we only support one enabled audiotrack at a time\n *\n * @param {Array|AudioTrackList} list list to work on\n * @param {AudioTrack} track the track to skip\n */\nvar disableOthers = function disableOthers(list, track) {\n for (var i = 0; i < list.length; i++) {\n if (track.id === list[i].id) {\n continue;\n }\n // another audio track is enabled, disable it\n list[i].enabled = false;\n }\n};\n/**\n * A list of possible audio tracks. All functionality is in the\n * base class Tracklist and the spec for AudioTrackList is located at:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist\n *\n * interface AudioTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter AudioTrack (unsigned long index);\n * AudioTrack? getTrackById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n *\n * @param {AudioTrack[]} tracks a list of audio tracks to instantiate the list with\n * @extends TrackList\n * @class AudioTrackList\n */\n\nvar AudioTrackList = (function (_TrackList) {\n _inherits(AudioTrackList, _TrackList);\n\n function AudioTrackList() {\n var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n _classCallCheck(this, AudioTrackList);\n\n var list = undefined;\n\n // make sure only 1 track is enabled\n // sorted from last index to first index\n for (var i = tracks.length - 1; i >= 0; i--) {\n if (tracks[i].enabled) {\n disableOthers(tracks, tracks[i]);\n break;\n }\n }\n\n // IE8 forces us to implement inheritance ourselves\n // as it does not support Object.defineProperty properly\n if (browser.IS_IE8) {\n list = _globalDocument2['default'].createElement('custom');\n for (var prop in _trackList2['default'].prototype) {\n if (prop !== 'constructor') {\n list[prop] = _trackList2['default'].prototype[prop];\n }\n }\n for (var prop in AudioTrackList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = AudioTrackList.prototype[prop];\n }\n }\n }\n\n list = _TrackList.call(this, tracks, list);\n list.changing_ = false;\n\n return list;\n }\n\n AudioTrackList.prototype.addTrack_ = function addTrack_(track) {\n var _this = this;\n\n if (track.enabled) {\n disableOthers(this, track);\n }\n\n _TrackList.prototype.addTrack_.call(this, track);\n // native tracks don't have this\n if (!track.addEventListener) {\n return;\n }\n\n track.addEventListener('enabledchange', function () {\n // when we are disabling other tracks (since we don't support\n // more than one track at a time) we will set changing_\n // to true so that we don't trigger additional change events\n if (_this.changing_) {\n return;\n }\n _this.changing_ = true;\n disableOthers(_this, track);\n _this.changing_ = false;\n _this.trigger('change');\n });\n };\n\n AudioTrackList.prototype.addTrack = function addTrack(track) {\n this.addTrack_(track);\n };\n\n AudioTrackList.prototype.removeTrack = function removeTrack(track) {\n _TrackList.prototype.removeTrack_.call(this, track);\n };\n\n return AudioTrackList;\n})(_trackList2['default']);\n\nexports['default'] = AudioTrackList;\nmodule.exports = exports['default'];\n\n},{\"../utils/browser.js\":141,\"./track-list\":137,\"global/document\":7}],127:[function(_dereq_,module,exports){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _trackEnums = _dereq_('./track-enums');\n\nvar _track = _dereq_('./track');\n\nvar _track2 = _interopRequireDefault(_track);\n\nvar _utilsMergeOptions = _dereq_('../utils/merge-options');\n\nvar _utilsMergeOptions2 = _interopRequireDefault(_utilsMergeOptions);\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\n/**\n * A single audio text track as defined in:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack\n *\n * interface AudioTrack {\n * readonly attribute DOMString id;\n * readonly attribute DOMString kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n * attribute boolean enabled;\n * };\n *\n * @param {Object=} options Object of option names and values\n * @class AudioTrack\n */\n\nvar AudioTrack = (function (_Track) {\n _inherits(AudioTrack, _Track);\n\n function AudioTrack() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n _classCallCheck(this, AudioTrack);\n\n var settings = _utilsMergeOptions2['default'](options, {\n kind: _trackEnums.AudioTrackKind[options.kind] || ''\n });\n // on IE8 this will be a document element\n // for every other browser this will be a normal object\n var track = _Track.call(this, settings);\n var enabled = false;\n\n if (browser.IS_IE8) {\n for (var prop in AudioTrack.prototype) {\n if (prop !== 'constructor') {\n track[prop] = AudioTrack.prototype[prop];\n }\n }\n }\n\n Object.defineProperty(track, 'enabled', {\n get: function get() {\n return enabled;\n },\n set: function set(newEnabled) {\n // an invalid or unchanged value\n if (typeof newEnabled !== 'boolean' || newEnabled === enabled) {\n return;\n }\n enabled = newEnabled;\n this.trigger('enabledchange');\n }\n });\n\n // if the user sets this track to selected then\n // set selected to that true value otherwise\n // we keep it false\n if (settings.enabled) {\n track.enabled = settings.enabled;\n }\n track.loaded_ = true;\n\n return track;\n }\n\n return AudioTrack;\n})(_track2['default']);\n\nexports['default'] = AudioTrack;\nmodule.exports = exports['default'];\n\n},{\"../utils/browser.js\":141,\"../utils/merge-options\":150,\"./track\":138,\"./track-enums\":136}],128:[function(_dereq_,module,exports){\n/**\n * @file html-track-element-list.js\n */\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar HtmlTrackElementList = (function () {\n function HtmlTrackElementList() {\n var trackElements = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n _classCallCheck(this, HtmlTrackElementList);\n\n var list = this;\n\n if (browser.IS_IE8) {\n list = _globalDocument2['default'].createElement('custom');\n\n for (var prop in HtmlTrackElementList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = HtmlTrackElementList.prototype[prop];\n }\n }\n }\n\n list.trackElements_ = [];\n\n Object.defineProperty(list, 'length', {\n get: function get() {\n return this.trackElements_.length;\n }\n });\n\n for (var i = 0, _length = trackElements.length; i < _length; i++) {\n list.addTrackElement_(trackElements[i]);\n }\n\n if (browser.IS_IE8) {\n return list;\n }\n }\n\n HtmlTrackElementList.prototype.addTrackElement_ = function addTrackElement_(trackElement) {\n this.trackElements_.push(trackElement);\n };\n\n HtmlTrackElementList.prototype.getTrackElementByTrack_ = function getTrackElementByTrack_(track) {\n var trackElement_ = undefined;\n\n for (var i = 0, _length2 = this.trackElements_.length; i < _length2; i++) {\n if (track === this.trackElements_[i].track) {\n trackElement_ = this.trackElements_[i];\n\n break;\n }\n }\n\n return trackElement_;\n };\n\n HtmlTrackElementList.prototype.removeTrackElement_ = function removeTrackElement_(trackElement) {\n for (var i = 0, _length3 = this.trackElements_.length; i < _length3; i++) {\n if (trackElement === this.trackElements_[i]) {\n this.trackElements_.splice(i, 1);\n\n break;\n }\n }\n };\n\n return HtmlTrackElementList;\n})();\n\nexports['default'] = HtmlTrackElementList;\nmodule.exports = exports['default'];\n\n},{\"../utils/browser.js\":141,\"global/document\":7}],129:[function(_dereq_,module,exports){\n/**\n * @file html-track-element.js\n */\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _eventTarget = _dereq_('../event-target');\n\nvar _eventTarget2 = _interopRequireDefault(_eventTarget);\n\nvar _tracksTextTrack = _dereq_('../tracks/text-track');\n\nvar _tracksTextTrack2 = _interopRequireDefault(_tracksTextTrack);\n\nvar NONE = 0;\nvar LOADING = 1;\nvar LOADED = 2;\nvar ERROR = 3;\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement\n *\n * interface HTMLTrackElement : HTMLElement {\n * attribute DOMString kind;\n * attribute DOMString src;\n * attribute DOMString srclang;\n * attribute DOMString label;\n * attribute boolean default;\n *\n * const unsigned short NONE = 0;\n * const unsigned short LOADING = 1;\n * const unsigned short LOADED = 2;\n * const unsigned short ERROR = 3;\n * readonly attribute unsigned short readyState;\n *\n * readonly attribute TextTrack track;\n * };\n *\n * @param {Object} options TextTrack configuration\n * @class HTMLTrackElement\n */\n\nvar HTMLTrackElement = (function (_EventTarget) {\n _inherits(HTMLTrackElement, _EventTarget);\n\n function HTMLTrackElement() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n _classCallCheck(this, HTMLTrackElement);\n\n _EventTarget.call(this);\n\n var readyState = undefined,\n trackElement = this;\n\n if (browser.IS_IE8) {\n trackElement = _globalDocument2['default'].createElement('custom');\n\n for (var prop in HTMLTrackElement.prototype) {\n if (prop !== 'constructor') {\n trackElement[prop] = HTMLTrackElement.prototype[prop];\n }\n }\n }\n\n var track = new _tracksTextTrack2['default'](options);\n\n trackElement.kind = track.kind;\n trackElement.src = track.src;\n trackElement.srclang = track.language;\n trackElement.label = track.label;\n trackElement['default'] = track['default'];\n\n Object.defineProperty(trackElement, 'readyState', {\n get: function get() {\n return readyState;\n }\n });\n\n Object.defineProperty(trackElement, 'track', {\n get: function get() {\n return track;\n }\n });\n\n readyState = NONE;\n\n track.addEventListener('loadeddata', function () {\n readyState = LOADED;\n\n trackElement.trigger({\n type: 'load',\n target: trackElement\n });\n });\n\n if (browser.IS_IE8) {\n return trackElement;\n }\n }\n\n return HTMLTrackElement;\n})(_eventTarget2['default']);\n\nHTMLTrackElement.prototype.allowedEvents_ = {\n load: 'load'\n};\n\nHTMLTrackElement.NONE = NONE;\nHTMLTrackElement.LOADING = LOADING;\nHTMLTrackElement.LOADED = LOADED;\nHTMLTrackElement.ERROR = ERROR;\n\nexports['default'] = HTMLTrackElement;\nmodule.exports = exports['default'];\n\n},{\"../event-target\":104,\"../tracks/text-track\":135,\"../utils/browser.js\":141,\"global/document\":7}],130:[function(_dereq_,module,exports){\n/**\n * @file text-track-cue-list.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/**\n * A List of text track cues as defined in:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n * readonly attribute unsigned long length;\n * getter TextTrackCue (unsigned long index);\n * TextTrackCue? getCueById(DOMString id);\n * };\n *\n * @param {Array} cues A list of cues to be initialized with\n * @class TextTrackCueList\n */\n\nvar TextTrackCueList = (function () {\n function TextTrackCueList(cues) {\n _classCallCheck(this, TextTrackCueList);\n\n var list = this;\n\n if (browser.IS_IE8) {\n list = _globalDocument2['default'].createElement('custom');\n\n for (var prop in TextTrackCueList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = TextTrackCueList.prototype[prop];\n }\n }\n }\n\n TextTrackCueList.prototype.setCues_.call(list, cues);\n\n Object.defineProperty(list, 'length', {\n get: function get() {\n return this.length_;\n }\n });\n\n if (browser.IS_IE8) {\n return list;\n }\n }\n\n /**\n * A setter for cues in this list\n *\n * @param {Array} cues an array of cues\n * @method setCues_\n * @private\n */\n\n TextTrackCueList.prototype.setCues_ = function setCues_(cues) {\n var oldLength = this.length || 0;\n var i = 0;\n var l = cues.length;\n\n this.cues_ = cues;\n this.length_ = cues.length;\n\n var defineProp = function defineProp(index) {\n if (!('' + index in this)) {\n Object.defineProperty(this, '' + index, {\n get: function get() {\n return this.cues_[index];\n }\n });\n }\n };\n\n if (oldLength < l) {\n i = oldLength;\n\n for (; i < l; i++) {\n defineProp.call(this, i);\n }\n }\n };\n\n /**\n * Get a cue that is currently in the Cue list by id\n *\n * @param {String} id\n * @method getCueById\n * @return {Object} a single cue\n */\n\n TextTrackCueList.prototype.getCueById = function getCueById(id) {\n var result = null;\n\n for (var i = 0, l = this.length; i < l; i++) {\n var cue = this[i];\n\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n };\n\n return TextTrackCueList;\n})();\n\nexports['default'] = TextTrackCueList;\nmodule.exports = exports['default'];\n\n},{\"../utils/browser.js\":141,\"global/document\":7}],131:[function(_dereq_,module,exports){\n/**\n * @file text-track-display.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _component = _dereq_('../component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _menuMenuJs = _dereq_('../menu/menu.js');\n\nvar _menuMenuJs2 = _interopRequireDefault(_menuMenuJs);\n\nvar _menuMenuItemJs = _dereq_('../menu/menu-item.js');\n\nvar _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs);\n\nvar _menuMenuButtonJs = _dereq_('../menu/menu-button.js');\n\nvar _menuMenuButtonJs2 = _interopRequireDefault(_menuMenuButtonJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar darkGray = '#222';\nvar lightGray = '#ccc';\nvar fontMap = {\n monospace: 'monospace',\n sansSerif: 'sans-serif',\n serif: 'serif',\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: 'sans-serif',\n proportionalSerif: 'serif',\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\n\nvar TextTrackDisplay = (function (_Component) {\n _inherits(TextTrackDisplay, _Component);\n\n function TextTrackDisplay(player, options, ready) {\n _classCallCheck(this, TextTrackDisplay);\n\n _Component.call(this, player, options, ready);\n\n player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n // This used to be called during player init, but was causing an error\n // if a track should show by default and the display hadn't loaded yet.\n // Should probably be moved to an external track loader when we support\n // tracks that don't need a display.\n player.ready(Fn.bind(this, function () {\n if (player.tech_ && player.tech_['featuresNativeTextTracks']) {\n this.hide();\n return;\n }\n\n player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n var tracks = this.options_.playerOptions['tracks'] || [];\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n this.player_.addRemoteTextTrack(track);\n }\n\n var modes = { 'captions': 1, 'subtitles': 1 };\n var trackList = this.player_.textTracks();\n var firstDesc = undefined;\n var firstCaptions = undefined;\n\n if (trackList) {\n for (var i = 0; i < trackList.length; i++) {\n var track = trackList[i];\n if (track['default']) {\n if (track.kind === 'descriptions' && !firstDesc) {\n firstDesc = track;\n } else if (track.kind in modes && !firstCaptions) {\n firstCaptions = track;\n }\n }\n }\n\n // We want to show the first default track but captions and subtitles\n // take precedence over descriptions.\n // So, display the first default captions or subtitles track\n // and otherwise the first default descriptions track.\n if (firstCaptions) {\n firstCaptions.mode = 'showing';\n } else if (firstDesc) {\n firstDesc.mode = 'showing';\n }\n }\n }));\n }\n\n /**\n * Add cue HTML to display\n *\n * @param {Number} color Hex number for color, like #f0e\n * @param {Number} opacity Value for opacity,0.0 - 1.0\n * @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n * @method constructColor\n */\n\n /**\n * Toggle display texttracks\n *\n * @method toggleDisplay\n */\n\n TextTrackDisplay.prototype.toggleDisplay = function toggleDisplay() {\n if (this.player_.tech_ && this.player_.tech_['featuresNativeTextTracks']) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n TextTrackDisplay.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-text-track-display'\n }, {\n 'aria-live': 'assertive',\n 'aria-atomic': 'true'\n });\n };\n\n /**\n * Clear display texttracks\n *\n * @method clearDisplay\n */\n\n TextTrackDisplay.prototype.clearDisplay = function clearDisplay() {\n if (typeof _globalWindow2['default']['WebVTT'] === 'function') {\n _globalWindow2['default']['WebVTT']['processCues'](_globalWindow2['default'], [], this.el_);\n }\n };\n\n /**\n * Update display texttracks\n *\n * @method updateDisplay\n */\n\n TextTrackDisplay.prototype.updateDisplay = function updateDisplay() {\n var tracks = this.player_.textTracks();\n\n this.clearDisplay();\n\n if (!tracks) {\n return;\n }\n\n // Track display prioritization model: if multiple tracks are 'showing',\n // display the first 'subtitles' or 'captions' track which is 'showing',\n // otherwise display the first 'descriptions' track which is 'showing'\n\n var descriptionsTrack = null;\n var captionsSubtitlesTrack = null;\n\n var i = tracks.length;\n while (i--) {\n var track = tracks[i];\n if (track['mode'] === 'showing') {\n if (track['kind'] === 'descriptions') {\n descriptionsTrack = track;\n } else {\n captionsSubtitlesTrack = track;\n }\n }\n }\n\n if (captionsSubtitlesTrack) {\n this.updateForTrack(captionsSubtitlesTrack);\n } else if (descriptionsTrack) {\n this.updateForTrack(descriptionsTrack);\n }\n };\n\n /**\n * Add texttrack to texttrack list\n *\n * @param {TextTrackObject} track Texttrack object to be added to list\n * @method updateForTrack\n */\n\n TextTrackDisplay.prototype.updateForTrack = function updateForTrack(track) {\n if (typeof _globalWindow2['default']['WebVTT'] !== 'function' || !track['activeCues']) {\n return;\n }\n\n var overrides = this.player_['textTrackSettings'].getValues();\n\n var cues = [];\n for (var _i = 0; _i < track['activeCues'].length; _i++) {\n cues.push(track['activeCues'][_i]);\n }\n\n _globalWindow2['default']['WebVTT']['processCues'](_globalWindow2['default'], cues, this.el_);\n\n var i = cues.length;\n while (i--) {\n var cue = cues[i];\n if (!cue) {\n continue;\n }\n\n var cueDiv = cue.displayState;\n if (overrides.color) {\n cueDiv.firstChild.style.color = overrides.color;\n }\n if (overrides.textOpacity) {\n tryUpdateStyle(cueDiv.firstChild, 'color', constructColor(overrides.color || '#fff', overrides.textOpacity));\n }\n if (overrides.backgroundColor) {\n cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n }\n if (overrides.backgroundOpacity) {\n tryUpdateStyle(cueDiv.firstChild, 'backgroundColor', constructColor(overrides.backgroundColor || '#000', overrides.backgroundOpacity));\n }\n if (overrides.windowColor) {\n if (overrides.windowOpacity) {\n tryUpdateStyle(cueDiv, 'backgroundColor', constructColor(overrides.windowColor, overrides.windowOpacity));\n } else {\n cueDiv.style.backgroundColor = overrides.windowColor;\n }\n }\n if (overrides.edgeStyle) {\n if (overrides.edgeStyle === 'dropshadow') {\n cueDiv.firstChild.style.textShadow = '2px 2px 3px ' + darkGray + ', 2px 2px 4px ' + darkGray + ', 2px 2px 5px ' + darkGray;\n } else if (overrides.edgeStyle === 'raised') {\n cueDiv.firstChild.style.textShadow = '1px 1px ' + darkGray + ', 2px 2px ' + darkGray + ', 3px 3px ' + darkGray;\n } else if (overrides.edgeStyle === 'depressed') {\n cueDiv.firstChild.style.textShadow = '1px 1px ' + lightGray + ', 0 1px ' + lightGray + ', -1px -1px ' + darkGray + ', 0 -1px ' + darkGray;\n } else if (overrides.edgeStyle === 'uniform') {\n cueDiv.firstChild.style.textShadow = '0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray;\n }\n }\n if (overrides.fontPercent && overrides.fontPercent !== 1) {\n var fontSize = _globalWindow2['default'].parseFloat(cueDiv.style.fontSize);\n cueDiv.style.fontSize = fontSize * overrides.fontPercent + 'px';\n cueDiv.style.height = 'auto';\n cueDiv.style.top = 'auto';\n cueDiv.style.bottom = '2px';\n }\n if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n if (overrides.fontFamily === 'small-caps') {\n cueDiv.firstChild.style.fontVariant = 'small-caps';\n } else {\n cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n }\n }\n }\n };\n\n return TextTrackDisplay;\n})(_component2['default']);\n\nfunction constructColor(color, opacity) {\n return 'rgba(' +\n // color looks like \"#f0e\"\n parseInt(color[1] + color[1], 16) + ',' + parseInt(color[2] + color[2], 16) + ',' + parseInt(color[3] + color[3], 16) + ',' + opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n //\n try {\n el.style[style] = rule;\n } catch (e) {}\n}\n\n_component2['default'].registerComponent('TextTrackDisplay', TextTrackDisplay);\nexports['default'] = TextTrackDisplay;\nmodule.exports = exports['default'];\n\n},{\"../component\":66,\"../menu/menu-button.js\":109,\"../menu/menu-item.js\":110,\"../menu/menu.js\":111,\"../utils/fn.js\":146,\"global/document\":7,\"global/window\":8}],132:[function(_dereq_,module,exports){\n/**\n * Utilities for capturing text track state and re-creating tracks\n * based on a capture.\n *\n * @file text-track-list-converter.js\n */\n\n/**\n * Examine a single text track and return a JSON-compatible javascript\n * object that represents the text track's state.\n * @param track {TextTrackObject} the text track to query\n * @return {Object} a serializable javascript representation of the\n * @private\n */\n'use strict';\n\nexports.__esModule = true;\nvar trackToJson_ = function trackToJson_(track) {\n var ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce(function (acc, prop, i) {\n if (track[prop]) {\n acc[prop] = track[prop];\n }\n\n return acc;\n }, {\n cues: track.cues && Array.prototype.map.call(track.cues, function (cue) {\n return {\n startTime: cue.startTime,\n endTime: cue.endTime,\n text: cue.text,\n id: cue.id\n };\n })\n });\n\n return ret;\n};\n\n/**\n * Examine a tech and return a JSON-compatible javascript array that\n * represents the state of all text tracks currently configured. The\n * return array is compatible with `jsonToTextTracks`.\n * @param tech {tech} the tech object to query\n * @return {Array} a serializable javascript representation of the\n * @function textTracksToJson\n */\nvar textTracksToJson = function textTracksToJson(tech) {\n\n var trackEls = tech.$$('track');\n\n var trackObjs = Array.prototype.map.call(trackEls, function (t) {\n return t.track;\n });\n var tracks = Array.prototype.map.call(trackEls, function (trackEl) {\n var json = trackToJson_(trackEl.track);\n if (trackEl.src) {\n json.src = trackEl.src;\n }\n return json;\n });\n\n return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) {\n return trackObjs.indexOf(track) === -1;\n }).map(trackToJson_));\n};\n\n/**\n * Creates a set of remote text tracks on a tech based on an array of\n * javascript text track representations.\n * @param json {Array} an array of text track representation objects,\n * like those that would be produced by `textTracksToJson`\n * @param tech {tech} the tech to create text tracks on\n * @function jsonToTextTracks\n */\nvar jsonToTextTracks = function jsonToTextTracks(json, tech) {\n json.forEach(function (track) {\n var addedTrack = tech.addRemoteTextTrack(track).track;\n if (!track.src && track.cues) {\n track.cues.forEach(function (cue) {\n return addedTrack.addCue(cue);\n });\n }\n });\n\n return tech.textTracks();\n};\n\nexports['default'] = { textTracksToJson: textTracksToJson, jsonToTextTracks: jsonToTextTracks, trackToJson_: trackToJson_ };\nmodule.exports = exports['default'];\n\n},{}],133:[function(_dereq_,module,exports){\n/**\n * @file text-track-list.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _trackList = _dereq_('./track-list');\n\nvar _trackList2 = _interopRequireDefault(_trackList);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/**\n * A list of possible text tracks. All functionality is in the\n * base class TrackList. The spec for TextTrackList is located at:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter TextTrack (unsigned long index);\n * TextTrack? getTrackById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n *\n * @param {TextTrack[]} tracks A list of tracks to initialize the list with\n * @extends TrackList\n * @class TextTrackList\n */\n\nvar TextTrackList = (function (_TrackList) {\n _inherits(TextTrackList, _TrackList);\n\n function TextTrackList() {\n var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n _classCallCheck(this, TextTrackList);\n\n var list = undefined;\n\n // IE8 forces us to implement inheritance ourselves\n // as it does not support Object.defineProperty properly\n if (browser.IS_IE8) {\n list = _globalDocument2['default'].createElement('custom');\n for (var prop in _trackList2['default'].prototype) {\n if (prop !== 'constructor') {\n list[prop] = _trackList2['default'].prototype[prop];\n }\n }\n for (var prop in TextTrackList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = TextTrackList.prototype[prop];\n }\n }\n }\n\n list = _TrackList.call(this, tracks, list);\n return list;\n }\n\n TextTrackList.prototype.addTrack_ = function addTrack_(track) {\n _TrackList.prototype.addTrack_.call(this, track);\n track.addEventListener('modechange', Fn.bind(this, function () {\n this.trigger('change');\n }));\n };\n\n /**\n * Remove TextTrack from TextTrackList\n * NOTE: Be mindful of what is passed in as it may be a HTMLTrackElement\n *\n * @param {TextTrack} rtrack\n * @method removeTrack_\n * @private\n */\n\n TextTrackList.prototype.removeTrack_ = function removeTrack_(rtrack) {\n var track = undefined;\n\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] === rtrack) {\n track = this[i];\n if (track.off) {\n track.off();\n }\n\n this.tracks_.splice(i, 1);\n\n break;\n }\n }\n\n if (!track) {\n return;\n }\n\n this.trigger({\n track: track,\n type: 'removetrack'\n });\n };\n\n /**\n * Get a TextTrack from TextTrackList by a tracks id\n *\n * @param {String} id - the id of the track to get\n * @method getTrackById\n * @return {TextTrack}\n * @private\n */\n\n TextTrackList.prototype.getTrackById = function getTrackById(id) {\n var result = null;\n\n for (var i = 0, l = this.length; i < l; i++) {\n var track = this[i];\n\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n };\n\n return TextTrackList;\n})(_trackList2['default']);\n\nexports['default'] = TextTrackList;\nmodule.exports = exports['default'];\n\n},{\"../utils/browser.js\":141,\"../utils/fn.js\":146,\"./track-list\":137,\"global/document\":7}],134:[function(_dereq_,module,exports){\n/**\n * @file text-track-settings.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _component = _dereq_('../component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _utilsEventsJs = _dereq_('../utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsLogJs = _dereq_('../utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _safeJsonParseTuple = _dereq_('safe-json-parse/tuple');\n\nvar _safeJsonParseTuple2 = _interopRequireDefault(_safeJsonParseTuple);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\n/**\n * Manipulate settings of texttracks\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class TextTrackSettings\n */\n\nvar TextTrackSettings = (function (_Component) {\n _inherits(TextTrackSettings, _Component);\n\n function TextTrackSettings(player, options) {\n _classCallCheck(this, TextTrackSettings);\n\n _Component.call(this, player, options);\n this.hide();\n\n // Grab `persistTextTrackSettings` from the player options if not passed in child options\n if (options.persistTextTrackSettings === undefined) {\n this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings;\n }\n\n Events.on(this.$('.vjs-done-button'), 'click', Fn.bind(this, function () {\n this.saveSettings();\n this.hide();\n }));\n\n Events.on(this.$('.vjs-default-button'), 'click', Fn.bind(this, function () {\n this.$('.vjs-fg-color > select').selectedIndex = 0;\n this.$('.vjs-bg-color > select').selectedIndex = 0;\n this.$('.window-color > select').selectedIndex = 0;\n this.$('.vjs-text-opacity > select').selectedIndex = 0;\n this.$('.vjs-bg-opacity > select').selectedIndex = 0;\n this.$('.vjs-window-opacity > select').selectedIndex = 0;\n this.$('.vjs-edge-style select').selectedIndex = 0;\n this.$('.vjs-font-family select').selectedIndex = 0;\n this.$('.vjs-font-percent select').selectedIndex = 2;\n this.updateDisplay();\n }));\n\n Events.on(this.$('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.$('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.$('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.$('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.$('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.$('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.$('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.$('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.$('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n if (this.options_.persistTextTrackSettings) {\n this.restoreSettings();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n\n TextTrackSettings.prototype.createEl = function createEl() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-caption-settings vjs-modal-overlay',\n innerHTML: captionOptionsMenuTemplate()\n });\n };\n\n /**\n * Get texttrack settings\n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity\n *\n * @return {Object}\n * @method getValues\n */\n\n TextTrackSettings.prototype.getValues = function getValues() {\n var textEdge = getSelectedOptionValue(this.$('.vjs-edge-style select'));\n var fontFamily = getSelectedOptionValue(this.$('.vjs-font-family select'));\n var fgColor = getSelectedOptionValue(this.$('.vjs-fg-color > select'));\n var textOpacity = getSelectedOptionValue(this.$('.vjs-text-opacity > select'));\n var bgColor = getSelectedOptionValue(this.$('.vjs-bg-color > select'));\n var bgOpacity = getSelectedOptionValue(this.$('.vjs-bg-opacity > select'));\n var windowColor = getSelectedOptionValue(this.$('.window-color > select'));\n var windowOpacity = getSelectedOptionValue(this.$('.vjs-window-opacity > select'));\n var fontPercent = _globalWindow2['default']['parseFloat'](getSelectedOptionValue(this.$('.vjs-font-percent > select')));\n\n var result = {\n 'backgroundOpacity': bgOpacity,\n 'textOpacity': textOpacity,\n 'windowOpacity': windowOpacity,\n 'edgeStyle': textEdge,\n 'fontFamily': fontFamily,\n 'color': fgColor,\n 'backgroundColor': bgColor,\n 'windowColor': windowColor,\n 'fontPercent': fontPercent\n };\n for (var _name in result) {\n if (result[_name] === '' || result[_name] === 'none' || _name === 'fontPercent' && result[_name] === 1.00) {\n delete result[_name];\n }\n }\n return result;\n };\n\n /**\n * Set texttrack settings\n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity\n *\n * @param {Object} values Object with texttrack setting values\n * @method setValues\n */\n\n TextTrackSettings.prototype.setValues = function setValues(values) {\n setSelectedOption(this.$('.vjs-edge-style select'), values.edgeStyle);\n setSelectedOption(this.$('.vjs-font-family select'), values.fontFamily);\n setSelectedOption(this.$('.vjs-fg-color > select'), values.color);\n setSelectedOption(this.$('.vjs-text-opacity > select'), values.textOpacity);\n setSelectedOption(this.$('.vjs-bg-color > select'), values.backgroundColor);\n setSelectedOption(this.$('.vjs-bg-opacity > select'), values.backgroundOpacity);\n setSelectedOption(this.$('.window-color > select'), values.windowColor);\n setSelectedOption(this.$('.vjs-window-opacity > select'), values.windowOpacity);\n\n var fontPercent = values.fontPercent;\n\n if (fontPercent) {\n fontPercent = fontPercent.toFixed(2);\n }\n\n setSelectedOption(this.$('.vjs-font-percent > select'), fontPercent);\n };\n\n /**\n * Restore texttrack settings\n *\n * @method restoreSettings\n */\n\n TextTrackSettings.prototype.restoreSettings = function restoreSettings() {\n var err = undefined,\n values = undefined;\n\n try {\n var _safeParseTuple = _safeJsonParseTuple2['default'](_globalWindow2['default'].localStorage.getItem('vjs-text-track-settings'));\n\n err = _safeParseTuple[0];\n values = _safeParseTuple[1];\n\n if (err) {\n _utilsLogJs2['default'].error(err);\n }\n } catch (e) {\n _utilsLogJs2['default'].warn(e);\n }\n\n if (values) {\n this.setValues(values);\n }\n };\n\n /**\n * Save texttrack settings to local storage\n *\n * @method saveSettings\n */\n\n TextTrackSettings.prototype.saveSettings = function saveSettings() {\n if (!this.options_.persistTextTrackSettings) {\n return;\n }\n\n var values = this.getValues();\n try {\n if (Object.getOwnPropertyNames(values).length > 0) {\n _globalWindow2['default'].localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n } else {\n _globalWindow2['default'].localStorage.removeItem('vjs-text-track-settings');\n }\n } catch (e) {\n _utilsLogJs2['default'].warn(e);\n }\n };\n\n /**\n * Update display of texttrack settings\n *\n * @method updateDisplay\n */\n\n TextTrackSettings.prototype.updateDisplay = function updateDisplay() {\n var ttDisplay = this.player_.getChild('textTrackDisplay');\n if (ttDisplay) {\n ttDisplay.updateDisplay();\n }\n };\n\n return TextTrackSettings;\n})(_component2['default']);\n\n_component2['default'].registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n var selectedOption = undefined;\n // not all browsers support selectedOptions, so, fallback to options\n if (target.selectedOptions) {\n selectedOption = target.selectedOptions[0];\n } else if (target.options) {\n selectedOption = target.options[target.options.selectedIndex];\n }\n\n return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n if (!value) {\n return;\n }\n\n var i = undefined;\n for (i = 0; i < target.options.length; i++) {\n var option = target.options[i];\n if (option.value === value) {\n break;\n }\n }\n\n target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n var template = '<div class=\"vjs-tracksettings\">\\n <div class=\"vjs-tracksettings-colors\">\\n <div class=\"vjs-fg-color vjs-tracksetting\">\\n <label class=\"vjs-label\">Foreground</label>\\n <select>\\n <option value=\"\">---</option>\\n <option value=\"#FFF\">White</option>\\n <option value=\"#000\">Black</option>\\n <option value=\"#F00\">Red</option>\\n <option value=\"#0F0\">Green</option>\\n <option value=\"#00F\">Blue</option>\\n <option value=\"#FF0\">Yellow</option>\\n <option value=\"#F0F\">Magenta</option>\\n <option value=\"#0FF\">Cyan</option>\\n </select>\\n <span class=\"vjs-text-opacity vjs-opacity\">\\n <select>\\n <option value=\"\">---</option>\\n <option value=\"1\">Opaque</option>\\n <option value=\"0.5\">Semi-Opaque</option>\\n </select>\\n </span>\\n </div> <!-- vjs-fg-color -->\\n <div class=\"vjs-bg-color vjs-tracksetting\">\\n <label class=\"vjs-label\">Background</label>\\n <select>\\n <option value=\"\">---</option>\\n <option value=\"#FFF\">White</option>\\n <option value=\"#000\">Black</option>\\n <option value=\"#F00\">Red</option>\\n <option value=\"#0F0\">Green</option>\\n <option value=\"#00F\">Blue</option>\\n <option value=\"#FF0\">Yellow</option>\\n <option value=\"#F0F\">Magenta</option>\\n <option value=\"#0FF\">Cyan</option>\\n </select>\\n <span class=\"vjs-bg-opacity vjs-opacity\">\\n <select>\\n <option value=\"\">---</option>\\n <option value=\"1\">Opaque</option>\\n <option value=\"0.5\">Semi-Transparent</option>\\n <option value=\"0\">Transparent</option>\\n </select>\\n </span>\\n </div> <!-- vjs-bg-color -->\\n <div class=\"window-color vjs-tracksetting\">\\n <label class=\"vjs-label\">Window</label>\\n <select>\\n <option value=\"\">---</option>\\n <option value=\"#FFF\">White</option>\\n <option value=\"#000\">Black</option>\\n <option value=\"#F00\">Red</option>\\n <option value=\"#0F0\">Green</option>\\n <option value=\"#00F\">Blue</option>\\n <option value=\"#FF0\">Yellow</option>\\n <option value=\"#F0F\">Magenta</option>\\n <option value=\"#0FF\">Cyan</option>\\n </select>\\n <span class=\"vjs-window-opacity vjs-opacity\">\\n <select>\\n <option value=\"\">---</option>\\n <option value=\"1\">Opaque</option>\\n <option value=\"0.5\">Semi-Transparent</option>\\n <option value=\"0\">Transparent</option>\\n </select>\\n </span>\\n </div> <!-- vjs-window-color -->\\n </div> <!-- vjs-tracksettings -->\\n <div class=\"vjs-tracksettings-font\">\\n <div class=\"vjs-font-percent vjs-tracksetting\">\\n <label class=\"vjs-label\">Font Size</label>\\n <select>\\n <option value=\"0.50\">50%</option>\\n <option value=\"0.75\">75%</option>\\n <option value=\"1.00\" selected>100%</option>\\n <option value=\"1.25\">125%</option>\\n <option value=\"1.50\">150%</option>\\n <option value=\"1.75\">175%</option>\\n <option value=\"2.00\">200%</option>\\n <option value=\"3.00\">300%</option>\\n <option value=\"4.00\">400%</option>\\n </select>\\n </div> <!-- vjs-font-percent -->\\n <div class=\"vjs-edge-style vjs-tracksetting\">\\n <label class=\"vjs-label\">Text Edge Style</label>\\n <select>\\n <option value=\"none\">None</option>\\n <option value=\"raised\">Raised</option>\\n <option value=\"depressed\">Depressed</option>\\n <option value=\"uniform\">Uniform</option>\\n <option value=\"dropshadow\">Dropshadow</option>\\n </select>\\n </div> <!-- vjs-edge-style -->\\n <div class=\"vjs-font-family vjs-tracksetting\">\\n <label class=\"vjs-label\">Font Family</label>\\n <select>\\n <option value=\"\">Default</option>\\n <option value=\"monospaceSerif\">Monospace Serif</option>\\n <option value=\"proportionalSerif\">Proportional Serif</option>\\n <option value=\"monospaceSansSerif\">Monospace Sans-Serif</option>\\n <option value=\"proportionalSansSerif\">Proportional Sans-Serif</option>\\n <option value=\"casual\">Casual</option>\\n <option value=\"script\">Script</option>\\n <option value=\"small-caps\">Small Caps</option>\\n </select>\\n </div> <!-- vjs-font-family -->\\n </div>\\n </div>\\n <div class=\"vjs-tracksettings-controls\">\\n <button class=\"vjs-default-button\">Defaults</button>\\n <button class=\"vjs-done-button\">Done</button>\\n </div>';\n\n return template;\n}\n\nexports['default'] = TextTrackSettings;\nmodule.exports = exports['default'];\n\n},{\"../component\":66,\"../utils/events.js\":145,\"../utils/fn.js\":146,\"../utils/log.js\":149,\"global/window\":8,\"safe-json-parse/tuple\":57}],135:[function(_dereq_,module,exports){\n/**\n * @file text-track.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _textTrackCueList = _dereq_('./text-track-cue-list');\n\nvar _textTrackCueList2 = _interopRequireDefault(_textTrackCueList);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _trackEnums = _dereq_('./track-enums');\n\nvar _utilsLogJs = _dereq_('../utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _trackJs = _dereq_('./track.js');\n\nvar _trackJs2 = _interopRequireDefault(_trackJs);\n\nvar _utilsUrlJs = _dereq_('../utils/url.js');\n\nvar _xhr = _dereq_('xhr');\n\nvar _xhr2 = _interopRequireDefault(_xhr);\n\nvar _utilsMergeOptions = _dereq_('../utils/merge-options');\n\nvar _utilsMergeOptions2 = _interopRequireDefault(_utilsMergeOptions);\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\n/**\n * takes a webvtt file contents and parses it into cues\n *\n * @param {String} srcContent webVTT file contents\n * @param {Track} track track to addcues to\n */\nvar parseCues = function parseCues(srcContent, track) {\n var parser = new _globalWindow2['default'].WebVTT.Parser(_globalWindow2['default'], _globalWindow2['default'].vttjs, _globalWindow2['default'].WebVTT.StringDecoder());\n var errors = [];\n\n parser.oncue = function (cue) {\n track.addCue(cue);\n };\n\n parser.onparsingerror = function (error) {\n errors.push(error);\n };\n\n parser.onflush = function () {\n track.trigger({\n type: 'loadeddata',\n target: track\n });\n };\n\n parser.parse(srcContent);\n if (errors.length > 0) {\n if (console.groupCollapsed) {\n console.groupCollapsed('Text Track parsing errors for ' + track.src);\n }\n errors.forEach(function (error) {\n return _utilsLogJs2['default'].error(error);\n });\n if (console.groupEnd) {\n console.groupEnd();\n }\n }\n\n parser.flush();\n};\n\n/**\n * load a track from a specifed url\n *\n * @param {String} src url to load track from\n * @param {Track} track track to addcues to\n */\nvar loadTrack = function loadTrack(src, track) {\n var opts = {\n uri: src\n };\n var crossOrigin = _utilsUrlJs.isCrossOrigin(src);\n\n if (crossOrigin) {\n opts.cors = crossOrigin;\n }\n\n _xhr2['default'](opts, Fn.bind(this, function (err, response, responseBody) {\n if (err) {\n return _utilsLogJs2['default'].error(err, response);\n }\n\n track.loaded_ = true;\n\n // Make sure that vttjs has loaded, otherwise, wait till it finished loading\n // NOTE: this is only used for the alt/video.novtt.js build\n if (typeof _globalWindow2['default'].WebVTT !== 'function') {\n if (track.tech_) {\n (function () {\n var loadHandler = function loadHandler() {\n return parseCues(responseBody, track);\n };\n track.tech_.on('vttjsloaded', loadHandler);\n track.tech_.on('vttjserror', function () {\n _utilsLogJs2['default'].error('vttjs failed to load, stopping trying to process ' + track.src);\n track.tech_.off('vttjsloaded', loadHandler);\n });\n })();\n }\n } else {\n parseCues(responseBody, track);\n }\n }));\n};\n\n/**\n * A single text track as defined in:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n * readonly attribute TextTrackKind kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n *\n * readonly attribute DOMString id;\n * readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n * attribute TextTrackMode mode;\n *\n * readonly attribute TextTrackCueList? cues;\n * readonly attribute TextTrackCueList? activeCues;\n *\n * void addCue(TextTrackCue cue);\n * void removeCue(TextTrackCue cue);\n *\n * attribute EventHandler oncuechange;\n * };\n *\n * @param {Object=} options Object of option names and values\n * @extends Track\n * @class TextTrack\n */\n\nvar TextTrack = (function (_Track) {\n _inherits(TextTrack, _Track);\n\n function TextTrack() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n _classCallCheck(this, TextTrack);\n\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n var settings = _utilsMergeOptions2['default'](options, {\n kind: _trackEnums.TextTrackKind[options.kind] || 'subtitles',\n language: options.language || options.srclang || ''\n });\n var mode = _trackEnums.TextTrackMode[settings.mode] || 'disabled';\n var default_ = settings['default'];\n\n if (settings.kind === 'metadata' || settings.kind === 'chapters') {\n mode = 'hidden';\n }\n // on IE8 this will be a document element\n // for every other browser this will be a normal object\n var tt = _Track.call(this, settings);\n tt.tech_ = settings.tech;\n\n if (browser.IS_IE8) {\n for (var prop in TextTrack.prototype) {\n if (prop !== 'constructor') {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n var cues = new _textTrackCueList2['default'](tt.cues_);\n var activeCues = new _textTrackCueList2['default'](tt.activeCues_);\n var changed = false;\n var timeupdateHandler = Fn.bind(tt, function () {\n this.activeCues;\n if (changed) {\n this.trigger('cuechange');\n changed = false;\n }\n });\n\n if (mode !== 'disabled') {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }\n\n Object.defineProperty(tt, 'default', {\n get: function get() {\n return default_;\n },\n set: function set() {}\n });\n\n Object.defineProperty(tt, 'mode', {\n get: function get() {\n return mode;\n },\n set: function set(newMode) {\n if (!_trackEnums.TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n this.tech_.on('timeupdate', timeupdateHandler);\n }\n this.trigger('modechange');\n }\n });\n\n Object.defineProperty(tt, 'cues', {\n get: function get() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: function set() {}\n });\n\n Object.defineProperty(tt, 'activeCues', {\n get: function get() {\n if (!this.loaded_) {\n return null;\n }\n\n // nothing to do\n if (this.cues.length === 0) {\n return activeCues;\n }\n\n var ct = this.tech_.currentTime();\n var active = [];\n\n for (var i = 0, l = this.cues.length; i < l; i++) {\n var cue = this.cues[i];\n\n if (cue.startTime <= ct && cue.endTime >= ct) {\n active.push(cue);\n } else if (cue.startTime === cue.endTime && cue.startTime <= ct && cue.startTime + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (var i = 0; i < active.length; i++) {\n if (this.activeCues_.indexOf(active[i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n\n return activeCues;\n },\n set: function set() {}\n });\n\n if (settings.src) {\n tt.src = settings.src;\n loadTrack(settings.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n return tt;\n }\n\n /**\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\n\n /**\n * add a cue to the internal list of cues\n *\n * @param {Object} cue the cue to add to our internal list\n * @method addCue\n */\n\n TextTrack.prototype.addCue = function addCue(cue) {\n var tracks = this.tech_.textTracks();\n\n if (tracks) {\n for (var i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n }\n\n this.cues_.push(cue);\n this.cues.setCues_(this.cues_);\n };\n\n /**\n * remvoe a cue from our internal list\n *\n * @param {Object} removeCue the cue to remove from our internal list\n * @method removeCue\n */\n\n TextTrack.prototype.removeCue = function removeCue(_removeCue) {\n var removed = false;\n\n for (var i = 0, l = this.cues_.length; i < l; i++) {\n var cue = this.cues_[i];\n\n if (cue === _removeCue) {\n this.cues_.splice(i, 1);\n removed = true;\n }\n }\n\n if (removed) {\n this.cues.setCues_(this.cues_);\n }\n };\n\n return TextTrack;\n})(_trackJs2['default']);\n\nTextTrack.prototype.allowedEvents_ = {\n cuechange: 'cuechange'\n};\n\nexports['default'] = TextTrack;\nmodule.exports = exports['default'];\n\n},{\"../utils/browser.js\":141,\"../utils/fn.js\":146,\"../utils/log.js\":149,\"../utils/merge-options\":150,\"../utils/url.js\":154,\"./text-track-cue-list\":130,\"./track-enums\":136,\"./track.js\":138,\"global/document\":7,\"global/window\":8,\"xhr\":60}],136:[function(_dereq_,module,exports){\n/**\n * @file track-kinds.js\n */\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind\n *\n * enum VideoTrackKind {\n * \"alternative\",\n * \"captions\",\n * \"main\",\n * \"sign\",\n * \"subtitles\",\n * \"commentary\",\n * \"\",\n * };\n */\n'use strict';\n\nexports.__esModule = true;\nvar VideoTrackKind = {\n alternative: 'alternative',\n captions: 'captions',\n main: 'main',\n sign: 'sign',\n subtitles: 'subtitles',\n commentary: 'commentary'\n};\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind\n *\n * enum AudioTrackKind {\n * \"alternative\",\n * \"descriptions\",\n * \"main\",\n * \"main-desc\",\n * \"translation\",\n * \"commentary\",\n * \"\",\n * };\n */\nvar AudioTrackKind = {\n alternative: 'alternative',\n descriptions: 'descriptions',\n main: 'main',\n 'main-desc': 'main-desc',\n translation: 'translation',\n commentary: 'commentary'\n};\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind {\n * \"subtitles\",\n * \"captions\",\n * \"descriptions\",\n * \"chapters\",\n * \"metadata\"\n * };\n */\nvar TextTrackKind = {\n subtitles: 'subtitles',\n captions: 'captions',\n descriptions: 'descriptions',\n chapters: 'chapters',\n metadata: 'metadata'\n};\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\", \"hidden\", \"showing\" };\n */\nvar TextTrackMode = {\n disabled: 'disabled',\n hidden: 'hidden',\n showing: 'showing'\n};\n\n/* jshint ignore:start */\n// we ignore jshint here because it does not see\n// AudioTrackKind as defined here\nexports['default'] = { VideoTrackKind: VideoTrackKind, AudioTrackKind: AudioTrackKind, TextTrackKind: TextTrackKind, TextTrackMode: TextTrackMode };\n\n/* jshint ignore:end */\nmodule.exports = exports['default'];\n\n},{}],137:[function(_dereq_,module,exports){\n/**\n * @file track-list.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _eventTarget = _dereq_('../event-target');\n\nvar _eventTarget2 = _interopRequireDefault(_eventTarget);\n\nvar _utilsFnJs = _dereq_('../utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/**\n * Common functionaliy between Text, Audio, and Video TrackLists\n * Interfaces defined in the following spec:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html\n *\n * @param {Track[]} tracks A list of tracks to initialize the list with\n * @param {Object} list the child object with inheritance done manually for ie8\n * @extends EventTarget\n * @class TrackList\n */\n\nvar TrackList = (function (_EventTarget) {\n _inherits(TrackList, _EventTarget);\n\n function TrackList() {\n var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n var list = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n _classCallCheck(this, TrackList);\n\n _EventTarget.call(this);\n if (!list) {\n list = this;\n if (browser.IS_IE8) {\n list = _globalDocument2['default'].createElement('custom');\n for (var prop in TrackList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = TrackList.prototype[prop];\n }\n }\n }\n }\n\n list.tracks_ = [];\n Object.defineProperty(list, 'length', {\n get: function get() {\n return this.tracks_.length;\n }\n });\n\n for (var i = 0; i < tracks.length; i++) {\n list.addTrack_(tracks[i]);\n }\n\n return list;\n }\n\n /**\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n */\n\n /**\n * Add a Track from TrackList\n *\n * @param {Mixed} track\n * @method addTrack_\n * @private\n */\n\n TrackList.prototype.addTrack_ = function addTrack_(track) {\n var index = this.tracks_.length;\n\n if (!('' + index in this)) {\n Object.defineProperty(this, index, {\n get: function get() {\n return this.tracks_[index];\n }\n });\n }\n\n // Do not add duplicate tracks\n if (this.tracks_.indexOf(track) === -1) {\n this.tracks_.push(track);\n this.trigger({\n track: track,\n type: 'addtrack'\n });\n }\n };\n\n /**\n * Remove a Track from TrackList\n *\n * @param {Track} rtrack track to be removed\n * @method removeTrack_\n * @private\n */\n\n TrackList.prototype.removeTrack_ = function removeTrack_(rtrack) {\n var track = undefined;\n\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] === rtrack) {\n track = this[i];\n if (track.off) {\n track.off();\n }\n\n this.tracks_.splice(i, 1);\n\n break;\n }\n }\n\n if (!track) {\n return;\n }\n\n this.trigger({\n track: track,\n type: 'removetrack'\n });\n };\n\n /**\n * Get a Track from the TrackList by a tracks id\n *\n * @param {String} id - the id of the track to get\n * @method getTrackById\n * @return {Track}\n * @private\n */\n\n TrackList.prototype.getTrackById = function getTrackById(id) {\n var result = null;\n\n for (var i = 0, l = this.length; i < l; i++) {\n var track = this[i];\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n };\n\n return TrackList;\n})(_eventTarget2['default']);\n\nTrackList.prototype.allowedEvents_ = {\n change: 'change',\n addtrack: 'addtrack',\n removetrack: 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (var _event in TrackList.prototype.allowedEvents_) {\n TrackList.prototype['on' + _event] = null;\n}\n\nexports['default'] = TrackList;\nmodule.exports = exports['default'];\n\n},{\"../event-target\":104,\"../utils/browser.js\":141,\"../utils/fn.js\":146,\"global/document\":7}],138:[function(_dereq_,module,exports){\n/**\n * @file track.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _utilsGuidJs = _dereq_('../utils/guid.js');\n\nvar Guid = _interopRequireWildcard(_utilsGuidJs);\n\nvar _eventTarget = _dereq_('../event-target');\n\nvar _eventTarget2 = _interopRequireDefault(_eventTarget);\n\n/**\n * setup the common parts of an audio, video, or text track\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html\n *\n * @param {String} type The type of track we are dealing with audio|video|text\n * @param {Object=} options Object of option names and values\n * @extends EventTarget\n * @class Track\n */\n\nvar Track = (function (_EventTarget) {\n _inherits(Track, _EventTarget);\n\n function Track() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n _classCallCheck(this, Track);\n\n _EventTarget.call(this);\n\n var track = this;\n if (browser.IS_IE8) {\n track = _globalDocument2['default'].createElement('custom');\n for (var prop in Track.prototype) {\n if (prop !== 'constructor') {\n track[prop] = Track.prototype[prop];\n }\n }\n }\n\n var trackProps = {\n id: options.id || 'vjs_track_' + Guid.newGUID(),\n kind: options.kind || '',\n label: options.label || '',\n language: options.language || ''\n };\n\n var _loop = function (key) {\n Object.defineProperty(track, key, {\n get: function get() {\n return trackProps[key];\n },\n set: function set() {}\n });\n };\n\n for (var key in trackProps) {\n _loop(key);\n }\n\n return track;\n }\n\n return Track;\n})(_eventTarget2['default']);\n\nexports['default'] = Track;\nmodule.exports = exports['default'];\n\n},{\"../event-target\":104,\"../utils/browser.js\":141,\"../utils/guid.js\":148,\"global/document\":7}],139:[function(_dereq_,module,exports){\n/**\n * @file video-track-list.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _trackList = _dereq_('./track-list');\n\nvar _trackList2 = _interopRequireDefault(_trackList);\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/**\n * disable other video tracks before selecting the new one\n *\n * @param {Array|VideoTrackList} list list to work on\n * @param {VideoTrack} track the track to skip\n */\nvar disableOthers = function disableOthers(list, track) {\n for (var i = 0; i < list.length; i++) {\n if (track.id === list[i].id) {\n continue;\n }\n // another audio track is enabled, disable it\n list[i].selected = false;\n }\n};\n\n/**\n* A list of possiblee video tracks. Most functionality is in the\n * base class Tracklist and the spec for VideoTrackList is located at:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist\n *\n * interface VideoTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter VideoTrack (unsigned long index);\n * VideoTrack? getTrackById(DOMString id);\n * readonly attribute long selectedIndex;\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n *\n * @param {VideoTrack[]} tracks a list of video tracks to instantiate the list with\n # @extends TrackList\n * @class VideoTrackList\n */\n\nvar VideoTrackList = (function (_TrackList) {\n _inherits(VideoTrackList, _TrackList);\n\n function VideoTrackList() {\n var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n _classCallCheck(this, VideoTrackList);\n\n var list = undefined;\n\n // make sure only 1 track is enabled\n // sorted from last index to first index\n for (var i = tracks.length - 1; i >= 0; i--) {\n if (tracks[i].selected) {\n disableOthers(tracks, tracks[i]);\n break;\n }\n }\n\n // IE8 forces us to implement inheritance ourselves\n // as it does not support Object.defineProperty properly\n if (browser.IS_IE8) {\n list = _globalDocument2['default'].createElement('custom');\n for (var prop in _trackList2['default'].prototype) {\n if (prop !== 'constructor') {\n list[prop] = _trackList2['default'].prototype[prop];\n }\n }\n for (var prop in VideoTrackList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = VideoTrackList.prototype[prop];\n }\n }\n }\n\n list = _TrackList.call(this, tracks, list);\n list.changing_ = false;\n\n Object.defineProperty(list, 'selectedIndex', {\n get: function get() {\n for (var i = 0; i < this.length; i++) {\n if (this[i].selected) {\n return i;\n }\n }\n return -1;\n },\n set: function set() {}\n });\n\n return list;\n }\n\n VideoTrackList.prototype.addTrack_ = function addTrack_(track) {\n var _this = this;\n\n if (track.selected) {\n disableOthers(this, track);\n }\n\n _TrackList.prototype.addTrack_.call(this, track);\n // native tracks don't have this\n if (!track.addEventListener) {\n return;\n }\n track.addEventListener('selectedchange', function () {\n if (_this.changing_) {\n return;\n }\n _this.changing_ = true;\n disableOthers(_this, track);\n _this.changing_ = false;\n _this.trigger('change');\n });\n };\n\n VideoTrackList.prototype.addTrack = function addTrack(track) {\n this.addTrack_(track);\n };\n\n VideoTrackList.prototype.removeTrack = function removeTrack(track) {\n _TrackList.prototype.removeTrack_.call(this, track);\n };\n\n return VideoTrackList;\n})(_trackList2['default']);\n\nexports['default'] = VideoTrackList;\nmodule.exports = exports['default'];\n\n},{\"../utils/browser.js\":141,\"./track-list\":137,\"global/document\":7}],140:[function(_dereq_,module,exports){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _trackEnums = _dereq_('./track-enums');\n\nvar _track = _dereq_('./track');\n\nvar _track2 = _interopRequireDefault(_track);\n\nvar _utilsMergeOptions = _dereq_('../utils/merge-options');\n\nvar _utilsMergeOptions2 = _interopRequireDefault(_utilsMergeOptions);\n\nvar _utilsBrowserJs = _dereq_('../utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\n/**\n * A single video text track as defined in:\n * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack\n *\n * interface VideoTrack {\n * readonly attribute DOMString id;\n * readonly attribute DOMString kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n * attribute boolean selected;\n * };\n *\n * @param {Object=} options Object of option names and values\n * @class VideoTrack\n */\n\nvar VideoTrack = (function (_Track) {\n _inherits(VideoTrack, _Track);\n\n function VideoTrack() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n _classCallCheck(this, VideoTrack);\n\n var settings = _utilsMergeOptions2['default'](options, {\n kind: _trackEnums.VideoTrackKind[options.kind] || ''\n });\n\n // on IE8 this will be a document element\n // for every other browser this will be a normal object\n var track = _Track.call(this, settings);\n var selected = false;\n\n if (browser.IS_IE8) {\n for (var prop in VideoTrack.prototype) {\n if (prop !== 'constructor') {\n track[prop] = VideoTrack.prototype[prop];\n }\n }\n }\n\n Object.defineProperty(track, 'selected', {\n get: function get() {\n return selected;\n },\n set: function set(newSelected) {\n // an invalid or unchanged value\n if (typeof newSelected !== 'boolean' || newSelected === selected) {\n return;\n }\n selected = newSelected;\n this.trigger('selectedchange');\n }\n });\n\n // if the user sets this track to selected then\n // set selected to that true value otherwise\n // we keep it false\n if (settings.selected) {\n track.selected = settings.selected;\n }\n\n return track;\n }\n\n return VideoTrack;\n})(_track2['default']);\n\nexports['default'] = VideoTrack;\nmodule.exports = exports['default'];\n\n},{\"../utils/browser.js\":141,\"../utils/merge-options\":150,\"./track\":138,\"./track-enums\":136}],141:[function(_dereq_,module,exports){\n/**\n * @file browser.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar USER_AGENT = _globalWindow2['default'].navigator.userAgent;\nvar webkitVersionMap = /AppleWebKit\\/([\\d.]+)/i.exec(USER_AGENT);\nvar appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nvar IS_IPAD = /iPad/i.test(USER_AGENT);\n\nexports.IS_IPAD = IS_IPAD;\n// The Facebook app's UIWebView identifies as both an iPhone and iPad, so\n// to identify iPhones, we need to exclude iPads.\n// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/\nvar IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD;\nexports.IS_IPHONE = IS_IPHONE;\nvar IS_IPOD = /iPod/i.test(USER_AGENT);\nexports.IS_IPOD = IS_IPOD;\nvar IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexports.IS_IOS = IS_IOS;\nvar IOS_VERSION = (function () {\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n if (match && match[1]) {\n return match[1];\n }\n})();\n\nexports.IOS_VERSION = IOS_VERSION;\nvar IS_ANDROID = /Android/i.test(USER_AGENT);\nexports.IS_ANDROID = IS_ANDROID;\nvar ANDROID_VERSION = (function () {\n // This matches Android Major.Minor.Patch versions\n // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n major,\n minor;\n\n if (!match) {\n return null;\n }\n\n major = match[1] && parseFloat(match[1]);\n minor = match[2] && parseFloat(match[2]);\n\n if (major && minor) {\n return parseFloat(match[1] + '.' + match[2]);\n } else if (major) {\n return major;\n } else {\n return null;\n }\n})();\nexports.ANDROID_VERSION = ANDROID_VERSION;\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nvar IS_OLD_ANDROID = IS_ANDROID && /webkit/i.test(USER_AGENT) && ANDROID_VERSION < 2.3;\nexports.IS_OLD_ANDROID = IS_OLD_ANDROID;\nvar IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nexports.IS_NATIVE_ANDROID = IS_NATIVE_ANDROID;\nvar IS_FIREFOX = /Firefox/i.test(USER_AGENT);\nexports.IS_FIREFOX = IS_FIREFOX;\nvar IS_EDGE = /Edge/i.test(USER_AGENT);\nexports.IS_EDGE = IS_EDGE;\nvar IS_CHROME = !IS_EDGE && /Chrome/i.test(USER_AGENT);\nexports.IS_CHROME = IS_CHROME;\nvar IS_IE8 = /MSIE\\s8\\.0/.test(USER_AGENT);\n\nexports.IS_IE8 = IS_IE8;\nvar IS_SAFARI = /Safari/i.test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE;\nexports.IS_SAFARI = IS_SAFARI;\nvar IS_ANY_SAFARI = IS_SAFARI || IS_IOS;\n\nexports.IS_ANY_SAFARI = IS_ANY_SAFARI;\nvar TOUCH_ENABLED = !!('ontouchstart' in _globalWindow2['default'] || _globalWindow2['default'].DocumentTouch && _globalDocument2['default'] instanceof _globalWindow2['default'].DocumentTouch);\nexports.TOUCH_ENABLED = TOUCH_ENABLED;\nvar BACKGROUND_SIZE_SUPPORTED = ('backgroundSize' in _globalDocument2['default'].createElement('video').style);\nexports.BACKGROUND_SIZE_SUPPORTED = BACKGROUND_SIZE_SUPPORTED;\n\n},{\"global/document\":7,\"global/window\":8}],142:[function(_dereq_,module,exports){\n/**\n * @file buffer.js\n */\n'use strict';\n\nexports.__esModule = true;\nexports.bufferedPercent = bufferedPercent;\n\nvar _timeRangesJs = _dereq_('./time-ranges.js');\n\n/**\n * Compute how much your video has been buffered\n *\n * @param {Object} Buffered object\n * @param {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n * @function bufferedPercent\n */\n\nfunction bufferedPercent(buffered, duration) {\n var bufferedDuration = 0,\n start,\n end;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = _timeRangesJs.createTimeRange(0, 0);\n }\n\n for (var i = 0; i < buffered.length; i++) {\n start = buffered.start(i);\n end = buffered.end(i);\n\n // buffered end can be bigger than duration by a very small fraction\n if (end > duration) {\n end = duration;\n }\n\n bufferedDuration += end - start;\n }\n\n return bufferedDuration / duration;\n}\n\n},{\"./time-ranges.js\":152}],143:[function(_dereq_,module,exports){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _logJs = _dereq_('./log.js');\n\nvar _logJs2 = _interopRequireDefault(_logJs);\n\n/**\n * Object containing the default behaviors for available handler methods.\n *\n * @private\n * @type {Object}\n */\nvar defaultBehaviors = {\n get: function get(obj, key) {\n return obj[key];\n },\n set: function set(obj, key, value) {\n obj[key] = value;\n return true;\n }\n};\n\n/**\n * Expose private objects publicly using a Proxy to log deprecation warnings.\n *\n * Browsers that do not support Proxy objects will simply return the `target`\n * object, so it can be directly exposed.\n *\n * @param {Object} target The target object.\n * @param {Object} messages Messages to display from a Proxy. Only operations\n * with an associated message will be proxied.\n * @param {String} [messages.get]\n * @param {String} [messages.set]\n * @return {Object} A Proxy if supported or the `target` argument.\n */\n\nexports['default'] = function (target) {\n var messages = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n if (typeof Proxy === 'function') {\n var _ret = (function () {\n var handler = {};\n\n // Build a handler object based on those keys that have both messages\n // and default behaviors.\n Object.keys(messages).forEach(function (key) {\n if (defaultBehaviors.hasOwnProperty(key)) {\n handler[key] = function () {\n _logJs2['default'].warn(messages[key]);\n return defaultBehaviors[key].apply(this, arguments);\n };\n }\n });\n\n return {\n v: new Proxy(target, handler)\n };\n })();\n\n if (typeof _ret === 'object') return _ret.v;\n }\n return target;\n};\n\nmodule.exports = exports['default'];\n\n},{\"./log.js\":149}],144:[function(_dereq_,module,exports){\n/**\n * @file dom.js\n */\n'use strict';\n\nexports.__esModule = true;\nexports.getEl = getEl;\nexports.createEl = createEl;\nexports.textContent = textContent;\nexports.insertElFirst = insertElFirst;\nexports.getElData = getElData;\nexports.hasElData = hasElData;\nexports.removeElData = removeElData;\nexports.hasElClass = hasElClass;\nexports.addElClass = addElClass;\nexports.removeElClass = removeElClass;\nexports.toggleElClass = toggleElClass;\nexports.setElAttributes = setElAttributes;\nexports.getElAttributes = getElAttributes;\nexports.blockTextSelection = blockTextSelection;\nexports.unblockTextSelection = unblockTextSelection;\nexports.findElPosition = findElPosition;\nexports.getPointerPosition = getPointerPosition;\nexports.isEl = isEl;\nexports.isTextNode = isTextNode;\nexports.emptyEl = emptyEl;\nexports.normalizeContent = normalizeContent;\nexports.appendContent = appendContent;\nexports.insertContent = insertContent;\n\nvar _templateObject = _taggedTemplateLiteralLoose(['Setting attributes in the second argument of createEl()\\n has been deprecated. Use the third argument instead.\\n createEl(type, properties, attributes). Attempting to set ', ' to ', '.'], ['Setting attributes in the second argument of createEl()\\n has been deprecated. Use the third argument instead.\\n createEl(type, properties, attributes). Attempting to set ', ' to ', '.']);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _guidJs = _dereq_('./guid.js');\n\nvar Guid = _interopRequireWildcard(_guidJs);\n\nvar _logJs = _dereq_('./log.js');\n\nvar _logJs2 = _interopRequireDefault(_logJs);\n\nvar _tsml = _dereq_('tsml');\n\nvar _tsml2 = _interopRequireDefault(_tsml);\n\n/**\n * Detect if a value is a string with any non-whitespace characters.\n *\n * @param {String} str\n * @return {Boolean}\n */\nfunction isNonBlankString(str) {\n return typeof str === 'string' && /\\S/.test(str);\n}\n\n/**\n * Throws an error if the passed string has whitespace. This is used by\n * class methods to be relatively consistent with the classList API.\n *\n * @param {String} str\n * @return {Boolean}\n */\nfunction throwIfWhitespace(str) {\n if (/\\s/.test(str)) {\n throw new Error('class has illegal whitespace characters');\n }\n}\n\n/**\n * Produce a regular expression for matching a class name.\n *\n * @param {String} className\n * @return {RegExp}\n */\nfunction classRegExp(className) {\n return new RegExp('(^|\\\\s)' + className + '($|\\\\s)');\n}\n\n/**\n * Creates functions to query the DOM using a given method.\n *\n * @function createQuerier\n * @private\n * @param {String} method\n * @return {Function}\n */\nfunction createQuerier(method) {\n return function (selector, context) {\n if (!isNonBlankString(selector)) {\n return _globalDocument2['default'][method](null);\n }\n if (isNonBlankString(context)) {\n context = _globalDocument2['default'].querySelector(context);\n }\n return (isEl(context) ? context : _globalDocument2['default'])[method](selector);\n };\n}\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param {String} id Element ID\n * @return {Element} Element with supplied ID\n * @function getEl\n */\n\nfunction getEl(id) {\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n return _globalDocument2['default'].getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param {String} [tagName='div'] Name of tag to be created.\n * @param {Object} [properties={}] Element properties to be applied.\n * @param {Object} [attributes={}] Element attributes to be applied.\n * @return {Element}\n * @function createEl\n */\n\nfunction createEl() {\n var tagName = arguments.length <= 0 || arguments[0] === undefined ? 'div' : arguments[0];\n var properties = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n var el = _globalDocument2['default'].createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function (propName) {\n var val = properties[propName];\n\n // See #2176\n // We originally were accepting both properties and attributes in the\n // same object, but that doesn't work so well.\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n _logJs2['default'].warn(_tsml2['default'](_templateObject, propName, val));\n el.setAttribute(propName, val);\n } else {\n el[propName] = val;\n }\n });\n\n Object.getOwnPropertyNames(attributes).forEach(function (attrName) {\n var val = attributes[attrName];\n el.setAttribute(attrName, attributes[attrName]);\n });\n\n return el;\n}\n\n/**\n * Injects text into an element, replacing any existing contents entirely.\n *\n * @param {Element} el\n * @param {String} text\n * @return {Element}\n * @function textContent\n */\n\nfunction textContent(el, text) {\n if (typeof el.textContent === 'undefined') {\n el.innerText = text;\n } else {\n el.textContent = text;\n }\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child Element to insert\n * @param {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\n\nfunction insertElFirst(child, parent) {\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nvar elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nvar elIdAttr = 'vdata' + new Date().getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\n\nfunction getElData(el) {\n var id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = Guid.newGUID();\n }\n\n if (!elData[id]) {\n elData[id] = {};\n }\n\n return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\n\nfunction hasElData(el) {\n var id = el[elIdAttr];\n\n if (!id) {\n return false;\n }\n\n return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\n\nfunction removeElData(el) {\n var id = el[elIdAttr];\n\n if (!id) {\n return;\n }\n\n // Remove all stored data\n delete elData[id];\n\n // Remove the elIdAttr property from the DOM node\n try {\n delete el[elIdAttr];\n } catch (e) {\n if (el.removeAttribute) {\n el.removeAttribute(elIdAttr);\n } else {\n // IE doesn't appear to support removeAttribute on the document element\n el[elIdAttr] = null;\n }\n }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @function hasElClass\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n */\n\nfunction hasElClass(element, classToCheck) {\n if (element.classList) {\n return element.classList.contains(classToCheck);\n } else {\n throwIfWhitespace(classToCheck);\n return classRegExp(classToCheck).test(element.className);\n }\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @function addElClass\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n */\n\nfunction addElClass(element, classToAdd) {\n if (element.classList) {\n element.classList.add(classToAdd);\n\n // Don't need to `throwIfWhitespace` here because `hasElClass` will do it\n // in the case of classList not being supported.\n } else if (!hasElClass(element, classToAdd)) {\n element.className = (element.className + ' ' + classToAdd).trim();\n }\n\n return element;\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @function removeElClass\n * @param {Element} element Element to remove from class name\n * @param {String} classToRemove Classname to remove\n */\n\nfunction removeElClass(element, classToRemove) {\n if (element.classList) {\n element.classList.remove(classToRemove);\n } else {\n throwIfWhitespace(classToRemove);\n element.className = element.className.split(/\\s+/).filter(function (c) {\n return c !== classToRemove;\n }).join(' ');\n }\n\n return element;\n}\n\n/**\n * Adds or removes a CSS class name on an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @function toggleElClass\n * @param {Element} element\n * @param {String} classToToggle\n * @param {Boolean|Function} [predicate]\n * Can be a function that returns a Boolean. If `true`, the class\n * will be added; if `false`, the class will be removed. If not\n * given, the class will be added if not present and vice versa.\n */\n\nfunction toggleElClass(element, classToToggle, predicate) {\n\n // This CANNOT use `classList` internally because IE does not support the\n // second parameter to the `classList.toggle()` method! Which is fine because\n // `classList` will be used by the add/remove functions.\n var has = hasElClass(element, classToToggle);\n\n if (typeof predicate === 'function') {\n predicate = predicate(element, classToToggle);\n }\n\n if (typeof predicate !== 'boolean') {\n predicate = !has;\n }\n\n // If the necessary class operation matches the current state of the\n // element, no action is required.\n if (predicate === has) {\n return;\n }\n\n if (predicate) {\n addElClass(element, classToToggle);\n } else {\n removeElClass(element, classToToggle);\n }\n\n return element;\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\n\nfunction setElAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function (attrName) {\n var attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, attrValue === true ? '' : attrValue);\n }\n });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\n\nfunction getElAttributes(tag) {\n var obj, knownBooleans, attrs, attrName, attrVal;\n\n obj = {};\n\n // known boolean attributes\n // we can check for matching boolean properties, but older browsers\n // won't know about HTML5 boolean attributes that we still read from\n knownBooleans = ',' + 'autoplay,controls,loop,muted,default' + ',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n attrName = attrs[i].name;\n attrVal = attrs[i].value;\n\n // check for known booleans\n // the matching element property will return a value for typeof\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(',' + attrName + ',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = attrVal !== null ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @function blockTextSelection\n */\n\nfunction blockTextSelection() {\n _globalDocument2['default'].body.focus();\n _globalDocument2['default'].onselectstart = function () {\n return false;\n };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @function unblockTextSelection\n */\n\nfunction unblockTextSelection() {\n _globalDocument2['default'].onselectstart = function () {\n return true;\n };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @function findElPosition\n * @param {Element} el Element from which to get offset\n * @return {Object}\n */\n\nfunction findElPosition(el) {\n var box = undefined;\n\n if (el.getBoundingClientRect && el.parentNode) {\n box = el.getBoundingClientRect();\n }\n\n if (!box) {\n return {\n left: 0,\n top: 0\n };\n }\n\n var docEl = _globalDocument2['default'].documentElement;\n var body = _globalDocument2['default'].body;\n\n var clientLeft = docEl.clientLeft || body.clientLeft || 0;\n var scrollLeft = _globalWindow2['default'].pageXOffset || body.scrollLeft;\n var left = box.left + scrollLeft - clientLeft;\n\n var clientTop = docEl.clientTop || body.clientTop || 0;\n var scrollTop = _globalWindow2['default'].pageYOffset || body.scrollTop;\n var top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: Math.round(left),\n top: Math.round(top)\n };\n}\n\n/**\n * Get pointer position in element\n * Returns an object with x and y coordinates.\n * The base on the coordinates are the bottom left of the element.\n *\n * @function getPointerPosition\n * @param {Element} el Element on which to get the pointer position on\n * @param {Event} event Event object\n * @return {Object} This object will have x and y coordinates corresponding to the mouse position\n */\n\nfunction getPointerPosition(el, event) {\n var position = {};\n var box = findElPosition(el);\n var boxW = el.offsetWidth;\n var boxH = el.offsetHeight;\n\n var boxY = box.top;\n var boxX = box.left;\n var pageY = event.pageY;\n var pageX = event.pageX;\n\n if (event.changedTouches) {\n pageX = event.changedTouches[0].pageX;\n pageY = event.changedTouches[0].pageY;\n }\n\n position.y = Math.max(0, Math.min(1, (boxY - pageY + boxH) / boxH));\n position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n\n return position;\n}\n\n/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @function isEl\n * @param {Mixed} value\n * @return {Boolean}\n */\n\nfunction isEl(value) {\n return !!value && typeof value === 'object' && value.nodeType === 1;\n}\n\n/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @param {Mixed} value\n * @return {Boolean}\n */\n\nfunction isTextNode(value) {\n return !!value && typeof value === 'object' && value.nodeType === 3;\n}\n\n/**\n * Empties the contents of an element.\n *\n * @function emptyEl\n * @param {Element} el\n * @return {Element}\n */\n\nfunction emptyEl(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n return el;\n}\n\n/**\n * Normalizes content for eventual insertion into the DOM.\n *\n * This allows a wide range of content definition methods, but protects\n * from falling into the trap of simply writing to `innerHTML`, which is\n * an XSS concern.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n * Normalized into a text node.\n *\n * - Element, TextNode\n * Passed through.\n *\n * - Array\n * A one-dimensional array of strings, elements, nodes, or functions (which\n * return single strings, elements, or nodes).\n *\n * - Function\n * If the sole argument, is expected to produce a string, element,\n * node, or array.\n *\n * @function normalizeContent\n * @param {String|Element|TextNode|Array|Function} content\n * @return {Array}\n */\n\nfunction normalizeContent(content) {\n\n // First, invoke content if it is a function. If it produces an array,\n // that needs to happen before normalization.\n if (typeof content === 'function') {\n content = content();\n }\n\n // Next up, normalize to an array, so one or many items can be normalized,\n // filtered, and returned.\n return (Array.isArray(content) ? content : [content]).map(function (value) {\n\n // First, invoke value if it is a function to produce a new value,\n // which will be subsequently normalized to a Node of some kind.\n if (typeof value === 'function') {\n value = value();\n }\n\n if (isEl(value) || isTextNode(value)) {\n return value;\n }\n\n if (typeof value === 'string' && /\\S/.test(value)) {\n return _globalDocument2['default'].createTextNode(value);\n }\n }).filter(function (value) {\n return value;\n });\n}\n\n/**\n * Normalizes and appends content to an element.\n *\n * @function appendContent\n * @param {Element} el\n * @param {String|Element|TextNode|Array|Function} content\n * See: `normalizeContent`\n * @return {Element}\n */\n\nfunction appendContent(el, content) {\n normalizeContent(content).forEach(function (node) {\n return el.appendChild(node);\n });\n return el;\n}\n\n/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * @function insertContent\n * @param {Element} el\n * @param {String|Element|TextNode|Array|Function} content\n * See: `normalizeContent`\n * @return {Element}\n */\n\nfunction insertContent(el, content) {\n return appendContent(emptyEl(el), content);\n}\n\n/**\n * Finds a single DOM element matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @function $\n * @param {String} selector\n * A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {Element|null}\n */\nvar $ = createQuerier('querySelector');\n\nexports.$ = $;\n/**\n * Finds a all DOM elements matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @function $$\n * @param {String} selector\n * A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {NodeList}\n */\nvar $$ = createQuerier('querySelectorAll');\nexports.$$ = $$;\n\n},{\"./guid.js\":148,\"./log.js\":149,\"global/document\":7,\"global/window\":8,\"tsml\":59}],145:[function(_dereq_,module,exports){\n/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\n'use strict';\n\nexports.__esModule = true;\nexports.on = on;\nexports.off = off;\nexports.trigger = trigger;\nexports.one = one;\nexports.fixEvent = fixEvent;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _domJs = _dereq_('./dom.js');\n\nvar Dom = _interopRequireWildcard(_domJs);\n\nvar _guidJs = _dereq_('./guid.js');\n\nvar Guid = _interopRequireWildcard(_guidJs);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\n\nfunction on(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n var data = Dom.getElData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) data.handlers = {};\n\n if (!data.handlers[type]) data.handlers[type] = [];\n\n if (!fn.guid) fn.guid = Guid.newGUID();\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash) {\n\n if (data.disabled) return;\n event = fixEvent(event);\n\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n handlersCopy[m].call(elem, event, hash);\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n elem.addEventListener(type, data.dispatcher, false);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\n\nfunction off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!Dom.hasElData(elem)) return;\n\n var data = Dom.getElData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) {\n return;\n }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function removeType(t) {\n data.handlers[t] = [];\n _cleanUpEvents(elem, t);\n };\n\n // Are we removing all bound events?\n if (!type) {\n for (var t in data.handlers) {\n removeType(t);\n }return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) return;\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (var n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\n\nfunction trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = Dom.hasElData(elem) ? Dom.getElData(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument;\n // type = event.type || event,\n // handler;\n\n // If an event name was passed as a string, creates an event out of it\n if (typeof event === 'string') {\n event = { type: event, target: elem };\n }\n // Normalizes the event properties.\n event = fixEvent(event);\n\n // If the passed element has a dispatcher, executes the established handlers.\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n }\n\n // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = Dom.getElData(event.target);\n\n // Checks if the target has a default action for this event.\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true;\n // Executes the default action.\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n }\n // Re-enables event dispatching.\n targetData.disabled = false;\n }\n }\n\n // Inform the triggerer if the default was prevented by returning false\n return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\n\nfunction one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function func() {\n off(elem, type, func);\n fn.apply(this, arguments);\n };\n // copy the guid to the new function so it can removed using the original function's ID\n func.guid = fn.guid = fn.guid || Guid.newGUID();\n on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\n\nfunction fixEvent(event) {\n\n function returnTrue() {\n return true;\n }\n function returnFalse() {\n return false;\n }\n\n // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n if (!event || !event.isPropagationStopped) {\n var old = event || _globalWindow2['default'].event;\n\n event = {};\n // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n // and webkitMovementX/Y\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' && key !== 'webkitMovementX' && key !== 'webkitMovementY') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n }\n\n // The event occurred on this element\n if (!event.target) {\n event.target = event.srcElement || _globalDocument2['default'];\n }\n\n // Handle which other element the event is related to\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;\n }\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.returnValue = false;\n old.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false;\n\n // Stop the event from bubbling\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n event.cancelBubble = true;\n old.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse;\n\n // Stop the event from bubbling and executing other handlers\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse;\n\n // Handle mouse position\n if (event.clientX != null) {\n var doc = _globalDocument2['default'].documentElement,\n body = _globalDocument2['default'].body;\n\n event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n\n // Handle key presses\n event.which = event.charCode || event.keyCode;\n\n // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n if (event.button != null) {\n event.button = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0;\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param {Element|Object} elem Element to clean up\n * @param {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n var data = Dom.getElData(elem);\n\n // Remove the events of a particular type if there are none left\n if (data.handlers[type].length === 0) {\n delete data.handlers[type];\n // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n\n // Remove the meta-handler from the element\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n }\n\n // Remove the events object if there are no types left\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n }\n\n // Finally remove the element data if there is no data left\n if (Object.getOwnPropertyNames(data).length === 0) {\n Dom.removeElData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn The event method we want to use.\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String} type Type of event to bind to.\n * @param {Function} callback Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function (type) {\n //Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n\n},{\"./dom.js\":144,\"./guid.js\":148,\"global/document\":7,\"global/window\":8}],146:[function(_dereq_,module,exports){\n/**\n * @file fn.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nvar _guidJs = _dereq_('./guid.js');\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n * @private\n * @method bind\n */\nvar bind = function bind(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) {\n fn.guid = _guidJs.newGUID();\n }\n\n // Create the new function that changes the context\n var ret = function ret() {\n return fn.apply(context, arguments);\n };\n\n // Allow for the ability to individualize this function\n // Needed in the case where multiple objects might share the same prototype\n // IF both items add an event listener with the same function, then you try to remove just one\n // it will remove both because they both have the same guid.\n // when using this, you need to use the bind method when you remove the listener as well.\n // currently used in text tracks\n ret.guid = uid ? uid + '_' + fn.guid : fn.guid;\n\n return ret;\n};\nexports.bind = bind;\n\n},{\"./guid.js\":148}],147:[function(_dereq_,module,exports){\n/**\n * @file format-time.js\n *\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @private\n * @function formatTime\n */\n'use strict';\n\nexports.__esModule = true;\nfunction formatTime(seconds) {\n var guide = arguments.length <= 1 || arguments[1] === undefined ? seconds : arguments[1];\n return (function () {\n seconds = seconds < 0 ? 0 : seconds;\n var s = Math.floor(seconds % 60);\n var m = Math.floor(seconds / 60 % 60);\n var h = Math.floor(seconds / 3600);\n var gm = Math.floor(guide / 60 % 60);\n var gh = Math.floor(guide / 3600);\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-';\n }\n\n // Check if we need to show hours\n h = h > 0 || gh > 0 ? h + ':' : '';\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = ((h || gm >= 10) && m < 10 ? '0' + m : m) + ':';\n\n // Check if leading zero is need for seconds\n s = s < 10 ? '0' + s : s;\n\n return h + m + s;\n })();\n}\n\nexports['default'] = formatTime;\nmodule.exports = exports['default'];\n\n},{}],148:[function(_dereq_,module,exports){\n/**\n * @file guid.js\n *\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\n\"use strict\";\n\nexports.__esModule = true;\nexports.newGUID = newGUID;\nvar _guid = 1;\n\n/**\n * Get the next unique ID\n *\n * @return {String} \n * @function newGUID\n */\n\nfunction newGUID() {\n return _guid++;\n}\n\n},{}],149:[function(_dereq_,module,exports){\n/**\n * @file log.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\n/**\n * Log plain debug messages\n */\nvar log = function log() {\n _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function () {\n _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function () {\n _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param {String} type The type of message, or `null` for `log`\n * @param {Object} args The args to be passed to the log\n * @private\n * @method _logType\n */\nfunction _logType(type, args) {\n // convert args to an array to get array functions\n var argsArray = Array.prototype.slice.call(args);\n // if there's no console then don't try to output messages\n // they will still be stored in log.history\n // Was setting these once outside of this function, but containing them\n // in the function makes it easier to test cases where console doesn't exist\n var noop = function noop() {};\n\n var console = _globalWindow2['default']['console'] || {\n 'log': noop,\n 'warn': noop,\n 'error': noop\n };\n\n if (type) {\n // add the type to the front of the message\n argsArray.unshift(type.toUpperCase() + ':');\n } else {\n // default to log with no prefix\n type = 'log';\n }\n\n // add to history\n log.history.push(argsArray);\n\n // add console prefix after adding to history\n argsArray.unshift('VIDEOJS:');\n\n // call appropriate log function\n if (console[type].apply) {\n console[type].apply(console, argsArray);\n } else {\n // ie8 doesn't allow error.apply, but it will just join() the array anyway\n console[type](argsArray.join(' '));\n }\n}\n\nexports['default'] = log;\nmodule.exports = exports['default'];\n\n},{\"global/window\":8}],150:[function(_dereq_,module,exports){\n/**\n * @file merge-options.js\n */\n'use strict';\n\nexports.__esModule = true;\nexports['default'] = mergeOptions;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lodashCompatObjectMerge = _dereq_('lodash-compat/object/merge');\n\nvar _lodashCompatObjectMerge2 = _interopRequireDefault(_lodashCompatObjectMerge);\n\nfunction isPlain(obj) {\n return !!obj && typeof obj === 'object' && obj.toString() === '[object Object]' && obj.constructor === Object;\n}\n\n/**\n * Merge customizer. video.js simply overwrites non-simple objects\n * (like arrays) instead of attempting to overlay them.\n * @see https://lodash.com/docs#merge\n */\nvar customizer = function customizer(destination, source) {\n // If we're not working with a plain object, copy the value as is\n // If source is an array, for instance, it will replace destination\n if (!isPlain(source)) {\n return source;\n }\n\n // If the new value is a plain object but the first object value is not\n // we need to create a new object for the first object to merge with.\n // This makes it consistent with how merge() works by default\n // and also protects from later changes the to first object affecting\n // the second object's values.\n if (!isPlain(destination)) {\n return mergeOptions(source);\n }\n};\n\n/**\n * Merge one or more options objects, recursively merging **only**\n * plain object properties. Previously `deepMerge`.\n *\n * @param {...Object} source One or more objects to merge\n * @returns {Object} a new object that is the union of all\n * provided objects\n * @function mergeOptions\n */\n\nfunction mergeOptions() {\n // contruct the call dynamically to handle the variable number of\n // objects to merge\n var args = Array.prototype.slice.call(arguments);\n\n // unshift an empty object into the front of the call as the target\n // of the merge\n args.unshift({});\n\n // customize conflict resolution to match our historical merge behavior\n args.push(customizer);\n\n _lodashCompatObjectMerge2['default'].apply(null, args);\n\n // return the mutated result object\n return args[0];\n}\n\nmodule.exports = exports['default'];\n\n},{\"lodash-compat/object/merge\":46}],151:[function(_dereq_,module,exports){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar createStyleElement = function createStyleElement(className) {\n var style = _globalDocument2['default'].createElement('style');\n style.className = className;\n\n return style;\n};\n\nexports.createStyleElement = createStyleElement;\nvar setTextContent = function setTextContent(el, content) {\n if (el.styleSheet) {\n el.styleSheet.cssText = content;\n } else {\n el.textContent = content;\n }\n};\nexports.setTextContent = setTextContent;\n\n},{\"global/document\":7}],152:[function(_dereq_,module,exports){\n'use strict';\n\nexports.__esModule = true;\nexports.createTimeRanges = createTimeRanges;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _logJs = _dereq_('./log.js');\n\nvar _logJs2 = _interopRequireDefault(_logJs);\n\n/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param {(Number|Array)} Start of a single range or an array of ranges\n * @param {Number} End of a single range\n * @private\n * @method createTimeRanges\n */\n\nfunction createTimeRanges(start, end) {\n if (Array.isArray(start)) {\n return createTimeRangesObj(start);\n } else if (start === undefined || end === undefined) {\n return createTimeRangesObj();\n }\n return createTimeRangesObj([[start, end]]);\n}\n\nexports.createTimeRange = createTimeRanges;\n\nfunction createTimeRangesObj(ranges) {\n if (ranges === undefined || ranges.length === 0) {\n return {\n length: 0,\n start: function start() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function end() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n }\n return {\n length: ranges.length,\n start: getRange.bind(null, 'start', 0, ranges),\n end: getRange.bind(null, 'end', 1, ranges)\n };\n}\n\nfunction getRange(fnName, valueIndex, ranges, rangeIndex) {\n if (rangeIndex === undefined) {\n _logJs2['default'].warn('DEPRECATED: Function \\'' + fnName + '\\' on \\'TimeRanges\\' called without an index argument.');\n rangeIndex = 0;\n }\n rangeCheck(fnName, rangeIndex, ranges.length - 1);\n return ranges[rangeIndex][valueIndex];\n}\n\nfunction rangeCheck(fnName, index, maxIndex) {\n if (index < 0 || index > maxIndex) {\n throw new Error('Failed to execute \\'' + fnName + '\\' on \\'TimeRanges\\': The index provided (' + index + ') is greater than or equal to the maximum bound (' + maxIndex + ').');\n }\n}\n\n},{\"./log.js\":149}],153:[function(_dereq_,module,exports){\n/**\n * @file to-title-case.js\n *\n * Uppercase the first letter of a string\n *\n * @param {String} string String to be uppercased\n * @return {String}\n * @private\n * @method toTitleCase\n */\n\"use strict\";\n\nexports.__esModule = true;\nfunction toTitleCase(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexports[\"default\"] = toTitleCase;\nmodule.exports = exports[\"default\"];\n\n},{}],154:[function(_dereq_,module,exports){\n/**\n * @file url.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nvar parseUrl = function parseUrl(url) {\n var props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n var a = _globalDocument2['default'].createElement('a');\n a.href = url;\n\n // IE8 (and 9?) Fix\n // ie8 doesn't parse the URL correctly until the anchor is actually\n // added to the body, and an innerHTML is needed to trigger the parsing\n var addToBody = a.host === '' && a.protocol !== 'file:';\n var div = undefined;\n if (addToBody) {\n div = _globalDocument2['default'].createElement('div');\n div.innerHTML = '<a href=\"' + url + '\"></a>';\n a = div.firstChild;\n // prevent the div from affecting layout\n div.setAttribute('style', 'display:none; position:absolute;');\n _globalDocument2['default'].body.appendChild(div);\n }\n\n // Copy the specific URL properties to a new object\n // This is also needed for IE8 because the anchor loses its\n // properties when it's removed from the dom\n var details = {};\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n }\n\n // IE9 adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (addToBody) {\n _globalDocument2['default'].body.removeChild(div);\n }\n\n return details;\n};\n\nexports.parseUrl = parseUrl;\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param {String} url URL to make absolute\n * @return {String} Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nvar getAbsoluteURL = function getAbsoluteURL(url) {\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n var div = _globalDocument2['default'].createElement('div');\n div.innerHTML = '<a href=\"' + url + '\">x</a>';\n url = div.firstChild.href;\n }\n\n return url;\n};\n\nexports.getAbsoluteURL = getAbsoluteURL;\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String} path The fileName path like '/path/to/file.mp4'\n * @returns {String} The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nvar getFileExtension = function getFileExtension(path) {\n if (typeof path === 'string') {\n var splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n var pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n\nexports.getFileExtension = getFileExtension;\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean} Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nvar isCrossOrigin = function isCrossOrigin(url) {\n var winLoc = _globalWindow2['default'].location;\n var urlInfo = parseUrl(url);\n\n // IE8 protocol relative urls will return ':' for protocol\n var srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;\n\n // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n var crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host;\n\n return crossOrigin;\n};\nexports.isCrossOrigin = isCrossOrigin;\n\n},{\"global/document\":7,\"global/window\":8}],155:[function(_dereq_,module,exports){\n/**\n * @file video.js\n */\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _globalWindow = _dereq_('global/window');\n\nvar _globalWindow2 = _interopRequireDefault(_globalWindow);\n\nvar _globalDocument = _dereq_('global/document');\n\nvar _globalDocument2 = _interopRequireDefault(_globalDocument);\n\nvar _setup = _dereq_('./setup');\n\nvar setup = _interopRequireWildcard(_setup);\n\nvar _utilsStylesheetJs = _dereq_('./utils/stylesheet.js');\n\nvar stylesheet = _interopRequireWildcard(_utilsStylesheetJs);\n\nvar _component = _dereq_('./component');\n\nvar _component2 = _interopRequireDefault(_component);\n\nvar _eventTarget = _dereq_('./event-target');\n\nvar _eventTarget2 = _interopRequireDefault(_eventTarget);\n\nvar _utilsEventsJs = _dereq_('./utils/events.js');\n\nvar Events = _interopRequireWildcard(_utilsEventsJs);\n\nvar _player = _dereq_('./player');\n\nvar _player2 = _interopRequireDefault(_player);\n\nvar _pluginsJs = _dereq_('./plugins.js');\n\nvar _pluginsJs2 = _interopRequireDefault(_pluginsJs);\n\nvar _srcJsUtilsMergeOptionsJs = _dereq_('../../src/js/utils/merge-options.js');\n\nvar _srcJsUtilsMergeOptionsJs2 = _interopRequireDefault(_srcJsUtilsMergeOptionsJs);\n\nvar _utilsFnJs = _dereq_('./utils/fn.js');\n\nvar Fn = _interopRequireWildcard(_utilsFnJs);\n\nvar _tracksTextTrackJs = _dereq_('./tracks/text-track.js');\n\nvar _tracksTextTrackJs2 = _interopRequireDefault(_tracksTextTrackJs);\n\nvar _tracksAudioTrackJs = _dereq_('./tracks/audio-track.js');\n\nvar _tracksAudioTrackJs2 = _interopRequireDefault(_tracksAudioTrackJs);\n\nvar _tracksVideoTrackJs = _dereq_('./tracks/video-track.js');\n\nvar _tracksVideoTrackJs2 = _interopRequireDefault(_tracksVideoTrackJs);\n\nvar _objectAssign = _dereq_('object.assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _utilsTimeRangesJs = _dereq_('./utils/time-ranges.js');\n\nvar _utilsFormatTimeJs = _dereq_('./utils/format-time.js');\n\nvar _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs);\n\nvar _utilsLogJs = _dereq_('./utils/log.js');\n\nvar _utilsLogJs2 = _interopRequireDefault(_utilsLogJs);\n\nvar _utilsDomJs = _dereq_('./utils/dom.js');\n\nvar Dom = _interopRequireWildcard(_utilsDomJs);\n\nvar _utilsBrowserJs = _dereq_('./utils/browser.js');\n\nvar browser = _interopRequireWildcard(_utilsBrowserJs);\n\nvar _utilsUrlJs = _dereq_('./utils/url.js');\n\nvar Url = _interopRequireWildcard(_utilsUrlJs);\n\nvar _extendJs = _dereq_('./extend.js');\n\nvar _extendJs2 = _interopRequireDefault(_extendJs);\n\nvar _lodashCompatObjectMerge = _dereq_('lodash-compat/object/merge');\n\nvar _lodashCompatObjectMerge2 = _interopRequireDefault(_lodashCompatObjectMerge);\n\nvar _utilsCreateDeprecationProxyJs = _dereq_('./utils/create-deprecation-proxy.js');\n\nvar _utilsCreateDeprecationProxyJs2 = _interopRequireDefault(_utilsCreateDeprecationProxyJs);\n\nvar _xhr = _dereq_('xhr');\n\nvar _xhr2 = _interopRequireDefault(_xhr);\n\n// Include the built-in techs\n\nvar _techTechJs = _dereq_('./tech/tech.js');\n\nvar _techTechJs2 = _interopRequireDefault(_techTechJs);\n\nvar _techHtml5Js = _dereq_('./tech/html5.js');\n\nvar _techHtml5Js2 = _interopRequireDefault(_techHtml5Js);\n\nvar _techFlashJs = _dereq_('./tech/flash.js');\n\nvar _techFlashJs2 = _interopRequireDefault(_techFlashJs);\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n _globalDocument2['default'].createElement('video');\n _globalDocument2['default'].createElement('audio');\n _globalDocument2['default'].createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n * var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param {String|Element} id Video element or video element ID\n * @param {Object=} options Optional options object for config/settings\n * @param {Function=} ready Optional ready callback\n * @return {Player} A player instance\n * @mixes videojs\n * @method videojs\n */\nvar videojs = function videojs(id, options, ready) {\n var tag = undefined; // Element of ID\n\n // Allow for element or ID to be passed in\n // String ID\n if (typeof id === 'string') {\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n // If a player instance has already been created for this ID return it.\n if (videojs.getPlayers()[id]) {\n\n // If options or ready funtion are passed, warn\n if (options) {\n _utilsLogJs2['default'].warn('Player \"' + id + '\" is already initialised. Options will not be applied.');\n }\n\n if (ready) {\n videojs.getPlayers()[id].ready(ready);\n }\n\n return videojs.getPlayers()[id];\n\n // Otherwise get element for ID\n } else {\n tag = Dom.getEl(id);\n }\n\n // ID is a media element\n } else {\n tag = id;\n }\n\n // Check for a useable element\n if (!tag || !tag.nodeName) {\n // re: nodeName, could be a box div also\n throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n }\n\n // Element may have a player attr referring to an already created player instance.\n // If not, set up a new player and return the instance.\n return tag['player'] || _player2['default'].players[tag.playerId] || new _player2['default'](tag, options, ready);\n};\n\n// Add default styles\nif (_globalWindow2['default'].VIDEOJS_NO_DYNAMIC_STYLE !== true) {\n var style = Dom.$('.vjs-styles-defaults');\n\n if (!style) {\n style = stylesheet.createStyleElement('vjs-styles-defaults');\n var head = Dom.$('head');\n head.insertBefore(style, head.firstChild);\n stylesheet.setTextContent(style, '\\n .video-js {\\n width: 300px;\\n height: 150px;\\n }\\n\\n .vjs-fluid {\\n padding-top: 56.25%\\n }\\n ');\n }\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '5.10.2';\n\n/**\n * Indicates it's the Hola version of video.js\n *\n * @type {boolean}\n */\nvideojs.HOLA_VERSION = true;\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n * videojs.options.autoplay = true\n * // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = _player2['default'].prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = function () {\n return _player2['default'].players;\n};\n\n/**\n * For backward compatibility, expose players object.\n *\n * @deprecated\n * @memberOf videojs\n * @property {Object|Proxy} players\n */\nvideojs.players = _utilsCreateDeprecationProxyJs2['default'](_player2['default'].players, {\n get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead',\n set: 'Modification of videojs.players is deprecated'\n});\n\n/**\n * Get a component class object by name\n * ```js\n * var VjsButton = videojs.getComponent('Button');\n * // Create a new instance of the component\n * var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = _component2['default'].getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n * // Get a component to subclass\n * var VjsButton = videojs.getComponent('Button');\n * // Subclass the component (see 'extend' doc for more info)\n * var MySpecialButton = videojs.extend(VjsButton, {});\n * // Register the new component\n * VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n * // (optionally) add the new component as a default player child\n * myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = function (name, comp) {\n if (_techTechJs2['default'].isTech(comp)) {\n _utilsLogJs2['default'].warn('The ' + name + ' tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)');\n }\n\n _component2['default'].registerComponent.call(_component2['default'], name, comp);\n};\n\n/**\n * Get a Tech class object by name\n * ```js\n * var Html5 = videojs.getTech('Html5');\n * // Create a new instance of the component\n * var html5 = new Html5(options);\n * ```\n *\n * @return {Tech} Tech identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getTech = _techTechJs2['default'].getTech;\n\n/**\n * Register a Tech so it can referred to by name.\n * This is used in the tech order for the player.\n *\n * ```js\n * // get the Html5 Tech\n * var Html5 = videojs.getTech('Html5');\n * var MyTech = videojs.extend(Html5, {});\n * // Register the new Tech\n * VjsButton.registerTech('Tech', MyTech);\n * var player = videojs('myplayer', {\n * techOrder: ['myTech', 'html5']\n * });\n * ```\n *\n * @param {String} The class name of the tech\n * @param {Tech} The tech class\n * @return {Tech} The newly registered Tech\n * @mixes videojs\n * @method registerTech\n */\nvideojs.registerTech = _techTechJs2['default'].registerTech;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extend` keyword\n * ```js\n * // Create a basic javascript 'class'\n * function MyClass(name){\n * // Set a property at initialization\n * this.myName = name;\n * }\n * // Create an instance method\n * MyClass.prototype.sayMyName = function(){\n * alert(this.myName);\n * };\n * // Subclass the exisitng class and change the name\n * // when initializing\n * var MySubClass = videojs.extend(MyClass, {\n * constructor: function(name) {\n * // Call the super class constructor for the subclass\n * MyClass.call(this, name)\n * }\n * });\n * // Create an instance of the new sub class\n * var myInstance = new MySubClass('John');\n * myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n * Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extend\n */\nvideojs.extend = _extendJs2['default'];\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n * var defaultOptions = {\n * foo: true,\n * bar: {\n * a: true,\n * b: [1,2,3]\n * }\n * };\n * var newOptions = {\n * foo: false,\n * bar: {\n * b: [4,5,6]\n * }\n * };\n * var result = videojs.mergeOptions(defaultOptions, newOptions);\n * // result.foo = false;\n * // result.bar.a = true;\n * // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} defaults The options object whose values will be overriden\n * @param {Object} overrides The options object with values to override the first\n * @param {Object} etc Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = _srcJsUtilsMergeOptionsJs2['default'];\n\n/**\n * Change the context (this) of a function\n *\n * videojs.bind(newContext, function(){\n * this === newContext\n * });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n * // Make a plugin that alerts when the player plays\n * videojs.plugin('myPlugin', function(myPluginOptions) {\n * myPluginOptions = myPluginOptions || {};\n *\n * var player = this;\n * var alertText = myPluginOptions.text || 'Player is playing!'\n *\n * player.on('play', function(){\n * alert(alertText);\n * });\n * });\n * // USAGE EXAMPLES\n * // EXAMPLE 1: New player with plugin options, call plugin immediately\n * var player1 = videojs('idOne', {\n * myPlugin: {\n * text: 'Custom text!'\n * }\n * });\n * // Click play\n * // --> Should alert 'Custom text!'\n * // EXAMPLE 3: New player, initialize plugin later\n * var player3 = videojs('idThree');\n * // Click play\n * // --> NO ALERT\n * // Click pause\n * // Initialize plugin using the plugin function on the player instance\n * player3.myPlugin({\n * text: 'Plugin added later!'\n * });\n * // Click play\n * // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} name The plugin name\n * @param {Function} fn The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = _pluginsJs2['default'];\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n * videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param {String} code The language code or dictionary property\n * @param {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function (code, data) {\n var _merge;\n\n code = ('' + code).toLowerCase();\n return _lodashCompatObjectMerge2['default'](videojs.options.languages, (_merge = {}, _merge[code] = data, _merge))[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = _utilsLogJs2['default'];\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param {Number|Array} start Start time in seconds or an array of ranges\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = videojs.createTimeRanges = _utilsTimeRangesJs.createTimeRanges;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = _utilsFormatTimeJs2['default'];\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean} Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nvideojs.isCrossOrigin = Url.isCrossOrigin;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = _eventTarget2['default'];\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n/**\n * A cross-browser XMLHttpRequest wrapper. Here's a simple example:\n *\n * videojs.xhr({\n * body: someJSONString,\n * uri: \"/foo\",\n * headers: {\n * \"Content-Type\": \"application/json\"\n * }\n * }, function (err, resp, body) {\n * // check resp.statusCode\n * });\n *\n * Check out the [full\n * documentation](https://github.com/Raynos/xhr/blob/v2.1.0/README.md)\n * for more options.\n *\n * @param {Object} options settings for the request.\n * @return {XMLHttpRequest|XDomainRequest} the request object.\n * @see https://github.com/Raynos/xhr\n */\nvideojs.xhr = _xhr2['default'];\n\n/**\n * TextTrack class\n *\n * @type {Function}\n */\nvideojs.TextTrack = _tracksTextTrackJs2['default'];\n\n/**\n * export the AudioTrack class so that source handlers can create\n * AudioTracks and then add them to the players AudioTrackList\n *\n * @type {Function}\n */\nvideojs.AudioTrack = _tracksAudioTrackJs2['default'];\n\n/**\n * export the VideoTrack class so that source handlers can create\n * VideoTracks and then add them to the players VideoTrackList\n *\n * @type {Function}\n */\nvideojs.VideoTrack = _tracksVideoTrackJs2['default'];\n\n/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @method isEl\n * @param {Mixed} value\n * @return {Boolean}\n */\nvideojs.isEl = Dom.isEl;\n\n/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @method isTextNode\n * @param {Mixed} value\n * @return {Boolean}\n */\nvideojs.isTextNode = Dom.isTextNode;\n\n/**\n * Creates an element and applies properties.\n *\n * @method createEl\n * @param {String} [tagName='div'] Name of tag to be created.\n * @param {Object} [properties={}] Element properties to be applied.\n * @param {Object} [attributes={}] Element attributes to be applied.\n * @return {Element}\n */\nvideojs.createEl = Dom.createEl;\n\n/**\n * Check if an element has a CSS class\n *\n * @method hasClass\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n */\nvideojs.hasClass = Dom.hasElClass;\n\n/**\n * Add a CSS class name to an element\n *\n * @method addClass\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n */\nvideojs.addClass = Dom.addElClass;\n\n/**\n * Remove a CSS class name from an element\n *\n * @method removeClass\n * @param {Element} element Element to remove from class name\n * @param {String} classToRemove Classname to remove\n */\nvideojs.removeClass = Dom.removeElClass;\n\n/**\n * Adds or removes a CSS class name on an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @method toggleElClass\n * @param {Element} element\n * @param {String} classToToggle\n * @param {Boolean|Function} [predicate]\n * Can be a function that returns a Boolean. If `true`, the class\n * will be added; if `false`, the class will be removed. If not\n * given, the class will be added if not present and vice versa.\n */\nvideojs.toggleClass = Dom.toggleElClass;\n\n/**\n * Apply attributes to an HTML element.\n *\n * @method setAttributes\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n */\nvideojs.setAttributes = Dom.setElAttributes;\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @method getAttributes\n * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n */\nvideojs.getAttributes = Dom.getElAttributes;\n\n/**\n * Empties the contents of an element.\n *\n * @method emptyEl\n * @param {Element} el\n * @return {Element}\n */\nvideojs.emptyEl = Dom.emptyEl;\n\n/**\n * Normalizes and appends content to an element.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n * Normalized into a text node.\n *\n * - Element, TextNode\n * Passed through.\n *\n * - Array\n * A one-dimensional array of strings, elements, nodes, or functions (which\n * return single strings, elements, or nodes).\n *\n * - Function\n * If the sole argument, is expected to produce a string, element,\n * node, or array.\n *\n * @method appendContent\n * @param {Element} el\n * @param {String|Element|TextNode|Array|Function} content\n * @return {Element}\n */\nvideojs.appendContent = Dom.appendContent;\n\n/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n * Normalized into a text node.\n *\n * - Element, TextNode\n * Passed through.\n *\n * - Array\n * A one-dimensional array of strings, elements, nodes, or functions (which\n * return single strings, elements, or nodes).\n *\n * - Function\n * If the sole argument, is expected to produce a string, element,\n * node, or array.\n *\n * @method insertContent\n * @param {Element} el\n * @param {String|Element|TextNode|Array|Function} content\n * @return {Element}\n */\nvideojs.insertContent = Dom.insertContent;\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n define('videojs', [], function () {\n return videojs;\n });\n\n // checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n module['exports'] = videojs;\n }\n\nexports['default'] = videojs;\nmodule.exports = exports['default'];\n\n},{\"../../src/js/utils/merge-options.js\":150,\"./component\":66,\"./event-target\":104,\"./extend.js\":105,\"./player\":113,\"./plugins.js\":114,\"./setup\":118,\"./tech/flash.js\":121,\"./tech/html5.js\":122,\"./tech/tech.js\":124,\"./tracks/audio-track.js\":127,\"./tracks/text-track.js\":135,\"./tracks/video-track.js\":140,\"./utils/browser.js\":141,\"./utils/create-deprecation-proxy.js\":143,\"./utils/dom.js\":144,\"./utils/events.js\":145,\"./utils/fn.js\":146,\"./utils/format-time.js\":147,\"./utils/log.js\":149,\"./utils/stylesheet.js\":151,\"./utils/time-ranges.js\":152,\"./utils/url.js\":154,\"global/document\":7,\"global/window\":8,\"lodash-compat/object/merge\":46,\"object.assign\":53,\"xhr\":60}]},{},[155])(155)\n});\n\n\n//# sourceMappingURL=video.js.map\n/* videojs-vtt.js - v0.12.3 (https://github.com/gkatsev/vtt.js) built on 22-03-2017 */\n\n(function(root) {\n var vttjs = root.vttjs = {};\n var cueShim = vttjs.VTTCue;\n var regionShim = vttjs.VTTRegion;\n var oldVTTCue = root.VTTCue;\n var oldVTTRegion = root.VTTRegion;\n\n vttjs.shim = function() {\n vttjs.VTTCue = cueShim;\n vttjs.VTTRegion = regionShim;\n };\n\n vttjs.restore = function() {\n vttjs.VTTCue = oldVTTCue;\n vttjs.VTTRegion = oldVTTRegion;\n };\n}(this));\n\n/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function(root, vttjs) {\n\n var autoKeyword = \"auto\";\n var directionSetting = {\n \"\": true,\n \"lr\": true,\n \"rl\": true\n };\n var alignSetting = {\n \"start\": true,\n \"middle\": true,\n \"end\": true,\n \"left\": true,\n \"right\": true\n };\n\n function findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n }\n\n function findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n }\n\n function extend(obj) {\n var i = 1;\n for (; i < arguments.length; i++) {\n var cobj = arguments[i];\n for (var p in cobj) {\n obj[p] = cobj[p];\n }\n }\n\n return obj;\n }\n\n function VTTCue(startTime, endTime, text) {\n var cue = this;\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n var baseObj = {};\n\n if (isIE8) {\n cue = document.createElement('custom');\n } else {\n baseObj.enumerable = true;\n }\n\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n cue.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = 50;\n var _positionAlign = \"middle\";\n var _size = 50;\n var _align = \"middle\";\n\n Object.defineProperty(cue,\n \"id\", extend({}, baseObj, {\n get: function() {\n return _id;\n },\n set: function(value) {\n _id = \"\" + value;\n }\n }));\n\n Object.defineProperty(cue,\n \"pauseOnExit\", extend({}, baseObj, {\n get: function() {\n return _pauseOnExit;\n },\n set: function(value) {\n _pauseOnExit = !!value;\n }\n }));\n\n Object.defineProperty(cue,\n \"startTime\", extend({}, baseObj, {\n get: function() {\n return _startTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"endTime\", extend({}, baseObj, {\n get: function() {\n return _endTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"text\", extend({}, baseObj, {\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"region\", extend({}, baseObj, {\n get: function() {\n return _region;\n },\n set: function(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"vertical\", extend({}, baseObj, {\n get: function() {\n return _vertical;\n },\n set: function(value) {\n var setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"snapToLines\", extend({}, baseObj, {\n get: function() {\n return _snapToLines;\n },\n set: function(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"line\", extend({}, baseObj, {\n get: function() {\n return _line;\n },\n set: function(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"An invalid number or illegal string was specified.\");\n }\n _line = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"lineAlign\", extend({}, baseObj, {\n get: function() {\n return _lineAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"position\", extend({}, baseObj, {\n get: function() {\n return _position;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n _position = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"positionAlign\", extend({}, baseObj, {\n get: function() {\n return _positionAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"size\", extend({}, baseObj, {\n get: function() {\n return _size;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n _size = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"align\", extend({}, baseObj, {\n get: function() {\n return _align;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }));\n\n /**\n * Other <track> spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n cue.displayState = undefined;\n\n if (isIE8) {\n return cue;\n }\n }\n\n /**\n * VTTCue methods\n */\n\n VTTCue.prototype.getCueAsHTML = function() {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n return WebVTT.convertCueToDOMTree(window, this.text);\n };\n\n root.VTTCue = root.VTTCue || VTTCue;\n vttjs.VTTCue = VTTCue;\n}(this, (this.vttjs || {})));\n\n/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n(function(root, vttjs) {\n\n var scrollSetting = {\n \"\": true,\n \"up\": true\n };\n\n function findScrollSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var scroll = scrollSetting[value.toLowerCase()];\n return scroll ? value.toLowerCase() : false;\n }\n\n function isValidPercentValue(value) {\n return typeof value === \"number\" && (value >= 0 && value <= 100);\n }\n\n // VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface\n function VTTRegion() {\n var _width = 100;\n var _lines = 3;\n var _regionAnchorX = 0;\n var _regionAnchorY = 100;\n var _viewportAnchorX = 0;\n var _viewportAnchorY = 100;\n var _scroll = \"\";\n\n Object.defineProperties(this, {\n \"width\": {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"Width must be between 0 and 100.\");\n }\n _width = value;\n }\n },\n \"lines\": {\n enumerable: true,\n get: function() {\n return _lines;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Lines must be set to a number.\");\n }\n _lines = value;\n }\n },\n \"regionAnchorY\": {\n enumerable: true,\n get: function() {\n return _regionAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorX must be between 0 and 100.\");\n }\n _regionAnchorY = value;\n }\n },\n \"regionAnchorX\": {\n enumerable: true,\n get: function() {\n return _regionAnchorX;\n },\n set: function(value) {\n if(!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorY must be between 0 and 100.\");\n }\n _regionAnchorX = value;\n }\n },\n \"viewportAnchorY\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorY must be between 0 and 100.\");\n }\n _viewportAnchorY = value;\n }\n },\n \"viewportAnchorX\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorX;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorX must be between 0 and 100.\");\n }\n _viewportAnchorX = value;\n }\n },\n \"scroll\": {\n enumerable: true,\n get: function() {\n return _scroll;\n },\n set: function(value) {\n var setting = findScrollSetting(value);\n // Have to check for false as an empty string is a legal value.\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _scroll = setting;\n }\n }\n });\n }\n\n root.VTTRegion = root.VTTRegion || VTTRegion;\n vttjs.VTTRegion = VTTRegion;\n}(this, (this.vttjs || {})));\n\n/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n\n(function(global) {\n\n var _objCreate = Object.create || (function() {\n function F() {}\n return function(o) {\n if (arguments.length !== 1) {\n throw new Error('Object.create shim only accepts one parameter.');\n }\n F.prototype = o;\n return new F();\n };\n })();\n\n // Creates a new ParserError object from an errorData object. The errorData\n // object should have default code and message properties. The default message\n // property can be overriden by passing in a message parameter.\n // See ParsingError.Errors below for acceptable errors.\n function ParsingError(errorData, message) {\n this.name = \"ParsingError\";\n this.code = errorData.code;\n this.message = message || errorData.message;\n }\n ParsingError.prototype = _objCreate(Error.prototype);\n ParsingError.prototype.constructor = ParsingError;\n\n // ParsingError metadata for acceptable ParsingErrors.\n ParsingError.Errors = {\n BadSignature: {\n code: 0,\n message: \"Malformed WebVTT signature.\"\n },\n BadTimeStamp: {\n code: 1,\n message: \"Malformed time stamp.\"\n }\n };\n\n // Try to parse input as a time stamp.\n function parseTimeStamp(input) {\n\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;\n }\n\n var m = input.match(/^(\\d+):(\\d{2})(:\\d{2})?\\.(\\d{3})/);\n if (!m) {\n return null;\n }\n\n if (m[3]) {\n // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3].replace(\":\", \"\"), m[4]);\n } else if (m[1] > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[1], m[2], 0, m[4]);\n } else {\n // Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n return computeSeconds(0, m[1], m[2], m[4]);\n }\n }\n\n // A settings object holds key/value pairs and will ignore anything but the first\n // assignment to a specific key.\n function Settings() {\n this.values = _objCreate(null);\n }\n\n Settings.prototype = {\n // Only accept the first assignment to any key.\n set: function(k, v) {\n if (!this.get(k) && v !== \"\") {\n this.values[k] = v;\n }\n },\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get: function(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n },\n // Check whether we have a value for a key.\n has: function(k) {\n return k in this.values;\n },\n // Accept a setting if its one of the given alternatives.\n alt: function(k, v, a) {\n for (var n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n },\n // Accept a setting if its a valid (signed) integer.\n integer: function(k, v) {\n if (/^-?\\d+$/.test(v)) { // integer\n this.set(k, parseInt(v, 10));\n }\n },\n // Accept a setting if its a valid percentage.\n percent: function(k, v) {\n var m;\n if ((m = v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/))) {\n v = parseFloat(v);\n if (v >= 0 && v <= 100) {\n this.set(k, v);\n return true;\n }\n }\n return false;\n }\n };\n\n // Helper function to parse input into groups separated by 'groupDelim', and\n // interprete each group as a key/value pair separated by 'keyValueDelim'.\n function parseOptions(input, callback, keyValueDelim, groupDelim) {\n var groups = groupDelim ? input.split(groupDelim) : [input];\n for (var i in groups) {\n if (typeof groups[i] !== \"string\") {\n continue;\n }\n var kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n var k = kv[0];\n var v = kv[1];\n callback(k, v);\n }\n }\n\n function parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n var oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n var ts = parseTimeStamp(input);\n if (ts === null) {\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed timestamp: \" + oInput);\n }\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"region\":\n // Find the last region we parsed with the same region id.\n for (var i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case \"vertical\":\n settings.alt(k, v, [\"rl\", \"lr\"]);\n break;\n case \"line\":\n var vals = v.split(\",\"),\n vals0 = vals[0];\n settings.integer(k, vals0);\n settings.percent(k, vals0) ? settings.set(\"snapToLines\", false) : null;\n settings.alt(k, vals0, [\"auto\"]);\n if (vals.length === 2) {\n settings.alt(\"lineAlign\", vals[1], [\"start\", \"middle\", \"end\"]);\n }\n break;\n case \"position\":\n vals = v.split(\",\");\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt(\"positionAlign\", vals[1], [\"start\", \"middle\", \"end\"]);\n }\n break;\n case \"size\":\n settings.percent(k, v);\n break;\n case \"align\":\n settings.alt(k, v, [\"start\", \"middle\", \"end\", \"left\", \"right\"]);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get(\"region\", null);\n cue.vertical = settings.get(\"vertical\", \"\");\n cue.line = settings.get(\"line\", \"auto\");\n cue.lineAlign = settings.get(\"lineAlign\", \"start\");\n cue.snapToLines = settings.get(\"snapToLines\", true);\n cue.size = settings.get(\"size\", 100);\n cue.align = settings.get(\"align\", \"middle\");\n cue.position = settings.get(\"position\", {\n start: 0,\n left: 0,\n middle: 50,\n end: 100,\n right: 100\n }, cue.align);\n cue.positionAlign = settings.get(\"positionAlign\", {\n start: \"start\",\n left: \"start\",\n middle: \"middle\",\n end: \"end\",\n right: \"end\"\n }, cue.align);\n }\n\n function skipWhitespace() {\n input = input.replace(/^\\s+/, \"\");\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.substr(0, 3) !== \"-->\") { // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed time stamp (time stamps must be separated by '-->'): \" +\n oInput);\n }\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n }\n\n var ESCAPE = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \"‎\": \"\\u200e\",\n \"‏\": \"\\u200f\",\n \" \": \"\\u00a0\"\n };\n\n var TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n };\n\n var TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n };\n\n var NEEDS_PARENT = {\n rt: \"ruby\"\n };\n\n // Parse content into a document fragment.\n function parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n }\n\n // Consume 'n' characters from the input.\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]+>?)?/);\n // If there is some text before the next tag, return it, otherwise return\n // the tag.\n return consume(m[1] ? m[1] : m[2]);\n }\n\n // Unescape a string 's'.\n function unescape1(e) {\n return ESCAPE[e];\n }\n function unescape(s) {\n while ((m = s.match(/&(amp|lt|gt|lrm|rlm|nbsp);/))) {\n s = s.replace(m[0], unescape1);\n }\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] ||\n NEEDS_PARENT[element.localName] === current.localName;\n }\n\n // Create an element for this tag.\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n if (!tagName) {\n return null;\n }\n var element = window.document.createElement(tagName);\n element.localName = tagName;\n var name = TAG_ANNOTATION[type];\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length &&\n tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n }\n // Otherwise just ignore the end tag.\n continue;\n }\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/);\n // If we can't parse the tag, skip to the next tag.\n if (!m) {\n continue;\n }\n // Try to construct an element, and ignore the tag if we couldn't.\n node = createElement(m[1], m[3]);\n if (!node) {\n continue;\n }\n // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n if (!shouldAdd(current, node)) {\n continue;\n }\n // Set the class list (as a list of classes, separated by space).\n if (m[2]) {\n node.className = m[2].substr(1).replace('.', ' ');\n }\n // Append the node to the current node, and enter the scope of the new\n // node.\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n }\n\n // Text nodes are leaf nodes.\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n }\n\n // This is a list of all the Unicode characters that have a strong\n // right-to-left category. What this means is that these characters are\n // written right-to-left for sure. It was generated by pulling all the strong\n // right-to-left characters out of the Unicode data table. That table can\n // found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n var strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6],\n [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d],\n [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6],\n [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5],\n [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815],\n [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858],\n [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f],\n [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c],\n [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1],\n [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc],\n [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808],\n [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855],\n [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f],\n [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13],\n [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58],\n [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72],\n [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f],\n [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32],\n [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42],\n [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f],\n [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59],\n [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62],\n [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77],\n [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b],\n [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\n function isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n }\n\n function determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n return text;\n }\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n while ((text = nextTextNode(nodeStack))) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n return \"ltr\";\n }\n\n function computeLinePos(cue) {\n if (typeof cue.line === \"number\" &&\n (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {\n return cue.line;\n }\n if (!cue.track || !cue.track.textTrackList ||\n !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n return ++count * -1;\n }\n\n function StyleBox() {\n }\n\n // Apply styles to a div. If there is no div passed then it defaults to the\n // div on 'this'.\n StyleBox.prototype.applyStyles = function(styles, div) {\n div = div || this.div;\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n };\n\n StyleBox.prototype.formatStyle = function(val, unit) {\n return val === 0 ? 0 : val + unit;\n };\n\n // Constructs the computed display state of the cue (a div). Places the div\n // into the overlay which should be a block level element (usually a div).\n function CueStyleBox(window, cue, styleOptions) {\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n var color = \"rgba(255, 255, 255, 1)\";\n var backgroundColor = \"rgba(0, 0, 0, 0.8)\";\n\n if (isIE8) {\n color = \"rgb(255, 255, 255)\";\n backgroundColor = \"rgb(0, 0, 0)\";\n }\n\n StyleBox.call(this);\n this.cue = cue;\n\n // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: color,\n backgroundColor: backgroundColor,\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\"\n };\n\n if (!isIE8) {\n styles.writingMode = cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\";\n styles.unicodeBidi = \"plaintext\";\n }\n this.applyStyles(styles, this.cueDiv);\n\n // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except \"middle\" which is \"center\" in CSS.\n this.div = window.document.createElement(\"div\");\n styles = {\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n\n if (!isIE8) {\n styles.direction = determineBidi(this.cueDiv);\n styles.writingMode = cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\".\n stylesunicodeBidi = \"plaintext\";\n }\n\n this.applyStyles(styles);\n\n this.div.appendChild(this.cueDiv);\n\n // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n var textPos = 0;\n switch (cue.positionAlign) {\n case \"start\":\n textPos = cue.position;\n break;\n case \"middle\":\n textPos = cue.position - (cue.size / 2);\n break;\n case \"end\":\n textPos = cue.position - cue.size;\n break;\n }\n\n // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n });\n // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function(box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n }\n CueStyleBox.prototype = _objCreate(StyleBox.prototype);\n CueStyleBox.prototype.constructor = CueStyleBox;\n\n // Represents the co-ordinates of an Element in a way that we can easily\n // compute things with such as if it overlaps or intersects with another Element.\n // Can initialize it with either a StyleBox or another BoxPosition.\n function BoxPosition(obj) {\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&\n rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect();\n // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)\n : 0;\n\n }\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || (top + (obj.height || height));\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n\n if (isIE8 && !this.lineHeight) {\n this.lineHeight = 13;\n }\n }\n\n // Move the box along a particular axis. Optionally pass in an amount to move\n // the box. If no amount is passed then the default is the line height of the\n // box.\n BoxPosition.prototype.move = function(axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n };\n\n // Check if this box overlaps another box, b2.\n BoxPosition.prototype.overlaps = function(b2) {\n return this.left < b2.right &&\n this.right > b2.left &&\n this.top < b2.bottom &&\n this.bottom > b2.top;\n };\n\n // Check if this box overlaps any other boxes in boxes.\n BoxPosition.prototype.overlapsAny = function(boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n return false;\n };\n\n // Check if this box is within another box.\n BoxPosition.prototype.within = function(container) {\n return this.top >= container.top &&\n this.bottom <= container.bottom &&\n this.left >= container.left &&\n this.right <= container.right;\n };\n\n // Check if this box is entirely within the container or it is overlapping\n // on the edge opposite of the axis direction passed. For example, if \"+x\" is\n // passed and the box is overlapping on the left edge of the container, then\n // return true.\n BoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n case \"-x\":\n return this.right > container.right;\n case \"+y\":\n return this.top < container.top;\n case \"-y\":\n return this.bottom > container.bottom;\n }\n };\n\n // Find the percentage of the area that this box is overlapping with another\n // box.\n BoxPosition.prototype.intersectPercentage = function(b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n };\n\n // Convert the positions from this box to CSS compatible positions using\n // the reference container's positions. This has to be done because this\n // box's positions are in reference to the viewport origin, whereas, CSS\n // values are in referecne to their respective edges.\n BoxPosition.prototype.toCSSCompatValues = function(reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n };\n\n // Get an object that represents the box's position without anything extra.\n // Can pass a StyleBox, HTMLElement, or another BoxPositon.\n BoxPosition.getSimpleBoxPosition = function(obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n\n obj = obj.div ? obj.div.getBoundingClientRect() :\n obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || (top + (obj.height || height)),\n width: obj.width || width\n };\n return ret;\n };\n\n // Move a StyleBox to its specified, or next best, position. The containerBox\n // is the box that contains the StyleBox, such as a div. boxPositions are\n // a list of other boxes that the styleBox can't overlap with.\n function moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) ||\n (b.within(containerBox) && b.overlapsAny(boxPositions))) {\n b.move(axis[i]);\n }\n // We found a spot where we aren't overlapping anything. This is our\n // best position.\n if (b.within(containerBox)) {\n return b;\n }\n var p = b.intersectPercentage(containerBox);\n // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n }\n // Reset the box position to the specified position.\n b = new BoxPosition(specifiedPosition);\n }\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = [];\n\n // If we have a line number to align the cue to.\n if (cue.snapToLines) {\n var size;\n switch (cue.vertical) {\n case \"\":\n axis = [ \"+y\", \"-y\" ];\n size = \"height\";\n break;\n case \"rl\":\n axis = [ \"+x\", \"-x\" ];\n size = \"width\";\n break;\n case \"lr\":\n axis = [ \"-x\", \"+x\" ];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0];\n\n // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n\n // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n }\n\n // Move the box to the specified position. This may not be its best\n // position.\n boxPosition.move(initialAxis, position);\n\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;\n\n switch (cue.lineAlign) {\n case \"middle\":\n linePos -= (calculatedPercentage / 2);\n break;\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n }\n\n // Apply initial line position to the cue box.\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [ \"+y\", \"-x\", \"+x\", \"-y\" ];\n\n // Get the box position again after we've applied the specified positioning\n // to it.\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n }\n\n function WebVTT() {\n // Nothing\n }\n\n // Helper to allow strings to be decoded instead of the default binary utf8 data.\n WebVTT.StringDecoder = function() {\n return {\n decode: function(data) {\n if (!data) {\n return \"\";\n }\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n };\n\n WebVTT.convertCueToDOMTree = function(window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n return parseContent(window, cuetext);\n };\n\n var FONT_SIZE_PERCENT = 0.05;\n var FONT_STYLE = \"sans-serif\";\n var CUE_BACKGROUND_PADDING = \"1.5%\";\n\n // Runs the processing model over the cues and regions passed to it.\n // @param overlay A block level element (usually a div) that the computed cues\n // and regions will be placed into.\n WebVTT.processCues = function(window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n }\n\n // Remove all previous children.\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay);\n\n // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n return false;\n }\n\n // We don't need to recompute the cues' display states. Just reuse them.\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function() {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i];\n\n // Compute the intial position and styles of the cue div.\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div);\n\n // Move the cue div to it's correct line position.\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);\n\n // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n cue.displayState = styleBox.div;\n\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n };\n\n WebVTT.Parser = function(window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n };\n\n WebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function (data) {\n var self = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {stream: true});\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n var line = buffer.substr(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n self.buffer = buffer.substr(pos);\n return line;\n }\n\n // 3.4 WebVTT region and WebVTT region settings syntax\n function parseRegion(input) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n case \"width\":\n settings.percent(k, v);\n break;\n case \"lines\":\n settings.integer(k, v);\n break;\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n if (xy.length !== 2) {\n break;\n }\n // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/);\n\n // Create the region, using default values for any values that were not\n // specified.\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\");\n // Register the region.\n self.onregion && self.onregion(region);\n // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n }\n\n // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n function parseTimestampMap(input) {\n var settings = new Settings();\n\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n\n }\n\n // 5.1 WebVTT file parsing.\n try {\n var line;\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n continue;\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n self.state = \"CUE\";\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /*falls through*/\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e);\n // In case of an error ignore rest of the cue.\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n self.state = \"CUETEXT\";\n continue;\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n self.cue.text += line;\n continue;\n case \"BADCUE\": // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e);\n\n // If we are currently parsing a cue, report what we have.\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n self.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n return this;\n },\n flush: function () {\n var self = this;\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch(e) {\n self.reportOrThrowError(e);\n }\n self.onflush && self.onflush();\n return this;\n }\n };\n\n global.WebVTT = WebVTT;\n\n}(this, (this.vttjs || {})));\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _videoJs = require('video.js');\n\nvar _videoJs2 = _interopRequireDefault(_videoJs);\n\n// Default options for the plugin.\nvar defaults = {\n position: 'top-right',\n fadeTime: 3000,\n url: undefined,\n image: undefined\n};\n\n/**\n * Sets up the div, img and optional a tags for the plugin.\n *\n * @function setupWatermark\n * @param {Player} player\n * @param {Object} [options={}]\n */\nvar setupWatermark = function setupWatermark(player, options) {\n // Add a div and img tag\n var videoEl = player.el();\n var div = document.createElement('div');\n var img = document.createElement('img');\n\n div.classList.add('vjs-watermark-content');\n div.classList.add('vjs-watermark-' + options.position);\n img.src = options.image;\n\n // if a url is provided make the image link to that URL.\n if (options.url) {\n var a = document.createElement('a');\n\n a.href = options.url;\n // if the user clicks the link pause and open a new window\n a.onclick = function (e) {\n e.preventDefault();\n player.pause();\n window.open(options.url);\n };\n a.appendChild(img);\n div.appendChild(a);\n } else {\n div.appendChild(img);\n }\n videoEl.appendChild(div);\n};\n\n/**\n * Fades the watermark image.\n *\n * @function fadeWatermark\n * @param {Object} [options={\n * fadeTime:\n * 'The number of milliseconds before the inital watermark fade out'}]\n */\nvar fadeWatermark = function fadeWatermark(options) {\n setTimeout(function () {\n return document.getElementsByClassName('vjs-watermark-content')[0].classList.add('vjs-watermark-fade');\n }, options.fadeTime);\n};\n\n/**\n * Function to invoke when the player is ready.\n *\n * This is a great place for your plugin to initialize itself. When this\n * function is called, the player will have its DOM and child components\n * in place.\n *\n * @function onPlayerReady\n * @param {Player} player\n * @param {Object} [options={}]\n */\nvar onPlayerReady = function onPlayerReady(player, options) {\n player.addClass('vjs-watermark');\n\n // if there is no image set just exit\n if (!options.image) {\n return;\n }\n setupWatermark(player, options);\n\n // Setup watermark autofade\n if (options.fadeTime === null) {\n return;\n }\n\n player.on('play', function () {\n return fadeWatermark(options);\n });\n};\n\n/**\n * A video.js plugin.\n *\n * In the plugin function, the value of `this` is a video.js `Player`\n * instance. You cannot rely on the player being in a \"ready\" state here,\n * depending on how the plugin is invoked. This may or may not be important\n * to you; if not, remove the wait for \"ready\"!\n *\n * @function watermark\n * @param {Object} [options={}]\n * An object of options left to the plugin author to define.\n */\nvar watermark = function watermark(options) {\n var _this = this;\n\n this.ready(function () {\n onPlayerReady(_this, _videoJs2['default'].mergeOptions(defaults, options));\n });\n};\n\n// Register the plugin with video.js.\n_videoJs2['default'].plugin('watermark', watermark);\n\n// Include the version number.\nwatermark.VERSION = '__VERSION__';\n\nexports['default'] = watermark;\nmodule.exports = exports['default'];","var css = \".vjs-dvr .vjs-progress-control{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.vjs-dvr .vjs-live-control{flex:inherit;cursor:pointer}.vjs-dvr .vjs-live-control .vjs-tooltip{line-height:1em}.vjs-dvr-live .vjs-live-control .vjs-tooltip{display:none}.vjs-dvr-live .vjs-live-control{cursor:default}.vjs-dvr:not(.vjs-dvr-live) .vjs-live-display:before{background:#566377}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/css/dvr.css\" }, { \"insertAt\": \"bottom\" })); module.exports = css;","var css = \".vjs-ad-playing.vjs-ad-playing .vjs-progress-control:after{width:100%;height:100%;position:absolute;left:0;bottom:0;content:\\\" \\\";user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none}.vjs-ad-playing.vjs-ad-playing .vjs-play-progress{background-color:#ffe400}.vjs-ad-loading .vjs-loading-spinner{display:block}.vjs-ad-playing .vjs-audio-button,.vjs-ad-playing .vjs-captions-button{display:none}.vjs-ad-loading .vjs-loading-spinner:after,.vjs-ad-loading .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-ad-loading .vjs-loading-spinner:before{border-top-color:#fff}.vjs-ad-loading .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/css/videojs-contrib-ads.css\" }, { \"insertAt\": \"bottom\" })); module.exports = css;","var css = \".vjs5-hola-skin,.vjs5-hola-skin :not(.ima-controls-div *){font-family:Arial,Helvetica,sans-serif}.vjs5-hola-skin .hola-circle-icon{display:block;width:1em;height:1em;box-sizing:border-box;border-radius:50%;border-style:solid;border-width:.3em;border-color:#fff;background:#00b7f1}.vjs5-hola-skin .vjs-control-bar{color:#fff;z-index:2}.vjs5-hola-skin .vjs-big-play-button,.vjs5-hola-skin:hover .vjs-big-play-button{font-size:4em;border-radius:50%;border:0 solid transparent;height:3em;width:3em;line-height:3em;left:50%;top:50%;margin-left:-1.5em;margin-top:-1.5em;background-color:#2D2D2D;background-color:rgba(45,45,45,.6)}.vjs5-hola-skin .vjs-big-play-button:before,.vjs5-hola-skin:hover .vjs-big-play-button:before{content:''}.vjs5-hola-skin .vjs-big-play-button>svg,.vjs5-hola-skin:hover .vjs-big-play-button>svg{fill:#fff;stroke:#fff;opacity:.8}.vjs5-hola-skin .vjs-big-play-button.vjs-play-control-replay>svg,.vjs5-hola-skin:hover .vjs-big-play-button.vjs-play-control-replay>svg{stroke:none}.vjs5-hola-skin.vjs-ad-loading .vjs-big-play-button,.vjs5-hola-skin.vjs-seeking .vjs-big-play-button,.vjs5-hola-skin.vjs-using-native-controls .vjs-big-play-button,.vjs5-hola-skin.vjs-waiting .vjs-big-play-button{display:none}.vjs5-hola-skin .vjs-control{margin:0;padding:0;text-align:left}.vjs5-hola-skin .vjs-control>.vjs-button-icon,.vjs5-hola-skin .vjs-control>svg{position:relative;box-sizing:content-box;display:inline-block;width:3em;height:100%;margin:0;padding:0 .3em}.vjs5-hola-skin .vjs-control:focus .vjs-menu{text-shadow:none}.vjs5-hola-skin .vjs-control-bar{height:3em;background:linear-gradient(to bottom,rgba(0,0,0,.2) 0,rgba(0,0,0,.65) 100%)}.vjs5-hola-skin .vjs-control-bar>.vjs-spacer{display:block;flex-grow:1;order:5}.vjs5-hola-skin .vjs-control-bar>.vjs-control,.vjs5-hola-skin .vjs-control-bar>.vjs-time-control{margin-top:-3px}.vjs5-hola-skin .vjs-control-bar>.vjs-progress-control{margin-top:0}.vjs5-hola-skin .vjs-control-bar>.vjs-captions-button{order:9}.vjs5-hola-skin .vjs-control-bar>.vjs-playback-rate{order:8}.vjs5-hola-skin.vjs-live .vjs-control-bar:not(.vjs-dvr)>.vjs-control,.vjs5-hola-skin.vjs-live .vjs-control-bar:not(.vjs-dvr)>.vjs-time-control{margin-top:0}.vjs5-hola-skin.vjs-live .vjs-control-bar .vjs-time-control.vjs-current-time,.vjs5-hola-skin.vjs-live .vjs-control-bar .vjs-time-control.vjs-duration,.vjs5-hola-skin.vjs-live .vjs-control-bar .vjs-time-control.vjs-time-divider{display:none}.vjs5-hola-skin.vjs-live .vjs-live-display:before{display:inline-block;width:7px;height:7px;margin-right:.5em;background:#f51717;content:'';border-radius:50%}.vjs5-hola-skin.vjs-live.vjs-fullscreen:not(.vjs-small) .vjs-live-display:before,.vjs5-hola-skin.vjs-live.vjs-large .vjs-live-display:before{width:11px;height:11px}.vjs5-hola-skin .vjs-tooltip{top:-3em;left:0;width:auto;height:auto;margin:0;padding:.5em;border-radius:.3em;text-align:center;background-color:#2D2D2D;background-color:rgba(45,45,45,.8);color:#fff;font-size:1.2em;text-shadow:none;clip:auto}.vjs5-hola-skin .vjs-menu{font-family:Arial,Helvetica,sans-serif}.vjs5-hola-skin .vjs-menu-item{text-align:left;padding-left:.5em;text-transform:none}.vjs5-hola-skin .vjs-menu-item[role=menuitemcheckbox]{padding:.3em .4em .2em 2em}.vjs5-hola-skin .vjs-menu-label{pointer-events:none}.vjs5-hola-skin .vjs-menu-indent{padding-left:1.5em}.vjs5-hola-skin .vjs-menu li.vjs-menu-item-link{padding:0}.vjs5-hola-skin .vjs-menu-item-link>.vjs-menu-link{display:block;padding:.2em 0 .2em .5em;color:inherit;text-decoration:inherit;text-transform:inherit;white-space:nowrap}.vjs5-hola-skin .vjs-menu-button[aria-expanded=true]>.vjs-tooltip-active{display:none}.vjs5-hola-skin .vjs-play-control{cursor:pointer;margin-left:.9em;order:0}.vjs5-hola-skin .vjs-play-control>svg{padding:0 .3em;left:0;top:0;fill:#fff;stroke:#fff;stroke-width:0;opacity:.7;transition:opacity 200ms ease}.vjs5-hola-skin .vjs-play-control.vjs-play-control-replay>svg{stroke:none}.vjs5-hola-skin .vjs-play-control:hover>svg{opacity:1}.vjs5-hola-skin .vjs-play-control.vjs-paused:before,.vjs5-hola-skin .vjs-play-control.vjs-playing:before,.vjs5-hola-skin .vjs-play-control:before{content:''}.vjs5-hola-skin .vjs-play-control.vjs-playing .vjs-tooltip{margin-left:.5em}.vjs5-hola-skin .vjs-big-play-button>svg g.replay,.vjs5-hola-skin .vjs-play-control>svg g.replay{opacity:0;transform:scale(0.45) translate(-20px,-14px)}.vjs5-hola-skin .vjs-big-play-button>svg g.replay circle,.vjs5-hola-skin .vjs-big-play-button>svg g.replay polygon,.vjs5-hola-skin .vjs-play-control>svg g.replay circle,.vjs5-hola-skin .vjs-play-control>svg g.replay polygon{stroke:none}.vjs5-hola-skin .vjs-big-play-button>svg g.replay circle,.vjs5-hola-skin .vjs-play-control>svg g.replay circle{opacity:.4;fill:#000}.vjs5-hola-skin .vjs-big-play-button>svg g.replay g.arrow,.vjs5-hola-skin .vjs-play-control>svg g.replay g.arrow{fill:#fff;transform-origin:36px 36px;transition:transform 500ms ease;transform:rotate(-400deg)}.vjs5-hola-skin .vjs-big-play-button>svg g.replay g.arrow path,.vjs5-hola-skin .vjs-play-control>svg g.replay g.arrow path{stroke:#fff;fill:none;stroke-width:6;stroke-dasharray:110 110;stroke-dashoffset:-100;transition:stroke-dashoffset 500ms ease}.vjs5-hola-skin .vjs-big-play-button.vjs-play-control-replay>svg g.replay,.vjs5-hola-skin .vjs-play-control.vjs-play-control-replay>svg g.replay{opacity:1}.vjs5-hola-skin .vjs-big-play-button.vjs-play-control-replay>svg g.replay>g.arrow,.vjs5-hola-skin .vjs-play-control.vjs-play-control-replay>svg g.replay>g.arrow{transform:rotate(0deg)}.vjs5-hola-skin .vjs-big-play-button.vjs-play-control-replay>svg g.replay>g.arrow>path,.vjs5-hola-skin .vjs-play-control.vjs-play-control-replay>svg g.replay>g.arrow>path{stroke-dashoffset:0}.vjs5-hola-skin.vjs-paused .vjs-big-play-button.vjs-hidden,.vjs5-hola-skin.vjs-playing .vjs-big-play-button.vjs-hidden{display:block!important;pointer-events:none}.vjs5-hola-skin.vjs-playing .vjs-big-play-button{opacity:0;transition:opacity 400ms ease,background-color 0ms;transition-delay:100ms,0ms}.vjs5-hola-skin.vjs-paused.vjs-has-started .vjs-big-play-button{display:block;opacity:1;transition:opacity 0ms linear,background-color 400ms ease;transition-delay:10ms,100ms;background-color:#2D2D2D;background-color:rgba(45,45,45,0)}.vjs5-hola-skin.vjs-paused.vjs-has-started .vjs-big-play-button:before,.vjs5-hola-skin.vjs-paused.vjs-has-started .vjs-big-play-button>svg{transition:opacity 400ms ease;transition-delay:100ms;opacity:0}.vjs5-hola-skin.vjs-paused.vjs-ended .vjs-big-play-button,.vjs5-hola-skin.vjs-paused:hover .vjs-big-play-button{background-color:#2D2D2D;background-color:rgba(45,45,45,.6);display:block}.vjs5-hola-skin.vjs-paused.vjs-ended .vjs-big-play-button:before,.vjs5-hola-skin.vjs-paused.vjs-ended .vjs-big-play-button>svg,.vjs5-hola-skin.vjs-paused:hover .vjs-big-play-button:before,.vjs5-hola-skin.vjs-paused:hover .vjs-big-play-button>svg{opacity:.8}.vjs5-hola-skin.vjs-using-native-controls .vjs-big-play-button,.vjs5-hola-skin.vjs-using-native-controls .vjs-big-play-button.vjs-hidden{display:none!important}.vjs5-hola-skin .vjs-progress-control{position:absolute;left:0;right:0;z-index:10;width:auto;top:-15px;height:15px;margin:0;padding:0;background:linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.2) 100%,rgba(0,0,0,0) 100%)}.vjs5-hola-skin .vjs-progress-control .vjs-mouse-display,.vjs5-hola-skin .vjs-progress-control .vjs-play-progress{font-family:Arial,Helvetica,sans-serif}.vjs5-hola-skin .vjs-progress-control .vjs-mouse-display:before,.vjs5-hola-skin .vjs-progress-control .vjs-play-progress:before{content:none;display:block;width:1em;height:1em;box-sizing:border-box;border-radius:50%;border-style:solid;border-width:.3em;border-color:#fff;background:#00b7f1}.vjs5-hola-skin .vjs-progress-control .vjs-mouse-display:after,.vjs5-hola-skin .vjs-progress-control .vjs-play-progress:after{display:none;padding:.2em .5em .5em}.vjs5-hola-skin .vjs-progress-control .vjs-mouse-display.vjs-keep-tooltips-inside:after,.vjs5-hola-skin .vjs-progress-control .vjs-play-progress.vjs-keep-tooltips-inside:after{display:none!important;content:none!important}.vjs5-hola-skin .vjs-progress-control .vjs-mouse-display-tooltip{display:none;top:-2em;padding:.5em;background-color:#2D2D2D;background-color:rgba(45,45,45,.8)}.vjs5-hola-skin .vjs-progress-control .vjs-play-progress{background:#00b7f1}.vjs5-hola-skin .vjs-progress-control:hover .vjs-mouse-display{background:0 0}.vjs5-hola-skin .vjs-progress-control:hover .vjs-mouse-display:before{position:absolute;top:-.33333333em;right:-.5em;font-size:.9em;background:#bbb;opacity:.7}.vjs5-hola-skin .vjs-progress-control:hover .vjs-mouse-display-tooltip{font-family:Arial,Helvetica,sans-serif;font-size:1.2em;pointer-events:none}.vjs5-hola-skin .vjs-progress-control .vjs-progress-holder{margin:0 1em}.vjs5-hola-skin .vjs-progress-control:hover .vjs-progress-holder{margin:0 .6em}.vjs5-hola-skin .vjs-progress-holder:before,.vjs5-hola-skin .vjs-volume-level:after{position:absolute;top:0;left:-.16em;width:.16em;height:100%;display:block;background:rgba(115,133,159,.75);content:'';border-radius:.15em 0 0 .15em}.vjs5-hola-skin .vjs-progress-holder:after,.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal:after{position:absolute;height:100%;pading-top:0;top:0;width:.16em;right:-.16em;background:rgba(115,133,159,.5);content:'';border-radius:0 .15em .15em 0}.vjs5-hola-skin .vjs-volume-level:after,.vjs5-hola-skin.vjs-pos-ended .vjs-progress-holder:after,.vjs5-hola-skin.vjs-pos-started .vjs-progress-holder:before{background:#00b7f1}.vjs5-hola-skin .vjs-progress-control:hover .vjs-mouse-display:before,.vjs5-hola-skin .vjs-progress-control:hover .vjs-play-progress:before{content:''}.vjs5-hola-skin .vjs-progress-control:hover .vjs-play-progress:after,.vjs5-hola-skin .vjs-progress-control:hover .vjs-tooltip-progress-bar{display:none!important}.vjs5-hola-skin .vjs-progress-control:hover .vjs-mouse-display{display:transparent}.vjs5-hola-skin .vjs-progress-control:hover .vjs-mouse-display-tooltip{display:block}.vjs5-hola-skin .vjs-live-control{order:4}.vjs5-hola-skin .vjs-slider .vjs-slider-gap-left,.vjs5-hola-skin .vjs-slider .vjs-slider-gap-right{position:absolute;top:0;width:1em;height:100%}.vjs5-hola-skin .vjs-slider .vjs-slider-gap-left{left:-1em}.vjs5-hola-skin .vjs-slider .vjs-slider-gap-right{right:-1em}.vjs5-hola-skin .vjs-ads-label{order:0;line-height:3em}.vjs5-hola-skin .vjs-volume-bar{margin:1.35em .45em 1.35em 1.2em}.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal{height:.5em;margin-top:.8em;margin-bottom:.8em;padding:.7em 0;background:0 0}.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal:after,.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal:before{height:.3em;top:50%;margin-top:-.15em}.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal:before{content:'';background:#73859f;background:rgba(115,133,159,.5)}.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level,.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal:before{position:absolute;left:0;top:50%;margin-top:-.15em;height:.3em;width:100%}.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{background-color:#00b7f1}.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal .vjs-slider-gap-left{width:15px;left:-15px}.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal .vjs-slider-gap-right{width:20px;right:-20px}.vjs5-hola-skin .vjs-volume-bar .vjs-volume-display:before,.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level:before{display:block;width:1em;height:1em;box-sizing:border-box;border-radius:50%;border-style:solid;border-width:.3em;border-color:#fff;background:#00b7f1;top:-.41em;font-size:1.2em;z-index:2}.vjs5-hola-skin .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level:before{content:''}.vjs5-hola-skin .vjs-volume-bar .vjs-volume-display{top:0;background:0 0}.vjs5-hola-skin .vjs-volume-bar .vjs-volume-display:before{content:'';position:absolute;left:-.5em;top:50%;margin-top:-.5em;height:1em;z-index:1;background:#bbb;opacity:.5}.vjs5-hola-skin .vjs-volume-display-tooltip{top:-2em;font-size:1.2em;background-color:#2D2D2D;background-color:rgba(45,45,45,.8)}.vjs5-hola-skin .vjs-volume-bar .vjs-volume-display,.vjs5-hola-skin.vjs-user-inactive .vjs-volume-bar .vjs-volume-display{display:none}.vjs5-hola-skin .vjs-volume-bar:hover .vjs-volume-display{display:block}.vjs5-hola-skin .vjs-volume-menu-button{margin-right:1em;cursor:default;overflow:visible;width:4.2em}.vjs5-hola-skin .vjs-volume-menu-button .vjs-menu-content{width:0;transition:width 200ms ease}.vjs5-hola-skin .vjs-volume-menu-button>.vjs-button-icon{width:3.2em;cursor:pointer;opacity:.7}.vjs5-hola-skin .vjs-volume-menu-button>.vjs-button-icon>svg{position:absolute;left:.2em;top:0;display:block;width:2.8em;padding:0 .5em;height:100%;fill:#fff;transition:opacity 200ms ease}.vjs5-hola-skin .vjs-volume-menu-button>.vjs-button-icon:hover{opacity:1}.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal{order:1}.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal:before{content:none;display:none}.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal>.vjs-button-icon{height:100%;background-size:55%;background-repeat:no-repeat;background-position:center;transition:opacity 200ms ease}.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal>.vjs-button-icon path{opacity:0;transition:opacity 400ms ease}.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal>.vjs-button-icon .volume-level-0{opacity:0;transform:rotate(-45deg);transform-origin:15px 8px;transition:opacity 400ms ease,transform 400ms ease}.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal.vjs-vol-0>.vjs-button-icon .volume-level-0{opacity:1;transform:rotate(0)}.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal.vjs-vol-1>.vjs-button-icon .volume-level-1,.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal.vjs-vol-2>.vjs-button-icon .volume-level-1,.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal.vjs-vol-2>.vjs-button-icon .volume-level-2,.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal.vjs-vol-3>.vjs-button-icon .volume-level-1,.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal.vjs-vol-3>.vjs-button-icon .volume-level-2,.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal.vjs-vol-3>.vjs-button-icon .volume-level-3{opacity:1}.vjs5-hola-skin .vjs-menu-button-inline{transition:all 200ms}.vjs5-hola-skin .vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs5-hola-skin .vjs-menu-button-inline:focus .vjs-menu,.vjs5-hola-skin .vjs-menu-button-inline:hover .vjs-menu,.vjs5-hola-skin.vjs-fullscreen .vjs-menu-button-inline .vjs-menu{display:block;opacity:1}.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content,.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal.vjs-slider-active .vjs-menu-content,.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal:focus .vjs-menu-content,.vjs5-hola-skin .vjs-volume-menu-button.vjs-volume-menu-button-horizontal:hover .vjs-menu-content,.vjs5-hola-skin.vjs-fullscreen .vjs-volume-menu-button.vjs-volume-menu-button-horizontal .vjs-menu-content{width:8em}.vjs5-hola-skin .vjs-menu-button-inline.vjs-slider-active,.vjs5-hola-skin .vjs-menu-button-inline:focus,.vjs5-hola-skin .vjs-menu-button-inline:hover,.vjs5-hola-skin.vjs-fullscreen .vjs-menu-button-inline,.vjs5-hola-skin.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active,.vjs5-hola-skin.vjs-no-flex .vjs-menu-button-inline:focus,.vjs5-hola-skin.vjs-no-flex .vjs-menu-button-inline:hover{width:12em}.vjs5-hola-skin .vjs-fullscreen-control{width:auto;margin-right:1em;order:20}.vjs5-hola-skin .vjs-fullscreen-control:before{content:'';display:none}.vjs5-hola-skin .vjs-fullscreen-control .vjs-button-icon{position:relative;height:100%;padding:0 .4em;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxOCAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTggMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiNmZmY7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMCw2IDAsMCA2LDAgIi8+DQo8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjYsMTYgMCwxNiAwLDEwICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxOCwxMCAxOCwxNiAxMiwxNiAiLz4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMTIsMCAxOCwwIDE4LDYgIi8+DQo8L3N2Zz4=);background-repeat:no-repeat;background-size:1.8em 1.8em;background-position:center center;opacity:.7;transition:opacity 200ms ease,transform 200ms ease}.vjs5-hola-skin .vjs-fullscreen-control:hover .vjs-button-icon{opacity:1;transform:scale(1.1)}.vjs5-hola-skin .vjs-fullscreen-control .vjs-tooltip{margin-left:-.8em}.vjs5-hola-skin.vjs-fullscreen .vjs-fullscreen-control .vjs-button-icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxOCAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTggMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiNmZmY7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNiwwIDYsNiAwLDYgIi8+DQo8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjAsMTAgNiwxMCA2LDE2ICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxMiwxNiAxMiwxMCAxOCwxMCAiLz4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMTgsNiAxMiw2IDEyLDAgIi8+DQo8L3N2Zz4=);background-size:2.1em 2.1em}.vjs5-hola-skin.vjs-fullscreen .vjs-fullscreen-control:hover .vjs-button-icon{opacity:1;transform:scale(0.85)}.vjs5-hola-skin .vjs-time-control.vjs-current-time,.vjs5-hola-skin .vjs-time-control.vjs-duration,.vjs5-hola-skin .vjs-time-control.vjs-time-divider{display:inline-block;width:auto;min-width:0;padding:0;font-size:1.2em;line-height:2.5em;color:#ccc}.vjs5-hola-skin .vjs-time-control.vjs-current-time{order:2}.vjs5-hola-skin .vjs-time-control.vjs-time-divider{order:3}.vjs5-hola-skin .vjs-time-control.vjs-time-divider span:after,.vjs5-hola-skin .vjs-time-control.vjs-time-divider span:before{content:'\\\\00a0'}.vjs5-hola-skin .vjs-time-control.vjs-duration{padding-right:1em;order:4}.vjs5-hola-skin .vjs-time-control.vjs-remaining-time{display:none}.vjs5-hola-skin.vjs-show-controls-before-start .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:visible;opacity:1}.vjs5-hola-skin.vjs-show-time-for-live .vjs-control-bar .vjs-time-control.vjs-current-time,.vjs5-hola-skin.vjs-show-time-for-live .vjs-control-bar .vjs-time-control.vjs-duration,.vjs5-hola-skin.vjs-show-time-for-live .vjs-control-bar .vjs-time-control.vjs-time-divider{display:inline-block!important}.vjs5-hola-skin.vjs-small .vjs-time-control.vjs-duration{padding-right:0}.vjs5-hola-skin.vjs-small .vjs-volume-menu-button{margin-right:0}.vjs5-hola-skin .vjs-slider-padding{position:absolute;width:100%;height:2em;top:-1.3em}.vjs5-hola-skin .vjs-caption-settings select{color:#000}.vjs5-hola-skin.vjs-fullscreen{overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.vjs5-hola-skin .vjs-menu-button-popup .vjs-menu{display:block;width:13em;left:-6em;z-index:2;visibility:hidden}.vjs5-hola-skin .vjs-menu-button-popup .vjs-menu:not(.vjs-menu-popup-on-click){transition:visibility 300ms step-end}.vjs5-hola-skin .vjs-menu-button-popup .vjs-menu ul{bottom:3em}.vjs5-hola-skin .vjs-menu-button-popup .vjs-menu.vjs-menu-popup-on-click.vjs-lock-showing,.vjs5-hola-skin .vjs-menu-button-popup:hover .vjs-menu:not(.vjs-menu-popup-on-click){visibility:visible;transition:visibility 1ms}.vjs5-hola-skin .vjs-menu-button-inline .vjs-menu{left:4em}.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small) .vjs-control-bar,.vjs5-hola-skin.vjs-large .vjs-control-bar{font-size:150%}.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small) .vjs-volume-display-tooltip,.vjs5-hola-skin.vjs-large .vjs-volume-display-tooltip{top:-2.4em}.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small) .vjs-menu,.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small) .vjs-menu-content,.vjs5-hola-skin.vjs-large .vjs-menu,.vjs5-hola-skin.vjs-large .vjs-menu-content{transition:opacity 200ms}.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small).vjs-paused .bumpable-ima-ad-container,.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small).vjs-playing .bumpable-ima-ad-container,.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small).vjs-playing:hover .bumpable-ima-ad-container,.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small).vjs-user-active.vjs-playing .bumpable-ima-ad-container,.vjs5-hola-skin.vjs-large.vjs-paused .bumpable-ima-ad-container,.vjs5-hola-skin.vjs-large.vjs-playing .bumpable-ima-ad-container,.vjs5-hola-skin.vjs-large.vjs-playing:hover .bumpable-ima-ad-container,.vjs5-hola-skin.vjs-large.vjs-user-active.vjs-playing .bumpable-ima-ad-container{margin-top:-60px}.vjs5-hola-skin.vjs-fullscreen:not(.vjs-small).vjs-user-inactive.vjs-playing .bumpable-ima-ad-container,.vjs5-hola-skin.vjs-large.vjs-user-inactive.vjs-playing .bumpable-ima-ad-container{margin-top:0}.vjs5-hola-skin .vjs-controls-watermark,.vjs5-hola-skin .vjs-controls-watermark:focus,.vjs5-hola-skin .vjs-controls-watermark:hover{width:auto;padding:0 1em;background-color:transparent;background-position:center center;background-repeat:no-repeat;cursor:default;order:6}.vjs5-hola-skin .vjs-controls-watermark img,.vjs5-hola-skin .vjs-controls-watermark:focus img,.vjs5-hola-skin .vjs-controls-watermark:hover img{display:inline-block;width:auto;max-width:7em;height:100%;margin:0;padding:0}.vjs-ad-playing .vjs-loading-spinner{display:none!important}.vjs-ad-loading .vjs-loading-spinner{display:block!important}.vjs-loading-spinner:after,.vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs5-hola-skin .vjs-rightclick-popup{color:#fff}.vjs5-hola-skin .vjs-settings-button{order:6}.vjs5-hola-skin .vjs-settings-button>.vjs-button-icon{height:100%;width:1.7em;padding:0 .95em;opacity:.7;transition:opacity 200ms ease}.vjs5-hola-skin .vjs-settings-button>.vjs-button-icon>svg>path{fill:#fff;transform-origin:8px 8px;transition:transform 200ms ease}.vjs5-hola-skin .vjs-settings-button:hover>.vjs-button-icon{opacity:1}.vjs5-hola-skin .vjs-settings-button:hover>.vjs-button-icon>svg>path{transform:rotate(90deg)}.vjs5-hola-skin .vjs-settings-button .vjs-menu{width:9em;left:-2.5em;z-index:15}.vjs5-hola-skin .vjs-settings-button .vjs-menu>.vjs-menu-content{max-height:none;bottom:2.75em;padding:.5em 0;transition:background 200ms ease;background-color:#2D2D2D;background-color:rgba(45,45,45,.8);cursor:default}.vjs5-hola-skin .vjs-settings-button .vjs-menu-item{padding:.3em 0 .2em 2em;cursor:pointer}.vjs5-hola-skin.vjs-settings-expanded .vjs-progress-control:hover .vjs-mouse-display-tooltip{display:none}.vjs5-hola-skin .vjs-info-overlay,.vjs5-hola-skin .vjs-rightclick-popup{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;background-color:#2D2D2D;background-color:rgba(45,45,45,.8);-webkit-box-shadow:.2em .2em .3em rgba(0,0,0,.5);-moz-box-shadow:.2em .2em .3em rgba(0,0,0,.5);box-shadow:.2em .2em .3em rgba(0,0,0,.5)}.vjs5-hola-skin .vjs-info-overlay{position:absolute;top:1em;left:1em;z-index:3;display:inline-block;padding:1em;font-size:1.2em}.vjs5-hola-skin .vjs-info-overlay.vjs-notify-overlay{bottom:50%;top:auto;z-index:4;margin-bottom:-3em;left:50%;margin-left:-8.5em;opacity:1}.vjs5-hola-skin .vjs-info-overlay.vjs-notify-overlay.vjs-notify-flash{transition:opacity 500ms ease;transition-delay:2500ms;opacity:0}.vjs5-hola-skin .vjs-info-overlay-title{margin-bottom:1em;font-size:1.2em}.vjs5-hola-skin .vjs-info-overlay-x{position:absolute;top:1em;right:1em;transition:color 200ms ease;cursor:pointer}.vjs5-hola-skin .vjs-info-overlay-x:hover{color:#fff}.vjs5-hola-skin .vjs-info-overlay-x:after{content:'\\\\00274c'}.vjs5-hola-skin .vjs-notify-overlay-title{margin-bottom:1em;font-size:1.5em}.vjs5-hola-skin .vjs-notify-overlay-content{text-align:center}.vjs5-hola-skin .vjs-info-overlay-list{list-style:none;position:relative;margin:0;padding:0}.vjs5-hola-skin .vjs-info-overlay-list-item{padding:0;margin:0;height:1.6em;line-height:1.6em?}.vjs5-hola-skin .vjs-info-overlay-list-item strong{font-weight:500;color:#fff}.vjs5-hola-skin .vjs-info-overlay-list-item span{color:#ccc}.vjs5-hola-skin .vjs-rightclick-popup{position:absolute;z-index:5;width:auto;padding:1em 0;font-size:110%}.vjs5-hola-skin .vjs-rightclick-popup .vjs-menu-item{cursor:pointer}.vjs5-hola-skin .vjs-rightclick-popup .vjs-menu-item,.vjs5-hola-skin .vjs-rightclick-popup .vjs-menu-item>.vjs-menu-link{padding:.2em 1em}.vjs5-hola-skin .vjs-menu-item.vjs-selected{color:#fff;background:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIvPjwvc3ZnPg==) .5em center/1em no-repeat}.vjs5-hola-skin .vjs-menu-item.vjs-selected:hover{color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.8)}.vjs5-hola-skin.vjs-fullscreen .vjs-info-overlay,.vjs5-hola-skin.vjs-large .vjs-info-overlay{font-size:150%}.vjs5-hola-skin.vjs-fullscreen .vjs-rightclick-popup,.vjs5-hola-skin.vjs-large .vjs-rightclick-popup{font-size:165%}.vjs5-hola-skin.vjs-fullscreen .vjs-settings-button>.vjs-button-icon,.vjs5-hola-skin.vjs-large .vjs-settings-button>.vjs-button-icon{transform-origin:1.8496em 1.5164em}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/css/videojs-hola-skin.css\" }, { \"insertAt\": \"bottom\" })); module.exports = css;","var css = \".ima-ad-container{top:0;position:absolute;display:block;width:100%;height:100%}.video-js.vjs-playing .bumpable-ima-ad-container{margin-top:-40px}.video-js.vjs-user-inactive.vjs-playing .bumpable-ima-ad-container{margin-top:0}.video-js.vjs-paused .bumpable-ima-ad-container,.video-js.vjs-playing:hover .bumpable-ima-ad-container,.video-js.vjs-user-active.vjs-playing .bumpable-ima-ad-container{margin-top:-40px}.vjs-ima-non-linear .vjs-big-play-button,.vjs-ima-non-linear .vjs-control-bar,.vjs-ima-non-linear .vjs-info-overlay,.vjs-ima-non-linear .vjs-modal-overlay,.vjs-ima-non-linear .vjs-rightclick-popup{z-index:1112}.ima-controls-div{bottom:0;height:37px;position:absolute;overflow:hidden;display:none;opacity:1;background:-moz-linear-gradient(bottom,rgba(7,20,30,.7) 0,rgba(7,20,30,0) 100%);background:-webkit-gradient(linear,left bottom,left top,color-stop(0%,rgba(7,20,30,.7)),color-stop(100%,rgba(7,20,30,0)));background:-webkit-linear-gradient(bottom,rgba(7,20,30,.7) 0,rgba(7,20,30,0) 100%);background:-o-linear-gradient(bottom,rgba(7,20,30,.7) 0,rgba(7,20,30,0) 100%);background:-ms-linear-gradient(bottom,rgba(7,20,30,.7) 0,rgba(7,20,30,0) 100%);background:linear-gradient(to top,rgba(7,20,30,.7) 0,rgba(7,20,30,0) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0007141E', endColorstr='#07141E', GradientType=0)}.ima-countdown-div{height:10px;color:#FFF;text-shadow:0 0 .2em #000;cursor:default}.ima-seek-bar-div{top:12px;height:3px;position:absolute;background:rgba(255,255,255,.4)}.ima-progress-div{width:0;height:3px;background-color:#ECC546}.ima-fullscreen-div,.ima-mute-div,.ima-play-pause-div,.ima-slider-div{width:35px;height:20px;top:11px;left:0;position:absolute;color:#CCC;font-size:1.5em;line-height:2;text-align:center;font-family:VideoJS;cursor:pointer}.ima-mute-div{left:auto;right:85px}.ima-slider-div{left:auto;right:35px;width:50px;height:10px;top:20px;background-color:#555}.ima-slider-level-div{width:100%;height:10px;background-color:#ECC546}.ima-fullscreen-div{left:auto;right:0}.ima-playing:before{content:\\\"\\\\00f103\\\"}.ima-paused:before{content:\\\"\\\\00f101\\\"}.ima-paused:hover:before,.ima-playing:hover:before{text-shadow:0 0 1em #fff}.ima-non-muted:before{content:\\\"\\\\00f107\\\"}.ima-muted:before{content:\\\"\\\\00f104\\\"}.ima-muted:hover:before,.ima-non-muted:hover:before{text-shadow:0 0 1em #fff}.ima-non-fullscreen:before{content:\\\"\\\\00f108\\\"}.ima-fullscreen:before{content:\\\"\\\\00f109\\\"}.ima-fullscreen:hover:before,.ima-non-fullscreen:hover:before{text-shadow:0 0 1em #fff}.vjs5-hola-skin .ima-controls-div{height:50px!important;background:linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,0) 10%,rgba(0,0,0,.2) 40%,rgba(0,0,0,.65) 100%);color:#fff;z-index:2}.vjs5-hola-skin .ima-countdown-div{position:absolute;left:0;top:0}.vjs5-hola-skin .ima-fullscreen-div,.vjs5-hola-skin .ima-mute-div,.vjs5-hola-skin .ima-play-pause-div{position:relative;top:0;left:0;box-sizing:content-box;display:inline-block!important;width:30px;height:30px;margin:17px 0 0;padding:0 3px;line-height:1;font-size:1em;color:#fff}.vjs5-hola-skin .ima-play-pause-div{width:40px;margin-left:.9em;padding:0;order:1}.vjs5-hola-skin .ima-play-pause-div svg{display:none}.vjs5-hola-skin .ima-play-pause-div.ima-paused .ima-play-icon,.vjs5-hola-skin .ima-play-pause-div.ima-playing .ima-pause-icon{display:inline-block}.vjs5-hola-skin .ima-mute-div,.vjs5-hola-skin .ima-mute-div.vjs-volume-menu-button.vjs-volume-menu-button-horizontal{padding-left:0;order:2}.vjs5-hola-skin .ima-mute-div .vjs-volume-display{display:none!important}.vjs5-hola-skin .ima-mute-div .vjs-slider:focus{text-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.vjs5-hola-skin .ima-controls-spacer{display:block;flex-grow:1;order:3}.vjs5-hola-skin .ima-fullscreen-div{margin-right:1em;order:4}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/css/videojs-ima.css\" }, { \"insertAt\": \"bottom\" })); module.exports = css;","var css = \".video-js .vjs-thumbnail-holder{position:absolute;display:none;overflow:hidden}.video-js .vjs-thumbnail-holder .vjs-thumbnail{position:relative;left:0;bottom:1.3em;opacity:0;padding:0!important;border:0!important;max-width:none!important;max-height:none!important;transition:opacity .2s ease;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-mz-transition:opacity .2s ease}.vjs-progress-control.fake-active .vjs-thumbnail,.vjs-progress-control:active .vjs-thumbnail,.vjs-progress-control:hover .vjs-thumbnail{opacity:1}.vjs-progress-control:active .vjs-thumbnail:active,.vjs-progress-control:hover .vjs-thumbnail:hover{opacity:0}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/css/videojs-thumbnails.css\" }, { \"insertAt\": \"bottom\" })); module.exports = css;","var css = \".video-js.vjs-watermark{display:block}.video-js .vjs-watermark-content{opacity:.99;position:absolute;padding:5px;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js .vjs-watermark-top-right{right:0;top:0}.video-js .vjs-watermark-top-left{left:0;top:0}.video-js .vjs-watermark-bottom-right{right:0;bottom:30px}.video-js .vjs-watermark-bottom-left{left:0;bottom:30px}.video-js.vjs-user-inactive.vjs-playing .vjs-watermark-fade{opacity:0}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/css/videojs-watermark.css\" }, { \"insertAt\": \"bottom\" })); module.exports = css;","var css = \".video-js .vjs-big-play-button:before,.video-js .vjs-control:before,.video-js .vjs-modal-dialog,.vjs-modal-dialog .vjs-modal-dialog-content{position:absolute;top:0;left:0;width:100%;height:100%}.video-js .vjs-big-play-button:before,.video-js .vjs-control:before{text-align:center}@font-face{font-family:VideoJS;src:url(node_modules/video.js/dist/font/VideoJS.eot?#iefix) format(\\\"eot\\\")}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,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) format(\\\"woff\\\"),url(data:application/x-font-ttf;charset=utf-8;base64,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FjY3PgE3LgEnIwYfAR4BFw4BBTM/ARUzESMGAyUVJwMchM2UWwgNq4JHrQgBAapUaAoJcWMBfiIhDiMrAQJLMB0BBAokNAIBPmMiIQ4iLAECSzAeAQUKJDQBP2MiIQ4iLAECSzAeAQUKJDQBAT75g+5B4arNLNIBJ44ByQL9BQ9mvYCKwA8FBQMDwwJVTGdzBf6VB8IHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvVJkAWUDDEf+tYP5AQAAAAEAAAAABiAGtgAbAAABBAADER4BFzMRITU2ADcWABcVIREzPgE3EQIAA4D+4v6FBwJ/X+D+1QYBJ97eAScG/tXgX38CB/6FBrUH/oX+4v32X38CAlWV3gEnBgb+2d6V/asCf18CCgEeAXsAAAAAEADGAAEAAAAAAAEABwAAAAEAAAAAAAIABwAHAAEAAAAAAAMABwAOAAEAAAAAAAQABwAVAAEAAAAAAAUACwAcAAEAAAAAAAYABwAnAAEAAAAAAAoAKwAuAAEAAAAAAAsAEwBZAAMAAQQJAAEADgBsAAMAAQQJAAIADgB6AAMAAQQJAAMADgCIAAMAAQQJAAQADgCWAAMAAQQJAAUAFgCkAAMAAQQJAAYADgC6AAMAAQQJAAoAVgDIAAMAAQQJAAsAJgEeVmlkZW9KU1JlZ3VsYXJWaWRlb0pTVmlkZW9KU1ZlcnNpb24gMS4wVmlkZW9KU0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAFYAaQBkAGUAbwBKAFMAUgBlAGcAdQBsAGEAcgBWAGkAZABlAG8ASgBTAFYAaQBkAGUAbwBKAFMAVgBlAHIAcwBpAG8AbgAgADEALgAwAFYAaQBkAGUAbwBKAFMARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8EcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZQJoZAZjYW5jZWwGcmVwbGF5CGZhY2Vib29rBWdwbHVzCGxpbmtlZGluB3R3aXR0ZXIGdHVtYmxyCXBpbnRlcmVzdBFhdWRpby1kZXNjcmlwdGlvbgVhdWRpbwAAAAAA) format(\\\"truetype\\\");font-weight:400;font-style:normal}.video-js .vjs-big-play-button,.video-js .vjs-play-control,.vjs-icon-play{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-big-play-button:before,.video-js .vjs-play-control:before,.vjs-icon-play:before{content:\\\"\\\\f101\\\"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:\\\"\\\\f102\\\"}.video-js .vjs-play-control.vjs-playing,.vjs-icon-pause{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-playing:before,.vjs-icon-pause:before{content:\\\"\\\\f103\\\"}.video-js .vjs-mute-control.vjs-vol-0,.video-js .vjs-volume-menu-button.vjs-vol-0,.vjs-icon-volume-mute{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-0:before,.video-js .vjs-volume-menu-button.vjs-vol-0:before,.vjs-icon-volume-mute:before{content:\\\"\\\\f104\\\"}.video-js .vjs-mute-control.vjs-vol-1,.video-js .vjs-volume-menu-button.vjs-vol-1,.vjs-icon-volume-low{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-1:before,.video-js .vjs-volume-menu-button.vjs-vol-1:before,.vjs-icon-volume-low:before{content:\\\"\\\\f105\\\"}.video-js .vjs-mute-control.vjs-vol-2,.video-js .vjs-volume-menu-button.vjs-vol-2,.vjs-icon-volume-mid{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-2:before,.video-js .vjs-volume-menu-button.vjs-vol-2:before,.vjs-icon-volume-mid:before{content:\\\"\\\\f106\\\"}.video-js .vjs-mute-control,.video-js .vjs-volume-menu-button,.vjs-icon-volume-high{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control:before,.video-js .vjs-volume-menu-button:before,.vjs-icon-volume-high:before{content:\\\"\\\\f107\\\"}.video-js .vjs-fullscreen-control,.vjs-icon-fullscreen-enter{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-fullscreen-control:before,.vjs-icon-fullscreen-enter:before{content:\\\"\\\\f108\\\"}.video-js.vjs-fullscreen .vjs-fullscreen-control,.vjs-icon-fullscreen-exit{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-fullscreen .vjs-fullscreen-control:before,.vjs-icon-fullscreen-exit:before{content:\\\"\\\\f109\\\"}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:\\\"\\\\f10a\\\"}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:\\\"\\\\f10b\\\"}.video-js .vjs-subtitles-button,.vjs-icon-subtitles{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-subtitles-button:before,.vjs-icon-subtitles:before{content:\\\"\\\\f10c\\\"}.video-js .vjs-captions-button,.vjs-icon-captions{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-captions-button:before,.vjs-icon-captions:before{content:\\\"\\\\f10d\\\"}.video-js .vjs-chapters-button,.vjs-icon-chapters{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-chapters-button:before,.vjs-icon-chapters:before{content:\\\"\\\\f10e\\\"}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:\\\"\\\\f10f\\\"}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:\\\"\\\\f110\\\"}.video-js .vjs-mouse-display,.video-js .vjs-play-progress,.video-js .vjs-volume-display,.video-js .vjs-volume-level,.vjs-icon-circle{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mouse-display:before,.video-js .vjs-play-progress:before,.video-js .vjs-volume-display:before,.video-js .vjs-volume-level:before,.vjs-icon-circle:before{content:\\\"\\\\f111\\\"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:\\\"\\\\f112\\\"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:\\\"\\\\f113\\\"}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:\\\"\\\\f114\\\"}.video-js .vjs-control.vjs-close-button,.vjs-icon-cancel{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-control.vjs-close-button:before,.vjs-icon-cancel:before{content:\\\"\\\\f115\\\"}.vjs-icon-replay{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay:before{content:\\\"\\\\f116\\\"}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:\\\"\\\\f117\\\"}.vjs-icon-gplus{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-gplus:before{content:\\\"\\\\f118\\\"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:\\\"\\\\f119\\\"}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:\\\"\\\\f11a\\\"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:\\\"\\\\f11b\\\"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:\\\"\\\\f11c\\\"}.video-js .vjs-descriptions-button,.vjs-icon-audio-description{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-descriptions-button:before,.vjs-icon-audio-description:before{content:\\\"\\\\f11d\\\"}.video-js .vjs-audio-button,.vjs-icon-audio{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-audio-button:before,.vjs-icon-audio:before{content:\\\"\\\\f11e\\\"}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js *,.video-js :after,.video-js :before{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin:0}.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-fluid{width:100%;max-width:100%;height:0}.video-js.vjs-16-9{padding-top:56.25%}.video-js.vjs-4-3{padding-top:75%}.video-js.vjs-fill{width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen{width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66A8CC}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.5em;width:3em;display:block;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2B333F;background-color:rgba(43,51,63,.7);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.75em;margin-left:-1.5em}.video-js .vjs-big-play-button:focus,.video-js:hover .vjs-big-play-button{outline:0;border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.5);-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-error .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button{display:none}.video-js button{background:0 0;border:none;color:inherit;display:inline-block;overflow:visible;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-tooltip{position:absolute;top:-3em;left:0;z-index:10;display:none;padding:6px 8px 8px;-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;background-color:#2B333F;background-color:rgba(43,51,63,.7);color:#fff;font-size:.9em;font-family:Arial,Helvetica,sans-serif;white-space:nowrap;pointer-events:none}.video-js .vjs-tooltip-active{display:block}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;overflow:auto}.vjs-scrubbing .vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li:focus,.vjs-menu li:hover{outline:0;background-color:#73859f;background-color:rgba(115,133,159,.5)}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2B333F}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-control .vjs-menu{text-shadow:none}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2B333F;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-menu-button-popup .vjs-menu.vjs-lock-showing,.vjs-workinghover .vjs-menu-button-popup:hover .vjs-menu{display:block}.video-js .vjs-menu-button-inline{-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline:hover,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.video-js .vjs-menu-button-inline.vjs-slider-active{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline:hover .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2B333F;background-color:rgba(43,51,63,.7)}.vjs-has-started .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}@media \\\\0screen{.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:hidden}}.vjs-controls-disabled .vjs-control-bar,.vjs-error .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}@media \\\\0screen{.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:\\\"\\\"}}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{outline:0;position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-control:before{font-size:1.8em;line-height:1.67}.video-js .vjs-control:focus,.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before{text-shadow:0 0 1em #fff}.video-js .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;min-width:4em}.vjs-live .vjs-progress-control{display:none}.video-js .vjs-progress-holder{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s;height:.3em}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.666666666666666666em}.video-js .vjs-progress-control:hover .vjs-mouse-display-tooltip,.video-js .vjs-progress-control:hover .vjs-play-progress:after,.video-js .vjs-progress-control:hover .vjs-time-tooltip{font-family:Arial,Helvetica,sans-serif;visibility:visible;font-size:.6em}.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-tooltip-progress-bar{position:absolute;display:block;height:.3em;margin:0;padding:0;width:0;left:0;top:0}.video-js .vjs-mouse-display:before{display:none}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{position:absolute;top:-.333333333333333em;right:-.5em;font-size:.9em}.video-js .vjs-mouse-display-tooltip,.video-js .vjs-play-progress:after,.video-js .vjs-time-tooltip{visibility:hidden;pointer-events:none;position:absolute;top:-3.4em;right:-1.9em;font-size:.9em;color:#000;content:attr(data-current-time);padding:6px 8px 8px;background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em}.video-js .vjs-play-progress:after,.video-js .vjs-play-progress:before,.video-js .vjs-time-tooltip{z-index:1}.video-js .vjs-progress-control .vjs-keep-tooltips-inside:after{display:none}.video-js .vjs-load-progress{background:#bfc7d3;background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:#fff;background:rgba(115,133,159,.75)}.video-js.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-time-tooltip{display:inline-block;height:2.4em;position:relative;float:right;right:-1.9em}.vjs-tooltip-progress-bar{visibility:hidden}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display-tooltip{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display,.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display-tooltip{display:none}.video-js .vjs-progress-control .vjs-mouse-display-tooltip,.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.video-js .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;margin:0 .45em;background-color:#73859f;background-color:rgba(115,133,159,.5)}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control,.video-js .vjs-volume-menu-button{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-volume-control{width:5em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu{display:block;width:0;height:0;border-top-color:transparent}.vjs-menu-button-popup.vjs-volume-menu-button-vertical .vjs-menu{left:.5em;height:8em}.vjs-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu{left:-2em}.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu-content{height:0;width:0;overflow-x:hidden;overflow-y:hidden}.vjs-volume-menu-button-vertical .vjs-lock-showing .vjs-menu-content,.vjs-volume-menu-button-vertical.vjs-slider-active .vjs-menu-content,.vjs-volume-menu-button-vertical:focus .vjs-menu-content,.vjs-volume-menu-button-vertical:hover .vjs-menu-content{height:8em;width:2.9em}.vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content,.vjs-volume-menu-button-horizontal .vjs-slider-active .vjs-menu-content,.vjs-volume-menu-button-horizontal:focus .vjs-menu-content,.vjs-volume-menu-button-horizontal:hover .vjs-menu-content{height:2.9em;width:8em}.vjs-volume-menu-button.vjs-menu-button-inline .vjs-menu-content{background-color:transparent!important}.video-js .vjs-volume-display:before{display:none}.video-js .vjs-volume-display-tooltip{display:none;position:absolute;top:-1em;font-size:1em;padding:.5em;-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em}.video-js .vjs-volume-display-tooltip-active{display:block}.video-js .vjs-volume-bar .vjs-volume-display{position:absolute;top:0;z-index:1;display:none;width:1px;height:100%;background-color:#000}.vjs-no-flex .vjs-volume-bar .vjs-volume-display{z-index:0}.video-js .vjs-volume-bar:hover .vjs-volume-display{display:block}.video-js.vjs-user-inactive .vjs-volume-bar .vjs-volume-display,.video-js.vjs-user-inactive .vjs-volume-display-tooltip{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-bar .vjs-volume-display,.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-display-tooltip{display:none}.video-js .vjs-volume-display-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-poster img{display:block;vertical-align:middle;margin:0 auto;max-height:100%;padding:0;width:100%}.vjs-has-started .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster{display:block}.vjs-controls-disabled .vjs-poster,.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-live-control{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js .vjs-time-control{-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.video-js .vjs-current-time,.video-js .vjs-duration,.vjs-live .vjs-time-control,.vjs-no-flex .vjs-current-time,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em;background-color:#000;background-color:rgba(0,0,0,.5)}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{-moz-transform:translateY(-3em);-ms-transform:translateY(-3em);-o-transform:translateY(-3em);-webkit-transform:translateY(-3em);transform:translateY(-3em)}.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{-moz-transform:translateY(-1.5em);-ms-transform:translateY(-1.5em);-o-transform:translateY(-1.5em);-webkit-transform:translateY(-1.5em);transform:translateY(-1.5em)}.video-js .vjs-fullscreen-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-playback-rate .vjs-playback-rate-value{font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:'X';font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;border-radius:25px}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block}.vjs-using-native-controls .vjs-loading-spinner{display:none!important}.vjs-loading-spinner:after,.vjs-loading-spinner:before{content:\\\"\\\";position:absolute;margin:-6px;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:#fff transparent transparent}.vjs-seeking .vjs-loading-spinner:after,.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}@keyframes vjs-spinner-spin{100%{transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%,20%{border-top-color:#73859f}35%{border-top-color:#fff}100%,60%{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%,20%{border-top-color:#73859f}35%{border-top-color:#fff}100%,60%{border-top-color:#73859f}}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer{width:auto}.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-menu-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-menu-button{display:none}.vjs-caption-settings{position:relative;top:1em;background-color:#2B333F;background-color:rgba(43,51,63,.75);color:#fff;margin:0 auto;padding:.5em;height:15em;font-size:12px;width:40em}.vjs-caption-settings .vjs-tracksettings{top:0;bottom:2em;left:0;right:0;position:absolute;overflow:auto}.vjs-caption-settings .vjs-tracksettings-colors,.vjs-caption-settings .vjs-tracksettings-font{float:left}.vjs-caption-settings .vjs-tracksettings-colors:after,.vjs-caption-settings .vjs-tracksettings-controls:after,.vjs-caption-settings .vjs-tracksettings-font:after{clear:both}.vjs-caption-settings .vjs-tracksettings-controls{position:absolute;bottom:1em;right:1em}.vjs-caption-settings .vjs-tracksetting{margin:5px;padding:3px;min-height:40px}.vjs-caption-settings .vjs-tracksetting label{display:block;width:100px;margin-bottom:5px}.vjs-caption-settings .vjs-tracksetting span{display:inline;margin-left:5px}.vjs-caption-settings .vjs-tracksetting>div{margin-bottom:5px;min-height:20px}.vjs-caption-settings .vjs-tracksetting>div:last-child{margin-bottom:0;padding-bottom:0;min-height:0}.vjs-caption-settings label>input{margin-right:10px}.vjs-caption-settings input[type=button]{width:40px;height:40px}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:-webkit-linear-gradient(-90deg,rgba(0,0,0,.8),rgba(255,255,255,0));background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0))}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/css/videojs.css\" }, { \"insertAt\": \"bottom\" })); module.exports = css;","'use strict';\nvar vjs = require('video.js');\nvar throttle = require('lodash/throttle');\nvar get = require('lodash/get');\n\nvjs.plugin('dvr', function(){\n var player = this;\n function remove_child(component, child_name){\n var child = component.getChild(child_name);\n component.removeChild(child);\n child.dispose();\n }\n function init(){\n var hls = player.tech_.hls_obj;\n var flashls = player.tech_.flashlsProvider;\n var seekable = player.seekable();\n if (!hls && !flashls || player.duration()!=Infinity || !seekable ||\n !seekable.length || (seekable.end(0)-seekable.start(0))<60)\n {\n return;\n }\n var progressControl = player.controlBar.progressControl;\n remove_child(progressControl, 'seekBar');\n progressControl.seekBar = progressControl.addChild('DvrSeekBar');\n remove_child(player.controlBar, 'liveDisplay');\n player.controlBar.addChild('LiveButton');\n player.controlBar.addClass('vjs-dvr');\n if (!player.hasStarted())\n player.one('play', function(){ player.dvr.seek_to_live(); });\n player.on('timeupdate', function(){\n player.controlBar.toggleClass('vjs-dvr-live',\n player.dvr.is_live());\n });\n if (flashls)\n player.dvr.live_threshold = Math.max(flashls.avg_duration*1.5, 10);\n else\n {\n hls.on('hlsLevelUpdated', function(e, data){\n player.dvr.live_threshold =\n Math.max(data.details.targetduration*1.5, 10);\n });\n }\n }\n player.ready(function(){\n var seekable = player.seekable();\n if (player.duration() && seekable && seekable.length)\n init();\n else\n player.one('loadedmetadata', function(){\n if (!player.tech_.flashlsProvider)\n {\n init();\n return;\n }\n player.on('timeupdate', function on_timeupdate(){\n var seekable = player.seekable();\n if (!seekable || !seekable.length)\n return;\n player.off('timeupdate', on_timeupdate);\n init();\n });\n });\n });\n player.dvr = {\n live_threshold: 10,\n range: function(){\n var seekable = player.seekable();\n return seekable && seekable.length ?\n {start: seekable.start(0), end: seekable.end(0)} : null;\n },\n is_live: function(){\n var range = this.range();\n var end = range && range.end;\n return end && (end-player.currentTime()) <= this.live_threshold;\n },\n format_time: function(time){\n var range = this.range();\n if (!range)\n return '0:00';\n if (!time)\n {\n time = player.scrubbing() ? player.getCache().currentTime :\n player.currentTime();\n }\n if (range.end-time < this.live_threshold)\n return player.localize('Live');\n time = Math.max(range.end-time, 0);\n return (time > 0 ? '-' : '')+vjs.formatTime(time, range.end);\n },\n seek_to_live: function(){\n var range = this.range();\n if (range && !this.is_live())\n player.currentTime(range.end);\n },\n };\n});\n\nvar SeekBar = vjs.getComponent('SeekBar');\nvjs.registerComponent('DvrSeekBar', vjs.extend(SeekBar, {\n options_: {\n children: ['dvrLoadProgressBar', 'dvrMouseTimeDisplay',\n 'dvrPlayProgressBar'],\n barName: 'dvrPlayProgressBar'\n },\n getPercent: function(){\n var dvr = this.player_.dvr;\n var range = dvr.range();\n return (!range || dvr.is_live()) ? 1 :\n (this.player_.currentTime()-range.start) /\n (range.end-range.start);\n },\n handleMouseMove: function(event){\n var range = this.player_.dvr.range();\n if (!range)\n return;\n var time = range.start + this.calculateDistance(event) *\n (range.end-range.start);\n if (range.end-time < this.player_.dvr.live_threshold)\n this.player_.dvr.seek_to_live();\n else\n this.player_.currentTime(Math.min(time, range.end));\n },\n updateAriaAttributes: function(el){\n el.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2));\n el.setAttribute('aria-valuetext', this.player_.dvr.format_time());\n },\n}));\n\nvar PlayProgressBar = vjs.getComponent('PlayProgressBar');\nvjs.registerComponent('DvrPlayProgressBar', vjs.extend(PlayProgressBar, {\n updateDataAttr: function(){\n this.el_.setAttribute('data-current-time',\n this.player_.dvr.format_time());\n },\n}));\n\nfunction el_pos(el){\n var box;\n if (el.getBoundingClientRect && el.parentNode)\n box = el.getBoundingClientRect();\n else\n return 0;\n var body = document.body;\n var client = document.documentElement.clientLeft || body.clientLeft || 0;\n var scroll = window.pageXOffset || body.scrollLeft;\n return Math.round(box.left + scroll - client);\n}\n\nvar MouseTimeDisplay = vjs.getComponent('MouseTimeDisplay');\nvar Component = vjs.getComponent('Component');\nvjs.registerComponent('DvrMouseTimeDisplay', vjs.extend(MouseTimeDisplay, {\n constructor: function(player, options){\n Component.call(this, player, options);\n this.keepTooltipsInside = get(options,\n 'playerOptions.controlBar.progressControl.keepTooltipsInside');\n if (this.keepTooltipsInside)\n {\n this.tooltip = vjs.createEl('div',\n {className: 'vjs-time-tooltip'});\n this.el().appendChild(this.tooltip);\n this.addClass('vjs-keep-tooltips-inside');\n }\n this.update(0, 0, 0);\n var progressEl = this.player_.controlBar.progressControl.el();\n progressEl.appendChild(this.tooltip);\n this.on(progressEl, 'mousemove',\n throttle(this.handleMouseMove.bind(this)), 25);\n },\n handleMouseMove: function(event){\n var range = this.player_.dvr.range();\n var time = range ? this.calculateDistance(event) *\n (range.end-range.start) + range.start : 0;\n var max_left = this.player_.controlBar.progressControl.seekBar.width()-\n this.width();\n var pos = event.pageX - el_pos(this.el().parentNode);\n pos = Math.min(Math.max(0, pos), max_left);\n var tp_width = this.tooltip.offsetWidth;\n var max_tp_left = this.tooltip.parentNode.offsetWidth-tp_width;\n var tp_pos = event.pageX-el_pos(this.tooltip.parentNode)-tp_width/2;\n tp_pos = Math.min(Math.max(0, tp_pos), max_tp_left);\n this.update(time, pos, tp_pos);\n },\n update: function(time, pos, tp_pos){\n this.el().style.left = pos + 'px';\n this.tooltip.innerHTML = this.player_.dvr.format_time(time);\n if (this.keepTooltipsInside)\n {\n var diff = pos-this.clampPosition_(pos)+1;\n var width =\n parseFloat(window.getComputedStyle(this.tooltip).width);\n this.tooltip.style.left = 'auto';\n this.tooltip.style.right = '-' +(width/2-diff)+'px';\n }\n else\n {\n this.tooltip.style.right = 'auto';\n this.tooltip.style.left = tp_pos + 'px';\n }\n },\n}));\n\nvar LoadProgressBar = vjs.getComponent('LoadProgressBar');\nvjs.registerComponent('DvrLoadProgressBar', vjs.extend(LoadProgressBar, {\n constructor: function(player, options){\n LoadProgressBar.call(this, player, options);\n this.partEls_ = [];\n var flashls;\n if (player.tech_.hls_obj)\n this.on(player.tech_.hls_obj, 'hlsLevelUpdated', this.update);\n else if (flashls = player.tech_.flashlsProvider)\n {\n this.on(player, 'timeupdate', function(){\n this.update(flashls.buffer);\n });\n }\n },\n update: function(buffer){\n var percentify = function(time, end){\n var percent = time / end || 0;\n return (percent >= 1 ? 1 : percent) * 100 + '%';\n };\n var range = this.player_.dvr.range();\n var start = range ? range.start : 0;\n var end = range ? range.end : 0;\n var children = this.partEls_;\n var buff = [];\n var i;\n if (buffer)\n {\n var cur = this.player_.currentTime();\n buff = [{start: cur, end: cur+buffer}];\n }\n else\n {\n var buffered = this.player_.buffered();\n for (i = 0; i < buffered.length; i++)\n {\n if (buffered.end(i)<=start || buffered.start(i)>=end)\n continue;\n buff.push({\n start: Math.max(buffered.start(i), start),\n end: Math.min(buffered.end(i), end),\n });\n }\n }\n var total = buff.length ? buff[buff.length-1].end - start : 0;\n this.el_.style.width = percentify(total, end-start);\n for (i = 0; i < buff.length; i++)\n {\n children[i] = children[i] || this.el_.appendChild(vjs.createEl());\n var part = children[i];\n part.style.left = percentify(buff[i].start-start, total);\n part.style.width = percentify(buff[i].end-buff[i].start, total);\n }\n for (i = children.length; i > buff.length; i--)\n this.el_.removeChild(children[i-1]);\n children.length = buff.length;\n },\n}));\n\nvar Button = vjs.getComponent('Button');\nvjs.registerComponent('LiveButton', vjs.extend(Button, {\n controlText_: 'Skip back to live',\n createEl: function(){\n var el = Button.prototype.createEl.call(this, 'button', {\n className: 'vjs-live-control vjs-control',\n });\n this.contentEl_ = vjs.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: this.localize('LIVE'),\n }, {\n 'aria-live': 'off',\n });\n el.appendChild(this.contentEl_);\n return el;\n },\n handleClick: function(){\n this.player_.dvr.seek_to_live();\n this.player_.play();\n },\n}));\n","'use strict';\nvar videojs = require('video.js');\nvar mime = require('./mime.js');\nvar util = require('./util.js');\nvar some = require('lodash/some');\n\nmodule.exports = function(){\n videojs.getComponent('Flash').registerSourceHandler({\n canHandleSource: function(source){\n if (mime.is_hls_type(source.type))\n return 'probably';\n else if (mime.is_hls_link(source.src))\n return 'maybe';\n return '';\n },\n handleSource: function(source, tech){\n if (tech.flashlsProvider)\n tech.flashlsProvider.dispose();\n return tech.flashlsProvider = new FlashlsProvider(source, tech);\n },\n }, 0);\n};\n\nfunction FlashlsProvider(source, tech){\n var swf = tech.el_, manual_level = -1, player_id = swf.id;\n var duration = 0, sliding_start = 0;\n var player = find_player(tech);\n var _this = this;\n this.avg_duration = 0;\n this.buffer = 0;\n function height_label(level){\n var height = level.height || Math.round(level.width * 9 / 16);\n return height ? height + 'p' : '';\n }\n function bitrate_label(level){\n return level.bitrate ? util.scaled_number(level.bitrate) + 'bps' : '';\n }\n function level_label(level, levels){\n var label = height_label(level);\n if (!label)\n return bitrate_label(level);\n var duplicated = some(levels, function(l){\n return l!=level && height_label(l)==label;\n });\n return duplicated ? label+' '+bitrate_label(level) : label;\n }\n function switch_quality(qualityId){\n manual_level = qualityId;\n swf.vjs_setProperty('level', qualityId);\n update_quality();\n }\n function update_quality(){\n var levels = swf.hola_hls_get_levels();\n var list = [];\n if (levels.length>1)\n list.push({id: -1, label: 'Auto'});\n for (var i=0; i<levels.length; i++)\n {\n list.push({id: levels[i].index, label: level_label(levels[i],\n levels)});\n }\n tech.trigger('loadedqualitydata', {\n quality: {\n list: list,\n selected: manual_level,\n current: swf.vjs_getProperty('level'),\n },\n callback: switch_quality,\n });\n }\n function on_msg(e){\n if (!e || !e.data || e.data.player_id!=player_id)\n return;\n switch (e.data.id)\n {\n case 'flashls.hlsEventLevelSwitch':\n update_quality();\n break;\n case 'flashls.hlsEventManifestLoaded':\n var level = e.data.levels[0];\n duration = level.duration;\n _this.avg_duration = level.averageduration;\n break;\n case 'flashls.hlsEventMediaTime':\n sliding_start = e.data.mediatime.live_sliding_main;\n duration = e.data.mediatime.duration;\n _this.buffer = e.data.mediatime.buffer;\n break;\n }\n }\n function on_hola_attach(){ player_id = swf.hola_settings({}).player_id; }\n this.seekable = function(){\n if (!duration)\n return videojs.createTimeRanges([]);\n if (!player.dvr || !swf.hola_hls_get_type ||\n swf.hola_hls_get_type()!='LIVE')\n {\n return videojs.createTimeRanges([[0, duration]]);\n }\n return videojs.createTimeRanges([[sliding_start,\n duration + sliding_start - 3*_this.avg_duration]]);\n };\n this.dispose = function(){\n window.removeEventListener('message', on_msg);\n player.off('hola.wrapper_attached', on_hola_attach);\n tech.flashlsProvider = undefined;\n };\n window.addEventListener('message', on_msg);\n player.on('hola.wrapper_attached', on_hola_attach);\n tech.setSrc(source.src);\n}\n\nfunction find_player(tech){\n var players = videojs.getPlayers();\n for (var key in players)\n {\n var player = players[key];\n if (player.tech_===tech)\n return player;\n }\n}\n","'use strict';\nvar videojs = window.videojs = require('video.js');\nrequire('./css/videojs.css'); // auto injected\nvar mime = require('./mime.js');\nvar util = require('./util.js');\nvar id3 = require('./id3.js');\nvar hlsjs_source_handler = hola_vjs_provider_require();\nvar flashls_source_handler = require('./flashls_source_handler.js');\nvar url = require('url');\nvar map = require('lodash/map');\nvar pick = require('lodash/pick');\n\n(function(){\n hlsjs_source_handler.attach();\n flashls_source_handler();\n load_cdn_loader();\n})();\n\nvar E = window.hola_player = module.exports = hola_player;\nE.VERSION = '1.0.70';\nE.players = {};\n\nfunction hola_player(opt, ready_cb){\n if (typeof opt=='function')\n {\n ready_cb = opt;\n opt = {};\n }\n opt = videojs.mergeOptions(opt); // clone\n var pl = opt.player && typeof opt.player!='string' && opt.player.length\n ? opt.player[0] : opt.player;\n var element = !pl ? document.querySelector('video, object, embed') :\n videojs.isEl(pl) ? pl : document.querySelector(pl);\n if (!element)\n return null;\n if (element.hola_player)\n return element.hola_player;\n if (opt = set_defaults(element, opt))\n return new Player(element, opt, ready_cb);\n}\n\nfunction set_defaults(element, opt){\n opt.autoplay = opt.auto_play || opt.autoplay; // allow both\n opt.base_url = opt.base_url||'//player2.h-cdn.com';\n if (opt.video_url)\n {\n opt.sources = [{\n src: opt.video_url,\n type: opt.video_type||mime.guess_link_type(opt.video_url),\n }];\n }\n else if (opt.sources && !opt.sources.length)\n opt.sources = undefined;\n if (['VIDEO', 'DIV', 'OBJECT', 'EMBED'].indexOf(element.tagName)<0)\n return;\n if (element.tagName=='VIDEO')\n {\n if (!opt.sources)\n {\n var sources = element.querySelectorAll('source');\n if (!sources.length)\n return;\n opt.sources =\n Array.prototype.map.call(sources, videojs.getAttributes);\n }\n opt = videojs.mergeOptions(videojs.getAttributes(element), opt);\n }\n return opt.sources && opt;\n}\n\nfunction load_deps(deps){\n deps = deps||{};\n require('@hola.org/videojs-osmf');\n require('@hola.org/videojs-contrib-media-sources');\n if (deps['videojs-settings'])\n require('@hola.org/videojs-settings');\n if (deps['videojs-hola-skin'])\n {\n require('@hola.org/videojs-hola-skin');\n require('./css/videojs-hola-skin.css');\n }\n if (deps['videojs-thumbnails'])\n {\n require('@hola.org/videojs-thumbnails');\n require('./css/videojs-thumbnails.css');\n }\n if (deps['videojs-contrib-ads'])\n {\n require('@hola.org/videojs-contrib-ads');\n require('./css/videojs-contrib-ads.css');\n }\n if (deps['videojs-ima'])\n {\n require('@hola.org/videojs-ima');\n require('./css/videojs-ima.css');\n }\n if (deps['videojs-contrib-dash'])\n {\n window.dashjs = {\n MediaPlayer: require('@hola.org/dashjs/dist/dash.mediaplayer.debug.js'),\n };\n require('videojs-contrib-dash');\n }\n if (deps.dvr)\n {\n require('./dvr.js');\n require('./css/dvr.css');\n }\n if (deps['videojs-watermark'])\n {\n require('videojs-watermark');\n require('./css/videojs-watermark.css');\n }\n}\n\nfunction Player(element, opt, ready_cb){\n this.ready_cb = ready_cb;\n this.opt = opt;\n this.element = this.init_element(element);\n this.vjs = this.init_vjs();\n this.tech_call_rewrites = {};\n this.vjs.hola = this.vjs.hola||{};\n this.vjs.hola.tech_call = this.tech_call.bind(this);\n E.players[this.id = this.vjs.id()] = this;\n}\n\nPlayer.prototype.init_element = function(element){\n var opt = this.opt;\n if (element.tagName=='VIDEO')\n {\n element.autoplay = false;\n element.controls = false;\n // with Hola player wrapper there is no autoSetup mode\n element.removeAttribute('data-setup');\n if (opt.poster)\n element.poster = opt.poster;\n // XXX bahaa: find a better solution\n reset_native_hls(element, opt.sources);\n }\n else\n {\n // special case when using a div container or flash object - create\n // video tag instead\n var style = window.getComputedStyle(element);\n var attrs = {\n id: util.unique_id('hola_player'),\n class: 'video-js',\n preload: opt.preload||'auto',\n width: opt.width||parseFloat(style.width),\n height: opt.height||parseFloat(style.height),\n };\n if (opt.poster)\n attrs.poster = opt.poster;\n var videoel = videojs.createEl('video', {}, attrs);\n videojs.appendContent(videoel, opt.sources.map(function(source){\n return videojs.createEl('source', {}, source);\n }));\n videoel.style.position = style.position=='static' ?\n 'relative' : style.position;\n videoel.style.left = style.left;\n videoel.style.top = style.top;\n // $(videoel).insertAfter(element);\n element.parentNode.insertBefore(videoel, element.nextSibling);\n element.style.display = 'none';\n element.hola_player = this;\n element = videoel;\n }\n if (!element.id)\n element.id = util.unique_id('hola_player');\n element.hola_player = this;\n return element;\n};\n\nPlayer.prototype.init_vjs = function(){\n var opt = this.opt, cb = this.ready_cb, hola_player = this;\n var vjs_opt = this.get_vjs_opt();\n load_deps({\n 'videojs-settings': !!vjs_opt.plugins.settings,\n 'videojs-hola-skin': !!vjs_opt.plugins.hola_skin,\n 'videojs-thumbnails': !!opt.thumbnails || opt.thumbnails===undefined,\n 'videojs-contrib-ads': !!opt.ads,\n 'videojs-ima': !!opt.ads,\n 'videojs-contrib-dash': opt.sources.some(is_dash),\n dvr: opt.dvr,\n 'videojs-watermark': !!vjs_opt.plugins.watermark,\n });\n var element = this.element;\n return videojs(this.element, vjs_opt, function(){\n var player = this;\n // enable tap events to make popup menu and ads work correctly\n player.emitTapEvents();\n if (player.tech_ && opt.controls)\n player.controls(true);\n if (opt.thumbnails)\n player.thumbnails(opt.thumbnails);\n hola_player.init_ads(player);\n hola_player.init_captions(player, element);\n hola_player.init_watermark(player, opt.controls_watermark);\n player.on('pause', function(e){\n if (player.scrubbing()) // XXX bahaa: do we need this?\n e.stopImmediatePropagation();\n }).on('save_logs', function(e){\n // XXX bahaa: TODO\n }).on('problem_report', function(e){\n // XXX bahaa: TODO\n }).on('cdn_graph_overlay', on_cdn_graph_overlay);\n if (cb)\n try { cb(player); } catch(e){ console.error(e.stack||e); }\n if (opt.autoplay &&\n !videojs.browser.IS_ANDROID && !videojs.browser.IS_IOS)\n {\n player.play();\n player.autoplay(true);\n }\n }).on('error', function (){\n var player = this;\n var error = player.error;\n if (!error || error.code!=error.MEDIA_ERR_SRC_NOT_SUPPORTED)\n return;\n var only_flash = opt.sources.every(function(s){\n return mime.is_hds_link(s.src) || mime.is_flv_link(s.src);\n });\n var flash = videojs.getTech('Flash');\n var modal = player.getChild('errorDisplay');\n if (modal && only_flash && (!flash || !flash.isSupported()))\n modal.fillWith('Flash plugin is required to play this media');\n });\n};\n\nfunction on_cdn_graph_overlay(){\n var hola_cdn = window.hola_cdn;\n var bws = hola_cdn && hola_cdn._get_bws();\n if (window.cdn_graph || !bws || hola_cdn._get_mode()!='cdn')\n return;\n try {\n var ldr = hola_cdn.get_wrapper().loader;\n var gopt = {\n graph: 'newgraph_progress_mode_highlight_tips',\n player_obj: bws.player,\n video: bws.player.vjs\n };\n var url = '//player.h-cdn.com'+hola_cdn.require.zdot('cdngraph_js');\n ldr.util.load_script(url, function(){\n window.cdn_graph.init(gopt, bws, ldr); });\n } catch(err){ console.error(err.stack||err); }\n}\n\nPlayer.prototype.get_settings_opt = function(){\n var opt = this.opt, s = opt.settings;\n if (s===false)\n return;\n s = videojs.mergeOptions({graph: opt.graph, volume: opt.volume}, s);\n var sources = opt.sources && opt.sources.filter(function(source){\n return !is_adaptive(source);\n });\n if (s.quality!==false)\n s.quality = {sources: sources};\n return s;\n};\n\nPlayer.prototype.get_vjs_opt = function(){\n var opt = this.opt;\n var script = util.current_script();\n var customer = script && url.parse(script.src, true, true).query.customer;\n var origin_opts = this.opt['data-setup']||{};\n if (origin_opts && typeof origin_opts=='string')\n {\n try {\n origin_opts = JSON.parse(origin_opts);\n } catch(e){}\n }\n // XXX: maybe we should merge all data-setup conf with vjs_opt\n origin_opts = pick(origin_opts, ['playbackRates']);\n return videojs.mergeOptions({\n sources: opt.sources,\n // XXX arik: unite swf to one\n osmf: {swf: opt.osmf_swf||\n opt.base_url+'/videojs-osmf.swf?customer='+customer\n },\n flash: {\n swf: opt.swf||opt.base_url+'/videojs.swf?customer='+customer,\n accelerated: opt.accelerated,\n },\n html5: {\n hlsjsConfig: {\n debug: false,\n fragLoadingLoopThreshold: 1000,\n manifestLoadingTimeOut: 20*1000,\n manifestLoadingMaxRetry: 4,\n levelLoadingTimeOut: 20*1000,\n levelLoadingMaxRetry: 4,\n xhrSetup: opt.withCredentials && function(xhr){\n xhr.withCredentials = true;\n },\n },\n },\n inactivityTimeout: opt.inactivity_timeout===undefined ?\n 2000 : opt.inactivity_timeout,\n poster: opt.poster,\n loop: opt.loop,\n muted: opt.muted,\n preload: opt.preload,\n techOrder:\n (opt.tech=='flash' ? ['flash', 'html5'] : ['html5', 'flash'])\n .concat('osmf'),\n tooltips: true,\n plugins: {\n settings: this.get_settings_opt(),\n dvr: opt.dvr,\n watermark: opt.watermark,\n hola_skin: opt.skin ? false : {\n css: false,\n no_play_transform: opt.no_play_transform,\n no_vjs_large: opt.no_vjs_large,\n show_controls_before_start: opt.show_controls_before_start,\n show_time_for_live: opt.show_time_for_live,\n },\n },\n }, origin_opts, opt.videojs_options);\n};\n\nfunction get_existing_handler(list, method, fn) {\n if (!list || !list[method])\n return;\n return list[method].filter(function(handler){\n return handler==fn; })[0];\n}\n\nPlayer.prototype.add_rewrite = function(method, fn){\n var handlers = this.tech_call_rewrites[method];\n if (get_existing_handler(handlers, method, fn))\n return;\n if (!handlers)\n handlers = this.tech_call_rewrites[method] = [];\n handlers.push(fn);\n};\n\nPlayer.prototype.remove_rewrite = function(method, fn){\n var handlers = this.tech_call_rewrites[method];\n var existing = get_existing_handler(handlers, method, fn);\n if (!existing)\n return;\n var index = handlers.indexOf(existing);\n if (index>=0)\n handlers.splice(index, 1);\n};\n\nPlayer.prototype.tech_call = function(method, arg){\n var handlers = this.tech_call_rewrites[method];\n if (!handlers)\n return false;\n var preventDefault = false;\n handlers.forEach(function(handler){\n if (handler(method, arg))\n preventDefault = true;\n });\n return preventDefault;\n};\n\nPlayer.prototype.init_ads = function(player){\n var opt = this.opt;\n if (!opt.ads)\n return;\n if(!window.google || !window.google.ima)\n {\n util.load_script('//imasdk.googleapis.com/js/sdkloader/ima3.js',\n this.init_ads.bind(this, player));\n return;\n }\n if (opt.ads.id3)\n opt.ads.manual = true;\n if (!opt.ads.adTagUrl && !opt.ads.adsResponse && !opt.ads.manual)\n return console.error('missing Ad Tag');\n if (!window.google) // missing external <script> or blocked by AdBlocker\n return console.error('missing IMA HTML5 SDK');\n if (!player.ads || !player.ima) // shouldn't happen as they're bundled\n return console.error('missing ad modules');\n player.ima(videojs.mergeOptions({\n id: player.id(),\n contribAdsSettings: {\n prerollTimeout: 10000,\n postrollTimeout: 1000,\n disablePlayContentBehindAd: true,\n },\n }, opt.ads));\n if (player.ima.adContainerDiv)\n {\n player.ima.adContainerDiv.style.cursor = 'pointer';\n // XXX andrey: workaround for an old android versions (4.4) where click\n // on imasdk iframe doesn't start the video. Need to check whether\n // we can enable it by default\n if (opt.ads.hideAdContainer)\n player.ima.adContainerDiv.style.display = 'none';\n }\n function init(e){\n player.off(['tap', 'click', 'play'], init);\n if (player.ima.adContainerDiv)\n {\n player.ima.adContainerDiv.style.cursor = '';\n if (opt.ads.hideAdContainer)\n player.ima.adContainerDiv.style.display = 'block';\n }\n player.ima.initializeAdDisplayContainer();\n if (!opt.ads.manual)\n player.ima.requestAds();\n if (e && e.type!='play')\n player.play();\n }\n function get_ima(){\n var ima = player.ima;\n if (!ima || !ima.adsActive)\n return;\n return ima;\n }\n function handle_play_pause(method, arg){\n var ima = get_ima();\n // proceed with default action if no ima active\n if (!ima)\n return;\n if (method=='play')\n {\n if (ima.adPlaying)\n return true;\n ima.resumeAd();\n }\n if (method=='pause')\n {\n if (!ima.adPlaying)\n return true;\n ima.pauseAd();\n }\n return true;\n }\n this.add_rewrite('play', handle_play_pause);\n this.add_rewrite('pause', handle_play_pause);\n if (player.paused())\n player.on(['tap', 'click', 'play'], init);\n else\n init();\n if (opt.ads.id3)\n init_ads_id3(player);\n};\n\nPlayer.prototype.init_captions = function(player, element){\n if (!element || !element.textTracks || !player)\n return;\n var tt = element.textTracks;\n // push native text tracks to simulated vjs text tracks\n var player_tracks = player.textTracks();\n tt.addEventListener('addtrack', function(e){\n if (!e || !e.track)\n return;\n player_tracks.addTrack_(e.track);\n });\n tt.addEventListener('removetrack', function(e){\n if (!e || !e.track)\n return;\n player_tracks.removeTrack_(e.track);\n });\n tt.addEventListener('change', function(){\n player_tracks.trigger({\n type: 'change',\n target: player_tracks,\n currentTarget: player_tracks,\n srcElement: player_tracks\n });\n });\n};\n\nPlayer.prototype.init_watermark = function(player, src){\n if (!src)\n return;\n player.getChild('controlBar').addChild('controlsWatermark', {src: src});\n};\n\nfunction init_ads_id3(player){\n var cues = [], played_cues = {};\n player.trigger('adsready');\n player.trigger('nopreroll');\n player.on('timeupdate', function(){\n var cur = player.currentTime();\n cues.forEach(function(cue){\n if (played_cues[cue.time] || cur<cue.time || cur-cue.time>0.5)\n return;\n player.ima.playAd(cue.ad);\n played_cues[cue.time] = true;\n });\n });\n player.tech_.on('parsedmetadata', function(e, data){\n var sample = data && data.samples && data.samples[0];\n var tags = id3.parse_id3(sample.data||sample.unit);\n var ad = tags.TXXX && tags.TXXX.adID;\n if (ad && cues.indexOf(sample.dts)<0)\n {\n cues.push({ad: ad, time: sample.dts});\n player.trigger('ads-cuepoints', map(cues, 'time'));\n }\n });\n}\n\nfunction is_hls(s){\n return mime.is_hls_link(s.src) || mime.is_hls_type(s.type);\n}\n\nfunction is_dash(s){\n return mime.is_dash_link(s.src) || mime.is_dash_type(s.type);\n}\n\nfunction is_hds(s){\n return mime.is_hds_link(s.src) || mime.is_hds_type(s.type);\n}\n\nfunction is_adaptive(s){\n return is_hls(s) || is_dash(s) || is_hds(s);\n}\n\nfunction reset_native_hls(el, sources){\n // not using el.currentSrc because it might not be selected yet.\n if (!el.canPlayType('application/x-mpegurl') || !sources.some(is_hls))\n return;\n // if source is hls and browser supports hls natively reset video element\n // so videojs will select our hls source handler instead of native.\n el.src = '';\n el.load();\n}\n\nfunction load_cdn_loader(){\n var script = util.current_script();\n if (!script)\n return;\n var customer = url.parse(script.src, true, true).query.customer;\n if (!customer)\n return;\n if (document.querySelector('script[src*=\"//player.h-cdn.com/loader\"]'))\n {\n console.warn('Hola loader.js is included with Hola Player. '\n +'There is no need to load it separately');\n return;\n }\n console.log('Adding CDN loader...');\n util.load_script('//player.h-cdn.com/loader.js?customer='+customer,\n undefined, {async: true, crossOrigin: 'anonymous'});\n}\n","'use strict';\nvar E = module.exports;\n\nfunction read_int(data, offset){\n return data[offset++]<<21 | data[offset++]<<14 | data[offset++]<<7 |\n data[offset++];\n}\n\nfunction read_utf(data, start, len){\n var res = '';\n for (var i=start; i<start+len; i++)\n res += String.fromCharCode(data[i]);\n return res;\n}\n\nfunction parse_txxx(data){\n var res = {};\n var i = data.indexOf(0);\n if (data[0]!=3 || i<0)\n return res;\n res[read_utf(data, 1, i-1)] = read_utf(data, i+1, data.length-i-1);\n return res;\n}\n\nfunction parse_frames(data){\n var offset = 0, id, size, res = {};\n while (offset+8 <= data.length)\n {\n id = read_utf(data, offset, 4);\n offset += 4;\n size = read_int(data, offset);\n offset += 6;\n if (id=='TXXX')\n res.TXXX = parse_txxx(data.subarray(offset, offset+size));\n offset += size;\n }\n return res;\n}\n\nE.parse_id3 = function(data){\n if (!data || !data.length)\n return {};\n var offset = 0, size, header;\n header = read_utf(data, offset, 3);\n if (header!='ID3')\n return {};\n offset += 6;\n size = read_int(data, offset);\n offset += 4;\n return parse_frames(data.subarray(offset, offset+size));\n};\n","'use strict';\nvar url = require('url');\nvar E = module.exports;\n\nvar mp4_suffix = /\\.(mp4|m4p|m4v|mov)$/i;\nvar hls_suffix = /\\.m3u8$/;\nvar hds_suffix = /\\.f4m$/;\nvar dash_suffix = /\\.mpd$/;\nvar flv_suffix = /\\.flv$/;\nvar webm_suffix = /\\.webm$/;\nfunction is_rx_link(v, rx){\n return !!v && rx.test(url.parse(v).pathname.split(';')[0]); }\nE.is_mp4_link = function(v){ return is_rx_link(v, mp4_suffix); };\nE.is_hls_link = function(v){ return is_rx_link(v, hls_suffix); };\nE.is_hds_link = function(v){ return is_rx_link(v, hds_suffix); };\nE.is_dash_link = function(v){ return is_rx_link(v, dash_suffix); };\nE.is_flv_link = function(v){ return is_rx_link(v, flv_suffix); };\nE.is_webm_link = function(v){ return is_rx_link(v, webm_suffix); };\nE.guess_link_type = function(v){\n var p = url && url.parse(v).pathname;\n if (mp4_suffix.test(p))\n return 'video/mp4';\n if (hls_suffix.test(p))\n return 'application/x-mpegurl';\n if (hds_suffix.test(p))\n return 'application/adobe-f4m';\n if (dash_suffix.test(p))\n return 'application/dash+xml';\n if (flv_suffix.test(p))\n return 'video/flv';\n if (webm_suffix.test(p))\n return 'video/webm';\n console.log('could not guess link type: \"'+v+'\" assuming mp4');\n return 'video/mp4';\n};\nE.is_hls_type = function(type){\n return /^application\\/x-mpegurl$/i.test(type);\n};\nE.is_hds_type = function(type){\n return /^application\\/adobe-f4m$/i.test(type);\n};\nE.is_dash_type = function(type){\n return /^application\\/dash\\+xml/i.test(type);\n};\n","'use strict';\nvar E = module.exports;\n\nE.load_script = function(url, onload, attrs){\n var script = document.createElement('script');\n script.src = url;\n script.onload = onload;\n if (attrs)\n Object.assign(script, attrs);\n if (document.getElementsByTagName('head').length)\n document.getElementsByTagName('head')[0].appendChild(script);\n else if (document.getElementsByTagName('body').length)\n document.getElementsByTagName('body')[0].appendChild(script);\n else if (document.head)\n document.head.appendChild(script);\n};\n\nE.current_script = function(){\n var script;\n if (script = document.querySelector(\n 'script[src*=\"//player.h-cdn.com/player/\"]') ||\n document.querySelector('script[src*=\"//player2.h-cdn.com/\"]') ||\n document.querySelector(\n 'script[src*=\"//cdn.jsdelivr.net/hola_player/\"]') ||\n document.querySelector(\n 'script[src*=\"//cdn.jsdelivr.net/npm/@hola.org/hola_player@\"]'))\n {\n return script;\n }\n if (script = document.currentScript)\n return script;\n // assumes wasn't loaded async\n var scripts = document.getElementsByTagName('script');\n return scripts[scripts.length-1];\n};\n\nvar id_counter = 0;\nvar rand = Math.floor(Math.random()*10000)+'';\nE.unique_id = function(prefix){\n return (prefix ? prefix+'_' : '')+rand+'_'+(++id_counter);\n};\n\nE.scaled_number = function(num){\n if (num===undefined)\n return '';\n if (!num)\n return '0';\n var k = 1024;\n var sizes = ['', 'K', 'M', 'G', 'T', 'P'];\n var i = Math.floor(Math.log(num)/Math.log(k));\n num /= Math.pow(k, i);\n if (num<0.001)\n return '0';\n if (num>=k-1)\n num = Math.trunc(num);\n var str = num.toFixed(num<1 ? 3 : num<10 ? 2 : num<100 ? 1 : 0);\n return str.replace(/\\.0*$/, '')+sizes[i];\n};\n","var zdot_conf = require('./zdot_conf.js');\nvar external_util = require('./external_util.js');\nvar E = {};\nvar ls = typeof window!='undefined' && window.localStorage;\nvar urls = [];\nif (typeof window!='undefined')\n{\n if (window.top!=window)\n urls.push(document.referrer);\n urls.push(location.href);\n}\n\nfunction get_str_conf(key, s){\n var m = s.match(new RegExp('[?&#]'+key+'(=.*?)?(#|&|$)'));\n return m && (m[1] ? m[1].replace(/^=/, '') : '');\n}\n\nfunction get_url_conf(key){\n var m;\n urls.forEach(function(u){ m = m||get_str_conf(key, u); });\n return m;\n}\n\nfunction get_conf(key, def_empty){\n var res, hp_key = 'hola_provider_'+key;\n if ((res = get_url_conf(hp_key))!=null)\n console.info(E.provider_id+': using '+hp_key+' from url');\n else if (ls && (res = ls['hola_provider_'+key])!=undefined)\n console.info(E.provider_id+': using '+hp_key+' from lstorage');\n else if (E.owner && E.owner.hasAttribute(key.replace('_', '-')))\n res = E.owner.getAttribute(key.replace('_', '-'));\n else if (zdot_conf[key] && !zdot_conf[key].match(/^{\\[=.*\\]}$/))\n res = zdot_conf[key];\n return res || (res=='' ? def_empty : res);\n}\n\nfunction check_filter(arr, val, is_filter_in){\n arr = typeof arr=='string' ? [arr] : arr;\n if (!arr || !(arr instanceof Array))\n return true;\n return is_filter_in==arr.indexOf(val)>=0;\n}\n\nfunction is_register_disabled(){\n var v;\n // adding ?hola_provider_force or ?hola_provider_force=disabled to uri\n // overwrites register_percent and register_browser config\n if (v = get_conf('force', 'enabled'))\n return v=='disabled';\n if (v = get_conf('register_percent', 'n/a'))\n {\n if (isNaN(v)||v<0||v>100)\n {\n console.error(E.provider_id+': invalid register_percent, '+\n 'expected a value between 0 and 100 but '+v+' found');\n return true;\n }\n else if (!v || Math.random()*100>v)\n return true;\n }\n if (v = get_conf('register_browser'))\n {\n var browser = external_util.user_agent.guess_browser();\n var guess = external_util.user_agent.guess();\n var platform = guess.mobile ? 'mobile' : guess.tv ? 'tv' :\n 'desktop';\n if (browser.opera && browser.browser=='chrome')\n browser.browser = 'opera';\n try { v = JSON.parse(v); } catch(e){ v = {}; }\n if (!check_filter(v.browser_in, browser.browser, true) ||\n !check_filter(v.browser_out, browser.browser) ||\n !check_filter(v.os_in, guess.os, true) ||\n !check_filter(v.os_out, guess.os) ||\n !check_filter(v.platform_in, platform, true) ||\n !check_filter(v.platform_out, platform))\n {\n return true;\n }\n }\n}\n\nE.init = function(provider_id){\n E.provider_id = provider_id;\n E.owner = document.currentScript ||\n document.querySelector('#'+E.provider_id);\n var v, init_conf = {autoinit: true, disabled: false, hls_params: {}};\n if (zdot_conf.embedded_provider)\n init_conf.autoinit = false;\n else\n {\n if (get_conf('manual_init', true))\n init_conf.autoinit = false;\n init_conf.disabled = is_register_disabled();\n }\n if (v = get_conf('hls_params'))\n {\n try {\n init_conf.hls_params = external_util.conv.parse_obj(\n JSON.parse(v), {func: true, re: true});\n } catch(e){}\n }\n return init_conf;\n};\n\nmodule.exports = E;\n","// XXX volodymyr: common container for stuff copied from the main project\n// for the sake of avoiding dependency\nvar E = module.exports = {};\n\n// XXX vadiml: copied from pkg/util/conv.js\nE.conv = (function(){\nvar E = {};\nfunction parse_leaf(v, opt){\n if (!v || typeof v!='object' || Object.keys(v).length!=1)\n return v;\n if (v.__Function__ && opt.func)\n return new Function('', '\"use strict\";return ('+v.__Function__+');')();\n if (v.__RegExp__ && opt.re)\n {\n var parsed = /^\\/(.*)\\/(\\w*)$/.exec(v.__RegExp__);\n if (!parsed)\n throw new Error('failed parsing regexp');\n return new RegExp(parsed[1], parsed[2]);\n }\n return v;\n}\nfunction parse_obj(v, opt){\n if (!v || typeof v!='object')\n return v;\n if (Array.isArray(v))\n {\n for (var i = 0; i<v.length; i++)\n v[i] = parse_obj(v[i], opt);\n return v;\n }\n var v2 = parse_leaf(v, opt);\n if (v2!==v)\n return v2;\n for (var key in v)\n v[key] = parse_obj(v[key], opt);\n return v;\n}\nE.parse_obj = parse_obj;\nreturn E;\n})();\n\n// XXX volodymyr: copied from pkg/util/user_agent.js\nE.user_agent = (function(){\nvar E = {};\n\n// XXX arik: sync: util/user_agent.js <-> svc/cdn/pub/play_loader.js\nvar win_versions = {\n '10.0': '10.0',\n '6.3': '8.1',\n '6.2': '8',\n '6.1': '7',\n '6.0': 'vista',\n '5.2': '2003',\n '5.1': 'xp',\n '5.0': '2000',\n};\n\nvar arch_mapping = {\n x86_64: '64',\n i686: '32',\n arm: 'arm',\n};\n\nvar check_hola = /\\bhola_android\\b/i;\nvar check_android_cdn = /Android.* CDNService\\/([0-9\\.]+)$/;\nvar check_ios_cdn = / CDNService\\/([0-9\\.]+)$/;\nvar check_opera = /\\bOPR\\b\\/(\\d+)/i;\nvar check_edge = /\\bEdge\\b\\/(\\d+)/i;\nvar check_xbox = /\\bxbox\\b/i;\nvar check_ucbrowser = /\\bUCBrowser\\b\\/(\\d+)/i;\nvar check_webview = / Version\\/(\\d+)(\\.\\d)/;\n\n// var is_browser = !is_node_ff && typeof window!='undefined';\nvar is_browser = true;\n\nfunction ios_ua(ua, safari_ver){\n var res;\n if (res = /(?:iPhone|iPad|iPod|iPod touch);.*?OS ([\\d._]+)/.exec(ua))\n {\n var ios_ver = res[1];\n return {browser: 'safari', version: safari_ver||ios_ver, ios: ios_ver,\n hola_ios: (is_browser&&window.hola_cdn_sdk)||\n check_ios_cdn.test(ua)};\n }\n if (/HolaCDN iOS/.exec(ua))\n return {browser: 'safari', hola_ios: true};\n}\n\nfunction check_chromium(ua){\n if (check_webview.test(ua) || /Android/.test(ua) || / Mobile /.test(ua) ||\n check_opera.test(ua))\n {\n return false;\n }\n var group = '(?: (\\\\w*)\\\\/)?', ver = '\\\\/[\\\\d\\\\.]+';\n var res = new RegExp('AppleWebKit'+ver+'(?: \\\\(.*\\\\))?'+group+'.* Chrome'+\n ver+group+'.* Safari'+ver+group).exec(ua);\n return res && (res[1]||res[2]||res[3]);\n}\n\nE.guess_browser = function(ua){\n var res;\n ua = ua || (is_browser ? window.navigator&&navigator.userAgent : '');\n if (res = /\\bOpera Mini\\/(\\d+)/.exec(ua))\n return {browser: 'opera_mini', version: res[1]};\n var ucbrowser = check_ucbrowser.exec(ua);\n if (res = /[( ]MSIE ([6789]|10).\\d[);]/.exec(ua))\n return {browser: 'ie', version: res[1], xbox: check_xbox.test(ua)};\n if (res = /[( ]Trident\\/\\d+(\\.\\d)+.*rv:(\\d\\d)(\\.\\d)+[);]/.exec(ua))\n return {browser: 'ie', version: res[2], xbox: check_xbox.test(ua)};\n if (res = / Chrome\\/(\\d+)(\\.\\d+)+.* Safari\\/\\d+(\\.\\d+)+/.exec(ua))\n {\n var opera = check_opera.exec(ua);\n var edge;\n if (edge = check_edge.exec(ua))\n return {browser: 'edge', version: edge[1]};\n return {browser: 'chrome', version: res[1],\n android: ua.match(/Android/),\n webview: ua.match(check_webview),\n hola_android: check_hola.test(ua),\n hola_app: check_android_cdn.test(ua),\n chromium_based: check_chromium(ua),\n opera: opera && !!opera[1],\n opera_version: opera ? opera[1] : undefined,\n ucbrowser: ucbrowser && !!ucbrowser[1],\n ucbrowser_version: ucbrowser ? ucbrowser[1] : undefined,\n webos_app: /Web0S/.test(ua)};\n }\n if (res = / QupZilla\\/(\\d+\\.\\d+\\.\\d+).* Safari\\/\\d+.\\d+/.exec(ua))\n return {browser: 'qupzilla', version: res[1]};\n if (res = /\\(PlayStation (\\d+) (\\d+\\.\\d+)\\).* AppleWebKit\\/\\d+.\\d+/\n .exec(ua))\n {\n return {browser: 'playstation'+res[1], version: res[2]};\n }\n if (res = / Version\\/(\\d+)(\\.\\d)+.* Safari\\/\\d+.\\d+/.exec(ua))\n {\n if (!ua.match(/Android/))\n return ios_ua(ua, res[1])||{browser: 'safari', version: res[1]};\n return {browser: 'chrome', version: res[1], android: true,\n webview: true, hola_android: check_hola.test(ua),\n hola_app: check_android_cdn.test(ua),\n ucbrowser: ucbrowser && !!ucbrowser[1],\n ucbrowser_version: ucbrowser ? ucbrowser[1] : undefined};\n }\n if (res = / (Firefox|PaleMoon)\\/(\\d+).\\d/.exec(ua))\n {\n return {browser: 'firefox', version: res[2],\n palemoon: res[1]=='PaleMoon'};\n }\n if (/Hola\\/\\d+\\.\\d+.*?(?:iPhone|iPad|iPod)/.exec(ua))\n return {browser: 'safari', version: 'Hola'};\n if (res = ios_ua(ua))\n return res;\n return {};\n};\n\nE.guess = function(ua, platform){\n var res;\n ua = ua || (is_browser ? navigator.userAgent : '');\n platform = platform || (is_browser ? navigator.platform : '');\n if (check_xbox.exec(ua))\n return {os: 'xbox', mobile: false};\n if (res = /Windows(?: NT(?: (.*?))?)?[);]/.exec(ua))\n {\n return {\n os: 'windows',\n version: win_versions[res[1]],\n release_version: res[1],\n arch: ua.match(/WOW64|Win64|x64/) ? '64' : '32',\n mobile: false,\n };\n }\n if (res = /Macintosh.*; (?:Intel|PPC) Mac OS X (\\d+[._]\\d+)/.exec(ua))\n return {os: 'macos', version: res[1].replace('_', '.'), mobile: false};\n if (/Macintosh/.exec(ua))\n return {os: 'macos', mobile: false};\n if (/Web0S.*SmartTV/.exec(ua))\n {\n return {os: 'webos', version: /Chrome/.test(ua) ? '3' : '2',\n mobile: false, tv: true};\n }\n if (res = /Android(?: (\\d+\\.\\d+))?/.exec(ua))\n return {os: 'android', version: res[1], mobile: true};\n if (res = /(Linux|CrOS|OpenBSD|FreeBSD)(?: (x86_64|i686|arm))?/.exec(ua))\n {\n if (check_opera.test(ua) && res[1]=='Linux' && res[2]=='x86_64' &&\n /^Linux arm/.test(platform))\n {\n // Opera Mobile bug\n return {os: 'android', mobile: true};\n }\n return {\n os: res[1].toLowerCase(),\n arch: arch_mapping[res[2]],\n nix: true,\n mobile: false,\n };\n }\n if (res = /(?:iPhone|iPad|iPod|iPod touch);.*?OS (\\d+[._]\\d+)/.exec(ua))\n return {os: 'ios', version: res[1].replace('_', '.'), mobile: true};\n if (/iPhone|iPad|iPod|HolaCDN iOS/.exec(ua))\n return {os: 'ios', mobile: true};\n if (/PLAYSTATION/.exec(ua))\n return {os: 'ps', mobile: false};\n if (/Windows Phone/.exec(ua))\n return {os: 'winphone', mobile: true};\n // HitLeap Viewer (whatever it is) is Windows-only\n if (/HitLeap Viewer/.exec(ua))\n return {os: 'windows', mobile: false};\n return {};\n};\n\nreturn E;\n})();\n","function main(){\n var conf = require('./conf.js').init('hola_videojs_hls_provider');\n if (conf.disabled)\n return {disabled: true, attach: function(){}, detach: function(){}};\n var Hls = window.Hls = require('@hola.org/hls.js').default;\n var provider = require('@hola.org/videojs5-hlsjs-source-handler');\n provider.Hls = Hls;\n provider.version = '1.0.116';\n provider.provider_version = provider.VERSION;\n provider.hls_version = provider.Hls.version;\n provider.hls_params = conf.hls_params;\n if (conf.autoinit)\n provider.attach();\n return provider;\n}\n\ntry { module.exports = main(); }\ncatch(e){ module.exports = {init_failure: e}; }\n","// XXX pavlo: workaround for UglifyJS optimization\nvar is_set = function(v){ return v==1; };\n// XXX volodymyr: change it to zdot\nmodule.exports = {\n embedded_provider: is_set('{[=it.HOLA_EMBEDDED_PROVIDER]}'),\n register_percent: '{[=it.HOLA_REGISTER_PERCENT]}',\n register_browser: '{[=it.HOLA_REGISTER_BROWSER]}',\n hls_params: '{[=it.HOLA_HLS_PARAMS]}',\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _bufferHelper = require('../helper/buffer-helper');\n\nvar _bufferHelper2 = _interopRequireDefault(_bufferHelper);\n\nvar _errors = require('../errors');\n\nvar _logger = require('../utils/logger');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * simple ABR Controller\n * - compute next level based on last fragment bw heuristics\n * - implement an abandon rules triggered if we have less than 2 frag buffered and if computed bw shows that we risk buffer stalling\n */\n\nvar AbrController = function (_EventHandler) {\n _inherits(AbrController, _EventHandler);\n\n function AbrController(hls) {\n _classCallCheck(this, AbrController);\n\n var _this = _possibleConstructorReturn(this, (AbrController.__proto__ || Object.getPrototypeOf(AbrController)).call(this, hls, _events2.default.FRAG_LOADING, _events2.default.FRAG_LOAD_PROGRESS, _events2.default.FRAG_LOADED, _events2.default.ERROR));\n\n _this.lastLoadedFragLevel = 0;\n _this._autoLevelCapping = -1;\n _this._nextAutoLevel = -1;\n _this.hls = hls;\n _this.onCheck = _this.abandonRulesCheck.bind(_this);\n return _this;\n }\n\n _createClass(AbrController, [{\n key: 'destroy',\n value: function destroy() {\n this.clearTimer();\n _eventHandler2.default.prototype.destroy.call(this);\n }\n }, {\n key: 'onFragLoading',\n value: function onFragLoading(data) {\n if (!this.timer) {\n this.timer = setInterval(this.onCheck, 100);\n }\n this.fragCurrent = data.frag;\n }\n }, {\n key: 'onFragLoadProgress',\n value: function onFragLoadProgress(data) {\n var stats = data.stats;\n // only update stats if first frag loading\n // if same frag is loaded multiple times, it might be in browser cache, and loaded quickly\n // and leading to wrong bw estimation\n if (stats.aborted === undefined && data.frag.loadCounter === 1) {\n this.lastfetchduration = (performance.now() - stats.trequest) / 1000;\n this.lastbw = stats.loaded * 8 / this.lastfetchduration;\n //console.log(`fetchDuration:${this.lastfetchduration},bw:${(this.lastbw/1000).toFixed(0)}/${stats.aborted}`);\n }\n }\n }, {\n key: 'abandonRulesCheck',\n value: function abandonRulesCheck() {\n /*\n monitor fragment retrieval time...\n we compute expected time of arrival of the complete fragment.\n we compare it to expected time of buffer starvation\n */\n var hls = this.hls,\n v = hls.media,\n frag = this.fragCurrent;\n\n // if loader has been destroyed or loading has been aborted, stop timer and return\n if (!frag.loader || frag.loader.stats && frag.loader.stats.aborted) {\n _logger.logger.warn('frag loader destroy or aborted, disarm abandonRulesCheck');\n this.clearTimer();\n return;\n }\n /* only monitor frag retrieval time if\n (video not paused OR first fragment being loaded(ready state === HAVE_NOTHING = 0)) AND autoswitching enabled AND not lowest level (=> means that we have several levels) */\n if (v && (!v.paused || !v.readyState) && frag.autoLevel && frag.level) {\n var requestDelay = performance.now() - frag.trequest;\n // monitor fragment load progress after half of expected fragment duration,to stabilize bitrate\n if (requestDelay > 500 * frag.duration) {\n var loadRate = Math.max(1, frag.loaded * 1000 / requestDelay); // byte/s; at least 1 byte/s to avoid division by zero\n if (frag.expectedLen < frag.loaded) {\n frag.expectedLen = frag.loaded;\n }\n var pos = v.currentTime;\n var fragLoadedDelay = (frag.expectedLen - frag.loaded) / loadRate;\n var bufferStarvationDelay = _bufferHelper2.default.bufferInfo(v, pos, hls.config.maxBufferHole).end - pos;\n // consider emergency switch down only if we have less than 2 frag buffered AND\n // time to finish loading current fragment is bigger than buffer starvation delay\n // ie if we risk buffer starvation if bw does not increase quickly\n if (bufferStarvationDelay < 2 * frag.duration && fragLoadedDelay > bufferStarvationDelay) {\n var fragLevelNextLoadedDelay = void 0,\n nextLoadLevel = void 0;\n // lets iterate through lower level and try to find the biggest one that could avoid rebuffering\n // we start from current level - 1 and we step down , until we find a matching level\n for (nextLoadLevel = frag.level - 1; nextLoadLevel >= 0; nextLoadLevel--) {\n // compute time to load next fragment at lower level\n // 0.8 : consider only 80% of current bw to be conservative\n // 8 = bits per byte (bps/Bps)\n fragLevelNextLoadedDelay = frag.duration * hls.levels[nextLoadLevel].bitrate / (8 * 0.8 * loadRate);\n _logger.logger.log('fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[' + nextLoadLevel + '] :' + fragLoadedDelay.toFixed(1) + '/' + bufferStarvationDelay.toFixed(1) + '/' + fragLevelNextLoadedDelay.toFixed(1));\n if (fragLevelNextLoadedDelay < bufferStarvationDelay) {\n // we found a lower level that be rebuffering free with current estimated bw !\n break;\n }\n }\n // only emergency switch down if it takes less time to load new fragment at lowest level instead\n // of finishing loading current one ...\n if (fragLevelNextLoadedDelay < fragLoadedDelay) {\n // ensure nextLoadLevel is not negative\n nextLoadLevel = Math.max(0, nextLoadLevel);\n // force next load level in auto mode\n hls.nextLoadLevel = nextLoadLevel;\n // abort fragment loading ...\n _logger.logger.warn('loading too slow, abort fragment loading and switch to level ' + nextLoadLevel);\n //abort fragment loading\n frag.loader.abort();\n this.clearTimer();\n hls.trigger(_events2.default.FRAG_LOAD_EMERGENCY_ABORTED, { frag: frag });\n }\n }\n }\n }\n }\n }, {\n key: 'onFragLoaded',\n value: function onFragLoaded(data) {\n // stop monitoring bw once frag loaded\n this.clearTimer();\n // store level id after successful fragment load\n this.lastLoadedFragLevel = data.frag.level;\n // reset forced auto level value so that next level will be selected\n this._nextAutoLevel = -1;\n }\n }, {\n key: 'onError',\n value: function onError(data) {\n // stop timer in case of frag loading error\n switch (data.details) {\n case _errors.ErrorDetails.FRAG_LOAD_ERROR:\n case _errors.ErrorDetails.FRAG_LOAD_TIMEOUT:\n this.clearTimer();\n break;\n default:\n break;\n }\n }\n }, {\n key: 'clearTimer',\n value: function clearTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n }\n\n /** Return the capping/max level value that could be used by automatic level selection algorithm **/\n\n }, {\n key: 'autoLevelCapping',\n get: function get() {\n return this._autoLevelCapping;\n }\n\n /** set the capping/max level value that could be used by automatic level selection algorithm **/\n ,\n set: function set(newLevel) {\n this._autoLevelCapping = newLevel;\n }\n }, {\n key: 'nextAutoLevel',\n get: function get() {\n var lastbw = this.lastbw,\n hls = this.hls,\n adjustedbw,\n i,\n maxAutoLevel;\n if (this._autoLevelCapping === -1 && hls.levels && hls.levels.length) {\n maxAutoLevel = hls.levels.length - 1;\n if (this.maxLevelBitrate) {\n for (i = maxAutoLevel; i >= 0 && hls.levels[i].bitrate > this.maxLevelBitrate; i--) {}\n if (i > 0) {\n maxAutoLevel = i;\n }\n }\n } else {\n maxAutoLevel = this._autoLevelCapping;\n }\n\n // in case next auto level has been forced, return it straight-away (but capped)\n if (this._nextAutoLevel !== -1) {\n return Math.min(this._nextAutoLevel, maxAutoLevel);\n }\n\n // follow algorithm captured from stagefright :\n // https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/httplive/LiveSession.cpp\n // Pick the highest bandwidth stream below or equal to estimated bandwidth.\n for (i = 0; i <= maxAutoLevel; i++) {\n // consider only 80% of the available bandwidth, but if we are switching up,\n // be even more conservative (70%) to avoid overestimating and immediately\n // switching back.\n if (i <= this.lastLoadedFragLevel) {\n adjustedbw = 0.8 * lastbw;\n } else {\n adjustedbw = 0.7 * lastbw;\n }\n if (adjustedbw < hls.levels[i].bitrate) {\n return Math.max(0, i - 1);\n }\n }\n return i - 1;\n },\n set: function set(nextLevel) {\n this._nextAutoLevel = nextLevel;\n }\n }]);\n\n return AbrController;\n}(_eventHandler2.default);\n\nexports.default = AbrController;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _logger = require('../utils/logger');\n\nvar _errors = require('../errors');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Buffer Controller\n */\n\nvar BufferController = function (_EventHandler) {\n _inherits(BufferController, _EventHandler);\n\n function BufferController(hls) {\n _classCallCheck(this, BufferController);\n\n // the value that we have set mediasource.duration to\n // (the actual duration may be tweaked slighly by the browser)\n var _this = _possibleConstructorReturn(this, (BufferController.__proto__ || Object.getPrototypeOf(BufferController)).call(this, hls, _events2.default.MEDIA_ATTACHING, _events2.default.MEDIA_DETACHING, _events2.default.BUFFER_RESET, _events2.default.BUFFER_APPENDING, _events2.default.BUFFER_CODECS, _events2.default.BUFFER_EOS, _events2.default.BUFFER_FLUSHING, _events2.default.FRAG_PARSING_DATA, _events2.default.FRAG_APPENDING, _events2.default.LEVEL_UPDATED));\n\n _this._msDuration = null;\n // the value that we want to set mediaSource.duration to\n _this._levelDuration = null;\n\n // Source Buffer listeners\n _this.onsbue = _this.onSBUpdateEnd.bind(_this);\n _this.onsbe = _this.onSBUpdateError.bind(_this);\n _this.tracks = {};\n return _this;\n }\n\n _createClass(BufferController, [{\n key: 'destroy',\n value: function destroy() {\n _eventHandler2.default.prototype.destroy.call(this);\n }\n }, {\n key: 'onFragParsingData',\n value: function onFragParsingData(data) {\n var type = data.type;\n var audioTrack = this.tracks.audio;\n\n // Adjusting `SourceBuffer.timestampOffset` (desired point in the timeline where the next frames should be appended)\n // in Chrome browser when we detect MPEG audio container and time delta between level PTS and `SourceBuffer.timestampOffset`\n // is greater than 100ms (this is enough to handle seek for VOD or level change for LIVE videos). At the time of change we issue\n // `SourceBuffer.abort()` and adjusting `SourceBuffer.timestampOffset` if `SourceBuffer.updating` is false or awaiting `updateend`\n // event if SB is in updating state.\n // More info here: https://github.com/dailymotion/hls.js/issues/332#issuecomment-257986486\n\n if (type === 'audio' && audioTrack && audioTrack.container === 'audio/mpeg') {\n // Chrome audio mp3 track\n var audioBuffer = this.sourceBuffer.audio;\n var delta = Math.abs(audioBuffer.timestampOffset - data.startPTS);\n\n // adjust timestamp offset if time delta is greater than 100ms\n if (delta > 0.1) {\n var updating = audioBuffer.updating;\n\n try {\n audioBuffer.abort();\n } catch (err) {\n updating = true;\n _logger.logger.warn('can not abort audio buffer: ' + err);\n }\n\n if (!updating) {\n _logger.logger.warn('change mpeg audio timestamp offset from ' + audioBuffer.timestampOffset + ' to ' + data.startPTS);\n audioBuffer.timestampOffset = data.startPTS;\n } else {\n this.audioTimestampOffset = data.startPTS;\n }\n }\n }\n }\n }, {\n key: 'onMediaAttaching',\n value: function onMediaAttaching(data) {\n var media = this.media = data.media;\n if (media) {\n // setup the media source\n var ms = this.mediaSource = new MediaSource();\n //Media Source listeners\n this.onmso = this.onMediaSourceOpen.bind(this);\n this.onmse = this.onMediaSourceEnded.bind(this);\n this.onmsc = this.onMediaSourceClose.bind(this);\n ms.addEventListener('sourceopen', this.onmso);\n ms.addEventListener('sourceended', this.onmse);\n ms.addEventListener('sourceclose', this.onmsc);\n // link video and media Source\n var url = URL.createObjectURL(ms);\n _logger.logger.log('set object url ' + url);\n media.src = url;\n }\n }\n }, {\n key: 'onMediaDetaching',\n value: function onMediaDetaching() {\n _logger.logger.log('media source detaching');\n var ms = this.mediaSource;\n if (ms) {\n if (ms.readyState === 'open') {\n try {\n // endOfStream could trigger exception if any sourcebuffer is in updating state\n // we don't really care about checking sourcebuffer state here,\n // as we are anyway detaching the MediaSource\n // let's just avoid this exception to propagate\n ms.endOfStream();\n } catch (err) {\n _logger.logger.warn('onMediaDetaching:' + err.message + ' while calling endOfStream');\n }\n }\n ms.removeEventListener('sourceopen', this.onmso);\n ms.removeEventListener('sourceended', this.onmse);\n ms.removeEventListener('sourceclose', this.onmsc);\n\n // Detach properly the MediaSource from the HTMLMediaElement as\n // suggested in https://github.com/w3c/media-source/issues/53.\n if (this.media) {\n this.media.removeAttribute('src');\n this.media.load();\n }\n\n this.mediaSource = null;\n this.media = null;\n this.pendingTracks = null;\n this.tracks = {};\n this.sourceBuffer = {};\n this.flushRange = [];\n this.segments = [];\n this.appended = 0;\n }\n this.onmso = this.onmse = this.onmsc = null;\n this.waitForAppended = false;\n this.hls.trigger(_events2.default.MEDIA_DETACHED);\n }\n }, {\n key: 'onMediaSourceOpen',\n value: function onMediaSourceOpen() {\n _logger.logger.log('media source opened');\n this.hls.trigger(_events2.default.MEDIA_ATTACHED, { media: this.media });\n // once received, don't listen anymore to sourceopen event\n this.mediaSource.removeEventListener('sourceopen', this.onmso);\n // if any buffer codecs pending, treat it here.\n var pendingTracks = this.pendingTracks;\n if (pendingTracks) {\n this.onBufferCodecs(pendingTracks);\n this.pendingTracks = null;\n this.doAppending();\n }\n }\n }, {\n key: 'onMediaSourceClose',\n value: function onMediaSourceClose() {\n _logger.logger.log('media source closed');\n }\n }, {\n key: 'onMediaSourceEnded',\n value: function onMediaSourceEnded() {\n _logger.logger.log('media source ended');\n }\n }, {\n key: 'onFragAppending',\n value: function onFragAppending() {\n var segments = this.segments || [];\n if (!segments.length && !this.isSbUpdating()) {\n this.hls.trigger(_events2.default.FRAG_APPENDED);\n } else {\n this.waitForAppended = true;\n }\n }\n }, {\n key: 'isSbUpdating',\n value: function isSbUpdating() {\n var sourceBuffer = this.sourceBuffer;\n if (!sourceBuffer) {\n return;\n }\n for (var type in sourceBuffer) {\n if (sourceBuffer[type].updating) {\n return true;\n }\n }\n }\n }, {\n key: 'dump',\n value: function dump(video) {\n var str = '',\n b = video.buffered,\n len = b.length;\n for (var i = 0; i < len; i++) {\n str += '[' + b.start(i) + ',' + b.end(i) + ']';\n }\n return str;\n }\n }, {\n key: 'clear',\n value: function clear(video, keepSec) {\n var st,\n sb = this.sourceBuffer,\n end = video.currentTime - keepSec;\n var b = video.buffered;\n if (end <= 0 || this.isSbUpdating() || !b.length) {\n return;\n }\n st = b.start(0);\n if (st < end) {\n _logger.logger.log('video buffered: ' + this.dump(this.media) + ' removing: [' + st + ',' + end + ']');\n for (var type in sb) {\n sb[type].remove(st, end);\n }\n }\n }\n }, {\n key: 'onSBUpdateEnd',\n value: function onSBUpdateEnd() {\n // update timestampOffset\n if (this.audioTimestampOffset) {\n var audioBuffer = this.sourceBuffer.audio;\n if (audioBuffer && !audioBuffer.updating) {\n _logger.logger.warn('change mpeg audio timestamp offset from ' + audioBuffer.timestampOffset + ' to ' + this.audioTimestampOffset);\n audioBuffer.timestampOffset = this.audioTimestampOffset;\n delete this.audioTimestampOffset;\n }\n }\n\n if (this._needsFlush) {\n this.doFlush();\n }\n\n if (this._needsEos) {\n this.onBufferEos();\n }\n\n _logger.logger.log('sb updateend');\n\n this.updateMediaElementDuration();\n\n this.doAppending();\n\n if (this.waitForAppended && !this.segments.length && !this.isSbUpdating()) {\n this.hls.trigger(_events2.default.FRAG_APPENDED);\n this.waitForAppended = false;\n }\n var keep = void 0;\n if ((keep = this.hls.config.keepBuffered) && this.media) {\n try {\n this.clear(this.media, keep);\n } catch (err) {\n _logger.logger.log(err);\n }\n }\n }\n }, {\n key: 'onSBUpdateError',\n value: function onSBUpdateError(event) {\n var err = this.lastSegment ? 'last segment type:' + this.lastSegment.type + ',size:' + this.lastSegment.data.length + ')' : '';\n _logger.logger.error('onSBUpdateError: sourceBuffer error:' + event + ' ' + err);\n this.lastSegment = undefined;\n this.printDump();\n // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n // this error might not always be fatal (it is fatal if decode error is set, in that case\n // it will be followed by a mediaElement error ...)\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_APPENDING_ERROR, fatal: false });\n // we don't need to do more than that, as accordin to the spec, updateend will be fired just after\n }\n }, {\n key: 'onBufferReset',\n value: function onBufferReset() {\n var sourceBuffer = this.sourceBuffer,\n segments = this.segments || [];\n _logger.logger.log('onBufferReset: pending segments:' + segments.length);\n for (var type in sourceBuffer) {\n var sb = sourceBuffer[type];\n try {\n this.mediaSource.removeSourceBuffer(sb);\n sb.removeEventListener('updateend', this.onsbue);\n sb.removeEventListener('error', this.onsbe);\n } catch (err) {}\n }\n this.sourceBuffer = {};\n this.flushRange = [];\n this.appended = 0;\n this.segments = [];\n this.dumpSegments = undefined;\n }\n }, {\n key: 'isTrackChanged',\n value: function isTrackChanged(tracks) {\n var track = void 0,\n sb = this.sourceBuffer;\n if (sb.video && !tracks.video || !sb.video && sb.audio && tracks.video) {\n return true;\n }\n if (sb.audio && (track = tracks.audio)) {\n var prev = this.tracks.audio;\n var codec = track.levelCodec || track.codec;\n var isMp3 = track.container === 'audio/mpeg' || prev.container === 'audio/mpeg' || codec === 'mp3' || prev.codec === 'mp3';\n if ((track.container !== prev.container || prev.codec !== codec) && isMp3) {\n return true;\n }\n }\n }\n }, {\n key: 'onBufferCodecs',\n value: function onBufferCodecs(tracks) {\n var mediaSource = this.mediaSource;\n\n // delay sourcebuffer creation if media source not opened yet\n if (!mediaSource || mediaSource.readyState !== 'open') {\n this.pendingTracks = tracks;\n return;\n }\n\n var sourceBuffer = this.sourceBuffer;\n\n if (this.isTrackChanged(tracks)) {\n var media = this.media;\n this.hls.detachMedia();\n this.hls.attachMedia(media);\n return;\n }\n\n for (var trackName in tracks) {\n if (!sourceBuffer[trackName]) {\n var track = tracks[trackName];\n // use levelCodec as first priority\n var codec = track.levelCodec || track.codec;\n var mimeType = track.container + ';codecs=' + codec;\n _logger.logger.log('creating sourceBuffer with mimeType:' + mimeType);\n try {\n var sb = sourceBuffer[trackName] = mediaSource.addSourceBuffer(mimeType);\n sb.addEventListener('updateend', this.onsbue);\n sb.addEventListener('error', this.onsbe);\n this.tracks[trackName] = { codec: codec, container: track.container };\n } catch (err) {\n _logger.logger.error('error while trying to add sourceBuffer:' + err.message);\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_ADD_CODEC_ERROR, fatal: false, err: err, mimeType: mimeType });\n }\n }\n }\n }\n }, {\n key: 'onBufferAppending',\n value: function onBufferAppending(data) {\n this.segments = this.segments || [];\n this.segments.push(data);\n this.doAppending();\n }\n }, {\n key: 'onBufferAppendFail',\n value: function onBufferAppendFail(data) {\n var err = this.lastSegment ? 'last segment type:' + this.lastSegment.type + ',size:' + this.lastSegment.data.length + ')' : '';\n _logger.logger.error('onBufferAppendFail:sourceBuffer error:' + data.event + ' ' + err);\n this.lastSegment = undefined;\n this.printDump();\n // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n // this error might not always be fatal (it is fatal if decode error is set, in that case\n // it will be followed by a mediaElement error ...)\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_APPENDING_ERROR, fatal: false, frag: this.fragCurrent });\n }\n }, {\n key: 'onBufferEos',\n value: function onBufferEos() {\n var sb = this.sourceBuffer,\n mediaSource = this.mediaSource;\n if (!mediaSource || mediaSource.readyState !== 'open') {\n return;\n }\n if (!(sb.audio && sb.audio.updating || sb.video && sb.video.updating)) {\n _logger.logger.log('all media data available, signal endOfStream() to MediaSource and stop loading fragment');\n //Notify the media element that it now has all of the media data\n mediaSource.endOfStream();\n this._needsEos = false;\n } else {\n this._needsEos = true;\n }\n }\n }, {\n key: 'onBufferFlushing',\n value: function onBufferFlushing(data) {\n this.flushRange.push({ start: data.startOffset, end: data.endOffset });\n // attempt flush immediatly\n this.flushBufferCounter = 0;\n this.doFlush();\n }\n }, {\n key: 'onLevelUpdated',\n value: function onLevelUpdated(event) {\n var details = event.details;\n if (details.fragments.length === 0) {\n return;\n }\n this._levelDuration = details.totalduration + details.fragments[0].start;\n this.updateMediaElementDuration();\n }\n\n // https://github.com/dailymotion/hls.js/issues/355\n\n }, {\n key: 'updateMediaElementDuration',\n value: function updateMediaElementDuration() {\n var media = this.media,\n mediaSource = this.mediaSource,\n levelDuration = this._levelDuration;\n if (levelDuration === null || !media || !mediaSource || media.readyState === 0 || mediaSource.readyState !== 'open') {\n return;\n }\n for (var i = 0; i < mediaSource.sourceBuffers.length; i++) {\n if (mediaSource.sourceBuffers[i].updating) {\n // can't set duration whilst a buffer is updating\n return;\n }\n }\n if (this._msDuration === null) {\n // initialise to the value that the media source is reporting\n this._msDuration = mediaSource.duration;\n }\n var duration = media.duration;\n // levelDuration was the last value we set.\n // not using mediaSource.duration as the browser may tweak this value\n // only update mediasource duration if its value increase, this is to avoid\n // flushing already buffered portion when switching between quality level\n if (levelDuration > this._msDuration && levelDuration > duration || duration === Infinity || isNaN(duration)) {\n _logger.logger.log('Updating mediasource duration to ' + levelDuration.toFixed(3));\n this._msDuration = mediaSource.duration = levelDuration;\n }\n }\n }, {\n key: 'doFlush',\n value: function doFlush() {\n // loop through all buffer ranges to flush\n while (this.flushRange.length) {\n var range = this.flushRange[0];\n // flushBuffer will abort any buffer append in progress and flush Audio/Video Buffer\n if (this.flushBuffer(range.start, range.end)) {\n // range flushed, remove from flush array\n this.flushRange.shift();\n this.flushBufferCounter = 0;\n } else {\n this._needsFlush = true;\n // avoid looping, wait for SB update end to retrigger a flush\n return;\n }\n }\n if (this.flushRange.length === 0) {\n // everything flushed\n this._needsFlush = false;\n\n // let's recompute this.appended, which is used to avoid flush looping\n var appended = 0;\n var sourceBuffer = this.sourceBuffer;\n for (var type in sourceBuffer) {\n appended += sourceBuffer[type].buffered.length;\n }\n this.appended = appended;\n this.hls.trigger(_events2.default.BUFFER_FLUSHED);\n }\n }\n }, {\n key: 'dumpSegment',\n value: function dumpSegment(segment) {\n var i = void 0,\n len = segment.data.length;\n var info = 'queue:' + this.segments.length + 'type:' + segment.type + ',size:' + len + ',buf:[';\n for (i = 0, len = Math.min(len, 10); i < len; i++) {\n if (i) {\n info += ',';\n }\n info += segment.data[i];\n }\n info += '..]';\n if (!this.dumpSegments) {\n this.dumpSegments = [info];\n } else {\n this.dumpSegments.push(info);\n }\n if (this.dumpSegments.length > 10) {\n this.dumpSegments.shift();\n }\n }\n }, {\n key: 'printDump',\n value: function printDump() {\n if (this.dumpSegments && this.dumpSegments.length) {\n _logger.logger.error(this.dumpSegments.join('|'));\n }\n }\n }, {\n key: 'doAppending',\n value: function doAppending() {\n var hls = this.hls,\n sourceBuffer = this.sourceBuffer,\n segments = this.segments;\n if (sourceBuffer && Object.keys(sourceBuffer).length) {\n if (!this.media) {\n return;\n }\n if (this.media.error) {\n this.segments = [];\n _logger.logger.error('trying to append although a media error occured, flush segment and abort');\n return;\n }\n if (this.isSbUpdating()) {\n _logger.logger.log('sb update in progress');\n return;\n }\n if (segments.length) {\n var segment = segments.shift();\n this.dumpSegment(segment);\n try {\n _logger.logger.log('appending ' + segment.type + ' SB, size:' + segment.data.length);\n if (sourceBuffer[segment.type]) {\n this.lastSegment = segment;\n sourceBuffer[segment.type].appendBuffer(segment.data);\n this.appendError = 0;\n this.appended++;\n } else {\n // in case we don't have any source buffer matching with this segment type,\n // it means that Mediasource fails to create sourcebuffer\n // discard this segment, and trigger update end\n this.onSBUpdateEnd();\n }\n } catch (err) {\n // in case any error occured while appending, put back segment in segments table\n _logger.logger.error('error while trying to append buffer: ' + err.message);\n segments.unshift(segment);\n var event = { type: _errors.ErrorTypes.MEDIA_ERROR };\n if (err.code !== 22) {\n if (this.appendError) {\n this.appendError++;\n } else {\n this.appendError = 1;\n }\n event.details = _errors.ErrorDetails.BUFFER_APPEND_ERROR;\n event.frag = this.fragCurrent;\n event.reason = err.message + ' (type:' + segment.type + ',size:' + segment.data.length + ')';\n /* with UHD content, we could get loop of quota exceeded error until\n browser is able to evict some data from sourcebuffer. retrying help recovering this\n */\n if (this.appendError > hls.config.appendErrorMaxRetry) {\n _logger.logger.log('fail ' + hls.config.appendErrorMaxRetry + ' times to append segment in sourceBuffer');\n this.segments = [];\n event.fatal = true;\n hls.trigger(_events2.default.ERROR, event);\n return;\n } else {\n event.fatal = false;\n hls.trigger(_events2.default.ERROR, event);\n }\n } else {\n // QuotaExceededError: http://www.w3.org/TR/html5/infrastructure.html#quotaexceedederror\n // let's stop appending any segments, and report BUFFER_FULL_ERROR error\n this.segments = [];\n event.details = _errors.ErrorDetails.BUFFER_FULL_ERROR;\n hls.trigger(_events2.default.ERROR, event);\n }\n }\n }\n }\n }\n\n /*\n flush specified buffered range,\n return true once range has been flushed.\n as sourceBuffer.remove() is asynchronous, flushBuffer will be retriggered on sourceBuffer update end\n */\n\n }, {\n key: 'flushBuffer',\n value: function flushBuffer(startOffset, endOffset) {\n var sb, i, bufStart, bufEnd, flushStart, flushEnd;\n _logger.logger.log('flushBuffer,pos/start/end: ' + this.media.currentTime + '/' + startOffset + '/' + endOffset);\n // safeguard to avoid infinite looping : don't try to flush more than the nb of appended segments\n if (this.flushBufferCounter < this.appended && this.sourceBuffer) {\n for (var type in this.sourceBuffer) {\n sb = this.sourceBuffer[type];\n if (!sb.updating) {\n for (i = 0; i < sb.buffered.length; i++) {\n bufStart = sb.buffered.start(i);\n bufEnd = sb.buffered.end(i);\n // workaround firefox not able to properly flush multiple buffered range.\n if (this.hls.config.browser.isFirefox && endOffset === Number.POSITIVE_INFINITY) {\n flushStart = startOffset;\n flushEnd = endOffset;\n } else {\n flushStart = Math.max(bufStart, startOffset);\n flushEnd = Math.min(bufEnd, endOffset);\n }\n /* sometimes sourcebuffer.remove() does not flush\n the exact expected time range.\n to avoid rounding issues/infinite loop,\n only flush buffer range of length greater than 500ms.\n */\n if (Math.min(flushEnd, bufEnd) - flushStart > 0.5) {\n this.flushBufferCounter++;\n _logger.logger.log('flush ' + type + ' [' + flushStart + ',' + flushEnd + '], of [' + bufStart + ',' + bufEnd + '], pos:' + this.media.currentTime);\n sb.remove(flushStart, flushEnd);\n return false;\n }\n }\n } else {\n //logger.log('abort ' + type + ' append in progress');\n // this will abort any appending in progress\n //sb.abort();\n _logger.logger.warn('cannot flush, sb updating in progress');\n return false;\n }\n }\n } else {\n _logger.logger.warn('abort flushing too many retries');\n }\n _logger.logger.log('buffer flushed');\n // everything flushed !\n return true;\n }\n }]);\n\n return BufferController;\n}(_eventHandler2.default);\n\nexports.default = BufferController;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * cap stream level to media size dimension controller\n */\n\nvar CapLevelController = function (_EventHandler) {\n _inherits(CapLevelController, _EventHandler);\n\n function CapLevelController(hls) {\n _classCallCheck(this, CapLevelController);\n\n return _possibleConstructorReturn(this, (CapLevelController.__proto__ || Object.getPrototypeOf(CapLevelController)).call(this, hls, _events2.default.FPS_DROP_LEVEL_CAPPING, _events2.default.MEDIA_ATTACHING, _events2.default.MANIFEST_PARSED));\n }\n\n _createClass(CapLevelController, [{\n key: 'destroy',\n value: function destroy() {\n if (this.hls.config.capLevelToPlayerSize) {\n this.media = this.restrictedLevels = null;\n this.autoLevelCapping = Number.POSITIVE_INFINITY;\n if (this.timer) {\n this.timer = clearInterval(this.timer);\n }\n }\n }\n }, {\n key: 'onFpsDropLevelCapping',\n value: function onFpsDropLevelCapping(data) {\n if (!this.restrictedLevels) {\n this.restrictedLevels = [];\n }\n if (!this.isLevelRestricted(data.droppedLevel)) {\n this.restrictedLevels.push(data.droppedLevel);\n }\n }\n }, {\n key: 'onMediaAttaching',\n value: function onMediaAttaching(data) {\n this.media = data.media instanceof HTMLVideoElement ? data.media : null;\n }\n }, {\n key: 'onManifestParsed',\n value: function onManifestParsed(data) {\n if (this.hls.config.capLevelToPlayerSize) {\n this.autoLevelCapping = Number.POSITIVE_INFINITY;\n this.levels = data.levels;\n this.hls.firstLevel = this.getMaxLevel(data.firstLevel);\n clearInterval(this.timer);\n this.timer = setInterval(this.detectPlayerSize.bind(this), 1000);\n this.detectPlayerSize();\n }\n }\n }, {\n key: 'detectPlayerSize',\n value: function detectPlayerSize() {\n if (this.media) {\n var levelsLength = this.levels ? this.levels.length : 0;\n if (levelsLength) {\n this.hls.autoLevelCapping = this.getMaxLevel(levelsLength - 1);\n if (this.hls.autoLevelCapping > this.autoLevelCapping) {\n // if auto level capping has a higher value for the previous one, flush the buffer using nextLevelSwitch\n // usually happen when the user go to the fullscreen mode.\n this.hls.streamController.nextLevelSwitch();\n }\n this.autoLevelCapping = this.hls.autoLevelCapping;\n }\n }\n }\n\n /*\n * returns level should be the one with the dimensions equal or greater than the media (player) dimensions (so the video will be downscaled)\n */\n\n }, {\n key: 'getMaxLevel',\n value: function getMaxLevel(capLevelIndex) {\n var result = 0,\n i = void 0,\n level = void 0,\n mWidth = this.mediaWidth,\n mHeight = this.mediaHeight,\n lWidth = 0,\n lHeight = 0;\n\n for (i = 0; i <= capLevelIndex; i++) {\n level = this.levels[i];\n if (this.isLevelRestricted(i)) {\n break;\n }\n result = i;\n lWidth = level.width;\n lHeight = level.height;\n if (mWidth <= lWidth || mHeight <= lHeight) {\n break;\n }\n }\n return result;\n }\n }, {\n key: 'isLevelRestricted',\n value: function isLevelRestricted(level) {\n return this.restrictedLevels && this.restrictedLevels.indexOf(level) !== -1 ? true : false;\n }\n }, {\n key: 'contentScaleFactor',\n get: function get() {\n var pixelRatio = 1;\n try {\n pixelRatio = window.devicePixelRatio;\n } catch (e) {}\n return pixelRatio;\n }\n }, {\n key: 'mediaWidth',\n get: function get() {\n var width = void 0;\n if (this.media) {\n width = this.media.width || this.media.clientWidth || this.media.offsetWidth;\n width *= this.contentScaleFactor;\n }\n return width;\n }\n }, {\n key: 'mediaHeight',\n get: function get() {\n var height = void 0;\n if (this.media) {\n height = this.media.height || this.media.clientHeight || this.media.offsetHeight;\n height *= this.contentScaleFactor;\n }\n return height;\n }\n }]);\n\n return CapLevelController;\n}(_eventHandler2.default);\n\nexports.default = CapLevelController;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _logger = require('../utils/logger');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * FPS Controller\n */\n\nvar FPSController = function (_EventHandler) {\n _inherits(FPSController, _EventHandler);\n\n function FPSController(hls) {\n _classCallCheck(this, FPSController);\n\n return _possibleConstructorReturn(this, (FPSController.__proto__ || Object.getPrototypeOf(FPSController)).call(this, hls, _events2.default.MEDIA_ATTACHING));\n }\n\n _createClass(FPSController, [{\n key: 'destroy',\n value: function destroy() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.isVideoPlaybackQualityAvailable = false;\n }\n }, {\n key: 'onMediaAttaching',\n value: function onMediaAttaching(data) {\n if (this.hls.config.capLevelOnFPSDrop) {\n this.video = data.media instanceof HTMLVideoElement ? data.media : null;\n if (typeof this.video.getVideoPlaybackQuality === 'function') {\n this.isVideoPlaybackQualityAvailable = true;\n }\n clearInterval(this.timer);\n this.timer = setInterval(this.checkFPSInterval.bind(this), this.hls.config.fpsDroppedMonitoringPeriod);\n }\n }\n }, {\n key: 'checkFPS',\n value: function checkFPS(video, decodedFrames, droppedFrames) {\n var currentTime = performance.now();\n if (decodedFrames) {\n if (this.lastTime) {\n var currentPeriod = currentTime - this.lastTime,\n currentDropped = droppedFrames - this.lastDroppedFrames,\n currentDecoded = decodedFrames - this.lastDecodedFrames,\n droppedFPS = 1000 * currentDropped / currentPeriod;\n this.hls.trigger(_events2.default.FPS_DROP, { currentDropped: currentDropped, currentDecoded: currentDecoded, totalDroppedFrames: droppedFrames });\n if (droppedFPS > 0) {\n //logger.log('checkFPS : droppedFPS/decodedFPS:' + droppedFPS/(1000 * currentDecoded / currentPeriod));\n if (currentDropped > this.hls.config.fpsDroppedMonitoringThreshold * currentDecoded) {\n var currentLevel = this.hls.currentLevel;\n _logger.logger.warn('drop FPS ratio greater than max allowed value for currentLevel: ' + currentLevel);\n if (currentLevel > 0 && (this.hls.autoLevelCapping === -1 || this.hls.autoLevelCapping >= currentLevel)) {\n currentLevel = currentLevel - 1;\n this.hls.trigger(_events2.default.FPS_DROP_LEVEL_CAPPING, { level: currentLevel, droppedLevel: this.hls.currentLevel });\n this.hls.autoLevelCapping = currentLevel;\n this.hls.streamController.nextLevelSwitch();\n }\n }\n }\n }\n this.lastTime = currentTime;\n this.lastDroppedFrames = droppedFrames;\n this.lastDecodedFrames = decodedFrames;\n }\n }\n }, {\n key: 'checkFPSInterval',\n value: function checkFPSInterval() {\n if (this.video) {\n if (this.isVideoPlaybackQualityAvailable) {\n var videoPlaybackQuality = this.video.getVideoPlaybackQuality();\n this.checkFPS(this.video, videoPlaybackQuality.totalVideoFrames, videoPlaybackQuality.droppedVideoFrames);\n } else {\n this.checkFPS(this.video, this.video.webkitDecodedFrameCount, this.video.webkitDroppedFrameCount);\n }\n }\n }\n }]);\n\n return FPSController;\n}(_eventHandler2.default);\n\nexports.default = FPSController;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _levelHelper = require('../helper/level-helper');\n\nvar _levelHelper2 = _interopRequireDefault(_levelHelper);\n\nvar _logger = require('../utils/logger');\n\nvar _errors = require('../errors');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Level Controller\n */\n\nvar LevelController = function (_EventHandler) {\n _inherits(LevelController, _EventHandler);\n\n function LevelController(hls) {\n _classCallCheck(this, LevelController);\n\n var _this2 = _possibleConstructorReturn(this, (LevelController.__proto__ || Object.getPrototypeOf(LevelController)).call(this, hls, _events2.default.MANIFEST_LOADED, _events2.default.MANIFEST_REPLACE, _events2.default.LEVEL_LOADED, _events2.default.ERROR));\n\n _this2.ontick = _this2.tick.bind(_this2);\n _this2._manualLevel = _this2._autoLevelCapping = -1;\n return _this2;\n }\n\n _createClass(LevelController, [{\n key: 'destroy',\n value: function destroy() {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n this._manualLevel = -1;\n }\n }, {\n key: 'clearLevelDetails',\n value: function clearLevelDetails() {\n // clean up live level details to force reload them, and reset load errors\n if (this._levels) {\n this._levels.forEach(function (level) {\n level.loadError = 0;\n var levelDetails = level.details;\n if (levelDetails && levelDetails.live) {\n level.details = undefined;\n }\n });\n }\n }\n }, {\n key: 'startLoad',\n value: function startLoad() {\n this.canload = true;\n // speed up live playlist refresh\n if (_levelHelper2.default.isLive(this._level, this._levels)) {\n this.tick();\n }\n }\n }, {\n key: 'stopLoad',\n value: function stopLoad() {\n this.canload = false;\n }\n }, {\n key: 'isVideoLevel',\n value: function isVideoLevel(level) {\n return level.videoCodec || !level.audioCodec && (level.bitrate > 64000 || level.width || level.height);\n }\n }, {\n key: 'parseManifest',\n value: function parseManifest(data) {\n var _this3 = this;\n\n var levels0 = [],\n levels = [],\n bitrateSet = {},\n videoCodecFound = false,\n audioCodecFound = false,\n browser = this.hls.config.browser,\n brokenmp4inmp3 = browser.isChrome || browser.isFirefox,\n checkSupported = function checkSupported(type, codec) {\n return MediaSource.isTypeSupported(type + '/mp4;codecs=' + codec);\n };\n\n // regroup redundant level together\n data.levels.forEach(function (level) {\n if (_this3.isVideoLevel(level)) {\n videoCodecFound = true;\n }\n // erase audio codec info if browser does not support mp4a.40.34. demuxer will autodetect codec and fallback to mpeg/audio\n if (brokenmp4inmp3 && level.audioCodec && level.audioCodec.indexOf('mp4a.40.34') !== -1) {\n level.audioCodec = undefined;\n }\n if (level.audioCodec || level.attrs && level.attrs.AUDIO) {\n audioCodecFound = true;\n }\n var redundantLevelId = bitrateSet[level.bitrate];\n if (redundantLevelId === undefined) {\n bitrateSet[level.bitrate] = levels0.length;\n level.url = [level.url];\n level.urlId = 0;\n levels0.push(level);\n } else {\n levels0[redundantLevelId].url.push(level.url);\n }\n });\n\n // remove audio-only level if we also have levels with audio+video codecs signalled\n if (videoCodecFound && audioCodecFound) {\n levels0.forEach(function (level) {\n if (_this3.isVideoLevel(level)) {\n levels.push(level);\n }\n });\n } else {\n levels = levels0;\n }\n // only keep level with supported audio/video codecs\n levels = levels.filter(function (level) {\n var audioCodec = level.audioCodec,\n videoCodec = level.videoCodec;\n return (!audioCodec || checkSupported('audio', audioCodec)) && (!videoCodec || checkSupported('video', videoCodec));\n });\n\n return levels;\n }\n }, {\n key: 'onManifestLoaded',\n value: function onManifestLoaded(data) {\n var levels = this.parseManifest(data);\n\n if (levels.length) {\n // start bitrate is the first bitrate of the manifest\n var bitrateStart = levels[0].bitrate;\n // sort level on bitrate\n levels.sort(function (a, b) {\n return a.bitrate - b.bitrate;\n });\n this._levels = levels;\n // find index of first level in sorted levels\n for (var i = 0; i < levels.length; i++) {\n if (levels[i].bitrate === bitrateStart) {\n this._firstLevel = i;\n _logger.logger.log('manifest loaded,' + levels.length + ' level(s) found, first bitrate:' + bitrateStart);\n break;\n }\n }\n this.hls.trigger(_events2.default.MANIFEST_PARSED, { levels: this._levels, firstLevel: this._firstLevel, stats: data.stats });\n } else {\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR, fatal: true, url: this.hls.url, reason: 'no level with compatible codecs found in manifest' });\n }\n return;\n }\n }, {\n key: 'onManifestReplace',\n value: function onManifestReplace(data) {\n var levels = this.parseManifest(data),\n _this = this;\n if (levels.length) {\n _logger.logger.log('replace manifest with a new version');\n // sort level on bitrate\n levels.sort(function (a, b) {\n return a.bitrate - b.bitrate;\n });\n levels.forEach(function (newLevel, i) {\n _this.levels[i].url = newLevel.url;\n });\n }\n }\n }, {\n key: 'setLevelInternal',\n value: function setLevelInternal(newLevel) {\n var levels = this._levels;\n // check if level idx is valid\n if (newLevel >= 0 && newLevel < levels.length) {\n // stopping live reloading timer if any\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n if (this._level !== newLevel) {\n _logger.logger.log('switching to level ' + newLevel);\n this._level = newLevel;\n this.hls.trigger(_events2.default.LEVEL_SWITCH, { level: newLevel });\n }\n var level = levels[newLevel];\n // check if we need to load playlist for this level\n if (!level.details || level.details.live === true) {\n // level not retrieved yet, or live playlist we need to (re)load it\n _logger.logger.log('(re)loading playlist for level ' + newLevel);\n var urlId = level.urlId;\n this.hls.trigger(_events2.default.LEVEL_LOADING, { url: level.url[urlId], level: newLevel, id: urlId });\n }\n } else {\n // invalid level id given, trigger error\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.OTHER_ERROR, details: _errors.ErrorDetails.LEVEL_SWITCH_ERROR, level: newLevel, fatal: false, reason: 'invalid level idx' });\n }\n }\n }, {\n key: 'onError',\n value: function onError(data) {\n if (data.fatal) {\n return;\n }\n\n var details = data.details,\n hls = this.hls,\n levelId = void 0,\n level = void 0,\n levelError = false;\n // try to recover not fatal errors\n switch (details) {\n case _errors.ErrorDetails.FRAG_LOAD_ERROR:\n case _errors.ErrorDetails.FRAG_LOAD_TIMEOUT:\n case _errors.ErrorDetails.FRAG_LOOP_LOADING_ERROR:\n case _errors.ErrorDetails.KEY_LOAD_ERROR:\n case _errors.ErrorDetails.KEY_LOAD_TIMEOUT:\n levelId = data.frag.level;\n break;\n case _errors.ErrorDetails.LEVEL_LOAD_ERROR:\n case _errors.ErrorDetails.LEVEL_LOAD_TIMEOUT:\n levelId = data.level;\n levelError = true;\n break;\n default:\n break;\n }\n /* try to switch to a redundant stream if any available.\n * if no redundant stream available, emergency switch down (if in auto mode and current level not 0)\n * otherwise, we cannot recover this network error ...\n * don't raise FRAG_LOAD_ERROR and FRAG_LOAD_TIMEOUT as fatal, as it is handled by mediaController\n */\n if (levelId !== undefined) {\n level = this._levels[levelId];\n if (level.urlId < level.url.length - 1) {\n level.urlId++;\n if (this.hls.config.clearLevelDetailsOnSwitching) {\n level.details = undefined;\n }\n _logger.logger.warn('level controller,' + details + ' for level ' + levelId + ': switching to redundant stream id ' + level.urlId);\n } else {\n // we could try to recover if in auto mode and current level not lowest level (0)\n var recoverable = this._manualLevel === -1 && levelId;\n if (recoverable) {\n _logger.logger.warn('level controller,' + details + ': emergency switch-down for next fragment');\n hls.abrController.nextAutoLevel = 0;\n } else if (level && level.details && level.details.live) {\n _logger.logger.warn('level controller,' + details + ' on live stream, discard');\n if (levelError) {\n // reset this._level so that another call to set level() will retrigger a frag load\n this._level = undefined;\n }\n // FRAG_LOAD_ERROR and FRAG_LOAD_TIMEOUT are handled by mediaController\n } else if (details !== _errors.ErrorDetails.FRAG_LOAD_ERROR && details !== _errors.ErrorDetails.FRAG_LOAD_TIMEOUT) {\n _logger.logger.error('cannot recover ' + details + ' error');\n this._level = undefined;\n // stopping live reloading timer if any\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n // redispatch same error but with fatal set to true\n data.fatal = true;\n hls.trigger(_events2.default.ERROR, data);\n }\n }\n }\n }\n }, {\n key: 'onLevelLoaded',\n value: function onLevelLoaded(data) {\n // only process level loaded events matching with expected level\n if (data.level === this._level) {\n var newDetails = data.details;\n // if current playlist is a live playlist, arm a timer to reload it\n if (newDetails.live) {\n var reloadInterval = 1000 * (newDetails.averagetargetduration ? newDetails.averagetargetduration : newDetails.targetduration),\n curLevel = this._levels[data.level],\n curDetails = curLevel.details;\n if (curDetails && newDetails.endSN === curDetails.endSN) {\n // follow HLS Spec, If the client reloads a Playlist file and finds that it has not\n // changed then it MUST wait for a period of one-half the target\n // duration before retrying.\n reloadInterval /= 2;\n _logger.logger.log('same live playlist, reload twice faster');\n }\n // decrement reloadInterval with level loading delay\n reloadInterval -= performance.now() - data.stats.trequest;\n // in any case, don't reload more than every second\n reloadInterval = Math.max(1000, Math.round(reloadInterval));\n _logger.logger.log('live playlist, reload in ' + reloadInterval + ' ms');\n this.timer = setTimeout(this.ontick, reloadInterval);\n } else {\n this.timer = null;\n }\n }\n\n if (this.hls.config.levelsPreload && !data.details.live) {\n // Preload next not already loaded level\n for (var i = 0; i < this._levels.length; i++) {\n var level = this._levels[i];\n if (data.level !== i && !level.details) {\n _logger.logger.log('preloading playlist for level ' + i);\n this.hls.trigger(_events2.default.LEVEL_LOADING, { url: level.url[level.urlId], level: i, id: level.urlId, preload: true });\n return;\n }\n }\n }\n }\n }, {\n key: 'tick',\n value: function tick() {\n var levelId = this._level;\n if (levelId !== undefined && this.canload) {\n var level = this._levels[levelId],\n urlId = level.urlId;\n this.hls.trigger(_events2.default.LEVEL_LOADING, { url: level.url[urlId], level: levelId, id: urlId });\n }\n }\n }, {\n key: 'levels',\n get: function get() {\n return this._levels;\n }\n }, {\n key: 'level',\n get: function get() {\n return this._level;\n },\n set: function set(newLevel) {\n var levels = this._levels;\n if (levels && levels.length > newLevel) {\n if (this._level !== newLevel || levels[newLevel].details === undefined) {\n this.setLevelInternal(newLevel);\n }\n }\n }\n }, {\n key: 'manualLevel',\n get: function get() {\n return this._manualLevel;\n },\n set: function set(newLevel) {\n this._manualLevel = newLevel;\n if (this._startLevel === undefined) {\n this._startLevel = newLevel;\n }\n if (newLevel !== -1) {\n this.level = newLevel;\n }\n }\n }, {\n key: 'firstLevel',\n get: function get() {\n return this._firstLevel;\n },\n set: function set(newLevel) {\n this._firstLevel = newLevel;\n }\n }, {\n key: 'startLevel',\n get: function get() {\n return this._startLevel === undefined ? this._firstLevel : this._startLevel;\n },\n set: function set(newLevel) {\n this._startLevel = newLevel;\n }\n }, {\n key: 'nextLoadLevel',\n get: function get() {\n if (this._manualLevel !== -1) {\n return this._manualLevel;\n } else {\n return this.hls.abrController.nextAutoLevel;\n }\n },\n set: function set(nextLevel) {\n this.level = nextLevel;\n if (this._manualLevel === -1) {\n this.hls.abrController.nextAutoLevel = nextLevel;\n }\n }\n }]);\n\n return LevelController;\n}(_eventHandler2.default);\n\nexports.default = LevelController;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _demuxer = require('../demux/demuxer');\n\nvar _demuxer2 = _interopRequireDefault(_demuxer);\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _logger = require('../utils/logger');\n\nvar _binarySearch = require('../utils/binary-search');\n\nvar _binarySearch2 = _interopRequireDefault(_binarySearch);\n\nvar _bufferHelper = require('../helper/buffer-helper');\n\nvar _bufferHelper2 = _interopRequireDefault(_bufferHelper);\n\nvar _levelHelper = require('../helper/level-helper');\n\nvar _levelHelper2 = _interopRequireDefault(_levelHelper);\n\nvar _errors = require('../errors');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Stream Controller\n */\n\nvar State = {\n STOPPED: 'STOPPED',\n STARTING: 'STARTING',\n IDLE: 'IDLE',\n PAUSED: 'PAUSED',\n KEY_LOADING: 'KEY_LOADING',\n FRAG_LOADING: 'FRAG_LOADING',\n FRAG_LOADING_WAITING_RETRY: 'FRAG_LOADING_WAITING_RETRY',\n WAITING_LEVEL: 'WAITING_LEVEL',\n PARSING: 'PARSING',\n PARSED: 'PARSED',\n ENDED: 'ENDED',\n ERROR: 'ERROR'\n};\n\nvar StreamController = function (_EventHandler) {\n _inherits(StreamController, _EventHandler);\n\n function StreamController(hls) {\n _classCallCheck(this, StreamController);\n\n var _this = _possibleConstructorReturn(this, (StreamController.__proto__ || Object.getPrototypeOf(StreamController)).call(this, hls, _events2.default.MEDIA_ATTACHED, _events2.default.MEDIA_DETACHING, _events2.default.MANIFEST_LOADING, _events2.default.MANIFEST_PARSED, _events2.default.LEVEL_LOADED, _events2.default.LEVEL_REPLACE, _events2.default.LEVEL_PTS_UPDATED, _events2.default.KEY_LOADED, _events2.default.FRAG_CHUNK_LOADED, _events2.default.FRAG_LOADED, _events2.default.FRAG_LOAD_EMERGENCY_ABORTED, _events2.default.FRAG_PARSING_INIT_SEGMENT, _events2.default.FRAG_PARSING_DATA, _events2.default.FRAG_PARSED, _events2.default.FRAG_APPENDED, _events2.default.ERROR, _events2.default.BUFFER_FLUSHED, _events2.default.DEMUXER_QUEUE_EMPTY));\n\n _this.config = hls.config;\n _this.audioCodecSwap = false;\n _this.ticks = 0;\n _this.ontick = _this.tick.bind(_this);\n _this.noMediaCount = 0;\n return _this;\n }\n\n _createClass(StreamController, [{\n key: 'destroy',\n value: function destroy() {\n this.stopLoad();\n delete this.fragPreviousSaved;\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n _eventHandler2.default.prototype.destroy.call(this);\n this.state = State.STOPPED;\n }\n }, {\n key: 'startLoad',\n value: function startLoad() {\n var startPosition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.levels) {\n var media = this.media,\n lastCurrentTime = this.lastCurrentTime;\n var lastLevel = this.level;\n this.stopLoad();\n if (!this.demuxer) {\n this.demuxer = new _demuxer2.default(this.hls);\n this.fragParsing = null;\n }\n if (!this.timer) {\n this.timer = setInterval(this.ontick, 100);\n }\n if (this.fragPreviousSaved) {\n this.fragPrevious = this.fragPreviousSaved;\n delete this.fragPrevious;\n }\n this.level = -1;\n this.fragLoadError = 0;\n if (media && lastCurrentTime > 0) {\n var _lastLevel = this.hls.loadLevel;\n if (_levelHelper2.default.isLive(_lastLevel, this.levels)) {\n this.level = _lastLevel;\n this.waitLiveLevel = true;\n }\n _logger.logger.log('configure startPosition @' + lastCurrentTime);\n this.state = this.level === -1 ? State.IDLE : State.WAITING_LEVEL;\n } else {\n this.lastCurrentTime = this.startPosition ? this.startPosition : startPosition;\n _logger.logger.log('configure lastCurrentTime @' + this.lastCurrentTime + ' start:' + this.startPosition + ',' + startPosition);\n var level = lastLevel !== -1 && lastLevel === this.hls.startLevel && this.levels[lastLevel];\n // check if playlist is already loaded\n if (level && level.details && !level.details.live) {\n this.state = State.IDLE;\n this.level = lastLevel;\n } else {\n this.state = State.STARTING;\n }\n }\n this.nextLoadPosition = this.startPosition = this.lastCurrentTime;\n this.tick();\n } else {\n _logger.logger.warn('cannot start loading as manifest not parsed yet');\n this.state = State.STOPPED;\n }\n }\n }, {\n key: 'onDemuxerQueueEmpty',\n value: function onDemuxerQueueEmpty() {\n this.fragParsing = null;\n }\n }, {\n key: 'stopLoad',\n value: function stopLoad(stopDemuxer) {\n var frag = this.fragCurrent;\n if (frag) {\n if (frag.loader) {\n frag.loader.abort();\n }\n this.fragCurrent = null;\n }\n this.fragPreviousSaved = this.fragPrevious || this.fragPreviousSaved;\n this.fragPrevious = null;\n if (this.state === State.PARSING && this.demuxer && this.config.enableWorker) {\n this.fragParsing = frag;\n this.demuxer.waitQueue();\n }\n if (stopDemuxer && this.demuxer) {\n this.demuxer.destroy();\n this.demuxer = null;\n }\n this.state = State.STOPPED;\n }\n }, {\n key: 'tick',\n value: function tick() {\n this.ticks++;\n if (this.ticks === 1) {\n this.doTick();\n if (this.ticks > 1) {\n setTimeout(this.tick, 1);\n }\n this.ticks = 0;\n }\n }\n }, {\n key: 'doTick',\n value: function doTick() {\n switch (this.state) {\n case State.STARTING:\n var hls = this.hls;\n // determine load level\n var startLevel = hls.startLevel;\n if (startLevel === -1) {\n startLevel = 0;\n }\n // set new level to playlist loader : this will trigger start level load\n // hls.nextLoadLevel remains until it is set to a new value or until a new frag is successfully loaded\n this.level = hls.nextLoadLevel = startLevel;\n this.state = State.WAITING_LEVEL;\n this.loadedmetadata = false;\n break;\n case State.IDLE:\n if (!this.media) {\n if (this.noMediaCount++ % 20 === 0) {\n var media = this.hls.bufferController.media || {};\n var ms = this.hls.bufferController.mediaSource || {};\n _logger.logger.log('no media ' + media + ' src=' + media.src + ' ms_state=' + ms.readyState);\n }\n } else {\n if (this.noMediaCount) {\n _logger.logger.log('media is set to ' + this.media.src);\n }\n this.noMediaCount = 0;\n }\n // when this returns false there was an error and we shall return immediatly\n // from current tick\n if (!this._doTickIdle()) {\n return;\n }\n break;\n case State.WAITING_LEVEL:\n var level = this.levels[this.level];\n // check if playlist is already loaded\n if (level && level.details && !this.waitLiveLevel) {\n this.state = State.IDLE;\n }\n break;\n case State.FRAG_LOADING:\n try {\n var fragCurrent = this.fragCurrent,\n details = this.levels[this.level].details;\n if (details.live && (fragCurrent.sn < details.startSN || fragCurrent.sn > details.endSN)) {\n _logger.logger.log('live playlist slided forward loading segments: reload');\n this.state = State.IDLE;\n if (fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n }\n } catch (e) {}\n break;\n case State.FRAG_LOADING_WAITING_RETRY:\n var now = performance.now();\n var retryDate = this.retryDate;\n // if current time is gt than retryDate, or if media seeking let's switch to IDLE state to retry loading\n if (!retryDate || now >= retryDate || this.media && this.media.seeking) {\n _logger.logger.log('mediaController: retryDate reached, switch back to IDLE state');\n this.state = State.IDLE;\n }\n break;\n case State.ERROR:\n case State.PAUSED:\n case State.STOPPED:\n case State.PARSING:\n case State.PARSED:\n case State.ENDED:\n break;\n default:\n break;\n }\n // check buffer\n this._checkBuffer();\n // check/update current fragment\n this._checkFragmentChanged();\n }\n\n // Ironically the \"idle\" state is the on we do the most logic in it seems ....\n // NOTE: Maybe we could rather schedule a check for buffer length after half of the currently\n // played segment, or on pause/play/seek instead of naively checking every 100ms?\n\n }, {\n key: '_doTickIdle',\n value: function _doTickIdle() {\n var hls = this.hls,\n config = hls.config;\n\n // if video not attached AND\n // start fragment already requested OR start frag prefetch disable\n // exit loop\n // => if media not attached but start frag prefetch is enabled and start frag not requested yet, we will not exit loop\n if (this.levelLastLoaded !== undefined && !this.media && (this.startFragRequested || !config.startFragPrefetch)) {\n return true;\n }\n\n // if we have not yet loaded any fragment, start loading from start position\n var pos = this.loadedmetadata ? this.media.currentTime : this.nextLoadPosition;\n // determine next load level\n var level = hls.nextLoadLevel;\n\n // compute max Buffer Length that we could get from this load level, based on level bitrate. don't buffer more than 60 MB and more than 30s\n var maxBufLen = void 0;\n if (this.levels[level].hasOwnProperty('bitrate')) {\n maxBufLen = Math.max(8 * config.maxBufferSize / this.levels[level].bitrate, config.maxBufferLength);\n maxBufLen = Math.min(maxBufLen, config.maxMaxBufferLength);\n } else {\n maxBufLen = config.maxBufferLength;\n }\n\n // determine next candidate fragment to be loaded, based on current position and end of buffer position\n // ensure up to `config.maxMaxBufferLength` of buffer upfront\n\n var bufferInfo = _bufferHelper2.default.bufferInfo(this.media, pos, config.maxBufferHole),\n bufferLen = bufferInfo.len;\n // Stay idle if we are still with buffer margins\n if (bufferLen >= maxBufLen) {\n return true;\n }\n\n // if buffer length is less than maxBufLen try to load a new fragment ...\n _logger.logger.trace('buffer length of ' + bufferLen.toFixed(3) + ' is below max of ' + maxBufLen.toFixed(3) + '. checking for more payload ...');\n\n // set next load level : this will trigger a playlist load if needed\n this.level = hls.nextLoadLevel = level;\n\n var levelDetails = this.levels[level].details;\n // if level info not retrieved yet, switch state and wait for level retrieval\n // if live playlist, ensure that new playlist has been refreshed to avoid loading/try to load\n // a useless and outdated fragment (that might even introduce load error if it is already out of the live playlist)\n if (typeof levelDetails === 'undefined' || levelDetails.live && this.levelLastLoaded !== level) {\n this.state = State.WAITING_LEVEL;\n return true;\n }\n\n // if we have the levelDetails for the selected variant, lets continue enrichen our stream (load keys/fragments or trigger EOS, etc..)\n return this._fetchPayloadOrEos({ pos: pos, bufferInfo: bufferInfo, levelDetails: levelDetails });\n }\n }, {\n key: '_fetchPayloadOrEos',\n value: function _fetchPayloadOrEos(_ref) {\n var pos = _ref.pos,\n bufferInfo = _ref.bufferInfo,\n levelDetails = _ref.levelDetails;\n\n var fragPrevious = this.fragPrevious,\n level = this.level,\n fragments = levelDetails.fragments,\n fragLen = fragments.length;\n\n // empty playlist\n if (fragLen === 0) {\n return false;\n }\n\n // find fragment index, contiguous with end of buffer position\n var start = fragments[0].start,\n end = fragments[fragLen - 1].start + fragments[fragLen - 1].duration,\n bufferEnd = bufferInfo.end,\n frag = void 0;\n\n // in case of live playlist we need to ensure that requested position is not located before playlist start\n if (levelDetails.live) {\n frag = this._ensureFragmentAtLivePoint({ levelDetails: levelDetails, bufferEnd: bufferEnd, start: start, end: end, fragPrevious: fragPrevious, fragments: fragments, fragLen: fragLen });\n // if it explicitely returns null don't load any fragment and exit function now\n if (frag === null) {\n return false;\n }\n } else {\n // VoD playlist: if bufferEnd before start of playlist, load first fragment\n if (bufferEnd < start) {\n frag = fragments[0];\n }\n }\n if (!frag) {\n frag = this._findFragment({ start: start, fragPrevious: fragPrevious, fragLen: fragLen, fragments: fragments, bufferEnd: bufferEnd, end: end, levelDetails: levelDetails });\n }\n if (frag) {\n return this._loadFragmentOrKey({ frag: frag, level: level, levelDetails: levelDetails, pos: pos, bufferEnd: bufferEnd });\n }\n return true;\n }\n }, {\n key: '_ensureFragmentAtLivePoint',\n value: function _ensureFragmentAtLivePoint(_ref2) {\n var levelDetails = _ref2.levelDetails,\n bufferEnd = _ref2.bufferEnd,\n start = _ref2.start,\n end = _ref2.end,\n fragPrevious = _ref2.fragPrevious,\n fragments = _ref2.fragments,\n fragLen = _ref2.fragLen;\n\n var config = this.hls.config,\n media = this.media;\n\n var frag = void 0;\n\n // check if requested position is within seekable boundaries :\n //logger.log(`start/pos/bufEnd/seeking:${start.toFixed(3)}/${pos.toFixed(3)}/${bufferEnd.toFixed(3)}/${this.media.seeking}`);\n var maxLatency = config.liveMaxLatencyDuration !== undefined ? config.liveMaxLatencyDuration : config.liveMaxLatencyDurationCount * levelDetails.targetduration;\n\n if (bufferEnd < Math.max(start - config.maxFragLookUpTolerance, end - maxLatency)) {\n var liveSyncPosition = this.computeLivePosition(start, levelDetails);\n _logger.logger.log('buffer end: ' + bufferEnd.toFixed(3) + ' is located too far from the end of live sliding playlist, reset currentTime to : ' + liveSyncPosition.toFixed(3));\n bufferEnd = liveSyncPosition;\n if (media && media.readyState && media.duration > liveSyncPosition) {\n media.currentTime = liveSyncPosition;\n }\n }\n\n // if end of buffer greater than live edge, don't load any fragment\n // this could happen if live playlist intermittently slides in the past.\n // level 1 loaded [182580161,182580167]\n // level 1 loaded [182580162,182580169]\n // Loading 182580168 of [182580162 ,182580169],level 1 ..\n // Loading 182580169 of [182580162 ,182580169],level 1 ..\n // level 1 loaded [182580162,182580168] <============= here we should have bufferEnd > end. in that case break to avoid reloading 182580168\n // level 1 loaded [182580164,182580171]\n //\n if (levelDetails.PTSKnown && bufferEnd > end && media && media.readyState) {\n return null;\n }\n\n if (this.startFragRequested && !levelDetails.PTSKnown) {\n /* we are switching level on live playlist, but we don't have any PTS info for that quality level ...\n try to load frag matching with next SN.\n even if SN are not synchronized between playlists, loading this frag will help us\n compute playlist sliding and find the right one after in case it was not the right consecutive one */\n if (fragPrevious) {\n var targetSN = fragPrevious.sn + 1;\n if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n frag = fragments[targetSN - levelDetails.startSN];\n _logger.logger.log('live playlist, switching playlist, load frag with next SN: ' + frag.sn);\n }\n }\n if (!frag) {\n /* we have no idea about which fragment should be loaded.\n so let's load mid fragment. it will help computing playlist sliding and find the right one\n */\n frag = fragments[Math.min(fragLen - 1, Math.round(fragLen / 2))];\n _logger.logger.log('live playlist, switching playlist, unknown, load middle frag : ' + frag.sn);\n }\n }\n return frag;\n }\n }, {\n key: '_findFragment',\n value: function _findFragment(_ref3) {\n var start = _ref3.start,\n fragPrevious = _ref3.fragPrevious,\n fragLen = _ref3.fragLen,\n fragments = _ref3.fragments,\n bufferEnd = _ref3.bufferEnd,\n end = _ref3.end,\n levelDetails = _ref3.levelDetails,\n holaSeek = _ref3.holaSeek;\n\n var config = this.hls.config;\n var frag = void 0,\n foundFrag = void 0,\n maxFragLookUpTolerance = config.maxFragLookUpTolerance,\n media = this.media,\n seekFlag = media && media.seeking || holaSeek;\n\n if (bufferEnd < end - 0.05) {\n if (bufferEnd > end - maxFragLookUpTolerance || seekFlag) {\n maxFragLookUpTolerance = 0;\n }\n foundFrag = _binarySearch2.default.search(fragments, function (candidate) {\n // offset should be within fragment boundary - config.maxFragLookUpTolerance\n // this is to cope with situations like\n // bufferEnd = 9.991\n // frag[Ø] : [0,10]\n // frag[1] : [10,20]\n // bufferEnd is within frag[0] range ... although what we are expecting is to return frag[1] here\n // frag start frag start+duration\n // |-----------------------------|\n // <---> <--->\n // ...--------><-----------------------------><---------....\n // previous frag matching fragment next frag\n // return -1 return 0 return 1\n //logger.log(`level/sn/start/end/bufEnd:${level}/${candidate.sn}/${candidate.start}/${(candidate.start+candidate.duration)}/${bufferEnd}`);\n // if we are in seek, the condition will always be false\n if (candidate.lastGop - maxFragLookUpTolerance < bufferEnd && candidate.lastGop + maxFragLookUpTolerance > bufferEnd) {\n return 1;\n }\n // if we are in seek, the condition will always be false\n if (candidate.firstGop - maxFragLookUpTolerance < bufferEnd && candidate.firstGop + maxFragLookUpTolerance > bufferEnd) {\n return 0;\n }\n if (candidate.start + candidate.duration - maxFragLookUpTolerance <= bufferEnd) {\n return 1;\n }\n // if maxFragLookUpTolerance will have negative value then don't return -1 for first element\n if (candidate.start - maxFragLookUpTolerance > bufferEnd && candidate.start) {\n return candidate.sn > levelDetails.startSN ? -1 : 0;\n }\n return 0;\n });\n } else {\n // reach end of playlist\n foundFrag = fragments[fragLen - 1];\n }\n if (foundFrag) {\n frag = foundFrag;\n var curSNIdx = frag.sn - levelDetails.startSN;\n var prevFrag = fragments[curSNIdx - 1];\n var nextFrag = fragments[curSNIdx + 1];\n _logger.logger.log('find SN matching with pos:' + bufferEnd + ':' + frag.sn);\n var ignoreBacktrack = !frag.backtracked || frag.backtracked && (!frag.dropped && !nextFrag || frag.lastGop && bufferEnd >= frag.lastGop || fragPrevious && prevFrag && fragPrevious.level === prevFrag.level && fragPrevious.sn === prevFrag.sn);\n if (ignoreBacktrack && fragPrevious && frag.sn === fragPrevious.sn) {\n if (frag.sn < levelDetails.endSN) {\n var deltaPTS = fragPrevious.deltaPTS;\n // if there is a significant delta between audio and video, larger than max allowed hole,\n // and if previous remuxed fragment did not start with a keyframe. (fragPrevious.dropped)\n // let's try to load previous fragment again to get last keyframe\n // then we will reload again current fragment (that way we should be able to fill the buffer hole ...)\n if (this.loadedmetadata && deltaPTS && deltaPTS > config.maxSeekHole && fragPrevious.dropped && (!media || !_bufferHelper2.default.isBuffered(media, bufferEnd))) {\n frag = prevFrag;\n _logger.logger.warn('SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this');\n // decrement previous frag load counter to avoid frag loop loading error when next fragment will get reloaded\n fragPrevious.loadCounter--;\n } else {\n frag = nextFrag;\n _logger.logger.log('SN just loaded, load next one: ' + frag.sn);\n }\n } else {\n // have we reached end of VOD playlist ?\n if (!levelDetails.live) {\n // Finalize the media stream\n this.hls.trigger(_events2.default.BUFFER_EOS);\n // We might be loading the last fragment but actually the media\n // is currently processing a seek command and waiting for new data to resume at another point.\n // Going to ended state while media is seeking can spawn an infinite buffering broken state.\n if (!this.media.seeking) {\n this.state = State.ENDED;\n }\n }\n frag = null;\n }\n } else if (frag.dropped && !ignoreBacktrack) {\n // Only backtrack a max of 1 consecutive fragment to prevent sliding back too far when little or no frags start with keyframes\n if (nextFrag && nextFrag.backtracked) {\n _logger.logger.log('Already backtracked from fragment ' + (curSNIdx + 1) + ', will not backtrack to fragment ' + curSNIdx + '. Loading fragment ' + (curSNIdx + 1));\n frag = nextFrag;\n } else {\n // If a fragment has dropped frames and it's in a different level/sequence, load the previous fragment to try and find the keyframe\n // Reset the dropped count now since it won't be reset until we parse the fragment again, which prevents infinite backtracking on the same segment\n _logger.logger.log('Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe');\n frag.dropped = 0;\n if (prevFrag) {\n if (prevFrag.loadCounter) {\n prevFrag.loadCounter--;\n }\n frag = prevFrag;\n frag.forceQid = true;\n } else {\n frag = null;\n }\n }\n }\n }\n return frag;\n }\n }, {\n key: '_loadFragmentOrKey',\n value: function _loadFragmentOrKey(_ref4) {\n var frag = _ref4.frag,\n level = _ref4.level,\n levelDetails = _ref4.levelDetails,\n pos = _ref4.pos,\n bufferEnd = _ref4.bufferEnd;\n\n var hls = this.hls,\n config = hls.config;\n\n //logger.log('loading frag ' + i +',pos/bufEnd:' + pos.toFixed(3) + '/' + bufferEnd.toFixed(3));\n if (frag.decryptdata.uri != null && frag.decryptdata.key == null) {\n _logger.logger.log('Loading key for ' + frag.sn + ' of [' + levelDetails.startSN + ' ,' + levelDetails.endSN + '],level ' + level);\n this.state = State.KEY_LOADING;\n hls.trigger(_events2.default.KEY_LOADING, { frag: frag });\n } else {\n _logger.logger.log('Loading ' + frag.sn + ' of [' + levelDetails.startSN + ' ,' + levelDetails.endSN + '],level ' + level + ', currentTime:' + pos + ',bufferEnd:' + bufferEnd.toFixed(3));\n frag.autoLevel = hls.autoLevelEnabled;\n if (this.levels.length > 1) {\n frag.expectedLen = Math.round(frag.duration * this.levels[level].bitrate / 8);\n frag.trequest = performance.now();\n }\n // ensure that we are not reloading the same fragments in loop ...\n if (this.fragLoadIdx !== undefined) {\n this.fragLoadIdx++;\n } else {\n this.fragLoadIdx = 0;\n }\n if (frag.loadCounter) {\n frag.loadCounter++;\n var maxThreshold = config.fragLoadingLoopThreshold;\n // if this frag has already been loaded 3 times, and if it has been reloaded recently\n if (frag.loadCounter > maxThreshold && Math.abs(this.fragLoadIdx - frag.loadIdx) < maxThreshold) {\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.FRAG_LOOP_LOADING_ERROR, fatal: false, frag: frag });\n return false;\n }\n } else {\n frag.loadCounter = 1;\n }\n frag.loadIdx = this.fragLoadIdx;\n this.fragCurrent = frag;\n this.fragCurrent.loaded = false;\n this.startFragRequested = true;\n this.nextLoadPosition = frag.start + frag.duration;\n this.fragTimeOffset = frag.start;\n // lazy demuxer init, as this could take some time ... do it during frag loading\n if (!this.demuxer) {\n this.demuxer = new _demuxer2.default(hls, 'main');\n }\n this.stats = { tfirst: performance.now() };\n this.state = State.FRAG_LOADING;\n hls.trigger(_events2.default.FRAG_LOADING, { frag: frag });\n return true;\n }\n }\n }, {\n key: 'getBufferRange',\n value: function getBufferRange(position) {\n return _binarySearch2.default.search(this.bufferRange, function (range) {\n if (position < range.start) {\n return -1;\n } else if (position > range.end) {\n return 1;\n }\n return 0;\n });\n }\n }, {\n key: 'followingBufferRange',\n value: function followingBufferRange(range) {\n if (range) {\n // try to get range of next fragment (500ms after this range)\n return this.getBufferRange(range.end + 0.5);\n }\n return null;\n }\n }, {\n key: '_checkFragmentChanged',\n value: function _checkFragmentChanged() {\n var currentTime,\n video = this.media;\n if (video && video.seeking === false) {\n currentTime = video.currentTime;\n /* if video element is in seeked state, currentTime can only increase.\n (assuming that playback rate is positive ...)\n As sometimes currentTime jumps back to zero after a\n media decode error, check this, to avoid seeking back to\n wrong position after a media decode error\n */\n if (currentTime > video.playbackRate * this.lastCurrentTime) {\n this.lastCurrentTime = currentTime;\n }\n }\n }\n\n /*\n on immediate level switch :\n - pause playback if playing\n - cancel any pending load request\n - and trigger a buffer flush\n */\n\n }, {\n key: 'immediateLevelSwitch',\n value: function immediateLevelSwitch() {\n _logger.logger.log('immediateLevelSwitch');\n if (!this.immediateSwitch) {\n this.immediateSwitch = true;\n this.previouslyPaused = this.media.paused;\n this.media.pause();\n }\n var fragCurrent = this.fragCurrent;\n if (fragCurrent && fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n // increase fragment load Index to avoid frag loop loading error after buffer flush\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n // flush everything\n this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n }\n\n /*\n on immediate level switch end, after new fragment has been buffered :\n - nudge video decoder by slightly adjusting video currentTime\n - resume the playback if needed\n */\n\n }, {\n key: 'immediateLevelSwitchEnd',\n value: function immediateLevelSwitchEnd() {\n var media = this.media;\n if (media && media.buffered.length) {\n this.immediateSwitch = false;\n if (_bufferHelper2.default.isBuffered(media, media.currentTime)) {\n // only nudge if currentTime is buffered\n media.currentTime -= 0.0001;\n }\n if (!this.previouslyPaused) {\n media.play();\n }\n }\n }\n }, {\n key: 'nextLevelSwitch',\n value: function nextLevelSwitch() {\n /* try to switch ASAP without breaking video playback :\n in order to ensure smooth but quick level switching,\n we need to find the next flushable buffer range\n we should take into account new segment fetch time\n */\n var media = this.media;\n // ensure that media is defined and that metadata are available (to retrieve currentTime)\n if (media && media.readyState) {\n var fetchdelay = void 0,\n currentRange = void 0,\n nextRange = void 0;\n // increase fragment load Index to avoid frag loop loading error after buffer flush\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n currentRange = this.getBufferRange(media.currentTime);\n if (currentRange && currentRange.start > 1) {\n // flush buffer preceding current fragment (flush until current fragment start offset)\n // minus 1s to avoid video freezing, that could happen if we flush keyframe of current video ...\n this.flushMainBuffer(0, currentRange.start - 1);\n }\n if (!media.paused) {\n // add a safety delay of 1s\n var nextLevelId = this.hls.nextLoadLevel,\n nextLevel = this.levels[nextLevelId],\n fragLastKbps = this.fragLastKbps;\n if (fragLastKbps && this.fragCurrent) {\n fetchdelay = this.fragCurrent.duration * nextLevel.bitrate / (1000 * fragLastKbps) + 1;\n } else {\n fetchdelay = 0;\n }\n } else {\n fetchdelay = 0;\n }\n //logger.log('fetchdelay:'+fetchdelay);\n // find buffer range that will be reached once new fragment will be fetched\n nextRange = this.getBufferRange(media.currentTime + fetchdelay);\n if (nextRange) {\n // we can flush buffer range following this one without stalling playback\n nextRange = this.followingBufferRange(nextRange);\n if (nextRange) {\n // if we are here, we can also cancel any loading/demuxing in progress, as they are useless\n var fragCurrent = this.fragCurrent;\n if (fragCurrent && fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n // flush position is the start position of this new buffer\n this.flushMainBuffer(nextRange.start, Number.POSITIVE_INFINITY);\n }\n }\n }\n }\n }, {\n key: 'flushMainBuffer',\n value: function flushMainBuffer(startOffset, endOffset) {\n this.state = State.PAUSED;\n var flushScope = { startOffset: startOffset, endOffset: endOffset };\n // if alternate audio tracks are used, only flush video, otherwise flush everything\n if (this.altAudio) {\n flushScope.type = 'video';\n }\n this.hls.trigger(_events2.default.BUFFER_FLUSHING, flushScope);\n }\n }, {\n key: 'onMediaAttached',\n value: function onMediaAttached(data) {\n var media = this.media = data.media;\n this.onvseeking = this.onMediaSeeking.bind(this);\n this.onvseeked = this.onMediaSeeked.bind(this);\n this.onvended = this.onMediaEnded.bind(this);\n media.addEventListener('seeking', this.onvseeking);\n media.addEventListener('seeked', this.onvseeked);\n media.addEventListener('ended', this.onvended);\n if (this.demuxer) {\n this.demuxer.destroy();\n this.demuxer = new _demuxer2.default(this.hls);\n this.fragParsing = null;\n }\n if (this.levels && this.config.autoStartLoad) {\n this.hls.startLoad();\n }\n }\n }, {\n key: 'onMediaDetaching',\n value: function onMediaDetaching() {\n var media = this.media;\n if (media && media.ended || this.state === State.ENDED) {\n _logger.logger.log('MSE detaching and video ended, reset startPosition');\n this.startPosition = this.lastCurrentTime = 0;\n }\n\n // reset fragment loading counter on MSE detaching to avoid reporting FRAG_LOOP_LOADING_ERROR after error recovery\n var levels = this.levels;\n if (levels) {\n // reset fragment load counter\n levels.forEach(function (level) {\n if (level.details) {\n level.details.fragments.forEach(function (fragment) {\n fragment.loadCounter = fragment.backtracked = fragment.forceQid = undefined;\n });\n }\n });\n }\n // remove video listeners\n if (media) {\n media.removeEventListener('seeking', this.onvseeking);\n media.removeEventListener('seeked', this.onvseeked);\n media.removeEventListener('ended', this.onvended);\n this.onvseeking = this.onvseeked = this.onvended = null;\n }\n this.media = null;\n this.loadedmetadata = false;\n this.stopLoad();\n this.fragParsing = null;\n }\n }, {\n key: 'onMediaSeeking',\n value: function onMediaSeeking() {\n var media = this.media,\n currentTime = media ? media.currentTime : undefined;\n _logger.logger.log('media seeking to ' + currentTime);\n var fragCurrent = this.fragCurrent;\n if (currentTime !== undefined && media.buffered.length && media.buffered.start(0) > currentTime && media.buffered.start(0) - currentTime < 0.5) {\n // adjust seek position to fix buffer stalling\n media.currentTime = media.buffered.start(0) + 0.001;\n }\n if (this.state === State.FRAG_LOADING) {\n var bufferInfo = _bufferHelper2.default.bufferInfo(media, currentTime, this.config.maxBufferHole);\n // check if we are seeking to a unbuffered area AND if frag loading is in progress\n if (bufferInfo.len === 0 && fragCurrent) {\n var fragPrevious = this.fragPrevious,\n checkPrevious = fragPrevious && fragCurrent.sn - fragPrevious.sn === 1,\n fragStartOffset = checkPrevious ? fragPrevious.start : fragCurrent.start,\n fragEndOffset = fragStartOffset + (checkPrevious ? fragPrevious.duration : 0) + fragCurrent.duration;\n // check if we seek position will be out of currently loaded frag range : if out cancel frag load, if in, don't do anything\n if (currentTime < fragStartOffset || currentTime > fragEndOffset) {\n _logger.logger.log('seeking outside of buffer while fragment load in progress, cancel fragment load');\n if (fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n this.fragPrevious = null;\n // switch to IDLE state to load new fragment\n this.state = State.IDLE;\n } else {\n _logger.logger.log('seeking outside of buffer but within currently loaded fragment range');\n }\n }\n } else if (this.state === State.ENDED) {\n // switch to IDLE state to check for potential new fragment\n this.state = State.IDLE;\n } else if (this.state === State.PARSING && fragCurrent && !fragCurrent.loaded) {\n _logger.logger.log('mediaController: no final chunk, switch back to IDLE state');\n this.state = State.IDLE;\n }\n if (media) {\n this.lastCurrentTime = currentTime;\n }\n // avoid reporting fragment loop loading error in case user is seeking several times on same position\n if (this.fragLoadIdx !== undefined) {\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n }\n // in case seeking occurs although no media buffered, adjust startPosition and nextLoadPosition to seek target\n if (!this.loadedmetadata) {\n this.nextLoadPosition = this.startPosition = currentTime;\n if (this.fragCurrent && (this.fragCurrent.start > currentTime || this.fragCurrent.start + this.fragCurrent.duration < currentTime)) {\n this.seekDuringFirst = true;\n }\n }\n // tick to speed up processing\n this.tick();\n }\n }, {\n key: 'onMediaSeeked',\n value: function onMediaSeeked() {\n _logger.logger.log('media seeked to ' + this.media.currentTime);\n // tick to speed up FRAGMENT_PLAYING triggering\n this.tick();\n }\n }, {\n key: 'onMediaEnded',\n value: function onMediaEnded() {\n _logger.logger.log('media ended');\n // reset startPosition and lastCurrentTime to restart playback @ stream beginning\n this.startPosition = this.lastCurrentTime = 0;\n }\n }, {\n key: 'onManifestLoading',\n value: function onManifestLoading() {\n // reset buffer on manifest loading\n _logger.logger.log('trigger BUFFER_RESET');\n this.hls.trigger(_events2.default.BUFFER_RESET);\n this.bufferRange = [];\n this.stalled = false;\n this.startPosition = this.lastCurrentTime = 0;\n this.fragParsing = null;\n delete this.fragPreviousSaved;\n }\n }, {\n key: 'onManifestParsed',\n value: function onManifestParsed(data) {\n var aac = false,\n heaac = false,\n codec;\n data.levels.forEach(function (level) {\n // detect if we have different kind of audio codecs used amongst playlists\n codec = level.audioCodec;\n if (codec) {\n if (codec.indexOf('mp4a.40.2') !== -1) {\n aac = true;\n }\n if (codec.indexOf('mp4a.40.5') !== -1) {\n heaac = true;\n }\n }\n });\n this.audioCodecSwitch = aac && heaac;\n if (this.audioCodecSwitch) {\n _logger.logger.log('both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC');\n }\n this.levels = data.levels;\n this.startLevelLoaded = false;\n this.startFragRequested = false;\n if (this.demuxer) {\n this.demuxer.destroy();\n this.demuxer = new _demuxer2.default(this.hls);\n this.fragParsing = null;\n }\n if (this.config.autoStartLoad) {\n this.hls.startLoad();\n }\n }\n }, {\n key: 'onLevelLoaded',\n value: function onLevelLoaded(data) {\n var newDetails = data.details,\n newLevelId = data.level,\n levelPreload = data.preload,\n curLevel = this.levels[newLevelId],\n duration = newDetails.totalduration,\n sliding = 0,\n lastDetails = this.levelLastLoaded !== undefined && this.levels[this.levelLastLoaded] && this.levels[this.levelLastLoaded].details;\n\n _logger.logger.log('level ' + newLevelId + ' loaded [' + newDetails.startSN + ',' + newDetails.endSN + '],duration:' + duration);\n\n if (newDetails.live) {\n var curDetails = curLevel.details;\n\n if (lastDetails && _levelHelper2.default.canMerge(lastDetails, newDetails)) {\n curDetails = lastDetails;\n this.reinit = false;\n } else if (curDetails && !_levelHelper2.default.canMerge(curDetails, newDetails)) {\n var frag = curDetails.fragments[curDetails.fragments.length - 1];\n if (frag && curDetails.startSN > newDetails.endSN) {\n _levelHelper2.default.adjustSliding(newDetails.fragments, frag.start + frag.duration);\n this.reinit = true;\n }\n curDetails = undefined;\n this.hls.clearLevelDetails();\n }\n\n if (curDetails) {\n // we already have details for that level, merge them\n _levelHelper2.default.mergeDetails(curDetails, newDetails);\n sliding = newDetails.fragments[0].start;\n if (newDetails.PTSKnown) {\n _logger.logger.log('live playlist sliding:' + sliding.toFixed(3));\n } else {\n _logger.logger.log('live playlist - outdated PTS, unknown sliding');\n }\n } else {\n newDetails.PTSKnown = false;\n _logger.logger.log('live playlist - first load, unknown sliding');\n }\n } else {\n newDetails.PTSKnown = false;\n if (lastDetails && lastDetails.fragments.length === newDetails.fragments.length) {\n _levelHelper2.default.mergeDetails(lastDetails, newDetails);\n }\n }\n // override level info\n this.levelLastLoaded = newLevelId;\n curLevel.details = newDetails;\n this.hls.trigger(_events2.default.LEVEL_UPDATED, { details: newDetails, level: newLevelId });\n\n // if just a preload, stop here\n if (levelPreload) {\n return;\n }\n\n // compute start position\n if (this.startFragRequested === false) {\n // if live playlist, set start position to be fragment N-this.config.liveSyncDurationCount (usually 3)\n if (newDetails.live) {\n this.startPosition = this.computeLivePosition(sliding, newDetails);\n _logger.logger.log('configure startPosition to ' + this.startPosition);\n }\n this.nextLoadPosition = this.startPosition;\n }\n // only switch batck to IDLE state if we were waiting for level to start downloading a new fragment\n if (this.state === State.WAITING_LEVEL) {\n this.waitLiveLevel = false;\n this.state = State.IDLE;\n }\n //trigger handler right now\n this.tick();\n }\n }, {\n key: 'onLevelReplace',\n value: function onLevelReplace(data) {\n _logger.logger.log('replace level ' + data.level + ' playlist with a new version');\n var level = this.levels[data.level];\n level.details = data.details;\n this.hls.trigger(_events2.default.LEVEL_UPDATED, { details: data.details, level: data.level });\n }\n }, {\n key: 'onKeyLoaded',\n value: function onKeyLoaded() {\n if (this.state === State.KEY_LOADING) {\n this.state = State.IDLE;\n this.tick();\n }\n }\n }, {\n key: 'onFragChunkLoaded',\n value: function onFragChunkLoaded(data) {\n var fragCurrent = this.fragCurrent;\n if ((this.state === State.FRAG_LOADING || this.state === State.PARSING) && fragCurrent && data.frag.level === fragCurrent.level && data.frag.sn === fragCurrent.sn) {\n _logger.logger.log('Loaded chunk ' + data.payload.byteLength + ' of frag ' + fragCurrent.sn + ' of level ' + fragCurrent.level);\n if (this.state === State.PARSING && fragCurrent.loaded) {\n _logger.logger.log('Same chunk loaded in PARSING state');\n }\n if (data.payload.keymaps) {\n var keymaps = data.payload.keymaps;\n this.savedKeymaps = Object.assign(this.savedKeymaps || {}, keymaps);\n if (!('old_map' in this.savedKeymaps) || !('new_map' in this.savedKeymaps)) {\n this.savedChunk = new Uint8Array(data.payload);\n return;\n }\n if (this.savedChunk) {\n var newdata = new Uint8Array(data.payload.byteLength + this.savedChunk.byteLength);\n newdata.set('old_map' in keymaps ? new Uint8Array(data.payload) : this.savedChunk);\n newdata.set('old_map' in keymaps ? this.savedChunk : new Uint8Array(data.payload), 'old_map' in keymaps ? data.payload.byteLength : this.savedChunk.byteLength);\n data.payload = newdata.buffer;\n data.payload.first = data.payload.final = true;\n delete this.savedChunk;\n }\n var keymapObject = data.payload.keymaps = this.savedKeymaps.new_map; // jshint ignore:line\n keymapObject.switchPoint = this.savedKeymaps.old_map.len; // jshint ignore:line\n keymapObject.firstSN = keymapObject.idr[0].sn || keymapObject.sei[0].sn || keymapObject.indr[0].sn;\n delete this.savedKeymaps;\n }\n this.state = State.PARSING;\n // transmux the MPEG-TS data to ISO-BMFF segments\n if (!data.stats.tfirst && this.stats && this.stats.tfirst) {\n data.stats.tfirst = this.stats.tfirst;\n }\n this.stats = data.stats;\n var level = fragCurrent.level,\n fragLevel = this.levels[level],\n details = fragLevel.details,\n duration = details.totalduration,\n start = this.fragTimeOffset,\n sn = fragCurrent.sn,\n audioCodec = this.config.defaultAudioCodec || fragLevel.audioCodec;\n if (this.audioCodecSwap) {\n _logger.logger.log('swapping playlist audio codec');\n if (audioCodec === undefined) {\n audioCodec = this.lastAudioCodec;\n }\n if (audioCodec) {\n if (audioCodec.indexOf('mp4a.40.5') !== -1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n }\n _logger.logger.log('Demuxing ' + sn + ' of [' + details.startSN + ' ,' + details.endSN + '],level ' + level + ', cc ' + fragCurrent.cc);\n var demuxer = this.demuxer;\n if (demuxer) {\n // time Offset is accurate if level PTS is known, or if playlist is not sliding (not live) and if media is not seeking (this is to overcome potential timestamp drifts between playlists and fragments)\n var media = this.media;\n var mediaSeeking = media && media.seeking;\n var accurateTimeOffset = !mediaSeeking && (details.PTSKnown || !details.live);\n demuxer.push(data.payload, audioCodec, fragLevel.videoCodec, start, fragCurrent.cc, level, sn, duration, fragCurrent.decryptdata, accurateTimeOffset, details.endSN, this.reinit);\n this.reinit = false;\n }\n if (data.payload.final) {\n fragCurrent.loaded = true;\n }\n } else {\n _logger.logger.warn('not in FRAG_LOADING state but ' + this.state + ', ignoring FRAG_CHUNK_LOADED event for ' + data.frag.sn);\n }\n }\n }, {\n key: 'onFragLoaded',\n value: function onFragLoaded() {\n _logger.logger.log('Loaded ' + this.fragCurrent.sn + ' of level ' + this.fragCurrent.level);\n this.fragLoadError = 0;\n if (this.stats.tload === undefined) {\n this.stats.tload = performance.now();\n }\n }\n }, {\n key: 'onFragParsingInitSegment',\n value: function onFragParsingInitSegment(data) {\n if (this.state === State.PARSING) {\n var tracks = data.tracks,\n trackName,\n track;\n\n // include levelCodec in audio and video tracks\n track = tracks.audio;\n if (track) {\n var audioCodec = this.levels[this.level].audioCodec,\n browser = this.config.browser;\n if (audioCodec && this.audioCodecSwap) {\n _logger.logger.log('swapping playlist audio codec');\n if (audioCodec.indexOf('mp4a.40.5') !== -1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n // in case AAC and HE-AAC audio codecs are signalled in manifest\n // force HE-AAC , as it seems that most browsers prefers that way,\n // except for mono streams OR on FF\n // these conditions might need to be reviewed ...\n if (this.audioCodecSwitch) {\n // don't force HE-AAC if mono stream\n if (track.metadata.channelCount !== 1 &&\n // don't force HE-AAC if firefox\n !browser.isFirefox) {\n audioCodec = 'mp4a.40.5';\n }\n }\n // HE-AAC is broken on Android, always signal audio codec as AAC even if variant manifest states otherwise\n if (browser.isAndroid && track.container !== 'audio/mpeg') {\n audioCodec = 'mp4a.40.2';\n _logger.logger.log('Android: force audio codec to ' + audioCodec);\n }\n track.levelCodec = audioCodec;\n }\n track = tracks.video;\n if (track) {\n track.levelCodec = this.levels[this.level].videoCodec;\n }\n\n // if remuxer specify that a unique track needs to generated,\n // let's merge all tracks together\n if (data.unique) {\n var mergedTrack = {\n codec: '',\n levelCodec: ''\n };\n for (trackName in data.tracks) {\n track = tracks[trackName];\n mergedTrack.container = track.container;\n if (mergedTrack.codec) {\n mergedTrack.codec += ',';\n mergedTrack.levelCodec += ',';\n }\n if (track.codec) {\n mergedTrack.codec += track.codec;\n }\n if (track.levelCodec) {\n mergedTrack.levelCodec += track.levelCodec;\n }\n }\n tracks = { audiovideo: mergedTrack };\n }\n this.hls.trigger(_events2.default.BUFFER_CODECS, tracks);\n if (this.state !== State.STOPPED) {\n // loop through tracks that are going to be provided to bufferController\n for (trackName in tracks) {\n track = tracks[trackName];\n var initSegment = track.initSegment;\n _logger.logger.log('track:' + trackName + ',container:' + track.container + ',codecs[level/parsed]=[' + track.levelCodec + '/' + track.codec + ']' + (initSegment ? ',init:' + initSegment.length : ''));\n if (initSegment) {\n this.hls.trigger(_events2.default.BUFFER_APPENDING, { type: trackName, data: initSegment });\n }\n }\n }\n //trigger handler right now\n this.tick();\n }\n }\n }, {\n key: 'onFragParsingData',\n value: function onFragParsingData(data) {\n var _this2 = this;\n\n if (this.state === State.PARSING || this.fragParsing) {\n this.tparse2 = Date.now();\n var frag = this.fragCurrent || this.fragParsing;\n _logger.logger.log('parsed ' + data.type + ',PTS:[' + data.startPTS.toFixed(3) + ',' + data.endPTS.toFixed(3) + '],DTS:[' + data.startDTS.toFixed(3) + '/' + data.endDTS.toFixed(3) + '],nb:' + data.nb + ',dropped:' + (data.dropped || 0) + ',deltaPTS:' + (data.deltaPTS || 0));\n var hls = this.hls;\n\n // has remuxer dropped video frames located before first keyframe ?\n if (data.type === 'video') {\n frag.dropped = data.dropped;\n if (data.deltaPTS) {\n if (isNaN(frag.deltaPTS)) {\n frag.deltaPTS = data.deltaPTS;\n } else {\n frag.deltaPTS = Math.max(data.deltaPTS, frag.deltaPTS);\n }\n }\n }\n\n [data.data1, data.data2].forEach(function (buffer) {\n // only append in PARSING state (rationale is that an appending error could happen synchronously on first segment appending)\n // in that case it is useless to append following segments\n if (buffer && buffer.length && _this2.state === State.PARSING) {\n hls.trigger(_events2.default.BUFFER_APPENDING, { type: data.type, data: buffer });\n }\n });\n //trigger handler right now\n this.tick();\n } else {\n _logger.logger.warn('not in PARSING state but ' + this.state + ', ignoring FRAG_PARSING_DATA event');\n }\n }\n }, {\n key: 'onFragParsed',\n value: function onFragParsed(data) {\n if (this.state === State.PARSING) {\n var frag = this.fragCurrent,\n fragPrevious = this.fragPrevious,\n details = this.levels[frag.level].details;\n this.stats.tparsed = performance.now();\n this.state = State.PARSED;\n _logger.logger.log('parsed frag sn:' + frag.sn + ',PTS:[' + (data.startPTS ? data.startPTS.toFixed(3) : 'none') + ',' + (data.endPTS ? data.endPTS.toFixed(3) : 'none') + '],lastGopPTS:' + (data.lastGopPTS ? data.lastGopPTS.toFixed(3) : 'none'));\n if (data.startPTS !== undefined && data.endPTS !== undefined) {\n var drift = _levelHelper2.default.updateFragPTS(details, frag.sn, data.startPTS, data.endPTS, data.lastGopPTS);\n this.hls.trigger(_events2.default.LEVEL_PTS_UPDATED, { details: details, level: frag.level, drift: drift });\n } else {\n // forse reload of prev fragment if video samples not found\n frag.dropped = 1;\n frag.deltaPTS = this.config.maxSeekHole + 1;\n }\n var curSNIdx = frag.sn - details.startSN;\n if (curSNIdx >= 0) {\n var detFrag = details.fragments[curSNIdx];\n detFrag.loadCounter = frag.loadCounter;\n var sameLevel = fragPrevious && frag.level === fragPrevious.level;\n if (!this.config.disableBacktrack && !data.isPartial && !sameLevel) {\n if (frag.dropped) {\n detFrag.dropped = frag.dropped;\n if (!detFrag.backtracked) {\n // Causes findFragments to backtrack a segment and find the keyframe\n // Audio fragments arriving before video sets the nextLoadPosition, causing _findFragments to skip the backtracked fragment\n frag.backtracked = detFrag.backtracked = true;\n this.nextLoadPosition = data.startPTS;\n } else {\n _logger.logger.log('Already backtracked on this fragment, appending with the gap');\n }\n } else {\n // Only reset the backtracked flag if we've loaded the frag without any dropped frames\n frag.backtracked = detFrag.backtracked = false;\n frag.forceQid = detFrag.forceQid = false;\n }\n }\n }\n this.hls.trigger(_events2.default.FRAG_APPENDING);\n }\n }\n }, {\n key: 'onFragAppended',\n value: function onFragAppended() {\n var _this3 = this;\n\n //trigger handler right now\n if (this.state === State.PARSED) {\n this._checkBuffer(true);\n var frag = this.fragCurrent;\n if (frag) {\n _logger.logger.log('media buffered : ' + this.timeRangesToString(this.media.buffered));\n // filter potentially evicted bufferRange. this is to avoid memleak on live streams\n var bufferRange = this.bufferRange.filter(function (range) {\n return _bufferHelper2.default.isBuffered(_this3.media, (range.start + range.end) / 2);\n });\n // push new range\n bufferRange.push({ type: frag.type, start: frag.startPTS, end: frag.endPTS, frag: frag });\n // sort, as we use BinarySearch for lookup in getBufferRange ...\n this.bufferRange = bufferRange.sort(function (a, b) {\n return a.start - b.start;\n });\n this.fragPrevious = frag;\n var stats = this.stats;\n stats.tbuffered = performance.now();\n this.fragLastKbps = Math.round(8 * stats.length / (stats.tbuffered - stats.tfirst));\n this.hls.trigger(_events2.default.FRAG_BUFFERED, { stats: stats, frag: frag });\n this.state = State.IDLE;\n }\n this.tick();\n } else {\n _logger.logger.warn('not in PARSED state but ' + this.state);\n }\n }\n }, {\n key: 'onError',\n value: function onError(data) {\n switch (data.details) {\n case _errors.ErrorDetails.FRAG_LOAD_ERROR:\n case _errors.ErrorDetails.FRAG_LOAD_TIMEOUT:\n if (!data.fatal) {\n var loadError = (this.fragLoadError || 0) + 1;\n if (loadError <= this.config.fragLoadingMaxRetry) {\n this.fragLoadError = loadError;\n // reset load counter to avoid frag loop loading error\n data.frag.loadCounter = 0;\n // exponential backoff capped to 64s\n var delay = Math.min(Math.pow(2, loadError - 1) * this.config.fragLoadingRetryDelay, 64000);\n _logger.logger.warn('mediaController: frag loading failed, retry in ' + delay + ' ms');\n this.retryDate = performance.now() + delay;\n // retry loading state\n this.state = State.FRAG_LOADING_WAITING_RETRY;\n } else {\n _logger.logger.error('mediaController: ' + data.details + ' reaches max retry, redispatch as fatal ...');\n // redispatch same error but with fatal set to true\n data.fatal = true;\n this.hls.trigger(_events2.default.ERROR, data);\n this.state = State.ERROR;\n }\n }\n break;\n case _errors.ErrorDetails.FRAG_LOOP_LOADING_ERROR:\n case _errors.ErrorDetails.LEVEL_LOAD_ERROR:\n case _errors.ErrorDetails.LEVEL_LOAD_TIMEOUT:\n case _errors.ErrorDetails.KEY_LOAD_ERROR:\n case _errors.ErrorDetails.KEY_LOAD_TIMEOUT:\n // when in ERROR state, don't switch back to IDLE state in case a non-fatal error is received\n if (this.state !== State.ERROR) {\n // if fatal error, stop processing, otherwise move to IDLE to retry loading\n this.state = data.fatal ? State.ERROR : State.IDLE;\n _logger.logger.warn('mediaController: ' + data.details + ' while loading frag,switch to ' + this.state + ' state ...');\n }\n break;\n case _errors.ErrorDetails.BUFFER_FULL_ERROR:\n // if in appending state\n if (this.state === State.PARSING || this.state === State.PARSED) {\n var media = this.media,\n\n // 0.5 : tolerance needed as some browsers stalls playback before reaching buffered end\n mediaBuffered = media && _bufferHelper2.default.isBuffered(media, media.currentTime) && _bufferHelper2.default.isBuffered(media, media.currentTime + 0.5);\n // reduce max buf len if current position is buffered\n if (mediaBuffered) {\n this._reduceMaxBufferLength(this.config.maxBufferLength);\n this.state = State.IDLE;\n } else {\n // current position is not buffered, but browser is still complaining about buffer full error\n // this happens on IE/Edge, refer to https://github.com/video-dev/hls.js/pull/708\n // in that case flush the whole buffer to recover\n _logger.logger.warn('buffer full error also media.currentTime is not buffered, flush everything');\n this.fragCurrent = null;\n // flush everything\n this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n }\n }\n break;\n default:\n break;\n }\n }\n }, {\n key: '_reduceMaxBufferLength',\n value: function _reduceMaxBufferLength(minLength) {\n var config = this.config;\n if (config.maxMaxBufferLength >= minLength) {\n // reduce max buffer length as it might be too high. we do this to avoid loop flushing ...\n config.maxMaxBufferLength /= 2;\n _logger.logger.warn('reduce max buffer length to ' + config.maxMaxBufferLength + 's');\n // increase fragment load Index to avoid frag loop loading error after buffer flush\n this.fragLoadIdx += 2 * config.fragLoadingLoopThreshold;\n }\n }\n }, {\n key: '_checkBuffer',\n value: function _checkBuffer(appended) {\n var media = this.media;\n if (media && media.readyState) {\n var currentTime;\n currentTime = media.currentTime;\n // adjust currentTime to start position on loaded metadata\n if (!this.loadedmetadata && media.buffered.length && appended) {\n if (this.seekDuringFirst) {\n this.seekDuringFirst = null;\n return;\n }\n this.loadedmetadata = true;\n // only adjust currentTime if different from startPosition or if startPosition not buffered\n // at that stage, there should be only one buffered range, as we reach that code after first fragment has been buffered\n var startPosition = this.startPosition,\n startPositionBuffered = _bufferHelper2.default.isBuffered(media, startPosition);\n if (currentTime !== this.startPosition || !startPositionBuffered) {\n _logger.logger.log('target start position:' + startPosition);\n // if startPosition not buffered, let's seek to buffered.start(0)\n if (!startPositionBuffered) {\n // XXX pavelki: fix case when we asked to seek during the first\n // segment loading\n for (var i = 0; i < media.buffered.length; i++) {\n if (media.buffered.start(i) > startPosition) {\n startPosition = media.buffered.start(i);\n break;\n }\n }\n if (i === media.buffered.length) {\n i = 0;\n startPosition = media.buffered.start(i);\n }\n startPosition += 0.001;\n _logger.logger.log('target start position not buffered, seek to buffered.start(' + i + ') ' + startPosition);\n }\n _logger.logger.log('adjust currentTime from ' + currentTime + ' to ' + startPosition);\n media.currentTime = startPosition;\n }\n } else {\n var hls = this.hls;\n var bufferInfo = _bufferHelper2.default.bufferInfo(media, currentTime, 0),\n expectedPlaying = !(media.paused || // not playing when media is paused\n media.ended || // not playing when media is ended\n media.buffered.length === 0),\n // not playing if nothing buffered\n jumpThreshold = 0.5,\n // tolerance needed as some browsers stalls playback before reaching buffered range end\n playheadMoving = currentTime !== this.lastCurrentTime,\n config = this.config;\n\n if (playheadMoving) {\n // played moving, but was previously stalled => now not stuck anymore\n if (this.stallReported) {\n var dur = Math.round(performance.now() - this.stalled);\n _logger.logger.warn('playback not stuck anymore @' + currentTime + ', after ' + dur + 'ms');\n hls.trigger(_events2.default.BUF_STATISTICS, { bufNotStalled: { ts: currentTime, dur: dur, lowBuf: this.stallLowBuf } });\n this.stallLowBuf = this.stallReported = false;\n }\n this.stalled = undefined;\n this.nudgeRetry = 0;\n } else {\n // playhead not moving\n if (expectedPlaying) {\n // playhead not moving BUT media expected to play\n var tnow = performance.now();\n if (!this.stalled) {\n // stall just detected, store current time\n this.stalled = tnow;\n this.stallLowBuf = this.stallReported = false;\n } else {\n // playback already stalled, check stalling duration\n // if stalling for more than a given threshold, let's try to recover\n var stalledDuration = tnow - this.stalled;\n var bufferLen = bufferInfo.len;\n var nudgeRetry = this.nudgeRetry || 0;\n // have we reached stall deadline ?\n if (bufferLen <= jumpThreshold && stalledDuration > config.lowBufferWatchdogPeriod * 1000) {\n // report stalled error once\n if (!this.stallReported) {\n this.stallReported = true;\n this.stallLowBuf = true;\n _logger.logger.warn('playback stalling in low buffer @' + currentTime);\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_STALLED_ERROR, fatal: false, buffer: bufferLen });\n hls.trigger(_events2.default.BUF_STATISTICS, { bufStalledLow: { ts: currentTime } });\n }\n // if buffer len is below threshold, try to jump to start of next buffer range if close\n // no buffer available @ currentTime, check if next buffer is close (within a config.maxSeekHole second range)\n var nextBufferStart = bufferInfo.nextStart,\n delta = nextBufferStart - currentTime;\n if (nextBufferStart && delta < config.maxSeekHole && delta > 0) {\n this.nudgeRetry = ++nudgeRetry;\n var nudgeOffset = nudgeRetry * config.nudgeOffset;\n // next buffer is close ! adjust currentTime to nextBufferStart\n // this will ensure effective video decoding\n _logger.logger.log('adjust currentTime from ' + media.currentTime + ' to next buffered @ ' + nextBufferStart + ' + nudge ' + nudgeOffset);\n media.currentTime = nextBufferStart + nudgeOffset;\n // reset stalled so to rearm watchdog timer\n this.stalled = undefined;\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_SEEK_OVER_HOLE, fatal: false, hole: nextBufferStart + nudgeOffset - currentTime });\n hls.trigger(_events2.default.BUF_STATISTICS, { bufSeekOverHole: { ts: currentTime } });\n }\n } else if (bufferLen > jumpThreshold && stalledDuration > config.highBufferWatchdogPeriod * 1000) {\n if (this.stallReported && this.stallLowBuf) {\n // reset stalled so to rearm watchdog timer\n this.stalled = undefined;\n } else {\n // report stalled error once\n if (!this.stallReported) {\n this.stallReported = true;\n _logger.logger.warn('playback stalling in high buffer @' + currentTime);\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_STALLED_ERROR, fatal: false, buffer: bufferLen });\n hls.trigger(_events2.default.BUF_STATISTICS, { bufStalledHigh: { ts: currentTime } });\n }\n // reset stalled so to rearm watchdog timer\n this.stalled = undefined;\n this.nudgeRetry = ++nudgeRetry;\n if (nudgeRetry < config.nudgeMaxRetry) {\n var _currentTime = media.currentTime;\n var targetTime = _currentTime + nudgeRetry * config.nudgeOffset;\n _logger.logger.log('adjust currentTime from ' + _currentTime + ' to ' + targetTime);\n // playback stalled in buffered area ... let's nudge currentTime to try to overcome this\n media.currentTime = targetTime;\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_NUDGE_ON_STALL, fatal: false });\n hls.trigger(_events2.default.BUF_STATISTICS, { bufNudge: { ts: _currentTime } });\n } else {\n _logger.logger.error('still stuck in high buffer @' + currentTime + ' after ' + config.nudgeMaxRetry + ', raise fatal error');\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_STALLED_ERROR, fatal: true });\n }\n }\n }\n }\n } else {\n this.stalled = undefined;\n this.nudgeRetry = 0;\n }\n }\n }\n }\n }\n }, {\n key: 'onFragLoadEmergencyAborted',\n value: function onFragLoadEmergencyAborted() {\n this.state = State.IDLE;\n this.tick();\n }\n }, {\n key: 'onBufferFlushed',\n value: function onBufferFlushed() {\n var _this4 = this;\n\n // after successful buffer flushing, filter flushed fragments from bufferRange\n this.bufferRange = this.bufferRange.filter(function (range) {\n return _bufferHelper2.default.isBuffered(_this4.media, (range.start + range.end) / 2);\n });\n\n // handle end of immediate switching if needed\n if (this.immediateSwitch) {\n this.immediateLevelSwitchEnd();\n }\n // move to IDLE once flush complete. this should trigger new fragment loading\n this.state = State.IDLE;\n // reset reference to frag\n this.fragPrevious = null;\n }\n }, {\n key: 'onLevelPtsUpdated',\n value: function onLevelPtsUpdated(lu) {\n var oldDetails = this.levels && this.levels[lu.level].details;\n if (!oldDetails || oldDetails.live) {\n return;\n }\n for (var level = 0; level < this.levels.length; level++) {\n var newDetails = this.levels[level].details;\n if (level !== lu.level && newDetails && oldDetails.fragments.length === newDetails.fragments.length) {\n _levelHelper2.default.mergeDetails(oldDetails, newDetails);\n }\n }\n }\n }, {\n key: 'swapAudioCodec',\n value: function swapAudioCodec() {\n this.audioCodecSwap = !this.audioCodecSwap;\n }\n }, {\n key: 'timeRangesToString',\n value: function timeRangesToString(r) {\n if (!r) {\n return '[]';\n }\n var log = '',\n len = r.length;\n for (var i = 0; i < len; i++) {\n log += '[' + r.start(i) + ',' + r.end(i) + ']';\n }\n return log;\n }\n }, {\n key: 'computeLivePosition',\n value: function computeLivePosition(sliding, levelDetails) {\n var targetLatency = this.config.liveSyncDuration !== undefined ? this.config.liveSyncDuration : this.config.liveSyncDurationCount * levelDetails.targetduration;\n return sliding + Math.max(0, levelDetails.totalduration - targetLatency);\n }\n }, {\n key: 'state',\n set: function set(nextState) {\n if (this.state !== nextState) {\n var previousState = this.state;\n this._state = nextState;\n _logger.logger.log('engine state transition from ' + previousState + ' to ' + nextState);\n if (nextState === 'IDLE') {\n var media = this.media || {};\n _logger.logger.log('media ' + media + ' ct=' + media.currentTime + ' dur=' + media.duration + ' buf=' + this.timeRangesToString(media.buffered) + ' err=' + media.error);\n }\n this.hls.trigger(_events2.default.STREAM_STATE_TRANSITION, { previousState: previousState, nextState: nextState });\n }\n },\n get: function get() {\n return this._state;\n }\n }, {\n key: 'currentLevel',\n get: function get() {\n if (this.media) {\n var range = this.getBufferRange(this.media.currentTime);\n if (range) {\n return range.frag.level;\n }\n }\n return -1;\n }\n }, {\n key: 'nextBufferRange',\n get: function get() {\n if (this.media) {\n // first get end range of current fragment\n return this.followingBufferRange(this.getBufferRange(this.media.currentTime));\n } else {\n return null;\n }\n }\n }, {\n key: 'nextLevel',\n get: function get() {\n var range = this.nextBufferRange;\n if (range) {\n return range.frag.level;\n } else {\n return -1;\n }\n }\n }]);\n\n return StreamController;\n}(_eventHandler2.default);\n\nexports.default = StreamController;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _cea608Parser = require('../utils/cea-608-parser');\n\nvar _cea608Parser2 = _interopRequireDefault(_cea608Parser);\n\nvar _cues = require('../utils/cues');\n\nvar _cues2 = _interopRequireDefault(_cues);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Timeline Controller\n */\n\nvar TimelineController = function (_EventHandler) {\n _inherits(TimelineController, _EventHandler);\n\n function TimelineController(hls) {\n _classCallCheck(this, TimelineController);\n\n var _this = _possibleConstructorReturn(this, (TimelineController.__proto__ || Object.getPrototypeOf(TimelineController)).call(this, hls, _events2.default.MEDIA_ATTACHING, _events2.default.MEDIA_DETACHING, _events2.default.FRAG_PARSING_USERDATA, _events2.default.MANIFEST_LOADING, _events2.default.FRAG_LOADED, _events2.default.LEVEL_SWITCH));\n\n _this.hls = hls;\n _this.config = hls.config;\n _this.enabled = true;\n\n if (_this.config.enableCEA708Captions) {\n var self = _this;\n\n var channel1 = {\n 'newCue': function newCue(startTime, endTime, screen) {\n if (!self.textTrack1) {\n self.textTrack1 = self.createTextTrack('captions', 'Unknown CC1', 'en');\n // self.textTrack1.mode = 'showing';\n }\n\n _cues2.default.newCue(self.textTrack1, startTime, endTime, screen);\n }\n };\n\n var channel2 = {\n 'newCue': function newCue(startTime, endTime, screen) {\n if (!self.textTrack2) {\n self.textTrack2 = self.createTextTrack('captions', 'Unknown CC2', 'es');\n }\n\n _cues2.default.newCue(self.textTrack2, startTime, endTime, screen);\n }\n };\n\n _this.cea608Parser = new _cea608Parser2.default(0, channel1, channel2);\n }\n return _this;\n }\n\n _createClass(TimelineController, [{\n key: 'clearCurrentCues',\n value: function clearCurrentCues(track, pts) {\n if (!track || !track.cues) {\n return;\n }\n for (var i = track.cues.length - 1; track.cues[i].startTime >= pts && i > -1; i--) {\n track.removeCue(track.cues[i]);\n }\n }\n }, {\n key: 'createTextTrack',\n value: function createTextTrack(kind, label, lang) {\n if (this.media) {\n return this.media.addTextTrack(kind, label, lang);\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n _eventHandler2.default.prototype.destroy.call(this);\n }\n }, {\n key: 'onMediaAttaching',\n value: function onMediaAttaching(data) {\n this.media = data.media;\n }\n }, {\n key: 'onMediaDetaching',\n value: function onMediaDetaching() {}\n }, {\n key: 'onManifestLoading',\n value: function onManifestLoading() {\n this.lastPts = Number.NEGATIVE_INFINITY;\n }\n }, {\n key: 'onLevelSwitch',\n value: function onLevelSwitch() {\n if (this.hls.currentLevel.closedCaptions === 'NONE') {\n this.enabled = false;\n } else {\n this.enabled = true;\n }\n }\n }, {\n key: 'onFragLoaded',\n value: function onFragLoaded(data) {\n var pts = data.frag.start;\n\n // if this is a frag for a previously loaded timerange, remove all captions\n // TODO: consider just removing captions for the timerange\n if (pts < this.lastPts) {\n this.clearCurrentCues(this.textTrack1, pts);\n this.clearCurrentCues(this.textTrack2, pts);\n }\n\n this.lastPts = pts;\n }\n }, {\n key: 'onFragParsingUserdata',\n value: function onFragParsingUserdata(data) {\n // push all of the CEA-708 messages into the interpreter\n // immediately. It will create the proper timestamps based on our PTS value\n if (this.enabled) {\n for (var i = 0; i < data.samples.length; i++) {\n var ccdatas = this.extractCea608Data(data.samples[i].bytes);\n this.cea608Parser.addData(data.samples[i].pts, ccdatas);\n }\n }\n }\n }, {\n key: 'extractCea608Data',\n value: function extractCea608Data(byteArray) {\n var count = byteArray[0] & 31;\n var position = 2;\n var tmpByte, ccbyte1, ccbyte2, ccValid, ccType;\n var actualCCBytes = [];\n\n for (var j = 0; j < count; j++) {\n tmpByte = byteArray[position++];\n ccbyte1 = 0x7F & byteArray[position++];\n ccbyte2 = 0x7F & byteArray[position++];\n ccValid = (4 & tmpByte) === 0 ? false : true;\n ccType = 3 & tmpByte;\n\n if (ccbyte1 === 0 && ccbyte2 === 0) {\n continue;\n }\n\n if (ccValid) {\n if (ccType === 0) // || ccType === 1\n {\n actualCCBytes.push(ccbyte1);\n actualCCBytes.push(ccbyte2);\n }\n }\n }\n return actualCCBytes;\n }\n }]);\n\n return TimelineController;\n}(_eventHandler2.default);\n\nexports.default = TimelineController;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*\n *\n * This file contains an adaptation of the AES decryption algorithm\n * from the Standford Javascript Cryptography Library. That work is\n * covered by the following copyright and permissions notice:\n *\n * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\nvar AES = function () {\n\n /**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @constructor\n * @param key {Array} The key as an array of 4, 6 or 8 words.\n */\n function AES(key) {\n _classCallCheck(this, AES);\n\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n this._tables = [[[], [], [], [], []], [[], [], [], [], []]];\n\n this._precompute();\n\n var i,\n j,\n tmp,\n encKey,\n decKey,\n sbox = this._tables[0][4],\n decTable = this._tables[1],\n keyLen = key.length,\n rcon = 1;\n\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new Error('Invalid aes key size=' + keyLen);\n }\n\n encKey = key.slice(0);\n decKey = [];\n this._key = [encKey, decKey];\n\n // schedule encryption keys\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i - 1];\n\n // apply sbox\n if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255];\n\n // shift rows and add rcon\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n\n encKey[i] = encKey[i - keyLen] ^ tmp;\n }\n\n // schedule decryption keys\n for (j = 0; i; j++, i--) {\n tmp = encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]];\n }\n }\n }\n\n /**\n * Expand the S-box tables.\n *\n * @private\n */\n\n\n _createClass(AES, [{\n key: '_precompute',\n value: function _precompute() {\n var encTable = this._tables[0],\n decTable = this._tables[1],\n sbox = encTable[4],\n sboxInv = decTable[4],\n i,\n x,\n xInv,\n d = [],\n th = [],\n x2,\n x4,\n x8,\n s,\n tEnc,\n tDec;\n\n // Compute double and third tables\n for (i = 0; i < 256; i++) {\n th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n }\n\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x;\n\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n }\n }\n\n // Compactify. Considerable speedup on Firefox.\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n }\n\n /**\n * Decrypt 16 bytes, specified as four 32-bit words.\n * @param encrypted0 {number} the first word to decrypt\n * @param encrypted1 {number} the second word to decrypt\n * @param encrypted2 {number} the third word to decrypt\n * @param encrypted3 {number} the fourth word to decrypt\n * @param out {Int32Array} the array to write the decrypted words\n * into\n * @param offset {number} the offset into the output array to start\n * writing results\n * @return {Array} The plaintext.\n */\n\n }, {\n key: 'decrypt',\n value: function decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) {\n var key = this._key[1],\n\n // state variables a,b,c,d are loaded with pre-whitened data\n a = encrypted0 ^ key[0],\n b = encrypted3 ^ key[1],\n c = encrypted2 ^ key[2],\n d = encrypted1 ^ key[3],\n a2,\n b2,\n c2,\n nInnerRounds = key.length / 4 - 2,\n // key.length === 2 ?\n i,\n kIndex = 4,\n table = this._tables[1],\n\n\n // load up the tables\n table0 = table[0],\n table1 = table[1],\n table2 = table[2],\n table3 = table[3],\n sbox = table[4];\n\n // Inner rounds. Cribbed from OpenSSL.\n for (i = 0; i < nInnerRounds; i++) {\n a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex];\n b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1];\n c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2];\n d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a = a2;b = b2;c = c2;\n }\n\n // Last round.\n for (i = 0; i < 4; i++) {\n out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];\n a2 = a;a = b;b = c;c = d;d = a2;\n }\n }\n }]);\n\n return AES;\n}();\n\nexports.default = AES;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /*\n *\n * This file contains an adaptation of the AES decryption algorithm\n * from the Standford Javascript Cryptography Library. That work is\n * covered by the following copyright and permissions notice:\n *\n * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\n\nvar _aes = require('./aes');\n\nvar _aes2 = _interopRequireDefault(_aes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar AES128Decrypter = function () {\n function AES128Decrypter(key, initVector) {\n _classCallCheck(this, AES128Decrypter);\n\n this.key = key;\n this.iv = new Uint32Array(initVector);\n }\n\n /**\n * Convert network-order (big-endian) bytes into their little-endian\n * representation.\n */\n\n\n _createClass(AES128Decrypter, [{\n key: 'ntoh',\n value: function ntoh(word) {\n return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n }\n\n /**\n * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.\n * @param encrypted {Uint8Array} the encrypted bytes\n * @param key {Uint32Array} the bytes of the decryption key\n * @param initVector {Uint32Array} the initialization vector (IV) to\n * use for the first round of CBC.\n * @return {Uint8Array} the decrypted bytes\n *\n * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\n * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29\n * @see https://tools.ietf.org/html/rfc2315\n */\n\n }, {\n key: 'doDecrypt',\n value: function doDecrypt(encrypted, key, initVector) {\n var\n // word-level access to the encrypted bytes\n encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2),\n decipher = new _aes2.default(Array.prototype.slice.call(key)),\n\n\n // byte and word-level access for the decrypted output\n decrypted = new Uint8Array(encrypted.byteLength),\n decrypted32 = new Int32Array(decrypted.buffer),\n\n\n // temporary variables for working with the IV, encrypted, and\n // decrypted data\n init0,\n init1,\n init2,\n init3,\n encrypted0,\n encrypted1,\n encrypted2,\n encrypted3,\n\n\n // iteration variable\n wordIx;\n\n // pull out the words of the IV to ensure we don't modify the\n // passed-in reference and easier access\n init0 = ~~initVector[0];\n init1 = ~~initVector[1];\n init2 = ~~initVector[2];\n init3 = ~~initVector[3];\n\n // decrypt four word sequences, applying cipher-block chaining (CBC)\n // to each decrypted block\n for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) {\n // convert big-endian (network order) words into little-endian\n // (javascript order)\n encrypted0 = ~~this.ntoh(encrypted32[wordIx]);\n encrypted1 = ~~this.ntoh(encrypted32[wordIx + 1]);\n encrypted2 = ~~this.ntoh(encrypted32[wordIx + 2]);\n encrypted3 = ~~this.ntoh(encrypted32[wordIx + 3]);\n\n // decrypt the block\n decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx);\n\n // XOR with the IV, and restore network byte-order to obtain the\n // plaintext\n decrypted32[wordIx] = this.ntoh(decrypted32[wordIx] ^ init0);\n decrypted32[wordIx + 1] = this.ntoh(decrypted32[wordIx + 1] ^ init1);\n decrypted32[wordIx + 2] = this.ntoh(decrypted32[wordIx + 2] ^ init2);\n decrypted32[wordIx + 3] = this.ntoh(decrypted32[wordIx + 3] ^ init3);\n\n // setup the IV for the next round\n init0 = encrypted0;\n init1 = encrypted1;\n init2 = encrypted2;\n init3 = encrypted3;\n }\n\n return decrypted;\n }\n }, {\n key: 'localDecrypt',\n value: function localDecrypt(encrypted, key, initVector, decrypted) {\n var bytes = this.doDecrypt(encrypted, key, initVector);\n decrypted.set(bytes, encrypted.byteOffset);\n }\n }, {\n key: 'decrypt',\n value: function decrypt(encrypted) {\n var step = 4 * 8000,\n\n //encrypted32 = new Int32Array(encrypted.buffer),\n encrypted32 = new Int32Array(encrypted),\n decrypted = new Uint8Array(encrypted.byteLength),\n i = 0;\n\n // split up the encryption job and do the individual chunks asynchronously\n var key = this.key;\n var initVector = this.iv;\n this.localDecrypt(encrypted32.subarray(i, i + step), key, initVector, decrypted);\n\n for (i = step; i < encrypted32.length; i += step) {\n initVector = new Uint32Array([this.ntoh(encrypted32[i - 4]), this.ntoh(encrypted32[i - 3]), this.ntoh(encrypted32[i - 2]), this.ntoh(encrypted32[i - 1])]);\n this.localDecrypt(encrypted32.subarray(i, i + step), key, initVector, decrypted);\n }\n\n return decrypted;\n }\n }]);\n\n return AES128Decrypter;\n}();\n\nexports.default = AES128Decrypter;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /*\n * AES128 decryption.\n */\n\nvar _aes128Decrypter = require('./aes128-decrypter');\n\nvar _aes128Decrypter2 = _interopRequireDefault(_aes128Decrypter);\n\nvar _errors = require('../errors');\n\nvar _logger = require('../utils/logger');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Decrypter = function () {\n function Decrypter(hls) {\n _classCallCheck(this, Decrypter);\n\n this.hls = hls;\n this.iv = null;\n try {\n var browserCrypto = window ? window.crypto : crypto;\n this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n this.disableWebCrypto = !this.subtle;\n } catch (e) {\n this.disableWebCrypto = true;\n }\n }\n\n _createClass(Decrypter, [{\n key: 'destroy',\n value: function destroy() {}\n }, {\n key: 'decrypt',\n value: function decrypt(data, key, iv, callback) {\n if (this.disableWebCrypto && this.hls.config.enableSoftwareAES) {\n this.decryptBySoftware(data, key, iv, callback);\n } else {\n this.decryptByWebCrypto(data, key, iv, callback);\n }\n }\n }, {\n key: 'decryptByWebCrypto',\n value: function decryptByWebCrypto(data, key, iv, callback) {\n var _this = this;\n\n _logger.logger.log('decrypting by WebCrypto API');\n\n this.subtle.importKey('raw', key, { name: 'AES-CBC', length: 128 }, false, ['decrypt']).then(function (importedKey) {\n _this.subtle.decrypt({ name: 'AES-CBC', iv: iv.buffer }, importedKey, data).then(callback).catch(function (err) {\n _this.onWebCryptoError(err, data, key, iv, callback);\n });\n }).catch(function (err) {\n _this.onWebCryptoError(err, data, key, iv, callback);\n });\n }\n }, {\n key: 'decryptBySoftware',\n value: function decryptBySoftware(data, key8, iv8, callback) {\n _logger.logger.log('decrypting by JavaScript Implementation');\n\n var view = new DataView(key8.buffer);\n var key = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]);\n\n if (iv8) {\n view = new DataView(iv8.buffer);\n this.iv = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]);\n }\n var decrypter = new _aes128Decrypter2.default(key, this.iv);\n var ivview = new DataView(data),\n len = data.byteLength;\n // save initvector for the next chunk\n this.iv = new Uint32Array([ivview.getUint32(len - 16), ivview.getUint32(len - 12), ivview.getUint32(len - 8), ivview.getUint32(len - 4)]);\n callback(decrypter.decrypt(data).buffer);\n }\n }, {\n key: 'onWebCryptoError',\n value: function onWebCryptoError(err, data, key, iv, callback) {\n if (this.hls.config.enableSoftwareAES) {\n _logger.logger.log('disabling to use WebCrypto API');\n this.disableWebCrypto = true;\n this.decryptBySoftware(data, key, iv, callback);\n } else {\n _logger.logger.error('decrypting error : ' + err.message);\n this.hls.trigger(Event.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.FRAG_DECRYPT_ERROR, fatal: true, reason: err.message });\n }\n }\n }]);\n\n return Decrypter;\n}();\n\nexports.default = Decrypter;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * AAC demuxer\n */\n\n\nvar _adts = require('./adts');\n\nvar _adts2 = _interopRequireDefault(_adts);\n\nvar _logger = require('../utils/logger');\n\nvar _id = require('../demux/id3');\n\nvar _id2 = _interopRequireDefault(_id);\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar AACDemuxer = function () {\n function AACDemuxer(observer, remuxerClass, config, typeSupported) {\n _classCallCheck(this, AACDemuxer);\n\n this.observer = observer;\n this.remuxerClass = remuxerClass;\n this.config = config;\n this.remuxer = new this.remuxerClass(observer, config, typeSupported);\n this._aacTrack = { container: 'audio/adts', type: 'audio', id: -1, sequenceNumber: 0, isAAC: true, samples: [], len: 0 };\n }\n\n _createClass(AACDemuxer, [{\n key: 'push',\n\n\n // feed incoming data to the front of the parsing pipeline\n value: function push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration, accurate, first, final) {\n var track = this._aacTrack,\n id3 = new _id2.default(data),\n pts = 90 * id3.timeStamp,\n config,\n frameLength,\n frameDuration,\n frameIndex,\n offset,\n headerLength,\n stamp,\n len,\n aacSample,\n startPTS,\n endPTS;\n // look for ADTS header (0xFFFx)\n for (offset = id3.length, len = data.length; offset < len - 1; offset++) {\n if (data[offset] === 0xff && (data[offset + 1] & 0xf0) === 0xf0) {\n break;\n }\n }\n\n if (first) {\n this.fragStats = { keyFrames: 0, dropped: 0, segment: sn, level: level, notFirstKeyframe: 0 };\n }\n\n if (!track.audiosamplerate) {\n config = _adts2.default.getAudioConfig(this.observer, data, offset, audioCodec, this.config);\n track.config = config.config;\n track.audiosamplerate = config.samplerate;\n track.channelCount = config.channelCount;\n track.codec = config.codec;\n track.duration = duration;\n _logger.logger.log('parsed codec:' + track.codec + ',rate:' + config.samplerate + ',nb channel:' + config.channelCount);\n }\n frameIndex = 0;\n frameDuration = 1024 * 90000 / track.audiosamplerate;\n while (offset + 5 < len) {\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n headerLength = !!(data[offset + 1] & 0x01) ? 7 : 9;\n // retrieve frame size\n frameLength = (data[offset + 3] & 0x03) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 0xE0) >>> 5;\n frameLength -= headerLength;\n //stamp = pes.pts;\n\n if (frameLength > 0 && offset + headerLength + frameLength <= len) {\n stamp = pts + frameIndex * frameDuration;\n //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n aacSample = { unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp };\n track.samples.push(aacSample);\n track.len += frameLength;\n offset += frameLength + headerLength;\n frameIndex++;\n // look for ADTS header (0xFFFx)\n for (; offset < len - 1; offset++) {\n if (data[offset] === 0xff && (data[offset + 1] & 0xf0) === 0xf0) {\n break;\n }\n }\n } else {\n break;\n }\n }\n if (track.samples.length && final) {\n var timescale = this.remuxer.PES_TIMESCALE;\n var initDTS = this.remuxer._initDTS === undefined ? track.samples[0].dts - timescale * timeOffset : this.remuxer._initDTS;\n var nextAvcDts = timeOffset * timescale;\n startPTS = this.remuxer._PTSNormalize(track.samples[0].pts - initDTS, nextAvcDts) / timescale;\n endPTS = this.remuxer._PTSNormalize(track.samples[track.samples.length - 1].pts + frameDuration - initDTS, nextAvcDts) / timescale;\n }\n this.remuxer.remux(this._aacTrack, { samples: [] }, { samples: [{ pts: pts, dts: pts, unit: id3.payload }] }, { samples: [] }, timeOffset, undefined, undefined, undefined, undefined, this.fragStats);\n if (final) {\n this.observer.trigger(_events2.default.FRAG_PARSED, { startPTS: startPTS, endPTS: endPTS });\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {}\n }], [{\n key: 'probe',\n value: function probe(data) {\n // check if data contains ID3 timestamp and ADTS sync worc\n var id3 = new _id2.default(data),\n offset,\n len;\n if (id3.hasTimeStamp) {\n // look for ADTS header (0xFFFx)\n for (offset = id3.length, len = data.length; offset < len - 1; offset++) {\n if (data[offset] === 0xff && (data[offset + 1] & 0xf0) === 0xf0) {\n //logger.log('ADTS sync word found !');\n return true;\n }\n }\n }\n return false;\n }\n }]);\n\n return AACDemuxer;\n}();\n\nexports.default = AACDemuxer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * ADTS parser helper\n */\n\n\nvar _logger = require('../utils/logger');\n\nvar _errors = require('../errors');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ADTS = function () {\n function ADTS() {\n _classCallCheck(this, ADTS);\n }\n\n _createClass(ADTS, null, [{\n key: 'getAudioConfig',\n value: function getAudioConfig(observer, data, offset, audioCodec, hlsConfig) {\n var adtsObjectType,\n // :int\n adtsSampleingIndex,\n // :int\n adtsExtensionSampleingIndex,\n // :int\n adtsChanelConfig,\n // :int\n config,\n browser = hlsConfig.browser,\n adtsSampleingRates = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n // byte 2\n adtsObjectType = ((data[offset + 2] & 0xC0) >>> 6) + 1;\n adtsSampleingIndex = (data[offset + 2] & 0x3C) >>> 2;\n if (adtsSampleingIndex > adtsSampleingRates.length - 1) {\n observer.trigger(Event.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.FRAG_PARSING_ERROR, fatal: true, reason: 'invalid ADTS sampling index:' + adtsSampleingIndex });\n return;\n }\n adtsChanelConfig = (data[offset + 2] & 0x01) << 2;\n // byte 3\n adtsChanelConfig |= (data[offset + 3] & 0xC0) >>> 6;\n _logger.logger.log('manifest codec:' + audioCodec + ',ADTS data:type:' + adtsObjectType + ',sampleingIndex:' + adtsSampleingIndex + '[' + adtsSampleingRates[adtsSampleingIndex] + 'Hz],channelConfig:' + adtsChanelConfig);\n // firefox: freq less than 24kHz = AAC SBR (HE-AAC)\n if (browser.isFirefox) {\n if (adtsSampleingIndex >= 6) {\n adtsObjectType = 5;\n config = new Array(4);\n // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n // there is a factor 2 between frame sample rate and output sample rate\n // multiply frequency by 2 (see table below, equivalent to substract 3)\n adtsExtensionSampleingIndex = adtsSampleingIndex - 3;\n } else {\n adtsObjectType = 2;\n config = new Array(2);\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n }\n // Android : always use AAC\n } else if (browser.isAndroid) {\n adtsObjectType = 2;\n config = new Array(2);\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n } else {\n /* for other browsers (chrome ...)\n always force audio type to be HE-AAC SBR, as some browsers do not support audio codec switch properly (like Chrome ...)\n */\n adtsObjectType = 5;\n config = new Array(4);\n // if (manifest codec is HE-AAC or HE-AACv2) OR (manifest codec not specified AND frequency less than 24kHz)\n if (audioCodec && (audioCodec.indexOf('mp4a.40.29') !== -1 || audioCodec.indexOf('mp4a.40.5') !== -1) || !audioCodec && adtsSampleingIndex >= 6) {\n // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n // there is a factor 2 between frame sample rate and output sample rate\n // multiply frequency by 2 (see table below, equivalent to substract 3)\n adtsExtensionSampleingIndex = adtsSampleingIndex - 3;\n } else {\n // if (manifest codec is AAC) AND (frequency less than 24kHz AND nb channel is 1) OR (manifest codec not specified and mono audio)\n // Chrome fails to play back with low frequency AAC LC mono when initialized with HE-AAC. This is not a problem with stereo.\n if (audioCodec && audioCodec.indexOf('mp4a.40.2') !== -1 && adtsSampleingIndex >= 6 && adtsChanelConfig === 1 || !audioCodec && adtsChanelConfig === 1) {\n adtsObjectType = 2;\n config = new Array(2);\n }\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n }\n }\n /* refer to http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config\n ISO 14496-3 (AAC).pdf - Table 1.13 — Syntax of AudioSpecificConfig()\n Audio Profile / Audio Object Type\n 0: Null\n 1: AAC Main\n 2: AAC LC (Low Complexity)\n 3: AAC SSR (Scalable Sample Rate)\n 4: AAC LTP (Long Term Prediction)\n 5: SBR (Spectral Band Replication)\n 6: AAC Scalable\n sampling freq\n 0: 96000 Hz\n 1: 88200 Hz\n 2: 64000 Hz\n 3: 48000 Hz\n 4: 44100 Hz\n 5: 32000 Hz\n 6: 24000 Hz\n 7: 22050 Hz\n 8: 16000 Hz\n 9: 12000 Hz\n 10: 11025 Hz\n 11: 8000 Hz\n 12: 7350 Hz\n 13: Reserved\n 14: Reserved\n 15: frequency is written explictly\n Channel Configurations\n These are the channel configurations:\n 0: Defined in AOT Specifc Config\n 1: 1 channel: front-center\n 2: 2 channels: front-left, front-right\n */\n // audioObjectType = profile => profile, the MPEG-4 Audio Object Type minus 1\n config[0] = adtsObjectType << 3;\n // samplingFrequencyIndex\n config[0] |= (adtsSampleingIndex & 0x0E) >> 1;\n config[1] |= (adtsSampleingIndex & 0x01) << 7;\n // channelConfiguration\n config[1] |= adtsChanelConfig << 3;\n if (adtsObjectType === 5) {\n // adtsExtensionSampleingIndex\n config[1] |= (adtsExtensionSampleingIndex & 0x0E) >> 1;\n config[2] = (adtsExtensionSampleingIndex & 0x01) << 7;\n // adtsObjectType (force to 2, chrome is checking that object type is less than 5 ???\n // https://chromium.googlesource.com/chromium/src.git/+/master/media/formats/mp4/aac.cc\n config[2] |= 2 << 2;\n config[3] = 0;\n }\n return { config: config, samplerate: adtsSampleingRates[adtsSampleingIndex], channelCount: adtsChanelConfig, codec: 'mp4a.40.' + adtsObjectType };\n }\n }]);\n\n return ADTS;\n}();\n\nexports.default = ADTS;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* inline demuxer.\n * probe fragments and instantiate appropriate demuxer depending on content type (TSDemuxer, AACDemuxer, ...)\n */\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _errors = require('../errors');\n\nvar _aacdemuxer = require('../demux/aacdemuxer');\n\nvar _aacdemuxer2 = _interopRequireDefault(_aacdemuxer);\n\nvar _tsdemuxer = require('../demux/tsdemuxer');\n\nvar _tsdemuxer2 = _interopRequireDefault(_tsdemuxer);\n\nvar _mp4Remuxer = require('../remux/mp4-remuxer');\n\nvar _mp4Remuxer2 = _interopRequireDefault(_mp4Remuxer);\n\nvar _passthroughRemuxer = require('../remux/passthrough-remuxer');\n\nvar _passthroughRemuxer2 = _interopRequireDefault(_passthroughRemuxer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DemuxerInline = function () {\n function DemuxerInline(hls, typeSupported) {\n var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n _classCallCheck(this, DemuxerInline);\n\n var _this = this;\n this.hls = hls;\n this.config = this.hls.config || config;\n this.typeSupported = typeSupported;\n this.timeOffset = 0;\n this.onFragParsingData = function (ev, data) {\n if (data.type === 'video' && !data.flush) {\n // sync on video chunks\n _this.timeOffset += data.endDTS - data.startDTS;\n }\n };\n this.hls.on(_events2.default.FRAG_PARSING_DATA, this.onFragParsingData);\n }\n\n _createClass(DemuxerInline, [{\n key: 'destroy',\n value: function destroy() {\n var demuxer = this.demuxer;\n if (demuxer) {\n demuxer.destroy();\n }\n this.hls.off(_events2.default.FRAG_PARSING_DATA, this.onFragParsingData);\n }\n }, {\n key: 'push',\n value: function push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration, accurate, first, final, lastSN, keymaps, reinit) {\n var demuxer = this.demuxer;\n if (!demuxer) {\n var hls = this.hls,\n config = this.config,\n typeSupported = this.typeSupported;\n // probe for content type\n if (_tsdemuxer2.default.probe(data)) {\n if (typeSupported.mp2t === true) {\n demuxer = new _tsdemuxer2.default(hls, _passthroughRemuxer2.default, config, typeSupported);\n } else {\n demuxer = new _tsdemuxer2.default(hls, _mp4Remuxer2.default, config, typeSupported);\n }\n } else if (_aacdemuxer2.default.probe(data)) {\n demuxer = new _aacdemuxer2.default(hls, _mp4Remuxer2.default, config, typeSupported);\n } else {\n var i = void 0,\n len = data.length,\n info = 'len:' + len + ' [';\n for (i = 0, len = Math.min(len, 10); i < len; i++) {\n if (i) {\n info += ',';\n }\n info += data[i];\n }\n info += '..]';\n if (data.length >= 3 * 188) {\n info += ' [0]==' + data[0] + ' [188]==' + data[188] + ' [2*188]==' + data[2 * 188];\n }\n\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.FRAG_PARSING_ERROR, fatal: true,\n reason: 'no demux matching with content found ' + info });\n return;\n }\n this.demuxer = demuxer;\n }\n if (first) {\n this.timeOffset = timeOffset;\n }\n demuxer.push(data, audioCodec, videoCodec, this.timeOffset, cc, level, sn, duration, accurate, first, final, lastSN, keymaps, reinit);\n }\n }]);\n\n return DemuxerInline;\n}();\n\nexports.default = DemuxerInline;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _demuxerInline = require('../demux/demuxer-inline');\n\nvar _demuxerInline2 = _interopRequireDefault(_demuxerInline);\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _events3 = require('events');\n\nvar _events4 = _interopRequireDefault(_events3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DemuxerWorker = function DemuxerWorker(self) {\n // observer setup\n var observer = new _events4.default();\n observer.trigger = function trigger(event) {\n for (var _len = arguments.length, data = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n data[_key - 1] = arguments[_key];\n }\n\n observer.emit.apply(observer, [event, event].concat(data));\n };\n\n observer.off = function off(event) {\n for (var _len2 = arguments.length, data = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n data[_key2 - 1] = arguments[_key2];\n }\n\n observer.removeListener.apply(observer, [event].concat(data));\n };\n self.addEventListener('message', function (ev) {\n var data = ev.data;\n // console.log('demuxer cmd:' + data.cmd);\n switch (data.cmd) {\n case 'init':\n self.demuxer = new _demuxerInline2.default(observer, data.typeSupported, JSON.parse(data.config));\n break;\n case 'demux':\n self.demuxer.push(new Uint8Array(data.data), data.audioCodec, data.videoCodec, data.timeOffset, data.cc, data.level, data.sn, data.duration, data.accurate, data.first, data.final, data.lastSN, data.keymaps, data.reinit);\n break;\n case 'empty':\n self.postMessage({ event: _events2.default.DEMUXER_QUEUE_EMPTY });\n break;\n default:\n break;\n }\n });\n\n // listen to events triggered by Demuxer\n observer.on(_events2.default.FRAG_PARSING_INIT_SEGMENT, function (ev, data) {\n self.postMessage({ event: ev, tracks: data.tracks, unique: data.unique });\n });\n\n observer.on(_events2.default.FRAG_PARSING_DATA, function (ev, data) {\n var objData = { event: ev, type: data.type, startPTS: data.startPTS, endPTS: data.endPTS, startDTS: data.startDTS, endDTS: data.endDTS, data1: data.data1.buffer, data2: data.data2.buffer, nb: data.nb, dropped: data.dropped, deltaPTS: data.deltaPTS, isPartial: data.isPartial };\n // pass data1/data2 as transferable object (no copy)\n self.postMessage(objData, [objData.data1, objData.data2]);\n });\n\n observer.on(_events2.default.FRAG_PARSED, function (event, data) {\n self.postMessage({ event: event, data: data });\n });\n\n observer.on(_events2.default.FRAG_STATISTICS, function (event, data) {\n self.postMessage({ event: event, data: data });\n });\n\n observer.on(_events2.default.ERROR, function (event, data) {\n self.postMessage({ event: event, data: data });\n });\n\n observer.on(_events2.default.FRAG_PARSING_METADATA, function (event, data) {\n var objData = { event: event, samples: data.samples };\n self.postMessage(objData);\n });\n\n observer.on(_events2.default.FRAG_PARSING_USERDATA, function (event, data) {\n var objData = { event: event, samples: data.samples };\n self.postMessage(objData);\n });\n}; /* demuxer web worker.\n * - listen to worker message, and trigger DemuxerInline upon reception of Fragments.\n * - provides MP4 Boxes back to main thread using [transferable objects](https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast) in order to minimize message passing overhead.\n */\n\nexports.default = DemuxerWorker;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _demuxerInline = require('../demux/demuxer-inline');\n\nvar _demuxerInline2 = _interopRequireDefault(_demuxerInline);\n\nvar _demuxerWorker = require('../demux/demuxer-worker');\n\nvar _demuxerWorker2 = _interopRequireDefault(_demuxerWorker);\n\nvar _logger = require('../utils/logger');\n\nvar _decrypter = require('../crypt/decrypter');\n\nvar _decrypter2 = _interopRequireDefault(_decrypter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Demuxer = function () {\n function Demuxer(hls) {\n _classCallCheck(this, Demuxer);\n\n this.hls = hls;\n this.trail = new Uint8Array(0);\n var typeSupported = {\n mp4: MediaSource.isTypeSupported('video/mp4'),\n mp2t: hls.config.enableMP2TPassThrough && MediaSource.isTypeSupported('video/mp2t'),\n mpeg: MediaSource.isTypeSupported('audio/mpeg'),\n mp3: MediaSource.isTypeSupported('audio/mp4; codecs=\"mp3\"')\n };\n if (hls.config.disableMp3) {\n typeSupported.mpeg = typeSupported.mp3 = false;\n }\n if (hls.config.enableWorker && typeof Worker !== 'undefined') {\n _logger.logger.log('demuxing in webworker');\n try {\n var work = require('webworkify');\n this.w = work(_demuxerWorker2.default);\n this.onwmsg = this.onWorkerMessage.bind(this);\n this.w.addEventListener('message', this.onwmsg);\n this.w.postMessage({ cmd: 'init', typeSupported: typeSupported, config: JSON.stringify(hls.config) });\n } catch (err) {\n _logger.logger.error('error while initializing DemuxerWorker, fallback on DemuxerInline');\n this.demuxer = new _demuxerInline2.default(hls, typeSupported);\n }\n } else {\n this.demuxer = new _demuxerInline2.default(hls, typeSupported);\n }\n this.demuxInitialized = true;\n }\n\n _createClass(Demuxer, [{\n key: 'destroy',\n value: function destroy() {\n if (this.w) {\n this.w.removeEventListener('message', this.onwmsg);\n this.w.terminate();\n this.w = null;\n } else {\n this.demuxer.destroy();\n this.demuxer = null;\n }\n if (this.decrypter) {\n this.decrypter.destroy();\n this.decrypter = null;\n }\n }\n }, {\n key: 'pushDecrypted',\n value: function pushDecrypted(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration, accurate, first, final, lastSN, reinit) {\n if (this.w) {\n // post fragment payload as transferable objects (no copy)\n this.w.postMessage({ cmd: 'demux', data: data, audioCodec: audioCodec, videoCodec: videoCodec, timeOffset: timeOffset, cc: cc, level: level, sn: sn, duration: duration, accurate: accurate, first: first, final: final, lastSN: lastSN, keymaps: data.keymaps, reinit: reinit }, [data]);\n } else {\n this.demuxer.push(new Uint8Array(data), audioCodec, videoCodec, timeOffset, cc, level, sn, duration, accurate, first, final, lastSN, data.keymaps, reinit);\n }\n }\n }, {\n key: 'push',\n value: function push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration, decryptdata, accurate, lastSN, reinit) {\n if (data.first) {\n this.trail = new Uint8Array(0);\n this.trail.first = true;\n }\n var traillen = this.trail.length;\n // 752 = 4*188. We need number of bytes to be multiplier of 16 to\n // perform chained AES decryption\n if (traillen || (data.byteLength + traillen) % 752 && !data.final) {\n var final = data.final,\n first = data.first || this.trail.first || false;\n // add trailing bytes\n var newlen = data.byteLength + traillen;\n if (!final) {\n // at final chunk we sent all pending data\n newlen -= newlen % 752;\n }\n var olddata = new Uint8Array(data);\n var newdata = new Uint8Array(newlen);\n var newtrail = new Uint8Array(data.byteLength + traillen - newlen);\n if (newlen) {\n newdata.set(this.trail);\n newdata.set(olddata.subarray(0, newlen - traillen), traillen);\n }\n if (newtrail.length) {\n if (newlen) {\n newtrail.set(olddata.subarray(-newtrail.length));\n } else {\n newtrail.set(this.trail);\n newtrail.set(olddata, traillen);\n newtrail.first = first;\n }\n }\n olddata = null;\n this.trail = newtrail;\n if (!newdata.length) {\n return;\n }\n data = newdata.buffer;\n data.final = final;\n data.first = first;\n newdata = null;\n }\n if (data.byteLength > 0 && decryptdata != null && decryptdata.key != null && decryptdata.method === 'AES-128') {\n if (this.decrypter == null) {\n this.decrypter = new _decrypter2.default(this.hls);\n }\n\n var localthis = this;\n this.decrypter.decrypt(data, decryptdata.key, data.first && decryptdata.iv, function (decryptedData) {\n localthis.pushDecrypted(decryptedData, audioCodec, videoCodec, timeOffset, cc, level, sn, duration, accurate, !!data.first, !!data.final, lastSN, reinit);\n });\n } else {\n this.pushDecrypted(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration, accurate, !!data.first, !!data.final, lastSN, reinit);\n }\n }\n }, {\n key: 'onWorkerMessage',\n value: function onWorkerMessage(ev) {\n var data = ev.data;\n switch (data.event) {\n case _events2.default.FRAG_PARSING_INIT_SEGMENT:\n var obj = {};\n obj.tracks = data.tracks;\n obj.unique = data.unique;\n this.hls.trigger(_events2.default.FRAG_PARSING_INIT_SEGMENT, obj);\n break;\n case _events2.default.FRAG_PARSING_DATA:\n this.hls.trigger(_events2.default.FRAG_PARSING_DATA, {\n data1: new Uint8Array(data.data1),\n data2: new Uint8Array(data.data2),\n startPTS: data.startPTS,\n endPTS: data.endPTS,\n startDTS: data.startDTS,\n endDTS: data.endDTS,\n type: data.type,\n nb: data.nb,\n dropped: data.dropped,\n deltaPTS: data.deltaPTS,\n isPartial: data.isPartial\n });\n break;\n case _events2.default.FRAG_PARSING_METADATA:\n this.hls.trigger(_events2.default.FRAG_PARSING_METADATA, {\n samples: data.samples\n });\n break;\n case _events2.default.FRAG_PARSING_USERDATA:\n this.hls.trigger(_events2.default.FRAG_PARSING_USERDATA, {\n samples: data.samples\n });\n break;\n default:\n this.hls.trigger(data.event, data.data);\n break;\n }\n }\n }, {\n key: 'waitQueue',\n value: function waitQueue() {\n if (this.w) {\n this.w.postMessage({ cmd: 'empty' });\n }\n }\n }]);\n\n return Demuxer;\n}();\n\nexports.default = Demuxer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.\n */\n\nvar _logger = require('../utils/logger');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ExpGolomb = function () {\n function ExpGolomb(data) {\n _classCallCheck(this, ExpGolomb);\n\n this.data = data;\n // the number of bytes left to examine in this.data\n this.bytesAvailable = this.data.byteLength;\n // the current word being examined\n this.word = 0; // :uint\n // the number of bits left to examine in the current word\n this.bitsAvailable = 0; // :uint\n }\n\n _createClass(ExpGolomb, [{\n key: 'wholeBytesAvailable',\n value: function wholeBytesAvailable() {\n return this.bytesAvailable + (this.bitsAvailable >> 3);\n }\n\n // ():void\n\n }, {\n key: 'loadWord',\n value: function loadWord() {\n var position = this.data.byteLength - this.bytesAvailable,\n workingBytes = new Uint8Array(4),\n availableBytes = Math.min(4, this.bytesAvailable);\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n workingBytes.set(this.data.subarray(position, position + availableBytes));\n this.word = new DataView(workingBytes.buffer).getUint32(0);\n // track the amount of this.data that has been processed\n this.bitsAvailable = availableBytes * 8;\n this.bytesAvailable -= availableBytes;\n }\n\n // (count:int):void\n\n }, {\n key: 'skipBits',\n value: function skipBits(count) {\n var skipBytes; // :int\n if (this.bitsAvailable > count) {\n this.word <<= count;\n this.bitsAvailable -= count;\n } else {\n count -= this.bitsAvailable;\n skipBytes = count >> 3;\n count -= skipBytes >> 3;\n this.bytesAvailable -= skipBytes;\n this.loadWord();\n this.word <<= count;\n this.bitsAvailable -= count;\n }\n }\n\n // (size:int):uint\n\n }, {\n key: 'readBits',\n value: function readBits(size) {\n var bits = Math.min(this.bitsAvailable, size),\n // :uint\n valu = this.word >>> 32 - bits; // :uint\n if (size > 32) {\n _logger.logger.error('Cannot read more than 32 bits at a time');\n }\n this.bitsAvailable -= bits;\n if (this.bitsAvailable > 0) {\n this.word <<= bits;\n } else if (this.bytesAvailable > 0) {\n this.loadWord();\n }\n bits = size - bits;\n return bits > 0 && this.bitsAvailable ? valu << bits | this.readBits(bits) : valu;\n }\n\n // ():uint\n\n }, {\n key: 'skipLZ',\n value: function skipLZ() {\n var leadingZeroCount; // :uint\n for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n if (0 !== (this.word & 0x80000000 >>> leadingZeroCount)) {\n // the first bit of working word is 1\n this.word <<= leadingZeroCount;\n this.bitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n }\n // we exhausted word and still have not found a 1\n this.loadWord();\n return leadingZeroCount + this.skipLZ();\n }\n\n // ():void\n\n }, {\n key: 'skipUEG',\n value: function skipUEG() {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():void\n\n }, {\n key: 'skipEG',\n value: function skipEG() {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():uint\n\n }, {\n key: 'readUEG',\n value: function readUEG() {\n var clz = this.skipLZ(); // :uint\n return this.readBits(clz + 1) - 1;\n }\n\n // ():int\n\n }, {\n key: 'readEG',\n value: function readEG() {\n var valu = this.readUEG(); // :int\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return 1 + valu >>> 1; // add 1 to make it even, and divide by 2\n } else {\n return -1 * (valu >>> 1); // divide by two then make it negative\n }\n }\n\n // Some convenience functions\n // :Boolean\n\n }, {\n key: 'readBoolean',\n value: function readBoolean() {\n return 1 === this.readBits(1);\n }\n\n // ():int\n\n }, {\n key: 'readUByte',\n value: function readUByte() {\n return this.readBits(8);\n }\n\n // ():int\n\n }, {\n key: 'readUShort',\n value: function readUShort() {\n return this.readBits(16);\n }\n // ():int\n\n }, {\n key: 'readUInt',\n value: function readUInt() {\n return this.readBits(32);\n }\n\n /**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n\n }, {\n key: 'skipScalingList',\n value: function skipScalingList(count) {\n var lastScale = 8,\n nextScale = 8,\n j,\n deltaScale;\n for (j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = this.readEG();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = nextScale === 0 ? lastScale : nextScale;\n }\n }\n\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n\n }, {\n key: 'readSPS',\n value: function readSPS() {\n var frameCropLeftOffset = 0,\n frameCropRightOffset = 0,\n frameCropTopOffset = 0,\n frameCropBottomOffset = 0,\n profileIdc,\n profileCompat,\n levelIdc,\n numRefFramesInPicOrderCntCycle,\n picWidthInMbsMinus1,\n picHeightInMapUnitsMinus1,\n frameMbsOnlyFlag,\n scalingListCount,\n i;\n this.readUByte();\n profileIdc = this.readUByte(); // profile_idc\n profileCompat = this.readBits(5); // constraint_set[0-4]_flag, u(5)\n this.skipBits(3); // reserved_zero_3bits u(3),\n levelIdc = this.readUByte(); //level_idc u(8)\n this.skipUEG(); // seq_parameter_set_id\n // some profiles have more optional data we don't need\n if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 || profileIdc === 244 || profileIdc === 44 || profileIdc === 83 || profileIdc === 86 || profileIdc === 118 || profileIdc === 128) {\n var chromaFormatIdc = this.readUEG();\n if (chromaFormatIdc === 3) {\n this.skipBits(1); // separate_colour_plane_flag\n }\n this.skipUEG(); // bit_depth_luma_minus8\n this.skipUEG(); // bit_depth_chroma_minus8\n this.skipBits(1); // qpprime_y_zero_transform_bypass_flag\n if (this.readBoolean()) {\n // seq_scaling_matrix_present_flag\n scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (this.readBoolean()) {\n // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n this.skipScalingList(16);\n } else {\n this.skipScalingList(64);\n }\n }\n }\n }\n }\n this.skipUEG(); // log2_max_frame_num_minus4\n var picOrderCntType = this.readUEG();\n if (picOrderCntType === 0) {\n this.readUEG(); //log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n this.skipBits(1); // delta_pic_order_always_zero_flag\n this.skipEG(); // offset_for_non_ref_pic\n this.skipEG(); // offset_for_top_to_bottom_field\n numRefFramesInPicOrderCntCycle = this.readUEG();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n this.skipEG(); // offset_for_ref_frame[ i ]\n }\n }\n this.skipUEG(); // max_num_ref_frames\n this.skipBits(1); // gaps_in_frame_num_value_allowed_flag\n picWidthInMbsMinus1 = this.readUEG();\n picHeightInMapUnitsMinus1 = this.readUEG();\n frameMbsOnlyFlag = this.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n this.skipBits(1); // mb_adaptive_frame_field_flag\n }\n this.skipBits(1); // direct_8x8_inference_flag\n if (this.readBoolean()) {\n // frame_cropping_flag\n frameCropLeftOffset = this.readUEG();\n frameCropRightOffset = this.readUEG();\n frameCropTopOffset = this.readUEG();\n frameCropBottomOffset = this.readUEG();\n }\n var pixelRatio = [1, 1];\n if (this.readBoolean()) {\n // vui_parameters_present_flag\n if (this.readBoolean()) {\n // aspect_ratio_info_present_flag\n var aspectRatioIdc = this.readUByte();\n switch (aspectRatioIdc) {\n case 1:\n pixelRatio = [1, 1];break;\n case 2:\n pixelRatio = [12, 11];break;\n case 3:\n pixelRatio = [10, 11];break;\n case 4:\n pixelRatio = [16, 11];break;\n case 5:\n pixelRatio = [40, 33];break;\n case 6:\n pixelRatio = [24, 11];break;\n case 7:\n pixelRatio = [20, 11];break;\n case 8:\n pixelRatio = [32, 11];break;\n case 9:\n pixelRatio = [80, 33];break;\n case 10:\n pixelRatio = [18, 11];break;\n case 11:\n pixelRatio = [15, 11];break;\n case 12:\n pixelRatio = [64, 33];break;\n case 13:\n pixelRatio = [160, 99];break;\n case 14:\n pixelRatio = [4, 3];break;\n case 15:\n pixelRatio = [3, 2];break;\n case 16:\n pixelRatio = [2, 1];break;\n case 255:\n {\n pixelRatio = [this.readUByte() << 8 | this.readUByte(), this.readUByte() << 8 | this.readUByte()];\n break;\n }\n }\n }\n }\n return {\n width: Math.ceil((picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2),\n height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - (frameMbsOnlyFlag ? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset),\n pixelRatio: pixelRatio\n };\n }\n }, {\n key: 'readSliceType',\n value: function readSliceType() {\n // skip NALu type\n this.readUByte();\n // discard first_mb_in_slice\n this.readUEG();\n // return slice_type\n return this.readUEG();\n }\n }]);\n\n return ExpGolomb;\n}();\n\nexports.default = ExpGolomb;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * ID3 parser\n */\n\n\nvar _logger = require('../utils/logger');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n//import Hex from '../utils/hex';\n\nvar ID3 = function () {\n function ID3(data) {\n _classCallCheck(this, ID3);\n\n this._hasTimeStamp = false;\n var offset = 0,\n byte1,\n byte2,\n byte3,\n byte4,\n tagSize,\n endPos,\n header,\n len;\n do {\n header = this.readUTF(data, offset, 3);\n offset += 3;\n // first check for ID3 header\n if (header === 'ID3') {\n // skip 24 bits\n offset += 3;\n // retrieve tag(s) length\n byte1 = data[offset++] & 0x7f;\n byte2 = data[offset++] & 0x7f;\n byte3 = data[offset++] & 0x7f;\n byte4 = data[offset++] & 0x7f;\n tagSize = (byte1 << 21) + (byte2 << 14) + (byte3 << 7) + byte4;\n endPos = offset + tagSize;\n //logger.log(`ID3 tag found, size/end: ${tagSize}/${endPos}`);\n\n // read ID3 tags\n this._parseID3Frames(data, offset, endPos);\n offset = endPos;\n } else if (header === '3DI') {\n // http://id3.org/id3v2.4.0-structure chapter 3.4. ID3v2 footer\n offset += 7;\n _logger.logger.log('3DI footer found, end: ' + offset);\n } else {\n offset -= 3;\n len = offset;\n if (len) {\n //logger.log(`ID3 len: ${len}`);\n if (!this.hasTimeStamp) {\n _logger.logger.warn('ID3 tag found, but no timestamp');\n }\n this._length = len;\n this._payload = data.subarray(0, len);\n }\n return;\n }\n } while (true);\n }\n\n _createClass(ID3, [{\n key: 'readUTF',\n value: function readUTF(data, start, len) {\n\n var result = '',\n offset = start,\n end = start + len;\n do {\n result += String.fromCharCode(data[offset++]);\n } while (offset < end);\n return result;\n }\n }, {\n key: '_parseID3Frames',\n value: function _parseID3Frames(data, offset, endPos) {\n var tagId, tagLen, tagStart, tagFlags, timestamp;\n while (offset + 8 <= endPos) {\n tagId = this.readUTF(data, offset, 4);\n offset += 4;\n\n tagLen = data[offset++] << 24 + data[offset++] << 16 + data[offset++] << 8 + data[offset++];\n\n tagFlags = data[offset++] << 8 + data[offset++];\n\n tagStart = offset;\n //logger.log(\"ID3 tag id:\" + tagId);\n switch (tagId) {\n case 'PRIV':\n //logger.log('parse frame:' + Hex.hexDump(data.subarray(offset,endPos)));\n // owner should be \"com.apple.streaming.transportStreamTimestamp\"\n if (this.readUTF(data, offset, 44) === 'com.apple.streaming.transportStreamTimestamp') {\n offset += 44;\n // smelling even better ! we found the right descriptor\n // skip null character (string end) + 3 first bytes\n offset += 4;\n\n // timestamp is 33 bit expressed as a big-endian eight-octet number, with the upper 31 bits set to zero.\n var pts33Bit = data[offset++] & 0x1;\n this._hasTimeStamp = true;\n\n timestamp = ((data[offset++] << 23) + (data[offset++] << 15) + (data[offset++] << 7) + data[offset++]) / 45;\n\n if (pts33Bit) {\n timestamp += 47721858.84; // 2^32 / 90\n }\n timestamp = Math.round(timestamp);\n _logger.logger.trace('ID3 timestamp found: ' + timestamp);\n this._timeStamp = timestamp;\n }\n break;\n default:\n break;\n }\n }\n }\n }, {\n key: 'hasTimeStamp',\n get: function get() {\n return this._hasTimeStamp;\n }\n }, {\n key: 'timeStamp',\n get: function get() {\n return this._timeStamp;\n }\n }, {\n key: 'length',\n get: function get() {\n return this._length;\n }\n }, {\n key: 'payload',\n get: function get() {\n return this._payload;\n }\n }]);\n\n return ID3;\n}();\n\nexports.default = ID3;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * highly optimized TS demuxer:\n * parse PAT, PMT\n * extract PES packet from audio and video PIDs\n * extract AVC/H264 NAL units and AAC/ADTS samples from PES packet\n * trigger the remuxer upon parsing completion\n * it also tries to workaround as best as it can audio codec switch (HE-AAC to AAC and vice versa), without having to restart the MediaSource.\n * it also controls the remuxing process :\n * upon discontinuity or level switch detection, it will also notifies the remuxer so that it can reset its state.\n */\n\n// import Hex from '../utils/hex';\n\n\nvar _adts = require('./adts');\n\nvar _adts2 = _interopRequireDefault(_adts);\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _expGolomb = require('./exp-golomb');\n\nvar _expGolomb2 = _interopRequireDefault(_expGolomb);\n\nvar _logger = require('../utils/logger');\n\nvar _errors = require('../errors');\n\nrequire('../utils/polyfill');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TSDemuxer = function () {\n function TSDemuxer(observer, remuxerClass, config, typeSupported) {\n _classCallCheck(this, TSDemuxer);\n\n this.observer = observer;\n this.remuxerClass = remuxerClass;\n this.config = config;\n this.typeSupported = typeSupported;\n this.lastCC = 0;\n this._setEmptyTracks();\n this._clearAllData();\n this.remuxer = new this.remuxerClass(observer, config, typeSupported);\n this.levelParams = {};\n }\n\n _createClass(TSDemuxer, [{\n key: '_setEmptyTracks',\n value: function _setEmptyTracks(clearParams) {\n var track = void 0;\n if (track = this._avcTrack) {\n var params = {};\n var oldParams = this.levelParams[this.lastLevel] || {};\n params.sps = track.sps || oldParams.sps;\n params.pps = track.pps || oldParams.pps;\n }\n this._avcTrack = Object.assign({}, this._avcTrack, { container: 'video/mp2t', inputTimeScale: 90000, type: 'video', samples: [], len: 0, nbNalu: 0 });\n if (clearParams) {\n delete this._avcTrack.sps;\n delete this._avcTrack.pps;\n }\n this._aacTrack = Object.assign({}, this._aacTrack, { container: 'video/mp2t', inputTimeScale: 90000, type: 'audio', samples: [], len: 0, isAAC: true });\n this._id3Track = Object.assign({}, this._id3Track, { type: 'id3', samples: [], inputTimeScale: 90000, len: 0 });\n this._txtTrack = Object.assign({}, this._txtTrack, { type: 'text', samples: [], inputTimeScale: 90000, len: 0 });\n this._avcTrack.sequenceNumber = this._avcTrack.sequenceNumber | 0;\n this._aacTrack.sequenceNumber = this._aacTrack.sequenceNumber | 0;\n this._id3Track.sequenceNumber = this._id3Track.sequenceNumber | 0;\n this._txtTrack.sequenceNumber = this._txtTrack.sequenceNumber | 0;\n }\n }, {\n key: '_clearIDs',\n value: function _clearIDs() {\n this._aacTrack.id = this._avcTrack.id = this._id3Track.id = this._txtTrack.id = -1;\n }\n }, {\n key: 'switchLevel',\n value: function switchLevel(smooth) {\n // flush end of previous segment\n if (this._avcTrack.samples.length) {\n this.remux(null, false, true, false);\n }\n delete this.audioConfig;\n this.pmtParsed = false;\n this._pmtId = -1;\n this._setEmptyTracks(true);\n this._clearAllData();\n this._clearIDs();\n // flush any partial content\n this.aacOverFlow = null;\n this.aacLastPTS = null;\n this.avcNaluState = 0;\n this.remuxer.switchLevel(smooth);\n }\n }, {\n key: '_clearAvcData',\n value: function _clearAvcData(offset) {\n return this._avcData = { data: [], size: 0, offset: offset || 0 };\n }\n }, {\n key: '_clearAacData',\n value: function _clearAacData() {\n return this._aacData = { data: [], size: 0 };\n }\n }, {\n key: '_clearID3Data',\n value: function _clearID3Data() {\n return this._id3Data = { data: [], size: 0 };\n }\n }, {\n key: '_clearAllData',\n value: function _clearAllData() {\n this._clearAvcData();\n this._clearAacData();\n this._clearID3Data();\n }\n }, {\n key: 'insertDiscontinuity',\n value: function insertDiscontinuity() {\n this.switchLevel();\n this.remuxer.insertDiscontinuity();\n }\n\n // feed incoming data to the front of the parsing pipeline\n\n }, {\n key: 'push',\n value: function push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration, accurate, first, final, lastSN, keymaps, reinit) {\n var _this = this;\n\n var avcData = this._avcData,\n aacData = this._aacData,\n pes,\n id3Data = this._id3Data,\n start,\n len = data.length,\n stt,\n pid,\n atf,\n info,\n num,\n offset,\n codecsOnly = this.remuxer.passthrough,\n unknownPIDs = false;\n var convertPS = function convertPS(tag) {\n if (tag in keymaps) {\n _this._avcTrack[tag] = keymaps[tag].map(function (el) {\n return new Uint8Array(el);\n });\n }\n };\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n this.timeOffset = timeOffset;\n this.lastAVCFrameStart = 0;\n this.accurate = accurate;\n this._duration = duration;\n this.contiguous = false;\n this.numSample = first ? 0 : this.numSample;\n if (cc !== this.lastCC) {\n _logger.logger.log('discontinuity detected');\n this.insertDiscontinuity();\n this.lastCC = cc;\n }\n var trackSwitch = level !== this.lastLevel && !keymaps;\n if (keymaps) {\n _logger.logger.log('got mixed segment ' + keymaps.firstSN + ' ' + keymaps.switchPoint);\n }\n if (trackSwitch) {\n _logger.logger.log('level switch detected');\n this.switchLevel();\n this.lastLevel = level;\n }\n if (!trackSwitch && sn === this.lastSN + 1 || !first) {\n this.contiguous = true;\n } else {\n // flush any partial content\n if (this._avcTrack.samples.length) {\n this.remux(null, false, true, false);\n }\n this.aacOverFlow = null;\n this._clearAllData();\n this._setEmptyTracks();\n }\n this.currentSN = sn;\n var avcId = this._avcTrack.id,\n aacId = this._aacTrack.id,\n id3Id = this._id3Track.id;\n\n if (first) {\n delete this.audioConfig;\n this.lastContiguous = !trackSwitch && sn === this.lastSN + 1;\n this.fragStats = { framesCount: 0, keyFrames: 0, dropped: 0, segment: sn, level: level, notFirstKeyframe: 0, keymap: { pmt: { aac: aacId, avc: avcId, id3: id3Id }, idr: [], indr: [], sei: [] } };\n this.remuxAVCCount = this.remuxAACCount = 0;\n this.fragStartPts = this.fragStartDts = this.gopStartDTS = undefined;\n this.fragStartAVCPos = this._avcTrack.samples.length;\n this.fragStartAACPos = this._aacTrack.samples.length;\n this.nextAvcDts = this.contiguous ? this.remuxer.nextAvcDts : this.timeOffset * this.remuxer.PES_TIMESCALE;\n }\n\n // don't parse last TS packet if incomplete\n len -= len % 188;\n // loop through TS packets\n for (start = 0, num = 0; start < len; start += 188) {\n if (data[start] === 0x47) {\n stt = !!(data[start + 1] & 0x40);\n // pid is a 13-bit field starting at the last bit of TS[1]\n pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2];\n atf = (data[start + 3] & 0x30) >> 4;\n // if an adaption field is present, its length is specified by the fifth byte of the TS packet header.\n if (atf > 1) {\n offset = start + 5 + data[start + 4];\n // continue if there is only adaptation field\n if (offset === start + 188) {\n continue;\n }\n } else {\n offset = start + 4;\n }\n\n switch (pid) {\n case avcId:\n if (stt) {\n this.fragStats.keymap.first = this.fragStats.keymap.first || start;\n if (pes = this._parsePES(avcData)) {\n this._parseAVCPES(pes, !final);\n if (codecsOnly) {\n // if we have video codec info AND\n // if audio PID is undefined OR if we have audio codec info,\n // we have all codec info !\n if (this._avcTrack.codec && (aacId === -1 || this._aacTrack.codec)) {\n this.remux(data);\n return;\n }\n }\n }\n this.lastAVCFrameStart = start;\n avcData = this._clearAvcData(start);\n if (keymaps && this.numSample === keymaps.firstSN) {\n this.switchLevel(true);\n this.lastLevel = level;\n avcData = this._avcData;\n aacData = this._aacData;\n id3Data = this._id3Data;\n start = keymaps.switchPoint - 188;\n if (keymaps.pmtId !== undefined) {\n this._pmtId = keymaps.pmtId;\n }\n if (keymaps.pmt) {\n avcId = this._avcTrack.id = keymaps.pmt.avc;\n aacId = this._aacTrack.id = keymaps.pmt.aac;\n id3Id = this._id3Track.id = keymaps.pmt.id3;\n }\n ['sps', 'pps'].forEach(convertPS);\n delete keymaps.firstSN;\n continue;\n }\n }\n avcData.data.push(data.subarray(offset, start + 188));\n avcData.size += start + 188 - offset;\n break;\n case aacId:\n if (stt) {\n if (pes = this._parsePES(aacData)) {\n if (this._aacTrack.isAAC) {\n this._parseAACPES(pes);\n } else {\n this._parseMPEGPES(pes);\n }\n if (codecsOnly) {\n // here we now that we have audio codec info\n // if video PID is undefined OR if we have video codec info,\n // we have all codec infos !\n if (this._aacTrack.codec && (avcId === -1 || this._avcTrack.codec)) {\n this.remux(data);\n return;\n }\n }\n }\n aacData = this._clearAacData();\n }\n aacData.data.push(data.subarray(offset, start + 188));\n aacData.size += start + 188 - offset;\n break;\n case id3Id:\n if (stt) {\n if (pes = this._parsePES(id3Data)) {\n this._parseID3PES(pes);\n }\n id3Data = this._clearID3Data();\n }\n id3Data.data.push(data.subarray(offset, start + 188));\n id3Data.size += start + 188 - offset;\n break;\n case 0:\n if (stt) {\n offset += data[offset] + 1;\n }\n this._parsePAT(data, offset);\n break;\n case this._pmtId:\n if (stt) {\n offset += data[offset] + 1;\n }\n this._parsePMT(data, offset, this.typeSupported.mpeg === true || this.typeSupported.mp3 === true);\n avcId = this._avcTrack.id;\n aacId = this._aacTrack.id;\n id3Id = this._id3Track.id;\n if (unknownPIDs && !this.pmtParsed) {\n _logger.logger.log('reparse from beginning');\n unknownPIDs = false;\n // we set it to -188, the += 188 in the for loop will reset start to 0\n start = -188;\n }\n this.pmtParsed = true;\n break;\n case 17:\n case 0x1fff:\n break;\n default:\n unknownPIDs = true;\n break;\n }\n } else {\n if (num === 0) {\n var i = void 0,\n _len = data.length;\n info = 'len:' + _len + ' [';\n for (i = 0, _len = Math.min(_len, 10); i < _len; i++) {\n if (i) {\n info += ',';\n }\n info += data[start + i];\n }\n info += '..]';\n }\n num++;\n }\n }\n if (num) {\n this.observer.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'TS packet did not start with 0x47 sn:' + sn + ' samples: ' + num + ' ' + info });\n }\n // parse last PES packet\n if (final) {\n if (avcData.size && (pes = this._parsePES(avcData))) {\n this._parseAVCPES(pes, true);\n this._clearAvcData();\n } else if (this.avcSample) {\n this.pushAccessUnit(this.avcSample, this._avcTrack);\n this.avcSample = null;\n }\n if (aacData.size && (pes = this._parsePES(aacData))) {\n if (this._aacTrack.isAAC) {\n this._parseAACPES(pes);\n } else {\n this._parseMPEGPES(pes);\n }\n this._clearAacData();\n }\n if (id3Data.size && (pes = this._parsePES(id3Data))) {\n this._parseID3PES(pes);\n this._clearID3Data();\n }\n this.lastSN = sn;\n }\n if (this.fragStartPts === undefined && this._avcTrack.samples.length > this.fragStartAVCPos) {\n this.fragStartPts = this._avcTrack.samples[this.fragStartAVCPos].pts;\n this.fragStartDts = this._avcTrack.samples[this.fragStartAVCPos].dts;\n }\n if (this.gopStartDTS === undefined && this._avcTrack.samples.length) {\n this.gopStartDTS = this._avcTrack.samples[0].dts;\n }\n this.remux(null, final, final && sn === lastSN, true, reinit);\n if (final) {\n this.fragStats.keymap.sps = this._avcTrack.sps || undefined;\n this.fragStats.keymap.pps = this._avcTrack.pps || undefined;\n if (keymaps) {\n delete this.fragStats.keymap;\n }\n this.observer.trigger(_events2.default.FRAG_STATISTICS, this.fragStats);\n }\n }\n }, {\n key: '_recalcTrack',\n value: function _recalcTrack(track) {\n if (track.hasOwnProperty('nbNalu')) {\n track.nbNalu = 0;\n }\n track.len = 0;\n for (var i = 0; i < track.samples.length; i++) {\n var sample = track.samples[i];\n track.len += ((sample.units && sample.units.length) | 0) + ((sample.unit && sample.unit.length) | 0) + (sample.len | 0) + ((sample.bytes && sample.bytes.length) | 0);\n if (track.hasOwnProperty('nbNalu')) {\n track.nbNalu += sample.units.units.length;\n }\n }\n }\n }, {\n key: '_filterSamples',\n value: function _filterSamples(track, end, _save) {\n var _new = [];\n for (var i = 0; i < track.samples.length; i++) {\n var sample = track.samples[i];\n var sampleTime = sample.dts || sample.pts;\n if (sampleTime <= end) {\n _new.push(sample);\n } else if (_save) {\n _save.push(sample);\n }\n }\n if (!_save) {\n return _new;\n }\n track.samples = _new;\n this._recalcTrack(track);\n }\n }, {\n key: 'remux',\n value: function remux(data, final, flush, lastSegment, forceReinit) {\n var _saveAVCSamples = [],\n _saveAACSamples = [],\n _saveID3Samples = [],\n _saveTextSamples = [],\n maxk,\n samples = this._avcTrack.samples,\n segStartDTS,\n segEndDTS,\n initDTS,\n reinit;\n var timescale = this.remuxer.PES_TIMESCALE;\n if (samples.length && final) {\n reinit = forceReinit || this.remuxer._initDTS === undefined || this.accurate && Math.abs(samples[0].dts - this.remuxer.nextAvcDts - this.remuxer._initDTS) > this.config.maxBufferHole * timescale && Math.abs(this._aacTrack.samples.length && this._aacTrack.samples[0].pts - this.remuxer.nextAacPts - this.remuxer._initDTS) > this.config.maxBufferHole * timescale;\n initDTS = reinit ? samples[0].dts - timescale * this.timeOffset : this.remuxer._initDTS;\n // if we have a big gap (>maxBufferHole) between adjacent segments, it\n // means we don't really have accurate segment timing and have to reinit\n // pts/dts offsets\n if (reinit) {\n this.accurate = false;\n this.remuxer.switchLevel();\n this.remuxer.insertDiscontinuity();\n }\n var startDTS = Math.max(this.remuxer._PTSNormalize((this.gopStartDTS === undefined ? samples[0].dts : this.gopStartDTS) - initDTS, this.nextAvcDts), 0);\n var sample = samples[samples.length - 1];\n var videoStartDTS = Math.max(this.remuxer._PTSNormalize((this.fragStartDts === undefined ? samples[0].dts : this.fragStartDts) - initDTS, this.nextAvcDts), 0) / timescale;\n var videoEndDTS = Math.max(this.remuxer._PTSNormalize(sample.dts - initDTS, this.nextAvcDts), 0) / timescale;\n if (this.accurate && Math.abs(startDTS - this.nextAvcDts) > 90) {\n videoStartDTS -= (startDTS - this.nextAvcDts) / timescale;\n }\n if (samples.length + this.remuxAVCCount > this.fragStartAVCPos + 1 && this.fragStartDts !== undefined) {\n var fragStartDts = this.remuxer._PTSNormalize(this.fragStartDts, this.nextAvcDts);\n var sampleDts = this.remuxer._PTSNormalize(sample.dts, this.nextAvcDts);\n videoEndDTS += (sampleDts - fragStartDts) / (samples.length + this.remuxAVCCount - this.fragStartAVCPos - 1) / timescale;\n }\n segStartDTS = videoStartDTS;\n segEndDTS = videoEndDTS;\n if (this._aacTrack.audiosamplerate) {\n var expectedSampleDuration = 1024 / this._aacTrack.audiosamplerate;\n var remuxAACCount = this._aacTrack.samples.length;\n var nextAacPTS = (this.lastContiguous !== undefined && this.lastContiguous || this.contiguous && this.remuxAACCount) && this.remuxer.nextAacPts ? this.remuxer.nextAacPts / timescale : this.accurate ? this.timeOffset : segStartDTS;\n segStartDTS = Math.max(segStartDTS, nextAacPTS + (this.fragStartAACPos - this.remuxAACCount) * expectedSampleDuration);\n if (remuxAACCount) {\n segEndDTS = Math.min(segEndDTS, nextAacPTS + expectedSampleDuration * remuxAACCount);\n }\n var AVUnsync = void 0;\n if ((AVUnsync = segEndDTS - segStartDTS + videoStartDTS - videoEndDTS) > 0.2) {\n this.fragStats.AVUnsync = AVUnsync;\n }\n }\n }\n if (!flush && !(this.config && this.config.disableBrakeByGop)) {\n // save samples and break by GOP\n for (maxk = samples.length - 1; maxk > 1; maxk--) {\n if (samples[maxk].key) {\n if (maxk && (samples[maxk - 1].dts - initDTS) / timescale < segStartDTS) {\n maxk = 0;\n }\n break;\n }\n }\n if (maxk > 1) {\n var gopEndDTS = this._avcTrack.samples[maxk - 1].dts;\n if (this.remuxer.ISGenerated || !this.remuxer.ISGenerated && this._aacTrack.samples.length && this._filterSamples(this._aacTrack, gopEndDTS).length) {\n _saveAVCSamples = samples.slice(maxk);\n this._avcTrack.samples = samples.slice(0, maxk);\n this._recalcTrack(this._avcTrack);\n this._filterSamples(this._aacTrack, gopEndDTS, _saveAACSamples);\n this._filterSamples(this._id3Track, gopEndDTS, _saveID3Samples);\n this._filterSamples(this._txtTrack, gopEndDTS, _saveTextSamples);\n }\n }\n }\n if ((flush || final && !this.remuxAVCCount) && this._avcTrack.samples.length + this._aacTrack.samples.length || maxk > 0) {\n this.remuxAVCCount += this._avcTrack.samples.length;\n this.remuxAACCount += this._aacTrack.samples.length;\n this.remuxer.remux(this._aacTrack, this._avcTrack, this._id3Track, this._txtTrack, flush && this.nextStartPts ? this.nextStartPts : this.timeOffset, flush && !lastSegment || (this.lastContiguous !== undefined ? this.lastContiguous : this.contiguous), this.accurate, data, flush, this.fragStats, flush && !lastSegment);\n this.lastContiguous = undefined;\n this.nextStartPts = this.remuxer.endPTS;\n this._avcTrack.samples = _saveAVCSamples;\n this._aacTrack.samples = _saveAACSamples;\n this._id3Track.samples = _saveID3Samples;\n this._txtTrack.samples = _saveTextSamples;\n this._recalcTrack(this._avcTrack);\n this._recalcTrack(this._aacTrack);\n this._recalcTrack(this._id3Track);\n this._recalcTrack(this._txtTrack);\n }\n //notify end of parsing\n if (final) {\n var lastGopPTS = Math.min(this.remuxer.nextAvcDts, this.remuxer.nextAacPts) / timescale;\n this.observer.trigger(_events2.default.FRAG_PARSED, { startPTS: segStartDTS,\n endPTS: segEndDTS, lastGopPTS: lastGopPTS });\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.switchLevel();\n this._initPTS = this._initDTS = undefined;\n this._duration = 0;\n }\n }, {\n key: '_parsePAT',\n value: function _parsePAT(data, offset) {\n // skip the PSI header and parse the first PMT entry\n this._pmtId = (data[offset + 10] & 0x1F) << 8 | data[offset + 11];\n this.fragStats.keymap.pmtId = this._pmtId;\n //logger.log('PMT PID:' + this._pmtId);\n }\n }, {\n key: '_parsePMT',\n value: function _parsePMT(data, offset, mpegSupported) {\n var sectionLength, tableEnd, programInfoLength, pid;\n sectionLength = (data[offset + 1] & 0x0f) << 8 | data[offset + 2];\n tableEnd = offset + 3 + sectionLength - 4;\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n programInfoLength = (data[offset + 10] & 0x0f) << 8 | data[offset + 11];\n // advance the offset to the first entry in the mapping table\n offset += 12 + programInfoLength;\n while (offset < tableEnd) {\n pid = (data[offset + 1] & 0x1F) << 8 | data[offset + 2];\n switch (data[offset]) {\n // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n case 0x0f:\n //logger.log('AAC PID:' + pid);\n if (this._aacTrack.id === -1) {\n this._aacTrack.id = pid;\n this.fragStats.keymap.pmt.aac = pid;\n }\n break;\n // Packetized metadata (ID3)\n case 0x15:\n //logger.log('ID3 PID:' + pid);\n if (this._id3Track.id === -1) {\n this._id3Track.id = pid;\n this.fragStats.keymap.pmt.id3 = pid;\n }\n break;\n // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n case 0x1b:\n //logger.log('AVC PID:' + pid);\n if (this._avcTrack.id === -1) {\n this._avcTrack.id = pid;\n this.fragStats.keymap.pmt.avc = pid;\n }\n break;\n // ISO/IEC 11172-3 (MPEG-1 audio)\n // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n case 0x03:\n case 0x04:\n _logger.logger.log('MPEG PID:' + pid);\n if (!mpegSupported) {\n _logger.logger.log('MPEG audio found, not supported in this browser for now');\n } else {\n if (this._aacTrack.id === -1) {\n this._aacTrack.id = pid;\n this.fragStats.keymap.pmt.mpg = pid;\n }\n this._aacTrack.isAAC = false;\n }\n break;\n case 0x24:\n this.fragStats.HEVC = (this.fragStats.HEVC | 0) + 1;\n _logger.logger.warn('HEVC stream type found, not supported for now');\n break;\n default:\n this.fragStats.unknownStream = (this.fragStats.unknownStream | 0) + 1;\n _logger.logger.log('unkown stream type:' + data[offset]);\n break;\n }\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += ((data[offset + 3] & 0x0F) << 8 | data[offset + 4]) + 5;\n }\n }\n }, {\n key: '_parsePES',\n value: function _parsePES(stream) {\n var i = 0,\n frag,\n pesFlags,\n pesPrefix,\n pesLen,\n pesHdrLen,\n pesData,\n pesPts,\n pesDts,\n payloadStartOffset,\n data = stream.data;\n // safety check\n if (!stream || stream.size === 0) {\n return null;\n }\n\n // we might need up to 19 bytes to read PES header\n // if first chunk of data is less than 19 bytes, let's merge it with following ones until we get 19 bytes\n // usually only one merge is needed (and this is rare ...)\n while (data[0].length < 19 && data.length > 1) {\n var newData = new Uint8Array(data[0].length + data[1].length);\n newData.set(data[0]);\n newData.set(data[1], data[0].length);\n data[0] = newData;\n data.splice(1, 1);\n }\n //retrieve PTS/DTS from first fragment\n frag = data[0];\n pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n if (pesPrefix === 1) {\n pesLen = (frag[4] << 8) + frag[5];\n if (pesLen && pesLen > stream.size - 6) {\n return null;\n }\n pesFlags = frag[7];\n if (pesFlags & 0xC0) {\n /* PES header described here : http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n as PTS / DTS is 33 bit we cannot use bitwise operator in JS,\n as Bitwise operators treat their operands as a sequence of 32 bits */\n pesPts = (frag[9] & 0x0E) * 536870912 + // 1 << 29\n (frag[10] & 0xFF) * 4194304 + // 1 << 22\n (frag[11] & 0xFE) * 16384 + // 1 << 14\n (frag[12] & 0xFF) * 128 + // 1 << 7\n (frag[13] & 0xFE) / 2;\n // check if greater than 2^32 -1\n if (pesPts > 4294967295) {\n // decrement 2^33\n pesPts -= 8589934592;\n }\n if (pesFlags & 0x40) {\n pesDts = (frag[14] & 0x0E) * 536870912 + // 1 << 29\n (frag[15] & 0xFF) * 4194304 + // 1 << 22\n (frag[16] & 0xFE) * 16384 + // 1 << 14\n (frag[17] & 0xFF) * 128 + // 1 << 7\n (frag[18] & 0xFE) / 2;\n // check if greater than 2^32 -1\n if (pesDts > 4294967295) {\n // decrement 2^33\n pesDts -= 8589934592;\n }\n if (pesPts - pesDts > 60 * 90000) {\n _logger.logger.warn(Math.round((pesPts - pesDts) / 90000) + 's delta between PTS and DTS, align them');\n pesPts = pesDts;\n }\n } else {\n pesDts = pesPts;\n }\n }\n pesHdrLen = frag[8];\n payloadStartOffset = pesHdrLen + 9;\n\n stream.size -= payloadStartOffset;\n //reassemble PES packet\n pesData = new Uint8Array(stream.size);\n while (data.length) {\n frag = data.shift();\n var len = frag.byteLength;\n if (payloadStartOffset) {\n if (payloadStartOffset > len) {\n // trim full frag if PES header bigger than frag\n payloadStartOffset -= len;\n continue;\n } else {\n // trim partial frag if PES header smaller than frag\n frag = frag.subarray(payloadStartOffset);\n len -= payloadStartOffset;\n payloadStartOffset = 0;\n }\n }\n pesData.set(frag, i);\n i += len;\n }\n if (pesLen) {\n // payload size : remove PES header + PES extension\n pesLen -= pesHdrLen + 3;\n }\n return { data: pesData, pts: pesPts, dts: pesDts, len: pesLen };\n } else {\n return null;\n }\n }\n }, {\n key: 'pushAccessUnit',\n value: function pushAccessUnit(avcSample, avcTrack) {\n //build sample from PES\n // Annex B to MP4 conversion to be done\n if (avcSample.units.length) {\n // only push AVC sample if keyframe already found in this fragment OR\n // keyframe found in last fragment (track.sps) AND\n // samples already appended (we already found a keyframe in this fragment) OR fragment is contiguous\n this.fragStats.framesCount++;\n if (avcSample.key === true || avcTrack.sps && (avcTrack.samples.length || this.contiguous)) {\n if (avcSample.key) {\n this.fragStats.keyFrames++;\n }\n //logger.log(`avcSample ${avcSample.units.length} ${avcSample.dts} ${avcSample.key}`);\n avcTrack.samples.push(avcSample);\n avcTrack.len += avcSample.units.length;\n avcTrack.nbNalu += avcSample.units.units.length;\n } else {\n this.fragStats.dropped++;\n }\n if (!this.numSample && !avcSample.key) {\n this.fragStats.notFirstKeyframe++;\n }\n this.numSample++;\n }\n }\n }, {\n key: '_parseAVCPES',\n value: function _parseAVCPES(pes, last) {\n var _this2 = this;\n\n var track = this._avcTrack,\n units = this._parseAVCNALu(pes.data),\n debug = false,\n spsfound = false,\n expGolombDecoder,\n avcSample = this.avcSample,\n push,\n hlsConfig = this.config,\n i,\n createAVCSample = function createAVCSample(key, pts, dts) {\n return { key: key, pts: pts, dts: dts, units: { units: [], length: 0 } };\n };\n // no NALu found\n if (units.length === 0 && avcSample && avcSample.units.length > 0) {\n // append pes.data to previous NAL unit\n var lastUnit = avcSample.units.units[avcSample.units.units.length - 1];\n var tmp = new Uint8Array(lastUnit.data.byteLength + pes.data.byteLength);\n tmp.set(lastUnit.data, 0);\n tmp.set(pes.data, lastUnit.data.byteLength);\n lastUnit.data = tmp;\n avcSample.units.length += pes.data.byteLength;\n }\n //free pes.data to save up some memory\n pes.data = null;\n var debugString = '';\n var _addKey = function _addKey(type) {\n var map = _this2.fragStats.keymap;\n var lastPos = -1;\n var _arr = ['idr', 'indr', 'sei'];\n for (var _i = 0; _i < _arr.length; _i++) {\n var check = _arr[_i];\n if (map[check].length) {\n lastPos = Math.max(map[check].slice(-1)[0].offset || -1, lastPos);\n }\n }\n if (lastPos !== _this2.lastAVCFrameStart) {\n map[type].push({ offset: _this2.lastAVCFrameStart, sn: _this2.numSample });\n }\n };\n\n if (!avcSample || avcSample.pts !== pes.pts || avcSample.dts !== pes.dts) {\n if (avcSample) {\n this.pushAccessUnit(avcSample, track);\n }\n avcSample = this.avcSample = createAVCSample(false, pes.pts, pes.dts);\n }\n\n units.forEach(function (unit) {\n switch (unit.type) {\n //NDR\n case 1:\n push = true;\n if (debug) {\n debugString += 'NDR ';\n }\n var data = unit.data;\n // only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)\n if (spsfound && data.length > 4) {\n // retrieve slice type by parsing beginning of NAL unit (follow H264 spec, slice_header definition) to detect keyframe embedded in NDR\n var sliceType = new _expGolomb2.default(data).readSliceType();\n // 2 : I slice, 4 : SI slice, 7 : I slice, 9: SI slice\n // SI slice : A slice that is coded using intra prediction only and using quantisation of the prediction samples.\n // An SI slice can be coded such that its decoded samples can be constructed identically to an SP slice.\n // I slice: A slice that is not an SI slice that is decoded using intra prediction only.\n //if (sliceType === 2 || sliceType === 7) {\n if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {\n avcSample.key = true;\n _addKey('indr');\n }\n }\n break;\n //IDR\n case 5:\n push = true;\n if (debug) {\n debugString += 'IDR ';\n }\n avcSample.key = true;\n _addKey('idr');\n break;\n //SEI\n case 6:\n push = true;\n if (debug) {\n debugString += 'SEI ';\n }\n expGolombDecoder = new _expGolomb2.default(_this2.discardEPB(unit.data));\n\n // skip frameType\n expGolombDecoder.readUByte();\n\n var payloadType = 0;\n var payloadSize = 0;\n var endOfCaptions = false;\n var b = 0;\n\n while (!endOfCaptions && expGolombDecoder.wholeBytesAvailable() > 1) {\n payloadType = 0;\n do {\n b = expGolombDecoder.readUByte();\n payloadType += b;\n } while (b === 0xFF);\n // Parse payload size.\n payloadSize = 0;\n do {\n b = expGolombDecoder.readUByte();\n payloadSize += b;\n } while (b === 0xFF);\n\n // if SEI recovery_point has been found mark as keyframe\n if (!hlsConfig.disableSEIkeyframes && payloadType === 6) {\n avcSample.key = true;\n _addKey('sei');\n }\n\n // TODO: there can be more than one payload in an SEI packet...\n // TODO: need to read type and size in a while loop to get them all\n if (payloadType === 4 && expGolombDecoder.wholeBytesAvailable() !== 0) {\n\n endOfCaptions = true;\n\n var countryCode = expGolombDecoder.readUByte();\n\n if (countryCode === 181) {\n var providerCode = expGolombDecoder.readUShort();\n\n if (providerCode === 49) {\n var userStructure = expGolombDecoder.readUInt();\n\n if (userStructure === 0x47413934) {\n var userDataType = expGolombDecoder.readUByte();\n\n // Raw CEA-608 bytes wrapped in CEA-708 packet\n if (userDataType === 3) {\n var firstByte = expGolombDecoder.readUByte();\n var secondByte = expGolombDecoder.readUByte();\n\n var totalCCs = 31 & firstByte;\n var byteArray = [firstByte, secondByte];\n\n for (i = 0; i < totalCCs; i++) {\n // 3 bytes per CC\n byteArray.push(expGolombDecoder.readUByte());\n byteArray.push(expGolombDecoder.readUByte());\n byteArray.push(expGolombDecoder.readUByte());\n }\n\n _this2._insertSampleInOrder(_this2._txtTrack.samples, { type: 3, pts: pes.pts, bytes: byteArray });\n }\n }\n }\n }\n } else if (payloadSize < expGolombDecoder.wholeBytesAvailable()) {\n for (i = 0; i < payloadSize; i++) {\n expGolombDecoder.readUByte();\n }\n }\n }\n break;\n //SPS\n case 7:\n push = true;\n spsfound = true;\n if (debug) {\n debugString += 'SPS ';\n }\n if (!track.sps) {\n expGolombDecoder = new _expGolomb2.default(unit.data);\n var config = expGolombDecoder.readSPS();\n track.width = config.width;\n track.height = config.height;\n track.pixelRatio = config.pixelRatio;\n track.sps = [unit.data];\n track.duration = _this2._duration;\n var codecarray = unit.data.subarray(1, 4);\n var codecstring = 'avc1.';\n for (i = 0; i < 3; i++) {\n var h = codecarray[i].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n codecstring += h;\n }\n track.codec = codecstring;\n }\n break;\n //PPS\n case 8:\n push = true;\n if (debug) {\n debugString += 'PPS ';\n }\n if (!track.pps) {\n track.pps = [unit.data];\n }\n break;\n case 9:\n push = false;\n if (debug) {\n debugString += 'AUD ';\n }\n _this2.pushAccessUnit(avcSample, track);\n avcSample = _this2.avcSample = createAVCSample(false, pes.pts, pes.dts);\n break;\n // Filler Data\n case 12:\n push = false;\n break;\n default:\n push = false;\n debugString += 'unknown NAL ' + unit.type + ' ';\n break;\n }\n if (push) {\n avcSample.units.units.push(unit);\n avcSample.units.length += unit.data.byteLength;\n }\n });\n if (debug || debugString.length) {\n _logger.logger.log(debugString);\n }\n if (avcSample.key && this.levelParams[this.lastLevel]) {\n track.sps = track.sps || this.levelParams[this.lastLevel].sps || undefined;\n track.pps = track.pps || this.levelParams[this.lastLevel].pps || undefined;\n }\n if (avcSample) {\n if (last) {\n // if last PES packet, push samples\n this.pushAccessUnit(avcSample, track);\n }\n if (last || avcSample.units.length === 0) {\n this.avcSample = null;\n }\n }\n }\n }, {\n key: '_insertSampleInOrder',\n value: function _insertSampleInOrder(arr, data) {\n var len = arr.length;\n if (len > 0) {\n if (data.pts >= arr[len - 1].pts) {\n arr.push(data);\n } else {\n for (var pos = len - 1; pos >= 0; pos--) {\n if (data.pts < arr[pos].pts) {\n arr.splice(pos, 0, data);\n break;\n }\n }\n }\n } else {\n arr.push(data);\n }\n }\n }, {\n key: '_parseAVCNALu',\n value: function _parseAVCNALu(array) {\n var i = 0,\n len = array.byteLength,\n value,\n overflow,\n state = this.avcNaluState,\n track = this._avcTrack;\n var units = [],\n unit,\n unitType,\n lastUnitStart,\n lastUnitType;\n //logger.log('PES:' + Hex.hexDump(array));\n while (i < len) {\n value = array[i++];\n // finding 3 or 4-byte start codes (00 00 01 OR 00 00 00 01)\n switch (state) {\n case 0:\n if (value === 0) {\n state = 1;\n }\n break;\n case 1:\n if (value === 0) {\n state = 2;\n } else {\n state = 0;\n }\n break;\n case 2:\n case 3:\n if (value === 0) {\n state = 3;\n } else if (value === 1 && i < len) {\n unitType = array[i] & 0x1f;\n //logger.log('find NALU @ offset:' + i + ',type:' + unitType);\n if (lastUnitStart) {\n unit = { data: array.subarray(lastUnitStart, i - state - 1), type: lastUnitType };\n //logger.log('pushing NALU, type/size:' + unit.type + '/' + unit.data.byteLength);\n units.push(unit);\n } else {\n // lastUnitStart is undefined => this is the first start code found in this PES packet\n // first check if start code delimiter is overlapping between 2 PES packets,\n // ie it started in last packet (lastState not zero)\n // and ended at the beginning of this PES packet (i <= 4 - lastState)\n var lastState = this.avcNaluState;\n if (lastState && i <= 4 - lastState) {\n // start delimiter overlapping between PES packets\n // strip start delimiter bytes from the end of last NAL unit\n var avcSample = this.avcSample;\n if (avcSample) {\n var _units = avcSample.units.units;\n var lastUnit = _units[_units.length - 1];\n // check if lastUnit had a state different from zero\n if (lastUnit.state) {\n // strip last bytes\n lastUnit.data = lastUnit.data.subarray(0, lastUnit.data.byteLength - lastState);\n avcSample.units.length -= lastState;\n track.len -= lastState;\n }\n }\n }\n // If NAL units are not starting right at the beginning of the PES packet, push preceding data into previous NAL unit.\n overflow = i - state - 1;\n if (overflow > 0) {\n //logger.log('first NALU found with overflow:' + overflow);\n var _avcSample = this.avcSample;\n if (_avcSample) {\n var _units2 = _avcSample.units.units,\n _lastUnit = _units2[_units2.length - 1],\n tmp = new Uint8Array(_lastUnit.data.byteLength + overflow);\n tmp.set(_lastUnit.data, 0);\n tmp.set(array.subarray(0, overflow), _lastUnit.data.byteLength);\n _lastUnit.data = tmp;\n _avcSample.units.length += overflow;\n track.len += overflow;\n }\n }\n }\n lastUnitStart = i;\n lastUnitType = unitType;\n state = 0;\n } else {\n state = 0;\n }\n break;\n default:\n break;\n }\n }\n if (lastUnitStart) {\n unit = { data: array.subarray(lastUnitStart, len), type: lastUnitType, state: state };\n units.push(unit);\n //logger.log('pushing NALU, type/size/state:' + unit.type + '/' + unit.data.byteLength + '/' + state);\n this.avcNaluState = state;\n }\n return units;\n }\n\n /**\n * remove Emulation Prevention bytes from a RBSP\n */\n\n }, {\n key: 'discardEPB',\n value: function discardEPB(data) {\n var length = data.byteLength,\n EPBPositions = [],\n i = 1,\n newLength,\n newData;\n\n // Find all `Emulation Prevention Bytes`\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n EPBPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n }\n\n // If no Emulation Prevention Bytes were found just return the original\n // array\n if (EPBPositions.length === 0) {\n return data;\n }\n\n // Create a new array to hold the NAL unit data\n newLength = length - EPBPositions.length;\n newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === EPBPositions[0]) {\n // Skip this byte\n sourceIndex++;\n // Remove this position index\n EPBPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n return newData;\n }\n }, {\n key: '_parseAACPES',\n value: function _parseAACPES(pes) {\n var track = this._aacTrack,\n data = pes.data,\n pts = pes.pts,\n startOffset = 0,\n duration = this._duration,\n audioCodec = this.audioCodec,\n aacOverFlow = this.aacOverFlow,\n aacLastPTS = this.aacLastPTS,\n config,\n frameLength,\n frameDuration,\n frameIndex,\n offset,\n headerLength,\n stamp,\n len,\n aacSample;\n if (aacOverFlow) {\n var tmp = new Uint8Array(aacOverFlow.byteLength + data.byteLength);\n tmp.set(aacOverFlow, 0);\n tmp.set(data, aacOverFlow.byteLength);\n //logger.log(`AAC: append overflowing ${aacOverFlow.byteLength} bytes to beginning of new PES`);\n data = tmp;\n }\n // look for ADTS header (0xFFFx)\n for (offset = startOffset, len = data.length; offset < len - 1; offset++) {\n if (data[offset] === 0xff && (data[offset + 1] & 0xf0) === 0xf0) {\n break;\n }\n }\n // if ADTS header does not start straight from the beginning of the PES payload, raise an error\n if (offset) {\n var reason, fatal;\n if (offset < len - 1) {\n reason = 'AAC PES did not start with ADTS header,offset:' + offset;\n fatal = false;\n } else {\n reason = 'no ADTS header found in AAC PES';\n fatal = true;\n }\n this.observer.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.FRAG_PARSING_ERROR, fatal: fatal, reason: reason });\n if (fatal) {\n return;\n }\n }\n this.audioConfig = config = this.audioConfig || _adts2.default.getAudioConfig(this.observer, data, offset, audioCodec, this.config);\n if (config && (track.audiosamplerate !== config.samplerate || track.codec !== config.codec)) {\n track.config = config.config;\n track.audiosamplerate = config.samplerate;\n track.channelCount = config.channelCount;\n track.codec = config.codec;\n track.duration = duration;\n _logger.logger.log('parsed codec:' + track.codec + ',rate:' + config.samplerate + ',nb channel:' + config.channelCount);\n }\n frameIndex = 0;\n frameDuration = 1024 * 90000 / track.audiosamplerate;\n\n // if last AAC frame is overflowing, we should ensure timestamps are contiguous:\n // first sample PTS should be equal to last sample PTS + frameDuration\n if (aacOverFlow && aacLastPTS) {\n var newPTS = aacLastPTS + frameDuration;\n if (Math.abs(newPTS - pts) > 1) {\n _logger.logger.log('AAC: align PTS for overlapping frames by ' + Math.round((newPTS - pts) / 90));\n pts = newPTS;\n }\n }\n\n while (offset + 5 < len) {\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n headerLength = !!(data[offset + 1] & 0x01) ? 7 : 9;\n // retrieve frame size\n frameLength = (data[offset + 3] & 0x03) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 0xE0) >>> 5;\n frameLength -= headerLength;\n //stamp = pes.pts;\n\n if (frameLength > 0 && offset + headerLength + frameLength <= len) {\n stamp = pts + frameIndex * frameDuration;\n //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n aacSample = { unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp };\n track.samples.push(aacSample);\n track.len += frameLength;\n offset += frameLength + headerLength;\n frameIndex++;\n // look for ADTS header (0xFFFx)\n for (; offset < len - 1; offset++) {\n if (data[offset] === 0xff && (data[offset + 1] & 0xf0) === 0xf0) {\n break;\n }\n }\n } else {\n break;\n }\n }\n if (offset < len) {\n aacOverFlow = data.subarray(offset, len);\n //logger.log(`AAC: overflow detected:${len-offset}`);\n } else {\n aacOverFlow = null;\n }\n this.aacOverFlow = aacOverFlow;\n this.aacLastPTS = stamp;\n }\n }, {\n key: '_parseMPEGPES',\n value: function _parseMPEGPES(pes) {\n var data = pes.data;\n var pts = pes.pts;\n var length = data.length;\n var frameIndex = 0;\n var offset = 0;\n var parsed;\n\n while (offset < length && (parsed = this._parseMpeg(data, offset, length, frameIndex++, pts)) > 0) {\n offset += parsed;\n }\n }\n }, {\n key: '_onMpegFrame',\n value: function _onMpegFrame(data, bitRate, sampleRate, channelCount, frameIndex, pts) {\n var frameDuration = 1152 / sampleRate * 1000;\n var stamp = pts + frameIndex * frameDuration;\n var track = this._aacTrack;\n\n track.config = [];\n track.channelCount = channelCount;\n track.audiosamplerate = sampleRate;\n track.duration = this._duration;\n track.samples.push({ unit: data, pts: stamp, dts: stamp });\n track.len += data.length;\n }\n }, {\n key: '_onMpegNoise',\n value: function _onMpegNoise(data) {\n _logger.logger.warn('mpeg audio has noise: ' + data.length + ' bytes');\n }\n }, {\n key: '_parseMpeg',\n value: function _parseMpeg(data, start, end, frameIndex, pts) {\n var BitratesMap = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];\n var SamplingRateMap = [44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000];\n\n if (start + 2 > end) {\n return -1; // we need at least 2 bytes to detect sync pattern\n }\n if (data[start] === 0xFF || (data[start + 1] & 0xE0) === 0xE0) {\n // Using http://www.datavoyage.com/mpgscript/mpeghdr.htm as a reference\n if (start + 24 > end) {\n return -1;\n }\n var headerB = data[start + 1] >> 3 & 3;\n var headerC = data[start + 1] >> 1 & 3;\n var headerE = data[start + 2] >> 4 & 15;\n var headerF = data[start + 2] >> 2 & 3;\n var headerG = !!(data[start + 2] & 2);\n if (headerB !== 1 && headerE !== 0 && headerE !== 15 && headerF !== 3) {\n var columnInBitrates = headerB === 3 ? 3 - headerC : headerC === 3 ? 3 : 4;\n var bitRate = BitratesMap[columnInBitrates * 14 + headerE - 1] * 1000;\n var columnInSampleRates = headerB === 3 ? 0 : headerB === 2 ? 1 : 2;\n var sampleRate = SamplingRateMap[columnInSampleRates * 3 + headerF];\n var padding = headerG ? 1 : 0;\n var channelCount = data[start + 3] >> 6 === 3 ? 1 : 2; // If bits of channel mode are `11` then it is a single channel (Mono)\n var frameLength = headerC === 3 ? (headerB === 3 ? 12 : 6) * bitRate / sampleRate + padding << 2 : (headerB === 3 ? 144 : 72) * bitRate / sampleRate + padding | 0;\n if (start + frameLength > end) {\n return -1;\n }\n if (this._onMpegFrame) {\n this._onMpegFrame(data.subarray(start, start + frameLength), bitRate, sampleRate, channelCount, frameIndex, pts);\n }\n return frameLength;\n }\n }\n // noise or ID3, trying to skip\n var offset = start + 2;\n while (offset < end) {\n if (data[offset - 1] === 0xFF && (data[offset] & 0xE0) === 0xE0) {\n // sync pattern is found\n if (this._onMpegNoise) {\n this._onMpegNoise(data.subarray(start, offset - 1));\n }\n return offset - start - 1;\n }\n offset++;\n }\n return -1;\n }\n }, {\n key: '_parseID3PES',\n value: function _parseID3PES(pes) {\n this._id3Track.samples.push(pes);\n }\n }], [{\n key: 'probe',\n value: function probe(data) {\n // a TS fragment should contain at least 3 TS packets, a PAT, a PMT, and one PID, each starting with 0x47\n return data.length >= 3 * 188 && data[0] === 0x47 && data[188] === 0x47 && data[2 * 188] === 0x47;\n }\n }]);\n\n return TSDemuxer;\n}();\n\nexports.default = TSDemuxer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar ErrorTypes = exports.ErrorTypes = {\n // Identifier for a network error (loading error / timeout ...)\n NETWORK_ERROR: 'networkError',\n // Identifier for a media Error (video/parsing/mediasource error)\n MEDIA_ERROR: 'mediaError',\n // Identifier for all other errors\n OTHER_ERROR: 'otherError'\n};\n\nvar ErrorDetails = exports.ErrorDetails = {\n // Identifier for a manifest load error - data: { url : faulty URL, response : XHR response}\n MANIFEST_LOAD_ERROR: 'manifestLoadError',\n // Identifier for a manifest load timeout - data: { url : faulty URL, response : XHR response}\n MANIFEST_LOAD_TIMEOUT: 'manifestLoadTimeOut',\n // Identifier for a manifest parsing error - data: { url : faulty URL, reason : error reason}\n MANIFEST_PARSING_ERROR: 'manifestParsingError',\n // Identifier for a manifest with only incompatible codecs error - data: { url : faulty URL, reason : error reason}\n MANIFEST_INCOMPATIBLE_CODECS_ERROR: 'manifestIncompatibleCodecsError',\n // Identifier for playlist load error - data: { url : faulty URL, response : XHR response}\n LEVEL_LOAD_ERROR: 'levelLoadError',\n // Identifier for playlist load timeout - data: { url : faulty URL, response : XHR response}\n LEVEL_LOAD_TIMEOUT: 'levelLoadTimeOut',\n // Identifier for a level switch error - data: { level : faulty level Id, event : error description}\n LEVEL_SWITCH_ERROR: 'levelSwitchError',\n // Identifier for fragment load error - data: { frag : fragment object, response : XHR response}\n FRAG_LOAD_ERROR: 'fragLoadError',\n // Identifier for fragment loop loading error - data: { frag : fragment object}\n FRAG_LOOP_LOADING_ERROR: 'fragLoopLoadingError',\n // Identifier for fragment load timeout error - data: { frag : fragment object}\n FRAG_LOAD_TIMEOUT: 'fragLoadTimeOut',\n // Identifier for a fragment decryption error event - data: parsing error description\n FRAG_DECRYPT_ERROR: 'fragDecryptError',\n // Identifier for a fragment parsing error event - data: parsing error description\n FRAG_PARSING_ERROR: 'fragParsingError',\n // Identifier for decrypt key load error - data: { frag : fragment object, response : XHR response}\n KEY_LOAD_ERROR: 'keyLoadError',\n // Identifier for decrypt key load timeout error - data: { frag : fragment object}\n KEY_LOAD_TIMEOUT: 'keyLoadTimeOut',\n // Triggered when an exception occurs while adding a sourceBuffer to MediaSource - data : { err : exception , mimeType : mimeType }\n BUFFER_ADD_CODEC_ERROR: 'bufferAddCodecError',\n // Identifier for a buffer append error - data: append error description\n BUFFER_APPEND_ERROR: 'bufferAppendError',\n // Identifier for a buffer appending error event - data: appending error description\n BUFFER_APPENDING_ERROR: 'bufferAppendingError',\n // Identifier for a buffer stalled error event\n BUFFER_STALLED_ERROR: 'bufferStalledError',\n // Identifier for a buffer full event\n BUFFER_FULL_ERROR: 'bufferFullError',\n // Identifier for a buffer seek over hole event\n BUFFER_SEEK_OVER_HOLE: 'bufferSeekOverHole',\n // Identifier for a buffer nudge on stall (playback is stuck although currentTime is in a buffered area)\n BUFFER_NUDGE_ON_STALL: 'bufferNudgeOnStall',\n // Identifier for an internal exception happening inside hls.js while handling an event\n INTERNAL_EXCEPTION: 'internalException'\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /*\n *\n * All objects in the event handling chain should inherit from this class\n *\n */\n\nvar _logger = require('./utils/logger');\n\nvar _errors = require('./errors');\n\nvar _events = require('./events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EventHandler = function () {\n function EventHandler(hls) {\n _classCallCheck(this, EventHandler);\n\n this.hls = hls;\n this.onEvent = this.onEvent.bind(this);\n\n for (var _len = arguments.length, events = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n events[_key - 1] = arguments[_key];\n }\n\n this.handledEvents = events;\n this.useGenericHandler = true;\n\n this.registerListeners();\n }\n\n _createClass(EventHandler, [{\n key: 'destroy',\n value: function destroy() {\n this.unregisterListeners();\n }\n }, {\n key: 'isEventHandler',\n value: function isEventHandler() {\n return _typeof(this.handledEvents) === 'object' && this.handledEvents.length && typeof this.onEvent === 'function';\n }\n }, {\n key: 'registerListeners',\n value: function registerListeners() {\n if (this.isEventHandler()) {\n this.handledEvents.forEach(function (event) {\n if (event === 'hlsEventGeneric') {\n throw new Error('Forbidden event name: ' + event);\n }\n this.hls.on(event, this.onEvent);\n }.bind(this));\n }\n }\n }, {\n key: 'unregisterListeners',\n value: function unregisterListeners() {\n if (this.isEventHandler()) {\n this.handledEvents.forEach(function (event) {\n this.hls.off(event, this.onEvent);\n }.bind(this));\n }\n }\n\n /**\n * arguments: event (string), data (any)\n */\n\n }, {\n key: 'onEvent',\n value: function onEvent(event, data) {\n this.onEventGeneric(event, data);\n }\n }, {\n key: 'onEventGeneric',\n value: function onEventGeneric(event, data) {\n var eventToFunction = function eventToFunction(event, data) {\n var funcName = 'on' + event.replace('hls', '');\n if (typeof this[funcName] !== 'function') {\n throw new Error('Event ' + event + ' has no generic handler in this ' + this.constructor.name + ' class (tried ' + funcName + ')');\n }\n return this[funcName].bind(this, data);\n };\n try {\n eventToFunction.call(this, event, data).call();\n } catch (err) {\n _logger.logger.error('internal error happened while processing ' + event + ':' + err.stack);\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.OTHER_ERROR, details: _errors.ErrorDetails.INTERNAL_EXCEPTION, fatal: false, event: event, err: err });\n }\n }\n }]);\n\n return EventHandler;\n}();\n\nexports.default = EventHandler;","'use strict';\n\nmodule.exports = {\n // fired by api when new player instance created - data: { instance }\n PLAYER_CREATED: 'hlsPlayerCreated',\n // fired by api when player instance gets destroyed - data: { instance }\n PLAYER_DESTROYED: 'hlsPlayerDestroyed',\n // fired before MediaSource is attaching to media element - data: { media }\n MEDIA_ATTACHING: 'hlsMediaAttaching',\n // fired when MediaSource has been succesfully attached to media element - data: { }\n MEDIA_ATTACHED: 'hlsMediaAttached',\n // fired before detaching MediaSource from media element - data: { }\n MEDIA_DETACHING: 'hlsMediaDetaching',\n // fired when MediaSource has been detached from media element - data: { }\n MEDIA_DETACHED: 'hlsMediaDetached',\n // fired when we buffer is going to be resetted\n BUFFER_RESET: 'hlsBufferReset',\n // fired when we know about the codecs that we need buffers for to push into - data: {tracks : { container, codec, levelCodec, initSegment, metadata }}\n BUFFER_CODECS: 'hlsBufferCodecs',\n // fired when we append a segment to the buffer - data: { segment: segment object }\n BUFFER_APPENDING: 'hlsBufferAppending',\n // fired when the stream is finished and we want to notify the media buffer that there will be no more data\n BUFFER_EOS: 'hlsBufferEos',\n // fired when the media buffer should be flushed - data {startOffset, endOffset}\n BUFFER_FLUSHING: 'hlsBufferFlushing',\n // fired when the media has been flushed\n BUFFER_FLUSHED: 'hlsBufferFlushed',\n // fired to signal that a manifest loading starts - data: { url : manifestURL}\n MANIFEST_LOADING: 'hlsManifestLoading',\n // fired after manifest has been loaded - data: { levels : [available quality levels] , url : manifestURL, stats : { trequest, tfirst, tload, mtime}}\n MANIFEST_LOADED: 'hlsManifestLoaded',\n // fired when master playlist have been replaced without affecting the playback - data: { levels : [available quality levels] , url : manifestURL }\n MANIFEST_REPLACE: 'hlsManifestReplace',\n // fired after manifest has been parsed - data: { levels : [available quality levels] , firstLevel : index of first quality level appearing in Manifest}\n MANIFEST_PARSED: 'hlsManifestParsed',\n // fired when a level playlist loading starts - data: { url : level URL level : id of level being loaded}\n LEVEL_LOADING: 'hlsLevelLoading',\n // fired when a level playlist loading finishes - data: { details : levelDetails object, level : id of loaded level, stats : { trequest, tfirst, tload, mtime} }\n LEVEL_LOADED: 'hlsLevelLoaded',\n // fired when a level's details have been replaced without affecting the playback. - data: { details : levelDetails object, level : id of updated level }\n LEVEL_REPLACE: 'hlsLevelReplace',\n // fired when a level's details have been updated based on previous details, after it has been loaded. - data: { details : levelDetails object, level : id of updated level }\n LEVEL_UPDATED: 'hlsLevelUpdated',\n // fired when a level's PTS information has been updated after parsing a fragment - data: { details : levelDetails object, level : id of updated level, drift: PTS drift observed when parsing last fragment }\n LEVEL_PTS_UPDATED: 'hlsLevelPtsUpdated',\n // fired when a level switch is requested - data: { level : id of new level }\n LEVEL_SWITCH: 'hlsLevelSwitch',\n // fired when a fragment loading starts - data: { frag : fragment object}\n FRAG_LOADING: 'hlsFragLoading',\n // fired when a fragment loading is progressing - data: { frag : fragment object, { trequest, tfirst, loaded}}\n FRAG_LOAD_PROGRESS: 'hlsFragLoadProgress',\n // Identifier for fragment load aborting for emergency switch down - data: {frag : fragment object}\n FRAG_LOAD_EMERGENCY_ABORTED: 'hlsFragLoadEmergencyAborted',\n // fired when a fragment chunk loading is completed - data: { frag : fragment object, payload : fragment payload}\n FRAG_CHUNK_LOADED: 'hlsFragChunkLoaded',\n // fired when a fragment loading is completed - data: { frag : fragment object, payload : fragment payload, stats : { trequest, tfirst, tload, length}}\n FRAG_LOADED: 'hlsFragLoaded',\n // fired when Init Segment has been extracted from fragment - data: { moov : moov MP4 box, codecs : codecs found while parsing fragment}\n FRAG_PARSING_INIT_SEGMENT: 'hlsFragParsingInitSegment',\n // fired when parsing sei text is completed - data: { samples : [ sei samples pes ] }\n FRAG_PARSING_USERDATA: 'hlsFragParsingUserdata',\n // fired when parsing id3 is completed - data: { samples : [ id3 samples pes ] }\n FRAG_PARSING_METADATA: 'hlsFragParsingMetadata',\n // fired when data have been extracted from fragment - data: { data1 : moof MP4 box or TS fragments, data2 : mdat MP4 box or null}\n FRAG_PARSING_DATA: 'hlsFragParsingData',\n // fired when fragment parsing is completed - data: undefined\n FRAG_PARSED: 'hlsFragParsed',\n // fired when there are skipped frames in the beginning of frag\n FRAG_STATISTICS: 'hlsFragStatistics',\n // fired when fragment remuxed MP4 boxes have all been appended into SourceBuffer - data: { frag : fragment object, stats : { trequest, tfirst, tload, tparsed, tbuffered, length} }\n FRAG_BUFFERED: 'hlsFragBuffered',\n // fired when fragment matching with current media position is changing - data : { frag : fragment object }\n FRAG_CHANGED: 'hlsFragChanged',\n // fired when fragment chunks passed to media buffer\n FRAG_APPENDING: 'hlsFragAppending',\n // fired when fragment appended to media buffer\n FRAG_APPENDED: 'hlsFragAppended',\n // Identifier for a FPS drop event - data: {curentDropped, currentDecoded, totalDroppedFrames}\n FPS_DROP: 'hlsFpsDrop',\n //triggered when FPS drop triggers auto level capping - data: {level, droppedlevel}\n FPS_DROP_LEVEL_CAPPING: 'hlsFpsDropLevelCapping',\n // Identifier for an error event - data: { type : error type, details : error details, fatal : if true, hls.js cannot/will not try to recover, if false, hls.js will try to recover,other error specific data}\n ERROR: 'hlsError',\n // fired when hls.js instance starts destroying. Different from MEDIA_DETACHED as one could want to detach and reattach a media to the instance of hls.js to handle mid-rolls for example\n DESTROYING: 'hlsDestroying',\n // fired when a decrypt key loading starts - data: { frag : fragment object}\n KEY_LOADING: 'hlsKeyLoading',\n // fired when a decrypt key loading is completed - data: { frag : fragment object, payload : key payload, stats : { trequest, tfirst, tload, length}}\n KEY_LOADED: 'hlsKeyLoaded',\n // fired upon stream controller state transitions - data: {previousState, nextState}\n STREAM_STATE_TRANSITION: 'hlsStreamStateTransition',\n DEMUXER_QUEUE_EMPTY: 'hlsDemuxerQueueEmpty',\n // fired when playback is stalled on low/high buffer\n BUF_STATISTICS: 'hlsBufStatistics'\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * AAC helper\n */\n\nvar AAC = function () {\n function AAC() {\n _classCallCheck(this, AAC);\n }\n\n _createClass(AAC, null, [{\n key: \"getSilentFrame\",\n value: function getSilentFrame(channelCount) {\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);\n } else if (channelCount === 2) {\n return new Uint8Array([0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80]);\n } else if (channelCount === 3) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x8e]);\n } else if (channelCount === 4) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38]);\n } else if (channelCount === 5) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38]);\n } else if (channelCount === 6) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2, 0x00, 0x20, 0x08, 0xe0]);\n }\n return null;\n }\n }]);\n\n return AAC;\n}();\n\nexports.default = AAC;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Buffer Helper class, providing methods dealing buffer length retrieval\n*/\n\nvar BufferHelper = function () {\n function BufferHelper() {\n _classCallCheck(this, BufferHelper);\n }\n\n _createClass(BufferHelper, null, [{\n key: \"isBuffered\",\n value: function isBuffered(media, position) {\n if (media) {\n var buffered = media.buffered;\n for (var i = 0; i < buffered.length; i++) {\n if (position >= buffered.start(i) && position <= buffered.end(i)) {\n return true;\n }\n }\n }\n return false;\n }\n }, {\n key: \"bufferInfo\",\n value: function bufferInfo(media, pos, maxHoleDuration) {\n if (media) {\n var vbuffered = media.buffered,\n buffered = [],\n i;\n for (i = 0; i < vbuffered.length; i++) {\n buffered.push({ start: vbuffered.start(i), end: vbuffered.end(i) });\n }\n return this.bufferedInfo(buffered, pos, maxHoleDuration);\n } else {\n return { len: 0, start: 0, end: 0, nextStart: undefined };\n }\n }\n }, {\n key: \"bufferedInfo\",\n value: function bufferedInfo(buffered, pos, maxHoleDuration) {\n var buffered2 = [],\n\n // bufferStart and bufferEnd are buffer boundaries around current video position\n bufferLen,\n bufferStart,\n bufferEnd,\n bufferStartNext,\n i;\n // sort on buffer.start/smaller end (IE does not always return sorted buffered range)\n buffered.sort(function (a, b) {\n var diff = a.start - b.start;\n if (diff) {\n return diff;\n } else {\n return b.end - a.end;\n }\n });\n // there might be some small holes between buffer time range\n // consider that holes smaller than maxHoleDuration are irrelevant and build another\n // buffer time range representations that discards those holes\n for (i = 0; i < buffered.length; i++) {\n var buf2len = buffered2.length;\n if (buf2len) {\n var buf2end = buffered2[buf2len - 1].end;\n // if small hole (value between 0 or maxHoleDuration ) or overlapping (negative)\n if (buffered[i].start - buf2end < maxHoleDuration) {\n // merge overlapping time ranges\n // update lastRange.end only if smaller than item.end\n // e.g. [ 1, 15] with [ 2,8] => [ 1,15] (no need to modify lastRange.end)\n // whereas [ 1, 8] with [ 2,15] => [ 1,15] ( lastRange should switch from [1,8] to [1,15])\n if (buffered[i].end > buf2end) {\n buffered2[buf2len - 1].end = buffered[i].end;\n }\n } else {\n // big hole\n buffered2.push(buffered[i]);\n }\n } else {\n // first value\n buffered2.push(buffered[i]);\n }\n }\n for (i = 0, bufferLen = 0, bufferStart = bufferEnd = pos; i < buffered2.length; i++) {\n var start = buffered2[i].start,\n end = buffered2[i].end;\n //logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));\n if (pos + maxHoleDuration >= start && pos < end) {\n // play position is inside this buffer TimeRange, retrieve end of buffer position and buffer length\n bufferStart = start;\n bufferEnd = end;\n bufferLen = bufferEnd - pos;\n } else if (pos + maxHoleDuration < start) {\n bufferStartNext = start;\n break;\n }\n }\n return { len: bufferLen, start: bufferStart, end: bufferEnd, nextStart: bufferStartNext };\n }\n }]);\n\n return BufferHelper;\n}();\n\nexports.default = BufferHelper;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * Level Helper class, providing methods dealing with playlist sliding and drift\n */\n\nvar _logger = require('../utils/logger');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LevelHelper = function () {\n function LevelHelper() {\n _classCallCheck(this, LevelHelper);\n }\n\n _createClass(LevelHelper, null, [{\n key: 'isLive',\n value: function isLive(level, levels) {\n return !!(level !== undefined && levels && levels[level] && levels[level].details && levels[level].details.live);\n }\n }, {\n key: 'canMerge',\n value: function canMerge(oldDetails, newDetails) {\n var _LevelHelper$probeDet = LevelHelper.probeDetails(oldDetails, newDetails),\n start = _LevelHelper$probeDet.start,\n end = _LevelHelper$probeDet.end;\n\n return end >= start;\n }\n }, {\n key: 'probeDetails',\n value: function probeDetails(oldDetails, newDetails) {\n function getTimes(details) {\n var startTS = 0,\n endTS = 0,\n i = 0;\n for (; i < details.fragments.length; i++) {\n if (details.fragments[i].programDateTime) {\n break;\n }\n }\n if (i !== details.fragments.length) {\n startTS = endTS = details.fragments[i].programDateTime.getTime();\n for (var j = 0; j < details.fragments.length - 1; j++) {\n if (j < i) {\n startTS -= details.fragments[j].duration * 1000;\n } else {\n endTS += details.fragments[j].duration * 1000;\n }\n }\n return { start: startTS, end: endTS };\n }\n }\n var start = Math.max(oldDetails.startSN, newDetails.startSN) - newDetails.startSN;\n var end = Math.min(oldDetails.endSN, newDetails.endSN) - newDetails.startSN;\n var delta = newDetails.startSN - oldDetails.startSN;\n if (end >= start) {\n return { start: start, end: end, delta: delta };\n }\n var oldTimes = getTimes(oldDetails),\n newTimes = getTimes(newDetails);\n if (oldTimes && newTimes && oldTimes.start <= newTimes.start && oldTimes.end >= newTimes.start) {\n start = delta = 0;\n end = Math.min(newDetails.fragments.length, oldDetails.fragments.length) - 1;\n var ts = oldTimes.start;\n // 0.1 sec grace\n while (newTimes.start - ts > 100) {\n ts += oldDetails.fragments[delta++].duration * 1000;\n end--;\n }\n return { start: start, end: end, delta: delta };\n }\n return { start: 1, end: 0, delta: 0 };\n }\n }, {\n key: 'adjustSliding',\n value: function adjustSliding(fragments, sliding) {\n for (var i = 0; i < fragments.length; i++) {\n fragments[i].start += sliding;\n }\n }\n }, {\n key: 'mergeDetails',\n value: function mergeDetails(oldDetails, newDetails) {\n var oldfragments = oldDetails.fragments,\n newfragments = newDetails.fragments,\n ccOffset = 0,\n PTSFrag;\n\n var _LevelHelper$probeDet2 = LevelHelper.probeDetails(oldDetails, newDetails),\n start = _LevelHelper$probeDet2.start,\n end = _LevelHelper$probeDet2.end,\n delta = _LevelHelper$probeDet2.delta;\n\n // check if old/new playlists have fragments in common\n\n\n if (end < start) {\n newDetails.PTSKnown = false;\n return;\n }\n // loop through overlapping SN and update startPTS , cc, and duration if any found\n for (var i = start; i <= end; i++) {\n var oldFrag = oldfragments[delta + i],\n newFrag = newfragments[i];\n ccOffset = oldFrag.cc - newFrag.cc;\n if (!isNaN(oldFrag.startPTS)) {\n newFrag.start = newFrag.startPTS = oldFrag.startPTS;\n newFrag.endPTS = oldFrag.endPTS;\n newFrag.duration = oldFrag.duration;\n newFrag.lastGop = oldFrag.lastGop;\n PTSFrag = newFrag;\n }\n if (oldFrag.firstGop) {\n newFrag.firstGop = oldFrag.firstGop;\n }\n }\n\n if (ccOffset) {\n _logger.logger.log('discontinuity sliding from playlist, take drift into account');\n for (i = 0; i < newfragments.length; i++) {\n newfragments[i].cc += ccOffset;\n }\n }\n\n // if at least one fragment contains PTS info, recompute PTS information for all fragments\n if (PTSFrag) {\n LevelHelper.updateFragPTS(newDetails, PTSFrag.sn, PTSFrag.startPTS, PTSFrag.endPTS, PTSFrag.lastGop);\n } else {\n // ensure that delta is within oldfragments range\n // also adjust sliding in case delta is 0 (we could have old=[50-60] and new=old=[50-61])\n // in that case we also need to adjust start offset of all fragments\n if (delta >= 0 && delta < oldfragments.length) {\n // adjust start by sliding offset\n this.adjustSliding(newfragments, oldfragments[delta].start);\n }\n }\n // if we are here, it means we have fragments overlapping between\n // old and new level. reliable PTS info is thus relying on old level\n newDetails.PTSKnown = oldDetails.PTSKnown;\n return;\n }\n }, {\n key: 'updateFragPTS',\n value: function updateFragPTS(details, sn, startPTS, endPTS, lastGop) {\n var fragIdx, fragments, frag, i;\n // exit if sn out of range\n if (sn < details.startSN || sn > details.endSN) {\n return 0;\n }\n fragIdx = sn - details.startSN;\n fragments = details.fragments;\n frag = fragments[fragIdx];\n if (!isNaN(frag.startPTS)) {\n startPTS = Math.min(startPTS, frag.startPTS);\n endPTS = Math.max(endPTS, frag.endPTS);\n }\n\n var drift = startPTS - frag.start;\n\n frag.start = frag.startPTS = startPTS;\n frag.endPTS = endPTS;\n frag.duration = endPTS - startPTS;\n if (lastGop) {\n frag.lastGop = lastGop;\n }\n\n // adjust fragment PTS/duration from seqnum-1 to frag 0\n for (i = fragIdx; i > 0; i--) {\n LevelHelper.updatePTS(fragments, i, i - 1);\n }\n\n // adjust fragment PTS/duration from seqnum to last frag\n for (i = fragIdx; i < fragments.length - 1; i++) {\n LevelHelper.updatePTS(fragments, i, i + 1);\n }\n details.PTSKnown = true;\n //logger.log(` frag start/end:${startPTS.toFixed(3)}/${endPTS.toFixed(3)}`);\n\n return drift;\n }\n }, {\n key: 'updatePTS',\n value: function updatePTS(fragments, fromIdx, toIdx) {\n var fragFrom = fragments[fromIdx],\n fragTo = fragments[toIdx],\n fragToPTS = fragTo.startPTS;\n // if we know startPTS[toIdx]\n if (!isNaN(fragToPTS)) {\n // update fragment duration.\n // it helps to fix drifts between playlist reported duration and fragment real duration\n if (toIdx > fromIdx) {\n fragFrom.duration = fragToPTS - fragFrom.start;\n if (fragFrom.duration < 0) {\n _logger.logger.warn('negative duration computed for frag ' + fragFrom.sn + ',level ' + fragFrom.level + ', there should be some duration drift between playlist and fragment!');\n }\n } else {\n fragTo.duration = fragFrom.start - fragToPTS;\n if (fragTo.duration < 0) {\n _logger.logger.warn('negative duration computed for frag ' + fragTo.sn + ',level ' + fragTo.level + ', there should be some duration drift between playlist and fragment!');\n }\n }\n } else {\n // we dont know startPTS[toIdx]\n if (toIdx > fromIdx) {\n fragTo.start = fragFrom.start + fragFrom.duration;\n } else {\n fragTo.start = fragFrom.start - fragTo.duration;\n }\n }\n if (toIdx > fromIdx && fragFrom.lastGop) {\n fragTo.firstGop = fragFrom.lastGop;\n }\n }\n }]);\n\n return LevelHelper;\n}();\n\nexports.default = LevelHelper;","/**\n * HLS interface\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('./events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _errors = require('./errors');\n\nvar _playlistLoader = require('./loader/playlist-loader');\n\nvar _playlistLoader2 = _interopRequireDefault(_playlistLoader);\n\nvar _fragmentLoader = require('./loader/fragment-loader');\n\nvar _fragmentLoader2 = _interopRequireDefault(_fragmentLoader);\n\nvar _abrController = require('./controller/abr-controller');\n\nvar _abrController2 = _interopRequireDefault(_abrController);\n\nvar _bufferController = require('./controller/buffer-controller');\n\nvar _bufferController2 = _interopRequireDefault(_bufferController);\n\nvar _capLevelController = require('./controller/cap-level-controller');\n\nvar _capLevelController2 = _interopRequireDefault(_capLevelController);\n\nvar _streamController = require('./controller/stream-controller');\n\nvar _streamController2 = _interopRequireDefault(_streamController);\n\nvar _levelController = require('./controller/level-controller');\n\nvar _levelController2 = _interopRequireDefault(_levelController);\n\nvar _timelineController = require('./controller/timeline-controller');\n\nvar _timelineController2 = _interopRequireDefault(_timelineController);\n\nvar _fpsController = require('./controller/fps-controller');\n\nvar _fpsController2 = _interopRequireDefault(_fpsController);\n\nvar _logger = require('./utils/logger');\n\nvar _xhrLoader = require('./utils/xhr-loader');\n\nvar _xhrLoader2 = _interopRequireDefault(_xhrLoader);\n\nvar _events3 = require('events');\n\nvar _events4 = _interopRequireDefault(_events3);\n\nvar _keyLoader = require('./loader/key-loader');\n\nvar _keyLoader2 = _interopRequireDefault(_keyLoader);\n\nvar _cues = require('./utils/cues');\n\nvar _cues2 = _interopRequireDefault(_cues);\n\nvar _browser = require('./utils/browser');\n\nvar _browser2 = _interopRequireDefault(_browser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Hls = function () {\n _createClass(Hls, null, [{\n key: 'isSupported',\n value: function isSupported() {\n // Opera Mini for Android with enabled optimizations breaks m3u8 files\n function isOperaMini() {\n var checkOpera = /\\bOPR\\b\\/(\\d+)/i;\n var checkChrome = / Chrome\\/(\\d+)(\\.\\d+)+.* Safari\\/\\d+(\\.\\d+)+/;\n var opera,\n ua = window.navigator && window.navigator.userAgent;\n var res = checkChrome.exec(ua);\n if (res) {\n opera = checkOpera.exec(ua);\n return ua.match(/Android/) && (opera ? opera[1] : undefined) < 25;\n }\n return false;\n }\n if (isOperaMini()) {\n return false;\n }\n\n return window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"');\n }\n }, {\n key: 'isIe',\n value: function isIe() {\n return _browser2.default.init().isIe;\n }\n }, {\n key: 'version',\n get: function get() {\n // replaced with browserify-versionify transform\n return '1.0.70';\n }\n }, {\n key: 'Events',\n get: function get() {\n return _events2.default;\n }\n }, {\n key: 'ErrorTypes',\n get: function get() {\n return _errors.ErrorTypes;\n }\n }, {\n key: 'ErrorDetails',\n get: function get() {\n return _errors.ErrorDetails;\n }\n }, {\n key: 'DefaultConfig',\n get: function get() {\n if (!Hls.defaultConfig) {\n Hls.defaultConfig = {\n autoStartLoad: true,\n debug: false,\n capLevelOnFPSDrop: false,\n capLevelToPlayerSize: false,\n maxBufferLength: 40,\n maxBufferSize: 60 * 1000 * 1000,\n maxBufferHole: 0.5,\n maxSeekHole: 2,\n lowBufferWatchdogPeriod: 0,\n highBufferWatchdogPeriod: 3,\n nudgeOffset: 0.1,\n nudgeMaxRetry: 5,\n maxFragLookUpTolerance: 0.2,\n liveSyncDurationCount: 3,\n liveMaxLatencyDurationCount: Infinity,\n liveSyncDuration: undefined,\n liveMaxLatencyDuration: undefined,\n maxMaxBufferLength: 40,\n enableWorker: !Hls.isIe(),\n enableSoftwareAES: true,\n enableSmoothStreaming: true,\n manifestLoadingTimeOut: 20000,\n manifestLoadingMaxRetry: 4,\n manifestLoadingRetryDelay: 1000,\n levelLoadingTimeOut: 20000,\n levelLoadingMaxRetry: 4,\n levelLoadingRetryDelay: 1000,\n fragLoadingTimeOut: 20000,\n fragLoadingMaxRetry: 6,\n fragLoadingRetryDelay: 1000,\n fragLoadingLoopThreshold: 1000,\n clearLevelDetailsOnSwitching: false,\n startFragPrefetch: false,\n fpsDroppedMonitoringPeriod: 5000,\n fpsDroppedMonitoringThreshold: 0.2,\n appendErrorMaxRetry: 3,\n loader: _xhrLoader2.default,\n fLoader: undefined,\n pLoader: undefined,\n abrController: _abrController2.default,\n bufferController: _bufferController2.default,\n capLevelController: _capLevelController2.default,\n fpsController: _fpsController2.default,\n streamController: _streamController2.default,\n timelineController: _timelineController2.default,\n cueHandler: _cues2.default,\n enableCEA708Captions: true,\n enableMP2TPassThrough: false,\n stretchShortVideoTrack: false,\n browser: _browser2.default.init()\n };\n }\n return Hls.defaultConfig;\n },\n set: function set(defaultConfig) {\n Hls.defaultConfig = defaultConfig;\n }\n }]);\n\n function Hls() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Hls);\n\n var defaultConfig = Hls.DefaultConfig;\n\n if ((config.liveSyncDurationCount || config.liveMaxLatencyDurationCount) && (config.liveSyncDuration || config.liveMaxLatencyDuration)) {\n throw new Error('Illegal hls.js config: don\\'t mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration');\n }\n\n for (var prop in defaultConfig) {\n if (prop in config) {\n continue;\n }\n config[prop] = defaultConfig[prop];\n }\n\n if (config.liveMaxLatencyDurationCount !== undefined && config.liveMaxLatencyDurationCount <= config.liveSyncDurationCount) {\n throw new Error('Illegal hls.js config: \"liveMaxLatencyDurationCount\" must be gt \"liveSyncDurationCount\"');\n }\n\n if (config.liveMaxLatencyDuration !== undefined && (config.liveMaxLatencyDuration <= config.liveSyncDuration || config.liveSyncDuration === undefined)) {\n throw new Error('Illegal hls.js config: \"liveMaxLatencyDuration\" must be gt \"liveSyncDuration\"');\n }\n\n (0, _logger.enableLogs)(config.debug, this);\n this.config = config;\n // observer setup\n var observer = this.observer = new _events4.default();\n observer.trigger = function trigger(event) {\n for (var _len = arguments.length, data = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n data[_key - 1] = arguments[_key];\n }\n\n observer.emit.apply(observer, [event, event].concat(data));\n };\n\n observer.off = function off(event) {\n for (var _len2 = arguments.length, data = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n data[_key2 - 1] = arguments[_key2];\n }\n\n observer.removeListener.apply(observer, [event].concat(data));\n };\n this.on = observer.on.bind(observer);\n this.off = observer.off.bind(observer);\n this.trigger = observer.trigger.bind(observer);\n this.playlistLoader = new _playlistLoader2.default(this);\n this.fragmentLoader = new _fragmentLoader2.default(this);\n this.levelController = new _levelController2.default(this);\n this.abrController = new config.abrController(this);\n this.bufferController = new config.bufferController(this);\n this.capLevelController = new config.capLevelController(this);\n this.fpsController = new config.fpsController(this);\n this.streamController = new config.streamController(this);\n this.timelineController = new config.timelineController(this);\n this.keyLoader = new _keyLoader2.default(this);\n Hls.api.players.push(this);\n Hls.api.emit(_events2.default.PLAYER_CREATED, this);\n }\n\n _createClass(Hls, [{\n key: 'destroy',\n value: function destroy() {\n _logger.logger.log('destroy');\n this.trigger(_events2.default.DESTROYING);\n this.detachMedia();\n this.playlistLoader.destroy();\n this.fragmentLoader.destroy();\n this.levelController.destroy();\n this.abrController.destroy();\n this.bufferController.destroy();\n this.capLevelController.destroy();\n this.fpsController.destroy();\n this.streamController.destroy();\n this.timelineController.destroy();\n this.keyLoader.destroy();\n this.url = null;\n this.observer.removeAllListeners();\n var globalId = Hls.api.players.indexOf(this);\n if (globalId < 0) {\n return;\n }\n Hls.api.players.splice(globalId, 1);\n Hls.api.emit(_events2.default.PLAYER_DESTROYED, this);\n }\n }, {\n key: 'attachMedia',\n value: function attachMedia(media) {\n _logger.logger.log('attachMedia');\n this.media = media;\n this.trigger(_events2.default.MEDIA_ATTACHING, { media: media });\n }\n }, {\n key: 'detachMedia',\n value: function detachMedia() {\n _logger.logger.log('detachMedia');\n this.trigger(_events2.default.MEDIA_DETACHING);\n this.media = null;\n }\n }, {\n key: 'loadSource',\n value: function loadSource(url) {\n _logger.logger.log('loadSource:' + url);\n this.url = url;\n // when attaching to a source URL, trigger a playlist load\n this.trigger(_events2.default.MANIFEST_LOADING, { url: url });\n }\n }, {\n key: 'startLoad',\n value: function startLoad() {\n var startPosition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n _logger.logger.log('startLoad(' + startPosition + ')');\n this.levelController.startLoad();\n this.streamController.startLoad(startPosition);\n }\n }, {\n key: 'stopLoad',\n value: function stopLoad(stopDemuxer) {\n _logger.logger.log('stopLoad');\n this.levelController.stopLoad();\n this.streamController.stopLoad(stopDemuxer);\n }\n }, {\n key: 'clearLevelDetails',\n value: function clearLevelDetails() {\n _logger.logger.log('clearing level details');\n this.levelController.clearLevelDetails();\n }\n }, {\n key: 'swapAudioCodec',\n value: function swapAudioCodec() {\n _logger.logger.log('swapAudioCodec');\n this.streamController.swapAudioCodec();\n }\n }, {\n key: 'recoverMediaError',\n value: function recoverMediaError() {\n _logger.logger.log('recoverMediaError');\n var media = this.media;\n this.detachMedia();\n this.attachMedia(media);\n }\n\n /** Return all quality levels **/\n\n }, {\n key: 'setLogs',\n value: function setLogs(debug) {\n (0, _logger.enableLogs)(debug, this);\n }\n }, {\n key: 'isSmoothStreaming',\n value: function isSmoothStreaming() {\n return this.config.enableSmoothStreaming;\n }\n }, {\n key: 'levels',\n get: function get() {\n return this.levelController.levels;\n }\n\n /** Return current playback quality level **/\n\n }, {\n key: 'currentLevel',\n get: function get() {\n return this.streamController.currentLevel;\n }\n\n /* set quality level immediately (-1 for automatic level selection) */\n ,\n set: function set(newLevel) {\n _logger.logger.log('set currentLevel:' + newLevel);\n this.loadLevel = newLevel;\n this.streamController.immediateLevelSwitch();\n }\n\n /** Return next playback quality level (quality level of next fragment) **/\n\n }, {\n key: 'nextLevel',\n get: function get() {\n return this.streamController.nextLevel;\n }\n\n /* set quality level for next fragment (-1 for automatic level selection) */\n ,\n set: function set(newLevel) {\n _logger.logger.log('set nextLevel:' + newLevel);\n this.levelController.manualLevel = newLevel;\n this.streamController.nextLevelSwitch();\n }\n\n /** Return the quality level of current/last loaded fragment **/\n\n }, {\n key: 'loadLevel',\n get: function get() {\n return this.levelController.level;\n }\n\n /* set quality level for current/next loaded fragment (-1 for automatic level selection) */\n ,\n set: function set(newLevel) {\n _logger.logger.log('set loadLevel:' + newLevel);\n this.levelController.manualLevel = newLevel;\n }\n\n /** Return the quality level of next loaded fragment **/\n\n }, {\n key: 'nextLoadLevel',\n get: function get() {\n return this.levelController.nextLoadLevel;\n }\n\n /** set quality level of next loaded fragment **/\n ,\n set: function set(level) {\n this.levelController.nextLoadLevel = level;\n }\n\n /** Return first level (index of first level referenced in manifest)\n **/\n\n }, {\n key: 'firstLevel',\n get: function get() {\n return this.levelController.firstLevel;\n }\n\n /** set first level (index of first level referenced in manifest)\n **/\n ,\n set: function set(newLevel) {\n _logger.logger.log('set firstLevel:' + newLevel);\n this.levelController.firstLevel = newLevel;\n }\n\n /** Return start level (level of first fragment that will be played back)\n if not overrided by user, first level appearing in manifest will be used as start level\n if -1 : automatic start level selection, playback will start from level matching download bandwidth (determined from download of first segment)\n **/\n\n }, {\n key: 'startLevel',\n get: function get() {\n return this.levelController.startLevel;\n }\n\n /** set start level (level of first fragment that will be played back)\n if not overrided by user, first level appearing in manifest will be used as start level\n if -1 : automatic start level selection, playback will start from level matching download bandwidth (determined from download of first segment)\n **/\n ,\n set: function set(newLevel) {\n _logger.logger.log('set startLevel:' + newLevel);\n this.levelController.startLevel = newLevel;\n }\n\n /** Return the capping/max level value that could be used by automatic level selection algorithm **/\n\n }, {\n key: 'autoLevelCapping',\n get: function get() {\n return this.abrController.autoLevelCapping;\n }\n\n /** set the capping/max level value that could be used by automatic level selection algorithm **/\n ,\n set: function set(newLevel) {\n _logger.logger.log('set autoLevelCapping:' + newLevel);\n this.abrController.autoLevelCapping = newLevel;\n }\n\n /* check if we are in automatic level selection mode */\n\n }, {\n key: 'autoLevelEnabled',\n get: function get() {\n return this.levelController.manualLevel === -1;\n }\n\n /* return manual level */\n\n }, {\n key: 'manualLevel',\n get: function get() {\n return this.levelController.manualLevel;\n }\n }, {\n key: 'maxLevelBitrate',\n set: function set(bitrate) {\n this.abrController.maxLevelBitrate = bitrate;\n },\n get: function get() {\n return this.abrController.maxLevelBitrate;\n }\n }]);\n\n return Hls;\n}();\n\nHls.api = new _events4.default();\nHls.api.players = [];\n\nexports.default = Hls;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _errors = require('../errors');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Fragment Loader\n */\n\nvar FragmentLoader = function (_EventHandler) {\n _inherits(FragmentLoader, _EventHandler);\n\n function FragmentLoader(hls) {\n _classCallCheck(this, FragmentLoader);\n\n return _possibleConstructorReturn(this, (FragmentLoader.__proto__ || Object.getPrototypeOf(FragmentLoader)).call(this, hls, _events2.default.FRAG_LOADING));\n }\n\n _createClass(FragmentLoader, [{\n key: 'destroy',\n value: function destroy() {\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n this.firstChunk = true;\n _eventHandler2.default.prototype.destroy.call(this);\n }\n }, {\n key: 'onFragLoading',\n value: function onFragLoading(data) {\n var frag = data.frag;\n this.frag = frag;\n this.frag.loaded = 0;\n this.firstChunk = true;\n var config = this.hls.config;\n frag.loader = this.loader = typeof config.fLoader !== 'undefined' ? new config.fLoader(config) : new config.loader(config);\n this.loader.load(frag.url, 'arraybuffer', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), config.fragLoadingTimeOut, 1, 0, this.loadprogress.bind(this), frag, this.loadchunk.bind(this));\n }\n }, {\n key: 'loadchunk',\n value: function loadchunk(event, stats) {\n var payload = event.currentTarget.response;\n payload.first = this.firstChunk;\n this.firstChunk = false;\n this.hls.trigger(_events2.default.FRAG_CHUNK_LOADED, { payload: payload, frag: this.frag, stats: stats });\n }\n }, {\n key: 'loadsuccess',\n value: function loadsuccess(event, stats) {\n var payload = event.currentTarget.response;\n payload.final = true;\n stats.length = payload.byteLength;\n this.hls.trigger(_events2.default.FRAG_LOADED, { frag: this.frag, stats: stats });\n // we cannot add new property to xhr response object in IE\n this.loadchunk({ currentTarget: { response: payload } }, stats);\n this.firstChunk = true;\n // detach fragment loader on load success\n this.frag.loader = undefined;\n }\n }, {\n key: 'loaderror',\n value: function loaderror(event) {\n if (this.loader) {\n this.loader.abort();\n }\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: _errors.ErrorDetails.FRAG_LOAD_ERROR, fatal: false, frag: this.frag, response: event });\n }\n }, {\n key: 'loadtimeout',\n value: function loadtimeout() {\n if (this.loader) {\n this.loader.abort();\n }\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: _errors.ErrorDetails.FRAG_LOAD_TIMEOUT, fatal: false, frag: this.frag });\n }\n }, {\n key: 'loadprogress',\n value: function loadprogress(stats) {\n this.frag.loaded = stats.loaded;\n this.hls.trigger(_events2.default.FRAG_LOAD_PROGRESS, { frag: this.frag, stats: stats });\n }\n }]);\n\n return FragmentLoader;\n}(_eventHandler2.default);\n\nexports.default = FragmentLoader;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _errors = require('../errors');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Decrypt key Loader\n */\n\nvar KeyLoader = function (_EventHandler) {\n _inherits(KeyLoader, _EventHandler);\n\n function KeyLoader(hls) {\n _classCallCheck(this, KeyLoader);\n\n var _this = _possibleConstructorReturn(this, (KeyLoader.__proto__ || Object.getPrototypeOf(KeyLoader)).call(this, hls, _events2.default.KEY_LOADING));\n\n _this.decryptkey = null;\n _this.decrypturl = null;\n return _this;\n }\n\n _createClass(KeyLoader, [{\n key: 'destroy',\n value: function destroy() {\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n _eventHandler2.default.prototype.destroy.call(this);\n }\n }, {\n key: 'onKeyLoading',\n value: function onKeyLoading(data) {\n var frag = this.frag = data.frag,\n decryptdata = frag.decryptdata,\n uri = decryptdata.uri;\n // if uri is different from previous one or if decrypt key not retrieved yet\n if (uri !== this.decrypturl || this.decryptkey === null) {\n var config = this.hls.config;\n frag.loader = this.loader = new config.loader(config);\n this.decrypturl = uri;\n this.decryptkey = null;\n frag.loader.load(uri, 'arraybuffer', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), config.fragLoadingTimeOut, config.fragLoadingMaxRetry, config.fragLoadingRetryDelay, this.loadprogress.bind(this), frag);\n } else if (this.decryptkey) {\n // we already loaded this key, return it\n decryptdata.key = this.decryptkey;\n this.hls.trigger(_events2.default.KEY_LOADED, { frag: frag });\n }\n }\n }, {\n key: 'loadsuccess',\n value: function loadsuccess(event) {\n var frag = this.frag;\n this.decryptkey = frag.decryptdata.key = new Uint8Array(event.currentTarget.response);\n // detach fragment loader on load success\n frag.loader = undefined;\n this.hls.trigger(_events2.default.KEY_LOADED, { frag: frag });\n }\n }, {\n key: 'loaderror',\n value: function loaderror(event) {\n if (this.loader) {\n this.loader.abort();\n }\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: _errors.ErrorDetails.KEY_LOAD_ERROR, fatal: false, frag: this.frag, response: event.currentTarget });\n }\n }, {\n key: 'loadtimeout',\n value: function loadtimeout() {\n if (this.loader) {\n this.loader.abort();\n }\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: _errors.ErrorDetails.KEY_LOAD_TIMEOUT, fatal: false, frag: this.frag });\n }\n }, {\n key: 'loadprogress',\n value: function loadprogress() {}\n }]);\n\n return KeyLoader;\n}(_eventHandler2.default);\n\nexports.default = KeyLoader;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _eventHandler = require('../event-handler');\n\nvar _eventHandler2 = _interopRequireDefault(_eventHandler);\n\nvar _errors = require('../errors');\n\nvar _url = require('../utils/url');\n\nvar _url2 = _interopRequireDefault(_url);\n\nvar _attrList = require('../utils/attr-list');\n\nvar _attrList2 = _interopRequireDefault(_attrList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * Playlist Loader\n */\n\n//import {logger} from '../utils/logger';\n\nvar PlaylistLoader = function (_EventHandler) {\n _inherits(PlaylistLoader, _EventHandler);\n\n function PlaylistLoader(hls) {\n _classCallCheck(this, PlaylistLoader);\n\n return _possibleConstructorReturn(this, (PlaylistLoader.__proto__ || Object.getPrototypeOf(PlaylistLoader)).call(this, hls, _events2.default.MANIFEST_LOADING, _events2.default.LEVEL_LOADING));\n }\n\n _createClass(PlaylistLoader, [{\n key: 'destroy',\n value: function destroy() {\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n this.url = this.id = null;\n _eventHandler2.default.prototype.destroy.call(this);\n }\n }, {\n key: 'onManifestLoading',\n value: function onManifestLoading(data) {\n this.load(data.url, null);\n }\n }, {\n key: 'onLevelLoading',\n value: function onLevelLoading(data) {\n this.load(data.url, data.level, data.id, data.preload);\n }\n }, {\n key: 'reloadCurrentRequests',\n value: function reloadCurrentRequests() {\n // we only reload manifest requests, level requests will be retried anyway\n if (this.loading && this.loader && this.id === null) {\n this.loader.abort();\n this.loading = false;\n this.load(this.url, this.id, this.id2);\n }\n }\n }, {\n key: 'replaceManifest',\n value: function replaceManifest(data, url) {\n var levels = this.parseMasterPlaylist(data, url);\n this.hls.trigger(_events2.default.MANIFEST_REPLACE, { levels: levels, url: url });\n }\n }, {\n key: 'replaceLevelPlaylist',\n value: function replaceLevelPlaylist(id, data, url) {\n var levelDetails = this.parseLevelPlaylist(data, url, id);\n this.hls.trigger(_events2.default.LEVEL_REPLACE, { details: levelDetails, level: id });\n }\n }, {\n key: 'load',\n value: function load(url, id1, id2, preload) {\n var config = this.hls.config,\n retry,\n timeout,\n retryDelay;\n\n if (this.loading && this.loader) {\n if (this.url === url && this.id === id1 && this.id2 === id2) {\n // same request than last pending one, don't do anything, except, maybe, preloading status\n this.preload = preload;\n return;\n } else {\n // one playlist load request is pending, but with different params, abort it before loading new playlist\n this.loader.abort();\n }\n }\n\n this.url = url;\n this.id = id1;\n this.id2 = id2;\n this.preload = preload;\n if (this.id === null) {\n retry = config.manifestLoadingMaxRetry;\n timeout = config.manifestLoadingTimeOut;\n retryDelay = config.manifestLoadingRetryDelay;\n } else {\n retry = config.levelLoadingMaxRetry;\n timeout = config.levelLoadingTimeOut;\n retryDelay = config.levelLoadingRetryDelay;\n }\n this.loader = typeof config.pLoader !== 'undefined' ? new config.pLoader(config) : new config.loader(config);\n this.loading = true;\n this.loader.load(url, '', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), timeout, retry, retryDelay);\n }\n }, {\n key: 'resolve',\n value: function resolve(url, baseUrl) {\n return _url2.default.buildAbsoluteURL(baseUrl, url);\n }\n }, {\n key: 'parseMasterPlaylist',\n value: function parseMasterPlaylist(string, baseurl) {\n var levels = [],\n result = void 0;\n\n // https://regex101.com is your friend\n var re = /#EXT-X-STREAM-INF:([^\\n\\r]*)[\\r\\n]+([^\\r\\n]+)/g;\n while ((result = re.exec(string)) != null) {\n var level = {};\n\n var attrs = level.attrs = new _attrList2.default(result[1]);\n level.url = this.resolve(result[2], baseurl);\n\n var resolution = attrs.decimalResolution('RESOLUTION');\n if (resolution) {\n level.width = resolution.width;\n level.height = resolution.height;\n }\n level.bitrate = attrs.decimalInteger('AVERAGE-BANDWIDTH') || attrs.decimalInteger('BANDWIDTH');\n level.name = attrs.NAME;\n\n var closedCaptions = attrs.enumeratedString('CLOSED-CAPTIONS');\n\n if (closedCaptions) {\n level.closedCaptions = closedCaptions;\n }\n\n var codecs = attrs.CODECS;\n if (codecs) {\n codecs = codecs.split(',');\n for (var i = 0; i < codecs.length; i++) {\n var codec = codecs[i];\n if (codec.indexOf('avc1') !== -1) {\n level.videoCodec = this.avc1toavcoti(codec);\n } else {\n level.audioCodec = codec;\n }\n }\n }\n\n levels.push(level);\n }\n return levels;\n }\n\n /**\n * Utility method for parseLevelPlaylist to create an initialization vector for a given segment\n * @returns {Uint8Array}\n */\n\n }, {\n key: 'createInitializationVector',\n value: function createInitializationVector(segmentNumber) {\n var uint8View = new Uint8Array(16);\n\n for (var i = 12; i < 16; i++) {\n uint8View[i] = segmentNumber >> 8 * (15 - i) & 0xff;\n }\n\n return uint8View;\n }\n\n /**\n * Utility method for parseLevelPlaylist to get a fragment's decryption data from the currently parsed encryption key data\n * @param levelkey - a playlist's encryption info\n * @param segmentNumber - the fragment's segment number\n * @returns {*} - an object to be applied as a fragment's decryptdata\n */\n\n }, {\n key: 'fragmentDecryptdataFromLevelkey',\n value: function fragmentDecryptdataFromLevelkey(levelkey, segmentNumber) {\n var decryptdata = levelkey;\n\n if (levelkey && levelkey.method && levelkey.uri && !levelkey.iv) {\n decryptdata = this.cloneObj(levelkey);\n decryptdata.iv = this.createInitializationVector(segmentNumber);\n }\n\n return decryptdata;\n }\n }, {\n key: 'avc1toavcoti',\n value: function avc1toavcoti(codec) {\n var result,\n avcdata = codec.split('.');\n if (avcdata.length > 2) {\n result = avcdata.shift() + '.';\n result += parseInt(avcdata.shift()).toString(16);\n result += ('000' + parseInt(avcdata.shift()).toString(16)).substr(-4);\n } else {\n result = codec;\n }\n return result;\n }\n }, {\n key: 'cloneObj',\n value: function cloneObj(obj) {\n return JSON.parse(JSON.stringify(obj));\n }\n }, {\n key: 'parseLevelPlaylist',\n value: function parseLevelPlaylist(string, baseurl, id) {\n this.hls.config = this.hls.config || {};\n var currentSN = 0,\n fragdecryptdata,\n totalduration = 0,\n level = { url: baseurl, fragments: [], live: true, startSN: 0 },\n levelkey = { method: null, key: null, iv: null, uri: null },\n cc = 0,\n programDateTime = null,\n frag = null,\n result,\n regexp,\n minDuration = (this.hls.config.maxFragLookUpTolerance || 0.2) + 0.001,\n byteRangeEndOffset,\n byteRangeStartOffset,\n tagList = [];\n\n regexp = /(?:#EXT-X-(MEDIA-SEQUENCE):(\\d+))|(?:#EXT-X-(TARGETDURATION):(\\d+))|(?:#EXT-X-(KEY):(.*)[\\r\\n]+([^#|\\r\\n]+)?)|(?:#EXT(INF):([\\d\\.]+)[^\\r\\n]*([\\r\\n]+[^#|\\r\\n]+)?)|(?:#EXT-X-(BYTERANGE):([\\d]+[@[\\d]*)]*[\\r\\n]+([^#|\\r\\n]+)?|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(PROGRAM-DATE-TIME):(.*)[\\r\\n]+([^#|\\r\\n]+)?)|(?:#EXT-X-(VERSION):(.*))|(?:#(.*):(.*))|(?:#(.*))/g;\n while ((result = regexp.exec(string)) !== null) {\n result.shift();\n result = result.filter(function (n) {\n return n !== undefined;\n });\n switch (result[0]) {\n case 'MEDIA-SEQUENCE':\n currentSN = level.startSN = parseInt(result[1]);\n break;\n case 'TARGETDURATION':\n level.targetduration = parseFloat(result[1]);\n break;\n case 'VERSION':\n break;\n case 'EXTM3U':\n break;\n case 'ENDLIST':\n level.live = false;\n break;\n case 'DIS':\n cc++;\n tagList.push(result.map(function (e) {\n return (' ' + e).slice(1);\n }));\n break;\n case 'BYTERANGE':\n var params = result[1].split('@');\n if (params.length === 1) {\n byteRangeStartOffset = byteRangeEndOffset;\n } else {\n byteRangeStartOffset = parseInt(params[1]);\n }\n byteRangeEndOffset = parseInt(params[0]) + byteRangeStartOffset;\n if (frag && !frag.url) {\n frag.byteRangeStartOffset = byteRangeStartOffset;\n frag.byteRangeEndOffset = byteRangeEndOffset;\n frag.url = this.resolve(result[2], baseurl);\n tagList.push(result.map(function (e) {\n return (' ' + e).slice(1);\n }));\n }\n break;\n case 'INF':\n var duration = parseFloat(result[1]);\n if (!isNaN(duration)) {\n minDuration = Math.min(duration, minDuration);\n var sn = currentSN++;\n fragdecryptdata = this.fragmentDecryptdataFromLevelkey(levelkey, sn);\n var url = result[2] ? this.resolve(result[2], baseurl) : null;\n tagList.push(result.map(function (e) {\n return (' ' + e).slice(1);\n }));\n frag = { url: url, duration: duration, start: totalduration, sn: sn, level: id, cc: cc, byteRangeStartOffset: byteRangeStartOffset, byteRangeEndOffset: byteRangeEndOffset, decryptdata: fragdecryptdata, programDateTime: programDateTime, tagList: tagList };\n level.fragments.push(frag);\n totalduration += duration;\n byteRangeStartOffset = null;\n programDateTime = null;\n tagList = [];\n }\n break;\n case 'KEY':\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-08#section-3.4.4\n var decryptparams = result[1];\n var keyAttrs = new _attrList2.default(decryptparams);\n var decryptmethod = keyAttrs.enumeratedString('METHOD'),\n decrypturi = keyAttrs.URI,\n decryptiv = keyAttrs.hexadecimalInteger('IV');\n if (decryptmethod) {\n levelkey = { method: null, key: null, iv: null, uri: null };\n if (decrypturi && decryptmethod === 'AES-128') {\n levelkey.method = decryptmethod;\n // URI to get the key\n levelkey.uri = this.resolve(decrypturi, baseurl);\n levelkey.key = null;\n // Initialization Vector (IV)\n levelkey.iv = decryptiv;\n }\n }\n\n //issue #425, applying url and decrypt data in instances where EXT-KEY immediately follow EXT-INF\n if (frag && !frag.url && result.length >= 3) {\n frag.url = this.resolve(result[2], baseurl);\n\n //we have not moved onto another segment, we are still parsing one\n fragdecryptdata = this.fragmentDecryptdataFromLevelkey(levelkey, currentSN - 1);\n frag.decryptdata = fragdecryptdata;\n tagList.push(result.map(function (e) {\n return (' ' + e).slice(1);\n }));\n }\n break;\n case 'PROGRAM-DATE-TIME':\n programDateTime = new Date(Date.parse(result[1]));\n tagList.push(result.map(function (e) {\n return (' ' + e).slice(1);\n }));\n if (frag && !frag.url && result.length >= 3) {\n frag.url = this.resolve(result[2], baseurl);\n frag.programDateTime = programDateTime;\n }\n break;\n default:\n tagList.push(result.map(function (e) {\n return (' ' + e).slice(1);\n }));\n break;\n }\n }\n //logger.log('found ' + level.fragments.length + ' fragments');\n if (frag && !frag.url) {\n level.fragments.pop();\n totalduration -= frag.duration;\n }\n level.totalduration = totalduration = Math.round(totalduration * 1000000) / 1000000;\n level.averagetargetduration = totalduration / level.fragments.length;\n level.endSN = currentSN - 1;\n this.hls.config.maxFragLookUpTolerance = Math.max(minDuration - 0.001, 0);\n return level;\n }\n }, {\n key: 'loadsuccess',\n value: function loadsuccess(event, stats) {\n var target = event.currentTarget,\n string = target.responseText,\n url = target.responseURL,\n id = this.id,\n id2 = this.id2,\n preload = this.preload,\n hls = this.hls,\n levels;\n\n this.loading = false;\n // responseURL not supported on some browsers (it is used to detect URL redirection)\n // data-uri mode also not supported (but no need to detect redirection)\n if (url === undefined || url.indexOf('data:') === 0) {\n // fallback to initial URL\n url = this.url;\n }\n stats.tload = performance.now();\n stats.mtime = new Date(target.getResponseHeader('Last-Modified'));\n if (string.indexOf('#EXTM3U') === 0) {\n if (string.indexOf('#EXTINF:') > 0) {\n // 1 level playlist\n // if first request, fire manifest loaded event, level will be reloaded afterwards\n // (this is to have a uniform logic for 1 level/multilevel playlists)\n if (this.id === null) {\n hls.trigger(_events2.default.MANIFEST_LOADED, { levels: [{ url: url }], url: url, stats: stats });\n } else {\n var levelDetails = this.parseLevelPlaylist(string, url, id);\n stats.tparsed = performance.now();\n hls.trigger(_events2.default.LEVEL_LOADED, { details: levelDetails, level: id, id: id2, preload: preload, stats: stats });\n }\n } else {\n levels = this.parseMasterPlaylist(string, url);\n // multi level playlist, parse level info\n if (levels.length) {\n hls.trigger(_events2.default.MANIFEST_LOADED, { levels: levels, url: url, stats: stats });\n } else {\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: _errors.ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: url, reason: 'no level found in manifest' });\n }\n }\n } else {\n hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: _errors.ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: url, reason: 'no EXTM3U delimiter' });\n }\n }\n }, {\n key: 'loaderror',\n value: function loaderror(event) {\n var details, fatal;\n if (this.id === null) {\n details = _errors.ErrorDetails.MANIFEST_LOAD_ERROR;\n fatal = true;\n } else {\n details = _errors.ErrorDetails.LEVEL_LOAD_ERROR;\n fatal = false;\n }\n if (this.loader) {\n this.loader.abort();\n }\n this.loading = false;\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: details, fatal: fatal, url: this.url, loader: this.loader, response: event.currentTarget, level: this.id, id: this.id2 });\n }\n }, {\n key: 'loadtimeout',\n value: function loadtimeout() {\n var details, fatal;\n if (this.id === null) {\n details = _errors.ErrorDetails.MANIFEST_LOAD_TIMEOUT;\n fatal = true;\n } else {\n details = _errors.ErrorDetails.LEVEL_LOAD_TIMEOUT;\n fatal = false;\n }\n if (this.loader) {\n this.loader.abort();\n }\n this.loading = false;\n this.hls.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: details, fatal: fatal, url: this.url, loader: this.loader, level: this.id, id: this.id2 });\n }\n }]);\n\n return PlaylistLoader;\n}(_eventHandler2.default);\n\nexports.default = PlaylistLoader;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Generate MP4 Box\n*/\n\nvar UINT32_MAX = Math.pow(2, 32) - 1;\n//import Hex from '../utils/hex';\n\nvar MP4 = function () {\n function MP4() {\n _classCallCheck(this, MP4);\n }\n\n _createClass(MP4, null, [{\n key: 'init',\n value: function init() {\n MP4.types = {\n avc1: [], // codingname\n avcC: [],\n btrt: [],\n dinf: [],\n dref: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [],\n '.mp3': [],\n mvex: [],\n mvhd: [],\n pasp: [],\n sdtp: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trex: [],\n tkhd: [],\n vmhd: [],\n smhd: []\n };\n\n var i;\n for (i in MP4.types) {\n if (MP4.types.hasOwnProperty(i)) {\n MP4.types[i] = [i.charCodeAt(0), i.charCodeAt(1), i.charCodeAt(2), i.charCodeAt(3)];\n }\n }\n\n var videoHdlr = new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]);\n\n var audioHdlr = new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ]);\n\n MP4.HDLR_TYPES = {\n 'video': videoHdlr,\n 'audio': audioHdlr\n };\n\n var dref = new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]);\n\n var stco = new Uint8Array([0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n\n MP4.STTS = MP4.STSC = MP4.STCO = stco;\n\n MP4.STSZ = new Uint8Array([0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00]);\n MP4.VMHD = new Uint8Array([0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // opcolor\n ]);\n MP4.SMHD = new Uint8Array([0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]);\n\n MP4.STSD = new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01]); // entry_count\n\n var majorBrand = new Uint8Array([105, 115, 111, 109]); // isom\n var avc1Brand = new Uint8Array([97, 118, 99, 49]); // avc1\n var minorVersion = new Uint8Array([0, 0, 0, 1]);\n\n MP4.FTYP = MP4.box(MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n MP4.DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, dref));\n }\n }, {\n key: 'box',\n value: function box(type) {\n var payload = Array.prototype.slice.call(arguments, 1),\n size = 8,\n i = payload.length,\n len = i,\n result;\n // calculate the total size we need to allocate\n while (i--) {\n size += payload[i].byteLength;\n }\n result = new Uint8Array(size);\n result[0] = size >> 24 & 0xff;\n result[1] = size >> 16 & 0xff;\n result[2] = size >> 8 & 0xff;\n result[3] = size & 0xff;\n result.set(type, 4);\n // copy the payload into the result\n for (i = 0, size = 8; i < len; i++) {\n // copy payload[i] array @ offset size\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n }\n }, {\n key: 'hdlr',\n value: function hdlr(type) {\n return MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type]);\n }\n }, {\n key: 'mdat',\n value: function mdat(data) {\n return MP4.box(MP4.types.mdat, data);\n }\n }, {\n key: 'mdhd',\n value: function mdhd(timescale, duration) {\n duration *= timescale;\n return MP4.box(MP4.types.mdhd, new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x03, // modification_time\n timescale >> 24 & 0xFF, timescale >> 16 & 0xFF, timescale >> 8 & 0xFF, timescale & 0xFF, // timescale\n duration >> 24, duration >> 16 & 0xFF, duration >> 8 & 0xFF, duration & 0xFF, // duration\n 0x55, 0xc4, // 'und' language (undetermined)\n 0x00, 0x00]));\n }\n }, {\n key: 'mdia',\n value: function mdia(track) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(track.timescale, track.duration), MP4.hdlr(track.type), MP4.minf(track));\n }\n }, {\n key: 'mfhd',\n value: function mfhd(sequenceNumber) {\n return MP4.box(MP4.types.mfhd, new Uint8Array([0x00, 0x00, 0x00, 0x00, // flags\n sequenceNumber >> 24, sequenceNumber >> 16 & 0xFF, sequenceNumber >> 8 & 0xFF, sequenceNumber & 0xFF]) // sequence_number\n );\n }\n }, {\n key: 'minf',\n value: function minf(track) {\n if (track.type === 'audio') {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.smhd, MP4.SMHD), MP4.DINF, MP4.stbl(track));\n } else {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.vmhd, MP4.VMHD), MP4.DINF, MP4.stbl(track));\n }\n }\n }, {\n key: 'moof',\n value: function moof(sn, baseMediaDecodeTime, track) {\n return MP4.box(MP4.types.moof, MP4.mfhd(sn), MP4.traf(track, baseMediaDecodeTime));\n }\n /**\n * @param tracks... (optional) {array} the tracks associated with this movie\n */\n\n }, {\n key: 'moov',\n value: function moov(tracks) {\n var i = tracks.length,\n boxes = [];\n\n while (i--) {\n boxes[i] = MP4.trak(tracks[i]);\n }\n\n return MP4.box.apply(null, [MP4.types.moov, MP4.mvhd(tracks[0].timescale, tracks[0].duration)].concat(boxes).concat(MP4.mvex(tracks)));\n }\n }, {\n key: 'mvex',\n value: function mvex(tracks) {\n var i = tracks.length,\n boxes = [];\n\n while (i--) {\n boxes[i] = MP4.trex(tracks[i]);\n }\n return MP4.box.apply(null, [MP4.types.mvex].concat(boxes));\n }\n }, {\n key: 'mvhd',\n value: function mvhd(timescale, duration) {\n duration *= timescale;\n var bytes = new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // creation_time\n 0x00, 0x00, 0x00, 0x02, // modification_time\n timescale >> 24 & 0xFF, timescale >> 16 & 0xFF, timescale >> 8 & 0xFF, timescale & 0xFF, // timescale\n duration >> 24 & 0xFF, duration >> 16 & 0xFF, duration >> 8 & 0xFF, duration & 0xFF, // duration\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]);\n return MP4.box(MP4.types.mvhd, bytes);\n }\n }, {\n key: 'sdtp',\n value: function sdtp(track) {\n var samples = track.samples || [],\n bytes = new Uint8Array(4 + samples.length),\n flags,\n i;\n // leave the full box header (4 bytes) all zero\n // write the sample table\n for (i = 0; i < samples.length; i++) {\n flags = samples[i].flags;\n bytes[i + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy;\n }\n\n return MP4.box(MP4.types.sdtp, bytes);\n }\n }, {\n key: 'stbl',\n value: function stbl(track) {\n return MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.box(MP4.types.stts, MP4.STTS), MP4.box(MP4.types.stsc, MP4.STSC), MP4.box(MP4.types.stsz, MP4.STSZ), MP4.box(MP4.types.stco, MP4.STCO));\n }\n }, {\n key: 'avc1',\n value: function avc1(track) {\n var sps = [],\n pps = [],\n i,\n data,\n len;\n // assemble the SPSs\n\n for (i = 0; i < track.sps.length; i++) {\n data = track.sps[i];\n len = data.byteLength;\n sps.push(len >>> 8 & 0xFF);\n sps.push(len & 0xFF);\n sps = sps.concat(Array.prototype.slice.call(data)); // SPS\n }\n\n // assemble the PPSs\n for (i = 0; i < track.pps.length; i++) {\n data = track.pps[i];\n len = data.byteLength;\n pps.push(len >>> 8 & 0xFF);\n pps.push(len & 0xFF);\n pps = pps.concat(Array.prototype.slice.call(data));\n }\n\n var avcc = MP4.box(MP4.types.avcC, new Uint8Array([0x01, // version\n sps[3], // profile\n sps[4], // profile compat\n sps[5], // level\n 0xfc | 3, // lengthSizeMinusOne, hard-coded to 4 bytes\n 0xE0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n ].concat(sps).concat([track.pps.length // numOfPictureParameterSets\n ]).concat(pps))),\n // \"PPS\"\n width = track.width,\n height = track.height,\n hSpacing = track.pixelRatio[0],\n vSpacing = track.pixelRatio[1];\n //console.log('avcc:' + Hex.hexDump(avcc));\n return MP4.box(MP4.types.avc1, new Uint8Array([0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined\n width >> 8 & 0xFF, width & 0xff, // width\n height >> 8 & 0xFF, height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x12, 0x64, 0x61, 0x69, 0x6C, //dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x68, 0x6C, 0x73, 0x2E, 0x6A, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]), // pre_defined = -1\n avcc, MP4.box(MP4.types.btrt, new Uint8Array([0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0])), // avgBitrate\n MP4.box(MP4.types.pasp, new Uint8Array([hSpacing >> 24, // hSpacing\n hSpacing >> 16 & 0xFF, hSpacing >> 8 & 0xFF, hSpacing & 0xFF, vSpacing >> 24, // vSpacing\n vSpacing >> 16 & 0xFF, vSpacing >> 8 & 0xFF, vSpacing & 0xFF])));\n }\n }, {\n key: 'esds',\n value: function esds(track) {\n var configlen = track.config.length;\n return new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00, 0x01, //es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0f + configlen, // length\n 0x40, //codec : mpeg4_audio\n 0x15, // stream_type\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([configlen]).concat(track.config).concat([0x06, 0x01, 0x02])); // GASpecificConfig)); // length + audio config descriptor\n }\n }, {\n key: 'mp4a',\n value: function mp4a(track) {\n var audiosamplerate = track.audiosamplerate;\n return MP4.box(MP4.types.mp4a, new Uint8Array([0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, track.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n audiosamplerate >> 8 & 0xFF, audiosamplerate & 0xff, //\n 0x00, 0x00]), MP4.box(MP4.types.esds, MP4.esds(track)));\n }\n }, {\n key: 'mp3',\n value: function mp3(track) {\n var audiosamplerate = track.audiosamplerate;\n return MP4.box(MP4.types['.mp3'], new Uint8Array([0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, track.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n audiosamplerate >> 8 & 0xFF, audiosamplerate & 0xff, //\n 0x00, 0x00]));\n }\n }, {\n key: 'stsd',\n value: function stsd(track) {\n if (track.type === 'audio') {\n if (!track.isAAC && track.codec === 'mp3') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp3(track));\n }\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp4a(track));\n } else {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.avc1(track));\n }\n }\n }, {\n key: 'tkhd',\n value: function tkhd(track) {\n var id = track.id,\n duration = track.duration * track.timescale,\n width = track.width,\n height = track.height;\n return MP4.box(MP4.types.tkhd, new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x07, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n id >> 24 & 0xFF, id >> 16 & 0xFF, id >> 8 & 0xFF, id & 0xFF, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n duration >> 24, duration >> 16 & 0xFF, duration >> 8 & 0xFF, duration & 0xFF, // duration\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, 0x00, // alternate_group\n 0x00, 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n width >> 8 & 0xFF, width & 0xFF, 0x00, 0x00, // width\n height >> 8 & 0xFF, height & 0xFF, 0x00, 0x00 // height\n ]));\n }\n }, {\n key: 'traf',\n value: function traf(track, baseMediaDecodeTime) {\n var sampleDependencyTable = MP4.sdtp(track),\n id = track.id;\n var upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1));\n var lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n return MP4.box(MP4.types.traf, MP4.box(MP4.types.tfhd, new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n id >> 24, id >> 16 & 0XFF, id >> 8 & 0XFF, id & 0xFF]) // track_ID\n ), MP4.box(MP4.types.tfdt, new Uint8Array([0x01, // version 1\n 0x00, 0x00, 0x00, // flags\n upperWordBaseMediaDecodeTime >>> 24 & 0xFF, upperWordBaseMediaDecodeTime >>> 16 & 0xFF, upperWordBaseMediaDecodeTime >>> 8 & 0xFF, upperWordBaseMediaDecodeTime & 0xFF, lowerWordBaseMediaDecodeTime >>> 24 & 0xFF, lowerWordBaseMediaDecodeTime >>> 16 & 0xFF, lowerWordBaseMediaDecodeTime >>> 8 & 0xFF, lowerWordBaseMediaDecodeTime & 0xFF])), MP4.trun(track, sampleDependencyTable.length + 16 + // tfhd\n 20 + // tfdt\n 8 + // traf header\n 16 + // mfhd\n 8 + // moof header\n 8), // mdat header\n sampleDependencyTable);\n }\n\n /**\n * Generate a track box.\n * @param track {object} a track definition\n * @return {Uint8Array} the track box\n */\n\n }, {\n key: 'trak',\n value: function trak(track) {\n track.duration = track.duration || 0xffffffff;\n return MP4.box(MP4.types.trak, MP4.tkhd(track), MP4.mdia(track));\n }\n }, {\n key: 'trex',\n value: function trex(track) {\n var id = track.id;\n return MP4.box(MP4.types.trex, new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n id >> 24, id >> 16 & 0XFF, id >> 8 & 0XFF, id & 0xFF, // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]));\n }\n }, {\n key: 'trun',\n value: function trun(track, offset) {\n var samples = track.samples || [],\n len = samples.length,\n arraylen = 12 + 16 * len,\n array = new Uint8Array(arraylen),\n i,\n sample,\n duration,\n size,\n flags,\n cts;\n offset += 8 + arraylen;\n array.set([0x00, // version 0\n 0x00, 0x0f, 0x01, // flags\n len >>> 24 & 0xFF, len >>> 16 & 0xFF, len >>> 8 & 0xFF, len & 0xFF, // sample_count\n offset >>> 24 & 0xFF, offset >>> 16 & 0xFF, offset >>> 8 & 0xFF, offset & 0xFF // data_offset\n ], 0);\n for (i = 0; i < len; i++) {\n sample = samples[i];\n duration = sample.duration;\n size = sample.size;\n flags = sample.flags;\n cts = sample.cts;\n array.set([duration >>> 24 & 0xFF, duration >>> 16 & 0xFF, duration >>> 8 & 0xFF, duration & 0xFF, // sample_duration\n size >>> 24 & 0xFF, size >>> 16 & 0xFF, size >>> 8 & 0xFF, size & 0xFF, // sample_size\n flags.isLeading << 2 | flags.dependsOn, flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.paddingValue << 1 | flags.isNonSync, flags.degradPrio & 0xF0 << 8, flags.degradPrio & 0x0F, // sample_flags\n cts >>> 24 & 0xFF, cts >>> 16 & 0xFF, cts >>> 8 & 0xFF, cts & 0xFF // sample_composition_time_offset\n ], 12 + 16 * i);\n }\n return MP4.box(MP4.types.trun, array);\n }\n }, {\n key: 'initSegment',\n value: function initSegment(tracks) {\n if (!MP4.types) {\n MP4.init();\n }\n var movie = MP4.moov(tracks),\n result;\n result = new Uint8Array(MP4.FTYP.byteLength + movie.byteLength);\n result.set(MP4.FTYP);\n result.set(movie, MP4.FTYP.byteLength);\n return result;\n }\n }]);\n\n return MP4;\n}();\n\nexports.default = MP4;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * fMP4 remuxer\n */\n\nvar _aac = require('../helper/aac');\n\nvar _aac2 = _interopRequireDefault(_aac);\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _logger = require('../utils/logger');\n\nvar _mp4Generator = require('../remux/mp4-generator');\n\nvar _mp4Generator2 = _interopRequireDefault(_mp4Generator);\n\nvar _errors = require('../errors');\n\nrequire('../utils/polyfill');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MP4Remuxer = function () {\n function MP4Remuxer(observer, config, typeSupported) {\n _classCallCheck(this, MP4Remuxer);\n\n this.observer = observer;\n this.config = config;\n this.typeSupported = typeSupported;\n this.ISGenerated = false;\n this.PES2MP4SCALEFACTOR = 4;\n this.PES_TIMESCALE = 90000;\n this.MP4_TIMESCALE = this.PES_TIMESCALE / this.PES2MP4SCALEFACTOR;\n }\n\n _createClass(MP4Remuxer, [{\n key: 'destroy',\n value: function destroy() {}\n }, {\n key: 'insertDiscontinuity',\n value: function insertDiscontinuity() {\n this._initPTS = this._initDTS = undefined;\n }\n }, {\n key: 'switchLevel',\n value: function switchLevel() {\n this.ISGenerated = false;\n }\n }, {\n key: 'remux',\n value: function remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurate, data, flush, stats, isPartial) {\n // dummy\n data = null;\n\n // generate Init Segment if needed\n if (!this.ISGenerated) {\n this.generateIS(audioTrack, videoTrack, timeOffset);\n }\n\n if (this.ISGenerated) {\n // Purposefully remuxing audio before video, so that remuxVideo can use nextAacPts, which is\n // calculated in remuxAudio.\n //logger.log('nb AAC samples:' + audioTrack.samples.length);\n if (audioTrack.samples.length) {\n var audioData = this.remuxAudio(audioTrack, timeOffset, contiguous, accurate, stats, isPartial);\n //logger.log('nb AVC samples:' + videoTrack.samples.length);\n if (videoTrack.samples.length) {\n var audioTrackLength = void 0,\n audioStartPTS = void 0;\n if (audioData) {\n audioStartPTS = audioData.startPTS;\n audioTrackLength = audioData.endPTS - audioStartPTS;\n }\n this.remuxVideo(videoTrack, timeOffset, contiguous, accurate, audioTrackLength, audioStartPTS, flush, stats, isPartial);\n } else if (!contiguous) {\n this.nextAvcDts = undefined;\n }\n } else {\n var videoData = void 0;\n //logger.log('nb AVC samples:' + videoTrack.samples.length);\n if (videoTrack.samples.length) {\n videoData = this.remuxVideo(videoTrack, timeOffset, contiguous, accurate, undefined, undefined, flush, stats, isPartial);\n }\n if (videoData && audioTrack.codec) {\n this.remuxEmptyAudio(audioTrack, timeOffset, contiguous, videoData, stats, isPartial);\n }\n }\n }\n //logger.log('nb ID3 samples:' + audioTrack.samples.length);\n if (id3Track.samples.length) {\n this.remuxID3(id3Track, timeOffset);\n }\n //logger.log('nb ID3 samples:' + audioTrack.samples.length);\n if (textTrack.samples.length) {\n this.remuxText(textTrack, timeOffset);\n }\n }\n }, {\n key: 'generateIS',\n value: function generateIS(audioTrack, videoTrack, timeOffset) {\n var observer = this.observer,\n audioSamples = audioTrack.samples,\n videoSamples = videoTrack.samples,\n pesTimeScale = this.PES_TIMESCALE,\n tracks = {},\n data = { tracks: tracks, unique: false },\n computePTSDTS = this._initPTS === undefined,\n initPTS,\n initDTS;\n\n if (computePTSDTS) {\n initPTS = initDTS = Infinity;\n }\n if (audioTrack.config && audioSamples.length) {\n audioTrack.timescale = audioTrack.audiosamplerate;\n // MP4 duration (track duration in seconds multiplied by timescale) is coded on 32 bits\n // we know that each AAC sample contains 1024 frames....\n // in order to avoid overflowing the 32 bit counter for large duration, we use smaller timescale (timescale/gcd)\n // we just need to ensure that AAC sample duration will still be an integer (will be 1024/gcd)\n if (audioTrack.timescale * audioTrack.duration > Math.pow(2, 32)) {\n var greatestCommonDivisor = function greatestCommonDivisor(a, b) {\n return b ? greatestCommonDivisor(b, a % b) : a;\n };\n audioTrack.timescale = audioTrack.audiosamplerate / greatestCommonDivisor(audioTrack.audiosamplerate, audioTrack.isAAC ? 1024 : 1152);\n }\n _logger.logger.log('audio mp4 timescale :' + audioTrack.timescale);\n var container = 'audio/mp4';\n if (!audioTrack.isAAC) {\n if (this.typeSupported.mpeg) {\n // Chrome and Safari\n container = 'audio/mpeg';\n audioTrack.codec = '';\n } else if (this.typeSupported.mp3 === true) {\n // Firefox\n audioTrack.codec = 'mp3';\n }\n }\n tracks.audio = {\n container: container,\n codec: audioTrack.codec,\n initSegment: !audioTrack.isAAC && this.typeSupported.mpeg ? new Uint8Array() : _mp4Generator2.default.initSegment([audioTrack]),\n metadata: {\n channelCount: audioTrack.channelCount\n }\n };\n if (computePTSDTS) {\n // remember first PTS of this demuxing context. for audio, PTS = DTS\n initPTS = initDTS = audioSamples[0].pts - pesTimeScale * timeOffset;\n }\n }\n\n if (videoTrack.sps && videoTrack.pps && videoSamples.length) {\n videoTrack.timescale = this.MP4_TIMESCALE;\n tracks.video = {\n container: 'video/mp4',\n codec: videoTrack.codec,\n initSegment: _mp4Generator2.default.initSegment([videoTrack]),\n metadata: {\n width: videoTrack.width,\n height: videoTrack.height\n }\n };\n if (computePTSDTS) {\n initPTS = Math.min(initPTS, videoSamples[0].pts - pesTimeScale * timeOffset);\n initDTS = Math.min(initDTS, videoSamples[0].dts - pesTimeScale * timeOffset);\n }\n }\n\n if (Object.keys(tracks).length) {\n observer.trigger(_events2.default.FRAG_PARSING_INIT_SEGMENT, data);\n this.ISGenerated = true;\n if (computePTSDTS) {\n this._initPTS = initPTS;\n this._initDTS = initDTS;\n }\n } else {\n observer.trigger(_events2.default.ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'no audio/video samples found' });\n }\n }\n }, {\n key: 'remuxVideo',\n value: function remuxVideo(track, timeOffset, contiguous, accurate, audioTrackLength, audioStartPTS, flush, stats, isPartial) {\n var offset = 8,\n pes2mp4ScaleFactor = this.PES2MP4SCALEFACTOR,\n mp4SampleDuration,\n mdat,\n moof,\n firstPTS,\n firstDTS,\n nextDTS,\n lastPTS,\n lastDTS,\n inputSamples = track.samples,\n outputSamples = [],\n ptsNormalize = this._PTSNormalize,\n initDTS = this._initDTS;\n\n var timeScale = this.PES_TIMESCALE;\n\n // if parsed fragment is contiguous with last one, let's use last DTS value as reference\n var nextAvcDts = this.nextAvcDts,\n config = this.config;\n var isSafari = config.browser.isSafari;\n\n // if parsed fragment is contiguous with last one, let's use last DTS value as reference\n contiguous |= inputSamples.length && this.nextAvcDts && accurate && !stats.dropped && (Math.abs(timeOffset - nextAvcDts / timeScale) < 0.1 || Math.abs(inputSamples[0].dts - nextAvcDts - initDTS) < timeScale / 5);\n\n if (!contiguous) {\n // if not contiguous, let's use target timeOffset\n nextAvcDts = timeOffset * timeScale;\n }\n\n // PTS is coded on 33bits, and can loop from -2^32 to 2^32\n // PTSNormalize will make PTS/DTS value monotonic, we use last known DTS value as reference value\n inputSamples.forEach(function (sample) {\n sample.pts = ptsNormalize(sample.pts - initDTS, nextAvcDts);\n sample.dts = ptsNormalize(sample.dts - initDTS, nextAvcDts);\n });\n\n // sort video samples by DTS then PTS then demux id order\n inputSamples.sort(function (a, b) {\n var deltadts = a.dts - b.dts;\n var deltapts = a.pts - b.pts;\n return deltadts ? deltadts : deltapts ? deltapts : a.id - b.id;\n });\n\n // handle broken streams with PTS < DTS, tolerance up 200ms (18000 in 90kHz timescale)\n var PTSDTSshift = inputSamples.reduce(function (prev, curr) {\n return Math.max(Math.min(prev, curr.pts - curr.dts), -18000);\n }, 0);\n if (PTSDTSshift < 0) {\n _logger.logger.warn('PTS < DTS detected in video samples, shifting DTS by ' + Math.round(PTSDTSshift / 90) + ' ms to overcome this issue');\n for (var i = 0; i < inputSamples.length; i++) {\n inputSamples[i].dts += PTSDTSshift;\n }\n }\n\n // compute first DTS and last DTS, normalize them against reference value\n var sample = inputSamples[0];\n firstDTS = Math.max(sample.dts, 0);\n firstPTS = Math.max(sample.pts, 0);\n\n // check timestamp continuity (to remove inter-fragment gap/hole)\n var delta = Math.round((firstDTS - nextAvcDts) * 1000 / timeScale);\n if (contiguous && delta) {\n _logger.logger.log('AVC:' + Math.abs(delta) + ' ms ' + (delta > 0 ? 'hole' : 'overlapping') + ' between fragments detected');\n // remove hole/gap : set DTS to next expected DTS\n firstDTS = nextAvcDts;\n inputSamples[0].dts = firstDTS;\n // offset PTS as well, ensure that PTS is smaller or equal than new DTS\n firstPTS = Math.max(firstPTS - delta * timeScale / 1000, nextAvcDts);\n inputSamples[0].pts = firstPTS;\n _logger.logger.log('Video/PTS/DTS adjusted: ' + firstPTS + '/' + firstDTS + ',delta:' + delta);\n stats.videoGap = stats.videoGap || [];\n stats.videoGap.push(delta);\n } else if (!contiguous && this.lastSamples && this.lastSamples[0].dts === firstDTS) {\n var d = this.lastSamples[1].dts - firstDTS;\n _logger.logger.log('detected DTS overlap, add delta:' + d + ' to overcome on Safari');\n this._initPTS -= d;\n this._initDTS -= d;\n firstDTS = Math.max(this._PTSNormalize(sample.dts - this._initDTS, nextAvcDts), 0);\n firstPTS = Math.max(this._PTSNormalize(sample.pts - this._initDTS, nextAvcDts), 0);\n }\n nextDTS = firstDTS;\n\n // compute lastPTS/lastDTS\n sample = inputSamples[inputSamples.length - 1];\n lastDTS = Math.max(sample.dts, 0);\n lastPTS = Math.max(sample.pts, 0, lastDTS);\n\n // on Safari let's signal the same sample duration for all samples\n // sample duration (as expected by trun MP4 boxes), should be the delta between sample DTS\n // set this constant duration as being the avg delta between consecutive DTS.\n if (isSafari) {\n mp4SampleDuration = inputSamples.length > 1 ? Math.round((lastDTS - firstDTS) / (pes2mp4ScaleFactor * (inputSamples.length - 1))) : 0;\n }\n\n // normalize all PTS/DTS now ...\n for (var _i = 0; _i < inputSamples.length; _i++) {\n var _sample = inputSamples[_i];\n if (isSafari) {\n // sample DTS is computed using a constant decoding offset (mp4SampleDuration) between samples\n _sample.dts = firstDTS + _i * pes2mp4ScaleFactor * mp4SampleDuration;\n } else {\n // ensure sample monotonic DTS\n _sample.dts = Math.max(_sample.dts, firstDTS) & 0xFFFFFFFC;\n }\n // ensure that computed value is greater or equal than sample DTS\n _sample.pts = Math.max(_sample.pts, _sample.dts) & 0xFFFFFFFC;\n }\n this.lastSamples = isSafari && flush && inputSamples.length > 1 ? inputSamples.slice(-2) : undefined;\n\n /* concatenate the video data and construct the mdat in place\n (need 8 more bytes to fill length and mpdat type) */\n mdat = new Uint8Array(track.len + 4 * track.nbNalu + 8);\n var view = new DataView(mdat.buffer);\n view.setUint32(0, mdat.byteLength);\n mdat.set(_mp4Generator2.default.types.mdat, 4);\n\n stats.videoDurAvg = stats.videoDurStd = 0;\n stats.cttsError = 0;\n\n for (var _i2 = 0; _i2 < inputSamples.length; _i2++) {\n var avcSample = inputSamples[_i2],\n mp4SampleLength = 0,\n compositionTimeOffset = void 0;\n // convert NALU bitstream to MP4 format (prepend NALU with size field)\n while (avcSample.units.units.length) {\n var unit = avcSample.units.units.shift();\n view.setUint32(offset, unit.data.byteLength);\n offset += 4;\n mdat.set(unit.data, offset);\n offset += unit.data.byteLength;\n mp4SampleLength += 4 + unit.data.byteLength;\n }\n\n if (!isSafari) {\n // expected sample duration is the Decoding Timestamp diff of consecutive samples\n if (_i2 < inputSamples.length - 1) {\n mp4SampleDuration = inputSamples[_i2 + 1].dts - avcSample.dts;\n } else {\n var lastFrameDuration = avcSample.dts - inputSamples[_i2 > 0 ? _i2 - 1 : _i2].dts;\n if (config.stretchShortVideoTrack) {\n // In some cases, a segment's audio track duration may exceed the video track duration.\n // Since we've already remuxed audio, and we know how long the audio track is, we look to\n // see if the delta to the next segment is longer than the minimum of maxBufferHole and\n // maxSeekHole. If so, playback would potentially get stuck, so we artificially inflate\n // the duration of the last frame to minimize any potential gap between segments.\n var maxBufferHole = config.maxBufferHole,\n maxSeekHole = config.maxSeekHole,\n gapTolerance = Math.floor(Math.min(maxBufferHole, maxSeekHole) * timeScale),\n deltaToFrameEnd = (audioTrackLength ? firstPTS + audioTrackLength * timeScale : this.nextAacPts) - avcSample.pts;\n if (deltaToFrameEnd > gapTolerance) {\n // We subtract lastFrameDuration from deltaToFrameEnd to try to prevent any video\n // frame overlap. maxBufferHole/maxSeekHole should be >> lastFrameDuration anyway.\n mp4SampleDuration = deltaToFrameEnd - lastFrameDuration;\n if (mp4SampleDuration < 0) {\n mp4SampleDuration = lastFrameDuration;\n }\n _logger.logger.log('It is approximately ' + deltaToFrameEnd / 90 + ' ms to the next segment; using duration ' + mp4SampleDuration / 90 + ' ms for the last video frame.');\n } else {\n mp4SampleDuration = lastFrameDuration;\n }\n } else {\n mp4SampleDuration = lastFrameDuration;\n }\n }\n mp4SampleDuration /= pes2mp4ScaleFactor;\n compositionTimeOffset = Math.round((avcSample.pts - avcSample.dts) / pes2mp4ScaleFactor);\n } else {\n compositionTimeOffset = Math.max(0, mp4SampleDuration * Math.round((avcSample.pts - avcSample.dts) / (pes2mp4ScaleFactor * mp4SampleDuration)));\n }\n\n //console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${avcSample.pts}/${avcSample.dts}/${this._initDTS}/${ptsnorm}/${dtsnorm}/${(avcSample.pts/4294967296).toFixed(3)}');\n outputSamples.push({\n size: mp4SampleLength,\n // constant duration\n duration: mp4SampleDuration,\n cts: compositionTimeOffset,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: avcSample.key ? 2 : 1,\n isNonSync: avcSample.key ? 0 : 1\n }\n });\n\n stats.videoDurAvg += mp4SampleDuration / inputSamples.length;\n stats.videoDurStd += mp4SampleDuration * mp4SampleDuration / inputSamples.length;\n stats.cttsError += compositionTimeOffset - Math.floor(compositionTimeOffset / mp4SampleDuration) * mp4SampleDuration;\n }\n\n stats.videoDurStd = Math.sqrt(stats.videoDurStd - stats.videoDurAvg * stats.videoDurAvg);\n\n // next AVC sample DTS should be equal to last sample DTS + last sample duration (in PES timescale)\n this.nextAvcDts = lastDTS + mp4SampleDuration * pes2mp4ScaleFactor;\n track.len = 0;\n track.nbNalu = 0;\n if (outputSamples.length && config.browser.isChrome) {\n var flags = outputSamples[0].flags;\n // chrome workaround, mark first sample as being a Random Access Point to avoid sourcebuffer append issue\n // https://code.google.com/p/chromium/issues/detail?id=229412\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n }\n track.samples = outputSamples;\n moof = _mp4Generator2.default.moof(track.sequenceNumber++, firstDTS / pes2mp4ScaleFactor, track);\n track.samples = [];\n var data = {\n data1: moof,\n data2: mdat,\n startPTS: firstPTS / timeScale,\n endPTS: (lastPTS + pes2mp4ScaleFactor * mp4SampleDuration) / timeScale,\n startDTS: firstDTS / timeScale,\n endDTS: this.nextAvcDts / timeScale,\n type: 'video',\n flush: flush,\n nb: outputSamples.length,\n dropped: stats.dropped,\n isPartial: isPartial\n };\n // delta PTS between audio and video\n data.deltaPTS = Math.abs(data.startPTS - audioStartPTS);\n this.observer.trigger(_events2.default.FRAG_PARSING_DATA, data);\n return data;\n }\n }, {\n key: 'remuxAudio',\n value: function remuxAudio(track, timeOffset, contiguous, accurate, stats, isPartial) {\n var pesTimeScale = this.PES_TIMESCALE,\n mp4timeScale = track.timescale ? track.timescale : track.audiosamplerate,\n pes2mp4ScaleFactor = pesTimeScale / mp4timeScale,\n mp4SampleDuration = track.isAAC ? 1024 : 1152,\n expectedSampleDuration = mp4timeScale * mp4SampleDuration / track.audiosamplerate,\n rawMPEG = !track.isAAC && this.typeSupported.mpeg;\n var view,\n offset = rawMPEG ? 0 : 8,\n aacSample,\n mp4Sample,\n unit,\n mdat,\n moof,\n firstPTS,\n firstDTS,\n lastDTS,\n pts,\n dts,\n ptsnorm,\n dtsnorm,\n samples = [],\n samples0 = track.samples,\n fillFrame,\n newStamp;\n\n // for audio samples, also consider consecutive fragments as being contiguous (even if a level switch occurs),\n // for sake of clarity:\n // consecutive fragments are frags with less than 100ms gaps between new time offset and next expected PTS\n // contiguous fragments are consecutive fragments from same quality level (same level, new SN = old SN + 1)\n // this helps ensuring audio continuity\n // and this also avoids audio glitches/cut when switching quality, or reporting wrong duration on first audio frame\n\n contiguous |= samples0.length && this.nextAacPts && accurate && Math.abs(timeOffset - this.nextAacPts / pesTimeScale) < 0.1;\n var nextAacPts = contiguous && this.nextAacPts !== undefined ? this.nextAacPts : timeOffset * pesTimeScale;\n\n // If the audio track is missing samples, the frames seem to get \"left-shifted\" within the\n // resulting mp4 segment, causing sync issues and leaving gaps at the end of the audio segment.\n // In an effort to prevent this from happening, we inject frames here where there are gaps.\n // When possible, we inject a silent frame; when that's not possible, we duplicate the last\n // frame.\n var pesFrameDuration = expectedSampleDuration * pes2mp4ScaleFactor;\n var nextPtsNorm = nextAacPts;\n\n for (var i = 0; i < samples0.length; i++) {\n samples0[i].ptsNorm = this._PTSNormalize(samples0[i].pts - this._initDTS, nextAacPts);\n }\n samples0.sort(function (a, b) {\n return a.ptsNorm - b.ptsNorm;\n });\n\n // only inject/drop audio frames in case time offset is accurate\n if (accurate && track.isAAC) {\n for (var _i3 = 0; _i3 < samples0.length;) {\n // First, let's see how far off this frame is from where we expect it to be\n var sample = samples0[_i3],\n ptsNorm = sample.ptsNorm,\n delta = ptsNorm - nextPtsNorm;\n\n if (Math.abs(delta) > pesFrameDuration / 2) {\n stats.audioGap = stats.audioGap || [];\n stats.audioGap.push(delta / 90);\n }\n\n // If we're overlapping by more than a duration, drop this sample\n if (delta < -pesFrameDuration) {\n _logger.logger.log('Dropping frame due to ' + Math.abs(delta / 90) + ' ms overlap.');\n samples0.splice(_i3, 1);\n track.len -= sample.unit.length;\n // Don't touch nextPtsNorm or i\n }\n // Otherwise, if we're more than a frame away from where we should be, insert missing frames\n else if (delta > pesFrameDuration) {\n var missing = Math.round(delta / pesFrameDuration);\n _logger.logger.log('Injecting ' + missing + ' frame' + (missing > 1 ? 's' : '') + ' of missing audio due to ' + Math.round(delta / 90) + ' ms gap.');\n for (var j = 0; j < missing; j++) {\n newStamp = nextPtsNorm + this._initDTS;\n newStamp = Math.max(newStamp, this._initDTS);\n fillFrame = _aac2.default.getSilentFrame(track.channelCount);\n if (!fillFrame) {\n _logger.logger.log('Unable to get silent frame for given audio codec; duplicating last frame instead.');\n fillFrame = sample.unit.slice(0);\n }\n samples0.splice(_i3, 0, { unit: fillFrame, pts: newStamp, dts: newStamp });\n track.len += fillFrame.length;\n nextPtsNorm += pesFrameDuration;\n _i3 += 1;\n }\n\n // Adjust sample to next expected pts\n sample.pts = sample.dts = nextPtsNorm + this._initDTS;\n nextPtsNorm += pesFrameDuration;\n _i3 += 1;\n }\n // Otherwise, we're within half a frame duration, so just adjust pts\n else {\n nextPtsNorm += pesFrameDuration;\n if (_i3 === 0) {\n sample.pts = sample.dts = this._initDTS + nextAacPts;\n } else {\n sample.pts = sample.dts = samples0[_i3 - 1].pts + pesFrameDuration;\n }\n _i3 += 1;\n }\n }\n }\n\n while (samples0.length) {\n aacSample = samples0.shift();\n unit = aacSample.unit;\n pts = aacSample.pts - this._initDTS;\n dts = aacSample.dts - this._initDTS;\n //logger.log(`Audio/PTS:${Math.round(pts/90)}`);\n // if not first sample\n if (lastDTS !== undefined) {\n ptsnorm = this._PTSNormalize(pts, lastDTS);\n dtsnorm = this._PTSNormalize(dts, lastDTS);\n mp4Sample.duration = Math.round((dtsnorm - lastDTS) / pes2mp4ScaleFactor);\n } else {\n ptsnorm = this._PTSNormalize(pts, nextAacPts);\n dtsnorm = this._PTSNormalize(dts, nextAacPts);\n var _delta = Math.round(1000 * (ptsnorm - nextAacPts) / pesTimeScale),\n numMissingFrames = 0;\n // log delta\n if (contiguous && _delta && track.isAAC) {\n if (_delta > 0) {\n numMissingFrames = Math.round((ptsnorm - nextAacPts) / pesFrameDuration);\n _logger.logger.log(_delta + ' ms hole between AAC samples detected,filling it');\n if (numMissingFrames > 0) {\n fillFrame = _aac2.default.getSilentFrame(track.channelCount);\n if (!fillFrame) {\n fillFrame = unit.slice(0);\n }\n track.len += numMissingFrames * fillFrame.length;\n }\n // if we have frame overlap, overlapping for more than half a frame duraion\n } else if (_delta < -12) {\n // drop overlapping audio frames... browser will deal with it\n _logger.logger.log(-_delta + ' ms overlapping between AAC samples detected, drop frame');\n track.len -= unit.byteLength;\n continue;\n }\n // set PTS/DTS to expected PTS/DTS\n ptsnorm = dtsnorm = nextAacPts;\n }\n // remember first PTS of our aacSamples, ensure value is positive\n firstPTS = Math.max(0, ptsnorm);\n firstDTS = Math.max(0, dtsnorm);\n if (track.len <= 0) {\n return;\n }\n /* concatenate the audio data and construct the mdat in place\n (need 8 more bytes to fill length and mdat type) */\n if (rawMPEG) {\n mdat = new Uint8Array(track.len);\n } else {\n mdat = new Uint8Array(track.len + 8);\n view = new DataView(mdat.buffer);\n view.setUint32(0, mdat.byteLength);\n mdat.set(_mp4Generator2.default.types.mdat, 4);\n }\n for (var _i4 = 0; _i4 < numMissingFrames; _i4++) {\n newStamp = ptsnorm - (numMissingFrames - _i4) * pesFrameDuration;\n fillFrame = _aac2.default.getSilentFrame(track.channelCount);\n if (!fillFrame) {\n _logger.logger.log('Unable to get silent frame for given audio codec; duplicating this frame instead.');\n fillFrame = unit.slice(0);\n }\n mdat.set(fillFrame, offset);\n offset += fillFrame.byteLength;\n mp4Sample = {\n size: fillFrame.byteLength,\n cts: 0,\n duration: mp4SampleDuration,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: 1\n }\n };\n samples.push(mp4Sample);\n }\n }\n\n mdat.set(unit, offset);\n offset += unit.byteLength;\n //console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${aacSample.pts}/${aacSample.dts}/${this._initDTS}/${ptsnorm}/${dtsnorm}/${(aacSample.pts/4294967296).toFixed(3)}');\n mp4Sample = {\n size: unit.byteLength,\n cts: 0,\n duration: 0,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: 1\n }\n };\n samples.push(mp4Sample);\n lastDTS = dtsnorm;\n }\n var lastSampleDuration = 0;\n var nbSamples = samples.length;\n //set last sample duration as being identical to previous sample\n if (nbSamples >= 2) {\n lastSampleDuration = samples[nbSamples - 2].duration;\n mp4Sample.duration = lastSampleDuration;\n }\n if (nbSamples) {\n stats.audioDurAvg = stats.audioDurStd = 0;\n for (var _i5 = 0; _i5 < nbSamples; _i5++) {\n stats.audioDurAvg += samples[_i5].duration;\n stats.audioDurStd += samples[_i5].duration * samples[_i5].duration;\n }\n stats.audioDurStd = Math.sqrt(Math.abs(stats.audioDurStd - stats.audioDurAvg * stats.audioDurAvg / nbSamples) / nbSamples);\n stats.audioDurAvg /= nbSamples;\n // next aac sample PTS should be equal to last sample PTS + duration\n this.nextAacPts = ptsnorm + pes2mp4ScaleFactor * lastSampleDuration;\n //logger.log('Audio/PTS/PTSend:' + aacSample.pts.toFixed(0) + '/' + this.nextAacDts.toFixed(0));\n track.len = 0;\n track.samples = samples;\n if (rawMPEG) {\n moof = new Uint8Array();\n } else {\n moof = _mp4Generator2.default.moof(track.sequenceNumber++, firstDTS / pes2mp4ScaleFactor, track);\n }\n track.samples = [];\n var audioData = {\n data1: moof,\n data2: mdat,\n startPTS: firstPTS / pesTimeScale,\n endPTS: this.nextAacPts / pesTimeScale,\n startDTS: firstDTS / pesTimeScale,\n endDTS: (dtsnorm + pes2mp4ScaleFactor * lastSampleDuration) / pesTimeScale,\n type: 'audio',\n nb: nbSamples,\n isPartial: isPartial\n };\n this.observer.trigger(_events2.default.FRAG_PARSING_DATA, audioData);\n return audioData;\n }\n return null;\n }\n }, {\n key: 'remuxEmptyAudio',\n value: function remuxEmptyAudio(track, timeOffset, contiguous, videoData, stats, isPartial) {\n var pesTimeScale = this.PES_TIMESCALE,\n mp4timeScale = track.timescale ? track.timescale : track.audiosamplerate,\n pes2mp4ScaleFactor = pesTimeScale / mp4timeScale,\n startDTS = (contiguous ? this.nextAacPts : videoData.startDTS * pesTimeScale) + this._initDTS,\n endDTS = videoData.endDTS * pesTimeScale + this._initDTS,\n\n\n // one sample's duration value\n sampleDuration = 1024,\n frameDuration = pes2mp4ScaleFactor * sampleDuration,\n\n\n // samples count of this segment's duration\n nbSamples = Math.ceil((endDTS - startDTS) / frameDuration),\n\n\n // silent frame\n silentFrame = _aac2.default.getSilentFrame(track.channelCount);\n\n // Can't remux if we can't generate a silent frame...\n if (!silentFrame) {\n stats.noSilentFrame = (stats.noSilentFrame | 0) + 1;\n _logger.logger.trace('Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!');\n return;\n }\n\n var samples = [];\n for (var i = 0; i < nbSamples; i++) {\n var stamp = startDTS + i * frameDuration;\n samples.push({ unit: silentFrame.slice(0), pts: stamp, dts: stamp });\n track.len += silentFrame.length;\n }\n track.samples = samples;\n\n this.remuxAudio(track, timeOffset, contiguous, undefined, stats, isPartial);\n }\n }, {\n key: 'remuxID3',\n value: function remuxID3(track, timeOffset) {\n var length = track.samples.length,\n sample;\n // consume samples\n if (length) {\n for (var index = 0; index < length; index++) {\n sample = track.samples[index];\n // setting id3 pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = (sample.pts - this._initPTS) / this.PES_TIMESCALE;\n sample.dts = (sample.dts - this._initDTS) / this.PES_TIMESCALE;\n }\n this.observer.trigger(_events2.default.FRAG_PARSING_METADATA, {\n samples: track.samples\n });\n }\n\n track.samples = [];\n timeOffset = timeOffset;\n }\n }, {\n key: 'remuxText',\n value: function remuxText(track, timeOffset) {\n track.samples.sort(function (a, b) {\n return a.pts - b.pts;\n });\n\n var length = track.samples.length,\n sample;\n // consume samples\n if (length) {\n for (var index = 0; index < length; index++) {\n sample = track.samples[index];\n // setting text pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = (sample.pts - this._initPTS) / this.PES_TIMESCALE;\n }\n this.observer.trigger(_events2.default.FRAG_PARSING_USERDATA, {\n samples: track.samples\n });\n }\n\n track.samples = [];\n timeOffset = timeOffset;\n }\n }, {\n key: '_PTSNormalize',\n value: function _PTSNormalize(value, reference) {\n var offset;\n if (reference === undefined) {\n return value;\n }\n if (reference < value) {\n // - 2^33\n offset = -8589934592;\n } else {\n // + 2^33\n offset = 8589934592;\n }\n /* PTS is 33bit (from 0 to 2^33 -1)\n if diff between value and reference is bigger than half of the amplitude (2^32) then it means that\n PTS looping occured. fill the gap */\n while (Math.abs(value - reference) > 4294967296) {\n value += offset;\n }\n return value;\n }\n }, {\n key: 'passthrough',\n get: function get() {\n return false;\n }\n }]);\n\n return MP4Remuxer;\n}();\n\nexports.default = MP4Remuxer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * passthrough remuxer\n */\n\n\nvar _events = require('../events');\n\nvar _events2 = _interopRequireDefault(_events);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PassThroughRemuxer = function () {\n function PassThroughRemuxer(observer) {\n _classCallCheck(this, PassThroughRemuxer);\n\n this.observer = observer;\n this.ISGenerated = false;\n }\n\n _createClass(PassThroughRemuxer, [{\n key: 'destroy',\n value: function destroy() {}\n }, {\n key: 'insertDiscontinuity',\n value: function insertDiscontinuity() {}\n }, {\n key: 'switchLevel',\n value: function switchLevel() {\n this.ISGenerated = false;\n }\n }, {\n key: 'remux',\n value: function remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, rawData) {\n var observer = this.observer;\n // generate Init Segment if needed\n if (!this.ISGenerated) {\n var tracks = {},\n data = { tracks: tracks, unique: true },\n track = videoTrack,\n codec = track.codec;\n\n if (codec) {\n data.tracks.video = {\n container: track.container,\n codec: codec,\n metadata: {\n width: track.width,\n height: track.height\n }\n };\n }\n\n track = audioTrack;\n codec = track.codec;\n if (codec) {\n data.tracks.audio = {\n container: track.container,\n codec: codec,\n metadata: {\n channelCount: track.channelCount\n }\n };\n }\n this.ISGenerated = true;\n observer.trigger(_events2.default.FRAG_PARSING_INIT_SEGMENT, data);\n }\n observer.trigger(_events2.default.FRAG_PARSING_DATA, {\n data1: rawData,\n startPTS: timeOffset,\n startDTS: timeOffset,\n type: 'audiovideo',\n nb: 1,\n dropped: 0,\n deltaPTS: 0\n });\n }\n }, {\n key: 'passthrough',\n get: function get() {\n return true;\n }\n }]);\n\n return PassThroughRemuxer;\n}();\n\nexports.default = PassThroughRemuxer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js\nvar AttrList = function () {\n function AttrList(attrs) {\n _classCallCheck(this, AttrList);\n\n if (typeof attrs === 'string') {\n attrs = AttrList.parseAttrList(attrs);\n }\n for (var attr in attrs) {\n if (attrs.hasOwnProperty(attr)) {\n this[attr] = attrs[attr];\n }\n }\n }\n\n _createClass(AttrList, [{\n key: 'decimalInteger',\n value: function decimalInteger(attrName) {\n var intValue = parseInt(this[attrName], 10);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n return intValue;\n }\n }, {\n key: 'hexadecimalInteger',\n value: function hexadecimalInteger(attrName) {\n if (this[attrName]) {\n var stringValue = (this[attrName] || '0x').slice(2);\n stringValue = (stringValue.length & 1 ? '0' : '') + stringValue;\n\n var value = new Uint8Array(stringValue.length / 2);\n for (var i = 0; i < stringValue.length / 2; i++) {\n value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);\n }\n return value;\n } else {\n return null;\n }\n }\n }, {\n key: 'hexadecimalIntegerAsNumber',\n value: function hexadecimalIntegerAsNumber(attrName) {\n var intValue = parseInt(this[attrName], 16);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n return intValue;\n }\n }, {\n key: 'decimalFloatingPoint',\n value: function decimalFloatingPoint(attrName) {\n return parseFloat(this[attrName]);\n }\n }, {\n key: 'enumeratedString',\n value: function enumeratedString(attrName) {\n return this[attrName];\n }\n }, {\n key: 'decimalResolution',\n value: function decimalResolution(attrName) {\n var res = /^(\\d+)x(\\d+)$/.exec(this[attrName]);\n if (res === null) {\n return undefined;\n }\n return {\n width: parseInt(res[1], 10),\n height: parseInt(res[2], 10)\n };\n }\n }], [{\n key: 'parseAttrList',\n value: function parseAttrList(input) {\n var re = /\\s*(.+?)\\s*=((?:\\\".*?\\\")|.*?)(?:,|$)/g;\n var match,\n attrs = {};\n while ((match = re.exec(input)) !== null) {\n var value = match[2],\n quote = '\"';\n\n if (value.indexOf(quote) === 0 && value.lastIndexOf(quote) === value.length - 1) {\n value = value.slice(1, -1);\n }\n attrs[match[1]] = value;\n }\n return attrs;\n }\n }]);\n\n return AttrList;\n}();\n\nexports.default = AttrList;","\"use strict\";\n\nvar BinarySearch = {\n /**\n * Searches for an item in an array which matches a certain condition.\n * This requires the condition to only match one item in the array,\n * and for the array to be ordered.\n *\n * @param {Array} list The array to search.\n * @param {Function} comparisonFunction\n * Called and provided a candidate item as the first argument.\n * Should return:\n * > -1 if the item should be located at a lower index than the provided item.\n * > 1 if the item should be located at a higher index than the provided item.\n * > 0 if the item is the item you're looking for.\n *\n * @return {*} The object if it is found or null otherwise.\n */\n search: function search(list, comparisonFunction) {\n var minIndex = 0;\n var maxIndex = list.length - 1;\n var currentIndex = null;\n var currentElement = null;\n\n while (minIndex <= maxIndex) {\n currentIndex = (minIndex + maxIndex) / 2 | 0;\n currentElement = list[currentIndex];\n\n var comparisonResult = comparisonFunction(currentElement);\n if (comparisonResult > 0) {\n minIndex = currentIndex + 1;\n } else if (comparisonResult < 0) {\n maxIndex = currentIndex - 1;\n } else {\n return currentElement;\n }\n }\n\n return null;\n }\n};\n\nmodule.exports = BinarySearch;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar browser = {\n init: function init() {\n var res = void 0,\n ua = void 0,\n info = void 0;\n if (!(ua = typeof window !== 'undefined' && window.navigator && navigator.userAgent.toLowerCase())) {\n return {};\n }\n if (res = /[( ]msie ([6789]|10).\\d[);]/.exec(ua)) {\n info = { browser: 'ie', version: res[1] };\n }\n if (res = /[( ]trident\\/\\d+(\\.\\d)+.*rv:(\\d\\d)(\\.\\d)+[);]/.exec(ua)) {\n info = { browser: 'ie', version: res[2] };\n }\n if (ua.indexOf('firefox') > -1) {\n info = { browser: 'firefox' };\n }\n if (ua.indexOf('chrome') > -1) {\n info = { browser: 'chrome' };\n }\n if (ua.indexOf('android') > -1) {\n info = { browser: 'android' };\n }\n var vendor = navigator.vendor;\n if (vendor && vendor.indexOf('Apple') > -1 && !ua.match('CriOS')) {\n info = { browser: 'safari' };\n }\n info = info || {};\n return {\n isIe: info.browser === 'ie',\n isFirefox: info.browser === 'firefox',\n isChrome: info.browser === 'chrome',\n isSafari: info.browser === 'safari',\n isAndroid: info.browser === 'android',\n browser: info,\n ua: ua\n };\n }\n};\nexports.default = browser;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n *\n * This code was ported from the dash.js project at:\n * https://github.com/Dash-Industry-Forum/dash.js/blob/development/externals/cea608-parser.js\n * https://github.com/Dash-Industry-Forum/dash.js/commit/8269b26a761e0853bb21d78780ed945144ecdd4d#diff-71bc295a2d6b6b7093a1d3290d53a4b2\n *\n * The original copyright appears below:\n *\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2015-2016, DASH Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * 2. Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Exceptions from regular ASCII. CodePoints are mapped to UTF-16 codes\n */\n\nvar specialCea608CharsCodes = {\n 0x2a: 0xe1, // lowercase a, acute accent\n 0x5c: 0xe9, // lowercase e, acute accent\n 0x5e: 0xed, // lowercase i, acute accent\n 0x5f: 0xf3, // lowercase o, acute accent\n 0x60: 0xfa, // lowercase u, acute accent\n 0x7b: 0xe7, // lowercase c with cedilla\n 0x7c: 0xf7, // division symbol\n 0x7d: 0xd1, // uppercase N tilde\n 0x7e: 0xf1, // lowercase n tilde\n 0x7f: 0x2588, // Full block\n // THIS BLOCK INCLUDES THE 16 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x11 AND LOW BETWEEN 0x30 AND 0x3F\n // THIS MEANS THAT \\x50 MUST BE ADDED TO THE VALUES\n 0x80: 0xae, // Registered symbol (R)\n 0x81: 0xb0, // degree sign\n 0x82: 0xbd, // 1/2 symbol\n 0x83: 0xbf, // Inverted (open) question mark\n 0x84: 0x2122, // Trademark symbol (TM)\n 0x85: 0xa2, // Cents symbol\n 0x86: 0xa3, // Pounds sterling\n 0x87: 0x266a, // Music 8'th note\n 0x88: 0xe0, // lowercase a, grave accent\n 0x89: 0x20, // transparent space (regular)\n 0x8a: 0xe8, // lowercase e, grave accent\n 0x8b: 0xe2, // lowercase a, circumflex accent\n 0x8c: 0xea, // lowercase e, circumflex accent\n 0x8d: 0xee, // lowercase i, circumflex accent\n 0x8e: 0xf4, // lowercase o, circumflex accent\n 0x8f: 0xfb, // lowercase u, circumflex accent\n // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x12 AND LOW BETWEEN 0x20 AND 0x3F\n 0x90: 0xc1, // capital letter A with acute\n 0x91: 0xc9, // capital letter E with acute\n 0x92: 0xd3, // capital letter O with acute\n 0x93: 0xda, // capital letter U with acute\n 0x94: 0xdc, // capital letter U with diaresis\n 0x95: 0xfc, // lowercase letter U with diaeresis\n 0x96: 0x2018, // opening single quote\n 0x97: 0xa1, // inverted exclamation mark\n 0x98: 0x2a, // asterisk\n 0x99: 0x2019, // closing single quote\n 0x9a: 0x2501, // box drawings heavy horizontal\n 0x9b: 0xa9, // copyright sign\n 0x9c: 0x2120, // Service mark\n 0x9d: 0x2022, // (round) bullet\n 0x9e: 0x201c, // Left double quotation mark\n 0x9f: 0x201d, // Right double quotation mark\n 0xa0: 0xc0, // uppercase A, grave accent\n 0xa1: 0xc2, // uppercase A, circumflex\n 0xa2: 0xc7, // uppercase C with cedilla\n 0xa3: 0xc8, // uppercase E, grave accent\n 0xa4: 0xca, // uppercase E, circumflex\n 0xa5: 0xcb, // capital letter E with diaresis\n 0xa6: 0xeb, // lowercase letter e with diaresis\n 0xa7: 0xce, // uppercase I, circumflex\n 0xa8: 0xcf, // uppercase I, with diaresis\n 0xa9: 0xef, // lowercase i, with diaresis\n 0xaa: 0xd4, // uppercase O, circumflex\n 0xab: 0xd9, // uppercase U, grave accent\n 0xac: 0xf9, // lowercase u, grave accent\n 0xad: 0xdb, // uppercase U, circumflex\n 0xae: 0xab, // left-pointing double angle quotation mark\n 0xaf: 0xbb, // right-pointing double angle quotation mark\n // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x13 AND LOW BETWEEN 0x20 AND 0x3F\n 0xb0: 0xc3, // Uppercase A, tilde\n 0xb1: 0xe3, // Lowercase a, tilde\n 0xb2: 0xcd, // Uppercase I, acute accent\n 0xb3: 0xcc, // Uppercase I, grave accent\n 0xb4: 0xec, // Lowercase i, grave accent\n 0xb5: 0xd2, // Uppercase O, grave accent\n 0xb6: 0xf2, // Lowercase o, grave accent\n 0xb7: 0xd5, // Uppercase O, tilde\n 0xb8: 0xf5, // Lowercase o, tilde\n 0xb9: 0x7b, // Open curly brace\n 0xba: 0x7d, // Closing curly brace\n 0xbb: 0x5c, // Backslash\n 0xbc: 0x5e, // Caret\n 0xbd: 0x5f, // Underscore\n 0xbe: 0x7c, // Pipe (vertical line)\n 0xbf: 0x223c, // Tilde operator\n 0xc0: 0xc4, // Uppercase A, umlaut\n 0xc1: 0xe4, // Lowercase A, umlaut\n 0xc2: 0xd6, // Uppercase O, umlaut\n 0xc3: 0xf6, // Lowercase o, umlaut\n 0xc4: 0xdf, // Esszett (sharp S)\n 0xc5: 0xa5, // Yen symbol\n 0xc6: 0xa4, // Generic currency sign\n 0xc7: 0x2503, // Box drawings heavy vertical\n 0xc8: 0xc5, // Uppercase A, ring\n 0xc9: 0xe5, // Lowercase A, ring\n 0xca: 0xd8, // Uppercase O, stroke\n 0xcb: 0xf8, // Lowercase o, strok\n 0xcc: 0x250f, // Box drawings heavy down and right\n 0xcd: 0x2513, // Box drawings heavy down and left\n 0xce: 0x2517, // Box drawings heavy up and right\n 0xcf: 0x251b // Box drawings heavy up and left\n};\n\n/**\n * Utils\n */\nvar getCharForByte = function getCharForByte(byte) {\n var charCode = byte;\n if (specialCea608CharsCodes.hasOwnProperty(byte)) {\n charCode = specialCea608CharsCodes[byte];\n }\n return String.fromCharCode(charCode);\n};\n\nvar NR_ROWS = 15,\n NR_COLS = 32;\n// Tables to look up row from PAC data\nvar rowsLowCh1 = { 0x11: 1, 0x12: 3, 0x15: 5, 0x16: 7, 0x17: 9, 0x10: 11, 0x13: 12, 0x14: 14 };\nvar rowsHighCh1 = { 0x11: 2, 0x12: 4, 0x15: 6, 0x16: 8, 0x17: 10, 0x13: 13, 0x14: 15 };\nvar rowsLowCh2 = { 0x19: 1, 0x1A: 3, 0x1D: 5, 0x1E: 7, 0x1F: 9, 0x18: 11, 0x1B: 12, 0x1C: 14 };\nvar rowsHighCh2 = { 0x19: 2, 0x1A: 4, 0x1D: 6, 0x1E: 8, 0x1F: 10, 0x1B: 13, 0x1C: 15 };\n\nvar backgroundColors = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'black', 'transparent'];\n\n/**\n * Simple logger class to be able to write with time-stamps and filter on level.\n */\nvar logger = {\n verboseFilter: { 'DATA': 3, 'DEBUG': 3, 'INFO': 2, 'WARNING': 2, 'TEXT': 1, 'ERROR': 0 },\n time: null,\n verboseLevel: 0, // Only write errors\n setTime: function setTime(newTime) {\n this.time = newTime;\n },\n log: function log(severity, msg) {\n var minLevel = this.verboseFilter[severity];\n if (this.verboseLevel >= minLevel) {\n console.log(this.time + ' [' + severity + '] ' + msg);\n }\n }\n};\n\nvar numArrayToHexArray = function numArrayToHexArray(numArray) {\n var hexArray = [];\n for (var j = 0; j < numArray.length; j++) {\n hexArray.push(numArray[j].toString(16));\n }\n return hexArray;\n};\n\nvar PenState = function () {\n function PenState(foreground, underline, italics, background, flash) {\n _classCallCheck(this, PenState);\n\n this.foreground = foreground || 'white';\n this.underline = underline || false;\n this.italics = italics || false;\n this.background = background || 'black';\n this.flash = flash || false;\n }\n\n _createClass(PenState, [{\n key: 'reset',\n value: function reset() {\n this.foreground = 'white';\n this.underline = false;\n this.italics = false;\n this.background = 'black';\n this.flash = false;\n }\n }, {\n key: 'setStyles',\n value: function setStyles(styles) {\n var attribs = ['foreground', 'underline', 'italics', 'background', 'flash'];\n for (var i = 0; i < attribs.length; i++) {\n var style = attribs[i];\n if (styles.hasOwnProperty(style)) {\n this[style] = styles[style];\n }\n }\n }\n }, {\n key: 'isDefault',\n value: function isDefault() {\n return this.foreground === 'white' && !this.underline && !this.italics && this.background === 'black' && !this.flash;\n }\n }, {\n key: 'equals',\n value: function equals(other) {\n return this.foreground === other.foreground && this.underline === other.underline && this.italics === other.italics && this.background === other.background && this.flash === other.flash;\n }\n }, {\n key: 'copy',\n value: function copy(newPenState) {\n this.foreground = newPenState.foreground;\n this.underline = newPenState.underline;\n this.italics = newPenState.italics;\n this.background = newPenState.background;\n this.flash = newPenState.flash;\n }\n }, {\n key: 'toString',\n value: function toString() {\n return 'color=' + this.foreground + ', underline=' + this.underline + ', italics=' + this.italics + ', background=' + this.background + ', flash=' + this.flash;\n }\n }]);\n\n return PenState;\n}();\n\n/**\n * Unicode character with styling and background.\n * @constructor\n */\n\n\nvar StyledUnicodeChar = function () {\n function StyledUnicodeChar(uchar, foreground, underline, italics, background, flash) {\n _classCallCheck(this, StyledUnicodeChar);\n\n this.uchar = uchar || ' '; // unicode character\n this.penState = new PenState(foreground, underline, italics, background, flash);\n }\n\n _createClass(StyledUnicodeChar, [{\n key: 'reset',\n value: function reset() {\n this.uchar = ' ';\n this.penState.reset();\n }\n }, {\n key: 'setChar',\n value: function setChar(uchar, newPenState) {\n this.uchar = uchar;\n this.penState.copy(newPenState);\n }\n }, {\n key: 'setPenState',\n value: function setPenState(newPenState) {\n this.penState.copy(newPenState);\n }\n }, {\n key: 'equals',\n value: function equals(other) {\n return this.uchar === other.uchar && this.penState.equals(other.penState);\n }\n }, {\n key: 'copy',\n value: function copy(newChar) {\n this.uchar = newChar.uchar;\n this.penState.copy(newChar.penState);\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return this.uchar === ' ' && this.penState.isDefault();\n }\n }]);\n\n return StyledUnicodeChar;\n}();\n\n/**\n * CEA-608 row consisting of NR_COLS instances of StyledUnicodeChar.\n * @constructor\n */\n\n\nvar Row = function () {\n function Row() {\n _classCallCheck(this, Row);\n\n this.chars = [];\n for (var i = 0; i < NR_COLS; i++) {\n this.chars.push(new StyledUnicodeChar());\n }\n this.pos = 0;\n this.currPenState = new PenState();\n }\n\n _createClass(Row, [{\n key: 'equals',\n value: function equals(other) {\n var equal = true;\n for (var i = 0; i < NR_COLS; i++) {\n if (!this.chars[i].equals(other.chars[i])) {\n equal = false;\n break;\n }\n }\n return equal;\n }\n }, {\n key: 'copy',\n value: function copy(other) {\n for (var i = 0; i < NR_COLS; i++) {\n this.chars[i].copy(other.chars[i]);\n }\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n var empty = true;\n for (var i = 0; i < NR_COLS; i++) {\n if (!this.chars[i].isEmpty()) {\n empty = false;\n break;\n }\n }\n return empty;\n }\n\n /**\n * Set the cursor to a valid column.\n */\n\n }, {\n key: 'setCursor',\n value: function setCursor(absPos) {\n if (this.pos !== absPos) {\n this.pos = absPos;\n }\n if (this.pos < 0) {\n logger.log('ERROR', 'Negative cursor position ' + this.pos);\n this.pos = 0;\n } else if (this.pos > NR_COLS) {\n logger.log('ERROR', 'Too large cursor position ' + this.pos);\n this.pos = NR_COLS;\n }\n }\n\n /**\n * Move the cursor relative to current position.\n */\n\n }, {\n key: 'moveCursor',\n value: function moveCursor(relPos) {\n var newPos = this.pos + relPos;\n if (relPos > 1) {\n for (var i = this.pos + 1; i < newPos + 1; i++) {\n this.chars[i].setPenState(this.currPenState);\n }\n }\n this.setCursor(newPos);\n }\n\n /**\n * Backspace, move one step back and clear character.\n */\n\n }, {\n key: 'backSpace',\n value: function backSpace() {\n this.moveCursor(-1);\n this.chars[this.pos].setChar(' ', this.currPenState);\n }\n }, {\n key: 'insertChar',\n value: function insertChar(byte) {\n if (byte >= 0x90) {\n //Extended char\n this.backSpace();\n }\n var char = getCharForByte(byte);\n if (this.pos >= NR_COLS) {\n logger.log('ERROR', 'Cannot insert ' + byte.toString(16) + ' (' + char + ') at position ' + this.pos + '. Skipping it!');\n return;\n }\n this.chars[this.pos].setChar(char, this.currPenState);\n this.moveCursor(1);\n }\n }, {\n key: 'clearFromPos',\n value: function clearFromPos(startPos) {\n var i;\n for (i = startPos; i < NR_COLS; i++) {\n this.chars[i].reset();\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.clearFromPos(0);\n this.pos = 0;\n this.currPenState.reset();\n }\n }, {\n key: 'clearToEndOfRow',\n value: function clearToEndOfRow() {\n this.clearFromPos(this.pos);\n }\n }, {\n key: 'getTextString',\n value: function getTextString() {\n var chars = [];\n var empty = true;\n for (var i = 0; i < NR_COLS; i++) {\n var char = this.chars[i].uchar;\n if (char !== ' ') {\n empty = false;\n }\n chars.push(char);\n }\n if (empty) {\n return '';\n } else {\n return chars.join('');\n }\n }\n }, {\n key: 'setPenStyles',\n value: function setPenStyles(styles) {\n this.currPenState.setStyles(styles);\n var currChar = this.chars[this.pos];\n currChar.setPenState(this.currPenState);\n }\n }]);\n\n return Row;\n}();\n\n/**\n * Keep a CEA-608 screen of 32x15 styled characters\n * @constructor\n*/\n\n\nvar CaptionScreen = function () {\n function CaptionScreen() {\n _classCallCheck(this, CaptionScreen);\n\n this.rows = [];\n for (var i = 0; i < NR_ROWS; i++) {\n this.rows.push(new Row()); // Note that we use zero-based numbering (0-14)\n }\n this.currRow = NR_ROWS - 1;\n this.nrRollUpRows = null;\n this.reset();\n }\n\n _createClass(CaptionScreen, [{\n key: 'reset',\n value: function reset() {\n for (var i = 0; i < NR_ROWS; i++) {\n this.rows[i].clear();\n }\n this.currRow = NR_ROWS - 1;\n }\n }, {\n key: 'equals',\n value: function equals(other) {\n var equal = true;\n for (var i = 0; i < NR_ROWS; i++) {\n if (!this.rows[i].equals(other.rows[i])) {\n equal = false;\n break;\n }\n }\n return equal;\n }\n }, {\n key: 'copy',\n value: function copy(other) {\n for (var i = 0; i < NR_ROWS; i++) {\n this.rows[i].copy(other.rows[i]);\n }\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n var empty = true;\n for (var i = 0; i < NR_ROWS; i++) {\n if (!this.rows[i].isEmpty()) {\n empty = false;\n break;\n }\n }\n return empty;\n }\n }, {\n key: 'backSpace',\n value: function backSpace() {\n var row = this.rows[this.currRow];\n row.backSpace();\n }\n }, {\n key: 'clearToEndOfRow',\n value: function clearToEndOfRow() {\n var row = this.rows[this.currRow];\n row.clearToEndOfRow();\n }\n\n /**\n * Insert a character (without styling) in the current row.\n */\n\n }, {\n key: 'insertChar',\n value: function insertChar(char) {\n var row = this.rows[this.currRow];\n row.insertChar(char);\n }\n }, {\n key: 'setPen',\n value: function setPen(styles) {\n var row = this.rows[this.currRow];\n row.setPenStyles(styles);\n }\n }, {\n key: 'moveCursor',\n value: function moveCursor(relPos) {\n var row = this.rows[this.currRow];\n row.moveCursor(relPos);\n }\n }, {\n key: 'setCursor',\n value: function setCursor(absPos) {\n logger.log('INFO', 'setCursor: ' + absPos);\n var row = this.rows[this.currRow];\n row.setCursor(absPos);\n }\n }, {\n key: 'setPAC',\n value: function setPAC(pacData) {\n logger.log('INFO', 'pacData = ' + JSON.stringify(pacData));\n var newRow = pacData.row - 1;\n if (this.nrRollUpRows && newRow < this.nrRollUpRows - 1) {\n newRow = this.nrRollUpRows - 1;\n }\n this.currRow = newRow;\n var row = this.rows[this.currRow];\n if (pacData.indent !== null) {\n var indent = pacData.indent;\n var prevPos = Math.max(indent - 1, 0);\n row.setCursor(pacData.indent);\n pacData.color = row.chars[prevPos].penState.foreground;\n }\n var styles = { foreground: pacData.color, underline: pacData.underline, italics: pacData.italics, background: 'black', flash: false };\n this.setPen(styles);\n }\n\n /**\n * Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).\n */\n\n }, {\n key: 'setBkgData',\n value: function setBkgData(bkgData) {\n\n logger.log('INFO', 'bkgData = ' + JSON.stringify(bkgData));\n this.backSpace();\n this.setPen(bkgData);\n this.insertChar(0x20); //Space\n }\n }, {\n key: 'setRollUpRows',\n value: function setRollUpRows(nrRows) {\n this.nrRollUpRows = nrRows;\n }\n }, {\n key: 'rollUp',\n value: function rollUp() {\n if (this.nrRollUpRows === null) {\n logger.log('DEBUG', 'roll_up but nrRollUpRows not set yet');\n return; //Not properly setup\n }\n logger.log('TEXT', this.getDisplayText());\n var topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n var topRow = this.rows.splice(topRowIndex, 1)[0];\n topRow.clear();\n this.rows.splice(this.currRow, 0, topRow);\n logger.log('INFO', 'Rolling up');\n //logger.log('TEXT', this.get_display_text())\n }\n\n /**\n * Get all non-empty rows with as unicode text.\n */\n\n }, {\n key: 'getDisplayText',\n value: function getDisplayText(asOneRow) {\n asOneRow = asOneRow || false;\n var displayText = [];\n var text = '';\n var rowNr = -1;\n for (var i = 0; i < NR_ROWS; i++) {\n var rowText = this.rows[i].getTextString();\n if (rowText) {\n rowNr = i + 1;\n if (asOneRow) {\n displayText.push('Row ' + rowNr + ': \\'' + rowText + '\\'');\n } else {\n displayText.push(rowText.trim());\n }\n }\n }\n if (displayText.length > 0) {\n if (asOneRow) {\n text = '[' + displayText.join(' | ') + ']';\n } else {\n text = displayText.join('\\n');\n }\n }\n return text;\n }\n }, {\n key: 'getTextAndFormat',\n value: function getTextAndFormat() {\n return this.rows;\n }\n }]);\n\n return CaptionScreen;\n}();\n\n//var modes = ['MODE_ROLL-UP', 'MODE_POP-ON', 'MODE_PAINT-ON', 'MODE_TEXT'];\n\nvar Cea608Channel = function () {\n function Cea608Channel(channelNumber, outputFilter) {\n _classCallCheck(this, Cea608Channel);\n\n this.chNr = channelNumber;\n this.outputFilter = outputFilter;\n this.mode = null;\n this.verbose = 0;\n this.displayedMemory = new CaptionScreen();\n this.nonDisplayedMemory = new CaptionScreen();\n this.lastOutputScreen = new CaptionScreen();\n this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n this.writeScreen = this.displayedMemory;\n this.mode = null;\n this.cueStartTime = null; // Keeps track of where a cue started.\n }\n\n _createClass(Cea608Channel, [{\n key: 'reset',\n value: function reset() {\n this.mode = null;\n this.displayedMemory.reset();\n this.nonDisplayedMemory.reset();\n this.lastOutputScreen.reset();\n this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n this.writeScreen = this.displayedMemory;\n this.mode = null;\n this.cueStartTime = null;\n this.lastCueEndTime = null;\n }\n }, {\n key: 'getHandler',\n value: function getHandler() {\n return this.outputFilter;\n }\n }, {\n key: 'setHandler',\n value: function setHandler(newHandler) {\n this.outputFilter = newHandler;\n }\n }, {\n key: 'setPAC',\n value: function setPAC(pacData) {\n this.writeScreen.setPAC(pacData);\n }\n }, {\n key: 'setBkgData',\n value: function setBkgData(bkgData) {\n this.writeScreen.setBkgData(bkgData);\n }\n }, {\n key: 'setMode',\n value: function setMode(newMode) {\n if (newMode === this.mode) {\n return;\n }\n this.mode = newMode;\n logger.log('INFO', 'MODE=' + newMode);\n if (this.mode === 'MODE_POP-ON') {\n this.writeScreen = this.nonDisplayedMemory;\n } else {\n this.writeScreen = this.displayedMemory;\n this.writeScreen.reset();\n }\n if (this.mode !== 'MODE_ROLL-UP') {\n this.displayedMemory.nrRollUpRows = null;\n this.nonDisplayedMemory.nrRollUpRows = null;\n }\n this.mode = newMode;\n }\n }, {\n key: 'insertChars',\n value: function insertChars(chars) {\n for (var i = 0; i < chars.length; i++) {\n this.writeScreen.insertChar(chars[i]);\n }\n var screen = this.writeScreen === this.displayedMemory ? 'DISP' : 'NON_DISP';\n logger.log('INFO', screen + ': ' + this.writeScreen.getDisplayText(true));\n if (this.mode === 'MODE_PAINT-ON' || this.mode === 'MODE_ROLL-UP') {\n logger.log('TEXT', 'DISPLAYED: ' + this.displayedMemory.getDisplayText(true));\n this.outputDataUpdate();\n }\n }\n }, {\n key: 'ccRCL',\n value: function ccRCL() {\n // Resume Caption Loading (switch mode to Pop On)\n logger.log('INFO', 'RCL - Resume Caption Loading');\n this.setMode('MODE_POP-ON');\n }\n }, {\n key: 'ccBS',\n value: function ccBS() {\n // BackSpace\n logger.log('INFO', 'BS - BackSpace');\n if (this.mode === 'MODE_TEXT') {\n return;\n }\n this.writeScreen.backSpace();\n if (this.writeScreen === this.displayedMemory) {\n this.outputDataUpdate();\n }\n }\n }, {\n key: 'ccAOF',\n value: function ccAOF() {\n // Reserved (formerly Alarm Off)\n return;\n }\n }, {\n key: 'ccAON',\n value: function ccAON() {\n // Reserved (formerly Alarm On)\n return;\n }\n }, {\n key: 'ccDER',\n value: function ccDER() {\n // Delete to End of Row\n logger.log('INFO', 'DER- Delete to End of Row');\n this.writeScreen.clearToEndOfRow();\n this.outputDataUpdate();\n }\n }, {\n key: 'ccRU',\n value: function ccRU(nrRows) {\n //Roll-Up Captions-2,3,or 4 Rows\n logger.log('INFO', 'RU(' + nrRows + ') - Roll Up');\n this.writeScreen = this.displayedMemory;\n this.setMode('MODE_ROLL-UP');\n this.writeScreen.setRollUpRows(nrRows);\n }\n }, {\n key: 'ccFON',\n value: function ccFON() {\n //Flash On\n logger.log('INFO', 'FON - Flash On');\n this.writeScreen.setPen({ flash: true });\n }\n }, {\n key: 'ccRDC',\n value: function ccRDC() {\n // Resume Direct Captioning (switch mode to PaintOn)\n logger.log('INFO', 'RDC - Resume Direct Captioning');\n this.setMode('MODE_PAINT-ON');\n }\n }, {\n key: 'ccTR',\n value: function ccTR() {\n // Text Restart in text mode (not supported, however)\n logger.log('INFO', 'TR');\n this.setMode('MODE_TEXT');\n }\n }, {\n key: 'ccRTD',\n value: function ccRTD() {\n // Resume Text Display in Text mode (not supported, however)\n logger.log('INFO', 'RTD');\n this.setMode('MODE_TEXT');\n }\n }, {\n key: 'ccEDM',\n value: function ccEDM() {\n // Erase Displayed Memory\n logger.log('INFO', 'EDM - Erase Displayed Memory');\n this.displayedMemory.reset();\n this.outputDataUpdate();\n }\n }, {\n key: 'ccCR',\n value: function ccCR() {\n // Carriage Return\n logger.log('CR - Carriage Return');\n this.writeScreen.rollUp();\n this.outputDataUpdate();\n }\n }, {\n key: 'ccENM',\n value: function ccENM() {\n //Erase Non-Displayed Memory\n logger.log('INFO', 'ENM - Erase Non-displayed Memory');\n this.nonDisplayedMemory.reset();\n }\n }, {\n key: 'ccEOC',\n value: function ccEOC() {\n //End of Caption (Flip Memories)\n logger.log('INFO', 'EOC - End Of Caption');\n if (this.mode === 'MODE_POP-ON') {\n var tmp = this.displayedMemory;\n this.displayedMemory = this.nonDisplayedMemory;\n this.nonDisplayedMemory = tmp;\n this.writeScreen = this.nonDisplayedMemory;\n logger.log('TEXT', 'DISP: ' + this.displayedMemory.getDisplayText());\n }\n this.outputDataUpdate();\n }\n }, {\n key: 'ccTO',\n value: function ccTO(nrCols) {\n // Tab Offset 1,2, or 3 columns\n logger.log('INFO', 'TO(' + nrCols + ') - Tab Offset');\n this.writeScreen.moveCursor(nrCols);\n }\n }, {\n key: 'ccMIDROW',\n value: function ccMIDROW(secondByte) {\n // Parse MIDROW command\n var styles = { flash: false };\n styles.underline = secondByte % 2 === 1;\n styles.italics = secondByte >= 0x2e;\n if (!styles.italics) {\n var colorIndex = Math.floor(secondByte / 2) - 0x10;\n var colors = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta'];\n styles.foreground = colors[colorIndex];\n } else {\n styles.foreground = 'white';\n }\n logger.log('INFO', 'MIDROW: ' + JSON.stringify(styles));\n this.writeScreen.setPen(styles);\n }\n }, {\n key: 'outputDataUpdate',\n value: function outputDataUpdate() {\n var t = logger.time;\n if (t === null) {\n return;\n }\n if (this.outputFilter) {\n if (this.outputFilter.updateData) {\n this.outputFilter.updateData(t, this.displayedMemory);\n }\n if (this.cueStartTime === null && !this.displayedMemory.isEmpty()) {\n // Start of a new cue\n this.cueStartTime = t;\n } else {\n if (!this.displayedMemory.equals(this.lastOutputScreen)) {\n if (this.outputFilter.newCue) {\n this.outputFilter.newCue(this.cueStartTime, t, this.lastOutputScreen);\n }\n this.cueStartTime = this.displayedMemory.isEmpty() ? null : t;\n }\n }\n this.lastOutputScreen.copy(this.displayedMemory);\n }\n }\n }, {\n key: 'cueSplitAtTime',\n value: function cueSplitAtTime(t) {\n if (this.outputFilter) {\n if (!this.displayedMemory.isEmpty()) {\n if (this.outputFilter.newCue) {\n this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory);\n }\n this.cueStartTime = t;\n }\n }\n }\n }]);\n\n return Cea608Channel;\n}();\n\nvar Cea608Parser = function () {\n function Cea608Parser(field, out1, out2) {\n _classCallCheck(this, Cea608Parser);\n\n this.field = field || 1;\n this.outputs = [out1, out2];\n this.channels = [new Cea608Channel(1, out1), new Cea608Channel(2, out2)];\n this.currChNr = -1; // Will be 1 or 2\n this.lastCmdA = null; // First byte of last command\n this.lastCmdB = null; // Second byte of last command\n this.bufferedData = [];\n this.startTime = null;\n this.lastTime = null;\n this.dataCounters = { 'padding': 0, 'char': 0, 'cmd': 0, 'other': 0 };\n }\n\n _createClass(Cea608Parser, [{\n key: 'getHandler',\n value: function getHandler(index) {\n return this.channels[index].getHandler();\n }\n }, {\n key: 'setHandler',\n value: function setHandler(index, newHandler) {\n this.channels[index].setHandler(newHandler);\n }\n\n /**\n * Add data for time t in forms of list of bytes (unsigned ints). The bytes are treated as pairs.\n */\n\n }, {\n key: 'addData',\n value: function addData(t, byteList) {\n var cmdFound,\n a,\n b,\n charsFound = false;\n\n this.lastTime = t;\n logger.setTime(t);\n\n for (var i = 0; i < byteList.length; i += 2) {\n a = byteList[i] & 0x7f;\n b = byteList[i + 1] & 0x7f;\n if (a === 0 && b === 0) {\n this.dataCounters.padding += 2;\n continue;\n } else {\n logger.log('DATA', '[' + numArrayToHexArray([byteList[i], byteList[i + 1]]) + '] -> (' + numArrayToHexArray([a, b]) + ')');\n }\n cmdFound = this.parseCmd(a, b);\n if (!cmdFound) {\n cmdFound = this.parseMidrow(a, b);\n }\n if (!cmdFound) {\n cmdFound = this.parsePAC(a, b);\n }\n if (!cmdFound) {\n cmdFound = this.parseBackgroundAttributes(a, b);\n }\n if (!cmdFound) {\n charsFound = this.parseChars(a, b);\n if (charsFound) {\n if (this.currChNr && this.currChNr >= 0) {\n var channel = this.channels[this.currChNr - 1];\n channel.insertChars(charsFound);\n } else {\n logger.log('WARNING', 'No channel found yet. TEXT-MODE?');\n }\n }\n }\n if (cmdFound) {\n this.dataCounters.cmd += 2;\n } else if (charsFound) {\n this.dataCounters.char += 2;\n } else {\n this.dataCounters.other += 2;\n logger.log('WARNING', 'Couldn\\'t parse cleaned data ' + numArrayToHexArray([a, b]) + ' orig: ' + numArrayToHexArray([byteList[i], byteList[i + 1]]));\n }\n }\n }\n\n /**\n * Parse Command.\n * @returns {Boolean} Tells if a command was found\n */\n\n }, {\n key: 'parseCmd',\n value: function parseCmd(a, b) {\n var chNr = null;\n\n var cond1 = (a === 0x14 || a === 0x1C) && 0x20 <= b && b <= 0x2F;\n var cond2 = (a === 0x17 || a === 0x1F) && 0x21 <= b && b <= 0x23;\n if (!(cond1 || cond2)) {\n return false;\n }\n\n if (a === this.lastCmdA && b === this.lastCmdB) {\n this.lastCmdA = null;\n this.lastCmdB = null; // Repeated commands are dropped (once)\n logger.log('DEBUG', 'Repeated command (' + numArrayToHexArray([a, b]) + ') is dropped');\n return true;\n }\n\n if (a === 0x14 || a === 0x17) {\n chNr = 1;\n } else {\n chNr = 2; // (a === 0x1C || a=== 0x1f)\n }\n\n var channel = this.channels[chNr - 1];\n\n if (a === 0x14 || a === 0x1C) {\n if (b === 0x20) {\n channel.ccRCL();\n } else if (b === 0x21) {\n channel.ccBS();\n } else if (b === 0x22) {\n channel.ccAOF();\n } else if (b === 0x23) {\n channel.ccAON();\n } else if (b === 0x24) {\n channel.ccDER();\n } else if (b === 0x25) {\n channel.ccRU(2);\n } else if (b === 0x26) {\n channel.ccRU(3);\n } else if (b === 0x27) {\n channel.ccRU(4);\n } else if (b === 0x28) {\n channel.ccFON();\n } else if (b === 0x29) {\n channel.ccRDC();\n } else if (b === 0x2A) {\n channel.ccTR();\n } else if (b === 0x2B) {\n channel.ccRTD();\n } else if (b === 0x2C) {\n channel.ccEDM();\n } else if (b === 0x2D) {\n channel.ccCR();\n } else if (b === 0x2E) {\n channel.ccENM();\n } else if (b === 0x2F) {\n channel.ccEOC();\n }\n } else {\n //a == 0x17 || a == 0x1F\n channel.ccTO(b - 0x20);\n }\n this.lastCmdA = a;\n this.lastCmdB = b;\n this.currChNr = chNr;\n return true;\n }\n\n /**\n * Parse midrow styling command\n * @returns {Boolean}\n */\n\n }, {\n key: 'parseMidrow',\n value: function parseMidrow(a, b) {\n var chNr = null;\n\n if ((a === 0x11 || a === 0x19) && 0x20 <= b && b <= 0x2f) {\n if (a === 0x11) {\n chNr = 1;\n } else {\n chNr = 2;\n }\n if (chNr !== this.currChNr) {\n logger.log('ERROR', 'Mismatch channel in midrow parsing');\n return false;\n }\n var channel = this.channels[chNr - 1];\n channel.ccMIDROW(b);\n logger.log('DEBUG', 'MIDROW (' + numArrayToHexArray([a, b]) + ')');\n return true;\n }\n return false;\n }\n /**\n * Parse Preable Access Codes (Table 53).\n * @returns {Boolean} Tells if PAC found\n */\n\n }, {\n key: 'parsePAC',\n value: function parsePAC(a, b) {\n\n var chNr = null;\n var row = null;\n\n var case1 = (0x11 <= a && a <= 0x17 || 0x19 <= a && a <= 0x1F) && 0x40 <= b && b <= 0x7F;\n var case2 = (a === 0x10 || a === 0x18) && 0x40 <= b && b <= 0x5F;\n if (!(case1 || case2)) {\n return false;\n }\n\n if (a === this.lastCmdA && b === this.lastCmdB) {\n this.lastCmdA = null;\n this.lastCmdB = null;\n return true; // Repeated commands are dropped (once)\n }\n\n chNr = a <= 0x17 ? 1 : 2;\n\n if (0x40 <= b && b <= 0x5F) {\n row = chNr === 1 ? rowsLowCh1[a] : rowsLowCh2[a];\n } else {\n // 0x60 <= b <= 0x7F\n row = chNr === 1 ? rowsHighCh1[a] : rowsHighCh2[a];\n }\n var pacData = this.interpretPAC(row, b);\n var channel = this.channels[chNr - 1];\n channel.setPAC(pacData);\n this.lastCmdA = a;\n this.lastCmdB = b;\n this.currChNr = chNr;\n return true;\n }\n\n /**\n * Interpret the second byte of the pac, and return the information.\n * @returns {Object} pacData with style parameters.\n */\n\n }, {\n key: 'interpretPAC',\n value: function interpretPAC(row, byte) {\n var pacIndex = byte;\n var pacData = { color: null, italics: false, indent: null, underline: false, row: row };\n\n if (byte > 0x5F) {\n pacIndex = byte - 0x60;\n } else {\n pacIndex = byte - 0x40;\n }\n pacData.underline = (pacIndex & 1) === 1;\n if (pacIndex <= 0xd) {\n pacData.color = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'white'][Math.floor(pacIndex / 2)];\n } else if (pacIndex <= 0xf) {\n pacData.italics = true;\n pacData.color = 'white';\n } else {\n pacData.indent = Math.floor((pacIndex - 0x10) / 2) * 4;\n }\n return pacData; // Note that row has zero offset. The spec uses 1.\n }\n\n /**\n * Parse characters.\n * @returns An array with 1 to 2 codes corresponding to chars, if found. null otherwise.\n */\n\n }, {\n key: 'parseChars',\n value: function parseChars(a, b) {\n\n var channelNr = null,\n charCodes = null,\n charCode1 = null;\n\n if (a >= 0x19) {\n channelNr = 2;\n charCode1 = a - 8;\n } else {\n channelNr = 1;\n charCode1 = a;\n }\n if (0x11 <= charCode1 && charCode1 <= 0x13) {\n // Special character\n var oneCode = b;\n if (charCode1 === 0x11) {\n oneCode = b + 0x50;\n } else if (charCode1 === 0x12) {\n oneCode = b + 0x70;\n } else {\n oneCode = b + 0x90;\n }\n logger.log('INFO', 'Special char \\'' + getCharForByte(oneCode) + '\\' in channel ' + channelNr);\n charCodes = [oneCode];\n } else if (0x20 <= a && a <= 0x7f) {\n charCodes = b === 0 ? [a] : [a, b];\n }\n if (charCodes) {\n var hexCodes = numArrayToHexArray(charCodes);\n logger.log('DEBUG', 'Char codes = ' + hexCodes.join(','));\n this.lastCmdA = null;\n this.lastCmdB = null;\n }\n return charCodes;\n }\n\n /**\n * Parse extended background attributes as well as new foreground color black.\n * @returns{Boolean} Tells if background attributes are found\n */\n\n }, {\n key: 'parseBackgroundAttributes',\n value: function parseBackgroundAttributes(a, b) {\n var bkgData, index, chNr, channel;\n\n var case1 = (a === 0x10 || a === 0x18) && 0x20 <= b && b <= 0x2f;\n var case2 = (a === 0x17 || a === 0x1f) && 0x2d <= b && b <= 0x2f;\n if (!(case1 || case2)) {\n return false;\n }\n bkgData = {};\n if (a === 0x10 || a === 0x18) {\n index = Math.floor((b - 0x20) / 2);\n bkgData.background = backgroundColors[index];\n if (b % 2 === 1) {\n bkgData.background = bkgData.background + '_semi';\n }\n } else if (b === 0x2d) {\n bkgData.background = 'transparent';\n } else {\n bkgData.foreground = 'black';\n if (b === 0x2f) {\n bkgData.underline = true;\n }\n }\n chNr = a < 0x18 ? 1 : 2;\n channel = this.channels[chNr - 1];\n channel.setBkgData(bkgData);\n this.lastCmdA = null;\n this.lastCmdB = null;\n return true;\n }\n\n /**\n * Reset state of parser and its channels.\n */\n\n }, {\n key: 'reset',\n value: function reset() {\n for (var i = 0; i < this.channels.length; i++) {\n if (this.channels[i]) {\n this.channels[i].reset();\n }\n }\n this.lastCmdA = null;\n this.lastCmdB = null;\n }\n\n /**\n * Trigger the generation of a cue, and the start of a new one if displayScreens are not empty.\n */\n\n }, {\n key: 'cueSplitAtTime',\n value: function cueSplitAtTime(t) {\n for (var i = 0; i < this.channels.length; i++) {\n if (this.channels[i]) {\n this.channels[i].cueSplitAtTime(t);\n }\n }\n }\n }]);\n\n return Cea608Parser;\n}();\n\nexports.default = Cea608Parser;","'use strict';\n\nvar Cues = {\n\n newCue: function newCue(track, startTime, endTime, captionScreen) {\n var row;\n var cue;\n var indenting;\n var indent;\n var text;\n var VTTCue = window.VTTCue || window.TextTrackCue;\n\n for (var r = 0; r < captionScreen.rows.length; r++) {\n row = captionScreen.rows[r];\n indenting = true;\n indent = 0;\n text = '';\n\n if (!row.isEmpty()) {\n for (var c = 0; c < row.chars.length; c++) {\n if (row.chars[c].uchar.match(/\\s/) && indenting) {\n indent++;\n } else {\n text += row.chars[c].uchar;\n indenting = false;\n }\n }\n cue = new VTTCue(startTime, endTime, text.trim());\n\n if (indent >= 16) {\n indent--;\n } else {\n indent++;\n }\n\n // VTTCue.line get's flakey when using controls, so let's now include line 13&14\n // also, drop line 1 since it's to close to the top\n if (navigator.userAgent.match(/Firefox\\//)) {\n cue.line = r + 1;\n } else {\n cue.line = r > 7 ? r - 2 : r + 1;\n }\n cue.align = 'left';\n // Clamp the position between 0 and 100 - if out of these bounds, Firefox throws an exception and captions break\n cue.position = Math.max(0, Math.min(100, 100 * (indent / 32) + (navigator.userAgent.match(/Firefox\\//) ? 50 : 0)));\n track.addCue(cue);\n }\n }\n }\n\n};\n\nmodule.exports = Cues;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction noop() {}\n\nvar fakeLogger = {\n trace: noop,\n debug: noop,\n log: noop,\n warn: noop,\n info: noop,\n error: noop\n};\n\nvar exportedLogger = fakeLogger,\n hls = void 0;\n\n//let lastCallTime;\n// function formatMsgWithTimeInfo(type, msg) {\n// const now = Date.now();\n// const diff = lastCallTime ? '+' + (now - lastCallTime) : '0';\n// lastCallTime = now;\n// msg = (new Date(now)).toISOString() + ' | [' + type + '] > ' + msg + ' ( ' + diff + ' ms )';\n// return msg;\n// }\n\nfunction formatMsg(type, msg) {\n msg = '[' + type + '] > ' + msg;\n return msg;\n}\n\nfunction consolePrintFn(type) {\n var func = window.console[type];\n if (func) {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args[0]) {\n args[0] = formatMsg(type, args[0]);\n }\n func.apply(window.console, args);\n };\n }\n return noop;\n}\n\nfunction checkRepeatWrapper(func) {\n var lastMsg;\n return function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (args.join(' ') === lastMsg) {\n return;\n }\n lastMsg = args.join(' ');\n func.apply(null, args);\n };\n}\n\nfunction exportLoggerFunctions(debugConfig) {\n for (var _len3 = arguments.length, functions = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n functions[_key3 - 1] = arguments[_key3];\n }\n\n functions.forEach(function (type) {\n exportedLogger[type] = checkRepeatWrapper(function () {\n var logFn = hls && hls.holaLog && hls.holaLog[type] || debugConfig[type] || consolePrintFn(type);\n logFn.apply(null, arguments);\n });\n });\n}\n\nvar enableLogs = exports.enableLogs = function enableLogs(debugConfig, hlsObject) {\n hls = hlsObject;\n exportLoggerFunctions(debugConfig || fakeLogger,\n // Remove out from list here to hard-disable a log-level\n //'trace',\n 'debug', 'log', 'info', 'warn', 'error');\n // Some browsers don't allow to use bind on console object anyway\n // fallback to default if needed\n try {\n exportedLogger.log();\n } catch (e) {\n exportedLogger = fakeLogger;\n }\n};\n\nvar logger = exports.logger = exportedLogger;","\"use strict\";\n\nif (!ArrayBuffer.prototype.slice) {\n ArrayBuffer.prototype.slice = function (start, end) {\n var that = new Uint8Array(this);\n if (end === undefined) {\n end = that.length;\n }\n var result = new ArrayBuffer(end - start);\n var resultArray = new Uint8Array(result);\n for (var i = 0; i < resultArray.length; i++) {\n resultArray[i] = that[i + start];\n }\n return result;\n };\n}\nif (!Object.assign) {\n Object.assign = function (obj) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) {\n continue;\n }\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n obj[prop] = source[prop];\n }\n }\n }\n return obj;\n };\n}","'use strict';\n\nvar URLHelper = {\n // build an absolute URL from a relative one using the provided baseURL\n // if relativeURL is an absolute URL it will be returned as is.\n buildAbsoluteURL: function buildAbsoluteURL(baseURL, relativeURL) {\n // remove any remaining space and CRLF\n relativeURL = relativeURL.trim();\n if (/^[a-z]+:/i.test(relativeURL)) {\n // complete url, not relative\n return (' ' + relativeURL).slice(1);\n }\n\n var relativeURLQuery = null;\n var relativeURLHash = null;\n\n var relativeURLHashSplit = /^([^#]*)(.*)$/.exec(relativeURL);\n if (relativeURLHashSplit) {\n relativeURLHash = relativeURLHashSplit[2];\n relativeURL = relativeURLHashSplit[1];\n }\n var relativeURLQuerySplit = /^([^\\?]*)(.*)$/.exec(relativeURL);\n if (relativeURLQuerySplit) {\n relativeURLQuery = relativeURLQuerySplit[2];\n relativeURL = relativeURLQuerySplit[1];\n }\n\n var baseURLHashSplit = /^([^#]*)(.*)$/.exec(baseURL);\n if (baseURLHashSplit) {\n baseURL = baseURLHashSplit[1];\n }\n var baseURLQuerySplit = /^([^\\?]*)(.*)$/.exec(baseURL);\n if (baseURLQuerySplit) {\n baseURL = baseURLQuerySplit[1];\n }\n\n var baseURLDomainSplit = /^(([a-z]+:)?\\/\\/[a-z0-9\\.\\-_~]+(:[0-9]+)?)?(\\/.*)$/i.exec(baseURL);\n if (!baseURLDomainSplit) {\n throw new Error('Error trying to parse base URL.');\n }\n // e.g. 'http:', 'https:', ''\n var baseURLProtocol = baseURLDomainSplit[2] || '';\n // e.g. 'http://example.com', '//example.com', ''\n var baseURLProtocolDomain = baseURLDomainSplit[1] || '';\n // e.g. '/a/b/c/playlist.m3u8'\n var baseURLPath = baseURLDomainSplit[4];\n\n var builtURL = null;\n if (/^\\/\\//.test(relativeURL)) {\n // relative url starts wth '//' so copy protocol (which may be '' if baseUrl didn't provide one)\n builtURL = baseURLProtocol + '//' + URLHelper.buildAbsolutePath('', relativeURL.substring(2));\n } else if (/^\\//.test(relativeURL)) {\n // relative url starts with '/' so start from root of domain\n builtURL = baseURLProtocolDomain + '/' + URLHelper.buildAbsolutePath('', relativeURL.substring(1));\n } else {\n builtURL = URLHelper.buildAbsolutePath(baseURLProtocolDomain + baseURLPath, relativeURL);\n }\n\n // put the query and hash parts back\n if (relativeURLQuery) {\n builtURL += relativeURLQuery;\n }\n if (relativeURLHash) {\n builtURL += relativeURLHash;\n }\n return builtURL;\n },\n\n // build an absolute path using the provided basePath\n // adapted from https://developer.mozilla.org/en-US/docs/Web/API/document/cookie#Using_relative_URLs_in_the_path_parameter\n // this does not handle the case where relativePath is \"/\" or \"//\". These cases should be handled outside this.\n buildAbsolutePath: function buildAbsolutePath(basePath, relativePath) {\n var sRelPath = relativePath;\n var nUpLn,\n sDir = '',\n sPath = basePath.replace(/[^\\/]*$/, sRelPath.replace(/(\\/|^)(?:\\.?\\/+)+/g, '$1'));\n for (var nEnd, nStart = 0; nEnd = sPath.indexOf('/../', nStart), nEnd > -1; nStart = nEnd + nUpLn) {\n nUpLn = /^\\/(?:\\.\\.\\/)*/.exec(sPath.slice(nEnd))[0].length;\n sDir = (sDir + sPath.substring(nStart, nEnd)).replace(new RegExp('(?:\\\\\\/+[^\\\\\\/]*){0,' + (nUpLn - 1) / 3 + '}$'), '/');\n }\n return sDir + sPath.substr(nStart);\n }\n};\n\nmodule.exports = URLHelper;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n * XHR based logger\n */\n\nvar _logger = require('../utils/logger');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar XhrLoader = function () {\n function XhrLoader(config) {\n _classCallCheck(this, XhrLoader);\n\n if (config && config.xhrSetup) {\n this.xhrSetup = config.xhrSetup;\n }\n }\n\n _createClass(XhrLoader, [{\n key: 'destroy',\n value: function destroy() {\n this.abort();\n this.loader = null;\n }\n }, {\n key: 'abort',\n value: function abort() {\n var loader = this.loader,\n timeoutHandle = this.timeoutHandle,\n retryHandle = this.retryHandle;\n if (loader && loader.readyState !== 4) {\n this.stats.aborted = true;\n loader.abort();\n }\n if (timeoutHandle) {\n window.clearTimeout(timeoutHandle);\n }\n if (retryHandle) {\n window.clearTimeout(retryHandle);\n }\n }\n }, {\n key: 'load',\n value: function load(url, responseType, onSuccess, onError, onTimeout, timeout, maxRetry, retryDelay) {\n var onProgress = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null;\n var frag = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : null;\n\n this.url = url;\n if (frag && !isNaN(frag.byteRangeStartOffset) && !isNaN(frag.byteRangeEndOffset)) {\n this.byteRange = frag.byteRangeStartOffset + '-' + (frag.byteRangeEndOffset - 1);\n }\n this.responseType = responseType;\n this.onSuccess = onSuccess;\n this.onProgress = onProgress;\n this.onTimeout = onTimeout;\n this.onError = onError;\n this.stats = { trequest: performance.now(), retry: 0 };\n this.timeout = timeout;\n this.maxRetry = maxRetry;\n this.retryDelay = retryDelay;\n this.loadInternal();\n }\n }, {\n key: 'loadInternal',\n value: function loadInternal() {\n var xhr;\n\n if (typeof XDomainRequest !== 'undefined') {\n xhr = this.loader = new XDomainRequest();\n } else {\n xhr = this.loader = new XMLHttpRequest();\n }\n\n xhr.onloadend = this.loadend.bind(this);\n xhr.onprogress = this.loadprogress.bind(this);\n\n var url = this.url;\n if (location.protocol === 'https:' && /^http:\\/\\//.test(url)) {\n url = url.replace(/^http:\\/\\//, 'https://');\n }\n xhr.open('GET', url, true);\n if (this.byteRange) {\n xhr.setRequestHeader('Range', 'bytes=' + this.byteRange);\n }\n xhr.responseType = this.responseType;\n this.stats.tfirst = null;\n this.stats.loaded = 0;\n if (this.xhrSetup) {\n this.xhrSetup(xhr, url);\n }\n this.timeoutHandle = window.setTimeout(this.loadtimeout.bind(this), this.timeout);\n xhr.send();\n }\n }, {\n key: 'loadend',\n value: function loadend(event) {\n var xhr = event.currentTarget,\n status = xhr.status,\n stats = this.stats;\n // don't proceed if xhr has been aborted\n if (!stats.aborted) {\n // http status between 200 to 299 are all successful\n if (status >= 200 && status < 300) {\n window.clearTimeout(this.timeoutHandle);\n stats.tload = performance.now();\n this.onSuccess(event, stats);\n } else {\n // error ...\n if (stats.retry < this.maxRetry) {\n _logger.logger.warn(status + ' while loading ' + this.url + ', retrying in ' + this.retryDelay + '...');\n this.destroy();\n this.retryHandle = window.setTimeout(this.loadInternal.bind(this), this.retryDelay);\n // exponential backoff\n this.retryDelay = Math.min(2 * this.retryDelay, 64000);\n stats.retry++;\n } else {\n window.clearTimeout(this.timeoutHandle);\n _logger.logger.error(status + ' while loading ' + this.url);\n this.onError(event);\n }\n }\n }\n }\n }, {\n key: 'loadtimeout',\n value: function loadtimeout(event) {\n _logger.logger.warn('timeout while loading ' + this.url);\n this.onTimeout(event, this.stats);\n }\n }, {\n key: 'loadprogress',\n value: function loadprogress(event) {\n var stats = this.stats;\n if (stats.tfirst === null) {\n stats.tfirst = performance.now();\n }\n stats.loaded = event.loaded;\n if (event.lengthComputable) {\n stats.total = event.total;\n }\n if (this.onProgress) {\n this.onProgress(stats);\n }\n }\n }]);\n\n return XhrLoader;\n}();\n\nexports.default = XhrLoader;","'use strict';\nvar E = module.exports;\nvar hlsjsConfig;\nvar attached = false, disabled = false;\n\nE.VERSION = '1.0.70';\nE.name = 'HolaProviderHLS';\n\nE.attach = function(obsolete_param, videojs, Hls, hlsjsConfig_){\n E.videojs = videojs||E.videojs||window.videojs;\n if (!E.videojs)\n {\n // XXX volodymyr: allows adding hola provider before main player\n // script (e.g. for brightcove which may autocreate players on init)\n return Object.defineProperty(window, 'videojs', {\n configurable: true, get: function(){},\n set: function(videojs2){\n Object.defineProperty(window, 'videojs',\n {configurable: true, value: videojs2});\n E.attach(obsolete_param, videojs2, Hls, hlsjsConfig_);\n },\n });\n }\n E.Hls = Hls||E.Hls||window.Hls;\n if (hlsjsConfig_)\n hlsjsConfig = hlsjsConfig_;\n if (attached)\n disabled = false;\n else if (E.Hls.isSupported())\n {\n attached = true;\n // XXX volodymyr: originally we register hola provider inside Html5\n // tech, but in specific environment (e.g vjs+dm/hlsjs) hls videos\n // may be handled by a separate tech, so depending on options.techOrder\n // Html5 tech may be ignored == our provider not used. so we register\n // our source handler to all hls-based techs, but ideally we should\n // present our own tech instead\n var registered_techs = ['Hlsjs', 'Html5'].filter(function(tech){\n if (!(tech = E.videojs.getTech(tech)))\n return;\n // XXX yurij hack: some customers register their own provider and\n // prevent other from being registered with 0 index (rge related)\n if (tech.sourceHandlers instanceof Array)\n tech.sourceHandlers.splice(0, 0, E);\n else\n tech.registerSourceHandler(E, 0);\n // XXX yurij: prevent others handlers being registered with 0 index\n var r = tech.registerSourceHandler;\n tech.registerSourceHandler = function(e, i){\n return r.call(tech, e, i===0 ? 1 : i); };\n return true;\n });\n E.videojs.HolaProviderHLS = HolaProviderHLS;\n if (registered_techs.length)\n {\n console.log(E.name+' registered as %s SourceHandler',\n registered_techs.join('/'));\n }\n else\n console.log(E.name+' not registered: no suitable tech found');\n }\n else\n console.error('Hls.js is not supported in this browser!');\n};\n\nE.detach = function(){\n // we don't unregister source handler, just set it as disabled so it will\n // return false in canHandleSource()\n disabled = true;\n};\n\nE.canPlayType = function(type){\n if (disabled)\n return '';\n if (/^application\\/x-mpegURL$/i.test(type))\n return 'probably';\n return '';\n};\n\nE.canHandleSource = function(source){\n var _can_play_type;\n if (disabled)\n return '';\n if (_can_play_type = E.canPlayType(source.type))\n return _can_play_type;\n if (/\\.m3u8/i.test(source.src))\n return 'maybe';\n return '';\n};\n\nE.handleSource = function(source, tech){\n if (tech.hlsProvider)\n tech.hlsProvider.dispose();\n return tech.hlsProvider = new HolaProviderHLS(source, tech);\n};\n\nfunction HolaProviderHLS(source, tech){\n console.log('init hola/hls provider v'+E.VERSION+' hls v'+E.Hls.version+\n (E.version ? ' hap v'+E.version : ''));\n tech.name_ = 'holaHLS';\n var _video = tech.el();\n var _hls;\n var _errorCounts = {};\n var _duration = null;\n var _seekableStart = 0;\n var _seekableEnd = 0;\n var _player = _video.player||_video.parentNode.player||\n E.videojs.getPlayers()[_video.playerId];\n var _preload = _player.options().preload!='none';\n\n _video.addEventListener('error', function(evt){\n var errorTxt, mediaError = evt.currentTarget.error;\n switch(mediaError.code)\n {\n case mediaError.MEDIA_ERR_ABORTED:\n errorTxt = 'You aborted the video playback';\n break;\n case mediaError.MEDIA_ERR_DECODE:\n errorTxt = 'The video playback was aborted due to a corruption problem or because the video used features your browser did not support';\n _handleMediaError(mediaError);\n break;\n case mediaError.MEDIA_ERR_NETWORK:\n errorTxt = 'A network error caused the video download to fail part-way';\n break;\n case mediaError.MEDIA_ERR_SRC_NOT_SUPPORTED:\n errorTxt = 'The video could not be loaded, either because the server or network failed or because the format is not supported';\n break;\n }\n console.error('MEDIA_ERROR: ', errorTxt);\n });\n\n function reset(){\n // XXX volodymyr: Hlsjs tech may have preset dm instance on player init\n if (_player.techName_=='Hlsjs' && tech.hls_)\n {\n tech.hls_.destroy();\n tech.hls_ = null;\n }\n // XXX yurij: byteark uses it's own method to determine duration\n // which relies on tech.hlsHandler.isLive existance for live videos\n if (tech.hlsHandler)\n tech.hlsHandler.dispose();\n tech.hlsHandler = {\n dispose: function(){}, // byteark handleSource expects dispose\n isLive: function(){ return _duration==Infinity; },\n };\n }\n function _log(method, message){\n if (_hls && _hls.holaLog && _hls.holaLog[method])\n _hls.holaLog[method].call(_hls.holaLog, message);\n }\n function initialize(){\n var hola_log, hls_params = {};\n Object.assign(hls_params, hlsjsConfig);\n Object.assign(hls_params, E.hls_params||{});\n if (hls_params.debug!==undefined)\n hola_log = hls_params.debug;\n hls_params.debug = {};\n ['debug', 'info', 'log', 'warn','error'].forEach(function(method){\n hls_params.debug[method] = _log.bind(null, method); });\n tech.hls_obj = _hls = new E.Hls(E.videojs.mergeOptions(\n tech.options_.hlsjsConfig, hls_params));\n _hls.holaLog = hola_log;\n _hls.manual_level = -1;\n _hls.on(E.Hls.Events.ERROR, function(event, data){\n _onError(event, data, tech, _errorCounts);\n });\n _hls.on(E.Hls.Events.LEVEL_SWITCH, updateQuality);\n _hls.on(E.Hls.Events.LEVEL_LOADED, function(event, data){\n _duration = data.details.live ? Infinity :\n data.details.totalduration;\n });\n _hls.on(E.Hls.Events.LEVEL_UPDATED, function(event, data){\n _seekableStart = data.details.live ?\n data.details.fragments[0].start : 0;\n _seekableEnd = data.details.live ?\n _hls.streamController.computeLivePosition(_seekableStart,\n data.details) : data.details.totalduration;\n });\n _hls.on(E.Hls.Events.FRAG_PARSING_METADATA, function(event, data){\n tech.trigger('parsedmetadata', data);\n });\n _hls.attachMedia(_video);\n _video.addEventListener('waiting', _onWaitingForData);\n }\n\n this.duration = function(){\n return _duration || _video.duration || 0;\n };\n\n this.seekable = function(){\n return E.videojs.createTimeRanges([[_seekableStart, _seekableEnd]]);\n };\n\n this.dispose = function(){\n _video.removeEventListener('waiting', _onWaitingForData);\n _hls.destroy();\n };\n\n function load(source){\n _hls.loadSource(source.src);\n }\n\n function switchQuality(qualityId){\n _hls.manual_level = qualityId;\n if (_hls.hola_adaptive)\n _player.trigger('mediachange');\n else\n _hls.loadLevel = qualityId;\n updateQuality();\n }\n\n function _handleMediaError(error){\n if (_errorCounts[E.Hls.ErrorTypes.MEDIA_ERROR] === 1)\n {\n console.info('trying to recover media error');\n _hls.recoverMediaError();\n }\n else if (_errorCounts[E.Hls.ErrorTypes.MEDIA_ERROR] === 2)\n {\n console.info('2nd try to recover media error (by swapping audio codec');\n _hls.swapAudioCodec();\n _hls.recoverMediaError();\n }\n else if (_errorCounts[E.Hls.ErrorTypes.MEDIA_ERROR] > 2)\n {\n console.info('bubbling media error up to VIDEOJS');\n error.code = 3;\n tech.error = function(){ return error; };\n tech.trigger('error');\n }\n }\n\n function _onError(event, data){\n var level = 'error';\n var error = {\n message: ('HLS.js error: ' + data.type + ' - fatal: ' + data.fatal + ' - ' + data.details),\n };\n if (!data.fatal &&\n data.details === E.Hls.ErrorDetails.BUFFER_STALLED_ERROR)\n {\n level = 'warn';\n }\n console[level](error.message);\n // increment/set error count\n _errorCounts[data.type] ?\n _errorCounts[data.type] += 1 : _errorCounts[data.type] = 1;\n // implement simple error handling based on hls.js documentation\n // (https://github.com/dailymotion/hls.js/blob/master/API.md#fifth-step-error-handling)\n if (data.fatal)\n {\n switch (data.type)\n {\n case E.Hls.ErrorTypes.NETWORK_ERROR:\n console.info('bubbling network error up to VIDEOJS');\n error.code = 2;\n tech.error = function() { return error; };\n tech.trigger('error');\n break;\n case E.Hls.ErrorTypes.MEDIA_ERROR:\n _handleMediaError(error);\n break;\n default:\n // cannot recover\n _hls.destroy();\n console.info('bubbling error up to VIDEOJS');\n tech.error = function() { return error; };\n tech.trigger('error');\n break;\n }\n }\n }\n\n function scaledNumber(num){\n if (num===undefined)\n return '';\n if (!num)\n return '0';\n var k = 1024;\n var sizes = ['', 'K', 'M', 'G', 'T', 'P'];\n var i = Math.floor(Math.log(num)/Math.log(k));\n num /= Math.pow(k, i);\n if (num<0.001)\n return '0';\n if (num>=k-1)\n num = Math.trunc(num);\n var str = num.toFixed(num<1 ? 3 : num<10 ? 2 : num<100 ? 1 : 0);\n return str.replace(/\\.0*$/, '')+sizes[i];\n }\n\n function heightLabel(level){\n var height = level.height || Math.round(level.width * 9 / 16);\n return height ? height + 'p' : '';\n }\n\n function bitrateLabel(level){\n return level.bitrate ? scaledNumber(level.bitrate) + 'bps' : '';\n }\n\n function levelLabel(level, levels){\n var label = heightLabel(level);\n if (!label)\n return bitrateLabel(level);\n var duplicated = levels.some(function(l){\n return l!=level && heightLabel(l)==label;\n });\n return duplicated ? label+' '+bitrateLabel(level) : label;\n }\n\n function updateQuality(){\n var list = [], levels = _hls.levels;\n if (levels.length > 1)\n list.push({id: -1, label: 'Auto'});\n levels.forEach(function(level, index){\n list.push({id: index, label: levelLabel(level, levels)});\n });\n tech.trigger('loadedqualitydata', {\n quality: {\n list: list,\n selected: _hls.manual_level,\n current: _hls.loadLevel,\n },\n callback: switchQuality,\n });\n }\n\n function _onWaitingForData() {\n if (!_preload)\n load(source);\n _video.removeEventListener('waiting', _onWaitingForData);\n }\n\n reset();\n initialize();\n if (_preload)\n load(source);\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","var bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n Function(['require','module','exports'], '(' + fn + ')(self)'),\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n Function(['require'], (\n // try to call default if defined to also support babel esmodule\n // exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);'\n )),\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n"]}