12345678910111213141516 |
- (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.JitsiMeetJS=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(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTC=require("./modules/RTC/RTC");var XMPPEvents=require("./service/xmpp/XMPPEvents");var AuthenticationEvents=require("./service/authentication/AuthenticationEvents");var RTCEvents=require("./service/RTC/RTCEvents");var DSEvents=require("./service/desktopsharing/DesktopSharingEventTypes");var EventEmitter=require("events");var JitsiConferenceEvents=require("./JitsiConferenceEvents");var JitsiConferenceErrors=require("./JitsiConferenceErrors");var JitsiParticipant=require("./JitsiParticipant");var Statistics=require("./modules/statistics/statistics");var JitsiDTMFManager=require("./modules/DTMF/JitsiDTMFManager");var JitsiTrackEvents=require("./JitsiTrackEvents");var Settings=require("./modules/settings/Settings");function JitsiConference(options){if(!options.name||options.name.toLowerCase()!==options.name){logger.error("Invalid conference name (no conference name passed or it"+"contains invalid characters like capital letters)!");return}this.options=options;this.connection=this.options.connection;this.xmpp=this.connection.xmpp;this.eventEmitter=new EventEmitter;var confID=this.options.name+"@"+this.xmpp.options.hosts.muc;this.settings=new Settings(confID);this.room=this.xmpp.createRoom(this.options.name,this.options.config,this.settings);this.room.updateDeviceAvailability(RTC.getDeviceAvailability());this.rtc=new RTC(this.room,options);this.statistics=new Statistics({callStatsID:this.options.config.callStatsID,callStatsSecret:this.options.config.callStatsSecret,disableThirdPartyRequests:this.options.config.disableThirdPartyRequests});setupListeners(this);JitsiMeetJS._gumFailedHandler.push(function(error){this.statistics.sendGetUserMediaFailed(error)}.bind(this));this.participants={};this.lastDominantSpeaker=null;this.dtmfManager=null;this.somebodySupportsDTMF=false;this.authEnabled=false;this.authIdentity;this.startAudioMuted=false;this.startVideoMuted=false;this.startMutedPolicy={audio:false,video:false};this.availableDevices={audio:undefined,video:undefined}}JitsiConference.prototype.join=function(password){if(this.room)this.room.join(password)};JitsiConference.prototype.isJoined=function(){return this.room&&this.room.joined};JitsiConference.prototype.leave=function(){if(this.xmpp&&this.room)this.xmpp.leaveRoom(this.room.roomjid);this.room=null};JitsiConference.prototype.getName=function(){return this.options.name};JitsiConference.prototype.isAuthEnabled=function(){return this.authEnabled};JitsiConference.prototype.isLoggedIn=function(){return!!this.authIdentity};JitsiConference.prototype.getAuthLogin=function(){return this.authIdentity};JitsiConference.prototype.isExternalAuthEnabled=function(){return this.room&&this.room.moderator.isExternalAuthEnabled()};JitsiConference.prototype.getExternalAuthUrl=function(urlForPopup){return new Promise(function(resolve,reject){if(!this.isExternalAuthEnabled()){reject();return}if(urlForPopup){this.room.moderator.getPopupLoginUrl(resolve,reject)}else{this.room.moderator.getLoginUrl(resolve,reject)}}.bind(this))};JitsiConference.prototype.getLocalTracks=function(){if(this.rtc){return this.rtc.localStreams}else{return[]}};JitsiConference.prototype.on=function(eventId,handler){if(this.eventEmitter)this.eventEmitter.on(eventId,handler)};JitsiConference.prototype.off=function(eventId,handler){if(this.eventEmitter)this.eventEmitter.removeListener(eventId,handler)};JitsiConference.prototype.addEventListener=JitsiConference.prototype.on;JitsiConference.prototype.removeEventListener=JitsiConference.prototype.off;JitsiConference.prototype.addCommandListener=function(command,handler){if(this.room)this.room.addPresenceListener(command,handler)};JitsiConference.prototype.removeCommandListener=function(command){if(this.room)this.room.removePresenceListener(command)};JitsiConference.prototype.sendTextMessage=function(message){if(this.room)this.room.sendMessage(message)};JitsiConference.prototype.sendCommand=function(name,values){if(this.room){this.room.addToPresence(name,values);this.room.sendPresence()}};JitsiConference.prototype.sendCommandOnce=function(name,values){this.sendCommand(name,values);this.removeCommand(name)};JitsiConference.prototype.removeCommand=function(name){if(this.room)this.room.removeFromPresence(name)};JitsiConference.prototype.setDisplayName=function(name){if(this.room){this.room.removeFromPresence("nick");this.room.addToPresence("nick",{attributes:{xmlns:"http://jabber.org/protocol/nick"},value:name});this.room.sendPresence()}};JitsiConference.prototype.addTrack=function(track){this.room.addStream(track.getOriginalStream(),function(){this.rtc.addLocalStream(track);if(track.startMuted){track.mute()}track.muteHandler=this._fireMuteChangeEvent.bind(this,track);track.stopHandler=this.removeTrack.bind(this,track);track.audioLevelHandler=this._fireAudioLevelChangeEvent.bind(this);track.addEventListener(JitsiTrackEvents.TRACK_MUTE_CHANGED,track.muteHandler);track.addEventListener(JitsiTrackEvents.TRACK_STOPPED,track.stopHandler);track.addEventListener(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,track.audioLevelHandler);this.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED,track)}.bind(this))};JitsiConference.prototype._fireAudioLevelChangeEvent=function(audioLevel){this.eventEmitter.emit(JitsiConferenceEvents.TRACK_AUDIO_LEVEL_CHANGED,this.myUserId(),audioLevel)};JitsiConference.prototype._fireMuteChangeEvent=function(track){this.eventEmitter.emit(JitsiConferenceEvents.TRACK_MUTE_CHANGED,track)};JitsiConference.prototype.removeTrack=function(track){if(!this.room){if(this.rtc)this.rtc.removeLocalStream(track);return}this.room.removeStream(track.getOriginalStream(),function(){this.rtc.removeLocalStream(track);track.removeEventListener(JitsiTrackEvents.TRACK_MUTE_CHANGED,track.muteHandler);track.removeEventListener(JitsiTrackEvents.TRACK_STOPPED,track.stopHandler);track.removeEventListener(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,track.audioLevelHandler);this.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED,track)}.bind(this))};JitsiConference.prototype.getRole=function(){return this.room.role};JitsiConference.prototype.isModerator=function(){return this.room.isModerator()};JitsiConference.prototype.lock=function(password){if(!this.isModerator()){return Promise.reject()}var conference=this;return new Promise(function(resolve,reject){conference.room.lockRoom(password||"",function(){resolve()},function(err){reject(err)},function(){reject(JitsiConferenceErrors.PASSWORD_NOT_SUPPORTED)})})};JitsiConference.prototype.unlock=function(){return this.lock()};JitsiConference.prototype.selectParticipant=function(participantId){if(this.rtc){this.rtc.selectedEndpoint(participantId)}};JitsiConference.prototype.pinParticipant=function(participantId){if(this.rtc){this.rtc.pinEndpoint(participantId)}};JitsiConference.prototype.getParticipants=function(){return Object.keys(this.participants).map(function(key){return this.participants[key]},this)};JitsiConference.prototype.getParticipantById=function(id){return this.participants[id]};JitsiConference.prototype.kickParticipant=function(id){var participant=this.getParticipantById(id);if(!participant){return}this.room.kick(participant.getJid())};JitsiConference.prototype.muteParticipant=function(id){var participant=this.getParticipantById(id);if(!participant){return}this.room.muteParticipant(participant.getJid(),true)};JitsiConference.prototype.onMemberJoined=function(jid,nick,role){var id=Strophe.getResourceFromJid(jid);if(id==="focus"||this.myUserId()===id){return}var participant=new JitsiParticipant(jid,this,nick);participant._role=role;this.participants[id]=participant;this.eventEmitter.emit(JitsiConferenceEvents.USER_JOINED,id,participant);this.xmpp.connection.disco.info(jid,"node",function(iq){participant._supportsDTMF=$(iq).find('>query>feature[var="urn:xmpp:jingle:dtmf:0"]').length>0;this.updateDTMFSupport()}.bind(this))};JitsiConference.prototype.onMemberLeft=function(jid){var id=Strophe.getResourceFromJid(jid);if(id==="focus"||this.myUserId()===id){return}var participant=this.participants[id];delete this.participants[id];this.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT,id,participant)};JitsiConference.prototype.onUserRoleChanged=function(jid,role){var id=Strophe.getResourceFromJid(jid);var participant=this.getParticipantById(id);if(!participant){return}participant._role=role;this.eventEmitter.emit(JitsiConferenceEvents.USER_ROLE_CHANGED,id,role)};JitsiConference.prototype.onDisplayNameChanged=function(jid,displayName){var id=Strophe.getResourceFromJid(jid);var participant=this.getParticipantById(id);if(!participant){return}participant._displayName=displayName;this.eventEmitter.emit(JitsiConferenceEvents.DISPLAY_NAME_CHANGED,id,displayName)};JitsiConference.prototype.onTrackAdded=function(track){var id=track.getParticipantId();var participant=this.getParticipantById(id);if(!participant){return}participant._tracks.push(track);var emitter=this.eventEmitter;track.addEventListener(JitsiTrackEvents.TRACK_STOPPED,function(){var pos=participant._tracks.indexOf(track);if(pos>-1){participant._tracks.splice(pos,1)}emitter.emit(JitsiConferenceEvents.TRACK_REMOVED,track)});track.addEventListener(JitsiTrackEvents.TRACK_MUTE_CHANGED,function(){emitter.emit(JitsiConferenceEvents.TRACK_MUTE_CHANGED,track)});track.addEventListener(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,function(audioLevel){emitter.emit(JitsiConferenceEvents.TRACK_AUDIO_LEVEL_CHANGED,id,audioLevel)});this.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED,track)};JitsiConference.prototype.updateDTMFSupport=function(){var somebodySupportsDTMF=false;var participants=this.getParticipants();for(var i=0;i<participants.length;i+=1){if(participants[i].supportsDTMF()){somebodySupportsDTMF=true;break}}if(somebodySupportsDTMF!==this.somebodySupportsDTMF){this.somebodySupportsDTMF=somebodySupportsDTMF;this.eventEmitter.emit(JitsiConferenceEvents.DTMF_SUPPORT_CHANGED,somebodySupportsDTMF)}};JitsiConference.prototype.isDTMFSupported=function(){return this.somebodySupportsDTMF};JitsiConference.prototype.myUserId=function(){return this.room&&this.room.myroomjid?Strophe.getResourceFromJid(this.room.myroomjid):null};JitsiConference.prototype.sendTones=function(tones,duration,pause){if(!this.dtmfManager){var connection=this.xmpp.connection.jingle.activecall.peerconnection;if(!connection){logger.warn("cannot sendTones: no conneciton");return}var tracks=this.getLocalTracks().filter(function(track){return track.isAudioTrack()});if(!tracks.length){logger.warn("cannot sendTones: no local audio stream");return}this.dtmfManager=new JitsiDTMFManager(tracks[0],connection)}this.dtmfManager.sendTones(tones,duration,pause)};JitsiConference.prototype.isRecordingSupported=function(){if(this.room)return this.room.isRecordingSupported();return false};JitsiConference.prototype.getRecordingState=function(){if(this.room)return this.room.getRecordingState();return"off"};JitsiConference.prototype.getRecordingURL=function(){if(this.room)return this.room.getRecordingURL();return null};JitsiConference.prototype.toggleRecording=function(options){if(this.room)return this.room.toggleRecording(options,function(status,error){this.eventEmitter.emit(JitsiConferenceEvents.RECORDING_STATE_CHANGED,status,error)}.bind(this));this.eventEmitter.emit(JitsiConferenceEvents.RECORDING_STATE_CHANGED,"error",new Error("The conference is not created yet!"))};JitsiConference.prototype.isSIPCallingSupported=function(){if(this.room)return this.room.isSIPCallingSupported();return false};JitsiConference.prototype.dial=function(number){if(this.room)return this.room.dial(number);return new Promise(function(resolve,reject){reject(new Error("The conference is not created yet!"))})};JitsiConference.prototype.hangup=function(){if(this.room)return this.room.hangup();return new Promise(function(resolve,reject){reject(new Error("The conference is not created yet!"))})};JitsiConference.prototype.getPhoneNumber=function(){if(this.room)return this.room.getPhoneNumber();return null};JitsiConference.prototype.getPhonePin=function(){if(this.room)return this.room.getPhonePin();return null};JitsiConference.prototype.getConnectionState=function(){if(this.room)return this.room.getConnectionState();return null};JitsiConference.prototype.setStartMutedPolicy=function(policy){if(!this.isModerator()){return}this.startMutedPolicy=policy;this.room.removeFromPresence("startmuted");this.room.addToPresence("startmuted",{attributes:{audio:policy.audio,video:policy.video,xmlns:"http://jitsi.org/jitmeet/start-muted"}});this.room.sendPresence()};JitsiConference.prototype.getStartMutedPolicy=function(){return this.startMutedPolicy};JitsiConference.prototype.isStartAudioMuted=function(){return this.startAudioMuted};JitsiConference.prototype.isStartVideoMuted=function(){return this.startVideoMuted};JitsiConference.prototype.getLogs=function(){var data=this.xmpp.getJingleLog();var metadata={};metadata.time=new Date;metadata.url=window.location.href;metadata.ua=navigator.userAgent;var log=this.xmpp.getXmppLog();if(log){metadata.xmpp=log}data.metadata=metadata;return data};JitsiConference.prototype.sendFeedback=function(overallFeedback,detailedFeedback){this.statistics.sendFeedback(overallFeedback,detailedFeedback)};JitsiConference.prototype.isCallstatsEnabled=function(){return this.statistics.isCallstatsEnabled()};function setupListeners(conference){conference.xmpp.addListener(XMPPEvents.CALL_INCOMING,function(event){conference.rtc.onIncommingCall(event);conference.statistics.startRemoteStats(event.peerconnection)});conference.room.addListener(XMPPEvents.REMOTE_STREAM_RECEIVED,function(data,sid,thessrc){var track=conference.rtc.createRemoteStream(data,sid,thessrc);if(track){conference.onTrackAdded(track)}});conference.rtc.addListener(RTCEvents.FAKE_VIDEO_TRACK_CREATED,function(track){conference.onTrackAdded(track)});conference.room.addListener(XMPPEvents.AUDIO_MUTED_BY_FOCUS,function(value){conference.rtc.setAudioMute(value)});conference.room.addListener(XMPPEvents.MUC_JOINED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_JOINED)});conference.room.addListener(XMPPEvents.ROOM_JOIN_ERROR,function(pres){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.CONNECTION_ERROR,pres)});conference.room.addListener(XMPPEvents.ROOM_CONNECT_ERROR,function(pres){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.CONNECTION_ERROR,pres)});conference.room.addListener(XMPPEvents.PASSWORD_REQUIRED,function(pres){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.PASSWORD_REQUIRED,pres)});conference.room.addListener(XMPPEvents.AUTHENTICATION_REQUIRED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.AUTHENTICATION_REQUIRED)});conference.room.addListener(XMPPEvents.BRIDGE_DOWN,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE)});conference.room.addListener(XMPPEvents.RESERVATION_ERROR,function(code,msg){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.RESERVATION_ERROR,code,msg)});conference.room.addListener(XMPPEvents.GRACEFUL_SHUTDOWN,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.GRACEFUL_SHUTDOWN)});conference.room.addListener(XMPPEvents.JINGLE_FATAL_ERROR,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.JINGLE_FATAL_ERROR)});conference.room.addListener(XMPPEvents.MUC_DESTROYED,function(reason){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.CONFERENCE_DESTROYED,reason)});conference.room.addListener(XMPPEvents.CHAT_ERROR_RECEIVED,function(err,msg){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.CHAT_ERROR,err,msg)});conference.room.addListener(XMPPEvents.FOCUS_DISCONNECTED,function(focus,retrySec){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.FOCUS_DISCONNECTED,focus,retrySec)});conference.room.addListener(XMPPEvents.KICKED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.KICKED)});conference.room.addListener(XMPPEvents.MUC_MEMBER_JOINED,conference.onMemberJoined.bind(conference));conference.room.addListener(XMPPEvents.MUC_MEMBER_LEFT,conference.onMemberLeft.bind(conference));conference.room.addListener(XMPPEvents.DISPLAY_NAME_CHANGED,conference.onDisplayNameChanged.bind(conference));conference.room.addListener(XMPPEvents.LOCAL_ROLE_CHANGED,function(role){conference.eventEmitter.emit(JitsiConferenceEvents.USER_ROLE_CHANGED,conference.myUserId(),role)});conference.room.addListener(XMPPEvents.MUC_ROLE_CHANGED,conference.onUserRoleChanged.bind(conference));conference.room.addListener(XMPPEvents.CONNECTION_INTERRUPTED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_INTERRUPTED)});conference.room.addListener(XMPPEvents.RECORDING_STATE_CHANGED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.RECORDING_STATE_CHANGED)});conference.room.addListener(XMPPEvents.PHONE_NUMBER_CHANGED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.PHONE_NUMBER_CHANGED)});conference.room.addListener(XMPPEvents.CONNECTION_RESTORED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_RESTORED)});conference.room.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.SETUP_FAILED)});conference.room.addListener(AuthenticationEvents.IDENTITY_UPDATED,function(authEnabled,authIdentity){conference.authEnabled=authEnabled;conference.authIdentity=authIdentity});conference.room.addListener(XMPPEvents.MESSAGE_RECEIVED,function(jid,displayName,txt,myJid,ts){var id=Strophe.getResourceFromJid(jid);conference.eventEmitter.emit(JitsiConferenceEvents.MESSAGE_RECEIVED,id,txt,ts)});conference.room.addListener(XMPPEvents.PRESENCE_STATUS,function(jid,status){var id=Strophe.getResourceFromJid(jid);var participant=conference.getParticipantById(id);if(!participant||participant._status===status){return}participant._status=status;conference.eventEmitter.emit(JitsiConferenceEvents.USER_STATUS_CHANGED,id,status)});conference.rtc.addListener(DSEvents.FIREFOX_EXTENSION_NEEDED,function(url){conference.eventEmitter.emit(JitsiConferenceEvents.FIREFOX_EXTENSION_NEEDED,url)});conference.rtc.addListener(RTCEvents.DOMINANTSPEAKER_CHANGED,function(id){if(conference.lastDominantSpeaker!==id&&conference.room){conference.lastDominantSpeaker=id;conference.eventEmitter.emit(JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,id)}});conference.rtc.addListener(RTCEvents.LASTN_CHANGED,function(oldValue,newValue){conference.eventEmitter.emit(JitsiConferenceEvents.IN_LAST_N_CHANGED,oldValue,newValue)});conference.rtc.addListener(RTCEvents.LASTN_ENDPOINT_CHANGED,function(lastNEndpoints,endpointsEnteringLastN){conference.eventEmitter.emit(JitsiConferenceEvents.LAST_N_ENDPOINTS_CHANGED,lastNEndpoints,endpointsEnteringLastN)});conference.xmpp.addListener(XMPPEvents.PASSWORD_REQUIRED,function(){conference.eventEmitter.emit(JitsiConferenceErrors.PASSWORD_REQUIRED)});conference.xmpp.addListener(XMPPEvents.START_MUTED_FROM_FOCUS,function(audioMuted,videoMuted){conference.startAudioMuted=audioMuted;conference.startVideoMuted=videoMuted;conference.getLocalTracks().forEach(function(track){if(conference.startAudioMuted&&track.isAudioTrack()){track.mute()}if(conference.startVideoMuted&&track.isVideoTrack()){track.mute()}});conference.eventEmitter.emit(JitsiConferenceEvents.STARTED_MUTED)});conference.room.addPresenceListener("startmuted",function(data,from){var isModerator=false;if(conference.myUserId()===from&&conference.isModerator()){isModerator=true}else{var participant=conference.getParticipantById(from);if(participant&&participant.isModerator()){isModerator=true}}if(!isModerator){return}var startAudioMuted=data.attributes.audio==="true";var startVideoMuted=data.attributes.video==="true";var updated=false;if(startAudioMuted!==conference.startMutedPolicy.audio){conference.startMutedPolicy.audio=startAudioMuted;updated=true}if(startVideoMuted!==conference.startMutedPolicy.video){conference.startMutedPolicy.video=startVideoMuted;updated=true}if(updated){conference.eventEmitter.emit(JitsiConferenceEvents.START_MUTED_POLICY_CHANGED,conference.startMutedPolicy)}});conference.rtc.addListener(RTCEvents.AVAILABLE_DEVICES_CHANGED,function(devices){conference.room.updateDeviceAvailability(devices)});conference.room.addPresenceListener("devices",function(data,from){var isAudioAvailable=false;var isVideoAvailable=false;data.children.forEach(function(config){if(config.tagName==="audio"){isAudioAvailable=config.value==="true"}if(config.tagName==="video"){isVideoAvailable=config.value==="true"}});var availableDevices;if(conference.myUserId()===from){availableDevices=conference.availableDevices}else{var participant=conference.getParticipantById(from);if(!participant){return}availableDevices=participant._availableDevices}var updated=false;if(availableDevices.audio!==isAudioAvailable){updated=true;availableDevices.audio=isAudioAvailable}if(availableDevices.video!==isVideoAvailable){updated=true;availableDevices.video=isVideoAvailable}if(updated){conference.eventEmitter.emit(JitsiConferenceEvents.AVAILABLE_DEVICES_CHANGED,from,availableDevices)}});if(conference.statistics){conference.statistics.addAudioLevelListener(function(ssrc,level){var userId=null;var jid=conference.room.getJidBySSRC(ssrc);if(!jid)return;conference.rtc.setAudioLevel(jid,level)});conference.xmpp.addListener(XMPPEvents.DISPOSE_CONFERENCE,function(){conference.statistics.dispose()});conference.room.addListener(XMPPEvents.PEERCONNECTION_READY,function(session){conference.statistics.startCallStats(session,conference.settings)});conference.room.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED,function(){conference.statistics.sendSetupFailedEvent()});conference.on(JitsiConferenceEvents.TRACK_MUTE_CHANGED,function(track){if(!track.isLocal())return;var type=track.getType()==="audio"?"audio":"video";conference.statistics.sendMuteEvent(track.isMuted(),type)});conference.room.addListener(XMPPEvents.CREATE_OFFER_FAILED,function(e,pc){conference.statistics.sendCreateOfferFailed(e,pc)});conference.room.addListener(XMPPEvents.CREATE_ANSWER_FAILED,function(e,pc){conference.statistics.sendCreateAnswerFailed(e,pc)});conference.room.addListener(XMPPEvents.SET_LOCAL_DESCRIPTION_FAILED,function(e,pc){conference.statistics.sendSetLocalDescFailed(e,pc)});conference.room.addListener(XMPPEvents.SET_REMOTE_DESCRIPTION_FAILED,function(e,pc){conference.statistics.sendSetRemoteDescFailed(e,pc)});conference.room.addListener(XMPPEvents.ADD_ICE_CANDIDATE_FAILED,function(e,pc){conference.statistics.sendAddIceCandidateFailed(e,pc)})}}module.exports=JitsiConference}).call(this,"/JitsiConference.js")},{"./JitsiConferenceErrors":2,"./JitsiConferenceEvents":3,"./JitsiParticipant":8,"./JitsiTrackEvents":10,"./modules/DTMF/JitsiDTMFManager":11,"./modules/RTC/RTC":16,"./modules/settings/Settings":21,"./modules/statistics/statistics":25,"./service/RTC/RTCEvents":136,"./service/authentication/AuthenticationEvents":138,"./service/desktopsharing/DesktopSharingEventTypes":139,"./service/xmpp/XMPPEvents":142,events:45,"jitsi-meet-logger":49}],2:[function(require,module,exports){var JitsiConferenceErrors={PASSWORD_REQUIRED:"conference.passwordRequired",AUTHENTICATION_REQUIRED:"conference.authenticationRequired",PASSWORD_NOT_SUPPORTED:"conference.passwordNotSupported",CONNECTION_ERROR:"conference.connectionError",SETUP_FAILED:"conference.setup_failed",VIDEOBRIDGE_NOT_AVAILABLE:"conference.videobridgeNotAvailable",RESERVATION_ERROR:"conference.reservationError",GRACEFUL_SHUTDOWN:"conference.gracefulShutdown",JINGLE_FATAL_ERROR:"conference.jingleFatalError",CONFERENCE_DESTROYED:"conference.destroyed",CHAT_ERROR:"conference.chatError",FOCUS_DISCONNECTED:"conference.focusDisconnected"};module.exports=JitsiConferenceErrors},{}],3:[function(require,module,exports){var JitsiConferenceEvents={TRACK_ADDED:"conference.trackAdded",TRACK_REMOVED:"conference.trackRemoved",DOMINANT_SPEAKER_CHANGED:"conference.dominantSpeaker",USER_JOINED:"conference.userJoined",USER_LEFT:"conference.userLeft",USER_ROLE_CHANGED:"conference.roleChanged",USER_STATUS_CHANGED:"conference.statusChanged",MESSAGE_RECEIVED:"conference.messageReceived",DISPLAY_NAME_CHANGED:"conference.displayNameChanged",AVATAR_CHANGED:"conference.avatarChanged",CONNECTION_STATS_RECEIVED:"conference.connectionStatsReceived",LAST_N_ENDPOINTS_CHANGED:"conference.lastNEndpointsChanged",IN_LAST_N_CHANGED:"conference.lastNEndpointsChanged",TRACK_MUTE_CHANGED:"conference.trackMuteChanged",TRACK_AUDIO_LEVEL_CHANGED:"conference.audioLevelsChanged",CONNECTION_INTERRUPTED:"conference.connectionInterrupted",CONNECTION_RESTORED:"conference.connectionRestored",CONFERENCE_FAILED:"conference.failed",CONFERENCE_JOINED:"conference.joined",CONFERENCE_LEFT:"conference.left",KICKED:"conferenece.kicked",START_MUTED_POLICY_CHANGED:"conference.start_muted_policy_changed",STARTED_MUTED:"conference.started_muted",DTMF_SUPPORT_CHANGED:"conference.dtmfSupportChanged",RECORDING_STATE_CHANGED:"conference.recordingStateChanged",PHONE_NUMBER_CHANGED:"conference.phoneNumberChanged",FIREFOX_EXTENSION_NEEDED:"conference.firefoxExtensionRequired",AVAILABLE_DEVICES_CHANGED:"conference.availableDevicesChanged"};module.exports=JitsiConferenceEvents},{}],4:[function(require,module,exports){var JitsiConference=require("./JitsiConference");var XMPP=require("./modules/xmpp/xmpp");function JitsiConnection(appID,token,options){this.appID=appID;this.token=token;this.options=options;this.xmpp=new XMPP(options);this.conferences={}}JitsiConnection.prototype.connect=function(options){if(!options)options={};this.xmpp.connect(options.id,options.password)};JitsiConnection.prototype.disconnect=function(){this.xmpp.disconnect()};JitsiConnection.prototype.setToken=function(token){this.token=token};JitsiConnection.prototype.initJitsiConference=function(name,options){this.conferences[name]=new JitsiConference({name:name,config:options,connection:this});return this.conferences[name]};JitsiConnection.prototype.addEventListener=function(event,listener){this.xmpp.addListener(event,listener)};JitsiConnection.prototype.removeEventListener=function(event,listener){this.xmpp.removeListener(event,listener)};module.exports=JitsiConnection},{"./JitsiConference":1,"./modules/xmpp/xmpp":43}],5:[function(require,module,exports){var JitsiConnectionErrors={PASSWORD_REQUIRED:"connection.passwordRequired",CONNECTION_ERROR:"connection.connectionError",OTHER_ERROR:"connection.otherError"};module.exports=JitsiConnectionErrors},{}],6:[function(require,module,exports){var JitsiConnnectionEvents={CONNECTION_FAILED:"connection.connectionFailed",CONNECTION_ESTABLISHED:"connection.connectionEstablished",CONNECTION_DISCONNECTED:"connection.connectionDisconnected",WRONG_STATE:"connection.wrongState"};module.exports=JitsiConnnectionEvents},{}],7:[function(require,module,exports){var JitsiConnection=require("./JitsiConnection");var JitsiConferenceEvents=require("./JitsiConferenceEvents");var JitsiConnectionEvents=require("./JitsiConnectionEvents");var JitsiConnectionErrors=require("./JitsiConnectionErrors");var JitsiConferenceErrors=require("./JitsiConferenceErrors");var JitsiTrackEvents=require("./JitsiTrackEvents");var JitsiTrackErrors=require("./JitsiTrackErrors");var Logger=require("jitsi-meet-logger");var RTC=require("./modules/RTC/RTC");var Statistics=require("./modules/statistics/statistics");var Resolutions=require("./service/RTC/Resolutions");function getLowerResolution(resolution){if(!Resolutions[resolution])return null;var order=Resolutions[resolution].order;var res=null;var resName=null;for(var i in Resolutions){var tmp=Resolutions[i];if(!res||res.order<tmp.order&&tmp.order<order){resName=i;res=tmp}}return resName}var LibJitsiMeet={JitsiConnection:JitsiConnection,events:{conference:JitsiConferenceEvents,connection:JitsiConnectionEvents,track:JitsiTrackEvents},errors:{conference:JitsiConferenceErrors,connection:JitsiConnectionErrors,track:JitsiTrackErrors},logLevels:Logger.levels,_gumFailedHandler:[],init:function(options){Statistics.audioLevelsEnabled=!options.disableAudioLevels||true;return RTC.init(options||{})},isDesktopSharingEnabled:function(){return RTC.isDesktopSharingEnabled()},setLogLevel:function(level){Logger.setLogLevel(level)},createLocalTracks:function(options){return RTC.obtainAudioAndVideoPermissions(options||{}).then(function(tracks){if(!RTC.options.disableAudioLevels)for(var i=0;i<tracks.length;i++){var track=tracks[i];var mStream=track.getOriginalStream();if(track.getType()==="audio"){Statistics.startLocalStats(mStream,track.setAudioLevel.bind(track));track.addEventListener(JitsiTrackEvents.TRACK_STOPPED,function(){Statistics.stopLocalStats(mStream)})}}return tracks}).catch(function(error){this._gumFailedHandler.forEach(function(handler){handler(error)});if(!this._gumFailedHandler.length)Statistics.sendGetUserMediaFailed(error);if(error===JitsiTrackErrors.UNSUPPORTED_RESOLUTION){var oldResolution=options.resolution||"360";var newResolution=getLowerResolution(oldResolution);if(newResolution===null)return Promise.reject(error);options.resolution=newResolution;return LibJitsiMeet.createLocalTracks(options)}return Promise.reject(error)}.bind(this))},isDeviceListAvailable:function(){return RTC.isDeviceListAvailable()},isDeviceChangeAvailable:function(){return RTC.isDeviceChangeAvailable()},enumerateDevices:function(callback){RTC.enumerateDevices(callback)}};window.Promise=window.Promise||require("es6-promise").Promise;module.exports=LibJitsiMeet},{"./JitsiConferenceErrors":2,"./JitsiConferenceEvents":3,"./JitsiConnection":4,"./JitsiConnectionErrors":5,"./JitsiConnectionEvents":6,"./JitsiTrackErrors":9,"./JitsiTrackEvents":10,"./modules/RTC/RTC":16,"./modules/statistics/statistics":25,"./service/RTC/Resolutions":137,"es6-promise":47,"jitsi-meet-logger":49}],8:[function(require,module,exports){function JitsiParticipant(jid,conference,displayName){this._jid=jid;this._id=Strophe.getResourceFromJid(jid);this._conference=conference;this._displayName=displayName;this._supportsDTMF=false;this._tracks=[];this._role="none";this._status=null;this._availableDevices={audio:undefined,video:undefined}}JitsiParticipant.prototype.getConference=function(){return this._conference};JitsiParticipant.prototype.getTracks=function(){return this._tracks};JitsiParticipant.prototype.getId=function(){return this._id};JitsiParticipant.prototype.getJid=function(){return this._jid};JitsiParticipant.prototype.getDisplayName=function(){return this._displayName};JitsiParticipant.prototype.getStatus=function(){return this._status};JitsiParticipant.prototype.isModerator=function(){return this._role==="moderator"};JitsiParticipant.prototype.isAudioMuted=function(){
- return this.getTracks().reduce(function(track,isAudioMuted){return isAudioMuted&&(track.isVideoTrack()||track.isMuted())},true)};JitsiParticipant.prototype.isVideoMuted=function(){return this.getTracks().reduce(function(track,isVideoMuted){return isVideoMuted&&(track.isAudioTrack()||track.isMuted())},true)};JitsiParticipant.prototype.getLatestStats=function(){};JitsiParticipant.prototype.getRole=function(){return this._role};JitsiParticipant.prototype.isFocus=function(){};JitsiParticipant.prototype.isRecorder=function(){};JitsiParticipant.prototype.isSipGateway=function(){};JitsiParticipant.prototype.isScreenSharing=function(){};JitsiParticipant.prototype.getUserAgent=function(){};JitsiParticipant.prototype.kick=function(){};JitsiParticipant.prototype.askToMute=function(){};JitsiParticipant.prototype.supportsDTMF=function(){return this._supportsDTMF};module.exports=JitsiParticipant},{}],9:[function(require,module,exports){module.exports={parseError:function(error,devices){devices=devices||[];if(typeof error=="object"&&error.constraintName&&error.name&&(error.name=="ConstraintNotSatisfiedError"||error.name=="OverconstrainedError")&&(error.constraintName=="minWidth"||error.constraintName=="maxWidth"||error.constraintName=="minHeight"||error.constraintName=="maxHeight")&&devices.indexOf("video")!==-1){return this.UNSUPPORTED_RESOLUTION}else if(typeof error==="object"&&error.type==="jitsiError"){return error.errorObject}else{return this.GENERAL}},UNSUPPORTED_RESOLUTION:"gum.unsupported_resolution",FIREFOX_EXTENSION_NEEDED:"gum.firefox_extension_needed",GENERAL:"gum.general"}},{}],10:[function(require,module,exports){var JitsiTrackEvents={TRACK_MUTE_CHANGED:"track.trackMuteChanged",TRACK_AUDIO_LEVEL_CHANGED:"track.audioLevelsChanged",TRACK_STOPPED:"track.stopped"};module.exports=JitsiTrackEvents},{}],11:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);function JitsiDTMFManager(localAudio,peerConnection){var tracks=localAudio._getTracks();if(!tracks.length){throw new Error("Failed to initialize DTMFSender: no audio track.")}this.dtmfSender=peerConnection.peerconnection.createDTMFSender(tracks[0]);logger.debug("Initialized DTMFSender")}JitsiDTMFManager.prototype.sendTones=function(tones,duration,pause){this.dtmfSender.insertDTMF(tones,duration||200,pause||200)}}).call(this,"/modules/DTMF/JitsiDTMFManager.js")},{"jitsi-meet-logger":49}],12:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCEvents=require("../../service/RTC/RTCEvents");function DataChannels(peerConnection,emitter){peerConnection.ondatachannel=this.onDataChannel.bind(this);this.eventEmitter=emitter;this._dataChannels=[]}DataChannels.prototype.onDataChannel=function(event){var dataChannel=event.channel;var self=this;var lastSelectedEndpoint=null;dataChannel.onopen=function(){logger.info("Data channel opened by the Videobridge!",dataChannel);self.eventEmitter.emit(RTCEvents.DATA_CHANNEL_OPEN);self.handleSelectedEndpointEvent(self.lastSelectedEndpoint)};dataChannel.onerror=function(error){logger.error("Data Channel Error:",error,dataChannel)};dataChannel.onmessage=function(event){var data=event.data;var obj;try{obj=JSON.parse(data)}catch(e){logger.error("Failed to parse data channel message as JSON: ",data,dataChannel)}if("undefined"!==typeof obj&&null!==obj){var colibriClass=obj.colibriClass;if("DominantSpeakerEndpointChangeEvent"===colibriClass){var dominantSpeakerEndpoint=obj.dominantSpeakerEndpoint;logger.info("Data channel new dominant speaker event: ",dominantSpeakerEndpoint);self.eventEmitter.emit(RTCEvents.DOMINANTSPEAKER_CHANGED,dominantSpeakerEndpoint)}else if("InLastNChangeEvent"===colibriClass){var oldValue=obj.oldValue;var newValue=obj.newValue;var type;if((type=typeof oldValue)!=="boolean"){if(type==="string"){oldValue=oldValue=="true"}else{oldValue=new Boolean(oldValue).valueOf()}}if((type=typeof newValue)!=="boolean"){if(type==="string"){newValue=newValue=="true"}else{newValue=new Boolean(newValue).valueOf()}}self.eventEmitter.emit(RTCEvents.LASTN_CHANGED,oldValue,newValue)}else if("LastNEndpointsChangeEvent"===colibriClass){var lastNEndpoints=obj.lastNEndpoints;var endpointsEnteringLastN=obj.endpointsEnteringLastN;logger.info("Data channel new last-n event: ",lastNEndpoints,endpointsEnteringLastN,obj);self.eventEmitter.emit(RTCEvents.LASTN_ENDPOINT_CHANGED,lastNEndpoints,endpointsEnteringLastN,obj)}else{logger.debug("Data channel JSON-formatted message: ",obj);self.eventEmitter.emit("rtc.datachannel."+colibriClass,obj)}}};dataChannel.onclose=function(){logger.info("The Data Channel closed",dataChannel);var idx=self._dataChannels.indexOf(dataChannel);if(idx>-1)self._dataChannels=self._dataChannels.splice(idx,1)};this._dataChannels.push(dataChannel)};DataChannels.prototype.handleSelectedEndpointEvent=function(userResource){this.lastSelectedEndpoint=userResource;this._onXXXEndpointChanged("selected",userResource)};DataChannels.prototype.handlePinnedEndpointEvent=function(userResource){this._onXXXEndpointChanged("pinnned",userResource)};DataChannels.prototype._onXXXEndpointChanged=function(xxx,userResource){var head=xxx.charAt(0);var tail=xxx.substring(1);var lower=head.toLowerCase()+tail;var upper=head.toUpperCase()+tail;console.log(lower+" endpoint changed: ",userResource);this._some(function(dataChannel){if(dataChannel.readyState=="open"){console.log("sending "+lower+" endpoint changed notification to the bridge: ",userResource);var jsonObject={};jsonObject.colibriClass=upper+"EndpointChangedEvent";jsonObject[lower+"Endpoint"]=userResource?userResource:null;dataChannel.send(JSON.stringify(jsonObject));return true}})};DataChannels.prototype._some=function(callback,thisArg){var dataChannels=this._dataChannels;if(dataChannels&&dataChannels.length!==0){if(thisArg)return dataChannels.some(callback,thisArg);else return dataChannels.some(callback)}else{return false}};module.exports=DataChannels}).call(this,"/modules/RTC/DataChannels.js")},{"../../service/RTC/RTCEvents":136,"jitsi-meet-logger":49}],13:[function(require,module,exports){var JitsiTrack=require("./JitsiTrack");var RTCBrowserType=require("./RTCBrowserType");var JitsiTrackEvents=require("../../JitsiTrackEvents");var RTCUtils=require("./RTCUtils");function JitsiLocalTrack(stream,videoType,resolution){this.videoType=videoType;this.dontFireRemoveEvent=false;this.resolution=resolution;this.startMuted=false;var self=this;JitsiTrack.call(this,null,stream,function(){if(!this.dontFireRemoveEvent)this.eventEmitter.emit(JitsiTrackEvents.TRACK_STOPPED);this.dontFireRemoveEvent=false}.bind(this))}JitsiLocalTrack.prototype=Object.create(JitsiTrack.prototype);JitsiLocalTrack.prototype.constructor=JitsiLocalTrack;JitsiLocalTrack.prototype._setMute=function(mute){if(this.isMuted()===mute){return}if(!this.rtc){this.startMuted=mute;return}var isAudio=this.type===JitsiTrack.AUDIO;this.dontFireRemoveEvent=false;if(window.location.protocol!="https:"||isAudio||this.videoType==="desktop"||RTCBrowserType.isFirefox()){var tracks=this._getTracks();for(var idx=0;idx<tracks.length;idx++){tracks[idx].enabled=!mute}if(isAudio)this.rtc.room.setAudioMute(mute);else this.rtc.room.setVideoMute(mute);this.eventEmitter.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED)}else{if(mute){this.dontFireRemoveEvent=true;this.rtc.room.removeStream(this.stream,function(){});RTCUtils.stopMediaStream(this.stream);if(isAudio)this.rtc.room.setAudioMute(mute);else this.rtc.room.setVideoMute(mute);this.stream=null;this.eventEmitter.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED)}else{var self=this;RTCUtils.obtainAudioAndVideoPermissions({devices:isAudio?["audio"]:["video"],resolution:self.resolution}).then(function(streams){var stream=null;for(var i=0;i<streams.length;i++){stream=streams[i];if(stream.type===self.type){self.stream=stream.stream;self.videoType=stream.videoType;break}}if(!stream)return;for(var i=0;i<self.containers.length;i++){RTCUtils.attachMediaStream(self.containers[i],self.stream)}self.rtc.room.addStream(stream.stream,function(){if(isAudio)self.rtc.room.setAudioMute(mute);else self.rtc.room.setVideoMute(mute);self.eventEmitter.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED)})})}}};JitsiLocalTrack.prototype.stop=function(){if(!this.stream)return;if(this.rtc)this.rtc.room.removeStream(this.stream,function(){});RTCUtils.stopMediaStream(this.stream);this.detach()};JitsiLocalTrack.prototype.isMuted=function(){if(!this.stream)return true;var tracks=[];var isAudio=this.type===JitsiTrack.AUDIO;if(isAudio){tracks=this.stream.getAudioTracks()}else{if(!this.isActive())return true;tracks=this.stream.getVideoTracks()}for(var idx=0;idx<tracks.length;idx++){if(tracks[idx].enabled)return false}return true};JitsiLocalTrack.prototype._setRTC=function(rtc){this.rtc=rtc};JitsiLocalTrack.prototype.isLocal=function(){return true};module.exports=JitsiLocalTrack},{"../../JitsiTrackEvents":10,"./JitsiTrack":15,"./RTCBrowserType":17,"./RTCUtils":18}],14:[function(require,module,exports){var JitsiTrack=require("./JitsiTrack");var JitsiTrackEvents=require("../../JitsiTrackEvents");function JitsiRemoteTrack(RTC,data,sid,ssrc){JitsiTrack.call(this,RTC,data.stream,function(){this.eventEmitter.emit(JitsiTrackEvents.TRACK_STOPPED)}.bind(this),data.jitsiTrackType);this.rtc=RTC;this.sid=sid;this.stream=data.stream;this.peerjid=data.peerjid;this.videoType=data.videoType;this.ssrc=ssrc;this.muted=false;if(this.type===JitsiTrack.AUDIO&&data.audiomuted||this.type===JitsiTrack.VIDEO&&data.videomuted){this.muted=true}}JitsiRemoteTrack.prototype=Object.create(JitsiTrack.prototype);JitsiRemoteTrack.prototype.constructor=JitsiRemoteTrack;JitsiRemoteTrack.prototype.setMute=function(value){if(this.muted===value)return;if(this.stream)this.stream.muted=value;this.muted=value;this.eventEmitter.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED)};JitsiRemoteTrack.prototype.isMuted=function(){return this.muted};JitsiRemoteTrack.prototype.getParticipantId=function(){return Strophe.getResourceFromJid(this.peerjid)};JitsiRemoteTrack.prototype.isLocal=function(){return false};delete JitsiRemoteTrack.prototype.stop;module.exports=JitsiRemoteTrack},{"../../JitsiTrackEvents":10,"./JitsiTrack":15}],15:[function(require,module,exports){var RTCBrowserType=require("./RTCBrowserType");var JitsiTrackEvents=require("../../JitsiTrackEvents");var EventEmitter=require("events");var RTC=require("./RTCUtils");function implementOnEndedHandling(jitsiTrack){var stream=jitsiTrack.getOriginalStream();if(!stream)return;var originalStop=stream.stop;stream.stop=function(){originalStop.apply(stream);if(jitsiTrack.isActive()){stream.onended()}}}function addMediaStreamInactiveHandler(mediaStream,handler){if(RTCBrowserType.isTemasysPluginUsed()){if(mediaStream.onended){mediaStream.onended=handler}else if(mediaStream.addEventListener){mediaStream.addEventListener("ended",function(){handler(mediaStream)})}else if(mediaStream.attachEvent){mediaStream.attachEvent("ended",function(){handler(mediaStream)})}}else{if(typeof mediaStream.active!=="undefined")mediaStream.oninactive=handler;else mediaStream.onended=handler}}function JitsiTrack(rtc,stream,streamInactiveHandler,jitsiTrackType){this.containers=[];this.rtc=rtc;this.stream=stream;this.eventEmitter=new EventEmitter;this.audioLevel=-1;this.type=jitsiTrackType||this.stream.getVideoTracks().length>0?JitsiTrack.VIDEO:JitsiTrack.AUDIO;if(this.type==JitsiTrack.AUDIO){this._getTracks=function(){return this.stream.getAudioTracks()}.bind(this)}else{this._getTracks=function(){return this.stream.getVideoTracks()}.bind(this)}if(RTCBrowserType.isFirefox()&&this.stream){implementOnEndedHandling(this)}if(stream)addMediaStreamInactiveHandler(stream,streamInactiveHandler)}JitsiTrack.VIDEO="video";JitsiTrack.AUDIO="audio";JitsiTrack.prototype.getType=function(){return this.type};JitsiTrack.prototype.isAudioTrack=function(){return this.getType()===JitsiTrack.AUDIO};JitsiTrack.prototype.isVideoTrack=function(){return this.getType()===JitsiTrack.VIDEO};JitsiTrack.prototype.getOriginalStream=function(){return this.stream};JitsiTrack.prototype.mute=function(){this._setMute(true)};JitsiTrack.prototype.unmute=function(){this._setMute(false)};JitsiTrack.prototype.attach=function(container){if(this.stream)require("./RTCUtils").attachMediaStream(container,this.stream);this.containers.push(container)};JitsiTrack.prototype.detach=function(container){for(var i=0;i<this.containers.length;i++){if(this.containers[i].is(container)){this.containers.splice(i,1)}if(!container){this.containers[i].find(">video").remove()}}if(container)$(container).find(">video").remove()};JitsiTrack.prototype.stop=function(){};JitsiTrack.prototype.isScreenSharing=function(){};JitsiTrack.prototype._getId=function(){var tracks=this.stream.getTracks();if(!tracks||tracks.length===0)return null;return tracks[0].id};JitsiTrack.prototype.getId=function(){if(this.stream)return RTC.getStreamID(this.stream);else return null};JitsiTrack.prototype.isActive=function(){if(typeof this.stream.active!=="undefined")return this.stream.active;else return true};JitsiTrack.prototype.on=function(eventId,handler){if(this.eventEmitter)this.eventEmitter.on(eventId,handler)};JitsiTrack.prototype.off=function(eventId,handler){if(this.eventEmitter)this.eventEmitter.removeListener(eventId,handler)};JitsiTrack.prototype.addEventListener=JitsiTrack.prototype.on;JitsiTrack.prototype.removeEventListener=JitsiTrack.prototype.off;JitsiTrack.prototype.setAudioLevel=function(audioLevel){if(this.audioLevel!==audioLevel){this.eventEmitter.emit(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,audioLevel);this.audioLevel=audioLevel}};module.exports=JitsiTrack},{"../../JitsiTrackEvents":10,"./RTCBrowserType":17,"./RTCUtils":18,events:45}],16:[function(require,module,exports){var EventEmitter=require("events");var RTCBrowserType=require("./RTCBrowserType");var RTCUtils=require("./RTCUtils.js");var JitsiTrack=require("./JitsiTrack");var JitsiLocalTrack=require("./JitsiLocalTrack.js");var DataChannels=require("./DataChannels");var JitsiRemoteTrack=require("./JitsiRemoteTrack.js");var MediaStreamType=require("../../service/RTC/MediaStreamTypes");var RTCEvents=require("../../service/RTC/RTCEvents.js");function createLocalTracks(streams){var newStreams=[];for(var i=0;i<streams.length;i++){var localStream=new JitsiLocalTrack(streams[i].stream,streams[i].videoType,streams[i].resolution);newStreams.push(localStream);if(streams[i].isMuted===true)localStream.setMute(true)}return newStreams}function RTC(room,options){this.room=room;this.localStreams=[];this.remoteStreams={};this.localAudio=null;this.localVideo=null;this.eventEmitter=new EventEmitter;var self=this;this.options=options||{};room.addPresenceListener("videomuted",function(values,from){if(self.remoteStreams[from]){if(!self.remoteStreams[from][JitsiTrack.VIDEO]){var track=self.createRemoteStream({peerjid:room.roomjid+"/"+from,videoType:"camera",jitsiTrackType:JitsiTrack.VIDEO},null,null);self.eventEmitter.emit(RTCEvents.FAKE_VIDEO_TRACK_CREATED,track)}self.remoteStreams[from][JitsiTrack.VIDEO].setMute(values.value=="true")}});room.addPresenceListener("audiomuted",function(values,from){if(self.remoteStreams[from]){self.remoteStreams[from][JitsiTrack.AUDIO].setMute(values.value=="true")}})}RTC.obtainAudioAndVideoPermissions=function(options){return RTCUtils.obtainAudioAndVideoPermissions(options).then(createLocalTracks)};RTC.prototype.onIncommingCall=function(event){if(this.options.config.openSctp)this.dataChannels=new DataChannels(event.peerconnection,this.eventEmitter);for(var i=0;i<this.localStreams.length;i++)if(this.localStreams[i]){this.room.addStream(this.localStreams[i].getOriginalStream(),function(){})}};RTC.prototype.selectedEndpoint=function(id){if(this.dataChannels)this.dataChannels.handleSelectedEndpointEvent(id)};RTC.prototype.pinEndpoint=function(id){if(this.dataChannels)this.dataChannels.handlePinnedEndpointEvent(id)};RTC.prototype.addListener=function(type,listener){this.eventEmitter.on(type,listener)};RTC.prototype.removeListener=function(eventType,listener){this.eventEmitter.removeListener(eventType,listener)};RTC.addListener=function(eventType,listener){RTCUtils.addListener(eventType,listener)};RTC.removeListener=function(eventType,listener){RTCUtils.removeListener(eventType,listener)};RTC.isRTCReady=function(){return RTCUtils.isRTCReady()};RTC.init=function(options){this.options=options||{};return RTCUtils.init(this.options)};RTC.getDeviceAvailability=function(){return RTCUtils.getDeviceAvailability()};RTC.prototype.addLocalStream=function(stream){this.localStreams.push(stream);stream._setRTC(this);if(stream.type=="audio"){this.localAudio=stream}else{this.localVideo=stream}};RTC.prototype.setAudioMute=function(value){for(var i=0;i<this.localStreams.length;i++){var stream=this.localStreams[i];if(stream.getType()!=="audio"){continue}stream._setMute(value)}};RTC.prototype.removeLocalStream=function(track){var pos=this.localStreams.indexOf(track);if(pos>-1){this.localStreams.splice(pos,1)}};RTC.prototype.createRemoteStream=function(data,sid,thessrc){var remoteStream=new JitsiRemoteTrack(this,data,sid,thessrc);if(!data.peerjid)return;var jid=Strophe.getResourceFromJid(data.peerjid);if(!this.remoteStreams[jid]){this.remoteStreams[jid]={}}this.remoteStreams[jid][remoteStream.type]=remoteStream;return remoteStream};RTC.getPCConstraints=function(){return RTCUtils.pc_constraints};RTC.attachMediaStream=function(elSelector,stream){RTCUtils.attachMediaStream(elSelector,stream)};RTC.getStreamID=function(stream){return RTCUtils.getStreamID(stream)};RTC.getVideoSrc=function(element){return RTCUtils.getVideoSrc(element)};RTC.isDeviceListAvailable=function(){return RTCUtils.isDeviceListAvailable()};RTC.isDeviceChangeAvailable=function(){return RTCUtils.isDeviceChangeAvailable()};RTC.enumerateDevices=function(callback){RTCUtils.enumerateDevices(callback)};RTC.setVideoSrc=function(element,src){RTCUtils.setVideoSrc(element,src)};RTC.stopMediaStream=function(mediaStream){RTCUtils.stopMediaStream(mediaStream)};RTC.isDesktopSharingEnabled=function(){return RTCUtils.isDesktopSharingEnabled()};RTC.prototype.getVideoElementName=function(){return RTCBrowserType.isTemasysPluginUsed()?"object":"video"};RTC.prototype.dispose=function(){};RTC.prototype.switchVideoStreams=function(newStream){this.localVideo.stream=newStream;this.localStreams=[];if(this.localAudio.getOriginalStream()!=newStream)this.localStreams.push(this.localAudio);this.localStreams.push(this.localVideo)};RTC.prototype.setAudioLevel=function(jid,audioLevel){if(!jid)return;var resource=Strophe.getResourceFromJid(jid);if(this.remoteStreams[resource]&&this.remoteStreams[resource][JitsiTrack.AUDIO])this.remoteStreams[resource][JitsiTrack.AUDIO].setAudioLevel(audioLevel)};module.exports=RTC},{"../../service/RTC/MediaStreamTypes":135,"../../service/RTC/RTCEvents.js":136,"./DataChannels":12,"./JitsiLocalTrack.js":13,"./JitsiRemoteTrack.js":14,"./JitsiTrack":15,"./RTCBrowserType":17,"./RTCUtils.js":18,events:45}],17:[function(require,module,exports){var currentBrowser;var browserVersion;var isAndroid;var RTCBrowserType={RTC_BROWSER_CHROME:"rtc_browser.chrome",RTC_BROWSER_OPERA:"rtc_browser.opera",RTC_BROWSER_FIREFOX:"rtc_browser.firefox",RTC_BROWSER_IEXPLORER:"rtc_browser.iexplorer",RTC_BROWSER_SAFARI:"rtc_browser.safari",getBrowserType:function(){return currentBrowser},isChrome:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_CHROME},isOpera:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_OPERA},isFirefox:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_FIREFOX},isIExplorer:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_IEXPLORER},isSafari:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_SAFARI},isTemasysPluginUsed:function(){return RTCBrowserType.isIExplorer()||RTCBrowserType.isSafari()},getFirefoxVersion:function(){return RTCBrowserType.isFirefox()?browserVersion:null},getChromeVersion:function(){return RTCBrowserType.isChrome()?browserVersion:null},usesPlanB:function(){return RTCBrowserType.isChrome()||RTCBrowserType.isOpera()||RTCBrowserType.isTemasysPluginUsed()},usesUnifiedPlan:function(){return RTCBrowserType.isFirefox()},isAndroid:function(){return isAndroid}};function detectChrome(){if(navigator.webkitGetUserMedia){currentBrowser=RTCBrowserType.RTC_BROWSER_CHROME;var userAgent=navigator.userAgent.toLowerCase();var ver=parseInt(userAgent.match(/chrome\/(\d+)\./)[1],10);console.log("This appears to be Chrome, ver: "+ver);return ver}return null}function detectOpera(){var userAgent=navigator.userAgent;if(userAgent.match(/Opera|OPR/)){currentBrowser=RTCBrowserType.RTC_BROWSER_OPERA;var version=userAgent.match(/(Opera|OPR) ?\/?(\d+)\.?/)[2];console.info("This appears to be Opera, ver: "+version);return version}return null}function detectFirefox(){if(navigator.mozGetUserMedia){currentBrowser=RTCBrowserType.RTC_BROWSER_FIREFOX;var version=parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1],10);console.log("This appears to be Firefox, ver: "+version);return version}return null}function detectSafari(){if(/^((?!chrome).)*safari/i.test(navigator.userAgent)){currentBrowser=RTCBrowserType.RTC_BROWSER_SAFARI;console.info("This appears to be Safari");return 1}return null}function detectIE(){var version;var ua=window.navigator.userAgent;var msie=ua.indexOf("MSIE ");if(msie>0){version=parseInt(ua.substring(msie+5,ua.indexOf(".",msie)),10)}var trident=ua.indexOf("Trident/");if(!version&&trident>0){var rv=ua.indexOf("rv:");version=parseInt(ua.substring(rv+3,ua.indexOf(".",rv)),10)}var edge=ua.indexOf("Edge/");if(!version&&edge>0){version=parseInt(ua.substring(edge+5,ua.indexOf(".",edge)),10)}if(version){currentBrowser=RTCBrowserType.RTC_BROWSER_IEXPLORER;console.info("This appears to be IExplorer, ver: "+version)}return version}function detectBrowser(){var version;var detectors=[detectOpera,detectChrome,detectFirefox,detectIE,detectSafari];for(var i=0;i<detectors.length;i++){version=detectors[i]();if(version)return version}console.warn("Browser type defaults to Safari ver 1");currentBrowser=RTCBrowserType.RTC_BROWSER_SAFARI;return 1}browserVersion=detectBrowser();isAndroid=navigator.userAgent.indexOf("Android")!=-1;module.exports=RTCBrowserType},{}],18:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("./RTCBrowserType");var Resolutions=require("../../service/RTC/Resolutions");var RTCEvents=require("../../service/RTC/RTCEvents");var AdapterJS=require("./adapter.screenshare");var SDPUtil=require("../xmpp/SDPUtil");var EventEmitter=require("events");var screenObtainer=require("./ScreenObtainer");var JitsiTrackErrors=require("../../JitsiTrackErrors");var eventEmitter=new EventEmitter;var devices={audio:true,video:true};var rtcReady=false;function setResolutionConstraints(constraints,resolution){var isAndroid=RTCBrowserType.isAndroid();if(Resolutions[resolution]){constraints.video.mandatory.minWidth=Resolutions[resolution].width;constraints.video.mandatory.minHeight=Resolutions[resolution].height}else if(isAndroid){constraints.video.mandatory.minWidth=320;constraints.video.mandatory.minHeight=240;constraints.video.mandatory.maxFrameRate=15}if(constraints.video.mandatory.minWidth)constraints.video.mandatory.maxWidth=constraints.video.mandatory.minWidth;if(constraints.video.mandatory.minHeight)constraints.video.mandatory.maxHeight=constraints.video.mandatory.minHeight}function getConstraints(um,options){var constraints={audio:false,video:false};if(um.indexOf("video")>=0){constraints.video={mandatory:{},optional:[]};if(options.cameraDeviceId){constraints.video.optional.push({sourceId:options.cameraDeviceId})}constraints.video.optional.push({googLeakyBucket:true});setResolutionConstraints(constraints,options.resolution)}if(um.indexOf("audio")>=0){if(!RTCBrowserType.isFirefox()){constraints.audio={mandatory:{},optional:[]};if(options.micDeviceId){constraints.audio.optional.push({sourceId:options.micDeviceId})}constraints.audio.optional.push({googEchoCancellation:true},{googAutoGainControl:true},{googNoiseSupression:true},{googHighpassFilter:true},{googNoisesuppression2:true},{googEchoCancellation2:true},{googAutoGainControl2:true})}else{if(options.micDeviceId){constraints.audio={mandatory:{},optional:[{sourceId:options.micDeviceId}]}}else{constraints.audio=true}}}if(um.indexOf("screen")>=0){if(RTCBrowserType.isChrome()){constraints.video={mandatory:{chromeMediaSource:"screen",googLeakyBucket:true,maxWidth:window.screen.width,maxHeight:window.screen.height,maxFrameRate:3},optional:[]}}else if(RTCBrowserType.isTemasysPluginUsed()){constraints.video={optional:[{sourceId:AdapterJS.WebRTCPlugin.plugin.screensharingKey}]}}else if(RTCBrowserType.isFirefox()){constraints.video={mozMediaSource:"window",mediaSource:"window"}}else{logger.error("'screen' WebRTC media source is supported only in Chrome"+" and with Temasys plugin")}}if(um.indexOf("desktop")>=0){constraints.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:options.desktopStream,googLeakyBucket:true,maxWidth:window.screen.width,maxHeight:window.screen.height,maxFrameRate:3},optional:[]}}if(options.bandwidth){if(!constraints.video){constraints.video={mandatory:{},optional:[]}}constraints.video.optional.push({bandwidth:options.bandwidth})}if(options.fps){if(!constraints.video){constraints.video={mandatory:{},optional:[]}}constraints.video.mandatory.minFrameRate=options.fps}if(RTCBrowserType.isFirefox()&&options.firefox_fake_device){constraints.fake=true}return constraints}function setAvailableDevices(um,available){if(um.indexOf("video")!=-1){devices.video=available}if(um.indexOf("audio")!=-1){devices.audio=available}eventEmitter.emit(RTCEvents.AVAILABLE_DEVICES_CHANGED,devices)}function onReady(options,GUM){rtcReady=true;eventEmitter.emit(RTCEvents.RTC_READY,true);screenObtainer.init(options,GUM)}function maybeApply(fn,args){if(fn){fn.apply(null,args||[])}}var getUserMediaStatus={initialized:false,callbacks:[]};function wrapGetUserMedia(getUserMedia){return function(constraints,successCallback,errorCallback){getUserMedia(constraints,function(stream){maybeApply(successCallback,[stream]);if(!getUserMediaStatus.initialized){getUserMediaStatus.initialized=true;getUserMediaStatus.callbacks.forEach(function(callback){callback()});getUserMediaStatus.callbacks.length=0}},function(error){maybeApply(errorCallback,[error])})}}function createAutoDeviceInfo(kind){return{facing:null,label:"Auto",kind:kind,deviceId:"",groupId:null}}function afterUserMediaInitialized(callback){if(getUserMediaStatus.initialized){callback()}else{getUserMediaStatus.callbacks.push(callback)}}function wrapEnumerateDevices(enumerateDevices){return function(callback){afterUserMediaInitialized(function(){enumerateDevices().then(function(devices){devices.unshift(createAutoDeviceInfo("audioinput"),createAutoDeviceInfo("videoinput"));callback(devices)},function(err){console.error("cannot enumerate devices: ",err);callback([createAutoDeviceInfo("audioInput"),createAutoDeviceInfo("videoinput")])})})}}function enumerateDevicesThroughMediaStreamTrack(callback){MediaStreamTrack.getSources(function(sources){var devices=sources.map(function(source){var kind=(source.kind||"").toLowerCase();return{facing:source.facing||null,label:source.label,kind:kind?kind+"input":null,deviceId:source.id,groupId:source.groupId||null}});devices.unshift(createAutoDeviceInfo("audioinput"),createAutoDeviceInfo("videoinput"));callback(devices)})}function obtainDevices(options){if(!options.devices||options.devices.length===0){return options.successCallback(options.streams||{})}var device=options.devices.splice(0,1);var devices=[];devices.push(device);options.deviceGUM[device](function(stream){options.streams=options.streams||{};options.streams[device]=stream;obtainDevices(options)},function(error){Object.keys(options.streams).forEach(function(device){RTCUtils.stopMediaStream(options.streams[device])});logger.error("failed to obtain "+device+" stream - stop",error);options.errorCallback(JitsiTrackErrors.parseError(error,devices))})}function handleLocalStream(streams,resolution){var audioStream,videoStream,desktopStream,res=[];if(window.webkitMediaStream){var audioVideo=streams.audioVideo;if(audioVideo){var audioTracks=audioVideo.getAudioTracks();if(audioTracks.length){audioStream=new webkitMediaStream;for(var i=0;i<audioTracks.length;i++){audioStream.addTrack(audioTracks[i])}}var videoTracks=audioVideo.getVideoTracks();if(videoTracks.length){videoStream=new webkitMediaStream;for(var j=0;j<videoTracks.length;j++){videoStream.addTrack(videoTracks[j])}}}if(streams&&streams.desktopStream)desktopStream=streams.desktopStream}else if(RTCBrowserType.isFirefox()||RTCBrowserType.isTemasysPluginUsed()){if(streams&&streams.audio)audioStream=streams.audio;if(streams&&streams.video)videoStream=streams.video;if(streams&&streams.desktop)desktopStream=streams.desktop}if(desktopStream)res.push({stream:desktopStream,type:"video",videoType:"desktop"});if(audioStream)res.push({stream:audioStream,type:"audio",videoType:null});if(videoStream)res.push({stream:videoStream,type:"video",videoType:"camera",resolution:resolution});return res}var RTCUtils={init:function(options){return new Promise(function(resolve,reject){if(RTCBrowserType.isFirefox()){var FFversion=RTCBrowserType.getFirefoxVersion();if(FFversion<40){logger.error("Firefox version too old: "+FFversion+". Required >= 40.");reject(new Error("Firefox version too old: "+FFversion+". Required >= 40."));return}this.peerconnection=mozRTCPeerConnection;this.getUserMedia=wrapGetUserMedia(navigator.mozGetUserMedia.bind(navigator));this.enumerateDevices=wrapEnumerateDevices(navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices));this.pc_constraints={};this.attachMediaStream=function(element,stream){if(!element[0])return;element[0].mozSrcObject=stream;element[0].play()};this.getStreamID=function(stream){var id=stream.id;if(!id){var tracks=stream.getVideoTracks();if(!tracks||tracks.length===0){tracks=stream.getAudioTracks()}id=tracks[0].id}return SDPUtil.filter_special_chars(id)};this.getVideoSrc=function(element){if(!element)return null;return element.mozSrcObject};this.setVideoSrc=function(element,src){if(element)element.mozSrcObject=src};RTCSessionDescription=mozRTCSessionDescription;RTCIceCandidate=mozRTCIceCandidate}else if(RTCBrowserType.isChrome()||RTCBrowserType.isOpera()){this.peerconnection=webkitRTCPeerConnection;var getUserMedia=navigator.webkitGetUserMedia.bind(navigator);if(navigator.mediaDevices){this.getUserMedia=wrapGetUserMedia(getUserMedia);this.enumerateDevices=wrapEnumerateDevices(navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices))}else{this.getUserMedia=getUserMedia;this.enumerateDevices=enumerateDevicesThroughMediaStreamTrack}this.attachMediaStream=function(element,stream){if(!stream.jitsiObjectURL){stream.jitsiObjectURL=webkitURL.createObjectURL(stream)}element.attr("src",stream.jitsiObjectURL)};this.getStreamID=function(stream){return SDPUtil.filter_special_chars(stream.id)};this.getVideoSrc=function(element){if(!element)return null;return element.getAttribute("src")};this.setVideoSrc=function(element,src){if(element)element.setAttribute("src",src)};this.pc_constraints={optional:[{DtlsSrtpKeyAgreement:"true"}]};if(options.useIPv6){this.pc_constraints.optional.push({googIPv6:true})}if(RTCBrowserType.isAndroid()){this.pc_constraints={}}if(!webkitMediaStream.prototype.getVideoTracks){webkitMediaStream.prototype.getVideoTracks=function(){return this.videoTracks}}if(!webkitMediaStream.prototype.getAudioTracks){webkitMediaStream.prototype.getAudioTracks=function(){return this.audioTracks}}}else if(RTCBrowserType.isTemasysPluginUsed()){var self=this;AdapterJS.webRTCReady(function(isPlugin){self.peerconnection=RTCPeerConnection;self.getUserMedia=window.getUserMedia;self.enumerateDevices=enumerateDevicesThroughMediaStreamTrack;
- self.attachMediaStream=function(elSel,stream){if(stream.id==="dummyAudio"||stream.id==="dummyVideo"){return}attachMediaStream(elSel[0],stream)};self.getStreamID=function(stream){var id=SDPUtil.filter_special_chars(stream.label);return id};self.getVideoSrc=function(element){if(!element){logger.warn("Attempt to get video SRC of null element");return null}var children=element.children;for(var i=0;i!==children.length;++i){if(children[i].name==="streamId"){return children[i].value}}return null};self.setVideoSrc=function(element,src){if(!src){logger.warn("Not attaching video stream, 'src' is null");return}AdapterJS.WebRTCPlugin.WaitForPluginReady();var stream=AdapterJS.WebRTCPlugin.plugin.getStreamWithId(AdapterJS.WebRTCPlugin.pageId,src);attachMediaStream(element,stream)};onReady(options,self.getUserMediaWithConstraints);resolve()})}else{try{logger.error("Browser does not appear to be WebRTC-capable")}catch(e){}reject("Browser does not appear to be WebRTC-capable");return}if(!RTCBrowserType.isTemasysPluginUsed()){onReady(options,this.getUserMediaWithConstraints);resolve()}}.bind(this))},getUserMediaWithConstraints:function(um,success_callback,failure_callback,options){options=options||{};var resolution=options.resolution;var constraints=getConstraints(um,options);logger.info("Get media constraints",constraints);try{this.getUserMedia(constraints,function(stream){logger.log("onUserMediaSuccess");setAvailableDevices(um,true);success_callback(stream)},function(error){setAvailableDevices(um,false);logger.warn("Failed to get access to local media. Error ",error,constraints);if(failure_callback){failure_callback(error,resolution)}})}catch(e){logger.error("GUM failed: ",e);if(failure_callback){failure_callback(e)}}},obtainAudioAndVideoPermissions:function(options){var self=this;options=options||{};return new Promise(function(resolve,reject){var successCallback=function(stream){resolve(handleLocalStream(stream,options.resolution))};options.devices=options.devices||["audio","video"];if(!screenObtainer.isSupported()&&options.devices.indexOf("desktop")!==-1){reject(new Error("Desktop sharing is not supported!"))}if(RTCBrowserType.isFirefox()||RTCBrowserType.isTemasysPluginUsed()){var GUM=function(device,s,e){this.getUserMediaWithConstraints(device,s,e,options)};var deviceGUM={audio:GUM.bind(self,["audio"]),video:GUM.bind(self,["video"])};if(screenObtainer.isSupported()){deviceGUM["desktop"]=screenObtainer.obtainStream.bind(screenObtainer)}obtainDevices({devices:options.devices,streams:[],successCallback:successCallback,errorCallback:reject,deviceGUM:deviceGUM})}else{var hasDesktop=options.devices.indexOf("desktop")>-1;if(hasDesktop){options.devices.splice(options.devices.indexOf("desktop"),1)}options.resolution=options.resolution||"360";if(options.devices.length){this.getUserMediaWithConstraints(options.devices,function(stream){if(options.devices.indexOf("audio")!==-1&&!stream.getAudioTracks().length||options.devices.indexOf("video")!==-1&&!stream.getVideoTracks().length){self.stopMediaStream(stream);reject(JitsiTrackErrors.parseError(new Error("Unable to get the audio and "+"video tracks."),options.devices));return}if(hasDesktop){screenObtainer.obtainStream(function(desktopStream){successCallback({audioVideo:stream,desktopStream:desktopStream})},function(error){self.stopMediaStream(stream);reject(JitsiTrackErrors.parseError(error,options.devices))})}else{successCallback({audioVideo:stream})}},function(error){reject(JitsiTrackErrors.parseError(error,options.devices))},options)}else if(hasDesktop){screenObtainer.obtainStream(function(stream){successCallback({desktopStream:stream})},function(error){reject(JitsiTrackErrors.parseError(error,["desktop"]))})}}}.bind(this))},addListener:function(eventType,listener){eventEmitter.on(eventType,listener)},removeListener:function(eventType,listener){eventEmitter.removeListener(eventType,listener)},getDeviceAvailability:function(){return devices},isRTCReady:function(){return rtcReady},isDeviceListAvailable:function(){var isEnumerateDevicesAvailable=navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices;if(isEnumerateDevicesAvailable){return true}return MediaStreamTrack&&MediaStreamTrack.getSources?true:false},isDeviceChangeAvailable:function(){if(RTCBrowserType.isChrome()||RTCBrowserType.isOpera()||RTCBrowserType.isTemasysPluginUsed())return true;return false},stopMediaStream:function(mediaStream){mediaStream.getTracks().forEach(function(track){if(!RTCBrowserType.isTemasysPluginUsed()&&track.stop){track.stop()}});if(mediaStream.stop){mediaStream.stop()}if(mediaStream.jitsiObjectURL){webkitURL.revokeObjectURL(mediaStream.jitsiObjectURL)}},isDesktopSharingEnabled:function(){return screenObtainer.isSupported()}};module.exports=RTCUtils}).call(this,"/modules/RTC/RTCUtils.js")},{"../../JitsiTrackErrors":9,"../../service/RTC/RTCEvents":136,"../../service/RTC/Resolutions":137,"../xmpp/SDPUtil":33,"./RTCBrowserType":17,"./ScreenObtainer":19,"./adapter.screenshare":20,events:45,"jitsi-meet-logger":49}],19:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("./RTCBrowserType");var AdapterJS=require("./adapter.screenshare");var DesktopSharingEventTypes=require("../../service/desktopsharing/DesktopSharingEventTypes");var JitsiTrackErrors=require("../../JitsiTrackErrors");var chromeExtInstalled=false;var chromeExtUpdateRequired=false;var firefoxExtInstalled=null;var reDetectFirefoxExtension=false;var GUM=null;var ScreenObtainer={obtainStream:null,init:function(options,gum){var obtainDesktopStream=null;this.options=options=options||{};GUM=gum;if(RTCBrowserType.isFirefox())initFirefoxExtensionDetection(options);var chromeMethod=options.desktopSharingChromeMethod||options.desktopSharing;if(RTCBrowserType.isTemasysPluginUsed()){if(!AdapterJS.WebRTCPlugin.plugin.HasScreensharingFeature){logger.info("Screensharing not supported by this plugin "+"version")}else if(!AdapterJS.WebRTCPlugin.plugin.isScreensharingAvailable){logger.info("Screensharing not available with Temasys plugin on"+" this site")}else{obtainDesktopStream=obtainWebRTCScreen;logger.info("Using Temasys plugin for desktop sharing")}}else if(RTCBrowserType.isChrome()){if(chromeMethod=="ext"){if(RTCBrowserType.getChromeVersion()>=34){obtainDesktopStream=this.obtainScreenFromExtension;logger.info("Using Chrome extension for desktop sharing");initChromeExtension(options)}else{logger.info("Chrome extension not supported until ver 34")}}else if(chromeMethod=="webrtc"){obtainDesktopStream=obtainWebRTCScreen;logger.info("Using Chrome WebRTC for desktop sharing")}}else if(RTCBrowserType.isFirefox()){if(options.desktopSharingFirefoxDisabled){obtainDesktopStream=null}else if(window.location.protocol==="http:"){logger.log("Screen sharing is not supported over HTTP. "+"Use of HTTPS is required.");obtainDesktopStream=null}else{obtainDesktopStream=this.obtainScreenOnFirefox}}if(!obtainDesktopStream){logger.info("Desktop sharing disabled")}this.obtainStream=obtainDesktopStream},isSupported:function(){return!!this.obtainStream},obtainScreenOnFirefox:function(callback,errorCallback){var self=this;var extensionRequired=false;if(this.options.desktopSharingFirefoxMaxVersionExtRequired===-1||this.options.desktopSharingFirefoxMaxVersionExtRequired>=0&&RTCBrowserType.getFirefoxVersion()<=this.options.desktopSharingFirefoxMaxVersionExtRequired){extensionRequired=true;logger.log("Jidesha extension required on firefox version "+RTCBrowserType.getFirefoxVersion())}if(!extensionRequired||firefoxExtInstalled===true){obtainWebRTCScreen(callback,errorCallback);return}if(reDetectFirefoxExtension){reDetectFirefoxExtension=false;initFirefoxExtensionDetection(this.options)}if(firefoxExtInstalled===null){window.setTimeout(function(){if(firefoxExtInstalled===null)firefoxExtInstalled=false;self.obtainScreenOnFirefox(callback,errorCallback)},300);logger.log("Waiting for detection of jidesha on firefox to "+"finish.");return}firefoxExtInstalled=null;reDetectFirefoxExtension=true;errorCallback({type:"jitsiError",errorObject:JitsiTrackErrors.FIREFOX_EXTENSION_NEEDED})},obtainScreenFromExtension:function(streamCallback,failCallback){var self=this;if(chromeExtInstalled){doGetStreamFromExtension(this.options,streamCallback,failCallback)}else{if(chromeExtUpdateRequired){alert("Jitsi Desktop Streamer requires update. "+"Changes will take effect after next Chrome restart.")}chrome.webstore.install(getWebStoreInstallUrl(this.options),function(arg){logger.log("Extension installed successfully",arg);chromeExtInstalled=true;window.setTimeout(function(){doGetStreamFromExtension(self.options,streamCallback,failCallback)},500)},function(arg){logger.log("Failed to install the extension",arg);failCallback(arg)})}}};function obtainWebRTCScreen(streamCallback,failCallback){GUM(["screen"],streamCallback,failCallback)}function getWebStoreInstallUrl(options){return"https://chrome.google.com/webstore/detail/"+(options.desktopSharingChromeExtId||options.chromeExtensionId)}function isUpdateRequired(minVersion,extVersion){try{var s1=minVersion.split(".");var s2=extVersion.split(".");var len=Math.max(s1.length,s2.length);for(var i=0;i<len;i++){var n1=0,n2=0;if(i<s1.length)n1=parseInt(s1[i]);if(i<s2.length)n2=parseInt(s2[i]);if(isNaN(n1)||isNaN(n2)){return true}else if(n1!==n2){return n1>n2}}return false}catch(e){logger.error("Failed to parse extension version",e);return true}}function checkChromeExtInstalled(callback,options){if(!chrome||!chrome.runtime){callback(false,false);return}chrome.runtime.sendMessage(options.desktopSharingChromeExtId||options.chromeExtensionId,{getVersion:true},function(response){if(!response||!response.version){logger.warn("Extension not installed?: ",chrome.runtime.lastError);callback(false,false);return}var extVersion=response.version;logger.log("Extension version is: "+extVersion);var updateRequired=isUpdateRequired(options.desktopSharingChromeMinExtVersion||options.minChromeExtVersion,extVersion);callback(!updateRequired,updateRequired)})}function doGetStreamFromExtension(options,streamCallback,failCallback){chrome.runtime.sendMessage(options.desktopSharingChromeExtId||options.chromeExtensionId,{getStream:true,sources:options.desktopSharingChromeSources||options.desktopSharingSources},function(response){if(!response){failCallback(chrome.runtime.lastError);return}logger.log("Response from extension: "+response);if(response.streamId){GUM(["desktop"],function(stream){streamCallback(stream)},failCallback,{desktopStream:response.streamId})}else{failCallback("Extension failed to get the stream")}})}function initInlineInstalls(options){$("link[rel=chrome-webstore-item]").attr("href",getWebStoreInstallUrl(options))}function initChromeExtension(options){initInlineInstalls(options);checkChromeExtInstalled(function(installed,updateRequired){chromeExtInstalled=installed;chromeExtUpdateRequired=updateRequired;logger.info("Chrome extension installed: "+chromeExtInstalled+" updateRequired: "+chromeExtUpdateRequired)},options)}function initFirefoxExtensionDetection(options){if(options.desktopSharingFirefoxDisabled){return}if(firefoxExtInstalled===false||firefoxExtInstalled===true)return;if(!options.desktopSharingFirefoxExtId){firefoxExtInstalled=false;return}var img=document.createElement("img");img.onload=function(){logger.log("Detected firefox screen sharing extension.");firefoxExtInstalled=true};img.onerror=function(){logger.log("Detected lack of firefox screen sharing extension.");firefoxExtInstalled=false};var src="chrome://"+options.desktopSharingFirefoxExtId.replace("@",".")+"/content/"+document.location.hostname+".png";img.setAttribute("src",src)}module.exports=ScreenObtainer}).call(this,"/modules/RTC/ScreenObtainer.js")},{"../../JitsiTrackErrors":9,"../../service/desktopsharing/DesktopSharingEventTypes":139,"./RTCBrowserType":17,"./adapter.screenshare":20,"jitsi-meet-logger":49}],20:[function(require,module,exports){(function(__filename){var console=require("jitsi-meet-logger").getLogger(__filename);var AdapterJS=AdapterJS||{};if(typeof exports!=="undefined"){module.exports=AdapterJS}AdapterJS.options=AdapterJS.options||{};AdapterJS.VERSION="0.12.3";AdapterJS.onwebrtcready=AdapterJS.onwebrtcready||function(isUsingPlugin){};AdapterJS.webRTCReady=function(callback){if(typeof callback!=="function"){throw new Error("Callback provided is not a function")}if(true===AdapterJS.onwebrtcreadyDone){callback(null!==AdapterJS.WebRTCPlugin.plugin)}else{AdapterJS.onwebrtcready=callback}};AdapterJS.WebRTCPlugin=AdapterJS.WebRTCPlugin||{};AdapterJS.WebRTCPlugin.pluginInfo={prefix:"Tem",plugName:"TemWebRTCPlugin",pluginId:"plugin0",type:"application/x-temwebrtcplugin",onload:"__TemWebRTCReady0",portalLink:"http://skylink.io/plugin/",downloadLink:null,companyName:"Temasys"};if(!!navigator.platform.match(/^Mac/i)){AdapterJS.WebRTCPlugin.pluginInfo.downloadLink="http://bit.ly/1n77hco"}else if(!!navigator.platform.match(/^Win/i)){AdapterJS.WebRTCPlugin.pluginInfo.downloadLink="http://bit.ly/1kkS4FN"}AdapterJS.WebRTCPlugin.TAGS={NONE:"none",AUDIO:"audio",VIDEO:"video"};AdapterJS.WebRTCPlugin.pageId=Math.random().toString(36).slice(2);AdapterJS.WebRTCPlugin.plugin=null;AdapterJS.WebRTCPlugin.setLogLevel=null;AdapterJS.WebRTCPlugin.defineWebRTCInterface=null;AdapterJS.WebRTCPlugin.isPluginInstalled=null;AdapterJS.WebRTCPlugin.pluginInjectionInterval=null;AdapterJS.WebRTCPlugin.injectPlugin=null;AdapterJS.WebRTCPlugin.PLUGIN_STATES={NONE:0,INITIALIZING:1,INJECTING:2,INJECTED:3,READY:4};AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.NONE;AdapterJS.onwebrtcreadyDone=false;AdapterJS.WebRTCPlugin.PLUGIN_LOG_LEVELS={NONE:"NONE",ERROR:"ERROR",WARNING:"WARNING",INFO:"INFO",VERBOSE:"VERBOSE",SENSITIVE:"SENSITIVE"};AdapterJS.WebRTCPlugin.WaitForPluginReady=null;AdapterJS.WebRTCPlugin.callWhenPluginReady=null;__TemWebRTCReady0=function(){if(document.readyState==="complete"){AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY;AdapterJS.maybeThroughWebRTCReady()}else{AdapterJS.WebRTCPlugin.documentReadyInterval=setInterval(function(){if(document.readyState==="complete"){clearInterval(AdapterJS.WebRTCPlugin.documentReadyInterval);AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY;AdapterJS.maybeThroughWebRTCReady()}},100)}};AdapterJS.maybeThroughWebRTCReady=function(){if(!AdapterJS.onwebrtcreadyDone){AdapterJS.onwebrtcreadyDone=true;if(typeof AdapterJS.onwebrtcready==="function"){AdapterJS.onwebrtcready(AdapterJS.WebRTCPlugin.plugin!==null)}}};AdapterJS.TEXT={PLUGIN:{REQUIRE_INSTALLATION:"This website requires you to install a WebRTC-enabling plugin "+"to work on this browser.",NOT_SUPPORTED:"Your browser does not support WebRTC.",BUTTON:"Install Now"},REFRESH:{REQUIRE_REFRESH:"Please refresh page",BUTTON:"Refresh Page"}};AdapterJS._iceConnectionStates={starting:"starting",checking:"checking",connected:"connected",completed:"connected",done:"completed",disconnected:"disconnected",failed:"failed",closed:"closed"};AdapterJS._iceConnectionFiredStates=[];AdapterJS.isDefined=null;AdapterJS.parseWebrtcDetectedBrowser=function(){var hasMatch,checkMatch=navigator.userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(checkMatch[1])){hasMatch=/\brv[ :]+(\d+)/g.exec(navigator.userAgent)||[];webrtcDetectedBrowser="IE";webrtcDetectedVersion=parseInt(hasMatch[1]||"0",10)}else if(checkMatch[1]==="Chrome"){hasMatch=navigator.userAgent.match(/\bOPR\/(\d+)/);if(hasMatch!==null){webrtcDetectedBrowser="opera";webrtcDetectedVersion=parseInt(hasMatch[1],10)}}if(navigator.userAgent.indexOf("Safari")){if(typeof InstallTrigger!=="undefined"){webrtcDetectedBrowser="firefox"}else if(false||!!document.documentMode){webrtcDetectedBrowser="IE"}else if(Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0){webrtcDetectedBrowser="safari"}else if(!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0){webrtcDetectedBrowser="opera"}else if(!!window.chrome){webrtcDetectedBrowser="chrome"}}if(!webrtcDetectedBrowser){webrtcDetectedVersion=checkMatch[1]}if(!webrtcDetectedVersion){try{checkMatch=checkMatch[2]?[checkMatch[1],checkMatch[2]]:[navigator.appName,navigator.appVersion,"-?"];if((hasMatch=navigator.userAgent.match(/version\/(\d+)/i))!==null){checkMatch.splice(1,1,hasMatch[1])}webrtcDetectedVersion=parseInt(checkMatch[1],10)}catch(error){}}};AdapterJS.maybeFixConfiguration=function(pcConfig){if(pcConfig===null){return}for(var i=0;i<pcConfig.iceServers.length;i++){if(pcConfig.iceServers[i].hasOwnProperty("urls")){pcConfig.iceServers[i].url=pcConfig.iceServers[i].urls;delete pcConfig.iceServers[i].urls}}};AdapterJS.addEvent=function(elem,evnt,func){if(elem.addEventListener){elem.addEventListener(evnt,func,false)}else if(elem.attachEvent){elem.attachEvent("on"+evnt,func)}else{elem[evnt]=func}};AdapterJS.renderNotificationBar=function(text,buttonText,buttonLink,openNewTab,displayRefreshBar){if(document.readyState!=="complete"){return}var w=window;var i=document.createElement("iframe");i.style.position="fixed";i.style.top="-41px";i.style.left=0;i.style.right=0;i.style.width="100%";i.style.height="40px";i.style.backgroundColor="#ffffe1";i.style.border="none";i.style.borderBottom="1px solid #888888";i.style.zIndex="9999999";if(typeof i.style.webkitTransition==="string"){i.style.webkitTransition="all .5s ease-out"}else if(typeof i.style.transition==="string"){i.style.transition="all .5s ease-out"}document.body.appendChild(i);c=i.contentWindow?i.contentWindow:i.contentDocument.document?i.contentDocument.document:i.contentDocument;c.document.open();c.document.write('<span style="display: inline-block; font-family: Helvetica, Arial,'+"sans-serif; font-size: .9rem; padding: 4px; vertical-align: "+'middle; cursor: default;">'+text+"</span>");if(buttonText&&buttonLink){c.document.write('<button id="okay">'+buttonText+'</button><button id="cancel">Cancel</button>');c.document.close();AdapterJS.addEvent(c.document.getElementById("okay"),"click",function(e){if(!!displayRefreshBar){AdapterJS.renderNotificationBar(AdapterJS.TEXT.EXTENSION?AdapterJS.TEXT.EXTENSION.REQUIRE_REFRESH:AdapterJS.TEXT.REFRESH.REQUIRE_REFRESH,AdapterJS.TEXT.REFRESH.BUTTON,"javascript:location.reload()")}window.open(buttonLink,!!openNewTab?"_blank":"_top");e.preventDefault();try{event.cancelBubble=true}catch(error){}var pluginInstallInterval=setInterval(function(){if(!isIE){navigator.plugins.refresh(false)}AdapterJS.WebRTCPlugin.isPluginInstalled(AdapterJS.WebRTCPlugin.pluginInfo.prefix,AdapterJS.WebRTCPlugin.pluginInfo.plugName,function(){clearInterval(pluginInstallInterval);AdapterJS.WebRTCPlugin.defineWebRTCInterface()},function(){})},500)});AdapterJS.addEvent(c.document.getElementById("cancel"),"click",function(e){w.document.body.removeChild(i)})}else{c.document.close()}setTimeout(function(){if(typeof i.style.webkitTransform==="string"){i.style.webkitTransform="translateY(40px)"}else if(typeof i.style.transform==="string"){i.style.transform="translateY(40px)"}else{i.style.top="0px"}},300)};webrtcDetectedType=null;webrtcDetectedDCSupport=null;checkMediaDataChannelSettings=function(peerBrowserAgent,peerBrowserVersion,callback,constraints){if(typeof callback!=="function"){return}var beOfferer=true;var isLocalFirefox=webrtcDetectedBrowser==="firefox";var isLocalFirefoxInterop=webrtcDetectedType==="moz"&&webrtcDetectedVersion>30;var isPeerFirefox=peerBrowserAgent==="firefox";var isPeerFirefoxInterop=peerBrowserAgent==="firefox"&&(peerBrowserVersion?peerBrowserVersion>30:false);if(isLocalFirefox&&isPeerFirefox||isLocalFirefoxInterop){try{delete constraints.mandatory.MozDontOfferDataChannel}catch(error){console.error("Failed deleting MozDontOfferDataChannel");console.error(error)}}else if(isLocalFirefox&&!isPeerFirefox){constraints.mandatory.MozDontOfferDataChannel=true}if(!isLocalFirefox){for(var prop in constraints.mandatory){if(constraints.mandatory.hasOwnProperty(prop)){if(prop.indexOf("Moz")!==-1){delete constraints.mandatory[prop]}}}}if(isLocalFirefox&&!isPeerFirefox&&!isLocalFirefoxInterop){beOfferer=false}callback(beOfferer,constraints)};checkIceConnectionState=function(peerId,iceConnectionState,callback){if(typeof callback!=="function"){console.warn("No callback specified in checkIceConnectionState. Aborted.");return}peerId=peerId?peerId:"peer";if(!AdapterJS._iceConnectionFiredStates[peerId]||iceConnectionState===AdapterJS._iceConnectionStates.disconnected||iceConnectionState===AdapterJS._iceConnectionStates.failed||iceConnectionState===AdapterJS._iceConnectionStates.closed){AdapterJS._iceConnectionFiredStates[peerId]=[]}iceConnectionState=AdapterJS._iceConnectionStates[iceConnectionState];if(AdapterJS._iceConnectionFiredStates[peerId].indexOf(iceConnectionState)<0){AdapterJS._iceConnectionFiredStates[peerId].push(iceConnectionState);if(iceConnectionState===AdapterJS._iceConnectionStates.connected){setTimeout(function(){AdapterJS._iceConnectionFiredStates[peerId].push(AdapterJS._iceConnectionStates.done);callback(AdapterJS._iceConnectionStates.done)},1e3)}callback(iceConnectionState)}return};createIceServer=null;createIceServers=null;RTCPeerConnection=null;RTCSessionDescription=typeof RTCSessionDescription==="function"?RTCSessionDescription:null;RTCIceCandidate=typeof RTCIceCandidate==="function"?RTCIceCandidate:null;getUserMedia=null;attachMediaStream=null;reattachMediaStream=null;webrtcDetectedBrowser=null;webrtcDetectedVersion=null;if(navigator.mozGetUserMedia){webrtcDetectedBrowser="firefox";webrtcDetectedVersion=parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1],10);webrtcDetectedType="moz";webrtcDetectedDCSupport="SCTP";RTCPeerConnection=function(pcConfig,pcConstraints){AdapterJS.maybeFixConfiguration(pcConfig);return new mozRTCPeerConnection(pcConfig,pcConstraints)};RTCSessionDescription=mozRTCSessionDescription;window.RTCSessionDescription=RTCSessionDescription;RTCIceCandidate=mozRTCIceCandidate;window.RTCIceCandidate=RTCIceCandidate;window.getUserMedia=navigator.mozGetUserMedia.bind(navigator);navigator.getUserMedia=window.getUserMedia;MediaStreamTrack.getSources=function(successCb){setTimeout(function(){var infos=[{kind:"audio",id:"default",label:"",facing:""},{kind:"video",id:"default",label:"",facing:""}];successCb(infos)},0)};createIceServer=function(url,username,password){var iceServer=null;var url_parts=url.split(":");if(url_parts[0].indexOf("stun")===0){iceServer={url:url}}else if(url_parts[0].indexOf("turn")===0){if(webrtcDetectedVersion<27){var turn_url_parts=url.split("?");if(turn_url_parts.length===1||turn_url_parts[1].indexOf("transport=udp")===0){iceServer={url:turn_url_parts[0],credential:password,username:username}}}else{iceServer={url:url,credential:password,username:username}}}return iceServer};createIceServers=function(urls,username,password){var iceServers=[];for(var i=0;i<urls.length;i++){var iceServer=createIceServer(urls[i],username,password);if(iceServer!==null){iceServers.push(iceServer)}}return iceServers};attachMediaStream=function(element,stream){element.mozSrcObject=stream;if(stream!==null)element.play();return element};reattachMediaStream=function(to,from){to.mozSrcObject=from.mozSrcObject;to.play();return to};MediaStreamTrack.getSources=MediaStreamTrack.getSources||function(callback){if(!callback){throw new TypeError("Failed to execute 'getSources' on 'MediaStreamTrack'"+": 1 argument required, but only 0 present.")}return callback([])};if(!MediaStream.prototype.getVideoTracks){MediaStream.prototype.getVideoTracks=function(){return[]}}if(!MediaStream.prototype.getAudioTracks){MediaStream.prototype.getAudioTracks=function(){return[]}}AdapterJS.maybeThroughWebRTCReady()}else if(navigator.webkitGetUserMedia){webrtcDetectedBrowser="chrome";webrtcDetectedType="webkit";webrtcDetectedVersion=parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2],10);var checkIfOpera=navigator.userAgent.match(/\bOPR\/(\d+)/);if(checkIfOpera!==null){webrtcDetectedBrowser="opera";webrtcDetectedVersion=parseInt(checkIfOpera[1],10)}if(webrtcDetectedBrowser==="chrome"&&webrtcDetectedVersion>=31||webrtcDetectedBrowser==="opera"&&webrtcDetectedVersion>=20){webrtcDetectedDCSupport="SCTP"}else if(webrtcDetectedBrowser==="chrome"&&webrtcDetectedVersion<30&&webrtcDetectedVersion>24){webrtcDetectedDCSupport="RTP"}else{webrtcDetectedDCSupport=""}createIceServer=function(url,username,password){var iceServer=null;var url_parts=url.split(":");if(url_parts[0].indexOf("stun")===0){iceServer={url:url}}else if(url_parts[0].indexOf("turn")===0){iceServer={url:url,credential:password,username:username}}return iceServer};createIceServers=function(urls,username,password){var iceServers=[];if(webrtcDetectedVersion>=34){iceServers={urls:urls,credential:password,username:username}}else{for(var i=0;i<urls.length;i++){var iceServer=createIceServer(urls[i],username,password);if(iceServer!==null){iceServers.push(iceServer)}}}return iceServers};RTCPeerConnection=function(pcConfig,pcConstraints){if(webrtcDetectedVersion<34){AdapterJS.maybeFixConfiguration(pcConfig)}return new webkitRTCPeerConnection(pcConfig,pcConstraints)};window.getUserMedia=navigator.webkitGetUserMedia.bind(navigator);navigator.getUserMedia=window.getUserMedia;attachMediaStream=function(element,stream){if(typeof element.srcObject!=="undefined"){element.srcObject=stream}else if(typeof element.mozSrcObject!=="undefined"){element.mozSrcObject=stream}else if(typeof element.src!=="undefined"){element.src=stream===null?"":URL.createObjectURL(stream)}else{console.log("Error attaching stream to element.")}return element};reattachMediaStream=function(to,from){to.src=from.src;return to};AdapterJS.maybeThroughWebRTCReady()}else if(navigator.mediaDevices&&navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)){webrtcDetectedBrowser="edge";webrtcDetectedVersion=parseInt(navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)[2],10);webrtcMinimumVersion=12;window.getUserMedia=navigator.getUserMedia.bind(navigator);attachMediaStream=function(element,stream){element.srcObject=stream;return element};reattachMediaStream=function(to,from){to.srcObject=from.srcObject;return to};AdapterJS.maybeThroughWebRTCReady()}else{if(typeof console!=="object"||typeof console.log!=="function"){console={}||console;console.log=function(arg){};console.info=function(arg){};console.error=function(arg){};console.dir=function(arg){};console.exception=function(arg){};console.trace=function(arg){};console.warn=function(arg){};console.count=function(arg){};console.debug=function(arg){};console.count=function(arg){};console.time=function(arg){};console.timeEnd=function(arg){};console.group=function(arg){};console.groupCollapsed=function(arg){};console.groupEnd=function(arg){}}webrtcDetectedType="plugin";webrtcDetectedDCSupport="plugin";AdapterJS.parseWebrtcDetectedBrowser();isIE=webrtcDetectedBrowser==="IE";AdapterJS.WebRTCPlugin.WaitForPluginReady=function(){while(AdapterJS.WebRTCPlugin.pluginState!==AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){}};AdapterJS.WebRTCPlugin.callWhenPluginReady=function(callback){if(AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){callback()}else{var checkPluginReadyState=setInterval(function(){if(AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){clearInterval(checkPluginReadyState);callback()}},100)}};AdapterJS.WebRTCPlugin.setLogLevel=function(logLevel){AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){AdapterJS.WebRTCPlugin.plugin.setLogLevel(logLevel)})};AdapterJS.WebRTCPlugin.injectPlugin=function(){if(document.readyState!=="complete"){return}if(AdapterJS.WebRTCPlugin.pluginState!==AdapterJS.WebRTCPlugin.PLUGIN_STATES.INITIALIZING){return}AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INJECTING;if(webrtcDetectedBrowser==="IE"&&webrtcDetectedVersion<=10){var frag=document.createDocumentFragment();AdapterJS.WebRTCPlugin.plugin=document.createElement("div");AdapterJS.WebRTCPlugin.plugin.innerHTML='<object id="'+AdapterJS.WebRTCPlugin.pluginInfo.pluginId+'" type="'+AdapterJS.WebRTCPlugin.pluginInfo.type+'" '+'width="1" height="1">'+'<param name="pluginId" value="'+AdapterJS.WebRTCPlugin.pluginInfo.pluginId+'" /> '+'<param name="windowless" value="false" /> '+'<param name="pageId" value="'+AdapterJS.WebRTCPlugin.pageId+'" /> '+'<param name="onload" value="'+AdapterJS.WebRTCPlugin.pluginInfo.onload+'" />'+'<param name="tag" value="'+AdapterJS.WebRTCPlugin.TAGS.NONE+'" />'+(AdapterJS.options.getAllCams?'<param name="forceGetAllCams" value="True" />':"")+"</object>";while(AdapterJS.WebRTCPlugin.plugin.firstChild){frag.appendChild(AdapterJS.WebRTCPlugin.plugin.firstChild)}document.body.appendChild(frag);AdapterJS.WebRTCPlugin.plugin=document.getElementById(AdapterJS.WebRTCPlugin.pluginInfo.pluginId)}else{AdapterJS.WebRTCPlugin.plugin=document.createElement("object");AdapterJS.WebRTCPlugin.plugin.id=AdapterJS.WebRTCPlugin.pluginInfo.pluginId;if(isIE){AdapterJS.WebRTCPlugin.plugin.width="1px";AdapterJS.WebRTCPlugin.plugin.height="1px"}else{AdapterJS.WebRTCPlugin.plugin.width="0px";AdapterJS.WebRTCPlugin.plugin.height="0px"}AdapterJS.WebRTCPlugin.plugin.type=AdapterJS.WebRTCPlugin.pluginInfo.type;AdapterJS.WebRTCPlugin.plugin.innerHTML='<param name="onload" value="'+AdapterJS.WebRTCPlugin.pluginInfo.onload+'">'+'<param name="pluginId" value="'+AdapterJS.WebRTCPlugin.pluginInfo.pluginId+'">'+'<param name="windowless" value="false" /> '+(AdapterJS.options.getAllCams?'<param name="forceGetAllCams" value="True" />':"")+'<param name="pageId" value="'+AdapterJS.WebRTCPlugin.pageId+'">'+'<param name="tag" value="'+AdapterJS.WebRTCPlugin.TAGS.NONE+'" />';document.body.appendChild(AdapterJS.WebRTCPlugin.plugin)}AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INJECTED};AdapterJS.WebRTCPlugin.isPluginInstalled=function(comName,plugName,installedCb,notInstalledCb){if(!isIE){var pluginArray=navigator.plugins;for(var i=0;i<pluginArray.length;i++){if(pluginArray[i].name.indexOf(plugName)>=0){installedCb();return}}notInstalledCb()}else{try{var axo=new ActiveXObject(comName+"."+plugName)}catch(e){notInstalledCb();return}installedCb()}};AdapterJS.WebRTCPlugin.defineWebRTCInterface=function(){if(AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){console.error("AdapterJS - WebRTC interface has already been defined");return}AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INITIALIZING;AdapterJS.isDefined=function(variable){return variable!==null&&variable!==undefined};createIceServer=function(url,username,password){var iceServer=null;var url_parts=url.split(":");if(url_parts[0].indexOf("stun")===0){iceServer={url:url,hasCredentials:false}}else if(url_parts[0].indexOf("turn")===0){iceServer={url:url,hasCredentials:true,credential:password,username:username}}return iceServer};createIceServers=function(urls,username,password){var iceServers=[];for(var i=0;i<urls.length;++i){iceServers.push(createIceServer(urls[i],username,password))}return iceServers};RTCSessionDescription=function(info){AdapterJS.WebRTCPlugin.WaitForPluginReady();return AdapterJS.WebRTCPlugin.plugin.ConstructSessionDescription(info.type,info.sdp)};RTCPeerConnection=function(servers,constraints){var iceServers=null;if(servers){iceServers=servers.iceServers;for(var i=0;i<iceServers.length;i++){if(iceServers[i].urls&&!iceServers[i].url){iceServers[i].url=iceServers[i].urls}iceServers[i].hasCredentials=AdapterJS.isDefined(iceServers[i].username)&&AdapterJS.isDefined(iceServers[i].credential)}}var mandatory=constraints&&constraints.mandatory?constraints.mandatory:null;var optional=constraints&&constraints.optional?constraints.optional:null;AdapterJS.WebRTCPlugin.WaitForPluginReady();return AdapterJS.WebRTCPlugin.plugin.PeerConnection(AdapterJS.WebRTCPlugin.pageId,iceServers,mandatory,optional)};MediaStreamTrack={};MediaStreamTrack.getSources=function(callback){AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){
- AdapterJS.WebRTCPlugin.plugin.GetSources(callback)})};window.getUserMedia=function(constraints,successCallback,failureCallback){constraints.audio=constraints.audio||false;constraints.video=constraints.video||false;AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){AdapterJS.WebRTCPlugin.plugin.getUserMedia(constraints,successCallback,failureCallback)})};window.navigator.getUserMedia=window.getUserMedia;attachMediaStream=function(element,stream){if(!element||!element.parentNode){return}var streamId;if(stream===null){streamId=""}else{if(typeof stream.enableSoundTracks!=="undefined"){stream.enableSoundTracks(true)}streamId=stream.id}var elementId=element.id.length===0?Math.random().toString(36).slice(2):element.id;var nodeName=element.nodeName.toLowerCase();if(nodeName!=="object"){var tag;switch(nodeName){case"audio":tag=AdapterJS.WebRTCPlugin.TAGS.AUDIO;break;case"video":tag=AdapterJS.WebRTCPlugin.TAGS.VIDEO;break;default:tag=AdapterJS.WebRTCPlugin.TAGS.NONE}var frag=document.createDocumentFragment();var temp=document.createElement("div");var classHTML="";if(element.className){classHTML='class="'+element.className+'" '}else if(element.attributes&&element.attributes["class"]){classHTML='class="'+element.attributes["class"].value+'" '}temp.innerHTML='<object id="'+elementId+'" '+classHTML+'type="'+AdapterJS.WebRTCPlugin.pluginInfo.type+'">'+'<param name="pluginId" value="'+elementId+'" /> '+'<param name="pageId" value="'+AdapterJS.WebRTCPlugin.pageId+'" /> '+'<param name="windowless" value="true" /> '+'<param name="streamId" value="'+streamId+'" /> '+'<param name="tag" value="'+tag+'" /> '+"</object>";while(temp.firstChild){frag.appendChild(temp.firstChild)}var height="";var width="";if(element.clientWidth||element.clientHeight){width=element.clientWidth;height=element.clientHeight}else if(element.width||element.height){width=element.width;height=element.height}element.parentNode.insertBefore(frag,element);frag=document.getElementById(elementId);frag.width=width;frag.height=height;element.parentNode.removeChild(element)}else{var children=element.children;for(var i=0;i!==children.length;++i){if(children[i].name==="streamId"){children[i].value=streamId;break}}element.setStreamId(streamId)}var newElement=document.getElementById(elementId);AdapterJS.forwardEventHandlers(newElement,element,Object.getPrototypeOf(element));return newElement};reattachMediaStream=function(to,from){var stream=null;var children=from.children;for(var i=0;i!==children.length;++i){if(children[i].name==="streamId"){AdapterJS.WebRTCPlugin.WaitForPluginReady();stream=AdapterJS.WebRTCPlugin.plugin.getStreamWithId(AdapterJS.WebRTCPlugin.pageId,children[i].value);break}}if(stream!==null){return attachMediaStream(to,stream)}else{console.log("Could not find the stream associated with this element")}};AdapterJS.forwardEventHandlers=function(destElem,srcElem,prototype){properties=Object.getOwnPropertyNames(prototype);for(prop in properties){propName=properties[prop];if(typeof propName.slice==="function"){if(propName.slice(0,2)=="on"&&srcElem[propName]!=null){if(isIE){destElem.attachEvent(propName,srcElem[propName])}else{destElem.addEventListener(propName.slice(2),srcElem[propName],false)}}else{}}}var subPrototype=Object.getPrototypeOf(prototype);if(subPrototype!=null){AdapterJS.forwardEventHandlers(destElem,srcElem,subPrototype)}};RTCIceCandidate=function(candidate){if(!candidate.sdpMid){candidate.sdpMid=""}AdapterJS.WebRTCPlugin.WaitForPluginReady();return AdapterJS.WebRTCPlugin.plugin.ConstructIceCandidate(candidate.sdpMid,candidate.sdpMLineIndex,candidate.candidate)};AdapterJS.addEvent(document,"readystatechange",AdapterJS.WebRTCPlugin.injectPlugin);AdapterJS.WebRTCPlugin.injectPlugin()};AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb=AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb||function(){AdapterJS.addEvent(document,"readystatechange",AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv);AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv()};AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv=function(){if(AdapterJS.options.hidePluginInstallPrompt){return}var downloadLink=AdapterJS.WebRTCPlugin.pluginInfo.downloadLink;if(downloadLink){var popupString;if(AdapterJS.WebRTCPlugin.pluginInfo.portalLink){popupString="This website requires you to install the "+' <a href="'+AdapterJS.WebRTCPlugin.pluginInfo.portalLink+'" target="_blank">'+AdapterJS.WebRTCPlugin.pluginInfo.companyName+" WebRTC Plugin</a>"+" to work on this browser."}else{popupString=AdapterJS.TEXT.PLUGIN.REQUIRE_INSTALLATION}AdapterJS.renderNotificationBar(popupString,AdapterJS.TEXT.PLUGIN.BUTTON,downloadLink)}else{AdapterJS.renderNotificationBar(AdapterJS.TEXT.PLUGIN.NOT_SUPPORTED)}};AdapterJS.WebRTCPlugin.isPluginInstalled(AdapterJS.WebRTCPlugin.pluginInfo.prefix,AdapterJS.WebRTCPlugin.pluginInfo.plugName,AdapterJS.WebRTCPlugin.defineWebRTCInterface,AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb)}}).call(this,"/modules/RTC/adapter.screenshare.js")},{"jitsi-meet-logger":49}],21:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var UsernameGenerator=require("../util/UsernameGenerator");function supportsLocalStorage(){try{return"localStorage"in window&&window.localStorage!==null}catch(e){logger.log("localstorage is not supported");return false}}function generateUniqueId(){function _p8(){return(Math.random().toString(16)+"000000000").substr(2,8)}return _p8()+_p8()+_p8()+_p8()}function Settings(conferenceID){this.displayName="";this.userId;this.confSettings=null;this.conferenceID=conferenceID;this.callStatsUserName;if(supportsLocalStorage()){if(!window.localStorage.getItem(conferenceID))this.confSettings={};else this.confSettings=JSON.parse(window.localStorage.getItem(conferenceID));if(!this.confSettings.jitsiMeetId){this.confSettings.jitsiMeetId=generateUniqueId();logger.log("generated id",this.confSettings.jitsiMeetId);this.save()}if(!this.confSettings.callStatsUserName){this.confSettings.callStatsUserName=UsernameGenerator.generateUsername();logger.log("generated callstats uid",this.confSettings.callStatsUserName);this.save()}this.userId=this.confSettings.jitsiMeetId||"";this.displayName=this.confSettings.displayname||"";this.callStatsUserName=this.confSettings.callStatsUserName||""}else{logger.log("local storage is not supported");this.userId=generateUniqueId();this.callStatsUserName=UsernameGenerator.generateUsername()}}Settings.prototype.save=function(){if(!supportsLocalStorage())window.localStorage.setItem(this.conferenceID,JSON.stringify(this.confSettings))};Settings.prototype.setDisplayName=function(newDisplayName){this.displayName=newDisplayName;if(this.confSettings!=null)this.confSettings.displayname=displayName;this.save();return this.displayName};Settings.prototype.getSettings=function(){return{displayName:this.displayName,uid:this.userId}};Settings.prototype.getCallStatsUserName=function(){return this.callStatsUserName};module.exports=Settings}).call(this,"/modules/settings/Settings.js")},{"../util/UsernameGenerator":27,"jitsi-meet-logger":49}],22:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var jsSHA=require("jssha");var io=require("socket.io-client");var wrtcFuncNames={createOffer:"createOffer",createAnswer:"createAnswer",setLocalDescription:"setLocalDescription",setRemoteDescription:"setRemoteDescription",addIceCandidate:"addIceCandidate",getUserMedia:"getUserMedia"};var callStats=null;function initCallback(err,msg){logger.log("CallStats Status: err="+err+" msg="+msg)}function _try_catch(f){return function(){try{f.apply(this,arguments)}catch(e){logger.error(e)}}}var CallStats=_try_catch(function(jingleSession,Settings,options){try{if(!callStats){callStats=new callstats($,io,jsSHA)}else{return}this.session=jingleSession;this.peerconnection=jingleSession.peerconnection.peerconnection;this.userID=Settings.getCallStatsUserName();var location=window.location;this.confID=location.hostname+location.pathname;callStats.initialize(options.callStatsID,options.callStatsSecret,this.userID,initCallback);callStats.addNewFabric(this.peerconnection,Strophe.getResourceFromJid(jingleSession.peerjid),callStats.fabricUsage.multiplex,this.confID,this.pcCallback.bind(this))}catch(e){callStats=null;logger.error(e)}if(CallStats.pendingErrors.length){CallStats.pendingErrors.forEach(function(error){CallStats._reportError.call(this,error.type,error.error,error.pc)},this);CallStats.pendingErrors.length=0}});CallStats.pendingErrors=[];CallStats.prototype.pcCallback=_try_catch(function(err,msg){if(!callStats){return}logger.log("Monitoring status: "+err+" msg: "+msg);callStats.sendFabricEvent(this.peerconnection,callStats.fabricEvent.fabricSetup,this.confID)});CallStats.prototype.sendMuteEvent=_try_catch(function(mute,type){if(!callStats){return}var event=null;if(type==="video"){event=mute?callStats.fabricEvent.videoPause:callStats.fabricEvent.videoResume}else{event=mute?callStats.fabricEvent.audioMute:callStats.fabricEvent.audioUnmute}callStats.sendFabricEvent(this.peerconnection,event,this.confID)});CallStats.prototype.sendTerminateEvent=_try_catch(function(){if(!callStats){return}callStats.sendFabricEvent(this.peerconnection,callStats.fabricEvent.fabricTerminated,this.confID)});CallStats.prototype.sendSetupFailedEvent=_try_catch(function(){if(!callStats){return}callStats.sendFabricEvent(this.peerconnection,callStats.fabricEvent.fabricSetupFailed,this.confID)});CallStats.prototype.sendFeedback=_try_catch(function(overallFeedback,detailedFeedback){if(!callStats){return}var feedbackString='{"userID":"'+this.userID+'"'+', "overall":'+overallFeedback+', "comment": "'+detailedFeedback+'"}';var feedbackJSON=JSON.parse(feedbackString);callStats.sendUserFeedback(this.confID,feedbackJSON)});CallStats._reportError=function(type,e,pc){if(callStats){callStats.reportError(pc,this.confID,type,e)}else{CallStats.pendingErrors.push({type:type,error:e,pc:pc})}};CallStats.sendGetUserMediaFailed=_try_catch(function(e,cs){CallStats._reportError.call(cs,wrtcFuncNames.getUserMedia,e,null)});CallStats.sendCreateOfferFailed=_try_catch(function(e,pc,cs){CallStats._reportError.call(cs,wrtcFuncNames.createOffer,e,pc)});CallStats.sendCreateAnswerFailed=_try_catch(function(e,pc,cs){CallStats._reportError.call(cs,wrtcFuncNames.createAnswer,e,pc)});CallStats.sendSetLocalDescFailed=_try_catch(function(e,pc,cs){CallStats._reportError.call(cs,wrtcFuncNames.setLocalDescription,e,pc)});CallStats.sendSetRemoteDescFailed=_try_catch(function(e,pc,cs){CallStats._reportError.call(cs,wrtcFuncNames.setRemoteDescription,e,pc)});CallStats.sendAddIceCandidateFailed=_try_catch(function(e,pc,cs){CallStats._reportError.call(cs,wrtcFuncNames.addIceCandidate,e,pc)});module.exports=CallStats}).call(this,"/modules/statistics/CallStats.js")},{"jitsi-meet-logger":49,jssha:50,"socket.io-client":85}],23:[function(require,module,exports){var RTCBrowserType=require("../RTC/RTCBrowserType");var WEBAUDIO_ANALYZER_FFT_SIZE=2048;var WEBAUDIO_ANALYZER_SMOOTING_TIME=.8;window.AudioContext=window.AudioContext||window.webkitAudioContext;var context=null;if(window.AudioContext){context=new AudioContext}function timeDomainDataToAudioLevel(samples){var maxVolume=0;var length=samples.length;for(var i=0;i<length;i++){if(maxVolume<samples[i])maxVolume=samples[i]}return parseFloat(((maxVolume-127)/128).toFixed(3))}function animateLevel(newLevel,lastLevel){var value=0;var diff=lastLevel-newLevel;if(diff>.2){value=lastLevel-.2}else if(diff<-.4){value=lastLevel+.4}else{value=newLevel}return parseFloat(value.toFixed(3))}function LocalStatsCollector(stream,interval,callback){this.stream=stream;this.intervalId=null;this.intervalMilis=interval;this.audioLevel=0;this.callback=callback}LocalStatsCollector.prototype.start=function(){if(!context||RTCBrowserType.isTemasysPluginUsed())return;var analyser=context.createAnalyser();analyser.smoothingTimeConstant=WEBAUDIO_ANALYZER_SMOOTING_TIME;analyser.fftSize=WEBAUDIO_ANALYZER_FFT_SIZE;var source=context.createMediaStreamSource(this.stream);source.connect(analyser);var self=this;this.intervalId=setInterval(function(){var array=new Uint8Array(analyser.frequencyBinCount);analyser.getByteTimeDomainData(array);var audioLevel=timeDomainDataToAudioLevel(array);if(audioLevel!=self.audioLevel){self.audioLevel=animateLevel(audioLevel,self.audioLevel);self.callback(self.audioLevel)}},this.intervalMilis)};LocalStatsCollector.prototype.stop=function(){if(this.intervalId){clearInterval(this.intervalId);this.intervalId=null}};module.exports=LocalStatsCollector},{"../RTC/RTCBrowserType":17}],24:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("../RTC/RTCBrowserType");var StatisticsEvents=require("../../service/statistics/Events");var browserSupported=RTCBrowserType.isChrome()||RTCBrowserType.isOpera();var keyMap={};keyMap[RTCBrowserType.RTC_BROWSER_FIREFOX]={ssrc:"ssrc",packetsReceived:"packetsReceived",packetsLost:"packetsLost",packetsSent:"packetsSent",bytesReceived:"bytesReceived",bytesSent:"bytesSent"};keyMap[RTCBrowserType.RTC_BROWSER_CHROME]={receiveBandwidth:"googAvailableReceiveBandwidth",sendBandwidth:"googAvailableSendBandwidth",remoteAddress:"googRemoteAddress",transportType:"googTransportType",localAddress:"googLocalAddress",activeConnection:"googActiveConnection",ssrc:"ssrc",packetsReceived:"packetsReceived",packetsSent:"packetsSent",packetsLost:"packetsLost",bytesReceived:"bytesReceived",bytesSent:"bytesSent",googFrameHeightReceived:"googFrameHeightReceived",googFrameWidthReceived:"googFrameWidthReceived",googFrameHeightSent:"googFrameHeightSent",googFrameWidthSent:"googFrameWidthSent",audioInputLevel:"audioInputLevel",audioOutputLevel:"audioOutputLevel"};keyMap[RTCBrowserType.RTC_BROWSER_OPERA]=keyMap[RTCBrowserType.RTC_BROWSER_CHROME];function calculatePacketLoss(lostPackets,totalPackets){if(!totalPackets||totalPackets<=0||!lostPackets||lostPackets<=0)return 0;return Math.round(lostPackets/totalPackets*100)}function getStatValue(item,name){var browserType=RTCBrowserType.getBrowserType();if(!keyMap[browserType][name])throw"The property isn't supported!";var key=keyMap[browserType][name];return RTCBrowserType.isChrome()||RTCBrowserType.isOpera()?item.stat(key):item[key]}function formatAudioLevel(audioLevel){return Math.min(Math.max(audioLevel,0),1)}function acceptStat(reportId,reportType,statName){if(reportType=="googCandidatePair"&&statName=="googChannelId")return false;if(reportType=="ssrc"){if(statName=="googTrackId"||statName=="transportId"||statName=="ssrc")return false}return true}function acceptReport(id,type){if(id.substring(0,15)=="googCertificate"||id.substring(0,9)=="googTrack"||id.substring(0,20)=="googLibjingleSession")return false;if(type=="googComponent")return false;return true}function PeerStats(){this.ssrc2Loss={};this.ssrc2AudioLevel={};this.ssrc2bitrate={};this.ssrc2resolution={}}PeerStats.prototype.setSsrcLoss=function(lossRate){this.ssrc2Loss=lossRate};PeerStats.prototype.setSsrcResolution=function(resolution){if(resolution===null&&this.ssrc2resolution[ssrc]){delete this.ssrc2resolution[ssrc]}else if(resolution!==null)this.ssrc2resolution[ssrc]=resolution};PeerStats.prototype.setSsrcBitrate=function(ssrc,bitrate){if(this.ssrc2bitrate[ssrc]){this.ssrc2bitrate[ssrc].download+=bitrate.download;this.ssrc2bitrate[ssrc].upload+=bitrate.upload}else{this.ssrc2bitrate[ssrc]=bitrate}};PeerStats.prototype.setSsrcAudioLevel=function(ssrc,audioLevel){this.ssrc2AudioLevel[ssrc]=formatAudioLevel(audioLevel)};function ConferenceStats(){this.bandwidth={};this.bitrate={};this.packetLoss=null;this.transport=[]}function StatsCollector(peerconnection,audioLevelsInterval,statsInterval,eventEmitter,config){this.peerconnection=peerconnection;this.baselineAudioLevelsReport=null;this.currentAudioLevelsReport=null;this.currentStatsReport=null;this.baselineStatsReport=null;this.audioLevelsIntervalId=null;this.eventEmitter=eventEmitter;this.config=config||{};this.conferenceStats=new ConferenceStats;this.GATHER_INTERVAL=15e3;this.LOG_INTERVAL=6e4;this.gatherStatsIntervalId=null;this.logStatsIntervalId=null;this.statsToBeLogged={timestamps:[],stats:{}};this.audioLevelsIntervalMilis=audioLevelsInterval;this.statsIntervalId=null;this.statsIntervalMilis=statsInterval;this.ssrc2stats={}}module.exports=StatsCollector;StatsCollector.prototype.stop=function(){if(this.audioLevelsIntervalId){clearInterval(this.audioLevelsIntervalId);this.audioLevelsIntervalId=null}if(this.statsIntervalId){clearInterval(this.statsIntervalId);this.statsIntervalId=null}if(this.logStatsIntervalId){clearInterval(this.logStatsIntervalId);this.logStatsIntervalId=null}if(this.gatherStatsIntervalId){clearInterval(this.gatherStatsIntervalId);this.gatherStatsIntervalId=null}};StatsCollector.prototype.errorCallback=function(error){logger.error("Get stats error",error);this.stop()};StatsCollector.prototype.start=function(){var self=this;this.audioLevelsIntervalId=setInterval(function(){self.peerconnection.getStats(function(report){var results=null;if(!report||!report.result||typeof report.result!="function"){results=report}else{results=report.result()}self.currentAudioLevelsReport=results;self.processAudioLevelReport();self.baselineAudioLevelsReport=self.currentAudioLevelsReport},self.errorCallback)},self.audioLevelsIntervalMilis)};StatsCollector.prototype.addStatsToBeLogged=function(reports){var self=this;var num_records=this.statsToBeLogged.timestamps.length;this.statsToBeLogged.timestamps.push((new Date).getTime());reports.map(function(report){if(!acceptReport(report.id,report.type))return;var stat=self.statsToBeLogged.stats[report.id];if(!stat){stat=self.statsToBeLogged.stats[report.id]={}}stat.type=report.type;report.names().map(function(name){if(!acceptStat(report.id,report.type,name))return;var values=stat[name];if(!values){values=stat[name]=[]}while(values.length<num_records){values.push(null)}values.push(report.stat(name))})})};StatsCollector.prototype.processStatsReport=function(){if(!this.baselineStatsReport){return}for(var idx in this.currentStatsReport){var now=this.currentStatsReport[idx];try{if(getStatValue(now,"receiveBandwidth")||getStatValue(now,"sendBandwidth")){this.conferenceStats.bandwidth={download:Math.round(getStatValue(now,"receiveBandwidth")/1e3),upload:Math.round(getStatValue(now,"sendBandwidth")/1e3)}}}catch(e){}if(now.type=="googCandidatePair"){var ip,type,localIP,active;try{ip=getStatValue(now,"remoteAddress");type=getStatValue(now,"transportType");localIP=getStatValue(now,"localAddress");active=getStatValue(now,"activeConnection")}catch(e){}if(!ip||!type||!localIP||active!="true")continue;var addressSaved=false;for(var i=0;i<this.conferenceStats.transport.length;i++){if(this.conferenceStats.transport[i].ip==ip&&this.conferenceStats.transport[i].type==type&&this.conferenceStats.transport[i].localip==localIP){addressSaved=true}}if(addressSaved)continue;this.conferenceStats.transport.push({localip:localIP,ip:ip,type:type});continue}if(now.type=="candidatepair"){if(now.state=="succeeded")continue;var local=this.currentStatsReport[now.localCandidateId];var remote=this.currentStatsReport[now.remoteCandidateId];this.conferenceStats.transport.push({localip:local.ipAddress+":"+local.portNumber,ip:remote.ipAddress+":"+remote.portNumber,type:local.transport})}if(now.type!="ssrc"&&now.type!="outboundrtp"&&now.type!="inboundrtp"){continue}var before=this.baselineStatsReport[idx];if(!before){logger.warn(getStatValue(now,"ssrc")+" not enough data");continue}var ssrc=getStatValue(now,"ssrc");if(!ssrc)continue;var ssrcStats=this.ssrc2stats[ssrc];if(!ssrcStats){ssrcStats=new PeerStats;this.ssrc2stats[ssrc]=ssrcStats}var isDownloadStream=true;var key="packetsReceived";var packetsNow=getStatValue(now,key);if(typeof packetsNow==="undefined"||packetsNow===null){isDownloadStream=false;key="packetsSent";packetsNow=getStatValue(now,key);if(typeof packetsNow==="undefined"||packetsNow===null){console.warn("No packetsReceived nor packetsSent stat found");continue}}if(!packetsNow||packetsNow<0)packetsNow=0;var packetsBefore=getStatValue(before,key);if(!packetsBefore||packetsBefore<0)packetsBefore=0;var packetRate=packetsNow-packetsBefore;if(!packetRate||packetRate<0)packetRate=0;var currentLoss=getStatValue(now,"packetsLost");if(!currentLoss||currentLoss<0)currentLoss=0;var previousLoss=getStatValue(before,"packetsLost");if(!previousLoss||previousLoss<0)previousLoss=0;var lossRate=currentLoss-previousLoss;if(!lossRate||lossRate<0)lossRate=0;var packetsTotal=packetRate+lossRate;ssrcStats.setSsrcLoss(ssrc,{packetsTotal:packetsTotal,packetsLost:lossRate,isDownloadStream:isDownloadStream});var bytesReceived=0,bytesSent=0;if(getStatValue(now,"bytesReceived")){bytesReceived=getStatValue(now,"bytesReceived")-getStatValue(before,"bytesReceived")}if(getStatValue(now,"bytesSent")){bytesSent=getStatValue(now,"bytesSent")-getStatValue(before,"bytesSent")}var time=Math.round((now.timestamp-before.timestamp)/1e3);if(bytesReceived<=0||time<=0){bytesReceived=0}else{bytesReceived=Math.round(bytesReceived*8/time/1e3)}if(bytesSent<=0||time<=0){bytesSent=0}else{bytesSent=Math.round(bytesSent*8/time/1e3)}ssrcStats.setSsrcBitrate(ssrc,{download:bytesReceived,upload:bytesSent});var resolution={height:null,width:null};try{if(getStatValue(now,"googFrameHeightReceived")&&getStatValue(now,"googFrameWidthReceived")){resolution.height=getStatValue(now,"googFrameHeightReceived");resolution.width=getStatValue(now,"googFrameWidthReceived")}else if(getStatValue(now,"googFrameHeightSent")&&getStatValue(now,"googFrameWidthSent")){resolution.height=getStatValue(now,"googFrameHeightSent");resolution.width=getStatValue(now,"googFrameWidthSent")}}catch(e){}if(resolution.height&&resolution.width){ssrcStats.setSsrcResolution(ssrc,resolution)}else{ssrcStats.setSsrcResolution(ssrc,null)}}var self=this;var totalPackets={download:0,upload:0};var lostPackets={download:0,upload:0};var bitrateDownload=0;var bitrateUpload=0;var resolutions={};Object.keys(this.ssrc2stats).forEach(function(jid){Object.keys(self.ssrc2stats[jid].ssrc2Loss).forEach(function(ssrc){var type="upload";if(self.ssrc2stats[jid].ssrc2Loss[ssrc].isDownloadStream)type="download";totalPackets[type]+=self.ssrc2stats[jid].ssrc2Loss[ssrc].packetsTotal;lostPackets[type]+=self.ssrc2stats[jid].ssrc2Loss[ssrc].packetsLost});Object.keys(self.ssrc2stats[jid].ssrc2bitrate).forEach(function(ssrc){bitrateDownload+=self.ssrc2stats[jid].ssrc2bitrate[ssrc].download;bitrateUpload+=self.ssrc2stats[jid].ssrc2bitrate[ssrc].upload;delete self.ssrc2stats[jid].ssrc2bitrate[ssrc]});resolutions[jid]=self.ssrc2stats[jid].ssrc2resolution});this.conferenceStats.bitrate={upload:bitrateUpload,download:bitrateDownload};this.conferenceStats.packetLoss={total:calculatePacketLoss(lostPackets.download+lostPackets.upload,totalPackets.download+totalPackets.upload),download:calculatePacketLoss(lostPackets.download,totalPackets.download),upload:calculatePacketLoss(lostPackets.upload,totalPackets.upload)};this.eventEmitter.emit(StatisticsEvents.CONNECTION_STATS,{bitrate:this.conferenceStats.bitrate,packetLoss:this.conferenceStats.packetLoss,bandwidth:this.conferenceStats.bandwidth,resolution:resolutions,transport:this.conferenceStats.transport});this.conferenceStats.transport=[]};StatsCollector.prototype.processAudioLevelReport=function(){if(!this.baselineAudioLevelsReport){return}for(var idx in this.currentAudioLevelsReport){var now=this.currentAudioLevelsReport[idx];if(now.type!="ssrc"||!getStatValue(now,"packetsReceived")){continue}var before=this.baselineAudioLevelsReport[idx];if(!before){logger.warn(getStatValue(now,"ssrc")+" not enough data");continue}var ssrc=getStatValue(now,"ssrc");if(!ssrc){if(Date.now()-now.timestamp<3e3)logger.warn("No ssrc: ");continue}var ssrcStats=this.ssrc2stats[ssrc];if(!ssrcStats){ssrcStats=new PeerStats;this.ssrc2stats[ssrc]=ssrcStats}var audioLevel=null;try{audioLevel=getStatValue(now,"audioInputLevel");if(!audioLevel)audioLevel=getStatValue(now,"audioOutputLevel")}catch(e){logger.warn("Audio Levels are not available in the statistics.");clearInterval(this.audioLevelsIntervalId);return}if(audioLevel){audioLevel=audioLevel/32767;ssrcStats.setSsrcAudioLevel(ssrc,audioLevel);this.eventEmitter.emit(StatisticsEvents.AUDIO_LEVEL,ssrc,audioLevel)}}}}).call(this,"/modules/statistics/RTPStatsCollector.js")},{"../../service/statistics/Events":140,"../RTC/RTCBrowserType":17,"jitsi-meet-logger":49}],25:[function(require,module,exports){var LocalStats=require("./LocalStatsCollector.js");var RTPStats=require("./RTPStatsCollector.js");var EventEmitter=require("events");var StatisticsEvents=require("../../service/statistics/Events");var CallStats=require("./CallStats");function loadCallStatsAPI(){(function(d,src){var elementName="script";var newScript=d.createElement(elementName);var referenceNode=d.getElementsByTagName(elementName)[0];newScript.async=true;newScript.src=src;referenceNode.parentNode.insertBefore(newScript,referenceNode)})(document,"https://api.callstats.io/static/callstats.min.js")}var eventEmitter=new EventEmitter;function Statistics(options){this.rtpStats=null;this.eventEmitter=new EventEmitter;this.options=options||{};this.callStatsIntegrationEnabled=this.options.callStatsID&&this.options.callStatsSecret&&this.options.disableThirdPartyRequests!==true;if(this.callStatsIntegrationEnabled)loadCallStatsAPI();this.callStats=null}Statistics.audioLevelsEnabled=false;Statistics.prototype.startRemoteStats=function(peerconnection){if(!Statistics.audioLevelsEnabled)return;if(this.rtpStats){this.rtpStats.stop()}this.rtpStats=new RTPStats(peerconnection,200,2e3,this.eventEmitter);this.rtpStats.start()};Statistics.localStats=[];Statistics.startLocalStats=function(stream,callback){if(!Statistics.audioLevelsEnabled)return;var localStats=new LocalStats(stream,200,callback);this.localStats.push(localStats);localStats.start()};Statistics.prototype.addAudioLevelListener=function(listener){if(!Statistics.audioLevelsEnabled)return;this.eventEmitter.on(StatisticsEvents.AUDIO_LEVEL,listener)};Statistics.prototype.removeAudioLevelListener=function(listener){if(!Statistics.audioLevelsEnabled)return;this.eventEmitter.removeListener(StatisticsEvents.AUDIO_LEVEL,listener)};Statistics.prototype.dispose=function(){if(Statistics.audioLevelsEnabled){Statistics.stopAllLocalStats();this.stopRemote();if(this.eventEmitter)this.eventEmitter.removeAllListeners();if(eventEmitter)eventEmitter.removeAllListeners()}if(this.callstats){this.callstats.sendTerminateEvent();this.callstats=null}};Statistics.stopAllLocalStats=function(){if(!Statistics.audioLevelsEnabled)return;for(var i=0;i<this.localStats.length;i++)this.localStats[i].stop();this.localStats=[]};Statistics.stopLocalStats=function(stream){if(!Statistics.audioLevelsEnabled)return;for(var i=0;i<Statistics.localStats.length;i++)if(Statistics.localStats[i].stream===stream){var localStats=Statistics.localStats.splice(i,1);localStats.stop();break}};Statistics.prototype.stopRemote=function(){if(this.rtpStats&&Statistics.audioLevelsEnabled){this.rtpStats.stop();this.eventEmitter.emit(StatisticsEvents.STOP);this.rtpStats=null}};Statistics.prototype.getPeerSSRCAudioLevel=function(peerJid,ssrc){if(!Statistics.audioLevelsEnabled)return;var peerStats=this.rtpStats.jid2stats[peerJid];return peerStats?peerStats.ssrc2AudioLevel[ssrc]:null};Statistics.prototype.startCallStats=function(session,settings){if(this.callStatsIntegrationEnabled&&!this.callstats){this.callstats=new CallStats(session,settings,this.options)}};Statistics.prototype.isCallstatsEnabled=function(){return this.callStatsIntegrationEnabled};Statistics.prototype.sendSetupFailedEvent=function(){if(this.callStatsIntegrationEnabled&&this.callstats)this.callstats.sendSetupFailedEvent()};Statistics.prototype.sendMuteEvent=function(muted,type){if(this.callStatsIntegrationEnabled&&this.callstats)this.callstats.sendMuteEvent(muted,type)};Statistics.prototype.sendGetUserMediaFailed=function(e){if(this.callStatsIntegrationEnabled)CallStats.sendGetUserMediaFailed(e,this.callstats)};Statistics.sendGetUserMediaFailed=function(e){CallStats.sendGetUserMediaFailed(e,null)};Statistics.prototype.sendCreateOfferFailed=function(e,pc){if(this.callStatsIntegrationEnabled)CallStats.sendCreateOfferFailed(e,pc,this.callstats)};Statistics.prototype.sendCreateAnswerFailed=function(e,pc){if(this.callStatsIntegrationEnabled)CallStats.sendCreateAnswerFailed(e,pc,this.callstats)};Statistics.prototype.sendSetLocalDescFailed=function(e,pc){if(this.callStatsIntegrationEnabled)CallStats.sendSetLocalDescFailed(e,pc,this.callstats)};Statistics.prototype.sendSetRemoteDescFailed=function(e,pc){if(this.callStatsIntegrationEnabled)CallStats.sendSetRemoteDescFailed(e,pc,this.callstats)};Statistics.prototype.sendAddIceCandidateFailed=function(e,pc){if(this.callStatsIntegrationEnabled)CallStats.sendAddIceCandidateFailed(e,pc,this.callstats)};Statistics.prototype.sendFeedback=function(overallFeedback,detailedFeedback){if(this.callStatsIntegrationEnabled&&this.callstats)this.callstats.sendFeedback(overallFeedback,detailedFeedback)};Statistics.LOCAL_JID=require("../../service/statistics/constants").LOCAL_JID;module.exports=Statistics},{"../../service/statistics/Events":140,"../../service/statistics/constants":141,"./CallStats":22,"./LocalStatsCollector.js":23,"./RTPStatsCollector.js":24,events:45}],26:[function(require,module,exports){var ALPHANUM="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";var HEX_DIGITS="0123456789abcdef";function randomInt(min,max){return Math.floor(Math.random()*(max-min+1))+min}function randomElement(arr){return arr[randomInt(0,arr.length-1)]}function randomAlphanumStr(length){var result="";for(var i=0;i<length;i+=1){result+=randomElement(ALPHANUM)}return result}var RandomUtil={randomHexDigit:function(){return randomElement(HEX_DIGITS)},randomHexString:function(len){var ret="";while(len--){ret+=this.randomHexDigit()}return ret},randomElement:randomElement,randomAlphanumStr:randomAlphanumStr,randomInt:randomInt};module.exports=RandomUtil},{}],27:[function(require,module,exports){var RandomUtil=require("./RandomUtil");var names=["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zula"];
- function generateUsername(){var name=RandomUtil.randomElement(names);var suffix=RandomUtil.randomAlphanumStr(3);return name+"-"+suffix}module.exports={generateUsername:generateUsername}},{"./RandomUtil":26}],28:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var XMPPEvents=require("../../service/xmpp/XMPPEvents");var Moderator=require("./moderator");var EventEmitter=require("events");var Recorder=require("./recording");var JIBRI_XMLNS="http://jitsi.org/protocol/jibri";var parser={packet2JSON:function(packet,nodes){var self=this;$(packet).children().each(function(index){var tagName=$(this).prop("tagName");var node={tagName:tagName};node.attributes={};$($(this)[0].attributes).each(function(index,attr){node.attributes[attr.name]=attr.value});var text=Strophe.getText($(this)[0]);if(text){node.value=text}node.children=[];nodes.push(node);self.packet2JSON($(this),node.children)})},JSON2packet:function(nodes,packet){for(var i=0;i<nodes.length;i++){var node=nodes[i];if(!node||node===null){continue}packet.c(node.tagName,node.attributes);if(node.value)packet.t(node.value);if(node.children)this.JSON2packet(node.children,packet);packet.up()}}};function filterNodeFromPresenceJSON(pres,nodeName){var res=[];for(var i=0;i<pres.length;i++)if(pres[i].tagName===nodeName)res.push(pres[i]);return res}function ChatRoom(connection,jid,password,XMPP,options,settings){this.eventEmitter=new EventEmitter;this.xmpp=XMPP;this.connection=connection;this.roomjid=Strophe.getBareJidFromJid(jid);this.myroomjid=jid;this.password=password;logger.info("Joined MUC as "+this.myroomjid);this.members={};this.presMap={};this.presHandlers={};this.joined=false;this.role="none";this.focusMucJid=null;this.bridgeIsDown=false;this.options=options||{};this.moderator=new Moderator(this.roomjid,this.xmpp,this.eventEmitter,settings);this.initPresenceMap();this.session=null;var self=this;this.lastPresences={};this.phoneNumber=null;this.phonePin=null}ChatRoom.prototype.initPresenceMap=function(){this.presMap["to"]=this.myroomjid;this.presMap["xns"]="http://jabber.org/protocol/muc";this.presMap["nodes"]=[];this.presMap["nodes"].push({tagName:"user-agent",value:navigator.userAgent,attributes:{xmlns:"http://jitsi.org/jitmeet/user-agent"}})};ChatRoom.prototype.updateDeviceAvailability=function(devices){this.presMap["nodes"].push({tagName:"devices",children:[{tagName:"audio",value:devices.audio},{tagName:"video",value:devices.video}]})};ChatRoom.prototype.join=function(password){if(password)this.password=password;var self=this;this.moderator.allocateConferenceFocus(function(){self.sendPresence(true)}.bind(this))};ChatRoom.prototype.sendPresence=function(fromJoin){if(!this.presMap["to"]||!this.joined&&!fromJoin){return}var pres=$pres({to:this.presMap["to"]});pres.c("x",{xmlns:this.presMap["xns"]});if(this.password){pres.c("password").t(this.password).up()}pres.up();if(this.connection.caps){this.connection.caps.node=this.xmpp.options.clientNode;pres.c("c",this.connection.caps.generateCapsAttrs()).up()}parser.JSON2packet(this.presMap.nodes,pres);this.connection.send(pres)};ChatRoom.prototype.doLeave=function(){logger.log("do leave",this.myroomjid);var pres=$pres({to:this.myroomjid,type:"unavailable"});this.presMap.length=0;this.connection.send(pres)};ChatRoom.prototype.createNonAnonymousRoom=function(){var getForm=$iq({type:"get",to:this.roomjid}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}).c("x",{xmlns:"jabber:x:data",type:"submit"});var self=this;this.connection.sendIQ(getForm,function(form){if(!$(form).find('>query>x[xmlns="jabber:x:data"]'+'>field[var="muc#roomconfig_whois"]').length){logger.error("non-anonymous rooms not supported");return}var formSubmit=$iq({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});formSubmit.c("x",{xmlns:"jabber:x:data",type:"submit"});formSubmit.c("field",{"var":"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up();formSubmit.c("field",{"var":"muc#roomconfig_whois"}).c("value").t("anyone").up().up();self.connection.sendIQ(formSubmit)},function(error){logger.error("Error getting room configuration form")})};ChatRoom.prototype.onPresence=function(pres){var from=pres.getAttribute("from");var member={};member.show=$(pres).find(">show").text();member.status=$(pres).find(">status").text();var tmp=$(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]>item');member.affiliation=tmp.attr("affiliation");member.role=tmp.attr("role");member.jid=tmp.attr("jid");member.isFocus=false;if(member.jid&&member.jid.indexOf(this.moderator.getFocusUserJid()+"/")===0){member.isFocus=true}$(pres).find(">x").remove();var nodes=[];parser.packet2JSON(pres,nodes);this.lastPresences[from]=nodes;var jibri=null;for(var i=0;i<nodes.length;i++){var node=nodes[i];switch(node.tagName){case"nick":member.nick=node.value;break;case"userId":member.id=node.value;break}}if(from==this.myroomjid){if(member.affiliation=="owner"&&this.role!==member.role){this.role=member.role;this.eventEmitter.emit(XMPPEvents.LOCAL_ROLE_CHANGED,this.role)}if(!this.joined){this.joined=true;console.log("(TIME) MUC joined: ",window.performance.now());this.eventEmitter.emit(XMPPEvents.MUC_JOINED)}}else if(this.members[from]===undefined){this.members[from]=member;logger.log("entered",from,member);if(member.isFocus){this.focusMucJid=from;if(!this.recording){this.recording=new Recorder(this.options.recordingType,this.eventEmitter,this.connection,this.focusMucJid,this.options.jirecon,this.roomjid);if(this.lastJibri)this.recording.handleJibriPresence(this.lastJibri)}logger.info("Ignore focus: "+from+", real JID: "+member.jid)}else{this.eventEmitter.emit(XMPPEvents.MUC_MEMBER_JOINED,from,member.nick,member.role)}}else{if(this.members[from].role!=member.role){this.members[from].role=member.role;this.eventEmitter.emit(XMPPEvents.MUC_ROLE_CHANGED,from,member.role)}if(member.displayName)this.members[from].displayName=member.displayName}for(var i=0;i<nodes.length;i++){var node=nodes[i];switch(node.tagName){case"nick":if(!member.isFocus){var displayName=!this.xmpp.options.displayJids?member.nick:Strophe.getResourceFromJid(from);if(displayName&&displayName.length>0){this.eventEmitter.emit(XMPPEvents.DISPLAY_NAME_CHANGED,from,displayName)}}break;case"bridgeIsDown":if(!this.bridgeIsDown){this.bridgeIsDown=true;this.eventEmitter.emit(XMPPEvents.BRIDGE_DOWN)}break;case"jibri-recording-status":var jibri=node;break;case"call-control":var att=node.attributes;if(!att)break;this.phoneNumber=att.phone||null;this.phonePin=att.pin||null;this.eventEmitter.emit(XMPPEvents.PHONE_NUMBER_CHANGED);break;default:this.processNode(node,from)}}if(member.status){this.eventEmitter.emit(XMPPEvents.PRESENCE_STATUS,from,member.status)}if(jibri){this.lastJibri=jibri;if(this.recording)this.recording.handleJibriPresence(jibri)}};ChatRoom.prototype.processNode=function(node,from){if(this.presHandlers[node.tagName])this.presHandlers[node.tagName](node,Strophe.getResourceFromJid(from))};ChatRoom.prototype.sendMessage=function(body,nickname){var msg=$msg({to:this.roomjid,type:"groupchat"});msg.c("body",body).up();if(nickname){msg.c("nick",{xmlns:"http://jabber.org/protocol/nick"}).t(nickname).up().up()}this.connection.send(msg);this.eventEmitter.emit(XMPPEvents.SENDING_CHAT_MESSAGE,body)};ChatRoom.prototype.setSubject=function(subject){var msg=$msg({to:this.roomjid,type:"groupchat"});msg.c("subject",subject);this.connection.send(msg);logger.log("topic changed to "+subject)};ChatRoom.prototype.onParticipantLeft=function(jid){delete this.lastPresences[jid];this.eventEmitter.emit(XMPPEvents.MUC_MEMBER_LEFT,jid);this.moderator.onMucMemberLeft(jid)};ChatRoom.prototype.onPresenceUnavailable=function(pres,from){if($(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]'+">destroy").length){var reason;var reasonSelect=$(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]'+">destroy>reason");if(reasonSelect.length){reason=reasonSelect.text()}this.xmpp.leaveRoom(this.roomjid);this.eventEmitter.emit(XMPPEvents.MUC_DESTROYED,reason);delete this.connection.emuc.rooms[Strophe.getBareJidFromJid(from)];return true}if(!$(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="110"]').length){delete this.members[from];this.onParticipantLeft(from)}else if(Object.keys(this.members).length>1){for(var i in this.members){var member=this.members[i];delete this.members[i];this.onParticipantLeft(member)}}if($(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="307"]').length){if(this.myroomjid===from){this.xmpp.leaveRoom(this.roomjid);this.eventEmitter.emit(XMPPEvents.KICKED)}}};ChatRoom.prototype.onMessage=function(msg,from){var nick=$(msg).find('>nick[xmlns="http://jabber.org/protocol/nick"]').text()||Strophe.getResourceFromJid(from);var txt=$(msg).find(">body").text();var type=msg.getAttribute("type");if(type=="error"){this.eventEmitter.emit(XMPPEvents.CHAT_ERROR_RECEIVED,$(msg).find(">text").text(),txt);return true}var subject=$(msg).find(">subject");if(subject.length){var subjectText=subject.text();if(subjectText||subjectText===""){this.eventEmitter.emit(XMPPEvents.SUBJECT_CHANGED,subjectText);logger.log("Subject is changed to "+subjectText)}}var stamp=$(msg).find(">delay").attr("stamp");if(!stamp){stamp=$(msg).find('>[xmlns="jabber:x:delay"]').attr("stamp");if(stamp){var dateParts=stamp.match(/(\d{4})(\d{2})(\d{2}T\d{2}:\d{2}:\d{2})/);stamp=dateParts[1]+"-"+dateParts[2]+"-"+dateParts[3]+"Z"}}if(txt){logger.log("chat",nick,txt);this.eventEmitter.emit(XMPPEvents.MESSAGE_RECEIVED,from,nick,txt,this.myroomjid,stamp)}};ChatRoom.prototype.onPresenceError=function(pres,from){if($(pres).find('>error[type="auth"]>not-authorized[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]').length){logger.log("on password required",from);this.eventEmitter.emit(XMPPEvents.PASSWORD_REQUIRED)}else if($(pres).find('>error[type="cancel"]>not-allowed[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]').length){var toDomain=Strophe.getDomainFromJid(pres.getAttribute("to"));if(toDomain===this.xmpp.options.hosts.anonymousdomain){this.eventEmitter.emit(XMPPEvents.ROOM_JOIN_ERROR,pres)}else{logger.warn("onPresError ",pres);this.eventEmitter.emit(XMPPEvents.ROOM_CONNECT_ERROR,pres)}}else{logger.warn("onPresError ",pres);this.eventEmitter.emit(XMPPEvents.ROOM_CONNECT_ERROR,pres)}};ChatRoom.prototype.kick=function(jid){var kickIQ=$iq({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#admin"}).c("item",{nick:Strophe.getResourceFromJid(jid),role:"none"}).c("reason").t("You have been kicked.").up().up().up();this.connection.sendIQ(kickIQ,function(result){logger.log("Kick participant with jid: ",jid,result)},function(error){logger.log("Kick participant error: ",error)})};ChatRoom.prototype.lockRoom=function(key,onSuccess,onError,onNotSupported){var ob=this;this.connection.sendIQ($iq({to:this.roomjid,type:"get"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}),function(res){if($(res).find('>query>x[xmlns="jabber:x:data"]>field[var="muc#roomconfig_roomsecret"]').length){var formsubmit=$iq({to:ob.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});formsubmit.c("x",{xmlns:"jabber:x:data",type:"submit"});formsubmit.c("field",{"var":"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up();formsubmit.c("field",{"var":"muc#roomconfig_roomsecret"}).c("value").t(key).up().up();formsubmit.c("field",{"var":"muc#roomconfig_whois"}).c("value").t("anyone").up().up();ob.connection.sendIQ(formsubmit,onSuccess,onError)}else{onNotSupported()}},onError)};ChatRoom.prototype.addToPresence=function(key,values){values.tagName=key;this.presMap["nodes"].push(values)};ChatRoom.prototype.removeFromPresence=function(key){for(var i=0;i<this.presMap.nodes.length;i++){if(key===this.presMap.nodes[i].tagName)this.presMap.nodes.splice(i,1)}};ChatRoom.prototype.addPresenceListener=function(name,handler){this.presHandlers[name]=handler};ChatRoom.prototype.removePresenceListener=function(name){delete this.presHandlers[name]};ChatRoom.prototype.isModerator=function(){return this.role==="moderator"};ChatRoom.prototype.getMemberRole=function(peerJid){if(this.members[peerJid]){return this.members[peerJid].role}return null};ChatRoom.prototype.setJingleSession=function(session){this.session=session;this.session.room=this};ChatRoom.prototype.removeStream=function(stream,callback){if(!this.session)return;this.session.removeStream(stream,callback)};ChatRoom.prototype.switchStreams=function(stream,oldStream,callback,isAudio){if(this.session){this.session.switchStreams(stream,oldStream,callback,isAudio)}else{logger.warn("No conference handler or conference not started yet");callback()}};ChatRoom.prototype.addStream=function(stream,callback){if(this.session){this.session.addStream(stream,callback)}else{logger.warn("No conference handler or conference not started yet");callback()}};ChatRoom.prototype.setVideoMute=function(mute,callback,options){var self=this;var localCallback=function(mute){self.sendVideoInfoPresence(mute);if(callback)callback(mute)};if(this.session){this.session.setVideoMute(mute,localCallback,options)}else{localCallback(mute)}};ChatRoom.prototype.setAudioMute=function(mute,callback){return this.sendAudioInfoPresence(mute,callback)};ChatRoom.prototype.addAudioInfoToPresence=function(mute){this.removeFromPresence("audiomuted");this.addToPresence("audiomuted",{attributes:{audions:"http://jitsi.org/jitmeet/audio"},value:mute.toString()})};ChatRoom.prototype.sendAudioInfoPresence=function(mute,callback){this.addAudioInfoToPresence(mute);if(this.connection){this.sendPresence()}if(callback)callback()};ChatRoom.prototype.addVideoInfoToPresence=function(mute){this.removeFromPresence("videomuted");this.addToPresence("videomuted",{attributes:{videons:"http://jitsi.org/jitmeet/video"},value:mute.toString()})};ChatRoom.prototype.sendVideoInfoPresence=function(mute){this.addVideoInfoToPresence(mute);if(!this.connection)return;this.sendPresence()};ChatRoom.prototype.addListener=function(type,listener){this.eventEmitter.on(type,listener)};ChatRoom.prototype.removeListener=function(type,listener){this.eventEmitter.removeListener(type,listener)};ChatRoom.prototype.remoteStreamAdded=function(data,sid,thessrc){if(this.lastPresences[data.peerjid]){var pres=this.lastPresences[data.peerjid];var audiomuted=filterNodeFromPresenceJSON(pres,"audiomuted");var videomuted=filterNodeFromPresenceJSON(pres,"videomuted");data.videomuted=videomuted.length>0&&videomuted[0]&&videomuted[0]["value"]==="true"?true:false;data.audiomuted=audiomuted.length>0&&audiomuted[0]&&audiomuted[0]["value"]==="true"?true:false}this.eventEmitter.emit(XMPPEvents.REMOTE_STREAM_RECEIVED,data,sid,thessrc)};ChatRoom.prototype.getJidBySSRC=function(ssrc){if(!this.session)return null;return this.session.getSsrcOwner(ssrc)};ChatRoom.prototype.isRecordingSupported=function(){if(this.recording)return this.recording.isSupported();return false};ChatRoom.prototype.getRecordingState=function(){if(this.recording)return this.recording.getState();return"off"};ChatRoom.prototype.getRecordingURL=function(){if(this.recording)return this.recording.getURL();return null};ChatRoom.prototype.toggleRecording=function(options,statusChangeHandler){if(this.recording)return this.recording.toggleRecording(options,statusChangeHandler);return statusChangeHandler("error",new Error("The conference is not created yet!"))};ChatRoom.prototype.isSIPCallingSupported=function(){if(this.moderator)return this.moderator.isSipGatewayEnabled();return false};ChatRoom.prototype.dial=function(number){return this.connection.rayo.dial(number,"fromnumber",Strophe.getNodeFromJid(this.myroomjid),this.password,this.focusMucJid)};ChatRoom.prototype.hangup=function(){return this.connection.rayo.hangup()};ChatRoom.prototype.getPhoneNumber=function(){return this.phoneNumber};ChatRoom.prototype.getPhonePin=function(){return this.phonePin};ChatRoom.prototype.getConnectionState=function(){if(!this.session)return null;return this.session.getIceConnectionState()};ChatRoom.prototype.muteParticipant=function(jid,mute){logger.info("set mute",mute);var iqToFocus=$iq({to:this.focusMucJid,type:"set"}).c("mute",{xmlns:"http://jitsi.org/jitmeet/audio",jid:jid}).t(mute.toString()).up();this.connection.sendIQ(iqToFocus,function(result){logger.log("set mute",result)},function(error){logger.log("set mute error",error)})};ChatRoom.prototype.onMute=function(iq){var from=iq.getAttribute("from");if(from!==this.focusMucJid){logger.warn("Ignored mute from non focus peer");return false}var mute=$(iq).find("mute");if(mute.length){var doMuteAudio=mute.text()==="true";this.eventEmitter.emit(XMPPEvents.AUDIO_MUTED_BY_FOCUS,doMuteAudio)}return true};module.exports=ChatRoom}).call(this,"/modules/xmpp/ChatRoom.js")},{"../../service/xmpp/XMPPEvents":142,"./moderator":35,"./recording":36,events:45,"jitsi-meet-logger":49}],29:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);function JingleSession(me,sid,connection,service,eventEmitter){this.me=me;this.sid=sid;this.connection=connection;this.service=service;this.eventEmitter=eventEmitter;this.usedrip=true;this.drip_container=[];this.media_constraints=null;this.ice_config={};this.room=null}JingleSession.prototype.initialize=function(peerjid,isInitiator,media_constraints,ice_config){this.media_constraints=media_constraints;this.ice_config=ice_config;if(this.state!==null){logger.error("attempt to initiate on session "+this.sid+"in state "+this.state);return}this.state="pending";this.initiator=isInitiator?this.me:peerjid;this.responder=!isInitiator?this.me:peerjid;this.peerjid=peerjid;this.doInitialize()};JingleSession.prototype.doInitialize=function(){};JingleSession.prototype.addIceCandidates=function(contents){};JingleSession.prototype.addSources=function(contents){};JingleSession.prototype.removeSources=function(contents){};JingleSession.prototype.terminate=function(){};JingleSession.prototype.sendTerminate=function(reason,text){};JingleSession.prototype.setOffer=function(jingle){};JingleSession.prototype.setAnswer=function(jingle){};module.exports=JingleSession}).call(this,"/modules/xmpp/JingleSession.js")},{"jitsi-meet-logger":49}],30:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var JingleSession=require("./JingleSession");var TraceablePeerConnection=require("./TraceablePeerConnection");var SDPDiffer=require("./SDPDiffer");var SDPUtil=require("./SDPUtil");var SDP=require("./SDP");var async=require("async");var transform=require("sdp-transform");var XMPPEvents=require("../../service/xmpp/XMPPEvents");var RTCBrowserType=require("../RTC/RTCBrowserType");var RTC=require("../RTC/RTC");function JingleSessionPC(me,sid,connection,service){JingleSession.call(this,me,sid,connection,service);this.initiator=null;this.responder=null;this.peerjid=null;this.state=null;this.localSDP=null;this.remoteSDP=null;this.relayedStreams=[];this.usetrickle=true;this.usepranswer=false;this.hadstuncandidate=false;this.hadturncandidate=false;this.lasticecandidate=false;this.statsinterval=null;this.reason=null;this.addssrc=[];this.removessrc=[];this.pendingop=null;this.switchstreams=false;this.addingStreams=false;this.wait=true;this.localStreamsSSRC={};this.ssrcOwners={};this.ssrcVideoTypes={};this.webrtcIceUdpDisable=!!this.service.options.webrtcIceUdpDisable;this.webrtcIceTcpDisable=!!this.service.options.webrtcIceTcpDisable;this.videoMuteByUser=false;this.modifySourcesQueue=async.queue(this._modifySources.bind(this),1);this.modifySourcesQueue.pause()}JingleSessionPC.prototype=JingleSession.prototype;JingleSessionPC.prototype.constructor=JingleSessionPC;JingleSessionPC.prototype.setOffer=function(offer){this.setRemoteDescription(offer,"offer")};JingleSessionPC.prototype.setAnswer=function(answer){this.setRemoteDescription(answer,"answer")};JingleSessionPC.prototype.updateModifySourcesQueue=function(){var signalingState=this.peerconnection.signalingState;var iceConnectionState=this.peerconnection.iceConnectionState;if(signalingState==="stable"&&iceConnectionState==="connected"){this.modifySourcesQueue.resume()}else{this.modifySourcesQueue.pause()}};JingleSessionPC.prototype.doInitialize=function(){var self=this;this.hadstuncandidate=false;this.hadturncandidate=false;this.lasticecandidate=false;this.isreconnect=false;this.wasstable=false;this.peerconnection=new TraceablePeerConnection(this.connection.jingle.ice_config,RTC.getPCConstraints(),this);this.peerconnection.onicecandidate=function(event){var protocol;if(event&&event.candidate){protocol=typeof event.candidate.protocol==="string"?event.candidate.protocol.toLowerCase():"";if(self.webrtcIceTcpDisable&&protocol=="tcp"||self.webrtcIceUdpDisable&&protocol=="udp"){return}}self.sendIceCandidate(event.candidate)};this.peerconnection.onaddstream=function(event){if(event.stream.id!=="default"){logger.log("REMOTE STREAM ADDED: ",event.stream,event.stream.id);self.remoteStreamAdded(event)}else{logger.log("RECVONLY REMOTE STREAM IGNORED: "+event.stream+" - "+event.stream.id)}};this.peerconnection.onremovestream=function(event){$(document).trigger("remotestreamremoved.jingle",[event,self.sid])};this.peerconnection.onsignalingstatechange=function(event){if(!(self&&self.peerconnection))return;if(self.peerconnection.signalingState==="stable"){self.wasstable=true}self.updateModifySourcesQueue()};this.peerconnection.oniceconnectionstatechange=function(event){if(!(self&&self.peerconnection))return;logger.log("(TIME) ICE "+self.peerconnection.iceConnectionState+": ",window.performance.now());self.updateModifySourcesQueue();switch(self.peerconnection.iceConnectionState){case"connected":if(self.peerconnection.signalingState==="stable"&&self.isreconnect)self.room.eventEmitter.emit(XMPPEvents.CONNECTION_RESTORED);self.isreconnect=false;break;case"disconnected":self.isreconnect=true;if(self.wasstable)self.room.eventEmitter.emit(XMPPEvents.CONNECTION_INTERRUPTED);break;case"failed":self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED);break}onIceConnectionStateChange(self.sid,self)};this.peerconnection.onnegotiationneeded=function(event){self.room.eventEmitter.emit(XMPPEvents.PEERCONNECTION_READY,self)};this.relayedStreams.forEach(function(stream){self.peerconnection.addStream(stream)})};function onIceConnectionStateChange(sid,session){switch(session.peerconnection.iceConnectionState){case"checking":session.timeChecking=(new Date).getTime();session.firstconnect=true;break;case"completed":case"connected":if(session.firstconnect){session.firstconnect=false;var metadata={};metadata.setupTime=(new Date).getTime()-session.timeChecking;session.peerconnection.getStats(function(res){if(res&&res.result){res.result().forEach(function(report){if(report.type=="googCandidatePair"&&report.stat("googActiveConnection")=="true"){metadata.localCandidateType=report.stat("googLocalCandidateType");metadata.remoteCandidateType=report.stat("googRemoteCandidateType");metadata.candidatePair=report.stat("googLocalCandidateType")+";"+report.stat("googRemoteCandidateType");if(report.stat("googRemoteAddress").indexOf("[")===0){metadata.ipv6=true}}})}})}break}}JingleSessionPC.prototype.accept=function(){this.state="active";var pranswer=this.peerconnection.localDescription;if(!pranswer||pranswer.type!="pranswer"){return}logger.log("going from pranswer to answer");if(this.usetrickle){var lines=SDPUtil.find_lines(pranswer.sdp,"a=candidate:");for(var i=0;i<lines.length;i++){pranswer.sdp=pranswer.sdp.replace(lines[i]+"\r\n","")}}while(SDPUtil.find_line(pranswer.sdp,"a=inactive")){pranswer.sdp=pranswer.sdp.replace("a=inactive","a=sendrecv")}var prsdp=new SDP(pranswer.sdp);if(this.webrtcIceTcpDisable){prsdp.removeTcpCandidates=true}if(this.webrtcIceUdpDisable){prsdp.removeUdpCandidates=true}var accept=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:this.initiator,responder:this.responder,sid:this.sid});prsdp.toJingle(accept,this.initiator==this.me?"initiator":"responder");var sdp=this.peerconnection.localDescription.sdp;while(SDPUtil.find_line(sdp,"a=inactive")){sdp=sdp.replace("a=inactive","a=sendrecv")}var self=this;this.peerconnection.setLocalDescription(new RTCSessionDescription({type:"answer",sdp:sdp}),function(){self.setLocalDescription();self.connection.sendIQ(accept,function(){var ack={};ack.source="answer";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="answer";JingleSessionPC.onJingleError(self.sid,error)},1e4)},function(e){logger.error("setLocalDescription failed",e);self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED)})};JingleSessionPC.prototype.terminate=function(reason){this.state="ended";this.reason=reason;this.peerconnection.close();if(this.statsinterval!==null){window.clearInterval(this.statsinterval);this.statsinterval=null}};JingleSessionPC.prototype.active=function(){return this.state=="active"};JingleSessionPC.prototype.sendIceCandidate=function(candidate){var self=this;if(candidate&&!this.lasticecandidate){var ice=SDPUtil.iceparams(this.localSDP.media[candidate.sdpMLineIndex],this.localSDP.session);var jcand=SDPUtil.candidateToJingle(candidate.candidate);if(!(ice&&jcand)){logger.error("failed to get ice && jcand");return}ice.xmlns="urn:xmpp:jingle:transports:ice-udp:1";if(jcand.type==="srflx"){this.hadstuncandidate=true}else if(jcand.type==="relay"){this.hadturncandidate=true}if(this.usetrickle){if(this.usedrip){if(this.drip_container.length===0){window.setTimeout(function(){if(self.drip_container.length===0)return;self.sendIceCandidates(self.drip_container);self.drip_container=[]},20)}this.drip_container.push(candidate);return}else{self.sendIceCandidate([candidate])}}}else{if(!this.usetrickle){var init=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:this.peerconnection.localDescription.type=="offer"?"session-initiate":"session-accept",initiator:this.initiator,sid:this.sid});this.localSDP=new SDP(this.peerconnection.localDescription.sdp);if(self.webrtcIceTcpDisable){this.localSDP.removeTcpCandidates=true}if(self.webrtcIceUdpDisable){this.localSDP.removeUdpCandidates=true}var sendJingle=function(ssrc){if(!ssrc)ssrc={};self.localSDP.toJingle(init,self.initiator==self.me?"initiator":"responder",ssrc);self.connection.sendIQ(init,function(){var ack={};ack.source="offer";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){self.state="error";self.peerconnection.close();var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="offer";JingleSessionPC.onJingleError(self.sid,error)},1e4)};sendJingle()}this.lasticecandidate=true;logger.log("Have we encountered any srflx candidates? "+this.hadstuncandidate);logger.log("Have we encountered any relay candidates? "+this.hadturncandidate);if(!(this.hadstuncandidate||this.hadturncandidate)&&this.peerconnection.signalingState!="closed"){$(document).trigger("nostuncandidates.jingle",[this.sid])}}};JingleSessionPC.prototype.sendIceCandidates=function(candidates){logger.log("sendIceCandidates",candidates);var cand=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-info",initiator:this.initiator,sid:this.sid});for(var mid=0;mid<this.localSDP.media.length;mid++){var cands=candidates.filter(function(el){return el.sdpMLineIndex==mid});var mline=SDPUtil.parse_mline(this.localSDP.media[mid].split("\r\n")[0]);if(cands.length>0){var ice=SDPUtil.iceparams(this.localSDP.media[mid],this.localSDP.session);ice.xmlns="urn:xmpp:jingle:transports:ice-udp:1";cand.c("content",{creator:this.initiator==this.me?"initiator":"responder",name:cands[0].sdpMid?cands[0].sdpMid:mline.media}).c("transport",ice);for(var i=0;i<cands.length;i++){cand.c("candidate",SDPUtil.candidateToJingle(cands[i].candidate)).up()}if(SDPUtil.find_line(this.localSDP.media[mid],"a=fingerprint:",this.localSDP.session)){var tmp=SDPUtil.parse_fingerprint(SDPUtil.find_line(this.localSDP.media[mid],"a=fingerprint:",this.localSDP.session));tmp.required=true;cand.c("fingerprint",{xmlns:"urn:xmpp:jingle:apps:dtls:0"}).t(tmp.fingerprint);delete tmp.fingerprint;cand.attrs(tmp);cand.up()}cand.up();cand.up()}}this.connection.sendIQ(cand,function(){var ack={};ack.source="transportinfo";$(document).trigger("ack.jingle",[this.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="transportinfo";JingleSessionPC.onJingleError(this.sid,error)},1e4)};JingleSessionPC.prototype.sendOffer=function(){var self=this;this.peerconnection.createOffer(function(sdp){self.createdOffer(sdp)},function(e){logger.error("createOffer failed",e)},this.media_constraints)};JingleSessionPC.prototype.createdOffer=function(sdp){var self=this;this.localSDP=new SDP(sdp.sdp);var sendJingle=function(){var init=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-initiate",initiator:this.initiator,sid:this.sid});self.localSDP.toJingle(init,this.initiator==this.me?"initiator":"responder");self.connection.sendIQ(init,function(){var ack={};ack.source="offer";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){self.state="error";self.peerconnection.close();var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="offer";JingleSessionPC.onJingleError(self.sid,error)},1e4)};sdp.sdp=this.localSDP.raw;this.peerconnection.setLocalDescription(sdp,function(){if(self.usetrickle){sendJingle()}self.setLocalDescription()},function(e){logger.error("setLocalDescription failed",e);self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED)});var cands=SDPUtil.find_lines(this.localSDP.raw,"a=candidate:");for(var i=0;i<cands.length;i++){var cand=SDPUtil.parse_icecandidate(cands[i]);if(cand.type=="srflx"){this.hadstuncandidate=true}else if(cand.type=="relay"){this.hadturncandidate=true}}};JingleSessionPC.prototype.readSsrcInfo=function(contents){var self=this;$(contents).each(function(idx,content){var name=$(content).attr("name");var mediaType=this.getAttribute("name");var ssrcs=$(content).find('description>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]');ssrcs.each(function(){var ssrc=this.getAttribute("ssrc");$(this).find('>ssrc-info[xmlns="http://jitsi.org/jitmeet"]').each(function(){var owner=this.getAttribute("owner");self.ssrcOwners[ssrc]=owner})})})};JingleSessionPC.prototype.getLocalSSRC=function(mediaType){return this.localStreamsSSRC[mediaType]};JingleSessionPC.prototype.getSsrcOwner=function(ssrc){return this.ssrcOwners[ssrc]};JingleSessionPC.prototype.setRemoteDescription=function(elem,desctype){this.remoteSDP=new SDP("");if(this.webrtcIceTcpDisable){this.remoteSDP.removeTcpCandidates=true}if(this.webrtcIceUdpDisable){this.remoteSDP.removeUdpCandidates=true}this.remoteSDP.fromJingle(elem);this.readSsrcInfo($(elem).find(">content"));if(this.peerconnection.remoteDescription){logger.log("setRemoteDescription when remote description is not null, should be pranswer",this.peerconnection.remoteDescription);if(this.peerconnection.remoteDescription.type=="pranswer"){var pranswer=new SDP(this.peerconnection.remoteDescription.sdp);for(var i=0;i<pranswer.media.length;i++){if(!SDPUtil.find_line(this.remoteSDP.media[i],"a=ice-ufrag:",this.remoteSDP.session)){if(SDPUtil.find_line(pranswer.media[i],"a=ice-ufrag:",pranswer.session)){this.remoteSDP.media[i]+=SDPUtil.find_line(pranswer.media[i],"a=ice-ufrag:",pranswer.session)+"\r\n"}else{logger.warn("no ice ufrag?")}if(SDPUtil.find_line(pranswer.media[i],"a=ice-pwd:",pranswer.session)){
- this.remoteSDP.media[i]+=SDPUtil.find_line(pranswer.media[i],"a=ice-pwd:",pranswer.session)+"\r\n"}else{logger.warn("no ice pwd?")}}var lines=SDPUtil.find_lines(pranswer.media[i],"a=candidate:");for(var j=0;j<lines.length;j++){this.remoteSDP.media[i]+=lines[j]+"\r\n"}}this.remoteSDP.raw=this.remoteSDP.session+this.remoteSDP.media.join("")}}var remotedesc=new RTCSessionDescription({type:desctype,sdp:this.remoteSDP.raw});this.peerconnection.setRemoteDescription(remotedesc,function(){},function(e){logger.error("setRemoteDescription error",e);JingleSessionPC.onJingleFatalError(self,e)})};JingleSessionPC.prototype.addIceCandidate=function(elem){var self=this;if(this.peerconnection.signalingState=="closed"){return}if(!this.peerconnection.remoteDescription&&this.peerconnection.signalingState=="have-local-offer"){logger.log("trickle ice candidate arriving before session accept...");if(!this.remoteSDP){var cobbled="v=0\r\n"+"o=- 1923518516 2 IN IP4 0.0.0.0\r\n"+"s=-\r\n"+"t=0 0\r\n";for(var i=0;i<this.localSDP.media.length;i++){cobbled+=SDPUtil.find_line(this.localSDP.media[i],"m=")+"\r\n";cobbled+=SDPUtil.find_lines(this.localSDP.media[i],"a=rtpmap:").join("\r\n")+"\r\n";if(SDPUtil.find_line(this.localSDP.media[i],"a=mid:")){cobbled+=SDPUtil.find_line(this.localSDP.media[i],"a=mid:")+"\r\n"}cobbled+="a=inactive\r\n"}this.remoteSDP=new SDP(cobbled)}elem.each(function(){for(var i=0;i<self.remoteSDP.media.length;i++){if(SDPUtil.find_line(self.remoteSDP.media[i],"a=mid:"+$(this).attr("name"))||self.remoteSDP.media[i].indexOf("m="+$(this).attr("name"))===0){if(!SDPUtil.find_line(self.remoteSDP.media[i],"a=ice-ufrag:")){var tmp=$(this).find("transport");self.remoteSDP.media[i]+="a=ice-ufrag:"+tmp.attr("ufrag")+"\r\n";self.remoteSDP.media[i]+="a=ice-pwd:"+tmp.attr("pwd")+"\r\n";tmp=$(this).find("transport>fingerprint");if(tmp.length){self.remoteSDP.media[i]+="a=fingerprint:"+tmp.attr("hash")+" "+tmp.text()+"\r\n"}else{logger.log("no dtls fingerprint (webrtc issue #1718?)");self.remoteSDP.media[i]+="a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:BAADBAADBAADBAADBAADBAADBAADBAADBAADBAAD\r\n"}break}}}});this.remoteSDP.raw=this.remoteSDP.session+this.remoteSDP.media.join("");var iscomplete=this.remoteSDP.media.filter(function(mediapart){return SDPUtil.find_line(mediapart,"a=ice-ufrag:")}).length==this.remoteSDP.media.length;if(iscomplete){logger.log("setting pranswer");try{this.peerconnection.setRemoteDescription(new RTCSessionDescription({type:"pranswer",sdp:this.remoteSDP.raw}),function(){},function(e){logger.log("setRemoteDescription pranswer failed",e.toString())})}catch(e){logger.error("setting pranswer failed",e)}}else{}}elem.each(function(){var idx=-1;var i;for(i=0;i<self.remoteSDP.media.length;i++){if(SDPUtil.find_line(self.remoteSDP.media[i],"a=mid:"+$(this).attr("name"))||self.remoteSDP.media[i].indexOf("m="+$(this).attr("name"))===0){idx=i;break}}if(idx==-1){for(i=0;i<self.localSDP.media.length;i++){if(SDPUtil.find_line(self.localSDP.media[i],"a=mid:"+$(this).attr("name"))||self.localSDP.media[i].indexOf("m="+$(this).attr("name"))===0){idx=i;break}}}var name=$(this).attr("name");$(this).find("transport>candidate").each(function(){var line,candidate;var protocol=this.getAttribute("protocol");protocol=typeof protocol==="string"?protocol.toLowerCase():"";if(self.webrtcIceTcpDisable&&protocol=="tcp"||self.webrtcIceUdpDisable&&protocol=="udp"){return}line=SDPUtil.candidateFromJingle(this);candidate=new RTCIceCandidate({sdpMLineIndex:idx,sdpMid:name,candidate:line});try{self.peerconnection.addIceCandidate(candidate)}catch(e){logger.error("addIceCandidate failed",e.toString(),line);self.room.eventEmitter.emit(XMPPEvents.ADD_ICE_CANDIDATE_FAILED,err,self.peerconnection)}})})};JingleSessionPC.prototype.sendAnswer=function(provisional){var self=this;this.peerconnection.createAnswer(function(sdp){self.createdAnswer(sdp,provisional)},function(e){logger.error("createAnswer failed",e);self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED)},this.media_constraints)};JingleSessionPC.prototype.createdAnswer=function(sdp,provisional){var self=this;this.localSDP=new SDP(sdp.sdp);this.usepranswer=provisional===true;if(this.usetrickle){if(this.usepranswer){sdp.type="pranswer";for(var i=0;i<this.localSDP.media.length;i++){this.localSDP.media[i]=this.localSDP.media[i].replace("a=sendrecv\r\n","a=inactive\r\n")}this.localSDP.raw=this.localSDP.session+"\r\n"+this.localSDP.media.join("")}}var self=this;var sendJingle=function(ssrcs){var accept=$iq({to:self.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:self.initiator,responder:self.responder,sid:self.sid});if(self.webrtcIceTcpDisable){self.localSDP.removeTcpCandidates=true}if(self.webrtcIceUdpDisable){self.localSDP.removeUdpCandidates=true}self.localSDP.toJingle(accept,self.initiator==self.me?"initiator":"responder",ssrcs);self.connection.sendIQ(accept,function(){var ack={};ack.source="answer";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="answer";JingleSessionPC.onJingleError(self.sid,error)},1e4)};sdp.sdp=this.localSDP.raw;this.peerconnection.setLocalDescription(sdp,function(){if(self.usetrickle&&!self.usepranswer){sendJingle()}self.setLocalDescription()},function(e){logger.error("setLocalDescription failed",e);self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED)});var cands=SDPUtil.find_lines(this.localSDP.raw,"a=candidate:");for(var j=0;j<cands.length;j++){var cand=SDPUtil.parse_icecandidate(cands[j]);if(cand.type=="srflx"){this.hadstuncandidate=true}else if(cand.type=="relay"){this.hadturncandidate=true}}};JingleSessionPC.prototype.sendTerminate=function(reason,text){var self=this,term=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-terminate",initiator:this.initiator,sid:this.sid}).c("reason").c(reason||"success");if(text){term.up().c("text").t(text)}this.connection.sendIQ(term,function(){self.peerconnection.close();self.peerconnection=null;self.terminate();var ack={};ack.source="terminate";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};$(document).trigger("ack.jingle",[self.sid,error])},1e4);if(this.statsinterval!==null){window.clearInterval(this.statsinterval);this.statsinterval=null}};JingleSessionPC.prototype.addSource=function(elem){var self=this;if(!this.peerconnection.localDescription){logger.warn("addSource - localDescription not ready yet");setTimeout(function(){self.addSource(elem)},200);return}logger.log("addssrc",(new Date).getTime());logger.log("ice",this.peerconnection.iceConnectionState);this.readSsrcInfo(elem);var sdp=new SDP(this.peerconnection.remoteDescription.sdp);var mySdp=new SDP(this.peerconnection.localDescription.sdp);$(elem).each(function(idx,content){var name=$(content).attr("name");var lines="";$(content).find('ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]').each(function(){var semantics=this.getAttribute("semantics");var ssrcs=$(this).find(">source").map(function(){return this.getAttribute("ssrc")}).get();if(ssrcs.length){lines+="a=ssrc-group:"+semantics+" "+ssrcs.join(" ")+"\r\n"}});var tmp=$(content).find('source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]');tmp.each(function(){var ssrc=$(this).attr("ssrc");if(mySdp.containsSSRC(ssrc)){logger.warn("Got add stream request for my own ssrc: "+ssrc);return}if(sdp.containsSSRC(ssrc)){logger.warn("Source-add request for existing SSRC: "+ssrc);return}$(this).find(">parameter").each(function(){lines+="a=ssrc:"+ssrc+" "+$(this).attr("name");if($(this).attr("value")&&$(this).attr("value").length)lines+=":"+$(this).attr("value");lines+="\r\n"})});sdp.media.forEach(function(media,idx){if(!SDPUtil.find_line(media,"a=mid:"+name))return;sdp.media[idx]+=lines;if(!self.addssrc[idx])self.addssrc[idx]="";self.addssrc[idx]+=lines});sdp.raw=sdp.session+sdp.media.join("")});this.modifySourcesQueue.push(function(){logger.log("modify sources done");var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",mySdp,newSdp);self.notifyMySSRCUpdate(mySdp,newSdp)})};JingleSessionPC.prototype.removeSource=function(elem){var self=this;if(!this.peerconnection.localDescription){logger.warn("removeSource - localDescription not ready yet");setTimeout(function(){self.removeSource(elem)},200);return}logger.log("removessrc",(new Date).getTime());logger.log("ice",this.peerconnection.iceConnectionState);var sdp=new SDP(this.peerconnection.remoteDescription.sdp);var mySdp=new SDP(this.peerconnection.localDescription.sdp);$(elem).each(function(idx,content){var name=$(content).attr("name");var lines="";$(content).find('ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]').each(function(){var semantics=this.getAttribute("semantics");var ssrcs=$(this).find(">source").map(function(){return this.getAttribute("ssrc")}).get();if(ssrcs.length){lines+="a=ssrc-group:"+semantics+" "+ssrcs.join(" ")+"\r\n"}});var tmp=$(content).find('source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]');tmp.each(function(){var ssrc=$(this).attr("ssrc");if(mySdp.containsSSRC(ssrc)){logger.error("Got remove stream request for my own ssrc: "+ssrc);return}$(this).find(">parameter").each(function(){lines+="a=ssrc:"+ssrc+" "+$(this).attr("name");if($(this).attr("value")&&$(this).attr("value").length)lines+=":"+$(this).attr("value");lines+="\r\n"})});sdp.media.forEach(function(media,idx){if(!SDPUtil.find_line(media,"a=mid:"+name))return;sdp.media[idx]+=lines;if(!self.removessrc[idx])self.removessrc[idx]="";self.removessrc[idx]+=lines});sdp.raw=sdp.session+sdp.media.join("")});this.modifySourcesQueue.push(function(){logger.log("modify sources done");var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",mySdp,newSdp);self.notifyMySSRCUpdate(mySdp,newSdp)})};JingleSessionPC.prototype._modifySources=function(successCallback,queueCallback){var self=this;if(this.peerconnection.signalingState=="closed")return;if(!(this.addssrc.length||this.removessrc.length||this.pendingop!==null||this.switchstreams||this.addingStreams)){this.setLocalDescription();if(successCallback){successCallback()}queueCallback();return}this.switchstreams=false;this.addingStreams=false;var sdp=new SDP(this.peerconnection.remoteDescription.sdp);this.addssrc.forEach(function(lines,idx){sdp.media[idx]+=lines});this.addssrc=[];this.removessrc.forEach(function(lines,idx){lines=lines.split("\r\n");lines.pop();lines.forEach(function(line){sdp.media[idx]=sdp.media[idx].replace(line+"\r\n","")})});this.removessrc=[];sdp.raw=sdp.session+sdp.media.join("");this.peerconnection.setRemoteDescription(new RTCSessionDescription({type:"offer",sdp:sdp.raw}),function(){if(self.signalingState=="closed"){logger.error("createAnswer attempt on closed state");queueCallback("createAnswer attempt on closed state");return}self.peerconnection.createAnswer(function(modifiedAnswer){if(self.pendingop!==null){var sdp=new SDP(modifiedAnswer.sdp);if(sdp.media.length>1){switch(self.pendingop){case"mute":sdp.media[1]=sdp.media[1].replace("a=sendrecv","a=recvonly");break;case"unmute":sdp.media[1]=sdp.media[1].replace("a=recvonly","a=sendrecv");break}sdp.raw=sdp.session+sdp.media.join("");modifiedAnswer.sdp=sdp.raw}self.pendingop=null}self.peerconnection.setLocalDescription(modifiedAnswer,function(){self.setLocalDescription();if(successCallback){successCallback()}queueCallback()},function(error){logger.error("modified setLocalDescription failed",error);queueCallback(error)})},function(error){logger.error("modified answer failed",error);queueCallback(error)})},function(error){logger.error("modify failed",error);queueCallback(error)})};JingleSessionPC.prototype.switchStreams=function(newStream,oldStream,successCallback,isAudio){var self=this;var sender,newTrack;var senderKind=isAudio?"audio":"video";var oldSdp=null;if(self.peerconnection){if(self.peerconnection.localDescription){oldSdp=new SDP(self.peerconnection.localDescription.sdp)}if(RTCBrowserType.getBrowserType()===RTCBrowserType.RTC_BROWSER_FIREFOX){self.peerconnection.peerconnection.getSenders().some(function(s){if(s.track&&s.track.kind===senderKind){sender=s;return true}});if(sender){newTrack=isAudio?newStream.getAudioTracks()[0]:newStream.getVideoTracks()[0];sender.replaceTrack(newTrack).then(function(){console.log("Replaced a track, isAudio="+isAudio)}).catch(function(err){console.log("Failed to replace a track: "+err)})}else{console.log("Cannot switch tracks: no RTPSender.")}}else{self.peerconnection.removeStream(oldStream,true);if(newStream){self.peerconnection.addStream(newStream)}}}if(!oldSdp){successCallback();return}self.switchstreams=true;self.modifySourcesQueue.push(function(){logger.log("modify sources done");successCallback();var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",oldSdp,newSdp);self.notifyMySSRCUpdate(oldSdp,newSdp)})};JingleSessionPC.prototype.addStream=function(stream,callback){var self=this;var oldSdp=null;if(this.peerconnection){if(this.peerconnection.localDescription){oldSdp=new SDP(this.peerconnection.localDescription.sdp)}if(stream)this.peerconnection.addStream(stream)}if(!oldSdp||!this.peerconnection){callback();return}this.addingStreams=true;this.modifySourcesQueue.push(function(){logger.log("modify sources done");callback();var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",oldSdp,newSdp);self.notifyMySSRCUpdate(oldSdp,newSdp)})};JingleSessionPC.prototype.removeStream=function(stream,callback){var self=this;var oldSdp=null;if(this.peerconnection){if(this.peerconnection.localDescription){oldSdp=new SDP(this.peerconnection.localDescription.sdp)}if(RTCBrowserType.getBrowserType()===RTCBrowserType.RTC_BROWSER_FIREFOX){var sender=null;var track=null;if(stream.getAudioTracks()&&stream.getAudioTracks().length){track=stream.getAudioTracks()[0]}else if(stream.getVideoTracks()&&stream.getVideoTracks().length){track=stream.getVideoTracks()[0]}if(!track){console.log("Cannot switch tracks: no tracks.");return}self.peerconnection.peerconnection.getSenders().some(function(s){if(s.track===track){sender=s;return true}});if(sender){self.peerconnection.peerconnection.removeTrack(sender)}else{console.log("Cannot switch tracks: no RTPSender.")}}else if(stream)this.peerconnection.removeStream(stream)}if(!oldSdp||!this.peerconnection){callback();return}this.addingStreams=true;this.modifySourcesQueue.push(function(){logger.log("modify sources done");callback();var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",oldSdp,newSdp);self.notifyMySSRCUpdate(oldSdp,newSdp)})};JingleSessionPC.prototype.notifyMySSRCUpdate=function(old_sdp,new_sdp){if(!(this.peerconnection.signalingState=="stable"&&this.peerconnection.iceConnectionState=="connected")){logger.log("Too early to send updates");return}sdpDiffer=new SDPDiffer(new_sdp,old_sdp);var remove=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"source-remove",initiator:this.initiator,sid:this.sid});var removed=sdpDiffer.toJingle(remove);if(removed&&remove){logger.info("Sending source-remove",remove);this.connection.sendIQ(remove,function(res){logger.info("got remove result",res)},function(err){logger.error("got remove error",err)})}else{logger.log("removal not necessary")}var sdpDiffer=new SDPDiffer(old_sdp,new_sdp);var add=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"source-add",initiator:this.initiator,sid:this.sid});var added=sdpDiffer.toJingle(add);if(added&&add){logger.info("Sending source-add",add);this.connection.sendIQ(add,function(res){logger.info("got add result",res)},function(err){logger.error("got add error",err)})}else{logger.log("addition not necessary")}};JingleSessionPC.prototype.setVideoMute=function(mute,callback,options){var byUser;if(options){byUser=options.byUser;if(typeof byUser==="undefined"){byUser=true}}else{byUser=true}if(byUser){this.videoMuteByUser=mute}else if(this.videoMuteByUser){return}this.hardMuteVideo(mute);var self=this;var oldSdp=null;if(self.peerconnection){if(self.peerconnection.localDescription){oldSdp=new SDP(self.peerconnection.localDescription.sdp)}}this.modifySourcesQueue.push(function(){logger.log("modify sources done");callback(mute);var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",oldSdp,newSdp);self.notifyMySSRCUpdate(oldSdp,newSdp)})};JingleSessionPC.prototype.hardMuteVideo=function(muted){this.pendingop=muted?"mute":"unmute"};JingleSessionPC.prototype.sendMute=function(muted,content){var info=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-info",initiator:this.initiator,sid:this.sid});info.c(muted?"mute":"unmute",{xmlns:"urn:xmpp:jingle:apps:rtp:info:1"});info.attrs({creator:this.me==this.initiator?"creator":"responder"});if(content){info.attrs({name:content})}this.connection.send(info)};JingleSessionPC.prototype.sendRinging=function(){var info=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-info",initiator:this.initiator,sid:this.sid});info.c("ringing",{xmlns:"urn:xmpp:jingle:apps:rtp:info:1"});this.connection.send(info)};JingleSessionPC.prototype.getStats=function(interval){var self=this;var recv={audio:0,video:0};var lost={audio:0,video:0};var lastrecv={audio:0,video:0};var lastlost={audio:0,video:0};var loss={audio:0,video:0};var delta={audio:0,video:0};this.statsinterval=window.setInterval(function(){if(self&&self.peerconnection&&self.peerconnection.getStats){self.peerconnection.getStats(function(stats){var results=stats.result();for(var i=0;i<results.length;++i){if(results[i].type=="ssrc"){var packetsrecv=results[i].stat("packetsReceived");var packetslost=results[i].stat("packetsLost");if(packetsrecv&&packetslost){packetsrecv=parseInt(packetsrecv,10);packetslost=parseInt(packetslost,10);if(results[i].stat("googFrameRateReceived")){lastlost.video=lost.video;lastrecv.video=recv.video;recv.video=packetsrecv;lost.video=packetslost}else{lastlost.audio=lost.audio;lastrecv.audio=recv.audio;recv.audio=packetsrecv;lost.audio=packetslost}}}}delta.audio=recv.audio-lastrecv.audio;delta.video=recv.video-lastrecv.video;loss.audio=delta.audio>0?Math.ceil(100*(lost.audio-lastlost.audio)/delta.audio):0;loss.video=delta.video>0?Math.ceil(100*(lost.video-lastlost.video)/delta.video):0;$(document).trigger("packetloss.jingle",[self.sid,loss])})}},interval||3e3);return this.statsinterval};JingleSessionPC.onJingleError=function(session,error){logger.error("Jingle error",error)};JingleSessionPC.onJingleFatalError=function(session,error){this.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED);this.room.eventEmitter.emit(XMPPEvents.JINGLE_FATAL_ERROR,session,error)};JingleSessionPC.prototype.setLocalDescription=function(){var self=this;var newssrcs=[];if(!this.peerconnection.localDescription)return;var session=transform.parse(this.peerconnection.localDescription.sdp);var i;session.media.forEach(function(media){if(media.ssrcs&&media.ssrcs.length>0){media.ssrcs.forEach(function(ssrc){if(ssrc.attribute!=="cname"){return}newssrcs.push({ssrc:ssrc.id,type:media.type});self.localStreamsSSRC[media.type]=ssrc.id})}});logger.log("new ssrcs",newssrcs);if(newssrcs.length>0){for(i=0;i<newssrcs.length;i++){var ssrc=newssrcs[i].ssrc;var myJid=self.me;self.ssrcOwners[ssrc]=myJid}}};JingleSessionPC.prototype.sendKeyframe=function(){var pc=this.peerconnection;logger.log("sendkeyframe",pc.iceConnectionState);if(pc.iceConnectionState!=="connected")return;var self=this;pc.setRemoteDescription(pc.remoteDescription,function(){pc.createAnswer(function(modifiedAnswer){pc.setLocalDescription(modifiedAnswer,function(){},function(error){logger.log("triggerKeyframe setLocalDescription failed",error);self.room.eventEmitter.emit(XMPPEvents.SET_LOCAL_DESCRIPTION_ERROR)})},function(error){logger.log("triggerKeyframe createAnswer failed",error);self.room.eventEmitter.emit(XMPPEvents.CREATE_ANSWER_ERROR)})},function(error){logger.log("triggerKeyframe setRemoteDescription failed",error);eventEmitter.emit(XMPPEvents.SET_REMOTE_DESCRIPTION_ERROR)})};JingleSessionPC.prototype.remoteStreamAdded=function(data,times){var self=this;var thessrc;var streamId=RTC.getStreamID(data.stream);if(!streamId){logger.error("No stream ID for",data.stream)}else if(streamId&&streamId.indexOf("mixedmslabel")===-1){var ssrclines=this.peerconnection.remoteDescription?SDPUtil.find_lines(this.peerconnection.remoteDescription.sdp,"a=ssrc:"):[];ssrclines=ssrclines.filter(function(line){if(RTCBrowserType.isTemasysPluginUsed()){return line.indexOf("mslabel:"+streamId)!==-1}else{return line.indexOf("msid:"+streamId)!==-1}});if(ssrclines.length){thessrc=ssrclines[0].substring(7).split(" ")[0];if(!self.ssrcOwners[thessrc]){logger.error("No SSRC owner known for: "+thessrc);return}data.peerjid=self.ssrcOwners[thessrc];logger.log("associated jid",self.ssrcOwners[thessrc])}else{logger.error("No SSRC lines for ",streamId)}}this.room.remoteStreamAdded(data,this.sid,thessrc);var isVideo=data.stream.getVideoTracks().length>0;if(isVideo&&data.peerjid&&this.peerjid===data.peerjid&&data.stream.getVideoTracks().length===0&&RTC.localVideo.getTracks().length>0){window.setTimeout(function(){self.sendKeyframe()},3e3)}};JingleSessionPC.prototype.getIceConnectionState=function(){return this.peerconnection.iceConnectionState};module.exports=JingleSessionPC}).call(this,"/modules/xmpp/JingleSessionPC.js")},{"../../service/xmpp/XMPPEvents":142,"../RTC/RTC":16,"../RTC/RTCBrowserType":17,"./JingleSession":29,"./SDP":31,"./SDPDiffer":32,"./SDPUtil":33,"./TraceablePeerConnection":34,async:44,"jitsi-meet-logger":49,"sdp-transform":82}],31:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var SDPUtil=require("./SDPUtil");function SDP(sdp){this.removeTcpCandidates=false;this.removeUdpCandidates=false;this.media=sdp.split("\r\nm=");for(var i=1;i<this.media.length;i++){this.media[i]="m="+this.media[i];if(i!=this.media.length-1){this.media[i]+="\r\n"}}this.session=this.media.shift()+"\r\n";this.raw=this.session+this.media.join("")}SDP.prototype.getMediaSsrcMap=function(){var self=this;var media_ssrcs={};var tmp;for(var mediaindex=0;mediaindex<self.media.length;mediaindex++){tmp=SDPUtil.find_lines(self.media[mediaindex],"a=ssrc:");var mid=SDPUtil.parse_mid(SDPUtil.find_line(self.media[mediaindex],"a=mid:"));var media={mediaindex:mediaindex,mid:mid,ssrcs:{},ssrcGroups:[]};media_ssrcs[mediaindex]=media;tmp.forEach(function(line){var linessrc=line.substring(7).split(" ")[0];if(!media.ssrcs[linessrc]){media.ssrcs[linessrc]={ssrc:linessrc,lines:[]}}media.ssrcs[linessrc].lines.push(line)});tmp=SDPUtil.find_lines(self.media[mediaindex],"a=ssrc-group:");tmp.forEach(function(line){var idx=line.indexOf(" ");var semantics=line.substr(0,idx).substr(13);var ssrcs=line.substr(14+semantics.length).split(" ");if(ssrcs.length){media.ssrcGroups.push({semantics:semantics,ssrcs:ssrcs})}})}return media_ssrcs};SDP.prototype.containsSSRC=function(ssrc){var medias=this.getMediaSsrcMap();var result=false;Object.keys(medias).forEach(function(mediaindex){if(result)return;if(medias[mediaindex].ssrcs[ssrc]){result=true}});return result};SDP.prototype.mangle=function(){var i,j,mline,lines,rtpmap,newdesc;for(i=0;i<this.media.length;i++){lines=this.media[i].split("\r\n");lines.pop();mline=SDPUtil.parse_mline(lines.shift());if(mline.media!="audio")continue;newdesc="";mline.fmt.length=0;for(j=0;j<lines.length;j++){if(lines[j].substr(0,9)=="a=rtpmap:"){rtpmap=SDPUtil.parse_rtpmap(lines[j]);if(rtpmap.name=="CN"||rtpmap.name=="ISAC")continue;mline.fmt.push(rtpmap.id);newdesc+=lines[j]+"\r\n"}else{newdesc+=lines[j]+"\r\n"}}this.media[i]=SDPUtil.build_mline(mline)+"\r\n";this.media[i]+=newdesc}this.raw=this.session+this.media.join("")};SDP.prototype.removeSessionLines=function(prefix){var self=this;var lines=SDPUtil.find_lines(this.session,prefix);lines.forEach(function(line){self.session=self.session.replace(line+"\r\n","")});this.raw=this.session+this.media.join("");return lines};SDP.prototype.removeMediaLines=function(mediaindex,prefix){var self=this;var lines=SDPUtil.find_lines(this.media[mediaindex],prefix);lines.forEach(function(line){self.media[mediaindex]=self.media[mediaindex].replace(line+"\r\n","")});this.raw=this.session+this.media.join("");return lines};SDP.prototype.toJingle=function(elem,thecreator){var self=this;var i,j,k,mline,ssrc,rtpmap,tmp,lines;if(SDPUtil.find_line(this.session,"a=group:")){lines=SDPUtil.find_lines(this.session,"a=group:");for(i=0;i<lines.length;i++){tmp=lines[i].split(" ");var semantics=tmp.shift().substr(8);elem.c("group",{xmlns:"urn:xmpp:jingle:apps:grouping:0",semantics:semantics});for(j=0;j<tmp.length;j++){elem.c("content",{name:tmp[j]}).up()}elem.up()}}for(i=0;i<this.media.length;i++){mline=SDPUtil.parse_mline(this.media[i].split("\r\n")[0]);if(!(mline.media==="audio"||mline.media==="video"||mline.media==="application")){continue}if(SDPUtil.find_line(this.media[i],"a=ssrc:")){ssrc=SDPUtil.find_line(this.media[i],"a=ssrc:").substring(7).split(" ")[0]}else{ssrc=false}elem.c("content",{creator:thecreator,name:mline.media});if(SDPUtil.find_line(this.media[i],"a=mid:")){var mid=SDPUtil.parse_mid(SDPUtil.find_line(this.media[i],"a=mid:"));elem.attrs({name:mid})}if(SDPUtil.find_line(this.media[i],"a=rtpmap:").length){elem.c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:mline.media});if(ssrc){elem.attrs({ssrc:ssrc})}for(j=0;j<mline.fmt.length;j++){rtpmap=SDPUtil.find_line(this.media[i],"a=rtpmap:"+mline.fmt[j]);elem.c("payload-type",SDPUtil.parse_rtpmap(rtpmap));if(SDPUtil.find_line(this.media[i],"a=fmtp:"+mline.fmt[j])){tmp=SDPUtil.parse_fmtp(SDPUtil.find_line(this.media[i],"a=fmtp:"+mline.fmt[j]));for(k=0;k<tmp.length;k++){elem.c("parameter",tmp[k]).up()}}this.rtcpFbToJingle(i,elem,mline.fmt[j]);elem.up()}if(SDPUtil.find_line(this.media[i],"a=crypto:",this.session)){elem.c("encryption",{required:1});var crypto=SDPUtil.find_lines(this.media[i],"a=crypto:",this.session);crypto.forEach(function(line){elem.c("crypto",SDPUtil.parse_crypto(line)).up()});elem.up()}if(ssrc){elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});var ssrclines=SDPUtil.find_lines(this.media[i],"a=ssrc:");if(ssrclines.length>0){ssrclines.forEach(function(line){var idx=line.indexOf(" ");var linessrc=line.substr(0,idx).substr(7);if(linessrc!=ssrc){elem.up();ssrc=linessrc;elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"})}var kv=line.substr(idx+1);elem.c("parameter");if(kv.indexOf(":")==-1){elem.attrs({name:kv})}else{var k=kv.split(":",2)[0];elem.attrs({name:k});var v=kv.split(":",2)[1];v=SDPUtil.filter_special_chars(v);elem.attrs({value:v})}elem.up()})}else{elem.up();elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});elem.c("parameter");elem.attrs({name:"cname",value:Math.random().toString(36).substring(7)});elem.up();var msid=null;if(mline.media=="audio"){msid=APP.RTC.localAudio._getId()}else{msid=APP.RTC.localVideo._getId()}if(msid!=null){msid=SDPUtil.filter_special_chars(msid);elem.c("parameter");elem.attrs({name:"msid",value:msid});elem.up();elem.c("parameter");elem.attrs({name:"mslabel",value:msid});elem.up();elem.c("parameter");elem.attrs({name:"label",value:msid});elem.up()}}elem.up();var ssrc_group_lines=SDPUtil.find_lines(this.media[i],"a=ssrc-group:");ssrc_group_lines.forEach(function(line){var idx=line.indexOf(" ");var semantics=line.substr(0,idx).substr(13);var ssrcs=line.substr(14+semantics.length).split(" ");if(ssrcs.length){elem.c("ssrc-group",{semantics:semantics,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});ssrcs.forEach(function(ssrc){elem.c("source",{ssrc:ssrc}).up()});elem.up()}})}if(SDPUtil.find_line(this.media[i],"a=rtcp-mux")){elem.c("rtcp-mux").up()}this.rtcpFbToJingle(i,elem,"*");if(SDPUtil.find_line(this.media[i],"a=extmap:")){lines=SDPUtil.find_lines(this.media[i],"a=extmap:");for(j=0;j<lines.length;j++){tmp=SDPUtil.parse_extmap(lines[j]);elem.c("rtp-hdrext",{xmlns:"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",uri:tmp.uri,id:tmp.value});if(tmp.hasOwnProperty("direction")){switch(tmp.direction){case"sendonly":elem.attrs({senders:"responder"});break;case"recvonly":elem.attrs({senders:"initiator"});break;case"sendrecv":elem.attrs({senders:"both"});break;case"inactive":elem.attrs({senders:"none"});break}}elem.up()}}elem.up()}this.transportToJingle(i,elem);if(SDPUtil.find_line(this.media[i],"a=sendrecv",this.session)){elem.attrs({senders:"both"})}else if(SDPUtil.find_line(this.media[i],"a=sendonly",this.session)){elem.attrs({senders:"initiator"})}else if(SDPUtil.find_line(this.media[i],"a=recvonly",this.session)){elem.attrs({senders:"responder"})}else if(SDPUtil.find_line(this.media[i],"a=inactive",this.session)){elem.attrs({senders:"none"})}if(mline.port=="0"){elem.attrs({senders:"rejected"})}elem.up()}elem.up();return elem};SDP.prototype.transportToJingle=function(mediaindex,elem){var tmp,sctpmap,sctpAttrs,fingerprints;var self=this;elem.c("transport");if(SDPUtil.find_line(this.media[mediaindex],"a=sctpmap:").length){sctpmap=SDPUtil.find_line(this.media[mediaindex],"a=sctpmap:",self.session);if(sctpmap){sctpAttrs=SDPUtil.parse_sctpmap(sctpmap);elem.c("sctpmap",{xmlns:"urn:xmpp:jingle:transports:dtls-sctp:1",number:sctpAttrs[0],protocol:sctpAttrs[1]});if(sctpAttrs.length>2)elem.attrs({streams:sctpAttrs[2]});elem.up()}}fingerprints=SDPUtil.find_lines(this.media[mediaindex],"a=fingerprint:",this.session);fingerprints.forEach(function(line){tmp=SDPUtil.parse_fingerprint(line);tmp.xmlns="urn:xmpp:jingle:apps:dtls:0";elem.c("fingerprint").t(tmp.fingerprint);delete tmp.fingerprint;line=SDPUtil.find_line(self.media[mediaindex],"a=setup:",self.session);if(line){tmp.setup=line.substr(8)}elem.attrs(tmp);elem.up()});tmp=SDPUtil.iceparams(this.media[mediaindex],this.session);if(tmp){tmp.xmlns="urn:xmpp:jingle:transports:ice-udp:1";elem.attrs(tmp);if(SDPUtil.find_line(this.media[mediaindex],"a=candidate:",this.session)){var lines=SDPUtil.find_lines(this.media[mediaindex],"a=candidate:",this.session);lines.forEach(function(line){var candidate=SDPUtil.candidateToJingle(line);var protocol=candidate&&typeof candidate.protocol==="string"?candidate.protocol.toLowerCase():"";if(self.removeTcpCandidates&&protocol==="tcp"||self.removeUdpCandidates&&protocol==="udp"){return}elem.c("candidate",candidate).up()})}}elem.up()};SDP.prototype.rtcpFbToJingle=function(mediaindex,elem,payloadtype){var lines=SDPUtil.find_lines(this.media[mediaindex],"a=rtcp-fb:"+payloadtype);lines.forEach(function(line){var tmp=SDPUtil.parse_rtcpfb(line);if(tmp.type=="trr-int"){elem.c("rtcp-fb-trr-int",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",value:tmp.params[0]});elem.up()}else{elem.c("rtcp-fb",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",type:tmp.type});if(tmp.params.length>0){elem.attrs({subtype:tmp.params[0]})}elem.up()}})};SDP.prototype.rtcpFbFromJingle=function(elem,payloadtype){var media="";var tmp=elem.find('>rtcp-fb-trr-int[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]');if(tmp.length){media+="a=rtcp-fb:"+"*"+" "+"trr-int"+" ";if(tmp.attr("value")){media+=tmp.attr("value")}else{media+="0"}media+="\r\n"}tmp=elem.find('>rtcp-fb[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]');tmp.each(function(){media+="a=rtcp-fb:"+payloadtype+" "+$(this).attr("type");if($(this).attr("subtype")){media+=" "+$(this).attr("subtype")}media+="\r\n"});return media};SDP.prototype.fromJingle=function(jingle){var self=this;this.raw="v=0\r\n"+"o=- 1923518516 2 IN IP4 0.0.0.0\r\n"+"s=-\r\n"+"t=0 0\r\n";if($(jingle).find('>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]').length){$(jingle).find('>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]').each(function(idx,group){var contents=$(group).find(">content").map(function(idx,content){return content.getAttribute("name");
- }).get();if(contents.length>0){self.raw+="a=group:"+(group.getAttribute("semantics")||group.getAttribute("type"))+" "+contents.join(" ")+"\r\n"}})}this.session=this.raw;jingle.find(">content").each(function(){var m=self.jingle2media($(this));self.media.push(m)});this.raw=this.session+this.media.join("")};SDP.prototype.jingle2media=function(content){var media="",desc=content.find("description"),ssrc=desc.attr("ssrc"),self=this,tmp;var sctp=content.find('>transport>sctpmap[xmlns="urn:xmpp:jingle:transports:dtls-sctp:1"]');tmp={media:desc.attr("media")};tmp.port="1";if(content.attr("senders")=="rejected"){tmp.port="0"}if(content.find(">transport>fingerprint").length||desc.find("encryption").length){if(sctp.length)tmp.proto="DTLS/SCTP";else tmp.proto="RTP/SAVPF"}else{tmp.proto="RTP/AVPF"}if(!sctp.length){tmp.fmt=desc.find("payload-type").map(function(){return this.getAttribute("id")}).get();media+=SDPUtil.build_mline(tmp)+"\r\n"}else{media+="m=application 1 DTLS/SCTP "+sctp.attr("number")+"\r\n";media+="a=sctpmap:"+sctp.attr("number")+" "+sctp.attr("protocol");var streamCount=sctp.attr("streams");if(streamCount)media+=" "+streamCount+"\r\n";else media+="\r\n"}media+="c=IN IP4 0.0.0.0\r\n";if(!sctp.length)media+="a=rtcp:1 IN IP4 0.0.0.0\r\n";tmp=content.find('>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]');if(tmp.length){if(tmp.attr("ufrag")){media+=SDPUtil.build_iceufrag(tmp.attr("ufrag"))+"\r\n"}if(tmp.attr("pwd")){media+=SDPUtil.build_icepwd(tmp.attr("pwd"))+"\r\n"}tmp.find(">fingerprint").each(function(){media+="a=fingerprint:"+this.getAttribute("hash");media+=" "+$(this).text();media+="\r\n";if(this.getAttribute("setup")){media+="a=setup:"+this.getAttribute("setup")+"\r\n"}})}switch(content.attr("senders")){case"initiator":media+="a=sendonly\r\n";break;case"responder":media+="a=recvonly\r\n";break;case"none":media+="a=inactive\r\n";break;case"both":media+="a=sendrecv\r\n";break}media+="a=mid:"+content.attr("name")+"\r\n";if(desc.find("rtcp-mux").length){media+="a=rtcp-mux\r\n"}if(desc.find("encryption").length){desc.find("encryption>crypto").each(function(){media+="a=crypto:"+this.getAttribute("tag");media+=" "+this.getAttribute("crypto-suite");media+=" "+this.getAttribute("key-params");if(this.getAttribute("session-params")){media+=" "+this.getAttribute("session-params")}media+="\r\n"})}desc.find("payload-type").each(function(){media+=SDPUtil.build_rtpmap(this)+"\r\n";if($(this).find(">parameter").length){media+="a=fmtp:"+this.getAttribute("id")+" ";media+=$(this).find("parameter").map(function(){return(this.getAttribute("name")?this.getAttribute("name")+"=":"")+this.getAttribute("value")}).get().join("; ");media+="\r\n"}media+=self.rtcpFbFromJingle($(this),this.getAttribute("id"))});media+=self.rtcpFbFromJingle(desc,"*");tmp=desc.find('>rtp-hdrext[xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"]');tmp.each(function(){media+="a=extmap:"+this.getAttribute("id")+" "+this.getAttribute("uri")+"\r\n"});content.find('>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]>candidate').each(function(){var protocol=this.getAttribute("protocol");protocol=typeof protocol==="string"?protocol.toLowerCase():"";if(self.removeTcpCandidates&&protocol==="tcp"||self.removeUdpCandidates&&protocol==="udp"){return}media+=SDPUtil.candidateFromJingle(this)});content.find('description>ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]').each(function(){var semantics=this.getAttribute("semantics");var ssrcs=$(this).find(">source").map(function(){return this.getAttribute("ssrc")}).get();if(ssrcs.length){media+="a=ssrc-group:"+semantics+" "+ssrcs.join(" ")+"\r\n"}});tmp=content.find('description>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]');tmp.each(function(){var ssrc=this.getAttribute("ssrc");$(this).find(">parameter").each(function(){var name=this.getAttribute("name");var value=this.getAttribute("value");value=SDPUtil.filter_special_chars(value);media+="a=ssrc:"+ssrc+" "+name;if(value&&value.length)media+=":"+value;media+="\r\n"})});return media};module.exports=SDP}).call(this,"/modules/xmpp/SDP.js")},{"./SDPUtil":33,"jitsi-meet-logger":49}],32:[function(require,module,exports){var SDPUtil=require("./SDPUtil");function SDPDiffer(mySDP,otherSDP){this.mySDP=mySDP;this.otherSDP=otherSDP}SDPDiffer.prototype.getNewMedia=function(){function arrayEquals(array){if(!array)return false;if(this.length!=array.length)return false;for(var i=0,l=this.length;i<l;i++){if(this[i]instanceof Array&&array[i]instanceof Array){if(!this[i].equals(array[i]))return false}else if(this[i]!=array[i]){return false}}return true}var myMedias=this.mySDP.getMediaSsrcMap();var othersMedias=this.otherSDP.getMediaSsrcMap();var newMedia={};Object.keys(othersMedias).forEach(function(othersMediaIdx){var myMedia=myMedias[othersMediaIdx];var othersMedia=othersMedias[othersMediaIdx];if(!myMedia&&othersMedia){newMedia[othersMediaIdx]=othersMedia;return}Object.keys(othersMedia.ssrcs).forEach(function(ssrc){if(Object.keys(myMedia.ssrcs).indexOf(ssrc)===-1){if(!newMedia[othersMediaIdx]){newMedia[othersMediaIdx]={mediaindex:othersMedia.mediaindex,mid:othersMedia.mid,ssrcs:{},ssrcGroups:[]}}newMedia[othersMediaIdx].ssrcs[ssrc]=othersMedia.ssrcs[ssrc]}});othersMedia.ssrcGroups.forEach(function(otherSsrcGroup){var matched=false;for(var i=0;i<myMedia.ssrcGroups.length;i++){var mySsrcGroup=myMedia.ssrcGroups[i];if(otherSsrcGroup.semantics==mySsrcGroup.semantics&&arrayEquals.apply(otherSsrcGroup.ssrcs,[mySsrcGroup.ssrcs])){matched=true;break}}if(!matched){if(!newMedia[othersMediaIdx]){newMedia[othersMediaIdx]={mediaindex:othersMedia.mediaindex,mid:othersMedia.mid,ssrcs:{},ssrcGroups:[]}}newMedia[othersMediaIdx].ssrcGroups.push(otherSsrcGroup)}})});return newMedia};SDPDiffer.prototype.toJingle=function(modify){var sdpMediaSsrcs=this.getNewMedia();var modified=false;Object.keys(sdpMediaSsrcs).forEach(function(mediaindex){modified=true;var media=sdpMediaSsrcs[mediaindex];modify.c("content",{name:media.mid});modify.c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:media.mid});Object.keys(media.ssrcs).forEach(function(ssrcNum){var mediaSsrc=media.ssrcs[ssrcNum];modify.c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});modify.attrs({ssrc:mediaSsrc.ssrc});mediaSsrc.lines.forEach(function(line){var idx=line.indexOf(" ");var kv=line.substr(idx+1);modify.c("parameter");if(kv.indexOf(":")==-1){modify.attrs({name:kv})}else{var nv=kv.split(":",2);var name=nv[0];var value=SDPUtil.filter_special_chars(nv[1]);modify.attrs({name:name});modify.attrs({value:value})}modify.up()});modify.up()});media.ssrcGroups.forEach(function(ssrcGroup){if(ssrcGroup.ssrcs.length){modify.c("ssrc-group",{semantics:ssrcGroup.semantics,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});ssrcGroup.ssrcs.forEach(function(ssrc){modify.c("source",{ssrc:ssrc}).up()});modify.up()}});modify.up();modify.up()});return modified};module.exports=SDPDiffer},{"./SDPUtil":33}],33:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("../RTC/RTCBrowserType");SDPUtil={filter_special_chars:function(text){return text.replace(/[\\\/\{,\}\+]/g,"")},iceparams:function(mediadesc,sessiondesc){var data=null;if(SDPUtil.find_line(mediadesc,"a=ice-ufrag:",sessiondesc)&&SDPUtil.find_line(mediadesc,"a=ice-pwd:",sessiondesc)){data={ufrag:SDPUtil.parse_iceufrag(SDPUtil.find_line(mediadesc,"a=ice-ufrag:",sessiondesc)),pwd:SDPUtil.parse_icepwd(SDPUtil.find_line(mediadesc,"a=ice-pwd:",sessiondesc))}}return data},parse_iceufrag:function(line){return line.substring(12)},build_iceufrag:function(frag){return"a=ice-ufrag:"+frag},parse_icepwd:function(line){return line.substring(10)},build_icepwd:function(pwd){return"a=ice-pwd:"+pwd},parse_mid:function(line){return line.substring(6)},parse_mline:function(line){var parts=line.substring(2).split(" "),data={};data.media=parts.shift();data.port=parts.shift();data.proto=parts.shift();if(parts[parts.length-1]===""){parts.pop()}data.fmt=parts;return data},build_mline:function(mline){return"m="+mline.media+" "+mline.port+" "+mline.proto+" "+mline.fmt.join(" ")},parse_rtpmap:function(line){var parts=line.substring(9).split(" "),data={};data.id=parts.shift();parts=parts[0].split("/");data.name=parts.shift();data.clockrate=parts.shift();data.channels=parts.length?parts.shift():"1";return data},parse_sctpmap:function(line){var parts=line.substring(10).split(" ");var sctpPort=parts[0];var protocol=parts[1];var streamCount=parts.length>2?parts[2]:null;return[sctpPort,protocol,streamCount]},build_rtpmap:function(el){var line="a=rtpmap:"+el.getAttribute("id")+" "+el.getAttribute("name")+"/"+el.getAttribute("clockrate");if(el.getAttribute("channels")&&el.getAttribute("channels")!="1"){line+="/"+el.getAttribute("channels")}return line},parse_crypto:function(line){var parts=line.substring(9).split(" "),data={};data.tag=parts.shift();data["crypto-suite"]=parts.shift();data["key-params"]=parts.shift();if(parts.length){data["session-params"]=parts.join(" ")}return data},parse_fingerprint:function(line){var parts=line.substring(14).split(" "),data={};data.hash=parts.shift();data.fingerprint=parts.shift();return data},parse_fmtp:function(line){var parts=line.split(" "),i,key,value,data=[];parts.shift();parts=parts.join(" ").split(";");for(i=0;i<parts.length;i++){key=parts[i].split("=")[0];while(key.length&&key[0]==" "){key=key.substring(1)}value=parts[i].split("=")[1];if(key&&value){data.push({name:key,value:value})}else if(key){data.push({name:"",value:key})}}return data},parse_icecandidate:function(line){var candidate={},elems=line.split(" ");candidate.foundation=elems[0].substring(12);candidate.component=elems[1];candidate.protocol=elems[2].toLowerCase();candidate.priority=elems[3];candidate.ip=elems[4];candidate.port=elems[5];candidate.type=elems[7];candidate.generation=0;for(var i=8;i<elems.length;i+=2){switch(elems[i]){case"raddr":candidate["rel-addr"]=elems[i+1];break;case"rport":candidate["rel-port"]=elems[i+1];break;case"generation":candidate.generation=elems[i+1];break;case"tcptype":candidate.tcptype=elems[i+1];break;default:logger.log('parse_icecandidate not translating "'+elems[i]+'" = "'+elems[i+1]+'"')}}candidate.network="1";candidate.id=Math.random().toString(36).substr(2,10);return candidate},build_icecandidate:function(cand){var line=["a=candidate:"+cand.foundation,cand.component,cand.protocol,cand.priority,cand.ip,cand.port,"typ",cand.type].join(" ");line+=" ";switch(cand.type){case"srflx":case"prflx":case"relay":if(cand.hasOwnAttribute("rel-addr")&&cand.hasOwnAttribute("rel-port")){line+="raddr";line+=" ";line+=cand["rel-addr"];line+=" ";line+="rport";line+=" ";line+=cand["rel-port"];line+=" "}break}if(cand.hasOwnAttribute("tcptype")){line+="tcptype";line+=" ";line+=cand.tcptype;line+=" "}line+="generation";line+=" ";line+=cand.hasOwnAttribute("generation")?cand.generation:"0";return line},parse_ssrc:function(desc){var lines=desc.split("\r\n"),data={};for(var i=0;i<lines.length;i++){if(lines[i].substring(0,7)=="a=ssrc:"){var idx=lines[i].indexOf(" ");data[lines[i].substr(idx+1).split(":",2)[0]]=lines[i].substr(idx+1).split(":",2)[1]}}return data},parse_rtcpfb:function(line){var parts=line.substr(10).split(" ");var data={};data.pt=parts.shift();data.type=parts.shift();data.params=parts;return data},parse_extmap:function(line){var parts=line.substr(9).split(" ");var data={};data.value=parts.shift();if(data.value.indexOf("/")!=-1){data.direction=data.value.substr(data.value.indexOf("/")+1);data.value=data.value.substr(0,data.value.indexOf("/"))}else{data.direction="both"}data.uri=parts.shift();data.params=parts;return data},find_line:function(haystack,needle,sessionpart){var lines=haystack.split("\r\n");for(var i=0;i<lines.length;i++){if(lines[i].substring(0,needle.length)==needle){return lines[i]}}if(!sessionpart){return false}lines=sessionpart.split("\r\n");for(var j=0;j<lines.length;j++){if(lines[j].substring(0,needle.length)==needle){return lines[j]}}return false},find_lines:function(haystack,needle,sessionpart){var lines=haystack.split("\r\n"),needles=[];for(var i=0;i<lines.length;i++){if(lines[i].substring(0,needle.length)==needle)needles.push(lines[i])}if(needles.length||!sessionpart){return needles}lines=sessionpart.split("\r\n");for(var j=0;j<lines.length;j++){if(lines[j].substring(0,needle.length)==needle){needles.push(lines[j])}}return needles},candidateToJingle:function(line){if(line.indexOf("candidate:")===0){line="a="+line}else if(line.substring(0,12)!="a=candidate:"){logger.log("parseCandidate called with a line that is not a candidate line");logger.log(line);return null}if(line.substring(line.length-2)=="\r\n")line=line.substring(0,line.length-2);var candidate={},elems=line.split(" "),i;if(elems[6]!="typ"){logger.log("did not find typ in the right place");logger.log(line);return null}candidate.foundation=elems[0].substring(12);candidate.component=elems[1];candidate.protocol=elems[2].toLowerCase();candidate.priority=elems[3];candidate.ip=elems[4];candidate.port=elems[5];candidate.type=elems[7];candidate.generation="0";for(i=8;i<elems.length;i+=2){switch(elems[i]){case"raddr":candidate["rel-addr"]=elems[i+1];break;case"rport":candidate["rel-port"]=elems[i+1];break;case"generation":candidate.generation=elems[i+1];break;case"tcptype":candidate.tcptype=elems[i+1];break;default:logger.log('not translating "'+elems[i]+'" = "'+elems[i+1]+'"')}}candidate.network="1";candidate.id=Math.random().toString(36).substr(2,10);return candidate},candidateFromJingle:function(cand){var line="a=candidate:";line+=cand.getAttribute("foundation");line+=" ";line+=cand.getAttribute("component");line+=" ";var protocol=cand.getAttribute("protocol");if(RTCBrowserType.isFirefox()&&protocol.toLowerCase()=="ssltcp"){protocol="tcp"}line+=protocol;line+=" ";line+=cand.getAttribute("priority");line+=" ";line+=cand.getAttribute("ip");line+=" ";line+=cand.getAttribute("port");line+=" ";line+="typ";line+=" "+cand.getAttribute("type");line+=" ";switch(cand.getAttribute("type")){case"srflx":case"prflx":case"relay":if(cand.getAttribute("rel-addr")&&cand.getAttribute("rel-port")){line+="raddr";line+=" ";line+=cand.getAttribute("rel-addr");line+=" ";line+="rport";line+=" ";line+=cand.getAttribute("rel-port");line+=" "}break}if(protocol.toLowerCase()=="tcp"){line+="tcptype";line+=" ";line+=cand.getAttribute("tcptype");line+=" "}line+="generation";line+=" ";line+=cand.getAttribute("generation")||"0";return line+"\r\n"}};module.exports=SDPUtil}).call(this,"/modules/xmpp/SDPUtil.js")},{"../RTC/RTCBrowserType":17,"jitsi-meet-logger":49}],34:[function(require,module,exports){(function(__filename){var RTC=require("../RTC/RTC");var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("../RTC/RTCBrowserType.js");var XMPPEvents=require("../../service/xmpp/XMPPEvents");function TraceablePeerConnection(ice_config,constraints,session){var self=this;this.session=session;var RTCPeerConnectionType=null;if(RTCBrowserType.isFirefox()){RTCPeerConnectionType=mozRTCPeerConnection}else if(RTCBrowserType.isTemasysPluginUsed()){RTCPeerConnectionType=RTCPeerConnection}else{RTCPeerConnectionType=webkitRTCPeerConnection}this.peerconnection=new RTCPeerConnectionType(ice_config,constraints);this.updateLog=[];this.stats={};this.statsinterval=null;this.maxstats=0;var Interop=require("sdp-interop").Interop;this.interop=new Interop;var Simulcast=require("sdp-simulcast");this.simulcast=new Simulcast({numOfLayers:3,explodeRemoteSimulcast:false});this.eventEmitter=this.session.room.eventEmitter;this.trace=function(what,info){self.updateLog.push({time:new Date,type:what,value:info||""})};this.onicecandidate=null;this.peerconnection.onicecandidate=function(event){if(!RTCBrowserType.isTemasysPluginUsed())self.trace("onicecandidate",JSON.stringify(event.candidate,null," "));if(self.onicecandidate!==null){self.onicecandidate(event)}};this.onaddstream=null;this.peerconnection.onaddstream=function(event){self.trace("onaddstream",event.stream.id);if(self.onaddstream!==null){self.onaddstream(event)}};this.onremovestream=null;this.peerconnection.onremovestream=function(event){self.trace("onremovestream",event.stream.id);if(self.onremovestream!==null){self.onremovestream(event)}};this.onsignalingstatechange=null;this.peerconnection.onsignalingstatechange=function(event){self.trace("onsignalingstatechange",self.signalingState);if(self.onsignalingstatechange!==null){self.onsignalingstatechange(event)}};this.oniceconnectionstatechange=null;this.peerconnection.oniceconnectionstatechange=function(event){self.trace("oniceconnectionstatechange",self.iceConnectionState);if(self.oniceconnectionstatechange!==null){self.oniceconnectionstatechange(event)}};this.onnegotiationneeded=null;this.peerconnection.onnegotiationneeded=function(event){self.trace("onnegotiationneeded");if(self.onnegotiationneeded!==null){self.onnegotiationneeded(event)}};self.ondatachannel=null;this.peerconnection.ondatachannel=function(event){self.trace("ondatachannel",event);if(self.ondatachannel!==null){self.ondatachannel(event)}};if(!RTCBrowserType.isFirefox()&&this.maxstats){this.statsinterval=window.setInterval(function(){self.peerconnection.getStats(function(stats){var results=stats.result();var now=new Date;for(var i=0;i<results.length;++i){results[i].names().forEach(function(name){var id=results[i].id+"-"+name;if(!self.stats[id]){self.stats[id]={startTime:now,endTime:now,values:[],times:[]}}self.stats[id].values.push(results[i].stat(name));self.stats[id].times.push(now.getTime());if(self.stats[id].values.length>self.maxstats){self.stats[id].values.shift();self.stats[id].times.shift()}self.stats[id].endTime=now})}})},1e3)}}var dumpSDP=function(description){if(typeof description==="undefined"||description==null){return""}return"type: "+description.type+"\r\n"+description.sdp};var insertRecvOnlySSRC=function(desc){if(typeof desc!=="object"||desc===null||typeof desc.sdp!=="string"){console.warn("An empty description was passed as an argument.");return desc}var transform=require("sdp-transform");var RandomUtil=require("../util/RandomUtil");var session=transform.parse(desc.sdp);if(!Array.isArray(session.media)){return}var modded=false;session.media.forEach(function(bLine){if(bLine.direction!="recvonly"){return}modded=true;if(!Array.isArray(bLine.ssrcs)||bLine.ssrcs.length===0){var ssrc=RandomUtil.randomInt(1,4294967295);bLine.ssrcs=[{id:ssrc,attribute:"cname",value:["recvonly-",ssrc].join("")}]}});return!modded?desc:new RTCSessionDescription({type:desc.type,sdp:transform.write(session)})};var normalizePlanB=function(desc){if(typeof desc!=="object"||desc===null||typeof desc.sdp!=="string"){logger.warn("An empty description was passed as an argument.");return desc}var transform=require("sdp-transform");var session=transform.parse(desc.sdp);if(typeof session!=="undefined"&&typeof session.media!=="undefined"&&Array.isArray(session.media)){session.media.forEach(function(mLine){var firstSsrcs=[];var newSsrcLines=[];if(typeof mLine.ssrcGroups!=="undefined"&&Array.isArray(mLine.ssrcGroups)){mLine.ssrcGroups.forEach(function(group){if(typeof group.semantics!=="undefined"&&group.semantics==="FID"){if(typeof group.ssrcs!=="undefined"){firstSsrcs.push(Number(group.ssrcs.split(" ")[0]))}}})}if(typeof mLine.ssrcs!=="undefined"&&Array.isArray(mLine.ssrcs)){var i;for(i=0;i<mLine.ssrcs.length;i++){if(typeof mLine.ssrcs[i]==="object"&&typeof mLine.ssrcs[i].id!=="undefined"&&!$.inArray(mLine.ssrcs[i].id,firstSsrcs)){newSsrcLines.push(mLine.ssrcs[i]);delete mLine.ssrcs[i]}}for(i=0;i<mLine.ssrcs.length;i++){if(typeof mLine.ssrcs[i]!=="undefined"){newSsrcLines.push(mLine.ssrcs[i])}}mLine.ssrcs=newSsrcLines}})}var resStr=transform.write(session);return new RTCSessionDescription({type:desc.type,sdp:resStr})};var getters={signalingState:function(){return this.peerconnection.signalingState},iceConnectionState:function(){return this.peerconnection.iceConnectionState},localDescription:function(){var desc=this.peerconnection.localDescription;this.trace("getLocalDescription::preTransform",dumpSDP(desc));if(RTCBrowserType.usesUnifiedPlan()){desc=this.interop.toPlanB(desc);this.trace("getLocalDescription::postTransform (Plan B)",dumpSDP(desc))}return desc},remoteDescription:function(){var desc=this.peerconnection.remoteDescription;this.trace("getRemoteDescription::preTransform",dumpSDP(desc));if(RTCBrowserType.usesUnifiedPlan()){desc=this.interop.toPlanB(desc);this.trace("getRemoteDescription::postTransform (Plan B)",dumpSDP(desc))}return desc}};Object.keys(getters).forEach(function(prop){Object.defineProperty(TraceablePeerConnection.prototype,prop,{get:getters[prop]})});TraceablePeerConnection.prototype.addStream=function(stream){this.trace("addStream",stream.id);try{this.peerconnection.addStream(stream)}catch(e){logger.error(e)}};TraceablePeerConnection.prototype.removeStream=function(stream,stopStreams){this.trace("removeStream",stream.id);if(stopStreams){RTC.stopMediaStream(stream)}try{if(this.peerconnection.removeStream)this.peerconnection.removeStream(stream)}catch(e){logger.error(e)}};TraceablePeerConnection.prototype.createDataChannel=function(label,opts){this.trace("createDataChannel",label,opts);return this.peerconnection.createDataChannel(label,opts)};TraceablePeerConnection.prototype.setLocalDescription=function(description,successCallback,failureCallback){this.trace("setLocalDescription::preTransform",dumpSDP(description));if(RTCBrowserType.usesUnifiedPlan()){description=this.interop.toUnifiedPlan(description);this.trace("setLocalDescription::postTransform (Plan A)",dumpSDP(description))}var self=this;this.peerconnection.setLocalDescription(description,function(){self.trace("setLocalDescriptionOnSuccess");successCallback()},function(err){self.trace("setLocalDescriptionOnFailure",err);self.eventEmitter.emit(XMPPEvents.SET_LOCAL_DESCRIPTION_FAILED,err,self.peerconnection);failureCallback(err)})};TraceablePeerConnection.prototype.setRemoteDescription=function(description,successCallback,failureCallback){this.trace("setRemoteDescription::preTransform",dumpSDP(description));description=this.simulcast.mungeRemoteDescription(description);this.trace("setRemoteDescription::postTransform (simulcast)",dumpSDP(description));if(RTCBrowserType.usesUnifiedPlan()){description=this.interop.toUnifiedPlan(description);this.trace("setRemoteDescription::postTransform (Plan A)",dumpSDP(description))}if(RTCBrowserType.usesPlanB()){description=normalizePlanB(description)}var self=this;this.peerconnection.setRemoteDescription(description,function(){self.trace("setRemoteDescriptionOnSuccess");successCallback()},function(err){self.trace("setRemoteDescriptionOnFailure",err);self.eventEmitter.emit(XMPPEvents.SET_REMOTE_DESCRIPTION_FAILED,err,self.peerconnection);failureCallback(err)})};TraceablePeerConnection.prototype.close=function(){this.trace("stop");if(this.statsinterval!==null){window.clearInterval(this.statsinterval);this.statsinterval=null}this.peerconnection.close()};TraceablePeerConnection.prototype.createOffer=function(successCallback,failureCallback,constraints){var self=this;this.trace("createOffer",JSON.stringify(constraints,null," "));this.peerconnection.createOffer(function(offer){self.trace("createOfferOnSuccess::preTransform",dumpSDP(offer));if(RTCBrowserType.usesUnifiedPlan()){offer=self.interop.toPlanB(offer);self.trace("createOfferOnSuccess::postTransform (Plan B)",dumpSDP(offer))}if(RTCBrowserType.isChrome()){offer=insertRecvOnlySSRC(offer);self.trace("createOfferOnSuccess::mungeLocalVideoSSRC",dumpSDP(offer))}if(!self.session.room.options.disableSimulcast&&self.simulcast.isSupported()){offer=self.simulcast.mungeLocalDescription(offer);self.trace("createOfferOnSuccess::postTransform (simulcast)",dumpSDP(offer))}successCallback(offer)},function(err){self.trace("createOfferOnFailure",err);self.eventEmitter.emit(XMPPEvents.CREATE_OFFER_FAILED,err,self.peerconnection);failureCallback(err)},constraints)};TraceablePeerConnection.prototype.createAnswer=function(successCallback,failureCallback,constraints){var self=this;this.trace("createAnswer",JSON.stringify(constraints,null," "));this.peerconnection.createAnswer(function(answer){self.trace("createAnswerOnSuccess::preTransform",dumpSDP(answer));if(RTCBrowserType.usesUnifiedPlan()){answer=self.interop.toPlanB(answer);self.trace("createAnswerOnSuccess::postTransform (Plan B)",dumpSDP(answer))}if(RTCBrowserType.isChrome()){answer=insertRecvOnlySSRC(answer);self.trace("createAnswerOnSuccess::mungeLocalVideoSSRC",dumpSDP(answer))}if(!self.session.room.options.disableSimulcast&&self.simulcast.isSupported()){answer=self.simulcast.mungeLocalDescription(answer);self.trace("createAnswerOnSuccess::postTransform (simulcast)",dumpSDP(answer))}successCallback(answer)},function(err){self.trace("createAnswerOnFailure",err);self.eventEmitter.emit(XMPPEvents.CREATE_ANSWER_FAILED,err,self.peerconnection);failureCallback(err)},constraints)};TraceablePeerConnection.prototype.addIceCandidate=function(candidate,successCallback,failureCallback){this.trace("addIceCandidate",JSON.stringify(candidate,null," "));this.peerconnection.addIceCandidate(candidate)};TraceablePeerConnection.prototype.getStats=function(callback,errback){if(RTCBrowserType.isFirefox()){if(!errback)errback=function(){};this.peerconnection.getStats(null,callback,errback)}else{this.peerconnection.getStats(callback)}};module.exports=TraceablePeerConnection}).call(this,"/modules/xmpp/TraceablePeerConnection.js")},{"../../service/xmpp/XMPPEvents":142,"../RTC/RTC":16,"../RTC/RTCBrowserType.js":17,"../util/RandomUtil":26,"jitsi-meet-logger":49,"sdp-interop":68,"sdp-simulcast":75,"sdp-transform":82}],35:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var XMPPEvents=require("../../service/xmpp/XMPPEvents");var AuthenticationEvents=require("../../service/authentication/AuthenticationEvents");function createExpBackoffTimer(step){var count=1;return function(reset){if(reset){count=1;return}var timeout=Math.pow(2,count-1);count+=1;return timeout*step}}function Moderator(roomName,xmpp,emitter,settings){this.roomName=roomName;this.xmppService=xmpp;this.getNextTimeout=createExpBackoffTimer(1e3);this.getNextErrorTimeout=createExpBackoffTimer(1e3);this.externalAuthEnabled=false;this.settings=settings;this.sipGatewayEnabled=this.xmppService.options.hosts&&this.xmppService.options.hosts.call_control!==undefined;this.eventEmitter=emitter;this.connection=this.xmppService.connection;this.focusUserJid;function listener(event){if(event.data&&event.data.sessionId){if(event.origin!==window.location.origin){logger.warn("Ignoring sessionId from different origin: "+event.origin);return}localStorage.setItem("sessionId",event.data.sessionId)}}if(window.addEventListener){window.addEventListener("message",listener,false)}else{window.attachEvent("onmessage",listener)}}Moderator.prototype.isExternalAuthEnabled=function(){return this.externalAuthEnabled};Moderator.prototype.isSipGatewayEnabled=function(){return this.sipGatewayEnabled};Moderator.prototype.onMucMemberLeft=function(jid){logger.info("Someone left is it focus ? "+jid);var resource=Strophe.getResourceFromJid(jid);if(resource==="focus"&&!this.xmppService.sessionTerminated){logger.info("Focus has left the room - leaving conference");this.eventEmitter.emit(XMPPEvents.FOCUS_LEFT)}};Moderator.prototype.setFocusUserJid=function(focusJid){if(!this.focusUserJid){this.focusUserJid=focusJid;logger.info("Focus jid set to: "+this.focusUserJid)}};Moderator.prototype.getFocusUserJid=function(){return this.focusUserJid};Moderator.prototype.getFocusComponent=function(){var focusComponent=this.xmppService.options.hosts.focus;if(!focusComponent){focusComponent="focus."+this.xmppService.options.hosts.domain}return focusComponent};Moderator.prototype.createConferenceIq=function(){var elem=$iq({to:this.getFocusComponent(),type:"set"});var sessionId=localStorage.getItem("sessionId");var machineUID=this.settings.getSettings().uid;logger.info("Session ID: "+sessionId+" machine UID: "+machineUID);elem.c("conference",{xmlns:"http://jitsi.org/protocol/focus",room:this.roomName,"machine-uid":machineUID});if(sessionId){elem.attrs({"session-id":sessionId})}if(this.xmppService.options.hosts.bridge!==undefined){elem.c("property",{name:"bridge",value:this.xmppService.options.hosts.bridge}).up()}if(this.xmppService.options.enforcedBridge!==undefined){elem.c("property",{name:"enforcedBridge",value:this.xmppService.options.enforcedBridge}).up()}if(this.xmppService.options.hosts.call_control!==undefined){elem.c("property",{name:"call_control",value:this.xmppService.options.hosts.call_control}).up()}if(this.xmppService.options.channelLastN!==undefined){elem.c("property",{name:"channelLastN",value:this.xmppService.options.channelLastN}).up()}if(this.xmppService.options.adaptiveLastN!==undefined){elem.c("property",{name:"adaptiveLastN",value:this.xmppService.options.adaptiveLastN}).up()}if(this.xmppService.options.adaptiveSimulcast!==undefined){elem.c("property",{name:"adaptiveSimulcast",value:this.xmppService.options.adaptiveSimulcast}).up()}if(this.xmppService.options.openSctp!==undefined){elem.c("property",{name:"openSctp",value:this.xmppService.options.openSctp}).up()}if(this.xmppService.options.startAudioMuted!==undefined){elem.c("property",{name:"startAudioMuted",value:this.xmppService.options.startAudioMuted}).up()}if(this.xmppService.options.startVideoMuted!==undefined){elem.c("property",{name:"startVideoMuted",value:this.xmppService.options.startVideoMuted}).up()}elem.c("property",{name:"simulcastMode",value:"rewriting"}).up();elem.up();return elem};Moderator.prototype.parseSessionId=function(resultIq){var sessionId=$(resultIq).find("conference").attr("session-id");if(sessionId){logger.info("Received sessionId: "+sessionId);localStorage.setItem("sessionId",sessionId)}};Moderator.prototype.parseConfigOptions=function(resultIq){this.setFocusUserJid($(resultIq).find("conference").attr("focusjid"));var authenticationEnabled=$(resultIq).find(">conference>property"+"[name='authentication'][value='true']").length>0;logger.info("Authentication enabled: "+authenticationEnabled);this.externalAuthEnabled=$(resultIq).find(">conference>property"+"[name='externalAuth'][value='true']").length>0;console.info("External authentication enabled: "+this.externalAuthEnabled);if(!this.externalAuthEnabled){this.parseSessionId(resultIq)}var authIdentity=$(resultIq).find(">conference").attr("identity");this.eventEmitter.emit(AuthenticationEvents.IDENTITY_UPDATED,authenticationEnabled,authIdentity);if($(resultIq).find(">conference>property"+"[name='sipGatewayEnabled'][value='true']").length){this.sipGatewayEnabled=true}logger.info("Sip gateway enabled: "+this.sipGatewayEnabled)};Moderator.prototype.allocateConferenceFocus=function(callback){this.setFocusUserJid(this.xmppService.options.focusUserJid);var iq=this.createConferenceIq();var self=this;this.connection.sendIQ(iq,function(result){self.parseConfigOptions(result);if("true"===$(result).find("conference").attr("ready")){self.getNextTimeout(true);self.getNextErrorTimeout(true);callback()}else{var waitMs=self.getNextTimeout();logger.info("Waiting for the focus... "+waitMs);self.getNextErrorTimeout(true);window.setTimeout(function(){self.allocateConferenceFocus(callback)},waitMs)}},function(error){var invalidSession=$(error).find(">error>session-invalid").length;if(invalidSession){logger.info("Session expired! - removing");localStorage.removeItem("sessionId")}if($(error).find(">error>graceful-shutdown").length){self.eventEmitter.emit(XMPPEvents.GRACEFUL_SHUTDOWN);return}var reservationErr=$(error).find(">error>reservation-error");if(reservationErr.length){var errorCode=reservationErr.attr("error-code");var errorMsg;if($(error).find(">error>text")){errorMsg=$(error).find(">error>text").text()}self.eventEmitter.emit(XMPPEvents.RESERVATION_ERROR,errorCode,errorMsg);return}if($(error).find(">error>not-authorized").length){
- logger.warn("Unauthorized to start the conference",error);var toDomain=Strophe.getDomainFromJid(error.getAttribute("to"));if(toDomain!==this.xmppService.options.hosts.anonymousdomain){self.externalAuthEnabled=true}self.eventEmitter.emit(XMPPEvents.AUTHENTICATION_REQUIRED,function(){self.allocateConferenceFocus(callback)});return}var waitMs=self.getNextErrorTimeout();logger.error("Focus error, retry after "+waitMs,error);var focusComponent=self.getFocusComponent();var retrySec=waitMs/1e3;if(!invalidSession){self.eventEmitter.emit(XMPPEvents.FOCUS_DISCONNECTED,focusComponent,retrySec)}self.getNextTimeout(true);window.setTimeout(function(){self.allocateConferenceFocus(callback)},waitMs)})};Moderator.prototype.authenticate=function(){var self=this;return new Promise(function(resolve,reject){self.connection.sendIQ(self.createConferenceIq(),function(result){self.parseSessionId(result);resolve()},function(error){var code=$(error).find(">error").attr("code");reject(error,code)})})};Moderator.prototype.getLoginUrl=function(urlCallback,failureCallback){var iq=$iq({to:this.getFocusComponent(),type:"get"});iq.c("login-url",{xmlns:"http://jitsi.org/protocol/focus",room:this.roomName,"machine-uid":this.settings.getSettings().uid});this.connection.sendIQ(iq,function(result){var url=$(result).find("login-url").attr("url");url=url=decodeURIComponent(url);if(url){logger.info("Got auth url: "+url);urlCallback(url)}else{logger.error("Failed to get auth url from the focus",result);failureCallback(result)}},function(error){logger.error("Get auth url error",error);failureCallback(error)})};Moderator.prototype.getPopupLoginUrl=function(urlCallback,failureCallback){var iq=$iq({to:this.getFocusComponent(),type:"get"});iq.c("login-url",{xmlns:"http://jitsi.org/protocol/focus",room:this.roomName,"machine-uid":this.settings.getSettings().uid,popup:true});this.connection.sendIQ(iq,function(result){var url=$(result).find("login-url").attr("url");url=url=decodeURIComponent(url);if(url){logger.info("Got POPUP auth url: "+url);urlCallback(url)}else{logger.error("Failed to get POPUP auth url from the focus",result);failureCallback(result)}},function(error){logger.error("Get POPUP auth url error",error);failureCallback(error)})};Moderator.prototype.logout=function(callback){var iq=$iq({to:this.getFocusComponent(),type:"set"});var sessionId=localStorage.getItem("sessionId");if(!sessionId){callback();return}iq.c("logout",{xmlns:"http://jitsi.org/protocol/focus","session-id":sessionId});this.connection.sendIQ(iq,function(result){var logoutUrl=$(result).find("logout").attr("logout-url");if(logoutUrl){logoutUrl=decodeURIComponent(logoutUrl)}logger.info("Log out OK, url: "+logoutUrl,result);localStorage.removeItem("sessionId");callback(logoutUrl)},function(error){logger.error("Logout error",error)})};module.exports=Moderator}).call(this,"/modules/xmpp/moderator.js")},{"../../service/authentication/AuthenticationEvents":138,"../../service/xmpp/XMPPEvents":142,"jitsi-meet-logger":49}],36:[function(require,module,exports){(function(__filename){var XMPPEvents=require("../../service/xmpp/XMPPEvents");var logger=require("jitsi-meet-logger").getLogger(__filename);function Recording(type,eventEmitter,connection,focusMucJid,jirecon,roomjid){this.eventEmitter=eventEmitter;this.connection=connection;this.state="off";this.focusMucJid=focusMucJid;this.jirecon=jirecon;this.url=null;this.type=type;this._isSupported=type===Recording.types.JIBRI||type===Recording.types.JIRECON&&!this.jirecon?false:true;this.jireconRid=null;this.roomjid=roomjid}Recording.types={COLIBRI:"colibri",JIRECON:"jirecon",JIBRI:"jibri"};Recording.prototype.handleJibriPresence=function(jibri){var attributes=jibri.attributes;if(!attributes)return;this._isSupported=attributes.status&&attributes.status!=="undefined";if(this._isSupported){this.url=attributes.url||null;this.state=attributes.status||"off"}this.eventEmitter.emit(XMPPEvents.RECORDING_STATE_CHANGED)};Recording.prototype.setRecordingJibri=function(state,callback,errCallback,options){if(state==this.state){errCallback(new Error("Invalid state!"))}options=options||{};var iq=$iq({to:this.focusMucJid,type:"set"}).c("jibri",{xmlns:"http://jitsi.org/protocol/jibri",action:state==="on"?"start":"stop",streamid:options.streamId,"follow-entity":options.followEntity}).up();logger.log("Set jibri recording: "+state,iq.nodeTree);console.log(iq.nodeTree);this.connection.sendIQ(iq,function(result){callback($(result).find("jibri").attr("state"),$(result).find("jibri").attr("url"))},function(error){logger.log("Failed to start recording, error: ",error);errCallback(error)})};Recording.prototype.setRecordingJirecon=function(state,callback,errCallback,options){if(state==this.state){errCallback(new Error("Invalid state!"))}var iq=$iq({to:this.jirecon,type:"set"}).c("recording",{xmlns:"http://jitsi.org/protocol/jirecon",action:state==="on"?"start":"stop",mucjid:this.roomjid});if(state==="off"){iq.attrs({rid:this.jireconRid})}console.log("Start recording");var self=this;this.connection.sendIQ(iq,function(result){self.jireconRid=$(result).find("recording").attr("rid");console.log("Recording "+(state==="on"?"started":"stopped")+"(jirecon)"+result);self.state=state;if(state==="off"){self.jireconRid=null}callback(state)},function(error){console.log("Failed to start recording, error: ",error);errCallback(error)})};Recording.prototype.setRecordingColibri=function(state,callback,errCallback,options){var elem=$iq({to:this.focusMucJid,type:"set"});elem.c("conference",{xmlns:"http://jitsi.org/protocol/colibri"});elem.c("recording",{state:state,token:options.token});var self=this;this.connection.sendIQ(elem,function(result){console.log('Set recording "',state,'". Result:',result);var recordingElem=$(result).find(">conference>recording");var newState=recordingElem.attr("state");self.state=newState;callback(newState);if(newState==="pending"){self.connection.addHandler(function(iq){var state=$(iq).find("recording").attr("state");if(state){self.state=newState;callback(state)}},"http://jitsi.org/protocol/colibri","iq",null,null,null)}},function(error){console.warn(error);errCallback(error)})};Recording.prototype.setRecording=function(state,callback,errCallback,options){switch(this.type){case Recording.types.JIRECON:this.setRecordingJirecon(state,callback,errCallback,options);break;case Recording.types.COLIBRI:this.setRecordingColibri(state,callback,errCallback,options);break;case Recording.types.JIBRI:this.setRecordingJibri(state,callback,errCallback,options);break;default:console.error("Unknown recording type!");return}};Recording.prototype.toggleRecording=function(options,statusChangeHandler){if(!options.token&&this.type===Recording.types.COLIBRI||!options.streamId&&this.type===Recording.types.JIBRI){statusChangeHandler("error",new Error("No token passed!"));logger.error("No token passed!");return}var oldState=this.state;var newState=oldState==="off"||!oldState?"on":"off";var self=this;this.setRecording(newState,function(state,url){logger.log("New recording state: ",state);if(state&&state!==oldState){self.state=state;self.url=url;statusChangeHandler(state)}else{statusChangeHandler("error",new Error("Status not changed!"))}},function(error){statusChangeHandler("error",error)},options)};Recording.prototype.isSupported=function(){return this._isSupported};Recording.prototype.getState=function(){return this.state};Recording.prototype.getURL=function(){return this.url};module.exports=Recording}).call(this,"/modules/xmpp/recording.js")},{"../../service/xmpp/XMPPEvents":142,"jitsi-meet-logger":49}],37:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var ChatRoom=require("./ChatRoom");module.exports=function(XMPP){Strophe.addConnectionPlugin("emuc",{connection:null,rooms:{},init:function(conn){this.connection=conn;this.connection.addHandler(this.onPresence.bind(this),null,"presence",null,null,null,null);this.connection.addHandler(this.onPresenceUnavailable.bind(this),null,"presence","unavailable",null);this.connection.addHandler(this.onPresenceError.bind(this),null,"presence","error",null);this.connection.addHandler(this.onMessage.bind(this),null,"message",null,null);this.connection.addHandler(this.onMute.bind(this),"http://jitsi.org/jitmeet/audio","iq","set",null,null)},createRoom:function(jid,password,options,settings){var roomJid=Strophe.getBareJidFromJid(jid);if(this.rooms[roomJid]){logger.error("You are already in the room!");return}this.rooms[roomJid]=new ChatRoom(this.connection,jid,password,XMPP,options,settings);return this.rooms[roomJid]},doLeave:function(jid){this.rooms[jid].doLeave();delete this.rooms[jid]},onPresence:function(pres){var from=pres.getAttribute("from");if(pres.getAttribute("type")){return true}var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;if($(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="201"]').length){room.createNonAnonymousRoom()}room.onPresence(pres);return true},onPresenceUnavailable:function(pres){var from=pres.getAttribute("from");var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.onPresenceUnavailable(pres,from);return true},onPresenceError:function(pres){var from=pres.getAttribute("from");var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.onPresenceError(pres,from);return true},onMessage:function(msg){var from=msg.getAttribute("from");var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.onMessage(msg,from);return true},setJingleSession:function(from,session){var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.setJingleSession(session)},onMute:function(iq){var from=iq.getAttribute("from");var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.onMute(iq);return true}})}}).call(this,"/modules/xmpp/strophe.emuc.js")},{"./ChatRoom":28,"jitsi-meet-logger":49}],38:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var JingleSession=require("./JingleSessionPC");var XMPPEvents=require("../../service/xmpp/XMPPEvents");var RTCBrowserType=require("../RTC/RTCBrowserType");module.exports=function(XMPP,eventEmitter){Strophe.addConnectionPlugin("jingle",{connection:null,sessions:{},jid2session:{},ice_config:{iceServers:[]},media_constraints:{mandatory:{OfferToReceiveAudio:true,OfferToReceiveVideo:true}},init:function(conn){this.connection=conn;if(this.connection.disco){this.connection.disco.addFeature("urn:xmpp:jingle:1");this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:1");this.connection.disco.addFeature("urn:xmpp:jingle:transports:ice-udp:1");this.connection.disco.addFeature("urn:xmpp:jingle:apps:dtls:0");this.connection.disco.addFeature("urn:xmpp:jingle:transports:dtls-sctp:1");this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:audio");this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:video");if(RTCBrowserType.isChrome()||RTCBrowserType.isOpera()||RTCBrowserType.isTemasysPluginUsed()){this.connection.disco.addFeature("urn:ietf:rfc:4588")}this.connection.disco.addFeature("urn:ietf:rfc:5761");this.connection.disco.addFeature("urn:ietf:rfc:5888")}this.connection.addHandler(this.onJingle.bind(this),"urn:xmpp:jingle:1","iq","set",null,null)},onJingle:function(iq){var sid=$(iq).find("jingle").attr("sid");var action=$(iq).find("jingle").attr("action");var fromJid=iq.getAttribute("from");var ack=$iq({type:"result",to:fromJid,id:iq.getAttribute("id")});logger.log("on jingle "+action+" from "+fromJid,iq);var sess=this.sessions[sid];if("session-initiate"!=action){if(sess===null){ack.type="error";ack.c("error",{type:"cancel"}).c("item-not-found",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("unknown-session",{xmlns:"urn:xmpp:jingle:errors:1"});this.connection.send(ack);return true}if(fromJid!=sess.peerjid){logger.warn("jid mismatch for session id",sid,fromJid,sess.peerjid);ack.type="error";ack.c("error",{type:"cancel"}).c("item-not-found",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("unknown-session",{xmlns:"urn:xmpp:jingle:errors:1"});this.connection.send(ack);return true}}else if(sess!==undefined){ack.type="error";ack.c("error",{type:"cancel"}).c("service-unavailable",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up();logger.warn("duplicate session id",sid);this.connection.send(ack);return true}this.connection.send(ack);switch(action){case"session-initiate":console.log("(TIME) received session-initiate: ",window.performance.now());var startMuted=$(iq).find("jingle>startmuted");if(startMuted&&startMuted.length>0){var audioMuted=startMuted.attr("audio");var videoMuted=startMuted.attr("video");eventEmitter.emit(XMPPEvents.START_MUTED_FROM_FOCUS,audioMuted==="true",videoMuted==="true")}sess=new JingleSession($(iq).attr("to"),$(iq).find("jingle").attr("sid"),this.connection,XMPP);var fromBareJid=Strophe.getBareJidFromJid(fromJid);this.connection.emuc.setJingleSession(fromBareJid,sess);sess.media_constraints=this.media_constraints;sess.ice_config=this.ice_config;sess.initialize(fromJid,false);eventEmitter.emit(XMPPEvents.CALL_INCOMING,sess);sess.setOffer($(iq).find(">jingle"));this.sessions[sess.sid]=sess;this.jid2session[sess.peerjid]=sess;sess.sendAnswer();sess.accept();break;case"session-accept":sess.setAnswer($(iq).find(">jingle"));sess.accept();break;case"session-terminate":if(Object.keys(this.sessions).length<1||!(this.sessions[Object.keys(this.sessions)[0]]instanceof JingleSession)){break}logger.log("terminating...",sess.sid);sess.terminate();this.terminate(sess.sid);if($(iq).find(">jingle>reason").length){$(document).trigger("callterminated.jingle",[sess.sid,sess.peerjid,$(iq).find(">jingle>reason>:first")[0].tagName,$(iq).find(">jingle>reason>text").text()])}else{$(document).trigger("callterminated.jingle",[sess.sid,sess.peerjid])}break;case"transport-info":sess.addIceCandidate($(iq).find(">jingle>content"));break;case"session-info":var affected;if($(iq).find('>jingle>ringing[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length){$(document).trigger("ringing.jingle",[sess.sid])}else if($(iq).find('>jingle>mute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length){affected=$(iq).find('>jingle>mute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').attr("name");$(document).trigger("mute.jingle",[sess.sid,affected])}else if($(iq).find('>jingle>unmute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length){affected=$(iq).find('>jingle>unmute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').attr("name");$(document).trigger("unmute.jingle",[sess.sid,affected])}break;case"addsource":case"source-add":sess.addSource($(iq).find(">jingle>content"));break;case"removesource":case"source-remove":sess.removeSource($(iq).find(">jingle>content"));break;default:logger.warn("jingle action not implemented",action);break}return true},terminate:function(sid,reason,text){if(sid===null||sid===undefined){for(sid in this.sessions){if(this.sessions[sid].state!="ended"){this.sessions[sid].sendTerminate(reason||!this.sessions[sid].active()?"cancel":null,text);this.sessions[sid].terminate()}delete this.jid2session[this.sessions[sid].peerjid];delete this.sessions[sid]}}else if(this.sessions.hasOwnProperty(sid)){if(this.sessions[sid].state!="ended"){this.sessions[sid].sendTerminate(reason||!this.sessions[sid].active()?"cancel":null,text);this.sessions[sid].terminate()}delete this.jid2session[this.sessions[sid].peerjid];delete this.sessions[sid]}},getStunAndTurnCredentials:function(){var self=this;this.connection.sendIQ($iq({type:"get",to:this.connection.domain}).c("services",{xmlns:"urn:xmpp:extdisco:1"}).c("service",{host:"turn."+this.connection.domain}),function(res){var iceservers=[];$(res).find(">services>service").each(function(idx,el){el=$(el);var dict={};var type=el.attr("type");switch(type){case"stun":dict.url="stun:"+el.attr("host");if(el.attr("port")){dict.url+=":"+el.attr("port")}iceservers.push(dict);break;case"turn":case"turns":dict.url=type+":";if(el.attr("username")){if(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)&&parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2],10)<28){dict.url+=el.attr("username")+"@"}else{dict.username=el.attr("username")}}dict.url+=el.attr("host");if(el.attr("port")&&el.attr("port")!="3478"){dict.url+=":"+el.attr("port")}if(el.attr("transport")&&el.attr("transport")!="udp"){dict.url+="?transport="+el.attr("transport")}if(el.attr("password")){dict.credential=el.attr("password")}iceservers.push(dict);break}});self.ice_config.iceServers=iceservers},function(err){logger.warn("getting turn credentials failed",err);logger.warn("is mod_turncredentials or similar installed?")})},getLog:function(){var data={};var self=this;Object.keys(this.sessions).forEach(function(sid){var session=self.sessions[sid];if(session.peerconnection&&session.peerconnection.updateLog){data["jingle_"+session.sid]={updateLog:session.peerconnection.updateLog,stats:session.peerconnection.stats,url:window.location.href}}});return data}})}}).call(this,"/modules/xmpp/strophe.jingle.js")},{"../../service/xmpp/XMPPEvents":142,"../RTC/RTCBrowserType":17,"./JingleSessionPC":30,"jitsi-meet-logger":49}],39:[function(require,module,exports){module.exports=function(){Strophe.addConnectionPlugin("logger",{connection:null,log:[],init:function(conn){this.connection=conn;this.connection.rawInput=this.log_incoming.bind(this);this.connection.rawOutput=this.log_outgoing.bind(this)},log_incoming:function(stanza){this.log.push([(new Date).getTime(),"incoming",stanza])},log_outgoing:function(stanza){this.log.push([(new Date).getTime(),"outgoing",stanza])}})}},{}],40:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var XMPPEvents=require("../../service/xmpp/XMPPEvents");var PING_INTERVAL=1e4;var PING_TIMEOUT=15e3;var PING_THRESHOLD=3;module.exports=function(XMPP,eventEmitter){Strophe.addConnectionPlugin("ping",{connection:null,failedPings:0,init:function(connection){this.connection=connection;Strophe.addNamespace("PING","urn:xmpp:ping")},ping:function(jid,success,error,timeout){var iq=$iq({type:"get",to:jid});iq.c("ping",{xmlns:Strophe.NS.PING});this.connection.sendIQ(iq,success,error,timeout)},hasPingSupport:function(jid,callback){this.connection.disco.info(jid,null,function(result){var ping=$(result).find('>>feature[var="urn:xmpp:ping"]');callback(ping.length>0)},function(error){logger.error("Ping feature discovery error",error);callback(false)})},startInterval:function(remoteJid,interval){if(this.intervalId){logger.error("Ping task scheduled already");return}if(!interval)interval=PING_INTERVAL;var self=this;this.intervalId=window.setInterval(function(){self.ping(remoteJid,function(result){self.failedPings=0},function(error){self.failedPings+=1;logger.error("Ping "+(error?"error":"timeout"),error);if(self.failedPings>=PING_THRESHOLD){self.connection.disconnect()}},PING_TIMEOUT)},interval);logger.info("XMPP pings will be sent every "+interval+" ms")},stopInterval:function(){if(this.intervalId){window.clearInterval(this.intervalId);this.intervalId=null;this.failedPings=0;logger.info("Ping interval cleared")}}})}}).call(this,"/modules/xmpp/strophe.ping.js")},{"../../service/xmpp/XMPPEvents":142,"jitsi-meet-logger":49}],41:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);module.exports=function(){Strophe.addConnectionPlugin("rayo",{RAYO_XMLNS:"urn:xmpp:rayo:1",connection:null,init:function(conn){this.connection=conn;if(this.connection.disco){this.connection.disco.addFeature("urn:xmpp:rayo:client:1")}this.connection.addHandler(this.onRayo.bind(this),this.RAYO_XMLNS,"iq","set",null,null)},onRayo:function(iq){logger.info("Rayo IQ",iq)},dial:function(to,from,roomName,roomPass,focusMucJid){var self=this;return new Promise(function(resolve,reject){if(!focusMucJid){reject(new Error("Internal error!"));return}var req=$iq({type:"set",to:focusMucJid});req.c("dial",{xmlns:self.RAYO_XMLNS,to:to,from:from});req.c("header",{name:"JvbRoomName",value:roomName}).up();if(roomPass!==null&&roomPass.length){req.c("header",{name:"JvbRoomPassword",value:roomPass}).up()}self.connection.sendIQ(req,function(result){logger.info("Dial result ",result);var resource=$(result).find("ref").attr("uri");self.call_resource=resource.substr("xmpp:".length);logger.info("Received call resource: "+self.call_resource);resolve()},function(error){logger.info("Dial error ",error);reject(error)})})},hangup:function(){var self=this;return new Promise(function(resolve,reject){if(!self.call_resource){reject(new Error("No call in progress"));logger.warn("No call in progress");return}var req=$iq({type:"set",to:self.call_resource});req.c("hangup",{xmlns:self.RAYO_XMLNS});self.connection.sendIQ(req,function(result){logger.info("Hangup result ",result);self.call_resource=null;resolve()},function(error){logger.info("Hangup error ",error);self.call_resource=null;reject(new Error("Hangup error "))})})}})}}).call(this,"/modules/xmpp/strophe.rayo.js")},{"jitsi-meet-logger":49}],42:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);module.exports=function(){Strophe.log=function(level,msg){switch(level){case Strophe.LogLevel.WARN:logger.warn("Strophe: "+msg);break;case Strophe.LogLevel.ERROR:case Strophe.LogLevel.FATAL:logger.error("Strophe: "+msg);break}};Strophe.getStatusString=function(status){switch(status){case Strophe.Status.ERROR:return"ERROR";case Strophe.Status.CONNECTING:return"CONNECTING";case Strophe.Status.CONNFAIL:return"CONNFAIL";case Strophe.Status.AUTHENTICATING:return"AUTHENTICATING";case Strophe.Status.AUTHFAIL:return"AUTHFAIL";case Strophe.Status.CONNECTED:return"CONNECTED";case Strophe.Status.DISCONNECTED:return"DISCONNECTED";case Strophe.Status.DISCONNECTING:return"DISCONNECTING";case Strophe.Status.ATTACHED:return"ATTACHED";default:return"unknown"}}}}).call(this,"/modules/xmpp/strophe.util.js")},{"jitsi-meet-logger":49}],43:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var EventEmitter=require("events");var Pako=require("pako");var RTCEvents=require("../../service/RTC/RTCEvents");var XMPPEvents=require("../../service/xmpp/XMPPEvents");var JitsiConnectionErrors=require("../../JitsiConnectionErrors");var JitsiConnectionEvents=require("../../JitsiConnectionEvents");var RTC=require("../RTC/RTC");var authenticatedUser=false;function createConnection(bosh){bosh=bosh||"/http-bind";if(this.token){bosh+=bosh.indexOf("?")==-1?"?token="+this.token:"&token="+this.token}return new Strophe.Connection(bosh)}function initStrophePlugins(XMPP){require("./strophe.emuc")(XMPP);require("./strophe.jingle")(XMPP,XMPP.eventEmitter);require("./strophe.util")();require("./strophe.ping")(XMPP,XMPP.eventEmitter);require("./strophe.rayo")();require("./strophe.logger")()}function XMPP(options){this.eventEmitter=new EventEmitter;this.connection=null;this.disconnectInProgress=false;this.forceMuted=false;this.options=options;initStrophePlugins(this);this.connection=createConnection(options.bosh)}XMPP.prototype.getConnection=function(){return connection};XMPP.prototype._connect=function(jid,password){var self=this;var anonymousConnectionFailed=false;var connectionFailed=false;var lastErrorMsg;this.connection.connect(jid,password,function(status,msg){logger.log("(TIME) Strophe "+Strophe.getStatusString(status)+(msg?"["+msg+"]":"")+" :"+window.performance.now());if(status===Strophe.Status.CONNECTED){if(self.options.useStunTurn){self.connection.jingle.getStunAndTurnCredentials()}logger.info("My Jabber ID: "+self.connection.jid);var pingJid=self.connection.domain;self.connection.ping.hasPingSupport(pingJid,function(hasPing){if(hasPing)self.connection.ping.startInterval(pingJid);else logger.warn("Ping NOT supported by "+pingJid)});if(password)authenticatedUser=true;if(self.connection&&self.connection.connected&&Strophe.getResourceFromJid(self.connection.jid)){self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_ESTABLISHED,Strophe.getResourceFromJid(self.connection.jid))}}else if(status===Strophe.Status.CONNFAIL){if(msg==="x-strophe-bad-non-anon-jid"){anonymousConnectionFailed=true}else{connectionFailed=true}lastErrorMsg=msg}else if(status===Strophe.Status.DISCONNECTED){self.connection.ping.stopInterval();self.disconnectInProgress=false;if(anonymousConnectionFailed){self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_FAILED,JitsiConnectionErrors.PASSWORD_REQUIRED)}else if(connectionFailed){self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_FAILED,JitsiConnectionErrors.OTHER_ERROR,msg?msg:lastErrorMsg)}else{self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_DISCONNECTED,msg?msg:lastErrorMsg)}}else if(status===Strophe.Status.AUTHFAIL){self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_FAILED,JitsiConnectionErrors.PASSWORD_REQUIRED)}})};XMPP.prototype.connect=function(jid,password){if(!jid){var configDomain=this.options.hosts.anonymousdomain||this.options.hosts.domain;if(this.options.hosts.anonymousdomain&&window.location.search.indexOf("login=true")!==-1){configDomain=this.options.hosts.domain}jid=configDomain||window.location.hostname}return this._connect(jid,password)};XMPP.prototype.createRoom=function(roomName,options,settings){var roomjid=roomName+"@"+this.options.hosts.muc;if(options.useNicks){if(options.nick){roomjid+="/"+options.nick}else{roomjid+="/"+Strophe.getNodeFromJid(this.connection.jid)}}else{var tmpJid=Strophe.getNodeFromJid(this.connection.jid);if(!authenticatedUser)tmpJid=tmpJid.substr(0,8);roomjid+="/"+tmpJid}return this.connection.emuc.createRoom(roomjid,null,options,settings)};XMPP.prototype.addListener=function(type,listener){this.eventEmitter.on(type,listener)};XMPP.prototype.removeListener=function(type,listener){this.eventEmitter.removeListener(type,listener)};XMPP.prototype.leaveRoom=function(jid){var handler=this.connection.jingle.jid2session[jid];if(handler&&handler.peerconnection){if(RTC.localAudio){handler.peerconnection.removeStream(RTC.localAudio.getOriginalStream(),true)}if(RTC.localVideo){handler.peerconnection.removeStream(RTC.localVideo.getOriginalStream(),true)}handler.peerconnection.close()}this.eventEmitter.emit(XMPPEvents.DISPOSE_CONFERENCE);this.connection.emuc.doLeave(jid)};XMPP.prototype.sendLogs=function(data){if(!this.connection.emuc.focusMucJid)return false;var deflate=true;var content=JSON.stringify(data);if(deflate){content=String.fromCharCode.apply(null,Pako.deflateRaw(content))}content=Base64.encode(content);var message=$msg({to:this.connection.emuc.focusMucJid,type:"normal"});message.c("log",{xmlns:"urn:xmpp:eventlog",id:"PeerConnectionStats"});message.c("message").t(content).up();if(deflate){message.c("tag",{name:"deflated",value:"true"}).up()}message.up();this.connection.send(message);return true};XMPP.prototype.getJingleLog=function(){return this.connection.jingle?this.connection.jingle.getLog():{}};XMPP.prototype.getXmppLog=function(){return this.connection.logger?this.connection.logger.log:null};XMPP.prototype.dial=function(to,from,roomName,roomPass){this.connection.rayo.dial(to,from,roomName,roomPass)};XMPP.prototype.setMute=function(jid,mute){this.connection.moderate.setMute(jid,mute)};XMPP.prototype.eject=function(jid){this.connection.moderate.eject(jid)};XMPP.prototype.getSessions=function(){return this.connection.jingle.sessions};XMPP.prototype.disconnect=function(){if(this.disconnectInProgress||!this.connection||!this.connection.connected){this.eventEmitter.emit(JitsiConnectionEvents.WRONG_STATE);return}this.disconnectInProgress=true;this.connection.disconnect()};module.exports=XMPP}).call(this,"/modules/xmpp/xmpp.js")},{"../../JitsiConnectionErrors":5,"../../JitsiConnectionEvents":6,"../../service/RTC/RTCEvents":136,"../../service/xmpp/XMPPEvents":142,"../RTC/RTC":16,"./strophe.emuc":37,"./strophe.jingle":38,"./strophe.logger":39,"./strophe.ping":40,"./strophe.rayo":41,"./strophe.util":42,events:45,"jitsi-meet-logger":49,pako:51}],44:[function(require,module,exports){(function(process){(function(){var async={};var root,previous_async;root=this;if(root!=null){previous_async=root.async}async.noConflict=function(){root.async=previous_async;return async};function only_once(fn){var called=false;return function(){if(called)throw new Error("Callback was already called.");called=true;fn.apply(root,arguments)}}var _toString=Object.prototype.toString;var _isArray=Array.isArray||function(obj){return _toString.call(obj)==="[object Array]"};var _each=function(arr,iterator){if(arr.forEach){return arr.forEach(iterator)}for(var i=0;i<arr.length;i+=1){iterator(arr[i],i,arr)}};var _map=function(arr,iterator){if(arr.map){return arr.map(iterator)}var results=[];_each(arr,function(x,i,a){results.push(iterator(x,i,a))});return results};var _reduce=function(arr,iterator,memo){if(arr.reduce){return arr.reduce(iterator,memo)}_each(arr,function(x,i,a){memo=iterator(memo,x,i,a)});return memo};var _keys=function(obj){if(Object.keys){return Object.keys(obj)}var keys=[];for(var k in obj){if(obj.hasOwnProperty(k)){keys.push(k)}}return keys};if(typeof process==="undefined"||!process.nextTick){if(typeof setImmediate==="function"){async.nextTick=function(fn){setImmediate(fn)};async.setImmediate=async.nextTick}else{async.nextTick=function(fn){setTimeout(fn,0)};async.setImmediate=async.nextTick}}else{async.nextTick=process.nextTick;if(typeof setImmediate!=="undefined"){async.setImmediate=function(fn){setImmediate(fn)}}else{async.setImmediate=async.nextTick}}async.each=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;_each(arr,function(x){iterator(x,only_once(done))});function done(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback()}}}};async.forEach=async.each;async.eachSeries=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;var iterate=function(){iterator(arr[completed],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback()}else{iterate()}}})};iterate()};async.forEachSeries=async.eachSeries;async.eachLimit=function(arr,limit,iterator,callback){var fn=_eachLimit(limit);fn.apply(null,[arr,iterator,callback])};async.forEachLimit=async.eachLimit;var _eachLimit=function(limit){return function(arr,iterator,callback){callback=callback||function(){};if(!arr.length||limit<=0){return callback()}var completed=0;var started=0;var running=0;(function replenish(){if(completed>=arr.length){return callback()}while(running<limit&&started<arr.length){started+=1;running+=1;iterator(arr[started-1],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;running-=1;if(completed>=arr.length){callback()}else{replenish()}}})}})()}};var doParallel=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.each].concat(args))}};var doParallelLimit=function(limit,fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[_eachLimit(limit)].concat(args))}};var doSeries=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.eachSeries].concat(args))}};var _asyncMap=function(eachfn,arr,iterator,callback){arr=_map(arr,function(x,i){return{index:i,value:x}});if(!callback){eachfn(arr,function(x,callback){iterator(x.value,function(err){callback(err)})})}else{var results=[];eachfn(arr,function(x,callback){iterator(x.value,function(err,v){results[x.index]=v;callback(err)})},function(err){callback(err,results)})}};async.map=doParallel(_asyncMap);async.mapSeries=doSeries(_asyncMap);async.mapLimit=function(arr,limit,iterator,callback){return _mapLimit(limit)(arr,iterator,callback)};var _mapLimit=function(limit){return doParallelLimit(limit,_asyncMap)};async.reduce=function(arr,memo,iterator,callback){
- async.eachSeries(arr,function(x,callback){iterator(memo,x,function(err,v){memo=v;callback(err)})},function(err){callback(err,memo)})};async.inject=async.reduce;async.foldl=async.reduce;async.reduceRight=function(arr,memo,iterator,callback){var reversed=_map(arr,function(x){return x}).reverse();async.reduce(reversed,memo,iterator,callback)};async.foldr=async.reduceRight;var _filter=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.filter=doParallel(_filter);async.filterSeries=doSeries(_filter);async.select=async.filter;async.selectSeries=async.filterSeries;var _reject=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(!v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.reject=doParallel(_reject);async.rejectSeries=doSeries(_reject);var _detect=function(eachfn,arr,iterator,main_callback){eachfn(arr,function(x,callback){iterator(x,function(result){if(result){main_callback(x);main_callback=function(){}}else{callback()}})},function(err){main_callback()})};async.detect=doParallel(_detect);async.detectSeries=doSeries(_detect);async.some=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(v){main_callback(true);main_callback=function(){}}callback()})},function(err){main_callback(false)})};async.any=async.some;async.every=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(!v){main_callback(false);main_callback=function(){}}callback()})},function(err){main_callback(true)})};async.all=async.every;async.sortBy=function(arr,iterator,callback){async.map(arr,function(x,callback){iterator(x,function(err,criteria){if(err){callback(err)}else{callback(null,{value:x,criteria:criteria})}})},function(err,results){if(err){return callback(err)}else{var fn=function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0};callback(null,_map(results.sort(fn),function(x){return x.value}))}})};async.auto=function(tasks,callback){callback=callback||function(){};var keys=_keys(tasks);var remainingTasks=keys.length;if(!remainingTasks){return callback()}var results={};var listeners=[];var addListener=function(fn){listeners.unshift(fn)};var removeListener=function(fn){for(var i=0;i<listeners.length;i+=1){if(listeners[i]===fn){listeners.splice(i,1);return}}};var taskComplete=function(){remainingTasks--;_each(listeners.slice(0),function(fn){fn()})};addListener(function(){if(!remainingTasks){var theCallback=callback;callback=function(){};theCallback(null,results)}});_each(keys,function(k){var task=_isArray(tasks[k])?tasks[k]:[tasks[k]];var taskCallback=function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}if(err){var safeResults={};_each(_keys(results),function(rkey){safeResults[rkey]=results[rkey]});safeResults[k]=args;callback(err,safeResults);callback=function(){}}else{results[k]=args;async.setImmediate(taskComplete)}};var requires=task.slice(0,Math.abs(task.length-1))||[];var ready=function(){return _reduce(requires,function(a,x){return a&&results.hasOwnProperty(x)},true)&&!results.hasOwnProperty(k)};if(ready()){task[task.length-1](taskCallback,results)}else{var listener=function(){if(ready()){removeListener(listener);task[task.length-1](taskCallback,results)}};addListener(listener)}})};async.retry=function(times,task,callback){var DEFAULT_TIMES=5;var attempts=[];if(typeof times==="function"){callback=task;task=times;times=DEFAULT_TIMES}times=parseInt(times,10)||DEFAULT_TIMES;var wrappedTask=function(wrappedCallback,wrappedResults){var retryAttempt=function(task,finalAttempt){return function(seriesCallback){task(function(err,result){seriesCallback(!err||finalAttempt,{err:err,result:result})},wrappedResults)}};while(times){attempts.push(retryAttempt(task,!(times-=1)))}async.series(attempts,function(done,data){data=data[data.length-1];(wrappedCallback||callback)(data.err,data.result)})};return callback?wrappedTask():wrappedTask};async.waterfall=function(tasks,callback){callback=callback||function(){};if(!_isArray(tasks)){var err=new Error("First argument to waterfall must be an array of functions");return callback(err)}if(!tasks.length){return callback()}var wrapIterator=function(iterator){return function(err){if(err){callback.apply(null,arguments);callback=function(){}}else{var args=Array.prototype.slice.call(arguments,1);var next=iterator.next();if(next){args.push(wrapIterator(next))}else{args.push(callback)}async.setImmediate(function(){iterator.apply(null,args)})}}};wrapIterator(async.iterator(tasks))()};var _parallel=function(eachfn,tasks,callback){callback=callback||function(){};if(_isArray(tasks)){eachfn.map(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};eachfn.each(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.parallel=function(tasks,callback){_parallel({map:async.map,each:async.each},tasks,callback)};async.parallelLimit=function(tasks,limit,callback){_parallel({map:_mapLimit(limit),each:_eachLimit(limit)},tasks,callback)};async.series=function(tasks,callback){callback=callback||function(){};if(_isArray(tasks)){async.mapSeries(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};async.eachSeries(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.iterator=function(tasks){var makeCallback=function(index){var fn=function(){if(tasks.length){tasks[index].apply(null,arguments)}return fn.next()};fn.next=function(){return index<tasks.length-1?makeCallback(index+1):null};return fn};return makeCallback(0)};async.apply=function(fn){var args=Array.prototype.slice.call(arguments,1);return function(){return fn.apply(null,args.concat(Array.prototype.slice.call(arguments)))}};var _concat=function(eachfn,arr,fn,callback){var r=[];eachfn(arr,function(x,cb){fn(x,function(err,y){r=r.concat(y||[]);cb(err)})},function(err){callback(err,r)})};async.concat=doParallel(_concat);async.concatSeries=doSeries(_concat);async.whilst=function(test,iterator,callback){if(test()){iterator(function(err){if(err){return callback(err)}async.whilst(test,iterator,callback)})}else{callback()}};async.doWhilst=function(iterator,test,callback){iterator(function(err){if(err){return callback(err)}var args=Array.prototype.slice.call(arguments,1);if(test.apply(null,args)){async.doWhilst(iterator,test,callback)}else{callback()}})};async.until=function(test,iterator,callback){if(!test()){iterator(function(err){if(err){return callback(err)}async.until(test,iterator,callback)})}else{callback()}};async.doUntil=function(iterator,test,callback){iterator(function(err){if(err){return callback(err)}var args=Array.prototype.slice.call(arguments,1);if(!test.apply(null,args)){async.doUntil(iterator,test,callback)}else{callback()}})};async.queue=function(worker,concurrency){if(concurrency===undefined){concurrency=1}function _insert(q,data,pos,callback){if(!q.started){q.started=true}if(!_isArray(data)){data=[data]}if(data.length==0){return async.setImmediate(function(){if(q.drain){q.drain()}})}_each(data,function(task){var item={data:task,callback:typeof callback==="function"?callback:null};if(pos){q.tasks.unshift(item)}else{q.tasks.push(item)}if(q.saturated&&q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var workers=0;var q={tasks:[],concurrency:concurrency,saturated:null,empty:null,drain:null,started:false,paused:false,push:function(data,callback){_insert(q,data,false,callback)},kill:function(){q.drain=null;q.tasks=[]},unshift:function(data,callback){_insert(q,data,true,callback)},process:function(){if(!q.paused&&workers<q.concurrency&&q.tasks.length){var task=q.tasks.shift();if(q.empty&&q.tasks.length===0){q.empty()}workers+=1;var next=function(){workers-=1;if(task.callback){task.callback.apply(task,arguments)}if(q.drain&&q.tasks.length+workers===0){q.drain()}q.process()};var cb=only_once(next);worker(task.data,cb)}},length:function(){return q.tasks.length},running:function(){return workers},idle:function(){return q.tasks.length+workers===0},pause:function(){if(q.paused===true){return}q.paused=true;q.process()},resume:function(){if(q.paused===false){return}q.paused=false;q.process()}};return q};async.priorityQueue=function(worker,concurrency){function _compareTasks(a,b){return a.priority-b.priority}function _binarySearch(sequence,item,compare){var beg=-1,end=sequence.length-1;while(beg<end){var mid=beg+(end-beg+1>>>1);if(compare(item,sequence[mid])>=0){beg=mid}else{end=mid-1}}return beg}function _insert(q,data,priority,callback){if(!q.started){q.started=true}if(!_isArray(data)){data=[data]}if(data.length==0){return async.setImmediate(function(){if(q.drain){q.drain()}})}_each(data,function(task){var item={data:task,priority:priority,callback:typeof callback==="function"?callback:null};q.tasks.splice(_binarySearch(q.tasks,item,_compareTasks)+1,0,item);if(q.saturated&&q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var q=async.queue(worker,concurrency);q.push=function(data,priority,callback){_insert(q,data,priority,callback)};delete q.unshift;return q};async.cargo=function(worker,payload){var working=false,tasks=[];var cargo={tasks:tasks,payload:payload,saturated:null,empty:null,drain:null,drained:true,push:function(data,callback){if(!_isArray(data)){data=[data]}_each(data,function(task){tasks.push({data:task,callback:typeof callback==="function"?callback:null});cargo.drained=false;if(cargo.saturated&&tasks.length===payload){cargo.saturated()}});async.setImmediate(cargo.process)},process:function process(){if(working)return;if(tasks.length===0){if(cargo.drain&&!cargo.drained)cargo.drain();cargo.drained=true;return}var ts=typeof payload==="number"?tasks.splice(0,payload):tasks.splice(0,tasks.length);var ds=_map(ts,function(task){return task.data});if(cargo.empty)cargo.empty();working=true;worker(ds,function(){working=false;var args=arguments;_each(ts,function(data){if(data.callback){data.callback.apply(null,args)}});process()})},length:function(){return tasks.length},running:function(){return working}};return cargo};var _console_fn=function(name){return function(fn){var args=Array.prototype.slice.call(arguments,1);fn.apply(null,args.concat([function(err){var args=Array.prototype.slice.call(arguments,1);if(typeof console!=="undefined"){if(err){if(console.error){console.error(err)}}else if(console[name]){_each(args,function(x){console[name](x)})}}}]))}};async.log=_console_fn("log");async.dir=_console_fn("dir");async.memoize=function(fn,hasher){var memo={};var queues={};hasher=hasher||function(x){return x};var memoized=function(){var args=Array.prototype.slice.call(arguments);var callback=args.pop();var key=hasher.apply(null,args);if(key in memo){async.nextTick(function(){callback.apply(null,memo[key])})}else if(key in queues){queues[key].push(callback)}else{queues[key]=[callback];fn.apply(null,args.concat([function(){memo[key]=arguments;var q=queues[key];delete queues[key];for(var i=0,l=q.length;i<l;i++){q[i].apply(null,arguments)}}]))}};memoized.memo=memo;memoized.unmemoized=fn;return memoized};async.unmemoize=function(fn){return function(){return(fn.unmemoized||fn).apply(null,arguments)}};async.times=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.map(counter,iterator,callback)};async.timesSeries=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.mapSeries(counter,iterator,callback)};async.seq=function(){var fns=arguments;return function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();async.reduce(fns,args,function(newargs,fn,cb){fn.apply(that,newargs.concat([function(){var err=arguments[0];var nextargs=Array.prototype.slice.call(arguments,1);cb(err,nextargs)}]))},function(err,results){callback.apply(that,[err].concat(results))})}};async.compose=function(){return async.seq.apply(null,Array.prototype.reverse.call(arguments))};var _applyEach=function(eachfn,fns){var go=function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();return eachfn(fns,function(fn,cb){fn.apply(that,args.concat([cb]))},callback)};if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);return go.apply(this,args)}else{return go}};async.applyEach=doParallel(_applyEach);async.applyEachSeries=doSeries(_applyEach);async.forever=function(fn,callback){function next(err){if(err){if(callback){return callback(err)}throw err}fn(next)}next()};if(typeof module!=="undefined"&&module.exports){module.exports=async}else if(typeof define!=="undefined"&&define.amd){define([],function(){return async})}else{root.async=async}})()}).call(this,require("_process"))},{_process:46}],45:[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}throw TypeError('Uncaught, unspecified "error" event.')}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:len=arguments.length;args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];handler.apply(this,args)}}else if(isObject(handler)){len=arguments.length;args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];listeners=handler.slice();len=listeners.length;for(i=0;i<len;i++)listeners[i].apply(this,args)}return true};EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events)this._events={};if(this._events.newListener)this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener);if(!this._events[type])this._events[type]=listener;else if(isObject(this._events[type]))this._events[type].push(listener);else this._events[type]=[this._events[type],listener];if(isObject(this._events[type])&&!this._events[type].warned){var m;if(!isUndefined(this._maxListeners)){m=this._maxListeners}else{m=EventEmitter.defaultMaxListeners}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-->0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else{while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.listenerCount=function(emitter,type){var ret;if(!emitter._events||!emitter._events[type])ret=0;else if(isFunction(emitter._events[type]))ret=1;else ret=emitter._events[type].length;return ret};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],46:[function(require,module,exports){var process=module.exports={};var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=setTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;clearTimeout(timeout)}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){setTimeout(drainQueue,0)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title="browser";process.browser=true;process.env={};process.argv=[];process.version="";process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")};process.umask=function(){return 0}},{}],47:[function(require,module,exports){(function(process,global){(function(){"use strict";function lib$es6$promise$utils$$objectOrFunction(x){return typeof x==="function"||typeof x==="object"&&x!==null}function lib$es6$promise$utils$$isFunction(x){return typeof x==="function"}function lib$es6$promise$utils$$isMaybeThenable(x){return typeof x==="object"&&x!==null}var lib$es6$promise$utils$$_isArray;if(!Array.isArray){lib$es6$promise$utils$$_isArray=function(x){return Object.prototype.toString.call(x)==="[object Array]"}}else{lib$es6$promise$utils$$_isArray=Array.isArray}var lib$es6$promise$utils$$isArray=lib$es6$promise$utils$$_isArray;var lib$es6$promise$asap$$len=0;var lib$es6$promise$asap$$toString={}.toString;var lib$es6$promise$asap$$vertxNext;var lib$es6$promise$asap$$customSchedulerFn;var lib$es6$promise$asap$$asap=function asap(callback,arg){lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len]=callback;lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len+1]=arg;lib$es6$promise$asap$$len+=2;if(lib$es6$promise$asap$$len===2){if(lib$es6$promise$asap$$customSchedulerFn){lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush)}else{lib$es6$promise$asap$$scheduleFlush()}}};function lib$es6$promise$asap$$setScheduler(scheduleFn){lib$es6$promise$asap$$customSchedulerFn=scheduleFn}function lib$es6$promise$asap$$setAsap(asapFn){lib$es6$promise$asap$$asap=asapFn}var lib$es6$promise$asap$$browserWindow=typeof window!=="undefined"?window:undefined;var lib$es6$promise$asap$$browserGlobal=lib$es6$promise$asap$$browserWindow||{};var lib$es6$promise$asap$$BrowserMutationObserver=lib$es6$promise$asap$$browserGlobal.MutationObserver||lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;var lib$es6$promise$asap$$isNode=typeof process!=="undefined"&&{}.toString.call(process)==="[object process]";var lib$es6$promise$asap$$isWorker=typeof Uint8ClampedArray!=="undefined"&&typeof importScripts!=="undefined"&&typeof MessageChannel!=="undefined";function lib$es6$promise$asap$$useNextTick(){return function(){process.nextTick(lib$es6$promise$asap$$flush)}}function lib$es6$promise$asap$$useVertxTimer(){return function(){lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush)}}function lib$es6$promise$asap$$useMutationObserver(){var iterations=0;var observer=new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);var node=document.createTextNode("");observer.observe(node,{characterData:true});return function(){node.data=iterations=++iterations%2}}function lib$es6$promise$asap$$useMessageChannel(){var channel=new MessageChannel;channel.port1.onmessage=lib$es6$promise$asap$$flush;return function(){channel.port2.postMessage(0)}}function lib$es6$promise$asap$$useSetTimeout(){return function(){setTimeout(lib$es6$promise$asap$$flush,1)}}var lib$es6$promise$asap$$queue=new Array(1e3);function lib$es6$promise$asap$$flush(){for(var i=0;i<lib$es6$promise$asap$$len;i+=2){var callback=lib$es6$promise$asap$$queue[i];var arg=lib$es6$promise$asap$$queue[i+1];callback(arg);lib$es6$promise$asap$$queue[i]=undefined;lib$es6$promise$asap$$queue[i+1]=undefined}lib$es6$promise$asap$$len=0}function lib$es6$promise$asap$$attemptVertx(){try{var r=require;var vertx=r("vertx");lib$es6$promise$asap$$vertxNext=vertx.runOnLoop||vertx.runOnContext;return lib$es6$promise$asap$$useVertxTimer()}catch(e){return lib$es6$promise$asap$$useSetTimeout()}}var lib$es6$promise$asap$$scheduleFlush;if(lib$es6$promise$asap$$isNode){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useNextTick()}else if(lib$es6$promise$asap$$BrowserMutationObserver){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useMutationObserver()}else if(lib$es6$promise$asap$$isWorker){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useMessageChannel()}else if(lib$es6$promise$asap$$browserWindow===undefined&&typeof require==="function"){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$attemptVertx()}else{lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useSetTimeout()}function lib$es6$promise$$internal$$noop(){}var lib$es6$promise$$internal$$PENDING=void 0;var lib$es6$promise$$internal$$FULFILLED=1;var lib$es6$promise$$internal$$REJECTED=2;var lib$es6$promise$$internal$$GET_THEN_ERROR=new lib$es6$promise$$internal$$ErrorObject;function lib$es6$promise$$internal$$selfFulfillment(){return new TypeError("You cannot resolve a promise with itself")}function lib$es6$promise$$internal$$cannotReturnOwn(){return new TypeError("A promises callback cannot return that same promise.")}function lib$es6$promise$$internal$$getThen(promise){try{return promise.then}catch(error){lib$es6$promise$$internal$$GET_THEN_ERROR.error=error;return lib$es6$promise$$internal$$GET_THEN_ERROR}}function lib$es6$promise$$internal$$tryThen(then,value,fulfillmentHandler,rejectionHandler){try{then.call(value,fulfillmentHandler,rejectionHandler)}catch(e){return e}}function lib$es6$promise$$internal$$handleForeignThenable(promise,thenable,then){lib$es6$promise$asap$$asap(function(promise){var sealed=false;var error=lib$es6$promise$$internal$$tryThen(then,thenable,function(value){if(sealed){return}sealed=true;if(thenable!==value){lib$es6$promise$$internal$$resolve(promise,value)}else{lib$es6$promise$$internal$$fulfill(promise,value)}},function(reason){if(sealed){return}sealed=true;lib$es6$promise$$internal$$reject(promise,reason)},"Settle: "+(promise._label||" unknown promise"));if(!sealed&&error){sealed=true;lib$es6$promise$$internal$$reject(promise,error)}},promise)}function lib$es6$promise$$internal$$handleOwnThenable(promise,thenable){if(thenable._state===lib$es6$promise$$internal$$FULFILLED){lib$es6$promise$$internal$$fulfill(promise,thenable._result)}else if(thenable._state===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,thenable._result)}else{lib$es6$promise$$internal$$subscribe(thenable,undefined,function(value){lib$es6$promise$$internal$$resolve(promise,value)},function(reason){lib$es6$promise$$internal$$reject(promise,reason)})}}function lib$es6$promise$$internal$$handleMaybeThenable(promise,maybeThenable){if(maybeThenable.constructor===promise.constructor){lib$es6$promise$$internal$$handleOwnThenable(promise,maybeThenable)}else{var then=lib$es6$promise$$internal$$getThen(maybeThenable);if(then===lib$es6$promise$$internal$$GET_THEN_ERROR){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$GET_THEN_ERROR.error)}else if(then===undefined){lib$es6$promise$$internal$$fulfill(promise,maybeThenable)}else if(lib$es6$promise$utils$$isFunction(then)){lib$es6$promise$$internal$$handleForeignThenable(promise,maybeThenable,then)}else{lib$es6$promise$$internal$$fulfill(promise,maybeThenable)}}}function lib$es6$promise$$internal$$resolve(promise,value){if(promise===value){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$selfFulfillment())}else if(lib$es6$promise$utils$$objectOrFunction(value)){lib$es6$promise$$internal$$handleMaybeThenable(promise,value)}else{lib$es6$promise$$internal$$fulfill(promise,value)}}function lib$es6$promise$$internal$$publishRejection(promise){if(promise._onerror){promise._onerror(promise._result)}lib$es6$promise$$internal$$publish(promise)}function lib$es6$promise$$internal$$fulfill(promise,value){if(promise._state!==lib$es6$promise$$internal$$PENDING){return}promise._result=value;promise._state=lib$es6$promise$$internal$$FULFILLED;if(promise._subscribers.length!==0){lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish,promise)}}function lib$es6$promise$$internal$$reject(promise,reason){if(promise._state!==lib$es6$promise$$internal$$PENDING){return}promise._state=lib$es6$promise$$internal$$REJECTED;promise._result=reason;lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection,promise)}function lib$es6$promise$$internal$$subscribe(parent,child,onFulfillment,onRejection){var subscribers=parent._subscribers;var length=subscribers.length;parent._onerror=null;subscribers[length]=child;subscribers[length+lib$es6$promise$$internal$$FULFILLED]=onFulfillment;subscribers[length+lib$es6$promise$$internal$$REJECTED]=onRejection;if(length===0&&parent._state){lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish,parent)}}function lib$es6$promise$$internal$$publish(promise){var subscribers=promise._subscribers;var settled=promise._state;if(subscribers.length===0){return}var child,callback,detail=promise._result;for(var i=0;i<subscribers.length;i+=3){child=subscribers[i];callback=subscribers[i+settled];if(child){lib$es6$promise$$internal$$invokeCallback(settled,child,callback,detail)}else{callback(detail)}}promise._subscribers.length=0}function lib$es6$promise$$internal$$ErrorObject(){this.error=null}var lib$es6$promise$$internal$$TRY_CATCH_ERROR=new lib$es6$promise$$internal$$ErrorObject;function lib$es6$promise$$internal$$tryCatch(callback,detail){try{return callback(detail)}catch(e){lib$es6$promise$$internal$$TRY_CATCH_ERROR.error=e;return lib$es6$promise$$internal$$TRY_CATCH_ERROR}}function lib$es6$promise$$internal$$invokeCallback(settled,promise,callback,detail){var hasCallback=lib$es6$promise$utils$$isFunction(callback),value,error,succeeded,failed;if(hasCallback){value=lib$es6$promise$$internal$$tryCatch(callback,detail);if(value===lib$es6$promise$$internal$$TRY_CATCH_ERROR){failed=true;error=value.error;value=null}else{succeeded=true}if(promise===value){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$cannotReturnOwn());return}}else{value=detail;succeeded=true}if(promise._state!==lib$es6$promise$$internal$$PENDING){}else if(hasCallback&&succeeded){lib$es6$promise$$internal$$resolve(promise,value)}else if(failed){lib$es6$promise$$internal$$reject(promise,error)}else if(settled===lib$es6$promise$$internal$$FULFILLED){lib$es6$promise$$internal$$fulfill(promise,value)}else if(settled===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,value)}}function lib$es6$promise$$internal$$initializePromise(promise,resolver){try{resolver(function resolvePromise(value){lib$es6$promise$$internal$$resolve(promise,value)},function rejectPromise(reason){lib$es6$promise$$internal$$reject(promise,reason)})}catch(e){lib$es6$promise$$internal$$reject(promise,e)}}function lib$es6$promise$enumerator$$Enumerator(Constructor,input){var enumerator=this;enumerator._instanceConstructor=Constructor;enumerator.promise=new Constructor(lib$es6$promise$$internal$$noop);if(enumerator._validateInput(input)){enumerator._input=input;enumerator.length=input.length;enumerator._remaining=input.length;enumerator._init();if(enumerator.length===0){lib$es6$promise$$internal$$fulfill(enumerator.promise,enumerator._result)}else{enumerator.length=enumerator.length||0;enumerator._enumerate();if(enumerator._remaining===0){lib$es6$promise$$internal$$fulfill(enumerator.promise,enumerator._result)}}}else{lib$es6$promise$$internal$$reject(enumerator.promise,enumerator._validationError())}}lib$es6$promise$enumerator$$Enumerator.prototype._validateInput=function(input){return lib$es6$promise$utils$$isArray(input)};lib$es6$promise$enumerator$$Enumerator.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")};lib$es6$promise$enumerator$$Enumerator.prototype._init=function(){this._result=new Array(this.length)};var lib$es6$promise$enumerator$$default=lib$es6$promise$enumerator$$Enumerator;lib$es6$promise$enumerator$$Enumerator.prototype._enumerate=function(){var enumerator=this;var length=enumerator.length;var promise=enumerator.promise;var input=enumerator._input;for(var i=0;promise._state===lib$es6$promise$$internal$$PENDING&&i<length;i++){enumerator._eachEntry(input[i],i)}};lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry=function(entry,i){var enumerator=this;var c=enumerator._instanceConstructor;if(lib$es6$promise$utils$$isMaybeThenable(entry)){if(entry.constructor===c&&entry._state!==lib$es6$promise$$internal$$PENDING){entry._onerror=null;enumerator._settledAt(entry._state,i,entry._result)}else{enumerator._willSettleAt(c.resolve(entry),i);
- }}else{enumerator._remaining--;enumerator._result[i]=entry}};lib$es6$promise$enumerator$$Enumerator.prototype._settledAt=function(state,i,value){var enumerator=this;var promise=enumerator.promise;if(promise._state===lib$es6$promise$$internal$$PENDING){enumerator._remaining--;if(state===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,value)}else{enumerator._result[i]=value}}if(enumerator._remaining===0){lib$es6$promise$$internal$$fulfill(promise,enumerator._result)}};lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt=function(promise,i){var enumerator=this;lib$es6$promise$$internal$$subscribe(promise,undefined,function(value){enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED,i,value)},function(reason){enumerator._settledAt(lib$es6$promise$$internal$$REJECTED,i,reason)})};function lib$es6$promise$promise$all$$all(entries){return new lib$es6$promise$enumerator$$default(this,entries).promise}var lib$es6$promise$promise$all$$default=lib$es6$promise$promise$all$$all;function lib$es6$promise$promise$race$$race(entries){var Constructor=this;var promise=new Constructor(lib$es6$promise$$internal$$noop);if(!lib$es6$promise$utils$$isArray(entries)){lib$es6$promise$$internal$$reject(promise,new TypeError("You must pass an array to race."));return promise}var length=entries.length;function onFulfillment(value){lib$es6$promise$$internal$$resolve(promise,value)}function onRejection(reason){lib$es6$promise$$internal$$reject(promise,reason)}for(var i=0;promise._state===lib$es6$promise$$internal$$PENDING&&i<length;i++){lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]),undefined,onFulfillment,onRejection)}return promise}var lib$es6$promise$promise$race$$default=lib$es6$promise$promise$race$$race;function lib$es6$promise$promise$resolve$$resolve(object){var Constructor=this;if(object&&typeof object==="object"&&object.constructor===Constructor){return object}var promise=new Constructor(lib$es6$promise$$internal$$noop);lib$es6$promise$$internal$$resolve(promise,object);return promise}var lib$es6$promise$promise$resolve$$default=lib$es6$promise$promise$resolve$$resolve;function lib$es6$promise$promise$reject$$reject(reason){var Constructor=this;var promise=new Constructor(lib$es6$promise$$internal$$noop);lib$es6$promise$$internal$$reject(promise,reason);return promise}var lib$es6$promise$promise$reject$$default=lib$es6$promise$promise$reject$$reject;var lib$es6$promise$promise$$counter=0;function lib$es6$promise$promise$$needsResolver(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function lib$es6$promise$promise$$needsNew(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}var lib$es6$promise$promise$$default=lib$es6$promise$promise$$Promise;function lib$es6$promise$promise$$Promise(resolver){this._id=lib$es6$promise$promise$$counter++;this._state=undefined;this._result=undefined;this._subscribers=[];if(lib$es6$promise$$internal$$noop!==resolver){if(!lib$es6$promise$utils$$isFunction(resolver)){lib$es6$promise$promise$$needsResolver()}if(!(this instanceof lib$es6$promise$promise$$Promise)){lib$es6$promise$promise$$needsNew()}lib$es6$promise$$internal$$initializePromise(this,resolver)}}lib$es6$promise$promise$$Promise.all=lib$es6$promise$promise$all$$default;lib$es6$promise$promise$$Promise.race=lib$es6$promise$promise$race$$default;lib$es6$promise$promise$$Promise.resolve=lib$es6$promise$promise$resolve$$default;lib$es6$promise$promise$$Promise.reject=lib$es6$promise$promise$reject$$default;lib$es6$promise$promise$$Promise._setScheduler=lib$es6$promise$asap$$setScheduler;lib$es6$promise$promise$$Promise._setAsap=lib$es6$promise$asap$$setAsap;lib$es6$promise$promise$$Promise._asap=lib$es6$promise$asap$$asap;lib$es6$promise$promise$$Promise.prototype={constructor:lib$es6$promise$promise$$Promise,then:function(onFulfillment,onRejection){var parent=this;var state=parent._state;if(state===lib$es6$promise$$internal$$FULFILLED&&!onFulfillment||state===lib$es6$promise$$internal$$REJECTED&&!onRejection){return this}var child=new this.constructor(lib$es6$promise$$internal$$noop);var result=parent._result;if(state){var callback=arguments[state-1];lib$es6$promise$asap$$asap(function(){lib$es6$promise$$internal$$invokeCallback(state,child,callback,result)})}else{lib$es6$promise$$internal$$subscribe(parent,child,onFulfillment,onRejection)}return child},"catch":function(onRejection){return this.then(null,onRejection)}};function lib$es6$promise$polyfill$$polyfill(){var local;if(typeof global!=="undefined"){local=global}else if(typeof self!=="undefined"){local=self}else{try{local=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}}var P=local.Promise;if(P&&Object.prototype.toString.call(P.resolve())==="[object Promise]"&&!P.cast){return}local.Promise=lib$es6$promise$promise$$default}var lib$es6$promise$polyfill$$default=lib$es6$promise$polyfill$$polyfill;var lib$es6$promise$umd$$ES6Promise={Promise:lib$es6$promise$promise$$default,polyfill:lib$es6$promise$polyfill$$default};if(typeof define==="function"&&define["amd"]){define(function(){return lib$es6$promise$umd$$ES6Promise})}else if(typeof module!=="undefined"&&module["exports"]){module["exports"]=lib$es6$promise$umd$$ES6Promise}else if(typeof this!=="undefined"){this["ES6Promise"]=lib$es6$promise$umd$$ES6Promise}lib$es6$promise$polyfill$$default()}).call(this)}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{_process:46}],48:[function(require,module,exports){var levels={trace:0,debug:1,info:2,log:3,warn:4,error:5};function getCallerInfo(){var callerInfo={methodName:"",fileLocation:"",line:null,column:null};var error=new Error;var stack=error.stack?error.stack.split("\n"):[];if(!stack||stack.length<1){return callerInfo}var m=null;if(stack[3]){m=stack[3].match(/\s*at\s*(.+?)\s*\((\S*)\s*:(\d*)\s*:(\d*)\)/)}if(!m||m.length<=4){if(stack[2].indexOf("log@")===0){callerInfo.methodName=stack[3].substr(0,stack[3].indexOf("@"))}else{callerInfo.methodName=stack[2].substr(0,stack[2].indexOf("@"))}return callerInfo}callerInfo.methodName=m[1];callerInfo.fileLocation=m[2];callerInfo.line=m[3];callerInfo.column=m[4];return callerInfo}function log(){var logger=arguments[0],level=arguments[1],args=Array.prototype.slice.call(arguments,2);if(levels[level]<=logger.level){return}var callerInfo=getCallerInfo();for(var i=0;i<logger.transports.length;i++){var t=logger.transports[i];var l=t[level];if(l&&typeof l==="function"){l.bind(t,logger.id?"["+logger.id+"]":"","<"+callerInfo.methodName+">: ").apply(t,args)}}}function Logger(level,id,transports,format){this.id=id;this.format=format;if(!this.transports){this.transports=[];this.transports.push(Logger.consoleTransport)}this.level=levels[level];var methods=Object.keys(levels);for(var i=0;i<methods.length;i++){this[methods[i]]=log.bind(null,this,methods[i])}}Logger.prototype.setLevel=function(level){this.level=levels[level]};module.exports=Logger;Logger.consoleTransport=console;Logger.levels={TRACE:"trace",DEBUG:"debug",INFO:"info",LOG:"log",WARN:"warn",ERROR:"error"}},{}],49:[function(require,module,exports){var Logger=require("./Logger");var idLoggers={};var loggers=[];var curLevel=Logger.levels.TRACE;module.exports={getLogger:function(id,transports,format){var logger=new Logger(curLevel,id,transports,format);if(id){idLoggers[id]=idLoggers[id]||[];idLoggers[id].push(logger)}else{loggers.push(logger)}return logger},setLogLevelById:function(level,id){var l=id?idLoggers[id]||[]:loggers;for(var i=0;i<l.length;i++){l[i].setLevel(level)}},setLogLevel:function(level){curLevel=level;var i=0;for(;i<loggers.length;i++){loggers[i].setLevel(level)}for(var id in idLoggers){var l=idLoggers[id]||[];for(i=0;i<l.length;i++){l[i].setLevel(level)}}},levels:Logger.levels}},{"./Logger":48}],50:[function(require,module,exports){(function(T){function z(a,c,b){var g=0,f=[0],h="",l=null,h=b||"UTF8";if("UTF8"!==h&&"UTF16"!==h)throw"encoding must be UTF8 or UTF16";if("HEX"===c){if(0!==a.length%2)throw"srcString of HEX type must be in byte increments";l=B(a);g=l.binLen;f=l.value}else if("ASCII"===c||"TEXT"===c)l=J(a,h),g=l.binLen,f=l.value;else if("B64"===c)l=K(a),g=l.binLen,f=l.value;else throw"inputFormat must be HEX, TEXT, ASCII, or B64";this.getHash=function(a,c,b,h){var l=null,d=f.slice(),n=g,p;3===arguments.length?"number"!==typeof b&&(h=b,b=1):2===arguments.length&&(b=1);if(b!==parseInt(b,10)||1>b)throw"numRounds must a integer >= 1";switch(c){case"HEX":l=L;break;case"B64":l=M;break;default:throw"format must be HEX or B64"}if("SHA-1"===a)for(p=0;p<b;p++)d=y(d,n),n=160;else if("SHA-224"===a)for(p=0;p<b;p++)d=v(d,n,a),n=224;else if("SHA-256"===a)for(p=0;p<b;p++)d=v(d,n,a),n=256;else if("SHA-384"===a)for(p=0;p<b;p++)d=v(d,n,a),n=384;else if("SHA-512"===a)for(p=0;p<b;p++)d=v(d,n,a),n=512;else throw"Chosen SHA variant is not supported";return l(d,N(h))};this.getHMAC=function(a,b,c,l,s){var d,n,p,m,w=[],x=[];d=null;switch(l){case"HEX":l=L;break;case"B64":l=M;break;default:throw"outputFormat must be HEX or B64"}if("SHA-1"===c)n=64,m=160;else if("SHA-224"===c)n=64,m=224;else if("SHA-256"===c)n=64,m=256;else if("SHA-384"===c)n=128,m=384;else if("SHA-512"===c)n=128,m=512;else throw"Chosen SHA variant is not supported";if("HEX"===b)d=B(a),p=d.binLen,d=d.value;else if("ASCII"===b||"TEXT"===b)d=J(a,h),p=d.binLen,d=d.value;else if("B64"===b)d=K(a),p=d.binLen,d=d.value;else throw"inputFormat must be HEX, TEXT, ASCII, or B64";a=8*n;b=n/4-1;n<p/8?(d="SHA-1"===c?y(d,p):v(d,p,c),d[b]&=4294967040):n>p/8&&(d[b]&=4294967040);for(n=0;n<=b;n+=1)w[n]=d[n]^909522486,x[n]=d[n]^1549556828;c="SHA-1"===c?y(x.concat(y(w.concat(f),a+g)),a+m):v(x.concat(v(w.concat(f),a+g,c)),a+m,c);return l(c,N(s))}}function s(a,c){this.a=a;this.b=c}function J(a,c){var b=[],g,f=[],h=0,l;if("UTF8"===c)for(l=0;l<a.length;l+=1)for(g=a.charCodeAt(l),f=[],2048<g?(f[0]=224|(g&61440)>>>12,f[1]=128|(g&4032)>>>6,f[2]=128|g&63):128<g?(f[0]=192|(g&1984)>>>6,f[1]=128|g&63):f[0]=g,g=0;g<f.length;g+=1)b[h>>>2]|=f[g]<<24-h%4*8,h+=1;else if("UTF16"===c)for(l=0;l<a.length;l+=1)b[h>>>2]|=a.charCodeAt(l)<<16-h%4*8,h+=2;return{value:b,binLen:8*h}}function B(a){var c=[],b=a.length,g,f;if(0!==b%2)throw"String of HEX type must be in byte increments";for(g=0;g<b;g+=2){f=parseInt(a.substr(g,2),16);if(isNaN(f))throw"String of HEX type contains invalid characters";c[g>>>3]|=f<<24-g%8*4}return{value:c,binLen:4*b}}function K(a){var c=[],b=0,g,f,h,l,r;if(-1===a.search(/^[a-zA-Z0-9=+\/]+$/))throw"Invalid character in base-64 string";g=a.indexOf("=");a=a.replace(/\=/g,"");if(-1!==g&&g<a.length)throw"Invalid '=' found in base-64 string";for(f=0;f<a.length;f+=4){r=a.substr(f,4);for(h=l=0;h<r.length;h+=1)g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(r[h]),l|=g<<18-6*h;for(h=0;h<r.length-1;h+=1)c[b>>2]|=(l>>>16-8*h&255)<<24-b%4*8,b+=1}return{value:c,binLen:8*b}}function L(a,c){var b="",g=4*a.length,f,h;for(f=0;f<g;f+=1)h=a[f>>>2]>>>8*(3-f%4),b+="0123456789abcdef".charAt(h>>>4&15)+"0123456789abcdef".charAt(h&15);return c.outputUpper?b.toUpperCase():b}function M(a,c){var b="",g=4*a.length,f,h,l;for(f=0;f<g;f+=3)for(l=(a[f>>>2]>>>8*(3-f%4)&255)<<16|(a[f+1>>>2]>>>8*(3-(f+1)%4)&255)<<8|a[f+2>>>2]>>>8*(3-(f+2)%4)&255,h=0;4>h;h+=1)b=8*f+6*h<=32*a.length?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(l>>>6*(3-h)&63):b+c.b64Pad;return b}function N(a){var c={outputUpper:!1,b64Pad:"="};try{a.hasOwnProperty("outputUpper")&&(c.outputUpper=a.outputUpper),a.hasOwnProperty("b64Pad")&&(c.b64Pad=a.b64Pad)}catch(b){}if("boolean"!==typeof c.outputUpper)throw"Invalid outputUpper formatting option";if("string"!==typeof c.b64Pad)throw"Invalid b64Pad formatting option";return c}function U(a,c){return a<<c|a>>>32-c}function u(a,c){return a>>>c|a<<32-c}function t(a,c){var b=null,b=new s(a.a,a.b);return b=32>=c?new s(b.a>>>c|b.b<<32-c&4294967295,b.b>>>c|b.a<<32-c&4294967295):new s(b.b>>>c-32|b.a<<64-c&4294967295,b.a>>>c-32|b.b<<64-c&4294967295)}function O(a,c){var b=null;return b=32>=c?new s(a.a>>>c,a.b>>>c|a.a<<32-c&4294967295):new s(0,a.a>>>c-32)}function V(a,c,b){return a^c^b}function P(a,c,b){return a&c^~a&b}function W(a,c,b){return new s(a.a&c.a^~a.a&b.a,a.b&c.b^~a.b&b.b)}function Q(a,c,b){return a&c^a&b^c&b}function X(a,c,b){return new s(a.a&c.a^a.a&b.a^c.a&b.a,a.b&c.b^a.b&b.b^c.b&b.b)}function Y(a){return u(a,2)^u(a,13)^u(a,22)}function Z(a){var c=t(a,28),b=t(a,34);a=t(a,39);return new s(c.a^b.a^a.a,c.b^b.b^a.b)}function $(a){return u(a,6)^u(a,11)^u(a,25)}function aa(a){var c=t(a,14),b=t(a,18);a=t(a,41);return new s(c.a^b.a^a.a,c.b^b.b^a.b)}function ba(a){return u(a,7)^u(a,18)^a>>>3}function ca(a){var c=t(a,1),b=t(a,8);a=O(a,7);return new s(c.a^b.a^a.a,c.b^b.b^a.b)}function da(a){return u(a,17)^u(a,19)^a>>>10}function ea(a){var c=t(a,19),b=t(a,61);a=O(a,6);return new s(c.a^b.a^a.a,c.b^b.b^a.b)}function R(a,c){var b=(a&65535)+(c&65535);return((a>>>16)+(c>>>16)+(b>>>16)&65535)<<16|b&65535}function fa(a,c,b,g){var f=(a&65535)+(c&65535)+(b&65535)+(g&65535);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)&65535)<<16|f&65535}function S(a,c,b,g,f){var h=(a&65535)+(c&65535)+(b&65535)+(g&65535)+(f&65535);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)+(h>>>16)&65535)<<16|h&65535}function ga(a,c){var b,g,f;b=(a.b&65535)+(c.b&65535);g=(a.b>>>16)+(c.b>>>16)+(b>>>16);f=(g&65535)<<16|b&65535;b=(a.a&65535)+(c.a&65535)+(g>>>16);g=(a.a>>>16)+(c.a>>>16)+(b>>>16);return new s((g&65535)<<16|b&65535,f)}function ha(a,c,b,g){var f,h,l;f=(a.b&65535)+(c.b&65535)+(b.b&65535)+(g.b&65535);h=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f>>>16);l=(h&65535)<<16|f&65535;f=(a.a&65535)+(c.a&65535)+(b.a&65535)+(g.a&65535)+(h>>>16);h=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f>>>16);return new s((h&65535)<<16|f&65535,l)}function ia(a,c,b,g,f){var h,l,r;h=(a.b&65535)+(c.b&65535)+(b.b&65535)+(g.b&65535)+(f.b&65535);l=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f.b>>>16)+(h>>>16);r=(l&65535)<<16|h&65535;h=(a.a&65535)+(c.a&65535)+(b.a&65535)+(g.a&65535)+(f.a&65535)+(l>>>16);l=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f.a>>>16)+(h>>>16);return new s((l&65535)<<16|h&65535,r)}function y(a,c){var b=[],g,f,h,l,r,s,u=P,t=V,v=Q,d=U,n=R,p,m,w=S,x,q=[1732584193,4023233417,2562383102,271733878,3285377520];a[c>>>5]|=128<<24-c%32;a[(c+65>>>9<<4)+15]=c;x=a.length;for(p=0;p<x;p+=16){g=q[0];f=q[1];h=q[2];l=q[3];r=q[4];for(m=0;80>m;m+=1)b[m]=16>m?a[m+p]:d(b[m-3]^b[m-8]^b[m-14]^b[m-16],1),s=20>m?w(d(g,5),u(f,h,l),r,1518500249,b[m]):40>m?w(d(g,5),t(f,h,l),r,1859775393,b[m]):60>m?w(d(g,5),v(f,h,l),r,2400959708,b[m]):w(d(g,5),t(f,h,l),r,3395469782,b[m]),r=l,l=h,h=d(f,30),f=g,g=s;q[0]=n(g,q[0]);q[1]=n(f,q[1]);q[2]=n(h,q[2]);q[3]=n(l,q[3]);q[4]=n(r,q[4])}return q}function v(a,c,b){var g,f,h,l,r,t,u,v,z,d,n,p,m,w,x,q,y,C,D,E,F,G,H,I,e,A=[],B,k=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];d=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428];f=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];if("SHA-224"===b||"SHA-256"===b)n=64,g=(c+65>>>9<<4)+15,w=16,x=1,e=Number,q=R,y=fa,C=S,D=ba,E=da,F=Y,G=$,I=Q,H=P,d="SHA-224"===b?d:f;else if("SHA-384"===b||"SHA-512"===b)n=80,g=(c+128>>>10<<5)+31,w=32,x=2,e=s,q=ga,y=ha,C=ia,D=ca,E=ea,F=Z,G=aa,I=X,H=W,k=[new e(k[0],3609767458),new e(k[1],602891725),new e(k[2],3964484399),new e(k[3],2173295548),new e(k[4],4081628472),new e(k[5],3053834265),new e(k[6],2937671579),new e(k[7],3664609560),new e(k[8],2734883394),new e(k[9],1164996542),new e(k[10],1323610764),new e(k[11],3590304994),new e(k[12],4068182383),new e(k[13],991336113),new e(k[14],633803317),new e(k[15],3479774868),new e(k[16],2666613458),new e(k[17],944711139),new e(k[18],2341262773),new e(k[19],2007800933),new e(k[20],1495990901),new e(k[21],1856431235),new e(k[22],3175218132),new e(k[23],2198950837),new e(k[24],3999719339),new e(k[25],766784016),new e(k[26],2566594879),new e(k[27],3203337956),new e(k[28],1034457026),new e(k[29],2466948901),new e(k[30],3758326383),new e(k[31],168717936),new e(k[32],1188179964),new e(k[33],1546045734),new e(k[34],1522805485),new e(k[35],2643833823),new e(k[36],2343527390),new e(k[37],1014477480),new e(k[38],1206759142),new e(k[39],344077627),new e(k[40],1290863460),new e(k[41],3158454273),new e(k[42],3505952657),new e(k[43],106217008),new e(k[44],3606008344),new e(k[45],1432725776),new e(k[46],1467031594),new e(k[47],851169720),new e(k[48],3100823752),new e(k[49],1363258195),new e(k[50],3750685593),new e(k[51],3785050280),new e(k[52],3318307427),new e(k[53],3812723403),new e(k[54],2003034995),new e(k[55],3602036899),new e(k[56],1575990012),new e(k[57],1125592928),new e(k[58],2716904306),new e(k[59],442776044),new e(k[60],593698344),new e(k[61],3733110249),new e(k[62],2999351573),new e(k[63],3815920427),new e(3391569614,3928383900),new e(3515267271,566280711),new e(3940187606,3454069534),new e(4118630271,4000239992),new e(116418474,1914138554),new e(174292421,2731055270),new e(289380356,3203993006),new e(460393269,320620315),new e(685471733,587496836),new e(852142971,1086792851),new e(1017036298,365543100),new e(1126000580,2618297676),new e(1288033470,3409855158),new e(1501505948,4234509866),new e(1607167915,987167468),new e(1816402316,1246189591)],d="SHA-384"===b?[new e(3418070365,d[0]),new e(1654270250,d[1]),new e(2438529370,d[2]),new e(355462360,d[3]),new e(1731405415,d[4]),new e(41048885895,d[5]),new e(3675008525,d[6]),new e(1203062813,d[7])]:[new e(f[0],4089235720),new e(f[1],2227873595),new e(f[2],4271175723),new e(f[3],1595750129),new e(f[4],2917565137),new e(f[5],725511199),new e(f[6],4215389547),new e(f[7],327033209)];else throw"Unexpected error in SHA-2 implementation";a[c>>>5]|=128<<24-c%32;a[g]=c;B=a.length;for(p=0;p<B;p+=w){c=d[0];g=d[1];f=d[2];h=d[3];l=d[4];r=d[5];t=d[6];u=d[7];for(m=0;m<n;m+=1)A[m]=16>m?new e(a[m*x+p],a[m*x+p+1]):y(E(A[m-2]),A[m-7],D(A[m-15]),A[m-16]),v=C(u,G(l),H(l,r,t),k[m],A[m]),z=q(F(c),I(c,g,f)),u=t,t=r,r=l,l=q(h,v),h=f,f=g,g=c,c=q(v,z);d[0]=q(c,d[0]);d[1]=q(g,d[1]);d[2]=q(f,d[2]);d[3]=q(h,d[3]);d[4]=q(l,d[4]);d[5]=q(r,d[5]);d[6]=q(t,d[6]);d[7]=q(u,d[7])}if("SHA-224"===b)a=[d[0],d[1],d[2],d[3],d[4],d[5],d[6]];else if("SHA-256"===b)a=d;else if("SHA-384"===b)a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b];else if("SHA-512"===b)a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b,d[6].a,d[6].b,d[7].a,d[7].b];else throw"Unexpected error in SHA-2 implementation";return a}"function"===typeof define&&typeof define.amd?define(function(){return z}):"undefined"!==typeof exports?"undefined"!==typeof module&&module.exports?module.exports=exports=z:exports=z:T.jsSHA=z})(this)},{}],51:[function(require,module,exports){"use strict";var assign=require("./lib/utils/common").assign;var deflate=require("./lib/deflate");var inflate=require("./lib/inflate");var constants=require("./lib/zlib/constants");var pako={};assign(pako,deflate,inflate,constants);module.exports=pako},{"./lib/deflate":52,"./lib/inflate":53,"./lib/utils/common":54,"./lib/zlib/constants":57}],52:[function(require,module,exports){"use strict";var zlib_deflate=require("./zlib/deflate.js");var utils=require("./utils/common");var strings=require("./utils/strings");var msg=require("./zlib/messages");var zstream=require("./zlib/zstream");var toString=Object.prototype.toString;var Z_NO_FLUSH=0;var Z_FINISH=4;var Z_OK=0;var Z_STREAM_END=1;var Z_SYNC_FLUSH=2;var Z_DEFAULT_COMPRESSION=-1;var Z_DEFAULT_STRATEGY=0;var Z_DEFLATED=8;var Deflate=function(options){this.options=utils.assign({level:Z_DEFAULT_COMPRESSION,method:Z_DEFLATED,chunkSize:16384,windowBits:15,memLevel:8,strategy:Z_DEFAULT_STRATEGY,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>0){opt.windowBits=-opt.windowBits}else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16){opt.windowBits+=16}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK){throw new Error(msg[status])}if(opt.header){zlib_deflate.deflateSetHeader(this.strm,opt.header)}};Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.string2buf(data)}else if(toString.call(data)==="[object ArrayBuffer]"){strm.input=new Uint8Array(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_deflate.deflate(strm,_mode);if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.avail_out===0||strm.avail_in===0&&(_mode===Z_FINISH||_mode===Z_SYNC_FLUSH)){if(this.options.to==="string"){this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)))}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===Z_OK}if(_mode===Z_SYNC_FLUSH){this.onEnd(Z_OK);strm.avail_out=0;return true}return true};Deflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Deflate.prototype.onEnd=function(status){if(status===Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);if(deflator.err){throw deflator.msg}return deflator.result}function deflateRaw(input,options){options=options||{};options.raw=true;return deflate(input,options)}function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options)}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip},{"./utils/common":54,"./utils/strings":55,"./zlib/deflate.js":59,"./zlib/messages":64,"./zlib/zstream":66}],53:[function(require,module,exports){"use strict";var zlib_inflate=require("./zlib/inflate.js");var utils=require("./utils/common");var strings=require("./utils/strings");var c=require("./zlib/constants");var msg=require("./zlib/messages");var zstream=require("./zlib/zstream");var gzheader=require("./zlib/gzheader");var toString=Object.prototype.toString;var Inflate=function(options){this.options=utils.assign({chunkSize:16384,windowBits:0,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0){opt.windowBits=-15}}if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits)){opt.windowBits+=32}if(opt.windowBits>15&&opt.windowBits<48){if((opt.windowBits&15)===0){opt.windowBits|=15}}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK){throw new Error(msg[status])}this.header=new gzheader;zlib_inflate.inflateGetHeader(this.strm,this.header)};Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;var next_out_utf8,tail,utf8str;var allowBufError=false;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.binstring2buf(data)}else if(toString.call(data)==="[object ArrayBuffer]"){strm.input=new Uint8Array(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);if(status===c.Z_BUF_ERROR&&allowBufError===true){status=c.Z_OK;allowBufError=false}if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.next_out){if(strm.avail_out===0||status===c.Z_STREAM_END||strm.avail_in===0&&(_mode===c.Z_FINISH||_mode===c.Z_SYNC_FLUSH)){if(this.options.to==="string"){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail){utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0)}this.onData(utf8str)}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}if(strm.avail_in===0&&strm.avail_out===0){allowBufError=true}}while((strm.avail_in>0||strm.avail_out===0)&&status!==c.Z_STREAM_END);if(status===c.Z_STREAM_END){_mode=c.Z_FINISH}if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK}if(_mode===c.Z_SYNC_FLUSH){this.onEnd(c.Z_OK);strm.avail_out=0;return true}return true};Inflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Inflate.prototype.onEnd=function(status){if(status===c.Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function inflate(input,options){var inflator=new Inflate(options);inflator.push(input,true);if(inflator.err){throw inflator.msg}return inflator.result}function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options)}exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate},{"./utils/common":54,"./utils/strings":55,"./zlib/constants":57,"./zlib/gzheader":60,"./zlib/inflate.js":62,"./zlib/messages":64,"./zlib/zstream":66}],54:[function(require,module,exports){"use strict";var TYPED_OK=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue}if(typeof source!=="object"){throw new TypeError(source+"must be non-object")}for(var p in source){if(source.hasOwnProperty(p)){obj[p]=source[p]}}}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf}if(buf.subarray){return buf.subarray(0,size)}buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){var i,l,len,pos,chunk,result;len=0;for(i=0,l=chunks.length;i<l;i++){len+=chunks[i].length}result=new Uint8Array(len);pos=0;for(i=0,l=chunks.length;i<l;i++){chunk=chunks[i];result.set(chunk,pos);pos+=chunk.length}return result}};var fnUntyped={arraySet:function(dest,src,src_offs,len,dest_offs){for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){return[].concat.apply([],chunks)}};exports.setTyped=function(on){if(on){exports.Buf8=Uint8Array;exports.Buf16=Uint16Array;exports.Buf32=Int32Array;exports.assign(exports,fnTyped)}else{exports.Buf8=Array;exports.Buf16=Array;exports.Buf32=Array;exports.assign(exports,fnUntyped)}};exports.setTyped(TYPED_OK)},{}],55:[function(require,module,exports){"use strict";var utils=require("./common");var STR_APPLY_OK=true;var STR_APPLY_UIA_OK=true;try{String.fromCharCode.apply(null,[0])}catch(__){STR_APPLY_OK=false}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(__){STR_APPLY_UIA_OK=false}var _utf8len=new utils.Buf8(256);for(var q=0;q<256;q++){_utf8len[q]=q>=252?6:q>=248?5:q>=240?4:q>=224?3:q>=192?2:1}_utf8len[254]=_utf8len[254]=1;exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}buf_len+=c<128?1:c<2048?2:c<65536?3:4}buf=new utils.Buf8(buf_len);for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}if(c<128){buf[i++]=c}else if(c<2048){buf[i++]=192|c>>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};function buf2binstring(buf,len){if(len<65537){if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK){return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len))}}var result="";for(var i=0;i<len;i++){result+=String.fromCharCode(buf[i])}return result}exports.buf2binstring=function(buf){return buf2binstring(buf,buf.length)};exports.binstring2buf=function(str){var buf=new utils.Buf8(str.length);for(var i=0,len=buf.length;i<len;i++){buf[i]=str.charCodeAt(i)}return buf};exports.buf2string=function(buf,max){var i,out,c,c_len;var len=max||buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];if(c<128){utf16buf[out++]=c;continue}c_len=_utf8len[c];if(c_len>4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i<len){c=c<<6|buf[i++]&63;c_len--}if(c_len>1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}return buf2binstring(utf16buf,out)};exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max}},{"./common":54}],56:[function(require,module,exports){"use strict";function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n=len>2e3?2e3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],57:[function(require,module,exports){module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],58:[function(require,module,exports){"use strict";function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?3988292384^c>>>1:c>>>1}table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^buf[i])&255]}return crc^-1}module.exports=crc32},{}],59:[function(require,module,exports){"use strict";var utils=require("../utils/common");var trees=require("./trees");var adler32=require("./adler32");var crc32=require("./crc32");
- var msg=require("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out}if(len===0){return}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size}if(len===0){return 0}strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start)}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start)}strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2}if(nice_match>s.lookahead){nice_match=s.lookahead}do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue}scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scan<strend);len=MAX_MATCH-(strend-scan);scan=strend-MAX_MATCH;if(len>best_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len}return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0){break}n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+1])&s.hash_mask;while(s.insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;s.insert--;if(s.lookahead+s.insert<MIN_MATCH){break}}}}while(s.lookahead<MIN_LOOKAHEAD&&s.strm.avail_in!==0)}function deflate_stored(s,flush){var max_block_size=65535;if(max_block_size>s.pending_buf_size-5){max_block_size=s.pending_buf_size-5}for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}if(hash_head!==0&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head)}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}while(--s.match_length!==0);s.strstart++}else{s.strstart+=s.match_length;s.match_length=0;s.ins_h=s.window[s.strstart];s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+1])&s.hash_mask}}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_slow(s,flush){var hash_head;var bflush;var max_insert;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}s.prev_length=s.match_length;s.prev_match=s.match_start;s.match_length=MIN_MATCH-1;if(hash_head!==0&&s.prev_length<s.max_lazy_match&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head);if(s.match_length<=5&&(s.strategy===Z_FILTERED||s.match_length===MIN_MATCH&&s.strstart-s.match_start>4096)){s.match_length=MIN_MATCH-1}}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}}while(--s.prev_length!==0);s.match_available=0;s.match_length=MIN_MATCH-1;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}else if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);if(bflush){flush_block_only(s,false)}s.strstart++;s.lookahead--;if(s.strm.avail_out===0){return BS_NEED_MORE}}else{s.match_available=1;s.strstart++;s.lookahead--}}if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);s.match_available=0}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_rle(s,flush){var bflush;var prev;var scan,strend;var _win=s.window;for(;;){if(s.lookahead<=MAX_MATCH){fill_window(s);if(s.lookahead<=MAX_MATCH&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.match_length=0;if(s.lookahead>=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scan<strend);s.match_length=MAX_MATCH-(strend-scan);if(s.match_length>s.lookahead){s.match_length=s.lookahead}}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_huff(s,flush){var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE}break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}var Config=function(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func};var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR)}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state)}return ret}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR}if(strm.state.wrap!==2){return Z_STREAM_ERROR}strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6}if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR)}if(windowBits===8){windowBits=9}var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<<s.w_bits;s.w_mask=s.w_size-1;s.hash_bits=memLevel+7;s.hash_size=1<<s.hash_bits;s.hash_mask=s.hash_size-1;s.hash_shift=~~((s.hash_bits+MIN_MATCH-1)/MIN_MATCH);s.window=new utils.Buf8(s.w_size*2);s.head=new utils.Buf16(s.hash_size);s.prev=new utils.Buf16(s.w_size);s.lit_bufsize=1<<memLevel+6;s.pending_buf_size=s.lit_bufsize*4;s.pending_buf=new utils.Buf8(s.pending_buf_size);s.d_buf=s.lit_bufsize>>1;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR)}s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0)}s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0}else if(s.level<6){level_flags=1}else if(s.level===6){level_flags=2}else{level_flags=3}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}}if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break}}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else{s.status=NAME_STATE}}if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.name.length){val=s.gzhead.name.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else{s.status=COMMENT_STATE}}if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.comment.length){val=s.gzhead.comment.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.status=HCRC_STATE}}else{s.status=HCRC_STATE}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm)}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else{s.status=BUSY_STATE}}if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR)}if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR)}if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1}return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s)}else if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH){return Z_OK}if(s.wrap<=0){return Z_STREAM_END}if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>>24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap}return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR)}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":54,"./adler32":56,"./crc32":58,"./messages":64,"./trees":65}],60:[function(require,module,exports){"use strict";function GZheader(){this.text=0;this.time=0;this.xflags=0;this.os=0;this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=false}module.exports=GZheader},{}],61:[function(require,module,exports){"use strict";var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var s_window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;s_window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<<state.lenbits)-1;dmask=(1<<state.distbits)-1;top:do{if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=lcode[hold&lmask];dolen:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op===0){output[_out++]=here&65535}else if(op&16){len=here&65535;op&=15;if(op){if(bits<op){hold+=input[_in++]<<bits;bits+=8}len+=hold&(1<<op)-1;hold>>>=op;bits-=op}if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=dcode[hold&dmask];dodist:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bits<op){hold+=input[_in++]<<bits;bits+=8;if(bits<op){hold+=input[_in++]<<bits;bits+=8}}dist+=hold&(1<<op)-1;if(dist>dmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}}from=0;from_source=s_window;if(wnext===0){from+=wsize-op;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}else if(wnext<op){from+=wsize+wnext-op;op-=wnext;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=0;if(wnext<len){op=wnext;len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}}else{from+=wnext-op;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}while(len>2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++]}}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++]}}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<<op)-1)];continue dodist}else{strm.msg="invalid distance code";state.mode=BAD;break top}break}}else if((op&64)===0){here=lcode[(here&65535)+(hold&(1<<op)-1)];continue dolen}else if(op&32){state.mode=TYPE;break top}else{strm.msg="invalid literal/length code";state.mode=BAD;break top}break}}while(_in<last&&_out<end);len=bits>>3;_in-=len;bits-=len<<3;hold&=(1<<bits)-1;strm.next_in=_in;strm.next_out=_out;strm.avail_in=_in<last?5+(last-_in):5-(_in-last);strm.avail_out=_out<end?257+(end-_out):257-(_out-end);state.hold=hold;state.bits=bits;return}},{}],62:[function(require,module,exports){"use strict";var utils=require("../utils/common");var adler32=require("./adler32");var crc32=require("./crc32");var inflate_fast=require("./inffast");var inflate_table=require("./inftrees");var CODES=0;var LENS=1;var DISTS=2;var Z_FINISH=4;var Z_BLOCK=5;var Z_TREES=6;var Z_OK=0;var Z_STREAM_END=1;var Z_NEED_DICT=2;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_MEM_ERROR=-4;var Z_BUF_ERROR=-5;var Z_DEFLATED=8;var HEAD=1;var FLAGS=2;var TIME=3;var OS=4;var EXLEN=5;var EXTRA=6;var NAME=7;var COMMENT=8;var HCRC=9;var DICTID=10;var DICT=11;var TYPE=12;var TYPEDO=13;var STORED=14;var COPY_=15;var COPY=16;var TABLE=17;var LENLENS=18;var CODELENS=19;var LEN_=20;var LEN=21;var LENEXT=22;var DIST=23;var DISTEXT=24;var MATCH=25;var LIT=26;var CHECK=27;var LENGTH=28;var DONE=29;var BAD=30;var MEM=31;var SYNC=32;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var MAX_WBITS=15;var DEF_WBITS=MAX_WBITS;function ZSWAP32(q){return(q>>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap){strm.adler=state.wrap&1}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15}}if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR}if(state.window!==null&&state.wbits!==windowBits){state.window=null}state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR}state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null}return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144){state.lens[sym++]=8}while(sym<256){state.lens[sym++]=9}while(sym<280){state.lens[sym++]=7}while(sym<288){state.lens[sym++]=8}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32){state.lens[sym++]=5}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<<state.wbits;state.wnext=0;state.whave=0;state.window=new utils.Buf8(state.wsize)}if(copy>=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy}utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0}if(state.whave<state.wsize){state.whave+=dist}}}return 0}function inflate(strm,flush){var state;var input,output;var next;var put;var have,left;var hold;var bits;var _in,_out;var copy;var from;var from_source;var here=0;var here_bits,here_op,here_val;var last_bits,last_op,last_val;var len;var ret;var hbuf=new utils.Buf8(4);var opts;var n;var order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!strm||!strm.state||!strm.output||!strm.input&&strm.avail_in!==0){return Z_STREAM_ERROR}state=strm.state;if(state.mode===TYPE){state.mode=TYPEDO}put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;_in=have;_out=left;ret=Z_OK;inf_leave:for(;;){switch(state.mode){case HEAD:if(state.wrap===0){state.mode=TYPEDO;break}while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.wrap&2&&hold===35615){state.check=0;hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head){state.head.done=false}if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0){state.wbits=len}else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<<len;strm.adler=state.check=1;state.mode=hold&512?DICTID:TYPE;hold=0;bits=0;break;case FLAGS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.flags=hold;if((state.flags&255)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}if(state.flags&57344){strm.msg="unknown header flags set";state.mode=BAD;break}if(state.head){state.head.text=hold>>8&1}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.time=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.xflags=hold&255;state.head.os=hold>>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length=hold;if(state.head){state.head.extra_len=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head){state.head.extra=null}state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have){copy=have}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){state.head.extra=new Array(state.head.extra_len)}utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;state.length-=copy}if(state.length){break inf_leave}}state.length=0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.name+=String.fromCharCode(len)}}while(len&©<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.name=null}state.length=0;state.mode=COMMENT;case COMMENT:if(state.flags&4096){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.comment+=String.fromCharCode(len)}}while(len&©<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.comment=null}state.mode=HCRC;case HCRC:
- if(state.flags&512){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.check&65535)){strm.msg="header crc mismatch";state.mode=BAD;break}hold=0;bits=0}if(state.head){state.head.hcrc=state.flags>>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}strm.adler=state.check=ZSWAP32(hold);hold=0;bits=0;state.mode=DICT;case DICT:if(state.havedict===0){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;return Z_NEED_DICT}strm.adler=state.check=1;state.mode=TYPE;case TYPE:if(flush===Z_BLOCK||flush===Z_TREES){break inf_leave}case TYPEDO:if(state.last){hold>>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.last=hold&1;hold>>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((hold&65535)!==(hold>>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES){break inf_leave}case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have){copy=have}if(copy>left){copy=left}if(copy===0){break inf_leave}utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.nlen=(hold&31)+257;hold>>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have<state.ncode){while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.lens[order[state.have++]]=hold&7;hold>>>=3;bits-=3}while(state.have<19){state.lens[order[state.have++]]=0}state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have<state.nlen+state.ndist){for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_val<16){hold>>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold&3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--){state.lens[state.have++]=len}}}if(state.mode===BAD){break}if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES){break inf_leave}case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE){state.back=-1}break}state.back=0;for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_op&&(here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.lencode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<<state.distbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.distcode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.offset+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0){break inf_leave}copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy}else{from=state.wnext-copy}if(copy>state.length){copy=state.length}from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left){copy=left}left-=copy;state.length-=copy;do{output[put++]=from_source[from++]}while(--copy);if(state.length===0){state.mode=LEN}break;case LIT:if(left===0){break inf_leave}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0){break inf_leave}have--;hold|=input[next++]<<bits;bits+=8}_out-=left;strm.total_out+=_out;state.total+=_out;if(_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,put-_out):adler32(state.check,output,_out,put-_out)}_out=left;if((state.flags?hold:ZSWAP32(hold))!==state.check){strm.msg="incorrect data check";state.mode=BAD;break}hold=0;bits=0}state.mode=LENGTH;case LENGTH:if(state.wrap&&state.flags){while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.total&4294967295)){strm.msg="incorrect length check";state.mode=BAD;break}hold=0;bits=0}state.mode=DONE;case DONE:ret=Z_STREAM_END;break inf_leave;case BAD:ret=Z_DATA_ERROR;break inf_leave;case MEM:return Z_MEM_ERROR;case SYNC:default:return Z_STREAM_ERROR}}strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;if(state.wsize||_out!==strm.avail_out&&state.mode<BAD&&(state.mode<CHECK||flush!==Z_FINISH)){if(updatewindow(strm,strm.output,strm.next_out,_out-strm.avail_out)){state.mode=MEM;return Z_MEM_ERROR}}_in-=strm.avail_in;_out-=strm.avail_out;strm.total_in+=_in;strm.total_out+=_out;state.total+=_out;if(state.wrap&&_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,strm.next_out-_out):adler32(state.check,output,_out,strm.next_out-_out)}strm.data_type=state.bits+(state.last?64:0)+(state.mode===TYPE?128:0)+(state.mode===LEN_||state.mode===COPY_?256:0);if((_in===0&&_out===0||flush===Z_FINISH)&&ret===Z_OK){ret=Z_BUF_ERROR}return ret}function inflateEnd(strm){if(!strm||!strm.state){return Z_STREAM_ERROR}var state=strm.state;if(state.window){state.window=null}strm.state=null;return Z_OK}function inflateGetHeader(strm,head){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if((state.wrap&2)===0){return Z_STREAM_ERROR}state.head=head;head.done=false;return Z_OK}exports.inflateReset=inflateReset;exports.inflateReset2=inflateReset2;exports.inflateResetKeep=inflateResetKeep;exports.inflateInit=inflateInit;exports.inflateInit2=inflateInit2;exports.inflate=inflate;exports.inflateEnd=inflateEnd;exports.inflateGetHeader=inflateGetHeader;exports.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":54,"./adler32":56,"./crc32":58,"./inffast":61,"./inftrees":63}],63:[function(require,module,exports){"use strict";var utils=require("../utils/common");var MAXBITS=15;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var CODES=0;var LENS=1;var DISTS=2;var lbase=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var lext=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var dbase=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var dext=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];module.exports=function inflate_table(type,lens,lens_index,codes,table,table_index,work,opts){var bits=opts.bits;var len=0;var sym=0;var min=0,max=0;var root=0;var curr=0;var drop=0;var left=0;var used=0;var huff=0;var incr;var fill;var low;var mask;var next;var base=null;var base_index=0;var end;var count=new utils.Buf16(MAXBITS+1);var offs=new utils.Buf16(MAXBITS+1);var extra=null;var extra_index=0;var here_bits,here_op,here_val;for(len=0;len<=MAXBITS;len++){count[len]=0}for(sym=0;sym<codes;sym++){count[lens[lens_index+sym]]++}root=bits;for(max=MAXBITS;max>=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min<max;min++){if(count[min]!==0){break}}if(root<min){root=min}left=1;for(len=1;len<=MAXBITS;len++){left<<=1;left-=count[len];if(left<0){return-1}}if(left>0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;len<MAXBITS;len++){offs[len+1]=offs[len]+count[len]}for(sym=0;sym<codes;sym++){if(lens[lens_index+sym]!==0){work[offs[lens[lens_index+sym]]++]=sym}}if(type===CODES){base=extra=work;end=19}else if(type===LENS){base=lbase;base_index-=257;extra=lext;extra_index-=257;end=256}else{base=dbase;extra=dext;end=-1}huff=0;sym=0;len=min;next=table_index;curr=root;drop=0;low=-1;used=1<<root;mask=used-1;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]<end){here_op=0;here_val=work[sym]}else if(work[sym]>end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<<len-drop;fill=1<<curr;min=fill;do{fill-=incr;table[next+(huff>>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<<len-1;while(huff&incr){incr>>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<<curr;while(curr+drop<max){left-=count[curr+drop];if(left<=0){break}curr++;left<<=1}used+=1<<curr;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":54}],64:[function(require,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],65:[function(require,module,exports){"use strict";var utils=require("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<<s.bi_valid&65535;put_short(s,s.bi_buf);s.bi_buf=value>>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<<s.bi_valid&65535;s.bi_valid+=length}}function send_code(s,c,tree){send_bits(s,tree[c*2],tree[c*2+1])}function bi_reverse(code,len){var res=0;do{res|=code&1;code>>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;h<HEAP_SIZE;h++){n=s.heap[h];bits=tree[tree[n*2+1]*2+1]+1;if(bits>max_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code<LENGTH_CODES-1;code++){base_length[code]=length;for(n=0;n<1<<extra_lbits[code];n++){_length_code[length++]=code}}_length_code[length-1]=code;dist=0;for(code=0;code<16;code++){base_dist[code]=dist;for(n=0;n<1<<extra_dbits[code];n++){_dist_code[dist++]=code}}dist>>=7;for(;code<D_CODES;code++){base_dist[code]=dist<<7;for(n=0;n<1<<extra_dbits[code]-7;n++){_dist_code[256+dist++]=code}}for(bits=0;bits<=MAX_BITS;bits++){bl_count[bits]=0}n=0;while(n<=143){static_ltree[n*2+1]=8;n++;bl_count[8]++}while(n<=255){static_ltree[n*2+1]=9;n++;bl_count[9]++}while(n<=279){static_ltree[n*2+1]=7;n++;bl_count[7]++}while(n<=287){static_ltree[n*2+1]=8;n++;bl_count[8]++}gen_codes(static_ltree,L_CODES+1,bl_count);for(n=0;n<D_CODES;n++){static_dtree[n*2+1]=5;static_dtree[n*2]=bi_reverse(n,5)}static_l_desc=new StaticTreeDesc(static_ltree,extra_lbits,LITERALS+1,L_CODES,MAX_BITS);static_d_desc=new StaticTreeDesc(static_dtree,extra_dbits,0,D_CODES,MAX_BITS);static_bl_desc=new StaticTreeDesc(new Array(0),extra_blbits,0,BL_CODES,MAX_BL_BITS)}function init_block(s){var n;for(n=0;n<L_CODES;n++){s.dyn_ltree[n*2]=0}for(n=0;n<D_CODES;n++){s.dyn_dtree[n*2]=0}for(n=0;n<BL_CODES;n++){s.bl_tree[n*2]=0}s.dyn_ltree[END_BLOCK*2]=1;s.opt_len=s.static_len=0;s.last_lit=s.matches=0}function bi_windup(s){if(s.bi_valid>8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]<tree[_m2]||tree[_n2]===tree[_m2]&&depth[n]<=depth[m]}function pqdownheap(s,tree,k){var v=s.heap[k];var j=k<<1;while(j<=s.heap_len){if(j<s.heap_len&&smaller(tree,s.heap[j+1],s.heap[j],s.depth)){j++}if(smaller(tree,v,s.heap[j],s.depth)){break}s.heap[k]=s.heap[j];k=j;j<<=1}s.heap[k]=v}function compress_block(s,ltree,dtree){var dist;var lc;var lx=0;var code;var extra;if(s.last_lit!==0){do{dist=s.pending_buf[s.d_buf+lx*2]<<8|s.pending_buf[s.d_buf+lx*2+1];lc=s.pending_buf[s.l_buf+lx];lx++;if(dist===0){send_code(s,lc,ltree)}else{code=_length_code[lc];send_code(s,code+LITERALS+1,ltree);extra=extra_lbits[code];if(extra!==0){lc-=base_length[code];send_bits(s,lc,extra)}dist--;code=d_code(dist);send_code(s,code,dtree);extra=extra_dbits[code];if(extra!==0){dist-=base_dist[code];send_bits(s,dist,extra)}}}while(lx<s.last_lit)}send_code(s,END_BLOCK,ltree)}function build_tree(s,desc){var tree=desc.dyn_tree;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var elems=desc.stat_desc.elems;var n,m;var max_code=-1;var node;s.heap_len=0;s.heap_max=HEAP_SIZE;for(n=0;n<elems;n++){if(tree[n*2]!==0){s.heap[++s.heap_len]=max_code=n;s.depth[n]=0}else{tree[n*2+1]=0}}while(s.heap_len<2){node=s.heap[++s.heap_len]=max_code<2?++max_code:0;tree[node*2]=1;s.depth[node]=0;s.opt_len--;if(has_stree){s.static_len-=stree[node*2+1]}}desc.max_code=max_code;for(n=s.heap_len>>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){s.bl_tree[curlen*2]+=count}else if(curlen!==0){if(curlen!==prevlen){s.bl_tree[curlen*2]++}s.bl_tree[REP_3_6*2]++}else if(count<=10){s.bl_tree[REPZ_3_10*2]++}else{s.bl_tree[REPZ_11_138*2]++}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function send_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){do{send_code(s,curlen,s.bl_tree)}while(--count!==0)}else if(curlen!==0){if(curlen!==prevlen){send_code(s,curlen,s.bl_tree);count--}send_code(s,REP_3_6,s.bl_tree);send_bits(s,count-3,2)}else if(count<=10){send_code(s,REPZ_3_10,s.bl_tree);send_bits(s,count-3,3)}else{send_code(s,REPZ_11_138,s.bl_tree);send_bits(s,count-11,7)}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function build_bl_tree(s){var max_blindex;scan_tree(s,s.dyn_ltree,s.l_desc.max_code);scan_tree(s,s.dyn_dtree,s.d_desc.max_code);build_tree(s,s.bl_desc);for(max_blindex=BL_CODES-1;max_blindex>=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank<blcodes;rank++){send_bits(s,s.bl_tree[bl_order[rank]*2+1],3)}send_tree(s,s.dyn_ltree,lcodes-1);send_tree(s,s.dyn_dtree,dcodes-1)}function detect_data_type(s){var black_mask=4093624447;var n;for(n=0;n<=31;n++,black_mask>>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n<LITERALS;n++){if(s.dyn_ltree[n*2]!==0){return Z_TEXT}}return Z_BINARY}var static_init_done=false;function _tr_init(s){if(!static_init_done){tr_static_init();static_init_done=true}s.l_desc=new TreeDesc(s.dyn_ltree,static_l_desc);s.d_desc=new TreeDesc(s.dyn_dtree,static_d_desc);s.bl_desc=new TreeDesc(s.bl_tree,static_bl_desc);s.bi_buf=0;s.bi_valid=0;init_block(s)}function _tr_stored_block(s,buf,stored_len,last){send_bits(s,(STORED_BLOCK<<1)+(last?1:0),3);copy_block(s,buf,stored_len,true)}function _tr_align(s){send_bits(s,STATIC_TREES<<1,3);send_code(s,END_BLOCK,static_ltree);bi_flush(s)}function _tr_flush_block(s,buf,stored_len,last){var opt_lenb,static_lenb;var max_blindex=0;if(s.level>0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":54}],66:[function(require,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}],67:[function(require,module,exports){module.exports=function arrayEquals(array){if(!array)return false;if(this.length!=array.length)return false;for(var i=0,l=this.length;i<l;i++){if(this[i]instanceof Array&&array[i]instanceof Array){if(!arrayEquals.apply(this[i],[array[i]]))return false}else if(this[i]!=array[i]){return false}}return true}},{}],68:[function(require,module,exports){exports.Interop=require("./interop")},{"./interop":69}],69:[function(require,module,exports){"use strict";var transform=require("./transform");var arrayEquals=require("./array-equals");function Interop(){this.cache={}}module.exports=Interop;Interop.prototype.getFirstSendingIndexFromAnswer=function(type){if(!this.cache.answer){return null}var session=transform.parse(this.cache.answer);if(session&&session.media&&Array.isArray(session.media)){for(var i=0;i<session.media.length;i++){if(session.media[i].type==type&&(!session.media[i].direction||session.media[i].direction==="sendrecv"||session.media[i].direction==="sendonly")){return i}}}return null};Interop.prototype.toPlanB=function(desc){var self=this;if(typeof desc!=="object"||desc===null||typeof desc.sdp!=="string"){console.warn("An empty description was passed as an argument.");return desc}var session=transform.parse(desc.sdp);if(typeof session.media==="undefined"||!Array.isArray(session.media)||session.media.length===0){console.warn("The description has no media.");return desc}if(session.media.length<=3&&session.media.every(function(m){return["video","audio","data"].indexOf(m.mid)!==-1})){console.warn("This description does not look like Unified Plan.");return desc}var sdp=desc.sdp;var rewrite=false;for(var i=0;i<session.media.length;i++){var uLine=session.media[i];uLine.rtp.forEach(function(rtp){if(rtp.codec==="NULL"){rewrite=true;var offer=transform.parse(self.cache["offer"]);rtp.codec=offer.media[i].rtp[0].codec}})}if(rewrite){sdp=transform.write(session)}this.cache[desc.type]=sdp;var media=session.media;session.media=[];var type2bl={};var types=[];media.forEach(function(uLine){if((typeof uLine.rtcpMux!=="string"||uLine.rtcpMux!=="rtcp-mux")&&uLine.direction!=="inactive"){throw new Error("Cannot convert to Plan B because m-lines "+"without the rtcp-mux attribute were found.")}if(uLine.type==="application"){session.media.push(uLine);types.push(uLine.mid);return}if(typeof type2bl[uLine.type]==="undefined"){type2bl[uLine.type]=uLine}if(typeof uLine.sources==="object"){Object.keys(uLine.sources).forEach(function(ssrc){if(typeof type2bl[uLine.type].sources!=="object")type2bl[uLine.type].sources={};type2bl[uLine.type].sources[ssrc]=uLine.sources[ssrc];if(typeof uLine.msid!=="undefined"){type2bl[uLine.type].sources[ssrc].msid=uLine.msid}})}if(typeof uLine.ssrcGroups!=="undefined"&&Array.isArray(uLine.ssrcGroups)){if(typeof type2bl[uLine.type].ssrcGroups==="undefined"||!Array.isArray(type2bl[uLine.type].ssrcGroups)){type2bl[uLine.type].ssrcGroups=[]}type2bl[uLine.type].ssrcGroups=type2bl[uLine.type].ssrcGroups.concat(uLine.ssrcGroups)}if(type2bl[uLine.type]===uLine){uLine.candidates=media[0].candidates;uLine.iceUfrag=media[0].iceUfrag;uLine.icePwd=media[0].icePwd;uLine.fingerprint=media[0].fingerprint;uLine.mid=uLine.type;delete uLine.bundleOnly;delete uLine.msid;types.push(uLine.type);session.media.push(uLine)}});session.groups.some(function(group){if(group.type==="BUNDLE"){group.mids=types.join(" ");return true}});session.msidSemantic={semantic:"WMS",token:"*"};var resStr=transform.write(session);return new RTCSessionDescription({type:desc.type,sdp:resStr})};Interop.prototype.toUnifiedPlan=function(desc){var self=this;if(typeof desc!=="object"||desc===null||typeof desc.sdp!=="string"){console.warn("An empty description was passed as an argument.");return desc}var session=transform.parse(desc.sdp);if(typeof session.media==="undefined"||!Array.isArray(session.media)||session.media.length===0){console.warn("The description has no media.");return desc}if(session.media.length>3||!session.media.every(function(m){return["video","audio","data"].indexOf(m.mid)!==-1})){console.warn("This description does not look like Plan B.");return desc}var mids=[];session.media.forEach(function(m){mids.push(m.mid)});var hasBundle=false;if(typeof session.groups!=="undefined"&&Array.isArray(session.groups)){hasBundle=session.groups.every(function(g){return g.type!=="BUNDLE"||arrayEquals.apply(g.mids.sort(),[mids.sort()])})}if(!hasBundle){throw new Error("Cannot convert to Unified Plan because m-lines that"+" are not bundled were found.")}var cached;if(typeof this.cache[desc.type]!=="undefined"){cached=transform.parse(this.cache[desc.type])}var recvonlySsrcs={audio:{},video:{}};var mid2ul={};session.media.forEach(function(bLine){if((typeof bLine.rtcpMux!=="string"||bLine.rtcpMux!=="rtcp-mux")&&bLine.direction!=="inactive"){throw new Error("Cannot convert to Unified Plan because m-lines "+"without the rtcp-mux attribute were found.")}if(bLine.type==="application"){mid2ul[bLine.mid]=bLine;return}var sources=bLine.sources;var ssrcGroups=bLine.ssrcGroups;var candidates=bLine.candidates;var iceUfrag=bLine.iceUfrag;var icePwd=bLine.icePwd;var fingerprint=bLine.fingerprint;var port=bLine.port;delete bLine.sources;delete bLine.ssrcGroups;delete bLine.candidates;delete bLine.iceUfrag;delete bLine.icePwd;delete bLine.fingerprint;delete bLine.port;delete bLine.mid;var ssrc2group={};if(typeof ssrcGroups!=="undefined"&&Array.isArray(ssrcGroups)){ssrcGroups.forEach(function(ssrcGroup){if(ssrcGroup.semantics==="SIM"){return}if(typeof ssrcGroup.ssrcs!=="undefined"&&Array.isArray(ssrcGroup.ssrcs)){ssrcGroup.ssrcs.forEach(function(ssrc){if(typeof ssrc2group[ssrc]==="undefined"){ssrc2group[ssrc]=[]}ssrc2group[ssrc].push(ssrcGroup)})}})}var ssrc2ml={};if(typeof sources==="object"){Object.keys(sources).forEach(function(ssrc){var uLine;if(desc.type==="offer"){if(!sources[ssrc].msid){recvonlySsrcs[bLine.type][ssrc]=sources[ssrc];return}}if(typeof ssrc2group[ssrc]!=="undefined"&&Array.isArray(ssrc2group[ssrc])){ssrc2group[ssrc].some(function(ssrcGroup){return ssrcGroup.ssrcs.some(function(related){if(typeof ssrc2ml[related]==="object"){uLine=ssrc2ml[related];return true}})})}if(typeof uLine==="object"){uLine.sources[ssrc]=sources[ssrc];delete sources[ssrc].msid}else{uLine=Object.create(bLine);ssrc2ml[ssrc]=uLine;if(typeof sources[ssrc].msid!=="undefined"){uLine.msid=sources[ssrc].msid;uLine.direction="sendrecv";delete sources[ssrc].msid}uLine.sources={};uLine.sources[ssrc]=sources[ssrc];uLine.ssrcGroups=ssrc2group[ssrc];if(typeof cached!=="undefined"&&typeof cached.media!=="undefined"&&Array.isArray(cached.media)){cached.media.forEach(function(m){if(typeof m.sources==="object"){Object.keys(m.sources).forEach(function(s){if(s===ssrc){uLine.mid=m.mid}})}});
- }if(typeof uLine.mid==="undefined"){if(desc.type==="answer"){throw new Error("An unmapped SSRC was found.")}uLine.mid=[bLine.type,"-",ssrc].join("")}uLine.candidates=candidates;uLine.iceUfrag=iceUfrag;uLine.icePwd=icePwd;uLine.fingerprint=fingerprint;uLine.port=port;mid2ul[uLine.mid]=uLine}})}});session.media=[];mids=[];if(desc.type==="answer"){for(var i=0;i<cached.media.length;i++){var uLine=cached.media[i];if(typeof mid2ul[uLine.mid]==="undefined"){delete uLine.msid;delete uLine.sources;delete uLine.ssrcGroups;if(!uLine.direction||uLine.direction==="sendrecv")uLine.direction="recvonly";else if(uLine.direction==="sendonly")uLine.direction="inactive"}else{}session.media.push(uLine);if(typeof uLine.mid==="string"){mids.push(uLine.mid)}}}else{if(typeof cached!=="undefined"&&typeof cached.media!=="undefined"&&Array.isArray(cached.media)){cached.media.forEach(function(uLine){mids.push(uLine.mid);if(typeof mid2ul[uLine.mid]!=="undefined"){session.media.push(mid2ul[uLine.mid])}else{delete uLine.msid;delete uLine.sources;delete uLine.ssrcGroups;if(!uLine.direction||uLine.direction==="sendrecv")uLine.direction="recvonly";if(!uLine.direction||uLine.direction==="sendonly")uLine.direction="inactive";session.media.push(uLine)}})}Object.keys(mid2ul).forEach(function(mid){if(mids.indexOf(mid)===-1){mids.push(mid);if(mid2ul[mid].direction==="recvonly"){session.media.some(function(uLine){if((uLine.direction==="sendrecv"||uLine.direction==="sendonly")&&uLine.type===mid2ul[mid].type){Object.keys(mid2ul[mid].sources).forEach(function(ssrc){uLine.sources[ssrc]=mid2ul[mid].sources[ssrc]});return true}})}else{session.media.push(mid2ul[mid])}}})}["audio","video"].forEach(function(type){if(!session||!session.media||!Array.isArray(session.media))return;var idx=null;if(Object.keys(recvonlySsrcs[type]).length>0){idx=self.getFirstSendingIndexFromAnswer(type);if(idx===null){for(var i=0;i<session.media.length;i++){if(session.media[i].type===type){idx=i;break}}}}if(idx&&session.media.length>idx){var mLine=session.media[idx];Object.keys(recvonlySsrcs[type]).forEach(function(ssrc){if(mLine.sources&&mLine.sources[ssrc]){console.warn("Replacing an existing SSRC.")}if(!mLine.sources){mLine.sources={}}mLine.sources[ssrc]=recvonlySsrcs[type][ssrc]})}});session.groups.some(function(group){if(group.type==="BUNDLE"){group.mids=mids.join(" ");return true}});session.msidSemantic={semantic:"WMS",token:"*"};var resStr=transform.write(session);this.cache[desc.type]=resStr;return new RTCSessionDescription({type:desc.type,sdp:resStr})}},{"./array-equals":67,"./transform":70}],70:[function(require,module,exports){var transform=require("sdp-transform");exports.write=function(session,opts){if(typeof session!=="undefined"&&typeof session.media!=="undefined"&&Array.isArray(session.media)){session.media.forEach(function(mLine){if(typeof mLine.sources!=="undefined"&&Object.keys(mLine.sources).length!==0){mLine.ssrcs=[];Object.keys(mLine.sources).forEach(function(ssrc){var source=mLine.sources[ssrc];Object.keys(source).forEach(function(attribute){mLine.ssrcs.push({id:ssrc,attribute:attribute,value:source[attribute]})})});delete mLine.sources}if(typeof mLine.ssrcGroups!=="undefined"&&Array.isArray(mLine.ssrcGroups)){mLine.ssrcGroups.forEach(function(ssrcGroup){if(typeof ssrcGroup.ssrcs!=="undefined"&&Array.isArray(ssrcGroup.ssrcs)){ssrcGroup.ssrcs=ssrcGroup.ssrcs.join(" ")}})}})}if(typeof session!=="undefined"&&typeof session.groups!=="undefined"&&Array.isArray(session.groups)){session.groups.forEach(function(g){if(typeof g.mids!=="undefined"&&Array.isArray(g.mids)){g.mids=g.mids.join(" ")}})}return transform.write(session,opts)};exports.parse=function(sdp){var session=transform.parse(sdp);if(typeof session!=="undefined"&&typeof session.media!=="undefined"&&Array.isArray(session.media)){session.media.forEach(function(mLine){if(typeof mLine.ssrcs!=="undefined"&&Array.isArray(mLine.ssrcs)){mLine.sources={};mLine.ssrcs.forEach(function(ssrc){if(!mLine.sources[ssrc.id])mLine.sources[ssrc.id]={};mLine.sources[ssrc.id][ssrc.attribute]=ssrc.value});delete mLine.ssrcs}if(typeof mLine.ssrcGroups!=="undefined"&&Array.isArray(mLine.ssrcGroups)){mLine.ssrcGroups.forEach(function(ssrcGroup){if(typeof ssrcGroup.ssrcs==="string"){ssrcGroup.ssrcs=ssrcGroup.ssrcs.split(" ")}})}})}if(typeof session!=="undefined"&&typeof session.groups!=="undefined"&&Array.isArray(session.groups)){session.groups.forEach(function(g){if(typeof g.mids==="string"){g.mids=g.mids.split(" ")}})}return session}},{"sdp-transform":72}],71:[function(require,module,exports){var grammar=module.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w\/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(o){return o.encoding?"rtpmap:%d %s/%s/%s":o.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(o){return o.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%d trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(o){return o.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:([\w_\/]*) (\S*)(?: (\S*))?/,names:["value","uri","config"],format:function(o){return o.config!=null?"extmap:%s %s %s":"extmap:%s %s"}},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(o){return o.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation"],format:function(o){var str="candidate:%s %d %s %d %s %d typ %s";str+=o.raddr!=null?" raddr %s rport %d":"%v%v";str+=o.tcptype!=null?" tcptype %s":"%v";if(o.generation!=null){str+=" generation %d"}return str}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_]*):(.*)/,names:["id","attribute","value"],format:"ssrc:%d %s:%s"},{push:"ssrcGroups",reg:/^ssrc-group:(\w*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{push:"invalid",names:["value"]}]};Object.keys(grammar).forEach(function(key){var objs=grammar[key];objs.forEach(function(obj){if(!obj.reg){obj.reg=/(.*)/}if(!obj.format){obj.format="%s"}})})},{}],72:[function(require,module,exports){var parser=require("./parser");var writer=require("./writer");exports.write=writer;exports.parse=parser.parse;exports.parseFmtpConfig=parser.parseFmtpConfig;exports.parsePayloads=parser.parsePayloads;exports.parseRemoteCandidates=parser.parseRemoteCandidates},{"./parser":73,"./writer":74}],73:[function(require,module,exports){var toIntIfInt=function(v){return String(Number(v))===v?Number(v):v};var attachProperties=function(match,location,names,rawName){if(rawName&&!names){location[rawName]=toIntIfInt(match[1])}else{for(var i=0;i<names.length;i+=1){if(match[i+1]!=null){location[names[i]]=toIntIfInt(match[i+1])}}}};var parseReg=function(obj,location,content){var needsBlank=obj.name&&obj.names;if(obj.push&&!location[obj.push]){location[obj.push]=[]}else if(needsBlank&&!location[obj.name]){location[obj.name]={}}var keyLocation=obj.push?{}:needsBlank?location[obj.name]:location;attachProperties(content.match(obj.reg),keyLocation,obj.names,obj.name);if(obj.push){location[obj.push].push(keyLocation)}};var grammar=require("./grammar");var validLine=RegExp.prototype.test.bind(/^([a-z])=(.*)/);exports.parse=function(sdp){var session={},media=[],location=session;sdp.split(/(\r\n|\r|\n)/).filter(validLine).forEach(function(l){var type=l[0];var content=l.slice(2);if(type==="m"){media.push({rtp:[],fmtp:[]});location=media[media.length-1]}for(var j=0;j<(grammar[type]||[]).length;j+=1){var obj=grammar[type][j];if(obj.reg.test(content)){return parseReg(obj,location,content)}}});session.media=media;return session};var fmtpReducer=function(acc,expr){var s=expr.split("=");if(s.length===2){acc[s[0]]=toIntIfInt(s[1])}return acc};exports.parseFmtpConfig=function(str){return str.split(/\;\s?/).reduce(fmtpReducer,{})};exports.parsePayloads=function(str){return str.split(" ").map(Number)};exports.parseRemoteCandidates=function(str){var candidates=[];var parts=str.split(" ").map(toIntIfInt);for(var i=0;i<parts.length;i+=3){candidates.push({component:parts[i],ip:parts[i+1],port:parts[i+2]})}return candidates}},{"./grammar":71}],74:[function(require,module,exports){var grammar=require("./grammar");var formatRegExp=/%[sdv%]/g;var format=function(formatStr){var i=1;var args=arguments;var len=args.length;return formatStr.replace(formatRegExp,function(x){if(i>=len){return x}var arg=args[i];i+=1;switch(x){case"%%":return"%";case"%s":return String(arg);case"%d":return Number(arg);case"%v":return""}})};var makeLine=function(type,obj,location){var str=obj.format instanceof Function?obj.format(obj.push?location:location[obj.name]):obj.format;var args=[type+"="+str];if(obj.names){for(var i=0;i<obj.names.length;i+=1){var n=obj.names[i];if(obj.name){args.push(location[obj.name][n])}else{args.push(location[obj.names[i]])}}}else{args.push(location[obj.name])}return format.apply(null,args)};var defaultOuterOrder=["v","o","s","i","u","e","p","c","b","t","r","z","a"];var defaultInnerOrder=["i","c","b","a"];module.exports=function(session,opts){opts=opts||{};if(session.version==null){session.version=0}if(session.name==null){session.name=" "}session.media.forEach(function(mLine){if(mLine.payloads==null){mLine.payloads=""}});var outerOrder=opts.outerOrder||defaultOuterOrder;var innerOrder=opts.innerOrder||defaultInnerOrder;var sdp=[];outerOrder.forEach(function(type){grammar[type].forEach(function(obj){if(obj.name in session&&session[obj.name]!=null){sdp.push(makeLine(type,obj,session))}else if(obj.push in session&&session[obj.push]!=null){session[obj.push].forEach(function(el){sdp.push(makeLine(type,obj,el))})}})});session.media.forEach(function(mLine){sdp.push(makeLine("m",grammar.m[0],mLine));innerOrder.forEach(function(type){grammar[type].forEach(function(obj){if(obj.name in mLine&&mLine[obj.name]!=null){sdp.push(makeLine(type,obj,mLine))}else if(obj.push in mLine&&mLine[obj.push]!=null){mLine[obj.push].forEach(function(el){sdp.push(makeLine(type,obj,el))})}})})});return sdp.join("\r\n")+"\r\n"}},{"./grammar":71}],75:[function(require,module,exports){var transform=require("sdp-transform");var transformUtils=require("./transform-utils");var parseSsrcs=transformUtils.parseSsrcs;var writeSsrcs=transformUtils.writeSsrcs;var DEFAULT_NUM_OF_LAYERS=3;function Simulcast(options){this.options=options?options:{};if(!this.options.numOfLayers){this.options.numOfLayers=DEFAULT_NUM_OF_LAYERS}this.layers=[]}function generateSSRC(){var min=0,max=4294967295;return Math.floor(Math.random()*(max-min))+min}function processVideo(session,action){if(session==null||!Array.isArray(session.media)){return}session.media.forEach(function(mLine){if(mLine.type==="video"){action(mLine)}})}function validateDescription(desc){return desc&&desc!=null&&desc.type&&desc.type!=""&&desc.sdp&&desc.sdp!=""}function explodeRemoteSimulcast(mLine){if(!mLine||!Array.isArray(mLine.ssrcGroups)){return}var sources=parseSsrcs(mLine);var order=[];var j=mLine.ssrcGroups.length;while(j--){if(mLine.ssrcGroups[j].semantics!=="SIM"){continue}var simulcastSsrcs=mLine.ssrcGroups[j].ssrcs.split(" ");for(var i=0;i<simulcastSsrcs.length;i++){var ssrc=simulcastSsrcs[i];order.push(ssrc);var parts=sources[ssrc].msid.split(" ");sources[ssrc].msid=[parts[0],"/",i," ",parts[1],"/",i].join("");sources[ssrc].cname=[sources[ssrc].cname,"/",i].join("");mLine.ssrcGroups.forEach(function(relatedGroup){if(relatedGroup.semantics==="SIM"){return}var relatedSsrcs=relatedGroup.ssrcs.split(" ");if(relatedSsrcs.indexOf(ssrc)===-1){return}relatedSsrcs.forEach(function(relatedSSRC){sources[relatedSSRC].msid=sources[ssrc].msid;sources[relatedSSRC].cname=sources[ssrc].cname;if(relatedSSRC!==ssrc){order.push(relatedSSRC)}})})}mLine.ssrcs=writeSsrcs(sources,order);mLine.ssrcGroups.splice(j,1)}}function implodeRemoteSimulcast(mLine){if(!mLine||!Array.isArray(mLine.ssrcGroups)){console.info("Halt: There are no SSRC groups in the remote "+"description.");return}var sources=parseSsrcs(mLine);mLine.ssrcGroups.forEach(function(simulcastGroup){if(simulcastGroup.semantics!=="SIM"){return}console.info("Imploding SIM group: "+simulcastGroup.ssrcs);simulcastGroup.nuke=true;var simulcastSsrcs=simulcastGroup.ssrcs.split(" ");for(var i=1;i<simulcastSsrcs.length;i++){var ssrc=simulcastSsrcs[i];delete sources[ssrc];mLine.ssrcGroups.forEach(function(relatedGroup){if(relatedGroup.semantics==="SIM"){return}var relatedSsrcs=relatedGroup.ssrcs.split(" ");if(relatedSsrcs.indexOf(ssrc)===-1){return}relatedSsrcs.forEach(function(relatedSSRC){delete sources[relatedSSRC]});relatedGroup.nuke=true})}return});mLine.ssrcs=writeSsrcs(sources);var i=mLine.ssrcGroups.length;while(i--){if(mLine.ssrcGroups[i].nuke){mLine.ssrcGroups.splice(i,1)}}}function removeGoogConference(mLine){if(!mLine||!Array.isArray(mLine.invalid)){return}var i=mLine.invalid.length;while(i--){if(mLine.invalid[i].value=="x-google-flag:conference"){mLine.invalid.splice(i,1)}}}function assertGoogConference(mLine){if(!mLine){return}if(!Array.isArray(mLine.invalid)){mLine.invalid=[]}if(!mLine.invalid.some(function(i){return i.value==="x-google-flag:conference"})){mLine.invalid.push({value:"x-google-flag:conference"})}}Simulcast.prototype._maybeInitializeLayers=function(mLine){if(!mLine||mLine.type!=="video"){return}var sources=parseSsrcs(mLine);if(Object.keys(sources).length===0){if(this.layers.length!==0){this.layers=[]}return}var baseLayerSSRC=Object.keys(sources)[0];var baseLayer=sources[baseLayerSSRC];if(this.layers.length>0&&sources[baseLayerSSRC].cname!==this.layers[0].cname){this.layers=[]}if(this.layers.length<1){this.layers.push({ssrc:baseLayerSSRC,msid:baseLayer.msid,cname:baseLayer.cname});var rtx=false;if(Array.isArray(mLine.rtp)){rtx=mLine.rtp.some(function(rtpmap){return rtpmap.codec==="rtx"})}if(rtx){this.layers[0].rtx=generateSSRC()}for(var i=1;i<Math.max(1,this.options.numOfLayers);i++){var layer={ssrc:generateSSRC()};if(rtx){layer.rtx=generateSSRC()}this.layers.push(layer)}}};Simulcast.prototype._restoreSimulcastView=function(mLine){if(mLine&&mLine.type==="video"&&this.layers.length!==0){var sources={};var msid=this.layers[0].msid;var cname=this.layers[0].cname;var simulcastSsrcs=[];var ssrcGroups=[];for(var i=0;i<this.layers.length;i++){var layer=this.layers[i];sources[layer.ssrc]={msid:msid,cname:cname};simulcastSsrcs.push(layer.ssrc);if(layer.rtx){sources[layer.rtx]={msid:msid,cname:cname};ssrcGroups.push({semantics:"FID",ssrcs:[layer.ssrc,layer.rtx].join(" ")})}}ssrcGroups.push({semantics:"SIM",ssrcs:simulcastSsrcs.join(" ")});mLine.ssrcGroups=ssrcGroups;mLine.ssrcs=writeSsrcs(sources)}};Simulcast.prototype.isSupported=function(){return window.chrome};Simulcast.prototype.mungeRemoteDescription=function(desc){if(!validateDescription(desc)){return desc}var session=transform.parse(desc.sdp);var self=this;processVideo(session,function(mLine){if(self.options.explodeRemoteSimulcast){explodeRemoteSimulcast(mLine)}else{implodeRemoteSimulcast(mLine)}if(self.layers.length<1){removeGoogConference(mLine)}else{assertGoogConference(mLine)}});return new RTCSessionDescription({type:desc.type,sdp:transform.write(session)})};Simulcast.prototype.mungeLocalDescription=function(desc){if(!validateDescription(desc)||!this.isSupported()){return desc}var session=transform.parse(desc.sdp);var self=this;processVideo(session,function(mLine){if(mLine.direction=="recvonly"||mLine.direction=="inactive"){return}self._maybeInitializeLayers(mLine);self._restoreSimulcastView(mLine)});return new RTCSessionDescription({type:desc.type,sdp:transform.write(session)})};module.exports=Simulcast},{"./transform-utils":76,"sdp-transform":78}],76:[function(require,module,exports){exports.writeSsrcs=function(sources,order){var ssrcs=[];if(typeof sources!=="undefined"&&Object.keys(sources).length!==0){if(Array.isArray(order)){for(var i=0;i<order.length;i++){var ssrc=order[i];var source=sources[ssrc];Object.keys(source).forEach(function(attribute){ssrcs.push({id:ssrc,attribute:attribute,value:source[attribute]})})}}else{Object.keys(sources).forEach(function(ssrc){var source=sources[ssrc];Object.keys(source).forEach(function(attribute){ssrcs.push({id:ssrc,attribute:attribute,value:source[attribute]})})})}}return ssrcs};exports.parseSsrcs=function(mLine){var sources={};if(typeof mLine.ssrcs!=="undefined"&&Array.isArray(mLine.ssrcs)){mLine.ssrcs.forEach(function(ssrc){if(!sources[ssrc.id])sources[ssrc.id]={};sources[ssrc.id][ssrc.attribute]=ssrc.value})}return sources}},{}],77:[function(require,module,exports){arguments[4][71][0].apply(exports,arguments)},{dup:71}],78:[function(require,module,exports){arguments[4][72][0].apply(exports,arguments)},{"./parser":79,"./writer":80,dup:72}],79:[function(require,module,exports){arguments[4][73][0].apply(exports,arguments)},{"./grammar":77,dup:73}],80:[function(require,module,exports){arguments[4][74][0].apply(exports,arguments)},{"./grammar":77,dup:74}],81:[function(require,module,exports){arguments[4][71][0].apply(exports,arguments)},{dup:71}],82:[function(require,module,exports){arguments[4][72][0].apply(exports,arguments)},{"./parser":83,"./writer":84,dup:72}],83:[function(require,module,exports){arguments[4][73][0].apply(exports,arguments)},{"./grammar":81,dup:73}],84:[function(require,module,exports){arguments[4][74][0].apply(exports,arguments)},{"./grammar":81,dup:74}],85:[function(require,module,exports){module.exports=require("./lib/")},{"./lib/":86}],86:[function(require,module,exports){var url=require("./url");var parser=require("socket.io-parser");var Manager=require("./manager");var debug=require("debug")("socket.io-client");module.exports=exports=lookup;var cache=exports.managers={};function lookup(uri,opts){if(typeof uri=="object"){opts=uri;uri=undefined}opts=opts||{};var parsed=url(uri);var source=parsed.source;var id=parsed.id;var io;if(opts.forceNew||opts["force new connection"]||false===opts.multiplex){debug("ignoring socket cache for %s",source);io=Manager(source,opts)}else{if(!cache[id]){debug("new io instance for %s",source);cache[id]=Manager(source,opts)}io=cache[id]}return io.socket(parsed.path)}exports.protocol=parser.protocol;exports.connect=lookup;exports.Manager=require("./manager");exports.Socket=require("./socket")},{"./manager":87,"./socket":89,"./url":90,debug:94,"socket.io-parser":130}],87:[function(require,module,exports){var url=require("./url");var eio=require("engine.io-client");var Socket=require("./socket");var Emitter=require("component-emitter");var parser=require("socket.io-parser");var on=require("./on");var bind=require("component-bind");var object=require("object-component");var debug=require("debug")("socket.io-client:manager");var indexOf=require("indexof");var Backoff=require("backo2");module.exports=Manager;function Manager(uri,opts){if(!(this instanceof Manager))return new Manager(uri,opts);if(uri&&"object"==typeof uri){opts=uri;uri=undefined}opts=opts||{};opts.path=opts.path||"/socket.io";this.nsps={};this.subs=[];this.opts=opts;this.reconnection(opts.reconnection!==false);this.reconnectionAttempts(opts.reconnectionAttempts||Infinity);this.reconnectionDelay(opts.reconnectionDelay||1e3);this.reconnectionDelayMax(opts.reconnectionDelayMax||5e3);this.randomizationFactor(opts.randomizationFactor||.5);this.backoff=new Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()});this.timeout(null==opts.timeout?2e4:opts.timeout);this.readyState="closed";this.uri=uri;this.connected=[];this.encoding=false;this.packetBuffer=[];this.encoder=new parser.Encoder;this.decoder=new parser.Decoder;this.autoConnect=opts.autoConnect!==false;if(this.autoConnect)this.open()}Manager.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var nsp in this.nsps){this.nsps[nsp].emit.apply(this.nsps[nsp],arguments)}};Manager.prototype.updateSocketIds=function(){for(var nsp in this.nsps){this.nsps[nsp].id=this.engine.id}};Emitter(Manager.prototype);Manager.prototype.reconnection=function(v){if(!arguments.length)return this._reconnection;this._reconnection=!!v;return this};Manager.prototype.reconnectionAttempts=function(v){if(!arguments.length)return this._reconnectionAttempts;this._reconnectionAttempts=v;return this};Manager.prototype.reconnectionDelay=function(v){if(!arguments.length)return this._reconnectionDelay;this._reconnectionDelay=v;this.backoff&&this.backoff.setMin(v);return this};Manager.prototype.randomizationFactor=function(v){if(!arguments.length)return this._randomizationFactor;this._randomizationFactor=v;this.backoff&&this.backoff.setJitter(v);return this};Manager.prototype.reconnectionDelayMax=function(v){if(!arguments.length)return this._reconnectionDelayMax;this._reconnectionDelayMax=v;this.backoff&&this.backoff.setMax(v);return this};Manager.prototype.timeout=function(v){if(!arguments.length)return this._timeout;this._timeout=v;return this};Manager.prototype.maybeReconnectOnOpen=function(){if(!this.reconnecting&&this._reconnection&&this.backoff.attempts===0){this.reconnect()}};Manager.prototype.open=Manager.prototype.connect=function(fn){debug("readyState %s",this.readyState);if(~this.readyState.indexOf("open"))return this;debug("opening %s",this.uri);this.engine=eio(this.uri,this.opts);var socket=this.engine;var self=this;this.readyState="opening";this.skipReconnect=false;var openSub=on(socket,"open",function(){self.onopen();fn&&fn()});var errorSub=on(socket,"error",function(data){debug("connect_error");self.cleanup();self.readyState="closed";self.emitAll("connect_error",data);if(fn){var err=new Error("Connection error");err.data=data;fn(err)}else{self.maybeReconnectOnOpen()}});if(false!==this._timeout){var timeout=this._timeout;debug("connect attempt will timeout after %d",timeout);var timer=setTimeout(function(){debug("connect attempt timed out after %d",timeout);openSub.destroy();socket.close();socket.emit("error","timeout");self.emitAll("connect_timeout",timeout)},timeout);this.subs.push({destroy:function(){clearTimeout(timer)}})}this.subs.push(openSub);this.subs.push(errorSub);return this};Manager.prototype.onopen=function(){debug("open");this.cleanup();this.readyState="open";this.emit("open");var socket=this.engine;this.subs.push(on(socket,"data",bind(this,"ondata")));this.subs.push(on(this.decoder,"decoded",bind(this,"ondecoded")));this.subs.push(on(socket,"error",bind(this,"onerror")));this.subs.push(on(socket,"close",bind(this,"onclose")))};Manager.prototype.ondata=function(data){this.decoder.add(data)};Manager.prototype.ondecoded=function(packet){this.emit("packet",packet)};Manager.prototype.onerror=function(err){debug("error",err);this.emitAll("error",err)};Manager.prototype.socket=function(nsp){var socket=this.nsps[nsp];if(!socket){socket=new Socket(this,nsp);this.nsps[nsp]=socket;var self=this;socket.on("connect",function(){socket.id=self.engine.id;if(!~indexOf(self.connected,socket)){self.connected.push(socket)}})}return socket};Manager.prototype.destroy=function(socket){var index=indexOf(this.connected,socket);if(~index)this.connected.splice(index,1);if(this.connected.length)return;this.close()};Manager.prototype.packet=function(packet){debug("writing packet %j",packet);var self=this;if(!self.encoding){self.encoding=true;this.encoder.encode(packet,function(encodedPackets){for(var i=0;i<encodedPackets.length;i++){self.engine.write(encodedPackets[i])}self.encoding=false;self.processPacketQueue()})}else{self.packetBuffer.push(packet)}};Manager.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var pack=this.packetBuffer.shift();this.packet(pack)}};Manager.prototype.cleanup=function(){var sub;while(sub=this.subs.shift())sub.destroy();this.packetBuffer=[];this.encoding=false;this.decoder.destroy()};Manager.prototype.close=Manager.prototype.disconnect=function(){this.skipReconnect=true;this.backoff.reset();this.readyState="closed";this.engine&&this.engine.close()};Manager.prototype.onclose=function(reason){debug("close");this.cleanup();this.backoff.reset();this.readyState="closed";this.emit("close",reason);if(this._reconnection&&!this.skipReconnect){this.reconnect()}};Manager.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var self=this;if(this.backoff.attempts>=this._reconnectionAttempts){debug("reconnect failed");this.backoff.reset();this.emitAll("reconnect_failed");this.reconnecting=false}else{var delay=this.backoff.duration();debug("will wait %dms before reconnect attempt",delay);this.reconnecting=true;var timer=setTimeout(function(){if(self.skipReconnect)return;debug("attempting reconnect");self.emitAll("reconnect_attempt",self.backoff.attempts);self.emitAll("reconnecting",self.backoff.attempts);if(self.skipReconnect)return;self.open(function(err){if(err){debug("reconnect attempt error");self.reconnecting=false;self.reconnect();self.emitAll("reconnect_error",err.data)}else{debug("reconnect success");self.onreconnect()}})},delay);this.subs.push({destroy:function(){clearTimeout(timer)}})}};Manager.prototype.onreconnect=function(){var attempt=this.backoff.attempts;this.reconnecting=false;this.backoff.reset();this.updateSocketIds();this.emitAll("reconnect",attempt)}},{"./on":88,"./socket":89,"./url":90,backo2:91,"component-bind":92,"component-emitter":93,debug:94,"engine.io-client":95,indexof:126,"object-component":127,"socket.io-parser":130}],88:[function(require,module,exports){module.exports=on;function on(obj,ev,fn){obj.on(ev,fn);return{destroy:function(){obj.removeListener(ev,fn)}}}},{}],89:[function(require,module,exports){var parser=require("socket.io-parser");var Emitter=require("component-emitter");var toArray=require("to-array");var on=require("./on");var bind=require("component-bind");var debug=require("debug")("socket.io-client:socket");var hasBin=require("has-binary");module.exports=exports=Socket;var events={connect:1,connect_error:1,connect_timeout:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1};var emit=Emitter.prototype.emit;function Socket(io,nsp){this.io=io;this.nsp=nsp;this.json=this;this.ids=0;this.acks={};if(this.io.autoConnect)this.open();this.receiveBuffer=[];this.sendBuffer=[];this.connected=false;this.disconnected=true}Emitter(Socket.prototype);Socket.prototype.subEvents=function(){if(this.subs)return;var io=this.io;this.subs=[on(io,"open",bind(this,"onopen")),on(io,"packet",bind(this,"onpacket")),on(io,"close",bind(this,"onclose"))]};Socket.prototype.open=Socket.prototype.connect=function(){if(this.connected)return this;this.subEvents();this.io.open();if("open"==this.io.readyState)this.onopen();return this};Socket.prototype.send=function(){var args=toArray(arguments);args.unshift("message");this.emit.apply(this,args);return this};Socket.prototype.emit=function(ev){if(events.hasOwnProperty(ev)){emit.apply(this,arguments);return this}var args=toArray(arguments);var parserType=parser.EVENT;if(hasBin(args)){parserType=parser.BINARY_EVENT}var packet={type:parserType,data:args};if("function"==typeof args[args.length-1]){debug("emitting packet with ack id %d",this.ids);this.acks[this.ids]=args.pop();packet.id=this.ids++}if(this.connected){this.packet(packet)}else{this.sendBuffer.push(packet)}return this};Socket.prototype.packet=function(packet){packet.nsp=this.nsp;this.io.packet(packet)};Socket.prototype.onopen=function(){debug("transport is open - connecting");if("/"!=this.nsp){this.packet({type:parser.CONNECT})}};Socket.prototype.onclose=function(reason){debug("close (%s)",reason);this.connected=false;this.disconnected=true;delete this.id;this.emit("disconnect",reason)};Socket.prototype.onpacket=function(packet){if(packet.nsp!=this.nsp)return;switch(packet.type){case parser.CONNECT:this.onconnect();break;case parser.EVENT:this.onevent(packet);break;case parser.BINARY_EVENT:this.onevent(packet);break;case parser.ACK:this.onack(packet);break;case parser.BINARY_ACK:this.onack(packet);break;case parser.DISCONNECT:this.ondisconnect();break;case parser.ERROR:this.emit("error",packet.data);break}};Socket.prototype.onevent=function(packet){var args=packet.data||[];debug("emitting event %j",args);if(null!=packet.id){debug("attaching ack callback to event");args.push(this.ack(packet.id))}if(this.connected){emit.apply(this,args)}else{this.receiveBuffer.push(args)}};Socket.prototype.ack=function(id){var self=this;var sent=false;return function(){if(sent)return;sent=true;var args=toArray(arguments);debug("sending ack %j",args);var type=hasBin(args)?parser.BINARY_ACK:parser.ACK;self.packet({type:type,id:id,data:args})}};Socket.prototype.onack=function(packet){debug("calling ack %s with %j",packet.id,packet.data);var fn=this.acks[packet.id];fn.apply(this,packet.data);delete this.acks[packet.id]};Socket.prototype.onconnect=function(){this.connected=true;this.disconnected=false;this.emit("connect");this.emitBuffered()};Socket.prototype.emitBuffered=function(){var i;for(i=0;i<this.receiveBuffer.length;i++){emit.apply(this,this.receiveBuffer[i])}this.receiveBuffer=[];for(i=0;i<this.sendBuffer.length;i++){this.packet(this.sendBuffer[i])}this.sendBuffer=[]};Socket.prototype.ondisconnect=function(){debug("server disconnect (%s)",this.nsp);this.destroy();this.onclose("io server disconnect")};Socket.prototype.destroy=function(){if(this.subs){for(var i=0;i<this.subs.length;i++){this.subs[i].destroy()}this.subs=null}this.io.destroy(this)};Socket.prototype.close=Socket.prototype.disconnect=function(){if(this.connected){debug("performing disconnect (%s)",this.nsp);this.packet({type:parser.DISCONNECT})}this.destroy();if(this.connected){this.onclose("io client disconnect")}return this}},{"./on":88,"component-bind":92,"component-emitter":93,
- debug:94,"has-binary":124,"socket.io-parser":130,"to-array":134}],90:[function(require,module,exports){(function(global){var parseuri=require("parseuri");var debug=require("debug")("socket.io-client:url");module.exports=url;function url(uri,loc){var obj=uri;var loc=loc||global.location;if(null==uri)uri=loc.protocol+"//"+loc.host;if("string"==typeof uri){if("/"==uri.charAt(0)){if("/"==uri.charAt(1)){uri=loc.protocol+uri}else{uri=loc.hostname+uri}}if(!/^(https?|wss?):\/\//.test(uri)){debug("protocol-less url %s",uri);if("undefined"!=typeof loc){uri=loc.protocol+"//"+uri}else{uri="https://"+uri}}debug("parse %s",uri);obj=parseuri(uri)}if(!obj.port){if(/^(http|ws)$/.test(obj.protocol)){obj.port="80"}else if(/^(http|ws)s$/.test(obj.protocol)){obj.port="443"}}obj.path=obj.path||"/";obj.id=obj.protocol+"://"+obj.host+":"+obj.port;obj.href=obj.protocol+"://"+obj.host+(loc&&loc.port==obj.port?"":":"+obj.port);return obj}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{debug:94,parseuri:128}],91:[function(require,module,exports){module.exports=Backoff;function Backoff(opts){opts=opts||{};this.ms=opts.min||100;this.max=opts.max||1e4;this.factor=opts.factor||2;this.jitter=opts.jitter>0&&opts.jitter<=1?opts.jitter:0;this.attempts=0}Backoff.prototype.duration=function(){var ms=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var rand=Math.random();var deviation=Math.floor(rand*this.jitter*ms);ms=(Math.floor(rand*10)&1)==0?ms-deviation:ms+deviation}return Math.min(ms,this.max)|0};Backoff.prototype.reset=function(){this.attempts=0};Backoff.prototype.setMin=function(min){this.ms=min};Backoff.prototype.setMax=function(max){this.max=max};Backoff.prototype.setJitter=function(jitter){this.jitter=jitter}},{}],92:[function(require,module,exports){var slice=[].slice;module.exports=function(obj,fn){if("string"==typeof fn)fn=obj[fn];if("function"!=typeof fn)throw new Error("bind() requires a function");var args=slice.call(arguments,2);return function(){return fn.apply(obj,args.concat(slice.call(arguments)))}}},{}],93:[function(require,module,exports){module.exports=Emitter;function Emitter(obj){if(obj)return mixin(obj)}function mixin(obj){for(var key in Emitter.prototype){obj[key]=Emitter.prototype[key]}return obj}Emitter.prototype.on=Emitter.prototype.addEventListener=function(event,fn){this._callbacks=this._callbacks||{};(this._callbacks[event]=this._callbacks[event]||[]).push(fn);return this};Emitter.prototype.once=function(event,fn){var self=this;this._callbacks=this._callbacks||{};function on(){self.off(event,on);fn.apply(this,arguments)}on.fn=fn;this.on(event,on);return this};Emitter.prototype.off=Emitter.prototype.removeListener=Emitter.prototype.removeAllListeners=Emitter.prototype.removeEventListener=function(event,fn){this._callbacks=this._callbacks||{};if(0==arguments.length){this._callbacks={};return this}var callbacks=this._callbacks[event];if(!callbacks)return this;if(1==arguments.length){delete this._callbacks[event];return this}var cb;for(var i=0;i<callbacks.length;i++){cb=callbacks[i];if(cb===fn||cb.fn===fn){callbacks.splice(i,1);break}}return this};Emitter.prototype.emit=function(event){this._callbacks=this._callbacks||{};var args=[].slice.call(arguments,1),callbacks=this._callbacks[event];if(callbacks){callbacks=callbacks.slice(0);for(var i=0,len=callbacks.length;i<len;++i){callbacks[i].apply(this,args)}}return this};Emitter.prototype.listeners=function(event){this._callbacks=this._callbacks||{};return this._callbacks[event]||[]};Emitter.prototype.hasListeners=function(event){return!!this.listeners(event).length}},{}],94:[function(require,module,exports){module.exports=debug;function debug(name){if(!debug.enabled(name))return function(){};return function(fmt){fmt=coerce(fmt);var curr=new Date;var ms=curr-(debug[name]||curr);debug[name]=curr;fmt=name+" "+fmt+" +"+debug.humanize(ms);window.console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}}debug.names=[];debug.skips=[];debug.enable=function(name){try{localStorage.debug=name}catch(e){}var split=(name||"").split(/[\s,]+/),len=split.length;for(var i=0;i<len;i++){name=split[i].replace("*",".*?");if(name[0]==="-"){debug.skips.push(new RegExp("^"+name.substr(1)+"$"))}else{debug.names.push(new RegExp("^"+name+"$"))}}};debug.disable=function(){debug.enable("")};debug.humanize=function(ms){var sec=1e3,min=60*1e3,hour=60*min;if(ms>=hour)return(ms/hour).toFixed(1)+"h";if(ms>=min)return(ms/min).toFixed(1)+"m";if(ms>=sec)return(ms/sec|0)+"s";return ms+"ms"};debug.enabled=function(name){for(var i=0,len=debug.skips.length;i<len;i++){if(debug.skips[i].test(name)){return false}}for(var i=0,len=debug.names.length;i<len;i++){if(debug.names[i].test(name)){return true}}return false};function coerce(val){if(val instanceof Error)return val.stack||val.message;return val}try{if(window.localStorage)debug.enable(localStorage.debug)}catch(e){}},{}],95:[function(require,module,exports){module.exports=require("./lib/")},{"./lib/":96}],96:[function(require,module,exports){module.exports=require("./socket");module.exports.parser=require("engine.io-parser")},{"./socket":97,"engine.io-parser":109}],97:[function(require,module,exports){(function(global){var transports=require("./transports");var Emitter=require("component-emitter");var debug=require("debug")("engine.io-client:socket");var index=require("indexof");var parser=require("engine.io-parser");var parseuri=require("parseuri");var parsejson=require("parsejson");var parseqs=require("parseqs");module.exports=Socket;function noop(){}function Socket(uri,opts){if(!(this instanceof Socket))return new Socket(uri,opts);opts=opts||{};if(uri&&"object"==typeof uri){opts=uri;uri=null}if(uri){uri=parseuri(uri);opts.host=uri.host;opts.secure=uri.protocol=="https"||uri.protocol=="wss";opts.port=uri.port;if(uri.query)opts.query=uri.query}this.secure=null!=opts.secure?opts.secure:global.location&&"https:"==location.protocol;if(opts.host){var pieces=opts.host.split(":");opts.hostname=pieces.shift();if(pieces.length){opts.port=pieces.pop()}else if(!opts.port){opts.port=this.secure?"443":"80"}}this.agent=opts.agent||false;this.hostname=opts.hostname||(global.location?location.hostname:"localhost");this.port=opts.port||(global.location&&location.port?location.port:this.secure?443:80);this.query=opts.query||{};if("string"==typeof this.query)this.query=parseqs.decode(this.query);this.upgrade=false!==opts.upgrade;this.path=(opts.path||"/engine.io").replace(/\/$/,"")+"/";this.forceJSONP=!!opts.forceJSONP;this.jsonp=false!==opts.jsonp;this.forceBase64=!!opts.forceBase64;this.enablesXDR=!!opts.enablesXDR;this.timestampParam=opts.timestampParam||"t";this.timestampRequests=opts.timestampRequests;this.transports=opts.transports||["polling","websocket"];this.readyState="";this.writeBuffer=[];this.callbackBuffer=[];this.policyPort=opts.policyPort||843;this.rememberUpgrade=opts.rememberUpgrade||false;this.binaryType=null;this.onlyBinaryUpgrades=opts.onlyBinaryUpgrades;this.pfx=opts.pfx||null;this.key=opts.key||null;this.passphrase=opts.passphrase||null;this.cert=opts.cert||null;this.ca=opts.ca||null;this.ciphers=opts.ciphers||null;this.rejectUnauthorized=opts.rejectUnauthorized||null;this.open()}Socket.priorWebsocketSuccess=false;Emitter(Socket.prototype);Socket.protocol=parser.protocol;Socket.Socket=Socket;Socket.Transport=require("./transport");Socket.transports=require("./transports");Socket.parser=require("engine.io-parser");Socket.prototype.createTransport=function(name){debug('creating transport "%s"',name);var query=clone(this.query);query.EIO=parser.protocol;query.transport=name;if(this.id)query.sid=this.id;var transport=new transports[name]({agent:this.agent,hostname:this.hostname,port:this.port,secure:this.secure,path:this.path,query:query,forceJSONP:this.forceJSONP,jsonp:this.jsonp,forceBase64:this.forceBase64,enablesXDR:this.enablesXDR,timestampRequests:this.timestampRequests,timestampParam:this.timestampParam,policyPort:this.policyPort,socket:this,pfx:this.pfx,key:this.key,passphrase:this.passphrase,cert:this.cert,ca:this.ca,ciphers:this.ciphers,rejectUnauthorized:this.rejectUnauthorized});return transport};function clone(obj){var o={};for(var i in obj){if(obj.hasOwnProperty(i)){o[i]=obj[i]}}return o}Socket.prototype.open=function(){var transport;if(this.rememberUpgrade&&Socket.priorWebsocketSuccess&&this.transports.indexOf("websocket")!=-1){transport="websocket"}else if(0==this.transports.length){var self=this;setTimeout(function(){self.emit("error","No transports available")},0);return}else{transport=this.transports[0]}this.readyState="opening";var transport;try{transport=this.createTransport(transport)}catch(e){this.transports.shift();this.open();return}transport.open();this.setTransport(transport)};Socket.prototype.setTransport=function(transport){debug("setting transport %s",transport.name);var self=this;if(this.transport){debug("clearing existing transport %s",this.transport.name);this.transport.removeAllListeners()}this.transport=transport;transport.on("drain",function(){self.onDrain()}).on("packet",function(packet){self.onPacket(packet)}).on("error",function(e){self.onError(e)}).on("close",function(){self.onClose("transport close")})};Socket.prototype.probe=function(name){debug('probing transport "%s"',name);var transport=this.createTransport(name,{probe:1}),failed=false,self=this;Socket.priorWebsocketSuccess=false;function onTransportOpen(){if(self.onlyBinaryUpgrades){var upgradeLosesBinary=!this.supportsBinary&&self.transport.supportsBinary;failed=failed||upgradeLosesBinary}if(failed)return;debug('probe transport "%s" opened',name);transport.send([{type:"ping",data:"probe"}]);transport.once("packet",function(msg){if(failed)return;if("pong"==msg.type&&"probe"==msg.data){debug('probe transport "%s" pong',name);self.upgrading=true;self.emit("upgrading",transport);if(!transport)return;Socket.priorWebsocketSuccess="websocket"==transport.name;debug('pausing current transport "%s"',self.transport.name);self.transport.pause(function(){if(failed)return;if("closed"==self.readyState)return;debug("changing transport and sending upgrade packet");cleanup();self.setTransport(transport);transport.send([{type:"upgrade"}]);self.emit("upgrade",transport);transport=null;self.upgrading=false;self.flush()})}else{debug('probe transport "%s" failed',name);var err=new Error("probe error");err.transport=transport.name;self.emit("upgradeError",err)}})}function freezeTransport(){if(failed)return;failed=true;cleanup();transport.close();transport=null}function onerror(err){var error=new Error("probe error: "+err);error.transport=transport.name;freezeTransport();debug('probe transport "%s" failed because of error: %s',name,err);self.emit("upgradeError",error)}function onTransportClose(){onerror("transport closed")}function onclose(){onerror("socket closed")}function onupgrade(to){if(transport&&to.name!=transport.name){debug('"%s" works - aborting "%s"',to.name,transport.name);freezeTransport()}}function cleanup(){transport.removeListener("open",onTransportOpen);transport.removeListener("error",onerror);transport.removeListener("close",onTransportClose);self.removeListener("close",onclose);self.removeListener("upgrading",onupgrade)}transport.once("open",onTransportOpen);transport.once("error",onerror);transport.once("close",onTransportClose);this.once("close",onclose);this.once("upgrading",onupgrade);transport.open()};Socket.prototype.onOpen=function(){debug("socket open");this.readyState="open";Socket.priorWebsocketSuccess="websocket"==this.transport.name;this.emit("open");this.flush();if("open"==this.readyState&&this.upgrade&&this.transport.pause){debug("starting upgrade probes");for(var i=0,l=this.upgrades.length;i<l;i++){this.probe(this.upgrades[i])}}};Socket.prototype.onPacket=function(packet){if("opening"==this.readyState||"open"==this.readyState){debug('socket receive: type "%s", data "%s"',packet.type,packet.data);this.emit("packet",packet);this.emit("heartbeat");switch(packet.type){case"open":this.onHandshake(parsejson(packet.data));break;case"pong":this.setPing();break;case"error":var err=new Error("server error");err.code=packet.data;this.emit("error",err);break;case"message":this.emit("data",packet.data);this.emit("message",packet.data);break}}else{debug('packet received with socket readyState "%s"',this.readyState)}};Socket.prototype.onHandshake=function(data){this.emit("handshake",data);this.id=data.sid;this.transport.query.sid=data.sid;this.upgrades=this.filterUpgrades(data.upgrades);this.pingInterval=data.pingInterval;this.pingTimeout=data.pingTimeout;this.onOpen();if("closed"==this.readyState)return;this.setPing();this.removeListener("heartbeat",this.onHeartbeat);this.on("heartbeat",this.onHeartbeat)};Socket.prototype.onHeartbeat=function(timeout){clearTimeout(this.pingTimeoutTimer);var self=this;self.pingTimeoutTimer=setTimeout(function(){if("closed"==self.readyState)return;self.onClose("ping timeout")},timeout||self.pingInterval+self.pingTimeout)};Socket.prototype.setPing=function(){var self=this;clearTimeout(self.pingIntervalTimer);self.pingIntervalTimer=setTimeout(function(){debug("writing ping packet - expecting pong within %sms",self.pingTimeout);self.ping();self.onHeartbeat(self.pingTimeout)},self.pingInterval)};Socket.prototype.ping=function(){this.sendPacket("ping")};Socket.prototype.onDrain=function(){for(var i=0;i<this.prevBufferLen;i++){if(this.callbackBuffer[i]){this.callbackBuffer[i]()}}this.writeBuffer.splice(0,this.prevBufferLen);this.callbackBuffer.splice(0,this.prevBufferLen);this.prevBufferLen=0;if(this.writeBuffer.length==0){this.emit("drain")}else{this.flush()}};Socket.prototype.flush=function(){if("closed"!=this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){debug("flushing %d packets in socket",this.writeBuffer.length);this.transport.send(this.writeBuffer);this.prevBufferLen=this.writeBuffer.length;this.emit("flush")}};Socket.prototype.write=Socket.prototype.send=function(msg,fn){this.sendPacket("message",msg,fn);return this};Socket.prototype.sendPacket=function(type,data,fn){if("closing"==this.readyState||"closed"==this.readyState){return}var packet={type:type,data:data};this.emit("packetCreate",packet);this.writeBuffer.push(packet);this.callbackBuffer.push(fn);this.flush()};Socket.prototype.close=function(){if("opening"==this.readyState||"open"==this.readyState){this.readyState="closing";var self=this;function close(){self.onClose("forced close");debug("socket closing - telling transport to close");self.transport.close()}function cleanupAndClose(){self.removeListener("upgrade",cleanupAndClose);self.removeListener("upgradeError",cleanupAndClose);close()}function waitForUpgrade(){self.once("upgrade",cleanupAndClose);self.once("upgradeError",cleanupAndClose)}if(this.writeBuffer.length){this.once("drain",function(){if(this.upgrading){waitForUpgrade()}else{close()}})}else if(this.upgrading){waitForUpgrade()}else{close()}}return this};Socket.prototype.onError=function(err){debug("socket error %j",err);Socket.priorWebsocketSuccess=false;this.emit("error",err);this.onClose("transport error",err)};Socket.prototype.onClose=function(reason,desc){if("opening"==this.readyState||"open"==this.readyState||"closing"==this.readyState){debug('socket close with reason: "%s"',reason);var self=this;clearTimeout(this.pingIntervalTimer);clearTimeout(this.pingTimeoutTimer);setTimeout(function(){self.writeBuffer=[];self.callbackBuffer=[];self.prevBufferLen=0},0);this.transport.removeAllListeners("close");this.transport.close();this.transport.removeAllListeners();this.readyState="closed";this.id=null;this.emit("close",reason,desc)}};Socket.prototype.filterUpgrades=function(upgrades){var filteredUpgrades=[];for(var i=0,j=upgrades.length;i<j;i++){if(~index(this.transports,upgrades[i]))filteredUpgrades.push(upgrades[i])}return filteredUpgrades}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./transport":98,"./transports":99,"component-emitter":93,debug:106,"engine.io-parser":109,indexof:126,parsejson:120,parseqs:121,parseuri:122}],98:[function(require,module,exports){var parser=require("engine.io-parser");var Emitter=require("component-emitter");module.exports=Transport;function Transport(opts){this.path=opts.path;this.hostname=opts.hostname;this.port=opts.port;this.secure=opts.secure;this.query=opts.query;this.timestampParam=opts.timestampParam;this.timestampRequests=opts.timestampRequests;this.readyState="";this.agent=opts.agent||false;this.socket=opts.socket;this.enablesXDR=opts.enablesXDR;this.pfx=opts.pfx;this.key=opts.key;this.passphrase=opts.passphrase;this.cert=opts.cert;this.ca=opts.ca;this.ciphers=opts.ciphers;this.rejectUnauthorized=opts.rejectUnauthorized}Emitter(Transport.prototype);Transport.timestamps=0;Transport.prototype.onError=function(msg,desc){var err=new Error(msg);err.type="TransportError";err.description=desc;this.emit("error",err);return this};Transport.prototype.open=function(){if("closed"==this.readyState||""==this.readyState){this.readyState="opening";this.doOpen()}return this};Transport.prototype.close=function(){if("opening"==this.readyState||"open"==this.readyState){this.doClose();this.onClose()}return this};Transport.prototype.send=function(packets){if("open"==this.readyState){this.write(packets)}else{throw new Error("Transport not open")}};Transport.prototype.onOpen=function(){this.readyState="open";this.writable=true;this.emit("open")};Transport.prototype.onData=function(data){var packet=parser.decodePacket(data,this.socket.binaryType);this.onPacket(packet)};Transport.prototype.onPacket=function(packet){this.emit("packet",packet)};Transport.prototype.onClose=function(){this.readyState="closed";this.emit("close")}},{"component-emitter":93,"engine.io-parser":109}],99:[function(require,module,exports){(function(global){var XMLHttpRequest=require("xmlhttprequest");var XHR=require("./polling-xhr");var JSONP=require("./polling-jsonp");var websocket=require("./websocket");exports.polling=polling;exports.websocket=websocket;function polling(opts){var xhr;var xd=false;var xs=false;var jsonp=false!==opts.jsonp;if(global.location){var isSSL="https:"==location.protocol;var port=location.port;if(!port){port=isSSL?443:80}xd=opts.hostname!=location.hostname||port!=opts.port;xs=opts.secure!=isSSL}opts.xdomain=xd;opts.xscheme=xs;xhr=new XMLHttpRequest(opts);if("open"in xhr&&!opts.forceJSONP){return new XHR(opts)}else{if(!jsonp)throw new Error("JSONP disabled");return new JSONP(opts)}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./polling-jsonp":100,"./polling-xhr":101,"./websocket":103,xmlhttprequest:104}],100:[function(require,module,exports){(function(global){var Polling=require("./polling");var inherit=require("component-inherit");module.exports=JSONPPolling;var rNewline=/\n/g;var rEscapedNewline=/\\n/g;var callbacks;var index=0;function empty(){}function JSONPPolling(opts){Polling.call(this,opts);this.query=this.query||{};if(!callbacks){if(!global.___eio)global.___eio=[];callbacks=global.___eio}this.index=callbacks.length;var self=this;callbacks.push(function(msg){self.onData(msg)});this.query.j=this.index;if(global.document&&global.addEventListener){global.addEventListener("beforeunload",function(){if(self.script)self.script.onerror=empty},false)}}inherit(JSONPPolling,Polling);JSONPPolling.prototype.supportsBinary=false;JSONPPolling.prototype.doClose=function(){if(this.script){this.script.parentNode.removeChild(this.script);this.script=null}if(this.form){this.form.parentNode.removeChild(this.form);this.form=null;this.iframe=null}Polling.prototype.doClose.call(this)};JSONPPolling.prototype.doPoll=function(){var self=this;var script=document.createElement("script");if(this.script){this.script.parentNode.removeChild(this.script);this.script=null}script.async=true;script.src=this.uri();script.onerror=function(e){self.onError("jsonp poll error",e)};var insertAt=document.getElementsByTagName("script")[0];insertAt.parentNode.insertBefore(script,insertAt);this.script=script;var isUAgecko="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);if(isUAgecko){setTimeout(function(){var iframe=document.createElement("iframe");document.body.appendChild(iframe);document.body.removeChild(iframe)},100)}};JSONPPolling.prototype.doWrite=function(data,fn){var self=this;if(!this.form){var form=document.createElement("form");var area=document.createElement("textarea");var id=this.iframeId="eio_iframe_"+this.index;var iframe;form.className="socketio";form.style.position="absolute";form.style.top="-1000px";form.style.left="-1000px";form.target=id;form.method="POST";form.setAttribute("accept-charset","utf-8");area.name="d";form.appendChild(area);document.body.appendChild(form);this.form=form;this.area=area}this.form.action=this.uri();function complete(){initIframe();fn()}function initIframe(){if(self.iframe){try{self.form.removeChild(self.iframe)}catch(e){self.onError("jsonp polling iframe removal error",e)}}try{var html='<iframe src="javascript:0" name="'+self.iframeId+'">';iframe=document.createElement(html)}catch(e){iframe=document.createElement("iframe");iframe.name=self.iframeId;iframe.src="javascript:0"}iframe.id=self.iframeId;self.form.appendChild(iframe);self.iframe=iframe}initIframe();data=data.replace(rEscapedNewline,"\\\n");this.area.value=data.replace(rNewline,"\\n");try{this.form.submit()}catch(e){}if(this.iframe.attachEvent){this.iframe.onreadystatechange=function(){if(self.iframe.readyState=="complete"){complete()}}}else{this.iframe.onload=complete}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./polling":102,"component-inherit":105}],101:[function(require,module,exports){(function(global){var XMLHttpRequest=require("xmlhttprequest");var Polling=require("./polling");var Emitter=require("component-emitter");var inherit=require("component-inherit");var debug=require("debug")("engine.io-client:polling-xhr");module.exports=XHR;module.exports.Request=Request;function empty(){}function XHR(opts){Polling.call(this,opts);if(global.location){var isSSL="https:"==location.protocol;var port=location.port;if(!port){port=isSSL?443:80}this.xd=opts.hostname!=global.location.hostname||port!=opts.port;this.xs=opts.secure!=isSSL}}inherit(XHR,Polling);XHR.prototype.supportsBinary=true;XHR.prototype.request=function(opts){opts=opts||{};opts.uri=this.uri();opts.xd=this.xd;opts.xs=this.xs;opts.agent=this.agent||false;opts.supportsBinary=this.supportsBinary;opts.enablesXDR=this.enablesXDR;opts.pfx=this.pfx;opts.key=this.key;opts.passphrase=this.passphrase;opts.cert=this.cert;opts.ca=this.ca;opts.ciphers=this.ciphers;opts.rejectUnauthorized=this.rejectUnauthorized;return new Request(opts)};XHR.prototype.doWrite=function(data,fn){var isBinary=typeof data!=="string"&&data!==undefined;var req=this.request({method:"POST",data:data,isBinary:isBinary});var self=this;req.on("success",fn);req.on("error",function(err){self.onError("xhr post error",err)});this.sendXhr=req};XHR.prototype.doPoll=function(){debug("xhr poll");var req=this.request();var self=this;req.on("data",function(data){self.onData(data)});req.on("error",function(err){self.onError("xhr poll error",err)});this.pollXhr=req};function Request(opts){this.method=opts.method||"GET";this.uri=opts.uri;this.xd=!!opts.xd;this.xs=!!opts.xs;this.async=false!==opts.async;this.data=undefined!=opts.data?opts.data:null;this.agent=opts.agent;this.isBinary=opts.isBinary;this.supportsBinary=opts.supportsBinary;this.enablesXDR=opts.enablesXDR;this.pfx=opts.pfx;this.key=opts.key;this.passphrase=opts.passphrase;this.cert=opts.cert;this.ca=opts.ca;this.ciphers=opts.ciphers;this.rejectUnauthorized=opts.rejectUnauthorized;this.create()}Emitter(Request.prototype);Request.prototype.create=function(){var opts={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};opts.pfx=this.pfx;opts.key=this.key;opts.passphrase=this.passphrase;opts.cert=this.cert;opts.ca=this.ca;opts.ciphers=this.ciphers;opts.rejectUnauthorized=this.rejectUnauthorized;var xhr=this.xhr=new XMLHttpRequest(opts);var self=this;try{debug("xhr open %s: %s",this.method,this.uri);xhr.open(this.method,this.uri,this.async);if(this.supportsBinary){xhr.responseType="arraybuffer"}if("POST"==this.method){try{if(this.isBinary){xhr.setRequestHeader("Content-type","application/octet-stream")}else{xhr.setRequestHeader("Content-type","text/plain;charset=UTF-8")}}catch(e){}}if("withCredentials"in xhr){xhr.withCredentials=true}if(this.hasXDR()){xhr.onload=function(){self.onLoad()};xhr.onerror=function(){self.onError(xhr.responseText)}}else{xhr.onreadystatechange=function(){if(4!=xhr.readyState)return;if(200==xhr.status||1223==xhr.status){self.onLoad()}else{setTimeout(function(){self.onError(xhr.status)},0)}}}debug("xhr data %s",this.data);xhr.send(this.data)}catch(e){setTimeout(function(){self.onError(e)},0);return}if(global.document){this.index=Request.requestsCount++;Request.requests[this.index]=this}};Request.prototype.onSuccess=function(){this.emit("success");this.cleanup()};Request.prototype.onData=function(data){this.emit("data",data);this.onSuccess()};Request.prototype.onError=function(err){this.emit("error",err);this.cleanup(true)};Request.prototype.cleanup=function(fromError){if("undefined"==typeof this.xhr||null===this.xhr){return}if(this.hasXDR()){this.xhr.onload=this.xhr.onerror=empty}else{this.xhr.onreadystatechange=empty}if(fromError){try{this.xhr.abort()}catch(e){}}if(global.document){delete Request.requests[this.index]}this.xhr=null};Request.prototype.onLoad=function(){var data;try{var contentType;try{contentType=this.xhr.getResponseHeader("Content-Type").split(";")[0]}catch(e){}if(contentType==="application/octet-stream"){data=this.xhr.response}else{if(!this.supportsBinary){data=this.xhr.responseText}else{data="ok"}}}catch(e){this.onError(e)}if(null!=data){this.onData(data)}};Request.prototype.hasXDR=function(){return"undefined"!==typeof global.XDomainRequest&&!this.xs&&this.enablesXDR};Request.prototype.abort=function(){this.cleanup()};if(global.document){Request.requestsCount=0;Request.requests={};if(global.attachEvent){global.attachEvent("onunload",unloadHandler)}else if(global.addEventListener){global.addEventListener("beforeunload",unloadHandler,false)}}function unloadHandler(){for(var i in Request.requests){if(Request.requests.hasOwnProperty(i)){Request.requests[i].abort()}}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./polling":102,"component-emitter":93,"component-inherit":105,debug:106,xmlhttprequest:104}],102:[function(require,module,exports){var Transport=require("../transport");var parseqs=require("parseqs");var parser=require("engine.io-parser");var inherit=require("component-inherit");var debug=require("debug")("engine.io-client:polling");module.exports=Polling;var hasXHR2=function(){var XMLHttpRequest=require("xmlhttprequest");var xhr=new XMLHttpRequest({xdomain:false});return null!=xhr.responseType}();function Polling(opts){var forceBase64=opts&&opts.forceBase64;if(!hasXHR2||forceBase64){this.supportsBinary=false}Transport.call(this,opts)}inherit(Polling,Transport);Polling.prototype.name="polling";Polling.prototype.doOpen=function(){this.poll()};Polling.prototype.pause=function(onPause){var pending=0;var self=this;this.readyState="pausing";function pause(){debug("paused");self.readyState="paused";onPause()}if(this.polling||!this.writable){var total=0;if(this.polling){debug("we are currently polling - waiting to pause");total++;this.once("pollComplete",function(){debug("pre-pause polling complete");--total||pause()})}if(!this.writable){debug("we are currently writing - waiting to pause");total++;this.once("drain",function(){debug("pre-pause writing complete");--total||pause()})}}else{pause()}};Polling.prototype.poll=function(){debug("polling");this.polling=true;this.doPoll();this.emit("poll")};Polling.prototype.onData=function(data){var self=this;debug("polling got data %s",data);var callback=function(packet,index,total){if("opening"==self.readyState){self.onOpen()}if("close"==packet.type){self.onClose();return false}self.onPacket(packet)};parser.decodePayload(data,this.socket.binaryType,callback);if("closed"!=this.readyState){this.polling=false;this.emit("pollComplete");if("open"==this.readyState){this.poll()}else{debug('ignoring poll - transport state "%s"',this.readyState)}}};Polling.prototype.doClose=function(){var self=this;function close(){debug("writing close packet");self.write([{type:"close"}])}if("open"==this.readyState){debug("transport open - closing");close()}else{debug("transport not open - deferring close");this.once("open",close)}};Polling.prototype.write=function(packets){var self=this;this.writable=false;var callbackfn=function(){self.writable=true;self.emit("drain")};var self=this;parser.encodePayload(packets,this.supportsBinary,function(data){self.doWrite(data,callbackfn)})};Polling.prototype.uri=function(){var query=this.query||{};var schema=this.secure?"https":"http";var port="";if(false!==this.timestampRequests){query[this.timestampParam]=+new Date+"-"+Transport.timestamps++}if(!this.supportsBinary&&!query.sid){query.b64=1}query=parseqs.encode(query);if(this.port&&("https"==schema&&this.port!=443||"http"==schema&&this.port!=80)){port=":"+this.port}if(query.length){query="?"+query}return schema+"://"+this.hostname+port+this.path+query}},{"../transport":98,"component-inherit":105,debug:106,"engine.io-parser":109,parseqs:121,xmlhttprequest:104}],103:[function(require,module,exports){var Transport=require("../transport");var parser=require("engine.io-parser");var parseqs=require("parseqs");var inherit=require("component-inherit");var debug=require("debug")("engine.io-client:websocket");var WebSocket=require("ws");module.exports=WS;function WS(opts){var forceBase64=opts&&opts.forceBase64;if(forceBase64){this.supportsBinary=false}Transport.call(this,opts)}inherit(WS,Transport);WS.prototype.name="websocket";WS.prototype.supportsBinary=true;WS.prototype.doOpen=function(){if(!this.check()){return}var self=this;var uri=this.uri();var protocols=void 0;var opts={agent:this.agent};opts.pfx=this.pfx;opts.key=this.key;opts.passphrase=this.passphrase;opts.cert=this.cert;opts.ca=this.ca;opts.ciphers=this.ciphers;opts.rejectUnauthorized=this.rejectUnauthorized;this.ws=new WebSocket(uri,protocols,opts);if(this.ws.binaryType===undefined){this.supportsBinary=false}this.ws.binaryType="arraybuffer";this.addEventListeners()};WS.prototype.addEventListeners=function(){var self=this;this.ws.onopen=function(){self.onOpen()};this.ws.onclose=function(){self.onClose()};this.ws.onmessage=function(ev){self.onData(ev.data)};this.ws.onerror=function(e){self.onError("websocket error",e)}};if("undefined"!=typeof navigator&&/iPad|iPhone|iPod/i.test(navigator.userAgent)){WS.prototype.onData=function(data){var self=this;setTimeout(function(){Transport.prototype.onData.call(self,data)},0)}}WS.prototype.write=function(packets){var self=this;this.writable=false;for(var i=0,l=packets.length;i<l;i++){parser.encodePacket(packets[i],this.supportsBinary,function(data){try{self.ws.send(data)}catch(e){debug("websocket closed before onclose event")}})}function ondrain(){self.writable=true;self.emit("drain")}setTimeout(ondrain,0)};WS.prototype.onClose=function(){Transport.prototype.onClose.call(this)};WS.prototype.doClose=function(){if(typeof this.ws!=="undefined"){this.ws.close()}};WS.prototype.uri=function(){var query=this.query||{};var schema=this.secure?"wss":"ws";var port="";if(this.port&&("wss"==schema&&this.port!=443||"ws"==schema&&this.port!=80)){port=":"+this.port}if(this.timestampRequests){query[this.timestampParam]=+new Date}if(!this.supportsBinary){query.b64=1}query=parseqs.encode(query);if(query.length){
- query="?"+query}return schema+"://"+this.hostname+port+this.path+query};WS.prototype.check=function(){return!!WebSocket&&!("__initialize"in WebSocket&&this.name===WS.prototype.name)}},{"../transport":98,"component-inherit":105,debug:106,"engine.io-parser":109,parseqs:121,ws:123}],104:[function(require,module,exports){var hasCORS=require("has-cors");module.exports=function(opts){var xdomain=opts.xdomain;var xscheme=opts.xscheme;var enablesXDR=opts.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!xdomain||hasCORS)){return new XMLHttpRequest}}catch(e){}try{if("undefined"!=typeof XDomainRequest&&!xscheme&&enablesXDR){return new XDomainRequest}}catch(e){}if(!xdomain){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}}},{"has-cors":118}],105:[function(require,module,exports){module.exports=function(a,b){var fn=function(){};fn.prototype=b.prototype;a.prototype=new fn;a.prototype.constructor=a}},{}],106:[function(require,module,exports){exports=module.exports=require("./debug");exports.log=log;exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"];function useColors(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}exports.formatters.j=function(v){return JSON.stringify(v)};function formatArgs(){var args=arguments;var useColors=this.useColors;args[0]=(useColors?"%c":"")+this.namespace+(useColors?" %c":" ")+args[0]+(useColors?"%c ":" ")+"+"+exports.humanize(this.diff);if(!useColors)return args;var c="color: "+this.color;args=[args[0],c,"color: inherit"].concat(Array.prototype.slice.call(args,1));var index=0;var lastC=0;args[0].replace(/%[a-z%]/g,function(match){if("%%"===match)return;index++;if("%c"===match){lastC=index}});args.splice(lastC,0,c);return args}function log(){return"object"==typeof console&&"function"==typeof console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){localStorage.removeItem("debug")}else{localStorage.debug=namespaces}}catch(e){}}function load(){var r;try{r=localStorage.debug}catch(e){}return r}exports.enable(load())},{"./debug":107}],107:[function(require,module,exports){exports=module.exports=debug;exports.coerce=coerce;exports.disable=disable;exports.enable=enable;exports.enabled=enabled;exports.humanize=require("ms");exports.names=[];exports.skips=[];exports.formatters={};var prevColor=0;var prevTime;function selectColor(){return exports.colors[prevColor++%exports.colors.length]}function debug(namespace){function disabled(){}disabled.enabled=false;function enabled(){var self=enabled;var curr=+new Date;var ms=curr-(prevTime||curr);self.diff=ms;self.prev=prevTime;self.curr=curr;prevTime=curr;if(null==self.useColors)self.useColors=exports.useColors();if(null==self.color&&self.useColors)self.color=selectColor();var args=Array.prototype.slice.call(arguments);args[0]=exports.coerce(args[0]);if("string"!==typeof args[0]){args=["%o"].concat(args)}var index=0;args[0]=args[0].replace(/%([a-z%])/g,function(match,format){if(match==="%%")return match;index++;var formatter=exports.formatters[format];if("function"===typeof formatter){var val=args[index];match=formatter.call(self,val);args.splice(index,1);index--}return match});if("function"===typeof exports.formatArgs){args=exports.formatArgs.apply(self,args)}var logFn=enabled.log||exports.log||console.log.bind(console);logFn.apply(self,args)}enabled.enabled=true;var fn=exports.enabled(namespace)?enabled:disabled;fn.namespace=namespace;return fn}function enable(namespaces){exports.save(namespaces);var split=(namespaces||"").split(/[\s,]+/);var len=split.length;for(var i=0;i<len;i++){if(!split[i])continue;namespaces=split[i].replace(/\*/g,".*?");if(namespaces[0]==="-"){exports.skips.push(new RegExp("^"+namespaces.substr(1)+"$"))}else{exports.names.push(new RegExp("^"+namespaces+"$"))}}}function disable(){exports.enable("")}function enabled(name){var i,len;for(i=0,len=exports.skips.length;i<len;i++){if(exports.skips[i].test(name)){return false}}for(i=0,len=exports.names.length;i<len;i++){if(exports.names[i].test(name)){return true}}return false}function coerce(val){if(val instanceof Error)return val.stack||val.message;return val}},{ms:108}],108:[function(require,module,exports){var s=1e3;var m=s*60;var h=m*60;var d=h*24;var y=d*365.25;module.exports=function(val,options){options=options||{};if("string"==typeof val)return parse(val);return options.long?long(val):short(val)};function parse(str){var match=/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str);if(!match)return;var n=parseFloat(match[1]);var type=(match[2]||"ms").toLowerCase();switch(type){case"years":case"year":case"y":return n*y;case"days":case"day":case"d":return n*d;case"hours":case"hour":case"h":return n*h;case"minutes":case"minute":case"m":return n*m;case"seconds":case"second":case"s":return n*s;case"ms":return n}}function short(ms){if(ms>=d)return Math.round(ms/d)+"d";if(ms>=h)return Math.round(ms/h)+"h";if(ms>=m)return Math.round(ms/m)+"m";if(ms>=s)return Math.round(ms/s)+"s";return ms+"ms"}function long(ms){return plural(ms,d,"day")||plural(ms,h,"hour")||plural(ms,m,"minute")||plural(ms,s,"second")||ms+" ms"}function plural(ms,n,name){if(ms<n)return;if(ms<n*1.5)return Math.floor(ms/n)+" "+name;return Math.ceil(ms/n)+" "+name+"s"}},{}],109:[function(require,module,exports){(function(global){var keys=require("./keys");var hasBinary=require("has-binary");var sliceBuffer=require("arraybuffer.slice");var base64encoder=require("base64-arraybuffer");var after=require("after");var utf8=require("utf8");var isAndroid=navigator.userAgent.match(/Android/i);var isPhantomJS=/PhantomJS/i.test(navigator.userAgent);var dontSendBlobs=isAndroid||isPhantomJS;exports.protocol=3;var packets=exports.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6};var packetslist=keys(packets);var err={type:"error",data:"parser error"};var Blob=require("blob");exports.encodePacket=function(packet,supportsBinary,utf8encode,callback){if("function"==typeof supportsBinary){callback=supportsBinary;supportsBinary=false}if("function"==typeof utf8encode){callback=utf8encode;utf8encode=null}var data=packet.data===undefined?undefined:packet.data.buffer||packet.data;if(global.ArrayBuffer&&data instanceof ArrayBuffer){return encodeArrayBuffer(packet,supportsBinary,callback)}else if(Blob&&data instanceof global.Blob){return encodeBlob(packet,supportsBinary,callback)}if(data&&data.base64){return encodeBase64Object(packet,callback)}var encoded=packets[packet.type];if(undefined!==packet.data){encoded+=utf8encode?utf8.encode(String(packet.data)):String(packet.data)}return callback(""+encoded)};function encodeBase64Object(packet,callback){var message="b"+exports.packets[packet.type]+packet.data.data;return callback(message)}function encodeArrayBuffer(packet,supportsBinary,callback){if(!supportsBinary){return exports.encodeBase64Packet(packet,callback)}var data=packet.data;var contentArray=new Uint8Array(data);var resultBuffer=new Uint8Array(1+data.byteLength);resultBuffer[0]=packets[packet.type];for(var i=0;i<contentArray.length;i++){resultBuffer[i+1]=contentArray[i]}return callback(resultBuffer.buffer)}function encodeBlobAsArrayBuffer(packet,supportsBinary,callback){if(!supportsBinary){return exports.encodeBase64Packet(packet,callback)}var fr=new FileReader;fr.onload=function(){packet.data=fr.result;exports.encodePacket(packet,supportsBinary,true,callback)};return fr.readAsArrayBuffer(packet.data)}function encodeBlob(packet,supportsBinary,callback){if(!supportsBinary){return exports.encodeBase64Packet(packet,callback)}if(dontSendBlobs){return encodeBlobAsArrayBuffer(packet,supportsBinary,callback)}var length=new Uint8Array(1);length[0]=packets[packet.type];var blob=new Blob([length.buffer,packet.data]);return callback(blob)}exports.encodeBase64Packet=function(packet,callback){var message="b"+exports.packets[packet.type];if(Blob&&packet.data instanceof Blob){var fr=new FileReader;fr.onload=function(){var b64=fr.result.split(",")[1];callback(message+b64)};return fr.readAsDataURL(packet.data)}var b64data;try{b64data=String.fromCharCode.apply(null,new Uint8Array(packet.data))}catch(e){var typed=new Uint8Array(packet.data);var basic=new Array(typed.length);for(var i=0;i<typed.length;i++){basic[i]=typed[i]}b64data=String.fromCharCode.apply(null,basic)}message+=global.btoa(b64data);return callback(message)};exports.decodePacket=function(data,binaryType,utf8decode){if(typeof data=="string"||data===undefined){if(data.charAt(0)=="b"){return exports.decodeBase64Packet(data.substr(1),binaryType)}if(utf8decode){try{data=utf8.decode(data)}catch(e){return err}}var type=data.charAt(0);if(Number(type)!=type||!packetslist[type]){return err}if(data.length>1){return{type:packetslist[type],data:data.substring(1)}}else{return{type:packetslist[type]}}}var asArray=new Uint8Array(data);var type=asArray[0];var rest=sliceBuffer(data,1);if(Blob&&binaryType==="blob"){rest=new Blob([rest])}return{type:packetslist[type],data:rest}};exports.decodeBase64Packet=function(msg,binaryType){var type=packetslist[msg.charAt(0)];if(!global.ArrayBuffer){return{type:type,data:{base64:true,data:msg.substr(1)}}}var data=base64encoder.decode(msg.substr(1));if(binaryType==="blob"&&Blob){data=new Blob([data])}return{type:type,data:data}};exports.encodePayload=function(packets,supportsBinary,callback){if(typeof supportsBinary=="function"){callback=supportsBinary;supportsBinary=null}var isBinary=hasBinary(packets);if(supportsBinary&&isBinary){if(Blob&&!dontSendBlobs){return exports.encodePayloadAsBlob(packets,callback)}return exports.encodePayloadAsArrayBuffer(packets,callback)}if(!packets.length){return callback("0:")}function setLengthHeader(message){return message.length+":"+message}function encodeOne(packet,doneCallback){exports.encodePacket(packet,!isBinary?false:supportsBinary,true,function(message){doneCallback(null,setLengthHeader(message))})}map(packets,encodeOne,function(err,results){return callback(results.join(""))})};function map(ary,each,done){var result=new Array(ary.length);var next=after(ary.length,done);var eachWithIndex=function(i,el,cb){each(el,function(error,msg){result[i]=msg;cb(error,result)})};for(var i=0;i<ary.length;i++){eachWithIndex(i,ary[i],next)}}exports.decodePayload=function(data,binaryType,callback){if(typeof data!="string"){return exports.decodePayloadAsBinary(data,binaryType,callback)}if(typeof binaryType==="function"){callback=binaryType;binaryType=null}var packet;if(data==""){return callback(err,0,1)}var length="",n,msg;for(var i=0,l=data.length;i<l;i++){var chr=data.charAt(i);if(":"!=chr){length+=chr}else{if(""==length||length!=(n=Number(length))){return callback(err,0,1)}msg=data.substr(i+1,n);if(length!=msg.length){return callback(err,0,1)}if(msg.length){packet=exports.decodePacket(msg,binaryType,true);if(err.type==packet.type&&err.data==packet.data){return callback(err,0,1)}var ret=callback(packet,i+n,l);if(false===ret)return}i+=n;length=""}}if(length!=""){return callback(err,0,1)}};exports.encodePayloadAsArrayBuffer=function(packets,callback){if(!packets.length){return callback(new ArrayBuffer(0))}function encodeOne(packet,doneCallback){exports.encodePacket(packet,true,true,function(data){return doneCallback(null,data)})}map(packets,encodeOne,function(err,encodedPackets){var totalLength=encodedPackets.reduce(function(acc,p){var len;if(typeof p==="string"){len=p.length}else{len=p.byteLength}return acc+len.toString().length+len+2},0);var resultArray=new Uint8Array(totalLength);var bufferIndex=0;encodedPackets.forEach(function(p){var isString=typeof p==="string";var ab=p;if(isString){var view=new Uint8Array(p.length);for(var i=0;i<p.length;i++){view[i]=p.charCodeAt(i)}ab=view.buffer}if(isString){resultArray[bufferIndex++]=0}else{resultArray[bufferIndex++]=1}var lenStr=ab.byteLength.toString();for(var i=0;i<lenStr.length;i++){resultArray[bufferIndex++]=parseInt(lenStr[i])}resultArray[bufferIndex++]=255;var view=new Uint8Array(ab);for(var i=0;i<view.length;i++){resultArray[bufferIndex++]=view[i]}});return callback(resultArray.buffer)})};exports.encodePayloadAsBlob=function(packets,callback){function encodeOne(packet,doneCallback){exports.encodePacket(packet,true,true,function(encoded){var binaryIdentifier=new Uint8Array(1);binaryIdentifier[0]=1;if(typeof encoded==="string"){var view=new Uint8Array(encoded.length);for(var i=0;i<encoded.length;i++){view[i]=encoded.charCodeAt(i)}encoded=view.buffer;binaryIdentifier[0]=0}var len=encoded instanceof ArrayBuffer?encoded.byteLength:encoded.size;var lenStr=len.toString();var lengthAry=new Uint8Array(lenStr.length+1);for(var i=0;i<lenStr.length;i++){lengthAry[i]=parseInt(lenStr[i])}lengthAry[lenStr.length]=255;if(Blob){var blob=new Blob([binaryIdentifier.buffer,lengthAry.buffer,encoded]);doneCallback(null,blob)}})}map(packets,encodeOne,function(err,results){return callback(new Blob(results))})};exports.decodePayloadAsBinary=function(data,binaryType,callback){if(typeof binaryType==="function"){callback=binaryType;binaryType=null}var bufferTail=data;var buffers=[];var numberTooLong=false;while(bufferTail.byteLength>0){var tailArray=new Uint8Array(bufferTail);var isString=tailArray[0]===0;var msgLength="";for(var i=1;;i++){if(tailArray[i]==255)break;if(msgLength.length>310){numberTooLong=true;break}msgLength+=tailArray[i]}if(numberTooLong)return callback(err,0,1);bufferTail=sliceBuffer(bufferTail,2+msgLength.length);msgLength=parseInt(msgLength);var msg=sliceBuffer(bufferTail,0,msgLength);if(isString){try{msg=String.fromCharCode.apply(null,new Uint8Array(msg))}catch(e){var typed=new Uint8Array(msg);msg="";for(var i=0;i<typed.length;i++){msg+=String.fromCharCode(typed[i])}}}buffers.push(msg);bufferTail=sliceBuffer(bufferTail,msgLength)}var total=buffers.length;buffers.forEach(function(buffer,i){callback(exports.decodePacket(buffer,binaryType,true),i,total)})}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./keys":110,after:111,"arraybuffer.slice":112,"base64-arraybuffer":113,blob:114,"has-binary":115,utf8:117}],110:[function(require,module,exports){module.exports=Object.keys||function keys(obj){var arr=[];var has=Object.prototype.hasOwnProperty;for(var i in obj){if(has.call(obj,i)){arr.push(i)}}return arr}},{}],111:[function(require,module,exports){module.exports=after;function after(count,callback,err_cb){var bail=false;err_cb=err_cb||noop;proxy.count=count;return count===0?callback():proxy;function proxy(err,result){if(proxy.count<=0){throw new Error("after called too many times")}--proxy.count;if(err){bail=true;callback(err);callback=err_cb}else if(proxy.count===0&&!bail){callback(null,result)}}}function noop(){}},{}],112:[function(require,module,exports){module.exports=function(arraybuffer,start,end){var bytes=arraybuffer.byteLength;start=start||0;end=end||bytes;if(arraybuffer.slice){return arraybuffer.slice(start,end)}if(start<0){start+=bytes}if(end<0){end+=bytes}if(end>bytes){end=bytes}if(start>=bytes||start>=end||bytes===0){return new ArrayBuffer(0)}var abv=new Uint8Array(arraybuffer);var result=new Uint8Array(end-start);for(var i=start,ii=0;i<end;i++,ii++){result[ii]=abv[i]}return result.buffer}},{}],113:[function(require,module,exports){(function(chars){"use strict";exports.encode=function(arraybuffer){var bytes=new Uint8Array(arraybuffer),i,len=bytes.length,base64="";for(i=0;i<len;i+=3){base64+=chars[bytes[i]>>2];base64+=chars[(bytes[i]&3)<<4|bytes[i+1]>>4];base64+=chars[(bytes[i+1]&15)<<2|bytes[i+2]>>6];base64+=chars[bytes[i+2]&63]}if(len%3===2){base64=base64.substring(0,base64.length-1)+"="}else if(len%3===1){base64=base64.substring(0,base64.length-2)+"=="}return base64};exports.decode=function(base64){var bufferLength=base64.length*.75,len=base64.length,i,p=0,encoded1,encoded2,encoded3,encoded4;if(base64[base64.length-1]==="="){bufferLength--;if(base64[base64.length-2]==="="){bufferLength--}}var arraybuffer=new ArrayBuffer(bufferLength),bytes=new Uint8Array(arraybuffer);for(i=0;i<len;i+=4){encoded1=chars.indexOf(base64[i]);encoded2=chars.indexOf(base64[i+1]);encoded3=chars.indexOf(base64[i+2]);encoded4=chars.indexOf(base64[i+3]);bytes[p++]=encoded1<<2|encoded2>>4;bytes[p++]=(encoded2&15)<<4|encoded3>>2;bytes[p++]=(encoded3&3)<<6|encoded4&63}return arraybuffer}})("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},{}],114:[function(require,module,exports){(function(global){var BlobBuilder=global.BlobBuilder||global.WebKitBlobBuilder||global.MSBlobBuilder||global.MozBlobBuilder;var blobSupported=function(){try{var b=new Blob(["hi"]);return b.size==2}catch(e){return false}}();var blobBuilderSupported=BlobBuilder&&BlobBuilder.prototype.append&&BlobBuilder.prototype.getBlob;function BlobBuilderConstructor(ary,options){options=options||{};var bb=new BlobBuilder;for(var i=0;i<ary.length;i++){bb.append(ary[i])}return options.type?bb.getBlob(options.type):bb.getBlob()}module.exports=function(){if(blobSupported){return global.Blob}else if(blobBuilderSupported){return BlobBuilderConstructor}else{return undefined}}()}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],115:[function(require,module,exports){(function(global){var isArray=require("isarray");module.exports=hasBinary;function hasBinary(data){function _hasBinary(obj){if(!obj)return false;if(global.Buffer&&global.Buffer.isBuffer(obj)||global.ArrayBuffer&&obj instanceof ArrayBuffer||global.Blob&&obj instanceof Blob||global.File&&obj instanceof File){return true}if(isArray(obj)){for(var i=0;i<obj.length;i++){if(_hasBinary(obj[i])){return true}}}else if(obj&&"object"==typeof obj){if(obj.toJSON){obj=obj.toJSON()}for(var key in obj){if(obj.hasOwnProperty(key)&&_hasBinary(obj[key])){return true}}}return false}return _hasBinary(data)}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{isarray:116}],116:[function(require,module,exports){module.exports=Array.isArray||function(arr){return Object.prototype.toString.call(arr)=="[object Array]"}},{}],117:[function(require,module,exports){(function(global){(function(root){var freeExports=typeof exports=="object"&&exports;var freeModule=typeof module=="object"&&module&&module.exports==freeExports&&module;var freeGlobal=typeof global=="object"&&global;if(freeGlobal.global===freeGlobal||freeGlobal.window===freeGlobal){root=freeGlobal}var stringFromCharCode=String.fromCharCode;function ucs2decode(string){var output=[];var counter=0;var length=string.length;var value;var extra;while(counter<length){value=string.charCodeAt(counter++);if(value>=55296&&value<=56319&&counter<length){extra=string.charCodeAt(counter++);if((extra&64512)==56320){output.push(((value&1023)<<10)+(extra&1023)+65536)}else{output.push(value);counter--}}else{output.push(value)}}return output}function ucs2encode(array){var length=array.length;var index=-1;var value;var output="";while(++index<length){value=array[index];if(value>65535){value-=65536;output+=stringFromCharCode(value>>>10&1023|55296);value=56320|value&1023}output+=stringFromCharCode(value)}return output}function createByte(codePoint,shift){return stringFromCharCode(codePoint>>shift&63|128)}function encodeCodePoint(codePoint){if((codePoint&4294967168)==0){return stringFromCharCode(codePoint)}var symbol="";if((codePoint&4294965248)==0){symbol=stringFromCharCode(codePoint>>6&31|192)}else if((codePoint&4294901760)==0){symbol=stringFromCharCode(codePoint>>12&15|224);symbol+=createByte(codePoint,6)}else if((codePoint&4292870144)==0){symbol=stringFromCharCode(codePoint>>18&7|240);symbol+=createByte(codePoint,12);symbol+=createByte(codePoint,6)}symbol+=stringFromCharCode(codePoint&63|128);return symbol}function utf8encode(string){var codePoints=ucs2decode(string);var length=codePoints.length;var index=-1;var codePoint;var byteString="";while(++index<length){codePoint=codePoints[index];byteString+=encodeCodePoint(codePoint)}return byteString}function readContinuationByte(){if(byteIndex>=byteCount){throw Error("Invalid byte index")}var continuationByte=byteArray[byteIndex]&255;byteIndex++;if((continuationByte&192)==128){return continuationByte&63}throw Error("Invalid continuation byte")}function decodeSymbol(){var byte1;var byte2;var byte3;var byte4;var codePoint;if(byteIndex>byteCount){throw Error("Invalid byte index")}if(byteIndex==byteCount){return false}byte1=byteArray[byteIndex]&255;byteIndex++;if((byte1&128)==0){return byte1}if((byte1&224)==192){var byte2=readContinuationByte();codePoint=(byte1&31)<<6|byte2;if(codePoint>=128){return codePoint}else{throw Error("Invalid continuation byte")}}if((byte1&240)==224){byte2=readContinuationByte();byte3=readContinuationByte();codePoint=(byte1&15)<<12|byte2<<6|byte3;if(codePoint>=2048){return codePoint}else{throw Error("Invalid continuation byte")}}if((byte1&248)==240){byte2=readContinuationByte();byte3=readContinuationByte();byte4=readContinuationByte();codePoint=(byte1&15)<<18|byte2<<12|byte3<<6|byte4;if(codePoint>=65536&&codePoint<=1114111){return codePoint}}throw Error("Invalid UTF-8 detected")}var byteArray;var byteCount;var byteIndex;function utf8decode(byteString){byteArray=ucs2decode(byteString);byteCount=byteArray.length;byteIndex=0;var codePoints=[];var tmp;while((tmp=decodeSymbol())!==false){codePoints.push(tmp)}return ucs2encode(codePoints)}var utf8={version:"2.0.0",encode:utf8encode,decode:utf8decode};if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){define(function(){return utf8})}else if(freeExports&&!freeExports.nodeType){if(freeModule){freeModule.exports=utf8}else{var object={};var hasOwnProperty=object.hasOwnProperty;for(var key in utf8){hasOwnProperty.call(utf8,key)&&(freeExports[key]=utf8[key])}}}else{root.utf8=utf8}})(this)}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],118:[function(require,module,exports){var global=require("global");try{module.exports="XMLHttpRequest"in global&&"withCredentials"in new global.XMLHttpRequest}catch(err){module.exports=false}},{global:119}],119:[function(require,module,exports){module.exports=function(){return this}()},{}],120:[function(require,module,exports){(function(global){var rvalidchars=/^[\],:{}\s]*$/;var rvalidescape=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;var rvalidtokens=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;var rvalidbraces=/(?:^|:|,)(?:\s*\[)+/g;var rtrimLeft=/^\s+/;var rtrimRight=/\s+$/;module.exports=function parsejson(data){if("string"!=typeof data||!data){return null}data=data.replace(rtrimLeft,"").replace(rtrimRight,"");if(global.JSON&&JSON.parse){return JSON.parse(data)}if(rvalidchars.test(data.replace(rvalidescape,"@").replace(rvalidtokens,"]").replace(rvalidbraces,""))){return new Function("return "+data)()}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],121:[function(require,module,exports){exports.encode=function(obj){var str="";for(var i in obj){if(obj.hasOwnProperty(i)){if(str.length)str+="&";str+=encodeURIComponent(i)+"="+encodeURIComponent(obj[i])}}return str};exports.decode=function(qs){var qry={};var pairs=qs.split("&");for(var i=0,l=pairs.length;i<l;i++){var pair=pairs[i].split("=");qry[decodeURIComponent(pair[0])]=decodeURIComponent(pair[1])}return qry}},{}],122:[function(require,module,exports){var re=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;var parts=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];module.exports=function parseuri(str){var src=str,b=str.indexOf("["),e=str.indexOf("]");if(b!=-1&&e!=-1){str=str.substring(0,b)+str.substring(b,e).replace(/:/g,";")+str.substring(e,str.length)}var m=re.exec(str||""),uri={},i=14;while(i--){uri[parts[i]]=m[i]||""}if(b!=-1&&e!=-1){uri.source=src;uri.host=uri.host.substring(1,uri.host.length-1).replace(/;/g,":");uri.authority=uri.authority.replace("[","").replace("]","").replace(/;/g,":");uri.ipv6uri=true}return uri}},{}],123:[function(require,module,exports){var global=function(){return this}();var WebSocket=global.WebSocket||global.MozWebSocket;module.exports=WebSocket?ws:null;function ws(uri,protocols,opts){var instance;if(protocols){instance=new WebSocket(uri,protocols)}else{instance=new WebSocket(uri)}return instance}if(WebSocket)ws.prototype=WebSocket.prototype},{}],124:[function(require,module,exports){(function(global){var isArray=require("isarray");module.exports=hasBinary;function hasBinary(data){function _hasBinary(obj){if(!obj)return false;if(global.Buffer&&global.Buffer.isBuffer(obj)||global.ArrayBuffer&&obj instanceof ArrayBuffer||global.Blob&&obj instanceof Blob||global.File&&obj instanceof File){return true}if(isArray(obj)){for(var i=0;i<obj.length;i++){if(_hasBinary(obj[i])){return true}}}else if(obj&&"object"==typeof obj){if(obj.toJSON){obj=obj.toJSON()}for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)&&_hasBinary(obj[key])){return true}}}return false}return _hasBinary(data)}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{isarray:125}],125:[function(require,module,exports){arguments[4][116][0].apply(exports,arguments)},{dup:116}],126:[function(require,module,exports){var indexOf=[].indexOf;module.exports=function(arr,obj){if(indexOf)return arr.indexOf(obj);for(var i=0;i<arr.length;++i){if(arr[i]===obj)return i}return-1}},{}],127:[function(require,module,exports){var has=Object.prototype.hasOwnProperty;exports.keys=Object.keys||function(obj){var keys=[];for(var key in obj){if(has.call(obj,key)){keys.push(key)}}return keys};exports.values=function(obj){var vals=[];for(var key in obj){if(has.call(obj,key)){vals.push(obj[key])}}return vals};exports.merge=function(a,b){for(var key in b){if(has.call(b,key)){a[key]=b[key]}}return a};exports.length=function(obj){return exports.keys(obj).length};exports.isEmpty=function(obj){return 0==exports.length(obj)}},{}],128:[function(require,module,exports){var re=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;var parts=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];module.exports=function parseuri(str){var m=re.exec(str||""),uri={},i=14;while(i--){uri[parts[i]]=m[i]||""}return uri}},{}],129:[function(require,module,exports){(function(global){var isArray=require("isarray");var isBuf=require("./is-buffer");exports.deconstructPacket=function(packet){var buffers=[];var packetData=packet.data;function _deconstructPacket(data){if(!data)return data;if(isBuf(data)){var placeholder={_placeholder:true,num:buffers.length};buffers.push(data);return placeholder}else if(isArray(data)){var newData=new Array(data.length);for(var i=0;i<data.length;i++){newData[i]=_deconstructPacket(data[i])}return newData}else if("object"==typeof data&&!(data instanceof Date)){var newData={};for(var key in data){newData[key]=_deconstructPacket(data[key])}return newData}return data}var pack=packet;pack.data=_deconstructPacket(packetData);pack.attachments=buffers.length;return{packet:pack,buffers:buffers}};exports.reconstructPacket=function(packet,buffers){var curPlaceHolder=0;function _reconstructPacket(data){if(data&&data._placeholder){var buf=buffers[data.num];return buf}else if(isArray(data)){for(var i=0;i<data.length;i++){data[i]=_reconstructPacket(data[i])}return data}else if(data&&"object"==typeof data){for(var key in data){data[key]=_reconstructPacket(data[key])}return data}return data}packet.data=_reconstructPacket(packet.data);packet.attachments=undefined;return packet};exports.removeBlobs=function(data,callback){function _removeBlobs(obj,curKey,containingObject){if(!obj)return obj;if(global.Blob&&obj instanceof Blob||global.File&&obj instanceof File){pendingBlobs++;var fileReader=new FileReader;fileReader.onload=function(){if(containingObject){containingObject[curKey]=this.result}else{bloblessData=this.result}if(!--pendingBlobs){callback(bloblessData)}};fileReader.readAsArrayBuffer(obj)}else if(isArray(obj)){for(var i=0;i<obj.length;i++){_removeBlobs(obj[i],i,obj)}}else if(obj&&"object"==typeof obj&&!isBuf(obj)){for(var key in obj){_removeBlobs(obj[key],key,obj)}}}var pendingBlobs=0;var bloblessData=data;_removeBlobs(bloblessData);if(!pendingBlobs){callback(bloblessData)}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./is-buffer":131,isarray:132}],130:[function(require,module,exports){var debug=require("debug")("socket.io-parser");var json=require("json3");var isArray=require("isarray");var Emitter=require("component-emitter");var binary=require("./binary");var isBuf=require("./is-buffer");exports.protocol=4;exports.types=["CONNECT","DISCONNECT","EVENT","BINARY_EVENT","ACK","BINARY_ACK","ERROR"];exports.CONNECT=0;exports.DISCONNECT=1;exports.EVENT=2;exports.ACK=3;exports.ERROR=4;exports.BINARY_EVENT=5;exports.BINARY_ACK=6;exports.Encoder=Encoder;exports.Decoder=Decoder;function Encoder(){}Encoder.prototype.encode=function(obj,callback){debug("encoding packet %j",obj);if(exports.BINARY_EVENT==obj.type||exports.BINARY_ACK==obj.type){encodeAsBinary(obj,callback)}else{var encoding=encodeAsString(obj);callback([encoding])}};function encodeAsString(obj){var str="";var nsp=false;str+=obj.type;if(exports.BINARY_EVENT==obj.type||exports.BINARY_ACK==obj.type){str+=obj.attachments;str+="-"}if(obj.nsp&&"/"!=obj.nsp){nsp=true;str+=obj.nsp}if(null!=obj.id){if(nsp){str+=",";nsp=false}str+=obj.id}if(null!=obj.data){if(nsp)str+=",";str+=json.stringify(obj.data)}debug("encoded %j as %s",obj,str);return str}function encodeAsBinary(obj,callback){function writeEncoding(bloblessData){var deconstruction=binary.deconstructPacket(bloblessData);var pack=encodeAsString(deconstruction.packet);var buffers=deconstruction.buffers;buffers.unshift(pack);callback(buffers)}binary.removeBlobs(obj,writeEncoding)}function Decoder(){this.reconstructor=null}Emitter(Decoder.prototype);Decoder.prototype.add=function(obj){var packet;if("string"==typeof obj){packet=decodeString(obj);if(exports.BINARY_EVENT==packet.type||exports.BINARY_ACK==packet.type){this.reconstructor=new BinaryReconstructor(packet);if(this.reconstructor.reconPack.attachments===0){this.emit("decoded",packet)}}else{this.emit("decoded",packet)}}else if(isBuf(obj)||obj.base64){if(!this.reconstructor){throw new Error("got binary data when not reconstructing a packet")}else{packet=this.reconstructor.takeBinaryData(obj);if(packet){this.reconstructor=null;this.emit("decoded",packet)}}}else{throw new Error("Unknown type: "+obj)}};function decodeString(str){var p={};var i=0;p.type=Number(str.charAt(0));if(null==exports.types[p.type])return error();if(exports.BINARY_EVENT==p.type||exports.BINARY_ACK==p.type){var buf="";while(str.charAt(++i)!="-"){buf+=str.charAt(i);if(i==str.length)break}if(buf!=Number(buf)||str.charAt(i)!="-"){throw new Error("Illegal attachments")}p.attachments=Number(buf)}if("/"==str.charAt(i+1)){p.nsp="";while(++i){var c=str.charAt(i);if(","==c)break;p.nsp+=c;if(i==str.length)break}}else{p.nsp="/"}var next=str.charAt(i+1);if(""!==next&&Number(next)==next){p.id="";while(++i){var c=str.charAt(i);if(null==c||Number(c)!=c){
- --i;break}p.id+=str.charAt(i);if(i==str.length)break}p.id=Number(p.id)}if(str.charAt(++i)){try{p.data=json.parse(str.substr(i))}catch(e){return error()}}debug("decoded %s as %j",str,p);return p}Decoder.prototype.destroy=function(){if(this.reconstructor){this.reconstructor.finishedReconstruction()}};function BinaryReconstructor(packet){this.reconPack=packet;this.buffers=[]}BinaryReconstructor.prototype.takeBinaryData=function(binData){this.buffers.push(binData);if(this.buffers.length==this.reconPack.attachments){var packet=binary.reconstructPacket(this.reconPack,this.buffers);this.finishedReconstruction();return packet}return null};BinaryReconstructor.prototype.finishedReconstruction=function(){this.reconPack=null;this.buffers=[]};function error(data){return{type:exports.ERROR,data:"parser error"}}},{"./binary":129,"./is-buffer":131,"component-emitter":93,debug:94,isarray:132,json3:133}],131:[function(require,module,exports){(function(global){module.exports=isBuf;function isBuf(obj){return global.Buffer&&global.Buffer.isBuffer(obj)||global.ArrayBuffer&&obj instanceof ArrayBuffer}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],132:[function(require,module,exports){arguments[4][116][0].apply(exports,arguments)},{dup:116}],133:[function(require,module,exports){(function(window){var getClass={}.toString,isProperty,forEach,undef;var isLoader=typeof define==="function"&&define.amd;var nativeJSON=typeof JSON=="object"&&JSON;var JSON3=typeof exports=="object"&&exports&&!exports.nodeType&&exports;if(JSON3&&nativeJSON){JSON3.stringify=nativeJSON.stringify;JSON3.parse=nativeJSON.parse}else{JSON3=window.JSON=nativeJSON||{}}var isExtended=new Date(-0xc782b5b800cec);try{isExtended=isExtended.getUTCFullYear()==-109252&&isExtended.getUTCMonth()===0&&isExtended.getUTCDate()===1&&isExtended.getUTCHours()==10&&isExtended.getUTCMinutes()==37&&isExtended.getUTCSeconds()==6&&isExtended.getUTCMilliseconds()==708}catch(exception){}function has(name){if(has[name]!==undef){return has[name]}var isSupported;if(name=="bug-string-char-index"){isSupported="a"[0]!="a"}else if(name=="json"){isSupported=has("json-stringify")&&has("json-parse")}else{var value,serialized='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if(name=="json-stringify"){var stringify=JSON3.stringify,stringifySupported=typeof stringify=="function"&&isExtended;if(stringifySupported){(value=function(){return 1}).toJSON=value;try{stringifySupported=stringify(0)==="0"&&stringify(new Number)==="0"&&stringify(new String)=='""'&&stringify(getClass)===undef&&stringify(undef)===undef&&stringify()===undef&&stringify(value)==="1"&&stringify([value])=="[1]"&&stringify([undef])=="[null]"&&stringify(null)=="null"&&stringify([undef,getClass,null])=="[null,null,null]"&&stringify({a:[value,true,false,null,"\x00\b\n\f\r "]})==serialized&&stringify(null,value)==="1"&&stringify([1,2],null,1)=="[\n 1,\n 2\n]"&&stringify(new Date(-864e13))=='"-271821-04-20T00:00:00.000Z"'&&stringify(new Date(864e13))=='"+275760-09-13T00:00:00.000Z"'&&stringify(new Date(-621987552e5))=='"-000001-01-01T00:00:00.000Z"'&&stringify(new Date(-1))=='"1969-12-31T23:59:59.999Z"'}catch(exception){stringifySupported=false}}isSupported=stringifySupported}if(name=="json-parse"){var parse=JSON3.parse;if(typeof parse=="function"){try{if(parse("0")===0&&!parse(false)){value=parse(serialized);var parseSupported=value["a"].length==5&&value["a"][0]===1;if(parseSupported){try{parseSupported=!parse('" "')}catch(exception){}if(parseSupported){try{parseSupported=parse("01")!==1}catch(exception){}}if(parseSupported){try{parseSupported=parse("1.")!==1}catch(exception){}}}}}catch(exception){parseSupported=false}}isSupported=parseSupported}}return has[name]=!!isSupported}if(!has("json")){var functionClass="[object Function]";var dateClass="[object Date]";var numberClass="[object Number]";var stringClass="[object String]";var arrayClass="[object Array]";var booleanClass="[object Boolean]";var charIndexBuggy=has("bug-string-char-index");if(!isExtended){var floor=Math.floor;var Months=[0,31,59,90,120,151,181,212,243,273,304,334];var getDay=function(year,month){return Months[month]+365*(year-1970)+floor((year-1969+(month=+(month>1)))/4)-floor((year-1901+month)/100)+floor((year-1601+month)/400)}}if(!(isProperty={}.hasOwnProperty)){isProperty=function(property){var members={},constructor;if((members.__proto__=null,members.__proto__={toString:1},members).toString!=getClass){isProperty=function(property){var original=this.__proto__,result=property in(this.__proto__=null,this);this.__proto__=original;return result}}else{constructor=members.constructor;isProperty=function(property){var parent=(this.constructor||constructor).prototype;return property in this&&!(property in parent&&this[property]===parent[property])}}members=null;return isProperty.call(this,property)}}var PrimitiveTypes={"boolean":1,number:1,string:1,undefined:1};var isHostType=function(object,property){var type=typeof object[property];return type=="object"?!!object[property]:!PrimitiveTypes[type]};forEach=function(object,callback){var size=0,Properties,members,property;(Properties=function(){this.valueOf=0}).prototype.valueOf=0;members=new Properties;for(property in members){if(isProperty.call(members,property)){size++}}Properties=members=null;if(!size){members=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"];forEach=function(object,callback){var isFunction=getClass.call(object)==functionClass,property,length;var hasProperty=!isFunction&&typeof object.constructor!="function"&&isHostType(object,"hasOwnProperty")?object.hasOwnProperty:isProperty;for(property in object){if(!(isFunction&&property=="prototype")&&hasProperty.call(object,property)){callback(property)}}for(length=members.length;property=members[--length];hasProperty.call(object,property)&&callback(property));}}else if(size==2){forEach=function(object,callback){var members={},isFunction=getClass.call(object)==functionClass,property;for(property in object){if(!(isFunction&&property=="prototype")&&!isProperty.call(members,property)&&(members[property]=1)&&isProperty.call(object,property)){callback(property)}}}}else{forEach=function(object,callback){var isFunction=getClass.call(object)==functionClass,property,isConstructor;for(property in object){if(!(isFunction&&property=="prototype")&&isProperty.call(object,property)&&!(isConstructor=property==="constructor")){callback(property)}}if(isConstructor||isProperty.call(object,property="constructor")){callback(property)}}}return forEach(object,callback)};if(!has("json-stringify")){var Escapes={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"};var leadingZeroes="000000";var toPaddedString=function(width,value){return(leadingZeroes+(value||0)).slice(-width)};var unicodePrefix="\\u00";var quote=function(value){var result='"',index=0,length=value.length,isLarge=length>10&&charIndexBuggy,symbols;if(isLarge){symbols=value.split("")}for(;index<length;index++){var charCode=value.charCodeAt(index);switch(charCode){case 8:case 9:case 10:case 12:case 13:case 34:case 92:result+=Escapes[charCode];break;default:if(charCode<32){result+=unicodePrefix+toPaddedString(2,charCode.toString(16));break}result+=isLarge?symbols[index]:charIndexBuggy?value.charAt(index):value[index]}}return result+'"'};var serialize=function(property,object,callback,properties,whitespace,indentation,stack){var value,className,year,month,date,time,hours,minutes,seconds,milliseconds,results,element,index,length,prefix,result;try{value=object[property]}catch(exception){}if(typeof value=="object"&&value){className=getClass.call(value);if(className==dateClass&&!isProperty.call(value,"toJSON")){if(value>-1/0&&value<1/0){if(getDay){date=floor(value/864e5);for(year=floor(date/365.2425)+1970-1;getDay(year+1,0)<=date;year++);for(month=floor((date-getDay(year,0))/30.42);getDay(year,month+1)<=date;month++);date=1+date-getDay(year,month);time=(value%864e5+864e5)%864e5;hours=floor(time/36e5)%24;minutes=floor(time/6e4)%60;seconds=floor(time/1e3)%60;milliseconds=time%1e3}else{year=value.getUTCFullYear();month=value.getUTCMonth();date=value.getUTCDate();hours=value.getUTCHours();minutes=value.getUTCMinutes();seconds=value.getUTCSeconds();milliseconds=value.getUTCMilliseconds()}value=(year<=0||year>=1e4?(year<0?"-":"+")+toPaddedString(6,year<0?-year:year):toPaddedString(4,year))+"-"+toPaddedString(2,month+1)+"-"+toPaddedString(2,date)+"T"+toPaddedString(2,hours)+":"+toPaddedString(2,minutes)+":"+toPaddedString(2,seconds)+"."+toPaddedString(3,milliseconds)+"Z"}else{value=null}}else if(typeof value.toJSON=="function"&&(className!=numberClass&&className!=stringClass&&className!=arrayClass||isProperty.call(value,"toJSON"))){value=value.toJSON(property)}}if(callback){value=callback.call(object,property,value)}if(value===null){return"null"}className=getClass.call(value);if(className==booleanClass){return""+value}else if(className==numberClass){return value>-1/0&&value<1/0?""+value:"null"}else if(className==stringClass){return quote(""+value)}if(typeof value=="object"){for(length=stack.length;length--;){if(stack[length]===value){throw TypeError()}}stack.push(value);results=[];prefix=indentation;indentation+=whitespace;if(className==arrayClass){for(index=0,length=value.length;index<length;index++){element=serialize(index,value,callback,properties,whitespace,indentation,stack);results.push(element===undef?"null":element)}result=results.length?whitespace?"[\n"+indentation+results.join(",\n"+indentation)+"\n"+prefix+"]":"["+results.join(",")+"]":"[]"}else{forEach(properties||value,function(property){var element=serialize(property,value,callback,properties,whitespace,indentation,stack);if(element!==undef){results.push(quote(property)+":"+(whitespace?" ":"")+element)}});result=results.length?whitespace?"{\n"+indentation+results.join(",\n"+indentation)+"\n"+prefix+"}":"{"+results.join(",")+"}":"{}"}stack.pop();return result}};JSON3.stringify=function(source,filter,width){var whitespace,callback,properties,className;if(typeof filter=="function"||typeof filter=="object"&&filter){if((className=getClass.call(filter))==functionClass){callback=filter}else if(className==arrayClass){properties={};for(var index=0,length=filter.length,value;index<length;value=filter[index++],(className=getClass.call(value),className==stringClass||className==numberClass)&&(properties[value]=1));}}if(width){if((className=getClass.call(width))==numberClass){if((width-=width%1)>0){for(whitespace="",width>10&&(width=10);whitespace.length<width;whitespace+=" ");}}else if(className==stringClass){whitespace=width.length<=10?width:width.slice(0,10)}}return serialize("",(value={},value[""]=source,value),callback,properties,whitespace,"",[])}}if(!has("json-parse")){var fromCharCode=String.fromCharCode;var Unescapes={92:"\\",34:'"',47:"/",98:"\b",116:" ",110:"\n",102:"\f",114:"\r"};var Index,Source;var abort=function(){Index=Source=null;throw SyntaxError()};var lex=function(){var source=Source,length=source.length,value,begin,position,isSigned,charCode;while(Index<length){charCode=source.charCodeAt(Index);switch(charCode){case 9:case 10:case 13:case 32:Index++;break;case 123:case 125:case 91:case 93:case 58:case 44:value=charIndexBuggy?source.charAt(Index):source[Index];Index++;return value;case 34:for(value="@",Index++;Index<length;){charCode=source.charCodeAt(Index);if(charCode<32){abort()}else if(charCode==92){charCode=source.charCodeAt(++Index);switch(charCode){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:value+=Unescapes[charCode];Index++;break;case 117:begin=++Index;for(position=Index+4;Index<position;Index++){charCode=source.charCodeAt(Index);if(!(charCode>=48&&charCode<=57||charCode>=97&&charCode<=102||charCode>=65&&charCode<=70)){abort()}}value+=fromCharCode("0x"+source.slice(begin,Index));break;default:abort()}}else{if(charCode==34){break}charCode=source.charCodeAt(Index);begin=Index;while(charCode>=32&&charCode!=92&&charCode!=34){charCode=source.charCodeAt(++Index)}value+=source.slice(begin,Index)}}if(source.charCodeAt(Index)==34){Index++;return value}abort();default:begin=Index;if(charCode==45){isSigned=true;charCode=source.charCodeAt(++Index)}if(charCode>=48&&charCode<=57){if(charCode==48&&(charCode=source.charCodeAt(Index+1),charCode>=48&&charCode<=57)){abort()}isSigned=false;for(;Index<length&&(charCode=source.charCodeAt(Index),charCode>=48&&charCode<=57);Index++);if(source.charCodeAt(Index)==46){position=++Index;for(;position<length&&(charCode=source.charCodeAt(position),charCode>=48&&charCode<=57);position++);if(position==Index){abort()}Index=position}charCode=source.charCodeAt(Index);if(charCode==101||charCode==69){charCode=source.charCodeAt(++Index);if(charCode==43||charCode==45){Index++}for(position=Index;position<length&&(charCode=source.charCodeAt(position),charCode>=48&&charCode<=57);position++);if(position==Index){abort()}Index=position}return+source.slice(begin,Index)}if(isSigned){abort()}if(source.slice(Index,Index+4)=="true"){Index+=4;return true}else if(source.slice(Index,Index+5)=="false"){Index+=5;return false}else if(source.slice(Index,Index+4)=="null"){Index+=4;return null}abort()}}return"$"};var get=function(value){var results,hasMembers;if(value=="$"){abort()}if(typeof value=="string"){if((charIndexBuggy?value.charAt(0):value[0])=="@"){return value.slice(1)}if(value=="["){results=[];for(;;hasMembers||(hasMembers=true)){value=lex();if(value=="]"){break}if(hasMembers){if(value==","){value=lex();if(value=="]"){abort()}}else{abort()}}if(value==","){abort()}results.push(get(value))}return results}else if(value=="{"){results={};for(;;hasMembers||(hasMembers=true)){value=lex();if(value=="}"){break}if(hasMembers){if(value==","){value=lex();if(value=="}"){abort()}}else{abort()}}if(value==","||typeof value!="string"||(charIndexBuggy?value.charAt(0):value[0])!="@"||lex()!=":"){abort()}results[value.slice(1)]=get(lex())}return results}abort()}return value};var update=function(source,property,callback){var element=walk(source,property,callback);if(element===undef){delete source[property]}else{source[property]=element}};var walk=function(source,property,callback){var value=source[property],length;if(typeof value=="object"&&value){if(getClass.call(value)==arrayClass){for(length=value.length;length--;){update(value,length,callback)}}else{forEach(value,function(property){update(value,property,callback)})}}return callback.call(source,property,value)};JSON3.parse=function(source,callback){var result,value;Index=0;Source=""+source;result=get(lex());if(lex()!="$"){abort()}Index=Source=null;return callback&&getClass.call(callback)==functionClass?walk((value={},value[""]=result,value),"",callback):result}}}if(isLoader){define(function(){return JSON3})}})(this)},{}],134:[function(require,module,exports){module.exports=toArray;function toArray(list,index){var array=[];index=index||0;for(var i=index||0;i<list.length;i++){array[i-index]=list[i]}return array}},{}],135:[function(require,module,exports){var MediaStreamType={VIDEO_TYPE:"Video",AUDIO_TYPE:"Audio"};module.exports=MediaStreamType},{}],136:[function(require,module,exports){var RTCEvents={RTC_READY:"rtc.ready",DATA_CHANNEL_OPEN:"rtc.data_channel_open",LASTN_CHANGED:"rtc.lastn_changed",DOMINANTSPEAKER_CHANGED:"rtc.dominantspeaker_changed",LASTN_ENDPOINT_CHANGED:"rtc.lastn_endpoint_changed",AVAILABLE_DEVICES_CHANGED:"rtc.available_devices_changed",FAKE_VIDEO_TRACK_CREATED:"rtc.fake_video_track_created"};module.exports=RTCEvents},{}],137:[function(require,module,exports){var Resolutions={1080:{width:1920,height:1080,order:7},fullhd:{width:1920,height:1080,order:7},720:{width:1280,height:720,order:6},hd:{width:1280,height:720,order:6},960:{width:960,height:720,order:5},640:{width:640,height:480,order:4},vga:{width:640,height:480,order:4},360:{width:640,height:360,order:3},320:{width:320,height:240,order:2},180:{width:320,height:180,order:1}};module.exports=Resolutions},{}],138:[function(require,module,exports){var AuthenticationEvents={IDENTITY_UPDATED:"authentication.identity_updated"};module.exports=AuthenticationEvents},{}],139:[function(require,module,exports){var DesktopSharingEventTypes={FIREFOX_EXTENSION_NEEDED:"ds.firefox_extension_needed"};module.exports=DesktopSharingEventTypes},{}],140:[function(require,module,exports){module.exports={CONNECTION_STATS:"statistics.connectionstats",AUDIO_LEVEL:"statistics.audioLevel",STOP:"statistics.stop"}},{}],141:[function(require,module,exports){var Constants={LOCAL_JID:"local"};module.exports=Constants},{}],142:[function(require,module,exports){var XMPPEvents={CONNECTION_FAILED:"xmpp.connection.failed",CONNECTION_INTERRUPTED:"xmpp.connection.interrupted",CONNECTION_RESTORED:"xmpp.connection.restored",CALL_INCOMING:"xmpp.callincoming.jingle",KICKED:"xmpp.kicked",MUC_JOINED:"xmpp.muc_joined",MUC_MEMBER_JOINED:"xmpp.muc_member_joined",MUC_MEMBER_LEFT:"xmpp.muc_member_left",MUC_ROLE_CHANGED:"xmpp.muc_role_changed",MUC_DESTROYED:"xmpp.muc_destroyed",DISPLAY_NAME_CHANGED:"xmpp.display_name_changed",REMOTE_STATS:"xmpp.remote_stats",LOCAL_ROLE_CHANGED:"xmpp.localrole_changed",SUBJECT_CHANGED:"xmpp.subject_changed",MESSAGE_RECEIVED:"xmpp.message_received",SENDING_CHAT_MESSAGE:"xmpp.sending_chat_message",PARTICIPANT_VIDEO_TYPE_CHANGED:"xmpp.video_type",PARTICIPANT_AUDIO_MUTED:"xmpp.audio_muted",PARTICIPANT_VIDEO_MUTED:"xmpp.video_muted",AUDIO_MUTED_BY_FOCUS:"xmpp.audio_muted_by_focus",START_MUTED_FROM_FOCUS:"xmpp.start_muted_from_focus",PEERCONNECTION_READY:"xmpp.peerconnection_ready",CONFERENCE_SETUP_FAILED:"xmpp.conference_setup_failed",PASSWORD_REQUIRED:"xmpp.password_required",AUTHENTICATION_REQUIRED:"xmpp.authentication_required",CHAT_ERROR_RECEIVED:"xmpp.chat_error_received",ETHERPAD:"xmpp.etherpad",BRIDGE_DOWN:"xmpp.bridge_down",PRESENCE_STATUS:"xmpp.presence_status",RESERVATION_ERROR:"xmpp.room_reservation_error",DISPOSE_CONFERENCE:"xmpp.dispose_conference",GRACEFUL_SHUTDOWN:"xmpp.graceful_shutdown",SET_LOCAL_DESCRIPTION_ERROR:"xmpp.set_local_description_error",SET_REMOTE_DESCRIPTION_ERROR:"xmpp.set_remote_description_error",CREATE_ANSWER_ERROR:"xmpp.create_answer_error",JINGLE_FATAL_ERROR:"xmpp.jingle_fatal_error",PROMPT_FOR_LOGIN:"xmpp.prompt_for_login",FOCUS_DISCONNECTED:"xmpp.focus_disconnected",ROOM_JOIN_ERROR:"xmpp.room_join_error",ROOM_CONNECT_ERROR:"xmpp.room_connect_error",READY_TO_JOIN:"xmpp.ready_to_join",FOCUS_LEFT:"xmpp.focus_left",REMOTE_STREAM_RECEIVED:"xmpp.remote_stream_received",RECORDING_STATE_CHANGED:"xmpp.recordingStateChanged",PHONE_NUMBER_CHANGED:"conference.phoneNumberChanged",CREATE_OFFER_FAILED:"xmpp.create_offer_failed",CREATE_ANSWER_FAILED:"xmpp.create_answer_failed",SET_LOCAL_DESCRIPTION_FAILED:"xmpp.set_local_description_failed",SET_REMOTE_DESCRIPTION_FAILED:"xmpp.set_remote_description_failed",ADD_ICE_CANDIDATE_FAILED:"xmpp.add_ice_candidate_failed"};module.exports=XMPPEvents},{}]},{},[7])(7)});
|