-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathrtc.min.js.map
1 lines (1 loc) · 279 KB
/
rtc.min.js.map
1
{"version":3,"file":"generated.js","sources":["node_modules/browserify/node_modules/browser-pack/_prelude.js","defaultconfig.js","index.js","node_modules/browserify/node_modules/events/events.js","node_modules/browserify/node_modules/process/browser.js","node_modules/cog/defaults.js","node_modules/cog/extend.js","node_modules/cog/getable.js","node_modules/cog/jsonparse.js","node_modules/cog/logger.js","node_modules/cog/throttle.js","node_modules/fdom/append.js","node_modules/fdom/classtweak.js","node_modules/fdom/qsa.js","node_modules/kgo/kgo.js","node_modules/kgo/run.js","node_modules/rtc-attach/index.js","node_modules/rtc-capture/index.js","node_modules/rtc-core/detect.js","node_modules/rtc-core/genice.js","node_modules/rtc-core/node_modules/detect-browser/browser.js","node_modules/rtc-core/plugin.js","node_modules/rtc-quickconnect/index.js","node_modules/rtc-quickconnect/lib/calls.js","node_modules/rtc-quickconnect/lib/getpeerdata.js","node_modules/rtc-quickconnect/lib/heartbeat.js","node_modules/rtc-quickconnect/node_modules/mbus/index.js","node_modules/rtc-quickconnect/node_modules/pull-core/index.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/index.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/node_modules/rtc-switchboard-messenger/index.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/node_modules/rtc-switchboard-messenger/node_modules/messenger-ws/index.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/node_modules/rtc-switchboard-messenger/node_modules/messenger-ws/node_modules/pull-ws/index.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/node_modules/rtc-switchboard-messenger/node_modules/messenger-ws/node_modules/pull-ws/ready.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/node_modules/rtc-switchboard-messenger/node_modules/messenger-ws/node_modules/pull-ws/sink.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/node_modules/rtc-switchboard-messenger/node_modules/messenger-ws/node_modules/pull-ws/source.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/node_modules/rtc-switchboard-messenger/node_modules/messenger-ws/node_modules/ws/lib/browser.js","node_modules/rtc-quickconnect/node_modules/rtc-pluggable-signaller/node_modules/rtc-switchboard-messenger/node_modules/messenger-ws/node_modules/wsurl/index.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/defaults.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/handlers/announce.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/handlers/index.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/index.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/cuid/dist/browser-cuid.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-pushable/index.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-pushable/node_modules/pull-stream/index.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-pushable/node_modules/pull-stream/maybe.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-pushable/node_modules/pull-stream/sinks.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-pushable/node_modules/pull-stream/sources.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-pushable/node_modules/pull-stream/throughs.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-stream/index.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-stream/maybe.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-stream/sinks.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-stream/sources.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/node_modules/pull-stream/throughs.js","node_modules/rtc-quickconnect/node_modules/rtc-signaller/processor.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/cleanup.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/couple.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/detect.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/generators.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/index.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/monitor.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/node_modules/rtc-taskqueue/index.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/node_modules/rtc-taskqueue/node_modules/priorityqueuejs/index.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/node_modules/rtc-taskqueue/node_modules/rtc-sdp/index.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/node_modules/rtc-taskqueue/node_modules/rtc-sdp/parsers.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/node_modules/rtc-taskqueue/node_modules/rtc-sdpclean/index.js","node_modules/rtc-quickconnect/node_modules/rtc-tools/node_modules/rtc-taskqueue/node_modules/rtc-validator/candidate.js","node_modules/whisk/chain.js","node_modules/whisk/equality.js","node_modules/whisk/flatten.js","node_modules/whisk/nub-by.js","node_modules/whisk/nub.js","node_modules/whisk/pluck.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","RTC","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"constraints","video","audio","signaller","room","undefined","ice","channels","localContainer","remoteContainer","plugins","options","flagOwnership","peerId","el","dataset","peer","localVideo","qc","config","kgo","capture","attach","local","chain","tweak","append","to","addStream","on","reportError","remoteVideo","id","stream","extend","removeRemoteVideos","qsa","forEach","parentNode","removeChild","err","console","error","defaults","quickconnect","conference","expectedLocalStreams","Object","keys","name","channelConfig","createDataChannel","EventEmitter","_events","_maxListeners","isFunction","arg","isNumber","isObject","isUndefined","prototype","defaultMaxListeners","setMaxListeners","isNaN","TypeError","emit","type","er","handler","len","args","listeners","arguments","Array","apply","slice","addListener","listener","m","newListener","push","warned","trace","once","removeListener","fired","list","position","splice","removeAllListeners","key","ret","listenerCount","emitter","drainQueue","draining","currentQueue","queue","noop","process","nextTick","fun","setTimeout","title","browser","env","argv","version","versions","off","binding","cwd","chdir","umask","target","source","prop","get","set","value","remove","values","map","delete","input","shouldParse","firstChar","lastChar","isString","String","reNumeric","test","parseFloat","charAt","JSON","parse","active","unleashListeners","targets","logger","checkActive","enabled","indexOf","log","reset","enable","concat","fn","delay","opts","invokeDefered","queuedScope","queuedArgs","lastExec","Date","now","timer","leading","trailing","tick","elapsed","clearTimeout","child","document","querySelector","appendChild","reDelim","opMappings","+","-","~","!","mods","element","classList","rules","rule","op","cls","trim","split","filter","classSelectorRE","idSelectorRE","tagSelectorRE","selector","scope","idSearch","getElementById","RegExp","$1","getElementsByClassName","getElementsByTagName","querySelectorAll","newKgo","kgoFn","inFlight","argIndex","dependencies","names","returnlessId","toString","isArray","defaultsDefined","tasks","results","defer","run","setImmediate","Step","task","done","_task","_args","_done","runTask","aboutToRun","dependants","dependantName","ignore","match","ignoreDependency","step","currentTask","noMoreTasks","_complete","taskResults","cloneAndRun","todo","didError","result","plugin","callback","applyModifications","muted","setAttribute","mirror","attachToElement","autoplay","elType","isValid","getVideoTracks","play","createElement","URL","createObjectURL","src","srcObject","mozSrcObject","pinst","init","detect","navigator","getUserMedia","handleCapture","prefixIdx","prefix","testName","hostObject","prefixes","toUpperCase","toLowerCase","moz","mozGetUserMedia","browserVersion","iceServers","pair","exec","userAgent","isMatch","browsers","parts","join","isSupported","supported","supportedFunctions","requiredFunctions","rtc","mbus","detectPlugin","debug","signalhost","checkReadyToAnnounce","announceTimer","announced","allowJoin","pluginReady","localStreams","data","profile","announce","connect","pc","monitor","getPeerData","calls","end","createConnection","create","isMaster","label","gotPeerChannel","ondatachannel","evt","channel","couple","start","bind","createOffer","getActiveCall","channelReady","clearInterval","channelMonitor","onopen","readyState","setInterval","initPlugin","handleLocalAnnounce","handlePeerFilter","allow","handlePeerUpdate","activeCall","send","hash","location","peers","ns","debugging","manualJoin","parseInt","updateTimer","Math","pow","random","sender","broadcast","endCalls","close","leave","dc","getLocalStreams","reactive","removeStream","localIndex","requestChannel","targetId","requestStream","idx","waitForStream","getRemoteStreams","updateDelay","waitForCall","handleNewCall","ping","servers","cleanup","getable","streams","lastping","createStreamAddHandler","updateRemoteStreams","receiveRemoteStream","createStreamRemoveHandler","resetHeartbeat","heartbeat","onaddstream","onremovestream","tickInactive","createBus","namespace","parent","bus","delimited","normalize","handlers","registry","feeds","feed","clear","stop","_actual","handleEvent","addPipe","read","pipe","reader","item","tester","Through","Source","createRead","unshift","piped","shift","Sink","createReader","maybeSink","maybeDrain","createSink","cb","ended","messenger","switchboard","endpoints","WebSocket","wsurl","ps","reTrailingSlash","url","attemptNext","registerMessage","receivedData","socket","addEventListener","handleError","handleAbnormalClose","successTimer","failTimer","sink","removeEventListener","timeout","wasClean","endpoint","replace","duplex","ws","handleOpen","handleErr","pull","ready","next","closeOnEnd","onClose","ev","event","abort","receiver","buffer","uri","protocols","instance","MozWebSocket","reHttpUrl","current","href","currentProtocol","insecure","isRelative","forceWS","dataEvent","openEvent","closeEvent","errorEvent","writeMethod","closeMethod","leaveTimeout","dataAllowed","cloned","messageType","srcData","srcState","isDM","inactive","roleIdx","sort","leaveTimer","autoreply","attributes","uuid","pushable","RS_DISCONNECTED","RS_CONNECTING","RS_CONNECTED","metadata","announceOnReconnect","bufferMessage","createDataLine","autoconnect","prepareArg","createMetadata","localMeta","handleDisconnect","reconnect","stringify","processor","agent","through","drain","sendAnnounce","announceDelay","warn","app","c","blockSize","base","discreteValues","pad","num","size","substr","randomBlock","safeCounter","api","counter","letter","timestamp","getTime","fingerprint","slug","date","print","globalCount","cache","count","mimeTypes","register","applitude","waiting","cbs","sources","sinks","throughs","k","maybe","Duplex","pipeable","pipeableSource","pipeableSink","reduce","find","acc","collect","writeArray","arr","loop","cbed","onEnd","object","_value","readArray","array","max","infinite","generate","_read","_end","resolve","_","empty","depthFirst","createStream","reads","widthFirst","leafFirst","output","asyncMap","paraMap","width","_cb","unique","filterNot","take","field","invert","seen","nonUnique","group","_queue","flatten","nextChunk","nextStream","prepend","head","_head","_reduce","initial","highWaterMark","readAhead","reading","isReader","b","sync","ending","flatMap","mapper","add","jsonparse","sendEvent","evtName","originalData","isDirectMessage","CANNOT_CLOSE_STATES","EVENTS_DECOUPLE_BC","EVENTS_DECOUPLE_AC","decouple","events","currentState","iceConnectionState","canClose","mon","handleSdp","handleCandidate","handleNegotiateRequest","q","addIceCandidate","sdp","setRemoteDescription","handleConnectionClose","disconnectTimer","disconnectTimeout","handleDisconnectAbort","CHECKING_STATES","resetDisconnectTimer","CLOSED_STATES","handleLocalCandidate","candidate","pluckCandidate","endOfCandidates","debounceOffer","debugLabel","createOrRequestOffer","throttle","onnegotiationneeded","onicecandidate","desc","pluck","mappings","dtls","optional","DtlsSrtpKeyAgreement","iceServerGenerator","connectionConstraints","flags","out","generated","gen","findPlugin","RTCPeerConnection","PeerConnection","getMappedState","state","stateMappings","completed","peerStateEvents","parentBus","checkState","newState","handleClose","onclose","PriorityQueue","pluckSessionDesc","checkCandidate","sdpclean","parseSdp","PRIORITY_LOW","PRIORITY_WAIT","DEFAULT_PRIORITIES","METHOD_EVENTS","setLocalDescription","createAnswer","MEDIA_MAPPINGS","VALID_RESPONSE_STATES","applyCandidate","handleOk","tq","handleFail","createIceCandidate","checkQueue","isEmpty","peek","testReady","retry","isNotClosed","checkQueueTimer","deq","fail","defaultFail","pass","taskName","triggerQueueCheck","cleansdp","sdpErrors","collector","info","sdpFilter","completeConnection","signalingState","RTCIceCandidate","createSessionDescription","RTCSessionDescription","emitSdp","enqueue","processArgs","enq","checks","execMethod","success","eventName","cbArgs","isOffer","generateConstraints","extractCandidateEventData","allowedKeys","offertoreceivevideo","offertoreceiveaudio","icerestart","voiceactivitydetection","OfferToReceiveVideo","OfferToReceiveAudio","mandatory","hasLocalOrRemoteDesc","__hasDesc","remoteDescription","isNotNegotiating","isValidCandidate","__valid","isConnReadyForCandidate","mediaTypes","getMediaTypes","sdpMid","orderTasks","readiness","taskPriorities","priority","priorities","memo","check","sdpfilter","comparator","_comparator","DEFAULT_COMPARATOR","_elements","first","last","pop","largest","left","right","_compare","_swap","floor","aux","nub","reLineBreak","reTrailingNewlines","nonHeaderLines","parsers","activeCollector","ops","parsed","lines","Boolean","line","findLine","index","lineData","customParser","lineIndex","sdpMLineIndex","mLine","childlines","getMediaType","def","toArray","addChildLine","childLine","media","detectLineBreak","reSdpLineBreak","validators","lineBreak","validator","errors","validateParts","part","partValidation","rePrefix","reIP","prefixMatch","fns","ii","found","jj","extractor","maxIdx","partIdx","val","fields","path"],"mappings":"AAAA,CAAA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,IAAAV,MAAA,WAAA,MAAA,SAAAW,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAP,EAAAjB,GCCAA,EAAAD,SAEA0B,aACAC,OAAA,EACAC,OAAA,GAIAC,UAAA,8BAIAC,KAAAC,OAGAC,OAMAC,YAGAC,eAAA,WAGAC,gBAAA,WAGAC,WAGAC,kCCYA,QAAAC,GAAAC,GACA,MAAA,UAAAC,GACAA,EAAAC,QAAAC,KAAAH,GAIA,QAAAI,GAAAC,EAAAC,GAEAC,EAAAD,GACA,WAAA,cAAA,WAAAE,GACA,UAAA,UAAA,WAAAC,EAAAC,OACA,gBAAA,UAAAC,GACAC,EAAA,QACAA,EAAA,eACAC,EAAAC,IAAAR,OAAAX,gBAAA,eAEA,oBAAA,WAAAU,EAAAU,WACAC,GAAA,QAAAC,EAAAZ,EAAAC,IAGA,QAAAY,GAAAb,EAAAC,GACA,MAAA,UAAAa,EAAAC,GACAb,EAAAc,GAAAD,OAAAA,GAAAd,IACA,UAAA,SAAA,WAAAG,GACA,iBAAA,UAAAE,GACAC,EAAA,QACAA,EAAA,gBACAb,EAAAoB,GACAN,EAAAC,IAAAR,OAAAV,iBAAA,eAEAoB,GAAA,QAAAC,EAAAZ,EAAAC,KAIA,QAAAgB,GAAAH,GACAI,EAAA,eAAAJ,EAAA,MAAAK,QAAA,SAAAvB,GACAA,EAAAwB,WAAAC,YAAAzB,KAIA,QAAAgB,KACA,MAAA,UAAAU,GACAC,QAAAC,MAAAF,IAxFA,GAAAG,GAAAnD,EAAA,gBACA0C,EAAA1C,EAAA,cACA8B,EAAA9B,EAAA,cACA6B,EAAA7B,EAAA,eACAoD,EAAApD,EAAA,oBACAgC,EAAAhC,EAAA,eACAkC,EAAAlC,EAAA,eACAiC,EAAAjC,EAAA,mBACA4C,EAAA5C,EAAA,YACA4B,EAAA5B,EAAA,MAEAjB,GAAAD,QAAA,SAAA6C,GACA,GAAA0B,EA+BA,OA5BA1B,GAAAwB,KAAAxB,EAAA3B,EAAA,uBAGA2B,EAAAR,QAAAuB,GACA9B,KAAAe,EAAAf,KACAE,IAAAa,EAAAb,IACAI,QAAAS,EAAAT,QACAoC,qBAAA3B,EAAAnB,YAAA,EAAA,GACAmB,EAAAR,SAGAkC,EAAAD,EAAAzB,EAAAhB,UAAAgB,EAAAR,SAEAkC,EACAhB,GAAA,aAAAM,GACAN,GAAA,eAAAE,EAAAc,EAAA1B,IAEA4B,OAAAC,KAAA7B,EAAAZ,cAAA8B,QAAA,SAAAY,GACA,GAAAC,GAAA/B,EAAAZ,SAAA0C,EAEAJ,GAAAM,kBAAAF,EAAAC,KAAA,EAAA,KAAAA,KAIA/B,EAAAnB,aACAiB,EAAA4B,EAAA1B,GAGA0B,kNCtBA,QAAAO,KACAtE,KAAAuE,QAAAvE,KAAAuE,YACAvE,KAAAwE,cAAAxE,KAAAwE,eAAAjD,OAuQA,QAAAkD,GAAAC,GACA,MAAA,kBAAAA,GAGA,QAAAC,GAAAD,GACA,MAAA,gBAAAA,GAGA,QAAAE,GAAAF,GACA,MAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAG,GAAAH,GACA,MAAA,UAAAA,EAlRAjF,EAAAD,QAAA8E,EAGAA,EAAAA,aAAAA,EAEAA,EAAAQ,UAAAP,QAAAhD,OACA+C,EAAAQ,UAAAN,cAAAjD,OAIA+C,EAAAS,oBAAA,GAIAT,EAAAQ,UAAAE,gBAAA,SAAA5E,GACA,IAAAuE,EAAAvE,IAAA,EAAAA,GAAA6E,MAAA7E,GACA,KAAA8E,WAAA,8BAEA,OADAlF,MAAAwE,cAAApE,EACAJ,MAGAsE,EAAAQ,UAAAK,KAAA,SAAAC,GACA,GAAAC,GAAAC,EAAAC,EAAAC,EAAA7E,EAAA8E,CAMA,IAJAzF,KAAAuE,UACAvE,KAAAuE,YAGA,UAAAa,KACApF,KAAAuE,QAAAX,OACAgB,EAAA5E,KAAAuE,QAAAX,SAAA5D,KAAAuE,QAAAX,MAAA5C,QAAA,CAEA,GADAqE,EAAAK,UAAA,GACAL,YAAAzE,OACA,KAAAyE,EAEA,MAAAH,WAAA,wCAMA,GAFAI,EAAAtF,KAAAuE,QAAAa,GAEAP,EAAAS,GACA,OAAA,CAEA,IAAAb,EAAAa,GACA,OAAAI,UAAA1E,QAEA,IAAA,GACAsE,EAAAvE,KAAAf,KACA,MACA,KAAA,GACAsF,EAAAvE,KAAAf,KAAA0F,UAAA,GACA,MACA,KAAA,GACAJ,EAAAvE,KAAAf,KAAA0F,UAAA,GAAAA,UAAA,GACA,MAEA,SAGA,IAFAH,EAAAG,UAAA1E,OACAwE,EAAA,GAAAG,OAAAJ,EAAA,GACA5E,EAAA,EAAA4E,EAAA5E,EAAAA,IACA6E,EAAA7E,EAAA,GAAA+E,UAAA/E,EACA2E,GAAAM,MAAA5F,KAAAwF,OAEA,IAAAZ,EAAAU,GAAA,CAGA,IAFAC,EAAAG,UAAA1E,OACAwE,EAAA,GAAAG,OAAAJ,EAAA,GACA5E,EAAA,EAAA4E,EAAA5E,EAAAA,IACA6E,EAAA7E,EAAA,GAAA+E,UAAA/E,EAIA,KAFA8E,EAAAH,EAAAO,QACAN,EAAAE,EAAAzE,OACAL,EAAA,EAAA4E,EAAA5E,EAAAA,IACA8E,EAAA9E,GAAAiF,MAAA5F,KAAAwF,GAGA,OAAA,GAGAlB,EAAAQ,UAAAgB,YAAA,SAAAV,EAAAW,GACA,GAAAC,EAEA,KAAAvB,EAAAsB,GACA,KAAAb,WAAA,8BAuBA,IArBAlF,KAAAuE,UACAvE,KAAAuE,YAIAvE,KAAAuE,QAAA0B,aACAjG,KAAAmF,KAAA,cAAAC,EACAX,EAAAsB,EAAAA,UACAA,EAAAA,SAAAA,GAEA/F,KAAAuE,QAAAa,GAGAR,EAAA5E,KAAAuE,QAAAa,IAEApF,KAAAuE,QAAAa,GAAAc,KAAAH,GAGA/F,KAAAuE,QAAAa,IAAApF,KAAAuE,QAAAa,GAAAW,GANA/F,KAAAuE,QAAAa,GAAAW,EASAnB,EAAA5E,KAAAuE,QAAAa,MAAApF,KAAAuE,QAAAa,GAAAe,OAAA,CACA,GAAAH,EAIAA,GAHAnB,EAAA7E,KAAAwE,eAGAF,EAAAS,oBAFA/E,KAAAwE,cAKAwB,GAAAA,EAAA,GAAAhG,KAAAuE,QAAAa,GAAApE,OAAAgF,IACAhG,KAAAuE,QAAAa,GAAAe,QAAA,EACAxC,QAAAC,MAAA,mIAGA5D,KAAAuE,QAAAa,GAAApE,QACA,kBAAA2C,SAAAyC,OAEAzC,QAAAyC,SAKA,MAAApG,OAGAsE,EAAAQ,UAAA/B,GAAAuB,EAAAQ,UAAAgB,YAEAxB,EAAAQ,UAAAuB,KAAA,SAAAjB,EAAAW,GAMA,QAAAnG,KACAI,KAAAsG,eAAAlB,EAAAxF,GAEA2G,IACAA,GAAA,EACAR,EAAAH,MAAA5F,KAAA0F,YAVA,IAAAjB,EAAAsB,GACA,KAAAb,WAAA,8BAEA,IAAAqB,IAAA,CAcA,OAHA3G,GAAAmG,SAAAA,EACA/F,KAAA+C,GAAAqC,EAAAxF,GAEAI,MAIAsE,EAAAQ,UAAAwB,eAAA,SAAAlB,EAAAW,GACA,GAAAS,GAAAC,EAAAzF,EAAAL,CAEA,KAAA8D,EAAAsB,GACA,KAAAb,WAAA,8BAEA,KAAAlF,KAAAuE,UAAAvE,KAAAuE,QAAAa,GACA,MAAApF,KAMA,IAJAwG,EAAAxG,KAAAuE,QAAAa,GACApE,EAAAwF,EAAAxF,OACAyF,EAAA,GAEAD,IAAAT,GACAtB,EAAA+B,EAAAT,WAAAS,EAAAT,WAAAA,QACA/F,MAAAuE,QAAAa,GACApF,KAAAuE,QAAA+B,gBACAtG,KAAAmF,KAAA,iBAAAC,EAAAW,OAEA,IAAAnB,EAAA4B,GAAA,CACA,IAAA7F,EAAAK,EAAAL,IAAA,GACA,GAAA6F,EAAA7F,KAAAoF,GACAS,EAAA7F,GAAAoF,UAAAS,EAAA7F,GAAAoF,WAAAA,EAAA,CACAU,EAAA9F,CACA,OAIA,GAAA,EAAA8F,EACA,MAAAzG,KAEA,KAAAwG,EAAAxF,QACAwF,EAAAxF,OAAA,QACAhB,MAAAuE,QAAAa,IAEAoB,EAAAE,OAAAD,EAAA,GAGAzG,KAAAuE,QAAA+B,gBACAtG,KAAAmF,KAAA,iBAAAC,EAAAW,GAGA,MAAA/F,OAGAsE,EAAAQ,UAAA6B,mBAAA,SAAAvB,GACA,GAAAwB,GAAAnB,CAEA,KAAAzF,KAAAuE,QACA,MAAAvE,KAGA,KAAAA,KAAAuE,QAAA+B,eAKA,MAJA,KAAAZ,UAAA1E,OACAhB,KAAAuE,WACAvE,KAAAuE,QAAAa,UACApF,MAAAuE,QAAAa,GACApF,IAIA,IAAA,IAAA0F,UAAA1E,OAAA,CACA,IAAA4F,IAAA5G,MAAAuE,QACA,mBAAAqC,GACA5G,KAAA2G,mBAAAC,EAIA,OAFA5G,MAAA2G,mBAAA,kBACA3G,KAAAuE,WACAvE,KAKA,GAFAyF,EAAAzF,KAAAuE,QAAAa,GAEAX,EAAAgB,GACAzF,KAAAsG,eAAAlB,EAAAK,OAGA,MAAAA,EAAAzE,QACAhB,KAAAsG,eAAAlB,EAAAK,EAAAA,EAAAzE,OAAA,GAIA,cAFAhB,MAAAuE,QAAAa,GAEApF,MAGAsE,EAAAQ,UAAAW,UAAA,SAAAL,GACA,GAAAyB,EAOA,OAHAA,GAHA7G,KAAAuE,SAAAvE,KAAAuE,QAAAa,GAEAX,EAAAzE,KAAAuE,QAAAa,KACApF,KAAAuE,QAAAa,IAEApF,KAAAuE,QAAAa,GAAAS,YAIAvB,EAAAwC,cAAA,SAAAC,EAAA3B,GACA,GAAAyB,EAOA,OAHAA,GAHAE,EAAAxC,SAAAwC,EAAAxC,QAAAa,GAEAX,EAAAsC,EAAAxC,QAAAa,IACA,EAEA2B,EAAAxC,QAAAa,GAAApE,OAJA,yBChRA,QAAAgG,KACA,IAAAC,EAAA,CAGAA,GAAA,CAGA,KAFA,GAAAC,GACA3B,EAAA4B,EAAAnG,OACAuE,GAAA,CACA2B,EAAAC,EACAA,IAEA,KADA,GAAAxG,GAAA,KACAA,EAAA4E,GACA2B,EAAAvG,IAEA4E,GAAA4B,EAAAnG,OAEAiG,GAAA,GAgBA,QAAAG,MApCA,GAAAC,GAAA5H,EAAAD,WACA2H,KACAF,GAAA,CAoBAI,GAAAC,SAAA,SAAAC,GACAJ,EAAAjB,KAAAqB,GACAN,GACAO,WAAAR,EAAA,IAIAK,EAAAI,MAAA,UACAJ,EAAAK,SAAA,EACAL,EAAAM,OACAN,EAAAO,QACAP,EAAAQ,QAAA,GACAR,EAAAS,YAIAT,EAAAtE,GAAAqE,EACAC,EAAAvB,YAAAsB,EACAC,EAAAhB,KAAAe,EACAC,EAAAU,IAAAX,EACAC,EAAAf,eAAAc,EACAC,EAAAV,mBAAAS,EACAC,EAAAlC,KAAAiC,EAEAC,EAAAW,QAAA,WACA,KAAA,IAAApH,OAAA,qCAIAyG,EAAAY,IAAA,WAAA,MAAA,KACAZ,EAAAa,MAAA,WACA,KAAA,IAAAtH,OAAA,mCAEAyG,EAAAc,MAAA,WAAA,MAAA,0BCxDA,YAqBA1I,GAAAD,QAAA,SAAA4I,GAiBA,MAfAA,GAAAA,SAGAvC,MAAA9E,KAAA2E,UAAA,GAAAnC,QAAA,SAAA8E,GACA,GAAAA,EAIA,IAAA,GAAAC,KAAAD,GACA,SAAAD,EAAAE,KACAF,EAAAE,GAAAD,EAAAC,MAKAF,yBCtCA,YAoBA3I,GAAAD,QAAA,SAAA4I,GAWA,SAVAvC,MAAA9E,KAAA2E,UAAA,GAAAnC,QAAA,SAAA8E,GACA,GAAAA,EAIA,IAAA,GAAAC,KAAAD,GACAD,EAAAE,GAAAD,EAAAC,KAIAF,yBCzBA3I,EAAAD,QAAA,SAAA4I,GACA,QAAAG,GAAA3B,GACA,MAAAwB,GAAAxB,GAGA,QAAA4B,GAAA5B,EAAA6B,GACAL,EAAAxB,GAAA6B,EAGA,QAAAC,GAAA9B,GACA,aAAAwB,GAAAxB,GAGA,QAAA1C,KACA,MAAAD,QAAAC,KAAAkE,GAGA,QAAAO,KACA,MAAA1E,QAAAC,KAAAkE,GAAAQ,IAAA,SAAAhC,GACA,MAAAwB,GAAAxB,KAIA,MAAA,gBAAAwB,GACAA,GAIAG,IAAAA,EACAC,IAAAA,EACAE,OAAAA,EACAG,OAAAH,EACAxE,KAAAA,EACAyE,OAAAA,0BCvCA,YAiBAlJ,GAAAD,QAAA,SAAAsJ,GACA,GAEAC,GACAC,EACAC,EAJAC,EAAA,gBAAAJ,IAAAA,YAAAK,QACAC,EAAA,gBAKA,KAAAF,GAAAJ,EAAA9H,OAAA,EACA,MAAAkI,IAAAE,EAAAC,KAAAP,GACAQ,WAAAR,GAGAA,CAIA,IAAA,SAAAA,GAAA,UAAAA,EACA,MAAA,SAAAA,CAIA,IAAA,SAAAA,EACA,MAAA,KAaA,IATAE,EAAAF,EAAAS,OAAA,GACAN,EAAAH,EAAAS,OAAAT,EAAA9H,OAAA,GAGA+H,EACA,KAAAC,GAAA,KAAAC,GACA,KAAAD,GAAA,KAAAC,GACA,KAAAD,GAAA,KAAAC,EAGA,IACA,MAAAO,MAAAC,MAAAX,GAEA,MAAA5I,IAMA,MAAAkJ,GAAAC,KAAAP,GAAAQ,WAAAR,GAAAA,yBC9DA,YA2CA,IAAAY,MACAC,KACAC,GAAAjG,SAOAkG,EAAApK,EAAAD,QAAA,SAAA2E,GAIA,QAAA2F,KACA,MAAAC,GAAAL,EAAAM,QAAA,MAAA,GAAAN,EAAAM,QAAA7F,IAAA,EAHA,GAAA4F,GAAAD,GAUA,OAHAH,GAAAA,EAAA3I,QAAA8I,EAGA,WACA,GAAAtE,MAAAK,MAAA9E,KAAA2E,YAGA,gBAAAF,GAAA,IAAAA,EAAA,YAAA2D,WACA3D,EAAA,GAAArB,EAAA,KAAAqB,EAAA,IAIAuE,GAKAH,EAAArG,QAAA,SAAA6E,GACAA,EAAA6B,IAAArE,MAAAwC,EAAA5C,MAWAqE,GAAAK,MAAA,WAKA,MAHAN,MACAF,KAEAG,EAAAM,UASAN,EAAAhH,GAAA,SAAAuF,GAGA,MAFAwB,GAAAA,EAAAQ,OAAAhC,OAEAyB,GAeAA,EAAAM,OAAA,WASA,MAPAT,GAAAA,EAAAU,UAAAvE,MAAA9E,KAAA2E,YAGAiE,EAAApG,QAAA,SAAAwC,GACAA,MAGA8D,0BCnIA,YAiBApK,GAAAD,QAAA,SAAA6K,EAAAC,EAAAC,GAUA,QAAAC,KACAH,EAAAzE,MAAA6E,EAAAC,OACAC,EAAAC,KAAAC,MAXA,GAEAC,GACAJ,EACAD,EAJAE,GAAAJ,OAAAQ,WAAA,EAAA,EAAAH,KAAAC,MACAG,GAAAT,OAAAS,QAaA,OAPAA,GAAAA,GAAAzJ,SAAAyJ,EAOA,WACA,GAAAC,GAAAL,KAAAC,MACAK,EAAAD,EAAAN,CAKA,OAFAQ,cAAAL,GAEAR,EAAAY,GACAR,KAAA7E,MAAA9E,KAAA2E,UAAA,GACA+E,EAAAzK,KAEAgL,IAAAF,EAAAtD,WAAAgD,EAAAF,EAAAY,MAIAP,EAAAM,MACAZ,GAAAzE,MAAA5F,KAAA0F,qCChDA,YAUA,IAAA9C,GAAAnD,EAAAD,QAAA,WAGA,MAFAmE,SAAAsG,IAAA,wBAEA,EAaArH,GAAAC,GAAA,SAAAuF,EAAAgD,GAEA,QAAAxI,GAAAZ,GACA,GAAA7B,GAAAiI,CAKA,QAJA,gBAAAjI,IAAAA,YAAAgJ,WACAhJ,EAAAkL,SAAAC,cAAAnL,IAGAA,GAAA,kBAAAA,GAAAoL,aACApL,EAAAoL,YAAAvJ,GACAA,GAFA,OAMA,MAAAoJ,GAAAxI,EAAAwI,GAAAxI,0BCxCA,YAEA,IAAA4I,GAAA,YACAC,GACAC,IAAA,MACAC,IAAA,SACAC,IAAA,SACAC,IAAA,SAaApM,GAAAD,QAAA,SAAAsM,EAAAC,GAcA,QAAApJ,GAAAX,GACA,MAAAA,GAAAgK,WAKAC,EAAA1I,QAAA,SAAA2I,GACAlK,EAAAgK,UAAAE,EAAAC,IAAAD,EAAAE,OAGApK,GARAA,EAfA,GAAAiK,GAAAH,EAAAO,OAAAC,MAAAd,GAEA5C,IAAA,SAAAsD,GACA,OACAC,GAAAV,EAAAS,EAAA3C,OAAA,IACA6C,IAAAF,EAAArG,MAAA,MAIA0G,OAAA,SAAAL,GACA,MAAAA,GAAAC,IAgBA,OAAAJ,GAAApJ,EAAAoJ,GAAApJ,0BC9CA,YAEA,IAAA6J,GAAA,gBACAC,EAAA,eACAC,EAAA,WAcAjN,GAAAD,QAAA,SAAAmN,EAAAC,GACA,GAAAC,EASA,OANAD,GAAAA,GAAAvB,SAGAwB,EAAAD,IAAAvB,UAAAoB,EAAApD,KAAAsD,GAGAE,GAEAD,EAAAE,eAAAC,OAAAC,KAEArH,MAAAb,UAAAe,MAAA9E,KACAyL,EAAAnD,KAAAsD,GACAC,EAAAK,uBAAAF,OAAAC,IACAN,EAAArD,KAAAsD,GACAC,EAAAM,qBAAAP,GACAC,EAAAO,iBAAAR,4BCjCA,QAAAS,KAQA,QAAAC,KACA,GAAAC,EACA,KAAA,wDAKA,KAFA,GAAAC,GAAA,EAEA,gBAAA7H,WAAA6H,IACAA,GAGA,IACAC,GACAnD,EAFAoD,EAAA9H,MAAAb,UAAAe,MAAA9E,KAAA2E,UAAA,EAAA6H,EAQA,IAJAE,EAAAzM,QACAyM,EAAAvH,MAAAwH,KAAAC,WAAA,gBAGA,gBAAAjI,WAAA6H,KAAA5H,MAAAiI,QAAAlI,UAAA6H,IAAA,CACA,GAAA1J,GAAA6B,UAAA6H,EAEA,IAAAM,EACA,KAAA,2CAGA,KAAA,GAAAjH,KAAA/C,GAAA,CACA,GAAA+C,IAAAkH,GACA,KAAA,iCAAAlH,CAEAmH,GAAAnH,GAAA/C,EAAA+C,GAGA,MADAiH,IAAA,EACAR,EAYA,GATA1H,MAAAiI,QAAAlI,UAAA6H,MACAC,EAAA9H,UAAA6H,GACAA,KAGA,kBAAA7H,WAAA6H,KACAlD,EAAA3E,UAAA6H,IAGA,kBAAAlD,GACA,KAAA,IAAAzJ,OAAA,wCAAAqD,OAAAC,KAAA4J,GAAA9M,OAAA,KAAAyM,EAAA,IAGA,KAAA,GAAA9M,GAAA,EAAAA,EAAA8M,EAAAzM,OAAAL,IACA,GAAA8M,EAAA9M,IAAAoN,GACA,KAAA,8CAAAN,EAAA9M,GAAA,wBAUA,OANAmN,GAAAL,IACAA,MAAAA,EACAjI,KAAAgI,MACAnD,GAAAA,GAGAgD,EApEA,GAIAC,GACAO,EALAH,EAAA,EACAI,KACAC,IAqEA,KAAA,GAAAnH,KAAAtC,GAAAQ,UACAuI,EAAAzG,GAAAtC,EAAAQ,UAAA8B,EAUA,OAPAyG,GAAAzH,MAAA,KAAAF,WAEAsI,EAAA,WACAV,GAAA,EACAW,EAAAH,EAAAC,EAAAV,KAGAA,EAzFA,GAAAY,GAAAvN,EAAA,SACA4D,EAAA5D,EAAA,UAAA4D,aAGA0J,EAAA,kBAAAE,cAAAA,aAAA1G,UAwFA/H,GAAAD,QAAA4N,4CCrFA,QAAAe,GAAAC,EAAA5I,EAAA6I,GACArO,KAAAsO,MAAAF,EACApO,KAAAuO,MAAA/I,EACAxF,KAAAwO,MAAAH,EAuBA,QAAAI,GAAAL,EAAAL,EAAAW,EAAAL,GACA,GAAAZ,GAAAW,EAAAX,MACAkB,EAAAP,EAAA5I,KAEAA,GADA4I,EAAA/D,MAGA,IAAAsE,EACA,IAAA,GAAAhO,GAAA,EAAAA,EAAAgO,EAAA3N,OAAAL,IAAA,CACA,GAAAiO,GAAAD,EAAAhO,GACAkO,EAAAD,EAAAE,MAAAC,EAMA,IAJAF,IACAD,EAAAA,EAAA/I,MAAA,MAGA+I,IAAAb,IACA,MAGAc,IACArJ,EAAAU,KAAA6H,EAAAa,IAKA,GAAAI,GAAA,GAAAb,GAAAC,EAAA5I,EAAA,SAAA5B,EAAAmK,GACAM,EAAAZ,EAAA7J,EAAAmK,IAGAW,GAAAjB,GACAuB,EAAAf,MAGA,QAAAA,GAAAH,EAAAC,EAAAhH,GACA,GAAAkI,GACAC,GAAA,CAEA,KAAAnI,EAAAoI,UAAA,CAIA,IAAA,GAAAvI,KAAAkH,GACAoB,GAAA,EACAD,EAAAnB,EAAAlH,GAEA6H,EACAQ,EACAlB,EACA,SAAAN,SACAK,GAAAL,IAEA,SAAAA,EAAA7J,EAAAwL,GACA,IAAArI,EAAAoI,UAAA,CAGA,GAAAvL,EAIA,MAHAmD,GAAAoI,WAAA,EACApI,EAAA5B,KAAA,QAAAvB,EAAA6J,OACA1G,GAAA5B,KAAA,WAIA,KAAA,GAAAxE,GAAA,EAAAA,EAAA8M,EAAAzM,OAAAL,IACAoN,EAAAN,EAAA9M,IAAAyO,EAAAzO,EAGAsN,GAAAH,EAAAC,EAAAhH,KAKAmI,KACAnI,EAAAoI,WAAA,EACApI,EAAA5B,KAAA,cAIA,QAAAkK,GAAAvB,EAAAC,EAAAhH,GACA,GAAAuI,KAEA,KAAA,GAAA1I,KAAAkH,GACAwB,EAAA1I,GAAAkH,EAAAlH,EAGAqH,GAAAqB,EAAAvB,EAAAhH,GArHA,GAAAgI,GAAA,OAYAZ,GAAArJ,UAAAmJ,IAAA,WACA,GACAsB,GADAP,EAAAhP,IAGAA,MAAAsO,MAAAjE,GAAAzE,MAAA5F,KAAAA,KAAAuO,MAAAnE,QAAA,SAAAxG,GACA,GAAA4L,GAAA7J,MAAAb,UAAAe,MAAA9E,KAAA2E,UAAA,EACA9B,IACA2L,GAAA,EACAP,EAAAX,KAAAzK,IACA2L,GACAP,EAAAX,KAAA,KAAAmB,QAIArB,EAAArJ,UAAAuJ,KAAA,SAAAzK,EAAA4L,GACA,MAAA5L,GACA5D,KAAAwO,MAAA5K,OAEA5D,MAAAwO,MAAA,KAAAgB,IA0FA/P,EAAAD,QAAA6P,yBCxHA,GAAAI,GAAA/O,EAAA,mBACA0C,EAAA1C,EAAA,cA4CA8B,EAAA/C,EAAAD,QAAA,SAAA2D,EAAAoH,EAAAmF,GASA,QAAAC,GAAA3N,EAAAzB,GAUA,OATAA,OAAAqP,QACA5N,EAAA4N,OAAA,EACA5N,EAAA6N,aAAA,QAAA,MAGAtP,OAAAuP,QACA9N,EAAA6N,aAAA,iBAAA,GAGA7N,EAGA,QAAA+N,GAAAzP,EAAAC,GACA,GAAAyP,IAAAzP,OAAAyP,SACAC,EAAA,QACAjO,GAAAzB,OAAAyB,KAAAzB,OAAA6H,OAGA8H,EAAA5P,GAAA,kBAAAA,GAAA6P,cA+BA,OA5BAD,IAAA5P,EAAA6P,iBAAAnP,OAAA,IACAiP,EAAA,SAIAjO,GAAA,kBAAAA,GAAAoO,OACApO,EAAA,MAIAA,EAAAA,GAAAqJ,SAAAgF,cAAAJ,GAGAK,GAAAA,EAAAC,gBACAvO,EAAAwO,IAAAF,EAAAC,gBAAApN,GAEAnB,EAAAyO,UACAzO,EAAAyO,UAAAtN,EAEAnB,EAAA0O,eACA1O,EAAA0O,aAAAvN,IAGA5B,SAAAyO,GAAAA,KACAhO,EAAA6N,aAAA,WAAA,IACA7N,EAAAoO,QAGAT,EAAA3N,EAAAzB,GA1DA,GACAoQ,GADAL,EAAA,mBAAAzQ,SAAAA,OAAAyQ,GA+DA,OA5DA,kBAAA/F,KACAmF,EAAAnF,EACAA,OAyDAoG,EAAAlB,GAAAlF,OAAA3I,UAEA+O,EAAAC,KAAArG,EAAA,SAAA7G,GACA,MAAAA,GACAgM,EAAAhM,GAGA,kBAAAiN,GAAAnO,OACAkN,EAAA,GAAA9O,OAAA,gDAGA8O,GAAA,KAAAC,EAAAgB,EAAAnO,OAAAW,EAAAoH,GAAAA,UAIAmF,GAAA,KAAAK,EAAA5M,EAAAoH,IAWA/H,GAAAC,MAAA,SAAAU,EAAAoH,EAAAmF,GACA,kBAAAnF,KACAmF,EAAAnF,EACAA,MAGA/H,EAAAW,EAAAC,GAAAwM,OAAA,EAAAE,QAAA,GAAAvF,GAAAmF,8DC5IA,GAAAD,GAAA/O,EAAA,mBACAmQ,EAAAnQ,EAAA,kBAGAoQ,WAAAC,aAAAD,UAAAC,cACAF,EAAA9P,KAAA+P,UAAA,gBA0BArR,EAAAD,QAAA,SAAA0B,EAAAqJ,EAAAmF,GAGA,QAAAsB,GAAA7N,GACAuM,EAAA,KAAAvM,GAHA,GAAAwN,EAaA,OAPA,kBAAApG,KACAmF,EAAAnF,EACAA,OAIAoG,EAAAlB,GAAAlF,OAAA3I,UAEA+O,EAAAC,KAAArG,EAAA,SAAA7G,GACA,MAAAA,GACAgM,EAAAhM,GAGA,kBAAAoN,WAAAC,aACArB,EAAA,GAAA9O,OAAA,8CAGAkQ,WAAAC,aAAA7P,EAAA8P,EAAAtB,KAIA,kBAAAoB,WAAAC,aACArB,EAAA,GAAA9O,OAAA,mCAGAkQ,WAAAC,aAAA7P,EAAA8P,EAAAtB,oEC3DA,YAEA,IAAAhI,GAAAhH,EAAA,kBAsBAmQ,EAAApR,EAAAD,QAAA,SAAA4I,EAAAmC,GACA,GACA0G,GACAC,EACAC,EAHA3O,GAAA+H,OAAA/H,OAIA4O,EAAApR,OAAA,mBAAAH,QAAAA,OAAA0B,QAIA8P,IAAA9G,OAAA8G,WAAA,KAAA,IAAA,MAAA,WAAAjH,OAAA,GAGA,IAAAgH,EAKA,IAAAH,EAAAI,EAAArQ,OAAAiQ,KAWA,GAVAC,EAAAG,EAAAJ,GAMAE,EAAAD,GAAAA,EACA9I,EAAAmB,OAAA,GAAA+H,cAAAlJ,EAAAvC,MAAA,GACAuC,GAEA,mBAAAgJ,GAAAD,GAQA,MANAN,GAAAnJ,QAAAmJ,EAAAnJ,SAAAwJ,EAAAK,cAEA/O,IACA4O,EAAAhJ,GAAAgJ,EAAAD,IAGAC,EAAAD,GAMAN,GAAAW,IAAA,mBAAAV,cAAAA,UAAAW,gBAGAZ,EAAAnJ,QAAAA,EAAAvD,KACA0M,EAAAa,eAAAb,EAAAhJ,QAAAH,EAAAG,kDCzDApI,EAAAD,QAAA,SAAA+K,EAAAmF,GACA,GAAAlO,IAAA+I,OAAA/I,IACAmQ,GAAApH,OAAAoH,UAEA,OAAA,kBAAAnQ,GACAA,EAAA+I,EAAAmF,GAEA/J,MAAAiI,QAAApM,GACAkO,EAAA,QAAAtF,OAAA5I,QAGAkO,GAAA,QAAAtF,OAAAuH,kCCHA,QAAA7C,GAAA8C,GACA,MAAAA,GAAAxH,OAAAwH,EAAA,GAAAC,KAAAf,UAAAgB,YAGA,QAAAC,GAAAH,GACA,QAAAA,EAAA,GAbA,IAjBA,GAAAI,KACA,SAAA,uCACA,UAAA,gCACA,QAAA,8BACA,KAAA,4CACA,KAAA,wCACA,KAAA,iBACA,OAAA,sCACA,UAAA,wBACA,MAAA,iCACA,MAAA,2CACA,SAAA,wBAGAlD,EAAAkD,EAAApJ,IAAAkG,GAAAvC,OAAAwF,GAAA,GACAE,EAAAnD,GAAAA,EAAA,GAAAxC,MAAA,QAAAzG,MAAA,EAAA,GAEAoM,GAAAA,EAAAjR,OAAA,GACAiR,EAAA/L,KAAA,IAIA1G,GAAA2E,KAAA2K,GAAAA,EAAA,GACAtP,EAAAqI,QAAAoK,GAAAA,EAAAC,KAAA,4BClBA,QAAAC,GAAA1C,GACA,MAAAA,IAAA,kBAAAA,GAAA2C,WAAA3C,EAAA2C,UAAAvB,GAGA,QAAAX,GAAAT,GACA,GAAA4C,GAAAC,EAAA/F,OAAA,SAAAlC,GACA,MAAA,kBAAAoF,GAAApF,IAGA,OAAAgI,GAAArR,SAAAsR,EAAAtR,OAdA,GAAA6P,GAAAnQ,EAAA,YACA4R,GACA,OAeA7S,GAAAD,QAAA,SAAAoC,GACA,SAAAwI,OAAAxI,OAAA2K,OAAA4F,GAAA5F,OAAA2D,GAAA,wCChBA,YAEA,IAAAqC,GAAA7R,EAAA,aACA8R,EAAA9R,EAAA,QACA+R,EAAA/R,EAAA,mBACAgS,EAAAH,EAAA1I,OAAA,oBACAzG,EAAA1C,EAAA,aAgGAjB,GAAAD,QAAA,SAAAmT,EAAApI,GAoCA,QAAAqI,KACAzH,aAAA0H,GAEAC,GAIAC,KAKAtD,GAAAuD,IAKArB,IAMA3N,GAAAiP,EAAAjS,OAAAgD,IAKA6O,EAAArL,WAAA,WACA,GAAA0L,GAAA9P,GAAA9B,KAAAA,GAAA6R,EAGA9R,GAAA+R,SAAAF,GACAJ,GAAA,GACA,KAGA,QAAAO,GAAAnQ,GACA,GACAoQ,GACAC,EAFAL,EAAAM,EAAAtQ,EAKAgQ,GAAA5R,OAAAA,IAKAmS,EAAAC,IAAAxQ,GAIAoQ,EAAAf,EAAAoB,iBACAvQ,KAAAmH,GAAAoH,WAAAA,KACApH,OAAArJ,aAGAG,EAAA,eAAA6R,EAAAhQ,GAAAoQ,EAAAJ,GAGAO,EAAAG,OAAAV,EAAAhQ,GAAAoQ,GAGAL,EAAA1P,QAAA,SAAAJ,GACAmQ,EAAAxQ,UAAAK,KAMA9B,EAAAwS,SAAAX,EAAAhQ,KACAwP,EAAA,sCAAAzO,OAAAC,KAAAzC,IAGAwC,OAAAC,KAAAzC,GAAA8B,QAAA,SAAAuQ,GACAC,EAAAT,EAAAjP,kBAAAyP,EAAArS,EAAAqS,IAAAR,EAAAJ,MAIAI,EAAAU,cAAA,SAAAC,GACA,GAAAC,GAAAD,GAAAA,EAAAC,OAGAA,IAIA3S,SAAAE,EAAAyS,EAAAJ,QACAC,EAAAG,EAAAZ,EAAAE,EAAAtQ,KAMAwP,EAAA,YAAArR,EAAA6B,GAAA,OAAAgQ,EAAAhQ,IACAqQ,EAAAhB,EAAA4B,OAAAb,EAAApQ,EAAA7B,EAAA+B,KAAAmH,GACAV,OAAA2I,EAAA,MAAAtP,EAAA7B,MAGAA,EAAA,cAAA6B,EAAAoQ,EAAAJ,EAAAK,GAGAA,EAAAlN,KAAA,YAAAoN,EAAAW,MAAAC,KAAA,KAAAnR,EAAAoQ,EAAAJ,IACAK,EAAAlN,KAAA,SAAAoN,EAAAC,IAAAW,KAAA,KAAAnR,IAKA7B,EAAAwS,SAAA3Q,IACAqQ,EAAAe,eAIA,QAAAC,GAAAxS,GACA,GAAAhB,GAAA0S,EAAAlL,IAAAxG,EAEA,KAAAhB,EACA,KAAA,IAAAH,OAAA,4BAAAmB,EAGA,OAAAhB,GAGA,QAAAgT,GAAAG,EAAAZ,EAAAJ,GAGA,QAAAsB,KACA,GAAAzT,GAAA0S,EAAAlL,IAAA2K,EAAAhQ,IACAsC,GAAA0N,EAAAhQ,GAAAgR,EAAAhB,EAAAI,EAGAZ,GAAA,sBAAAwB,EAAAJ,MAAA,yBAAA/S,GACA0T,cAAAC,GACAR,EAAAS,OAAA,KAGA5T,GACAA,EAAAU,SAAA+G,IAAA0L,EAAAJ,MAAAI,GAIAxB,EAAA,iDAAAwB,EAAAJ,OAGAzS,EAAAuE,MAAAvE,GAAA,kBAAA+I,OAAA5E,IAGAnE,EAAAuE,MACAvE,GACA,kBAAA6S,EAAAJ,OAAA1J,OAAA5E,IAzBA,GAAAkP,EA8BA,OADAhC,GAAA,WAAAwB,EAAAJ,MAAA,yBAAAZ,EAAAhQ,IACA,SAAAgR,EAAAU,WACAJ,KAGA9B,EAAA,sCAAAwB,EAAAU,YACAV,EAAAS,OAAAH,OAGAE,EAAAG,YAAA,WACAnC,EAAA,2CAAAwB,EAAAU,YACA,SAAAV,EAAAU,YACAJ,KAEA,OAGA,QAAAM,KACA,MAAArF,IAAAA,EAAAmB,KAAArG,EAAA,SAAA7G,GACA,MAAAA,GACAC,QAAAC,MAAA,gCAAAF,IAGAsP,GAAA,MACAJ,QAIA,QAAAmC,GAAA7B,GAEAA,GAAA,mBAAAA,GAAA5R,OACAA,EAAA4R,EAAA5R,MAIA,QAAA0T,GAAA9R,EAAAgQ,GAEAA,EAAA+B,MAAA/B,EAAA+B,OAAAhC,EAAAjS,QAAAgD,EAGA,QAAAkR,GAAAhC,GACA,GAAAhQ,GAAAgQ,GAAAA,EAAAhQ,GACAiS,EAAAjS,GAAAuQ,EAAAlL,IAAArF,EAIA,OAAAA,KAAAiS,GACAzC,EAAA,kCAAAxP,EAAA,qBACA7B,EAAAwB,GAAAK,GAAAkS,KAAA,cACA/B,EAAAnQ,IAHA,OA1OA,GAcAyO,GAcAqB,EA5BAqC,EAAA,mBAAAC,WAAAA,SAAAD,KAAAxP,MAAA,GACAxE,EAAAX,EAAA,2BAAA0C,GAAA/B,UAAAsR,GAAApI,IACAiJ,EAAA9S,EAAA,qBAAAW,EAAAkU,OAGAC,GAAAjL,OAAAiL,IAAA,GACAlU,GAAAiJ,OAAAjJ,KACAmU,GAAAlL,OAAAmI,MACAK,IAAAxI,OAAAmL,WACAvC,KACAL,GAAA,EAOAG,KAGAQ,EAAApS,EAAAoS,MAAA/S,EAAA,eAAAW,EAAAkJ,GAGA9I,KAGAG,EAAAP,EAAAO,SAAA2I,OAAA3I,YACA6N,EAAAgD,EAAA7Q,GAIAoC,EAAA2R,UAAApL,OAAAvG,qBAAA,KAAA,EACA6O,EAAA,EACA+C,EAAA,CAgjBA,OA/VAtU,KAEA,mBAAAgU,WAAAD,IACAA,EAAAC,SAAAD,KAAA,GAAAQ,KAAAC,IAAA,EAAA,IAAAD,KAAAE,UAGAzU,EAAAkU,EAAA,IAAAH,GAGAI,GACAlD,EAAA1I,OAAAM,OAAAvE,MAAA2M,EAAA1I,OAAAlE,MAAAiI,QAAA8E,GAAA+C,GAAA,MAGApU,EAAA0B,GAAA,gBAAA,SAAAmQ,GACAG,EAAAH,EAAAhQ,MAGA7B,EAAA0B,GAAA,cAAAmS,GAEA7T,EAAA0B,GAAA,oBAAA,SAAAiT,GACA3C,EAAA2C,EAAA9S,MAyBA7B,EAAA4U,UAAA5U,EAAAyB,UAAA,SAAAK,GASA,MARA8P,GAAA/M,KAAA/C,GAGAsQ,EAAA9K,SAAApF,QAAA,SAAA2P,GACAA,EAAAI,GAAAxQ,UAAAK,KAGAyP,IACAvR,GAWAA,EAAA6U,SAAA,WACAzC,EAAAvP,OAAAX,QAAAkQ,EAAAC,MAWArS,EAAA8U,MAAA,WACA9U,EAAA6U,WACA7U,EAAA+U,SAqBA/U,EAAAgD,kBAAA,SAAAyP,EAAAvJ,GAgBA,MAdAkJ,GAAAvP,OAAAX,QAAA,SAAAxB,GACA,GACAsU,GADAtV,EAAA0S,EAAAlL,IAAAxG,EAIAhB,IAAAA,EAAAuS,IAAAjS,EAAAwS,SAAA9R,KACAsU,EAAAtV,EAAAuS,GAAAjP,kBAAAyP,EAAAvJ,GACAwJ,EAAAsC,EAAAtV,EAAAuS,GAAAE,EAAAzR,OAKAN,EAAAqS,GAAAvJ,GAAA,KAEAlJ,GAWAA,EAAA6Q,KAAA,WACAa,GAAA,EACAH,KAQAvR,EAAAkH,IAAA,SAAApE,GACA,MAAAgP,GAAAhP,IAQA9C,EAAAiV,gBAAA,WACA,SAAAlM,OAAA6I,IASA5R,EAAAkV,SAAA,WAMA,MAJAhM,GAAAA,MACAA,EAAAgM,UAAA,EAGAlV,GAcAA,EAAAmV,aAAA,SAAArT,GACA,GAAAsT,GAAAxD,EAAAjJ,QAAA7G,EAYA,OATAsQ,GAAA9K,SAAApF,QAAA,SAAAxC,GACAA,EAAAuS,GAAAkD,aAAArT,KAIAsT,GAAA,GACAxD,EAAAvM,OAAA+P,EAAA,GAGApV,GAiBAA,EAAAqV,eAAA,SAAAC,EAAA7C,EAAApE,GACA,GAAA3O,GAAAwT,EAAAoC,GACAzC,EAAAnT,GAAAA,EAAAU,SAAA8G,IAAAuL,EAGA,OAAAI,IACAxE,EAAA,KAAAwE,GACA7S,IAIAA,EAAAgF,KAAA,kBAAAyN,EAAA,SAAA5Q,EAAAmT,GACA3G,EAAA,KAAA2G,KAGAhV,IAkBAA,EAAAuV,cAAA,SAAAD,EAAAE,EAAAnH,GAIA,QAAAoH,GAAA/U,GACAA,IAAA4U,IAKAxT,EAAApC,EAAAuS,GAAAyD,mBAAAF,GAGA1T,IACA9B,EAAAiF,eAAA,eAAAwQ,GACApH,EAAA,KAAAvM,KAdA,GACAA,GADApC,EAAAwT,EAAAoC,EAsBA,QAHAxT,EAAApC,EAAAuS,GAAAyD,mBAAAF,KAIAnH,EAAA,KAAAvM,GACA9B,IAIAA,EAAA0B,GAAA,eAAA+T,GACAzV,IAWAA,EAAA8R,QAAA,SAAAD,GAYA,MAXA9P,GAAA+P,EAAAD,GAIAJ,IACA3H,aAAAyK,GACAA,EAAApO,WAAA,WACAnG,EAAA+R,SAAAD,KACA5I,OAAAyM,aAAA,MAGA3V,GAeAA,EAAA4V,YAAA,SAAAN,EAAAjH,GACA,GAAA3O,GAAA0S,EAAAlL,IAAAoO,EAEA,OAAA5V,IAAAA,EAAA2I,QACAgG,EAAA,KAAA3O,EAAAuS,IACAjS,OAGAA,GAAA0B,GAAA,eAAA,QAAAmU,GAAAhU,GACAA,IAAAyT,IACAtV,EAAAiF,eAAA,eAAA4Q,GACAxH,EAAA,KAAA+D,EAAAlL,IAAArF,GAAAoQ,QAOAtP,GACA3C,EAAA0B,GAAA,cAAAiS,GAIA3T,EAAA0B,GAAA,iBAAAgS,GAGA1T,EAAA0B,GAAA,eAAA0Q,EAAA0D,MAGAzW,EAAA,mBAAA6J,EAAA,SAAA7G,EAAA0T,GACA,MAAA1T,GACAC,QAAAC,MAAA,8BAAAF,IAGAiO,EAAAyF,MACAxE,QAIAnD,GACAqF,IAIAzT,2LC1rBA,GAAAkR,GAAA7R,EAAA,aACAgS,EAAAH,EAAA1I,OAAA,oBACAwN,EAAA3W,EAAA,qBACA4W,EAAA5W,EAAA,cAEAjB,GAAAD,QAAA,SAAA6B,EAAAkJ,GAKA,QAAAqJ,GAAA1Q,EAAAoQ,GACAG,EAAAjL,IAAAtF,GACAwG,QAAA,EACA4J,GAAAA,EACA7R,SAAA6V,MACAC,WACAC,SAAA5M,KAAAC,QAIA,QAAA4M,GAAAvU,GACA,MAAA,UAAA+Q,GACAvB,EAAA,QAAAxP,EAAA,iBACAwU,EAAAxU,GACAyU,EAAAzU,GAAA+Q,EAAA9Q,SAIA,QAAAyU,GAAA1U,GACA,MAAA,UAAA+Q,GACAvB,EAAA,QAAAxP,EAAA,mBACAwU,EAAAxU,GACA7B,EAAA,iBAAA6B,EAAA+Q,EAAA9Q,SAIA,QAAAuQ,GAAAxQ,GACA,GAAAnC,GAAA0S,EAAAlL,IAAArF,EAGAnC,KAKAA,EAAAU,SAAAyC,OAAAX,QAAA,SAAAuQ,GACA,GAAAI,GAAAnT,EAAAU,SAAA8G,IAAAuL,GACAtO,GAAAtC,EAAAgR,EAAAJ,EAGAzS,GAAAuE,MAAAvE,GAAA,kBAAA+I,OAAA5E,IAGAnE,EAAAuE,MAAAvE,GAAA,kBAAAyS,GAAA1J,OAAA5E,IAGA0O,EAAAS,OAAA,OAIA5T,EAAAwW,QAAAhU,QAAA,SAAAJ,GACA9B,EAAA,iBAAA6B,EAAAC,KAIAsQ,EAAA5K,OAAA3F,GAGA,IAAAuQ,EAAAvP,OAAAlD,QACA6W,IAIAxW,EAAA,aAAA6B,EAAAnC,EAAAuS,IAGA+D,EAAAtW,EAAAuS,KAGA,QAAA6D,GAAAnB,GACA,GAAAjV,GAAA0S,EAAAlL,IAAAyN,GAAAA,EAAA9S,GAGAnC,KACAA,EAAAyW,SAAA5M,KAAAC,OAIA,QAAA8M,GAAAzU,GACA,MAAA,UAAAC,GACA9B,EAAA,eAAA6B,EAAAC,EAAAqQ,EAAAtQ,KAIA,QAAA2U,KACApD,cAAAqD,GACAA,EAAA,EAGA,QAAA1D,GAAAlR,EAAAoQ,EAAAJ,GACA,GAAAnS,GAAA0S,EAAAlL,IAAArF,GACAqU,KAAAnN,OAAAkJ,EAAAyD,mBAGAhW,GAAA2I,QAAA,EACA3I,EAAAwW,WAAAnN,OAAAkJ,EAAAyD,oBAEAzD,EAAAyE,YAAAN,EAAAvU,GACAoQ,EAAA0E,eAAAJ,EAAA1U,GAEAwP,EAAArR,EAAA6B,GAAA,MAAAA,EAAA,gBAAAqU,EAAAvW,OAAA,YACAK,EAAA,eAAA6B,EAAAoQ,EAAAJ,GAGA4E,EAAAA,GAAApX,EAAA,eAAAW,EAAAoS,EAAAlJ,GAGAlD,EAAAC,SAAA,WAEAiQ,EAAAhU,QAAAoU,EAAAzU,MAIA,QAAAwU,GAAAxU,GACA,GAAAnC,GAAA0S,EAAAlL,IAAArF,EAEAnC,IAAAA,EAAAuS,KACAvS,EAAAwW,WAAAnN,OAAArJ,EAAAuS,GAAAyD,qBAzHA,GAEAe,GAFArE,EAAA6D,MACA9D,EAAA9S,EAAA,iBAAAW,EAAAkU,MAiIA,OALA9B,GAAAG,OAAAA,EACAH,EAAAC,IAAAA,EACAD,EAAA0D,KAAAA,EACA1D,EAAAW,MAAAA,EAEAX,yJCxIAhU,EAAAD,QAAA,SAAA+V,GACA,MAAA,UAAArS,GACA,GAAAhB,GAAAqT,EAAAhN,IAAArF,EACA,OAAAhB,IAAAA,EAAAgR,8BCHAzT,EAAAD,QAAA,SAAA6B,EAAAoS,EAAAlJ,GAIA,QAAA6K,KACA,GAAA6C,GAAArN,KAAAC,MAAA,EAAAiN,CAGArE,GAAAvP,OAAAX,QAAA,SAAAL,GACA,GAAAnC,GAAA0S,EAAAlL,IAAArF,EAGA,OAAAnC,GAAAyW,SAAAS,EACAxE,EAAAC,IAAAxQ,OAIA7B,GAAAwB,GAAAK,GAAAkS,KAAA,WAhBA,GAAA0C,IAAAvN,OAAAuN,WAAA,IAoBA,OAAAA,GAIAjD,YAAAO,EAAA0C,GAJA,+BCrBA,GAAAtM,GAAA,SAsBA0M,EAAAzY,EAAAD,QAAA,SAAA2Y,EAAAC,EAAAxL,GAIA,QAAAyL,GAAAlU,GACA,GAGA4J,GAHAvI,KAAAK,MAAA9E,KAAA2E,UAAA,GACA4S,EAAAC,EAAApU,GACAqU,EAAAC,EAAAH,MAuBA,OAnBAI,GAAAnV,QAAA,SAAAoV,GACAA,GAAAxU,KAAAmU,EAAA9S,KAAAA,MAIAuI,KAAA3D,OAAAoO,GAAA5P,IAAA,SAAAtD,GACA,MAAAA,GAAAM,MAAAgH,GAAA5M,KAAAwF,KAIA6S,EAAAD,SACArK,EAAAA,EAAA3D,OACAiO,EAAAD,OAAAxS,MACAgH,GAAA5M,OACAmY,EAAAA,EAAA,IAAA,IAAAG,GAAAlO,OAAA5E,MAKAuI,EAUA,QAAA6K,GAAAzU,GAEAA,QACAsU,GAAAF,EAAApU,IAIAsU,KAkBA,QAAAE,GAAArT,GACA,QAAAuT,KACAH,EAAAhS,OAAAgS,EAAA1O,QAAA1E,GAAA,GAIA,MADAoT,GAAAxS,KAAAZ,GACAuT,EAGA,QAAAN,GAAApU,GACA,OAAAwB,MAAAiI,QAAAzJ,GAAAA,EAAAA,EAAAmI,MAAAd,IAAA0G,KAAA,KAQA,QAAAnK,GAAA5D,EAAAmB,GACA,GAAAkT,GAAAC,EAAAF,EAAApU,QACA0S,EAAA2B,EAAAA,EAAAxO,QAAA1E,EAAAwT,SAAAxT,GAAA,EAEAuR,IAAA,GACA2B,EAAA9R,OAAAmQ,EAAA,GAUA,QAAA9T,GAAAoB,EAAAmB,GACA,GAAAkT,EAYA,OAVArU,GAAAoU,EAAApU,GACAqU,EAAAC,EAAAtU,GAEAqU,EACAA,EAAAtS,KAAAZ,GAGAmT,EAAAtU,IAAAmB,GAGA+S,EAYA,QAAAhS,GAAAlC,EAAAmB,GACA,QAAAyT,KACA,GAAAvJ,GAAAlK,EAAAM,MAAA5F,KAAA0F,UAGA,OADA2S,GAAAtQ,IAAA5D,EAAA4U,GACAvJ,EAIA,MADAlK,GAAAwT,QAAAC,EACAhW,EAAAoB,EAAA4U,GAnIA,GAAAN,MACAC,IAmJA,OAdA,kBAAAP,KACAC,EAAAD,EACAA,EAAA,IAGAA,EAAAI,EAAAJ,GAAA,IAEAE,EAAAO,MAAAP,EAAA1R,mBAAAiS,EACAP,EAAAM,KAAAA,EACAN,EAAAtV,GAAAsV,EAAAvS,YAAA/C,EACAsV,EAAAhS,KAAAA,EACAgS,EAAAtQ,IAAAsQ,EAAA/R,eAAAyB,EACAsQ,EAAAD,OAAAA,GAAAD,GAAAD,IAEAG,4BCnJA,QAAAW,GAAAC,GACA,MAAA,kBAAAA,GACAA,GAEAA,EAAAC,KAAAD,EAAAC,MAAA,SAAAC,GACA,GAAA,kBAAAA,GACA,KAAA,IAAAvY,OAAA,sBACA,OAAAoY,GAAAG,EAAAF,KAEAA,EAAA7T,KAAA,SACA6T,GAlCAzZ,EAAA0D,GACA,SAAAkW,GACA,MAAAA,IAGA5Z,EAAA8I,KACA,SAAAM,GACA,GAAA,gBAAAA,GAAA,CACA,GAAAhC,GAAAgC,CACA,OAAA,UAAAsK,GAAA,MAAAA,GAAAtM,IAEA,MAAAgC,IAGApJ,EAAA6Z,OAAA,SAAAhQ,GACA,MAAAA,GACA,gBAAAA,IACA,kBAAAA,GAAAA,KACAA,EAAAA,KAAAgL,KAAAhL,GACA7J,EAAA8I,KAAAe,IAAA7J,EAAA0D,GAJA1D,EAAA0D,IAOA1D,EAAAwZ,QAAAA,CAeA,IAYAM,IAXA9Z,EAAA+Z,OACA,SAAAC,GACA,QAAAlZ,KACA,GAAAkF,MAAAK,MAAA9E,KAAA2E,UACA,OAAAsT,GAAAQ,EAAA5T,MAAA,KAAAJ,IAGA,MADAlF,GAAA8E,KAAA,SACA9E,GAKAd,EAAA8Z,QACA,SAAAE,GACA,MAAA,YAGA,QAAAL,GAAAF,GAGA,IAFAzT,EAAAiU,QAAAR,GACAA,EAAAO,EAAA5T,MAAA,KAAAJ,GACAkU,EAAA1Y,QACAiY,EAAAS,EAAAC,QAAAV,EACA,OAAAA,GAPA,GAAAzT,MAAAK,MAAA9E,KAAA2E,WACAgU,IAiBA,OARAP,GAAAD,KAAA,SAAAD,GAEA,GADAS,EAAAxT,KAAA+S,GACA,WAAAA,EAAA7T,KACA,KAAA,IAAAxE,OAAA,eAAAuY,EAAA/T,KAAA,aAEA,OADA+T,GAAA/T,KAAA,SAAA6T,EAAA7T,KAAA,OAAA,UACA+T,GAEAA,EAAA/T,KAAA,UACA+T,KAIAS,EACApa,EAAAoa,KACA,SAAAC,GACA,MAAA,YAIA,QAAAvZ,GAAA2Y,GAEA,MADAzT,GAAAiU,QAAAR,GACAY,EAAAjU,MAAA,KAAAJ,GALA,GAAAA,MAAAK,MAAA9E,KAAA2E,UACA,KAAAmU,EACA,KAAA,IAAAjZ,OAAA,gCAMA,OADAN,GAAA8E,KAAA,OACA9E,GAKAd,GAAAsa,UACAta,EAAAua,WACA,SAAAC,EAAAC,GACA,MAAAA,GAeAL,EAAA,SAAAX,GACA,MAAAe,GAAAC,GAAAhB,OAfAK,EAAA,SAAAL,GACA,GAAAiB,EACA,OAAA,UAAA/D,EAAA8D,GACA,MAAA9D,GAAA8C,EAAA9C,EAAA8D,GACAC,EAAAD,EAAAC,OAEAF,GAAA,SAAAtW,EAAAwP,GACAgH,EAAAxW,IAAA,EACAA,EACAuW,EAAAC,GADAD,EAAA,KAAA/G,KAEA+F,gCCvFAxZ,EAAAD,QAAA,SAAA+K,GACA,GAAAlJ,IAAAkJ,OAAAlJ,UACA8Y,GAAA5P,OAAA4P,WAAAzZ,EAAA,4BAEA,OAAA,gBAAAW,IAAAA,YAAA8H,QACAzI,EAAA,iBAAAyZ,EAAA9Y,GAAAkJ,GAGAlJ,2EC3BA,GAAA+B,GAAA1C,EAAA,aAWAjB,GAAAD,QAAA,SAAA4a,EAAA7P,GACA,MAAA7J,GAAA,gBAAA0Z,EAAAhX,GACAiX,WAAA,UAAA,MACA9P,4DCdA,GAAA+P,GAAA5Z,EAAA,MACA6Z,EAAA7Z,EAAA,SACA8Z,EAAA9Z,EAAA,WAEA+Z,GADA/Z,EAAA,gBACA,MAeAjB,GAAAD,QAAA,SAAAkb,EAAAnQ,GAMA,QAAA8I,GAAA3D,GAOA,QAAAiL,KAGA,QAAAC,KACAC,GAAA,EACAvU,EAAAvF,KAAA+Z,EAAA,UAAAF,GAJA,GAAAE,EAQA,OAAA,KAAA3T,EAAAnG,OACA0O,EAAA,GAAA9O,OAAA,6BAAA8Z,KAGAI,EAAA,GAAAR,GAAAC,EAAApT,EAAAwS,UACAmB,EAAAC,iBAAA,QAAAC,GACAF,EAAAC,iBAAA,QAAAE,GACAH,EAAAC,iBAAA,OAAA,WAEA,GAAA1S,GAAAmS,EAAAnS,OAAAyS,EAAAvQ,EAGAuQ,GAAAC,iBAAA,UAAAH,GAEAM,EAAA1T,WAAA,WACA2D,aAAAgQ,GACAzL,EAAA,KAAArH,EAAAmS,EAAAY,KAAAN,EAAAvQ,KACA,OAGAjE,EAAAwU,EAAAO,qBAAAP,EAAAxU,oBACA6U,EAAA3T,WAAAmT,EAAAW,KAGA,QAAAL,GAAAhH,GAEA,MAAAA,GAAAsH,UAAAV,GAAA,IAAA1T,EAAAnG,QACAmK,aAAA+P,OACA/P,cAAAgQ,IAIAH,IAGA,QAAAA,KACA7P,aAAA+P,GACA/P,aAAAgQ,GACAR,IArDA,GAEAQ,GACAD,EACA5U,EAJAa,KAAAiD,OAAAiQ,GACAQ,GAAA,CAuDAF,KA9DA,GAAAW,IAAA/Q,OAAA+Q,SAAA,IACAjB,IAAA9P,OAAA8P,YAAA,MAAAzR,IAAA,SAAA4S,GACA,MAAAd,GAAAe,QAAAhB,EAAA,IAAAe,GA+DA,OAAAnI,yEChFA,QAAAqI,GAAAC,EAAApR,GACA,OACAlC,OAAA7I,EAAA6I,OAAAsT,GACAP,KAAA5b,EAAA4b,KAAAO,EAAApR,IARA/K,EAAAC,EAAAD,QAAAkc,EAEAlc,EAAA6I,OAAA3H,EAAA,YACAlB,EAAA4b,KAAA1a,EAAA,0DCHAjB,EAAAD,QAAA,SAAAsb,EAAApL,GAGA,QAAA2H,KACA,kBAAA3O,KACAA,EAAA3H,KAAA+Z,EAAA,OAAAc,GACAlT,EAAA3H,KAAA+Z,EAAA,QAAAe,IAIA,QAAAD,KACAvE,IAAA3H,IAGA,QAAAmM,GAAA5H,GACAoD,IAAA3H,EAAAuE,GAdA,GAAAvL,GAAAoS,IAAAA,EAAAO,qBAAAP,EAAAxU,eAkBA,OAAAwU,GAAAlG,YAAA,EACAlF,GAAA,GAIA,IAAAoL,EAAAlG,WACAlF,KAGAoL,EAAAC,iBAAA,OAAAa,OACAd,GAAAC,iBAAA,QAAAc,yCC7BA,GAAAC,GAAApb,EAAA,aACAqb,EAAArb,EAAA,UAUAjB,GAAAD,QAAAsc,EAAAlC,KAAA,SAAAX,EAAA6B,EAAAvQ,GAKA,QAAAyR,GAAAtI,EAAAR,GAEA,MAAAQ,QACAuI,GAAAnB,EAAAlG,YAAA,IACAsH,GACApB,EAAAC,iBAAA,QAAA,SAAAoB,GACA,GAAAA,EAAAZ,SAAAW,QACA,CACA,GAAAxY,GAAA,GAAA9C,OAAA,WACA8C,GAAA0Y,MAAAD,EACAD,EAAAxY,MAIAoX,EAAA3E,cAOA4F,GAAAjB,EAAA,SAAApH,GACA,MAAAA,GACAuF,EAAAvF,EAAA,eAGAoH,EAAA1F,KAAAlC,OACA7L,GAAAC,SAAA,WACA2R,EAAA,KAAA+C,QAhCAzR,EAAAA,KACA,IAAA0R,GAAA1R,EAAA0R,cAAA,EACAC,EAAA,kBAAA3R,GAAAA,EAAAA,EAAA2R,OAmCAjD,GAAA,KAAA+C,6FCjDA,GAAAF,GAAApb,EAAA,aACAqb,EAAArb,EAAA,UAUAjB,GAAAD,QAAAsc,EAAAvC,OAAA,SAAAuB,GA4BA,QAAA7B,GAAAoD,EAAApC,GAIA,MAHAqC,GAAA,KAGApC,EACAD,EAAAC,GAGAmC,GAEAC,EAAArC,EACAa,EAAA3E,aAGA4F,GAAAjB,EAAA,SAAApH,GACA,MAAAA,GACAuG,EAAAC,EAAAxG,GAIAwG,GAAAA,KAAA,EACAD,EAAAC,GAEAqC,EAAAvb,OAAA,EACAiZ,EAAA,KAAAsC,EAAA5C,SAEAO,EACAD,GAAA,QAGAqC,EAAArC,KAzDA,GACAqC,GACApC,EAFAqC,IA6DA,OAzDAzB,GAAAC,iBAAA,UAAA,SAAA9G,GACA,MAAAqI,GACAA,EAAA,KAAArI,EAAAf,UAGAqJ,GAAArW,KAAA+N,EAAAf,QAGA4H,EAAAC,iBAAA,QAAA,WACA,MAAAb,GAAA,OACAoC,EACAA,EAAApC,GAAA,GADA,SAKAY,EAAAC,iBAAA,QAAA,SAAA9G,GACAiG,IACAA,EAAAjG,EACAqI,GACAA,EAAApC,MAsCAjB,sDCzCA,QAAA0C,GAAAa,EAAAC,GACA,GAAAC,EAMA,OAJAA,GADAD,EACA,GAAAnC,GAAAkC,EAAAC,GAEA,GAAAnC,GAAAkC,GAhCA,GAAA1c,GAAA,WAAA,MAAAE,SAMAsa,EAAAxa,EAAAwa,WAAAxa,EAAA6c,YAMAld,GAAAD,QAAA8a,EAAAqB,EAAA,KAyBArB,IAAAqB,EAAA7W,UAAAwV,EAAAxV,kCC1CA,GAAA8X,GAAA,YAcAnd,GAAAD,QAAA,SAAAkb,EAAAnQ,GACA,GAAAsS,IAAAtS,OAAAsS,SAAA,mBAAAvH,WAAAA,SAAAwH,KACAC,EAAAF,GAAAA,EAAAhX,MAAA,EAAAgX,EAAA7S,QAAA,MACAgT,GAAAzS,OAAAyS,SACAC,EAAA,MAAAvC,EAAA7U,MAAA,EAAA,GACAqX,GAAAH,GAAA,UAAAA,CAEA,OAAAE,GACAC,GACAF,EAAA,MAAA,QAAAtC,EACAqC,EAAAtB,QAAAmB,EAAA,QAAA,IAAAlC,EAGAA,EAAAe,QAAAmB,EAAA,gCC3BAnd,EAAAD,SAEA2d,UAAA,OACAC,UAAA,OACAC,WAAA,QACAC,WAAA,QAGAC,YAAA,QACAC,YAAA,QAGAC,aAAA,4BCXA,YAEA,IAAAra,GAAA1C,EAAA,aAaAjB,GAAAD,QAAA,SAAA6B,GAEA,QAAAqc,GAAAxK,GACA,GAAAyK,GAAAva,GAAA6R,OAAA,GAAA/B,EAGA,OAFA7R,GAAA,cAAA6R,EAAAhQ,GAAAya,GAEAA,EAAA1I,MAGA,MAAA,UAAAzP,EAAAoY,EAAAC,EAAAC,EAAAC,GACA,GACA7b,GADAgR,EAAA1N,EAAA,EAIA,IAAA0N,GAAAA,EAAAhQ,IAAAgQ,EAAAhQ,KAAA7B,EAAA6B,GAAA,CACA,IAAAwa,EAAAxK,GACA,MAWA,OARAhR,GAAAb,EAAAkU,MAAAhN,IAAA2K,EAAAhQ,IAKA7B,EAAA,iBAAA6R,EAAAhQ,GAAAgQ,GAGAhR,IAAAA,EAAA8b,UAEA5a,EAAAlB,EAAAgR,KAAAA,GAGA7R,EAAA,cAAA6R,EAAA2K,KAIA3b,GACAgB,GAAAgQ,EAAAhQ,GAGA+a,SAAA/K,EAAAhQ,GAAA7B,EAAA6B,IAAAgb,OAAAlU,QAAAkJ,EAAAhQ,IAGAgQ,SAIA9P,EAAAlB,EAAAgR,KAAAA,GAGA/H,aAAAjJ,EAAAic,YACAjc,EAAA8b,UAAA,EAGA3c,EAAAkU,MAAA/M,IAAA0K,EAAAhQ,GAAAhB,GAIAb,EAAA+c,YAAAL,GACA1c,EACAwB,GAAAqQ,EAAAhQ,IACAkS,KAAA,YAAA/T,EAAAgd,YAIAhd,EAAA,gBAAA6R,EAAAhR,4CChFA,YAOAzC,GAAAD,QAAA,SAAA6B,EAAAkJ,GACA,OACA6I,SAAA1S,EAAA,cAAAW,EAAAkJ,2CCTA,YAEA,IAAAsG,GAAAnQ,EAAA,mBACAmD,EAAAnD,EAAA,gBACA0C,EAAA1C,EAAA,cACA8R,EAAA9R,EAAA,QACA4W,EAAA5W,EAAA,eACA4d,EAAA5d,EAAA,QACAob,EAAApb,EAAA,eACA6d,EAAA7d,EAAA,iBAGA8d,EAAA,EACAC,EAAA,EACAC,EAAA,EAIAC,GACA9W,QAAA,QA4CApI,GAAAD,QAAA,SAAA2a,EAAA5P,GAiCA,QAAAqU,KACAvd,EAAA+R,WAGA,QAAAyL,GAAArZ,GACA2B,EAAAjB,KAAA4Y,EAAAtZ,IAGAoP,IAAA4J,GAAAjd,SAAAwd,IAAAA,GACA1L,IAIA,QAAAyL,GAAAtZ,GACA,MAAAA,GAAAoD,IAAAoW,GAAA9M,KAAA,KAGA,QAAA+M,KACA,MAAA7b,MAAA8b,GAAAhc,GAAA7B,EAAA6B,KAGA,QAAAic,MACA5d,SAAA6d,GAAAA,IACA5X,WAAA6L,EAAA,IAIA,QAAA2L,GAAAta,GACA,MAAA,gBAAAA,IAAAA,YAAAyE,QAGA,kBAAAzE,GACA,KAGAA,EANA8E,KAAA6V,UAAA3a,GA5DA,GA2BA4a,GA3BAlB,GAAA7T,OAAA6T,UACAW,GAAAxU,OAAAwU,YACAK,GAAA7U,OAAA6U,UAGAF,KAGA7d,EAAAmR,EAAA,IAAAjI,OAAAV,QAGA3G,EAAA7B,EAAA6B,IAAAqH,OAAArH,IAAAob,IAGAD,EAAAhd,EAAAgd,YACA3W,QAAAmJ,EAAAnJ,QACAgK,eAAAb,EAAAa,eACAxO,GAAAA,EACAqc,MAAA,aAAAZ,EAAA9W,SAIA0N,EAAAlU,EAAAkU,MAAA+B,MAGAnQ,EAAAzG,EAAA,mBAGAmS,EAAA,EACA+B,EAAA4J,EAgDAnL,EAAAhS,EAAAgS,QAAA,WAEAuB,IAAA6J,IAKA7J,EAAA6J,EACAtE,EAAA,SAAAzW,EAAA2E,EAAA+S,GACA,MAAA1X,IACAkR,EAAA4J,EACAnd,EAAA,QAAAqC,KAIAkR,EAAA8J,EAGA5C,EACAzT,EAGAyT,EAAA0D,QAAA,KAAA,WACA5K,EAAA4J,EACAnd,EAAA,kBAEAya,EAAA2D,MAAAH,IAIAxD,EAAA3U,EAAAiU,GAGA/Z,EAAAiF,eAAA,eAAA6Y,GACA9d,EAAA0B,GAAA,eAAAoc,OAGA9d,GAAA,kBAYA+T,EAAA/T,EAAA+T,KAAA,WAGA,GAAA5P,MAAAK,MAAA9E,KAAA2E,UAGAF,GAAAkB,OAAA,EAAA,EAAAuY,KACAJ,EAAArZ,GA4OA,OA/KAnE,GAAA+R,SAAA,SAAAF,EAAA8C,GAEA,QAAA0J,MACA1J,GAAAZ,GAAA,YAAAiJ,GACAhd,EAAA,iBAAAgd,GAgBA,MAZAzJ,KAAA8J,IAEArd,EAAAiF,eAAA,YAAAsY,GACAvd,EAAA0B,GAAA,YAAA6b,IAGAzT,aAAA0H,GAGAzP,EAAAib,EAAAnL,GAAAhQ,GAAA7B,EAAA6B,KAGA2P,EAAArL,WAAAkY,GAAAnV,OAAAoV,eAAA,KAwBAte,EAAAwS,SAAA,SAAA8C,GACA,GAAAzU,GAAAqT,EAAAhN,IAAAoO,EAEA,OAAAzU,IAAA,IAAAA,EAAA+b,SAWA5c,EAAA+U,MAAA/U,EAAA8U,MAAA,WAEAf,EAAA,UAAAlS,GAAAA,IAGA7B,EAAAiF,eAAA,eAAA6Y,GACA9d,EAAAiF,eAAA,YAAAsY,GAGAzX,EAAAuM,MAGAvM,EAAAoX,IAGA3J,EAAA4J,GAaAnd,EAAAsd,SAAA,SAAAzL,GAGA,MAFAvP,SAAAic,KAAA,6CAEA,IAAAla,UAAA1E,OACAoC,KAAA8b,QAGAA,EAAA9b,KAAA8P,KAiCA7R,EAAAwB,GAAA,SAAA8T,GAEA,GAAAX,GAAA,WAEA,GACAxQ,GADAtD,EAAAb,EAAAkU,MAAAhN,IAAAoO,EAGA,KAAAzU,EACA,KAAA,IAAAtB,OAAA,iBAAA+V,EAIAzU,GAAA8b,WAIAxY,GACA,MACAmR,GACAvM,UAAAvE,MAAA9E,KAAA2E,YAGAF,EAAAkB,OAAA,EAAA,EAAAuY,KACAJ,EAAArZ,IAGA,QACA4N,SAAA,SAAAF,GACA,MAAA7R,GAAA+R,SAAAF,EAAA8C,IAGAZ,KAAAY,IAKAzL,EAAA1G,KAAA0G,EAAA7J,EAAA,eAGAW,EAAA+c,UAAA7c,SAAA6c,GAAAA,EAGA/c,EAAAgG,QAAAiY,EAAA5e,EAAA,eAAAW,EAAAkJ,IAGAhJ,SAAAwd,GAAAA,IACA1L,IAGAhS,oLCtaA,SAAAwe,GACA,YACA,IAAA1H,GAAA,OACA2H,EAAA,EACAC,EAAA,EACAC,EAAA,GACAC,EAAApK,KAAAC,IAAAkK,EAAAD,GAEAG,EAAA,SAAAC,EAAAC,GACA,GAAA9f,GAAA,YAAA6f,CACA,OAAA7f,GAAA+f,OAAA/f,EAAAU,OAAAof,IAGAE,EAAA,WACA,MAAAJ,IAAArK,KAAAE,SACAkK,GAAA,GACAtS,SAAAqS,GAAAD,IAGAQ,EAAA,WAGA,MAFAT,GAAAG,EAAAH,EAAAA,EAAA,EACAA,IACAA,EAAA,GAGAU,EAAA,WAGA,GAQAC,GARAC,EAAA,IAKAC,GAAA,GAAA/V,OAAAgW,UAAAjT,SAAAqS,GAQAa,EAAAL,EAAAK,cAGA9K,EAAAuK,IAAAA,GAIA,OAFAG,GAAAP,EAAAK,IAAA5S,SAAAqS,GAAAD,GAEAW,EAAAC,EAAAF,EAAAI,EAAA9K,EAGAyK,GAAAM,KAAA,WACA,GACAL,GADAM,GAAA,GAAAnW,OAAAgW,UAAAjT,SAAA,IAEAqT,EAAAR,EAAAK,cAAAhb,MAAA,EAAA,GACA2a,EAAAK,cAAAhb,MAAA,IACAkQ,EAAAuK,IAAAza,MAAA,GAIA,OAFA4a,GAAAF,IAAA5S,SAAA,IAAA9H,MAAA,IAEAkb,EAAAlb,MAAA,IACA4a,EAAAO,EAAAjL,GAGAyK,EAAAS,YAAA,WAEA,GAAAC,GAAA,WACA,GAAAvgB,GACAwgB,EAAA,CAEA,KAAAxgB,IAAAd,QACAshB,GAGA,OAAAA,KAIA,OADAX,GAAAS,YAAA,WAAA,MAAAC,IACAA,GAGAV,EAAAK,YAAA,WACA,MAAAX,IAAApP,UAAAsQ,UAAApgB,OACA8P,UAAAgB,UAAA9Q,QAAA2M,SAAA,IACA6S,EAAAS,cAAAtT,SAAA,IAAA,IAIAkS,EAAAwB,SACAxB,EAAAwB,SAAAlJ,EAAAqI,GACA,mBAAA/gB,GACAA,EAAAD,QAAAghB,EAEAX,EAAA1H,GAAAqI,GAGAxgB,KAAAshB,WAAAthB,6BC7GA,GAAA8b,GAAApb,EAAA,cAEAjB,GAAAD,QAAAsc,EAAAvC,OAAA,SAAA2C,GAGA,QAAAuD,KAEA,IADA,GAAA3e,GACAygB,EAAAvgB,UAAAF,EAAAyb,EAAAvb,SAAAkZ,IAAA,CACA,GAAAhH,GAAAqJ,EAAA5C,QACAM,EAAAuH,EAAA7H,OACA4H,GAAA5H,QAAA7Y,EAAA,KAAAoZ,EAAAhH,GACA+G,GAAAA,EAAAC,KAAA,EAAA,KAAAA,IAIA,QAAAjB,GAAAvF,EAAAuG,GACAC,EAAAA,GAAAxG,EACA6N,EAAArb,KAAA+T,GACAwF,IACAvF,GACAgC,GAAAA,EAAAhC,KAAA,EAAA,KAAAA,GAjBA,GAAAA,GAAAqC,KAAAiF,KAAAD,IAqCA,OAjBAtI,GAAA/S,KAAA,SAAAgN,EAAA+G,GACA,MAAAC,GACAD,GAAAA,EAAAC,KAAA,EAAA,KAAAA,IACAqC,EAAArW,KAAAgN,GAAAsO,EAAAtb,KAAA+T,OACAwF,OAGAxG,EAAAvF,IAAA,SAAAA,EAAAuG,GACA,kBAAAvG,KACAuG,EAAAvG,EAAAA,GAAA,GACAwG,EAAAA,GAAAxG,IAAA,EACAuG,GAAAuH,EAAAtb,KAAA+T,GACAwF,IACAvF,GACAgC,GAAAA,EAAAhC,KAAA,EAAA,KAAAA,IAGAjB,6CCvCA,GAAAwI,GAAA/gB,EAAA,aACAghB,EAAAhhB,EAAA,WACAihB,EAAAjhB,EAAA,cACAF,EAAAE,EAAA,YAEA,KAAA,GAAAkhB,KAAAH,GACAjiB,EAAAoiB,GAAAphB,EAAA+Y,OAAAkI,EAAAG,GAEA,KAAA,GAAAA,KAAAD,GACAniB,EAAAoiB,GAAAphB,EAAA8Y,QAAAqI,EAAAC,GAEA,KAAA,GAAAA,KAAAF,GACAliB,EAAAoiB,GAAAphB,EAAAoZ,KAAA8H,EAAAE,GAEA,IAAAC,GAAAnhB,EAAA,WAAAlB,EAEA,KAAA,GAAAoiB,KAAAC,GACAriB,EAAAoiB,GAAAC,EAAAD,EAEApiB,GAAAsiB,OACAtiB,EAAA8Z,QAAA9Z,EAAAuiB,SAAAvhB,EAAA8Y,QACA9Z,EAAA+Z,OAAA/Z,EAAAwiB,eAAAxhB,EAAA+Y,OACA/Z,EAAAoa,KAAApa,EAAAyiB,aAAAzhB,EAAAoZ,mGCvBA,GAAApZ,GAAAE,EAAA,aACA4H,EAAA9H,EAAA8H,KACApF,EAAA1C,EAAA0C,GACA4W,EAAAtZ,EAAAsZ,SAEAra,GAAAD,QAAA,SAAAsc,GAEA,CAAA,GAAAtc,MACAigB,EAAA3D,EAAA2D,MAyBAyC,GAtBA1iB,EAAA2iB,KAAA,SAAA9Y,EAAA4Q,GACA,MAAAH,GAAA,SAAAG,GACA,GAAAC,IAAA,CAMA,OALAD,GAGA5Q,EAAAf,EAAAe,IAAAnG,GAFA+W,EAAA5Q,EAAAA,EAAAnG,GAIAuc,EAAA,SAAAvM,GACA,MAAA7J,GAAA6J,IACAgH,GAAA,EACAD,EAAA,KAAA/G,IACA,GAHA,QAKA,SAAAxP,GACAwW,GACAD,EAAAvW,KAAA,EAAA,KAAAA,EAAA,SAGAuW,IAGAza,EAAA0iB,OACA,SAAAA,EAAAE,EAAAnI,GAEA,MAAAH,GAAA,SAAAG,GACA,MAAAwF,GAAA,SAAAvM,GACAkP,EAAAF,EAAAE,EAAAlP,IACA,SAAAxP,GACAuW,EAAAvW,EAAA0e,MAGAnI,IAGAza,GAAA6iB,QAAA7iB,EAAA8iB,WACA,SAAArI,GACA,MAAAiI,GAAA,SAAAK,EAAAnJ;A3ChDA,A2CkDA,MADAmJ,GAAArc,KAAAkT,GACAmJ,MACAtI,IAGA,MAAAza,2CCtDA,CAAA,GAAAigB,GAAAjgB,EAAAigB,MAAA,SAAAxG,EAAA9M,EAAAkC,IAEA,QAAA2N,KAEA,IADA,GAAAwG,IAAA,EAAAC,GAAA,EACAD,GAgBA,GAfAC,GAAA,EACAxJ,EAAA,KAAA,SAAAvF,EAAAR,GACAuP,GAAA,EACA/O,GACA8O,GAAA,EACAnU,GAAAA,EAAAqF,KAAA,EAAA,KAAAA,IAEAvH,IAAA,IAAAA,EAAA+G,IACAsP,GAAA,EACAvJ,GAAA,EAAA5K,GAAA,eAEAmU,GACAxG,OAGAyG,EAEA,YADAD,GAAA,MAOAhjB,GAAAkjB,MAAA,SAAAzJ,EAAA5K,GACA,MAAAoR,GAAAxG,EAAA,KAAA5K,IAGA7O,EAAAyK,IAAA,SAAAgP,EAAA5K,GACA,MAAAoR,GAAAxG,EAAA,SAAA/F,GACAvP,QAAAsG,IAAAiJ,IACA7E,8BClCA,CAAA,GAKAhI,IALA7G,EAAA0E,KACA,SAAAye,GACA,MAAAha,GAAA1E,OAAAC,KAAAye,KAGAnjB,EAAA6G,KACA,SAAAoC,GACA,MAAA,UAAA4T,EAAApC,GACA,GAAAoC,EAAA,MAAApC,GAAAoC,EACA,IAAA,MAAA5T,EAAA,CACA,GAAAma,GAAAna,CAAAA,GAAA,KACAwR,EAAA,KAAA2I,OAEA3I,IAAA,MAIAtR,EAAAnJ,EAAAmJ,OAAAnJ,EAAAqjB,UACA,SAAAC,GACAnd,MAAAiI,QAAAkV,KACAA,EAAA7e,OAAAC,KAAA4e,GAAAla,IAAA,SAAAgZ,GACA,MAAAkB,GAAAlB,KAEA,IAAAjhB,GAAA,CACA,OAAA,UAAA+S,EAAAuG,GACA,MAAAvG,GACAuG,GAAAA,EAAAvG,OACAuG,GAAAtZ,GAAAmiB,EAAA9hB,QAAA,KAAA8hB,EAAAniB,OAKAnB,GAAA2hB,MACA,SAAA4B,GACA,GAAApiB,GAAA,CACA,OADAoiB,GAAAA,OACA,SAAArP,EAAAuG,GACA,MAAAvG,GAAAuG,GAAAA,EAAAvG,GACA/S,EAAAoiB,EACA9I,GAAA,OACAA,GAAA,KAAAtZ,OAIAnB,EAAAwjB,SACA,SAAAC,GAEA,MADAA,GAAAA,GAAApN,KAAAE,OACA,SAAArC,EAAAuG,GACA,MAAAvG,GAAAuG,GAAAA,EAAAvG,GACAuG,EAAA,KAAAgJ,OAIAzjB,EAAAwO,MAAA,WACA,GAAAkV,GAAAC,EAAA3B,KAEAvI,EAAA,SAAAvF,EAAAuG,GACAiJ,EAIAA,EAAAxP,EAAAuG,IAHAkJ,EAAAzP,EACA8N,EAAAtb,KAAA+T,IAgBA,OAZAhB,GAAAmK,QAAA,SAAAnK,GACA,GAAAiK,EAAA,KAAA,IAAAtiB,OAAA,mBAEA,IADAsiB,EAAAjK,GACAiK,EAAA,KAAA,IAAAtiB,OAAA,0BAAAsiB,EACA,MAAA1B,EAAAxgB,QACAkiB,EAAAC,EAAA3B,EAAA7H,UAEAV,EAAAoD,MAAA,SAAA3Y,GACAuV,EAAAmK,QAAA,SAAAC,EAAApJ,GACAA,EAAAvW,IAAA,MAGAuV,GAGAzZ,EAAA8jB,MAAA,WACA,MAAA,UAAAjH,EAAApC,GACAA,GAAA,KAIAza,EAAA+jB,WACA,SAAAnP,EAAAoP,GACA,GAAAC,KAIA,OAFAA,GAAAhK,QAAApT,EAAA+N,IAEA,QAAA4H,GAAAtI,EAAAuG,GACA,MAAAwJ,GAAAziB,WAEAyiB,GAAA,GAAA/P,EAAA,SAAAA,EAAAR,GACA,MAAAQ,IAEA+P,EAAA9J,QACAqC,EAAA,KAAA/B,KAEAwJ,EAAAhK,QAAA+J,EAAAtQ,QACA+G,GAAAvG,EAAAR,MARA+G,GAAA,KAcAza,EAAAkkB,WACA,SAAAtP,EAAAoP,GACA,GAAAC,KAIA,OAFAA,GAAAvd,KAAAG,EAAA+N,IAEA,QAAA4H,GAAAtI,EAAAuG,GACA,MAAAwJ,GAAAziB,WAEAyiB,GAAA,GAAA/P,EAAA,SAAAA,EAAAR,GACA,MAAAQ,IACA+P,EAAA9J,QACAqC,EAAA,KAAA/B,KAEAwJ,EAAAvd,KAAAsd,EAAAtQ,QACA+G,GAAAvG,EAAAR,MAPA+G,GAAA,KAeAza,EAAAmkB,UACA,SAAAvP,EAAAoP,GACA,GAAAC,MACAG,IAGA,OAFAH,GAAAvd,KAAAG,EAAA+N,IAEA,QAAA4H,GAAAtI,EAAAuG,GACAwJ,EAAA,GAAA/P,EAAA,SAAAA,EAAAR,GACA,MAAAQ,IACA+P,EAAA9J,QACAiK,EAAA5iB,OAEAiZ,EAAA,KAAA2J,EAAAjK,SADAM,GAAA,KAGAwJ,EAAAhK,QAAA+J,EAAAtQ,IACA0Q,EAAAnK,QAAAvG,OACA8I,GAAA,KAAA/B,+CCjJA,CAAA,GAAAzZ,GAAAE,EAAA,aACA+gB,EAAA/gB,EAAA,aACAghB,EAAAhhB,EAAA,WAEA4H,EAAA9H,EAAA8H,KACApF,EAAA1C,EAAA0C,GACAmW,EAAA7Y,EAAA6Y,OAwEA9M,GAtEA/M,EAAAoJ,IACA,SAAAqQ,EAAArQ,GAEA,MADAA,GAAAN,EAAAM,IAAA1F,EACA,SAAAwQ,EAAAuG,GACAhB,EAAAvF,EAAA,SAAAA,EAAAR,GACA,GAAAA,GAAAQ,EAAA,KAAA9K,EAAAsK,EACA+G,GAAAvG,EAAAR,OAKA1T,EAAAqkB,SACA,SAAA5K,EAAArQ,GACA,MAAAA,GACA,SAAA8K,EAAAuG,GACA,MAAAvG,GAAAuF,EAAAvF,EAAAuG,OACAhB,GAAA,KAAA,SAAAvF,EAAAR,GACA,MAAAQ,GAAAuG,EAAAvG,EAAAR,OACAtK,GAAAsK,EAAA+G,MALAhB,GAUAzZ,EAAAskB,QACA,SAAA7K,EAAArQ,EAAAmb,GAIA,QAAAtE,KACA,GAAAuE,EAAA,CACA,GAAA/J,GAAA+J,CAEA,OADAA,GAAA,KACA7c,EAAAnG,OACAiZ,EAAA,KAAA9S,EAAAwS,SACAO,IAAA9Z,EACA6Z,EAAAC,QACA8J,EAAA/J,IAGA,QAAA6B,KACA7C,EAAA,KAAA,SAAAvF,EAAAR,GACA,MAAAQ,IACAwG,EAAAxG,EACA+L,MAEArf,IACAwI,EAAAsK,EAAA,SAAAxP,EAAAwP,GACA9S,IAEA+G,EAAAjB,KAAAgN,GACAuM,WAGAsE,EAAA3jB,IAAA8Z,GACA4B,QA7BA,IAAAlT,EAAA,MAAAqQ,EACA,IAAA+K,GAAA9J,GAAA,EAAA/S,KAgCA/G,EAAA,CACA,OAAA,UAAAsT,EAAAuG,GACA,MAAAvG,GAAAuF,EAAAvF,EAAAuG,IAEA+J,EAAA/J,OACA9S,EAAAnG,QAAAkZ,GACA4B,IAAA2D,KACA3D,QAKAtc,EAAA+M,OACA,SAAA0M,EAAA5P,GAGA,MADAA,GAAAgQ,EAAAhQ,GACA,QAAA2S,GAAAtI,EAAAuG,GACAhB,EAAAvF,EAAA,SAAAA,EAAAR,GACA,MAAAQ,IAAArK,EAAA6J,OAEA+G,GAAAvG,EAAAR,GADA8I,EAAAtI,EAAAuG,QA4DAgK,GAtDAzkB,EAAA0kB,UACA,SAAAjL,EAAA5P,GAEA,MADAA,GAAAgQ,EAAAhQ,GACAkD,EAAA0M,EAAA,SAAA/Y,GACA,OAAAmJ,EAAAnJ,MAIAV,EAAAggB,QACA,SAAAvG,EAAA9M,EAAAuW,GAEA,QAAArc,GAAAgW,IACA5b,GAAAiiB,IACAjiB,GAAA,EACAiiB,EAAArG,KAAA,EAAA,KAAAA,IAJA,GAAA5b,IAAA,CAOA,OAAA,UAAAiT,EAAAuG,GAEA,MADAvG,IAAArN,EAAAqN,GACAuF,EAAAvF,EAAA,SAAAA,EAAAR,GACAQ,EACArN,EAAAqN,GADAvH,GAAAA,EAAA+G,GAEA+G,EAAAvG,EAAAR,OAKA1T,EAAA2kB,KACA,SAAAlL,EAAA5P,GACA,GAAA6Q,IAAA,CACA,IAAA,gBAAA7Q,GAAA,CACA,GAAAjJ,GAAAiJ,CAAAA,GAAA,WACA,MAAAjJ,MAIA,MAAA,UAAAsT,EAAAuG,GACA,MAAAC,GAAAD,EAAAC,IACAA,EAAAxG,GAAAuF,EAAAiB,EAAAD,OAEAhB,GAAA,KAAA,SAAAvF,EAAAR,GACA,OAAAgH,EAAAA,GAAAxG,GAAAuG,EAAAC,QACA7Q,EAAA6J,GAOA+G,EAAA,KAAA/G,IANAgH,GAAA,EACAjB,GAAA,EAAA,SAAAvF,EAAAR,GACA+G,EAAAC,EAAAhH,WASA1T,EAAAykB,OAAA,SAAAhL,EAAAmL,EAAAC,GACAD,EAAA9b,EAAA8b,IAAAlhB,CACA,IAAAohB,KACA,OAAA/X,GAAA0M,EAAA,SAAA/F,GACA,GAAAtM,GAAAwd,EAAAlR,EACA,OAAAoR,GAAA1d,KAAAyd,GACAC,EAAA1d,IAAA,GACAyd,OAuGA/c,GAnGA9H,EAAA+kB,UAAA,SAAAtL,EAAAmL,GACA,MAAAH,GAAAhL,EAAAmL,GAAA,IAGA5kB,EAAAglB,MACA,SAAAvL,EAAAmH,GACA,GAAAlG,EAAAkG,GAAAA,GAAA,CACA,IAAAjZ,KAEA,OAAA,UAAAuM,EAAAuG,GAEA,MAAAvG,GAAAuF,EAAAiB,EAAAxG,EAAAuG,GAEAC,EAAAD,EAAAC,OAEAjB,GAAA,KAAA,QAAA+C,GAAAtI,EAAAR,GACA,GAAAgH,EAAAA,GAAAxG,EAAA,CACA,IAAAvM,EAAAnG,OACA,MAAAiZ,GAAAC,EAEA,IAAAuK,GAAAtd,CACA,OADAA,MACA8S,EAAA,KAAAwK,GAGA,GADAtd,EAAAjB,KAAAgN,GACA/L,EAAAnG,OAAAof,EACA,MAAAnH,GAAA,KAAA+C,EAEA,IAAAyI,GAAAtd,CAAAA,MACA8S,EAAA,KAAAwK,OAKAjlB,EAAAklB,QAAA,SAAAzL,GACA,GAAAiK,EACA,OAAA,UAAA7G,EAAApC,GAIA,QAAA0K,KACAzB,EAAA,KAAA,SAAAxP,EAAAR,GACAQ,EAAAkR,IACA3K,EAAA,KAAA/G,KAGA,QAAA0R,KACA3L,EAAA,KAAA,SAAAvF,EAAAvQ,GACA,GAAAuQ,EACA,MAAAuG,GAAAvG,EACA,IAAA/N,MAAAiI,QAAAzK,GACAA,EAAAse,EAAA9Y,OAAAxF,OACA,IAAA,kBAAAA,GACA,KAAA,IAAAvC,OAAA,6BAEAsiB,GAAA/f,EACAwhB,MAnBAzB,EAAAyB,IACAC,MAyBAplB,EAAAqlB,QACA,SAAA5L,EAAA6L,GAEA,MAAA,UAAAzI,EAAApC,GACA,GAAA,OAAA6K,EAAA,CACA,GAAAzI,EACA,MAAApD,GAAAoD,EAAApC,EACA,IAAA8K,GAAAD,CACAA,GAAA,KACA7K,EAAA,KAAA8K,OAEA9L,GAAAoD,EAAApC,KAUAza,EAAAwlB,QAAA,SAAA/L,EAAAiJ,EAAA+C,GACA,MAAA,UAAA9O,EAAA8D,GACA,MAAA9D,GAAA8C,EAAA9C,EAAA8D,GACAC,MAAAD,EAAAC,WAEAwH,GAAAjC,MAAA,SAAArG,GACA6L,EAAA/C,EAAA+C,EAAA7L,IACA,SAAA1V,GACAwW,MAAAxW,IAAA,EACAA,EACAuW,EAAAC,OADAD,EAAA,KAAAgL,KAGAhM,KAIA5R,EAAAC,SAEA9H,GAAA0lB,cACA,SAAAjM,EAAAiM,GAIA,QAAAC,KACA,KAAA5D,EAAAvgB,SAAAub,EAAAvb,QAAAkZ,IACAqH,EAAA5H,QAAAO,EAAAA,EAAA,KAAAqC,EAAA5C,SAGA,QAAAqC,KACA,MAAA9B,IAAAkL,GAAA7I,EAAAvb,QAAAkkB,EAAA,QAEAE,GAAA,EACAnM,EAAAiB,EAAA,SAAAxG,EAAAR,GACAkS,GAAA,EACAlL,EAAAA,GAAAxG,EACA,MAAAR,GAAAqJ,EAAArW,KAAAgN,GAEA8I,IAAAmJ,OAjBA,GAAAjL,GAAAqC,KAAAgF,KAAA6D,GAAA,CAuBA,OAtBAF,GAAAA,GAAA,GAoBA5d,EAAA0U,GAEA,SAAAtI,EAAAuG,GACAC,EAAAA,GAAAxG,EACA6N,EAAArb,KAAA+T,GAEA+B,IAAAmJ,gHCzRA,QAAA1gB,GAAA8C,GACA,MAAA,kBAAAA,GAGA,QAAA8d,GAAA9d,GACA,MAAAA,KAAA,YAAAA,EAAAnC,MAAA,IAAAmC,EAAAvG,QAVA,GAAAygB,GAAA/gB,EAAA,aACAghB,EAAAhhB,EAAA,WACAihB,EAAAjhB,EAAA,cACAF,EAAAE,EAAA,aASAlB,EAAAC,EAAAD,QAAA,QAAAsc,KAgBA,QAAAE,KACA,GAAA1b,GAAAkF,EAAAmU,OAEA,OAAA,OAAArZ,EACA0b,IAEAvX,EAAAnE,GAAAA,EAEA,SAAA2Y,GAOA,MANA3Y,GAAA8a,KAAAnC,GAMA3Y,EAAA+H,QA9BA,GAAA7C,MAAAK,MAAA9E,KAAA2E,UAEA,IAAA2f,EAAA7f,EAAA,IACA,MAAA,UAAAyT,GAEA,MADAzT,GAAAiU,QAAAR,GACA6C,EAAAlW,MAAA,KAAAJ,GAGA,IAAAyT,GAAAzT,EAAAmU,OA0BA,KAtBAlV,EAAAwU,EAAA5Q,UACA4Q,EAAAA,EAAA5Q,QAqBA7C,EAAAxE,QACAiY,EAAA+C,IAAA/C,EAEA,OAAAA,GAIA,KAAA,GAAA2I,KAAAH,GACAjiB,EAAAoiB,GAAAphB,EAAA+Y,OAAAkI,EAAAG,GAEA,KAAA,GAAAA,KAAAD,GACAniB,EAAAoiB,GAAAphB,EAAA8Y,QAAAqI,EAAAC,GAEA,KAAA,GAAAA,KAAAF,GACAliB,EAAAoiB,GAAAphB,EAAAoZ,KAAA8H,EAAAE,GAEA,IAAAC,GAAAnhB,EAAA,WAAAlB,EAEA,KAAA,GAAAoiB,KAAAC,GACAriB,EAAAoiB,GAAAC,EAAAD,EAEApiB,GAAAsiB,OACAtiB,EAAA8Z,QAAA9Z,EAAAuiB,SAAAvhB,EAAA8Y,QACA9Z,EAAA+Z,OAAA/Z,EAAAwiB,eAAAxhB,EAAA+Y,OACA/Z,EAAAoa,KAAApa,EAAAyiB,aAAAzhB,EAAAoZ,mGCvEA,GAAApZ,GAAAE,EAAA,aACA4H,EAAA9H,EAAA8H,KACApF,EAAA1C,EAAA0C,GACA4W,EAAAtZ,EAAAsZ,SAEAra,GAAAD,QAAA,SAAAsc,GAEA,CAAA,GAAAtc,MACAigB,EAAA3D,EAAA2D,MAyBAyC,GAtBA1iB,EAAA2iB,KAAA,SAAA9Y,EAAA4Q,GACA,MAAAH,GAAA,SAAAG,GACA,GAAAC,IAAA,CAMA,OALAD,GAGA5Q,EAAAf,EAAAe,IAAAnG,GAFA+W,EAAA5Q,EAAAA,EAAAnG,GAIAuc,EAAA,SAAAvM,GACA,MAAA7J,GAAA6J,IACAgH,GAAA,EACAD,EAAA,KAAA/G,IACA,GAHA,QAKA,SAAAxP,GACAwW,GACAD,EAAAvW,KAAA,EAAA,KAAAA,EAAA,SAGAuW,IAGAza,EAAA0iB,OACA,SAAAA,EAAAE,EAAAnI,GAEA,MAAAH,GAAA,SAAAG,GACA,MAAAwF,GAAA,SAAAvM,GACAkP,EAAAF,EAAAE,EAAAlP,IACA,SAAAxP,GACAuW,EAAAvW,EAAA0e,MAGAnI,IAGAza,GAAA6iB,QAAA7iB,EAAA8iB,WACA,SAAArI,GACA,MAAAiI,GAAA,SAAAK,EAAAnJ,GAEA,MADAmJ,GAAArc,KAAAkT,GACAmJ,MACAtI,IAGAza,EAAA4K,OACA,SAAA6P,GACA,MAAAiI,GAAA,SAAAzhB,EAAA6kB,GACA,MAAA7kB,GAAA6kB,GACA,GAAArL,IAGA,MAAAza,2CC7DA,CAAA,GAAAigB,GAAAjgB,EAAAigB,MAAA,SAAAxG,EAAA9M,EAAAkC,IAEA,QAAA2N,KAEA,IADA,GAAAwG,IAAA,EAAAC,GAAA,EACAD,GAkBA,GAjBAC,GAAA,EACAxJ,EAAA,KAAA,SAAAvF,EAAAR,GAEA,GADAuP,GAAA,EACA/O,GAEA,GADA8O,GAAA,EACAnU,EAAAA,EAAAqF,KAAA,EAAA,KAAAA,OACA,IAAAA,GAAAA,KAAA,EACA,KAAAA,OAEAvH,KAAA,IAAAA,EAAA+G,IACAsP,GAAA,EACAvJ,GAAA,EAAA5K,GAAA,eAEAmU,GACAxG,OAGAyG,EAEA,YADAD,GAAA,MAOAhjB,GAAAkjB,MAAA,SAAAzJ,EAAA5K,GACA,MAAAoR,GAAAxG,EAAA,KAAA5K,IAGA7O,EAAAyK,IAAA,SAAAgP,EAAA5K,GACA,MAAAoR,GAAAxG,EAAA,SAAA/F,GACAvP,QAAAsG,IAAAiJ,IACA7E,8BCpCA,CAAA,GAKAhI,IALA7G,EAAA0E,KACA,SAAAye,GACA,MAAAha,GAAA1E,OAAAC,KAAAye,KAGAnjB,EAAA6G,KACA,SAAAoC,GACA,MAAA,UAAA4T,EAAApC,GACA,GAAAoC,EAAA,MAAApC,GAAAoC,EACA,IAAA,MAAA5T,EAAA,CACA,GAAAma,GAAAna,CAAAA,GAAA,KACAwR,EAAA,KAAA2I,OAEA3I,IAAA,MAIAtR,EAAAnJ,EAAAmJ,OAAAnJ,EAAAqjB,UACA,SAAAC,GACAnd,MAAAiI,QAAAkV,KACAA,EAAA7e,OAAAC,KAAA4e,GAAAla,IAAA,SAAAgZ,GACA,MAAAkB,GAAAlB,KAEA,IAAAjhB,GAAA,CACA,OAAA,UAAA+S,EAAAuG,GACA,MAAAvG,GACAuG,GAAAA,EAAAvG,OACAuG,GAAAtZ,GAAAmiB,EAAA9hB,QAAA,KAAA8hB,EAAAniB,OAKAnB,GAAA2hB,MACA,SAAA4B,GACA,GAAApiB,GAAA,CACA,OADAoiB,GAAAA,OACA,SAAArP,EAAAuG,GACA,MAAAvG,GAAAuG,GAAAA,EAAAvG,GACA/S,EAAAoiB,EACA9I,GAAA,OACAA,GAAA,KAAAtZ,OAIAnB,EAAAwjB,SACA,SAAAC,GAEA,MADAA,GAAAA,GAAApN,KAAAE,OACA,SAAArC,EAAAuG,GACA,MAAAvG,GAAAuG,GAAAA,EAAAvG,GACAuG,EAAA,KAAAgJ,OAIAzjB,EAAAwO,MAAA,WACA,GAAAkV,GAAAC,EAAA3B,KAEAvI,EAAA,SAAAvF,EAAAuG,GACAiJ,EAIAA,EAAAxP,EAAAuG,IAHAkJ,EAAAzP,EACA8N,EAAAtb,KAAA+T,IAgBA,OAZAhB,GAAAmK,QAAA,SAAAnK,GACA,GAAAiK,EAAA,KAAA,IAAAtiB,OAAA,mBAEA,IADAsiB,EAAAjK,GACAiK,EAAA,KAAA,IAAAtiB,OAAA,0BAAAsiB,EACA,MAAA1B,EAAAxgB,QACAkiB,EAAAC,EAAA3B,EAAA7H,UAEAV,EAAAoD,MAAA,SAAA3Y,GACAuV,EAAAmK,QAAA,SAAAC,EAAApJ,GACAA,EAAAvW,IAAA,MAGAuV,GAGAzZ,EAAA8jB,MAAA,WACA,MAAA,UAAAjH,EAAApC,GACAA,GAAA,KAIAza,EAAAoE,MAAA,SAAAF,GACA,MAAA,UAAA2Y,EAAApC,GACAA,EAAAvW,KAIAlE,EAAA+jB,WACA,SAAAnP,EAAAoP,GACA,GAAAC,KAIA,OAFAA,GAAAhK,QAAApT,EAAA+N,IAEA,QAAA4H,GAAAtI,EAAAuG,GACA,MAAAwJ,GAAAziB,WAEAyiB,GAAA,GAAA/P,EAAA,SAAAA,EAAAR,GACA,MAAAQ,IAEA+P,EAAA9J,QACAqC,EAAA,KAAA/B,KAEAwJ,EAAAhK,QAAA+J,EAAAtQ,QACA+G,GAAAvG,EAAAR,MARA+G,GAAA,KAcAza,EAAAkkB,WACA,SAAAtP,EAAAoP,GACA,GAAAC,KAIA,OAFAA,GAAAvd,KAAAG,EAAA+N,IAEA,QAAA4H,GAAAtI,EAAAuG,GACA,MAAAwJ,GAAAziB,WAEAyiB,GAAA,GAAA/P,EAAA,SAAAA,EAAAR,GACA,MAAAQ,IACA+P,EAAA9J,QACAqC,EAAA,KAAA/B,KAEAwJ,EAAAvd,KAAAsd,EAAAtQ,QACA+G,GAAAvG,EAAAR,MAPA+G,GAAA,KAeAza,EAAAmkB,UACA,SAAAvP,EAAAoP,GACA,GAAAC,MACAG,IAGA,OAFAH,GAAAvd,KAAAG,EAAA+N,IAEA,QAAA4H,GAAAtI,EAAAuG,GACAwJ,EAAA,GAAA/P,EAAA,SAAAA,EAAAR,GACA,MAAAQ,IACA+P,EAAA9J,QACAiK,EAAA5iB,OAEAiZ,EAAA,KAAA2J,EAAAjK,SADAM,GAAA,KAGAwJ,EAAAhK,QAAA+J,EAAAtQ,IACA0Q,EAAAnK,QAAAvG,OACA8I,GAAA,KAAA/B,+CCvJA,CAAA,GAAAzZ,GAAAE,EAAA,aACA+gB,EAAA/gB,EAAA,aACAghB,EAAAhhB,EAAA,WAEA4H,EAAA9H,EAAA8H,KACApF,EAAA1C,EAAA0C,GACAmW,EAAA7Y,EAAA6Y,OA8EA9M,GA5EA/M,EAAAoJ,IACA,SAAAqQ,EAAArQ,GAEA,MADAA,GAAAN,EAAAM,IAAA1F,EACA,SAAAmZ,EAAApC,GACAhB,EAAAoD,EAAA,SAAA3I,EAAAR,GACA,IACAA,EAAAQ,EAAA,KAAA9K,EAAAsK,GACA,MAAAxP,GACA,MAAAuV,GAAAvV,EAAA,WACA,MAAAuW,GAAAvW,KAGAuW,EAAAvG,EAAAR,OAKA1T,EAAAqkB,SACA,SAAA5K,EAAArQ,GACA,MAAAA,GACA,SAAA8K,EAAAuG,GACA,MAAAvG,GAAAuF,EAAAvF,EAAAuG,OACAhB,GAAA,KAAA,SAAAvF,EAAAR,GACA,MAAAQ,GAAAuG,EAAAvG,EAAAR,OACAtK,GAAAsK,EAAA+G,MALAhB,GAUAzZ,EAAAskB,QACA,SAAA7K,EAAArQ,EAAAmb,GAIA,QAAAtE,KACA,GAAAuE,EAAA,CACA,GAAA/J,GAAA+J,CAEA,OADAA,GAAA,KACA7c,EAAAnG,OACAiZ,EAAA,KAAA9S,EAAAwS,SACAO,IAAA9Z,EACA6Z,EAAAC,QACA8J,EAAA/J,IAGA,QAAA6B,KACA7C,EAAA,KAAA,SAAAvF,EAAAR,GACA,MAAAQ,IACAwG,EAAAxG,EACA+L,MAEArf,IACAwI,EAAAsK,EAAA,SAAAxP,EAAAwP,GACA9S,IAEA+G,EAAAjB,KAAAgN,GACAuM,WAGAsE,EAAA3jB,IAAA8Z,GACA4B,QA7BA,IAAAlT,EAAA,MAAAqQ,EACA,IAAA+K,GAAA9J,GAAA,EAAA/S,KAgCA/G,EAAA,CACA,OAAA,UAAAsT,EAAAuG,GACA,MAAAvG,GAAAuF,EAAAvF,EAAAuG,IAEA+J,EAAA/J,OACA9S,EAAAnG,QAAAkZ,GACA4B,IAAA2D,KACA3D,QAKAtc,EAAA+M,OACA,SAAA0M,EAAA5P,GAGA,MADAA,GAAAgQ,EAAAhQ,GACA,QAAA2S,GAAAtI,EAAAuG,GAEA,IADA,GAAAsL,GAAA/C,GAAA,EACAA,GACAA,GAAA,EACA+C,GAAA,EACAtM,EAAAvF,EAAA,SAAAA,EAAAR,GACA,MAAAQ,IAAArK,EAAA6J,OAEA+G,GAAAvG,EAAAR,GADAqS,EAAA/C,GAAA,EAAAxG,EAAAtI,EAAAuG,KAGAsL,GAAA,KA2DAtB,GAtDAzkB,EAAA0kB,UACA,SAAAjL,EAAA5P,GAEA,MADAA,GAAAgQ,EAAAhQ,GACAkD,EAAA0M,EAAA,SAAA/Y,GACA,OAAAmJ,EAAAnJ,MAIAV,EAAAggB,QACA,SAAAvG,EAAA9M,EAAAuW,GAEA,QAAArc,GAAAgW,IACA5b,GAAAiiB,IACAjiB,GAAA,EACAiiB,EAAArG,KAAA,EAAA,KAAAA,IAJA,GAAA5b,IAAA,CAOA,OAAA,UAAAiT,EAAAuG,GAEA,MADAvG,IAAArN,EAAAqN,GACAuF,EAAAvF,EAAA,SAAAA,EAAAR,GACAQ,EACArN,EAAAqN,GADAvH,GAAAA,EAAA+G,GAEA+G,EAAAvG,EAAAR,OAKA1T,EAAA2kB,KACA,SAAAlL,EAAA5P,GACA,GAAA6Q,IAAA,CACA,IAAA,gBAAA7Q,GAAA,CACA,GAAAjJ,GAAAiJ,CAAAA,GAAA,WACA,MAAAjJ,MAIA,MAAA,UAAAsT,EAAAuG,GACA,MAAAC,GAAAD,EAAAC,IACAA,EAAAxG,GAAAuF,EAAAiB,EAAAD,OAEAhB,GAAA,KAAA,SAAAvF,EAAAR,GACA,OAAAgH,EAAAA,GAAAxG,GAAAuG,EAAAC,QACA7Q,EAAA6J,GAOA+G,EAAA,KAAA/G,IANAgH,GAAA,EACAjB,GAAA,EAAA,SAAAvF,EAAAR,GACA+G,EAAAC,EAAAhH,WASA1T,EAAAykB,OAAA,SAAAhL,EAAAmL,EAAAC,GACAD,EAAA9b,EAAA8b,IAAAlhB,CACA,IAAAohB,KACA,OAAA/X,GAAA0M,EAAA,SAAA/F,GACA,GAAAtM,GAAAwd,EAAAlR,EACA,OAAAoR,GAAA1d,KAAAyd,GACAC,EAAA1d,IAAA,GACAyd,MAIA7kB,GAAA+kB,UAAA,SAAAtL,EAAAmL,GACA,MAAAH,GAAAhL,EAAAmL,GAAA,IAGA5kB,EAAAglB,MACA,SAAAvL,EAAAmH,GACA,GAAAlG,EAAAkG,GAAAA,GAAA,CACA,IAAAjZ,KAEA,OAAA,UAAAuM,EAAAuG,GAEA,MAAAvG,GAAAuF,EAAAiB,EAAAxG,EAAAuG,GAEAC,EAAAD,EAAAC,OAEAjB,GAAA,KAAA,QAAA+C,GAAAtI,EAAAR,GACA,GAAAgH,EAAAA,GAAAxG,EAAA,CACA,IAAAvM,EAAAnG,OACA,MAAAiZ,GAAAC,EAEA,IAAAuK,GAAAtd,CACA,OADAA,MACA8S,EAAA,KAAAwK,GAGA,GADAtd,EAAAjB,KAAAgN,GACA/L,EAAAnG,OAAAof,EACA,MAAAnH,GAAA,KAAA+C,EAEA,IAAAyI,GAAAtd,CAAAA,MACA8S,EAAA,KAAAwK,OAKAjlB,EAAAklB,QAAA,SAAAzL,GACA,GAAAiK,EACA,OAAA,UAAA7G,EAAApC,GAIA,QAAA0K,KACAzB,EAAA,KAAA,SAAAxP,EAAAR,GACAQ,EAAAkR,IACA3K,EAAA,KAAA/G,KAGA,QAAA0R,KACA3L,EAAA,KAAA,SAAAvF,EAAAvQ,GACA,GAAAuQ,EACA,MAAAuG,GAAAvG,EACA,IAAA/N,MAAAiI,QAAAzK,IAAAA,GAAA,gBAAAA,GACAA,EAAAse,EAAA9Y,OAAAxF,OACA,IAAA,kBAAAA,GACA,KAAA,IAAAvC,OAAA,6BACAsiB,GAAA/f,EACAwhB,MAlBAzB,EAAAyB,IACAC,MAwBAplB,EAAAqlB,QACA,SAAA5L,EAAA6L,GAEA,MAAA,UAAAzI,EAAApC,GACA,GAAA,OAAA6K,EAAA,CACA,GAAAzI,EACA,MAAApD,GAAAoD,EAAApC,EACA,IAAA8K,GAAAD,CACAA,GAAA,KACA7K,EAAA,KAAA8K,OAEA9L,GAAAoD,EAAApC,KAUAza,EAAAwlB,QAAA,SAAA/L,EAAAiJ,EAAA+C,GACA,MAAA,UAAA9O,EAAA8D,GACA,MAAA9D,GAAA8C,EAAA9C,EAAA8D,GACAC,MAAAD,EAAAC,WAEAwH,GAAAjC,MAAA,SAAArG,GACA6L,EAAA/C,EAAA+C,EAAA7L,IACA,SAAA1V,GACAwW,MAAAxW,IAAA,EACAA,EACAuW,EAAAC,OADAD,EAAA,KAAAgL,KAGAhM,KAIA5R,EAAAC,SAEA9H,EAAA0lB,cACA,SAAAjM,EAAAiM,GAIA,QAAAC,KACA,KAAA5D,EAAAvgB,SAAAub,EAAAvb,QAAAkZ,IACAqH,EAAA5H,QAAAO,EAAAA,EAAA,KAAAqC,EAAA5C,UAEA4C,EAAAvb,QAAAwkB,IAAAtL,EAAAsL,GAGA,QAAAxJ,KACA,MAAA9B,IAAAsL,GAAAJ,GAAA7I,EAAAvb,QAAAkkB,EAAA,QAEAE,GAAA,EACAnM,EAAAiB,GAAAsL,EAAA,SAAA9R,EAAAR,GACAkS,GAAA,EACAI,EAAAA,GAAA9R,EACA,MAAAR,GAAAqJ,EAAArW,KAAAgN,GAEA8I,IAAAmJ,OAnBA,GAAAjL,GAAAsL,EAAAjJ,KAAAgF,KAAA6D,GAAA,CAyBA,OAxBAF,GAAAA,GAAA,GAsBA7d,EAAAC,SAAA0U,GAEA,SAAAtI,EAAAuG,GACAC,EAAAA,GAAAxG,EACA6N,EAAArb,KAAA+T,GAEA+B,IAAAmJ,MAIA3lB,EAAAimB,QACA,SAAAxM,EAAAyM,GACAA,EAAAA,GAAAxiB,CACA,IAAAgX,GAAA/S,IAEA,OAAA,UAAAkV,EAAApC,GACA,MAAA9S,GAAAnG,OAAAiZ,EAAA,KAAA9S,EAAAwS,SACAO,EAAAD,EAAAC,OAEAjB,GAAAoD,EAAA,QAAAL,GAAAtI,EAAAR,GACA,GAAAQ,EAAAwG,EAAAxG,MAGA,KADA,GAAAiS,GAAAD,EAAAxS,GACAyS,GAAAA,EAAA3kB,QACAmG,EAAAjB,KAAAyf,EAAAhM,QAGAxS,GAAAnG,OAAAiZ,EAAA,KAAA9S,EAAAwS,SACAO,EAAAD,EAAAC,GACAjB,EAAA,KAAA+C,+GCjUA,YAEA,IAAA4J,GAAAllB,EAAA,gBAqBAjB,GAAAD,QAAA,SAAA6B,EAAAkJ,GAGA,QAAAsb,GAAA5T,EAAA6L,EAAA5K,GAEA,GAAA4S,GAAA,WAAA7T,EAAA,GAAApM,MAAA,GAGAL,EAAAyM,EAAApM,MAAA,GAAA+C,IAAAgd,EAEAvkB,GAAAuE,MACAvE,GACAykB,GAAA1b,OAAA5E,GAAA4E,QAAA0T,EAAA5K,KAXA,GAAAsF,GAAA9X,EAAA,cAAAW,EAAAkJ,EAeA,OAAA,UAAAwb,GACA,GAEA9T,GACA3M,EACAuY,EACAC,EALA5K,EAAA6S,EACAhU,GAAA,EAKAiU,GAAA,CAGA,KAAA9S,GAAA,WAAAA,EAAArN,MAAA,EAAA,GAAA,CAKA,GAAA3C,GAAA7B,EAAA6B,GAAA,EAiBA,IAdA,QAAAgQ,EAAArN,MAAA,EAAA,KACAkM,EAAAmB,EAAArN,MAAA,EAAA3C,EAAAlC,OAAA,KAAAkC,EACA6O,IACAE,EAAAiB,EAAArN,MAAA,EAAA3C,EAAAlC,QAAAsL,MAAA,KAAA1D,IAAAgd,GAGAI,GAAA,EAGA/T,EAAAA,EAAArJ,IAAAgd,KAKA7T,IAKA1Q,EAAA,UAAA6R,GACAjB,EAAAA,GAAAiB,EAAA5G,MAAA,KAAA1D,IAAAgd,GAGA,gBAAA3T,GAAA,IAAA,CAMA,GAJA4L,EAAA5L,EAAA,GAIA4L,GAAAA,EAAA3a,KAAA7B,EAAA6B,GACA,MAAAS,SAAAic,KAAA,oCAIA9B,GAAAzc,EAAAkU,MAAAhN,IAAAsV,GAAAA,EAAA3a,KAAA2a,EAGA,MAAA5L,EAAA,GAAA1I,OAAA,IAEAjE,EAAAkT,EAAAvG,EAAA,GAAApM,MAAA,IAEA,kBAAAP,GACAA,EACA2M,EAAApM,MAAA,GACAoM,EAAA,GAAApM,MAAA,GACAgY,EACAC,EACAkI,GAIAH,EAAA5T,EAAA6L,EAAAiI,IAKA1kB,EACA,OACA4Q,EAAApM,MAAA,EAAA,GAAAuE,OAAA6H,EAAApM,MAAA,IACAgY,EACAC,EACAkI,+DCtHA,YAEA,IAAAtT,GAAAhS,EAAA,cAAA,eAEAulB,GACA,UAGAC,GACA,YACA,cACA,eACA,oBACA,eACA,wBAGAC,GACA,2BAcA1mB,GAAAD,QAAA,SAAA8T,GAKA,QAAA8S,GAAAC,GACAA,EAAA9iB,QAAA,SAAAuiB,GACAxS,EAAA,KAAAwS,KACAxS,EAAA,KAAAwS,GAAA,QANA,GAAAQ,GAAAhT,EAAAiT,mBACAC,EAAAP,EAAAjc,QAAAsc,GAAA,CAWAF,GAAAF,GAEAM,IACA9T,EAAA,+CAAAY,EAAAiT,oBACAjT,EAAA6C,SAMA3O,WAAA,WACA4e,EAAAD,IACA,2CC1DA,YAiDA,SAAAhS,GAAAb,EAAAqD,EAAAtV,EAAAkJ,GA+BA,QAAA6b,KACA1T,EAAA,cAAArR,EAAA6B,GAAA,SAAAyT,GAIA8P,EAAA5N,OAGAxB,EAAA/D,GAGAjS,EAAAiF,eAAA,MAAAogB,GACArlB,EAAAiF,eAAA,YAAAqgB,GACAtlB,EAAAiF,eAAA,YAAAsgB,GAGAvlB,EAAAiF,eAAA,cAAAogB,GACArlB,EAAAiF,eAAA,oBAAAqgB,GACAtlB,EAAAiF,eAAA,oBAAAsgB,GAGA,QAAAD,GAAAzT,GACA2T,EAAAC,gBAAA5T,GAGA,QAAAwT,GAAAK,EAAAvW,GACArL,EAAA,aAAA4hB,GAGAvW,GAAAA,EAAAtN,KAAAyT,GAIAkQ,EAAAG,qBAAAD,GAGA,QAAAE,KACAvU,EAAA,2CAAAY,EAAAiT,oBACAH,IAGA,QAAAjH,KACAzM,EAAA,wDAGAwU,EAAA1f,WAAA,WACAkL,EAAA,wDACA2E,EAAA/D,IACA6T,GAEAV,EAAA1jB,GAAA,cAAAqkB,GAGA,QAAAA,KAKA,MAJA1U,GAAA,gCAAAY,EAAAiT,oBAIAc,EAAArd,QAAAsJ,EAAAiT,qBAAA,EAAA,QAIAe,IAGAC,EAAAvd,QAAAsJ,EAAAiT,qBAAA,EACAE,EAAA,cAGAA,GAAApgB,KAAA,aAAA8Y,IAGA,QAAAqI,GAAAvT,GACA,GAAAf,GAAAe,EAAAwT,WAAAC,EAAAzT,EAAAwT,UAEAxT,GAAAwT,WACAH,IACAniB,EAAA,YAAA+N,GACA7R,EAAAwB,GAAA8T,GAAAvB,KAAA,aAAAlC,GACAyU,GAAA,GAEAA,IACAA,GAAA,EACAxiB,EAAA,sBACA9D,EAAAwB,GAAA8T,GAAAvB,KAAA,wBAIA,QAAAwR,GAAApW,GACAA,EAAAtN,KAAAyT,IACAxR,EAAA,oBAAAqL,EAAAtN,IACA0kB,KAIA,QAAAN,KACAb,EAAA1e,IAAA,cAAAqf,GAGA1U,EAAA,kCAAAY,EAAAiT,oBACApb,aAAA+b,GAlIA,GAYAA,GAZAW,GAAAtd,OAAAsd,YAAA,MACAnV,EAAAhS,EAAA,cAAAmnB,EAAA,WAGApB,EAAAlT,EAAAD,EAAAqD,EAAAtV,GAAAkJ,OAAAV,QACA1E,EAAAqN,EAAA,GAAAiU,GACAlQ,GAAAhM,OAAAgM,SACAoR,GAAA,EAIAR,GAAA5c,OAAA4c,mBAAA,IAIAtT,EAAAxS,EAAAwS,SAAA8C,GAGAkQ,EAAA1f,EAAAmM,EAAA/I,GAEAud,EAAAC,EAAA,WACA,MAAAlU,OAIAgT,GAAAvS,cAHAjT,EAAAwB,GAAA8T,GAAAvB,KAAA,eAIA,KAAArK,SAAA,IAEA6c,EAAAG,EAAAlB,EAAAvS,YAAA,KAAAvJ,SAAA,GA6IA,OAnCAwL,KACAjD,EAAA0U,oBAAA,WACA7iB,EAAA,yBACA2iB,MAIAxU,EAAA2U,eAAAT,EAGAX,EAAA9jB,GAAA,YAAA,SAAAmlB,GACA7mB,EAAAwB,GAAA8T,GAAAvB,KAAA,OAAA8S,KAIA7mB,EAAA0B,GAAA,MAAA2jB,GACArlB,EAAA0B,GAAA,YAAA4jB,GAGAtlB,EAAA0B,GAAA,cAAA2jB,GACArlB,EAAA0B,GAAA,oBAAA4jB,GAGA9S,IACAxS,EAAA0B,GAAA,YAAA6jB,GACAvlB,EAAA0B,GAAA,oBAAA6jB,IAIAH,EAAApgB,KAAA,SAAA4gB,GACAR,EAAApgB,KAAA,eAAA8Y,GAGAsH,EAAAnS,YAAAwT,EAEArB,EAzNA,GAAAjU,GAAA9R,EAAA,QACAyG,EAAAzG,EAAA,iBACA2W,EAAA3W,EAAA,aACA6S,EAAA7S,EAAA,aACAqnB,EAAArnB,EAAA,gBACAynB,EAAAznB,EAAA,eACAgnB,EAAAS,EAAA,YAAA,SAAA,iBACAZ,GAAA,SAAA,UACAF,GAAA,WAoNA5nB,GAAAD,QAAA2U,mIC9NA,YAQA1U,GAAAD,QAAAkB,EAAA,gECRA,YAEA,IAAAgS,GAAAhS,EAAA,cAAA,cACAmQ,EAAAnQ,EAAA,YACAmD,EAAAnD,EAAA,gBAEA0nB,GACAxU,QACAyU,KAAA,SAAAvI,GACAjP,EAAAW,MACAsO,EAAAwI,UAAAxI,EAAAwI,cAAAle,QAAAme,sBAAA,OAiCA/oB,GAAA6C,OAAA,SAAAA,GACA,GAAAmmB,IAAAnmB,OAAAmmB,kBAEA,OAAA3kB,MAAAxB,GACAsP,WAAA,kBAAA6W,GAAAA,UAqBAhpB,EAAAipB,sBAAA,SAAAC,EAAAxnB,GACA,GAEAynB,GAFAC,KACA5iB,EAAAoiB,EAAAxU,MAcA,OAVA3P,QAAAC,KAAAwkB,OAAAnlB,QAAA,SAAAqD,GACAZ,EAAAY,IACAZ,EAAAY,GAAAgiB,KAKAD,EAAA9kB,KAAA3C,EAAA0nB,GACAlW,EAAA,qCAAAiW,GAEAA,yECnFA,YAkCA,IAAAE,GAAAnoB,EAAA,gBAGAmQ,EAAArR,EAAAqR,OAAAnQ,EAAA,YACAooB,EAAApoB,EAAA,kBAGAlB,GAAAqK,OAAAnJ,EAAA,aAGA,IAAAqoB,GACAvpB,EAAAupB,kBAAAlY,EAAA,oBAGArR,GAAA2U,OAAAzT,EAAA,YAuBAlB,EAAAmU,iBAAA,SAAApJ,EAAArJ,GACA,GAAAuO,GAAAqZ,GAAAve,OAAA3I,SACAonB,GAAAze,OAAAwe,mBAAAA,EAGA1mB,EAAAwmB,EAAAxmB,OAAAkI,EAKA,OAFArJ,GAAA2nB,EAAAJ,sBAAAle,EAAArJ,GAEAuO,GAAA,kBAAAA,GAAAkE,iBACAlE,EAAAkE,iBAAAtR,EAAAnB,GAGA,GAAA8nB,GAAA3mB,EAAAnB,4GCtFA,YAoFA,SAAA+nB,GAAAC,GACA,MAAAC,GAAAD,IAAAA,EAnFA,GAAA1W,GAAA9R,EAAA,QAGAyoB,GACAC,UAAA,aAKAC,GACA,uBACA,2BAuBA5pB,GAAAD,QAAA,SAAA8T,EAAAqD,EAAAtV,EAAAioB,GAIA,QAAAC,KACA,GAAAC,GAAAP,EAAA3V,EAAAiT,mBAGAhT,GAAA,cAAAD,EAAAkW,GAGAN,IAAAM,IACAjW,EAAAiW,GACAN,EAAAM,GAIA,QAAAC,KACAlW,EAAA,UAjBA,GACA2V,GADA3V,EAAAf,EAAA,GAAA8W,EAmCA,OAfAhW,GAAAoW,QAAAD,EACAJ,EAAA9lB,QAAA,SAAAuiB,GACAxS,EAAA,KAAAwS,GAAAyD,IAGAhW,EAAAsF,KAAA,WACAvF,EAAAoW,QAAA,KACAL,EAAA9lB,QAAA,SAAAuiB,GACAxS,EAAA,KAAAwS,GAAA,QAIAvS,EAAAgW,WAAAA,EAGAjW,GAKA4V,EAAAD,EAAA3V,EAAAiT,oBAEAhT,GANAA,iCC1EA,GAAA1C,GAAAnQ,EAAA,mBACAooB,EAAApoB,EAAA,mBACAipB,EAAAjpB,EAAA,mBACAynB,EAAAznB,EAAA,eACAkpB,EAAAzB,EAAA,MAAA,QAGA0B,EAAAnpB,EAAA,2BAGAopB,EAAAppB,EAAA,gBACAqpB,EAAArpB,EAAA,WAEAspB,EAAA,IACAC,EAAA,IAGAC,GACA,YACA,sBACA,uBACA,eACA,eAIAC,GACAC,oBAAA,eACApD,qBAAA,gBACA1S,YAAA,QACA+V,aAAA,UAGAC,GACApX,KAAA,eAIAqX,GAAA,oBAAA,sBAiBA9qB,GAAAD,QAAA,SAAA8T,EAAA/I,GA8BA,QAAAigB,GAAApc,EAAA4N,GAIA,QAAAyO,KACAC,EAAA,qBAAAjD,GACAzL,IAGA,QAAA2O,GAAAjnB,GACAgnB,EAAA,qBAAAjD,GACAzL,EAAAtY,GAVA,GAAAwP,GAAA9E,EAAA5I,KAAA,GACAiiB,EAAAvU,GAAAA,EAAAuU,WAAAmD,EAAA1X,EAaA,OAAAuU,OAIAnU,GAAAwT,gBAAAW,EAAAgD,EAAAE,GAHA3O,IAMA,QAAA6O,KAEA,GAAA7O,IAAA7U,EAAA2jB,YAAA7b,GAAA9H,EAAA4jB,OACAhP,EAAAC,GAAAgP,EAAAhP,GACAiP,GAAA9jB,EAAA2jB,WAAAI,EAAA5X,EAMA,OAHA6X,GAAA,EAGApP,GAKA9M,EAAA9H,EAAAikB,UAGAnc,GAAA5E,GAAA4E,EAAA,SAAAvL,GACA,GAAA2nB,GAAApc,EAAAoc,MAAAC,EACAC,EAAAtc,EAAAsc,KACAC,EAAAvc,EAAA9K,IAGA,OAAAT,IACAC,QAAAC,MAAA4nB,EAAA,iBAAA9nB,GACA2nB,EAAA3nB,KAGA,kBAAA6nB,IACAA,EAAA3lB,MAAAqJ,KAAApJ,MAAA9E,KAAA2E,UAAA,QAGA8B,YAAA,WACAyH,EAAA,KACAwc,KACA,OAzBAR,GAAAQ,IA6BA,QAAAC,GAAAxD,GAEA,GAAAyD,MACA5E,EAAAmB,GAAA4B,EAAA5B,EAAAnB,KAAA6E,UAAAD,GAaA,OAVAzD,IAAAnB,IAAAmB,EAAAnB,MACApjB,QAAAkoB,KAAA,mCAAAF,GACAzD,EAAAnB,IAAAA,GAIA,kBAAA+E,KACA5D,EAAAnB,IAAA+E,EAAA5D,EAAAnB,IAAAzT,IAGA4U,EAGA,QAAA6D,KACA,MAAAxB,GAAAvgB,QAAAsJ,EAAA0Y,iBAAA,EACAtB,EAAAL,eADA,OAKA,QAAAO,GAAA1X,GACA,MAAAzD,IAAA,kBAAAA,GAAAmb,mBACAnb,EAAAmb,mBAAA1X,GAGA,GAAA+Y,GAAA/Y,GAGA,QAAAgZ,GAAAhZ,GACA,MAAAzD,IAAA,kBAAAA,GAAAyc,yBACAzc,EAAAyc,yBAAAhZ,GAGA,GAAAiZ,GAAAjZ,GAGA,QAAAkZ,KACA1B,EAAA,YAAAd,EAAA5pB,KAAAwF,KAAA,KAGA,QAAA6mB,GAAAloB,EAAAmB,EAAAiF,GACA,MAAA,YACA,GAAA/E,MAAAK,MAAA9E,KAAA2E,UAEA6E,IAAA,kBAAAA,GAAA+hB,cACA9mB,EAAAA,EAAAoD,IAAA2B,EAAA+hB,cAGAnlB,EAAAolB,KACA/mB,KAAAA,EACArB,KAAAA,EACAkG,GAAA/E,EAIAknB,QAAAtB,GAAA9gB,QAAAG,OAAAiiB,YAGAjB,MAAAhhB,OAAAghB,KACAF,MAAA9gB,OAAA8gB,OAGAI,KAIA,QAAAgB,GAAAre,EAAA4N,GAMA,QAAAqP,GAAA3nB,GACAgnB,EAAA9kB,MAAA8kB,GAAA,kBAAAtc,EAAAjK,KAAAT,GAAA0G,OAAAgE,EAAA5I,OACAwW,EAAAtY,GAGA,QAAAgpB,KACAhC,EAAA9kB,MAAA8kB,IAAA,YAAAiC,EAAA,MAAAve,EAAAjK,MAAAiG,OAAAgE,EAAA5I,OACAwW,EAAApW,MAAA,MAAA,MAAAwE,UAAAvE,MAAA9E,KAAA2E,aAZA,GAAA2E,GAAAiJ,EAAAlF,EAAAjK,MACAwoB,EAAAxC,EAAA/b,EAAAjK,QAAAiK,EAAAjK,MAAA,IAAAoN,cACAqb,GAAAF,EAAArB,GACAwB,EAAA,gBAAAze,EAAAjK,IAYA,OAAAkG,IAKAqgB,EAAA9kB,MAAA8kB,GAAA,aAAAiC,GAAAviB,OAAAgE,EAAA5I,WACA6E,GAAAzE,MACA0N,EACAlF,EAAA5I,KAAA4E,OAAAwiB,GAAAxiB,OAAAyiB,EAAAC,UAPA9Q,EAAA,GAAApb,OAAA,gBAAAwN,EAAAjK,KAAA,2BAWA,QAAA4oB,GAAA7Z,GAEA,KAAAA,GAAAA,EAAAuU,WAAAvU,EAAAuU,UAAAA,WACAvU,EAAAA,EAAAuU,SAGA,OAAAvU,GAGA,QAAA4Z,KACA,GAAAE,IACAC,oBAAA,sBACAC,oBAAA,sBACAC,WAAA,aACAC,uBAAA,0BAGAlsB,GACAmsB,qBAAA,EACAC,qBAAA,EAUA,OANArpB,QAAAC,KAAAqG,OAAAhH,QAAA,SAAAqD,GACAomB,EAAApmB,EAAA2K,iBACArQ,EAAA8rB,EAAApmB,EAAA2K,gBAAAhH,EAAA3D,OAIA2mB,UAAArsB,GAGA,QAAAssB,GAAAla,GACA,MAAAA,GAAAma,YAAAna,EAAAma,YAAAna,EAAAoa,mBAGA,QAAAC,GAAAra,GACA,MAAA,qBAAAA,EAAA0Y,eAGA,QAAAd,GAAA5X,GACA,MAAA,WAAAA,EAAA0Y,eAOA,QAAA4B,GAAAta,EAAAJ,GACA,MAAAA,GAAA2a,UACA3a,EAAA2a,QAAA,IAAAhE,EAAA3W,EAAA1N,KAAA,IAAAxE,QAGA,QAAA8sB,GAAAxa,EAAAJ,GACA,GAAA6T,GAAAgD,EAAAzW,EAAAoa,mBAAApa,EAAAoa,kBAAA3G,KACAgH,EAAAhH,EAAAiH,gBACAC,EAAA/a,EAAA1N,KAAA,IAAA0N,EAAA1N,KAAA,GAAAyoB,MAMA,OAHAA,GAAA3D,EAAA2D,IAAAA,EAGA,KAAAA,GAAAF,EAAA/jB,QAAAikB,IAAA,EAGA,QAAAC,GAAAztB,EAAA6kB,GAEA,GAAAxX,IAAArN,EAAA6kB,GACA6I,EAAArgB,EAAAlF,IAAAoiB,GACAoD,EAAAtgB,EAAAlF,IAAA,SAAAwF,EAAAyI,GACA,GAAAkF,GAAAoS,EAAAtX,GACAwX,EAAAtS,GAAAuS,EAAAtkB,QAAAoE,EAAAjK,KAEA,OAAA4X,GAAAsS,GAAA,EAAAA,EAAArE,EAAAC,GAGA,OAAAmE,GAAA,GAAAA,EAAA,GAIA,QAAApD,GAAA5c,GACA,OAAAA,EAAAoe,YAAAtK,OAAA,SAAAqM,EAAAC,GACA,MAAAD,IAAAC,EAAAlb,EAAAlF,KACA,GAGA,QAAAqd,KACAN,IACAA,EAAA3jB,WAAAqjB,EAAA,KArRA,GAWA5b,GAXA9H,EAAA,GAAAwiB,GAAAuE,GACAxD,EAAAhqB,EAAA,QAAA,IAAA6J,OAAAV,QAGAykB,GAAA/jB,OAAA+jB,YAAApE,EAGAza,EAAAqZ,GAAAve,OAAA3I,SAGAupB,EAAA,EAEAG,EAAAZ,EAAArW,KAAAqW,EAAA,QAGAoB,GAAAvhB,OAAAkkB,YAAAlkB,OAAAuhB,UAGAK,GAAA5hB,OAAA4hB,uBACAtb,EAAA,yBAEAob,GAAA1hB,OAAA0hB,iBACApb,EAAA,kBA2RA,OAxBA6Z,GAAA5D,gBAAAuF,EAAA,kBAAA7B,GACA8B,YAAAS,EACAP,QAAAgB,EAAAI,EAAAE,KAGApD,EAAAN,oBAAAiC,EAAA,sBAAAI,GACAH,YAAAZ,EACAH,KAAAa,IAGA1B,EAAA1D,qBAAAqF,EAAA,uBAAAI,GACAH,YAAAJ,EACAX,KAAAQ,IAGArB,EAAApW,YAAA+X,EAAA,cAAAI,GACAD,QAAAmB,GACApC,KAAAb,EAAAN,sBAGAM,EAAAL,aAAAgC,EAAA,eAAAI,GACAlB,KAAAb,EAAAN,sBAGAM,2KC1VA,QAAAf,GAAA+E,GACA1uB,KAAA2uB,YAAAD,GAAA/E,EAAAiF,mBACA5uB,KAAA6uB,aAfApvB,EAAAD,QAAAmqB,EA2BAA,EAAAiF,mBAAA,SAAAnuB,EAAA6kB,GACA,MAAA,gBAAA7kB,IAAA,gBAAA6kB,GACA7kB,EAAA6kB,GAEA7kB,EAAAA,EAAAkN,WACA2X,EAAAA,EAAA3X,WAEAlN,GAAA6kB,EAAA,EAEA7kB,EAAA6kB,EAAA,EAAA,KAUAqE,EAAA7kB,UAAAgmB,QAAA,WACA,MAAA,KAAA9qB,KAAAogB,QAUAuJ,EAAA7kB,UAAAimB,KAAA,WACA,GAAA/qB,KAAA8qB,UAAA,KAAA,IAAAlqB,OAAA,yBAEA,OAAAZ,MAAA6uB,UAAA,IAUAlF,EAAA7kB,UAAAsmB,IAAA,WACA,GAAA0D,GAAA9uB,KAAA+qB,OACAgE,EAAA/uB,KAAA6uB,UAAAG,MACA5O,EAAApgB,KAAAogB,MAEA,IAAA,IAAAA,EAAA,MAAA0O,EAEA9uB,MAAA6uB,UAAA,GAAAE,CAGA,KAFA,GAAAlS,GAAA,EAEAuD,EAAAvD,GAAA,CACA,GAAAoS,GAAApS,EACAqS,EAAA,EAAArS,EAAA,EACAsS,EAAA,EAAAtS,EAAA,CAUA,IARAuD,EAAA8O,GAAAlvB,KAAAovB,SAAAF,EAAAD,IAAA,IACAA,EAAAC,GAGA9O,EAAA+O,GAAAnvB,KAAAovB,SAAAD,EAAAF,IAAA,IACAA,EAAAE,GAGAF,IAAApS,EAAA,KAEA7c,MAAAqvB,MAAAJ,EAAApS,GACAA,EAAAoS,EAGA,MAAAH,IAUAnF,EAAA7kB,UAAAynB,IAAA,SAAAxgB,GAIA,IAHA,GAAAqU,GAAApgB,KAAA6uB,UAAA3oB,KAAA6F,GACA8Q,EAAAuD,EAAA,EAEAvD,EAAA,GAAA,CACA,GAAAzE,GAAAvC,KAAAyZ,OAAAzS,EAAA,GAAA,EAEA,IAAA7c,KAAAovB,SAAAvS,EAAAzE,IAAA,EAAA,KAEApY,MAAAqvB,MAAAjX,EAAAyE,GACAA,EAAAzE,EAGA,MAAAgI,IASAuJ,EAAA7kB,UAAAsb,KAAA,WACA,MAAApgB,MAAA6uB,UAAA7tB,QAQA2oB,EAAA7kB,UAAAvB,QAAA,SAAA8G,GACA,MAAArK,MAAA6uB,UAAAtrB,QAAA8G,IAYAsf,EAAA7kB,UAAAsqB,SAAA,SAAA3uB,EAAA6kB,GACA,MAAAtlB,MAAA2uB,YAAA3uB,KAAA6uB,UAAApuB,GAAAT,KAAA6uB,UAAAvJ,KAUAqE,EAAA7kB,UAAAuqB,MAAA,SAAA5uB,EAAA6kB,GACA,GAAAiK,GAAAvvB,KAAA6uB,UAAApuB,EACAT,MAAA6uB,UAAApuB,GAAAT,KAAA6uB,UAAAvJ,GACAtlB,KAAA6uB,UAAAvJ,GAAAiK,0BCzKA,YAEA,IAAAC,GAAA9uB,EAAA,aACAynB,EAAAznB,EAAA,eACAgkB,EAAAhkB,EAAA,iBACA+uB,EAAA,QACAC,EAAA,SAGAC,GAAA,IAAA,IAAA,IAAA,KACAC,EAAAlvB,EAAA,YAoBAjB,GAAAD,QAAA,SAAAunB,GACA,GAEA8I,GAFAC,KACAC,KAIAC,EAAAjJ,EAAAza,MAAAmjB,GAAAljB,OAAA0jB,SAAArnB,IAAA,SAAAsnB,GACA,MAAAA,GAAA5jB,MAAA,OAOA6jB,GAJAX,EAAAQ,EAAAzjB,OAAA,SAAA2jB,GACA,MAAAA,GAAA,IAAAP,EAAA3lB,QAAAkmB,EAAA,IAAA,IACAtnB,IAAAuf,EAAA,KAEA2H,EAAAK,SAAA,SAAA/qB,EAAAgrB,GACA,GAAAC,GAAAN,EAAAxjB,OAAA,SAAA2jB,GACA,MAAAA,GAAA,KAAA9qB,IACAgrB,GAAA,EAEA,OAAAC,IAAAA,EAAA,IA2EA,OAvEAL,GAAAzsB,QAAA,SAAA2sB,GACA,GAAAI,GAAAV,EAAAM,EAAA,GAEAI,GACAT,EAAAS,EAAAP,EAAAG,GAEAL,EACAA,EAAAA,EAAAK,GAGAH,EAAA7pB,KAAAgqB,KAUAJ,EAAAhJ,gBAAA,SAAA5T,GACA,GAAAqd,IAAArd,OAAAqd,YAAArd,OAAAsd,cACAC,EAAA,mBAAAF,IAAAJ,EAAA,IAAAI,GACA9I,GAAAvU,OAAAuU,SAGAgJ,IAAAhJ,GACAgJ,EAAAC,WAAAxqB,KAAAuhB,EAAAhM,QAAAiU,EAAA,IAAApjB,MAAA,OAUAwjB,EAAA9B,cAAA,WACA,QAAA2C,GAAAzd,GACA,MAAAA,GAAA,GAAA0d,IAAAtkB,MAAA,MAAA,GAGA,MAAAyjB,GAAAxjB,OAAA,SAAA0F,GACA,MAAA,MAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,GAAA2e,MACAhoB,IAAA+nB,IAWAb,EAAAniB,SAAA,WACA,MAAAoiB,GAAAnnB,IAAA,SAAAsnB,GACA,MAAA,kBAAAA,GAAA,GAAAW,QAAAX,EAAA,GAAAW,WAAAX,KACAhO,OAAAwC,GAAA9b,IAAA,SAAAsnB,GACA,MAAAA,GAAAhe,KAAA,OACAA,KAAA,OAWA4d,6FC5HA,YAEAtwB,GAAAwG,EAAA,SAAA+pB,EAAAG,GAYA,QAAAY,GAAAC,GAEA,MADAC,GAAAN,WAAAxqB,KAAA6qB,GACAD,EAbA,GAAAE,IACAJ,IAAAV,EAAA,GACAQ,cAEAG,QAAA,WACA,QACA,IAAAG,EAAAJ,MACAxmB,OAAA4mB,EAAAN,aAWA,OAFAX,GAAA7pB,MAAA,IAAA8qB,IAEAF,0BC4BA,QAAAG,GAAAnoB,GACA,GAAAgG,GAAAoiB,EAAArf,KAAA/I,EAEA,OAAAgG,IAAAA,EAAA,GArDA,GAAAqiB,KACA,qBAAAzwB,EAAA,6BAGAwwB,EAAA,gBAeAzxB,GAAAD,QAAA,SAAAsJ,EAAAyB,GACA,GAAA6mB,GAAAH,EAAAnoB,GACAknB,EAAAlnB,EAAAwD,MAAA8kB,GACAxF,GAAArhB,OAAAqhB,SAyBA,OAtBAoE,GAAAA,EAAAzjB,OAAA,SAAA2jB,GAEA,GAAAmB,GAAAF,EAAAjP,OAAA,SAAAqM,EAAArb,GACA,MAAA,mBAAAqb,GAAAA,EAAArb,EAAA,GAAArB,KAAAqe,KACAA,KAAAA,EAAAzU,QAAAvI,EAAA,GAAA,MACA7I,GAAA6I,EAAA,KAEA3R,QAGA+vB,EAAAD,EAAAA,EAAAhnB,GAAAgnB,EAAAnB,QASA,OANAtE,IACA0F,EAAA/tB,QAAA,SAAAG,GACAkoB,EAAA1lB,KAAAxC,KAIA,IAAA4tB,EAAAtwB,SAGAgvB,EAAA9d,KAAAkf,uDC8BA,QAAAG,GAAAC,EAAA3a,GACA,GAAAwa,GAAAI,EAAA5a,EAEA,OAAAwa,KAAAA,EAAA,GAAAhoB,KAAAmoB,IACA9e,EAAA2e,EAAA,GAAA,4BAAAG,GACA,GAAA5wB,OAAAywB,EAAA,KAFA,OAhFA,GAAA3e,GAAAhS,EAAA,cAAA,iBACAgxB,EAAA,qBACAC,EAAA,oDA+BAF,IACA,KAAA,+BAAA,eACA,MAAA,uBAAA,iBACA,aAAA,+BAAA,cACA,MAAA,4BAAA,aACAE,EAAA,6BAAA,uBACA,MAAA,0BAAA,oBACA,MAAA,4BAAA,oBACA,KAAA,mCAAA,kBAeAlyB,GAAAD,QAAA,SAAA0T,GACA,GAAAoe,MACA7J,EAAAvU,IAAAA,EAAAuU,WAAAvU,GACA0e,EAAAnK,GAAAiK,EAAA7f,KAAA4V,GACAxV,EAAA2f,GAAAnK,EAAA5hB,MAAA+rB,EAAA,GAAA5wB,QAAAsL,MAAA,KAEA,OAAAmb,GAKAmK,EAKAN,EAAAA,EAAAlnB,OAAA6H,EAAArJ,IAAA2oB,IAAAhlB,OAAA0jB,UAJA,GAAArvB,OAAA,sDALA,GAAAA,OAAA,0DCtDAnB,EAAAD,QAAA,SAAAqyB,GAGA,MAFAA,MAAAznB,OAAAynB,OAAAznB,UAAAvE,MAAA9E,KAAA2E,UAAA,IAEA,SAAA+C,GACA,MAAAopB,GAAA3P,OAAA,SAAAqM,EAAAlkB,GACA,GAAAmF,GAAAnF,EAAAkkB,EAEA,OAAAhtB,UAAAiO,EAAAA,EAAA+e,GACA9lB,GAAA,4BCjBAhJ,EAAAD,QAAA,SAAAiB,EAAA6kB,GACA,MAAA5f,WAAA1E,OAAA,EAAAP,IAAA6kB,EAAA,SAAAA,GACA,MAAA7kB,KAAA6kB,2BCOA7lB,EAAAD,QAAA,SAAAiB,EAAA6kB,GAKA,MAHA7kB,GAAAkF,MAAAiI,QAAAnN,GAAAA,GAAAA,GAGAA,EAAA2J,OAAAkb,2BCdA7lB,EAAAD,QAAA,SAAAkvB,GACA,MAAA,UAAA5lB,GAEA,IAAA,GADA8a,MACAkO,EAAA,EAAA3Q,EAAArY,EAAA9H,OAAAmgB,EAAA2Q,EAAAA,IAAA,CAEA,IAAA,GADAC,IAAA,EACAC,EAAApO,EAAA5iB,OAAAgxB,KACAD,EAAAA,GAAArD,EAAA5lB,EAAAgpB,GAAAlO,EAAAoO,GAGAD,KAIAnO,EAAAA,EAAA5iB,QAAA8H,EAAAgpB,IAGA,MAAAlO,4BCPAnkB,EAAAD,QAAAkB,EAAA,YAAAA,EAAA,mECOAjB,EAAAD,QAAA,WAGA,QAAAyyB,GAAAhgB,EAAAigB,GACA,MAAA,UAAA9Y,GACA,GAAA+Y,GAAA,EACAC,EAAAhZ,CAEA,GACAgZ,GAAAA,GAAAA,EAAAngB,EAAAkgB,YACAC,GAAAF,GAAAC,EAEA,OAAAC,IAXA,GAAAC,KAyBA,UAVAxsB,MAAA9E,KAAA2E,WAAAnC,QAAA,SAAA+uB,GACA,GAAArgB,GAAA,gBAAAqgB,IAAAA,IAAAA,GAAA,IAAAhmB,MAAA,IAEA+lB,GAAAA,EAAArxB,SACAmD,KAAA8N,EAAA,GACAA,MAAAA,EACAigB,OAAAjgB,EAAAjR,OAAA,KAIAqxB,EAAArxB,QAAA,EACAixB,EAAAI,EAAA,GAAApgB,MAAAogB,EAAA,GAAAH,QAGA,SAAA9Y,GAGA,IAAA,GAFAlG,MAEA4e,EAAA,EAAAvsB,EAAA8sB,EAAArxB,OAAAuE,EAAAusB,EAAAA,IACA5e,EAAAmf,EAAAP,GAAA3tB,MAAA8tB,GAAAI,EAAAP,GAAA7f,MAAA,IAAA,GAAAmH,EAGA,OAAAlG;AtEpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC5rBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","// a default configuration that is used by the rtc package\nmodule.exports = {\n // simple constraints for defaults\n constraints: {\n video: true,\n audio: true\n },\n\n // use the public development switchboard for signalling\n signaller: 'https://switchboard.rtc.io/',\n\n // no room is defined by default\n // rtc-quickconnect will autogenerate using a location.hash\n room: undefined,\n\n // specify ice servers or a generator function to create ice servers\n ice: [],\n\n // any data channels that we want to create for the conference\n // by default a chat channel is created, but other channels can be added also\n // additionally options can be supplied to customize the data channel config\n // see: <http://w3c.github.io/webrtc-pc/#idl-def-RTCDataChannelInit>\n channels: {},\n\n // the selector that will be used to identify the localvideo container\n localContainer: '#l-video',\n\n // the selector that will be used to identify the remotevideo container\n remoteContainer: '#r-video',\n\n // should we atempt to load any plugins?\n plugins: [],\n\n // common options overrides that are used across rtc.io packages\n options: {}\n};\n","var defaults = require('cog/defaults');\nvar extend = require('cog/extend');\nvar attach = require('rtc-attach');\nvar capture = require('rtc-capture');\nvar quickconnect = require('rtc-quickconnect');\nvar chain = require('whisk/chain');\nvar append = require('fdom/append');\nvar tweak = require('fdom/classtweak');\nvar qsa = require('fdom/qsa');\nvar kgo = require('kgo');\n\nmodule.exports = function(config) {\n var conference;\n\n // extend our configuration with the defaults\n config = defaults({}, config, require('./defaultconfig.js'));\n\n // remap our options based on top level settings\n config.options = extend({\n room: config.room,\n ice: config.ice,\n plugins: config.plugins,\n expectedLocalStreams: config.constraints ? 1 : 0\n }, config.options);\n\n // create our conference instance\n conference = quickconnect(config.signaller, config.options);\n\n conference\n .on('call:ended', removeRemoteVideos)\n .on('stream:added', remoteVideo(conference, config));\n\n Object.keys(config.channels || {}).forEach(function(name) {\n var channelConfig = config.channels[name];\n\n conference.createDataChannel(name, channelConfig === true ? null : channelConfig);\n });\n\n // if we have constraints, then capture video\n if (config.constraints) {\n localVideo(conference, config);\n }\n\n return conference;\n};\n\nfunction flagOwnership(peerId) {\n return function(el) {\n el.dataset.peer = peerId;\n };\n}\n\nfunction localVideo(qc, config) {\n // use kgo to help with flow control\n kgo(config)\n ('capture', [ 'constraints', 'options' ], capture)\n ('attach', [ 'capture', 'options' ], attach.local)\n ('render-local', [ 'attach' ], chain([\n tweak('+rtc'),\n tweak('+localvideo'),\n append.to((config || {}).localContainer || '#l-video')\n ]))\n ('start-conference', [ 'capture' ], qc.addStream)\n .on('error', reportError(qc, config));\n}\n\nfunction remoteVideo(qc, config) {\n return function(id, stream) {\n kgo(extend({ stream: stream }, config))\n ('attach', [ 'stream', 'options' ], attach)\n ('render-remote', [ 'attach' ], chain([\n tweak('+rtc'),\n tweak('+remotevideo'),\n flagOwnership(id),\n append.to((config || {}).remoteContainer || '#r-video')\n ]))\n .on('error', reportError(qc, config));\n };\n}\n\nfunction removeRemoteVideos(id) {\n qsa('[data-peer=\"' + id + '\"]').forEach(function(el) {\n el.parentNode.removeChild(el);\n });\n}\n\nfunction reportError(qc, config) {\n return function(err) {\n console.error(err);\n };\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n }\n throw TypeError('Uncaught, unspecified \"error\" event.');\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n len = arguments.length;\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n len = arguments.length;\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n var m;\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n var ret;\n if (!emitter._events || !emitter._events[type])\n ret = 0;\n else if (isFunction(emitter._events[type]))\n ret = 1;\n else\n ret = emitter._events[type].length;\n return ret;\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n draining = true;\n var currentQueue;\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n var i = -1;\n while (++i < len) {\n currentQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\nprocess.nextTick = function (fun) {\n queue.push(fun);\n if (!draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\n// TODO(shtylman)\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/* jshint node: true */\n'use strict';\n\n/**\n## cog/defaults\n\n```js\nvar defaults = require('cog/defaults');\n```\n\n### defaults(target, *)\n\nShallow copy object properties from the supplied source objects (*) into\nthe target object, returning the target object once completed. Do not,\nhowever, overwrite existing keys with new values:\n\n```js\ndefaults({ a: 1, b: 2 }, { c: 3 }, { d: 4 }, { b: 5 }));\n```\n\nSee an example on [requirebin](http://requirebin.com/?gist=6079475).\n**/\nmodule.exports = function(target) {\n // ensure we have a target\n target = target || {};\n\n // iterate through the sources and copy to the target\n [].slice.call(arguments, 1).forEach(function(source) {\n if (! source) {\n return;\n }\n\n for (var prop in source) {\n if (target[prop] === void 0) {\n target[prop] = source[prop];\n }\n }\n });\n\n return target;\n};","/* jshint node: true */\n'use strict';\n\n/**\n## cog/extend\n\n```js\nvar extend = require('cog/extend');\n```\n\n### extend(target, *)\n\nShallow copy object properties from the supplied source objects (*) into\nthe target object, returning the target object once completed:\n\n```js\nextend({ a: 1, b: 2 }, { c: 3 }, { d: 4 }, { b: 5 }));\n```\n\nSee an example on [requirebin](http://requirebin.com/?gist=6079475).\n**/\nmodule.exports = function(target) {\n [].slice.call(arguments, 1).forEach(function(source) {\n if (! source) {\n return;\n }\n\n for (var prop in source) {\n target[prop] = source[prop];\n }\n });\n\n return target;\n};","/**\n ## cog/getable\n\n Take an object and provide a wrapper that allows you to `get` and\n `set` values on that object.\n\n**/\nmodule.exports = function(target) {\n function get(key) {\n return target[key];\n }\n\n function set(key, value) {\n target[key] = value;\n }\n\n function remove(key) {\n return delete target[key];\n }\n\n function keys() {\n return Object.keys(target);\n };\n\n function values() {\n return Object.keys(target).map(function(key) {\n return target[key];\n });\n };\n\n if (typeof target != 'object') {\n return target;\n }\n\n return {\n get: get,\n set: set,\n remove: remove,\n delete: remove,\n keys: keys,\n values: values\n };\n};\n","/* jshint node: true */\n'use strict';\n\n/**\n ## cog/jsonparse\n\n ```js\n var jsonparse = require('cog/jsonparse');\n ```\n\n ### jsonparse(input)\n\n This function will attempt to automatically detect stringified JSON, and\n when detected will parse into JSON objects. The function looks for strings\n that look and smell like stringified JSON, and if found attempts to\n `JSON.parse` the input into a valid object.\n\n**/\nmodule.exports = function(input) {\n var isString = typeof input == 'string' || (input instanceof String);\n var reNumeric = /^\\-?\\d+\\.?\\d*$/;\n var shouldParse ;\n var firstChar;\n var lastChar;\n\n if ((! isString) || input.length < 2) {\n if (isString && reNumeric.test(input)) {\n return parseFloat(input);\n }\n\n return input;\n }\n\n // check for true or false\n if (input === 'true' || input === 'false') {\n return input === 'true';\n }\n\n // check for null\n if (input === 'null') {\n return null;\n }\n\n // get the first and last characters\n firstChar = input.charAt(0);\n lastChar = input.charAt(input.length - 1);\n\n // determine whether we should JSON.parse the input\n shouldParse =\n (firstChar == '{' && lastChar == '}') ||\n (firstChar == '[' && lastChar == ']') ||\n (firstChar == '\"' && lastChar == '\"');\n\n if (shouldParse) {\n try {\n return JSON.parse(input);\n }\n catch (e) {\n // apparently it wasn't valid json, carry on with regular processing\n }\n }\n\n\n return reNumeric.test(input) ? parseFloat(input) : input;\n};","/* jshint node: true */\n'use strict';\n\n/**\n ## cog/logger\n\n ```js\n var logger = require('cog/logger');\n ```\n\n Simple browser logging offering similar functionality to the\n [debug](https://github.com/visionmedia/debug) module.\n\n ### Usage\n\n Create your self a new logging instance and give it a name:\n\n ```js\n var debug = logger('phil');\n ```\n\n Now do some debugging:\n\n ```js\n debug('hello');\n ```\n\n At this stage, no log output will be generated because your logger is\n currently disabled. Enable it:\n\n ```js\n logger.enable('phil');\n ```\n\n Now do some more logger:\n\n ```js\n debug('Oh this is so much nicer :)');\n // --> phil: Oh this is some much nicer :)\n ```\n\n ### Reference\n**/\n\nvar active = [];\nvar unleashListeners = [];\nvar targets = [ console ];\n\n/**\n #### logger(name)\n\n Create a new logging instance.\n**/\nvar logger = module.exports = function(name) {\n // initial enabled check\n var enabled = checkActive();\n\n function checkActive() {\n return enabled = active.indexOf('*') >= 0 || active.indexOf(name) >= 0;\n }\n\n // register the check active with the listeners array\n unleashListeners[unleashListeners.length] = checkActive;\n\n // return the actual logging function\n return function() {\n var args = [].slice.call(arguments);\n\n // if we have a string message\n if (typeof args[0] == 'string' || (args[0] instanceof String)) {\n args[0] = name + ': ' + args[0];\n }\n\n // if not enabled, bail\n if (! enabled) {\n return;\n }\n\n // log\n targets.forEach(function(target) {\n target.log.apply(target, args);\n });\n };\n};\n\n/**\n #### logger.reset()\n\n Reset logging (remove the default console logger, flag all loggers as\n inactive, etc, etc.\n**/\nlogger.reset = function() {\n // reset targets and active states\n targets = [];\n active = [];\n\n return logger.enable();\n};\n\n/**\n #### logger.to(target)\n\n Add a logging target. The logger must have a `log` method attached.\n\n**/\nlogger.to = function(target) {\n targets = targets.concat(target || []);\n\n return logger;\n};\n\n/**\n #### logger.enable(names*)\n\n Enable logging via the named logging instances. To enable logging via all\n instances, you can pass a wildcard:\n\n ```js\n logger.enable('*');\n ```\n\n __TODO:__ wildcard enablers\n**/\nlogger.enable = function() {\n // update the active\n active = active.concat([].slice.call(arguments));\n\n // trigger the unleash listeners\n unleashListeners.forEach(function(listener) {\n listener();\n });\n\n return logger;\n};","/* jshint node: true */\n'use strict';\n\n/**\n ## cog/throttle\n\n ```js\n var throttle = require('cog/throttle');\n ```\n\n ### throttle(fn, delay, opts)\n\n A cherry-pickable throttle function. Used to throttle `fn` to ensure\n that it can be called at most once every `delay` milliseconds. Will\n fire first event immediately, ensuring the next event fired will occur\n at least `delay` milliseconds after the first, and so on.\n\n**/\nmodule.exports = function(fn, delay, opts) {\n var lastExec = (opts || {}).leading !== false ? 0 : Date.now();\n var trailing = (opts || {}).trailing;\n var timer;\n var queuedArgs;\n var queuedScope;\n\n // trailing defaults to true\n trailing = trailing || trailing === undefined;\n \n function invokeDefered() {\n fn.apply(queuedScope, queuedArgs || []);\n lastExec = Date.now();\n }\n\n return function() {\n var tick = Date.now();\n var elapsed = tick - lastExec;\n\n // always clear the defered timer\n clearTimeout(timer);\n\n if (elapsed < delay) {\n queuedArgs = [].slice.call(arguments, 0);\n queuedScope = this;\n\n return trailing && (timer = setTimeout(invokeDefered, delay - elapsed));\n }\n\n // call the function\n lastExec = tick;\n fn.apply(this, arguments);\n };\n};","/* jshint node: true */\n'use strict';\n\n/**\n ### append\n\n ```js\n var append = require('fdom/append');\n ```\n**/\n\nvar append = module.exports = function() {\n console.log('not yet implemented');\n\n return false;\n};\n\n/**\n #### append.to(target, => child) => child\n\n Append the specified `child` element to the `target` element using the\n familiar `appendChild` method of the target.\n\n <<< examples/append-to.js\n\n**/\n\nappend.to = function(target, child) {\n\n function append(el) {\n var t = target;\n if (typeof t == 'string' || (t instanceof String)) {\n t = document.querySelector(t);\n }\n\n if (t && typeof t.appendChild == 'function') {\n t.appendChild(el);\n return el;\n }\n }\n\n return child ? append(child) : append;\n};\n","/* jshint node: true */\n'use strict';\n\nvar reDelim = /[\\s\\,]\\s*/;\nvar opMappings = {\n '+': 'add',\n '-': 'remove',\n '~': 'toggle',\n '!': 'toggle'\n};\n\n/**\n ### classtweak(operations, => el)\n\n A functional helper for making\n [classList](http://www.w3.org/TR/domcore/#dom-element-classlist)\n modifications to elements, supporting partial application.\n\n <<< examples/classtweak.js\n\n**/\nmodule.exports = function(mods, element) {\n var rules = mods.trim().split(reDelim)\n // create the rule objects\n .map(function(rule) {\n return {\n op: opMappings[rule.charAt(0)],\n cls: rule.slice(1)\n };\n })\n // removed non mapped operation codes\n .filter(function(rule) {\n return rule.op;\n });\n\n function tweak(el) {\n if (! el.classList) {\n return el;\n }\n\n // iterate through the rules and apply the changes\n rules.forEach(function(rule) {\n el.classList[rule.op](rule.cls);\n });\n\n return el;\n }\n\n return element ? tweak(element) : tweak;\n};","/* jshint node: true */\n/* global document: false */\n'use strict';\n\nvar classSelectorRE = /^\\.([\\w\\-]+)$/;\nvar idSelectorRE = /^#([\\w\\-]+)$/;\nvar tagSelectorRE = /^[\\w\\-]+$/;\n\n/**\n ### qsa(selector, scope?)\n\n This function is used to get the results of the querySelectorAll output\n in the fastest possible way. This code is very much based on the\n implementation in\n [zepto](https://github.com/madrobby/zepto/blob/master/src/zepto.js#L104),\n but perhaps not quite as terse.\n\n <<< examples/qsa.js\n\n**/\nmodule.exports = function(selector, scope) {\n var idSearch;\n\n // default the element to the document\n scope = scope || document;\n\n // determine whether we are doing an id search or not\n idSearch = scope === document && idSelectorRE.test(selector);\n\n // perform the search\n return idSearch ?\n // we are doing an id search, return the element search in an array\n [scope.getElementById(RegExp.$1)] :\n // not an id search, call the appropriate selector\n Array.prototype.slice.call(\n classSelectorRE.test(selector) ?\n scope.getElementsByClassName(RegExp.$1) :\n tagSelectorRE.test(selector) ?\n scope.getElementsByTagName(selector) :\n scope.querySelectorAll(selector)\n );\n};","var run = require('./run'),\n EventEmitter = require('events').EventEmitter,\n fnRegex = /^function.*?\\((.*?)\\)/;\n\nvar defer = typeof setImmediate === 'function' ? setImmediate : setTimeout;\n\nfunction newKgo(){\n var returnlessId = 0,\n tasks = {},\n results = {},\n errorHandlers = {},\n inFlight,\n defaultsDefined;\n\n function kgoFn(){\n if(inFlight){\n throw \"No tasks or defaults may be set after kgo is in flight\";\n }\n\n var argIndex = 0;\n\n while(typeof arguments[argIndex] === 'string'){\n argIndex++;\n }\n\n var names = Array.prototype.slice.call(arguments, 0, argIndex),\n dependencies,\n fn;\n\n if(!names.length){\n names.push((returnlessId++).toString() + '__returnless');\n }\n \n if(typeof arguments[argIndex] === 'object' && !Array.isArray(arguments[argIndex])){\n var defaults = arguments[argIndex];\n\n if(defaultsDefined){\n throw \"Defaults may be defined only once per kgo\";\n }\n\n for(var key in defaults){\n if(key in tasks){\n throw \"A task is already defined for \" + key;\n }\n results[key] = defaults[key];\n }\n defaultsDefined = true;\n return kgoFn;\n }\n\n if(Array.isArray(arguments[argIndex])){\n dependencies = arguments[argIndex];\n argIndex++;\n }\n\n if(typeof arguments[argIndex] === 'function'){\n fn = arguments[argIndex];\n }\n\n if(typeof fn !== 'function'){\n throw new Error('No function provided for task number ' + Object.keys(tasks).length + ' (' + names + ')');\n }\n\n for(var i = 0; i < names.length; i++){\n if(names[i] in results){\n throw \"A default with the same name as this task (\" + names[i] + \") has already been set\";\n }\n }\n\n tasks[names] = {\n names: names,\n args: dependencies || [],\n fn: fn\n };\n\n return kgoFn;\n }\n\n for(var key in EventEmitter.prototype){\n kgoFn[key] = EventEmitter.prototype[key];\n }\n\n kgoFn.apply(null, arguments);\n\n defer(function(){\n inFlight = true;\n run(tasks, results, kgoFn);\n });\n\n return kgoFn;\n}\n\nmodule.exports = newKgo;","var ignoreDependency = /^\\!.+/;\n\nfunction rotate90(array){\n // transpose from http://www.codesuck.com/2012/02/transpose-javascript-array-in-one-line.html\n return Object.keys(array[0]).map(function (c) { return array.map(function (r) { return r[c]; }); });\n}\n\nfunction Step(task, args, done){\n this._task = task;\n this._args = args;\n this._done = done;\n}\nStep.prototype.run = function(){\n var step = this,\n didError;\n\n this._task.fn.apply(this, this._args.concat([function(error){\n var result = Array.prototype.slice.call(arguments, 1);\n if(error){\n didError = true;\n step.done(error);\n }else if(!didError){\n step.done(null, result);\n }\n }]));\n};\nStep.prototype.done = function(error, result){\n if(error){\n return this._done(error);\n }\n this._done(null, result);\n};\n\nfunction runTask(task, results, aboutToRun, done){\n var names = task.names,\n dependants = task.args,\n taskFunction = task.fn,\n args = [];\n\n if(dependants){\n for(var i = 0; i < dependants.length; i++) {\n var dependantName = dependants[i],\n ignore = dependantName.match(ignoreDependency);\n\n if(ignore){\n dependantName = dependantName.slice(1);\n }\n\n if(!(dependantName in results)){\n return;\n }\n\n if(!ignore){\n args.push(results[dependantName]);\n }\n }\n }\n\n var step = new Step(task, args, function(error, results){\n done(names, error, results);\n });\n\n aboutToRun(names);\n step.run();\n}\n\nfunction run(tasks, results, emitter){\n var currentTask,\n noMoreTasks = true;\n\n if(emitter._complete){\n return;\n }\n\n for(var key in tasks){\n noMoreTasks = false;\n currentTask = tasks[key];\n\n runTask(\n currentTask,\n results,\n function(names){\n delete tasks[names];\n },\n function(names, error, taskResults){\n if(emitter._complete){\n return;\n }\n if(error){\n emitter._complete = true;\n emitter.emit('error', error, names);\n emitter.emit('complete');\n return;\n }\n\n for(var i = 0; i < names.length; i++){\n results[names[i]] = taskResults[i];\n }\n\n run(tasks, results, emitter);\n }\n );\n }\n\n if(noMoreTasks){\n emitter._complete = true;\n emitter.emit('complete');\n }\n}\n\nfunction cloneAndRun(tasks, results, emitter){\n var todo = {};\n\n for(var key in tasks){\n todo[key] = tasks[key];\n }\n\n run(todo, results, emitter);\n}\n\nmodule.exports = cloneAndRun;","var plugin = require('rtc-core/plugin');\nvar extend = require('cog/extend');\n\n/**\n # rtc-attach\n\n Roughly equivalent to the\n [`attachMediaStream`](https://www.npmjs.org/package/attachmediastream)\n package but with support for rtc.io plugins. Also uses an error first\n async API to allow plugins time to initialize.\n\n ## Example Usage\n\n <<< examples/simple.js\n\n ## Example using Plugins\n\n <<< examples/plugins.js\n\n ## Reference\n\n ### `attach(stream, opts?, callback)`\n\n Attach `stream` to a HTML element that will render the content. The provided\n `callback` follows the format of `fn(err, element)`. While the async nature\n of this package may seem odd, because a plugin may need time to initialize\n this caters for this case in addition to standard usage in the browser.\n\n - `autoplay` (default: `true`) - by default after the stream has been\n attached to the element it will be played. This is done by calling\n the `play()` function on the element rather than relying on `autoplay`\n attribute functionality.\n\n - `el` (default: `null`) - if you with to supply an element to be used\n instead of creating a new element to receive the stream specify it here.\n\n - `muted` (default: `false`) - whether the created element should be muted\n or not. For local streams this should almost always, be true so consider\n using the `attach.local` helper function for simple cases.\n\n - `plugins` (default: `[]`) - specify one or more plugins that can be used\n to render the media stream appropriate to the current platform in the\n event that WebRTC and/or media capture is supported via a browser plugin.\n\n**/\nvar attach = module.exports = function(stream, opts, callback) {\n var URL = typeof window != 'undefined' && window.URL;\n var pinst;\n\n if (typeof opts == 'function') {\n callback = opts;\n opts = {};\n }\n\n function applyModifications(el, o) {\n if ((o || {}).muted) {\n el.muted = true;\n el.setAttribute('muted', '');\n }\n\n if ((o || {}).mirror) {\n el.setAttribute('data-mirrored', true);\n }\n\n return el;\n }\n\n function attachToElement(s, o) {\n var autoplay = (o || {}).autoplay;\n var elType = 'audio';\n var el = (o || {}).el || (o || {}).target;\n\n // check the stream is valid\n var isValid = s && typeof s.getVideoTracks == 'function';\n\n // determine the element type\n if (isValid && s.getVideoTracks().length > 0) {\n elType = 'video';\n }\n\n // if we have been passed an \"unplayable\" target create a new element\n if (el && typeof el.play != 'function') {\n el = null;\n }\n\n // prepare the element\n el = el || document.createElement(elType);\n\n // attach the stream\n if (URL && URL.createObjectURL) {\n el.src = URL.createObjectURL(stream);\n }\n else if (el.srcObject) {\n el.srcObject = stream;\n }\n else if (el.mozSrcObject) {\n el.mozSrcObject = stream;\n }\n\n if (autoplay === undefined || autoplay) {\n el.setAttribute('autoplay', '');\n el.play();\n }\n\n return applyModifications(el, o);\n }\n\n // see if we are using a plugin\n pinst = plugin((opts || {}).plugins);\n if (pinst) {\n return pinst.init(opts, function(err) {\n if (err) {\n return callback(err);\n }\n\n if (typeof pinst.attach != 'function') {\n return callback(new Error('plugin must support the attach function'));\n }\n\n callback(null, applyModifications(pinst.attach(stream, opts), opts));\n });\n }\n\n callback(null, attachToElement(stream, opts));\n};\n\n/**\n ### `attach.local(stream, opts?, callback)`\n\n Attach a local stream with options appropriate for local streams:\n\n - `muted`: `true`\n\n**/\nattach.local = function(stream, opts, callback) {\n if (typeof opts == 'function') {\n callback = opts;\n opts = {};\n }\n\n attach(stream, extend({ muted: true, mirror: true }, opts), callback);\n};\n","var plugin = require('rtc-core/plugin');\nvar detect = require('rtc-core/detect');\n\n// patch navigator getUserMedia\nnavigator.getUserMedia = navigator.getUserMedia ||\n detect.call(navigator, 'getUserMedia');\n\n/**\n # rtc-capture\n\n Roughly equivalent to the\n [`getUserMedia`](https://www.npmjs.org/package/getusermedia) package but with\n support for rtc.io plugins.\n\n ## Example Usage\n\n <<< examples/simple.js\n\n ## Example with using Plugins\n\n <<< examples/plugins.js\n\n ## Reference\n\n ### `capture(constraints, opts?, callback)`\n\n Capture media with the supplied `constraints`. If an `opts` argument is\n supplied look for plugins that may change the behaviour of the capture\n operation.\n\n**/\nmodule.exports = function(constraints, opts, callback) {\n var pinst;\n\n function handleCapture(stream) {\n callback(null, stream);\n }\n\n if (typeof opts == 'function') {\n callback = opts;\n opts = {};\n }\n\n // see if we are using a plugin\n pinst = plugin((opts || {}).plugins);\n if (pinst) {\n return pinst.init(opts, function(err) {\n if (err) {\n return callback(err);\n }\n\n if (typeof navigator.getUserMedia != 'function') {\n return callback(new Error('plugin does not support media capture'));\n }\n\n navigator.getUserMedia(constraints, handleCapture, callback);\n });\n }\n\n if (typeof navigator.getUserMedia != 'function') {\n return callback(new Error('getUserMedia not supported'));\n }\n\n navigator.getUserMedia(constraints, handleCapture, callback);\n};\n","/* jshint node: true */\n/* global window: false */\n/* global navigator: false */\n\n'use strict';\n\nvar browser = require('detect-browser');\n\n/**\n ### `rtc-core/detect`\n\n A browser detection helper for accessing prefix-free versions of the various\n WebRTC types.\n\n ### Example Usage\n\n If you wanted to get the native `RTCPeerConnection` prototype in any browser\n you could do the following:\n\n ```js\n var detect = require('rtc-core/detect'); // also available in rtc/detect\n var RTCPeerConnection = detect('RTCPeerConnection');\n ```\n\n This would provide whatever the browser prefixed version of the\n RTCPeerConnection is available (`webkitRTCPeerConnection`,\n `mozRTCPeerConnection`, etc).\n**/\nvar detect = module.exports = function(target, opts) {\n var attach = (opts || {}).attach;\n var prefixIdx;\n var prefix;\n var testName;\n var hostObject = this || (typeof window != 'undefined' ? window : undefined);\n\n // initialise to default prefixes\n // (reverse order as we use a decrementing for loop)\n var prefixes = ((opts || {}).prefixes || ['ms', 'o', 'moz', 'webkit']).concat('');\n\n // if we have no host object, then abort\n if (! hostObject) {\n return;\n }\n\n // iterate through the prefixes and return the class if found in global\n for (prefixIdx = prefixes.length; prefixIdx--; ) {\n prefix = prefixes[prefixIdx];\n\n // construct the test class name\n // if we have a prefix ensure the target has an uppercase first character\n // such that a test for getUserMedia would result in a\n // search for webkitGetUserMedia\n testName = prefix + (prefix ?\n target.charAt(0).toUpperCase() + target.slice(1) :\n target);\n\n if (typeof hostObject[testName] != 'undefined') {\n // update the last used prefix\n detect.browser = detect.browser || prefix.toLowerCase();\n\n if (attach) {\n hostObject[target] = hostObject[testName];\n }\n\n return hostObject[testName];\n }\n }\n};\n\n// detect mozilla (yes, this feels dirty)\ndetect.moz = typeof navigator != 'undefined' && !!navigator.mozGetUserMedia;\n\n// set the browser and browser version\ndetect.browser = browser.name;\ndetect.browserVersion = detect.version = browser.version;\n","/**\n ### `rtc-core/genice`\n\n Respond appropriately to options that are passed to packages like\n `rtc-quickconnect` and trigger a `callback` (error first) with iceServer\n values.\n\n The function looks for either of the following keys in the options, in\n the following order or precedence:\n\n 1. `ice` - this can either be an array of ice server values or a generator\n function (in the same format as this function). If this key contains a\n value then any servers specified in the `iceServers` key (2) will be\n ignored.\n\n 2. `iceServers` - an array of ice server values.\n**/\nmodule.exports = function(opts, callback) {\n var ice = (opts || {}).ice;\n var iceServers = (opts || {}).iceServers;\n\n if (typeof ice == 'function') {\n return ice(opts, callback);\n }\n else if (Array.isArray(ice)) {\n return callback(null, [].concat(ice));\n }\n\n callback(null, [].concat(iceServers || []));\n};\n","var browsers = [\n [ 'chrome', /Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/ ],\n [ 'firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/ ],\n [ 'opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/ ],\n [ 'ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+)\\).*Gecko$/ ],\n [ 'ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/ ],\n [ 'ie', /MSIE\\s(7\\.0)/ ],\n [ 'bb10', /BB10;\\sTouch.*Version\\/([0-9\\.]+)/ ],\n [ 'android', /Android\\s([0-9\\.]+)/ ],\n [ 'ios', /iPad\\;\\sCPU\\sOS\\s([0-9\\._]+)/ ],\n [ 'ios', /iPhone\\;\\sCPU\\siPhone\\sOS\\s([0-9\\._]+)/ ],\n [ 'safari', /Safari\\/([0-9\\._]+)/ ]\n];\n\nvar match = browsers.map(match).filter(isMatch)[0];\nvar parts = match && match[3].split(/[._]/).slice(0,3);\n\nwhile (parts && parts.length < 3) {\n parts.push('0');\n}\n\n// set the name and version\nexports.name = match && match[0];\nexports.version = parts && parts.join('.');\n\nfunction match(pair) {\n return pair.concat(pair[1].exec(navigator.userAgent));\n}\n\nfunction isMatch(pair) {\n return !!pair[2];\n}\n","var detect = require('./detect');\nvar requiredFunctions = [\n 'init'\n];\n\nfunction isSupported(plugin) {\n return plugin && typeof plugin.supported == 'function' && plugin.supported(detect);\n}\n\nfunction isValid(plugin) {\n var supportedFunctions = requiredFunctions.filter(function(fn) {\n return typeof plugin[fn] == 'function';\n });\n\n return supportedFunctions.length === requiredFunctions.length;\n}\n\nmodule.exports = function(plugins) {\n return [].concat(plugins || []).filter(isSupported).filter(isValid)[0];\n}\n","/* jshint node: true */\n/* global location */\n'use strict';\n\nvar rtc = require('rtc-tools');\nvar mbus = require('mbus');\nvar detectPlugin = require('rtc-core/plugin');\nvar debug = rtc.logger('rtc-quickconnect');\nvar extend = require('cog/extend');\n\n/**\n # rtc-quickconnect\n\n This is a high level helper module designed to help you get up\n an running with WebRTC really, really quickly. By using this module you\n are trading off some flexibility, so if you need a more flexible\n configuration you should drill down into lower level components of the\n [rtc.io](http://www.rtc.io) suite. In particular you should check out\n [rtc](https://github.com/rtc-io/rtc).\n\n ## Example Usage\n\n In the simplest case you simply call quickconnect with a single string\n argument which tells quickconnect which server to use for signaling:\n\n <<< examples/simple.js\n\n <<< docs/events.md\n\n <<< docs/examples.md\n\n ## Regarding Signalling and a Signalling Server\n\n Signaling is an important part of setting up a WebRTC connection and for\n our examples we use our own test instance of the\n [rtc-switchboard](https://github.com/rtc-io/rtc-switchboard). For your\n testing and development you are more than welcome to use this also, but\n just be aware that we use this for our testing so it may go up and down\n a little. If you need something more stable, why not consider deploying\n an instance of the switchboard yourself - it's pretty easy :)\n\n ## Reference\n\n ```\n quickconnect(signalhost, opts?) => rtc-sigaller instance (+ helpers)\n ```\n\n ### Valid Quick Connect Options\n\n The options provided to the `rtc-quickconnect` module function influence the\n behaviour of some of the underlying components used from the rtc.io suite.\n\n Listed below are some of the commonly used options:\n\n - `ns` (default: '')\n\n An optional namespace for your signalling room. While quickconnect\n will generate a unique hash for the room, this can be made to be more\n unique by providing a namespace. Using a namespace means two demos\n that have generated the same hash but use a different namespace will be\n in different rooms.\n\n - `room` (default: null) _added 0.6_\n\n Rather than use the internal hash generation\n (plus optional namespace) for room name generation, simply use this room\n name instead. __NOTE:__ Use of the `room` option takes precendence over\n `ns`.\n\n - `debug` (default: false)\n\n Write rtc.io suite debug output to the browser console.\n\n - `expectedLocalStreams` (default: not specified) _added 3.0_\n\n By providing a positive integer value for this option will mean that\n the created quickconnect instance will wait until the specified number of\n streams have been added to the quickconnect \"template\" before announcing\n to the signaling server.\n\n - `manualJoin` (default: `false`)\n\n Set this value to `true` if you would prefer to call the `join` function\n to connecting to the signalling server, rather than having that happen\n automatically as soon as quickconnect is ready to.\n\n #### Options for Peer Connection Creation\n\n Options that are passed onto the\n [rtc.createConnection](https://github.com/rtc-io/rtc#createconnectionopts-constraints)\n function:\n\n - `iceServers`\n\n This provides a list of ice servers that can be used to help negotiate a\n connection between peers.\n\n #### Options for P2P negotiation\n\n Under the hood, quickconnect uses the\n [rtc/couple](https://github.com/rtc-io/rtc#rtccouple) logic, and the options\n passed to quickconnect are also passed onto this function.\n\n**/\nmodule.exports = function(signalhost, opts) {\n var hash = typeof location != 'undefined' && location.hash.slice(1);\n var signaller = require('rtc-pluggable-signaller')(extend({ signaller: signalhost }, opts));\n var getPeerData = require('./lib/getpeerdata')(signaller.peers);\n\n // init configurable vars\n var ns = (opts || {}).ns || '';\n var room = (opts || {}).room;\n var debugging = (opts || {}).debug;\n var allowJoin = !(opts || {}).manualJoin;\n var profile = {};\n var announced = false;\n\n // initialise iceServers to undefined\n // we will not announce until these have been properly initialised\n var iceServers;\n\n // collect the local streams\n var localStreams = [];\n\n // create the calls map\n var calls = signaller.calls = require('./lib/calls')(signaller, opts);\n\n // create the known data channels registry\n var channels = {};\n\n // save the plugins passed to the signaller\n var plugins = signaller.plugins = (opts || {}).plugins || [];\n var plugin = detectPlugin(plugins);\n var pluginReady;\n\n // check how many local streams have been expected (default: 0)\n var expectedLocalStreams = parseInt((opts || {}).expectedLocalStreams, 10) || 0;\n var announceTimer = 0;\n var updateTimer = 0;\n\n function checkReadyToAnnounce() {\n clearTimeout(announceTimer);\n // if we have already announced do nothing!\n if (announced) {\n return;\n }\n\n if (! allowJoin) {\n return;\n }\n\n // if we have a plugin but it's not initialized we aren't ready\n if (plugin && (! pluginReady)) {\n return;\n }\n\n // if we have no iceServers we aren't ready\n if (! iceServers) {\n return;\n }\n\n // if we are waiting for a set number of streams, then wait until we have\n // the required number\n if (expectedLocalStreams && localStreams.length < expectedLocalStreams) {\n return;\n }\n\n // announce ourselves to our new friend\n announceTimer = setTimeout(function() {\n var data = extend({ room: room }, profile);\n\n // announce and emit the local announce event\n signaller.announce(data);\n announced = true;\n }, 0);\n }\n\n function connect(id) {\n var data = getPeerData(id);\n var pc;\n var monitor;\n\n // if the room is not a match, abort\n if (data.room !== room) {\n return;\n }\n\n // end any call to this id so we know we are starting fresh\n calls.end(id);\n\n // create a peer connection\n // iceServers that have been created using genice taking precendence\n pc = rtc.createConnection(\n extend({}, opts, { iceServers: iceServers }),\n (opts || {}).constraints\n );\n\n signaller('peer:connect', data.id, pc, data);\n\n // add this connection to the calls list\n calls.create(data.id, pc);\n\n // add the local streams\n localStreams.forEach(function(stream) {\n pc.addStream(stream);\n });\n\n // add the data channels\n // do this differently based on whether the connection is a\n // master or a slave connection\n if (signaller.isMaster(data.id)) {\n debug('is master, creating data channels: ', Object.keys(channels));\n\n // create the channels\n Object.keys(channels).forEach(function(label) {\n gotPeerChannel(pc.createDataChannel(label, channels[label]), pc, data);\n });\n }\n else {\n pc.ondatachannel = function(evt) {\n var channel = evt && evt.channel;\n\n // if we have no channel, abort\n if (! channel) {\n return;\n }\n\n if (channels[channel.label] !== undefined) {\n gotPeerChannel(channel, pc, getPeerData(id));\n }\n };\n }\n\n // couple the connections\n debug('coupling ' + signaller.id + ' to ' + data.id);\n monitor = rtc.couple(pc, id, signaller, extend({}, opts, {\n logger: mbus('pc.' + id, signaller)\n }));\n\n signaller('peer:couple', id, pc, data, monitor);\n\n // once active, trigger the peer connect event\n monitor.once('connected', calls.start.bind(null, id, pc, data));\n monitor.once('closed', calls.end.bind(null, id));\n\n // if we are the master connnection, create the offer\n // NOTE: this only really for the sake of politeness, as rtc couple\n // implementation handles the slave attempting to create an offer\n if (signaller.isMaster(id)) {\n monitor.createOffer();\n }\n }\n\n function getActiveCall(peerId) {\n var call = calls.get(peerId);\n\n if (! call) {\n throw new Error('No active call for peer: ' + peerId);\n }\n\n return call;\n }\n\n function gotPeerChannel(channel, pc, data) {\n var channelMonitor;\n\n function channelReady() {\n var call = calls.get(data.id);\n var args = [ data.id, channel, data, pc ];\n\n // decouple the channel.onopen listener\n debug('reporting channel \"' + channel.label + '\" ready, have call: ' + (!!call));\n clearInterval(channelMonitor);\n channel.onopen = null;\n\n // save the channel\n if (call) {\n call.channels.set(channel.label, channel);\n }\n\n // trigger the %channel.label%:open event\n debug('triggering channel:opened events for channel: ' + channel.label);\n\n // emit the plain channel:opened event\n signaller.apply(signaller, ['channel:opened'].concat(args));\n\n // emit the channel:opened:%label% eve\n signaller.apply(\n signaller,\n ['channel:opened:' + channel.label].concat(args)\n );\n }\n\n debug('channel ' + channel.label + ' discovered for peer: ' + data.id);\n if (channel.readyState === 'open') {\n return channelReady();\n }\n\n debug('channel not ready, current state = ' + channel.readyState);\n channel.onopen = channelReady;\n\n // monitor the channel open (don't trust the channel open event just yet)\n channelMonitor = setInterval(function() {\n debug('checking channel state, current state = ' + channel.readyState);\n if (channel.readyState === 'open') {\n channelReady();\n }\n }, 500);\n }\n\n function initPlugin() {\n return plugin && plugin.init(opts, function(err) {\n if (err) {\n return console.error('Could not initialize plugin: ', err);\n }\n\n pluginReady = true;\n checkReadyToAnnounce();\n });\n }\n\n function handleLocalAnnounce(data) {\n // if we send an announce with an updated room then update our local room name\n if (data && typeof data.room != 'undefined') {\n room = data.room;\n }\n }\n\n function handlePeerFilter(id, data) {\n // only connect with the peer if we are ready\n data.allow = data.allow && (localStreams.length >= expectedLocalStreams);\n }\n\n function handlePeerUpdate(data) {\n var id = data && data.id;\n var activeCall = id && calls.get(id);\n\n // if we have received an update for a peer that has no active calls,\n // then pass this onto the announce handler\n if (id && (! activeCall)) {\n debug('received peer update from peer ' + id + ', no active calls');\n signaller.to(id).send('/reconnect');\n return connect(id);\n }\n }\n\n // if the room is not defined, then generate the room name\n if (! room) {\n // if the hash is not assigned, then create a random hash value\n if (typeof location != 'undefined' && (! hash)) {\n hash = location.hash = '' + (Math.pow(2, 53) * Math.random());\n }\n\n room = ns + '#' + hash;\n }\n\n if (debugging) {\n rtc.logger.enable.apply(rtc.logger, Array.isArray(debug) ? debugging : ['*']);\n }\n\n signaller.on('peer:announce', function(data) {\n connect(data.id);\n });\n\n signaller.on('peer:update', handlePeerUpdate);\n\n signaller.on('message:reconnect', function(sender) {\n connect(sender.id);\n });\n\n\n\n /**\n ### Quickconnect Broadcast and Data Channel Helper Functions\n\n The following are functions that are patched into the `rtc-signaller`\n instance that make working with and creating functional WebRTC applications\n a lot simpler.\n\n **/\n\n /**\n #### addStream\n\n ```\n addStream(stream:MediaStream) => qc\n ```\n\n Add the stream to active calls and also save the stream so that it\n can be added to future calls.\n\n **/\n signaller.broadcast = signaller.addStream = function(stream) {\n localStreams.push(stream);\n\n // if we have any active calls, then add the stream\n calls.values().forEach(function(data) {\n data.pc.addStream(stream);\n });\n\n checkReadyToAnnounce();\n return signaller;\n };\n\n /**\n #### endCalls()\n\n The `endCalls` function terminates all the active calls that have been\n created in this quickconnect instance. Calling `endCalls` does not\n kill the connection with the signalling server.\n\n **/\n signaller.endCalls = function() {\n calls.keys().forEach(calls.end);\n };\n\n /**\n #### close()\n\n The `close` function provides a convenient way of closing all associated\n peer connections. This function simply uses the `endCalls` function and\n the underlying `leave` function of the signaller to do a \"full cleanup\"\n of all connections.\n **/\n signaller.close = function() {\n signaller.endCalls();\n signaller.leave();\n };\n\n /**\n #### createDataChannel(label, config)\n\n Request that a data channel with the specified `label` is created on\n the peer connection. When the data channel is open and available, an\n event will be triggered using the label of the data channel.\n\n For example, if a new data channel was requested using the following\n call:\n\n ```js\n var qc = quickconnect('https://switchboard.rtc.io/').createDataChannel('test');\n ```\n\n Then when the data channel is ready for use, a `test:open` event would\n be emitted by `qc`.\n\n **/\n signaller.createDataChannel = function(label, opts) {\n // create a channel on all existing calls\n calls.keys().forEach(function(peerId) {\n var call = calls.get(peerId);\n var dc;\n\n // if we are the master connection, create the data channel\n if (call && call.pc && signaller.isMaster(peerId)) {\n dc = call.pc.createDataChannel(label, opts);\n gotPeerChannel(dc, call.pc, getPeerData(peerId));\n }\n });\n\n // save the data channel opts in the local channels dictionary\n channels[label] = opts || null;\n\n return signaller;\n };\n\n /**\n #### join()\n\n The `join` function is used when `manualJoin` is set to true when creating\n a quickconnect instance. Call the `join` function once you are ready to\n join the signalling server and initiate connections with other people.\n\n **/\n signaller.join = function() {\n allowJoin = true;\n checkReadyToAnnounce();\n };\n\n /**\n #### `get(name)`\n\n The `get` function returns the property value for the specified property name.\n **/\n signaller.get = function(name) {\n return profile[name];\n };\n\n /**\n #### `getLocalStreams()`\n\n Return a copy of the local streams that have currently been configured\n **/\n signaller.getLocalStreams = function() {\n return [].concat(localStreams);\n };\n\n /**\n #### reactive()\n\n Flag that this session will be a reactive connection.\n\n **/\n signaller.reactive = function() {\n // add the reactive flag\n opts = opts || {};\n opts.reactive = true;\n\n // chain\n return signaller;\n };\n\n /**\n #### removeStream\n\n ```\n removeStream(stream:MediaStream)\n ```\n\n Remove the specified stream from both the local streams that are to\n be connected to new peers, and also from any active calls.\n\n **/\n signaller.removeStream = function(stream) {\n var localIndex = localStreams.indexOf(stream);\n\n // remove the stream from any active calls\n calls.values().forEach(function(call) {\n call.pc.removeStream(stream);\n });\n\n // remove the stream from the localStreams array\n if (localIndex >= 0) {\n localStreams.splice(localIndex, 1);\n }\n\n return signaller;\n };\n\n /**\n #### requestChannel\n\n ```\n requestChannel(targetId, label, callback)\n ```\n\n This is a function that can be used to respond to remote peers supplying\n a data channel as part of their configuration. As per the `receiveStream`\n function this function will either fire the callback immediately if the\n channel is already available, or once the channel has been discovered on\n the call.\n\n **/\n signaller.requestChannel = function(targetId, label, callback) {\n var call = getActiveCall(targetId);\n var channel = call && call.channels.get(label);\n\n // if we have then channel trigger the callback immediately\n if (channel) {\n callback(null, channel);\n return signaller;\n }\n\n // if not, wait for it\n signaller.once('channel:opened:' + label, function(id, dc) {\n callback(null, dc);\n });\n\n return signaller;\n };\n\n /**\n #### requestStream\n\n ```\n requestStream(targetId, idx, callback)\n ```\n\n Used to request a remote stream from a quickconnect instance. If the\n stream is already available in the calls remote streams, then the callback\n will be triggered immediately, otherwise this function will monitor\n `stream:added` events and wait for a match.\n\n In the case that an unknown target is requested, then an exception will\n be thrown.\n **/\n signaller.requestStream = function(targetId, idx, callback) {\n var call = getActiveCall(targetId);\n var stream;\n\n function waitForStream(peerId) {\n if (peerId !== targetId) {\n return;\n }\n\n // get the stream\n stream = call.pc.getRemoteStreams()[idx];\n\n // if we have the stream, then remove the listener and trigger the cb\n if (stream) {\n signaller.removeListener('stream:added', waitForStream);\n callback(null, stream);\n }\n }\n\n // look for the stream in the remote streams of the call\n stream = call.pc.getRemoteStreams()[idx];\n\n // if we found the stream then trigger the callback\n if (stream) {\n callback(null, stream);\n return signaller;\n }\n\n // otherwise wait for the stream\n signaller.on('stream:added', waitForStream);\n return signaller;\n };\n\n /**\n #### profile(data)\n\n Update the profile data with the attached information, so when\n the signaller announces it includes this data in addition to any\n room and id information.\n\n **/\n signaller.profile = function(data) {\n extend(profile, data);\n\n // if we have already announced, then reannounce our profile to provide\n // others a `peer:update` event\n if (announced) {\n clearTimeout(updateTimer);\n updateTimer = setTimeout(function() {\n signaller.announce(profile);\n }, (opts || {}).updateDelay || 1000);\n }\n\n return signaller;\n };\n\n /**\n #### waitForCall\n\n ```\n waitForCall(targetId, callback)\n ```\n\n Wait for a call from the specified targetId. If the call is already\n active the callback will be fired immediately, otherwise we will wait\n for a `call:started` event that matches the requested `targetId`\n\n **/\n signaller.waitForCall = function(targetId, callback) {\n var call = calls.get(targetId);\n\n if (call && call.active) {\n callback(null, call.pc);\n return signaller;\n }\n\n signaller.on('call:started', function handleNewCall(id) {\n if (id === targetId) {\n signaller.removeListener('call:started', handleNewCall);\n callback(null, calls.get(id).pc);\n }\n });\n };\n\n // if we have an expected number of local streams, then use a filter to\n // check if we should respond\n if (expectedLocalStreams) {\n signaller.on('peer:filter', handlePeerFilter);\n }\n\n // respond to local announce messages\n signaller.on('local:announce', handleLocalAnnounce);\n\n // handle ping messages\n signaller.on('message:ping', calls.ping);\n\n // use genice to find our iceServers\n require('rtc-core/genice')(opts, function(err, servers) {\n if (err) {\n return console.error('could not find iceServers: ', err);\n }\n\n iceServers = servers;\n checkReadyToAnnounce();\n });\n\n // if we plugin is active, then initialize it\n if (plugin) {\n initPlugin();\n }\n\n // pass the signaller on\n return signaller;\n};\n","var rtc = require('rtc-tools');\nvar debug = rtc.logger('rtc-quickconnect');\nvar cleanup = require('rtc-tools/cleanup');\nvar getable = require('cog/getable');\n\nmodule.exports = function(signaller, opts) {\n var calls = getable({});\n var getPeerData = require('./getpeerdata')(signaller.peers);\n var heartbeat;\n\n function create(id, pc) {\n calls.set(id, {\n active: false,\n pc: pc,\n channels: getable({}),\n streams: [],\n lastping: Date.now()\n });\n }\n\n function createStreamAddHandler(id) {\n return function(evt) {\n debug('peer ' + id + ' added stream');\n updateRemoteStreams(id);\n receiveRemoteStream(id)(evt.stream);\n };\n }\n\n function createStreamRemoveHandler(id) {\n return function(evt) {\n debug('peer ' + id + ' removed stream');\n updateRemoteStreams(id);\n signaller('stream:removed', id, evt.stream);\n };\n }\n\n function end(id) {\n var call = calls.get(id);\n\n // if we have no data, then do nothing\n if (! call) {\n return;\n }\n\n // if we have no data, then return\n call.channels.keys().forEach(function(label) {\n var channel = call.channels.get(label);\n var args = [id, channel, label];\n\n // emit the plain channel:closed event\n signaller.apply(signaller, ['channel:closed'].concat(args));\n\n // emit the labelled version of the event\n signaller.apply(signaller, ['channel:closed:' + label].concat(args));\n\n // decouple the events\n channel.onopen = null;\n });\n\n // trigger stream:removed events for each of the remotestreams in the pc\n call.streams.forEach(function(stream) {\n signaller('stream:removed', id, stream);\n });\n\n // delete the call data\n calls.delete(id);\n\n // if we have no more calls, disable the heartbeat\n if (calls.keys().length === 0) {\n resetHeartbeat();\n }\n\n // trigger the call:ended event\n signaller('call:ended', id, call.pc);\n\n // ensure the peer connection is properly cleaned up\n cleanup(call.pc);\n }\n\n function ping(sender) {\n var call = calls.get(sender && sender.id);\n\n // set the last ping for the data\n if (call) {\n call.lastping = Date.now();\n }\n }\n\n function receiveRemoteStream(id) {\n return function(stream) {\n signaller('stream:added', id, stream, getPeerData(id));\n };\n }\n\n function resetHeartbeat() {\n clearInterval(heartbeat);\n heartbeat = 0;\n }\n\n function start(id, pc, data) {\n var call = calls.get(id);\n var streams = [].concat(pc.getRemoteStreams());\n\n // flag the call as active\n call.active = true;\n call.streams = [].concat(pc.getRemoteStreams());\n\n pc.onaddstream = createStreamAddHandler(id);\n pc.onremovestream = createStreamRemoveHandler(id);\n\n debug(signaller.id + ' - ' + id + ' call start: ' + streams.length + ' streams');\n signaller('call:started', id, pc, data);\n\n // configure the heartbeat timer\n heartbeat = heartbeat || require('./heartbeat')(signaller, calls, opts);\n\n // examine the existing remote streams after a short delay\n process.nextTick(function() {\n // iterate through any remote streams\n streams.forEach(receiveRemoteStream(id));\n });\n }\n\n function updateRemoteStreams(id) {\n var call = calls.get(id);\n\n if (call && call.pc) {\n call.streams = [].concat(call.pc.getRemoteStreams());\n }\n }\n\n calls.create = create;\n calls.end = end;\n calls.ping = ping;\n calls.start = start;\n\n return calls;\n};\n","module.exports = function(peers) {\n return function(id) {\n var peer = peers.get(id);\n return peer && peer.data;\n };\n};\n","module.exports = function(signaller, calls, opts) {\n var heartbeat = (opts || {}).heartbeat || 2500;\n var heartbeatTimer = 0;\n\n function send() {\n var tickInactive = (Date.now() - (heartbeat * 4));\n\n // iterate through our established calls\n calls.keys().forEach(function(id) {\n var call = calls.get(id);\n\n // if the call ping is too old, end the call\n if (call.lastping < tickInactive) {\n return calls.end(id);\n }\n\n // send a ping message\n signaller.to(id).send('/ping');\n });\n }\n\n if (! heartbeat) {\n return;\n }\n\n return setInterval(send, heartbeat);\n};\n","var reDelim = /[\\.\\:]/;\n\n/**\n # mbus\n\n If Node's EventEmitter and Eve were to have a child, it might look something like this.\n No wildcard support at this stage though...\n\n ## Example Usage\n\n <<< docs/usage.md\n\n ## Reference\n\n ### `mbus(namespace?, parent?, scope?)`\n\n Create a new message bus with `namespace` inheriting from the `parent`\n mbus instance. If events from this message bus should be triggered with\n a specific `this` scope, then specify it using the `scope` argument.\n\n**/\n\nvar createBus = module.exports = function(namespace, parent, scope) {\n var registry = {};\n var feeds = [];\n\n function bus(name) {\n var args = [].slice.call(arguments, 1);\n var delimited = normalize(name);\n var handlers = registry[delimited] || [];\n var results;\n\n // send through the feeds\n feeds.forEach(function(feed) {\n feed({ name: delimited, args: args });\n });\n\n // run the registered handlers\n results = [].concat(handlers).map(function(handler) {\n return handler.apply(scope || this, args);\n });\n\n // run the parent handlers\n if (bus.parent) {\n results = results.concat(\n bus.parent.apply(\n scope || this,\n [(namespace ? namespace + '.' : '') + delimited].concat(args)\n )\n );\n }\n\n return results;\n }\n\n /**\n ### `mbus#clear()`\n\n Reset the handler registry, which essential deregisters all event listeners.\n\n _Alias:_ `removeAllListeners`\n **/\n function clear(name) {\n // if we have a name, reset handlers for that handler\n if (name) {\n delete registry[normalize(name)];\n }\n // otherwise, reset the entire handler registry\n else {\n registry = {};\n }\n }\n\n /**\n ### `mbus#feed(handler)`\n\n Attach a handler function that will see all events that are sent through\n this bus in an \"object stream\" format that matches the following format:\n\n ```\n { name: 'event.name', args: [ 'event', 'args' ] }\n ```\n\n The feed function returns a function that can be called to stop the feed\n sending data.\n\n **/\n function feed(handler) {\n function stop() {\n feeds.splice(feeds.indexOf(handler), 1);\n }\n\n feeds.push(handler);\n return stop;\n }\n\n function normalize(name) {\n return (Array.isArray(name) ? name : name.split(reDelim)).join('.');\n }\n\n /**\n ### `mbus#off(name, handler)`\n\n Deregister an event handler.\n **/\n function off(name, handler) {\n var handlers = registry[normalize(name)] || [];\n var idx = handlers ? handlers.indexOf(handler._actual || handler) : -1;\n\n if (idx >= 0) {\n handlers.splice(idx, 1);\n }\n }\n\n /**\n ### `mbus#on(name, handler)`\n\n Register an event handler for the event `name`.\n\n **/\n function on(name, handler) {\n var handlers;\n\n name = normalize(name);\n handlers = registry[name];\n\n if (handlers) {\n handlers.push(handler);\n }\n else {\n registry[name] = [ handler ];\n }\n\n return bus;\n }\n\n\n /**\n ### `mbus#once(name, handler)`\n\n Register an event handler for the event `name` that will only\n trigger once (i.e. the handler will be deregistered immediately after\n being triggered the first time).\n\n **/\n function once(name, handler) {\n function handleEvent() {\n var result = handler.apply(this, arguments);\n\n bus.off(name, handleEvent);\n return result;\n }\n\n handler._actual = handleEvent;\n return on(name, handleEvent);\n }\n\n if (typeof namespace == 'function') {\n parent = namespace;\n namespace = '';\n }\n\n namespace = normalize(namespace || '');\n\n bus.clear = bus.removeAllListeners = clear;\n bus.feed = feed;\n bus.on = bus.addListener = on;\n bus.once = once;\n bus.off = bus.removeListener = off;\n bus.parent = parent || (namespace && createBus());\n\n return bus;\n};\n","exports.id = \nfunction (item) {\n return item\n}\n\nexports.prop = \nfunction (map) { \n if('string' == typeof map) {\n var key = map\n return function (data) { return data[key] }\n }\n return map\n}\n\nexports.tester = function (test) {\n if(!test) return exports.id\n if('object' === typeof test\n && 'function' === typeof test.test)\n return test.test.bind(test)\n return exports.prop(test) || exports.id\n}\n\nexports.addPipe = addPipe\n\nfunction addPipe(read) {\n if('function' !== typeof read)\n return read\n\n read.pipe = read.pipe || function (reader) {\n if('function' != typeof reader)\n throw new Error('must pipe to reader')\n return addPipe(reader(read))\n }\n read.type = 'Source'\n return read\n}\n\nvar Source =\nexports.Source =\nfunction Source (createRead) {\n function s() {\n var args = [].slice.call(arguments)\n return addPipe(createRead.apply(null, args))\n }\n s.type = 'Source'\n return s\n}\n\n\nvar Through =\nexports.Through = \nfunction (createRead) {\n return function () {\n var args = [].slice.call(arguments)\n var piped = []\n function reader (read) {\n args.unshift(read)\n read = createRead.apply(null, args)\n while(piped.length)\n read = piped.shift()(read)\n return read\n //pipeing to from this reader should compose...\n }\n reader.pipe = function (read) {\n piped.push(read) \n if(read.type === 'Source')\n throw new Error('cannot pipe ' + reader.type + ' to Source')\n reader.type = read.type === 'Sink' ? 'Sink' : 'Through'\n return reader\n }\n reader.type = 'Through'\n return reader\n }\n}\n\nvar Sink =\nexports.Sink = \nfunction Sink(createReader) {\n return function () {\n var args = [].slice.call(arguments)\n if(!createReader)\n throw new Error('must be createReader function')\n function s (read) {\n args.unshift(read)\n return createReader.apply(null, args)\n }\n s.type = 'Sink'\n return s\n }\n}\n\n\nexports.maybeSink = \nexports.maybeDrain = \nfunction (createSink, cb) {\n if(!cb)\n return Through(function (read) {\n var ended\n return function (close, cb) {\n if(close) return read(close, cb)\n if(ended) return cb(ended)\n\n createSink(function (err, data) {\n ended = err || true\n if(!err) cb(null, data)\n else cb(ended)\n }) (read)\n }\n })()\n\n return Sink(function (read) {\n return createSink(cb) (read)\n })()\n}\n\n","/**\n # rtc-pluggable-signaller\n\n By using `rtc-pluggable-signaller` in your code, you provide the ability\n for your package to customize which signalling client it uses (and\n thus have significant control) over how signalling operates in your\n environment.\n\n ## How it Works\n\n The pluggable signaller looks in the provided `opts` for a `signaller`\n attribute. If the value of this attribute is a string, then it is\n assumed that you wish to use the default\n [`rtc-signaller`](https://github.com/rtc-io/rtc-signaller) in your\n package. If, however, it is not a string value then it will be passed\n straight back as the signaller (assuming that you have provided an\n object that is compliant with the rtc.io signalling API).\n\n**/\nmodule.exports = function(opts) {\n var signaller = (opts || {}).signaller;\n var messenger = (opts || {}).messenger || require('rtc-switchboard-messenger');\n\n if (typeof signaller == 'string' || (signaller instanceof String)) {\n return require('rtc-signaller')(messenger(signaller), opts);\n }\n\n return signaller;\n};\n","var extend = require('cog/extend');\n\n/**\n # rtc-switchboard-messenger\n\n A specialised version of\n [`messenger-ws`](https://github.com/DamonOehlman/messenger-ws) designed to\n connect to [`rtc-switchboard`](http://github.com/rtc-io/rtc-switchboard)\n instances.\n\n**/\nmodule.exports = function(switchboard, opts) {\n return require('messenger-ws')(switchboard, extend({\n endpoints: ['/primus', '/']\n }, opts));\n};\n","var WebSocket = require('ws');\nvar wsurl = require('wsurl');\nvar ps = require('pull-ws');\nvar defaults = require('cog/defaults');\nvar reTrailingSlash = /\\/$/;\n\n/**\n # messenger-ws\n\n This is a simple messaging implementation for sending and receiving data\n via websockets.\n\n Follows the [messenger-archetype](https://github.com/DamonOehlman/messenger-archetype)\n\n ## Example Usage\n\n <<< examples/simple.js\n\n**/\nmodule.exports = function(url, opts) {\n var timeout = (opts || {}).timeout || 1000;\n var endpoints = ((opts || {}).endpoints || ['/']).map(function(endpoint) {\n return url.replace(reTrailingSlash, '') + endpoint;\n });\n\n function connect(callback) {\n var queue = [].concat(endpoints);\n var receivedData = false;\n var failTimer;\n var successTimer;\n var removeListener;\n\n function attemptNext() {\n var socket;\n\n function registerMessage(evt) {\n receivedData = true;\n removeListener.call(socket, 'message', registerMessage);\n }\n\n // if we have no more valid endpoints, then erorr out\n if (queue.length === 0) {\n return callback(new Error('Unable to connect to url: ' + url));\n }\n\n socket = new WebSocket(wsurl(queue.shift()));\n socket.addEventListener('error', handleError);\n socket.addEventListener('close', handleAbnormalClose);\n socket.addEventListener('open', function() {\n // create the source immediately to buffer any data\n var source = ps.source(socket, opts);\n\n // monitor data flowing from the socket\n socket.addEventListener('message', registerMessage);\n\n successTimer = setTimeout(function() {\n clearTimeout(failTimer);\n callback(null, source, ps.sink(socket, opts));\n }, 100);\n });\n\n removeListener = socket.removeEventListener || socket.removeListener;\n failTimer = setTimeout(attemptNext, timeout);\n }\n\n function handleAbnormalClose(evt) {\n // if this was a clean close do nothing\n if (evt.wasClean || receivedData || queue.length === 0) {\n clearTimeout(successTimer);\n clearTimeout(failTimer);\n return;\n }\n\n return handleError();\n }\n\n function handleError() {\n clearTimeout(successTimer);\n clearTimeout(failTimer);\n attemptNext();\n }\n\n attemptNext();\n }\n\n return connect;\n};\n","exports = module.exports = duplex;\n\nexports.source = require('./source');\nexports.sink = require('./sink');\n\nfunction duplex (ws, opts) {\n return {\n source: exports.source(ws),\n sink: exports.sink(ws, opts)\n };\n};\n","module.exports = function(socket, callback) {\n var remove = socket && (socket.removeEventListener || socket.removeListener);\n\n function cleanup () {\n if (typeof remove == 'function') {\n remove.call(socket, 'open', handleOpen);\n remove.call(socket, 'error', handleErr);\n }\n }\n\n function handleOpen(evt) {\n cleanup(); callback();\n }\n\n function handleErr (evt) {\n cleanup(); callback(evt);\n }\n\n // if the socket is closing or closed, return end\n if (socket.readyState >= 2) {\n return callback(true);\n }\n\n // if open, trigger the callback\n if (socket.readyState === 1) {\n return callback();\n }\n\n socket.addEventListener('open', handleOpen);\n socket.addEventListener('error', handleErr);\n};\n","var pull = require('pull-core');\nvar ready = require('./ready');\n\n/**\n ### `sink(socket, opts?)`\n\n Create a pull-stream `Sink` that will write data to the `socket`.\n\n <<< examples/write.js\n\n**/\nmodule.exports = pull.Sink(function(read, socket, opts) {\n opts = opts || {}\n var closeOnEnd = opts.closeOnEnd !== false;\n var onClose = 'function' === typeof opts ? opts : opts.onClose;\n\n function next(end, data) {\n // if the stream has ended, simply return\n if (end) {\n if (closeOnEnd && socket.readyState <= 1) {\n if(onClose)\n socket.addEventListener('close', function (ev) {\n if(ev.wasClean) onClose()\n else {\n var err = new Error('ws error')\n err.event = ev\n onClose(err)\n }\n });\n\n socket.close();\n }\n\n return;\n }\n\n // socket ready?\n ready(socket, function(end) {\n if (end) {\n return read(end, function () {});\n }\n\n socket.send(data);\n process.nextTick(function() {\n read(null, next);\n });\n });\n }\n\n read(null, next);\n});\n","var pull = require('pull-core');\nvar ready = require('./ready');\n\n/**\n ### `source(socket)`\n\n Create a pull-stream `Source` that will read data from the `socket`.\n\n <<< examples/read.js\n\n**/\nmodule.exports = pull.Source(function(socket) {\n var buffer = [];\n var receiver;\n var ended;\n\n socket.addEventListener('message', function(evt) {\n if (receiver) {\n return receiver(null, evt.data);\n }\n\n buffer.push(evt.data);\n });\n\n socket.addEventListener('close', function(evt) {\n if (ended) return;\n if (receiver) {\n return receiver(ended = true);\n }\n });\n\n socket.addEventListener('error', function (evt) {\n if (ended) return;\n ended = evt;\n if (receiver) {\n receiver(ended);\n }\n });\n\n function read(abort, cb) {\n receiver = null;\n\n //if stream has already ended.\n if (ended)\n return cb(ended)\n\n // if ended, abort\n if (abort) {\n //this will callback when socket closes\n receiver = cb\n return socket.close()\n }\n\n ready(socket, function(end) {\n if (end) {\n return cb(ended = end);\n }\n\n // read from the socket\n if (ended && ended !== true) {\n return cb(ended);\n }\n else if (buffer.length > 0) {\n return cb(null, buffer.shift());\n }\n else if (ended) {\n return cb(true);\n }\n\n receiver = cb;\n });\n };\n\n return read;\n});\n","\n/**\n * Module dependencies.\n */\n\nvar global = (function() { return this; })();\n\n/**\n * WebSocket constructor.\n */\n\nvar WebSocket = global.WebSocket || global.MozWebSocket;\n\n/**\n * Module exports.\n */\n\nmodule.exports = WebSocket ? ws : null;\n\n/**\n * WebSocket constructor.\n *\n * The third `opts` options object gets ignored in web browsers, since it's\n * non-standard, and throws a TypeError if passed to the constructor.\n * See: https://github.com/einaros/ws/issues/227\n *\n * @param {String} uri\n * @param {Array} protocols (optional)\n * @param {Object) opts (optional)\n * @api public\n */\n\nfunction ws(uri, protocols, opts) {\n var instance;\n if (protocols) {\n instance = new WebSocket(uri, protocols);\n } else {\n instance = new WebSocket(uri);\n }\n return instance;\n}\n\nif (WebSocket) ws.prototype = WebSocket.prototype;\n","var reHttpUrl = /^http(.*)$/;\n\n/**\n # wsurl\n\n Given a url (including protocol relative urls - i.e. `//`), generate an appropriate\n url for a WebSocket endpoint (`ws` or `wss`).\n\n ## Example Usage\n\n <<< examples/relative.js\n\n**/\n\nmodule.exports = function(url, opts) {\n var current = (opts || {}).current || (typeof location != 'undefined' && location.href);\n var currentProtocol = current && current.slice(0, current.indexOf(':'));\n var insecure = (opts || {}).insecure;\n var isRelative = url.slice(0, 2) == '//';\n var forceWS = (! currentProtocol) || currentProtocol === 'file:';\n\n if (isRelative) {\n return forceWS ?\n ((insecure ? 'ws:' : 'wss:') + url) :\n (currentProtocol.replace(reHttpUrl, 'ws$1') + ':' + url);\n }\n\n return url.replace(reHttpUrl, 'ws$1');\n};\n","module.exports = {\n // messenger events\n dataEvent: 'data',\n openEvent: 'open',\n closeEvent: 'close',\n errorEvent: 'error',\n\n // messenger functions\n writeMethod: 'write',\n closeMethod: 'close',\n\n // leave timeout (ms)\n leaveTimeout: 3000\n};\n","/* jshint node: true */\n'use strict';\n\nvar extend = require('cog/extend');\n\n/**\n #### announce\n\n ```\n /announce|%metadata%|{\"id\": \"...\", ... }\n ```\n\n When an announce message is received by the signaller, the attached\n object data is decoded and the signaller emits an `announce` message.\n\n**/\nmodule.exports = function(signaller) {\n\n function dataAllowed(data) {\n var cloned = extend({ allow: true }, data);\n signaller('peer:filter', data.id, cloned);\n\n return cloned.allow;\n }\n\n return function(args, messageType, srcData, srcState, isDM) {\n var data = args[0];\n var peer;\n\n // if we have valid data then process\n if (data && data.id && data.id !== signaller.id) {\n if (! dataAllowed(data)) {\n return;\n }\n // check to see if this is a known peer\n peer = signaller.peers.get(data.id);\n\n // trigger the peer connected event to flag that we know about a\n // peer connection. The peer has passed the \"filter\" check but may\n // be announced / updated depending on previous connection status\n signaller('peer:connected', data.id, data);\n\n // if the peer is existing, then update the data\n if (peer && (! peer.inactive)) {\n // update the data\n extend(peer.data, data);\n\n // trigger the peer update event\n return signaller('peer:update', data, srcData);\n }\n\n // create a new peer\n peer = {\n id: data.id,\n\n // initialise the local role index\n roleIdx: [data.id, signaller.id].sort().indexOf(data.id),\n\n // initialise the peer data\n data: {}\n };\n\n // initialise the peer data\n extend(peer.data, data);\n\n // reset inactivity state\n clearTimeout(peer.leaveTimer);\n peer.inactive = false;\n\n // set the peer data\n signaller.peers.set(data.id, peer);\n\n // if this is an initial announce message (no vector clock attached)\n // then send a announce reply\n if (signaller.autoreply && (! isDM)) {\n signaller\n .to(data.id)\n .send('/announce', signaller.attributes);\n }\n\n // emit a new peer announce event\n return signaller('peer:announce', data, peer);\n }\n };\n};\n","/* jshint node: true */\n'use strict';\n\n/**\n ### signaller message handlers\n\n**/\n\nmodule.exports = function(signaller, opts) {\n return {\n announce: require('./announce')(signaller, opts)\n };\n};\n","/* jshint node: true */\n'use strict';\n\nvar detect = require('rtc-core/detect');\nvar defaults = require('cog/defaults');\nvar extend = require('cog/extend');\nvar mbus = require('mbus');\nvar getable = require('cog/getable');\nvar uuid = require('cuid');\nvar pull = require('pull-stream');\nvar pushable = require('pull-pushable');\n\n// ready state constants\nvar RS_DISCONNECTED = 0;\nvar RS_CONNECTING = 1;\nvar RS_CONNECTED = 2;\n\n// initialise signaller metadata so we don't have to include the package.json\n// TODO: make this checkable with some kind of prepublish script\nvar metadata = {\n version: '5.2.4'\n};\n\n/**\n # rtc-signaller\n\n The `rtc-signaller` module provides a transportless signalling\n mechanism for WebRTC.\n\n ## Purpose\n\n <<< docs/purpose.md\n\n ## Getting Started\n\n While the signaller is capable of communicating by a number of different\n messengers (i.e. anything that can send and receive messages over a wire)\n it comes with support for understanding how to connect to an\n [rtc-switchboard](https://github.com/rtc-io/rtc-switchboard) out of the box.\n\n The following code sample demonstrates how:\n\n <<< examples/getting-started.js\n\n <<< docs/events.md\n\n <<< docs/signalflow-diagrams.md\n\n ## Reference\n\n The `rtc-signaller` module is designed to be used primarily in a functional\n way and when called it creates a new signaller that will enable\n you to communicate with other peers via your messaging network.\n\n ```js\n // create a signaller from something that knows how to send messages\n var signaller = require('rtc-signaller')(messenger);\n ```\n\n As demonstrated in the getting started guide, you can also pass through\n a string value instead of a messenger instance if you simply want to\n connect to an existing `rtc-switchboard` instance.\n\n**/\nmodule.exports = function(messenger, opts) {\n // get the autoreply setting\n var autoreply = (opts || {}).autoreply;\n var autoconnect = (opts || {}).autoconnect;\n var reconnect = (opts || {}).reconnect;\n\n // initialise the metadata\n var localMeta = {};\n\n // create the signaller\n var signaller = mbus('', (opts || {}).logger);\n\n // initialise the id\n var id = signaller.id = (opts || {}).id || uuid();\n\n // initialise the attributes\n var attributes = signaller.attributes = {\n browser: detect.browser,\n browserVersion: detect.browserVersion,\n id: id,\n agent: 'signaller@' + metadata.version\n };\n\n // create the peers map\n var peers = signaller.peers = getable({});\n\n // create the outbound message queue\n var queue = require('pull-pushable')();\n\n var processor;\n var announceTimer = 0;\n var readyState = RS_DISCONNECTED;\n\n function announceOnReconnect() {\n signaller.announce();\n }\n\n function bufferMessage(args) {\n queue.push(createDataLine(args));\n\n // if we are not connected (and should autoconnect), then attempt connection\n if (readyState === RS_DISCONNECTED && (autoconnect === undefined || autoconnect)) {\n connect();\n }\n }\n\n function createDataLine(args) {\n return args.map(prepareArg).join('|');\n }\n\n function createMetadata() {\n return extend({}, localMeta, { id: signaller.id });\n }\n\n function handleDisconnect() {\n if (reconnect === undefined || reconnect) {\n setTimeout(connect, 50);\n }\n }\n\n function prepareArg(arg) {\n if (typeof arg == 'object' && (! (arg instanceof String))) {\n return JSON.stringify(arg);\n }\n else if (typeof arg == 'function') {\n return null;\n }\n\n return arg;\n }\n\n /**\n ### `signaller.connect()`\n\n Manually connect the signaller using the supplied messenger.\n\n __NOTE:__ This should never have to be called if the default setting\n for `autoconnect` is used.\n **/\n var connect = signaller.connect = function() {\n // if we are already connecting then do nothing\n if (readyState === RS_CONNECTING) {\n return;\n }\n\n // initiate the messenger\n readyState = RS_CONNECTING;\n messenger(function(err, source, sink) {\n if (err) {\n readyState = RS_DISCONNECTED;\n return signaller('error', err);\n }\n\n // flag as connected\n readyState = RS_CONNECTED;\n\n // pass messages to the processor\n pull(\n source,\n\n // monitor disconnection\n pull.through(null, function() {\n readyState = RS_DISCONNECTED;\n signaller('disconnected');\n }),\n pull.drain(processor)\n );\n\n // pass the queue to the sink\n pull(queue, sink);\n\n // handle disconnection\n signaller.removeListener('disconnected', handleDisconnect);\n signaller.on('disconnected', handleDisconnect);\n\n // trigger the connected event\n signaller('connected');\n });\n };\n\n /**\n ### signaller#send(message, data*)\n\n Use the send function to send a message to other peers in the current\n signalling scope (if announced in a room this will be a room, otherwise\n broadcast to all peers connected to the signalling server).\n\n **/\n var send = signaller.send = function() {\n // iterate over the arguments and stringify as required\n // var metadata = { id: signaller.id };\n var args = [].slice.call(arguments);\n\n // inject the metadata\n args.splice(1, 0, createMetadata());\n bufferMessage(args);\n };\n\n /**\n ### announce(data?)\n\n The `announce` function of the signaller will pass an `/announce` message\n through the messenger network. When no additional data is supplied to\n this function then only the id of the signaller is sent to all active\n members of the messenging network.\n\n #### Joining Rooms\n\n To join a room using an announce call you simply provide the name of the\n room you wish to join as part of the data block that you annouce, for\n example:\n\n ```js\n signaller.announce({ room: 'testroom' });\n ```\n\n Signalling servers (such as\n [rtc-switchboard](https://github.com/rtc-io/rtc-switchboard)) will then\n place your peer connection into a room with other peers that have also\n announced in this room.\n\n Once you have joined a room, the server will only deliver messages that\n you `send` to other peers within that room.\n\n #### Providing Additional Announce Data\n\n There may be instances where you wish to send additional data as part of\n your announce message in your application. For instance, maybe you want\n to send an alias or nick as part of your announce message rather than just\n use the signaller's generated id.\n\n If for instance you were writing a simple chat application you could join\n the `webrtc` room and tell everyone your name with the following announce\n call:\n\n ```js\n signaller.announce({\n room: 'webrtc',\n nick: 'Damon'\n });\n ```\n\n #### Announcing Updates\n\n The signaller is written to distinguish between initial peer announcements\n and peer data updates (see the docs on the announce handler below). As\n such it is ok to provide any data updates using the announce method also.\n\n For instance, I could send a status update as an announce message to flag\n that I am going offline:\n\n ```js\n signaller.announce({ status: 'offline' });\n ```\n\n **/\n signaller.announce = function(data, sender) {\n\n function sendAnnounce() {\n (sender || send)('/announce', attributes);\n signaller('local:announce', attributes);\n }\n\n // if we are already connected, then ensure we announce on reconnect\n if (readyState === RS_CONNECTED) {\n // always announce on reconnect\n signaller.removeListener('connected', announceOnReconnect);\n signaller.on('connected', announceOnReconnect);\n }\n\n clearTimeout(announceTimer);\n\n // update internal attributes\n extend(attributes, data, { id: signaller.id });\n\n // send the attributes over the network\n return announceTimer = setTimeout(sendAnnounce, (opts || {}).announceDelay || 10);\n };\n\n /**\n ### isMaster(targetId)\n\n A simple function that indicates whether the local signaller is the master\n for it's relationship with peer signaller indicated by `targetId`. Roles\n are determined at the point at which signalling peers discover each other,\n and are simply worked out by whichever peer has the lowest signaller id\n when lexigraphically sorted.\n\n For example, if we have two signaller peers that have discovered each\n others with the following ids:\n\n - `b11f4fd0-feb5-447c-80c8-c51d8c3cced2`\n - `8a07f82e-49a5-4b9b-a02e-43d911382be6`\n\n They would be assigned roles:\n\n - `b11f4fd0-feb5-447c-80c8-c51d8c3cced2`\n - `8a07f82e-49a5-4b9b-a02e-43d911382be6` (master)\n\n **/\n signaller.isMaster = function(targetId) {\n var peer = peers.get(targetId);\n\n return peer && peer.roleIdx !== 0;\n };\n\n /**\n ### leave()\n\n Tell the signalling server we are leaving. Calling this function is\n usually not required though as the signalling server should issue correct\n `/leave` messages when it detects a disconnect event.\n\n **/\n signaller.leave = signaller.close = function() {\n // send the leave signal\n send('/leave', { id: id });\n\n // stop announcing on reconnect\n signaller.removeListener('disconnected', handleDisconnect);\n signaller.removeListener('connected', announceOnReconnect);\n\n // end our current queue\n queue.end();\n\n // create a new queue to buffer new messages\n queue = pushable();\n\n // set connected to false\n readyState = RS_DISCONNECTED;\n };\n\n /**\n ### metadata(data?)\n\n Get (pass no data) or set the metadata that is passed through with each\n request sent by the signaller.\n\n __NOTE:__ Regardless of what is passed to this function, metadata\n generated by the signaller will **always** include the id of the signaller\n and this cannot be modified.\n **/\n signaller.metadata = function(data) {\n console.warn('metadata is deprecated, please do not use');\n\n if (arguments.length === 0) {\n return extend({}, localMeta);\n }\n\n localMeta = extend({}, data);\n };\n\n /**\n ### to(targetId)\n\n Use the `to` function to send a message to the specified target peer.\n A large parge of negotiating a WebRTC peer connection involves direct\n communication between two parties which must be done by the signalling\n server. The `to` function provides a simple way to provide a logical\n communication channel between the two parties:\n\n ```js\n var send = signaller.to('e95fa05b-9062-45c6-bfa2-5055bf6625f4').send;\n\n // create an offer on a local peer connection\n pc.createOffer(\n function(desc) {\n // set the local description using the offer sdp\n // if this occurs successfully send this to our peer\n pc.setLocalDescription(\n desc,\n function() {\n send('/sdp', desc);\n },\n handleFail\n );\n },\n handleFail\n );\n ```\n\n **/\n signaller.to = function(targetId) {\n // create a sender that will prepend messages with /to|targetId|\n var sender = function() {\n // get the peer (yes when send is called to make sure it hasn't left)\n var peer = signaller.peers.get(targetId);\n var args;\n\n if (! peer) {\n throw new Error('Unknown peer: ' + targetId);\n }\n\n // if the peer is inactive, then abort\n if (peer.inactive) {\n return;\n }\n\n args = [\n '/to',\n targetId\n ].concat([].slice.call(arguments));\n\n // inject metadata\n args.splice(3, 0, createMetadata());\n bufferMessage(args);\n };\n\n return {\n announce: function(data) {\n return signaller.announce(data, sender);\n },\n\n send: sender,\n };\n };\n\n // initialise opts defaults\n opts = defaults({}, opts, require('./defaults'));\n\n // set the autoreply flag\n signaller.autoreply = autoreply === undefined || autoreply;\n\n // create the processor\n signaller.process = processor = require('./processor')(signaller, opts);\n\n // autoconnect\n if (autoconnect === undefined || autoconnect) {\n connect();\n }\n\n return signaller;\n};\n","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n * \n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\n/*global window, navigator, document, require, process, module */\n(function (app) {\n 'use strict';\n var namespace = 'cuid',\n c = 0,\n blockSize = 4,\n base = 36,\n discreteValues = Math.pow(base, blockSize),\n\n pad = function pad(num, size) {\n var s = \"000000000\" + num;\n return s.substr(s.length-size);\n },\n\n randomBlock = function randomBlock() {\n return pad((Math.random() *\n discreteValues << 0)\n .toString(base), blockSize);\n },\n\n safeCounter = function () {\n c = (c < discreteValues) ? c : 0;\n c++; // this is not subliminal\n return c - 1;\n },\n\n api = function cuid() {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c', // hard-coded allows for sequential access\n\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = (new Date().getTime()).toString(base),\n\n // Prevent same-machine collisions.\n counter,\n\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n fingerprint = api.fingerprint(),\n\n // Grab some more chars from Math.random()\n random = randomBlock() + randomBlock();\n\n counter = pad(safeCounter().toString(base), blockSize);\n\n return (letter + timestamp + counter + fingerprint + random);\n };\n\n api.slug = function slug() {\n var date = new Date().getTime().toString(36),\n counter,\n print = api.fingerprint().slice(0,1) +\n api.fingerprint().slice(-1),\n random = randomBlock().slice(-2);\n\n counter = safeCounter().toString(36).slice(-4);\n\n return date.slice(-2) + \n counter + print + random;\n };\n\n api.globalCount = function globalCount() {\n // We want to cache the results of this\n var cache = (function calc() {\n var i,\n count = 0;\n\n for (i in window) {\n count++;\n }\n\n return count;\n }());\n\n api.globalCount = function () { return cache; };\n return cache;\n };\n\n api.fingerprint = function browserPrint() {\n return pad((navigator.mimeTypes.length +\n navigator.userAgent.length).toString(36) +\n api.globalCount().toString(36), 4);\n };\n\n // don't change anything from here down.\n if (app.register) {\n app.register(namespace, api);\n } else if (typeof module !== 'undefined') {\n module.exports = api;\n } else {\n app[namespace] = api;\n }\n\n}(this.applitude || this));\n","var pull = require('pull-stream')\n\nmodule.exports = pull.Source(function (onClose) {\n var buffer = [], cbs = [], waiting = [], ended\n\n function drain() {\n var l\n while(waiting.length && ((l = buffer.length) || ended)) {\n var data = buffer.shift()\n var cb = cbs.shift()\n waiting.shift()(l ? null : ended, data)\n cb && cb(ended === true ? null : ended)\n }\n }\n\n function read (end, cb) {\n ended = ended || end\n waiting.push(cb)\n drain()\n if(ended)\n onClose && onClose(ended === true ? null : ended)\n }\n\n read.push = function (data, cb) {\n if(ended)\n return cb && cb(ended === true ? null : ended)\n buffer.push(data); cbs.push(cb)\n drain()\n }\n\n read.end = function (end, cb) {\n if('function' === typeof end)\n cb = end, end = true\n ended = ended || end || true;\n if(cb) cbs.push(cb)\n drain()\n if(ended)\n onClose && onClose(ended === true ? null : ended)\n }\n\n return read\n})\n\n","\nvar sources = require('./sources')\nvar sinks = require('./sinks')\nvar throughs = require('./throughs')\nvar u = require('pull-core')\n\nfor(var k in sources)\n exports[k] = u.Source(sources[k])\n\nfor(var k in throughs)\n exports[k] = u.Through(throughs[k])\n\nfor(var k in sinks)\n exports[k] = u.Sink(sinks[k])\n\nvar maybe = require('./maybe')(exports)\n\nfor(var k in maybe)\n exports[k] = maybe[k]\n\nexports.Duplex = \nexports.Through = exports.pipeable = u.Through\nexports.Source = exports.pipeableSource = u.Source\nexports.Sink = exports.pipeableSink = u.Sink\n\n\n","var u = require('pull-core')\nvar prop = u.prop\nvar id = u.id\nvar maybeSink = u.maybeSink\n\nmodule.exports = function (pull) {\n\n var exports = {}\n var drain = pull.drain\n\n var find = \n exports.find = function (test, cb) {\n return maybeSink(function (cb) {\n var ended = false\n if(!cb)\n cb = test, test = id\n else\n test = prop(test) || id\n\n return drain(function (data) {\n if(test(data)) {\n ended = true\n cb(null, data)\n return false\n }\n }, function (err) {\n if(ended) return //already called back\n cb(err === true ? null : err, null)\n })\n\n }, cb)\n }\n\n var reduce = exports.reduce = \n function (reduce, acc, cb) {\n \n return maybeSink(function (cb) {\n return drain(function (data) {\n acc = reduce(acc, data)\n }, function (err) {\n cb(err, acc)\n })\n\n }, cb)\n }\n\n var collect = exports.collect = exports.writeArray =\n function (cb) {\n return reduce(function (arr, item) {\n arr.push(item)\n return arr\n }, [], cb)\n }\n\n return exports\n}\n","var drain = exports.drain = function (read, op, done) {\n\n ;(function next() {\n var loop = true, cbed = false\n while(loop) {\n cbed = false\n read(null, function (end, data) {\n cbed = true\n if(end) {\n loop = false\n done && done(end === true ? null : end)\n }\n else if(op && false === op(data)) {\n loop = false\n read(true, done || function () {})\n }\n else if(!loop){\n next()\n }\n })\n if(!cbed) {\n loop = false\n return\n }\n }\n })()\n}\n\nvar onEnd = exports.onEnd = function (read, done) {\n return drain(read, null, done)\n}\n\nvar log = exports.log = function (read, done) {\n return drain(read, function (data) {\n console.log(data)\n }, done)\n}\n\n","\nvar keys = exports.keys =\nfunction (object) {\n return values(Object.keys(object))\n}\n\nvar once = exports.once =\nfunction (value) {\n return function (abort, cb) {\n if(abort) return cb(abort)\n if(value != null) {\n var _value = value; value = null\n cb(null, _value)\n } else\n cb(true)\n }\n}\n\nvar values = exports.values = exports.readArray =\nfunction (array) {\n if(!Array.isArray(array))\n array = Object.keys(array).map(function (k) {\n return array[k]\n })\n var i = 0\n return function (end, cb) {\n if(end)\n return cb && cb(end) \n cb(i >= array.length || null, array[i++])\n }\n}\n\n\nvar count = exports.count = \nfunction (max) {\n var i = 0; max = max || Infinity\n return function (end, cb) {\n if(end) return cb && cb(end)\n if(i > max)\n return cb(true)\n cb(null, i++)\n }\n}\n\nvar infinite = exports.infinite = \nfunction (generate) {\n generate = generate || Math.random\n return function (end, cb) {\n if(end) return cb && cb(end)\n return cb(null, generate())\n }\n}\n\nvar defer = exports.defer = function () {\n var _read, cbs = [], _end\n\n var read = function (end, cb) {\n if(!_read) {\n _end = end\n cbs.push(cb)\n } \n else _read(end, cb)\n }\n read.resolve = function (read) {\n if(_read) throw new Error('already resolved')\n _read = read\n if(!_read) throw new Error('no read cannot resolve!' + _read)\n while(cbs.length)\n _read(_end, cbs.shift())\n }\n read.abort = function(err) {\n read.resolve(function (_, cb) {\n cb(err || true)\n })\n }\n return read\n}\n\nvar empty = exports.empty = function () {\n return function (abort, cb) {\n cb(true)\n }\n}\n\nvar depthFirst = exports.depthFirst =\nfunction (start, createStream) {\n var reads = []\n\n reads.unshift(once(start))\n\n return function next (end, cb) {\n if(!reads.length)\n return cb(true)\n reads[0](end, function (end, data) {\n if(end) {\n //if this stream has ended, go to the next queue\n reads.shift()\n return next(null, cb)\n }\n reads.unshift(createStream(data))\n cb(end, data)\n })\n }\n}\n//width first is just like depth first,\n//but push each new stream onto the end of the queue\nvar widthFirst = exports.widthFirst = \nfunction (start, createStream) {\n var reads = []\n\n reads.push(once(start))\n\n return function next (end, cb) {\n if(!reads.length)\n return cb(true)\n reads[0](end, function (end, data) {\n if(end) {\n reads.shift()\n return next(null, cb)\n }\n reads.push(createStream(data))\n cb(end, data)\n })\n }\n}\n\n//this came out different to the first (strm)\n//attempt at leafFirst, but it's still a valid\n//topological sort.\nvar leafFirst = exports.leafFirst = \nfunction (start, createStream) {\n var reads = []\n var output = []\n reads.push(once(start))\n \n return function next (end, cb) {\n reads[0](end, function (end, data) {\n if(end) {\n reads.shift()\n if(!output.length)\n return cb(true)\n return cb(null, output.shift())\n }\n reads.unshift(createStream(data))\n output.unshift(data)\n next(null, cb)\n })\n }\n}\n\n","var u = require('pull-core')\nvar sources = require('./sources')\nvar sinks = require('./sinks')\n\nvar prop = u.prop\nvar id = u.id\nvar tester = u.tester\n\nvar map = exports.map = \nfunction (read, map) {\n map = prop(map) || id\n return function (end, cb) {\n read(end, function (end, data) {\n var data = !end ? map(data) : null\n cb(end, data)\n })\n }\n}\n\nvar asyncMap = exports.asyncMap =\nfunction (read, map) {\n if(!map) return read\n return function (end, cb) {\n if(end) return read(end, cb) //abort\n read(null, function (end, data) {\n if(end) return cb(end, data)\n map(data, cb)\n })\n }\n}\n\nvar paraMap = exports.paraMap =\nfunction (read, map, width) {\n if(!map) return read\n var ended = false, queue = [], _cb\n\n function drain () {\n if(!_cb) return\n var cb = _cb\n _cb = null\n if(queue.length)\n return cb(null, queue.shift())\n else if(ended && !n)\n return cb(ended)\n _cb = cb\n }\n\n function pull () {\n read(null, function (end, data) {\n if(end) {\n ended = end\n return drain()\n }\n n++\n map(data, function (err, data) {\n n--\n\n queue.push(data)\n drain()\n })\n\n if(n < width && !ended)\n pull()\n })\n }\n\n var n = 0\n return function (end, cb) {\n if(end) return read(end, cb) //abort\n //continue to read while there are less than 3 maps in flight\n _cb = cb\n if(queue.length || ended)\n pull(), drain()\n else pull()\n }\n return highWaterMark(asyncMap(read, map), width)\n}\n\nvar filter = exports.filter =\nfunction (read, test) {\n //regexp\n test = tester(test)\n return function next (end, cb) {\n read(end, function (end, data) {\n if(!end && !test(data))\n return next(end, cb)\n cb(end, data)\n })\n }\n}\n\nvar filterNot = exports.filterNot =\nfunction (read, test) {\n test = tester(test)\n return filter(read, function (e) {\n return !test(e)\n })\n}\n\nvar through = exports.through = \nfunction (read, op, onEnd) {\n var a = false\n function once (abort) {\n if(a || !onEnd) return\n a = true\n onEnd(abort === true ? null : abort)\n }\n\n return function (end, cb) {\n if(end) once(end)\n return read(end, function (end, data) {\n if(!end) op && op(data)\n else once(end)\n cb(end, data)\n })\n }\n}\n\nvar take = exports.take =\nfunction (read, test) {\n var ended = false\n if('number' === typeof test) {\n var n = test; test = function () {\n return n --\n }\n }\n\n return function (end, cb) {\n if(ended) return cb(ended)\n if(ended = end) return read(ended, cb)\n\n read(null, function (end, data) {\n if(ended = ended || end) return cb(ended)\n if(!test(data)) {\n ended = true\n read(true, function (end, data) {\n cb(ended, data)\n })\n }\n else\n cb(null, data)\n })\n }\n}\n\nvar unique = exports.unique = function (read, field, invert) {\n field = prop(field) || id\n var seen = {}\n return filter(read, function (data) {\n var key = field(data)\n if(seen[key]) return !!invert //false, by default\n else seen[key] = true\n return !invert //true by default\n })\n}\n\nvar nonUnique = exports.nonUnique = function (read, field) {\n return unique(read, field, true)\n}\n\nvar group = exports.group =\nfunction (read, size) {\n var ended; size = size || 5\n var queue = []\n\n return function (end, cb) {\n //this means that the upstream is sending an error.\n if(end) return read(ended = end, cb)\n //this means that we read an end before.\n if(ended) return cb(ended)\n\n read(null, function next(end, data) {\n if(ended = ended || end) {\n if(!queue.length)\n return cb(ended)\n\n var _queue = queue; queue = []\n return cb(null, _queue)\n }\n queue.push(data)\n if(queue.length < size)\n return read(null, next)\n\n var _queue = queue; queue = []\n cb(null, _queue)\n })\n }\n}\n\nvar flatten = exports.flatten = function (read) {\n var _read\n return function (abort, cb) {\n if(_read) nextChunk()\n else nextStream()\n\n function nextChunk () {\n _read(null, function (end, data) {\n if(end) nextStream()\n else cb(null, data)\n })\n }\n function nextStream () {\n read(null, function (end, stream) {\n if(end)\n return cb(end)\n if(Array.isArray(stream))\n stream = sources.values(stream)\n else if('function' != typeof stream)\n throw new Error('expected stream of streams')\n \n _read = stream\n nextChunk()\n })\n }\n }\n}\n\nvar prepend =\nexports.prepend =\nfunction (read, head) {\n\n return function (abort, cb) {\n if(head !== null) {\n if(abort)\n return read(abort, cb)\n var _head = head\n head = null\n cb(null, _head)\n } else {\n read(abort, cb)\n }\n }\n\n}\n\n//var drainIf = exports.drainIf = function (op, done) {\n// sinks.drain(\n//}\n\nvar _reduce = exports._reduce = function (read, reduce, initial) {\n return function (close, cb) {\n if(close) return read(close, cb)\n if(ended) return cb(ended)\n\n sinks.drain(function (item) {\n initial = reduce(initial, item)\n }, function (err, data) {\n ended = err || true\n if(!err) cb(null, initial)\n else cb(ended)\n })\n (read)\n }\n}\n\nvar nextTick = process.nextTick\n\nvar highWaterMark = exports.highWaterMark = \nfunction (read, highWaterMark) {\n var buffer = [], waiting = [], ended, reading = false\n highWaterMark = highWaterMark || 10\n\n function readAhead () {\n while(waiting.length && (buffer.length || ended))\n waiting.shift()(ended, ended ? null : buffer.shift())\n }\n\n function next () {\n if(ended || reading || buffer.length >= highWaterMark)\n return\n reading = true\n return read(ended, function (end, data) {\n reading = false\n ended = ended || end\n if(data != null) buffer.push(data)\n \n next(); readAhead()\n })\n }\n\n nextTick(next)\n\n return function (end, cb) {\n ended = ended || end\n waiting.push(cb)\n\n next(); readAhead()\n }\n}\n\n\n\n","var sources = require('./sources')\nvar sinks = require('./sinks')\nvar throughs = require('./throughs')\nvar u = require('pull-core')\n\nfunction isFunction (fun) {\n return 'function' === typeof fun\n}\n\nfunction isReader (fun) {\n return fun && (fun.type === \"Through\" || fun.length === 1)\n}\nvar exports = module.exports = function pull () {\n var args = [].slice.call(arguments)\n\n if(isReader(args[0]))\n return function (read) {\n args.unshift(read)\n return pull.apply(null, args)\n }\n\n var read = args.shift()\n\n //if the first function is a duplex stream,\n //pipe from the source.\n if(isFunction(read.source))\n read = read.source\n\n function next () {\n var s = args.shift()\n\n if(null == s)\n return next()\n\n if(isFunction(s)) return s\n\n return function (read) {\n s.sink(read)\n //this supports pipeing through a duplex stream\n //pull(a, b, a) \"telephone style\".\n //if this stream is in the a (first & last position)\n //s.source will have already been used, but this should never be called\n //so that is okay.\n return s.source\n }\n }\n\n while(args.length)\n read = next() (read)\n\n return read\n}\n\n\nfor(var k in sources)\n exports[k] = u.Source(sources[k])\n\nfor(var k in throughs)\n exports[k] = u.Through(throughs[k])\n\nfor(var k in sinks)\n exports[k] = u.Sink(sinks[k])\n\nvar maybe = require('./maybe')(exports)\n\nfor(var k in maybe)\n exports[k] = maybe[k]\n\nexports.Duplex = \nexports.Through = exports.pipeable = u.Through\nexports.Source = exports.pipeableSource = u.Source\nexports.Sink = exports.pipeableSink = u.Sink\n\n\n","var u = require('pull-core')\nvar prop = u.prop\nvar id = u.id\nvar maybeSink = u.maybeSink\n\nmodule.exports = function (pull) {\n\n var exports = {}\n var drain = pull.drain\n\n var find =\n exports.find = function (test, cb) {\n return maybeSink(function (cb) {\n var ended = false\n if(!cb)\n cb = test, test = id\n else\n test = prop(test) || id\n\n return drain(function (data) {\n if(test(data)) {\n ended = true\n cb(null, data)\n return false\n }\n }, function (err) {\n if(ended) return //already called back\n cb(err === true ? null : err, null)\n })\n\n }, cb)\n }\n\n var reduce = exports.reduce =\n function (reduce, acc, cb) {\n\n return maybeSink(function (cb) {\n return drain(function (data) {\n acc = reduce(acc, data)\n }, function (err) {\n cb(err, acc)\n })\n\n }, cb)\n }\n\n var collect = exports.collect = exports.writeArray =\n function (cb) {\n return reduce(function (arr, item) {\n arr.push(item)\n return arr\n }, [], cb)\n }\n\n var concat = exports.concat =\n function (cb) {\n return reduce(function (a, b) {\n return a + b\n }, '', cb)\n }\n\n return exports\n}\n","var drain = exports.drain = function (read, op, done) {\n\n ;(function next() {\n var loop = true, cbed = false\n while(loop) {\n cbed = false\n read(null, function (end, data) {\n cbed = true\n if(end) {\n loop = false\n if(done) done(end === true ? null : end)\n else if(end && end !== true)\n throw end\n }\n else if(op && false === op(data)) {\n loop = false\n read(true, done || function () {})\n }\n else if(!loop){\n next()\n }\n })\n if(!cbed) {\n loop = false\n return\n }\n }\n })()\n}\n\nvar onEnd = exports.onEnd = function (read, done) {\n return drain(read, null, done)\n}\n\nvar log = exports.log = function (read, done) {\n return drain(read, function (data) {\n console.log(data)\n }, done)\n}\n\n","\nvar keys = exports.keys =\nfunction (object) {\n return values(Object.keys(object))\n}\n\nvar once = exports.once =\nfunction (value) {\n return function (abort, cb) {\n if(abort) return cb(abort)\n if(value != null) {\n var _value = value; value = null\n cb(null, _value)\n } else\n cb(true)\n }\n}\n\nvar values = exports.values = exports.readArray =\nfunction (array) {\n if(!Array.isArray(array))\n array = Object.keys(array).map(function (k) {\n return array[k]\n })\n var i = 0\n return function (end, cb) {\n if(end)\n return cb && cb(end)\n cb(i >= array.length || null, array[i++])\n }\n}\n\n\nvar count = exports.count =\nfunction (max) {\n var i = 0; max = max || Infinity\n return function (end, cb) {\n if(end) return cb && cb(end)\n if(i > max)\n return cb(true)\n cb(null, i++)\n }\n}\n\nvar infinite = exports.infinite =\nfunction (generate) {\n generate = generate || Math.random\n return function (end, cb) {\n if(end) return cb && cb(end)\n return cb(null, generate())\n }\n}\n\nvar defer = exports.defer = function () {\n var _read, cbs = [], _end\n\n var read = function (end, cb) {\n if(!_read) {\n _end = end\n cbs.push(cb)\n } \n else _read(end, cb)\n }\n read.resolve = function (read) {\n if(_read) throw new Error('already resolved')\n _read = read\n if(!_read) throw new Error('no read cannot resolve!' + _read)\n while(cbs.length)\n _read(_end, cbs.shift())\n }\n read.abort = function(err) {\n read.resolve(function (_, cb) {\n cb(err || true)\n })\n }\n return read\n}\n\nvar empty = exports.empty = function () {\n return function (abort, cb) {\n cb(true)\n }\n}\n\nvar error = exports.error = function (err) {\n return function (abort, cb) {\n cb(err)\n }\n}\n\nvar depthFirst = exports.depthFirst =\nfunction (start, createStream) {\n var reads = []\n\n reads.unshift(once(start))\n\n return function next (end, cb) {\n if(!reads.length)\n return cb(true)\n reads[0](end, function (end, data) {\n if(end) {\n //if this stream has ended, go to the next queue\n reads.shift()\n return next(null, cb)\n }\n reads.unshift(createStream(data))\n cb(end, data)\n })\n }\n}\n//width first is just like depth first,\n//but push each new stream onto the end of the queue\nvar widthFirst = exports.widthFirst =\nfunction (start, createStream) {\n var reads = []\n\n reads.push(once(start))\n\n return function next (end, cb) {\n if(!reads.length)\n return cb(true)\n reads[0](end, function (end, data) {\n if(end) {\n reads.shift()\n return next(null, cb)\n }\n reads.push(createStream(data))\n cb(end, data)\n })\n }\n}\n\n//this came out different to the first (strm)\n//attempt at leafFirst, but it's still a valid\n//topological sort.\nvar leafFirst = exports.leafFirst =\nfunction (start, createStream) {\n var reads = []\n var output = []\n reads.push(once(start))\n\n return function next (end, cb) {\n reads[0](end, function (end, data) {\n if(end) {\n reads.shift()\n if(!output.length)\n return cb(true)\n return cb(null, output.shift())\n }\n reads.unshift(createStream(data))\n output.unshift(data)\n next(null, cb)\n })\n }\n}\n\n","var u = require('pull-core')\nvar sources = require('./sources')\nvar sinks = require('./sinks')\n\nvar prop = u.prop\nvar id = u.id\nvar tester = u.tester\n\nvar map = exports.map =\nfunction (read, map) {\n map = prop(map) || id\n return function (abort, cb) {\n read(abort, function (end, data) {\n try {\n data = !end ? map(data) : null\n } catch (err) {\n return read(err, function () {\n return cb(err)\n })\n }\n cb(end, data)\n })\n }\n}\n\nvar asyncMap = exports.asyncMap =\nfunction (read, map) {\n if(!map) return read\n return function (end, cb) {\n if(end) return read(end, cb) //abort\n read(null, function (end, data) {\n if(end) return cb(end, data)\n map(data, cb)\n })\n }\n}\n\nvar paraMap = exports.paraMap =\nfunction (read, map, width) {\n if(!map) return read\n var ended = false, queue = [], _cb\n\n function drain () {\n if(!_cb) return\n var cb = _cb\n _cb = null\n if(queue.length)\n return cb(null, queue.shift())\n else if(ended && !n)\n return cb(ended)\n _cb = cb\n }\n\n function pull () {\n read(null, function (end, data) {\n if(end) {\n ended = end\n return drain()\n }\n n++\n map(data, function (err, data) {\n n--\n\n queue.push(data)\n drain()\n })\n\n if(n < width && !ended)\n pull()\n })\n }\n\n var n = 0\n return function (end, cb) {\n if(end) return read(end, cb) //abort\n //continue to read while there are less than 3 maps in flight\n _cb = cb\n if(queue.length || ended)\n pull(), drain()\n else pull()\n }\n return highWaterMark(asyncMap(read, map), width)\n}\n\nvar filter = exports.filter =\nfunction (read, test) {\n //regexp\n test = tester(test)\n return function next (end, cb) {\n var sync, loop = true\n while(loop) {\n loop = false\n sync = true\n read(end, function (end, data) {\n if(!end && !test(data))\n return sync ? loop = true : next(end, cb)\n cb(end, data)\n })\n sync = false\n }\n }\n}\n\nvar filterNot = exports.filterNot =\nfunction (read, test) {\n test = tester(test)\n return filter(read, function (e) {\n return !test(e)\n })\n}\n\nvar through = exports.through =\nfunction (read, op, onEnd) {\n var a = false\n function once (abort) {\n if(a || !onEnd) return\n a = true\n onEnd(abort === true ? null : abort)\n }\n\n return function (end, cb) {\n if(end) once(end)\n return read(end, function (end, data) {\n if(!end) op && op(data)\n else once(end)\n cb(end, data)\n })\n }\n}\n\nvar take = exports.take =\nfunction (read, test) {\n var ended = false\n if('number' === typeof test) {\n var n = test; test = function () {\n return n --\n }\n }\n\n return function (end, cb) {\n if(ended) return cb(ended)\n if(ended = end) return read(ended, cb)\n\n read(null, function (end, data) {\n if(ended = ended || end) return cb(ended)\n if(!test(data)) {\n ended = true\n read(true, function (end, data) {\n cb(ended, data)\n })\n }\n else\n cb(null, data)\n })\n }\n}\n\nvar unique = exports.unique = function (read, field, invert) {\n field = prop(field) || id\n var seen = {}\n return filter(read, function (data) {\n var key = field(data)\n if(seen[key]) return !!invert //false, by default\n else seen[key] = true\n return !invert //true by default\n })\n}\n\nvar nonUnique = exports.nonUnique = function (read, field) {\n return unique(read, field, true)\n}\n\nvar group = exports.group =\nfunction (read, size) {\n var ended; size = size || 5\n var queue = []\n\n return function (end, cb) {\n //this means that the upstream is sending an error.\n if(end) return read(ended = end, cb)\n //this means that we read an end before.\n if(ended) return cb(ended)\n\n read(null, function next(end, data) {\n if(ended = ended || end) {\n if(!queue.length)\n return cb(ended)\n\n var _queue = queue; queue = []\n return cb(null, _queue)\n }\n queue.push(data)\n if(queue.length < size)\n return read(null, next)\n\n var _queue = queue; queue = []\n cb(null, _queue)\n })\n }\n}\n\nvar flatten = exports.flatten = function (read) {\n var _read\n return function (abort, cb) {\n if(_read) nextChunk()\n else nextStream()\n\n function nextChunk () {\n _read(null, function (end, data) {\n if(end) nextStream()\n else cb(null, data)\n })\n }\n function nextStream () {\n read(null, function (end, stream) {\n if(end)\n return cb(end)\n if(Array.isArray(stream) || stream && 'object' === typeof stream)\n stream = sources.values(stream)\n else if('function' != typeof stream)\n throw new Error('expected stream of streams')\n _read = stream\n nextChunk()\n })\n }\n }\n}\n\nvar prepend =\nexports.prepend =\nfunction (read, head) {\n\n return function (abort, cb) {\n if(head !== null) {\n if(abort)\n return read(abort, cb)\n var _head = head\n head = null\n cb(null, _head)\n } else {\n read(abort, cb)\n }\n }\n\n}\n\n//var drainIf = exports.drainIf = function (op, done) {\n// sinks.drain(\n//}\n\nvar _reduce = exports._reduce = function (read, reduce, initial) {\n return function (close, cb) {\n if(close) return read(close, cb)\n if(ended) return cb(ended)\n\n sinks.drain(function (item) {\n initial = reduce(initial, item)\n }, function (err, data) {\n ended = err || true\n if(!err) cb(null, initial)\n else cb(ended)\n })\n (read)\n }\n}\n\nvar nextTick = process.nextTick\n\nvar highWaterMark = exports.highWaterMark =\nfunction (read, highWaterMark) {\n var buffer = [], waiting = [], ended, ending, reading = false\n highWaterMark = highWaterMark || 10\n\n function readAhead () {\n while(waiting.length && (buffer.length || ended))\n waiting.shift()(ended, ended ? null : buffer.shift())\n\n if (!buffer.length && ending) ended = ending;\n }\n\n function next () {\n if(ended || ending || reading || buffer.length >= highWaterMark)\n return\n reading = true\n return read(ended || ending, function (end, data) {\n reading = false\n ending = ending || end\n if(data != null) buffer.push(data)\n\n next(); readAhead()\n })\n }\n\n process.nextTick(next)\n\n return function (end, cb) {\n ended = ended || end\n waiting.push(cb)\n\n next(); readAhead()\n }\n}\n\nvar flatMap = exports.flatMap =\nfunction (read, mapper) {\n mapper = mapper || id\n var queue = [], ended\n\n return function (abort, cb) {\n if(queue.length) return cb(null, queue.shift())\n else if(ended) return cb(ended)\n\n read(abort, function next (end, data) {\n if(end) ended = end\n else {\n var add = mapper(data)\n while(add && add.length)\n queue.push(add.shift())\n }\n\n if(queue.length) cb(null, queue.shift())\n else if(ended) cb(ended)\n else read(null, next)\n })\n }\n}\n\n","/* jshint node: true */\n'use strict';\n\nvar jsonparse = require('cog/jsonparse');\n\n/**\n ### signaller process handling\n\n When a signaller's underling messenger emits a `data` event this is\n delegated to a simple message parser, which applies the following simple\n logic:\n\n - Is the message a `/to` message. If so, see if the message is for this\n signaller (checking the target id - 2nd arg). If so pass the\n remainder of the message onto the standard processing chain. If not,\n discard the message.\n\n - Is the message a command message (prefixed with a forward slash). If so,\n look for an appropriate message handler and pass the message payload on\n to it.\n\n - Finally, does the message match any patterns that we are listening for?\n If so, then pass the entire message contents onto the registered handler.\n**/\nmodule.exports = function(signaller, opts) {\n var handlers = require('./handlers')(signaller, opts);\n\n function sendEvent(parts, srcState, data) {\n // initialise the event name\n var evtName = 'message:' + parts[0].slice(1);\n\n // convert any valid json objects to json\n var args = parts.slice(2).map(jsonparse);\n\n signaller.apply(\n signaller,\n [evtName].concat(args).concat([srcState, data])\n );\n }\n\n return function(originalData) {\n var data = originalData;\n var isMatch = true;\n var parts;\n var handler;\n var srcData;\n var srcState;\n var isDirectMessage = false;\n\n // discard primus messages\n if (data && data.slice(0, 6) === 'primus') {\n return;\n }\n\n // force the id into string format so we can run length and comparison tests on it\n var id = signaller.id + '';\n\n // process /to messages\n if (data.slice(0, 3) === '/to') {\n isMatch = data.slice(4, id.length + 4) === id;\n if (isMatch) {\n parts = data.slice(5 + id.length).split('|').map(jsonparse);\n\n // get the source data\n isDirectMessage = true;\n\n // extract the vector clock and update the parts\n parts = parts.map(jsonparse);\n }\n }\n\n // if this is not a match, then bail\n if (! isMatch) {\n return;\n }\n\n // chop the data into parts\n signaller('rawdata', data);\n parts = parts || data.split('|').map(jsonparse);\n\n // if we have a specific handler for the action, then invoke\n if (typeof parts[0] == 'string') {\n // extract the metadata from the input data\n srcData = parts[1];\n\n // if we got data from ourself, then this is pretty dumb\n // but if we have then throw it away\n if (srcData && srcData.id === signaller.id) {\n return console.warn('got data from ourself, discarding');\n }\n\n // get the source state\n srcState = signaller.peers.get(srcData && srcData.id) || srcData;\n\n // handle commands\n if (parts[0].charAt(0) === '/') {\n // look for a handler for the message type\n handler = handlers[parts[0].slice(1)];\n\n if (typeof handler == 'function') {\n handler(\n parts.slice(2),\n parts[0].slice(1),\n srcData,\n srcState,\n isDirectMessage\n );\n }\n else {\n sendEvent(parts, srcState, originalData);\n }\n }\n // otherwise, emit data\n else {\n signaller(\n 'data',\n parts.slice(0, 1).concat(parts.slice(2)),\n srcData,\n srcState,\n isDirectMessage\n );\n }\n }\n };\n};\n","/* jshint node: true */\n'use strict';\n\nvar debug = require('cog/logger')('rtc/cleanup');\n\nvar CANNOT_CLOSE_STATES = [\n 'closed'\n];\n\nvar EVENTS_DECOUPLE_BC = [\n 'addstream',\n 'datachannel',\n 'icecandidate',\n 'negotiationneeded',\n 'removestream',\n 'signalingstatechange'\n];\n\nvar EVENTS_DECOUPLE_AC = [\n 'iceconnectionstatechange'\n];\n\n/**\n ### rtc-tools/cleanup\n\n ```\n cleanup(pc)\n ```\n\n The `cleanup` function is used to ensure that a peer connection is properly\n closed and ready to be cleaned up by the browser.\n\n**/\nmodule.exports = function(pc) {\n // see if we can close the connection\n var currentState = pc.iceConnectionState;\n var canClose = CANNOT_CLOSE_STATES.indexOf(currentState) < 0;\n\n function decouple(events) {\n events.forEach(function(evtName) {\n if (pc['on' + evtName]) {\n pc['on' + evtName] = null;\n }\n });\n }\n\n // decouple \"before close\" events\n decouple(EVENTS_DECOUPLE_BC);\n\n if (canClose) {\n debug('attempting connection close, current state: '+ pc.iceConnectionState);\n pc.close();\n }\n\n // remove the event listeners\n // after a short delay giving the connection time to trigger\n // close and iceconnectionstatechange events\n setTimeout(function() {\n decouple(EVENTS_DECOUPLE_AC);\n }, 100);\n};\n","/* jshint node: true */\n'use strict';\n\nvar mbus = require('mbus');\nvar queue = require('rtc-taskqueue');\nvar cleanup = require('./cleanup');\nvar monitor = require('./monitor');\nvar throttle = require('cog/throttle');\nvar pluck = require('whisk/pluck');\nvar pluckCandidate = pluck('candidate', 'sdpMid', 'sdpMLineIndex');\nvar CLOSED_STATES = [ 'closed', 'failed' ];\nvar CHECKING_STATES = [ 'checking' ];\n\n/**\n ### rtc-tools/couple\n\n #### couple(pc, targetId, signaller, opts?)\n\n Couple a WebRTC connection with another webrtc connection identified by\n `targetId` via the signaller.\n\n The following options can be provided in the `opts` argument:\n\n - `sdpfilter` (default: null)\n\n A simple function for filtering SDP as part of the peer\n connection handshake (see the Using Filters details below).\n\n ##### Example Usage\n\n ```js\n var couple = require('rtc/couple');\n\n couple(pc, '54879965-ce43-426e-a8ef-09ac1e39a16d', signaller);\n ```\n\n ##### Using Filters\n\n In certain instances you may wish to modify the raw SDP that is provided\n by the `createOffer` and `createAnswer` calls. This can be done by passing\n a `sdpfilter` function (or array) in the options. For example:\n\n ```js\n // run the sdp from through a local tweakSdp function.\n couple(pc, '54879965-ce43-426e-a8ef-09ac1e39a16d', signaller, {\n sdpfilter: tweakSdp\n });\n ```\n\n**/\nfunction couple(pc, targetId, signaller, opts) {\n var debugLabel = (opts || {}).debugLabel || 'rtc';\n var debug = require('cog/logger')(debugLabel + '/couple');\n\n // create a monitor for the connection\n var mon = monitor(pc, targetId, signaller, (opts || {}).logger);\n var emit = mbus('', mon);\n var reactive = (opts || {}).reactive;\n var endOfCandidates = true;\n\n // configure the time to wait between receiving a 'disconnect'\n // iceConnectionState and determining that we are closed\n var disconnectTimeout = (opts || {}).disconnectTimeout || 10000;\n var disconnectTimer;\n\n // initilaise the negotiation helpers\n var isMaster = signaller.isMaster(targetId);\n\n // initialise the processing queue (one at a time please)\n var q = queue(pc, opts);\n\n var createOrRequestOffer = throttle(function() {\n if (! isMaster) {\n return signaller.to(targetId).send('/negotiate');\n }\n\n q.createOffer();\n }, 100, { leading: false });\n\n var debounceOffer = throttle(q.createOffer, 100, { leading: false });\n\n function decouple() {\n debug('decoupling ' + signaller.id + ' from ' + targetId);\n\n // stop the monitor\n// mon.removeAllListeners();\n mon.stop();\n\n // cleanup the peerconnection\n cleanup(pc);\n\n // remove listeners\n signaller.removeListener('sdp', handleSdp);\n signaller.removeListener('candidate', handleCandidate);\n signaller.removeListener('negotiate', handleNegotiateRequest);\n\n // remove listeners (version >= 5)\n signaller.removeListener('message:sdp', handleSdp);\n signaller.removeListener('message:candidate', handleCandidate);\n signaller.removeListener('message:negotiate', handleNegotiateRequest);\n }\n\n function handleCandidate(data) {\n q.addIceCandidate(data);\n }\n\n function handleSdp(sdp, src) {\n emit('sdp.remote', sdp);\n\n // if the source is unknown or not a match, then don't process\n if ((! src) || (src.id !== targetId)) {\n return;\n }\n\n q.setRemoteDescription(sdp);\n }\n\n function handleConnectionClose() {\n debug('captured pc close, iceConnectionState = ' + pc.iceConnectionState);\n decouple();\n }\n\n function handleDisconnect() {\n debug('captured pc disconnect, monitoring connection status');\n\n // start the disconnect timer\n disconnectTimer = setTimeout(function() {\n debug('manually closing connection after disconnect timeout');\n cleanup(pc);\n }, disconnectTimeout);\n\n mon.on('statechange', handleDisconnectAbort);\n }\n\n function handleDisconnectAbort() {\n debug('connection state changed to: ' + pc.iceConnectionState);\n\n // if the state is checking, then do not reset the disconnect timer as\n // we are doing our own checking\n if (CHECKING_STATES.indexOf(pc.iceConnectionState) >= 0) {\n return;\n }\n\n resetDisconnectTimer();\n\n // if we have a closed or failed status, then close the connection\n if (CLOSED_STATES.indexOf(pc.iceConnectionState) >= 0) {\n return mon('closed');\n }\n\n mon.once('disconnect', handleDisconnect);\n }\n\n function handleLocalCandidate(evt) {\n var data = evt.candidate && pluckCandidate(evt.candidate);\n\n if (evt.candidate) {\n resetDisconnectTimer();\n emit('ice.local', data);\n signaller.to(targetId).send('/candidate', data);\n endOfCandidates = false;\n }\n else if (! endOfCandidates) {\n endOfCandidates = true;\n emit('ice.gathercomplete');\n signaller.to(targetId).send('/endofcandidates', {});\n }\n }\n\n function handleNegotiateRequest(src) {\n if (src.id === targetId) {\n emit('negotiate.request', src.id);\n debounceOffer();\n }\n }\n\n function resetDisconnectTimer() {\n mon.off('statechange', handleDisconnectAbort);\n\n // clear the disconnect timer\n debug('reset disconnect timer, state: ' + pc.iceConnectionState);\n clearTimeout(disconnectTimer);\n }\n\n // when regotiation is needed look for the peer\n if (reactive) {\n pc.onnegotiationneeded = function() {\n emit('negotiate.renegotiate');\n createOrRequestOffer();\n };\n }\n\n pc.onicecandidate = handleLocalCandidate;\n\n // when the task queue tells us we have sdp available, send that over the wire\n q.on('sdp.local', function(desc) {\n signaller.to(targetId).send('/sdp', desc);\n });\n\n // when we receive sdp, then\n signaller.on('sdp', handleSdp);\n signaller.on('candidate', handleCandidate);\n\n // listeners (signaller >= 5)\n signaller.on('message:sdp', handleSdp);\n signaller.on('message:candidate', handleCandidate);\n\n // if this is a master connection, listen for negotiate events\n if (isMaster) {\n signaller.on('negotiate', handleNegotiateRequest);\n signaller.on('message:negotiate', handleNegotiateRequest); // signaller >= 5\n }\n\n // when the connection closes, remove event handlers\n mon.once('closed', handleConnectionClose);\n mon.once('disconnected', handleDisconnect);\n\n // patch in the create offer functions\n mon.createOffer = createOrRequestOffer;\n\n return mon;\n}\n\nmodule.exports = couple;\n","/* jshint node: true */\n'use strict';\n\n/**\n ### rtc-tools/detect\n\n Provide the [rtc-core/detect](https://github.com/rtc-io/rtc-core#detect)\n functionality.\n**/\nmodule.exports = require('rtc-core/detect');\n","/* jshint node: true */\n'use strict';\n\nvar debug = require('cog/logger')('generators');\nvar detect = require('./detect');\nvar defaults = require('cog/defaults');\n\nvar mappings = {\n create: {\n dtls: function(c) {\n if (! detect.moz) {\n c.optional = (c.optional || []).concat({ DtlsSrtpKeyAgreement: true });\n }\n }\n }\n};\n\n/**\n ### rtc-tools/generators\n\n The generators package provides some utility methods for generating\n constraint objects and similar constructs.\n\n ```js\n var generators = require('rtc/generators');\n ```\n\n**/\n\n/**\n #### generators.config(config)\n\n Generate a configuration object suitable for passing into an W3C\n RTCPeerConnection constructor first argument, based on our custom config.\n\n In the event that you use short term authentication for TURN, and you want\n to generate new `iceServers` regularly, you can specify an iceServerGenerator\n that will be used prior to coupling. This generator should return a fully\n compliant W3C (RTCIceServer dictionary)[http://www.w3.org/TR/webrtc/#idl-def-RTCIceServer].\n\n If you pass in both a generator and iceServers, the iceServers _will be\n ignored and the generator used instead.\n**/\n\nexports.config = function(config) {\n var iceServerGenerator = (config || {}).iceServerGenerator;\n\n return defaults({}, config, {\n iceServers: typeof iceServerGenerator == 'function' ? iceServerGenerator() : []\n });\n};\n\n/**\n #### generators.connectionConstraints(flags, constraints)\n\n This is a helper function that will generate appropriate connection\n constraints for a new `RTCPeerConnection` object which is constructed\n in the following way:\n\n ```js\n var conn = new RTCPeerConnection(flags, constraints);\n ```\n\n In most cases the constraints object can be left empty, but when creating\n data channels some additional options are required. This function\n can generate those additional options and intelligently combine any\n user defined constraints (in `constraints`) with shorthand flags that\n might be passed while using the `rtc.createConnection` helper.\n**/\nexports.connectionConstraints = function(flags, constraints) {\n var generated = {};\n var m = mappings.create;\n var out;\n\n // iterate through the flags and apply the create mappings\n Object.keys(flags || {}).forEach(function(key) {\n if (m[key]) {\n m[key](generated);\n }\n });\n\n // generate the connection constraints\n out = defaults({}, constraints, generated);\n debug('generated connection constraints: ', out);\n\n return out;\n};\n","/* jshint node: true */\n\n'use strict';\n\n/**\n # rtc-tools\n\n The `rtc-tools` module does most of the heavy lifting within the\n [rtc.io](http://rtc.io) suite. Primarily it handles the logic of coupling\n a local `RTCPeerConnection` with it's remote counterpart via an\n [rtc-signaller](https://github.com/rtc-io/rtc-signaller) signalling\n channel.\n\n ## Getting Started\n\n If you decide that the `rtc-tools` module is a better fit for you than either\n [rtc-quickconnect](https://github.com/rtc-io/rtc-quickconnect) or\n [rtc](https://github.com/rtc-io/rtc) then the code snippet below\n will provide you a guide on how to get started using it in conjunction with\n the [rtc-signaller](https://github.com/rtc-io/rtc-signaller) (version 5.0 and above)\n and [rtc-media](https://github.com/rtc-io/rtc-media) modules:\n\n <<< examples/getting-started.js\n\n This code definitely doesn't cover all the cases that you need to consider\n (i.e. peers leaving, etc) but it should demonstrate how to:\n\n 1. Capture video and add it to a peer connection\n 2. Couple a local peer connection with a remote peer connection\n 3. Deal with the remote steam being discovered and how to render\n that to the local interface.\n\n ## Reference\n\n**/\n\nvar gen = require('./generators');\n\n// export detect\nvar detect = exports.detect = require('./detect');\nvar findPlugin = require('rtc-core/plugin');\n\n// export cog logger for convenience\nexports.logger = require('cog/logger');\n\n// export peer connection\nvar RTCPeerConnection =\nexports.RTCPeerConnection = detect('RTCPeerConnection');\n\n// add the couple utility\nexports.couple = require('./couple');\n\n/**\n ### createConnection\n\n ```\n createConnection(opts?, constraints?) => RTCPeerConnection\n ```\n\n Create a new `RTCPeerConnection` auto generating default opts as required.\n\n ```js\n var conn;\n\n // this is ok\n conn = rtc.createConnection();\n\n // and so is this\n conn = rtc.createConnection({\n iceServers: []\n });\n ```\n**/\nexports.createConnection = function(opts, constraints) {\n var plugin = findPlugin((opts || {}).plugins);\n var PeerConnection = (opts || {}).RTCPeerConnection || RTCPeerConnection;\n\n // generate the config based on options provided\n var config = gen.config(opts);\n\n // generate appropriate connection constraints\n constraints = gen.connectionConstraints(opts, constraints);\n\n if (plugin && typeof plugin.createConnection == 'function') {\n return plugin.createConnection(config, constraints);\n }\n\n return new PeerConnection(config, constraints);\n};\n","/* jshint node: true */\n'use strict';\n\nvar mbus = require('mbus');\n\n// define some state mappings to simplify the events we generate\nvar stateMappings = {\n completed: 'connected'\n};\n\n// define the events that we need to watch for peer connection\n// state changes\nvar peerStateEvents = [\n 'signalingstatechange',\n 'iceconnectionstatechange',\n];\n\n/**\n ### rtc-tools/monitor\n\n ```\n monitor(pc, targetId, signaller, parentBus) => mbus\n ```\n\n The monitor is a useful tool for determining the state of `pc` (an\n `RTCPeerConnection`) instance in the context of your application. The\n monitor uses both the `iceConnectionState` information of the peer\n connection and also the various\n [signaller events](https://github.com/rtc-io/rtc-signaller#signaller-events)\n to determine when the connection has been `connected` and when it has\n been `disconnected`.\n\n A monitor created `mbus` is returned as the result of a\n [couple](https://github.com/rtc-io/rtc#rtccouple) between a local peer\n connection and it's remote counterpart.\n\n**/\nmodule.exports = function(pc, targetId, signaller, parentBus) {\n var monitor = mbus('', parentBus);\n var state;\n\n function checkState() {\n var newState = getMappedState(pc.iceConnectionState);\n\n // flag the we had a state change\n monitor('statechange', pc, newState);\n\n // if the active state has changed, then send the appopriate message\n if (state !== newState) {\n monitor(newState);\n state = newState;\n }\n }\n\n function handleClose() {\n monitor('closed');\n }\n\n pc.onclose = handleClose;\n peerStateEvents.forEach(function(evtName) {\n pc['on' + evtName] = checkState;\n });\n\n monitor.stop = function() {\n pc.onclose = null;\n peerStateEvents.forEach(function(evtName) {\n pc['on' + evtName] = null;\n });\n };\n\n monitor.checkState = checkState;\n\n // if we haven't been provided a valid peer connection, abort\n if (! pc) {\n return monitor;\n }\n\n // determine the initial is active state\n state = getMappedState(pc.iceConnectionState);\n\n return monitor;\n};\n\n/* internal helpers */\n\nfunction getMappedState(state) {\n return stateMappings[state] || state;\n}\n","var detect = require('rtc-core/detect');\nvar findPlugin = require('rtc-core/plugin');\nvar PriorityQueue = require('priorityqueuejs');\nvar pluck = require('whisk/pluck');\nvar pluckSessionDesc = pluck('sdp', 'type');\n\n// some validation routines\nvar checkCandidate = require('rtc-validator/candidate');\n\n// the sdp cleaner\nvar sdpclean = require('rtc-sdpclean');\nvar parseSdp = require('rtc-sdp');\n\nvar PRIORITY_LOW = 100;\nvar PRIORITY_WAIT = 1000;\n\n// priority order (lower is better)\nvar DEFAULT_PRIORITIES = [\n 'candidate',\n 'setLocalDescription',\n 'setRemoteDescription',\n 'createAnswer',\n 'createOffer'\n];\n\n// define event mappings\nvar METHOD_EVENTS = {\n setLocalDescription: 'setlocaldesc',\n setRemoteDescription: 'setremotedesc',\n createOffer: 'offer',\n createAnswer: 'answer'\n};\n\nvar MEDIA_MAPPINGS = {\n data: 'application'\n};\n\n// define states in which we will attempt to finalize a connection on receiving a remote offer\nvar VALID_RESPONSE_STATES = ['have-remote-offer', 'have-local-pranswer'];\n\n/**\n # rtc-taskqueue\n\n This is a package that assists with applying actions to an `RTCPeerConnection`\n in as reliable order as possible. It is primarily used by the coupling logic\n of the [`rtc-tools`](https://github.com/rtc-io/rtc-tools).\n\n ## Example Usage\n\n For the moment, refer to the simple coupling test as an example of how to use\n this package (see below):\n\n <<< test/couple.js\n\n**/\nmodule.exports = function(pc, opts) {\n // create the task queue\n var queue = new PriorityQueue(orderTasks);\n var tq = require('mbus')('', (opts || {}).logger);\n\n // initialise task importance\n var priorities = (opts || {}).priorities || DEFAULT_PRIORITIES;\n\n // check for plugin usage\n var plugin = findPlugin((opts || {}).plugins);\n\n // initialise state tracking\n var checkQueueTimer = 0;\n var currentTask;\n var defaultFail = tq.bind(tq, 'fail');\n\n // look for an sdpfilter function (allow slight mis-spellings)\n var sdpFilter = (opts || {}).sdpfilter || (opts || {}).sdpFilter;\n\n // initialise session description and icecandidate objects\n var RTCSessionDescription = (opts || {}).RTCSessionDescription ||\n detect('RTCSessionDescription');\n\n var RTCIceCandidate = (opts || {}).RTCIceCandidate ||\n detect('RTCIceCandidate');\n\n function abortQueue(err) {\n console.error(err);\n }\n\n function applyCandidate(task, next) {\n var data = task.args[0];\n var candidate = data && data.candidate && createIceCandidate(data);\n\n function handleOk() {\n tq('ice.remote.applied', candidate);\n next();\n }\n\n function handleFail(err) {\n tq('ice.remote.invalid', candidate);\n next(err);\n }\n\n // we have a null candidate, we have finished gathering candidates\n if (! candidate) {\n return next();\n }\n\n pc.addIceCandidate(candidate, handleOk, handleFail);\n }\n\n function checkQueue() {\n // peek at the next item on the queue\n var next = (! queue.isEmpty()) && (! currentTask) && queue.peek();\n var ready = next && testReady(next);\n var retry = (! queue.isEmpty()) && isNotClosed(pc);\n\n // reset the queue timer\n checkQueueTimer = 0;\n\n // if we don't have a task ready, then abort\n if (! ready) {\n return retry && triggerQueueCheck();\n }\n\n // update the current task (dequeue)\n currentTask = queue.deq();\n\n // process the task\n currentTask.fn(currentTask, function(err) {\n var fail = currentTask.fail || defaultFail;\n var pass = currentTask.pass;\n var taskName = currentTask.name;\n\n // if errored, fail\n if (err) {\n console.error(taskName + ' task failed: ', err);\n return fail(err);\n }\n\n if (typeof pass == 'function') {\n pass.apply(currentTask, [].slice.call(arguments, 1));\n }\n\n setTimeout(function() {\n currentTask = null;\n triggerQueueCheck();\n }, 0);\n });\n }\n\n function cleansdp(desc) {\n // ensure we have clean sdp\n var sdpErrors = [];\n var sdp = desc && sdpclean(desc.sdp, { collector: sdpErrors });\n\n // if we don't have a match, log some info\n if (desc && sdp !== desc.sdp) {\n console.info('invalid lines removed from sdp: ', sdpErrors);\n desc.sdp = sdp;\n }\n\n // if a filter has been specified, then apply the filter\n if (typeof sdpFilter == 'function') {\n desc.sdp = sdpFilter(desc.sdp, pc);\n }\n\n return desc;\n }\n\n function completeConnection() {\n if (VALID_RESPONSE_STATES.indexOf(pc.signalingState) >= 0) {\n return tq.createAnswer();\n }\n }\n\n function createIceCandidate(data) {\n if (plugin && typeof plugin.createIceCandidate == 'function') {\n return plugin.createIceCandidate(data);\n }\n\n return new RTCIceCandidate(data);\n }\n\n function createSessionDescription(data) {\n if (plugin && typeof plugin.createSessionDescription == 'function') {\n return plugin.createSessionDescription(data);\n }\n\n return new RTCSessionDescription(data);\n }\n\n function emitSdp() {\n tq('sdp.local', pluckSessionDesc(this.args[0]));\n }\n\n function enqueue(name, handler, opts) {\n return function() {\n var args = [].slice.call(arguments);\n\n if (opts && typeof opts.processArgs == 'function') {\n args = args.map(opts.processArgs);\n }\n\n queue.enq({\n args: args,\n name: name,\n fn: handler,\n\n // initilaise any checks that need to be done prior\n // to the task executing\n checks: [ isNotClosed ].concat((opts || {}).checks || []),\n\n // initialise the pass and fail handlers\n pass: (opts || {}).pass,\n fail: (opts || {}).fail\n });\n\n triggerQueueCheck();\n };\n }\n\n function execMethod(task, next) {\n var fn = pc[task.name];\n var eventName = METHOD_EVENTS[task.name] || (task.name || '').toLowerCase();\n var cbArgs = [ success, fail ];\n var isOffer = task.name === 'createOffer';\n\n function fail(err) {\n tq.apply(tq, [ 'negotiate.error', task.name, err ].concat(task.args));\n next(err);\n }\n\n function success() {\n tq.apply(tq, [ ['negotiate', eventName, 'ok'], task.name ].concat(task.args));\n next.apply(null, [null].concat([].slice.call(arguments)));\n }\n\n if (! fn) {\n return next(new Error('cannot call \"' + task.name + '\" on RTCPeerConnection'));\n }\n\n // invoke the function\n tq.apply(tq, ['negotiate.' + eventName].concat(task.args));\n fn.apply(\n pc,\n task.args.concat(cbArgs).concat(isOffer ? generateConstraints() : [])\n );\n }\n\n function extractCandidateEventData(data) {\n // extract nested candidate data (like we will see in an event being passed to this function)\n while (data && data.candidate && data.candidate.candidate) {\n data = data.candidate;\n }\n\n return data;\n }\n\n function generateConstraints() {\n var allowedKeys = {\n offertoreceivevideo: 'OfferToReceiveVideo',\n offertoreceiveaudio: 'OfferToReceiveAudio',\n icerestart: 'IceRestart',\n voiceactivitydetection: 'VoiceActivityDetection'\n };\n\n var constraints = {\n OfferToReceiveVideo: true,\n OfferToReceiveAudio: true\n };\n\n // update known keys to match\n Object.keys(opts || {}).forEach(function(key) {\n if (allowedKeys[key.toLowerCase()]) {\n constraints[allowedKeys[key.toLowerCase()]] = opts[key];\n }\n });\n\n return { mandatory: constraints };\n }\n\n function hasLocalOrRemoteDesc(pc, task) {\n return pc.__hasDesc || (pc.__hasDesc = !!pc.remoteDescription);\n }\n\n function isNotNegotiating(pc) {\n return pc.signalingState !== 'have-local-offer';\n }\n\n function isNotClosed(pc) {\n return pc.signalingState !== 'closed';\n }\n\n function isStable(pc) {\n return pc.signalingState === 'stable';\n }\n\n function isValidCandidate(pc, data) {\n return data.__valid ||\n (data.__valid = checkCandidate(data.args[0]).length === 0);\n }\n\n function isConnReadyForCandidate(pc, data) {\n var sdp = parseSdp(pc.remoteDescription && pc.remoteDescription.sdp);\n var mediaTypes = sdp.getMediaTypes();\n var sdpMid = data.args[0] && data.args[0].sdpMid;\n\n // remap media types as appropriate\n sdpMid = MEDIA_MAPPINGS[sdpMid] || sdpMid;\n\n // the candidate is valid if we know about the media type\n return (sdpMid === '') || mediaTypes.indexOf(sdpMid) >= 0;\n }\n\n function orderTasks(a, b) {\n // apply each of the checks for each task\n var tasks = [a,b];\n var readiness = tasks.map(testReady);\n var taskPriorities = tasks.map(function(task, idx) {\n var ready = readiness[idx];\n var priority = ready && priorities.indexOf(task.name);\n\n return ready ? (priority >= 0 ? priority : PRIORITY_LOW) : PRIORITY_WAIT;\n });\n\n return taskPriorities[1] - taskPriorities[0];\n }\n\n // check whether a task is ready (does it pass all the checks)\n function testReady(task) {\n return (task.checks || []).reduce(function(memo, check) {\n return memo && check(pc, task);\n }, true);\n }\n\n function triggerQueueCheck() {\n if (checkQueueTimer) return;\n checkQueueTimer = setTimeout(checkQueue, 50);\n }\n\n // patch in the queue helper methods\n tq.addIceCandidate = enqueue('addIceCandidate', applyCandidate, {\n processArgs: extractCandidateEventData,\n checks: [hasLocalOrRemoteDesc, isValidCandidate, isConnReadyForCandidate ]\n });\n\n tq.setLocalDescription = enqueue('setLocalDescription', execMethod, {\n processArgs: cleansdp,\n pass: emitSdp\n });\n\n tq.setRemoteDescription = enqueue('setRemoteDescription', execMethod, {\n processArgs: createSessionDescription,\n pass: completeConnection\n });\n\n tq.createOffer = enqueue('createOffer', execMethod, {\n checks: [ isNotNegotiating ],\n pass: tq.setLocalDescription\n });\n\n tq.createAnswer = enqueue('createAnswer', execMethod, {\n pass: tq.setLocalDescription\n });\n\n return tq;\n};\n","/**\n * Expose `PriorityQueue`.\n */\nmodule.exports = PriorityQueue;\n\n/**\n * Initializes a new empty `PriorityQueue` with the given `comparator(a, b)`\n * function, uses `.DEFAULT_COMPARATOR()` when no function is provided.\n *\n * The comparator function must return a positive number when `a > b`, 0 when\n * `a == b` and a negative number when `a < b`.\n *\n * @param {Function}\n * @return {PriorityQueue}\n * @api public\n */\nfunction PriorityQueue(comparator) {\n this._comparator = comparator || PriorityQueue.DEFAULT_COMPARATOR;\n this._elements = [];\n}\n\n/**\n * Compares `a` and `b`, when `a > b` it returns a positive number, when\n * it returns 0 and when `a < b` it returns a negative number.\n *\n * @param {String|Number} a\n * @param {String|Number} b\n * @return {Number}\n * @api public\n */\nPriorityQueue.DEFAULT_COMPARATOR = function(a, b) {\n if (typeof a === 'number' && typeof b === 'number') {\n return a - b;\n } else {\n a = a.toString();\n b = b.toString();\n\n if (a == b) return 0;\n\n return (a > b) ? 1 : -1;\n }\n};\n\n/**\n * Returns whether the priority queue is empty or not.\n *\n * @return {Boolean}\n * @api public\n */\nPriorityQueue.prototype.isEmpty = function() {\n return this.size() === 0;\n};\n\n/**\n * Peeks at the top element of the priority queue.\n *\n * @return {Object}\n * @throws {Error} when the queue is empty.\n * @api public\n */\nPriorityQueue.prototype.peek = function() {\n if (this.isEmpty()) throw new Error('PriorityQueue is empty');\n\n return this._elements[0];\n};\n\n/**\n * Dequeues the top element of the priority queue.\n *\n * @return {Object}\n * @throws {Error} when the queue is empty.\n * @api public\n */\nPriorityQueue.prototype.deq = function() {\n var first = this.peek();\n var last = this._elements.pop();\n var size = this.size();\n\n if (size === 0) return first;\n\n this._elements[0] = last;\n var current = 0;\n\n while (current < size) {\n var largest = current;\n var left = (2 * current) + 1;\n var right = (2 * current) + 2;\n\n if (left < size && this._compare(left, largest) >= 0) {\n largest = left;\n }\n\n if (right < size && this._compare(right, largest) >= 0) {\n largest = right;\n }\n\n if (largest === current) break;\n\n this._swap(largest, current);\n current = largest;\n }\n\n return first;\n};\n\n/**\n * Enqueues the `element` at the priority queue and returns its new size.\n *\n * @param {Object} element\n * @return {Number}\n * @api public\n */\nPriorityQueue.prototype.enq = function(element) {\n var size = this._elements.push(element);\n var current = size - 1;\n\n while (current > 0) {\n var parent = Math.floor((current - 1) / 2);\n\n if (this._compare(current, parent) <= 0) break;\n\n this._swap(parent, current);\n current = parent;\n }\n\n return size;\n};\n\n/**\n * Returns the size of the priority queue.\n *\n * @return {Number}\n * @api public\n */\nPriorityQueue.prototype.size = function() {\n return this._elements.length;\n};\n\n/**\n * Iterates over queue elements\n *\n * @param {Function} fn\n */\nPriorityQueue.prototype.forEach = function(fn) {\n return this._elements.forEach(fn);\n};\n\n/**\n * Compares the values at position `a` and `b` in the priority queue using its\n * comparator function.\n *\n * @param {Number} a\n * @param {Number} b\n * @return {Number}\n * @api private\n */\nPriorityQueue.prototype._compare = function(a, b) {\n return this._comparator(this._elements[a], this._elements[b]);\n};\n\n/**\n * Swaps the values at position `a` and `b` in the priority queue.\n *\n * @param {Number} a\n * @param {Number} b\n * @api private\n */\nPriorityQueue.prototype._swap = function(a, b) {\n var aux = this._elements[a];\n this._elements[a] = this._elements[b];\n this._elements[b] = aux;\n};\n","/* jshint node: true */\n'use strict';\n\nvar nub = require('whisk/nub');\nvar pluck = require('whisk/pluck');\nvar flatten = require('whisk/flatten');\nvar reLineBreak = /\\r?\\n/;\nvar reTrailingNewlines = /\\r?\\n$/;\n\n// list sdp line types that are not \"significant\"\nvar nonHeaderLines = [ 'a', 'c', 'b', 'k' ];\nvar parsers = require('./parsers');\n\n/**\n # rtc-sdp\n\n This is a utility module for intepreting and patching sdp.\n\n ## Usage\n\n The `rtc-sdp` main module exposes a single function that is capable of\n parsing lines of SDP, and providing an object allowing you to perform\n operations on those parsed lines:\n\n ```js\n var sdp = require('rtc-sdp')(lines);\n ```\n\n The currently supported operations are listed below:\n\n**/\nmodule.exports = function(sdp) {\n var ops = {};\n var parsed = [];\n var activeCollector;\n\n // initialise the lines\n var lines = sdp.split(reLineBreak).filter(Boolean).map(function(line) {\n return line.split('=');\n });\n\n var inputOrder = nub(lines.filter(function(line) {\n return line[0] && nonHeaderLines.indexOf(line[0]) < 0;\n }).map(pluck(0)));\n\n var findLine = ops.findLine = function(type, index) {\n var lineData = parsed.filter(function(line) {\n return line[0] === type;\n })[index || 0];\n\n return lineData && lineData[1];\n };\n\n // push into parsed sections\n lines.forEach(function(line) {\n var customParser = parsers[line[0]];\n\n if (customParser) {\n activeCollector = customParser(parsed, line);\n }\n else if (activeCollector) {\n activeCollector = activeCollector(line);\n }\n else {\n parsed.push(line);\n }\n });\n\n /**\n ### `sdp.addIceCandidate(data)`\n\n Modify the sdp to include candidates as denoted by the data.\n\n**/\n ops.addIceCandidate = function(data) {\n var lineIndex = (data || {}).lineIndex || (data || {}).sdpMLineIndex;\n var mLine = typeof lineIndex != 'undefined' && findLine('m', lineIndex);\n var candidate = (data || {}).candidate;\n\n // if we have the mLine add the new candidate\n if (mLine && candidate) {\n mLine.childlines.push(candidate.replace(reTrailingNewlines, '').split('='));\n }\n };\n\n /**\n ### `sdp.getMediaTypes() => []`\n\n Retrieve the list of media types that have been defined in the sdp via\n `m=` lines.\n **/\n ops.getMediaTypes = function() {\n function getMediaType(data) {\n return data[1].def.split(/\\s/)[0];\n }\n\n return parsed.filter(function(parts) {\n return parts[0] === 'm' && parts[1] && parts[1].def;\n }).map(getMediaType);\n };\n\n /**\n ### `sdp.toString()`\n\n Convert the SDP structure that is currently retained in memory, into a string\n that can be provided to a `setLocalDescription` (or `setRemoteDescription`)\n WebRTC call.\n\n **/\n ops.toString = function() {\n return parsed.map(function(line) {\n return typeof line[1].toArray == 'function' ? line[1].toArray() : [ line ];\n }).reduce(flatten).map(function(line) {\n return line.join('=');\n }).join('\\n');\n };\n\n /**\n ## SDP Filtering / Munging Functions\n\n There are additional functions included in the module to assign with\n performing \"single-shot\" SDP filtering (or munging) operations:\n\n **/\n\n return ops;\n};\n","/* jshint node: true */\n'use strict';\n\nexports.m = function(parsed, line) {\n var media = {\n def: line[1],\n childlines: [],\n\n toArray: function() {\n return [\n ['m', media.def ]\n ].concat(media.childlines);\n }\n };\n\n function addChildLine(childLine) {\n media.childlines.push(childLine);\n return addChildLine;\n }\n\n parsed.push([ 'm', media ]);\n\n return addChildLine;\n};","var validators = [\n [ /^(a\\=candidate.*)$/, require('rtc-validator/candidate') ]\n];\n\nvar reSdpLineBreak = /(\\r?\\n|\\\\r\\\\n)/;\n\n/**\n # rtc-sdpclean\n\n Remove invalid lines from your SDP.\n\n ## Why?\n\n This module removes the occasional \"bad egg\" that will slip into SDP when it\n is generated by the browser. In particular these situations are catered for:\n\n - invalid ICE candidates\n\n**/\nmodule.exports = function(input, opts) {\n var lineBreak = detectLineBreak(input);\n var lines = input.split(lineBreak);\n var collector = (opts || {}).collector;\n\n // filter out invalid lines\n lines = lines.filter(function(line) {\n // iterate through the validators and use the one that matches\n var validator = validators.reduce(function(memo, data, idx) {\n return typeof memo != 'undefined' ? memo : (data[0].exec(line) && {\n line: line.replace(data[0], '$1'),\n fn: data[1]\n });\n }, undefined);\n\n // if we have a validator, ensure we have no errors\n var errors = validator ? validator.fn(validator.line) : [];\n\n // if we have errors and an error collector, then add to the collector\n if (collector) {\n errors.forEach(function(err) {\n collector.push(err);\n });\n }\n\n return errors.length === 0;\n });\n\n return lines.join(lineBreak);\n};\n\nfunction detectLineBreak(input) {\n var match = reSdpLineBreak.exec(input);\n\n return match && match[0];\n}\n","var debug = require('cog/logger')('rtc-validator');\nvar rePrefix = /^(?:a=)?candidate:/;\nvar reIP = /^((\\d+\\.){3}\\d+|([a-fA-F0-9]+\\:){7}[a-fA-F0-9]+)$/;\n\n/*\n\nvalidation rules as per:\nhttp://tools.ietf.org/html/draft-ietf-mmusic-ice-sip-sdp-03#section-8.1\n\n candidate-attribute = \"candidate\" \":\" foundation SP component-id SP\n transport SP\n priority SP\n connection-address SP ;from RFC 4566\n port ;port from RFC 4566\n SP cand-type\n [SP rel-addr]\n [SP rel-port]\n *(SP extension-att-name SP\n extension-att-value)\n\n foundation = 1*32ice-char\n component-id = 1*5DIGIT\n transport = \"UDP\" / transport-extension\n transport-extension = token ; from RFC 3261\n priority = 1*10DIGIT\n cand-type = \"typ\" SP candidate-types\n candidate-types = \"host\" / \"srflx\" / \"prflx\" / \"relay\" / token\n rel-addr = \"raddr\" SP connection-address\n rel-port = \"rport\" SP port\n extension-att-name = token\n extension-att-value = *VCHAR\n ice-char = ALPHA / DIGIT / \"+\" / \"/\"\n*/\nvar partValidation = [\n [ /.+/, 'invalid foundation component', 'foundation' ],\n [ /\\d+/, 'invalid component id', 'component-id' ],\n [ /(UDP|TCP)/i, 'transport must be TCP or UDP', 'transport' ],\n [ /\\d+/, 'numeric priority expected', 'priority' ],\n [ reIP, 'invalid connection address', 'connection-address' ],\n [ /\\d+/, 'invalid connection port', 'connection-port' ],\n [ /typ/, 'Expected \"typ\" identifier', 'type classifier' ],\n [ /.+/, 'Invalid candidate type specified', 'candidate-type' ]\n];\n\n/**\n ### `rtc-validator/candidate`\n\n Validate that an `RTCIceCandidate` (or plain old object with data, sdpMid,\n etc attributes) is a valid ice candidate.\n\n Specs reviewed as part of the validation implementation:\n\n - <http://tools.ietf.org/html/draft-ietf-mmusic-ice-sip-sdp-03#section-8.1>\n - <http://tools.ietf.org/html/rfc5245>\n\n**/\nmodule.exports = function(data) {\n var errors = [];\n var candidate = data && (data.candidate || data);\n var prefixMatch = candidate && rePrefix.exec(candidate);\n var parts = prefixMatch && candidate.slice(prefixMatch[0].length).split(/\\s/);\n\n if (! candidate) {\n return [ new Error('empty candidate') ];\n }\n\n // check that the prefix matches expected\n if (! prefixMatch) {\n return [ new Error('candidate did not match expected sdp line format') ];\n }\n\n // perform the part validation\n errors = errors.concat(parts.map(validateParts)).filter(Boolean);\n\n return errors;\n};\n\nfunction validateParts(part, idx) {\n var validator = partValidation[idx];\n\n if (validator && (! validator[0].test(part))) {\n debug(validator[2] + ' part failed validation: ' + part);\n return new Error(validator[1]);\n }\n}\n","/**\n ## chain\n\n Create a function that will create the combined result of calling all\n the provided functions in the provided order.\n\n <<< examples/chain.js\n\n**/\nmodule.exports = function(fns) {\n fns = [].concat(fns || []).concat([].slice.call(arguments, 1));\n\n return function(value) {\n return fns.reduce(function(memo, fn) {\n var result = fn(memo);\n\n return result !== undefined ? result : memo;\n }, value || 0);\n }\n};\n","module.exports = function(a, b) {\n return arguments.length > 1 ? a === b : function(b) {\n return a === b;\n };\n};\n","/**\n ## flatten\n\n Flatten an array using `[].reduce`\n\n <<< examples/flatten.js\n\n**/\n\nmodule.exports = function(a, b) {\n // if a is not already an array, make it one\n a = Array.isArray(a) ? a : [a];\n\n // concat b with a\n return a.concat(b);\n};","module.exports = function(comparator) {\n return function(input) {\n var output = [];\n for (var ii = 0, count = input.length; ii < count; ii++) {\n var found = false;\n for (var jj = output.length; jj--; ) {\n found = found || comparator(input[ii], output[jj]);\n }\n\n if (found) {\n continue;\n }\n\n output[output.length] = input[ii];\n }\n\n return output;\n };\n}","/**\n ## nub\n\n Return only the unique elements of the list.\n\n <<< examples/nub.js\n\n**/\n\nmodule.exports = require('./nub-by')(require('./equality'));","/**\n ## pluck\n\n Extract targeted properties from a source object. When a single property\n value is requested, then just that value is returned.\n\n In the case where multiple properties are requested (in a varargs calling\n style) a new object will be created with the requested properties copied\n across.\n\n __NOTE:__ In the second form extraction of nested properties is\n not supported.\n\n <<< examples/pluck.js\n\n**/\nmodule.exports = function() {\n var fields = [];\n\n function extractor(parts, maxIdx) {\n return function(item) {\n var partIdx = 0;\n var val = item;\n\n do {\n val = val && val[parts[partIdx++]];\n } while (val && partIdx <= maxIdx);\n\n return val;\n };\n }\n\n [].slice.call(arguments).forEach(function(path) {\n var parts = typeof path == 'number' ? [ path ] : (path || '').split('.');\n\n fields[fields.length] = {\n name: parts[0],\n parts: parts,\n maxIdx: parts.length - 1\n };\n });\n\n if (fields.length <= 1) {\n return extractor(fields[0].parts, fields[0].maxIdx);\n }\n else {\n return function(item) {\n var data = {};\n\n for (var ii = 0, len = fields.length; ii < len; ii++) {\n data[fields[ii].name] = extractor([fields[ii].parts[0]], 0)(item);\n }\n\n return data;\n };\n }\n};"]}