{"version":3,"sources":["webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js","webpack:///./node_modules/paho-mqtt/paho-mqtt.js","webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/normalize-wheel/src/isEventSupported.js","webpack:///./node_modules/node-libs-browser/node_modules/events/events.js","webpack:///./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","webpack:///./node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/normalize-wheel/src/ExecutionEnvironment.js","webpack:///./node_modules/normalize-wheel/index.js","webpack:///./node_modules/object-keys/isArguments.js","webpack:///./node_modules/normalize-wheel/src/normalizeWheel.js","webpack:///./node_modules/object-keys/index.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/node-libs-browser/node_modules/util/util.js"],"names":["root","exports","nodeType","module","freeGlobal","global","window","self","punycode","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","floor","Math","stringFromCharCode","String","fromCharCode","error","type","RangeError","map","array","fn","length","result","mapDomain","string","parts","split","replace","labels","encoded","join","ucs2decode","value","extra","output","counter","charCodeAt","push","ucs2encode","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","decode","input","out","basic","j","index","oldi","w","t","baseMinusT","inputLength","i","n","bias","lastIndexOf","splice","encode","handledCPCount","basicLength","m","q","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","test","slice","toLowerCase","toASCII","factory","this","PahoMQTT","version","localStorage","data","setItem","key","item","getItem","removeItem","MESSAGE_TYPE","CONNECT","CONNACK","PUBLISH","PUBACK","PUBREC","PUBREL","PUBCOMP","SUBSCRIBE","SUBACK","UNSUBSCRIBE","UNSUBACK","PINGREQ","PINGRESP","DISCONNECT","validate","obj","keys","hasOwnProperty","errorStr","validKey","Error","format","ERROR","INVALID_TYPE","scope","f","apply","arguments","OK","code","text","CONNECT_TIMEOUT","SUBSCRIBE_TIMEOUT","UNSUBSCRIBE_TIMEOUT","PING_TIMEOUT","INTERNAL_ERROR","CONNACK_RETURNCODE","SOCKET_ERROR","SOCKET_CLOSE","MALFORMED_UTF","UNSUPPORTED","INVALID_STATE","INVALID_ARGUMENT","UNSUPPORTED_OPERATION","INVALID_STORED_DATA","INVALID_MQTT_MESSAGE_TYPE","MALFORMED_UNICODE","BUFFER_FULL","CONNACK_RC","0","1","2","3","4","5","substitutions","field","start","indexOf","part1","substring","part2","MqttProtoIdentifierv3","MqttProtoIdentifierv4","WireMessage","options","name","decodeMessage","pos","startingPos","first","messageInfo","remLength","multiplier","endPos","wireMessage","connectAcknowledgeFlags","sessionPresent","returnCode","qos","len","readUint16","topicName","parseUTF8","messageIdentifier","message","Message","subarray","retained","duplicate","destinationName","payloadMessage","writeUint16","buffer","offset","writeString","utf8Length","stringToUTF8","encodeMBI","number","Array","numBytes","UTF8Length","charCode","lowCharCode","isNaN","utf16","byte1","byte2","toString","byte3","byte4","prototype","willMessagePayloadBytes","topicStrLength","destinationNameLength","undefined","mqttVersion","clientId","willMessage","payloadBytes","Uint8Array","byteLength","userName","password","topics","requestedQos","ArrayBuffer","mbi","byteStream","set","connectFlags","cleanSession","keepAliveInterval","Pinger","client","_client","_keepAliveInterval","isReset","pingReq","doTimeout","pinger","doPing","_trace","socket","send","timeout","setTimeout","_disconnected","reset","clearTimeout","cancel","Timeout","timeoutSeconds","action","args","ClientImpl","uri","host","port","path","WebSocket","_wsuri","_localKey","_msg_queue","_buffered_msg_queue","_sentMessages","_receivedMessages","_notify_msg_sent","_message_identifier","_sequence","restore","connected","maxMessageIdentifier","connectOptions","hostIndex","onConnected","onConnectionLost","onMessageDelivered","onMessageArrived","traceFunction","_connectTimeout","sendPinger","receivePinger","_reconnectInterval","_reconnecting","_reconnectTimeout","disconnectedPublishing","disconnectedBufferSize","receiveBuffer","_traceBuffer","_MAX_TRACE_ENTRIES","connect","connectOptionsMasked","_traceMask","uris","_doConnect","subscribe","filter","subscribeOptions","constructor","onSuccess","grantedQos","invocationContext","onFailure","errorCode","errorMessage","timeOut","_requires_ack","_schedule_message","unsubscribe","unsubscribeOptions","callback","messageCount","Object","sequence","unshift","disconnect","getTraceLog","Date","startTrace","stopTrace","wsurl","useSSL","uriParts","binaryType","onopen","_on_socket_open","onmessage","_on_socket_message","onerror","_on_socket_error","onclose","_on_socket_close","_process_queue","store","prefix","storedMessage","pubRecReceived","hex","messageBytes","payloadHex","JSON","stringify","parse","x","parseInt","pop","_socket_send","event","messages","_deframeMessages","_handleMessage","byteArray","newData","errorStack","stack","sentMessage","receivedMessage","sequencedMessages","msgId","msg","sort","a","b","pubRelMessage","reconnected","_connected","_receivePublish","_receiveMessage","pubCompMessage","wireMessageMasked","pubAckMessage","pubRecMessage","reconnect","_reconnect","errorText","readyState","close","mqttVersionExplicit","call","record","severity","max","shift","traceObject","masked","traceObjectMasked","attr","Client","match","ipv6AddSBracket","clientIdLength","defineProperties","get","newOnConnected","newDisconnectedPublishing","newDisconnectedBufferSize","newOnConnectionLost","newOnMessageDelivered","newOnMessageArrived","trace","hosts","ports","stringPayload","usingURIs","ipv6","topic","payload","publish","isConnected","newPayload","isView","DataView","enumerable","newDestinationName","newQos","newRetained","newTopic","newDuplicate","nextTick","platform","arch","execPath","title","pid","browser","env","argv","binding","cwd","chdir","dir","resolve","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","useHasFeature","ExecutionEnvironment","isEventSupported","eventNameSuffix","capture","canUseDOM","document","eventName","isSupported","element","createElement","setAttribute","implementation","hasFeature","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","Function","ProcessEmitWarning","warning","console","warn","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","EventEmitter","init","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","events","existing","create","newListener","emit","warned","emitter","count","onceWrapper","fired","removeListener","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","arr","copy","spliceOne","list","ret","defineProperty","arg","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","err","context","handler","listeners","addListener","on","prependListener","once","prependOnceListener","position","originalListener","off","removeAllListeners","rawListeners","eventNames","_ie","_firefox","_opera","_webkit","_chrome","_ie_real_version","_osx","_windows","_linux","_android","_win64","_iphone","_ipad","_native","_mobile","_populated","_populate","uas","navigator","userAgent","agent","exec","os","parseFloat","NaN","documentMode","trident","ver","UserAgent_DEPRECATED","ie","ieCompatibilityMode","ie64","firefox","opera","webkit","safari","chrome","windows","osx","linux","iphone","mobile","nativeApp","android","ipad","fill","readUInt8","canUseWorkers","Worker","canUseEventListeners","addEventListener","attachEvent","canUseViewport","screen","isInWorker","toStr","str","isArgs","callee","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","normalizeWheel","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","getEventType","has","isEnumerable","propertyIsEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","o","ctor","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","e","equalsConstructorPrototypeIfNotBuggy","keysShim","object","isObject","isFunction","isArguments","isString","theKeys","skipProto","skipConstructor","shim","keysWorksWithArguments","originalKeys","normalizeArray","allowAboveRoot","up","last","basename","end","matchedSlash","xs","res","resolvedPath","resolvedAbsolute","process","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","min","samePartsLength","outputParts","sep","dirname","hasRoot","ext","extname","startDot","startPart","preDotState","getOwnPropertyDescriptors","descriptors","getOwnPropertyDescriptor","formatRegExp","objects","inspect","_","isNull","deprecate","noDeprecation","deprecated","throwDeprecation","traceDeprecation","debugEnviron","debugs","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","arrayToHash","hash","forEach","val","idx","recurseTimes","primitive","formatPrimitive","visibleKeys","isError","formatError","isRegExp","RegExp","isDate","braces","isArray","toUTCString","formatArray","formatProperty","reduceToSingleString","simple","isNumber","l","desc","line","reduce","prev","cur","numLinesEst","ar","isNullOrUndefined","isSymbol","re","objectToString","d","isPrimitive","pad","debuglog","NODE_DEBUG","toUpperCase","isBuffer","months","timestamp","time","getHours","getMinutes","getSeconds","getDate","getMonth","prop","log","inherits","origin","add","kCustomPromisifiedSymbol","Symbol","callbackifyOnRejected","reason","cb","newReason","callbackify","original","callbackified","maybeCb","then","rej","setPrototypeOf","promisify","writable","configurable","promiseResolve","promiseReject","promise","Promise","reject","custom"],"mappings":"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","file":"js/chunk-vendors~b58f7129.87d1e73b.js","sourcesContent":["/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","/*******************************************************************************\n * Copyright (c) 2013 IBM Corp.\n *\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * and Eclipse Distribution License v1.0 which accompany this distribution.\n *\n * The Eclipse Public License is available at\n * http://www.eclipse.org/legal/epl-v10.html\n * and the Eclipse Distribution License is available at\n * http://www.eclipse.org/org/documents/edl-v10.php.\n *\n * Contributors:\n * Andrew Banks - initial API and implementation and initial documentation\n *******************************************************************************/\n\n\n// Only expose a single object name in the global namespace.\n// Everything must go through this module. Global Paho module\n// only has a single public function, client, which returns\n// a Paho client object given connection details.\n\n/**\n * Send and receive messages using web browsers.\n *

\n * This programming interface lets a JavaScript client application use the MQTT V3.1 or\n * V3.1.1 protocol to connect to an MQTT-supporting messaging server.\n *\n * The function supported includes:\n *

    \n *
  1. Connecting to and disconnecting from a server. The server is identified by its host name and port number.\n *
  2. Specifying options that relate to the communications link with the server,\n * for example the frequency of keep-alive heartbeats, and whether SSL/TLS is required.\n *
  3. Subscribing to and receiving messages from MQTT Topics.\n *
  4. Publishing messages to MQTT Topics.\n *
\n *

\n * The API consists of two main objects:\n *

\n *
{@link Paho.Client}
\n *
This contains methods that provide the functionality of the API,\n * including provision of callbacks that notify the application when a message\n * arrives from or is delivered to the messaging server,\n * or when the status of its connection to the messaging server changes.
\n *
{@link Paho.Message}
\n *
This encapsulates the payload of the message along with various attributes\n * associated with its delivery, in particular the destination to which it has\n * been (or is about to be) sent.
\n *
\n *

\n * The programming interface validates parameters passed to it, and will throw\n * an Error containing an error message intended for developer use, if it detects\n * an error with any parameter.\n *

\n * Example:\n *\n *

\nvar client = new Paho.MQTT.Client(location.hostname, Number(location.port), \"clientId\");\nclient.onConnectionLost = onConnectionLost;\nclient.onMessageArrived = onMessageArrived;\nclient.connect({onSuccess:onConnect});\n\nfunction onConnect() {\n  // Once a connection has been made, make a subscription and send a message.\n  console.log(\"onConnect\");\n  client.subscribe(\"/World\");\n  var message = new Paho.MQTT.Message(\"Hello\");\n  message.destinationName = \"/World\";\n  client.send(message);\n};\nfunction onConnectionLost(responseObject) {\n  if (responseObject.errorCode !== 0)\n\tconsole.log(\"onConnectionLost:\"+responseObject.errorMessage);\n};\nfunction onMessageArrived(message) {\n  console.log(\"onMessageArrived:\"+message.payloadString);\n  client.disconnect();\n};\n * 
\n * @namespace Paho\n */\n\n/* jshint shadow:true */\n(function ExportLibrary(root, factory) {\n\tif(typeof exports === \"object\" && typeof module === \"object\"){\n\t\tmodule.exports = factory();\n\t} else if (typeof define === \"function\" && define.amd){\n\t\tdefine(factory);\n\t} else if (typeof exports === \"object\"){\n\t\texports = factory();\n\t} else {\n\t\t//if (typeof root.Paho === \"undefined\"){\n\t\t//\troot.Paho = {};\n\t\t//}\n\t\troot.Paho = factory();\n\t}\n})(this, function LibraryFactory(){\n\n\n\tvar PahoMQTT = (function (global) {\n\n\t// Private variables below, these are only visible inside the function closure\n\t// which is used to define the module.\n\tvar version = \"@VERSION@-@BUILDLEVEL@\";\n\n\t/**\n\t * @private\n\t */\n\tvar localStorage = global.localStorage || (function () {\n\t\tvar data = {};\n\n\t\treturn {\n\t\t\tsetItem: function (key, item) { data[key] = item; },\n\t\t\tgetItem: function (key) { return data[key]; },\n\t\t\tremoveItem: function (key) { delete data[key]; },\n\t\t};\n\t})();\n\n\t\t/**\n\t * Unique message type identifiers, with associated\n\t * associated integer values.\n\t * @private\n\t */\n\t\tvar MESSAGE_TYPE = {\n\t\t\tCONNECT: 1,\n\t\t\tCONNACK: 2,\n\t\t\tPUBLISH: 3,\n\t\t\tPUBACK: 4,\n\t\t\tPUBREC: 5,\n\t\t\tPUBREL: 6,\n\t\t\tPUBCOMP: 7,\n\t\t\tSUBSCRIBE: 8,\n\t\t\tSUBACK: 9,\n\t\t\tUNSUBSCRIBE: 10,\n\t\t\tUNSUBACK: 11,\n\t\t\tPINGREQ: 12,\n\t\t\tPINGRESP: 13,\n\t\t\tDISCONNECT: 14\n\t\t};\n\n\t\t// Collection of utility methods used to simplify module code\n\t\t// and promote the DRY pattern.\n\n\t\t/**\n\t * Validate an object's parameter names to ensure they\n\t * match a list of expected variables name for this option\n\t * type. Used to ensure option object passed into the API don't\n\t * contain erroneous parameters.\n\t * @param {Object} obj - User options object\n\t * @param {Object} keys - valid keys and types that may exist in obj.\n\t * @throws {Error} Invalid option parameter found.\n\t * @private\n\t */\n\t\tvar validate = function(obj, keys) {\n\t\t\tfor (var key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tif (keys.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (typeof obj[key] !== keys[key])\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof obj[key], key]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errorStr = \"Unknown property, \" + key + \". Valid properties are:\";\n\t\t\t\t\t\tfor (var validKey in keys)\n\t\t\t\t\t\t\tif (keys.hasOwnProperty(validKey))\n\t\t\t\t\t\t\t\terrorStr = errorStr+\" \"+validKey;\n\t\t\t\t\t\tthrow new Error(errorStr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Return a new function which runs the user function bound\n\t * to a fixed scope.\n\t * @param {function} User function\n\t * @param {object} Function scope\n\t * @return {function} User function bound to another scope\n\t * @private\n\t */\n\t\tvar scope = function (f, scope) {\n\t\t\treturn function () {\n\t\t\t\treturn f.apply(scope, arguments);\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * Unique message type identifiers, with associated\n\t * associated integer values.\n\t * @private\n\t */\n\t\tvar ERROR = {\n\t\t\tOK: {code:0, text:\"AMQJSC0000I OK.\"},\n\t\t\tCONNECT_TIMEOUT: {code:1, text:\"AMQJSC0001E Connect timed out.\"},\n\t\t\tSUBSCRIBE_TIMEOUT: {code:2, text:\"AMQJS0002E Subscribe timed out.\"},\n\t\t\tUNSUBSCRIBE_TIMEOUT: {code:3, text:\"AMQJS0003E Unsubscribe timed out.\"},\n\t\t\tPING_TIMEOUT: {code:4, text:\"AMQJS0004E Ping timed out.\"},\n\t\t\tINTERNAL_ERROR: {code:5, text:\"AMQJS0005E Internal error. Error Message: {0}, Stack trace: {1}\"},\n\t\t\tCONNACK_RETURNCODE: {code:6, text:\"AMQJS0006E Bad Connack return code:{0} {1}.\"},\n\t\t\tSOCKET_ERROR: {code:7, text:\"AMQJS0007E Socket error:{0}.\"},\n\t\t\tSOCKET_CLOSE: {code:8, text:\"AMQJS0008I Socket closed.\"},\n\t\t\tMALFORMED_UTF: {code:9, text:\"AMQJS0009E Malformed UTF data:{0} {1} {2}.\"},\n\t\t\tUNSUPPORTED: {code:10, text:\"AMQJS0010E {0} is not supported by this browser.\"},\n\t\t\tINVALID_STATE: {code:11, text:\"AMQJS0011E Invalid state {0}.\"},\n\t\t\tINVALID_TYPE: {code:12, text:\"AMQJS0012E Invalid type {0} for {1}.\"},\n\t\t\tINVALID_ARGUMENT: {code:13, text:\"AMQJS0013E Invalid argument {0} for {1}.\"},\n\t\t\tUNSUPPORTED_OPERATION: {code:14, text:\"AMQJS0014E Unsupported operation.\"},\n\t\t\tINVALID_STORED_DATA: {code:15, text:\"AMQJS0015E Invalid data in local storage key={0} value={1}.\"},\n\t\t\tINVALID_MQTT_MESSAGE_TYPE: {code:16, text:\"AMQJS0016E Invalid MQTT message type {0}.\"},\n\t\t\tMALFORMED_UNICODE: {code:17, text:\"AMQJS0017E Malformed Unicode string:{0} {1}.\"},\n\t\t\tBUFFER_FULL: {code:18, text:\"AMQJS0018E Message buffer is full, maximum buffer size: {0}.\"},\n\t\t};\n\n\t\t/** CONNACK RC Meaning. */\n\t\tvar CONNACK_RC = {\n\t\t\t0:\"Connection Accepted\",\n\t\t\t1:\"Connection Refused: unacceptable protocol version\",\n\t\t\t2:\"Connection Refused: identifier rejected\",\n\t\t\t3:\"Connection Refused: server unavailable\",\n\t\t\t4:\"Connection Refused: bad user name or password\",\n\t\t\t5:\"Connection Refused: not authorized\"\n\t\t};\n\n\t/**\n\t * Format an error message text.\n\t * @private\n\t * @param {error} ERROR value above.\n\t * @param {substitutions} [array] substituted into the text.\n\t * @return the text with the substitutions made.\n\t */\n\t\tvar format = function(error, substitutions) {\n\t\t\tvar text = error.text;\n\t\t\tif (substitutions) {\n\t\t\t\tvar field,start;\n\t\t\t\tfor (var i=0; i 0) {\n\t\t\t\t\t\tvar part1 = text.substring(0,start);\n\t\t\t\t\t\tvar part2 = text.substring(start+field.length);\n\t\t\t\t\t\ttext = part1+substitutions[i]+part2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn text;\n\t\t};\n\n\t\t//MQTT protocol and version 6 M Q I s d p 3\n\t\tvar MqttProtoIdentifierv3 = [0x00,0x06,0x4d,0x51,0x49,0x73,0x64,0x70,0x03];\n\t\t//MQTT proto/version for 311 4 M Q T T 4\n\t\tvar MqttProtoIdentifierv4 = [0x00,0x04,0x4d,0x51,0x54,0x54,0x04];\n\n\t\t/**\n\t * Construct an MQTT wire protocol message.\n\t * @param type MQTT packet type.\n\t * @param options optional wire message attributes.\n\t *\n\t * Optional properties\n\t *\n\t * messageIdentifier: message ID in the range [0..65535]\n\t * payloadMessage:\tApplication Message - PUBLISH only\n\t * connectStrings:\tarray of 0 or more Strings to be put into the CONNECT payload\n\t * topics:\t\t\tarray of strings (SUBSCRIBE, UNSUBSCRIBE)\n\t * requestQoS:\t\tarray of QoS values [0..2]\n\t *\n\t * \"Flag\" properties\n\t * cleanSession:\ttrue if present / false if absent (CONNECT)\n\t * willMessage: \ttrue if present / false if absent (CONNECT)\n\t * isRetained:\t\ttrue if present / false if absent (CONNECT)\n\t * userName:\t\ttrue if present / false if absent (CONNECT)\n\t * password:\t\ttrue if present / false if absent (CONNECT)\n\t * keepAliveInterval:\tinteger [0..65535] (CONNECT)\n\t *\n\t * @private\n\t * @ignore\n\t */\n\t\tvar WireMessage = function (type, options) {\n\t\t\tthis.type = type;\n\t\t\tfor (var name in options) {\n\t\t\t\tif (options.hasOwnProperty(name)) {\n\t\t\t\t\tthis[name] = options[name];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tWireMessage.prototype.encode = function() {\n\t\t// Compute the first byte of the fixed header\n\t\t\tvar first = ((this.type & 0x0f) << 4);\n\n\t\t\t/*\n\t\t * Now calculate the length of the variable header + payload by adding up the lengths\n\t\t * of all the component parts\n\t\t */\n\n\t\t\tvar remLength = 0;\n\t\t\tvar topicStrLength = [];\n\t\t\tvar destinationNameLength = 0;\n\t\t\tvar willMessagePayloadBytes;\n\n\t\t\t// if the message contains a messageIdentifier then we need two bytes for that\n\t\t\tif (this.messageIdentifier !== undefined)\n\t\t\t\tremLength += 2;\n\n\t\t\tswitch(this.type) {\n\t\t\t// If this a Connect then we need to include 12 bytes for its header\n\t\t\tcase MESSAGE_TYPE.CONNECT:\n\t\t\t\tswitch(this.mqttVersion) {\n\t\t\t\tcase 3:\n\t\t\t\t\tremLength += MqttProtoIdentifierv3.length + 3;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tremLength += MqttProtoIdentifierv4.length + 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tremLength += UTF8Length(this.clientId) + 2;\n\t\t\t\tif (this.willMessage !== undefined) {\n\t\t\t\t\tremLength += UTF8Length(this.willMessage.destinationName) + 2;\n\t\t\t\t\t// Will message is always a string, sent as UTF-8 characters with a preceding length.\n\t\t\t\t\twillMessagePayloadBytes = this.willMessage.payloadBytes;\n\t\t\t\t\tif (!(willMessagePayloadBytes instanceof Uint8Array))\n\t\t\t\t\t\twillMessagePayloadBytes = new Uint8Array(payloadBytes);\n\t\t\t\t\tremLength += willMessagePayloadBytes.byteLength +2;\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tremLength += UTF8Length(this.userName) + 2;\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tremLength += UTF8Length(this.password) + 2;\n\t\t\t\tbreak;\n\n\t\t\t// Subscribe, Unsubscribe can both contain topic strings\n\t\t\tcase MESSAGE_TYPE.SUBSCRIBE:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tfor ( var i = 0; i < this.topics.length; i++) {\n\t\t\t\t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t\t\t\t\tremLength += topicStrLength[i] + 2;\n\t\t\t\t}\n\t\t\t\tremLength += this.requestedQos.length; // 1 byte for each topic's Qos\n\t\t\t\t// QoS on Subscribe only\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.UNSUBSCRIBE:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tfor ( var i = 0; i < this.topics.length; i++) {\n\t\t\t\t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t\t\t\t\tremLength += topicStrLength[i] + 2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBREL:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tif (this.payloadMessage.duplicate) first |= 0x08;\n\t\t\t\tfirst = first |= (this.payloadMessage.qos << 1);\n\t\t\t\tif (this.payloadMessage.retained) first |= 0x01;\n\t\t\t\tdestinationNameLength = UTF8Length(this.payloadMessage.destinationName);\n\t\t\t\tremLength += destinationNameLength + 2;\n\t\t\t\tvar payloadBytes = this.payloadMessage.payloadBytes;\n\t\t\t\tremLength += payloadBytes.byteLength;\n\t\t\t\tif (payloadBytes instanceof ArrayBuffer)\n\t\t\t\t\tpayloadBytes = new Uint8Array(payloadBytes);\n\t\t\t\telse if (!(payloadBytes instanceof Uint8Array))\n\t\t\t\t\tpayloadBytes = new Uint8Array(payloadBytes.buffer);\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.DISCONNECT:\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Now we can allocate a buffer for the message\n\n\t\t\tvar mbi = encodeMBI(remLength); // Convert the length to MQTT MBI format\n\t\t\tvar pos = mbi.length + 1; // Offset of start of variable header\n\t\t\tvar buffer = new ArrayBuffer(remLength + pos);\n\t\t\tvar byteStream = new Uint8Array(buffer); // view it as a sequence of bytes\n\n\t\t\t//Write the fixed header into the buffer\n\t\t\tbyteStream[0] = first;\n\t\t\tbyteStream.set(mbi,1);\n\n\t\t\t// If this is a PUBLISH then the variable header starts with a topic\n\t\t\tif (this.type == MESSAGE_TYPE.PUBLISH)\n\t\t\t\tpos = writeString(this.payloadMessage.destinationName, destinationNameLength, byteStream, pos);\n\t\t\t// If this is a CONNECT then the variable header contains the protocol name/version, flags and keepalive time\n\n\t\t\telse if (this.type == MESSAGE_TYPE.CONNECT) {\n\t\t\t\tswitch (this.mqttVersion) {\n\t\t\t\tcase 3:\n\t\t\t\t\tbyteStream.set(MqttProtoIdentifierv3, pos);\n\t\t\t\t\tpos += MqttProtoIdentifierv3.length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tbyteStream.set(MqttProtoIdentifierv4, pos);\n\t\t\t\t\tpos += MqttProtoIdentifierv4.length;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar connectFlags = 0;\n\t\t\t\tif (this.cleanSession)\n\t\t\t\t\tconnectFlags = 0x02;\n\t\t\t\tif (this.willMessage !== undefined ) {\n\t\t\t\t\tconnectFlags |= 0x04;\n\t\t\t\t\tconnectFlags |= (this.willMessage.qos<<3);\n\t\t\t\t\tif (this.willMessage.retained) {\n\t\t\t\t\t\tconnectFlags |= 0x20;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tconnectFlags |= 0x80;\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tconnectFlags |= 0x40;\n\t\t\t\tbyteStream[pos++] = connectFlags;\n\t\t\t\tpos = writeUint16 (this.keepAliveInterval, byteStream, pos);\n\t\t\t}\n\n\t\t\t// Output the messageIdentifier - if there is one\n\t\t\tif (this.messageIdentifier !== undefined)\n\t\t\t\tpos = writeUint16 (this.messageIdentifier, byteStream, pos);\n\n\t\t\tswitch(this.type) {\n\t\t\tcase MESSAGE_TYPE.CONNECT:\n\t\t\t\tpos = writeString(this.clientId, UTF8Length(this.clientId), byteStream, pos);\n\t\t\t\tif (this.willMessage !== undefined) {\n\t\t\t\t\tpos = writeString(this.willMessage.destinationName, UTF8Length(this.willMessage.destinationName), byteStream, pos);\n\t\t\t\t\tpos = writeUint16(willMessagePayloadBytes.byteLength, byteStream, pos);\n\t\t\t\t\tbyteStream.set(willMessagePayloadBytes, pos);\n\t\t\t\t\tpos += willMessagePayloadBytes.byteLength;\n\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tpos = writeString(this.userName, UTF8Length(this.userName), byteStream, pos);\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tpos = writeString(this.password, UTF8Length(this.password), byteStream, pos);\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\t// PUBLISH has a text or binary payload, if text do not add a 2 byte length field, just the UTF characters.\n\t\t\t\tbyteStream.set(payloadBytes, pos);\n\n\t\t\t\tbreak;\n\n\t\t\t\t// \t case MESSAGE_TYPE.PUBREC:\n\t\t\t\t// \t case MESSAGE_TYPE.PUBREL:\n\t\t\t\t// \t case MESSAGE_TYPE.PUBCOMP:\n\t\t\t\t// \t \tbreak;\n\n\t\t\tcase MESSAGE_TYPE.SUBSCRIBE:\n\t\t\t\t// SUBSCRIBE has a list of topic strings and request QoS\n\t\t\t\tfor (var i=0; i> 4;\n\t\t\tvar messageInfo = first &= 0x0f;\n\t\t\tpos += 1;\n\n\n\t\t\t// Decode the remaining length (MBI format)\n\n\t\t\tvar digit;\n\t\t\tvar remLength = 0;\n\t\t\tvar multiplier = 1;\n\t\t\tdo {\n\t\t\t\tif (pos == input.length) {\n\t\t\t\t\treturn [null,startingPos];\n\t\t\t\t}\n\t\t\t\tdigit = input[pos++];\n\t\t\t\tremLength += ((digit & 0x7F) * multiplier);\n\t\t\t\tmultiplier *= 128;\n\t\t\t} while ((digit & 0x80) !== 0);\n\n\t\t\tvar endPos = pos+remLength;\n\t\t\tif (endPos > input.length) {\n\t\t\t\treturn [null,startingPos];\n\t\t\t}\n\n\t\t\tvar wireMessage = new WireMessage(type);\n\t\t\tswitch(type) {\n\t\t\tcase MESSAGE_TYPE.CONNACK:\n\t\t\t\tvar connectAcknowledgeFlags = input[pos++];\n\t\t\t\tif (connectAcknowledgeFlags & 0x01)\n\t\t\t\t\twireMessage.sessionPresent = true;\n\t\t\t\twireMessage.returnCode = input[pos++];\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tvar qos = (messageInfo >> 1) & 0x03;\n\n\t\t\t\tvar len = readUint16(input, pos);\n\t\t\t\tpos += 2;\n\t\t\t\tvar topicName = parseUTF8(input, pos, len);\n\t\t\t\tpos += len;\n\t\t\t\t// If QoS 1 or 2 there will be a messageIdentifier\n\t\t\t\tif (qos > 0) {\n\t\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\t\tpos += 2;\n\t\t\t\t}\n\n\t\t\t\tvar message = new Message(input.subarray(pos, endPos));\n\t\t\t\tif ((messageInfo & 0x01) == 0x01)\n\t\t\t\t\tmessage.retained = true;\n\t\t\t\tif ((messageInfo & 0x08) == 0x08)\n\t\t\t\t\tmessage.duplicate = true;\n\t\t\t\tmessage.qos = qos;\n\t\t\t\tmessage.destinationName = topicName;\n\t\t\t\twireMessage.payloadMessage = message;\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBACK:\n\t\t\tcase MESSAGE_TYPE.PUBREC:\n\t\t\tcase MESSAGE_TYPE.PUBREL:\n\t\t\tcase MESSAGE_TYPE.PUBCOMP:\n\t\t\tcase MESSAGE_TYPE.UNSUBACK:\n\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.SUBACK:\n\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\tpos += 2;\n\t\t\t\twireMessage.returnCode = input.subarray(pos, endPos);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn [wireMessage,endPos];\n\t\t}\n\n\t\tfunction writeUint16(input, buffer, offset) {\n\t\t\tbuffer[offset++] = input >> 8; //MSB\n\t\t\tbuffer[offset++] = input % 256; //LSB\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction writeString(input, utf8Length, buffer, offset) {\n\t\t\toffset = writeUint16(utf8Length, buffer, offset);\n\t\t\tstringToUTF8(input, buffer, offset);\n\t\t\treturn offset + utf8Length;\n\t\t}\n\n\t\tfunction readUint16(buffer, offset) {\n\t\t\treturn 256*buffer[offset] + buffer[offset+1];\n\t\t}\n\n\t\t/**\n\t * Encodes an MQTT Multi-Byte Integer\n\t * @private\n\t */\n\t\tfunction encodeMBI(number) {\n\t\t\tvar output = new Array(1);\n\t\t\tvar numBytes = 0;\n\n\t\t\tdo {\n\t\t\t\tvar digit = number % 128;\n\t\t\t\tnumber = number >> 7;\n\t\t\t\tif (number > 0) {\n\t\t\t\t\tdigit |= 0x80;\n\t\t\t\t}\n\t\t\t\toutput[numBytes++] = digit;\n\t\t\t} while ( (number > 0) && (numBytes<4) );\n\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Takes a String and calculates its length in bytes when encoded in UTF8.\n\t * @private\n\t */\n\t\tfunction UTF8Length(input) {\n\t\t\tvar output = 0;\n\t\t\tfor (var i = 0; i 0x7FF)\n\t\t\t\t{\n\t\t\t\t\t// Surrogate pair means its a 4 byte character\n\t\t\t\t\tif (0xD800 <= charCode && charCode <= 0xDBFF)\n\t\t\t\t\t{\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\toutput++;\n\t\t\t\t\t}\n\t\t\t\t\toutput +=3;\n\t\t\t\t}\n\t\t\t\telse if (charCode > 0x7F)\n\t\t\t\t\toutput +=2;\n\t\t\t\telse\n\t\t\t\t\toutput++;\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Takes a String and writes it into an array as UTF8 encoded bytes.\n\t * @private\n\t */\n\t\tfunction stringToUTF8(input, output, start) {\n\t\t\tvar pos = start;\n\t\t\tfor (var i = 0; i>6 & 0x1F | 0xC0;\n\t\t\t\t\toutput[pos++] = charCode & 0x3F | 0x80;\n\t\t\t\t} else if (charCode <= 0xFFFF) {\n\t\t\t\t\toutput[pos++] = charCode>>12 & 0x0F | 0xE0;\n\t\t\t\t\toutput[pos++] = charCode>>6 & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode & 0x3F | 0x80;\n\t\t\t\t} else {\n\t\t\t\t\toutput[pos++] = charCode>>18 & 0x07 | 0xF0;\n\t\t\t\t\toutput[pos++] = charCode>>12 & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode>>6 & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode & 0x3F | 0x80;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\tfunction parseUTF8(input, offset, length) {\n\t\t\tvar output = \"\";\n\t\t\tvar utf16;\n\t\t\tvar pos = offset;\n\n\t\t\twhile (pos < offset+length)\n\t\t\t{\n\t\t\t\tvar byte1 = input[pos++];\n\t\t\t\tif (byte1 < 128)\n\t\t\t\t\tutf16 = byte1;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvar byte2 = input[pos++]-128;\n\t\t\t\t\tif (byte2 < 0)\n\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16),\"\"]));\n\t\t\t\t\tif (byte1 < 0xE0) // 2 byte character\n\t\t\t\t\t\tutf16 = 64*(byte1-0xC0) + byte2;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar byte3 = input[pos++]-128;\n\t\t\t\t\t\tif (byte3 < 0)\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16)]));\n\t\t\t\t\t\tif (byte1 < 0xF0) // 3 byte character\n\t\t\t\t\t\t\tutf16 = 4096*(byte1-0xE0) + 64*byte2 + byte3;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar byte4 = input[pos++]-128;\n\t\t\t\t\t\t\tif (byte4 < 0)\n\t\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n\t\t\t\t\t\t\tif (byte1 < 0xF8) // 4 byte character\n\t\t\t\t\t\t\t\tutf16 = 262144*(byte1-0xF0) + 4096*byte2 + 64*byte3 + byte4;\n\t\t\t\t\t\t\telse // longer encodings are not supported\n\t\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (utf16 > 0xFFFF) // 4 byte character - express as a surrogate pair\n\t\t\t\t{\n\t\t\t\t\tutf16 -= 0x10000;\n\t\t\t\t\toutput += String.fromCharCode(0xD800 + (utf16 >> 10)); // lead character\n\t\t\t\t\tutf16 = 0xDC00 + (utf16 & 0x3FF); // trail character\n\t\t\t\t}\n\t\t\t\toutput += String.fromCharCode(utf16);\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Repeat keepalive requests, monitor responses.\n\t * @ignore\n\t */\n\t\tvar Pinger = function(client, keepAliveInterval) {\n\t\t\tthis._client = client;\n\t\t\tthis._keepAliveInterval = keepAliveInterval*1000;\n\t\t\tthis.isReset = false;\n\n\t\t\tvar pingReq = new WireMessage(MESSAGE_TYPE.PINGREQ).encode();\n\n\t\t\tvar doTimeout = function (pinger) {\n\t\t\t\treturn function () {\n\t\t\t\t\treturn doPing.apply(pinger);\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t/** @ignore */\n\t\t\tvar doPing = function() {\n\t\t\t\tif (!this.isReset) {\n\t\t\t\t\tthis._client._trace(\"Pinger.doPing\", \"Timed out\");\n\t\t\t\t\tthis._client._disconnected( ERROR.PING_TIMEOUT.code , format(ERROR.PING_TIMEOUT));\n\t\t\t\t} else {\n\t\t\t\t\tthis.isReset = false;\n\t\t\t\t\tthis._client._trace(\"Pinger.doPing\", \"send PINGREQ\");\n\t\t\t\t\tthis._client.socket.send(pingReq);\n\t\t\t\t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.reset = function() {\n\t\t\t\tthis.isReset = true;\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t\tif (this._keepAliveInterval > 0)\n\t\t\t\t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n\t\t\t};\n\n\t\t\tthis.cancel = function() {\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * Monitor request completion.\n\t * @ignore\n\t */\n\t\tvar Timeout = function(client, timeoutSeconds, action, args) {\n\t\t\tif (!timeoutSeconds)\n\t\t\t\ttimeoutSeconds = 30;\n\n\t\t\tvar doTimeout = function (action, client, args) {\n\t\t\t\treturn function () {\n\t\t\t\t\treturn action.apply(client, args);\n\t\t\t\t};\n\t\t\t};\n\t\t\tthis.timeout = setTimeout(doTimeout(action, client, args), timeoutSeconds * 1000);\n\n\t\t\tthis.cancel = function() {\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t};\n\t\t};\n\n\t/**\n\t * Internal implementation of the Websockets MQTT V3.1 client.\n\t *\n\t * @name Paho.ClientImpl @constructor\n\t * @param {String} host the DNS nameof the webSocket host.\n\t * @param {Number} port the port number for that host.\n\t * @param {String} clientId the MQ client identifier.\n\t */\n\t\tvar ClientImpl = function (uri, host, port, path, clientId) {\n\t\t// Check dependencies are satisfied in this browser.\n\t\t\tif (!(\"WebSocket\" in global && global.WebSocket !== null)) {\n\t\t\t\tthrow new Error(format(ERROR.UNSUPPORTED, [\"WebSocket\"]));\n\t\t\t}\n\t\t\tif (!(\"ArrayBuffer\" in global && global.ArrayBuffer !== null)) {\n\t\t\t\tthrow new Error(format(ERROR.UNSUPPORTED, [\"ArrayBuffer\"]));\n\t\t\t}\n\t\t\tthis._trace(\"Paho.Client\", uri, host, port, path, clientId);\n\n\t\t\tthis.host = host;\n\t\t\tthis.port = port;\n\t\t\tthis.path = path;\n\t\t\tthis.uri = uri;\n\t\t\tthis.clientId = clientId;\n\t\t\tthis._wsuri = null;\n\n\t\t\t// Local storagekeys are qualified with the following string.\n\t\t\t// The conditional inclusion of path in the key is for backward\n\t\t\t// compatibility to when the path was not configurable and assumed to\n\t\t\t// be /mqtt\n\t\t\tthis._localKey=host+\":\"+port+(path!=\"/mqtt\"?\":\"+path:\"\")+\":\"+clientId+\":\";\n\n\t\t\t// Create private instance-only message queue\n\t\t\t// Internal queue of messages to be sent, in sending order.\n\t\t\tthis._msg_queue = [];\n\t\t\tthis._buffered_msg_queue = [];\n\n\t\t\t// Messages we have sent and are expecting a response for, indexed by their respective message ids.\n\t\t\tthis._sentMessages = {};\n\n\t\t\t// Messages we have received and acknowleged and are expecting a confirm message for\n\t\t\t// indexed by their respective message ids.\n\t\t\tthis._receivedMessages = {};\n\n\t\t\t// Internal list of callbacks to be executed when messages\n\t\t\t// have been successfully sent over web socket, e.g. disconnect\n\t\t\t// when it doesn't have to wait for ACK, just message is dispatched.\n\t\t\tthis._notify_msg_sent = {};\n\n\t\t\t// Unique identifier for SEND messages, incrementing\n\t\t\t// counter as messages are sent.\n\t\t\tthis._message_identifier = 1;\n\n\t\t\t// Used to determine the transmission sequence of stored sent messages.\n\t\t\tthis._sequence = 0;\n\n\n\t\t\t// Load the local state, if any, from the saved version, only restore state relevant to this client.\n\t\t\tfor (var key in localStorage)\n\t\t\t\tif ( key.indexOf(\"Sent:\"+this._localKey) === 0 || key.indexOf(\"Received:\"+this._localKey) === 0)\n\t\t\t\t\tthis.restore(key);\n\t\t};\n\n\t\t// Messaging Client public instance members.\n\t\tClientImpl.prototype.host = null;\n\t\tClientImpl.prototype.port = null;\n\t\tClientImpl.prototype.path = null;\n\t\tClientImpl.prototype.uri = null;\n\t\tClientImpl.prototype.clientId = null;\n\n\t\t// Messaging Client private instance members.\n\t\tClientImpl.prototype.socket = null;\n\t\t/* true once we have received an acknowledgement to a CONNECT packet. */\n\t\tClientImpl.prototype.connected = false;\n\t\t/* The largest message identifier allowed, may not be larger than 2**16 but\n\t\t * if set smaller reduces the maximum number of outbound messages allowed.\n\t\t */\n\t\tClientImpl.prototype.maxMessageIdentifier = 65536;\n\t\tClientImpl.prototype.connectOptions = null;\n\t\tClientImpl.prototype.hostIndex = null;\n\t\tClientImpl.prototype.onConnected = null;\n\t\tClientImpl.prototype.onConnectionLost = null;\n\t\tClientImpl.prototype.onMessageDelivered = null;\n\t\tClientImpl.prototype.onMessageArrived = null;\n\t\tClientImpl.prototype.traceFunction = null;\n\t\tClientImpl.prototype._msg_queue = null;\n\t\tClientImpl.prototype._buffered_msg_queue = null;\n\t\tClientImpl.prototype._connectTimeout = null;\n\t\t/* The sendPinger monitors how long we allow before we send data to prove to the server that we are alive. */\n\t\tClientImpl.prototype.sendPinger = null;\n\t\t/* The receivePinger monitors how long we allow before we require evidence that the server is alive. */\n\t\tClientImpl.prototype.receivePinger = null;\n\t\tClientImpl.prototype._reconnectInterval = 1; // Reconnect Delay, starts at 1 second\n\t\tClientImpl.prototype._reconnecting = false;\n\t\tClientImpl.prototype._reconnectTimeout = null;\n\t\tClientImpl.prototype.disconnectedPublishing = false;\n\t\tClientImpl.prototype.disconnectedBufferSize = 5000;\n\n\t\tClientImpl.prototype.receiveBuffer = null;\n\n\t\tClientImpl.prototype._traceBuffer = null;\n\t\tClientImpl.prototype._MAX_TRACE_ENTRIES = 100;\n\n\t\tClientImpl.prototype.connect = function (connectOptions) {\n\t\t\tvar connectOptionsMasked = this._traceMask(connectOptions, \"password\");\n\t\t\tthis._trace(\"Client.connect\", connectOptionsMasked, this.socket, this.connected);\n\n\t\t\tif (this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n\t\t\tif (this.socket)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n\n\t\t\tif (this._reconnecting) {\n\t\t\t// connect() function is called while reconnect is in progress.\n\t\t\t// Terminate the auto reconnect process to use new connect options.\n\t\t\t\tthis._reconnectTimeout.cancel();\n\t\t\t\tthis._reconnectTimeout = null;\n\t\t\t\tthis._reconnecting = false;\n\t\t\t}\n\n\t\t\tthis.connectOptions = connectOptions;\n\t\t\tthis._reconnectInterval = 1;\n\t\t\tthis._reconnecting = false;\n\t\t\tif (connectOptions.uris) {\n\t\t\t\tthis.hostIndex = 0;\n\t\t\t\tthis._doConnect(connectOptions.uris[0]);\n\t\t\t} else {\n\t\t\t\tthis._doConnect(this.uri);\n\t\t\t}\n\n\t\t};\n\n\t\tClientImpl.prototype.subscribe = function (filter, subscribeOptions) {\n\t\t\tthis._trace(\"Client.subscribe\", filter, subscribeOptions);\n\n\t\t\tif (!this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\n var wireMessage = new WireMessage(MESSAGE_TYPE.SUBSCRIBE);\n wireMessage.topics = filter.constructor === Array ? filter : [filter];\n if (subscribeOptions.qos === undefined)\n subscribeOptions.qos = 0;\n wireMessage.requestedQos = [];\n for (var i = 0; i < wireMessage.topics.length; i++)\n wireMessage.requestedQos[i] = subscribeOptions.qos;\n\n\t\t\tif (subscribeOptions.onSuccess) {\n\t\t\t\twireMessage.onSuccess = function(grantedQos) {subscribeOptions.onSuccess({invocationContext:subscribeOptions.invocationContext,grantedQos:grantedQos});};\n\t\t\t}\n\n\t\t\tif (subscribeOptions.onFailure) {\n\t\t\t\twireMessage.onFailure = function(errorCode) {subscribeOptions.onFailure({invocationContext:subscribeOptions.invocationContext,errorCode:errorCode, errorMessage:format(errorCode)});};\n\t\t\t}\n\n\t\t\tif (subscribeOptions.timeout) {\n\t\t\t\twireMessage.timeOut = new Timeout(this, subscribeOptions.timeout, subscribeOptions.onFailure,\n\t\t\t\t\t[{invocationContext:subscribeOptions.invocationContext,\n\t\t\t\t\t\terrorCode:ERROR.SUBSCRIBE_TIMEOUT.code,\n\t\t\t\t\t\terrorMessage:format(ERROR.SUBSCRIBE_TIMEOUT)}]);\n\t\t\t}\n\n\t\t\t// All subscriptions return a SUBACK.\n\t\t\tthis._requires_ack(wireMessage);\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype.unsubscribe = function(filter, unsubscribeOptions) {\n\t\t\tthis._trace(\"Client.unsubscribe\", filter, unsubscribeOptions);\n\n\t\t\tif (!this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\n var wireMessage = new WireMessage(MESSAGE_TYPE.UNSUBSCRIBE);\n wireMessage.topics = filter.constructor === Array ? filter : [filter];\n\n\t\t\tif (unsubscribeOptions.onSuccess) {\n\t\t\t\twireMessage.callback = function() {unsubscribeOptions.onSuccess({invocationContext:unsubscribeOptions.invocationContext});};\n\t\t\t}\n\t\t\tif (unsubscribeOptions.timeout) {\n\t\t\t\twireMessage.timeOut = new Timeout(this, unsubscribeOptions.timeout, unsubscribeOptions.onFailure,\n\t\t\t\t\t[{invocationContext:unsubscribeOptions.invocationContext,\n\t\t\t\t\t\terrorCode:ERROR.UNSUBSCRIBE_TIMEOUT.code,\n\t\t\t\t\t\terrorMessage:format(ERROR.UNSUBSCRIBE_TIMEOUT)}]);\n\t\t\t}\n\n\t\t\t// All unsubscribes return a SUBACK.\n\t\t\tthis._requires_ack(wireMessage);\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\tClientImpl.prototype.send = function (message) {\n\t\t\tthis._trace(\"Client.send\", message);\n\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.PUBLISH);\n\t\t\twireMessage.payloadMessage = message;\n\n\t\t\tif (this.connected) {\n\t\t\t// Mark qos 1 & 2 message as \"ACK required\"\n\t\t\t// For qos 0 message, invoke onMessageDelivered callback if there is one.\n\t\t\t// Then schedule the message.\n\t\t\t\tif (message.qos > 0) {\n\t\t\t\t\tthis._requires_ack(wireMessage);\n\t\t\t\t} else if (this.onMessageDelivered) {\n\t\t\t\t\tthis._notify_msg_sent[wireMessage] = this.onMessageDelivered(wireMessage.payloadMessage);\n\t\t\t\t}\n\t\t\t\tthis._schedule_message(wireMessage);\n\t\t\t} else {\n\t\t\t// Currently disconnected, will not schedule this message\n\t\t\t// Check if reconnecting is in progress and disconnected publish is enabled.\n\t\t\t\tif (this._reconnecting && this.disconnectedPublishing) {\n\t\t\t\t// Check the limit which include the \"required ACK\" messages\n\t\t\t\t\tvar messageCount = Object.keys(this._sentMessages).length + this._buffered_msg_queue.length;\n\t\t\t\t\tif (messageCount > this.disconnectedBufferSize) {\n\t\t\t\t\t\tthrow new Error(format(ERROR.BUFFER_FULL, [this.disconnectedBufferSize]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (message.qos > 0) {\n\t\t\t\t\t\t// Mark this message as \"ACK required\"\n\t\t\t\t\t\t\tthis._requires_ack(wireMessage);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twireMessage.sequence = ++this._sequence;\n\t\t\t\t\t\t\t// Add messages in fifo order to array, by adding to start\n\t\t\t\t\t\t\tthis._buffered_msg_queue.unshift(wireMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.disconnect = function () {\n\t\t\tthis._trace(\"Client.disconnect\");\n\n\t\t\tif (this._reconnecting) {\n\t\t\t// disconnect() function is called while reconnect is in progress.\n\t\t\t// Terminate the auto reconnect process.\n\t\t\t\tthis._reconnectTimeout.cancel();\n\t\t\t\tthis._reconnectTimeout = null;\n\t\t\t\tthis._reconnecting = false;\n\t\t\t}\n\n\t\t\tif (!this.socket)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connecting or connected\"]));\n\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.DISCONNECT);\n\n\t\t\t// Run the disconnected call back as soon as the message has been sent,\n\t\t\t// in case of a failure later on in the disconnect processing.\n\t\t\t// as a consequence, the _disconected call back may be run several times.\n\t\t\tthis._notify_msg_sent[wireMessage] = scope(this._disconnected, this);\n\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\tClientImpl.prototype.getTraceLog = function () {\n\t\t\tif ( this._traceBuffer !== null ) {\n\t\t\t\tthis._trace(\"Client.getTraceLog\", new Date());\n\t\t\t\tthis._trace(\"Client.getTraceLog in flight messages\", this._sentMessages.length);\n\t\t\t\tfor (var key in this._sentMessages)\n\t\t\t\t\tthis._trace(\"_sentMessages \",key, this._sentMessages[key]);\n\t\t\t\tfor (var key in this._receivedMessages)\n\t\t\t\t\tthis._trace(\"_receivedMessages \",key, this._receivedMessages[key]);\n\n\t\t\t\treturn this._traceBuffer;\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.startTrace = function () {\n\t\t\tif ( this._traceBuffer === null ) {\n\t\t\t\tthis._traceBuffer = [];\n\t\t\t}\n\t\t\tthis._trace(\"Client.startTrace\", new Date(), version);\n\t\t};\n\n\t\tClientImpl.prototype.stopTrace = function () {\n\t\t\tdelete this._traceBuffer;\n\t\t};\n\n\t\tClientImpl.prototype._doConnect = function (wsurl) {\n\t\t// When the socket is open, this client will send the CONNECT WireMessage using the saved parameters.\n\t\t\tif (this.connectOptions.useSSL) {\n\t\t\t\tvar uriParts = wsurl.split(\":\");\n\t\t\t\turiParts[0] = \"wss\";\n\t\t\t\twsurl = uriParts.join(\":\");\n\t\t\t}\n\t\t\tthis._wsuri = wsurl;\n\t\t\tthis.connected = false;\n\n\n\n\t\t\tif (this.connectOptions.mqttVersion < 4) {\n\t\t\t\tthis.socket = new WebSocket(wsurl, [\"mqttv3.1\"]);\n\t\t\t} else {\n\t\t\t\tthis.socket = new WebSocket(wsurl, [\"mqtt\"]);\n\t\t\t}\n\t\t\tthis.socket.binaryType = \"arraybuffer\";\n\t\t\tthis.socket.onopen = scope(this._on_socket_open, this);\n\t\t\tthis.socket.onmessage = scope(this._on_socket_message, this);\n\t\t\tthis.socket.onerror = scope(this._on_socket_error, this);\n\t\t\tthis.socket.onclose = scope(this._on_socket_close, this);\n\n\t\t\tthis.sendPinger = new Pinger(this, this.connectOptions.keepAliveInterval);\n\t\t\tthis.receivePinger = new Pinger(this, this.connectOptions.keepAliveInterval);\n\t\t\tif (this._connectTimeout) {\n\t\t\t\tthis._connectTimeout.cancel();\n\t\t\t\tthis._connectTimeout = null;\n\t\t\t}\n\t\t\tthis._connectTimeout = new Timeout(this, this.connectOptions.timeout, this._disconnected, [ERROR.CONNECT_TIMEOUT.code, format(ERROR.CONNECT_TIMEOUT)]);\n\t\t};\n\n\n\t\t// Schedule a new message to be sent over the WebSockets\n\t\t// connection. CONNECT messages cause WebSocket connection\n\t\t// to be started. All other messages are queued internally\n\t\t// until this has happened. When WS connection starts, process\n\t\t// all outstanding messages.\n\t\tClientImpl.prototype._schedule_message = function (message) {\n\t\t\t// Add messages in fifo order to array, by adding to start\n\t\t\tthis._msg_queue.unshift(message);\n\t\t\t// Process outstanding messages in the queue if we have an open socket, and have received CONNACK.\n\t\t\tif (this.connected) {\n\t\t\t\tthis._process_queue();\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.store = function(prefix, wireMessage) {\n\t\t\tvar storedMessage = {type:wireMessage.type, messageIdentifier:wireMessage.messageIdentifier, version:1};\n\n\t\t\tswitch(wireMessage.type) {\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tif(wireMessage.pubRecReceived)\n\t\t\t\t\tstoredMessage.pubRecReceived = true;\n\n\t\t\t\t// Convert the payload to a hex string.\n\t\t\t\tstoredMessage.payloadMessage = {};\n\t\t\t\tvar hex = \"\";\n\t\t\t\tvar messageBytes = wireMessage.payloadMessage.payloadBytes;\n\t\t\t\tfor (var i=0; i= 2) {\n\t\t\t\t\tvar x = parseInt(hex.substring(0, 2), 16);\n\t\t\t\t\thex = hex.substring(2, hex.length);\n\t\t\t\t\tbyteStream[i++] = x;\n\t\t\t\t}\n\t\t\t\tvar payloadMessage = new Message(byteStream);\n\n\t\t\t\tpayloadMessage.qos = storedMessage.payloadMessage.qos;\n\t\t\t\tpayloadMessage.destinationName = storedMessage.payloadMessage.destinationName;\n\t\t\t\tif (storedMessage.payloadMessage.duplicate)\n\t\t\t\t\tpayloadMessage.duplicate = true;\n\t\t\t\tif (storedMessage.payloadMessage.retained)\n\t\t\t\t\tpayloadMessage.retained = true;\n\t\t\t\twireMessage.payloadMessage = payloadMessage;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(format(ERROR.INVALID_STORED_DATA, [key, value]));\n\t\t\t}\n\n\t\t\tif (key.indexOf(\"Sent:\"+this._localKey) === 0) {\n\t\t\t\twireMessage.payloadMessage.duplicate = true;\n\t\t\t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\t} else if (key.indexOf(\"Received:\"+this._localKey) === 0) {\n\t\t\t\tthis._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype._process_queue = function () {\n\t\t\tvar message = null;\n\n\t\t\t// Send all queued messages down socket connection\n\t\t\twhile ((message = this._msg_queue.pop())) {\n\t\t\t\tthis._socket_send(message);\n\t\t\t\t// Notify listeners that message was successfully sent\n\t\t\t\tif (this._notify_msg_sent[message]) {\n\t\t\t\t\tthis._notify_msg_sent[message]();\n\t\t\t\t\tdelete this._notify_msg_sent[message];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Expect an ACK response for this message. Add message to the set of in progress\n\t * messages and set an unused identifier in this message.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._requires_ack = function (wireMessage) {\n\t\t\tvar messageCount = Object.keys(this._sentMessages).length;\n\t\t\tif (messageCount > this.maxMessageIdentifier)\n\t\t\t\tthrow Error (\"Too many messages:\"+messageCount);\n\n\t\t\twhile(this._sentMessages[this._message_identifier] !== undefined) {\n\t\t\t\tthis._message_identifier++;\n\t\t\t}\n\t\t\twireMessage.messageIdentifier = this._message_identifier;\n\t\t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\tif (wireMessage.type === MESSAGE_TYPE.PUBLISH) {\n\t\t\t\tthis.store(\"Sent:\", wireMessage);\n\t\t\t}\n\t\t\tif (this._message_identifier === this.maxMessageIdentifier) {\n\t\t\t\tthis._message_identifier = 1;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Called when the underlying websocket has been opened.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._on_socket_open = function () {\n\t\t// Create the CONNECT message object.\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.CONNECT, this.connectOptions);\n\t\t\twireMessage.clientId = this.clientId;\n\t\t\tthis._socket_send(wireMessage);\n\t\t};\n\n\t\t/**\n\t * Called when the underlying websocket has received a complete packet.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._on_socket_message = function (event) {\n\t\t\tthis._trace(\"Client._on_socket_message\", event.data);\n\t\t\tvar messages = this._deframeMessages(event.data);\n\t\t\tfor (var i = 0; i < messages.length; i+=1) {\n\t\t\t\tthis._handleMessage(messages[i]);\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype._deframeMessages = function(data) {\n\t\t\tvar byteArray = new Uint8Array(data);\n\t\t\tvar messages = [];\n\t\t\tif (this.receiveBuffer) {\n\t\t\t\tvar newData = new Uint8Array(this.receiveBuffer.length+byteArray.length);\n\t\t\t\tnewData.set(this.receiveBuffer);\n\t\t\t\tnewData.set(byteArray,this.receiveBuffer.length);\n\t\t\t\tbyteArray = newData;\n\t\t\t\tdelete this.receiveBuffer;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tvar offset = 0;\n\t\t\t\twhile(offset < byteArray.length) {\n\t\t\t\t\tvar result = decodeMessage(byteArray,offset);\n\t\t\t\t\tvar wireMessage = result[0];\n\t\t\t\t\toffset = result[1];\n\t\t\t\t\tif (wireMessage !== null) {\n\t\t\t\t\t\tmessages.push(wireMessage);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (offset < byteArray.length) {\n\t\t\t\t\tthis.receiveBuffer = byteArray.subarray(offset);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tvar errorStack = ((error.hasOwnProperty(\"stack\") == \"undefined\") ? error.stack.toString() : \"No Error Stack Available\");\n\t\t\t\tthis._disconnected(ERROR.INTERNAL_ERROR.code , format(ERROR.INTERNAL_ERROR, [error.message,errorStack]));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn messages;\n\t\t};\n\n\t\tClientImpl.prototype._handleMessage = function(wireMessage) {\n\n\t\t\tthis._trace(\"Client._handleMessage\", wireMessage);\n\n\t\t\ttry {\n\t\t\t\tswitch(wireMessage.type) {\n\t\t\t\tcase MESSAGE_TYPE.CONNACK:\n\t\t\t\t\tthis._connectTimeout.cancel();\n\t\t\t\t\tif (this._reconnectTimeout)\n\t\t\t\t\t\tthis._reconnectTimeout.cancel();\n\n\t\t\t\t\t// If we have started using clean session then clear up the local state.\n\t\t\t\t\tif (this.connectOptions.cleanSession) {\n\t\t\t\t\t\tfor (var key in this._sentMessages) {\n\t\t\t\t\t\t\tvar sentMessage = this._sentMessages[key];\n\t\t\t\t\t\t\tlocalStorage.removeItem(\"Sent:\"+this._localKey+sentMessage.messageIdentifier);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._sentMessages = {};\n\n\t\t\t\t\t\tfor (var key in this._receivedMessages) {\n\t\t\t\t\t\t\tvar receivedMessage = this._receivedMessages[key];\n\t\t\t\t\t\t\tlocalStorage.removeItem(\"Received:\"+this._localKey+receivedMessage.messageIdentifier);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._receivedMessages = {};\n\t\t\t\t\t}\n\t\t\t\t\t// Client connected and ready for business.\n\t\t\t\t\tif (wireMessage.returnCode === 0) {\n\n\t\t\t\t\t\tthis.connected = true;\n\t\t\t\t\t\t// Jump to the end of the list of uris and stop looking for a good host.\n\n\t\t\t\t\t\tif (this.connectOptions.uris)\n\t\t\t\t\t\t\tthis.hostIndex = this.connectOptions.uris.length;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._disconnected(ERROR.CONNACK_RETURNCODE.code , format(ERROR.CONNACK_RETURNCODE, [wireMessage.returnCode, CONNACK_RC[wireMessage.returnCode]]));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resend messages.\n\t\t\t\t\tvar sequencedMessages = [];\n\t\t\t\t\tfor (var msgId in this._sentMessages) {\n\t\t\t\t\t\tif (this._sentMessages.hasOwnProperty(msgId))\n\t\t\t\t\t\t\tsequencedMessages.push(this._sentMessages[msgId]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Also schedule qos 0 buffered messages if any\n\t\t\t\t\tif (this._buffered_msg_queue.length > 0) {\n\t\t\t\t\t\tvar msg = null;\n\t\t\t\t\t\twhile ((msg = this._buffered_msg_queue.pop())) {\n\t\t\t\t\t\t\tsequencedMessages.push(msg);\n\t\t\t\t\t\t\tif (this.onMessageDelivered)\n\t\t\t\t\t\t\t\tthis._notify_msg_sent[msg] = this.onMessageDelivered(msg.payloadMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Sort sentMessages into the original sent order.\n\t\t\t\t\tvar sequencedMessages = sequencedMessages.sort(function(a,b) {return a.sequence - b.sequence;} );\n\t\t\t\t\tfor (var i=0, len=sequencedMessages.length; i\n\t * Most applications will create just one Client object and then call its connect() method,\n\t * however applications can create more than one Client object if they wish.\n\t * In this case the combination of host, port and clientId attributes must be different for each Client object.\n\t *

\n\t * The send, subscribe and unsubscribe methods are implemented as asynchronous JavaScript methods\n\t * (even though the underlying protocol exchange might be synchronous in nature).\n\t * This means they signal their completion by calling back to the application,\n\t * via Success or Failure callback functions provided by the application on the method in question.\n\t * Such callbacks are called at most once per method invocation and do not persist beyond the lifetime\n\t * of the script that made the invocation.\n\t *

\n\t * In contrast there are some callback functions, most notably onMessageArrived,\n\t * that are defined on the {@link Paho.Client} object.\n\t * These may get called multiple times, and aren't directly related to specific method invocations made by the client.\n\t *\n\t * @name Paho.Client\n\t *\n\t * @constructor\n\t *\n\t * @param {string} host - the address of the messaging server, as a fully qualified WebSocket URI, as a DNS name or dotted decimal IP address.\n\t * @param {number} port - the port number to connect to - only required if host is not a URI\n\t * @param {string} path - the path on the host to connect to - only used if host is not a URI. Default: '/mqtt'.\n\t * @param {string} clientId - the Messaging client identifier, between 1 and 23 characters in length.\n\t *\n\t * @property {string} host - read only the server's DNS hostname or dotted decimal IP address.\n\t * @property {number} port - read only the server's port.\n\t * @property {string} path - read only the server's path.\n\t * @property {string} clientId - read only used when connecting to the server.\n\t * @property {function} onConnectionLost - called when a connection has been lost.\n\t * after a connect() method has succeeded.\n\t * Establish the call back used when a connection has been lost. The connection may be\n\t * lost because the client initiates a disconnect or because the server or network\n\t * cause the client to be disconnected. The disconnect call back may be called without\n\t * the connectionComplete call back being invoked if, for example the client fails to\n\t * connect.\n\t * A single response object parameter is passed to the onConnectionLost callback containing the following fields:\n\t *

    \n\t *
  1. errorCode\n\t *
  2. errorMessage\n\t *
\n\t * @property {function} onMessageDelivered - called when a message has been delivered.\n\t * All processing that this Client will ever do has been completed. So, for example,\n\t * in the case of a Qos=2 message sent by this client, the PubComp flow has been received from the server\n\t * and the message has been removed from persistent storage before this callback is invoked.\n\t * Parameters passed to the onMessageDelivered callback are:\n\t *
    \n\t *
  1. {@link Paho.Message} that was delivered.\n\t *
\n\t * @property {function} onMessageArrived - called when a message has arrived in this Paho.client.\n\t * Parameters passed to the onMessageArrived callback are:\n\t *
    \n\t *
  1. {@link Paho.Message} that has arrived.\n\t *
\n\t * @property {function} onConnected - called when a connection is successfully made to the server.\n\t * after a connect() method.\n\t * Parameters passed to the onConnected callback are:\n\t *
    \n\t *
  1. reconnect (boolean) - If true, the connection was the result of a reconnect.
  2. \n\t *
  3. URI (string) - The URI used to connect to the server.
  4. \n\t *
\n\t * @property {boolean} disconnectedPublishing - if set, will enable disconnected publishing in\n\t * in the event that the connection to the server is lost.\n\t * @property {number} disconnectedBufferSize - Used to set the maximum number of messages that the disconnected\n\t * buffer will hold before rejecting new messages. Default size: 5000 messages\n\t * @property {function} trace - called whenever trace is called. TODO\n\t */\n\t\tvar Client = function (host, port, path, clientId) {\n\n\t\t\tvar uri;\n\n\t\t\tif (typeof host !== \"string\")\n\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof host, \"host\"]));\n\n\t\t\tif (arguments.length == 2) {\n\t\t\t// host: must be full ws:// uri\n\t\t\t// port: clientId\n\t\t\t\tclientId = port;\n\t\t\t\turi = host;\n\t\t\t\tvar match = uri.match(/^(wss?):\\/\\/((\\[(.+)\\])|([^\\/]+?))(:(\\d+))?(\\/.*)$/);\n\t\t\t\tif (match) {\n\t\t\t\t\thost = match[4]||match[2];\n\t\t\t\t\tport = parseInt(match[7]);\n\t\t\t\t\tpath = match[8];\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[host,\"host\"]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (arguments.length == 3) {\n\t\t\t\t\tclientId = path;\n\t\t\t\t\tpath = \"/mqtt\";\n\t\t\t\t}\n\t\t\t\tif (typeof port !== \"number\" || port < 0)\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof port, \"port\"]));\n\t\t\t\tif (typeof path !== \"string\")\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof path, \"path\"]));\n\n\t\t\t\tvar ipv6AddSBracket = (host.indexOf(\":\") !== -1 && host.slice(0,1) !== \"[\" && host.slice(-1) !== \"]\");\n\t\t\t\turi = \"ws://\"+(ipv6AddSBracket?\"[\"+host+\"]\":host)+\":\"+port+path;\n\t\t\t}\n\n\t\t\tvar clientIdLength = 0;\n\t\t\tfor (var i = 0; i 65535)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [clientId, \"clientId\"]));\n\n\t\t\tvar client = new ClientImpl(uri, host, port, path, clientId);\n\n\t\t\t//Public Properties\n\t\t\tObject.defineProperties(this,{\n\t\t\t\t\"host\":{\n\t\t\t\t\tget: function() { return host; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"port\":{\n\t\t\t\t\tget: function() { return port; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"path\":{\n\t\t\t\t\tget: function() { return path; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"uri\":{\n\t\t\t\t\tget: function() { return uri; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"clientId\":{\n\t\t\t\t\tget: function() { return client.clientId; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"onConnected\":{\n\t\t\t\t\tget: function() { return client.onConnected; },\n\t\t\t\t\tset: function(newOnConnected) {\n\t\t\t\t\t\tif (typeof newOnConnected === \"function\")\n\t\t\t\t\t\t\tclient.onConnected = newOnConnected;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnected, \"onConnected\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"disconnectedPublishing\":{\n\t\t\t\t\tget: function() { return client.disconnectedPublishing; },\n\t\t\t\t\tset: function(newDisconnectedPublishing) {\n\t\t\t\t\t\tclient.disconnectedPublishing = newDisconnectedPublishing;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"disconnectedBufferSize\":{\n\t\t\t\t\tget: function() { return client.disconnectedBufferSize; },\n\t\t\t\t\tset: function(newDisconnectedBufferSize) {\n\t\t\t\t\t\tclient.disconnectedBufferSize = newDisconnectedBufferSize;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onConnectionLost\":{\n\t\t\t\t\tget: function() { return client.onConnectionLost; },\n\t\t\t\t\tset: function(newOnConnectionLost) {\n\t\t\t\t\t\tif (typeof newOnConnectionLost === \"function\")\n\t\t\t\t\t\t\tclient.onConnectionLost = newOnConnectionLost;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnectionLost, \"onConnectionLost\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onMessageDelivered\":{\n\t\t\t\t\tget: function() { return client.onMessageDelivered; },\n\t\t\t\t\tset: function(newOnMessageDelivered) {\n\t\t\t\t\t\tif (typeof newOnMessageDelivered === \"function\")\n\t\t\t\t\t\t\tclient.onMessageDelivered = newOnMessageDelivered;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageDelivered, \"onMessageDelivered\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onMessageArrived\":{\n\t\t\t\t\tget: function() { return client.onMessageArrived; },\n\t\t\t\t\tset: function(newOnMessageArrived) {\n\t\t\t\t\t\tif (typeof newOnMessageArrived === \"function\")\n\t\t\t\t\t\t\tclient.onMessageArrived = newOnMessageArrived;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageArrived, \"onMessageArrived\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"trace\":{\n\t\t\t\t\tget: function() { return client.traceFunction; },\n\t\t\t\t\tset: function(trace) {\n\t\t\t\t\t\tif(typeof trace === \"function\"){\n\t\t\t\t\t\t\tclient.traceFunction = trace;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof trace, \"onTrace\"]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t/**\n\t\t * Connect this Messaging client to its server.\n\t\t *\n\t\t * @name Paho.Client#connect\n\t\t * @function\n\t\t * @param {object} connectOptions - Attributes used with the connection.\n\t\t * @param {number} connectOptions.timeout - If the connect has not succeeded within this\n\t\t * number of seconds, it is deemed to have failed.\n\t\t * The default is 30 seconds.\n\t\t * @param {string} connectOptions.userName - Authentication username for this connection.\n\t\t * @param {string} connectOptions.password - Authentication password for this connection.\n\t\t * @param {Paho.Message} connectOptions.willMessage - sent by the server when the client\n\t\t * disconnects abnormally.\n\t\t * @param {number} connectOptions.keepAliveInterval - the server disconnects this client if\n\t\t * there is no activity for this number of seconds.\n\t\t * The default value of 60 seconds is assumed if not set.\n\t\t * @param {boolean} connectOptions.cleanSession - if true(default) the client and server\n\t\t * persistent state is deleted on successful connect.\n\t\t * @param {boolean} connectOptions.useSSL - if present and true, use an SSL Websocket connection.\n\t\t * @param {object} connectOptions.invocationContext - passed to the onSuccess callback or onFailure callback.\n\t\t * @param {function} connectOptions.onSuccess - called when the connect acknowledgement\n\t\t * has been received from the server.\n\t\t * A single response object parameter is passed to the onSuccess callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext as passed in to the onSuccess method in the connectOptions.\n\t\t *
\n\t * @param {function} connectOptions.onFailure - called when the connect request has failed or timed out.\n\t\t * A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext as passed in to the onFailure method in the connectOptions.\n\t\t *
  2. errorCode a number indicating the nature of the error.\n\t\t *
  3. errorMessage text describing the error.\n\t\t *
\n\t * @param {array} connectOptions.hosts - If present this contains either a set of hostnames or fully qualified\n\t\t * WebSocket URIs (ws://iot.eclipse.org:80/ws), that are tried in order in place\n\t\t * of the host and port paramater on the construtor. The hosts are tried one at at time in order until\n\t\t * one of then succeeds.\n\t * @param {array} connectOptions.ports - If present the set of ports matching the hosts. If hosts contains URIs, this property\n\t\t * is not used.\n\t * @param {boolean} connectOptions.reconnect - Sets whether the client will automatically attempt to reconnect\n\t * to the server if the connection is lost.\n\t *
    \n\t *
  • If set to false, the client will not attempt to automatically reconnect to the server in the event that the\n\t * connection is lost.
  • \n\t *
  • If set to true, in the event that the connection is lost, the client will attempt to reconnect to the server.\n\t * It will initially wait 1 second before it attempts to reconnect, for every failed reconnect attempt, the delay\n\t * will double until it is at 2 minutes at which point the delay will stay at 2 minutes.
  • \n\t *
\n\t * @param {number} connectOptions.mqttVersion - The version of MQTT to use to connect to the MQTT Broker.\n\t *
    \n\t *
  • 3 - MQTT V3.1
  • \n\t *
  • 4 - MQTT V3.1.1
  • \n\t *
\n\t * @param {boolean} connectOptions.mqttVersionExplicit - If set to true, will force the connection to use the\n\t * selected MQTT Version or will fail to connect.\n\t * @param {array} connectOptions.uris - If present, should contain a list of fully qualified WebSocket uris\n\t * (e.g. ws://iot.eclipse.org:80/ws), that are tried in order in place of the host and port parameter of the construtor.\n\t * The uris are tried one at a time in order until one of them succeeds. Do not use this in conjunction with hosts as\n\t * the hosts array will be converted to uris and will overwrite this property.\n\t\t * @throws {InvalidState} If the client is not in disconnected state. The client must have received connectionLost\n\t\t * or disconnected before calling connect for a second or subsequent time.\n\t\t */\n\t\t\tthis.connect = function (connectOptions) {\n\t\t\t\tconnectOptions = connectOptions || {} ;\n\t\t\t\tvalidate(connectOptions, {timeout:\"number\",\n\t\t\t\t\tuserName:\"string\",\n\t\t\t\t\tpassword:\"string\",\n\t\t\t\t\twillMessage:\"object\",\n\t\t\t\t\tkeepAliveInterval:\"number\",\n\t\t\t\t\tcleanSession:\"boolean\",\n\t\t\t\t\tuseSSL:\"boolean\",\n\t\t\t\t\tinvocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\thosts:\"object\",\n\t\t\t\t\tports:\"object\",\n\t\t\t\t\treconnect:\"boolean\",\n\t\t\t\t\tmqttVersion:\"number\",\n\t\t\t\t\tmqttVersionExplicit:\"boolean\",\n\t\t\t\t\turis: \"object\"});\n\n\t\t\t\t// If no keep alive interval is set, assume 60 seconds.\n\t\t\t\tif (connectOptions.keepAliveInterval === undefined)\n\t\t\t\t\tconnectOptions.keepAliveInterval = 60;\n\n\t\t\t\tif (connectOptions.mqttVersion > 4 || connectOptions.mqttVersion < 3) {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.mqttVersion, \"connectOptions.mqttVersion\"]));\n\t\t\t\t}\n\n\t\t\t\tif (connectOptions.mqttVersion === undefined) {\n\t\t\t\t\tconnectOptions.mqttVersionExplicit = false;\n\t\t\t\t\tconnectOptions.mqttVersion = 4;\n\t\t\t\t} else {\n\t\t\t\t\tconnectOptions.mqttVersionExplicit = true;\n\t\t\t\t}\n\n\t\t\t\t//Check that if password is set, so is username\n\t\t\t\tif (connectOptions.password !== undefined && connectOptions.userName === undefined)\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.password, \"connectOptions.password\"]));\n\n\t\t\t\tif (connectOptions.willMessage) {\n\t\t\t\t\tif (!(connectOptions.willMessage instanceof Message))\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [connectOptions.willMessage, \"connectOptions.willMessage\"]));\n\t\t\t\t\t// The will message must have a payload that can be represented as a string.\n\t\t\t\t\t// Cause the willMessage to throw an exception if this is not the case.\n\t\t\t\t\tconnectOptions.willMessage.stringPayload = null;\n\n\t\t\t\t\tif (typeof connectOptions.willMessage.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.willMessage.destinationName, \"connectOptions.willMessage.destinationName\"]));\n\t\t\t\t}\n\t\t\t\tif (typeof connectOptions.cleanSession === \"undefined\")\n\t\t\t\t\tconnectOptions.cleanSession = true;\n\t\t\t\tif (connectOptions.hosts) {\n\n\t\t\t\t\tif (!(connectOptions.hosts instanceof Array) )\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n\t\t\t\t\tif (connectOptions.hosts.length <1 )\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n\n\t\t\t\t\tvar usingURIs = false;\n\t\t\t\t\tfor (var i = 0; i\n\t\t * @param {object} subscribeOptions - used to control the subscription\n\t\t *\n\t\t * @param {number} subscribeOptions.qos - the maximum qos of any publications sent\n\t\t * as a result of making this subscription.\n\t\t * @param {object} subscribeOptions.invocationContext - passed to the onSuccess callback\n\t\t * or onFailure callback.\n\t\t * @param {function} subscribeOptions.onSuccess - called when the subscribe acknowledgement\n\t\t * has been received from the server.\n\t\t * A single response object parameter is passed to the onSuccess callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext if set in the subscribeOptions.\n\t\t *
\n\t\t * @param {function} subscribeOptions.onFailure - called when the subscribe request has failed or timed out.\n\t\t * A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext - if set in the subscribeOptions.\n\t\t *
  2. errorCode - a number indicating the nature of the error.\n\t\t *
  3. errorMessage - text describing the error.\n\t\t *
\n\t\t * @param {number} subscribeOptions.timeout - which, if present, determines the number of\n\t\t * seconds after which the onFailure calback is called.\n\t\t * The presence of a timeout does not prevent the onSuccess\n\t\t * callback from being called when the subscribe completes.\n\t\t * @throws {InvalidState} if the client is not in connected state.\n\t\t */\n\t\t\tthis.subscribe = function (filter, subscribeOptions) {\n\t\t\t\tif (typeof filter !== \"string\" && filter.constructor !== Array)\n\t\t\t\t\tthrow new Error(\"Invalid argument:\"+filter);\n\t\t\t\tsubscribeOptions = subscribeOptions || {} ;\n\t\t\t\tvalidate(subscribeOptions, {qos:\"number\",\n\t\t\t\t\tinvocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\ttimeout:\"number\"\n\t\t\t\t});\n\t\t\t\tif (subscribeOptions.timeout && !subscribeOptions.onFailure)\n\t\t\t\t\tthrow new Error(\"subscribeOptions.timeout specified with no onFailure callback.\");\n\t\t\t\tif (typeof subscribeOptions.qos !== \"undefined\" && !(subscribeOptions.qos === 0 || subscribeOptions.qos === 1 || subscribeOptions.qos === 2 ))\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [subscribeOptions.qos, \"subscribeOptions.qos\"]));\n\t\t\t\tclient.subscribe(filter, subscribeOptions);\n\t\t\t};\n\n\t\t/**\n\t\t * Unsubscribe for messages, stop receiving messages sent to destinations described by the filter.\n\t\t *\n\t\t * @name Paho.Client#unsubscribe\n\t\t * @function\n\t\t * @param {string} filter - describing the destinations to receive messages from.\n\t\t * @param {object} unsubscribeOptions - used to control the subscription\n\t\t * @param {object} unsubscribeOptions.invocationContext - passed to the onSuccess callback\n\t\t\t\t\t\t\t\t\t\t\t or onFailure callback.\n\t\t * @param {function} unsubscribeOptions.onSuccess - called when the unsubscribe acknowledgement has been received from the server.\n\t\t * A single response object parameter is passed to the\n\t\t * onSuccess callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext - if set in the unsubscribeOptions.\n\t\t *
\n\t\t * @param {function} unsubscribeOptions.onFailure called when the unsubscribe request has failed or timed out.\n\t\t * A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext - if set in the unsubscribeOptions.\n\t\t *
  2. errorCode - a number indicating the nature of the error.\n\t\t *
  3. errorMessage - text describing the error.\n\t\t *
\n\t\t * @param {number} unsubscribeOptions.timeout - which, if present, determines the number of seconds\n\t\t * after which the onFailure callback is called. The presence of\n\t\t * a timeout does not prevent the onSuccess callback from being\n\t\t * called when the unsubscribe completes\n\t\t * @throws {InvalidState} if the client is not in connected state.\n\t\t */\n\t\t\tthis.unsubscribe = function (filter, unsubscribeOptions) {\n\t\t\t\tif (typeof filter !== \"string\" && filter.constructor !== Array)\n\t\t\t\t\tthrow new Error(\"Invalid argument:\"+filter);\n\t\t\t\tunsubscribeOptions = unsubscribeOptions || {} ;\n\t\t\t\tvalidate(unsubscribeOptions, {invocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\ttimeout:\"number\"\n\t\t\t\t});\n\t\t\t\tif (unsubscribeOptions.timeout && !unsubscribeOptions.onFailure)\n\t\t\t\t\tthrow new Error(\"unsubscribeOptions.timeout specified with no onFailure callback.\");\n\t\t\t\tclient.unsubscribe(filter, unsubscribeOptions);\n\t\t\t};\n\n\t\t\t/**\n\t\t * Send a message to the consumers of the destination in the Message.\n\t\t *\n\t\t * @name Paho.Client#send\n\t\t * @function\n\t\t * @param {string|Paho.Message} topic - mandatory The name of the destination to which the message is to be sent.\n\t\t * \t\t\t\t\t - If it is the only parameter, used as Paho.Message object.\n\t\t * @param {String|ArrayBuffer} payload - The message data to be sent.\n\t\t * @param {number} qos The Quality of Service used to deliver the message.\n\t\t * \t\t
\n\t\t * \t\t\t
0 Best effort (default).\n\t\t * \t\t\t
1 At least once.\n\t\t * \t\t\t
2 Exactly once.\n\t\t * \t\t
\n\t\t * @param {Boolean} retained If true, the message is to be retained by the server and delivered\n\t\t * to both current and future subscriptions.\n\t\t * If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t\t * A received message has the retained boolean set to true if the message was published\n\t\t * with the retained boolean set to true\n\t\t * and the subscrption was made after the message has been published.\n\t\t * @throws {InvalidState} if the client is not connected.\n\t\t */\n\t\t\tthis.send = function (topic,payload,qos,retained) {\n\t\t\t\tvar message ;\n\n\t\t\t\tif(arguments.length === 0){\n\t\t\t\t\tthrow new Error(\"Invalid argument.\"+\"length\");\n\n\t\t\t\t}else if(arguments.length == 1) {\n\n\t\t\t\t\tif (!(topic instanceof Message) && (typeof topic !== \"string\"))\n\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+ typeof topic);\n\n\t\t\t\t\tmessage = topic;\n\t\t\t\t\tif (typeof message.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[message.destinationName,\"Message.destinationName\"]));\n\t\t\t\t\tclient.send(message);\n\n\t\t\t\t}else {\n\t\t\t\t//parameter checking in Message object\n\t\t\t\t\tmessage = new Message(payload);\n\t\t\t\t\tmessage.destinationName = topic;\n\t\t\t\t\tif(arguments.length >= 3)\n\t\t\t\t\t\tmessage.qos = qos;\n\t\t\t\t\tif(arguments.length >= 4)\n\t\t\t\t\t\tmessage.retained = retained;\n\t\t\t\t\tclient.send(message);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t * Publish a message to the consumers of the destination in the Message.\n\t\t * Synonym for Paho.Mqtt.Client#send\n\t\t *\n\t\t * @name Paho.Client#publish\n\t\t * @function\n\t\t * @param {string|Paho.Message} topic - mandatory The name of the topic to which the message is to be published.\n\t\t * \t\t\t\t\t - If it is the only parameter, used as Paho.Message object.\n\t\t * @param {String|ArrayBuffer} payload - The message data to be published.\n\t\t * @param {number} qos The Quality of Service used to deliver the message.\n\t\t * \t\t
\n\t\t * \t\t\t
0 Best effort (default).\n\t\t * \t\t\t
1 At least once.\n\t\t * \t\t\t
2 Exactly once.\n\t\t * \t\t
\n\t\t * @param {Boolean} retained If true, the message is to be retained by the server and delivered\n\t\t * to both current and future subscriptions.\n\t\t * If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t\t * A received message has the retained boolean set to true if the message was published\n\t\t * with the retained boolean set to true\n\t\t * and the subscrption was made after the message has been published.\n\t\t * @throws {InvalidState} if the client is not connected.\n\t\t */\n\t\t\tthis.publish = function(topic,payload,qos,retained) {\n\t\t\t\tvar message ;\n\n\t\t\t\tif(arguments.length === 0){\n\t\t\t\t\tthrow new Error(\"Invalid argument.\"+\"length\");\n\n\t\t\t\t}else if(arguments.length == 1) {\n\n\t\t\t\t\tif (!(topic instanceof Message) && (typeof topic !== \"string\"))\n\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+ typeof topic);\n\n\t\t\t\t\tmessage = topic;\n\t\t\t\t\tif (typeof message.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[message.destinationName,\"Message.destinationName\"]));\n\t\t\t\t\tclient.send(message);\n\n\t\t\t\t}else {\n\t\t\t\t\t//parameter checking in Message object\n\t\t\t\t\tmessage = new Message(payload);\n\t\t\t\t\tmessage.destinationName = topic;\n\t\t\t\t\tif(arguments.length >= 3)\n\t\t\t\t\t\tmessage.qos = qos;\n\t\t\t\t\tif(arguments.length >= 4)\n\t\t\t\t\t\tmessage.retained = retained;\n\t\t\t\t\tclient.send(message);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t * Normal disconnect of this Messaging client from its server.\n\t\t *\n\t\t * @name Paho.Client#disconnect\n\t\t * @function\n\t\t * @throws {InvalidState} if the client is already disconnected.\n\t\t */\n\t\t\tthis.disconnect = function () {\n\t\t\t\tclient.disconnect();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Get the contents of the trace log.\n\t\t *\n\t\t * @name Paho.Client#getTraceLog\n\t\t * @function\n\t\t * @return {Object[]} tracebuffer containing the time ordered trace records.\n\t\t */\n\t\t\tthis.getTraceLog = function () {\n\t\t\t\treturn client.getTraceLog();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Start tracing.\n\t\t *\n\t\t * @name Paho.Client#startTrace\n\t\t * @function\n\t\t */\n\t\t\tthis.startTrace = function () {\n\t\t\t\tclient.startTrace();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Stop tracing.\n\t\t *\n\t\t * @name Paho.Client#stopTrace\n\t\t * @function\n\t\t */\n\t\t\tthis.stopTrace = function () {\n\t\t\t\tclient.stopTrace();\n\t\t\t};\n\n\t\t\tthis.isConnected = function() {\n\t\t\t\treturn client.connected;\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * An application message, sent or received.\n\t *

\n\t * All attributes may be null, which implies the default values.\n\t *\n\t * @name Paho.Message\n\t * @constructor\n\t * @param {String|ArrayBuffer} payload The message data to be sent.\n\t *

\n\t * @property {string} payloadString read only The payload as a string if the payload consists of valid UTF-8 characters.\n\t * @property {ArrayBuffer} payloadBytes read only The payload as an ArrayBuffer.\n\t *

\n\t * @property {string} destinationName mandatory The name of the destination to which the message is to be sent\n\t * (for messages about to be sent) or the name of the destination from which the message has been received.\n\t * (for messages received by the onMessage function).\n\t *

\n\t * @property {number} qos The Quality of Service used to deliver the message.\n\t *

\n\t *
0 Best effort (default).\n\t *
1 At least once.\n\t *
2 Exactly once.\n\t *
\n\t *

\n\t * @property {Boolean} retained If true, the message is to be retained by the server and delivered\n\t * to both current and future subscriptions.\n\t * If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t * A received message has the retained boolean set to true if the message was published\n\t * with the retained boolean set to true\n\t * and the subscrption was made after the message has been published.\n\t *

\n\t * @property {Boolean} duplicate read only If true, this message might be a duplicate of one which has already been received.\n\t * This is only set on messages received from the server.\n\t *\n\t */\n\t\tvar Message = function (newPayload) {\n\t\t\tvar payload;\n\t\t\tif ( typeof newPayload === \"string\" ||\n\t\tnewPayload instanceof ArrayBuffer ||\n\t\t(ArrayBuffer.isView(newPayload) && !(newPayload instanceof DataView))\n\t\t\t) {\n\t\t\t\tpayload = newPayload;\n\t\t\t} else {\n\t\t\t\tthrow (format(ERROR.INVALID_ARGUMENT, [newPayload, \"newPayload\"]));\n\t\t\t}\n\n\t\t\tvar destinationName;\n\t\t\tvar qos = 0;\n\t\t\tvar retained = false;\n\t\t\tvar duplicate = false;\n\n\t\t\tObject.defineProperties(this,{\n\t\t\t\t\"payloadString\":{\n\t\t\t\t\tenumerable : true,\n\t\t\t\t\tget : function () {\n\t\t\t\t\t\tif (typeof payload === \"string\")\n\t\t\t\t\t\t\treturn payload;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn parseUTF8(payload, 0, payload.length);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"payloadBytes\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\tif (typeof payload === \"string\") {\n\t\t\t\t\t\t\tvar buffer = new ArrayBuffer(UTF8Length(payload));\n\t\t\t\t\t\t\tvar byteStream = new Uint8Array(buffer);\n\t\t\t\t\t\t\tstringToUTF8(payload, byteStream, 0);\n\n\t\t\t\t\t\t\treturn byteStream;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn payload;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"destinationName\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return destinationName; },\n\t\t\t\t\tset: function(newDestinationName) {\n\t\t\t\t\t\tif (typeof newDestinationName === \"string\")\n\t\t\t\t\t\t\tdestinationName = newDestinationName;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newDestinationName, \"newDestinationName\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"qos\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return qos; },\n\t\t\t\t\tset: function(newQos) {\n\t\t\t\t\t\tif (newQos === 0 || newQos === 1 || newQos === 2 )\n\t\t\t\t\t\t\tqos = newQos;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+newQos);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"retained\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return retained; },\n\t\t\t\t\tset: function(newRetained) {\n\t\t\t\t\t\tif (typeof newRetained === \"boolean\")\n\t\t\t\t\t\t\tretained = newRetained;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newRetained, \"newRetained\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"topic\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return destinationName; },\n\t\t\t\t\tset: function(newTopic) {destinationName=newTopic;}\n\t\t\t\t},\n\t\t\t\t\"duplicate\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return duplicate; },\n\t\t\t\t\tset: function(newDuplicate) {duplicate=newDuplicate;}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// Module contents.\n\t\treturn {\n\t\t\tClient: Client,\n\t\t\tMessage: Message\n\t\t};\n\t// eslint-disable-next-line no-nested-ternary\n\t})(typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n\treturn PahoMQTT;\n});\n","exports.nextTick = function nextTick(fn) {\n var args = Array.prototype.slice.call(arguments);\n args.shift();\n setTimeout(function () {\n fn.apply(null, args);\n }, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\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.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\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 setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","module.exports = require('./src/normalizeWheel.js');\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\nvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\nvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar excludedKeys = {\n\t$applicationCache: true,\n\t$console: true,\n\t$external: true,\n\t$frame: true,\n\t$frameElement: true,\n\t$frames: true,\n\t$innerHeight: true,\n\t$innerWidth: true,\n\t$outerHeight: true,\n\t$outerWidth: true,\n\t$pageXOffset: true,\n\t$pageYOffset: true,\n\t$parent: true,\n\t$scrollLeft: true,\n\t$scrollTop: true,\n\t$scrollX: true,\n\t$scrollY: true,\n\t$self: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true,\n\t$window: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\ttry {\n\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\ttry {\n\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\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\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n"],"sourceRoot":""}