{"version":3,"file":"qiscus-sdk-javascript.mjs","sources":["../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/bind.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/utils.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/buildURL.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/core/InterceptorManager.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/core/AxiosError.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/defaults/transitional.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/toFormData.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/core/settle.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/cookies.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/combineURLs.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/core/buildFullPath.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/cancel/CanceledError.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/adapters/xhr.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/null.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/defaults/index.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/core/transformData.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/cancel/isCancel.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/core/dispatchRequest.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/core/mergeConfig.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/env/data.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/validator.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/core/Axios.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/cancel/CancelToken.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/spread.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/lib/axios.js","../node_modules/.pnpm/axios@0.27.2/node_modules/axios/index.js","../node_modules/.pnpm/symbol-observable@2.0.3/node_modules/symbol-observable/lib/ponyfill.js","../node_modules/.pnpm/symbol-observable@2.0.3/node_modules/symbol-observable/ponyfill.js","../node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/isArguments.js","../node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/implementation.js","../node_modules/.pnpm/object-keys@1.1.1/node_modules/object-keys/index.js","../node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/shams.js","../node_modules/.pnpm/has-symbols@1.0.3/node_modules/has-symbols/index.js","../node_modules/.pnpm/function-bind@1.1.1/node_modules/function-bind/implementation.js","../node_modules/.pnpm/function-bind@1.1.1/node_modules/function-bind/index.js","../node_modules/.pnpm/has@1.0.3/node_modules/has/src/index.js","../node_modules/.pnpm/get-intrinsic@1.1.2/node_modules/get-intrinsic/index.js","../node_modules/.pnpm/has-property-descriptors@1.0.0/node_modules/has-property-descriptors/index.js","../node_modules/.pnpm/define-properties@1.1.4/node_modules/define-properties/index.js","../node_modules/.pnpm/globalthis@1.0.3/node_modules/globalthis/implementation.browser.js","../node_modules/.pnpm/globalthis@1.0.3/node_modules/globalthis/polyfill.js","../node_modules/.pnpm/globalthis@1.0.3/node_modules/globalthis/shim.js","../node_modules/.pnpm/globalthis@1.0.3/node_modules/globalthis/index.js","../node_modules/.pnpm/xstream@11.14.0/node_modules/xstream/index.js","../node_modules/.pnpm/xstream@11.14.0/node_modules/xstream/extra/flattenConcurrently.js","../src/adapters/logger.ts","../src/encoder.ts","../src/utils/try-catch.ts","../src/api.ts","../src/provider.ts","../src/decoder.ts","../node_modules/.pnpm/nanoid@4.0.0/node_modules/nanoid/non-secure/index.js","../src/adapters/message.ts","../node_modules/.pnpm/is_js@0.9.0/node_modules/is_js/is.js","../src/utils/param-utils.ts","../src/utils/stream.ts","../src/utils/match.ts","../node_modules/.pnpm/lodash.debounce@4.0.8/node_modules/lodash.debounce/index.js","../node_modules/.pnpm/pietile-eventemitter@1.0.1/node_modules/pietile-eventemitter/dist/EventEmitter.js","../node_modules/.pnpm/pietile-eventemitter@1.0.1/node_modules/pietile-eventemitter/dist/index.js","../node_modules/.pnpm/mqtt@4.2.8/node_modules/mqtt/dist/mqtt.js","../src/adapters/mqtt.ts","../node_modules/.pnpm/lodash.flatten@4.4.0/node_modules/lodash.flatten/index.js","../src/adapters/sync-event-factory.ts","../src/adapters/sync-factory.ts","../src/adapters/sync.ts","../src/adapters/realtime.ts","../src/adapters/room.ts","../src/adapters/user.ts","../src/defs.ts","../src/hook.ts","../src/storage.ts","../src/index.ts"],"sourcesContent":["'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n  // eslint-disable-next-line func-names\n  return function(thing) {\n    var str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n  };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n  type = type.toLowerCase();\n  return function isKindOf(thing) {\n    return kindOf(thing) === type;\n  };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  var prototype = Object.getPrototypeOf(val);\n  return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n  var pattern = '[object FormData]';\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) ||\n    toString.call(thing) === pattern ||\n    (isFunction(thing.toString) && thing.toString() === pattern)\n  );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (isPlainObject(result[key]) && isPlainObject(val)) {\n      result[key] = merge(result[key], val);\n    } else if (isPlainObject(val)) {\n      result[key] = merge({}, val);\n    } else if (isArray(val)) {\n      result[key] = val.slice();\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n  var props;\n  var i;\n  var prop;\n  var merged = {};\n\n  destObj = destObj || {};\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if (!merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = Object.getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  var lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n  if (!thing) return null;\n  var i = thing.length;\n  if (isUndefined(i)) return null;\n  var arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n  // eslint-disable-next-line func-names\n  return function(thing) {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isPlainObject: isPlainObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim,\n  stripBOM: stripBOM,\n  inherits: inherits,\n  toFlatObject: toFlatObject,\n  kindOf: kindOf,\n  kindOfTest: kindOfTest,\n  endsWith: endsWith,\n  toArray: toArray,\n  isTypedArray: isTypedArray,\n  isFileList: isFileList\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected,\n    synchronous: options ? options.synchronous : false,\n    runWhen: options ? options.runWhen : null\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code,\n      status: this.response && this.response.status ? this.response.status : null\n    };\n  }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n  var axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  });\n\n  AxiosError.call(axiosError, error.message, code, config, request, response);\n\n  axiosError.name = error.name;\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nmodule.exports = {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new FormData();\n\n  var stack = [];\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  function build(data, parentKey) {\n    if (utils.isPlainObject(data) || utils.isArray(data)) {\n      if (stack.indexOf(data) !== -1) {\n        throw Error('Circular reference detected in ' + parentKey);\n      }\n\n      stack.push(data);\n\n      utils.forEach(data, function each(value, key) {\n        if (utils.isUndefined(value)) return;\n        var fullKey = parentKey ? parentKey + '.' + key : key;\n        var arr;\n\n        if (value && !parentKey && typeof value === 'object') {\n          if (utils.endsWith(key, '{}')) {\n            // eslint-disable-next-line no-param-reassign\n            value = JSON.stringify(value);\n          } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n            // eslint-disable-next-line func-names\n            arr.forEach(function(el) {\n              !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n            });\n            return;\n          }\n        }\n\n        build(value, fullKey);\n      });\n\n      stack.pop();\n    } else {\n      formData.append(parentKey, convertValue(data));\n    }\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n  var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n    var responseType = config.responseType;\n    var onCanceled;\n    function done() {\n      if (config.cancelToken) {\n        config.cancelToken.unsubscribe(onCanceled);\n      }\n\n      if (config.signal) {\n        config.signal.removeEventListener('abort', onCanceled);\n      }\n    }\n\n    if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?\n        request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n      var transitional = config.transitional || transitionalDefaults;\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = config.responseType;\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken || config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = function(cancel) {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n        request.abort();\n        request = null;\n      };\n\n      config.cancelToken && config.cancelToken.subscribe(onCanceled);\n      if (config.signal) {\n        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    if (!requestData) {\n      requestData = null;\n    }\n\n    var protocol = parseProtocol(fullPath);\n\n    if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('../adapters/xhr');\n  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('../adapters/http');\n  }\n  return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n\n    var isObjectPayload = utils.isObject(data);\n    var contentType = headers && headers['Content-Type'];\n\n    var isFileList;\n\n    if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n      var _FormData = this.env && this.env.FormData;\n      return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n    } else if (isObjectPayload || contentType === 'application/json') {\n      setContentTypeIfUnset(headers, 'application/json');\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    var transitional = this.transitional || defaults.transitional;\n    var silentJSONParsing = transitional && transitional.silentJSONParsing;\n    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: require('./env/FormData')\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*'\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  var context = this || defaults;\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(context, data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  function getMergedValue(target, source) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge(target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(prop) {\n    if (prop in config2) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  var mergeMap = {\n    'url': valueFromConfig2,\n    'method': valueFromConfig2,\n    'data': valueFromConfig2,\n    'baseURL': defaultToConfig2,\n    'transformRequest': defaultToConfig2,\n    'transformResponse': defaultToConfig2,\n    'paramsSerializer': defaultToConfig2,\n    'timeout': defaultToConfig2,\n    'timeoutMessage': defaultToConfig2,\n    'withCredentials': defaultToConfig2,\n    'adapter': defaultToConfig2,\n    'responseType': defaultToConfig2,\n    'xsrfCookieName': defaultToConfig2,\n    'xsrfHeaderName': defaultToConfig2,\n    'onUploadProgress': defaultToConfig2,\n    'onDownloadProgress': defaultToConfig2,\n    'decompress': defaultToConfig2,\n    'maxContentLength': defaultToConfig2,\n    'maxBodyLength': defaultToConfig2,\n    'beforeRedirect': defaultToConfig2,\n    'transport': defaultToConfig2,\n    'httpAgent': defaultToConfig2,\n    'httpsAgent': defaultToConfig2,\n    'cancelToken': defaultToConfig2,\n    'socketPath': defaultToConfig2,\n    'responseEncoding': defaultToConfig2,\n    'validateStatus': mergeDirectKeys\n  };\n\n  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n    var merge = mergeMap[prop] || mergeDeepProperties;\n    var configValue = merge(prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n};\n","module.exports = {\n  \"version\": \"0.27.2\"\n};","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return function(value, opt, opts) {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  var keys = Object.keys(options);\n  var i = keys.length;\n  while (i-- > 0) {\n    var opt = keys[i];\n    var validator = schema[opt];\n    if (validator) {\n      var value = options[opt];\n      var result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nmodule.exports = {\n  assertOptions: assertOptions,\n  validators: validators\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof configOrUrl === 'string') {\n    config = config || {};\n    config.url = configOrUrl;\n  } else {\n    config = configOrUrl || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  var transitional = config.transitional;\n\n  if (transitional !== undefined) {\n    validator.assertOptions(transitional, {\n      silentJSONParsing: validators.transitional(validators.boolean),\n      forcedJSONParsing: validators.transitional(validators.boolean),\n      clarifyTimeoutError: validators.transitional(validators.boolean)\n    }, false);\n  }\n\n  // filter out skipped interceptors\n  var requestInterceptorChain = [];\n  var synchronousRequestInterceptors = true;\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n      return;\n    }\n\n    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var responseInterceptorChain = [];\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var promise;\n\n  if (!synchronousRequestInterceptors) {\n    var chain = [dispatchRequest, undefined];\n\n    Array.prototype.unshift.apply(chain, requestInterceptorChain);\n    chain = chain.concat(responseInterceptorChain);\n\n    promise = Promise.resolve(config);\n    while (chain.length) {\n      promise = promise.then(chain.shift(), chain.shift());\n    }\n\n    return promise;\n  }\n\n\n  var newConfig = config;\n  while (requestInterceptorChain.length) {\n    var onFulfilled = requestInterceptorChain.shift();\n    var onRejected = requestInterceptorChain.shift();\n    try {\n      newConfig = onFulfilled(newConfig);\n    } catch (error) {\n      onRejected(error);\n      break;\n    }\n  }\n\n  try {\n    promise = dispatchRequest(newConfig);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n\n  while (responseInterceptorChain.length) {\n    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  var fullPath = buildFullPath(config.baseURL, config.url);\n  return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method: method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url: url,\n        data: data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n\n  // eslint-disable-next-line func-names\n  this.promise.then(function(cancel) {\n    if (!token._listeners) return;\n\n    var i;\n    var l = token._listeners.length;\n\n    for (i = 0; i < l; i++) {\n      token._listeners[i](cancel);\n    }\n    token._listeners = null;\n  });\n\n  // eslint-disable-next-line func-names\n  this.promise.then = function(onfulfilled) {\n    var _resolve;\n    // eslint-disable-next-line func-names\n    var promise = new Promise(function(resolve) {\n      token.subscribe(resolve);\n      _resolve = resolve;\n    }).then(onfulfilled);\n\n    promise.cancel = function reject() {\n      token.unsubscribe(_resolve);\n    };\n\n    return promise;\n  };\n\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new CanceledError(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n  if (this.reason) {\n    listener(this.reason);\n    return;\n  }\n\n  if (this._listeners) {\n    this._listeners.push(listener);\n  } else {\n    this._listeners = [listener];\n  }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n  if (!this._listeners) {\n    return;\n  }\n  var index = this._listeners.indexOf(listener);\n  if (index !== -1) {\n    this._listeners.splice(index, 1);\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","module.exports = require('./lib/axios');","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports['default'] = symbolObservablePonyfill;\nfunction symbolObservablePonyfill(root) {\n\tvar result;\n\tvar _Symbol = root.Symbol;\n\n\tif (typeof _Symbol === 'function') {\n\t\tif (_Symbol.observable) {\n\t\t\tresult = _Symbol.observable;\n\t\t} else {\n\n\t\t\t// This just needs to be something that won't trample other user's Symbol.for use\n\t\t\t// It also will guide people to the source of their issues, if this is problematic.\n\t\t\t// META: It's a resource locator!\n\t\t\tresult = _Symbol['for']('https://github.com/benlesh/symbol-observable');\n\t\t\ttry {\n\t\t\t\t_Symbol.observable = result;\n\t\t\t} catch (err) {\n\t\t\t\t// Do nothing. In some environments, users have frozen `Symbol` for security reasons,\n\t\t\t\t// if it is frozen assigning to it will throw. In this case, we don't care, because\n\t\t\t\t// they will need to use the returned value from the ponyfill.\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};","module.exports = require('./lib/ponyfill');\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","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\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\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\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}\n\t\t\t\treturn originalKeys(object);\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","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/g, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","/* eslint no-negated-condition: 0, no-new-func: 0 */\n\n'use strict';\n\nif (typeof self !== 'undefined') {\n\tmodule.exports = self;\n} else if (typeof window !== 'undefined') {\n\tmodule.exports = window;\n} else {\n\tmodule.exports = Function('return this')();\n}\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (typeof global !== 'object' || !global || global.Math !== Math || global.Array !== Array) {\n\t\treturn implementation;\n\t}\n\treturn global;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimGlobal() {\n\tvar polyfill = getPolyfill();\n\tif (define.supportsDescriptors) {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(polyfill, 'globalThis');\n\t\tif (!descriptor || (descriptor.configurable && (descriptor.enumerable || !descriptor.writable || globalThis !== polyfill))) { // eslint-disable-line max-len\n\t\t\tObject.defineProperty(polyfill, 'globalThis', {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: polyfill,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t} else if (typeof globalThis !== 'object' || globalThis !== polyfill) {\n\t\tpolyfill.globalThis = polyfill;\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar defineProperties = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = getPolyfill();\n\nvar getGlobal = function () { return polyfill; };\n\ndefineProperties(getGlobal, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = getGlobal;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NO_IL = exports.NO = exports.MemoryStream = exports.Stream = void 0;\nvar ponyfill_1 = require(\"symbol-observable/ponyfill\");\nvar globalthis_1 = require(\"globalthis\");\nvar $$observable = ponyfill_1.default(globalthis_1.getPolyfill());\nvar NO = {};\nexports.NO = NO;\nfunction noop() { }\nfunction cp(a) {\n    var l = a.length;\n    var b = Array(l);\n    for (var i = 0; i < l; ++i)\n        b[i] = a[i];\n    return b;\n}\nfunction and(f1, f2) {\n    return function andFn(t) {\n        return f1(t) && f2(t);\n    };\n}\nfunction _try(c, t, u) {\n    try {\n        return c.f(t);\n    }\n    catch (e) {\n        u._e(e);\n        return NO;\n    }\n}\nvar NO_IL = {\n    _n: noop,\n    _e: noop,\n    _c: noop,\n};\nexports.NO_IL = NO_IL;\n// mutates the input\nfunction internalizeProducer(producer) {\n    producer._start = function _start(il) {\n        il.next = il._n;\n        il.error = il._e;\n        il.complete = il._c;\n        this.start(il);\n    };\n    producer._stop = producer.stop;\n}\nvar StreamSub = /** @class */ (function () {\n    function StreamSub(_stream, _listener) {\n        this._stream = _stream;\n        this._listener = _listener;\n    }\n    StreamSub.prototype.unsubscribe = function () {\n        this._stream._remove(this._listener);\n    };\n    return StreamSub;\n}());\nvar Observer = /** @class */ (function () {\n    function Observer(_listener) {\n        this._listener = _listener;\n    }\n    Observer.prototype.next = function (value) {\n        this._listener._n(value);\n    };\n    Observer.prototype.error = function (err) {\n        this._listener._e(err);\n    };\n    Observer.prototype.complete = function () {\n        this._listener._c();\n    };\n    return Observer;\n}());\nvar FromObservable = /** @class */ (function () {\n    function FromObservable(observable) {\n        this.type = 'fromObservable';\n        this.ins = observable;\n        this.active = false;\n    }\n    FromObservable.prototype._start = function (out) {\n        this.out = out;\n        this.active = true;\n        this._sub = this.ins.subscribe(new Observer(out));\n        if (!this.active)\n            this._sub.unsubscribe();\n    };\n    FromObservable.prototype._stop = function () {\n        if (this._sub)\n            this._sub.unsubscribe();\n        this.active = false;\n    };\n    return FromObservable;\n}());\nvar Merge = /** @class */ (function () {\n    function Merge(insArr) {\n        this.type = 'merge';\n        this.insArr = insArr;\n        this.out = NO;\n        this.ac = 0;\n    }\n    Merge.prototype._start = function (out) {\n        this.out = out;\n        var s = this.insArr;\n        var L = s.length;\n        this.ac = L;\n        for (var i = 0; i < L; i++)\n            s[i]._add(this);\n    };\n    Merge.prototype._stop = function () {\n        var s = this.insArr;\n        var L = s.length;\n        for (var i = 0; i < L; i++)\n            s[i]._remove(this);\n        this.out = NO;\n    };\n    Merge.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._n(t);\n    };\n    Merge.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    Merge.prototype._c = function () {\n        if (--this.ac <= 0) {\n            var u = this.out;\n            if (u === NO)\n                return;\n            u._c();\n        }\n    };\n    return Merge;\n}());\nvar CombineListener = /** @class */ (function () {\n    function CombineListener(i, out, p) {\n        this.i = i;\n        this.out = out;\n        this.p = p;\n        p.ils.push(this);\n    }\n    CombineListener.prototype._n = function (t) {\n        var p = this.p, out = this.out;\n        if (out === NO)\n            return;\n        if (p.up(t, this.i)) {\n            var b = cp(p.vals);\n            out._n(b);\n        }\n    };\n    CombineListener.prototype._e = function (err) {\n        var out = this.out;\n        if (out === NO)\n            return;\n        out._e(err);\n    };\n    CombineListener.prototype._c = function () {\n        var p = this.p;\n        if (p.out === NO)\n            return;\n        if (--p.Nc === 0)\n            p.out._c();\n    };\n    return CombineListener;\n}());\nvar Combine = /** @class */ (function () {\n    function Combine(insArr) {\n        this.type = 'combine';\n        this.insArr = insArr;\n        this.out = NO;\n        this.ils = [];\n        this.Nc = this.Nn = 0;\n        this.vals = [];\n    }\n    Combine.prototype.up = function (t, i) {\n        var v = this.vals[i];\n        var Nn = !this.Nn ? 0 : v === NO ? --this.Nn : this.Nn;\n        this.vals[i] = t;\n        return Nn === 0;\n    };\n    Combine.prototype._start = function (out) {\n        this.out = out;\n        var s = this.insArr;\n        var n = this.Nc = this.Nn = s.length;\n        var vals = this.vals = new Array(n);\n        if (n === 0) {\n            out._n([]);\n            out._c();\n        }\n        else {\n            for (var i = 0; i < n; i++) {\n                vals[i] = NO;\n                s[i]._add(new CombineListener(i, out, this));\n            }\n        }\n    };\n    Combine.prototype._stop = function () {\n        var s = this.insArr;\n        var n = s.length;\n        var ils = this.ils;\n        for (var i = 0; i < n; i++)\n            s[i]._remove(ils[i]);\n        this.out = NO;\n        this.ils = [];\n        this.vals = [];\n    };\n    return Combine;\n}());\nvar FromArray = /** @class */ (function () {\n    function FromArray(a) {\n        this.type = 'fromArray';\n        this.a = a;\n    }\n    FromArray.prototype._start = function (out) {\n        var a = this.a;\n        for (var i = 0, n = a.length; i < n; i++)\n            out._n(a[i]);\n        out._c();\n    };\n    FromArray.prototype._stop = function () {\n    };\n    return FromArray;\n}());\nvar FromPromise = /** @class */ (function () {\n    function FromPromise(p) {\n        this.type = 'fromPromise';\n        this.on = false;\n        this.p = p;\n    }\n    FromPromise.prototype._start = function (out) {\n        var prod = this;\n        this.on = true;\n        this.p.then(function (v) {\n            if (prod.on) {\n                out._n(v);\n                out._c();\n            }\n        }, function (e) {\n            out._e(e);\n        }).then(noop, function (err) {\n            setTimeout(function () { throw err; });\n        });\n    };\n    FromPromise.prototype._stop = function () {\n        this.on = false;\n    };\n    return FromPromise;\n}());\nvar Periodic = /** @class */ (function () {\n    function Periodic(period) {\n        this.type = 'periodic';\n        this.period = period;\n        this.intervalID = -1;\n        this.i = 0;\n    }\n    Periodic.prototype._start = function (out) {\n        var self = this;\n        function intervalHandler() { out._n(self.i++); }\n        this.intervalID = setInterval(intervalHandler, this.period);\n    };\n    Periodic.prototype._stop = function () {\n        if (this.intervalID !== -1)\n            clearInterval(this.intervalID);\n        this.intervalID = -1;\n        this.i = 0;\n    };\n    return Periodic;\n}());\nvar Debug = /** @class */ (function () {\n    function Debug(ins, arg) {\n        this.type = 'debug';\n        this.ins = ins;\n        this.out = NO;\n        this.s = noop;\n        this.l = '';\n        if (typeof arg === 'string')\n            this.l = arg;\n        else if (typeof arg === 'function')\n            this.s = arg;\n    }\n    Debug.prototype._start = function (out) {\n        this.out = out;\n        this.ins._add(this);\n    };\n    Debug.prototype._stop = function () {\n        this.ins._remove(this);\n        this.out = NO;\n    };\n    Debug.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        var s = this.s, l = this.l;\n        if (s !== noop) {\n            try {\n                s(t);\n            }\n            catch (e) {\n                u._e(e);\n            }\n        }\n        else if (l)\n            console.log(l + ':', t);\n        else\n            console.log(t);\n        u._n(t);\n    };\n    Debug.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    Debug.prototype._c = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._c();\n    };\n    return Debug;\n}());\nvar Drop = /** @class */ (function () {\n    function Drop(max, ins) {\n        this.type = 'drop';\n        this.ins = ins;\n        this.out = NO;\n        this.max = max;\n        this.dropped = 0;\n    }\n    Drop.prototype._start = function (out) {\n        this.out = out;\n        this.dropped = 0;\n        this.ins._add(this);\n    };\n    Drop.prototype._stop = function () {\n        this.ins._remove(this);\n        this.out = NO;\n    };\n    Drop.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        if (this.dropped++ >= this.max)\n            u._n(t);\n    };\n    Drop.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    Drop.prototype._c = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._c();\n    };\n    return Drop;\n}());\nvar EndWhenListener = /** @class */ (function () {\n    function EndWhenListener(out, op) {\n        this.out = out;\n        this.op = op;\n    }\n    EndWhenListener.prototype._n = function () {\n        this.op.end();\n    };\n    EndWhenListener.prototype._e = function (err) {\n        this.out._e(err);\n    };\n    EndWhenListener.prototype._c = function () {\n        this.op.end();\n    };\n    return EndWhenListener;\n}());\nvar EndWhen = /** @class */ (function () {\n    function EndWhen(o, ins) {\n        this.type = 'endWhen';\n        this.ins = ins;\n        this.out = NO;\n        this.o = o;\n        this.oil = NO_IL;\n    }\n    EndWhen.prototype._start = function (out) {\n        this.out = out;\n        this.o._add(this.oil = new EndWhenListener(out, this));\n        this.ins._add(this);\n    };\n    EndWhen.prototype._stop = function () {\n        this.ins._remove(this);\n        this.o._remove(this.oil);\n        this.out = NO;\n        this.oil = NO_IL;\n    };\n    EndWhen.prototype.end = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._c();\n    };\n    EndWhen.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._n(t);\n    };\n    EndWhen.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    EndWhen.prototype._c = function () {\n        this.end();\n    };\n    return EndWhen;\n}());\nvar Filter = /** @class */ (function () {\n    function Filter(passes, ins) {\n        this.type = 'filter';\n        this.ins = ins;\n        this.out = NO;\n        this.f = passes;\n    }\n    Filter.prototype._start = function (out) {\n        this.out = out;\n        this.ins._add(this);\n    };\n    Filter.prototype._stop = function () {\n        this.ins._remove(this);\n        this.out = NO;\n    };\n    Filter.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        var r = _try(this, t, u);\n        if (r === NO || !r)\n            return;\n        u._n(t);\n    };\n    Filter.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    Filter.prototype._c = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._c();\n    };\n    return Filter;\n}());\nvar FlattenListener = /** @class */ (function () {\n    function FlattenListener(out, op) {\n        this.out = out;\n        this.op = op;\n    }\n    FlattenListener.prototype._n = function (t) {\n        this.out._n(t);\n    };\n    FlattenListener.prototype._e = function (err) {\n        this.out._e(err);\n    };\n    FlattenListener.prototype._c = function () {\n        this.op.inner = NO;\n        this.op.less();\n    };\n    return FlattenListener;\n}());\nvar Flatten = /** @class */ (function () {\n    function Flatten(ins) {\n        this.type = 'flatten';\n        this.ins = ins;\n        this.out = NO;\n        this.open = true;\n        this.inner = NO;\n        this.il = NO_IL;\n    }\n    Flatten.prototype._start = function (out) {\n        this.out = out;\n        this.open = true;\n        this.inner = NO;\n        this.il = NO_IL;\n        this.ins._add(this);\n    };\n    Flatten.prototype._stop = function () {\n        this.ins._remove(this);\n        if (this.inner !== NO)\n            this.inner._remove(this.il);\n        this.out = NO;\n        this.open = true;\n        this.inner = NO;\n        this.il = NO_IL;\n    };\n    Flatten.prototype.less = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        if (!this.open && this.inner === NO)\n            u._c();\n    };\n    Flatten.prototype._n = function (s) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        var _a = this, inner = _a.inner, il = _a.il;\n        if (inner !== NO && il !== NO_IL)\n            inner._remove(il);\n        (this.inner = s)._add(this.il = new FlattenListener(u, this));\n    };\n    Flatten.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    Flatten.prototype._c = function () {\n        this.open = false;\n        this.less();\n    };\n    return Flatten;\n}());\nvar Fold = /** @class */ (function () {\n    function Fold(f, seed, ins) {\n        var _this = this;\n        this.type = 'fold';\n        this.ins = ins;\n        this.out = NO;\n        this.f = function (t) { return f(_this.acc, t); };\n        this.acc = this.seed = seed;\n    }\n    Fold.prototype._start = function (out) {\n        this.out = out;\n        this.acc = this.seed;\n        out._n(this.acc);\n        this.ins._add(this);\n    };\n    Fold.prototype._stop = function () {\n        this.ins._remove(this);\n        this.out = NO;\n        this.acc = this.seed;\n    };\n    Fold.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        var r = _try(this, t, u);\n        if (r === NO)\n            return;\n        u._n(this.acc = r);\n    };\n    Fold.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    Fold.prototype._c = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._c();\n    };\n    return Fold;\n}());\nvar Last = /** @class */ (function () {\n    function Last(ins) {\n        this.type = 'last';\n        this.ins = ins;\n        this.out = NO;\n        this.has = false;\n        this.val = NO;\n    }\n    Last.prototype._start = function (out) {\n        this.out = out;\n        this.has = false;\n        this.ins._add(this);\n    };\n    Last.prototype._stop = function () {\n        this.ins._remove(this);\n        this.out = NO;\n        this.val = NO;\n    };\n    Last.prototype._n = function (t) {\n        this.has = true;\n        this.val = t;\n    };\n    Last.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    Last.prototype._c = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        if (this.has) {\n            u._n(this.val);\n            u._c();\n        }\n        else\n            u._e(new Error('last() failed because input stream completed'));\n    };\n    return Last;\n}());\nvar MapOp = /** @class */ (function () {\n    function MapOp(project, ins) {\n        this.type = 'map';\n        this.ins = ins;\n        this.out = NO;\n        this.f = project;\n    }\n    MapOp.prototype._start = function (out) {\n        this.out = out;\n        this.ins._add(this);\n    };\n    MapOp.prototype._stop = function () {\n        this.ins._remove(this);\n        this.out = NO;\n    };\n    MapOp.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        var r = _try(this, t, u);\n        if (r === NO)\n            return;\n        u._n(r);\n    };\n    MapOp.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    MapOp.prototype._c = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._c();\n    };\n    return MapOp;\n}());\nvar Remember = /** @class */ (function () {\n    function Remember(ins) {\n        this.type = 'remember';\n        this.ins = ins;\n        this.out = NO;\n    }\n    Remember.prototype._start = function (out) {\n        this.out = out;\n        this.ins._add(out);\n    };\n    Remember.prototype._stop = function () {\n        this.ins._remove(this.out);\n        this.out = NO;\n    };\n    return Remember;\n}());\nvar ReplaceError = /** @class */ (function () {\n    function ReplaceError(replacer, ins) {\n        this.type = 'replaceError';\n        this.ins = ins;\n        this.out = NO;\n        this.f = replacer;\n    }\n    ReplaceError.prototype._start = function (out) {\n        this.out = out;\n        this.ins._add(this);\n    };\n    ReplaceError.prototype._stop = function () {\n        this.ins._remove(this);\n        this.out = NO;\n    };\n    ReplaceError.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._n(t);\n    };\n    ReplaceError.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        try {\n            this.ins._remove(this);\n            (this.ins = this.f(err))._add(this);\n        }\n        catch (e) {\n            u._e(e);\n        }\n    };\n    ReplaceError.prototype._c = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._c();\n    };\n    return ReplaceError;\n}());\nvar StartWith = /** @class */ (function () {\n    function StartWith(ins, val) {\n        this.type = 'startWith';\n        this.ins = ins;\n        this.out = NO;\n        this.val = val;\n    }\n    StartWith.prototype._start = function (out) {\n        this.out = out;\n        this.out._n(this.val);\n        this.ins._add(out);\n    };\n    StartWith.prototype._stop = function () {\n        this.ins._remove(this.out);\n        this.out = NO;\n    };\n    return StartWith;\n}());\nvar Take = /** @class */ (function () {\n    function Take(max, ins) {\n        this.type = 'take';\n        this.ins = ins;\n        this.out = NO;\n        this.max = max;\n        this.taken = 0;\n    }\n    Take.prototype._start = function (out) {\n        this.out = out;\n        this.taken = 0;\n        if (this.max <= 0)\n            out._c();\n        else\n            this.ins._add(this);\n    };\n    Take.prototype._stop = function () {\n        this.ins._remove(this);\n        this.out = NO;\n    };\n    Take.prototype._n = function (t) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        var m = ++this.taken;\n        if (m < this.max)\n            u._n(t);\n        else if (m === this.max) {\n            u._n(t);\n            u._c();\n        }\n    };\n    Take.prototype._e = function (err) {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._e(err);\n    };\n    Take.prototype._c = function () {\n        var u = this.out;\n        if (u === NO)\n            return;\n        u._c();\n    };\n    return Take;\n}());\nvar Stream = /** @class */ (function () {\n    function Stream(producer) {\n        this._prod = producer || NO;\n        this._ils = [];\n        this._stopID = NO;\n        this._dl = NO;\n        this._d = false;\n        this._target = null;\n        this._err = NO;\n    }\n    Stream.prototype._n = function (t) {\n        var a = this._ils;\n        var L = a.length;\n        if (this._d)\n            this._dl._n(t);\n        if (L == 1)\n            a[0]._n(t);\n        else if (L == 0)\n            return;\n        else {\n            var b = cp(a);\n            for (var i = 0; i < L; i++)\n                b[i]._n(t);\n        }\n    };\n    Stream.prototype._e = function (err) {\n        if (this._err !== NO)\n            return;\n        this._err = err;\n        var a = this._ils;\n        var L = a.length;\n        this._x();\n        if (this._d)\n            this._dl._e(err);\n        if (L == 1)\n            a[0]._e(err);\n        else if (L == 0)\n            return;\n        else {\n            var b = cp(a);\n            for (var i = 0; i < L; i++)\n                b[i]._e(err);\n        }\n        if (!this._d && L == 0)\n            throw this._err;\n    };\n    Stream.prototype._c = function () {\n        var a = this._ils;\n        var L = a.length;\n        this._x();\n        if (this._d)\n            this._dl._c();\n        if (L == 1)\n            a[0]._c();\n        else if (L == 0)\n            return;\n        else {\n            var b = cp(a);\n            for (var i = 0; i < L; i++)\n                b[i]._c();\n        }\n    };\n    Stream.prototype._x = function () {\n        if (this._ils.length === 0)\n            return;\n        if (this._prod !== NO)\n            this._prod._stop();\n        this._err = NO;\n        this._ils = [];\n    };\n    Stream.prototype._stopNow = function () {\n        // WARNING: code that calls this method should\n        // first check if this._prod is valid (not `NO`)\n        this._prod._stop();\n        this._err = NO;\n        this._stopID = NO;\n    };\n    Stream.prototype._add = function (il) {\n        var ta = this._target;\n        if (ta)\n            return ta._add(il);\n        var a = this._ils;\n        a.push(il);\n        if (a.length > 1)\n            return;\n        if (this._stopID !== NO) {\n            clearTimeout(this._stopID);\n            this._stopID = NO;\n        }\n        else {\n            var p = this._prod;\n            if (p !== NO)\n                p._start(this);\n        }\n    };\n    Stream.prototype._remove = function (il) {\n        var _this = this;\n        var ta = this._target;\n        if (ta)\n            return ta._remove(il);\n        var a = this._ils;\n        var i = a.indexOf(il);\n        if (i > -1) {\n            a.splice(i, 1);\n            if (this._prod !== NO && a.length <= 0) {\n                this._err = NO;\n                this._stopID = setTimeout(function () { return _this._stopNow(); });\n            }\n            else if (a.length === 1) {\n                this._pruneCycles();\n            }\n        }\n    };\n    // If all paths stemming from `this` stream eventually end at `this`\n    // stream, then we remove the single listener of `this` stream, to\n    // force it to end its execution and dispose resources. This method\n    // assumes as a precondition that this._ils has just one listener.\n    Stream.prototype._pruneCycles = function () {\n        if (this._hasNoSinks(this, []))\n            this._remove(this._ils[0]);\n    };\n    // Checks whether *there is no* path starting from `x` that leads to an end\n    // listener (sink) in the stream graph, following edges A->B where B is a\n    // listener of A. This means these paths constitute a cycle somehow. Is given\n    // a trace of all visited nodes so far.\n    Stream.prototype._hasNoSinks = function (x, trace) {\n        if (trace.indexOf(x) !== -1)\n            return true;\n        else if (x.out === this)\n            return true;\n        else if (x.out && x.out !== NO)\n            return this._hasNoSinks(x.out, trace.concat(x));\n        else if (x._ils) {\n            for (var i = 0, N = x._ils.length; i < N; i++)\n                if (!this._hasNoSinks(x._ils[i], trace.concat(x)))\n                    return false;\n            return true;\n        }\n        else\n            return false;\n    };\n    Stream.prototype.ctor = function () {\n        return this instanceof MemoryStream ? MemoryStream : Stream;\n    };\n    /**\n     * Adds a Listener to the Stream.\n     *\n     * @param {Listener} listener\n     */\n    Stream.prototype.addListener = function (listener) {\n        listener._n = listener.next || noop;\n        listener._e = listener.error || noop;\n        listener._c = listener.complete || noop;\n        this._add(listener);\n    };\n    /**\n     * Removes a Listener from the Stream, assuming the Listener was added to it.\n     *\n     * @param {Listener<T>} listener\n     */\n    Stream.prototype.removeListener = function (listener) {\n        this._remove(listener);\n    };\n    /**\n     * Adds a Listener to the Stream returning a Subscription to remove that\n     * listener.\n     *\n     * @param {Listener} listener\n     * @returns {Subscription}\n     */\n    Stream.prototype.subscribe = function (listener) {\n        this.addListener(listener);\n        return new StreamSub(this, listener);\n    };\n    /**\n     * Add interop between most.js and RxJS 5\n     *\n     * @returns {Stream}\n     */\n    Stream.prototype[$$observable] = function () {\n        return this;\n    };\n    /**\n     * Creates a new Stream given a Producer.\n     *\n     * @factory true\n     * @param {Producer} producer An optional Producer that dictates how to\n     * start, generate events, and stop the Stream.\n     * @return {Stream}\n     */\n    Stream.create = function (producer) {\n        if (producer) {\n            if (typeof producer.start !== 'function'\n                || typeof producer.stop !== 'function')\n                throw new Error('producer requires both start and stop functions');\n            internalizeProducer(producer); // mutates the input\n        }\n        return new Stream(producer);\n    };\n    /**\n     * Creates a new MemoryStream given a Producer.\n     *\n     * @factory true\n     * @param {Producer} producer An optional Producer that dictates how to\n     * start, generate events, and stop the Stream.\n     * @return {MemoryStream}\n     */\n    Stream.createWithMemory = function (producer) {\n        if (producer)\n            internalizeProducer(producer); // mutates the input\n        return new MemoryStream(producer);\n    };\n    /**\n     * Creates a Stream that does nothing when started. It never emits any event.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     *          never\n     * -----------------------\n     * ```\n     *\n     * @factory true\n     * @return {Stream}\n     */\n    Stream.never = function () {\n        return new Stream({ _start: noop, _stop: noop });\n    };\n    /**\n     * Creates a Stream that immediately emits the \"complete\" notification when\n     * started, and that's it.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * empty\n     * -|\n     * ```\n     *\n     * @factory true\n     * @return {Stream}\n     */\n    Stream.empty = function () {\n        return new Stream({\n            _start: function (il) { il._c(); },\n            _stop: noop,\n        });\n    };\n    /**\n     * Creates a Stream that immediately emits an \"error\" notification with the\n     * value you passed as the `error` argument when the stream starts, and that's\n     * it.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * throw(X)\n     * -X\n     * ```\n     *\n     * @factory true\n     * @param error The error event to emit on the created stream.\n     * @return {Stream}\n     */\n    Stream.throw = function (error) {\n        return new Stream({\n            _start: function (il) { il._e(error); },\n            _stop: noop,\n        });\n    };\n    /**\n     * Creates a stream from an Array, Promise, or an Observable.\n     *\n     * @factory true\n     * @param {Array|PromiseLike|Observable} input The input to make a stream from.\n     * @return {Stream}\n     */\n    Stream.from = function (input) {\n        if (typeof input[$$observable] === 'function')\n            return Stream.fromObservable(input);\n        else if (typeof input.then === 'function')\n            return Stream.fromPromise(input);\n        else if (Array.isArray(input))\n            return Stream.fromArray(input);\n        throw new TypeError(\"Type of input to from() must be an Array, Promise, or Observable\");\n    };\n    /**\n     * Creates a Stream that immediately emits the arguments that you give to\n     * *of*, then completes.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * of(1,2,3)\n     * 123|\n     * ```\n     *\n     * @factory true\n     * @param a The first value you want to emit as an event on the stream.\n     * @param b The second value you want to emit as an event on the stream. One\n     * or more of these values may be given as arguments.\n     * @return {Stream}\n     */\n    Stream.of = function () {\n        var items = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            items[_i] = arguments[_i];\n        }\n        return Stream.fromArray(items);\n    };\n    /**\n     * Converts an array to a stream. The returned stream will emit synchronously\n     * all the items in the array, and then complete.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * fromArray([1,2,3])\n     * 123|\n     * ```\n     *\n     * @factory true\n     * @param {Array} array The array to be converted as a stream.\n     * @return {Stream}\n     */\n    Stream.fromArray = function (array) {\n        return new Stream(new FromArray(array));\n    };\n    /**\n     * Converts a promise to a stream. The returned stream will emit the resolved\n     * value of the promise, and then complete. However, if the promise is\n     * rejected, the stream will emit the corresponding error.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * fromPromise( ----42 )\n     * -----------------42|\n     * ```\n     *\n     * @factory true\n     * @param {PromiseLike} promise The promise to be converted as a stream.\n     * @return {Stream}\n     */\n    Stream.fromPromise = function (promise) {\n        return new Stream(new FromPromise(promise));\n    };\n    /**\n     * Converts an Observable into a Stream.\n     *\n     * @factory true\n     * @param {any} observable The observable to be converted as a stream.\n     * @return {Stream}\n     */\n    Stream.fromObservable = function (obs) {\n        if (obs.endWhen !== undefined)\n            return obs;\n        var o = typeof obs[$$observable] === 'function' ? obs[$$observable]() : obs;\n        return new Stream(new FromObservable(o));\n    };\n    /**\n     * Creates a stream that periodically emits incremental numbers, every\n     * `period` milliseconds.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     *     periodic(1000)\n     * ---0---1---2---3---4---...\n     * ```\n     *\n     * @factory true\n     * @param {number} period The interval in milliseconds to use as a rate of\n     * emission.\n     * @return {Stream}\n     */\n    Stream.periodic = function (period) {\n        return new Stream(new Periodic(period));\n    };\n    Stream.prototype._map = function (project) {\n        return new (this.ctor())(new MapOp(project, this));\n    };\n    /**\n     * Transforms each event from the input Stream through a `project` function,\n     * to get a Stream that emits those transformed events.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --1---3--5-----7------\n     *    map(i => i * 10)\n     * --10--30-50----70-----\n     * ```\n     *\n     * @param {Function} project A function of type `(t: T) => U` that takes event\n     * `t` of type `T` from the input Stream and produces an event of type `U`, to\n     * be emitted on the output Stream.\n     * @return {Stream}\n     */\n    Stream.prototype.map = function (project) {\n        return this._map(project);\n    };\n    /**\n     * It's like `map`, but transforms each input event to always the same\n     * constant value on the output Stream.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --1---3--5-----7-----\n     *       mapTo(10)\n     * --10--10-10----10----\n     * ```\n     *\n     * @param projectedValue A value to emit on the output Stream whenever the\n     * input Stream emits any value.\n     * @return {Stream}\n     */\n    Stream.prototype.mapTo = function (projectedValue) {\n        var s = this.map(function () { return projectedValue; });\n        var op = s._prod;\n        op.type = 'mapTo';\n        return s;\n    };\n    /**\n     * Only allows events that pass the test given by the `passes` argument.\n     *\n     * Each event from the input stream is given to the `passes` function. If the\n     * function returns `true`, the event is forwarded to the output stream,\n     * otherwise it is ignored and not forwarded.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --1---2--3-----4-----5---6--7-8--\n     *     filter(i => i % 2 === 0)\n     * ------2--------4---------6----8--\n     * ```\n     *\n     * @param {Function} passes A function of type `(t: T) => boolean` that takes\n     * an event from the input stream and checks if it passes, by returning a\n     * boolean.\n     * @return {Stream}\n     */\n    Stream.prototype.filter = function (passes) {\n        var p = this._prod;\n        if (p instanceof Filter)\n            return new Stream(new Filter(and(p.f, passes), p.ins));\n        return new Stream(new Filter(passes, this));\n    };\n    /**\n     * Lets the first `amount` many events from the input stream pass to the\n     * output stream, then makes the output stream complete.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --a---b--c----d---e--\n     *    take(3)\n     * --a---b--c|\n     * ```\n     *\n     * @param {number} amount How many events to allow from the input stream\n     * before completing the output stream.\n     * @return {Stream}\n     */\n    Stream.prototype.take = function (amount) {\n        return new (this.ctor())(new Take(amount, this));\n    };\n    /**\n     * Ignores the first `amount` many events from the input stream, and then\n     * after that starts forwarding events from the input stream to the output\n     * stream.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --a---b--c----d---e--\n     *       drop(3)\n     * --------------d---e--\n     * ```\n     *\n     * @param {number} amount How many events to ignore from the input stream\n     * before forwarding all events from the input stream to the output stream.\n     * @return {Stream}\n     */\n    Stream.prototype.drop = function (amount) {\n        return new Stream(new Drop(amount, this));\n    };\n    /**\n     * When the input stream completes, the output stream will emit the last event\n     * emitted by the input stream, and then will also complete.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --a---b--c--d----|\n     *       last()\n     * -----------------d|\n     * ```\n     *\n     * @return {Stream}\n     */\n    Stream.prototype.last = function () {\n        return new Stream(new Last(this));\n    };\n    /**\n     * Prepends the given `initial` value to the sequence of events emitted by the\n     * input stream. The returned stream is a MemoryStream, which means it is\n     * already `remember()`'d.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * ---1---2-----3---\n     *   startWith(0)\n     * 0--1---2-----3---\n     * ```\n     *\n     * @param initial The value or event to prepend.\n     * @return {MemoryStream}\n     */\n    Stream.prototype.startWith = function (initial) {\n        return new MemoryStream(new StartWith(this, initial));\n    };\n    /**\n     * Uses another stream to determine when to complete the current stream.\n     *\n     * When the given `other` stream emits an event or completes, the output\n     * stream will complete. Before that happens, the output stream will behaves\n     * like the input stream.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * ---1---2-----3--4----5----6---\n     *   endWhen( --------a--b--| )\n     * ---1---2-----3--4--|\n     * ```\n     *\n     * @param other Some other stream that is used to know when should the output\n     * stream of this operator complete.\n     * @return {Stream}\n     */\n    Stream.prototype.endWhen = function (other) {\n        return new (this.ctor())(new EndWhen(other, this));\n    };\n    /**\n     * \"Folds\" the stream onto itself.\n     *\n     * Combines events from the past throughout\n     * the entire execution of the input stream, allowing you to accumulate them\n     * together. It's essentially like `Array.prototype.reduce`. The returned\n     * stream is a MemoryStream, which means it is already `remember()`'d.\n     *\n     * The output stream starts by emitting the `seed` which you give as argument.\n     * Then, when an event happens on the input stream, it is combined with that\n     * seed value through the `accumulate` function, and the output value is\n     * emitted on the output stream. `fold` remembers that output value as `acc`\n     * (\"accumulator\"), and then when a new input event `t` happens, `acc` will be\n     * combined with that to produce the new `acc` and so forth.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * ------1-----1--2----1----1------\n     *   fold((acc, x) => acc + x, 3)\n     * 3-----4-----5--7----8----9------\n     * ```\n     *\n     * @param {Function} accumulate A function of type `(acc: R, t: T) => R` that\n     * takes the previous accumulated value `acc` and the incoming event from the\n     * input stream and produces the new accumulated value.\n     * @param seed The initial accumulated value, of type `R`.\n     * @return {MemoryStream}\n     */\n    Stream.prototype.fold = function (accumulate, seed) {\n        return new MemoryStream(new Fold(accumulate, seed, this));\n    };\n    /**\n     * Replaces an error with another stream.\n     *\n     * When (and if) an error happens on the input stream, instead of forwarding\n     * that error to the output stream, *replaceError* will call the `replace`\n     * function which returns the stream that the output stream will replicate.\n     * And, in case that new stream also emits an error, `replace` will be called\n     * again to get another stream to start replicating.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --1---2-----3--4-----X\n     *   replaceError( () => --10--| )\n     * --1---2-----3--4--------10--|\n     * ```\n     *\n     * @param {Function} replace A function of type `(err) => Stream` that takes\n     * the error that occurred on the input stream or on the previous replacement\n     * stream and returns a new stream. The output stream will behave like the\n     * stream that this function returns.\n     * @return {Stream}\n     */\n    Stream.prototype.replaceError = function (replace) {\n        return new (this.ctor())(new ReplaceError(replace, this));\n    };\n    /**\n     * Flattens a \"stream of streams\", handling only one nested stream at a time\n     * (no concurrency).\n     *\n     * If the input stream is a stream that emits streams, then this operator will\n     * return an output stream which is a flat stream: emits regular events. The\n     * flattening happens without concurrency. It works like this: when the input\n     * stream emits a nested stream, *flatten* will start imitating that nested\n     * one. However, as soon as the next nested stream is emitted on the input\n     * stream, *flatten* will forget the previous nested one it was imitating, and\n     * will start imitating the new nested one.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --+--------+---------------\n     *   \\        \\\n     *    \\       ----1----2---3--\n     *    --a--b----c----d--------\n     *           flatten\n     * -----a--b------1----2---3--\n     * ```\n     *\n     * @return {Stream}\n     */\n    Stream.prototype.flatten = function () {\n        return new Stream(new Flatten(this));\n    };\n    /**\n     * Passes the input stream to a custom operator, to produce an output stream.\n     *\n     * *compose* is a handy way of using an existing function in a chained style.\n     * Instead of writing `outStream = f(inStream)` you can write\n     * `outStream = inStream.compose(f)`.\n     *\n     * @param {function} operator A function that takes a stream as input and\n     * returns a stream as well.\n     * @return {Stream}\n     */\n    Stream.prototype.compose = function (operator) {\n        return operator(this);\n    };\n    /**\n     * Returns an output stream that behaves like the input stream, but also\n     * remembers the most recent event that happens on the input stream, so that a\n     * newly added listener will immediately receive that memorised event.\n     *\n     * @return {MemoryStream}\n     */\n    Stream.prototype.remember = function () {\n        return new MemoryStream(new Remember(this));\n    };\n    /**\n     * Returns an output stream that identically behaves like the input stream,\n     * but also runs a `spy` function for each event, to help you debug your app.\n     *\n     * *debug* takes a `spy` function as argument, and runs that for each event\n     * happening on the input stream. If you don't provide the `spy` argument,\n     * then *debug* will just `console.log` each event. This helps you to\n     * understand the flow of events through some operator chain.\n     *\n     * Please note that if the output stream has no listeners, then it will not\n     * start, which means `spy` will never run because no actual event happens in\n     * that case.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --1----2-----3-----4--\n     *         debug\n     * --1----2-----3-----4--\n     * ```\n     *\n     * @param {function} labelOrSpy A string to use as the label when printing\n     * debug information on the console, or a 'spy' function that takes an event\n     * as argument, and does not need to return anything.\n     * @return {Stream}\n     */\n    Stream.prototype.debug = function (labelOrSpy) {\n        return new (this.ctor())(new Debug(this, labelOrSpy));\n    };\n    /**\n     * *imitate* changes this current Stream to emit the same events that the\n     * `other` given Stream does. This method returns nothing.\n     *\n     * This method exists to allow one thing: **circular dependency of streams**.\n     * For instance, let's imagine that for some reason you need to create a\n     * circular dependency where stream `first$` depends on stream `second$`\n     * which in turn depends on `first$`:\n     *\n     * <!-- skip-example -->\n     * ```js\n     * import delay from 'xstream/extra/delay'\n     *\n     * var first$ = second$.map(x => x * 10).take(3);\n     * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100));\n     * ```\n     *\n     * However, that is invalid JavaScript, because `second$` is undefined\n     * on the first line. This is how *imitate* can help solve it:\n     *\n     * ```js\n     * import delay from 'xstream/extra/delay'\n     *\n     * var secondProxy$ = xs.create();\n     * var first$ = secondProxy$.map(x => x * 10).take(3);\n     * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100));\n     * secondProxy$.imitate(second$);\n     * ```\n     *\n     * We create `secondProxy$` before the others, so it can be used in the\n     * declaration of `first$`. Then, after both `first$` and `second$` are\n     * defined, we hook `secondProxy$` with `second$` with `imitate()` to tell\n     * that they are \"the same\". `imitate` will not trigger the start of any\n     * stream, it just binds `secondProxy$` and `second$` together.\n     *\n     * The following is an example where `imitate()` is important in Cycle.js\n     * applications. A parent component contains some child components. A child\n     * has an action stream which is given to the parent to define its state:\n     *\n     * <!-- skip-example -->\n     * ```js\n     * const childActionProxy$ = xs.create();\n     * const parent = Parent({...sources, childAction$: childActionProxy$});\n     * const childAction$ = parent.state$.map(s => s.child.action$).flatten();\n     * childActionProxy$.imitate(childAction$);\n     * ```\n     *\n     * Note, though, that **`imitate()` does not support MemoryStreams**. If we\n     * would attempt to imitate a MemoryStream in a circular dependency, we would\n     * either get a race condition (where the symptom would be \"nothing happens\")\n     * or an infinite cyclic emission of values. It's useful to think about\n     * MemoryStreams as cells in a spreadsheet. It doesn't make any sense to\n     * define a spreadsheet cell `A1` with a formula that depends on `B1` and\n     * cell `B1` defined with a formula that depends on `A1`.\n     *\n     * If you find yourself wanting to use `imitate()` with a\n     * MemoryStream, you should rework your code around `imitate()` to use a\n     * Stream instead. Look for the stream in the circular dependency that\n     * represents an event stream, and that would be a candidate for creating a\n     * proxy Stream which then imitates the target Stream.\n     *\n     * @param {Stream} target The other stream to imitate on the current one. Must\n     * not be a MemoryStream.\n     */\n    Stream.prototype.imitate = function (target) {\n        if (target instanceof MemoryStream)\n            throw new Error('A MemoryStream was given to imitate(), but it only ' +\n                'supports a Stream. Read more about this restriction here: ' +\n                'https://github.com/staltz/xstream#faq');\n        this._target = target;\n        for (var ils = this._ils, N = ils.length, i = 0; i < N; i++)\n            target._add(ils[i]);\n        this._ils = [];\n    };\n    /**\n     * Forces the Stream to emit the given value to its listeners.\n     *\n     * As the name indicates, if you use this, you are most likely doing something\n     * The Wrong Way. Please try to understand the reactive way before using this\n     * method. Use it only when you know what you are doing.\n     *\n     * @param value The \"next\" value you want to broadcast to all listeners of\n     * this Stream.\n     */\n    Stream.prototype.shamefullySendNext = function (value) {\n        this._n(value);\n    };\n    /**\n     * Forces the Stream to emit the given error to its listeners.\n     *\n     * As the name indicates, if you use this, you are most likely doing something\n     * The Wrong Way. Please try to understand the reactive way before using this\n     * method. Use it only when you know what you are doing.\n     *\n     * @param {any} error The error you want to broadcast to all the listeners of\n     * this Stream.\n     */\n    Stream.prototype.shamefullySendError = function (error) {\n        this._e(error);\n    };\n    /**\n     * Forces the Stream to emit the \"completed\" event to its listeners.\n     *\n     * As the name indicates, if you use this, you are most likely doing something\n     * The Wrong Way. Please try to understand the reactive way before using this\n     * method. Use it only when you know what you are doing.\n     */\n    Stream.prototype.shamefullySendComplete = function () {\n        this._c();\n    };\n    /**\n     * Adds a \"debug\" listener to the stream. There can only be one debug\n     * listener, that's why this is 'setDebugListener'. To remove the debug\n     * listener, just call setDebugListener(null).\n     *\n     * A debug listener is like any other listener. The only difference is that a\n     * debug listener is \"stealthy\": its presence/absence does not trigger the\n     * start/stop of the stream (or the producer inside the stream). This is\n     * useful so you can inspect what is going on without changing the behavior\n     * of the program. If you have an idle stream and you add a normal listener to\n     * it, the stream will start executing. But if you set a debug listener on an\n     * idle stream, it won't start executing (not until the first normal listener\n     * is added).\n     *\n     * As the name indicates, we don't recommend using this method to build app\n     * logic. In fact, in most cases the debug operator works just fine. Only use\n     * this one if you know what you're doing.\n     *\n     * @param {Listener<T>} listener\n     */\n    Stream.prototype.setDebugListener = function (listener) {\n        if (!listener) {\n            this._d = false;\n            this._dl = NO;\n        }\n        else {\n            this._d = true;\n            listener._n = listener.next || noop;\n            listener._e = listener.error || noop;\n            listener._c = listener.complete || noop;\n            this._dl = listener;\n        }\n    };\n    /**\n     * Blends multiple streams together, emitting events from all of them\n     * concurrently.\n     *\n     * *merge* takes multiple streams as arguments, and creates a stream that\n     * behaves like each of the argument streams, in parallel.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --1----2-----3--------4---\n     * ----a-----b----c---d------\n     *            merge\n     * --1-a--2--b--3-c---d--4---\n     * ```\n     *\n     * @factory true\n     * @param {Stream} stream1 A stream to merge together with other streams.\n     * @param {Stream} stream2 A stream to merge together with other streams. Two\n     * or more streams may be given as arguments.\n     * @return {Stream}\n     */\n    Stream.merge = function merge() {\n        var streams = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            streams[_i] = arguments[_i];\n        }\n        return new Stream(new Merge(streams));\n    };\n    /**\n     * Combines multiple input streams together to return a stream whose events\n     * are arrays that collect the latest events from each input stream.\n     *\n     * *combine* internally remembers the most recent event from each of the input\n     * streams. When any of the input streams emits an event, that event together\n     * with all the other saved events are combined into an array. That array will\n     * be emitted on the output stream. It's essentially a way of joining together\n     * the events from multiple streams.\n     *\n     * Marble diagram:\n     *\n     * ```text\n     * --1----2-----3--------4---\n     * ----a-----b-----c--d------\n     *          combine\n     * ----1a-2a-2b-3b-3c-3d-4d--\n     * ```\n     *\n     * @factory true\n     * @param {Stream} stream1 A stream to combine together with other streams.\n     * @param {Stream} stream2 A stream to combine together with other streams.\n     * Multiple streams, not just two, may be given as arguments.\n     * @return {Stream}\n     */\n    Stream.combine = function combine() {\n        var streams = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            streams[_i] = arguments[_i];\n        }\n        return new Stream(new Combine(streams));\n    };\n    return Stream;\n}());\nexports.Stream = Stream;\nvar MemoryStream = /** @class */ (function (_super) {\n    __extends(MemoryStream, _super);\n    function MemoryStream(producer) {\n        var _this = _super.call(this, producer) || this;\n        _this._has = false;\n        return _this;\n    }\n    MemoryStream.prototype._n = function (x) {\n        this._v = x;\n        this._has = true;\n        _super.prototype._n.call(this, x);\n    };\n    MemoryStream.prototype._add = function (il) {\n        var ta = this._target;\n        if (ta)\n            return ta._add(il);\n        var a = this._ils;\n        a.push(il);\n        if (a.length > 1) {\n            if (this._has)\n                il._n(this._v);\n            return;\n        }\n        if (this._stopID !== NO) {\n            if (this._has)\n                il._n(this._v);\n            clearTimeout(this._stopID);\n            this._stopID = NO;\n        }\n        else if (this._has)\n            il._n(this._v);\n        else {\n            var p = this._prod;\n            if (p !== NO)\n                p._start(this);\n        }\n    };\n    MemoryStream.prototype._stopNow = function () {\n        this._has = false;\n        _super.prototype._stopNow.call(this);\n    };\n    MemoryStream.prototype._x = function () {\n        this._has = false;\n        _super.prototype._x.call(this);\n    };\n    MemoryStream.prototype.map = function (project) {\n        return this._map(project);\n    };\n    MemoryStream.prototype.mapTo = function (projectedValue) {\n        return _super.prototype.mapTo.call(this, projectedValue);\n    };\n    MemoryStream.prototype.take = function (amount) {\n        return _super.prototype.take.call(this, amount);\n    };\n    MemoryStream.prototype.endWhen = function (other) {\n        return _super.prototype.endWhen.call(this, other);\n    };\n    MemoryStream.prototype.replaceError = function (replace) {\n        return _super.prototype.replaceError.call(this, replace);\n    };\n    MemoryStream.prototype.remember = function () {\n        return this;\n    };\n    MemoryStream.prototype.debug = function (labelOrSpy) {\n        return _super.prototype.debug.call(this, labelOrSpy);\n    };\n    return MemoryStream;\n}(Stream));\nexports.MemoryStream = MemoryStream;\nvar xs = Stream;\nexports.default = xs;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUFrRTtBQUNsRSx5Q0FBMEQ7QUFFMUQsSUFBTSxZQUFZLEdBQUcsa0JBQXdCLENBQUMsd0JBQWEsRUFBRSxDQUFDLENBQUM7QUFFL0QsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBOC9ETCxnQkFBRTtBQTcvRFgsU0FBUyxJQUFJLEtBQUssQ0FBQztBQUVuQixTQUFTLEVBQUUsQ0FBSSxDQUFXO0lBQ3hCLElBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkIsSUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBSSxFQUFxQixFQUFFLEVBQXFCO0lBQzFELE9BQU8sU0FBUyxLQUFLLENBQUMsQ0FBSTtRQUN4QixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQU1ELFNBQVMsSUFBSSxDQUFPLENBQW1CLEVBQUUsQ0FBSSxFQUFFLENBQWM7SUFDM0QsSUFBSTtRQUNGLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNmO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUM7QUFRRCxJQUFNLEtBQUss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TCxVQUFNLFVBQWlEO1FBQ3JELE9BQU8saUJBQU0sS0FBSyxZQUFDLFVBQWlCLENBQW9CLENBQUM7SUFDM0QsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQXhFRCxDQUFxQyxNQUFNLEdBd0UxQztBQXhFWSxvQ0FBWTtBQTJFekIsSUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBRWxCLGtCQUFlLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwb255ZmlsbFN5bWJvbE9ic2VydmFibGUgZnJvbSAnc3ltYm9sLW9ic2VydmFibGUvcG9ueWZpbGwnO1xuaW1wb3J0IHsgZ2V0UG9seWZpbGwgYXMgZ2V0R2xvYmFsVGhpcyB9IGZyb20gJ2dsb2JhbHRoaXMnO1xuXG5jb25zdCAkJG9ic2VydmFibGUgPSBwb255ZmlsbFN5bWJvbE9ic2VydmFibGUoZ2V0R2xvYmFsVGhpcygpKTtcblxuY29uc3QgTk8gPSB7fTtcbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gY3A8VD4oYTogQXJyYXk8VD4pOiBBcnJheTxUPiB7XG4gIGNvbnN0IGwgPSBhLmxlbmd0aDtcbiAgY29uc3QgYiA9IEFycmF5KGwpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGw7ICsraSkgYltpXSA9IGFbaV07XG4gIHJldHVybiBiO1xufVxuXG5mdW5jdGlvbiBhbmQ8VD4oZjE6ICh0OiBUKSA9PiBib29sZWFuLCBmMjogKHQ6IFQpID0+IGJvb2xlYW4pOiAodDogVCkgPT4gYm9vbGVhbiB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmRGbih0OiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGYxKHQpICYmIGYyKHQpO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgRkNvbnRhaW5lcjxULCBSPiB7XG4gIGYodDogVCk6IFI7XG59XG5cbmZ1bmN0aW9uIF90cnk8VCwgUj4oYzogRkNvbnRhaW5lcjxULCBSPiwgdDogVCwgdTogU3RyZWFtPGFueT4pOiBSIHwge30ge1xuICB0cnkge1xuICAgIHJldHVybiBjLmYodCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB1Ll9lKGUpO1xuICAgIHJldHVybiBOTztcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsTGlzdGVuZXI8VD4ge1xuICBfbjogKHY6IFQpID0+IHZvaWQ7XG4gIF9lOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG4gIF9jOiAoKSA9PiB2b2lkO1xufVxuXG5jb25zdCBOT19JTDogSW50ZXJuYWxMaXN0ZW5lcjxhbnk+ID0ge1xuICBfbjogbm9vcCxcbiAgX2U6IG5vb3AsXG4gIF9jOiBub29wLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbFByb2R1Y2VyPFQ+IHtcbiAgX3N0YXJ0KGxpc3RlbmVyOiBJbnRlcm5hbExpc3RlbmVyPFQ+KTogdm9pZDtcbiAgX3N0b3A6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0U2VuZGVyPFQ+IHtcbiAgb3V0OiBTdHJlYW08VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0b3I8VCwgUj4gZXh0ZW5kcyBJbnRlcm5hbFByb2R1Y2VyPFI+LCBJbnRlcm5hbExpc3RlbmVyPFQ+LCBPdXRTZW5kZXI8Uj4ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGluczogU3RyZWFtPFQ+O1xuICBfc3RhcnQob3V0OiBTdHJlYW08Uj4pOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFnZ3JlZ2F0b3I8VCwgVT4gZXh0ZW5kcyBJbnRlcm5hbFByb2R1Y2VyPFU+LCBPdXRTZW5kZXI8VT4ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGluc0FycjogQXJyYXk8U3RyZWFtPFQ+PjtcbiAgX3N0YXJ0KG91dDogU3RyZWFtPFU+KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWNlcjxUPiB7XG4gIHN0YXJ0OiAobGlzdGVuZXI6IExpc3RlbmVyPFQ+KSA9PiB2b2lkO1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbmVyPFQ+IHtcbiAgbmV4dDogKHg6IFQpID0+IHZvaWQ7XG4gIGVycm9yOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG4gIGNvbXBsZXRlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbiB7XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JzZXJ2YWJsZTxUPiB7XG4gIHN1YnNjcmliZShsaXN0ZW5lcjogTGlzdGVuZXI8VD4pOiBTdWJzY3JpcHRpb247XG59XG5cbi8vIG11dGF0ZXMgdGhlIGlucHV0XG5mdW5jdGlvbiBpbnRlcm5hbGl6ZVByb2R1Y2VyPFQ+KHByb2R1Y2VyOiBQcm9kdWNlcjxUPiAmIFBhcnRpYWw8SW50ZXJuYWxQcm9kdWNlcjxUPj4pIHtcbiAgcHJvZHVjZXIuX3N0YXJ0ID0gZnVuY3Rpb24gX3N0YXJ0KGlsOiBJbnRlcm5hbExpc3RlbmVyPFQ+ICYgUGFydGlhbDxMaXN0ZW5lcjxUPj4pIHtcbiAgICBpbC5uZXh0ID0gaWwuX247XG4gICAgaWwuZXJyb3IgPSBpbC5fZTtcbiAgICBpbC5jb21wbGV0ZSA9IGlsLl9jO1xuICAgIHRoaXMuc3RhcnQoaWwgYXMgTGlzdGVuZXI8VD4pO1xuICB9O1xuICBwcm9kdWNlci5fc3RvcCA9IHByb2R1Y2VyLnN0b3A7XG59XG5cbmNsYXNzIFN0cmVhbVN1YjxUPiBpbXBsZW1lbnRzIFN1YnNjcmlwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N0cmVhbTogU3RyZWFtPFQ+LCBwcml2YXRlIF9saXN0ZW5lcjogSW50ZXJuYWxMaXN0ZW5lcjxUPikgeyB9XG5cbiAgdW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RyZWFtLl9yZW1vdmUodGhpcy5fbGlzdGVuZXIpO1xuICB9XG59XG5cbmNsYXNzIE9ic2VydmVyPFQ+IGltcGxlbWVudHMgTGlzdGVuZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9saXN0ZW5lcjogSW50ZXJuYWxMaXN0ZW5lcjxUPikgeyB9XG5cbiAgbmV4dCh2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVyLl9uKHZhbHVlKTtcbiAgfVxuXG4gIGVycm9yKGVycjogYW55KSB7XG4gICAgdGhpcy5fbGlzdGVuZXIuX2UoZXJyKTtcbiAgfVxuXG4gIGNvbXBsZXRlKCkge1xuICAgIHRoaXMuX2xpc3RlbmVyLl9jKCk7XG4gIH1cbn1cblxuY2xhc3MgRnJvbU9ic2VydmFibGU8VD4gaW1wbGVtZW50cyBJbnRlcm5hbFByb2R1Y2VyPFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnZnJvbU9ic2VydmFibGUnO1xuICBwdWJsaWMgaW5zOiBPYnNlcnZhYmxlPFQ+O1xuICBwdWJsaWMgb3V0PzogU3RyZWFtPFQ+O1xuICBwcml2YXRlIGFjdGl2ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPikge1xuICAgIHRoaXMuaW5zID0gb2JzZXJ2YWJsZTtcbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMuX3N1YiA9IHRoaXMuaW5zLnN1YnNjcmliZShuZXcgT2JzZXJ2ZXIob3V0KSk7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkgdGhpcy5fc3ViLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBfc3RvcCgpIHtcbiAgICBpZiAodGhpcy5fc3ViKSB0aGlzLl9zdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2VTaWduYXR1cmUge1xuICAoKTogU3RyZWFtPGFueT47XG4gIDxUMT4oczE6IFN0cmVhbTxUMT4pOiBTdHJlYW08VDE+O1xuICA8VDEsIFQyPihcbiAgICBzMTogU3RyZWFtPFQxPixcbiAgICBzMjogU3RyZWFtPFQyPik6IFN0cmVhbTxUMSB8IFQyPjtcbiAgPFQxLCBUMiwgVDM+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+KTogU3RyZWFtPFQxIHwgVDIgfCBUMz47XG4gIDxUMSwgVDIsIFQzLCBUND4oXG4gICAgczE6IFN0cmVhbTxUMT4sXG4gICAgczI6IFN0cmVhbTxUMj4sXG4gICAgczM6IFN0cmVhbTxUMz4sXG4gICAgczQ6IFN0cmVhbTxUND4pOiBTdHJlYW08VDEgfCBUMiB8IFQzIHwgVDQ+O1xuICA8VDEsIFQyLCBUMywgVDQsIFQ1PihcbiAgICBzMTogU3RyZWFtPFQxPixcbiAgICBzMjogU3RyZWFtPFQyPixcbiAgICBzMzogU3RyZWFtPFQzPixcbiAgICBzNDogU3RyZWFtPFQ0PixcbiAgICBzNTogU3RyZWFtPFQ1Pik6IFN0cmVhbTxUMSB8IFQyIHwgVDMgfCBUNCB8IFQ1PjtcbiAgPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDY+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+KTogU3RyZWFtPFQxIHwgVDIgfCBUMyB8IFQ0IHwgVDUgfCBUNj47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNz4oXG4gICAgczE6IFN0cmVhbTxUMT4sXG4gICAgczI6IFN0cmVhbTxUMj4sXG4gICAgczM6IFN0cmVhbTxUMz4sXG4gICAgczQ6IFN0cmVhbTxUND4sXG4gICAgczU6IFN0cmVhbTxUNT4sXG4gICAgczY6IFN0cmVhbTxUNj4sXG4gICAgczc6IFN0cmVhbTxUNz4pOiBTdHJlYW08VDEgfCBUMiB8IFQzIHwgVDQgfCBUNSB8IFQ2IHwgVDc+O1xuICA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4PihcbiAgICBzMTogU3RyZWFtPFQxPixcbiAgICBzMjogU3RyZWFtPFQyPixcbiAgICBzMzogU3RyZWFtPFQzPixcbiAgICBzNDogU3RyZWFtPFQ0PixcbiAgICBzNTogU3RyZWFtPFQ1PixcbiAgICBzNjogU3RyZWFtPFQ2PixcbiAgICBzNzogU3RyZWFtPFQ3PixcbiAgICBzODogU3RyZWFtPFQ4Pik6IFN0cmVhbTxUMSB8IFQyIHwgVDMgfCBUNCB8IFQ1IHwgVDYgfCBUNyB8IFQ4PjtcbiAgPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDk+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+LFxuICAgIHM5OiBTdHJlYW08VDk+KTogU3RyZWFtPFQxIHwgVDIgfCBUMyB8IFQ0IHwgVDUgfCBUNiB8IFQ3IHwgVDggfCBUOT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTA+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+LFxuICAgIHM5OiBTdHJlYW08VDk+LFxuICAgIHMxMDogU3RyZWFtPFQxMD4pOiBTdHJlYW08VDEgfCBUMiB8IFQzIHwgVDQgfCBUNSB8IFQ2IHwgVDcgfCBUOCB8IFQ5IHwgVDEwPjtcbiAgPFQ+KC4uLnN0cmVhbTogQXJyYXk8U3RyZWFtPFQ+Pik6IFN0cmVhbTxUPjtcbn1cblxuY2xhc3MgTWVyZ2U8VD4gaW1wbGVtZW50cyBBZ2dyZWdhdG9yPFQsIFQ+LCBJbnRlcm5hbExpc3RlbmVyPFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnbWVyZ2UnO1xuICBwdWJsaWMgaW5zQXJyOiBBcnJheTxTdHJlYW08VD4+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHByaXZhdGUgYWM6IG51bWJlcjsgLy8gYWMgaXMgYWN0aXZlQ291bnRcblxuICBjb25zdHJ1Y3RvcihpbnNBcnI6IEFycmF5PFN0cmVhbTxUPj4pIHtcbiAgICB0aGlzLmluc0FyciA9IGluc0FycjtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLmFjID0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIGNvbnN0IHMgPSB0aGlzLmluc0FycjtcbiAgICBjb25zdCBMID0gcy5sZW5ndGg7XG4gICAgdGhpcy5hYyA9IEw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMOyBpKyspIHNbaV0uX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSB0aGlzLmluc0FycjtcbiAgICBjb25zdCBMID0gcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMOyBpKyspIHNbaV0uX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIGlmICgtLXRoaXMuYWMgPD0gMCkge1xuICAgICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgICB1Ll9jKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZVNpZ25hdHVyZSB7XG4gICgpOiBTdHJlYW08QXJyYXk8YW55Pj47XG4gIDxUMT4oczE6IFN0cmVhbTxUMT4pOiBTdHJlYW08W1QxXT47XG4gIDxUMSwgVDI+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+KTogU3RyZWFtPFtUMSwgVDJdPjtcbiAgPFQxLCBUMiwgVDM+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+KTogU3RyZWFtPFtUMSwgVDIsIFQzXT47XG4gIDxUMSwgVDIsIFQzLCBUND4oXG4gICAgczE6IFN0cmVhbTxUMT4sXG4gICAgczI6IFN0cmVhbTxUMj4sXG4gICAgczM6IFN0cmVhbTxUMz4sXG4gICAgczQ6IFN0cmVhbTxUND4pOiBTdHJlYW08W1QxLCBUMiwgVDMsIFQ0XT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDU+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+KTogU3RyZWFtPFtUMSwgVDIsIFQzLCBUNCwgVDVdPjtcbiAgPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDY+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+KTogU3RyZWFtPFtUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2XT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNz4oXG4gICAgczE6IFN0cmVhbTxUMT4sXG4gICAgczI6IFN0cmVhbTxUMj4sXG4gICAgczM6IFN0cmVhbTxUMz4sXG4gICAgczQ6IFN0cmVhbTxUND4sXG4gICAgczU6IFN0cmVhbTxUNT4sXG4gICAgczY6IFN0cmVhbTxUNj4sXG4gICAgczc6IFN0cmVhbTxUNz4pOiBTdHJlYW08W1QxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3XT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDg+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+KTogU3RyZWFtPFtUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDhdPjtcbiAgPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDk+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+LFxuICAgIHM5OiBTdHJlYW08VDk+KTogU3RyZWFtPFtUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5XT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTA+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+LFxuICAgIHM5OiBTdHJlYW08VDk+LFxuICAgIHMxMDogU3RyZWFtPFQxMD4pOiBTdHJlYW08W1QxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMF0+O1xuICA8VD4oLi4uc3RyZWFtOiBBcnJheTxTdHJlYW08VD4+KTogU3RyZWFtPEFycmF5PFQ+PjtcbiAgKC4uLnN0cmVhbTogQXJyYXk8U3RyZWFtPGFueT4+KTogU3RyZWFtPEFycmF5PGFueT4+O1xufVxuXG5jbGFzcyBDb21iaW5lTGlzdGVuZXI8VD4gaW1wbGVtZW50cyBJbnRlcm5hbExpc3RlbmVyPFQ+LCBPdXRTZW5kZXI8QXJyYXk8VD4+IHtcbiAgcHJpdmF0ZSBpOiBudW1iZXI7XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxBcnJheTxUPj47XG4gIHByaXZhdGUgcDogQ29tYmluZTxUPjtcblxuICBjb25zdHJ1Y3RvcihpOiBudW1iZXIsIG91dDogU3RyZWFtPEFycmF5PFQ+PiwgcDogQ29tYmluZTxUPikge1xuICAgIHRoaXMuaSA9IGk7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5wID0gcDtcbiAgICBwLmlscy5wdXNoKHRoaXMpO1xuICB9XG5cbiAgX24odDogVCk6IHZvaWQge1xuICAgIGNvbnN0IHAgPSB0aGlzLnAsIG91dCA9IHRoaXMub3V0O1xuICAgIGlmIChvdXQgPT09IE5PKSByZXR1cm47XG4gICAgaWYgKHAudXAodCwgdGhpcy5pKSkge1xuICAgICAgY29uc3QgYiA9IGNwKHAudmFscyk7XG4gICAgICBvdXQuX24oYik7XG4gICAgfVxuICB9XG5cbiAgX2UoZXJyOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBvdXQgPSB0aGlzLm91dDtcbiAgICBpZiAob3V0ID09PSBOTykgcmV0dXJuO1xuICAgIG91dC5fZShlcnIpO1xuICB9XG5cbiAgX2MoKTogdm9pZCB7XG4gICAgY29uc3QgcCA9IHRoaXMucDtcbiAgICBpZiAocC5vdXQgPT09IE5PKSByZXR1cm47XG4gICAgaWYgKC0tcC5OYyA9PT0gMCkgcC5vdXQuX2MoKTtcbiAgfVxufVxuXG5jbGFzcyBDb21iaW5lPFI+IGltcGxlbWVudHMgQWdncmVnYXRvcjxhbnksIEFycmF5PFI+PiB7XG4gIHB1YmxpYyB0eXBlID0gJ2NvbWJpbmUnO1xuICBwdWJsaWMgaW5zQXJyOiBBcnJheTxTdHJlYW08YW55Pj47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxBcnJheTxSPj47XG4gIHB1YmxpYyBpbHM6IEFycmF5PENvbWJpbmVMaXN0ZW5lcjxhbnk+PjtcbiAgcHVibGljIE5jOiBudW1iZXI7IC8vICpOKnVtYmVyIG9mIHN0cmVhbXMgc3RpbGwgdG8gc2VuZCAqYypvbXBsZXRlXG4gIHB1YmxpYyBObjogbnVtYmVyOyAvLyAqTip1bWJlciBvZiBzdHJlYW1zIHN0aWxsIHRvIHNlbmQgKm4qZXh0XG4gIHB1YmxpYyB2YWxzOiBBcnJheTxSPjtcblxuICBjb25zdHJ1Y3RvcihpbnNBcnI6IEFycmF5PFN0cmVhbTxhbnk+Pikge1xuICAgIHRoaXMuaW5zQXJyID0gaW5zQXJyO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPEFycmF5PFI+PjtcbiAgICB0aGlzLmlscyA9IFtdO1xuICAgIHRoaXMuTmMgPSB0aGlzLk5uID0gMDtcbiAgICB0aGlzLnZhbHMgPSBbXTtcbiAgfVxuXG4gIHVwKHQ6IGFueSwgaTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdiA9IHRoaXMudmFsc1tpXTtcbiAgICBjb25zdCBObiA9ICF0aGlzLk5uID8gMCA6IHYgPT09IE5PID8gLS10aGlzLk5uIDogdGhpcy5ObjtcbiAgICB0aGlzLnZhbHNbaV0gPSB0O1xuICAgIHJldHVybiBObiA9PT0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxBcnJheTxSPj4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICBjb25zdCBzID0gdGhpcy5pbnNBcnI7XG4gICAgY29uc3QgbiA9IHRoaXMuTmMgPSB0aGlzLk5uID0gcy5sZW5ndGg7XG4gICAgY29uc3QgdmFscyA9IHRoaXMudmFscyA9IG5ldyBBcnJheShuKTtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgb3V0Ll9uKFtdKTtcbiAgICAgIG91dC5fYygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB2YWxzW2ldID0gTk87XG4gICAgICAgIHNbaV0uX2FkZChuZXcgQ29tYmluZUxpc3RlbmVyKGksIG91dCwgdGhpcykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSB0aGlzLmluc0FycjtcbiAgICBjb25zdCBuID0gcy5sZW5ndGg7XG4gICAgY29uc3QgaWxzID0gdGhpcy5pbHM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHNbaV0uX3JlbW92ZShpbHNbaV0pO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPEFycmF5PFI+PjtcbiAgICB0aGlzLmlscyA9IFtdO1xuICAgIHRoaXMudmFscyA9IFtdO1xuICB9XG59XG5cbmNsYXNzIEZyb21BcnJheTxUPiBpbXBsZW1lbnRzIEludGVybmFsUHJvZHVjZXI8VD4ge1xuICBwdWJsaWMgdHlwZSA9ICdmcm9tQXJyYXknO1xuICBwdWJsaWMgYTogQXJyYXk8VD47XG5cbiAgY29uc3RydWN0b3IoYTogQXJyYXk8VD4pIHtcbiAgICB0aGlzLmEgPSBhO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogSW50ZXJuYWxMaXN0ZW5lcjxUPik6IHZvaWQge1xuICAgIGNvbnN0IGEgPSB0aGlzLmE7XG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBhLmxlbmd0aDsgaSA8IG47IGkrKykgb3V0Ll9uKGFbaV0pO1xuICAgIG91dC5fYygpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gIH1cbn1cblxuY2xhc3MgRnJvbVByb21pc2U8VD4gaW1wbGVtZW50cyBJbnRlcm5hbFByb2R1Y2VyPFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnZnJvbVByb21pc2UnO1xuICBwdWJsaWMgb246IGJvb2xlYW47XG4gIHB1YmxpYyBwOiBQcm9taXNlTGlrZTxUPjtcblxuICBjb25zdHJ1Y3RvcihwOiBQcm9taXNlTGlrZTxUPikge1xuICAgIHRoaXMub24gPSBmYWxzZTtcbiAgICB0aGlzLnAgPSBwO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogSW50ZXJuYWxMaXN0ZW5lcjxUPik6IHZvaWQge1xuICAgIGNvbnN0IHByb2QgPSB0aGlzO1xuICAgIHRoaXMub24gPSB0cnVlO1xuICAgIHRoaXMucC50aGVuKFxuICAgICAgKHY6IFQpID0+IHtcbiAgICAgICAgaWYgKHByb2Qub24pIHtcbiAgICAgICAgICBvdXQuX24odik7XG4gICAgICAgICAgb3V0Ll9jKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZTogYW55KSA9PiB7XG4gICAgICAgIG91dC5fZShlKTtcbiAgICAgIH0sXG4gICAgKS50aGVuKG5vb3AsIChlcnI6IGFueSkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRocm93IGVycjsgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uID0gZmFsc2U7XG4gIH1cbn1cblxuY2xhc3MgUGVyaW9kaWMgaW1wbGVtZW50cyBJbnRlcm5hbFByb2R1Y2VyPG51bWJlcj4ge1xuICBwdWJsaWMgdHlwZSA9ICdwZXJpb2RpYyc7XG4gIHB1YmxpYyBwZXJpb2Q6IG51bWJlcjtcbiAgcHJpdmF0ZSBpbnRlcnZhbElEOiBhbnk7XG4gIHByaXZhdGUgaTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHBlcmlvZDogbnVtYmVyKSB7XG4gICAgdGhpcy5wZXJpb2QgPSBwZXJpb2Q7XG4gICAgdGhpcy5pbnRlcnZhbElEID0gLTE7XG4gICAgdGhpcy5pID0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IEludGVybmFsTGlzdGVuZXI8bnVtYmVyPik6IHZvaWQge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGludGVydmFsSGFuZGxlcigpIHsgb3V0Ll9uKHNlbGYuaSsrKTsgfVxuICAgIHRoaXMuaW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGludGVydmFsSGFuZGxlciwgdGhpcy5wZXJpb2QpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJRCAhPT0gLTEpIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElEKTtcbiAgICB0aGlzLmludGVydmFsSUQgPSAtMTtcbiAgICB0aGlzLmkgPSAwO1xuICB9XG59XG5cbmNsYXNzIERlYnVnPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdkZWJ1Zyc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxUPjtcbiAgcHVibGljIG91dDogU3RyZWFtPFQ+O1xuICBwcml2YXRlIHM6ICh0OiBUKSA9PiBhbnk7IC8vIHNweVxuICBwcml2YXRlIGw6IHN0cmluZzsgLy8gbGFiZWxcblxuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPik7XG4gIGNvbnN0cnVjdG9yKGluczogU3RyZWFtPFQ+LCBhcmc/OiBzdHJpbmcpO1xuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPiwgYXJnPzogKHQ6IFQpID0+IGFueSk7XG4gIGNvbnN0cnVjdG9yKGluczogU3RyZWFtPFQ+LCBhcmc/OiBzdHJpbmcgfCAoKHQ6IFQpID0+IGFueSkpO1xuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPiwgYXJnPzogc3RyaW5nIHwgKCh0OiBUKSA9PiBhbnkpIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5zID0gbm9vcDtcbiAgICB0aGlzLmwgPSAnJztcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHRoaXMubCA9IGFyZzsgZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5zID0gYXJnO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGNvbnN0IHMgPSB0aGlzLnMsIGwgPSB0aGlzLmw7XG4gICAgaWYgKHMgIT09IG5vb3ApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHModCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHUuX2UoZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsKSBjb25zb2xlLmxvZyhsICsgJzonLCB0KTsgZWxzZSBjb25zb2xlLmxvZyh0KTtcbiAgICB1Ll9uKHQpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2MoKTtcbiAgfVxufVxuXG5jbGFzcyBEcm9wPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdkcm9wJztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBkcm9wcGVkOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IobWF4OiBudW1iZXIsIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gICAgdGhpcy5kcm9wcGVkID0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuZHJvcHBlZCA9IDA7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmRyb3BwZWQrKyA+PSB0aGlzLm1heCkgdS5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9jKCk7XG4gIH1cbn1cblxuY2xhc3MgRW5kV2hlbkxpc3RlbmVyPFQ+IGltcGxlbWVudHMgSW50ZXJuYWxMaXN0ZW5lcjxhbnk+IHtcbiAgcHJpdmF0ZSBvdXQ6IFN0cmVhbTxUPjtcbiAgcHJpdmF0ZSBvcDogRW5kV2hlbjxUPjtcblxuICBjb25zdHJ1Y3RvcihvdXQ6IFN0cmVhbTxUPiwgb3A6IEVuZFdoZW48VD4pIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLm9wID0gb3A7XG4gIH1cblxuICBfbigpIHtcbiAgICB0aGlzLm9wLmVuZCgpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICB0aGlzLm91dC5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgdGhpcy5vcC5lbmQoKTtcbiAgfVxufVxuXG5jbGFzcyBFbmRXaGVuPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdlbmRXaGVuJztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHB1YmxpYyBvOiBTdHJlYW08YW55PjsgLy8gbyA9IG90aGVyXG4gIHByaXZhdGUgb2lsOiBJbnRlcm5hbExpc3RlbmVyPGFueT47IC8vIG9pbCA9IG90aGVyIEludGVybmFsTGlzdGVuZXJcblxuICBjb25zdHJ1Y3RvcihvOiBTdHJlYW08YW55PiwgaW5zOiBTdHJlYW08VD4pIHtcbiAgICB0aGlzLmlucyA9IGlucztcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLm8gPSBvO1xuICAgIHRoaXMub2lsID0gTk9fSUw7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLm8uX2FkZCh0aGlzLm9pbCA9IG5ldyBFbmRXaGVuTGlzdGVuZXIob3V0LCB0aGlzKSk7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vLl9yZW1vdmUodGhpcy5vaWwpO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICAgIHRoaXMub2lsID0gTk9fSUw7XG4gIH1cblxuICBlbmQoKTogdm9pZCB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2MoKTtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMuZW5kKCk7XG4gIH1cbn1cblxuY2xhc3MgRmlsdGVyPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdmaWx0ZXInO1xuICBwdWJsaWMgaW5zOiBTdHJlYW08VD47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxUPjtcbiAgcHVibGljIGY6ICh0OiBUKSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHBhc3NlczogKHQ6IFQpID0+IGJvb2xlYW4sIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5mID0gcGFzc2VzO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGNvbnN0IHIgPSBfdHJ5KHRoaXMsIHQsIHUpO1xuICAgIGlmIChyID09PSBOTyB8fCAhcikgcmV0dXJuO1xuICAgIHUuX24odCk7XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fYygpO1xuICB9XG59XG5cbmNsYXNzIEZsYXR0ZW5MaXN0ZW5lcjxUPiBpbXBsZW1lbnRzIEludGVybmFsTGlzdGVuZXI8VD4ge1xuICBwcml2YXRlIG91dDogU3RyZWFtPFQ+O1xuICBwcml2YXRlIG9wOiBGbGF0dGVuPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKG91dDogU3RyZWFtPFQ+LCBvcDogRmxhdHRlbjxUPikge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMub3AgPSBvcDtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICB0aGlzLm91dC5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgdGhpcy5vdXQuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMub3AuaW5uZXIgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5vcC5sZXNzKCk7XG4gIH1cbn1cblxuY2xhc3MgRmxhdHRlbjxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFN0cmVhbTxUPiwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdmbGF0dGVuJztcbiAgcHVibGljIGluczogU3RyZWFtPFN0cmVhbTxUPj47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxUPjtcbiAgcHJpdmF0ZSBvcGVuOiBib29sZWFuO1xuICBwdWJsaWMgaW5uZXI6IFN0cmVhbTxUPjsgLy8gQ3VycmVudCBpbm5lciBTdHJlYW1cbiAgcHJpdmF0ZSBpbDogSW50ZXJuYWxMaXN0ZW5lcjxUPjsgLy8gQ3VycmVudCBpbm5lciBJbnRlcm5hbExpc3RlbmVyXG5cbiAgY29uc3RydWN0b3IoaW5zOiBTdHJlYW08U3RyZWFtPFQ+Pikge1xuICAgIHRoaXMuaW5zID0gaW5zO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5pbm5lciA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLmlsID0gTk9fSUw7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIHRoaXMuaW5uZXIgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5pbCA9IE5PX0lMO1xuICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgIGlmICh0aGlzLmlubmVyICE9PSBOTykgdGhpcy5pbm5lci5fcmVtb3ZlKHRoaXMuaWwpO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5pbm5lciA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLmlsID0gTk9fSUw7XG4gIH1cblxuICBsZXNzKCk6IHZvaWQge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICBpZiAoIXRoaXMub3BlbiAmJiB0aGlzLmlubmVyID09PSBOTykgdS5fYygpO1xuICB9XG5cbiAgX24oczogU3RyZWFtPFQ+KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGNvbnN0IHsgaW5uZXIsIGlsIH0gPSB0aGlzO1xuICAgIGlmIChpbm5lciAhPT0gTk8gJiYgaWwgIT09IE5PX0lMKSBpbm5lci5fcmVtb3ZlKGlsKTtcbiAgICAodGhpcy5pbm5lciA9IHMpLl9hZGQodGhpcy5pbCA9IG5ldyBGbGF0dGVuTGlzdGVuZXIodSwgdGhpcykpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5sZXNzKCk7XG4gIH1cbn1cblxuY2xhc3MgRm9sZDxULCBSPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFI+IHtcbiAgcHVibGljIHR5cGUgPSAnZm9sZCc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxUPjtcbiAgcHVibGljIG91dDogU3RyZWFtPFI+O1xuICBwdWJsaWMgZjogKHQ6IFQpID0+IFI7XG4gIHB1YmxpYyBzZWVkOiBSO1xuICBwcml2YXRlIGFjYzogUjsgLy8gaW5pdGlhbGl6ZWQgYXMgc2VlZFxuXG4gIGNvbnN0cnVjdG9yKGY6IChhY2M6IFIsIHQ6IFQpID0+IFIsIHNlZWQ6IFIsIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08Uj47XG4gICAgdGhpcy5mID0gKHQ6IFQpID0+IGYodGhpcy5hY2MsIHQpO1xuICAgIHRoaXMuYWNjID0gdGhpcy5zZWVkID0gc2VlZDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxSPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuYWNjID0gdGhpcy5zZWVkO1xuICAgIG91dC5fbih0aGlzLmFjYyk7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08Uj47XG4gICAgdGhpcy5hY2MgPSB0aGlzLnNlZWQ7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGNvbnN0IHIgPSBfdHJ5KHRoaXMsIHQsIHUpO1xuICAgIGlmIChyID09PSBOTykgcmV0dXJuO1xuICAgIHUuX24odGhpcy5hY2MgPSByIGFzIFIpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2MoKTtcbiAgfVxufVxuXG5jbGFzcyBMYXN0PFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdsYXN0JztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHByaXZhdGUgaGFzOiBib29sZWFuO1xuICBwcml2YXRlIHZhbDogVDtcblxuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPikge1xuICAgIHRoaXMuaW5zID0gaW5zO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICAgIHRoaXMuaGFzID0gZmFsc2U7XG4gICAgdGhpcy52YWwgPSBOTyBhcyBUO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5oYXMgPSBmYWxzZTtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLnZhbCA9IE5PIGFzIFQ7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgdGhpcy5oYXMgPSB0cnVlO1xuICAgIHRoaXMudmFsID0gdDtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICBpZiAodGhpcy5oYXMpIHtcbiAgICAgIHUuX24odGhpcy52YWwpO1xuICAgICAgdS5fYygpO1xuICAgIH0gZWxzZSB1Ll9lKG5ldyBFcnJvcignbGFzdCgpIGZhaWxlZCBiZWNhdXNlIGlucHV0IHN0cmVhbSBjb21wbGV0ZWQnKSk7XG4gIH1cbn1cblxuY2xhc3MgTWFwT3A8VCwgUj4gaW1wbGVtZW50cyBPcGVyYXRvcjxULCBSPiB7XG4gIHB1YmxpYyB0eXBlID0gJ21hcCc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxUPjtcbiAgcHVibGljIG91dDogU3RyZWFtPFI+O1xuICBwdWJsaWMgZjogKHQ6IFQpID0+IFI7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogKHQ6IFQpID0+IFIsIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08Uj47XG4gICAgdGhpcy5mID0gcHJvamVjdDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxSPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFI+O1xuICB9XG5cbiAgX24odDogVCkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICBjb25zdCByID0gX3RyeSh0aGlzLCB0LCB1KTtcbiAgICBpZiAociA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9uKHIgYXMgUik7XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fYygpO1xuICB9XG59XG5cbmNsYXNzIFJlbWVtYmVyPFQ+IGltcGxlbWVudHMgSW50ZXJuYWxQcm9kdWNlcjxUPiB7XG4gIHB1YmxpYyB0eXBlID0gJ3JlbWVtYmVyJztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG5cbiAgY29uc3RydWN0b3IoaW5zOiBTdHJlYW08VD4pIHtcbiAgICB0aGlzLmlucyA9IGlucztcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuaW5zLl9hZGQob3V0KTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcy5vdXQpO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICB9XG59XG5cbmNsYXNzIFJlcGxhY2VFcnJvcjxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAncmVwbGFjZUVycm9yJztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHB1YmxpYyBmOiAoZXJyOiBhbnkpID0+IFN0cmVhbTxUPjtcblxuICBjb25zdHJ1Y3RvcihyZXBsYWNlcjogKGVycjogYW55KSA9PiBTdHJlYW08VD4sIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5mID0gcmVwbGFjZXI7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgKHRoaXMuaW5zID0gdGhpcy5mKGVycikpLl9hZGQodGhpcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdS5fZShlKTtcbiAgICB9XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fYygpO1xuICB9XG59XG5cbmNsYXNzIFN0YXJ0V2l0aDxUPiBpbXBsZW1lbnRzIEludGVybmFsUHJvZHVjZXI8VD4ge1xuICBwdWJsaWMgdHlwZSA9ICdzdGFydFdpdGgnO1xuICBwdWJsaWMgaW5zOiBTdHJlYW08VD47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxUPjtcbiAgcHVibGljIHZhbDogVDtcblxuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPiwgdmFsOiBUKSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy52YWwgPSB2YWw7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLm91dC5fbih0aGlzLnZhbCk7XG4gICAgdGhpcy5pbnMuX2FkZChvdXQpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzLm91dCk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gIH1cbn1cblxuY2xhc3MgVGFrZTxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAndGFrZSc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxUPjtcbiAgcHVibGljIG91dDogU3RyZWFtPFQ+O1xuICBwdWJsaWMgbWF4OiBudW1iZXI7XG4gIHByaXZhdGUgdGFrZW46IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihtYXg6IG51bWJlciwgaW5zOiBTdHJlYW08VD4pIHtcbiAgICB0aGlzLmlucyA9IGlucztcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgICB0aGlzLnRha2VuID0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMudGFrZW4gPSAwO1xuICAgIGlmICh0aGlzLm1heCA8PSAwKSBvdXQuX2MoKTsgZWxzZSB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgY29uc3QgbSA9ICsrdGhpcy50YWtlbjtcbiAgICBpZiAobSA8IHRoaXMubWF4KSB1Ll9uKHQpOyBlbHNlIGlmIChtID09PSB0aGlzLm1heCkge1xuICAgICAgdS5fbih0KTtcbiAgICAgIHUuX2MoKTtcbiAgICB9XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fYygpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW08VD4gaW1wbGVtZW50cyBJbnRlcm5hbExpc3RlbmVyPFQ+IHtcbiAgcHVibGljIF9wcm9kOiBJbnRlcm5hbFByb2R1Y2VyPFQ+O1xuICBwcm90ZWN0ZWQgX2lsczogQXJyYXk8SW50ZXJuYWxMaXN0ZW5lcjxUPj47IC8vICdpbHMnID0gSW50ZXJuYWwgbGlzdGVuZXJzXG4gIHByb3RlY3RlZCBfc3RvcElEOiBhbnk7XG4gIHByb3RlY3RlZCBfZGw6IEludGVybmFsTGlzdGVuZXI8VD47IC8vIHRoZSBkZWJ1ZyBsaXN0ZW5lclxuICBwcm90ZWN0ZWQgX2Q6IGJvb2xlYW47IC8vIGZsYWcgaW5kaWNhdGluZyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBkZWJ1ZyBsaXN0ZW5lclxuICBwcm90ZWN0ZWQgX3RhcmdldDogU3RyZWFtPFQ+IHwgbnVsbDsgLy8gaW1pdGF0aW9uIHRhcmdldCBpZiB0aGlzIFN0cmVhbSB3aWxsIGltaXRhdGVcbiAgcHJvdGVjdGVkIF9lcnI6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9kdWNlcj86IEludGVybmFsUHJvZHVjZXI8VD4pIHtcbiAgICB0aGlzLl9wcm9kID0gcHJvZHVjZXIgfHwgTk8gYXMgSW50ZXJuYWxQcm9kdWNlcjxUPjtcbiAgICB0aGlzLl9pbHMgPSBbXTtcbiAgICB0aGlzLl9zdG9wSUQgPSBOTztcbiAgICB0aGlzLl9kbCA9IE5PIGFzIEludGVybmFsTGlzdGVuZXI8VD47XG4gICAgdGhpcy5fZCA9IGZhbHNlO1xuICAgIHRoaXMuX3RhcmdldCA9IG51bGw7XG4gICAgdGhpcy5fZXJyID0gTk87XG4gIH1cblxuICBfbih0OiBUKTogdm9pZCB7XG4gICAgY29uc3QgYSA9IHRoaXMuX2lscztcbiAgICBjb25zdCBMID0gYS5sZW5ndGg7XG4gICAgaWYgKHRoaXMuX2QpIHRoaXMuX2RsLl9uKHQpO1xuICAgIGlmIChMID09IDEpIGFbMF0uX24odCk7IGVsc2UgaWYgKEwgPT0gMCkgcmV0dXJuOyBlbHNlIHtcbiAgICAgIGNvbnN0IGIgPSBjcChhKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTDsgaSsrKSBiW2ldLl9uKHQpO1xuICAgIH1cbiAgfVxuXG4gIF9lKGVycjogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2VyciAhPT0gTk8pIHJldHVybjtcbiAgICB0aGlzLl9lcnIgPSBlcnI7XG4gICAgY29uc3QgYSA9IHRoaXMuX2lscztcbiAgICBjb25zdCBMID0gYS5sZW5ndGg7XG4gICAgdGhpcy5feCgpO1xuICAgIGlmICh0aGlzLl9kKSB0aGlzLl9kbC5fZShlcnIpO1xuICAgIGlmIChMID09IDEpIGFbMF0uX2UoZXJyKTsgZWxzZSBpZiAoTCA9PSAwKSByZXR1cm47IGVsc2Uge1xuICAgICAgY29uc3QgYiA9IGNwKGEpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMOyBpKyspIGJbaV0uX2UoZXJyKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9kICYmIEwgPT0gMCkgdGhyb3cgdGhpcy5fZXJyO1xuICB9XG5cbiAgX2MoKTogdm9pZCB7XG4gICAgY29uc3QgYSA9IHRoaXMuX2lscztcbiAgICBjb25zdCBMID0gYS5sZW5ndGg7XG4gICAgdGhpcy5feCgpO1xuICAgIGlmICh0aGlzLl9kKSB0aGlzLl9kbC5fYygpO1xuICAgIGlmIChMID09IDEpIGFbMF0uX2MoKTsgZWxzZSBpZiAoTCA9PSAwKSByZXR1cm47IGVsc2Uge1xuICAgICAgY29uc3QgYiA9IGNwKGEpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMOyBpKyspIGJbaV0uX2MoKTtcbiAgICB9XG4gIH1cblxuICBfeCgpOiB2b2lkIHsgLy8gdGVhciBkb3duIGxvZ2ljLCBhZnRlciBlcnJvciBvciBjb21wbGV0ZVxuICAgIGlmICh0aGlzLl9pbHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuX3Byb2QgIT09IE5PKSB0aGlzLl9wcm9kLl9zdG9wKCk7XG4gICAgdGhpcy5fZXJyID0gTk87XG4gICAgdGhpcy5faWxzID0gW107XG4gIH1cblxuICBfc3RvcE5vdygpIHtcbiAgICAvLyBXQVJOSU5HOiBjb2RlIHRoYXQgY2FsbHMgdGhpcyBtZXRob2Qgc2hvdWxkXG4gICAgLy8gZmlyc3QgY2hlY2sgaWYgdGhpcy5fcHJvZCBpcyB2YWxpZCAobm90IGBOT2ApXG4gICAgdGhpcy5fcHJvZC5fc3RvcCgpO1xuICAgIHRoaXMuX2VyciA9IE5PO1xuICAgIHRoaXMuX3N0b3BJRCA9IE5PO1xuICB9XG5cbiAgX2FkZChpbDogSW50ZXJuYWxMaXN0ZW5lcjxUPik6IHZvaWQge1xuICAgIGNvbnN0IHRhID0gdGhpcy5fdGFyZ2V0O1xuICAgIGlmICh0YSkgcmV0dXJuIHRhLl9hZGQoaWwpO1xuICAgIGNvbnN0IGEgPSB0aGlzLl9pbHM7XG4gICAgYS5wdXNoKGlsKTtcbiAgICBpZiAoYS5sZW5ndGggPiAxKSByZXR1cm47XG4gICAgaWYgKHRoaXMuX3N0b3BJRCAhPT0gTk8pIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdG9wSUQpO1xuICAgICAgdGhpcy5fc3RvcElEID0gTk87XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLl9wcm9kO1xuICAgICAgaWYgKHAgIT09IE5PKSBwLl9zdGFydCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBfcmVtb3ZlKGlsOiBJbnRlcm5hbExpc3RlbmVyPFQ+KTogdm9pZCB7XG4gICAgY29uc3QgdGEgPSB0aGlzLl90YXJnZXQ7XG4gICAgaWYgKHRhKSByZXR1cm4gdGEuX3JlbW92ZShpbCk7XG4gICAgY29uc3QgYSA9IHRoaXMuX2lscztcbiAgICBjb25zdCBpID0gYS5pbmRleE9mKGlsKTtcbiAgICBpZiAoaSA+IC0xKSB7XG4gICAgICBhLnNwbGljZShpLCAxKTtcbiAgICAgIGlmICh0aGlzLl9wcm9kICE9PSBOTyAmJiBhLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgIHRoaXMuX2VyciA9IE5PO1xuICAgICAgICB0aGlzLl9zdG9wSUQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3N0b3BOb3coKSk7XG4gICAgICB9IGVsc2UgaWYgKGEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRoaXMuX3BydW5lQ3ljbGVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgYWxsIHBhdGhzIHN0ZW1taW5nIGZyb20gYHRoaXNgIHN0cmVhbSBldmVudHVhbGx5IGVuZCBhdCBgdGhpc2BcbiAgLy8gc3RyZWFtLCB0aGVuIHdlIHJlbW92ZSB0aGUgc2luZ2xlIGxpc3RlbmVyIG9mIGB0aGlzYCBzdHJlYW0sIHRvXG4gIC8vIGZvcmNlIGl0IHRvIGVuZCBpdHMgZXhlY3V0aW9uIGFuZCBkaXNwb3NlIHJlc291cmNlcy4gVGhpcyBtZXRob2RcbiAgLy8gYXNzdW1lcyBhcyBhIHByZWNvbmRpdGlvbiB0aGF0IHRoaXMuX2lscyBoYXMganVzdCBvbmUgbGlzdGVuZXIuXG4gIF9wcnVuZUN5Y2xlcygpIHtcbiAgICBpZiAodGhpcy5faGFzTm9TaW5rcyh0aGlzLCBbXSkpIHRoaXMuX3JlbW92ZSh0aGlzLl9pbHNbMF0pO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgKnRoZXJlIGlzIG5vKiBwYXRoIHN0YXJ0aW5nIGZyb20gYHhgIHRoYXQgbGVhZHMgdG8gYW4gZW5kXG4gIC8vIGxpc3RlbmVyIChzaW5rKSBpbiB0aGUgc3RyZWFtIGdyYXBoLCBmb2xsb3dpbmcgZWRnZXMgQS0+QiB3aGVyZSBCIGlzIGFcbiAgLy8gbGlzdGVuZXIgb2YgQS4gVGhpcyBtZWFucyB0aGVzZSBwYXRocyBjb25zdGl0dXRlIGEgY3ljbGUgc29tZWhvdy4gSXMgZ2l2ZW5cbiAgLy8gYSB0cmFjZSBvZiBhbGwgdmlzaXRlZCBub2RlcyBzbyBmYXIuXG4gIF9oYXNOb1NpbmtzKHg6IEludGVybmFsTGlzdGVuZXI8YW55PiwgdHJhY2U6IEFycmF5PGFueT4pOiBib29sZWFuIHtcbiAgICBpZiAodHJhY2UuaW5kZXhPZih4KSAhPT0gLTEpXG4gICAgICByZXR1cm4gdHJ1ZTsgZWxzZVxuICAgICAgaWYgKCh4IGFzIGFueSBhcyBPdXRTZW5kZXI8YW55Pikub3V0ID09PSB0aGlzKVxuICAgICAgICByZXR1cm4gdHJ1ZTsgZWxzZVxuICAgICAgICBpZiAoKHggYXMgYW55IGFzIE91dFNlbmRlcjxhbnk+KS5vdXQgJiYgKHggYXMgYW55IGFzIE91dFNlbmRlcjxhbnk+KS5vdXQgIT09IE5PKVxuICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNOb1NpbmtzKCh4IGFzIGFueSBhcyBPdXRTZW5kZXI8YW55Pikub3V0LCB0cmFjZS5jb25jYXQoeCkpOyBlbHNlXG4gICAgICAgICAgaWYgKCh4IGFzIFN0cmVhbTxhbnk+KS5faWxzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgTiA9ICh4IGFzIFN0cmVhbTxhbnk+KS5faWxzLmxlbmd0aDsgaSA8IE47IGkrKylcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNOb1NpbmtzKCh4IGFzIFN0cmVhbTxhbnk+KS5faWxzW2ldLCB0cmFjZS5jb25jYXQoeCkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGN0b3IoKTogdHlwZW9mIFN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZW1vcnlTdHJlYW0gPyBNZW1vcnlTdHJlYW0gOiBTdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIExpc3RlbmVyIHRvIHRoZSBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSB7TGlzdGVuZXJ9IGxpc3RlbmVyXG4gICAqL1xuICBhZGRMaXN0ZW5lcihsaXN0ZW5lcjogUGFydGlhbDxMaXN0ZW5lcjxUPj4pOiB2b2lkIHtcbiAgICAobGlzdGVuZXIgYXMgSW50ZXJuYWxMaXN0ZW5lcjxUPikuX24gPSBsaXN0ZW5lci5uZXh0IHx8IG5vb3A7XG4gICAgKGxpc3RlbmVyIGFzIEludGVybmFsTGlzdGVuZXI8VD4pLl9lID0gbGlzdGVuZXIuZXJyb3IgfHwgbm9vcDtcbiAgICAobGlzdGVuZXIgYXMgSW50ZXJuYWxMaXN0ZW5lcjxUPikuX2MgPSBsaXN0ZW5lci5jb21wbGV0ZSB8fCBub29wO1xuICAgIHRoaXMuX2FkZChsaXN0ZW5lciBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgTGlzdGVuZXIgZnJvbSB0aGUgU3RyZWFtLCBhc3N1bWluZyB0aGUgTGlzdGVuZXIgd2FzIGFkZGVkIHRvIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge0xpc3RlbmVyPFQ+fSBsaXN0ZW5lclxuICAgKi9cbiAgcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXI6IFBhcnRpYWw8TGlzdGVuZXI8VD4+KTogdm9pZCB7XG4gICAgdGhpcy5fcmVtb3ZlKGxpc3RlbmVyIGFzIEludGVybmFsTGlzdGVuZXI8VD4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBMaXN0ZW5lciB0byB0aGUgU3RyZWFtIHJldHVybmluZyBhIFN1YnNjcmlwdGlvbiB0byByZW1vdmUgdGhhdFxuICAgKiBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtMaXN0ZW5lcn0gbGlzdGVuZXJcbiAgICogQHJldHVybnMge1N1YnNjcmlwdGlvbn1cbiAgICovXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogUGFydGlhbDxMaXN0ZW5lcjxUPj4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHRoaXMuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIHJldHVybiBuZXcgU3RyZWFtU3ViPFQ+KHRoaXMsIGxpc3RlbmVyIGFzIEludGVybmFsTGlzdGVuZXI8VD4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBpbnRlcm9wIGJldHdlZW4gbW9zdC5qcyBhbmQgUnhKUyA1XG4gICAqXG4gICAqIEByZXR1cm5zIHtTdHJlYW19XG4gICAqL1xuICBbJCRvYnNlcnZhYmxlXSgpOiBTdHJlYW08VD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU3RyZWFtIGdpdmVuIGEgUHJvZHVjZXIuXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtQcm9kdWNlcn0gcHJvZHVjZXIgQW4gb3B0aW9uYWwgUHJvZHVjZXIgdGhhdCBkaWN0YXRlcyBob3cgdG9cbiAgICogc3RhcnQsIGdlbmVyYXRlIGV2ZW50cywgYW5kIHN0b3AgdGhlIFN0cmVhbS5cbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZTxUPihwcm9kdWNlcj86IFByb2R1Y2VyPFQ+KTogU3RyZWFtPFQ+IHtcbiAgICBpZiAocHJvZHVjZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvZHVjZXIuc3RhcnQgIT09ICdmdW5jdGlvbidcbiAgICAgICAgfHwgdHlwZW9mIHByb2R1Y2VyLnN0b3AgIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvZHVjZXIgcmVxdWlyZXMgYm90aCBzdGFydCBhbmQgc3RvcCBmdW5jdGlvbnMnKTtcbiAgICAgIGludGVybmFsaXplUHJvZHVjZXIocHJvZHVjZXIpOyAvLyBtdXRhdGVzIHRoZSBpbnB1dFxuICAgIH1cbiAgICByZXR1cm4gbmV3IFN0cmVhbShwcm9kdWNlciBhcyBJbnRlcm5hbFByb2R1Y2VyPFQ+ICYgUHJvZHVjZXI8VD4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTWVtb3J5U3RyZWFtIGdpdmVuIGEgUHJvZHVjZXIuXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtQcm9kdWNlcn0gcHJvZHVjZXIgQW4gb3B0aW9uYWwgUHJvZHVjZXIgdGhhdCBkaWN0YXRlcyBob3cgdG9cbiAgICogc3RhcnQsIGdlbmVyYXRlIGV2ZW50cywgYW5kIHN0b3AgdGhlIFN0cmVhbS5cbiAgICogQHJldHVybiB7TWVtb3J5U3RyZWFtfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVdpdGhNZW1vcnk8VD4ocHJvZHVjZXI/OiBQcm9kdWNlcjxUPik6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgaWYgKHByb2R1Y2VyKSBpbnRlcm5hbGl6ZVByb2R1Y2VyKHByb2R1Y2VyKTsgLy8gbXV0YXRlcyB0aGUgaW5wdXRcbiAgICByZXR1cm4gbmV3IE1lbW9yeVN0cmVhbTxUPihwcm9kdWNlciBhcyBJbnRlcm5hbFByb2R1Y2VyPFQ+ICYgUHJvZHVjZXI8VD4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTdHJlYW0gdGhhdCBkb2VzIG5vdGhpbmcgd2hlbiBzdGFydGVkLiBJdCBuZXZlciBlbWl0cyBhbnkgZXZlbnQuXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqICAgICAgICAgIG5ldmVyXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGBgYFxuICAgKlxuICAgKiBAZmFjdG9yeSB0cnVlXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBuZXZlcjxUID0gYW55PigpOiBTdHJlYW08VD4ge1xuICAgIHJldHVybiBuZXcgU3RyZWFtPFQ+KHsgX3N0YXJ0OiBub29wLCBfc3RvcDogbm9vcCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgU3RyZWFtIHRoYXQgaW1tZWRpYXRlbHkgZW1pdHMgdGhlIFwiY29tcGxldGVcIiBub3RpZmljYXRpb24gd2hlblxuICAgKiBzdGFydGVkLCBhbmQgdGhhdCdzIGl0LlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBlbXB0eVxuICAgKiAtfFxuICAgKiBgYGBcbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgZW1wdHk8VCA9IGFueT4oKTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPih7XG4gICAgICBfc3RhcnQoaWw6IEludGVybmFsTGlzdGVuZXI8YW55PikgeyBpbC5fYygpOyB9LFxuICAgICAgX3N0b3A6IG5vb3AsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFN0cmVhbSB0aGF0IGltbWVkaWF0ZWx5IGVtaXRzIGFuIFwiZXJyb3JcIiBub3RpZmljYXRpb24gd2l0aCB0aGVcbiAgICogdmFsdWUgeW91IHBhc3NlZCBhcyB0aGUgYGVycm9yYCBhcmd1bWVudCB3aGVuIHRoZSBzdHJlYW0gc3RhcnRzLCBhbmQgdGhhdCdzXG4gICAqIGl0LlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiB0aHJvdyhYKVxuICAgKiAtWFxuICAgKiBgYGBcbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIGV2ZW50IHRvIGVtaXQgb24gdGhlIGNyZWF0ZWQgc3RyZWFtLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgdGhyb3coZXJyb3I6IGFueSk6IFN0cmVhbTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxhbnk+KHtcbiAgICAgIF9zdGFydChpbDogSW50ZXJuYWxMaXN0ZW5lcjxhbnk+KSB7IGlsLl9lKGVycm9yKTsgfSxcbiAgICAgIF9zdG9wOiBub29wLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdHJlYW0gZnJvbSBhbiBBcnJheSwgUHJvbWlzZSwgb3IgYW4gT2JzZXJ2YWJsZS5cbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcGFyYW0ge0FycmF5fFByb21pc2VMaWtlfE9ic2VydmFibGV9IGlucHV0IFRoZSBpbnB1dCB0byBtYWtlIGEgc3RyZWFtIGZyb20uXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBmcm9tPFQ+KGlucHV0OiBQcm9taXNlTGlrZTxUPiB8IFN0cmVhbTxUPiB8IEFycmF5PFQ+IHwgT2JzZXJ2YWJsZTxUPik6IFN0cmVhbTxUPiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dFskJG9ic2VydmFibGVdID09PSAnZnVuY3Rpb24nKVxuICAgICAgcmV0dXJuIFN0cmVhbS5mcm9tT2JzZXJ2YWJsZTxUPihpbnB1dCBhcyBPYnNlcnZhYmxlPFQ+KTsgZWxzZVxuICAgICAgaWYgKHR5cGVvZiAoaW5wdXQgYXMgUHJvbWlzZUxpa2U8VD4pLnRoZW4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiBTdHJlYW0uZnJvbVByb21pc2U8VD4oaW5wdXQgYXMgUHJvbWlzZUxpa2U8VD4pOyBlbHNlXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSlcbiAgICAgICAgICByZXR1cm4gU3RyZWFtLmZyb21BcnJheTxUPihpbnB1dCk7XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUeXBlIG9mIGlucHV0IHRvIGZyb20oKSBtdXN0IGJlIGFuIEFycmF5LCBQcm9taXNlLCBvciBPYnNlcnZhYmxlYCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFN0cmVhbSB0aGF0IGltbWVkaWF0ZWx5IGVtaXRzIHRoZSBhcmd1bWVudHMgdGhhdCB5b3UgZ2l2ZSB0b1xuICAgKiAqb2YqLCB0aGVuIGNvbXBsZXRlcy5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogb2YoMSwyLDMpXG4gICAqIDEyM3xcbiAgICogYGBgXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIGEgVGhlIGZpcnN0IHZhbHVlIHlvdSB3YW50IHRvIGVtaXQgYXMgYW4gZXZlbnQgb24gdGhlIHN0cmVhbS5cbiAgICogQHBhcmFtIGIgVGhlIHNlY29uZCB2YWx1ZSB5b3Ugd2FudCB0byBlbWl0IGFzIGFuIGV2ZW50IG9uIHRoZSBzdHJlYW0uIE9uZVxuICAgKiBvciBtb3JlIG9mIHRoZXNlIHZhbHVlcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgb2Y8VD4oLi4uaXRlbXM6IEFycmF5PFQ+KTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gU3RyZWFtLmZyb21BcnJheTxUPihpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gYXJyYXkgdG8gYSBzdHJlYW0uIFRoZSByZXR1cm5lZCBzdHJlYW0gd2lsbCBlbWl0IHN5bmNocm9ub3VzbHlcbiAgICogYWxsIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXksIGFuZCB0aGVuIGNvbXBsZXRlLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBmcm9tQXJyYXkoWzEsMiwzXSlcbiAgICogMTIzfFxuICAgKiBgYGBcbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gYmUgY29udmVydGVkIGFzIGEgc3RyZWFtLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgZnJvbUFycmF5PFQ+KGFycmF5OiBBcnJheTxUPik6IFN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08VD4obmV3IEZyb21BcnJheTxUPihhcnJheSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgcHJvbWlzZSB0byBhIHN0cmVhbS4gVGhlIHJldHVybmVkIHN0cmVhbSB3aWxsIGVtaXQgdGhlIHJlc29sdmVkXG4gICAqIHZhbHVlIG9mIHRoZSBwcm9taXNlLCBhbmQgdGhlbiBjb21wbGV0ZS4gSG93ZXZlciwgaWYgdGhlIHByb21pc2UgaXNcbiAgICogcmVqZWN0ZWQsIHRoZSBzdHJlYW0gd2lsbCBlbWl0IHRoZSBjb3JyZXNwb25kaW5nIGVycm9yLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBmcm9tUHJvbWlzZSggLS0tLTQyIClcbiAgICogLS0tLS0tLS0tLS0tLS0tLS00MnxcbiAgICogYGBgXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtQcm9taXNlTGlrZX0gcHJvbWlzZSBUaGUgcHJvbWlzZSB0byBiZSBjb252ZXJ0ZWQgYXMgYSBzdHJlYW0uXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUHJvbWlzZTxUPihwcm9taXNlOiBQcm9taXNlTGlrZTxUPik6IFN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08VD4obmV3IEZyb21Qcm9taXNlPFQ+KHByb21pc2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBPYnNlcnZhYmxlIGludG8gYSBTdHJlYW0uXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHthbnl9IG9ic2VydmFibGUgVGhlIG9ic2VydmFibGUgdG8gYmUgY29udmVydGVkIGFzIGEgc3RyZWFtLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgZnJvbU9ic2VydmFibGU8VD4ob2JzOiB7IHN1YnNjcmliZTogYW55IH0pOiBTdHJlYW08VD4ge1xuICAgIGlmICgob2JzIGFzIFN0cmVhbTxUPikuZW5kV2hlbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gb2JzIGFzIFN0cmVhbTxUPjtcbiAgICBjb25zdCBvID0gdHlwZW9mIG9ic1skJG9ic2VydmFibGVdID09PSAnZnVuY3Rpb24nID8gb2JzWyQkb2JzZXJ2YWJsZV0oKSA6IG9icztcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPihuZXcgRnJvbU9ic2VydmFibGUobykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdHJlYW0gdGhhdCBwZXJpb2RpY2FsbHkgZW1pdHMgaW5jcmVtZW50YWwgbnVtYmVycywgZXZlcnlcbiAgICogYHBlcmlvZGAgbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAgICAgcGVyaW9kaWMoMTAwMClcbiAgICogLS0tMC0tLTEtLS0yLS0tMy0tLTQtLS0uLi5cbiAgICogYGBgXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBlcmlvZCBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIHVzZSBhcyBhIHJhdGUgb2ZcbiAgICogZW1pc3Npb24uXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBwZXJpb2RpYyhwZXJpb2Q6IG51bWJlcik6IFN0cmVhbTxudW1iZXI+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxudW1iZXI+KG5ldyBQZXJpb2RpYyhwZXJpb2QpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCbGVuZHMgbXVsdGlwbGUgc3RyZWFtcyB0b2dldGhlciwgZW1pdHRpbmcgZXZlbnRzIGZyb20gYWxsIG9mIHRoZW1cbiAgICogY29uY3VycmVudGx5LlxuICAgKlxuICAgKiAqbWVyZ2UqIHRha2VzIG11bHRpcGxlIHN0cmVhbXMgYXMgYXJndW1lbnRzLCBhbmQgY3JlYXRlcyBhIHN0cmVhbSB0aGF0XG4gICAqIGJlaGF2ZXMgbGlrZSBlYWNoIG9mIHRoZSBhcmd1bWVudCBzdHJlYW1zLCBpbiBwYXJhbGxlbC5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0xLS0tLTItLS0tLTMtLS0tLS0tLTQtLS1cbiAgICogLS0tLWEtLS0tLWItLS0tYy0tLWQtLS0tLS1cbiAgICogICAgICAgICAgICBtZXJnZVxuICAgKiAtLTEtYS0tMi0tYi0tMy1jLS0tZC0tNC0tLVxuICAgKiBgYGBcbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtMSBBIHN0cmVhbSB0byBtZXJnZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuXG4gICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0yIEEgc3RyZWFtIHRvIG1lcmdlIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3RyZWFtcy4gVHdvXG4gICAqIG9yIG1vcmUgc3RyZWFtcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgbWVyZ2U6IE1lcmdlU2lnbmF0dXJlID0gZnVuY3Rpb24gbWVyZ2UoLi4uc3RyZWFtczogQXJyYXk8U3RyZWFtPGFueT4+KSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08YW55PihuZXcgTWVyZ2Uoc3RyZWFtcykpO1xuICB9IGFzIE1lcmdlU2lnbmF0dXJlO1xuXG4gIC8qKlxuICAgKiBDb21iaW5lcyBtdWx0aXBsZSBpbnB1dCBzdHJlYW1zIHRvZ2V0aGVyIHRvIHJldHVybiBhIHN0cmVhbSB3aG9zZSBldmVudHNcbiAgICogYXJlIGFycmF5cyB0aGF0IGNvbGxlY3QgdGhlIGxhdGVzdCBldmVudHMgZnJvbSBlYWNoIGlucHV0IHN0cmVhbS5cbiAgICpcbiAgICogKmNvbWJpbmUqIGludGVybmFsbHkgcmVtZW1iZXJzIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIGVhY2ggb2YgdGhlIGlucHV0XG4gICAqIHN0cmVhbXMuIFdoZW4gYW55IG9mIHRoZSBpbnB1dCBzdHJlYW1zIGVtaXRzIGFuIGV2ZW50LCB0aGF0IGV2ZW50IHRvZ2V0aGVyXG4gICAqIHdpdGggYWxsIHRoZSBvdGhlciBzYXZlZCBldmVudHMgYXJlIGNvbWJpbmVkIGludG8gYW4gYXJyYXkuIFRoYXQgYXJyYXkgd2lsbFxuICAgKiBiZSBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgc3RyZWFtLiBJdCdzIGVzc2VudGlhbGx5IGEgd2F5IG9mIGpvaW5pbmcgdG9nZXRoZXJcbiAgICogdGhlIGV2ZW50cyBmcm9tIG11bHRpcGxlIHN0cmVhbXMuXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIC0tMS0tLS0yLS0tLS0zLS0tLS0tLS00LS0tXG4gICAqIC0tLS1hLS0tLS1iLS0tLS1jLS1kLS0tLS0tXG4gICAqICAgICAgICAgIGNvbWJpbmVcbiAgICogLS0tLTFhLTJhLTJiLTNiLTNjLTNkLTRkLS1cbiAgICogYGBgXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbTEgQSBzdHJlYW0gdG8gY29tYmluZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuXG4gICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0yIEEgc3RyZWFtIHRvIGNvbWJpbmUgdG9nZXRoZXIgd2l0aCBvdGhlciBzdHJlYW1zLlxuICAgKiBNdWx0aXBsZSBzdHJlYW1zLCBub3QganVzdCB0d28sIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBjb21iaW5lOiBDb21iaW5lU2lnbmF0dXJlID0gZnVuY3Rpb24gY29tYmluZSguLi5zdHJlYW1zOiBBcnJheTxTdHJlYW08YW55Pj4pIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxBcnJheTxhbnk+PihuZXcgQ29tYmluZTxhbnk+KHN0cmVhbXMpKTtcbiAgfSBhcyBDb21iaW5lU2lnbmF0dXJlO1xuXG4gIHByb3RlY3RlZCBfbWFwPFU+KHByb2plY3Q6ICh0OiBUKSA9PiBVKTogU3RyZWFtPFU+IHwgTWVtb3J5U3RyZWFtPFU+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSk8VT4obmV3IE1hcE9wPFQsIFU+KHByb2plY3QsIHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIGVhY2ggZXZlbnQgZnJvbSB0aGUgaW5wdXQgU3RyZWFtIHRocm91Z2ggYSBgcHJvamVjdGAgZnVuY3Rpb24sXG4gICAqIHRvIGdldCBhIFN0cmVhbSB0aGF0IGVtaXRzIHRob3NlIHRyYW5zZm9ybWVkIGV2ZW50cy5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0xLS0tMy0tNS0tLS0tNy0tLS0tLVxuICAgKiAgICBtYXAoaSA9PiBpICogMTApXG4gICAqIC0tMTAtLTMwLTUwLS0tLTcwLS0tLS1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb2plY3QgQSBmdW5jdGlvbiBvZiB0eXBlIGAodDogVCkgPT4gVWAgdGhhdCB0YWtlcyBldmVudFxuICAgKiBgdGAgb2YgdHlwZSBgVGAgZnJvbSB0aGUgaW5wdXQgU3RyZWFtIGFuZCBwcm9kdWNlcyBhbiBldmVudCBvZiB0eXBlIGBVYCwgdG9cbiAgICogYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IFN0cmVhbS5cbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgbWFwPFU+KHByb2plY3Q6ICh0OiBUKSA9PiBVKTogU3RyZWFtPFU+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFwKHByb2plY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0J3MgbGlrZSBgbWFwYCwgYnV0IHRyYW5zZm9ybXMgZWFjaCBpbnB1dCBldmVudCB0byBhbHdheXMgdGhlIHNhbWVcbiAgICogY29uc3RhbnQgdmFsdWUgb24gdGhlIG91dHB1dCBTdHJlYW0uXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIC0tMS0tLTMtLTUtLS0tLTctLS0tLVxuICAgKiAgICAgICBtYXBUbygxMClcbiAgICogLS0xMC0tMTAtMTAtLS0tMTAtLS0tXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcHJvamVjdGVkVmFsdWUgQSB2YWx1ZSB0byBlbWl0IG9uIHRoZSBvdXRwdXQgU3RyZWFtIHdoZW5ldmVyIHRoZVxuICAgKiBpbnB1dCBTdHJlYW0gZW1pdHMgYW55IHZhbHVlLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBtYXBUbzxVPihwcm9qZWN0ZWRWYWx1ZTogVSk6IFN0cmVhbTxVPiB7XG4gICAgY29uc3QgcyA9IHRoaXMubWFwKCgpID0+IHByb2plY3RlZFZhbHVlKTtcbiAgICBjb25zdCBvcDogT3BlcmF0b3I8VCwgVT4gPSBzLl9wcm9kIGFzIE9wZXJhdG9yPFQsIFU+O1xuICAgIG9wLnR5cGUgPSAnbWFwVG8nO1xuICAgIHJldHVybiBzO1xuICB9XG5cbiAgZmlsdGVyPFMgZXh0ZW5kcyBUPihwYXNzZXM6ICh0OiBUKSA9PiB0IGlzIFMpOiBTdHJlYW08Uz47XG4gIGZpbHRlcihwYXNzZXM6ICh0OiBUKSA9PiBib29sZWFuKTogU3RyZWFtPFQ+O1xuICAvKipcbiAgICogT25seSBhbGxvd3MgZXZlbnRzIHRoYXQgcGFzcyB0aGUgdGVzdCBnaXZlbiBieSB0aGUgYHBhc3Nlc2AgYXJndW1lbnQuXG4gICAqXG4gICAqIEVhY2ggZXZlbnQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIGlzIGdpdmVuIHRvIHRoZSBgcGFzc2VzYCBmdW5jdGlvbi4gSWYgdGhlXG4gICAqIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLCB0aGUgZXZlbnQgaXMgZm9yd2FyZGVkIHRvIHRoZSBvdXRwdXQgc3RyZWFtLFxuICAgKiBvdGhlcndpc2UgaXQgaXMgaWdub3JlZCBhbmQgbm90IGZvcndhcmRlZC5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0xLS0tMi0tMy0tLS0tNC0tLS0tNS0tLTYtLTctOC0tXG4gICAqICAgICBmaWx0ZXIoaSA9PiBpICUgMiA9PT0gMClcbiAgICogLS0tLS0tMi0tLS0tLS0tNC0tLS0tLS0tLTYtLS0tOC0tXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXNzZXMgQSBmdW5jdGlvbiBvZiB0eXBlIGAodDogVCkgPT4gYm9vbGVhbmAgdGhhdCB0YWtlc1xuICAgKiBhbiBldmVudCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gYW5kIGNoZWNrcyBpZiBpdCBwYXNzZXMsIGJ5IHJldHVybmluZyBhXG4gICAqIGJvb2xlYW4uXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIGZpbHRlcihwYXNzZXM6ICh0OiBUKSA9PiBib29sZWFuKTogU3RyZWFtPFQ+IHtcbiAgICBjb25zdCBwID0gdGhpcy5fcHJvZDtcbiAgICBpZiAocCBpbnN0YW5jZW9mIEZpbHRlcilcbiAgICAgIHJldHVybiBuZXcgU3RyZWFtPFQ+KG5ldyBGaWx0ZXI8VD4oXG4gICAgICAgIGFuZCgocCBhcyBGaWx0ZXI8VD4pLmYsIHBhc3NlcyksXG4gICAgICAgIChwIGFzIEZpbHRlcjxUPikuaW5zXG4gICAgICApKTtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPihuZXcgRmlsdGVyPFQ+KHBhc3NlcywgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIExldHMgdGhlIGZpcnN0IGBhbW91bnRgIG1hbnkgZXZlbnRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSBwYXNzIHRvIHRoZVxuICAgKiBvdXRwdXQgc3RyZWFtLCB0aGVuIG1ha2VzIHRoZSBvdXRwdXQgc3RyZWFtIGNvbXBsZXRlLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAtLWEtLS1iLS1jLS0tLWQtLS1lLS1cbiAgICogICAgdGFrZSgzKVxuICAgKiAtLWEtLS1iLS1jfFxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBIb3cgbWFueSBldmVudHMgdG8gYWxsb3cgZnJvbSB0aGUgaW5wdXQgc3RyZWFtXG4gICAqIGJlZm9yZSBjb21wbGV0aW5nIHRoZSBvdXRwdXQgc3RyZWFtLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICB0YWtlKGFtb3VudDogbnVtYmVyKTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSk8VD4obmV3IFRha2U8VD4oYW1vdW50LCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogSWdub3JlcyB0aGUgZmlyc3QgYGFtb3VudGAgbWFueSBldmVudHMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCBhbmQgdGhlblxuICAgKiBhZnRlciB0aGF0IHN0YXJ0cyBmb3J3YXJkaW5nIGV2ZW50cyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gdG8gdGhlIG91dHB1dFxuICAgKiBzdHJlYW0uXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIC0tYS0tLWItLWMtLS0tZC0tLWUtLVxuICAgKiAgICAgICBkcm9wKDMpXG4gICAqIC0tLS0tLS0tLS0tLS0tZC0tLWUtLVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBIb3cgbWFueSBldmVudHMgdG8gaWdub3JlIGZyb20gdGhlIGlucHV0IHN0cmVhbVxuICAgKiBiZWZvcmUgZm9yd2FyZGluZyBhbGwgZXZlbnRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSB0byB0aGUgb3V0cHV0IHN0cmVhbS5cbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgZHJvcChhbW91bnQ6IG51bWJlcik6IFN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08VD4obmV3IERyb3A8VD4oYW1vdW50LCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGUgaW5wdXQgc3RyZWFtIGNvbXBsZXRlcywgdGhlIG91dHB1dCBzdHJlYW0gd2lsbCBlbWl0IHRoZSBsYXN0IGV2ZW50XG4gICAqIGVtaXR0ZWQgYnkgdGhlIGlucHV0IHN0cmVhbSwgYW5kIHRoZW4gd2lsbCBhbHNvIGNvbXBsZXRlLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAtLWEtLS1iLS1jLS1kLS0tLXxcbiAgICogICAgICAgbGFzdCgpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tZHxcbiAgICogYGBgXG4gICAqXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIGxhc3QoKTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPihuZXcgTGFzdDxUPih0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGVuZHMgdGhlIGdpdmVuIGBpbml0aWFsYCB2YWx1ZSB0byB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGVtaXR0ZWQgYnkgdGhlXG4gICAqIGlucHV0IHN0cmVhbS4gVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIE1lbW9yeVN0cmVhbSwgd2hpY2ggbWVhbnMgaXQgaXNcbiAgICogYWxyZWFkeSBgcmVtZW1iZXIoKWAnZC5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0tMS0tLTItLS0tLTMtLS1cbiAgICogICBzdGFydFdpdGgoMClcbiAgICogMC0tMS0tLTItLS0tLTMtLS1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBpbml0aWFsIFRoZSB2YWx1ZSBvciBldmVudCB0byBwcmVwZW5kLlxuICAgKiBAcmV0dXJuIHtNZW1vcnlTdHJlYW19XG4gICAqL1xuICBzdGFydFdpdGgoaW5pdGlhbDogVCk6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW08VD4obmV3IFN0YXJ0V2l0aDxUPih0aGlzLCBpbml0aWFsKSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbm90aGVyIHN0cmVhbSB0byBkZXRlcm1pbmUgd2hlbiB0byBjb21wbGV0ZSB0aGUgY3VycmVudCBzdHJlYW0uXG4gICAqXG4gICAqIFdoZW4gdGhlIGdpdmVuIGBvdGhlcmAgc3RyZWFtIGVtaXRzIGFuIGV2ZW50IG9yIGNvbXBsZXRlcywgdGhlIG91dHB1dFxuICAgKiBzdHJlYW0gd2lsbCBjb21wbGV0ZS4gQmVmb3JlIHRoYXQgaGFwcGVucywgdGhlIG91dHB1dCBzdHJlYW0gd2lsbCBiZWhhdmVzXG4gICAqIGxpa2UgdGhlIGlucHV0IHN0cmVhbS5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0tMS0tLTItLS0tLTMtLTQtLS0tNS0tLS02LS0tXG4gICAqICAgZW5kV2hlbiggLS0tLS0tLS1hLS1iLS18IClcbiAgICogLS0tMS0tLTItLS0tLTMtLTQtLXxcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciBTb21lIG90aGVyIHN0cmVhbSB0aGF0IGlzIHVzZWQgdG8ga25vdyB3aGVuIHNob3VsZCB0aGUgb3V0cHV0XG4gICAqIHN0cmVhbSBvZiB0aGlzIG9wZXJhdG9yIGNvbXBsZXRlLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBlbmRXaGVuKG90aGVyOiBTdHJlYW08YW55Pik6IFN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyAodGhpcy5jdG9yKCkpPFQ+KG5ldyBFbmRXaGVuPFQ+KG90aGVyLCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogXCJGb2xkc1wiIHRoZSBzdHJlYW0gb250byBpdHNlbGYuXG4gICAqXG4gICAqIENvbWJpbmVzIGV2ZW50cyBmcm9tIHRoZSBwYXN0IHRocm91Z2hvdXRcbiAgICogdGhlIGVudGlyZSBleGVjdXRpb24gb2YgdGhlIGlucHV0IHN0cmVhbSwgYWxsb3dpbmcgeW91IHRvIGFjY3VtdWxhdGUgdGhlbVxuICAgKiB0b2dldGhlci4gSXQncyBlc3NlbnRpYWxseSBsaWtlIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYC4gVGhlIHJldHVybmVkXG4gICAqIHN0cmVhbSBpcyBhIE1lbW9yeVN0cmVhbSwgd2hpY2ggbWVhbnMgaXQgaXMgYWxyZWFkeSBgcmVtZW1iZXIoKWAnZC5cbiAgICpcbiAgICogVGhlIG91dHB1dCBzdHJlYW0gc3RhcnRzIGJ5IGVtaXR0aW5nIHRoZSBgc2VlZGAgd2hpY2ggeW91IGdpdmUgYXMgYXJndW1lbnQuXG4gICAqIFRoZW4sIHdoZW4gYW4gZXZlbnQgaGFwcGVucyBvbiB0aGUgaW5wdXQgc3RyZWFtLCBpdCBpcyBjb21iaW5lZCB3aXRoIHRoYXRcbiAgICogc2VlZCB2YWx1ZSB0aHJvdWdoIHRoZSBgYWNjdW11bGF0ZWAgZnVuY3Rpb24sIGFuZCB0aGUgb3V0cHV0IHZhbHVlIGlzXG4gICAqIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBzdHJlYW0uIGBmb2xkYCByZW1lbWJlcnMgdGhhdCBvdXRwdXQgdmFsdWUgYXMgYGFjY2BcbiAgICogKFwiYWNjdW11bGF0b3JcIiksIGFuZCB0aGVuIHdoZW4gYSBuZXcgaW5wdXQgZXZlbnQgYHRgIGhhcHBlbnMsIGBhY2NgIHdpbGwgYmVcbiAgICogY29tYmluZWQgd2l0aCB0aGF0IHRvIHByb2R1Y2UgdGhlIG5ldyBgYWNjYCBhbmQgc28gZm9ydGguXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIC0tLS0tLTEtLS0tLTEtLTItLS0tMS0tLS0xLS0tLS0tXG4gICAqICAgZm9sZCgoYWNjLCB4KSA9PiBhY2MgKyB4LCAzKVxuICAgKiAzLS0tLS00LS0tLS01LS03LS0tLTgtLS0tOS0tLS0tLVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gYWNjdW11bGF0ZSBBIGZ1bmN0aW9uIG9mIHR5cGUgYChhY2M6IFIsIHQ6IFQpID0+IFJgIHRoYXRcbiAgICogdGFrZXMgdGhlIHByZXZpb3VzIGFjY3VtdWxhdGVkIHZhbHVlIGBhY2NgIGFuZCB0aGUgaW5jb21pbmcgZXZlbnQgZnJvbSB0aGVcbiAgICogaW5wdXQgc3RyZWFtIGFuZCBwcm9kdWNlcyB0aGUgbmV3IGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKiBAcGFyYW0gc2VlZCBUaGUgaW5pdGlhbCBhY2N1bXVsYXRlZCB2YWx1ZSwgb2YgdHlwZSBgUmAuXG4gICAqIEByZXR1cm4ge01lbW9yeVN0cmVhbX1cbiAgICovXG4gIGZvbGQ8Uj4oYWNjdW11bGF0ZTogKGFjYzogUiwgdDogVCkgPT4gUiwgc2VlZDogUik6IE1lbW9yeVN0cmVhbTxSPiB7XG4gICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW08Uj4obmV3IEZvbGQ8VCwgUj4oYWNjdW11bGF0ZSwgc2VlZCwgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFuIGVycm9yIHdpdGggYW5vdGhlciBzdHJlYW0uXG4gICAqXG4gICAqIFdoZW4gKGFuZCBpZikgYW4gZXJyb3IgaGFwcGVucyBvbiB0aGUgaW5wdXQgc3RyZWFtLCBpbnN0ZWFkIG9mIGZvcndhcmRpbmdcbiAgICogdGhhdCBlcnJvciB0byB0aGUgb3V0cHV0IHN0cmVhbSwgKnJlcGxhY2VFcnJvciogd2lsbCBjYWxsIHRoZSBgcmVwbGFjZWBcbiAgICogZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgc3RyZWFtIHRoYXQgdGhlIG91dHB1dCBzdHJlYW0gd2lsbCByZXBsaWNhdGUuXG4gICAqIEFuZCwgaW4gY2FzZSB0aGF0IG5ldyBzdHJlYW0gYWxzbyBlbWl0cyBhbiBlcnJvciwgYHJlcGxhY2VgIHdpbGwgYmUgY2FsbGVkXG4gICAqIGFnYWluIHRvIGdldCBhbm90aGVyIHN0cmVhbSB0byBzdGFydCByZXBsaWNhdGluZy5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0xLS0tMi0tLS0tMy0tNC0tLS0tWFxuICAgKiAgIHJlcGxhY2VFcnJvciggKCkgPT4gLS0xMC0tfCApXG4gICAqIC0tMS0tLTItLS0tLTMtLTQtLS0tLS0tLTEwLS18XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXBsYWNlIEEgZnVuY3Rpb24gb2YgdHlwZSBgKGVycikgPT4gU3RyZWFtYCB0aGF0IHRha2VzXG4gICAqIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkIG9uIHRoZSBpbnB1dCBzdHJlYW0gb3Igb24gdGhlIHByZXZpb3VzIHJlcGxhY2VtZW50XG4gICAqIHN0cmVhbSBhbmQgcmV0dXJucyBhIG5ldyBzdHJlYW0uIFRoZSBvdXRwdXQgc3RyZWFtIHdpbGwgYmVoYXZlIGxpa2UgdGhlXG4gICAqIHN0cmVhbSB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucy5cbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgcmVwbGFjZUVycm9yKHJlcGxhY2U6IChlcnI6IGFueSkgPT4gU3RyZWFtPFQ+KTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSk8VD4obmV3IFJlcGxhY2VFcnJvcjxUPihyZXBsYWNlLCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbnMgYSBcInN0cmVhbSBvZiBzdHJlYW1zXCIsIGhhbmRsaW5nIG9ubHkgb25lIG5lc3RlZCBzdHJlYW0gYXQgYSB0aW1lXG4gICAqIChubyBjb25jdXJyZW5jeSkuXG4gICAqXG4gICAqIElmIHRoZSBpbnB1dCBzdHJlYW0gaXMgYSBzdHJlYW0gdGhhdCBlbWl0cyBzdHJlYW1zLCB0aGVuIHRoaXMgb3BlcmF0b3Igd2lsbFxuICAgKiByZXR1cm4gYW4gb3V0cHV0IHN0cmVhbSB3aGljaCBpcyBhIGZsYXQgc3RyZWFtOiBlbWl0cyByZWd1bGFyIGV2ZW50cy4gVGhlXG4gICAqIGZsYXR0ZW5pbmcgaGFwcGVucyB3aXRob3V0IGNvbmN1cnJlbmN5LiBJdCB3b3JrcyBsaWtlIHRoaXM6IHdoZW4gdGhlIGlucHV0XG4gICAqIHN0cmVhbSBlbWl0cyBhIG5lc3RlZCBzdHJlYW0sICpmbGF0dGVuKiB3aWxsIHN0YXJ0IGltaXRhdGluZyB0aGF0IG5lc3RlZFxuICAgKiBvbmUuIEhvd2V2ZXIsIGFzIHNvb24gYXMgdGhlIG5leHQgbmVzdGVkIHN0cmVhbSBpcyBlbWl0dGVkIG9uIHRoZSBpbnB1dFxuICAgKiBzdHJlYW0sICpmbGF0dGVuKiB3aWxsIGZvcmdldCB0aGUgcHJldmlvdXMgbmVzdGVkIG9uZSBpdCB3YXMgaW1pdGF0aW5nLCBhbmRcbiAgICogd2lsbCBzdGFydCBpbWl0YXRpbmcgdGhlIG5ldyBuZXN0ZWQgb25lLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAtLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS1cbiAgICogICBcXCAgICAgICAgXFxcbiAgICogICAgXFwgICAgICAgLS0tLTEtLS0tMi0tLTMtLVxuICAgKiAgICAtLWEtLWItLS0tYy0tLS1kLS0tLS0tLS1cbiAgICogICAgICAgICAgIGZsYXR0ZW5cbiAgICogLS0tLS1hLS1iLS0tLS0tMS0tLS0yLS0tMy0tXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBmbGF0dGVuPFI+KHRoaXM6IFN0cmVhbTxTdHJlYW08Uj4gfCBNZW1vcnlTdHJlYW08Uj4+KTogU3RyZWFtPFI+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxSPihuZXcgRmxhdHRlbih0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFzc2VzIHRoZSBpbnB1dCBzdHJlYW0gdG8gYSBjdXN0b20gb3BlcmF0b3IsIHRvIHByb2R1Y2UgYW4gb3V0cHV0IHN0cmVhbS5cbiAgICpcbiAgICogKmNvbXBvc2UqIGlzIGEgaGFuZHkgd2F5IG9mIHVzaW5nIGFuIGV4aXN0aW5nIGZ1bmN0aW9uIGluIGEgY2hhaW5lZCBzdHlsZS5cbiAgICogSW5zdGVhZCBvZiB3cml0aW5nIGBvdXRTdHJlYW0gPSBmKGluU3RyZWFtKWAgeW91IGNhbiB3cml0ZVxuICAgKiBgb3V0U3RyZWFtID0gaW5TdHJlYW0uY29tcG9zZShmKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9wZXJhdG9yIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHN0cmVhbSBhcyBpbnB1dCBhbmRcbiAgICogcmV0dXJucyBhIHN0cmVhbSBhcyB3ZWxsLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBjb21wb3NlPFU+KG9wZXJhdG9yOiAoc3RyZWFtOiBTdHJlYW08VD4pID0+IFUpOiBVIHtcbiAgICByZXR1cm4gb3BlcmF0b3IodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgYmVoYXZlcyBsaWtlIHRoZSBpbnB1dCBzdHJlYW0sIGJ1dCBhbHNvXG4gICAqIHJlbWVtYmVycyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgdGhhdCBoYXBwZW5zIG9uIHRoZSBpbnB1dCBzdHJlYW0sIHNvIHRoYXQgYVxuICAgKiBuZXdseSBhZGRlZCBsaXN0ZW5lciB3aWxsIGltbWVkaWF0ZWx5IHJlY2VpdmUgdGhhdCBtZW1vcmlzZWQgZXZlbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge01lbW9yeVN0cmVhbX1cbiAgICovXG4gIHJlbWVtYmVyKCk6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW08VD4obmV3IFJlbWVtYmVyPFQ+KHRoaXMpKTtcbiAgfVxuXG4gIGRlYnVnKCk6IFN0cmVhbTxUPjtcbiAgZGVidWcobGFiZWxPclNweTogc3RyaW5nKTogU3RyZWFtPFQ+O1xuICBkZWJ1ZyhsYWJlbE9yU3B5OiAodDogVCkgPT4gYW55KTogU3RyZWFtPFQ+O1xuICAvKipcbiAgICogUmV0dXJucyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgaWRlbnRpY2FsbHkgYmVoYXZlcyBsaWtlIHRoZSBpbnB1dCBzdHJlYW0sXG4gICAqIGJ1dCBhbHNvIHJ1bnMgYSBgc3B5YCBmdW5jdGlvbiBmb3IgZWFjaCBldmVudCwgdG8gaGVscCB5b3UgZGVidWcgeW91ciBhcHAuXG4gICAqXG4gICAqICpkZWJ1ZyogdGFrZXMgYSBgc3B5YCBmdW5jdGlvbiBhcyBhcmd1bWVudCwgYW5kIHJ1bnMgdGhhdCBmb3IgZWFjaCBldmVudFxuICAgKiBoYXBwZW5pbmcgb24gdGhlIGlucHV0IHN0cmVhbS4gSWYgeW91IGRvbid0IHByb3ZpZGUgdGhlIGBzcHlgIGFyZ3VtZW50LFxuICAgKiB0aGVuICpkZWJ1Zyogd2lsbCBqdXN0IGBjb25zb2xlLmxvZ2AgZWFjaCBldmVudC4gVGhpcyBoZWxwcyB5b3UgdG9cbiAgICogdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBldmVudHMgdGhyb3VnaCBzb21lIG9wZXJhdG9yIGNoYWluLlxuICAgKlxuICAgKiBQbGVhc2Ugbm90ZSB0aGF0IGlmIHRoZSBvdXRwdXQgc3RyZWFtIGhhcyBubyBsaXN0ZW5lcnMsIHRoZW4gaXQgd2lsbCBub3RcbiAgICogc3RhcnQsIHdoaWNoIG1lYW5zIGBzcHlgIHdpbGwgbmV2ZXIgcnVuIGJlY2F1c2Ugbm8gYWN0dWFsIGV2ZW50IGhhcHBlbnMgaW5cbiAgICogdGhhdCBjYXNlLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAtLTEtLS0tMi0tLS0tMy0tLS0tNC0tXG4gICAqICAgICAgICAgZGVidWdcbiAgICogLS0xLS0tLTItLS0tLTMtLS0tLTQtLVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gbGFiZWxPclNweSBBIHN0cmluZyB0byB1c2UgYXMgdGhlIGxhYmVsIHdoZW4gcHJpbnRpbmdcbiAgICogZGVidWcgaW5mb3JtYXRpb24gb24gdGhlIGNvbnNvbGUsIG9yIGEgJ3NweScgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBldmVudFxuICAgKiBhcyBhcmd1bWVudCwgYW5kIGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFueXRoaW5nLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBkZWJ1ZyhsYWJlbE9yU3B5Pzogc3RyaW5nIHwgKCh0OiBUKSA9PiBhbnkpKTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSk8VD4obmV3IERlYnVnPFQ+KHRoaXMsIGxhYmVsT3JTcHkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAqaW1pdGF0ZSogY2hhbmdlcyB0aGlzIGN1cnJlbnQgU3RyZWFtIHRvIGVtaXQgdGhlIHNhbWUgZXZlbnRzIHRoYXQgdGhlXG4gICAqIGBvdGhlcmAgZ2l2ZW4gU3RyZWFtIGRvZXMuIFRoaXMgbWV0aG9kIHJldHVybnMgbm90aGluZy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgZXhpc3RzIHRvIGFsbG93IG9uZSB0aGluZzogKipjaXJjdWxhciBkZXBlbmRlbmN5IG9mIHN0cmVhbXMqKi5cbiAgICogRm9yIGluc3RhbmNlLCBsZXQncyBpbWFnaW5lIHRoYXQgZm9yIHNvbWUgcmVhc29uIHlvdSBuZWVkIHRvIGNyZWF0ZSBhXG4gICAqIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2hlcmUgc3RyZWFtIGBmaXJzdCRgIGRlcGVuZHMgb24gc3RyZWFtIGBzZWNvbmQkYFxuICAgKiB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYGZpcnN0JGA6XG4gICAqXG4gICAqIDwhLS0gc2tpcC1leGFtcGxlIC0tPlxuICAgKiBgYGBqc1xuICAgKiBpbXBvcnQgZGVsYXkgZnJvbSAneHN0cmVhbS9leHRyYS9kZWxheSdcbiAgICpcbiAgICogdmFyIGZpcnN0JCA9IHNlY29uZCQubWFwKHggPT4geCAqIDEwKS50YWtlKDMpO1xuICAgKiB2YXIgc2Vjb25kJCA9IGZpcnN0JC5tYXAoeCA9PiB4ICsgMSkuc3RhcnRXaXRoKDEpLmNvbXBvc2UoZGVsYXkoMTAwKSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBIb3dldmVyLCB0aGF0IGlzIGludmFsaWQgSmF2YVNjcmlwdCwgYmVjYXVzZSBgc2Vjb25kJGAgaXMgdW5kZWZpbmVkXG4gICAqIG9uIHRoZSBmaXJzdCBsaW5lLiBUaGlzIGlzIGhvdyAqaW1pdGF0ZSogY2FuIGhlbHAgc29sdmUgaXQ6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGltcG9ydCBkZWxheSBmcm9tICd4c3RyZWFtL2V4dHJhL2RlbGF5J1xuICAgKlxuICAgKiB2YXIgc2Vjb25kUHJveHkkID0geHMuY3JlYXRlKCk7XG4gICAqIHZhciBmaXJzdCQgPSBzZWNvbmRQcm94eSQubWFwKHggPT4geCAqIDEwKS50YWtlKDMpO1xuICAgKiB2YXIgc2Vjb25kJCA9IGZpcnN0JC5tYXAoeCA9PiB4ICsgMSkuc3RhcnRXaXRoKDEpLmNvbXBvc2UoZGVsYXkoMTAwKSk7XG4gICAqIHNlY29uZFByb3h5JC5pbWl0YXRlKHNlY29uZCQpO1xuICAgKiBgYGBcbiAgICpcbiAgICogV2UgY3JlYXRlIGBzZWNvbmRQcm94eSRgIGJlZm9yZSB0aGUgb3RoZXJzLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiB0aGVcbiAgICogZGVjbGFyYXRpb24gb2YgYGZpcnN0JGAuIFRoZW4sIGFmdGVyIGJvdGggYGZpcnN0JGAgYW5kIGBzZWNvbmQkYCBhcmVcbiAgICogZGVmaW5lZCwgd2UgaG9vayBgc2Vjb25kUHJveHkkYCB3aXRoIGBzZWNvbmQkYCB3aXRoIGBpbWl0YXRlKClgIHRvIHRlbGxcbiAgICogdGhhdCB0aGV5IGFyZSBcInRoZSBzYW1lXCIuIGBpbWl0YXRlYCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSBzdGFydCBvZiBhbnlcbiAgICogc3RyZWFtLCBpdCBqdXN0IGJpbmRzIGBzZWNvbmRQcm94eSRgIGFuZCBgc2Vjb25kJGAgdG9nZXRoZXIuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB3aGVyZSBgaW1pdGF0ZSgpYCBpcyBpbXBvcnRhbnQgaW4gQ3ljbGUuanNcbiAgICogYXBwbGljYXRpb25zLiBBIHBhcmVudCBjb21wb25lbnQgY29udGFpbnMgc29tZSBjaGlsZCBjb21wb25lbnRzLiBBIGNoaWxkXG4gICAqIGhhcyBhbiBhY3Rpb24gc3RyZWFtIHdoaWNoIGlzIGdpdmVuIHRvIHRoZSBwYXJlbnQgdG8gZGVmaW5lIGl0cyBzdGF0ZTpcbiAgICpcbiAgICogPCEtLSBza2lwLWV4YW1wbGUgLS0+XG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IGNoaWxkQWN0aW9uUHJveHkkID0geHMuY3JlYXRlKCk7XG4gICAqIGNvbnN0IHBhcmVudCA9IFBhcmVudCh7Li4uc291cmNlcywgY2hpbGRBY3Rpb24kOiBjaGlsZEFjdGlvblByb3h5JH0pO1xuICAgKiBjb25zdCBjaGlsZEFjdGlvbiQgPSBwYXJlbnQuc3RhdGUkLm1hcChzID0+IHMuY2hpbGQuYWN0aW9uJCkuZmxhdHRlbigpO1xuICAgKiBjaGlsZEFjdGlvblByb3h5JC5pbWl0YXRlKGNoaWxkQWN0aW9uJCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBOb3RlLCB0aG91Z2gsIHRoYXQgKipgaW1pdGF0ZSgpYCBkb2VzIG5vdCBzdXBwb3J0IE1lbW9yeVN0cmVhbXMqKi4gSWYgd2VcbiAgICogd291bGQgYXR0ZW1wdCB0byBpbWl0YXRlIGEgTWVtb3J5U3RyZWFtIGluIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgd2Ugd291bGRcbiAgICogZWl0aGVyIGdldCBhIHJhY2UgY29uZGl0aW9uICh3aGVyZSB0aGUgc3ltcHRvbSB3b3VsZCBiZSBcIm5vdGhpbmcgaGFwcGVuc1wiKVxuICAgKiBvciBhbiBpbmZpbml0ZSBjeWNsaWMgZW1pc3Npb24gb2YgdmFsdWVzLiBJdCdzIHVzZWZ1bCB0byB0aGluayBhYm91dFxuICAgKiBNZW1vcnlTdHJlYW1zIGFzIGNlbGxzIGluIGEgc3ByZWFkc2hlZXQuIEl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgdG9cbiAgICogZGVmaW5lIGEgc3ByZWFkc2hlZXQgY2VsbCBgQTFgIHdpdGggYSBmb3JtdWxhIHRoYXQgZGVwZW5kcyBvbiBgQjFgIGFuZFxuICAgKiBjZWxsIGBCMWAgZGVmaW5lZCB3aXRoIGEgZm9ybXVsYSB0aGF0IGRlcGVuZHMgb24gYEExYC5cbiAgICpcbiAgICogSWYgeW91IGZpbmQgeW91cnNlbGYgd2FudGluZyB0byB1c2UgYGltaXRhdGUoKWAgd2l0aCBhXG4gICAqIE1lbW9yeVN0cmVhbSwgeW91IHNob3VsZCByZXdvcmsgeW91ciBjb2RlIGFyb3VuZCBgaW1pdGF0ZSgpYCB0byB1c2UgYVxuICAgKiBTdHJlYW0gaW5zdGVhZC4gTG9vayBmb3IgdGhlIHN0cmVhbSBpbiB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSB0aGF0XG4gICAqIHJlcHJlc2VudHMgYW4gZXZlbnQgc3RyZWFtLCBhbmQgdGhhdCB3b3VsZCBiZSBhIGNhbmRpZGF0ZSBmb3IgY3JlYXRpbmcgYVxuICAgKiBwcm94eSBTdHJlYW0gd2hpY2ggdGhlbiBpbWl0YXRlcyB0aGUgdGFyZ2V0IFN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJlYW19IHRhcmdldCBUaGUgb3RoZXIgc3RyZWFtIHRvIGltaXRhdGUgb24gdGhlIGN1cnJlbnQgb25lLiBNdXN0XG4gICAqIG5vdCBiZSBhIE1lbW9yeVN0cmVhbS5cbiAgICovXG4gIGltaXRhdGUodGFyZ2V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVtb3J5U3RyZWFtKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIE1lbW9yeVN0cmVhbSB3YXMgZ2l2ZW4gdG8gaW1pdGF0ZSgpLCBidXQgaXQgb25seSAnICtcbiAgICAgICAgJ3N1cHBvcnRzIGEgU3RyZWFtLiBSZWFkIG1vcmUgYWJvdXQgdGhpcyByZXN0cmljdGlvbiBoZXJlOiAnICtcbiAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9zdGFsdHoveHN0cmVhbSNmYXEnKTtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XG4gICAgZm9yIChsZXQgaWxzID0gdGhpcy5faWxzLCBOID0gaWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBOOyBpKyspIHRhcmdldC5fYWRkKGlsc1tpXSk7XG4gICAgdGhpcy5faWxzID0gW107XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSBTdHJlYW0gdG8gZW1pdCB0aGUgZ2l2ZW4gdmFsdWUgdG8gaXRzIGxpc3RlbmVycy5cbiAgICpcbiAgICogQXMgdGhlIG5hbWUgaW5kaWNhdGVzLCBpZiB5b3UgdXNlIHRoaXMsIHlvdSBhcmUgbW9zdCBsaWtlbHkgZG9pbmcgc29tZXRoaW5nXG4gICAqIFRoZSBXcm9uZyBXYXkuIFBsZWFzZSB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgcmVhY3RpdmUgd2F5IGJlZm9yZSB1c2luZyB0aGlzXG4gICAqIG1ldGhvZC4gVXNlIGl0IG9ubHkgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgXCJuZXh0XCIgdmFsdWUgeW91IHdhbnQgdG8gYnJvYWRjYXN0IHRvIGFsbCBsaXN0ZW5lcnMgb2ZcbiAgICogdGhpcyBTdHJlYW0uXG4gICAqL1xuICBzaGFtZWZ1bGx5U2VuZE5leHQodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9uKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIFN0cmVhbSB0byBlbWl0IHRoZSBnaXZlbiBlcnJvciB0byBpdHMgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBBcyB0aGUgbmFtZSBpbmRpY2F0ZXMsIGlmIHlvdSB1c2UgdGhpcywgeW91IGFyZSBtb3N0IGxpa2VseSBkb2luZyBzb21ldGhpbmdcbiAgICogVGhlIFdyb25nIFdheS4gUGxlYXNlIHRyeSB0byB1bmRlcnN0YW5kIHRoZSByZWFjdGl2ZSB3YXkgYmVmb3JlIHVzaW5nIHRoaXNcbiAgICogbWV0aG9kLiBVc2UgaXQgb25seSB3aGVuIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IGVycm9yIFRoZSBlcnJvciB5b3Ugd2FudCB0byBicm9hZGNhc3QgdG8gYWxsIHRoZSBsaXN0ZW5lcnMgb2ZcbiAgICogdGhpcyBTdHJlYW0uXG4gICAqL1xuICBzaGFtZWZ1bGx5U2VuZEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICB0aGlzLl9lKGVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIFN0cmVhbSB0byBlbWl0IHRoZSBcImNvbXBsZXRlZFwiIGV2ZW50IHRvIGl0cyBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEFzIHRoZSBuYW1lIGluZGljYXRlcywgaWYgeW91IHVzZSB0aGlzLCB5b3UgYXJlIG1vc3QgbGlrZWx5IGRvaW5nIHNvbWV0aGluZ1xuICAgKiBUaGUgV3JvbmcgV2F5LiBQbGVhc2UgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlYWN0aXZlIHdheSBiZWZvcmUgdXNpbmcgdGhpc1xuICAgKiBtZXRob2QuIFVzZSBpdCBvbmx5IHdoZW4geW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgKi9cbiAgc2hhbWVmdWxseVNlbmRDb21wbGV0ZSgpIHtcbiAgICB0aGlzLl9jKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIFwiZGVidWdcIiBsaXN0ZW5lciB0byB0aGUgc3RyZWFtLiBUaGVyZSBjYW4gb25seSBiZSBvbmUgZGVidWdcbiAgICogbGlzdGVuZXIsIHRoYXQncyB3aHkgdGhpcyBpcyAnc2V0RGVidWdMaXN0ZW5lcicuIFRvIHJlbW92ZSB0aGUgZGVidWdcbiAgICogbGlzdGVuZXIsIGp1c3QgY2FsbCBzZXREZWJ1Z0xpc3RlbmVyKG51bGwpLlxuICAgKlxuICAgKiBBIGRlYnVnIGxpc3RlbmVyIGlzIGxpa2UgYW55IG90aGVyIGxpc3RlbmVyLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgYVxuICAgKiBkZWJ1ZyBsaXN0ZW5lciBpcyBcInN0ZWFsdGh5XCI6IGl0cyBwcmVzZW5jZS9hYnNlbmNlIGRvZXMgbm90IHRyaWdnZXIgdGhlXG4gICAqIHN0YXJ0L3N0b3Agb2YgdGhlIHN0cmVhbSAob3IgdGhlIHByb2R1Y2VyIGluc2lkZSB0aGUgc3RyZWFtKS4gVGhpcyBpc1xuICAgKiB1c2VmdWwgc28geW91IGNhbiBpbnNwZWN0IHdoYXQgaXMgZ29pbmcgb24gd2l0aG91dCBjaGFuZ2luZyB0aGUgYmVoYXZpb3JcbiAgICogb2YgdGhlIHByb2dyYW0uIElmIHlvdSBoYXZlIGFuIGlkbGUgc3RyZWFtIGFuZCB5b3UgYWRkIGEgbm9ybWFsIGxpc3RlbmVyIHRvXG4gICAqIGl0LCB0aGUgc3RyZWFtIHdpbGwgc3RhcnQgZXhlY3V0aW5nLiBCdXQgaWYgeW91IHNldCBhIGRlYnVnIGxpc3RlbmVyIG9uIGFuXG4gICAqIGlkbGUgc3RyZWFtLCBpdCB3b24ndCBzdGFydCBleGVjdXRpbmcgKG5vdCB1bnRpbCB0aGUgZmlyc3Qgbm9ybWFsIGxpc3RlbmVyXG4gICAqIGlzIGFkZGVkKS5cbiAgICpcbiAgICogQXMgdGhlIG5hbWUgaW5kaWNhdGVzLCB3ZSBkb24ndCByZWNvbW1lbmQgdXNpbmcgdGhpcyBtZXRob2QgdG8gYnVpbGQgYXBwXG4gICAqIGxvZ2ljLiBJbiBmYWN0LCBpbiBtb3N0IGNhc2VzIHRoZSBkZWJ1ZyBvcGVyYXRvciB3b3JrcyBqdXN0IGZpbmUuIE9ubHkgdXNlXG4gICAqIHRoaXMgb25lIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0xpc3RlbmVyPFQ+fSBsaXN0ZW5lclxuICAgKi9cbiAgc2V0RGVidWdMaXN0ZW5lcihsaXN0ZW5lcjogUGFydGlhbDxMaXN0ZW5lcjxUPj4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgdGhpcy5fZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fZGwgPSBOTyBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kID0gdHJ1ZTtcbiAgICAgIChsaXN0ZW5lciBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+KS5fbiA9IGxpc3RlbmVyLm5leHQgfHwgbm9vcDtcbiAgICAgIChsaXN0ZW5lciBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+KS5fZSA9IGxpc3RlbmVyLmVycm9yIHx8IG5vb3A7XG4gICAgICAobGlzdGVuZXIgYXMgSW50ZXJuYWxMaXN0ZW5lcjxUPikuX2MgPSBsaXN0ZW5lci5jb21wbGV0ZSB8fCBub29wO1xuICAgICAgdGhpcy5fZGwgPSBsaXN0ZW5lciBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWVtb3J5U3RyZWFtPFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHtcbiAgcHJpdmF0ZSBfdj86IFQ7XG4gIHByaXZhdGUgX2hhcz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvZHVjZXI6IEludGVybmFsUHJvZHVjZXI8VD4pIHtcbiAgICBzdXBlcihwcm9kdWNlcik7XG4gIH1cblxuICBfbih4OiBUKSB7XG4gICAgdGhpcy5fdiA9IHg7XG4gICAgdGhpcy5faGFzID0gdHJ1ZTtcbiAgICBzdXBlci5fbih4KTtcbiAgfVxuXG4gIF9hZGQoaWw6IEludGVybmFsTGlzdGVuZXI8VD4pOiB2b2lkIHtcbiAgICBjb25zdCB0YSA9IHRoaXMuX3RhcmdldDtcbiAgICBpZiAodGEpIHJldHVybiB0YS5fYWRkKGlsKTtcbiAgICBjb25zdCBhID0gdGhpcy5faWxzO1xuICAgIGEucHVzaChpbCk7XG4gICAgaWYgKGEubGVuZ3RoID4gMSkge1xuICAgICAgaWYgKHRoaXMuX2hhcykgaWwuX24odGhpcy5fdiEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc3RvcElEICE9PSBOTykge1xuICAgICAgaWYgKHRoaXMuX2hhcykgaWwuX24odGhpcy5fdiEpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N0b3BJRCk7XG4gICAgICB0aGlzLl9zdG9wSUQgPSBOTztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2hhcykgaWwuX24odGhpcy5fdiEpOyBlbHNlIHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLl9wcm9kO1xuICAgICAgaWYgKHAgIT09IE5PKSBwLl9zdGFydCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBfc3RvcE5vdygpIHtcbiAgICB0aGlzLl9oYXMgPSBmYWxzZTtcbiAgICBzdXBlci5fc3RvcE5vdygpO1xuICB9XG5cbiAgX3goKTogdm9pZCB7XG4gICAgdGhpcy5faGFzID0gZmFsc2U7XG4gICAgc3VwZXIuX3goKTtcbiAgfVxuXG4gIG1hcDxVPihwcm9qZWN0OiAodDogVCkgPT4gVSk6IE1lbW9yeVN0cmVhbTxVPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcChwcm9qZWN0KSBhcyBNZW1vcnlTdHJlYW08VT47XG4gIH1cblxuICBtYXBUbzxVPihwcm9qZWN0ZWRWYWx1ZTogVSk6IE1lbW9yeVN0cmVhbTxVPiB7XG4gICAgcmV0dXJuIHN1cGVyLm1hcFRvKHByb2plY3RlZFZhbHVlKSBhcyBNZW1vcnlTdHJlYW08VT47XG4gIH1cblxuICB0YWtlKGFtb3VudDogbnVtYmVyKTogTWVtb3J5U3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIudGFrZShhbW91bnQpIGFzIE1lbW9yeVN0cmVhbTxUPjtcbiAgfVxuXG4gIGVuZFdoZW4ob3RoZXI6IFN0cmVhbTxhbnk+KTogTWVtb3J5U3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuZW5kV2hlbihvdGhlcikgYXMgTWVtb3J5U3RyZWFtPFQ+O1xuICB9XG5cbiAgcmVwbGFjZUVycm9yKHJlcGxhY2U6IChlcnI6IGFueSkgPT4gU3RyZWFtPFQ+KTogTWVtb3J5U3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIucmVwbGFjZUVycm9yKHJlcGxhY2UpIGFzIE1lbW9yeVN0cmVhbTxUPjtcbiAgfVxuXG4gIHJlbWVtYmVyKCk6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkZWJ1ZygpOiBNZW1vcnlTdHJlYW08VD47XG4gIGRlYnVnKGxhYmVsT3JTcHk6IHN0cmluZyk6IE1lbW9yeVN0cmVhbTxUPjtcbiAgZGVidWcobGFiZWxPclNweTogKHQ6IFQpID0+IGFueSk6IE1lbW9yeVN0cmVhbTxUPjtcbiAgZGVidWcobGFiZWxPclNweT86IHN0cmluZyB8ICgodDogVCkgPT4gYW55KSB8IHVuZGVmaW5lZCk6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIHN1cGVyLmRlYnVnKGxhYmVsT3JTcHkgYXMgYW55KSBhcyBNZW1vcnlTdHJlYW08VD47XG4gIH1cbn1cblxuZXhwb3J0IHsgTk8sIE5PX0lMIH07XG5jb25zdCB4cyA9IFN0cmVhbTtcbnR5cGUgeHM8VD4gPSBTdHJlYW08VD47XG5leHBvcnQgZGVmYXVsdCB4cztcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlattenConcOperator = void 0;\nvar index_1 = require(\"../index\");\nvar FCIL = /** @class */ (function () {\n    function FCIL(out, op) {\n        this.out = out;\n        this.op = op;\n    }\n    FCIL.prototype._n = function (t) {\n        this.out._n(t);\n    };\n    FCIL.prototype._e = function (err) {\n        this.out._e(err);\n    };\n    FCIL.prototype._c = function () {\n        this.op.less();\n    };\n    return FCIL;\n}());\nvar FlattenConcOperator = /** @class */ (function () {\n    function FlattenConcOperator(ins) {\n        this.ins = ins;\n        this.type = 'flattenConcurrently';\n        this.active = 1; // number of outers and inners that have not yet ended\n        this.out = null;\n    }\n    FlattenConcOperator.prototype._start = function (out) {\n        this.out = out;\n        this.ins._add(this);\n    };\n    FlattenConcOperator.prototype._stop = function () {\n        this.ins._remove(this);\n        this.active = 1;\n        this.out = null;\n    };\n    FlattenConcOperator.prototype.less = function () {\n        if (--this.active === 0) {\n            var u = this.out;\n            if (!u)\n                return;\n            u._c();\n        }\n    };\n    FlattenConcOperator.prototype._n = function (s) {\n        var u = this.out;\n        if (!u)\n            return;\n        this.active++;\n        s._add(new FCIL(u, this));\n    };\n    FlattenConcOperator.prototype._e = function (err) {\n        var u = this.out;\n        if (!u)\n            return;\n        u._e(err);\n    };\n    FlattenConcOperator.prototype._c = function () {\n        this.less();\n    };\n    return FlattenConcOperator;\n}());\nexports.FlattenConcOperator = FlattenConcOperator;\n/**\n * Flattens a \"stream of streams\", handling multiple concurrent nested streams\n * simultaneously.\n *\n * If the input stream is a stream that emits streams, then this operator will\n * return an output stream which is a flat stream: emits regular events. The\n * flattening happens concurrently. It works like this: when the input stream\n * emits a nested stream, *flattenConcurrently* will start imitating that\n * nested one. When the next nested stream is emitted on the input stream,\n * *flattenConcurrently* will also imitate that new one, but will continue to\n * imitate the previous nested streams as well.\n *\n * Marble diagram:\n *\n * ```text\n * --+--------+---------------\n *   \\        \\\n *    \\       ----1----2---3--\n *    --a--b----c----d--------\n *     flattenConcurrently\n * -----a--b----c-1--d-2---3--\n * ```\n *\n * @return {Stream}\n */\nfunction flattenConcurrently(ins) {\n    return new index_1.Stream(new FlattenConcOperator(ins));\n}\nexports.default = flattenConcurrently;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbkNvbmN1cnJlbnRseS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHRyYS9mbGF0dGVuQ29uY3VycmVudGx5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGtDQUF1RjtBQUV2RjtJQUNFLGNBQW1CLEdBQWMsRUFDYixFQUEwQjtRQUQzQixRQUFHLEdBQUgsR0FBRyxDQUFXO1FBQ2IsT0FBRSxHQUFGLEVBQUUsQ0FBd0I7SUFDOUMsQ0FBQztJQUVELGlCQUFFLEdBQUYsVUFBRyxDQUFJO1FBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELGlCQUFFLEdBQUYsVUFBRyxHQUFRO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELGlCQUFFLEdBQUY7UUFDRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFDSCxXQUFDO0FBQUQsQ0FBQyxBQWhCRCxJQWdCQztBQUVEO0lBS0UsNkJBQW1CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBSmxDLFNBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUM1QixXQUFNLEdBQVcsQ0FBQyxDQUFDLENBQUMsc0RBQXNEO1FBQzNFLFFBQUcsR0FBYyxJQUFXLENBQUM7SUFHcEMsQ0FBQztJQUVELG9DQUFNLEdBQU4sVUFBTyxHQUFjO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELG1DQUFLLEdBQUw7UUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQsa0NBQUksR0FBSjtRQUNFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ25CLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU87WUFDZixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDUjtJQUNILENBQUM7SUFFRCxnQ0FBRSxHQUFGLFVBQUcsQ0FBWTtRQUNiLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPO1FBQ2YsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0NBQUUsR0FBRixVQUFHLEdBQVE7UUFDVCxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQsZ0NBQUUsR0FBRjtRQUNFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDSCwwQkFBQztBQUFELENBQUMsQUEzQ0QsSUEyQ0M7QUEzQ1ksa0RBQW1CO0FBNkNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsU0FBd0IsbUJBQW1CLENBQUksR0FBd0M7SUFDckYsT0FBTyxJQUFJLGNBQU0sQ0FBSSxJQUFJLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUZELHNDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BlcmF0b3IsIFN0cmVhbSwgTWVtb3J5U3RyZWFtLCBPdXRTZW5kZXIsIEludGVybmFsTGlzdGVuZXIgfSBmcm9tICcuLi9pbmRleCc7XG5cbmNsYXNzIEZDSUw8VD4gaW1wbGVtZW50cyBJbnRlcm5hbExpc3RlbmVyPFQ+LCBPdXRTZW5kZXI8VD4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3V0OiBTdHJlYW08VD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgb3A6IEZsYXR0ZW5Db25jT3BlcmF0b3I8VD4pIHtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICB0aGlzLm91dC5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgdGhpcy5vdXQuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMub3AubGVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGbGF0dGVuQ29uY09wZXJhdG9yPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8U3RyZWFtPFQ+LCBUPiB7XG4gIHB1YmxpYyB0eXBlID0gJ2ZsYXR0ZW5Db25jdXJyZW50bHknO1xuICBwcml2YXRlIGFjdGl2ZTogbnVtYmVyID0gMTsgLy8gbnVtYmVyIG9mIG91dGVycyBhbmQgaW5uZXJzIHRoYXQgaGF2ZSBub3QgeWV0IGVuZGVkXG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxUPiA9IG51bGwgYXMgYW55O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbnM6IFN0cmVhbTxTdHJlYW08VD4+KSB7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLmFjdGl2ZSA9IDE7XG4gICAgdGhpcy5vdXQgPSBudWxsIGFzIGFueTtcbiAgfVxuXG4gIGxlc3MoKTogdm9pZCB7XG4gICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIHtcbiAgICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICAgIGlmICghdSkgcmV0dXJuO1xuICAgICAgdS5fYygpO1xuICAgIH1cbiAgfVxuXG4gIF9uKHM6IFN0cmVhbTxUPikge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAoIXUpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZSsrO1xuICAgIHMuX2FkZChuZXcgRkNJTCh1LCB0aGlzKSk7XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAoIXUpIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICB0aGlzLmxlc3MoKTtcbiAgfVxufVxuXG4vKipcbiAqIEZsYXR0ZW5zIGEgXCJzdHJlYW0gb2Ygc3RyZWFtc1wiLCBoYW5kbGluZyBtdWx0aXBsZSBjb25jdXJyZW50IG5lc3RlZCBzdHJlYW1zXG4gKiBzaW11bHRhbmVvdXNseS5cbiAqXG4gKiBJZiB0aGUgaW5wdXQgc3RyZWFtIGlzIGEgc3RyZWFtIHRoYXQgZW1pdHMgc3RyZWFtcywgdGhlbiB0aGlzIG9wZXJhdG9yIHdpbGxcbiAqIHJldHVybiBhbiBvdXRwdXQgc3RyZWFtIHdoaWNoIGlzIGEgZmxhdCBzdHJlYW06IGVtaXRzIHJlZ3VsYXIgZXZlbnRzLiBUaGVcbiAqIGZsYXR0ZW5pbmcgaGFwcGVucyBjb25jdXJyZW50bHkuIEl0IHdvcmtzIGxpa2UgdGhpczogd2hlbiB0aGUgaW5wdXQgc3RyZWFtXG4gKiBlbWl0cyBhIG5lc3RlZCBzdHJlYW0sICpmbGF0dGVuQ29uY3VycmVudGx5KiB3aWxsIHN0YXJ0IGltaXRhdGluZyB0aGF0XG4gKiBuZXN0ZWQgb25lLiBXaGVuIHRoZSBuZXh0IG5lc3RlZCBzdHJlYW0gaXMgZW1pdHRlZCBvbiB0aGUgaW5wdXQgc3RyZWFtLFxuICogKmZsYXR0ZW5Db25jdXJyZW50bHkqIHdpbGwgYWxzbyBpbWl0YXRlIHRoYXQgbmV3IG9uZSwgYnV0IHdpbGwgY29udGludWUgdG9cbiAqIGltaXRhdGUgdGhlIHByZXZpb3VzIG5lc3RlZCBzdHJlYW1zIGFzIHdlbGwuXG4gKlxuICogTWFyYmxlIGRpYWdyYW06XG4gKlxuICogYGBgdGV4dFxuICogLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tXG4gKiAgIFxcICAgICAgICBcXFxuICogICAgXFwgICAgICAgLS0tLTEtLS0tMi0tLTMtLVxuICogICAgLS1hLS1iLS0tLWMtLS0tZC0tLS0tLS0tXG4gKiAgICAgZmxhdHRlbkNvbmN1cnJlbnRseVxuICogLS0tLS1hLS1iLS0tLWMtMS0tZC0yLS0tMy0tXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtTdHJlYW19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW5Db25jdXJyZW50bHk8VD4oaW5zOiBTdHJlYW08U3RyZWFtPFQ+IHwgTWVtb3J5U3RyZWFtPFQ+Pik6IFN0cmVhbTxUPiB7XG4gIHJldHVybiBuZXcgU3RyZWFtPFQ+KG5ldyBGbGF0dGVuQ29uY09wZXJhdG9yKGlucykpO1xufVxuIl19","import { Storage } from '../storage'\n\nexport function getLogger(s: Storage) {\n  const isEnabled = () => s.getDebugEnabled()\n\n  return {\n    get isEnabled() {\n      return isEnabled()\n    },\n    setEnable: (enable: boolean) => s.setDebugEnabled(enable),\n    log: (...args: any[]) => {\n      if (isEnabled()) console.log(`QiscusSDK [${s.getAppId()}]:`, ...args)\n    },\n  }\n}\n","import { IQUser } from './model'\nimport { loginOrRegisterParams } from './api'\n\nexport const loginOrRegister = (o: loginOrRegisterParams) => ({\n  email: o.userId,\n  password: o.userKey,\n  username: o.username,\n  avatar_url: o.avatarUrl,\n  device_token: o.deviceToken,\n  extras: o.extras,\n})\n\nexport const verifyIdentityToken = (o: { identityToken: string }) => ({\n  identity_token: o.identityToken,\n})\nexport const patchProfile = (u: Partial<IQUser>) => ({\n  name: u.name,\n  avatar_url: u.avatarUrl,\n  extras: u.extras,\n})\nexport const userRooms = () => ({})\n","import * as model from '../model'\n\nexport const tryCatch = <T>(\n  fn: () => T,\n  default_: T,\n  onError?: (error: Error) => void,\n  onSuccess?: (resp: T) => void\n) => {\n  try {\n    const resp = fn()\n    onSuccess?.(resp)\n    return resp\n  } catch (error) {\n    onError?.(error as Error)\n    return default_\n  }\n}\n\nexport const wrapP = <T>(promise: Promise<T>) => promise.then((res) => [res, null]).catch((err) => [null, err])\n\nexport const getOrThrow = <T>(item: T | null | undefined, msg: string): T => {\n  if (item != null) return item\n  else throw new Error(msg)\n}\n\nexport const isChatRoom = <T extends unknown>(data: T | model.IQChatRoom): data is model.IQChatRoom => {\n  return (data as model.IQChatRoom).id != null\n}\n","import axios from 'axios'\nimport { IQUser, IQChatRoom, IQMessage } from './model'\nimport * as Encode from './encoder'\nimport { tryCatch } from './utils/try-catch'\nimport type { Storage } from './storage'\n\nexport const makeApiRequest = (storage: Storage) => ({ request: request(storage) })\nexport type ApiRequester = ReturnType<typeof makeApiRequest>\n\nconst request =\n  (storage: Storage) =>\n  <Resp extends unknown>(api: Partial<Api>): Promise<Resp> => {\n    const headers = {\n      ...storage.getCustomHeaders(),\n      ...api.headers,\n    }\n    return axios({\n      method: api.method,\n      baseURL: api.baseUrl,\n      url: api.url,\n      data: api.body,\n      params: api.params,\n      headers,\n    }).then((resp) => resp.data)\n  }\n\ntype ApiRequest<O> = (o: O) => Partial<Api>\n\nexport type Api = {\n  baseUrl?: string\n  method: 'get' | 'post' | 'put' | 'patch' | 'delete'\n  url: string\n  params?: Record<string, string>\n  headers?: Record<string, string>\n  body?: Record<string, unknown>\n}\nexport type withHeaders = {\n  headers: {\n    'qiscus-sdk-app-id': string\n    'qiscus-sdk-version': string\n  }\n}\nexport type withCredentials = {\n  headers: {\n    'qiscus-sdk-token': string\n    'qiscus-sdk-user-id': string\n  }\n} & withHeaders\n\ntype FnHeaders = <O extends withHeaders>() => ApiRequest<O>\nconst useCredentials: FnHeaders = () => (o) => ({\n  headers: o.headers,\n})\nconst useHeaders: FnHeaders = () => (o) => ({\n  headers: o.headers,\n})\n\ntype FnParams = <O>(fn: (o: O) => Json<any>) => ApiRequest<O>\nconst useParams: FnParams = (fn) => (o) => ({ params: fn(o) })\n\ntype FnUrl = (method: Api['method']) => <O extends Partial<Api>>(url: Api['url']) => ApiRequest<O>\nconst useUrl: FnUrl = (method) => (url) => (o) => ({\n  method,\n  url,\n  baseUrl: o.baseUrl,\n})\nconst useGetUrl = useUrl('get')\nconst usePostUrl = useUrl('post')\nconst usePatchUrl = useUrl('patch')\nconst useDeleteUrl = useUrl('delete')\n\ntype Json<O = unknown> = Record<string, O>\n\ntype useBody = <O>(fn: (o: O) => Json<unknown>) => ApiRequest<O>\nconst useBody: useBody = (mapper) => (o) => ({\n  body: mapper(o),\n})\n\ntype compose = <O>(...fns: Array<ApiRequest<O>>) => (o: O) => Api\nconst compose: compose =\n  (...fns) =>\n  (o) => {\n    const { method, url, headers, params, body, baseUrl } = fns.reduce(\n      (acc, fn) => ({ ...acc, ...fn(o) }),\n      o\n    ) as unknown as Api\n\n    return { method, url, headers, params, body, baseUrl }\n  }\n\nexport type loginOrRegisterParams = {\n  userId: string\n  userKey: string\n  username?: string\n  avatarUrl?: string\n  deviceToken?: string\n  extras?: Record<string, unknown>\n}\nexport const loginOrRegister: ApiRequest<loginOrRegisterParams & withHeaders> = compose(\n  usePostUrl('/login_or_register'),\n  useHeaders(),\n  useBody(Encode.loginOrRegister)\n)\n\nexport const getNonce: ApiRequest<withHeaders> = compose(usePostUrl('/auth/nonce'), useHeaders())\n\nexport const verifyIdentityToken: ApiRequest<\n  {\n    identityToken: string\n  } & withHeaders\n> = compose(usePostUrl('/auth/verify_identity_token'), useHeaders(), useBody(Encode.verifyIdentityToken))\n\nexport const getProfile: ApiRequest<withCredentials> = compose(useGetUrl('/my_profile'), useHeaders())\nexport const patchProfile: ApiRequest<Partial<IQUser> & withCredentials> = compose(\n  usePatchUrl('/my_profile'),\n  useCredentials(),\n  useBody((o) => Encode.patchProfile(o))\n)\n\nexport const getUserList: ApiRequest<\n  {\n    page?: number\n    limit?: number\n    query?: string\n  } & withCredentials\n> = compose(\n  useGetUrl('get_user_list'),\n  useCredentials(),\n  useParams((o) => ({\n    page: o.page,\n    limit: o.limit,\n    query: o.query,\n  }))\n)\n\nexport const blockUser: ApiRequest<\n  {\n    userId: IQUser['id']\n  } & withCredentials\n> = compose(\n  usePostUrl('/block_user'),\n  useCredentials(),\n  useBody((o) => ({\n    user_email: o.userId,\n  }))\n)\n\nexport const unblockUser: ApiRequest<\n  {\n    userId: IQUser['id']\n  } & withCredentials\n> = compose(\n  usePostUrl('/unblock_user'),\n  useCredentials(),\n  useBody((o) => ({\n    user_email: o.userId,\n  }))\n)\n\nexport const getBlockedUsers: ApiRequest<\n  {\n    page?: number\n    limit?: number\n  } & withCredentials\n> = compose(\n  useGetUrl('/get_blocked_users'),\n  useCredentials(),\n  useParams((o) => ({\n    page: String(o.page),\n    limit: String(o.limit),\n  }))\n)\n\nexport const getTotalUnreadCount: ApiRequest<{} & withCredentials> = compose(\n  useGetUrl('/total_unread_count'),\n  useCredentials()\n)\nexport const getRoomUnreadCount: ApiRequest<withCredentials> = compose(\n  useGetUrl('/get_room_unread_count'),\n  useCredentials()\n)\n\nexport const createRoom: ApiRequest<\n  {\n    name: string\n    userIds: IQUser['id'][]\n    avatarUrl?: IQChatRoom['avatarUrl']\n    extras?: IQChatRoom['extras']\n  } & withCredentials\n> = compose(\n  usePostUrl('/create_room'),\n  useCredentials(),\n  useBody((it) => ({\n    name: it.name,\n    participants: it.userIds,\n    avatar_url: it.avatarUrl,\n    options: tryCatch(() => JSON.stringify(it.extras), ''),\n  }))\n)\n\nexport const getOrCreateRoomWithTarget: ApiRequest<\n  {\n    userIds: IQUser['id'][]\n    extras?: IQChatRoom['extras']\n  } & withCredentials\n> = compose(\n  usePostUrl('/get_or_create_room_with_target'),\n  useCredentials(),\n  useBody((o) => ({\n    emails: o.userIds,\n    options: JSON.stringify(o.extras),\n  }))\n)\n\nexport const getOrCreateRoomWithUniqueId: ApiRequest<\n  {\n    uniqueId: string\n    name?: string\n    avatarUrl?: string\n    options?: Record<string, any>\n  } & withCredentials\n> = compose(\n  usePostUrl('/get_or_create_room_with_unique_id'),\n  useCredentials(),\n  useBody((o) => ({\n    unique_id: o.uniqueId,\n  }))\n)\n\nexport const getRoomById: ApiRequest<\n  {\n    id: IQChatRoom['id']\n  } & withCredentials\n> = compose(\n  useGetUrl('/get_room_by_id'),\n  useCredentials(),\n  useParams((o) => ({ id: o.id }))\n)\n\nexport const updateRoom: ApiRequest<\n  {\n    id: IQChatRoom['id']\n    name?: IQChatRoom['name']\n    avatarUrl?: IQChatRoom['avatarUrl']\n    extras?: IQChatRoom['extras']\n  } & withCredentials\n> = compose(\n  usePostUrl('/update_room'),\n  useCredentials(),\n  useBody((o) => ({\n    id: String(o.id),\n    room_name: o.name,\n    avatar_url: o.avatarUrl,\n    options: tryCatch(() => JSON.stringify(o.extras), null),\n  }))\n)\n\nexport const getUserRooms: ApiRequest<\n  {\n    page?: number\n    limit?: number\n    type?: IQChatRoom['type']\n    showParticipants?: boolean\n    showRemoved?: boolean\n    showEmpty?: boolean\n  } & withCredentials\n> = compose(\n  useGetUrl('/user_rooms'),\n  useCredentials(),\n  useParams((o) => ({\n    page: o.page,\n    limit: o.limit,\n    show_participants: o.showParticipants ?? false,\n    show_removed: o.showRemoved ?? false,\n    room_type: o.type ?? 'all',\n    show_empty: o.showEmpty ?? false,\n  }))\n)\n\nexport const getRoomInfo: ApiRequest<\n  {\n    roomIds?: IQChatRoom['id'][]\n    roomUniqueIds?: IQChatRoom['uniqueId'][]\n    showParticipants?: boolean\n    showRemoved?: boolean\n    page?: number\n  } & withCredentials\n> = compose(\n  usePostUrl('/rooms_info'),\n  useCredentials(),\n  useBody((o) => ({\n    room_id: o.roomIds?.map((it) => it.toString()),\n    room_unique_id: o.roomUniqueIds,\n    show_participants: o.showParticipants,\n    show_removed: o.showRemoved,\n  }))\n)\n\nexport const getRoomParticipants: ApiRequest<\n  {\n    uniqueId: IQChatRoom['uniqueId']\n    page?: number\n    limit?: number\n    sorting?: 'asc' | 'desc'\n  } & withCredentials\n> = compose(\n  useGetUrl('/room_participants'),\n  useCredentials(),\n  useParams((o) => ({\n    room_unique_id: o.uniqueId,\n    sorting: o.sorting ?? 'asc',\n  }))\n)\n\nexport const addRoomParticipants: ApiRequest<\n  {\n    id: IQChatRoom['id']\n    userIds: IQUser['id'][]\n  } & withCredentials\n> = compose(\n  usePostUrl('/add_room_participants'),\n  useCredentials(),\n  useBody((o) => ({\n    room_id: o.id.toString(),\n    emails: o.userIds,\n  }))\n)\n\nexport const removeRoomParticipants: ApiRequest<\n  {\n    id: IQChatRoom['id']\n    userIds: IQUser['id'][]\n  } & withCredentials\n> = compose(\n  usePostUrl('/remove_room_participants'),\n  useCredentials(),\n  useBody((o) => ({\n    room_id: o.id.toString(),\n    emails: o.userIds,\n  }))\n)\n\nexport const postComment: ApiRequest<\n  {\n    roomId: IQChatRoom['id']\n    text: IQMessage['text']\n    uniqueId: IQMessage['uniqueId']\n    type: IQMessage['type']\n    payload?: IQMessage['payload']\n    extras?: IQMessage['extras']\n  } & withCredentials\n> = compose(\n  usePostUrl('/post_comment'),\n  useCredentials(),\n  useBody((o) => ({\n    topic_id: String(o.roomId),\n    comment: o.text,\n    unique_temp_id: o.uniqueId,\n    type: o.type,\n    payload: o.payload,\n    extras: o.extras,\n  }))\n)\nexport const getComment: ApiRequest<\n  {\n    roomId: IQChatRoom['id']\n    lastMessageId: IQMessage['id']\n    after?: boolean\n    limit?: number\n  } & withCredentials\n> = compose(\n  useGetUrl('/load_comments'),\n  useCredentials(),\n  useParams((o) => ({\n    topic_id: o.roomId,\n    last_comment_id: o.lastMessageId,\n    after: o.after,\n    limit: o.limit,\n  }))\n)\nexport const updateCommentStatus: ApiRequest<\n  {\n    roomId: IQChatRoom['id']\n    lastReadId?: IQMessage['id']\n    lastReceivedId?: IQMessage['id']\n  } & withCredentials\n> = compose(\n  usePostUrl('/update_comment_status'),\n  useCredentials(),\n  useBody((o) => ({\n    room_id: o.roomId.toString(),\n    last_comment_read_id: o.lastReadId?.toString(),\n    last_comment_received_id: o.lastReceivedId?.toString(),\n  }))\n)\nexport const searchMessages: ApiRequest<\n  {\n    query: string\n    roomId?: IQChatRoom['id']\n    page?: number\n  } & withCredentials\n> = compose(\n  usePostUrl('/search_messages'),\n  useCredentials(),\n  useBody((o) => ({\n    query: o.query,\n    room_id: o.roomId,\n    page: o.page,\n  }))\n)\n\nexport const deleteMessages: ApiRequest<\n  {\n    uniqueIds: IQMessage['uniqueId'][]\n  } & withCredentials\n> = compose(\n  useDeleteUrl('/delete_messages'),\n  useCredentials(),\n  useParams((o) => ({\n    unique_ids: o.uniqueIds,\n    is_delete_for_everyone: true,\n    is_hard_delete: true,\n  }))\n)\n\nexport const clearRooms: ApiRequest<\n  {\n    uniqueIds: IQChatRoom['uniqueId'][]\n  } & withCredentials\n> = compose(\n  useDeleteUrl('/clear_room_messages'),\n  useCredentials(),\n  useParams((o) => ({\n    room_channel_ids: o.uniqueIds,\n  }))\n)\n\nexport const setDeviceToken: ApiRequest<\n  {\n    deviceToken: string\n    isDevelopment?: boolean\n  } & withCredentials\n> = compose(\n  usePostUrl('/set_user_device_token'),\n  useCredentials(),\n  useBody((o) => ({\n    device_token: o.deviceToken,\n    device_platform: 'rn',\n    is_development: o.isDevelopment ?? false,\n  }))\n)\nexport const removeDeviceToken: ApiRequest<\n  {\n    deviceToken: string\n    isDevelopment?: boolean\n  } & withCredentials\n> = compose(\n  usePostUrl('/remove_user_device_token'),\n  useCredentials(),\n  useBody((o) => ({\n    device_token: o.deviceToken,\n    device_platform: 'rn',\n    is_development: o.isDevelopment ?? false,\n  }))\n)\n\nexport const synchronize: ApiRequest<\n  {\n    lastMessageId?: IQMessage['id']\n    limit?: number\n  } & withCredentials\n> = compose(\n  useGetUrl('/sync'),\n  useCredentials(),\n  useParams((o) => ({\n    last_received_comment_id: o.lastMessageId ?? 0,\n    limit: o.limit,\n  }))\n)\n\nexport const synchronizeEvent: ApiRequest<\n  {\n    lastEventId?: string\n  } & withCredentials\n> = compose(\n  useGetUrl('/sync_event'),\n  useCredentials(),\n  useParams((o) => ({\n    start_event_id: o.lastEventId ?? 0,\n  }))\n)\n\nexport const appConfig: ApiRequest<withHeaders> = compose(useGetUrl('/config'), useHeaders())\n\nexport const searchMessagesV2: ApiRequest<\n  {\n    query: string\n    roomIds: number[]\n    userId?: string\n    type?: string\n    roomType?: string\n    page?: number\n    limit?: number\n  } & withCredentials\n> = compose(\n  usePostUrl('/search'),\n  useCredentials(),\n  useBody(function (o) {\n    const room = ((roomType) => {\n      const rType = roomType == null ? undefined : roomType === 'single' ? 'single' : 'group'\n      const isPublic = roomType == null ? undefined : roomType === 'channel' ? true : false\n\n      return {\n        type: rType,\n        isPublic: isPublic,\n      }\n    })(o.roomType)\n    return {\n      query: o.query,\n      sender: o.userId,\n      type: o.type,\n      room_ids: o.roomIds.map((it) => String(it)),\n      room_type: room.type,\n      is_public: room.isPublic,\n      page: o.page,\n      limit: o.limit,\n    }\n  })\n)\n\nexport const getFileList: ApiRequest<\n  {\n    roomIds?: number[]\n    fileType?: string\n    page?: number\n    limit?: number\n    sender: string\n    includeExtensions?: string[]\n    excludeExtensions?: string[]\n  } & withCredentials\n> = compose(\n  usePostUrl('file_list'),\n  useCredentials(),\n  useBody((o) => ({\n    room_ids: o.roomIds?.map((it) => String(it)),\n    sender: o.sender,\n    file_type: o.fileType,\n    page: o.page,\n    limit: o.limit,\n    include_extensions: o.includeExtensions,\n    exclude_extensions: o.excludeExtensions,\n  }))\n)\n\nexport const updateMessage: ApiRequest<\n  {\n    token: string\n    uniqueId: string\n    comment: string\n    extras?: Record<string, any>\n    payload?: Record<string, any>\n  } & withCredentials\n> = compose(\n  usePostUrl('update_message'),\n  useCredentials(),\n  useBody((o) => {\n    const body: Record<string, any> = {}\n    body.token = o.token\n    body.comment = o.comment\n    body.unique_id = o.uniqueId\n    if (o.extras != null) body.extras = o.extras\n    if (o.payload != null) body.payload = o.payload\n    return body\n  })\n)\n\nexport const getMqttNode = (s: Storage): ApiRequest<withCredentials> =>\n  compose(useGetUrl(s.getBrokerLbUrl()), useCredentials())\n","import { Storage } from './storage'\n\nexport const withHeaders = (s: Storage) => ({\n  headers: {\n    'qiscus-sdk-app-id': s.getAppId(),\n    'qiscus-sdk-version': s.getVersion(),\n  },\n})\nexport const withCredentials = (s: Storage) => ({\n  headers: {\n    ...withHeaders(s).headers,\n    'qiscus-sdk-token': s.getToken(),\n    'qiscus-sdk-user-id': s.getCurrentUser()?.id,\n  },\n})\n\nexport const withBaseUrl = (s: Storage) => ({\n  baseUrl: `${s.getBaseUrl()}/api/v2/sdk`,\n})\n\nexport const Provider = (s: Storage) => ({\n  withHeaders: withHeaders(s),\n  withCredentials: withCredentials(s),\n  withBaseUrl: withBaseUrl(s),\n})\n","import { IAppConfig } from './defs'\nimport { IQAccount, IQChatRoom, IQMessage, IQParticipant, IQUser } from './model'\nimport { tryCatch } from './utils/try-catch'\n\nexport const loginOrRegister = <T extends Record<string, any>>(json: T): IQAccount => ({\n  id: json.email,\n  avatarUrl: json.avatar_url,\n  extras: json.extras as Record<string, any>,\n  name: json.username,\n  lastMessageId: json.last_comment_id,\n  lastSyncEventId: String(json.last_sync_event_id),\n})\n\ninterface AccountJson {\n  avatar_url: string\n  email: string\n  extras: object\n  id: number\n  id_str: string\n  last_comment_id: number\n  last_comment_id_str: string\n  last_sync_event_id: number\n  pn_android_configured: boolean\n  pn_ios_configured: boolean\n  rtKey: string\n  token: string\n  username: string\n}\n\nexport const account = <T extends AccountJson>(json: T): [IQAccount, AccountJson['token']] => [\n  {\n    name: json.username,\n    avatarUrl: json.avatar_url,\n    extras: json.extras as IQAccount['extras'],\n    id: json.email,\n    lastMessageId: json.last_comment_id,\n    lastSyncEventId: String(json.last_sync_event_id),\n  },\n  json.token,\n]\n\ninterface UserJson1 {\n  email: string\n  extras: object | null\n  user_avatar_url: string\n  user_id: number\n  user_id_str: string\n  username: string\n}\n\nexport interface UserJson2 {\n  avatar_url: string\n  email: string\n  extras: object | null\n  id: number\n  id_str: string\n  username: string\n}\n\nfunction isJson1(json: UserJson1 | UserJson2): json is UserJson1 {\n  return (json as UserJson1).user_id != null\n}\n\nfunction isJson2(json: UserJson1 | UserJson2): json is UserJson2 {\n  return (json as UserJson2).email != null\n}\n\nexport function user(json: UserJson1): IQUser\nexport function user(json: UserJson2): IQUser\nexport function user(json: UserJson1 | UserJson2): IQUser {\n  let avatarUrl: string | undefined = undefined\n  if (isJson1(json)) avatarUrl = json.user_avatar_url\n  if (isJson2(json)) avatarUrl = json.avatar_url\n  return {\n    id: json.email,\n    extras: json.extras as IQUser['extras'],\n    name: json.username,\n    avatarUrl,\n  }\n}\n\ninterface ParticipantJson {\n  avatar_url: string\n  email: string\n  extras: object\n  id: number\n  id_str: string\n  last_comment_read_id: number\n  last_comment_read_id_str: string\n  last_comment_received_id: number\n  last_comment_received_id_str: string\n  username: string\n}\n\nexport const participant = <T extends ParticipantJson>(json: T): IQParticipant => ({\n  lastMessageReceivedId: json.last_comment_received_id,\n  lastMessageReadId: json.last_comment_read_id,\n  id: json.email,\n  extras: json.extras as IQParticipant['extras'],\n  avatarUrl: json.avatar_url,\n  name: json.username,\n})\n\ninterface RoomJson {\n  avatar_url: string\n  chat_type: string\n  id: number\n  id_str: string\n  is_public_channel: boolean\n  is_removed: boolean\n  last_comment?: MessageJson\n  options: string\n  raw_room_name: string\n  room_name: string\n  unique_id: string\n  unread_count: number\n  participants: ParticipantJson[]\n}\n\nconst getRoomType = (type: string, isChannel: boolean): IQChatRoom['type'] => {\n  if (isChannel && type === 'group') return 'channel'\n  return type as IQChatRoom['type']\n}\nexport const room = <T extends RoomJson>(json: T): IQChatRoom => ({\n  unreadCount: json.unread_count,\n  type: getRoomType(json.chat_type, json.is_public_channel),\n  totalParticipants: json.participants?.length ?? 0,\n  participants: json.participants?.map(participant) ?? [],\n  name: json.room_name,\n  extras: tryCatch(() => JSON.parse(json.options), json.options),\n  avatarUrl: json.avatar_url,\n  uniqueId: json.unique_id,\n  lastMessage: json.last_comment ? message(json.last_comment) : undefined,\n  id: json.id,\n})\n\nexport interface MessageJson {\n  comment_before_id: number\n  comment_before_id_str: string\n  disable_link_preview: boolean\n  email: string\n  extras: object | null\n  id: number\n  is_deleted?: boolean\n  is_public_channel: boolean\n  message: string\n  payload: object | null\n  room_avatar: string\n  room_id: number\n  room_id_str: string\n  room_name: string\n  room_type: string\n  status: string\n  timestamp: string\n  topic_id: number\n  topic_id_str: string\n  type: string\n  unique_temp_id: string\n  unix_nano_timestamp: number\n  unix_timestamp: number\n  user_avatar_url: string\n  user_id: number\n  user_id_str: string\n  username: string\n}\n\nexport const message = <T extends MessageJson>(json: T): IQMessage => ({\n  extras: json.extras as IQMessage['extras'],\n  payload: json.payload as IQMessage['payload'],\n  type: json.type as IQMessage['type'],\n  uniqueId: json.unique_temp_id,\n  text: json.message,\n  chatRoomId: json.room_id,\n  id: json.id,\n  previousMessageId: json.comment_before_id,\n  sender: user(json),\n  status: json.status as IQMessage['status'],\n  timestamp: new Date(json.unix_nano_timestamp / 1e6),\n  // @ts-ignore\n  __roomType: json.room_type,\n})\n\ninterface IAppConfigJson {\n  base_url: string\n  broker_lb_url: string\n  broker_url: string\n  enable_event_report: boolean\n  enable_realtime: boolean\n  enable_realtime_check: boolean\n  sync_interval: number\n  sync_on_connect: number\n  extras: string | Record<string, any>\n  enable_sync: boolean | undefined\n  enable_sync_event: boolean | undefined\n}\nexport const appConfig = <T extends IAppConfigJson>(json: T): IAppConfig => ({\n  baseUrl: json.base_url,\n  brokerLbUrl: json.broker_lb_url,\n  brokerUrl: json.broker_url,\n  enableEventReport: json.enable_event_report,\n  enableRealtime: json.enable_realtime,\n  enableRealtimeCheck: json.enable_realtime_check,\n  extras: tryCatch(() => JSON.parse(json.extras as string), json.extras),\n  syncInterval: json.sync_interval,\n  syncOnConnect: json.sync_on_connect,\n  isSyncEnabled: json.enable_sync,\n  isSyncEventEnabled: json.enable_sync_event,\n})\n","let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport let customAlphabet = (alphabet, defaultSize = 21) => {\n  return (size = defaultSize) => {\n    let id = ''\n    let i = size\n    while (i--) {\n      id += alphabet[(Math.random() * alphabet.length) | 0]\n    }\n    return id\n  }\n}\nexport let nanoid = (size = 21) => {\n  let id = ''\n  let i = size\n  while (i--) {\n    id += urlAlphabet[(Math.random() * 64) | 0]\n  }\n  return id\n}\n","// @ts-ignore\nimport { Storage } from '../storage'\nimport * as Api from '../api'\nimport * as Provider from '../provider'\nimport * as Decoder from '../decoder'\nimport * as model from '../model'\nimport { nanoid } from 'nanoid/non-secure'\n\nexport const getMessageAdapter = (s: Storage, api: Api.ApiRequester) => ({\n  sendMessage(roomId: number, message: model.IQMessage): Promise<model.IQMessage> {\n    const apiConfig = Api.postComment({\n      ...Provider.withBaseUrl(s),\n      ...Provider.withCredentials(s),\n      roomId,\n      type: message.type as model.IQMessage['type'],\n      text: message.text,\n      payload: message.payload as model.IQMessage['payload'],\n      uniqueId: message.uniqueId ?? `javascript-${nanoid()}`,\n      extras: message.extras as model.IQMessage['extras'],\n    })\n    return api.request<PostCommentResponse.RootObject>(apiConfig).then((resp) => Decoder.message(resp.results.comment))\n  },\n  getMessages(\n    roomId: number,\n    lastMessageId: number = 0,\n    limit: number = 20,\n    after: boolean = false\n  ): Promise<model.IQMessage[]> {\n    return api\n      .request<GetCommentsResponse.RootObject>(\n        Api.getComment({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          lastMessageId,\n          roomId,\n          after,\n          limit,\n        })\n      )\n      .then((resp) =>\n        resp.results.comments.map(Decoder.message).sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime())\n      )\n  },\n  deleteMessage(uniqueIds: string[]): Promise<model.IQMessage[]> {\n    return api\n      .request<DeleteCommentsResponse.RootObject>(\n        Api.deleteMessages({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          uniqueIds,\n        })\n      )\n      .then((resp) => resp.results.comments.map(Decoder.message))\n  },\n  markAsRead(roomId: number, messageId: number): Promise<void> {\n    return api\n      .request<UpdateCommentStatusResponse.RootObject>(\n        Api.updateCommentStatus({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          lastReadId: messageId,\n          lastReceivedId: undefined,\n          roomId,\n        })\n      )\n      .then(() => undefined)\n  },\n  markAsDelivered(roomId: number, messageId: number): Promise<void> {\n    return api\n      .request<UpdateCommentStatusResponse.RootObject>(\n        Api.updateCommentStatus({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          roomId,\n          lastReceivedId: messageId,\n          lastReadId: undefined,\n        })\n      )\n      .then(() => undefined)\n  },\n  async searchMessages({\n    query,\n    roomIds = [],\n    userId,\n    type,\n    roomType,\n    page,\n    limit,\n  }: {\n    query: string\n    roomIds: number[]\n    userId?: string\n    type?: string\n    roomType?: string\n    page?: number\n    limit?: number\n  }): Promise<model.IQMessage[]> {\n    const messages = await api\n      .request<SearchMessagesV2Response.RootObject>(\n        Api.searchMessagesV2({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          query: query,\n          roomIds: roomIds,\n          userId: userId,\n          type: type,\n          roomType: roomType,\n          page: page,\n          limit: limit,\n        })\n      )\n      .then((r) => r.results.comments)\n      .then((comments) => comments.map((it) => Decoder.message(it as any)))\n\n    return messages\n  },\n  async getFileList({\n    roomIds = [],\n    fileType,\n    page,\n    limit,\n    userId,\n    includeExtensions,\n    excludeExtensions,\n  }: {\n    roomIds?: number[]\n    fileType?: string\n    page?: number\n    limit?: number\n    userId?: string\n    includeExtensions?: string[]\n    excludeExtensions?: string[]\n  }): Promise<model.IQMessage[]> {\n    if (userId === undefined) {\n      userId = s.getCurrentUser().id\n    }\n\n    const messages = api\n      .request<SearchMessagesV2Response.RootObject>(\n        Api.getFileList({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          roomIds,\n          fileType,\n          page,\n          limit,\n          sender: userId,\n          includeExtensions,\n          excludeExtensions,\n        })\n      )\n      .then((r) => r.results.comments)\n      .then((r) => r.map((it) => Decoder.message(it as any)))\n\n    return messages\n  },\n  async updateMessage(message: model.IQMessage): Promise<model.IQMessage> {\n    return api\n      .request<PostCommentResponse.RootObject>(\n        Api.updateMessage({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          token: s.getToken(),\n          uniqueId: message.uniqueId,\n          comment: message.text,\n          extras: message.extras,\n          payload: message.payload,\n        })\n      )\n      .then((r) => r.results.comment)\n      .then((r) => Decoder.message(r))\n  },\n})\nexport default getMessageAdapter\nexport type MessageAdapter = ReturnType<typeof getMessageAdapter>\n\n// region Response type\nexport declare module PostCommentResponse {\n  export interface Avatar {\n    url: string\n  }\n\n  export interface UserAvatar {\n    avatar: Avatar\n  }\n\n  export interface Comment {\n    comment_before_id: number\n    comment_before_id_str: string\n    disable_link_preview: boolean\n    email: string\n    extras: object\n    id: number\n    id_str: string\n    is_deleted: boolean\n    is_public_channel: boolean\n    message: string\n    payload: object\n    room_avatar: string\n    room_id: number\n    room_id_str: string\n    room_name: string\n    room_type: string\n    status: string\n    timestamp: string\n    topic_id: number\n    topic_id_str: string\n    type: string\n    unique_temp_id: string\n    unix_nano_timestamp: number\n    unix_timestamp: number\n    user_avatar: UserAvatar\n    user_avatar_url: string\n    user_id: number\n    user_id_str: string\n    username: string\n  }\n\n  export interface Results {\n    comment: Comment\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\nexport declare module GetCommentsResponse {\n  export interface Extras {}\n\n  export interface Payload {}\n\n  export interface Avatar {\n    url: string\n  }\n\n  export interface UserAvatar {\n    avatar: Avatar\n  }\n\n  export interface Comment {\n    comment_before_id: number\n    comment_before_id_str: string\n    disable_link_preview: boolean\n    email: string\n    extras: Extras | null\n    id: number\n    id_str: string\n    is_deleted: boolean\n    is_public_channel: boolean\n    message: string\n    payload: Payload | null\n    room_avatar: string\n    room_id: number\n    room_id_str: string\n    room_name: string\n    room_type: string\n    status: string\n    timestamp: string\n    topic_id: number\n    topic_id_str: string\n    type: string\n    unique_temp_id: string\n    unix_nano_timestamp: number\n    unix_timestamp: number\n    user_avatar: UserAvatar\n    user_avatar_url: string\n    user_id: number\n    user_id_str: string\n    username: string\n  }\n\n  export interface Results {\n    comments: Comment[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\nexport declare module DeleteCommentsResponse {\n  export interface Extras {}\n\n  export interface Payload {}\n\n  export interface Avatar {\n    url: string\n  }\n\n  export interface UserAvatar {\n    avatar: Avatar\n  }\n\n  export interface Comment {\n    comment_before_id: number\n    comment_before_id_str: string\n    disable_link_preview: boolean\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    is_deleted: boolean\n    is_public_channel: boolean\n    message: string\n    payload: Payload\n    room_avatar: string\n    room_id: number\n    room_id_str: string\n    room_name: string\n    room_type: string\n    status: string\n    timestamp: string\n    topic_id: number\n    topic_id_str: string\n    type: string\n    unique_temp_id: string\n    unix_nano_timestamp: any\n    unix_timestamp: number\n    user_avatar: UserAvatar\n    user_avatar_url: string\n    user_id: number\n    user_id_str: string\n    username: string\n  }\n\n  export interface Results {\n    comments: Comment[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\nexport declare module UpdateCommentStatusResponse {\n  export interface Results {\n    changed: boolean\n    last_comment_read_id: number\n    last_comment_read_id_str: string\n    last_comment_received_id: number\n    last_comment_received_id_str: string\n    user_id: number\n    user_id_str: string\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module SearchMessagesV2Response {\n  export interface Extras {}\n\n  export interface Payload {}\n\n  export interface Avatar {\n    url: string\n  }\n\n  export interface UserAvatar {\n    avatar: Avatar\n  }\n\n  export interface Comment {\n    comment_before_id: number\n    comment_before_id_str: string\n    disable_link_preview: boolean\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    is_deleted: boolean\n    is_public_channel: boolean\n    message: string\n    payload: Payload\n    room_avatar: string\n    room_id: number\n    room_id_str: string\n    room_name: string\n    room_type: string\n    status: string\n    timestamp: Date\n    topic_id: number\n    topic_id_str: string\n    type: string\n    unique_temp_id: string\n    unix_nano_timestamp: any\n    unix_timestamp: number\n    user_avatar: UserAvatar\n    user_avatar_url: string\n    user_id: number\n    user_id_str: string\n    username: string\n  }\n\n  export interface Results {\n    comments: Comment[]\n    limit: number\n    page: number\n    total: string\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\n\n// endregion\n","/*!\n * is.js 0.8.0\n * Author: Aras Atasaygin\n */\n\n// AMD with global, Node, or global\n;(function(root, factory) {    // eslint-disable-line no-extra-semi\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(function() {\n            // Also create a global in case some scripts\n            // that are loaded still are looking for\n            // a global even when an AMD loader is in use.\n            return (root.is = factory());\n        });\n    } else if (typeof exports === 'object') {\n        // Node. Does not work with strict CommonJS, but\n        // only CommonJS-like enviroments that support module.exports,\n        // like Node.\n        module.exports = factory();\n    } else {\n        // Browser globals (root is self)\n        root.is = factory();\n    }\n}(this, function() {\n\n    // Baseline\n    /* -------------------------------------------------------------------------- */\n\n    // define 'is' object and current version\n    var is = {};\n    is.VERSION = '0.8.0';\n\n    // define interfaces\n    is.not = {};\n    is.all = {};\n    is.any = {};\n\n    // cache some methods to call later on\n    var toString = Object.prototype.toString;\n    var slice = Array.prototype.slice;\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n    // helper function which reverses the sense of predicate result\n    function not(func) {\n        return function() {\n            return !func.apply(null, slice.call(arguments));\n        };\n    }\n\n    // helper function which call predicate function per parameter and return true if all pass\n    function all(func) {\n        return function() {\n            var params = getParams(arguments);\n            var length = params.length;\n            for (var i = 0; i < length; i++) {\n                if (!func.call(null, params[i])) {\n                    return false;\n                }\n            }\n            return true;\n        };\n    }\n\n    // helper function which call predicate function per parameter and return true if any pass\n    function any(func) {\n        return function() {\n            var params = getParams(arguments);\n            var length = params.length;\n            for (var i = 0; i < length; i++) {\n                if (func.call(null, params[i])) {\n                    return true;\n                }\n            }\n            return false;\n        };\n    }\n\n    // build a 'comparator' object for various comparison checks\n    var comparator = {\n        '<': function(a, b) { return a < b; },\n        '<=': function(a, b) { return a <= b; },\n        '>': function(a, b) { return a > b; },\n        '>=': function(a, b) { return a >= b; }\n    }\n\n    // helper function which compares a version to a range\n    function compareVersion(version, range) {\n        var string = (range + '');\n        var n = +(string.match(/\\d+/) || NaN);\n        var op = string.match(/^[<>]=?|/)[0];\n        return comparator[op] ? comparator[op](version, n) : (version == n || n !== n);\n    }\n\n    // helper function which extracts params from arguments\n    function getParams(args) {\n        var params = slice.call(args);\n        var length = params.length;\n        if (length === 1 && is.array(params[0])) {    // support array\n            params = params[0];\n        }\n        return params;\n    }\n\n    // Type checks\n    /* -------------------------------------------------------------------------- */\n\n    // is a given value Arguments?\n    is.arguments = function(value) {    // fallback check is for IE\n        return toString.call(value) === '[object Arguments]' ||\n            (value != null && typeof value === 'object' && 'callee' in value);\n    };\n\n    // is a given value Array?\n    is.array = Array.isArray || function(value) {    // check native isArray first\n        return toString.call(value) === '[object Array]';\n    };\n\n    // is a given value Boolean?\n    is.boolean = function(value) {\n        return value === true || value === false || toString.call(value) === '[object Boolean]';\n    };\n\n    // is a given value Char?\n    is.char = function(value) {\n        return is.string(value) && value.length === 1;\n    };\n\n    // is a given value Date Object?\n    is.date = function(value) {\n        return toString.call(value) === '[object Date]';\n    };\n\n    // is a given object a DOM node?\n    is.domNode = function(object) {\n        return is.object(object) && object.nodeType > 0;\n    };\n\n    // is a given value Error object?\n    is.error = function(value) {\n        return toString.call(value) === '[object Error]';\n    };\n\n    // is a given value function?\n    is['function'] = function(value) {    // fallback check is for IE\n        return toString.call(value) === '[object Function]' || typeof value === 'function';\n    };\n\n    // is given value a pure JSON object?\n    is.json = function(value) {\n        return toString.call(value) === '[object Object]';\n    };\n\n    // is a given value NaN?\n    is.nan = function(value) {    // NaN is number :) Also it is the only value which does not equal itself\n        return value !== value;\n    };\n\n    // is a given value null?\n    is['null'] = function(value) {\n        return value === null;\n    };\n\n    // is a given value number?\n    is.number = function(value) {\n        return is.not.nan(value) && toString.call(value) === '[object Number]';\n    };\n\n    // is a given value object?\n    is.object = function(value) {\n        return Object(value) === value;\n    };\n\n    // is a given value RegExp?\n    is.regexp = function(value) {\n        return toString.call(value) === '[object RegExp]';\n    };\n\n    // are given values same type?\n    // prevent NaN, Number same type check\n    is.sameType = function(value, other) {\n        var tag = toString.call(value);\n        if (tag !== toString.call(other)) {\n            return false;\n        }\n        if (tag === '[object Number]') {\n            return !is.any.nan(value, other) || is.all.nan(value, other);\n        }\n        return true;\n    };\n    // sameType method does not support 'all' and 'any' interfaces\n    is.sameType.api = ['not'];\n\n    // is a given value String?\n    is.string = function(value) {\n        return toString.call(value) === '[object String]';\n    };\n\n    // is a given value undefined?\n    is.undefined = function(value) {\n        return value === void 0;\n    };\n\n    // is a given value window?\n    // setInterval method is only available for window object\n    is.windowObject = function(value) {\n        return value != null && typeof value === 'object' && 'setInterval' in value;\n    };\n\n    // Presence checks\n    /* -------------------------------------------------------------------------- */\n\n    //is a given value empty? Objects, arrays, strings\n    is.empty = function(value) {\n        if (is.object(value)) {\n            var length = Object.getOwnPropertyNames(value).length;\n            if (length === 0 || (length === 1 && is.array(value)) ||\n                    (length === 2 && is.arguments(value))) {\n                return true;\n            }\n            return false;\n        }\n        return value === '';\n    };\n\n    // is a given value existy?\n    is.existy = function(value) {\n        return value != null;\n    };\n\n    // is a given value falsy?\n    is.falsy = function(value) {\n        return !value;\n    };\n\n    // is a given value truthy?\n    is.truthy = not(is.falsy);\n\n    // Arithmetic checks\n    /* -------------------------------------------------------------------------- */\n\n    // is a given number above minimum parameter?\n    is.above = function(n, min) {\n        return is.all.number(n, min) && n > min;\n    };\n    // above method does not support 'all' and 'any' interfaces\n    is.above.api = ['not'];\n\n    // is a given number decimal?\n    is.decimal = function(n) {\n        return is.number(n) && n % 1 !== 0;\n    };\n\n    // are given values equal? supports numbers, strings, regexes, booleans\n    // TODO: Add object and array support\n    is.equal = function(value, other) {\n        // check 0 and -0 equity with Infinity and -Infinity\n        if (is.all.number(value, other)) {\n            return value === other && 1 / value === 1 / other;\n        }\n        // check regexes as strings too\n        if (is.all.string(value, other) || is.all.regexp(value, other)) {\n            return '' + value === '' + other;\n        }\n        if (is.all.boolean(value, other)) {\n            return value === other;\n        }\n        return false;\n    };\n    // equal method does not support 'all' and 'any' interfaces\n    is.equal.api = ['not'];\n\n    // is a given number even?\n    is.even = function(n) {\n        return is.number(n) && n % 2 === 0;\n    };\n\n    // is a given number finite?\n    is.finite = isFinite || function(n) {\n        return is.not.infinite(n) && is.not.nan(n);\n    };\n\n    // is a given number infinite?\n    is.infinite = function(n) {\n        return n === Infinity || n === -Infinity;\n    };\n\n    // is a given number integer?\n    is.integer = function(n) {\n        return is.number(n) && n % 1 === 0;\n    };\n\n    // is a given number negative?\n    is.negative = function(n) {\n        return is.number(n) && n < 0;\n    };\n\n    // is a given number odd?\n    is.odd = function(n) {\n        return is.number(n) && n % 2 === 1;\n    };\n\n    // is a given number positive?\n    is.positive = function(n) {\n        return is.number(n) && n > 0;\n    };\n\n    // is a given number above maximum parameter?\n    is.under = function(n, max) {\n        return is.all.number(n, max) && n < max;\n    };\n    // least method does not support 'all' and 'any' interfaces\n    is.under.api = ['not'];\n\n    // is a given number within minimum and maximum parameters?\n    is.within = function(n, min, max) {\n        return is.all.number(n, min, max) && n > min && n < max;\n    };\n    // within method does not support 'all' and 'any' interfaces\n    is.within.api = ['not'];\n\n    // Regexp checks\n    /* -------------------------------------------------------------------------- */\n    // Steven Levithan, Jan Goyvaerts: Regular Expressions Cookbook\n    // Scott Gonzalez: Email address validation\n\n    // dateString match m/d/yy and mm/dd/yyyy, allowing any combination of one or two digits for the day and month, and two or four digits for the year\n    // eppPhone match extensible provisioning protocol format\n    // nanpPhone match north american number plan format\n    // time match hours, minutes, and seconds, 24-hour clock\n    var regexes = {\n        affirmative: /^(?:1|t(?:rue)?|y(?:es)?|ok(?:ay)?)$/,\n        alphaNumeric: /^[A-Za-z0-9]+$/,\n        caPostalCode: /^(?!.*[DFIOQU])[A-VXY][0-9][A-Z]\\s?[0-9][A-Z][0-9]$/,\n        creditCard: /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/,\n        dateString: /^(1[0-2]|0?[1-9])([\\/-])(3[01]|[12][0-9]|0?[1-9])(?:\\2)(?:[0-9]{2})?[0-9]{2}$/,\n        email: /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i, // eslint-disable-line no-control-regex\n        eppPhone: /^\\+[0-9]{1,3}\\.[0-9]{4,14}(?:x.+)?$/,\n        hexadecimal: /^(?:0x)?[0-9a-fA-F]+$/,\n        hexColor: /^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/,\n        ipv4: /^(?:(?:\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])$/,\n        ipv6: /^((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\3)::|:\\b|$))|(?!\\2\\3)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4})$/i,\n        nanpPhone: /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,\n        socialSecurityNumber: /^(?!000|666)[0-8][0-9]{2}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4}$/,\n        timeString: /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$/,\n        ukPostCode: /^[A-Z]{1,2}[0-9RCHNQ][0-9A-Z]?\\s?[0-9][ABD-HJLNP-UW-Z]{2}$|^[A-Z]{2}-?[0-9]{4}$/,\n        url: /^(?:(?:https?|ftp):\\/\\/)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:\\/\\S*)?$/i,\n        usZipCode: /^[0-9]{5}(?:-[0-9]{4})?$/\n    };\n\n    function regexpCheck(regexp, regexes) {\n        is[regexp] = function(value) {\n            return regexes[regexp].test(value);\n        };\n    }\n\n    // create regexp checks methods from 'regexes' object\n    for (var regexp in regexes) {\n        if (regexes.hasOwnProperty(regexp)) {\n            regexpCheck(regexp, regexes);\n        }\n    }\n\n    // simplify IP checks by calling the regex helpers for IPv4 and IPv6\n    is.ip = function(value) {\n        return is.ipv4(value) || is.ipv6(value);\n    };\n\n    // String checks\n    /* -------------------------------------------------------------------------- */\n\n    // is a given string or sentence capitalized?\n    is.capitalized = function(string) {\n        if (is.not.string(string)) {\n            return false;\n        }\n        var words = string.split(' ');\n        for (var i = 0; i < words.length; i++) {\n            var word = words[i];\n            if (word.length) {\n                var chr = word.charAt(0);\n                if (chr !== chr.toUpperCase()) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    };\n\n    // is string end with a given target parameter?\n    is.endWith = function(string, target) {\n        if (is.not.string(string)) {\n            return false;\n        }\n        target += '';\n        var position = string.length - target.length;\n        return position >= 0 && string.indexOf(target, position) === position;\n    };\n    // endWith method does not support 'all' and 'any' interfaces\n    is.endWith.api = ['not'];\n\n    // is a given string include parameter target?\n    is.include = function(string, target) {\n        return string.indexOf(target) > -1;\n    };\n    // include method does not support 'all' and 'any' interfaces\n    is.include.api = ['not'];\n\n    // is a given string all lowercase?\n    is.lowerCase = function(string) {\n        return is.string(string) && string === string.toLowerCase();\n    };\n\n    // is a given string palindrome?\n    is.palindrome = function(string) {\n        if (is.not.string(string)) {\n            return false;\n        }\n        string = string.replace(/[^a-zA-Z0-9]+/g, '').toLowerCase();\n        var length = string.length - 1;\n        for (var i = 0, half = Math.floor(length / 2); i <= half; i++) {\n            if (string.charAt(i) !== string.charAt(length - i)) {\n                return false;\n            }\n        }\n        return true;\n    };\n\n    // is a given value space?\n    // horizantal tab: 9, line feed: 10, vertical tab: 11, form feed: 12, carriage return: 13, space: 32\n    is.space = function(value) {\n        if (is.not.char(value)) {\n            return false;\n        }\n        var charCode = value.charCodeAt(0);\n        return (charCode > 8 && charCode < 14) || charCode === 32;\n    };\n\n    // is string start with a given target parameter?\n    is.startWith = function(string, target) {\n        return is.string(string) && string.indexOf(target) === 0;\n    };\n    // startWith method does not support 'all' and 'any' interfaces\n    is.startWith.api = ['not'];\n\n    // is a given string all uppercase?\n    is.upperCase = function(string) {\n        return is.string(string) && string === string.toUpperCase();\n    };\n\n    // Time checks\n    /* -------------------------------------------------------------------------- */\n\n    var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n    var months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\n\n    // is a given dates day equal given day parameter?\n    is.day = function(date, day) {\n        return is.date(date) && day.toLowerCase() === days[date.getDay()];\n    };\n    // day method does not support 'all' and 'any' interfaces\n    is.day.api = ['not'];\n\n    // is a given date in daylight saving time?\n    is.dayLightSavingTime = function(date) {\n        var january = new Date(date.getFullYear(), 0, 1);\n        var july = new Date(date.getFullYear(), 6, 1);\n        var stdTimezoneOffset = Math.max(january.getTimezoneOffset(), july.getTimezoneOffset());\n        return date.getTimezoneOffset() < stdTimezoneOffset;\n    };\n\n    // is a given date future?\n    is.future = function(date) {\n        var now = new Date();\n        return is.date(date) && date.getTime() > now.getTime();\n    };\n\n    // is date within given range?\n    is.inDateRange = function(date, start, end) {\n        if (is.not.date(date) || is.not.date(start) || is.not.date(end)) {\n            return false;\n        }\n        var stamp = date.getTime();\n        return stamp > start.getTime() && stamp < end.getTime();\n    };\n    // inDateRange method does not support 'all' and 'any' interfaces\n    is.inDateRange.api = ['not'];\n\n    // is a given date in last month range?\n    is.inLastMonth = function(date) {\n        return is.inDateRange(date, new Date(new Date().setMonth(new Date().getMonth() - 1)), new Date());\n    };\n\n    // is a given date in last week range?\n    is.inLastWeek = function(date) {\n        return is.inDateRange(date, new Date(new Date().setDate(new Date().getDate() - 7)), new Date());\n    };\n\n    // is a given date in last year range?\n    is.inLastYear = function(date) {\n        return is.inDateRange(date, new Date(new Date().setFullYear(new Date().getFullYear() - 1)), new Date());\n    };\n\n    // is a given date in next month range?\n    is.inNextMonth = function(date) {\n        return is.inDateRange(date, new Date(), new Date(new Date().setMonth(new Date().getMonth() + 1)));\n    };\n\n    // is a given date in next week range?\n    is.inNextWeek = function(date) {\n        return is.inDateRange(date, new Date(), new Date(new Date().setDate(new Date().getDate() + 7)));\n    };\n\n    // is a given date in next year range?\n    is.inNextYear = function(date) {\n        return is.inDateRange(date, new Date(), new Date(new Date().setFullYear(new Date().getFullYear() + 1)));\n    };\n\n    // is the given year a leap year?\n    is.leapYear = function(year) {\n        return is.number(year) && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n    };\n\n    // is a given dates month equal given month parameter?\n    is.month = function(date, month) {\n        return is.date(date) && month.toLowerCase() === months[date.getMonth()];\n    };\n    // month method does not support 'all' and 'any' interfaces\n    is.month.api = ['not'];\n\n    // is a given date past?\n    is.past = function(date) {\n        var now = new Date();\n        return is.date(date) && date.getTime() < now.getTime();\n    };\n\n    // is a given date in the parameter quarter?\n    is.quarterOfYear = function(date, quarter) {\n        return is.date(date) && is.number(quarter) && quarter === Math.floor((date.getMonth() + 3) / 3);\n    };\n    // quarterOfYear method does not support 'all' and 'any' interfaces\n    is.quarterOfYear.api = ['not'];\n\n    // is a given date indicate today?\n    is.today = function(date) {\n        var now = new Date();\n        var todayString = now.toDateString();\n        return is.date(date) && date.toDateString() === todayString;\n    };\n\n    // is a given date indicate tomorrow?\n    is.tomorrow = function(date) {\n        var now = new Date();\n        var tomorrowString = new Date(now.setDate(now.getDate() + 1)).toDateString();\n        return is.date(date) && date.toDateString() === tomorrowString;\n    };\n\n    // is a given date weekend?\n    // 6: Saturday, 0: Sunday\n    is.weekend = function(date) {\n        return is.date(date) && (date.getDay() === 6 || date.getDay() === 0);\n    };\n\n    // is a given date weekday?\n    is.weekday = not(is.weekend);\n\n    // is a given dates year equal given year parameter?\n    is.year = function(date, year) {\n        return is.date(date) && is.number(year) && year === date.getFullYear();\n    };\n    // year method does not support 'all' and 'any' interfaces\n    is.year.api = ['not'];\n\n    // is a given date indicate yesterday?\n    is.yesterday = function(date) {\n        var now = new Date();\n        var yesterdayString = new Date(now.setDate(now.getDate() - 1)).toDateString();\n        return is.date(date) && date.toDateString() === yesterdayString;\n    };\n\n    // Environment checks\n    /* -------------------------------------------------------------------------- */\n\n    var freeGlobal = is.windowObject(typeof global == 'object' && global) && global;\n    var freeSelf = is.windowObject(typeof self == 'object' && self) && self;\n    var thisGlobal = is.windowObject(typeof this == 'object' && this) && this;\n    var root = freeGlobal || freeSelf || thisGlobal || Function('return this')();\n\n    var document = freeSelf && freeSelf.document;\n    var previousIs = root.is;\n\n    // store navigator properties to use later\n    var navigator = freeSelf && freeSelf.navigator;\n    var appVersion = (navigator && navigator.appVersion || '').toLowerCase();\n    var userAgent = (navigator && navigator.userAgent || '').toLowerCase();\n    var vendor = (navigator && navigator.vendor || '').toLowerCase();\n\n    // is current device android?\n    is.android = function() {\n        return /android/.test(userAgent);\n    };\n    // android method does not support 'all' and 'any' interfaces\n    is.android.api = ['not'];\n\n    // is current device android phone?\n    is.androidPhone = function() {\n        return /android/.test(userAgent) && /mobile/.test(userAgent);\n    };\n    // androidPhone method does not support 'all' and 'any' interfaces\n    is.androidPhone.api = ['not'];\n\n    // is current device android tablet?\n    is.androidTablet = function() {\n        return /android/.test(userAgent) && !/mobile/.test(userAgent);\n    };\n    // androidTablet method does not support 'all' and 'any' interfaces\n    is.androidTablet.api = ['not'];\n\n    // is current device blackberry?\n    is.blackberry = function() {\n        return /blackberry/.test(userAgent) || /bb10/.test(userAgent);\n    };\n    // blackberry method does not support 'all' and 'any' interfaces\n    is.blackberry.api = ['not'];\n\n    // is current browser chrome?\n    // parameter is optional\n    is.chrome = function(range) {\n        var match = /google inc/.test(vendor) ? userAgent.match(/(?:chrome|crios)\\/(\\d+)/) : null;\n        return match !== null && compareVersion(match[1], range);\n    };\n    // chrome method does not support 'all' and 'any' interfaces\n    is.chrome.api = ['not'];\n\n    // is current device desktop?\n    is.desktop = function() {\n        return is.not.mobile() && is.not.tablet();\n    };\n    // desktop method does not support 'all' and 'any' interfaces\n    is.desktop.api = ['not'];\n\n    // is current browser edge?\n    // parameter is optional\n    is.edge = function(range) {\n        var match = userAgent.match(/edge\\/(\\d+)/);\n        return match !== null && compareVersion(match[1], range);\n    };\n    // edge method does not support 'all' and 'any' interfaces\n    is.edge.api = ['not'];\n\n    // is current browser firefox?\n    // parameter is optional\n    is.firefox = function(range) {\n        var match = userAgent.match(/(?:firefox|fxios)\\/(\\d+)/);\n        return match !== null && compareVersion(match[1], range);\n    };\n    // firefox method does not support 'all' and 'any' interfaces\n    is.firefox.api = ['not'];\n\n    // is current browser internet explorer?\n    // parameter is optional\n    is.ie = function(range) {\n        var match = userAgent.match(/(?:msie |trident.+?; rv:)(\\d+)/);\n        return match !== null && compareVersion(match[1], range);\n    };\n    // ie method does not support 'all' and 'any' interfaces\n    is.ie.api = ['not'];\n\n    // is current device ios?\n    is.ios = function() {\n        return is.iphone() || is.ipad() || is.ipod();\n    };\n    // ios method does not support 'all' and 'any' interfaces\n    is.ios.api = ['not'];\n\n    // is current device ipad?\n    // parameter is optional\n    is.ipad = function(range) {\n        var match = userAgent.match(/ipad.+?os (\\d+)/);\n        return match !== null && compareVersion(match[1], range);\n    };\n    // ipad method does not support 'all' and 'any' interfaces\n    is.ipad.api = ['not'];\n\n    // is current device iphone?\n    // parameter is optional\n    is.iphone = function(range) {\n        // original iPhone doesn't have the os portion of the UA\n        var match = userAgent.match(/iphone(?:.+?os (\\d+))?/);\n        return match !== null && compareVersion(match[1] || 1, range);\n    };\n    // iphone method does not support 'all' and 'any' interfaces\n    is.iphone.api = ['not'];\n\n    // is current device ipod?\n    // parameter is optional\n    is.ipod = function(range) {\n        var match = userAgent.match(/ipod.+?os (\\d+)/);\n        return match !== null && compareVersion(match[1], range);\n    };\n    // ipod method does not support 'all' and 'any' interfaces\n    is.ipod.api = ['not'];\n\n    // is current operating system linux?\n    is.linux = function() {\n        return /linux/.test(appVersion);\n    };\n    // linux method does not support 'all' and 'any' interfaces\n    is.linux.api = ['not'];\n\n    // is current operating system mac?\n    is.mac = function() {\n        return /mac/.test(appVersion);\n    };\n    // mac method does not support 'all' and 'any' interfaces\n    is.mac.api = ['not'];\n\n    // is current device mobile?\n    is.mobile = function() {\n        return is.iphone() || is.ipod() || is.androidPhone() || is.blackberry() || is.windowsPhone();\n    };\n    // mobile method does not support 'all' and 'any' interfaces\n    is.mobile.api = ['not'];\n\n    // is current state offline?\n    is.offline = not(is.online);\n    // offline method does not support 'all' and 'any' interfaces\n    is.offline.api = ['not'];\n\n    // is current state online?\n    is.online = function() {\n        return !navigator || navigator.onLine === true;\n    };\n    // online method does not support 'all' and 'any' interfaces\n    is.online.api = ['not'];\n\n    // is current browser opera?\n    // parameter is optional\n    is.opera = function(range) {\n        var match = userAgent.match(/(?:^opera.+?version|opr)\\/(\\d+)/);\n        return match !== null && compareVersion(match[1], range);\n    };\n    // opera method does not support 'all' and 'any' interfaces\n    is.opera.api = ['not'];\n\n    // is current browser phantomjs?\n    // parameter is optional\n    is.phantom = function(range) {\n        var match = userAgent.match(/phantomjs\\/(\\d+)/);\n        return match !== null && compareVersion(match[1], range);\n    };\n    // phantom method does not support 'all' and 'any' interfaces\n    is.phantom.api = ['not'];\n\n    // is current browser safari?\n    // parameter is optional\n    is.safari = function(range) {\n        var match = userAgent.match(/version\\/(\\d+).+?safari/);\n        return match !== null && compareVersion(match[1], range);\n    };\n    // safari method does not support 'all' and 'any' interfaces\n    is.safari.api = ['not'];\n\n    // is current device tablet?\n    is.tablet = function() {\n        return is.ipad() || is.androidTablet() || is.windowsTablet();\n    };\n    // tablet method does not support 'all' and 'any' interfaces\n    is.tablet.api = ['not'];\n\n    // is current device supports touch?\n    is.touchDevice = function() {\n        return !!document && ('ontouchstart' in freeSelf ||\n            ('DocumentTouch' in freeSelf && document instanceof DocumentTouch));\n    };\n    // touchDevice method does not support 'all' and 'any' interfaces\n    is.touchDevice.api = ['not'];\n\n    // is current operating system windows?\n    is.windows = function() {\n        return /win/.test(appVersion);\n    };\n    // windows method does not support 'all' and 'any' interfaces\n    is.windows.api = ['not'];\n\n    // is current device windows phone?\n    is.windowsPhone = function() {\n        return is.windows() && /phone/.test(userAgent);\n    };\n    // windowsPhone method does not support 'all' and 'any' interfaces\n    is.windowsPhone.api = ['not'];\n\n    // is current device windows tablet?\n    is.windowsTablet = function() {\n        return is.windows() && is.not.windowsPhone() && /touch/.test(userAgent);\n    };\n    // windowsTablet method does not support 'all' and 'any' interfaces\n    is.windowsTablet.api = ['not'];\n\n    // Object checks\n    /* -------------------------------------------------------------------------- */\n\n    // has a given object got parameterized count property?\n    is.propertyCount = function(object, count) {\n        if (is.not.object(object) || is.not.number(count)) {\n            return false;\n        }\n        var n = 0;\n        for (var property in object) {\n            if (hasOwnProperty.call(object, property) && ++n > count) {\n                return false;\n            }\n        }\n        return n === count;\n    };\n    // propertyCount method does not support 'all' and 'any' interfaces\n    is.propertyCount.api = ['not'];\n\n    // is given object has parameterized property?\n    is.propertyDefined = function(object, property) {\n        return is.object(object) && is.string(property) && property in object;\n    };\n    // propertyDefined method does not support 'all' and 'any' interfaces\n    is.propertyDefined.api = ['not'];\n\n    // Array checks\n    /* -------------------------------------------------------------------------- */\n\n    // is a given item in an array?\n    is.inArray = function(value, array) {\n        if (is.not.array(array)) {\n            return false;\n        }\n        for (var i = 0; i < array.length; i++) {\n            if (array[i] === value) {\n                return true;\n            }\n        }\n        return false;\n    };\n    // inArray method does not support 'all' and 'any' interfaces\n    is.inArray.api = ['not'];\n\n    // is a given array sorted?\n    is.sorted = function(array, sign) {\n        if (is.not.array(array)) {\n            return false;\n        }\n        var predicate = comparator[sign] || comparator['>='];\n        for (var i = 1; i < array.length; i++) {\n            if (!predicate(array[i], array[i - 1])) {\n                return false;\n            }\n        }\n        return true;\n    };\n\n    // API\n    // Set 'not', 'all' and 'any' interfaces to methods based on their api property\n    /* -------------------------------------------------------------------------- */\n\n    function setInterfaces() {\n        var options = is;\n        for (var option in options) {\n            if (hasOwnProperty.call(options, option) && is['function'](options[option])) {\n                var interfaces = options[option].api || ['not', 'all', 'any'];\n                for (var i = 0; i < interfaces.length; i++) {\n                    if (interfaces[i] === 'not') {\n                        is.not[option] = not(is[option]);\n                    }\n                    if (interfaces[i] === 'all') {\n                        is.all[option] = all(is[option]);\n                    }\n                    if (interfaces[i] === 'any') {\n                        is.any[option] = any(is[option]);\n                    }\n                }\n            }\n        }\n    }\n    setInterfaces();\n\n    // Configuration methods\n    // Intentionally added after setInterfaces function\n    /* -------------------------------------------------------------------------- */\n\n    // change namespace of library to prevent name collisions\n    // var preferredName = is.setNamespace();\n    // preferredName.odd(3);\n    // => true\n    is.setNamespace = function() {\n        root.is = previousIs;\n        return this;\n    };\n\n    // set optional regexes to methods\n    is.setRegexp = function(regexp, name) {\n        for (var r in regexes) {\n            if (hasOwnProperty.call(regexes, r) && (name === r)) {\n                regexes[r] = regexp;\n            }\n        }\n    };\n\n    return is;\n}));\n","import { IQCallback1, IQCallback2 } from '../defs'\nimport is from 'is_js'\nexport const every = <T>(...checkers: Array<Function>) => (item: T) => checkers.every((check) => check(item))\nexport const some = <T>(...checkers: Array<Function>) => (item: T) => checkers.some((check) => check(item))\nexport const compose = <T>(msg: string, checker: (it: T) => boolean) => (item: T) => {\n  const isFullfiled = checker(item)\n  if (isFullfiled) return item\n  throw new TypeError(msg)\n}\n\nconst getName = (item: string) => Object.keys(item).shift()\nconst getMsg = (item: string, msg: string) => `\\`${getName(item)}\\` ${msg}`\n\nexport const isRequired = (item: any) => {\n  const msg = getMsg(item, 'are required')\n  return compose(msg, every(is.not.null, is.not.undefined))\n}\nexport const isReqString = (item: any) => {\n  const msg = getMsg(item, 'are required and need to be string')\n  return compose(msg, every(is.not.null, is.not.undefined, is.string))\n}\nexport const isReqNumber = (item: any) => {\n  const msg = getMsg(item, 'are required and need to be number')\n  return compose(msg, every(is.not.null, is.not.undefined, is.number))\n}\nexport const isReqBoolean = (item: any) => {\n  const msg = getMsg(item, 'are required and need to be boolean')\n  return compose(msg, every(is.not.null, is.not.undefined, is.boolean))\n}\nexport const isReqJson = (item: any) => {\n  const msg = getMsg(item, 'are required and need to be object')\n  return compose(msg, every(is.not.null, is.not.undefined, is.json))\n}\nexport const isReqArrayNumber = (item: any) => {\n  const msg = getMsg(item, 'are required and need to be array of number')\n  return compose(msg, every(is.not.null, is.not.undefined, is.array, is.all.number))\n}\nexport const isReqArrayString = (item: any) => {\n  const msg = getMsg(item, 'are required and need to be array of string')\n  return compose(msg, every(is.not.null, is.not.undefined, is.array, is.all.string))\n}\nexport const isReqArrayOfStringOrNumber = (item: any) => {\n  const msg = getMsg(item, 'are required and need to be array of string or array of number')\n  return compose(msg, every(is.not.null, is.not.undefined, is.array, some(is.all.number, is.all.string)))\n}\nexport const isOptArrayNumber = (item: any) => {\n  const msg = getMsg(item, 'need to be array of number or null')\n  // return compose(msg, some(is.null, is.undefined, is.array, is.all.number))\n  return compose(msg, some(is.null, is.undefined, every(is.not.null, is.not.undefined, is.array, is.all.number)))\n}\nexport const isOptArrayString = (item: any) => {\n  const msg = getMsg(item, 'need to be array of string or null')\n  return compose(msg, some(is.null, is.undefined, every(is.not.null, is.not.undefined, is.array, is.all.string)))\n}\nexport const isOptString = (item: any) => {\n  const msg = getMsg(item, 'need to be string or null')\n  return compose(msg, some(is.null, is.undefined, is.string))\n}\nexport const isOptNumber = (item: any) => {\n  const msg = getMsg(item, 'need to be number or null')\n  return compose(msg, some(is.null, is.undefined, is.number))\n}\nexport const isOptJson = (item: any) => {\n  const msg = getMsg(item, 'need to be object or null')\n  return compose(msg, some(is.null, is.undefined, is.json))\n}\nexport const isOptCallback = (item: any) => {\n  const msg = getMsg(item, 'need to be function or null')\n  return compose(msg, some(is.null, is.undefined, is.function))\n}\nexport const isOptBoolean = (item: any) => {\n  const msg = getMsg(item, 'need to be boolean or null')\n  return compose(msg, some(is.null, is.undefined, is.boolean))\n}\n\nexport function isArrayOfNumber(ids: number[] | string[]): ids is number[] {\n  return is.all.truthy(is.array(ids), is.all.number(ids))\n}\nexport function isArrayOfString(ids: number[] | string[]): ids is string[] {\n  return is.all.truthy(is.array(ids), is.all.string(ids))\n}\nexport function isCallback1<T = unknown>(cb: IQCallback1 | IQCallback2<T>): cb is IQCallback1 {\n  return cb.length === 1\n}\nexport function isCallback2<T = unknown>(cb: IQCallback1 | IQCallback2<T>): cb is IQCallback2<T> {\n  return cb.length === 2\n}\n","import xs, { Listener, Producer, Stream, Subscription } from 'xstream'\nimport { Subscription as Subs, IQCallback2 as Callback2, IQCallback1 as Callback1 } from '../defs'\nimport { isCallback1, isCallback2 } from './param-utils'\n\nexport const toPromise = <T>(stream: Stream<T>): Promise<T> =>\n  new Promise((resolve, reject) => {\n    let value: T\n    stream.subscribe({\n      next(data) {\n        value = data\n      },\n      error(error) {\n        reject(error)\n      },\n      complete() {\n        resolve(value)\n      },\n    })\n  })\nexport const toCallback =\n  <T>(callback: Callback2<T> | Callback1) =>\n  (stream: Stream<T>) => {\n    let value: T\n    let subscription: Subscription | undefined\n\n    subscription = stream.subscribe({\n      next(data) {\n        value = data\n      },\n      error(error) {\n        if (isCallback1(callback)) {\n          callback(error)\n        }\n        if (isCallback2(callback)) {\n          callback(undefined, error)\n        }\n      },\n      complete() {\n        if (isCallback1(callback)) callback(undefined)\n        if (isCallback2(callback)) callback(value, undefined)\n        subscription?.unsubscribe()\n      },\n    })\n  }\nexport const toCallbackOrPromise =\n  <T>(callback?: Callback1 | Callback2<T> | null) =>\n  (stream: Stream<T>) => {\n    if (callback == null) return toPromise(stream)\n    return toCallback(callback)(stream)\n  }\n\nexport const tryCatch = <T>(fn: () => T, onError: (error: Error) => void): void => {\n  try {\n    fn()\n  } catch (error) {\n    onError(error as Error)\n  }\n}\n\nexport const process = <T>(item: T, ...checkers: Function[]): Stream<T> =>\n  xs.create({\n    start(listener) {\n      checkers.forEach((check) => {\n        tryCatch(\n          () => {\n            const value = check(item)\n            listener.next(value)\n            listener.complete()\n          },\n          (error) => listener.error(error)\n        )\n      })\n    },\n    stop() {},\n  })\n\nexport const tap =\n  <T>(onNext: (value: T) => void, onError?: (error: Error) => void, onComplete?: () => void) =>\n  (stream: Stream<T>): Stream<T> => {\n    let subscription: Subscription | null\n    return xs.create<T>({\n      start(listener) {\n        subscription = stream.subscribe({\n          next(value) {\n            onNext?.(value)\n            listener.next(value)\n          },\n          error(error) {\n            onError?.(error)\n            listener.error(error)\n          },\n          complete() {\n            onComplete?.()\n            listener.complete()\n          },\n        })\n      },\n      stop() {\n        subscription?.unsubscribe()\n      },\n    })\n  }\n\nconst sleep = (time: number) => new Promise((res) => setTimeout(res, time))\nexport const bufferUntil =\n  <T>(fn: () => boolean) =>\n  (stream: Stream<T>): Stream<T> => {\n    const buffer: Array<T> = []\n    let subscription: Subscription | undefined\n    return xs.create({\n      start(listener) {\n        subscription = stream.subscribe({\n          next: (data) => {\n            buffer.push(data)\n            while (fn() && buffer.length) {\n              const data = buffer.shift()\n              if (data != null) listener.next(data)\n            }\n          },\n          error: (err) => listener.error(err),\n          complete: async () => {\n            while (buffer.length) {\n              if (fn()) {\n                const data = buffer.shift()\n                if (data != null) listener.next(data)\n              } else {\n                await sleep(300)\n              }\n            }\n            listener.complete()\n          },\n        })\n      },\n      stop() {\n        subscription?.unsubscribe()\n      },\n    })\n  }\n\nexport const subscribeOnNext =\n  <T extends any>(onNext: (value: T) => void) =>\n  (stream: Stream<T>) => {\n    return stream.subscribe({\n      next: (data: T) => onNext(data),\n    })\n  }\n\ntype Func<T extends any[]> = (...data: T) => void\nexport const toEventSubscription =\n  <T extends any[]>(eventSubscribe: (handler: Func<T>) => Subs) =>\n  (stream: Stream<Func<T>>) => {\n    let subscription: Subscription | undefined\n    let subs: Subs | undefined\n\n    subscription = stream.subscribe({\n      next: (handler) => {\n        subs = eventSubscribe(handler)\n      },\n    })\n\n    return () => {\n      subscription?.unsubscribe()\n      subs?.()\n    }\n  }\n\nexport const toEventSubscription_ =\n  <T extends unknown>(handler: (data: T) => void, onError?: (error: Error) => void) =>\n  (stream: Stream<T>) => {\n    const subscription = stream.subscribe({\n      next: (data) => handler(data),\n      error: (err) => {\n        onError?.(err)\n      },\n    })\n\n    return () => subscription.unsubscribe()\n  }\n\nexport function fromAsyncGenerator<T>(generator: AsyncIterable<T>): Stream<T> {\n  let isCanceled = false\n\n  return xs.create({\n    async start(sink) {\n      try {\n        for await (let data of generator) {\n          sink.next(data)\n          if (isCanceled) {\n            break\n          }\n        }\n        sink.complete()\n      } catch (err) {\n        sink.error(err)\n      }\n    },\n    stop() {\n      isCanceled = true\n    },\n  })\n}\n\nexport class IntervalProducer implements Producer<number> {\n  accumulator: number = 0\n  _isCanceled = false\n  constructor(private getInterval: () => number, private getSyncInterval: () => number) {}\n\n  async start(sink: Listener<number>) {\n    while (true) {\n      this.accumulator += this.getInterval()\n\n      if (this.accumulator >= this.getSyncInterval()) {\n        sink.next(this.accumulator)\n        this.accumulator = 0\n      }\n      if (this._isCanceled) break\n      await sleep(this.getInterval())\n    }\n  }\n  stop() {\n    this._isCanceled = true\n  }\n}\n","// @ts-nocheck\n// Taken from https://github.com/FGRibreau/match-when/blob/master/match.js\n// @ts-ignore\n// import Symbol from \"es6-symbol\";\nconst _catchAllSymbol = Symbol('match.pattern.catchAll')\nconst _patternOR = Symbol('match.pattern.OR')\nconst _patternORStr = _patternOR.toString() // Dirty hack\nconst _patternAND = Symbol('match.pattern.AND')\nconst _patternANDStr = _patternAND.toString() // Dirty hack\nconst _patternRANGE = Symbol('match.pattern.RANGE')\nconst _patternRANGEStr = _patternRANGE.toString() // Dirty hack\n\nconst _patternREGEXP = Symbol('match.pattern.REGEXP')\nconst _patternREGEXPStr = _patternREGEXP.toString() // Dirty hack\nconst EXTRACT_PATTERN_AND_FLAGS = /\\/(.*)\\/(.*)/\n\nfunction MissingCatchAllPattern() {\n  Error.call(\n    this,\n    'Missing when() catch-all pattern as last match argument, add [when()]: void 0'\n  )\n  if (!('stack' in this)) {\n    this.stack = new Error().stack\n  }\n}\n\nMissingCatchAllPattern.prototype = Object.create(Error.prototype)\n\nexport function match(...args) {\n  const obj = args[args.length - 1]\n\n  // Pre-compute matchers\n  const matchers = []\n\n  for (const key in obj) {\n    matchers.push(when.unserialize(key, obj[key]))\n  }\n\n  // Since JS objects are unordered we need to reorder what for..in give us even if the order was already right\n  // because it depends on the JS engine implementation. See #2\n  matchers.sort((a, b) => {\n    return a.position < b.position ? -1 : 1\n  })\n\n  // noinspection TypeScriptValidateTypes\n  if (Object.getOwnPropertySymbols(obj).indexOf(_catchAllSymbol) !== -1) {\n    matchers.push(when.unserialize(_catchAllSymbol, obj[_catchAllSymbol]))\n  }\n\n  const calculateResult = function(input) {\n    const matched = matchers.find(matcher => matcher.match(input))\n\n    if (!matched) {\n      throw new MissingCatchAllPattern()\n    }\n\n    return typeof matched.result === 'function'\n      ? matched.result(input)\n      : matched.result\n  }\n\n  return args.length === 2 ? calculateResult(args[0]) : calculateResult\n}\n\nexport function when(props?: any) {\n  if (props === undefined) {\n    return _catchAllSymbol\n  }\n\n  if (props instanceof RegExp) {\n    return _serialize([_patternREGEXP.toString(), props.toString()])\n  }\n\n  return _serialize(props)\n}\n\nwhen.__uid = 0\n\n// Any -> String\nfunction _serialize(mixed) {\n  return JSON.stringify([when.__uid++, mixed])\n}\n\n// String -> [Number, Any]\nfunction _unserialize(str) {\n  return JSON.parse(str)\n}\n\nfunction _true() {\n  return true\n}\n\n// Any -> String\nfunction _match(props) {\n  if (Array.isArray(props)) {\n    if (props[0] === _patternORStr) {\n      props.shift()\n      return function(input) {\n        return props[0].some(prop => _matching(prop, input))\n      }\n    }\n\n    if (props[0] === _patternANDStr) {\n      props.shift()\n      return function(input) {\n        return props[0].every(prop => _matching(prop, input))\n      }\n    }\n\n    if (props[0] === _patternRANGEStr) {\n      props.shift()\n      return function(input) {\n        return props[0] <= input && input <= props[1]\n      }\n    }\n\n    if (props[0] === _patternREGEXPStr) {\n      const res = EXTRACT_PATTERN_AND_FLAGS.exec(props[1])\n      return _matching.bind(null, new RegExp(res[1], res[2]))\n    }\n  }\n\n  function _matching(props, input) {\n    // Implement array matching\n    if (Array.isArray(input)) {\n      // @todo yes this is a quick and dirty way, optimize this\n      return JSON.stringify(props) === JSON.stringify(input)\n    }\n\n    if (props instanceof RegExp) {\n      return props.test(input)\n    }\n\n    if (typeof input === 'object') {\n      for (const prop in props) {\n        if (input[prop] !== props[prop]) {\n          return false\n        }\n      }\n\n      return true\n    }\n\n    return props === input\n  }\n\n  return input => _matching(props, input)\n}\n\n// Mixed -> String\nwhen.or = function(...args) {\n  return _serialize([_patternOR.toString(), args])\n}\n\n// Mixed -> String\n// upcoming...\nwhen.and = function(...args) {\n  return _serialize([_patternAND.toString(), args])\n}\n\nwhen.range = function(start, end) {\n  return _serialize([_patternRANGE.toString(), start, end])\n}\n\nwhen.unserialize = function(serializedKey, value) {\n  if (serializedKey === _catchAllSymbol) {\n    return {\n      match: _true,\n      result: value,\n      position: Infinity,\n    }\n  }\n\n  // Const {position, matcherConfiguration} = _unserialize(serializedKey);\n  const deserialized = _unserialize(serializedKey)\n  const matcherConfiguration = deserialized[1]\n  const position = deserialized[0]\n\n  return {\n    match: _match(matcherConfiguration),\n    result: value,\n    position,\n  }\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","\"use strict\";\nexports.__esModule = true;\nvar EventEmitter = /** @class */ (function () {\n    function EventEmitter() {\n        this.handlers = {};\n    }\n    EventEmitter.prototype.on = function (event, handler) {\n        var eventHandlers = this.handlers[event];\n        if (!eventHandlers) {\n            eventHandlers = [];\n            this.handlers[event] = eventHandlers;\n        }\n        this.handlers[event].push(handler);\n        return handler;\n    };\n    EventEmitter.prototype.off = function (event, handler) {\n        var eventHandlers = this.handlers[event];\n        if (!handler) {\n            return;\n        }\n        var index = eventHandlers.indexOf(handler);\n        if (index === -1) {\n            return;\n        }\n        this.handlers[event].splice(index, 1);\n    };\n    EventEmitter.prototype.offAll = function () {\n        this.handlers = {};\n    };\n    EventEmitter.prototype.emit = function (event) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var eventHandlers = this.handlers[event];\n        if (!eventHandlers) {\n            return;\n        }\n        eventHandlers.forEach(function (handler) { return handler.apply(void 0, args); });\n    };\n    return EventEmitter;\n}());\nexports.EventEmitter = EventEmitter;\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nexports.__esModule = true;\n__export(require(\"./EventEmitter\"));\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.mqtt = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n(function (process,global){(function (){\n'use strict'\r\n\r\n/**\r\n * Module dependencies\r\n */\r\nvar EventEmitter = require('events').EventEmitter\r\nvar Store = require('./store')\r\nvar mqttPacket = require('mqtt-packet')\r\nvar Writable = require('readable-stream').Writable\r\nvar inherits = require('inherits')\r\nvar reInterval = require('reinterval')\r\nvar validations = require('./validations')\r\nvar xtend = require('xtend')\r\nvar debug = require('debug')('mqttjs:client')\r\nvar nextTick = process ? process.nextTick : function (callback) { setTimeout(callback, 0) }\r\nvar setImmediate = global.setImmediate || function (callback) {\r\n  // works in node v0.8\r\n  nextTick(callback)\r\n}\r\nvar defaultConnectOptions = {\r\n  keepalive: 60,\r\n  reschedulePings: true,\r\n  protocolId: 'MQTT',\r\n  protocolVersion: 4,\r\n  reconnectPeriod: 1000,\r\n  connectTimeout: 30 * 1000,\r\n  clean: true,\r\n  resubscribe: true\r\n}\r\n\r\nvar socketErrors = [\r\n  'ECONNREFUSED',\r\n  'EADDRINUSE',\r\n  'ECONNRESET',\r\n  'ENOTFOUND'\r\n]\r\n\r\n// Other Socket Errors: EADDRINUSE, ECONNRESET, ENOTFOUND.\r\n\r\nvar errors = {\r\n  0: '',\r\n  1: 'Unacceptable protocol version',\r\n  2: 'Identifier rejected',\r\n  3: 'Server unavailable',\r\n  4: 'Bad username or password',\r\n  5: 'Not authorized',\r\n  16: 'No matching subscribers',\r\n  17: 'No subscription existed',\r\n  128: 'Unspecified error',\r\n  129: 'Malformed Packet',\r\n  130: 'Protocol Error',\r\n  131: 'Implementation specific error',\r\n  132: 'Unsupported Protocol Version',\r\n  133: 'Client Identifier not valid',\r\n  134: 'Bad User Name or Password',\r\n  135: 'Not authorized',\r\n  136: 'Server unavailable',\r\n  137: 'Server busy',\r\n  138: 'Banned',\r\n  139: 'Server shutting down',\r\n  140: 'Bad authentication method',\r\n  141: 'Keep Alive timeout',\r\n  142: 'Session taken over',\r\n  143: 'Topic Filter invalid',\r\n  144: 'Topic Name invalid',\r\n  145: 'Packet identifier in use',\r\n  146: 'Packet Identifier not found',\r\n  147: 'Receive Maximum exceeded',\r\n  148: 'Topic Alias invalid',\r\n  149: 'Packet too large',\r\n  150: 'Message rate too high',\r\n  151: 'Quota exceeded',\r\n  152: 'Administrative action',\r\n  153: 'Payload format invalid',\r\n  154: 'Retain not supported',\r\n  155: 'QoS not supported',\r\n  156: 'Use another server',\r\n  157: 'Server moved',\r\n  158: 'Shared Subscriptions not supported',\r\n  159: 'Connection rate exceeded',\r\n  160: 'Maximum connect time',\r\n  161: 'Subscription Identifiers not supported',\r\n  162: 'Wildcard Subscriptions not supported'\r\n}\r\n\r\nfunction defaultId () {\r\n  return 'mqttjs_' + Math.random().toString(16).substr(2, 8)\r\n}\r\n\r\nfunction sendPacket (client, packet, cb) {\r\n  debug('sendPacket :: packet: %O', packet)\r\n  debug('sendPacket :: emitting `packetsend`')\r\n  client.emit('packetsend', packet)\r\n\r\n  debug('sendPacket :: writing to stream')\r\n  var result = mqttPacket.writeToStream(packet, client.stream, client.options)\r\n  debug('sendPacket :: writeToStream result %s', result)\r\n  if (!result && cb) {\r\n    debug('sendPacket :: handle events on `drain` once through callback.')\r\n    client.stream.once('drain', cb)\r\n  } else if (cb) {\r\n    debug('sendPacket :: invoking cb')\r\n    cb()\r\n  }\r\n}\r\n\r\nfunction flush (queue) {\r\n  if (queue) {\r\n    debug('flush: queue exists? %b', !!(queue))\r\n    Object.keys(queue).forEach(function (messageId) {\r\n      if (typeof queue[messageId].cb === 'function') {\r\n        queue[messageId].cb(new Error('Connection closed'))\r\n        delete queue[messageId]\r\n      }\r\n    })\r\n  }\r\n}\r\n\r\nfunction flushVolatile (queue) {\r\n  if (queue) {\r\n    debug('flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function')\r\n    Object.keys(queue).forEach(function (messageId) {\r\n      if (queue[messageId].volatile && typeof queue[messageId].cb === 'function') {\r\n        queue[messageId].cb(new Error('Connection closed'))\r\n        delete queue[messageId]\r\n      }\r\n    })\r\n  }\r\n}\r\n\r\nfunction storeAndSend (client, packet, cb, cbStorePut) {\r\n  debug('storeAndSend :: store packet with cmd %s to outgoingStore', packet.cmd)\r\n  client.outgoingStore.put(packet, function storedPacket (err) {\r\n    if (err) {\r\n      return cb && cb(err)\r\n    }\r\n    cbStorePut()\r\n    sendPacket(client, packet, cb)\r\n  })\r\n}\r\n\r\nfunction nop (error) {\r\n  debug('nop ::', error)\r\n}\r\n\r\n/**\r\n * MqttClient constructor\r\n *\r\n * @param {Stream} stream - stream\r\n * @param {Object} [options] - connection options\r\n * (see Connection#connect)\r\n */\r\nfunction MqttClient (streamBuilder, options) {\r\n  var k\r\n  var that = this\r\n\r\n  if (!(this instanceof MqttClient)) {\r\n    return new MqttClient(streamBuilder, options)\r\n  }\r\n\r\n  this.options = options || {}\r\n\r\n  // Defaults\r\n  for (k in defaultConnectOptions) {\r\n    if (typeof this.options[k] === 'undefined') {\r\n      this.options[k] = defaultConnectOptions[k]\r\n    } else {\r\n      this.options[k] = options[k]\r\n    }\r\n  }\r\n\r\n  debug('MqttClient :: options.protocol', options.protocol)\r\n  debug('MqttClient :: options.protocolVersion', options.protocolVersion)\r\n  debug('MqttClient :: options.username', options.username)\r\n  debug('MqttClient :: options.keepalive', options.keepalive)\r\n  debug('MqttClient :: options.reconnectPeriod', options.reconnectPeriod)\r\n  debug('MqttClient :: options.rejectUnauthorized', options.rejectUnauthorized)\r\n\r\n  this.options.clientId = (typeof options.clientId === 'string') ? options.clientId : defaultId()\r\n\r\n  debug('MqttClient :: clientId', this.options.clientId)\r\n\r\n  this.options.customHandleAcks = (options.protocolVersion === 5 && options.customHandleAcks) ? options.customHandleAcks : function () { arguments[3](0) }\r\n\r\n  this.streamBuilder = streamBuilder\r\n\r\n  // Inflight message storages\r\n  this.outgoingStore = options.outgoingStore || new Store()\r\n  this.incomingStore = options.incomingStore || new Store()\r\n\r\n  // Should QoS zero messages be queued when the connection is broken?\r\n  this.queueQoSZero = options.queueQoSZero === undefined ? true : options.queueQoSZero\r\n\r\n  // map of subscribed topics to support reconnection\r\n  this._resubscribeTopics = {}\r\n\r\n  // map of a subscribe messageId and a topic\r\n  this.messageIdToTopic = {}\r\n\r\n  // Ping timer, setup in _setupPingTimer\r\n  this.pingTimer = null\r\n  // Is the client connected?\r\n  this.connected = false\r\n  // Are we disconnecting?\r\n  this.disconnecting = false\r\n  // Packet queue\r\n  this.queue = []\r\n  // connack timer\r\n  this.connackTimer = null\r\n  // Reconnect timer\r\n  this.reconnectTimer = null\r\n  // Is processing store?\r\n  this._storeProcessing = false\r\n  // Packet Ids are put into the store during store processing\r\n  this._packetIdsDuringStoreProcessing = {}\r\n  /**\r\n   * MessageIDs starting with 1\r\n   * ensure that nextId is min. 1, see https://github.com/mqttjs/MQTT.js/issues/810\r\n   */\r\n  this.nextId = Math.max(1, Math.floor(Math.random() * 65535))\r\n\r\n  // Inflight callbacks\r\n  this.outgoing = {}\r\n\r\n  // True if connection is first time.\r\n  this._firstConnection = true\r\n\r\n  // Send queued packets\r\n  this.on('connect', function () {\r\n    var queue = this.queue\r\n\r\n    function deliver () {\r\n      var entry = queue.shift()\r\n      debug('deliver :: entry %o', entry)\r\n      var packet = null\r\n\r\n      if (!entry) {\r\n        return\r\n      }\r\n\r\n      packet = entry.packet\r\n      debug('deliver :: call _sendPacket for %o', packet)\r\n      that._sendPacket(\r\n        packet,\r\n        function (err) {\r\n          if (entry.cb) {\r\n            entry.cb(err)\r\n          }\r\n          deliver()\r\n        }\r\n      )\r\n    }\r\n\r\n    debug('connect :: sending queued packets')\r\n    deliver()\r\n  })\r\n\r\n  this.on('close', function () {\r\n    debug('close :: connected set to `false`')\r\n    this.connected = false\r\n\r\n    debug('close :: clearing connackTimer')\r\n    clearTimeout(this.connackTimer)\r\n\r\n    debug('close :: clearing ping timer')\r\n    if (that.pingTimer !== null) {\r\n      that.pingTimer.clear()\r\n      that.pingTimer = null\r\n    }\r\n\r\n    debug('close :: calling _setupReconnect')\r\n    this._setupReconnect()\r\n  })\r\n  EventEmitter.call(this)\r\n\r\n  debug('MqttClient :: setting up stream')\r\n  this._setupStream()\r\n}\r\ninherits(MqttClient, EventEmitter)\r\n\r\n/**\r\n * setup the event handlers in the inner stream.\r\n *\r\n * @api private\r\n */\r\nMqttClient.prototype._setupStream = function () {\r\n  var connectPacket\r\n  var that = this\r\n  var writable = new Writable()\r\n  var parser = mqttPacket.parser(this.options)\r\n  var completeParse = null\r\n  var packets = []\r\n\r\n  debug('_setupStream :: calling method to clear reconnect')\r\n  this._clearReconnect()\r\n\r\n  debug('_setupStream :: using streamBuilder provided to client to create stream')\r\n  this.stream = this.streamBuilder(this)\r\n\r\n  parser.on('packet', function (packet) {\r\n    debug('parser :: on packet push to packets array.')\r\n    packets.push(packet)\r\n  })\r\n\r\n  function nextTickWork () {\r\n    if (packets.length) {\r\n      nextTick(work)\r\n    } else {\r\n      var done = completeParse\r\n      completeParse = null\r\n      done()\r\n    }\r\n  }\r\n\r\n  function work () {\r\n    debug('work :: getting next packet in queue')\r\n    var packet = packets.shift()\r\n\r\n    if (packet) {\r\n      debug('work :: packet pulled from queue')\r\n      that._handlePacket(packet, nextTickWork)\r\n    } else {\r\n      debug('work :: no packets in queue')\r\n      var done = completeParse\r\n      completeParse = null\r\n      debug('work :: done flag is %s', !!(done))\r\n      if (done) done()\r\n    }\r\n  }\r\n\r\n  writable._write = function (buf, enc, done) {\r\n    completeParse = done\r\n    debug('writable stream :: parsing buffer')\r\n    parser.parse(buf)\r\n    work()\r\n  }\r\n\r\n  function streamErrorHandler (error) {\r\n    debug('streamErrorHandler :: error', error.message)\r\n    if (socketErrors.includes(error.code)) {\r\n      // handle error\r\n      debug('streamErrorHandler :: emitting error')\r\n      that.emit('error', error)\r\n    } else {\r\n      nop(error)\r\n    }\r\n  }\r\n\r\n  debug('_setupStream :: pipe stream to writable stream')\r\n  this.stream.pipe(writable)\r\n\r\n  // Suppress connection errors\r\n  this.stream.on('error', streamErrorHandler)\r\n\r\n  // Echo stream close\r\n  this.stream.on('close', function () {\r\n    debug('(%s)stream :: on close', that.options.clientId)\r\n    flushVolatile(that.outgoing)\r\n    debug('stream: emit close to MqttClient')\r\n    that.emit('close')\r\n  })\r\n\r\n  // Send a connect packet\r\n  debug('_setupStream: sending packet `connect`')\r\n  connectPacket = Object.create(this.options)\r\n  connectPacket.cmd = 'connect'\r\n  // avoid message queue\r\n  sendPacket(this, connectPacket)\r\n\r\n  // Echo connection errors\r\n  parser.on('error', this.emit.bind(this, 'error'))\r\n\r\n  // auth\r\n  if (this.options.properties) {\r\n    if (!this.options.properties.authenticationMethod && this.options.properties.authenticationData) {\r\n      that.end(() =>\r\n        this.emit('error', new Error('Packet has no Authentication Method')\r\n        ))\r\n      return this\r\n    }\r\n    if (this.options.properties.authenticationMethod && this.options.authPacket && typeof this.options.authPacket === 'object') {\r\n      var authPacket = xtend({cmd: 'auth', reasonCode: 0}, this.options.authPacket)\r\n      sendPacket(this, authPacket)\r\n    }\r\n  }\r\n\r\n  // many drain listeners are needed for qos 1 callbacks if the connection is intermittent\r\n  this.stream.setMaxListeners(1000)\r\n\r\n  clearTimeout(this.connackTimer)\r\n  this.connackTimer = setTimeout(function () {\r\n    debug('!!connectTimeout hit!! Calling _cleanUp with force `true`')\r\n    that._cleanUp(true)\r\n  }, this.options.connectTimeout)\r\n}\r\n\r\nMqttClient.prototype._handlePacket = function (packet, done) {\r\n  var options = this.options\r\n\r\n  if (options.protocolVersion === 5 && options.properties && options.properties.maximumPacketSize && options.properties.maximumPacketSize < packet.length) {\r\n    this.emit('error', new Error('exceeding packets size ' + packet.cmd))\r\n    this.end({reasonCode: 149, properties: { reasonString: 'Maximum packet size was exceeded' }})\r\n    return this\r\n  }\r\n  debug('_handlePacket :: emitting packetreceive')\r\n  this.emit('packetreceive', packet)\r\n\r\n  switch (packet.cmd) {\r\n    case 'publish':\r\n      this._handlePublish(packet, done)\r\n      break\r\n    case 'puback':\r\n    case 'pubrec':\r\n    case 'pubcomp':\r\n    case 'suback':\r\n    case 'unsuback':\r\n      this._handleAck(packet)\r\n      done()\r\n      break\r\n    case 'pubrel':\r\n      this._handlePubrel(packet, done)\r\n      break\r\n    case 'connack':\r\n      this._handleConnack(packet)\r\n      done()\r\n      break\r\n    case 'pingresp':\r\n      this._handlePingresp(packet)\r\n      done()\r\n      break\r\n    case 'disconnect':\r\n      this._handleDisconnect(packet)\r\n      done()\r\n      break\r\n    default:\r\n      // do nothing\r\n      // maybe we should do an error handling\r\n      // or just log it\r\n      break\r\n  }\r\n}\r\n\r\nMqttClient.prototype._checkDisconnecting = function (callback) {\r\n  if (this.disconnecting) {\r\n    if (callback) {\r\n      callback(new Error('client disconnecting'))\r\n    } else {\r\n      this.emit('error', new Error('client disconnecting'))\r\n    }\r\n  }\r\n  return this.disconnecting\r\n}\r\n\r\n/**\r\n * publish - publish <message> to <topic>\r\n *\r\n * @param {String} topic - topic to publish to\r\n * @param {String, Buffer} message - message to publish\r\n * @param {Object} [opts] - publish options, includes:\r\n *    {Number} qos - qos level to publish on\r\n *    {Boolean} retain - whether or not to retain the message\r\n *    {Boolean} dup - whether or not mark a message as duplicate\r\n *    {Function} cbStorePut - function(){} called when message is put into `outgoingStore`\r\n * @param {Function} [callback] - function(err){}\r\n *    called when publish succeeds or fails\r\n * @returns {MqttClient} this - for chaining\r\n * @api public\r\n *\r\n * @example client.publish('topic', 'message');\r\n * @example\r\n *     client.publish('topic', 'message', {qos: 1, retain: true, dup: true});\r\n * @example client.publish('topic', 'message', console.log);\r\n */\r\nMqttClient.prototype.publish = function (topic, message, opts, callback) {\r\n  debug('publish :: message `%s` to topic `%s`', message, topic)\r\n  var packet\r\n  var options = this.options\r\n\r\n  // .publish(topic, payload, cb);\r\n  if (typeof opts === 'function') {\r\n    callback = opts\r\n    opts = null\r\n  }\r\n\r\n  // default opts\r\n  var defaultOpts = {qos: 0, retain: false, dup: false}\r\n  opts = xtend(defaultOpts, opts)\r\n\r\n  if (this._checkDisconnecting(callback)) {\r\n    return this\r\n  }\r\n\r\n  packet = {\r\n    cmd: 'publish',\r\n    topic: topic,\r\n    payload: message,\r\n    qos: opts.qos,\r\n    retain: opts.retain,\r\n    messageId: this._nextId(),\r\n    dup: opts.dup\r\n  }\r\n\r\n  if (options.protocolVersion === 5) {\r\n    packet.properties = opts.properties\r\n    if ((!options.properties && packet.properties && packet.properties.topicAlias) || ((opts.properties && options.properties) &&\r\n      ((opts.properties.topicAlias && options.properties.topicAliasMaximum && opts.properties.topicAlias > options.properties.topicAliasMaximum) ||\r\n        (!options.properties.topicAliasMaximum && opts.properties.topicAlias)))) {\r\n      /*\r\n      if we are don`t setup topic alias or\r\n      topic alias maximum less than topic alias or\r\n      server don`t give topic alias maximum,\r\n      we are removing topic alias from packet\r\n      */\r\n      delete packet.properties.topicAlias\r\n    }\r\n  }\r\n\r\n  debug('publish :: qos', opts.qos)\r\n  switch (opts.qos) {\r\n    case 1:\r\n    case 2:\r\n      // Add to callbacks\r\n      this.outgoing[packet.messageId] = {\r\n        volatile: false,\r\n        cb: callback || nop\r\n      }\r\n      if (this._storeProcessing) {\r\n        debug('_storeProcessing enabled')\r\n        this._packetIdsDuringStoreProcessing[packet.messageId] = false\r\n        this._storePacket(packet, undefined, opts.cbStorePut)\r\n      } else {\r\n        debug('MqttClient:publish: packet cmd: %s', packet.cmd)\r\n        this._sendPacket(packet, undefined, opts.cbStorePut)\r\n      }\r\n      break\r\n    default:\r\n      if (this._storeProcessing) {\r\n        debug('_storeProcessing enabled')\r\n        this._storePacket(packet, callback, opts.cbStorePut)\r\n      } else {\r\n        debug('MqttClient:publish: packet cmd: %s', packet.cmd)\r\n        this._sendPacket(packet, callback, opts.cbStorePut)\r\n      }\r\n      break\r\n  }\r\n\r\n  return this\r\n}\r\n\r\n/**\r\n * subscribe - subscribe to <topic>\r\n *\r\n * @param {String, Array, Object} topic - topic(s) to subscribe to, supports objects in the form {'topic': qos}\r\n * @param {Object} [opts] - optional subscription options, includes:\r\n *    {Number} qos - subscribe qos level\r\n * @param {Function} [callback] - function(err, granted){} where:\r\n *    {Error} err - subscription error (none at the moment!)\r\n *    {Array} granted - array of {topic: 't', qos: 0}\r\n * @returns {MqttClient} this - for chaining\r\n * @api public\r\n * @example client.subscribe('topic');\r\n * @example client.subscribe('topic', {qos: 1});\r\n * @example client.subscribe({'topic': {qos: 0}, 'topic2': {qos: 1}}, console.log);\r\n * @example client.subscribe('topic', console.log);\r\n */\r\nMqttClient.prototype.subscribe = function () {\r\n  var packet\r\n  var args = new Array(arguments.length)\r\n  for (var i = 0; i < arguments.length; i++) {\r\n    args[i] = arguments[i]\r\n  }\r\n  var subs = []\r\n  var obj = args.shift()\r\n  var resubscribe = obj.resubscribe\r\n  var callback = args.pop() || nop\r\n  var opts = args.pop()\r\n  var invalidTopic\r\n  var that = this\r\n  var version = this.options.protocolVersion\r\n\r\n  delete obj.resubscribe\r\n\r\n  if (typeof obj === 'string') {\r\n    obj = [obj]\r\n  }\r\n\r\n  if (typeof callback !== 'function') {\r\n    opts = callback\r\n    callback = nop\r\n  }\r\n\r\n  invalidTopic = validations.validateTopics(obj)\r\n  if (invalidTopic !== null) {\r\n    setImmediate(callback, new Error('Invalid topic ' + invalidTopic))\r\n    return this\r\n  }\r\n\r\n  if (this._checkDisconnecting(callback)) {\r\n    debug('subscribe: discconecting true')\r\n    return this\r\n  }\r\n\r\n  var defaultOpts = {\r\n    qos: 0\r\n  }\r\n  if (version === 5) {\r\n    defaultOpts.nl = false\r\n    defaultOpts.rap = false\r\n    defaultOpts.rh = 0\r\n  }\r\n  opts = xtend(defaultOpts, opts)\r\n\r\n  if (Array.isArray(obj)) {\r\n    obj.forEach(function (topic) {\r\n      debug('subscribe: array topic %s', topic)\r\n      if (!that._resubscribeTopics.hasOwnProperty(topic) ||\r\n        that._resubscribeTopics[topic].qos < opts.qos ||\r\n          resubscribe) {\r\n        var currentOpts = {\r\n          topic: topic,\r\n          qos: opts.qos\r\n        }\r\n        if (version === 5) {\r\n          currentOpts.nl = opts.nl\r\n          currentOpts.rap = opts.rap\r\n          currentOpts.rh = opts.rh\r\n          currentOpts.properties = opts.properties\r\n        }\r\n        debug('subscribe: pushing topic `%s` and qos `%s` to subs list', currentOpts.topic, currentOpts.qos)\r\n        subs.push(currentOpts)\r\n      }\r\n    })\r\n  } else {\r\n    Object\r\n      .keys(obj)\r\n      .forEach(function (k) {\r\n        debug('subscribe: object topic %s', k)\r\n        if (!that._resubscribeTopics.hasOwnProperty(k) ||\r\n          that._resubscribeTopics[k].qos < obj[k].qos ||\r\n            resubscribe) {\r\n          var currentOpts = {\r\n            topic: k,\r\n            qos: obj[k].qos\r\n          }\r\n          if (version === 5) {\r\n            currentOpts.nl = obj[k].nl\r\n            currentOpts.rap = obj[k].rap\r\n            currentOpts.rh = obj[k].rh\r\n            currentOpts.properties = opts.properties\r\n          }\r\n          debug('subscribe: pushing `%s` to subs list', currentOpts)\r\n          subs.push(currentOpts)\r\n        }\r\n      })\r\n  }\r\n\r\n  packet = {\r\n    cmd: 'subscribe',\r\n    subscriptions: subs,\r\n    qos: 1,\r\n    retain: false,\r\n    dup: false,\r\n    messageId: this._nextId()\r\n  }\r\n\r\n  if (opts.properties) {\r\n    packet.properties = opts.properties\r\n  }\r\n\r\n  if (!subs.length) {\r\n    callback(null, [])\r\n    return\r\n  }\r\n\r\n  // subscriptions to resubscribe to in case of disconnect\r\n  if (this.options.resubscribe) {\r\n    debug('subscribe :: resubscribe true')\r\n    var topics = []\r\n    subs.forEach(function (sub) {\r\n      if (that.options.reconnectPeriod > 0) {\r\n        var topic = { qos: sub.qos }\r\n        if (version === 5) {\r\n          topic.nl = sub.nl || false\r\n          topic.rap = sub.rap || false\r\n          topic.rh = sub.rh || 0\r\n          topic.properties = sub.properties\r\n        }\r\n        that._resubscribeTopics[sub.topic] = topic\r\n        topics.push(sub.topic)\r\n      }\r\n    })\r\n    that.messageIdToTopic[packet.messageId] = topics\r\n  }\r\n\r\n  this.outgoing[packet.messageId] = {\r\n    volatile: true,\r\n    cb: function (err, packet) {\r\n      if (!err) {\r\n        var granted = packet.granted\r\n        for (var i = 0; i < granted.length; i += 1) {\r\n          subs[i].qos = granted[i]\r\n        }\r\n      }\r\n\r\n      callback(err, subs)\r\n    }\r\n  }\r\n  debug('subscribe :: call _sendPacket')\r\n  this._sendPacket(packet)\r\n\r\n  return this\r\n}\r\n\r\n/**\r\n * unsubscribe - unsubscribe from topic(s)\r\n *\r\n * @param {String, Array} topic - topics to unsubscribe from\r\n * @param {Object} [opts] - optional subscription options, includes:\r\n *    {Object} properties - properties of unsubscribe packet\r\n * @param {Function} [callback] - callback fired on unsuback\r\n * @returns {MqttClient} this - for chaining\r\n * @api public\r\n * @example client.unsubscribe('topic');\r\n * @example client.unsubscribe('topic', console.log);\r\n */\r\nMqttClient.prototype.unsubscribe = function () {\r\n  var packet = {\r\n    cmd: 'unsubscribe',\r\n    qos: 1,\r\n    messageId: this._nextId()\r\n  }\r\n  var that = this\r\n  var args = new Array(arguments.length)\r\n  for (var i = 0; i < arguments.length; i++) {\r\n    args[i] = arguments[i]\r\n  }\r\n  var topic = args.shift()\r\n  var callback = args.pop() || nop\r\n  var opts = args.pop()\r\n\r\n  if (typeof topic === 'string') {\r\n    topic = [topic]\r\n  }\r\n\r\n  if (typeof callback !== 'function') {\r\n    opts = callback\r\n    callback = nop\r\n  }\r\n\r\n  if (this._checkDisconnecting(callback)) {\r\n    return this\r\n  }\r\n\r\n  if (typeof topic === 'string') {\r\n    packet.unsubscriptions = [topic]\r\n  } else if (Array.isArray(topic)) {\r\n    packet.unsubscriptions = topic\r\n  }\r\n\r\n  if (this.options.resubscribe) {\r\n    packet.unsubscriptions.forEach(function (topic) {\r\n      delete that._resubscribeTopics[topic]\r\n    })\r\n  }\r\n\r\n  if (typeof opts === 'object' && opts.properties) {\r\n    packet.properties = opts.properties\r\n  }\r\n\r\n  this.outgoing[packet.messageId] = {\r\n    volatile: true,\r\n    cb: callback\r\n  }\r\n\r\n  debug('unsubscribe: call _sendPacket')\r\n  this._sendPacket(packet)\r\n\r\n  return this\r\n}\r\n\r\n/**\r\n * end - close connection\r\n *\r\n * @returns {MqttClient} this - for chaining\r\n * @param {Boolean} force - do not wait for all in-flight messages to be acked\r\n * @param {Object} opts - added to the disconnect packet\r\n * @param {Function} cb - called when the client has been closed\r\n *\r\n * @api public\r\n */\r\nMqttClient.prototype.end = function (force, opts, cb) {\r\n  var that = this\r\n\r\n  debug('end :: (%s)', this.options.clientId)\r\n\r\n  if (force == null || typeof force !== 'boolean') {\r\n    cb = opts || nop\r\n    opts = force\r\n    force = false\r\n    if (typeof opts !== 'object') {\r\n      cb = opts\r\n      opts = null\r\n      if (typeof cb !== 'function') {\r\n        cb = nop\r\n      }\r\n    }\r\n  }\r\n\r\n  if (typeof opts !== 'object') {\r\n    cb = opts\r\n    opts = null\r\n  }\r\n\r\n  debug('end :: cb? %s', !!cb)\r\n  cb = cb || nop\r\n\r\n  function closeStores () {\r\n    debug('end :: closeStores: closing incoming and outgoing stores')\r\n    that.disconnected = true\r\n    that.incomingStore.close(function (e1) {\r\n      that.outgoingStore.close(function (e2) {\r\n        debug('end :: closeStores: emitting end')\r\n        that.emit('end')\r\n        if (cb) {\r\n          let err = e1 || e2\r\n          debug('end :: closeStores: invoking callback with args')\r\n          cb(err)\r\n        }\r\n      })\r\n    })\r\n    if (that._deferredReconnect) {\r\n      that._deferredReconnect()\r\n    }\r\n  }\r\n\r\n  function finish () {\r\n    // defer closesStores of an I/O cycle,\r\n    // just to make sure things are\r\n    // ok for websockets\r\n    debug('end :: (%s) :: finish :: calling _cleanUp with force %s', that.options.clientId, force)\r\n    that._cleanUp(force, () => {\r\n      debug('end :: finish :: calling process.nextTick on closeStores')\r\n      // var boundProcess = nextTick.bind(null, closeStores)\r\n      nextTick(closeStores.bind(that))\r\n    }, opts)\r\n  }\r\n\r\n  if (this.disconnecting) {\r\n    cb()\r\n    return this\r\n  }\r\n\r\n  this._clearReconnect()\r\n\r\n  this.disconnecting = true\r\n\r\n  if (!force && Object.keys(this.outgoing).length > 0) {\r\n    // wait 10ms, just to be sure we received all of it\r\n    debug('end :: (%s) :: calling finish in 10ms once outgoing is empty', that.options.clientId)\r\n    this.once('outgoingEmpty', setTimeout.bind(null, finish, 10))\r\n  } else {\r\n    debug('end :: (%s) :: immediately calling finish', that.options.clientId)\r\n    finish()\r\n  }\r\n\r\n  return this\r\n}\r\n\r\n/**\r\n * removeOutgoingMessage - remove a message in outgoing store\r\n * the outgoing callback will be called withe Error('Message removed') if the message is removed\r\n *\r\n * @param {Number} messageId - messageId to remove message\r\n * @returns {MqttClient} this - for chaining\r\n * @api public\r\n *\r\n * @example client.removeOutgoingMessage(client.getLastMessageId());\r\n */\r\nMqttClient.prototype.removeOutgoingMessage = function (messageId) {\r\n  var cb = this.outgoing[messageId] ? this.outgoing[messageId].cb : null\r\n  delete this.outgoing[messageId]\r\n  this.outgoingStore.del({messageId: messageId}, function () {\r\n    cb(new Error('Message removed'))\r\n  })\r\n  return this\r\n}\r\n\r\n/**\r\n * reconnect - connect again using the same options as connect()\r\n *\r\n * @param {Object} [opts] - optional reconnect options, includes:\r\n *    {Store} incomingStore - a store for the incoming packets\r\n *    {Store} outgoingStore - a store for the outgoing packets\r\n *    if opts is not given, current stores are used\r\n * @returns {MqttClient} this - for chaining\r\n *\r\n * @api public\r\n */\r\nMqttClient.prototype.reconnect = function (opts) {\r\n  debug('client reconnect')\r\n  var that = this\r\n  var f = function () {\r\n    if (opts) {\r\n      that.options.incomingStore = opts.incomingStore\r\n      that.options.outgoingStore = opts.outgoingStore\r\n    } else {\r\n      that.options.incomingStore = null\r\n      that.options.outgoingStore = null\r\n    }\r\n    that.incomingStore = that.options.incomingStore || new Store()\r\n    that.outgoingStore = that.options.outgoingStore || new Store()\r\n    that.disconnecting = false\r\n    that.disconnected = false\r\n    that._deferredReconnect = null\r\n    that._reconnect()\r\n  }\r\n\r\n  if (this.disconnecting && !this.disconnected) {\r\n    this._deferredReconnect = f\r\n  } else {\r\n    f()\r\n  }\r\n  return this\r\n}\r\n\r\n/**\r\n * _reconnect - implement reconnection\r\n * @api privateish\r\n */\r\nMqttClient.prototype._reconnect = function () {\r\n  debug('_reconnect: emitting reconnect to client')\r\n  this.emit('reconnect')\r\n  if (this.connected) {\r\n    this.end(() => { this._setupStream() })\r\n    debug('client already connected. disconnecting first.')\r\n  } else {\r\n    debug('_reconnect: calling _setupStream')\r\n    this._setupStream()\r\n  }\r\n}\r\n\r\n/**\r\n * _setupReconnect - setup reconnect timer\r\n */\r\nMqttClient.prototype._setupReconnect = function () {\r\n  var that = this\r\n\r\n  if (!that.disconnecting && !that.reconnectTimer && (that.options.reconnectPeriod > 0)) {\r\n    if (!this.reconnecting) {\r\n      debug('_setupReconnect :: emit `offline` state')\r\n      this.emit('offline')\r\n      debug('_setupReconnect :: set `reconnecting` to `true`')\r\n      this.reconnecting = true\r\n    }\r\n    debug('_setupReconnect :: setting reconnectTimer for %d ms', that.options.reconnectPeriod)\r\n    that.reconnectTimer = setInterval(function () {\r\n      debug('reconnectTimer :: reconnect triggered!')\r\n      that._reconnect()\r\n    }, that.options.reconnectPeriod)\r\n  } else {\r\n    debug('_setupReconnect :: doing nothing...')\r\n  }\r\n}\r\n\r\n/**\r\n * _clearReconnect - clear the reconnect timer\r\n */\r\nMqttClient.prototype._clearReconnect = function () {\r\n  debug('_clearReconnect : clearing reconnect timer')\r\n  if (this.reconnectTimer) {\r\n    clearInterval(this.reconnectTimer)\r\n    this.reconnectTimer = null\r\n  }\r\n}\r\n\r\n/**\r\n * _cleanUp - clean up on connection end\r\n * @api private\r\n */\r\nMqttClient.prototype._cleanUp = function (forced, done) {\r\n  var opts = arguments[2]\r\n  if (done) {\r\n    debug('_cleanUp :: done callback provided for on stream close')\r\n    this.stream.on('close', done)\r\n  }\r\n\r\n  debug('_cleanUp :: forced? %s', forced)\r\n  if (forced) {\r\n    if ((this.options.reconnectPeriod === 0) && this.options.clean) {\r\n      flush(this.outgoing)\r\n    }\r\n    debug('_cleanUp :: (%s) :: destroying stream', this.options.clientId)\r\n    this.stream.destroy()\r\n  } else {\r\n    var packet = xtend({ cmd: 'disconnect' }, opts)\r\n    debug('_cleanUp :: (%s) :: call _sendPacket with disconnect packet', this.options.clientId)\r\n    this._sendPacket(\r\n      packet,\r\n      setImmediate.bind(\r\n        null,\r\n        this.stream.end.bind(this.stream)\r\n      )\r\n    )\r\n  }\r\n\r\n  if (!this.disconnecting) {\r\n    debug('_cleanUp :: client not disconnecting. Clearing and resetting reconnect.')\r\n    this._clearReconnect()\r\n    this._setupReconnect()\r\n  }\r\n\r\n  if (this.pingTimer !== null) {\r\n    debug('_cleanUp :: clearing pingTimer')\r\n    this.pingTimer.clear()\r\n    this.pingTimer = null\r\n  }\r\n\r\n  if (done && !this.connected) {\r\n    debug('_cleanUp :: (%s) :: removing stream `done` callback `close` listener', this.options.clientId)\r\n    this.stream.removeListener('close', done)\r\n    done()\r\n  }\r\n}\r\n\r\n/**\r\n * _sendPacket - send or queue a packet\r\n * @param {Object} packet - packet options\r\n * @param {Function} cb - callback when the packet is sent\r\n * @param {Function} cbStorePut - called when message is put into outgoingStore\r\n * @api private\r\n */\r\nMqttClient.prototype._sendPacket = function (packet, cb, cbStorePut) {\r\n  debug('_sendPacket :: (%s) ::  start', this.options.clientId)\r\n  cbStorePut = cbStorePut || nop\r\n\r\n  if (!this.connected) {\r\n    debug('_sendPacket :: client not connected. Storing packet offline.')\r\n    this._storePacket(packet, cb, cbStorePut)\r\n    return\r\n  }\r\n\r\n  // When sending a packet, reschedule the ping timer\r\n  this._shiftPingInterval()\r\n\r\n  switch (packet.cmd) {\r\n    case 'publish':\r\n      break\r\n    case 'pubrel':\r\n      storeAndSend(this, packet, cb, cbStorePut)\r\n      return\r\n    default:\r\n      sendPacket(this, packet, cb)\r\n      return\r\n  }\r\n\r\n  switch (packet.qos) {\r\n    case 2:\r\n    case 1:\r\n      storeAndSend(this, packet, cb, cbStorePut)\r\n      break\r\n    /**\r\n     * no need of case here since it will be caught by default\r\n     * and jshint comply that before default it must be a break\r\n     * anyway it will result in -1 evaluation\r\n     */\r\n    case 0:\r\n      /* falls through */\r\n    default:\r\n      sendPacket(this, packet, cb)\r\n      break\r\n  }\r\n  debug('_sendPacket :: (%s) ::  end', this.options.clientId)\r\n}\r\n\r\n/**\r\n * _storePacket - queue a packet\r\n * @param {Object} packet - packet options\r\n * @param {Function} cb - callback when the packet is sent\r\n * @param {Function} cbStorePut - called when message is put into outgoingStore\r\n * @api private\r\n */\r\nMqttClient.prototype._storePacket = function (packet, cb, cbStorePut) {\r\n  debug('_storePacket :: packet: %o', packet)\r\n  debug('_storePacket :: cb? %s', !!cb)\r\n  cbStorePut = cbStorePut || nop\r\n\r\n  // check that the packet is not a qos of 0, or that the command is not a publish\r\n  if (((packet.qos || 0) === 0 && this.queueQoSZero) || packet.cmd !== 'publish') {\r\n    this.queue.push({ packet: packet, cb: cb })\r\n  } else if (packet.qos > 0) {\r\n    cb = this.outgoing[packet.messageId] ? this.outgoing[packet.messageId].cb : null\r\n    this.outgoingStore.put(packet, function (err) {\r\n      if (err) {\r\n        return cb && cb(err)\r\n      }\r\n      cbStorePut()\r\n    })\r\n  } else if (cb) {\r\n    cb(new Error('No connection to broker'))\r\n  }\r\n}\r\n\r\n/**\r\n * _setupPingTimer - setup the ping timer\r\n *\r\n * @api private\r\n */\r\nMqttClient.prototype._setupPingTimer = function () {\r\n  debug('_setupPingTimer :: keepalive %d (seconds)', this.options.keepalive)\r\n  var that = this\r\n\r\n  if (!this.pingTimer && this.options.keepalive) {\r\n    this.pingResp = true\r\n    this.pingTimer = reInterval(function () {\r\n      that._checkPing()\r\n    }, this.options.keepalive * 1000)\r\n  }\r\n}\r\n\r\n/**\r\n * _shiftPingInterval - reschedule the ping interval\r\n *\r\n * @api private\r\n */\r\nMqttClient.prototype._shiftPingInterval = function () {\r\n  if (this.pingTimer && this.options.keepalive && this.options.reschedulePings) {\r\n    this.pingTimer.reschedule(this.options.keepalive * 1000)\r\n  }\r\n}\r\n/**\r\n * _checkPing - check if a pingresp has come back, and ping the server again\r\n *\r\n * @api private\r\n */\r\nMqttClient.prototype._checkPing = function () {\r\n  debug('_checkPing :: checking ping...')\r\n  if (this.pingResp) {\r\n    debug('_checkPing :: ping response received. Clearing flag and sending `pingreq`')\r\n    this.pingResp = false\r\n    this._sendPacket({ cmd: 'pingreq' })\r\n  } else {\r\n    // do a forced cleanup since socket will be in bad shape\r\n    debug('_checkPing :: calling _cleanUp with force true')\r\n    this._cleanUp(true)\r\n  }\r\n}\r\n\r\n/**\r\n * _handlePingresp - handle a pingresp\r\n *\r\n * @api private\r\n */\r\nMqttClient.prototype._handlePingresp = function () {\r\n  this.pingResp = true\r\n}\r\n\r\n/**\r\n * _handleConnack\r\n *\r\n * @param {Object} packet\r\n * @api private\r\n */\r\nMqttClient.prototype._handleConnack = function (packet) {\r\n  debug('_handleConnack')\r\n  var options = this.options\r\n  var version = options.protocolVersion\r\n  var rc = version === 5 ? packet.reasonCode : packet.returnCode\r\n\r\n  clearTimeout(this.connackTimer)\r\n\r\n  if (packet.properties) {\r\n    if (packet.properties.topicAliasMaximum) {\r\n      if (!options.properties) { options.properties = {} }\r\n      options.properties.topicAliasMaximum = packet.properties.topicAliasMaximum\r\n    }\r\n    if (packet.properties.serverKeepAlive && options.keepalive) {\r\n      options.keepalive = packet.properties.serverKeepAlive\r\n      this._shiftPingInterval()\r\n    }\r\n    if (packet.properties.maximumPacketSize) {\r\n      if (!options.properties) { options.properties = {} }\r\n      options.properties.maximumPacketSize = packet.properties.maximumPacketSize\r\n    }\r\n  }\r\n\r\n  if (rc === 0) {\r\n    this.reconnecting = false\r\n    this._onConnect(packet)\r\n  } else if (rc > 0) {\r\n    var err = new Error('Connection refused: ' + errors[rc])\r\n    err.code = rc\r\n    this.emit('error', err)\r\n  }\r\n}\r\n\r\n/**\r\n * _handlePublish\r\n *\r\n * @param {Object} packet\r\n * @api private\r\n */\r\n/*\r\nthose late 2 case should be rewrite to comply with coding style:\r\n\r\ncase 1:\r\ncase 0:\r\n  // do not wait sending a puback\r\n  // no callback passed\r\n  if (1 === qos) {\r\n    this._sendPacket({\r\n      cmd: 'puback',\r\n      messageId: messageId\r\n    });\r\n  }\r\n  // emit the message event for both qos 1 and 0\r\n  this.emit('message', topic, message, packet);\r\n  this.handleMessage(packet, done);\r\n  break;\r\ndefault:\r\n  // do nothing but every switch mus have a default\r\n  // log or throw an error about unknown qos\r\n  break;\r\n\r\nfor now i just suppressed the warnings\r\n*/\r\nMqttClient.prototype._handlePublish = function (packet, done) {\r\n  debug('_handlePublish: packet %o', packet)\r\n  done = typeof done !== 'undefined' ? done : nop\r\n  var topic = packet.topic.toString()\r\n  var message = packet.payload\r\n  var qos = packet.qos\r\n  var messageId = packet.messageId\r\n  var that = this\r\n  var options = this.options\r\n  var validReasonCodes = [0, 16, 128, 131, 135, 144, 145, 151, 153]\r\n  debug('_handlePublish: qos %d', qos)\r\n  switch (qos) {\r\n    case 2: {\r\n      options.customHandleAcks(topic, message, packet, function (error, code) {\r\n        if (!(error instanceof Error)) {\r\n          code = error\r\n          error = null\r\n        }\r\n        if (error) { return that.emit('error', error) }\r\n        if (validReasonCodes.indexOf(code) === -1) { return that.emit('error', new Error('Wrong reason code for pubrec')) }\r\n        if (code) {\r\n          that._sendPacket({cmd: 'pubrec', messageId: messageId, reasonCode: code}, done)\r\n        } else {\r\n          that.incomingStore.put(packet, function () {\r\n            that._sendPacket({cmd: 'pubrec', messageId: messageId}, done)\r\n          })\r\n        }\r\n      })\r\n      break\r\n    }\r\n    case 1: {\r\n      // emit the message event\r\n      options.customHandleAcks(topic, message, packet, function (error, code) {\r\n        if (!(error instanceof Error)) {\r\n          code = error\r\n          error = null\r\n        }\r\n        if (error) { return that.emit('error', error) }\r\n        if (validReasonCodes.indexOf(code) === -1) { return that.emit('error', new Error('Wrong reason code for puback')) }\r\n        if (!code) { that.emit('message', topic, message, packet) }\r\n        that.handleMessage(packet, function (err) {\r\n          if (err) {\r\n            return done && done(err)\r\n          }\r\n          that._sendPacket({cmd: 'puback', messageId: messageId, reasonCode: code}, done)\r\n        })\r\n      })\r\n      break\r\n    }\r\n    case 0:\r\n      // emit the message event\r\n      this.emit('message', topic, message, packet)\r\n      this.handleMessage(packet, done)\r\n      break\r\n    default:\r\n      // do nothing\r\n      debug('_handlePublish: unknown QoS. Doing nothing.')\r\n      // log or throw an error about unknown qos\r\n      break\r\n  }\r\n}\r\n\r\n/**\r\n * Handle messages with backpressure support, one at a time.\r\n * Override at will.\r\n *\r\n * @param Packet packet the packet\r\n * @param Function callback call when finished\r\n * @api public\r\n */\r\nMqttClient.prototype.handleMessage = function (packet, callback) {\r\n  callback()\r\n}\r\n\r\n/**\r\n * _handleAck\r\n *\r\n * @param {Object} packet\r\n * @api private\r\n */\r\n\r\nMqttClient.prototype._handleAck = function (packet) {\r\n  /* eslint no-fallthrough: \"off\" */\r\n  var messageId = packet.messageId\r\n  var type = packet.cmd\r\n  var response = null\r\n  var cb = this.outgoing[messageId] ? this.outgoing[messageId].cb : null\r\n  var that = this\r\n  var err\r\n\r\n  if (!cb) {\r\n    debug('_handleAck :: Server sent an ack in error. Ignoring.')\r\n    // Server sent an ack in error, ignore it.\r\n    return\r\n  }\r\n\r\n  // Process\r\n  debug('_handleAck :: packet type', type)\r\n  switch (type) {\r\n    case 'pubcomp':\r\n      // same thing as puback for QoS 2\r\n    case 'puback':\r\n      var pubackRC = packet.reasonCode\r\n      // Callback - we're done\r\n      if (pubackRC && pubackRC > 0 && pubackRC !== 16) {\r\n        err = new Error('Publish error: ' + errors[pubackRC])\r\n        err.code = pubackRC\r\n        cb(err, packet)\r\n      }\r\n      delete this.outgoing[messageId]\r\n      this.outgoingStore.del(packet, cb)\r\n      break\r\n    case 'pubrec':\r\n      response = {\r\n        cmd: 'pubrel',\r\n        qos: 2,\r\n        messageId: messageId\r\n      }\r\n      var pubrecRC = packet.reasonCode\r\n\r\n      if (pubrecRC && pubrecRC > 0 && pubrecRC !== 16) {\r\n        err = new Error('Publish error: ' + errors[pubrecRC])\r\n        err.code = pubrecRC\r\n        cb(err, packet)\r\n      } else {\r\n        this._sendPacket(response)\r\n      }\r\n      break\r\n    case 'suback':\r\n      delete this.outgoing[messageId]\r\n      for (var grantedI = 0; grantedI < packet.granted.length; grantedI++) {\r\n        if ((packet.granted[grantedI] & 0x80) !== 0) {\r\n          // suback with Failure status\r\n          var topics = this.messageIdToTopic[messageId]\r\n          if (topics) {\r\n            topics.forEach(function (topic) {\r\n              delete that._resubscribeTopics[topic]\r\n            })\r\n          }\r\n        }\r\n      }\r\n      cb(null, packet)\r\n      break\r\n    case 'unsuback':\r\n      delete this.outgoing[messageId]\r\n      cb(null)\r\n      break\r\n    default:\r\n      that.emit('error', new Error('unrecognized packet type'))\r\n  }\r\n\r\n  if (this.disconnecting &&\r\n      Object.keys(this.outgoing).length === 0) {\r\n    this.emit('outgoingEmpty')\r\n  }\r\n}\r\n\r\n/**\r\n * _handlePubrel\r\n *\r\n * @param {Object} packet\r\n * @api private\r\n */\r\nMqttClient.prototype._handlePubrel = function (packet, callback) {\r\n  debug('handling pubrel packet')\r\n  callback = typeof callback !== 'undefined' ? callback : nop\r\n  var messageId = packet.messageId\r\n  var that = this\r\n\r\n  var comp = {cmd: 'pubcomp', messageId: messageId}\r\n\r\n  that.incomingStore.get(packet, function (err, pub) {\r\n    if (!err) {\r\n      that.emit('message', pub.topic, pub.payload, pub)\r\n      that.handleMessage(pub, function (err) {\r\n        if (err) {\r\n          return callback(err)\r\n        }\r\n        that.incomingStore.del(pub, nop)\r\n        that._sendPacket(comp, callback)\r\n      })\r\n    } else {\r\n      that._sendPacket(comp, callback)\r\n    }\r\n  })\r\n}\r\n\r\n/**\r\n * _handleDisconnect\r\n *\r\n * @param {Object} packet\r\n * @api private\r\n */\r\nMqttClient.prototype._handleDisconnect = function (packet) {\r\n  this.emit('disconnect', packet)\r\n}\r\n\r\n/**\r\n * _nextId\r\n * @return unsigned int\r\n */\r\nMqttClient.prototype._nextId = function () {\r\n  // id becomes current state of this.nextId and increments afterwards\r\n  var id = this.nextId++\r\n  // Ensure 16 bit unsigned int (max 65535, nextId got one higher)\r\n  if (this.nextId === 65536) {\r\n    this.nextId = 1\r\n  }\r\n  return id\r\n}\r\n\r\n/**\r\n * getLastMessageId\r\n * @return unsigned int\r\n */\r\nMqttClient.prototype.getLastMessageId = function () {\r\n  return (this.nextId === 1) ? 65535 : (this.nextId - 1)\r\n}\r\n\r\n/**\r\n * _resubscribe\r\n * @api private\r\n */\r\nMqttClient.prototype._resubscribe = function (connack) {\r\n  debug('_resubscribe')\r\n  var _resubscribeTopicsKeys = Object.keys(this._resubscribeTopics)\r\n  if (!this._firstConnection &&\r\n      (this.options.clean || (this.options.protocolVersion === 5 && !connack.sessionPresent)) &&\r\n      _resubscribeTopicsKeys.length > 0) {\r\n    if (this.options.resubscribe) {\r\n      if (this.options.protocolVersion === 5) {\r\n        debug('_resubscribe: protocolVersion 5')\r\n        for (var topicI = 0; topicI < _resubscribeTopicsKeys.length; topicI++) {\r\n          var resubscribeTopic = {}\r\n          resubscribeTopic[_resubscribeTopicsKeys[topicI]] = this._resubscribeTopics[_resubscribeTopicsKeys[topicI]]\r\n          resubscribeTopic.resubscribe = true\r\n          this.subscribe(resubscribeTopic, {properties: resubscribeTopic[_resubscribeTopicsKeys[topicI]].properties})\r\n        }\r\n      } else {\r\n        this._resubscribeTopics.resubscribe = true\r\n        this.subscribe(this._resubscribeTopics)\r\n      }\r\n    } else {\r\n      this._resubscribeTopics = {}\r\n    }\r\n  }\r\n\r\n  this._firstConnection = false\r\n}\r\n\r\n/**\r\n * _onConnect\r\n *\r\n * @api private\r\n */\r\nMqttClient.prototype._onConnect = function (packet) {\r\n  if (this.disconnected) {\r\n    this.emit('connect', packet)\r\n    return\r\n  }\r\n\r\n  var that = this\r\n\r\n  this._setupPingTimer()\r\n  this._resubscribe(packet)\r\n\r\n  this.connected = true\r\n\r\n  function startStreamProcess () {\r\n    var outStore = that.outgoingStore.createStream()\r\n\r\n    function clearStoreProcessing () {\r\n      that._storeProcessing = false\r\n      that._packetIdsDuringStoreProcessing = {}\r\n    }\r\n\r\n    that.once('close', remove)\r\n    outStore.on('error', function (err) {\r\n      clearStoreProcessing()\r\n      that.removeListener('close', remove)\r\n      that.emit('error', err)\r\n    })\r\n\r\n    function remove () {\r\n      outStore.destroy()\r\n      outStore = null\r\n      clearStoreProcessing()\r\n    }\r\n\r\n    function storeDeliver () {\r\n      // edge case, we wrapped this twice\r\n      if (!outStore) {\r\n        return\r\n      }\r\n      that._storeProcessing = true\r\n\r\n      var packet = outStore.read(1)\r\n\r\n      var cb\r\n\r\n      if (!packet) {\r\n        // read when data is available in the future\r\n        outStore.once('readable', storeDeliver)\r\n        return\r\n      }\r\n\r\n      // Skip already processed store packets\r\n      if (that._packetIdsDuringStoreProcessing[packet.messageId]) {\r\n        storeDeliver()\r\n        return\r\n      }\r\n\r\n      // Avoid unnecessary stream read operations when disconnected\r\n      if (!that.disconnecting && !that.reconnectTimer) {\r\n        cb = that.outgoing[packet.messageId] ? that.outgoing[packet.messageId].cb : null\r\n        that.outgoing[packet.messageId] = {\r\n          volatile: false,\r\n          cb: function (err, status) {\r\n            // Ensure that the original callback passed in to publish gets invoked\r\n            if (cb) {\r\n              cb(err, status)\r\n            }\r\n\r\n            storeDeliver()\r\n          }\r\n        }\r\n        that._packetIdsDuringStoreProcessing[packet.messageId] = true\r\n        that._sendPacket(packet)\r\n      } else if (outStore.destroy) {\r\n        outStore.destroy()\r\n      }\r\n    }\r\n\r\n    outStore.on('end', function () {\r\n      var allProcessed = true\r\n      for (var id in that._packetIdsDuringStoreProcessing) {\r\n        if (!that._packetIdsDuringStoreProcessing[id]) {\r\n          allProcessed = false\r\n          break\r\n        }\r\n      }\r\n      if (allProcessed) {\r\n        clearStoreProcessing()\r\n        that.removeListener('close', remove)\r\n        that.emit('connect', packet)\r\n      } else {\r\n        startStreamProcess()\r\n      }\r\n    })\r\n    storeDeliver()\r\n  }\r\n  // start flowing\r\n  startStreamProcess()\r\n}\r\n\r\nmodule.exports = MqttClient\r\n\n}).call(this)}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./store\":7,\"./validations\":8,\"_process\":32,\"debug\":15,\"events\":19,\"inherits\":21,\"mqtt-packet\":24,\"readable-stream\":51,\"reinterval\":52,\"xtend\":61}],2:[function(require,module,exports){\n(function (Buffer){(function (){\n'use strict'\r\n\r\nvar Transform = require('readable-stream').Transform\r\nvar duplexify = require('duplexify')\r\n\r\n/* global FileReader */\r\nvar my\r\nvar proxy\r\nvar stream\r\nvar isInitialized = false\r\n\r\nfunction buildProxy () {\r\n  var proxy = new Transform()\r\n  proxy._write = function (chunk, encoding, next) {\r\n    my.sendSocketMessage({\r\n      data: chunk.buffer,\r\n      success: function () {\r\n        next()\r\n      },\r\n      fail: function () {\r\n        next(new Error())\r\n      }\r\n    })\r\n  }\r\n  proxy._flush = function socketEnd (done) {\r\n    my.closeSocket({\r\n      success: function () {\r\n        done()\r\n      }\r\n    })\r\n  }\r\n\r\n  return proxy\r\n}\r\n\r\nfunction setDefaultOpts (opts) {\r\n  if (!opts.hostname) {\r\n    opts.hostname = 'localhost'\r\n  }\r\n  if (!opts.path) {\r\n    opts.path = '/'\r\n  }\r\n\r\n  if (!opts.wsOptions) {\r\n    opts.wsOptions = {}\r\n  }\r\n}\r\n\r\nfunction buildUrl (opts, client) {\r\n  var protocol = opts.protocol === 'alis' ? 'wss' : 'ws'\r\n  var url = protocol + '://' + opts.hostname + opts.path\r\n  if (opts.port && opts.port !== 80 && opts.port !== 443) {\r\n    url = protocol + '://' + opts.hostname + ':' + opts.port + opts.path\r\n  }\r\n  if (typeof (opts.transformWsUrl) === 'function') {\r\n    url = opts.transformWsUrl(url, opts, client)\r\n  }\r\n  return url\r\n}\r\n\r\nfunction bindEventHandler () {\r\n  if (isInitialized) return\r\n\r\n  isInitialized = true\r\n\r\n  my.onSocketOpen(function () {\r\n    stream.setReadable(proxy)\r\n    stream.setWritable(proxy)\r\n    stream.emit('connect')\r\n  })\r\n\r\n  my.onSocketMessage(function (res) {\r\n    if (typeof res.data === 'string') {\r\n      var buffer = Buffer.from(res.data, 'base64')\r\n      proxy.push(buffer)\r\n    } else {\r\n      var reader = new FileReader()\r\n      reader.addEventListener('load', function () {\r\n        var data = reader.result\r\n\r\n        if (data instanceof ArrayBuffer) data = Buffer.from(data)\r\n        else data = Buffer.from(data, 'utf8')\r\n        proxy.push(data)\r\n      })\r\n      reader.readAsArrayBuffer(res.data)\r\n    }\r\n  })\r\n\r\n  my.onSocketClose(function () {\r\n    stream.end()\r\n    stream.destroy()\r\n  })\r\n\r\n  my.onSocketError(function (res) {\r\n    stream.destroy(res)\r\n  })\r\n}\r\n\r\nfunction buildStream (client, opts) {\r\n  opts.hostname = opts.hostname || opts.host\r\n\r\n  if (!opts.hostname) {\r\n    throw new Error('Could not determine host. Specify host manually.')\r\n  }\r\n\r\n  var websocketSubProtocol =\r\n    (opts.protocolId === 'MQIsdp') && (opts.protocolVersion === 3)\r\n      ? 'mqttv3.1'\r\n      : 'mqtt'\r\n\r\n  setDefaultOpts(opts)\r\n\r\n  var url = buildUrl(opts, client)\r\n  my = opts.my\r\n  my.connectSocket({\r\n    url: url,\r\n    protocols: websocketSubProtocol\r\n  })\r\n\r\n  proxy = buildProxy()\r\n  stream = duplexify.obj()\r\n\r\n  bindEventHandler()\r\n\r\n  return stream\r\n}\r\n\r\nmodule.exports = buildStream\r\n\n}).call(this)}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":14,\"duplexify\":17,\"readable-stream\":51}],3:[function(require,module,exports){\n'use strict'\r\nvar net = require('net')\r\nvar debug = require('debug')('mqttjs:tcp')\r\n\r\n/*\r\n  variables port and host can be removed since\r\n  you have all required information in opts object\r\n*/\r\nfunction streamBuilder (client, opts) {\r\n  var port, host\r\n  opts.port = opts.port || 1883\r\n  opts.hostname = opts.hostname || opts.host || 'localhost'\r\n\r\n  port = opts.port\r\n  host = opts.hostname\r\n\r\n  debug('port %d and host %s', port, host)\r\n  return net.createConnection(port, host)\r\n}\r\n\r\nmodule.exports = streamBuilder\r\n\n},{\"debug\":15,\"net\":13}],4:[function(require,module,exports){\n'use strict'\r\nvar tls = require('tls')\r\nvar debug = require('debug')('mqttjs:tls')\r\n\r\nfunction buildBuilder (mqttClient, opts) {\r\n  var connection\r\n  opts.port = opts.port || 8883\r\n  opts.host = opts.hostname || opts.host || 'localhost'\r\n  opts.servername = opts.host\r\n\r\n  opts.rejectUnauthorized = opts.rejectUnauthorized !== false\r\n\r\n  delete opts.path\r\n\r\n  debug('port %d host %s rejectUnauthorized %b', opts.port, opts.host, opts.rejectUnauthorized)\r\n\r\n  connection = tls.connect(opts)\r\n  /* eslint no-use-before-define: [2, \"nofunc\"] */\r\n  connection.on('secureConnect', function () {\r\n    if (opts.rejectUnauthorized && !connection.authorized) {\r\n      connection.emit('error', new Error('TLS not authorized'))\r\n    } else {\r\n      connection.removeListener('error', handleTLSerrors)\r\n    }\r\n  })\r\n\r\n  function handleTLSerrors (err) {\r\n    // How can I get verify this error is a tls error?\r\n    if (opts.rejectUnauthorized) {\r\n      mqttClient.emit('error', err)\r\n    }\r\n\r\n    // close this connection to match the behaviour of net\r\n    // otherwise all we get is an error from the connection\r\n    // and close event doesn't fire. This is a work around\r\n    // to enable the reconnect code to work the same as with\r\n    // net.createConnection\r\n    connection.end()\r\n  }\r\n\r\n  connection.on('error', handleTLSerrors)\r\n  return connection\r\n}\r\n\r\nmodule.exports = buildBuilder\r\n\n},{\"debug\":15,\"tls\":13}],5:[function(require,module,exports){\n(function (process,Buffer){(function (){\n'use strict'\r\n\r\nconst WS = require('ws')\r\nconst debug = require('debug')('mqttjs:ws')\r\nconst duplexify = require('duplexify')\r\nconst Transform = require('readable-stream').Transform\r\n\r\nlet WSS_OPTIONS = [\r\n  'rejectUnauthorized',\r\n  'ca',\r\n  'cert',\r\n  'key',\r\n  'pfx',\r\n  'passphrase'\r\n]\r\n// eslint-disable-next-line camelcase\r\nconst IS_BROWSER = (typeof process !== 'undefined' && process.title === 'browser') || typeof __webpack_require__ === 'function'\r\nfunction buildUrl (opts, client) {\r\n  let url = opts.protocol + '://' + opts.hostname + ':' + opts.port + opts.path\r\n  if (typeof (opts.transformWsUrl) === 'function') {\r\n    url = opts.transformWsUrl(url, opts, client)\r\n  }\r\n  return url\r\n}\r\n\r\nfunction setDefaultOpts (opts) {\r\n  let options = opts\r\n  if (!opts.hostname) {\r\n    options.hostname = 'localhost'\r\n  }\r\n  if (!opts.port) {\r\n    if (opts.protocol === 'wss') {\r\n      options.port = 443\r\n    } else {\r\n      options.port = 80\r\n    }\r\n  }\r\n  if (!opts.path) {\r\n    options.path = '/'\r\n  }\r\n\r\n  if (!opts.wsOptions) {\r\n    options.wsOptions = {}\r\n  }\r\n  if (!IS_BROWSER && opts.protocol === 'wss') {\r\n    // Add cert/key/ca etc options\r\n    WSS_OPTIONS.forEach(function (prop) {\r\n      if (opts.hasOwnProperty(prop) && !opts.wsOptions.hasOwnProperty(prop)) {\r\n        options.wsOptions[prop] = opts[prop]\r\n      }\r\n    })\r\n  }\r\n\r\n  return options\r\n}\r\n\r\nfunction setDefaultBrowserOpts (opts) {\r\n  let options = setDefaultOpts(opts)\r\n\r\n  if (!options.hostname) {\r\n    options.hostname = options.host\r\n  }\r\n\r\n  if (!options.hostname) {\r\n    // Throwing an error in a Web Worker if no `hostname` is given, because we\r\n    // can not determine the `hostname` automatically.  If connecting to\r\n    // localhost, please supply the `hostname` as an argument.\r\n    if (typeof (document) === 'undefined') {\r\n      throw new Error('Could not determine host. Specify host manually.')\r\n    }\r\n    const parsed = new URL(document.URL)\r\n    options.hostname = parsed.hostname\r\n\r\n    if (!options.port) {\r\n      options.port = parsed.port\r\n    }\r\n  }\r\n\r\n  // objectMode should be defined for logic\r\n  if (options.objectMode === undefined) {\r\n    options.objectMode = !(options.binary === true || options.binary === undefined)\r\n  }\r\n\r\n  return options\r\n}\r\n\r\nfunction createWebSocket (client, url, opts) {\r\n  debug('createWebSocket')\r\n  debug('protocol: ' + opts.protocolId + ' ' + opts.protocolVersion)\r\n  const websocketSubProtocol =\r\n    (opts.protocolId === 'MQIsdp') && (opts.protocolVersion === 3)\r\n      ? 'mqttv3.1'\r\n      : 'mqtt'\r\n\r\n  debug('creating new Websocket for url: ' + url + ' and protocol: ' + websocketSubProtocol)\r\n  let socket = new WS(url, [websocketSubProtocol], opts.wsOptions)\r\n  return socket\r\n}\r\n\r\nfunction createBrowserWebSocket (client, opts) {\r\n  const websocketSubProtocol =\r\n  (opts.protocolId === 'MQIsdp') && (opts.protocolVersion === 3)\r\n    ? 'mqttv3.1'\r\n    : 'mqtt'\r\n\r\n  let url = buildUrl(opts, client)\r\n  /* global WebSocket */\r\n  let socket = new WebSocket(url, [websocketSubProtocol])\r\n  socket.binaryType = 'arraybuffer'\r\n  return socket\r\n}\r\n\r\nfunction streamBuilder (client, opts) {\r\n  debug('streamBuilder')\r\n  let options = setDefaultOpts(opts)\r\n  const url = buildUrl(options, client)\r\n  let socket = createWebSocket(client, url, options)\r\n  let webSocketStream = WS.createWebSocketStream(socket, options.wsOptions)\r\n  webSocketStream.url = url\r\n  socket.on('close', () => { webSocketStream.destroy() })\r\n  return webSocketStream\r\n}\r\n\r\nfunction browserStreamBuilder (client, opts) {\r\n  debug('browserStreamBuilder')\r\n  let stream\r\n  let options = setDefaultBrowserOpts(opts)\r\n  // sets the maximum socket buffer size before throttling\r\n  const bufferSize = options.browserBufferSize || 1024 * 512\r\n\r\n  const bufferTimeout = opts.browserBufferTimeout || 1000\r\n\r\n  const coerceToBuffer = !opts.objectMode\r\n\r\n  let socket = createBrowserWebSocket(client, opts)\r\n\r\n  let proxy = buildProxy(opts, socketWriteBrowser, socketEndBrowser)\r\n\r\n  if (!opts.objectMode) {\r\n    proxy._writev = writev\r\n  }\r\n  proxy.on('close', () => { socket.close() })\r\n\r\n  const eventListenerSupport = (typeof socket.addEventListener !== 'undefined')\r\n\r\n  // was already open when passed in\r\n  if (socket.readyState === socket.OPEN) {\r\n    stream = proxy\r\n  } else {\r\n    stream = stream = duplexify(undefined, undefined, opts)\r\n    if (!opts.objectMode) {\r\n      stream._writev = writev\r\n    }\r\n\r\n    if (eventListenerSupport) {\r\n      socket.addEventListener('open', onopen)\r\n    } else {\r\n      socket.onopen = onopen\r\n    }\r\n  }\r\n\r\n  stream.socket = socket\r\n\r\n  if (eventListenerSupport) {\r\n    socket.addEventListener('close', onclose)\r\n    socket.addEventListener('error', onerror)\r\n    socket.addEventListener('message', onmessage)\r\n  } else {\r\n    socket.onclose = onclose\r\n    socket.onerror = onerror\r\n    socket.onmessage = onmessage\r\n  }\r\n\r\n  // methods for browserStreamBuilder\r\n\r\n  function buildProxy (options, socketWrite, socketEnd) {\r\n    let proxy = new Transform({\r\n      objectModeMode: options.objectMode\r\n    })\r\n\r\n    proxy._write = socketWrite\r\n    proxy._flush = socketEnd\r\n\r\n    return proxy\r\n  }\r\n\r\n  function onopen () {\r\n    stream.setReadable(proxy)\r\n    stream.setWritable(proxy)\r\n    stream.emit('connect')\r\n  }\r\n\r\n  function onclose () {\r\n    stream.end()\r\n    stream.destroy()\r\n  }\r\n\r\n  function onerror (err) {\r\n    stream.destroy(err)\r\n  }\r\n\r\n  function onmessage (event) {\r\n    let data = event.data\r\n    if (data instanceof ArrayBuffer) data = Buffer.from(data)\r\n    else data = Buffer.from(data, 'utf8')\r\n    proxy.push(data)\r\n  }\r\n\r\n  // this is to be enabled only if objectMode is false\r\n  function writev (chunks, cb) {\r\n    const buffers = new Array(chunks.length)\r\n    for (let i = 0; i < chunks.length; i++) {\r\n      if (typeof chunks[i].chunk === 'string') {\r\n        buffers[i] = Buffer.from(chunks[i], 'utf8')\r\n      } else {\r\n        buffers[i] = chunks[i].chunk\r\n      }\r\n    }\r\n\r\n    this._write(Buffer.concat(buffers), 'binary', cb)\r\n  }\r\n\r\n  function socketWriteBrowser (chunk, enc, next) {\r\n    if (socket.bufferedAmount > bufferSize) {\r\n      // throttle data until buffered amount is reduced.\r\n      setTimeout(socketWriteBrowser, bufferTimeout, chunk, enc, next)\r\n    }\r\n\r\n    if (coerceToBuffer && typeof chunk === 'string') {\r\n      chunk = Buffer.from(chunk, 'utf8')\r\n    }\r\n\r\n    try {\r\n      socket.send(chunk)\r\n    } catch (err) {\r\n      return next(err)\r\n    }\r\n\r\n    next()\r\n  }\r\n\r\n  function socketEndBrowser (done) {\r\n    socket.close()\r\n    done()\r\n  }\r\n\r\n  // end methods for browserStreamBuilder\r\n\r\n  return stream\r\n}\r\n\r\nif (IS_BROWSER) {\r\n  module.exports = browserStreamBuilder\r\n} else {\r\n  module.exports = streamBuilder\r\n}\r\n\n}).call(this)}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"_process\":32,\"buffer\":14,\"debug\":15,\"duplexify\":17,\"readable-stream\":51,\"ws\":60}],6:[function(require,module,exports){\n(function (Buffer){(function (){\n'use strict'\r\n\r\nvar Transform = require('readable-stream').Transform\r\nvar duplexify = require('duplexify')\r\n\r\n/* global wx */\r\nvar socketTask\r\nvar proxy\r\nvar stream\r\n\r\nfunction buildProxy () {\r\n  var proxy = new Transform()\r\n  proxy._write = function (chunk, encoding, next) {\r\n    socketTask.send({\r\n      data: chunk.buffer,\r\n      success: function () {\r\n        next()\r\n      },\r\n      fail: function (errMsg) {\r\n        next(new Error(errMsg))\r\n      }\r\n    })\r\n  }\r\n  proxy._flush = function socketEnd (done) {\r\n    socketTask.close({\r\n      success: function () {\r\n        done()\r\n      }\r\n    })\r\n  }\r\n\r\n  return proxy\r\n}\r\n\r\nfunction setDefaultOpts (opts) {\r\n  if (!opts.hostname) {\r\n    opts.hostname = 'localhost'\r\n  }\r\n  if (!opts.path) {\r\n    opts.path = '/'\r\n  }\r\n\r\n  if (!opts.wsOptions) {\r\n    opts.wsOptions = {}\r\n  }\r\n}\r\n\r\nfunction buildUrl (opts, client) {\r\n  var protocol = opts.protocol === 'wxs' ? 'wss' : 'ws'\r\n  var url = protocol + '://' + opts.hostname + opts.path\r\n  if (opts.port && opts.port !== 80 && opts.port !== 443) {\r\n    url = protocol + '://' + opts.hostname + ':' + opts.port + opts.path\r\n  }\r\n  if (typeof (opts.transformWsUrl) === 'function') {\r\n    url = opts.transformWsUrl(url, opts, client)\r\n  }\r\n  return url\r\n}\r\n\r\nfunction bindEventHandler () {\r\n  socketTask.onOpen(function () {\r\n    stream.setReadable(proxy)\r\n    stream.setWritable(proxy)\r\n    stream.emit('connect')\r\n  })\r\n\r\n  socketTask.onMessage(function (res) {\r\n    var data = res.data\r\n\r\n    if (data instanceof ArrayBuffer) data = Buffer.from(data)\r\n    else data = Buffer.from(data, 'utf8')\r\n    proxy.push(data)\r\n  })\r\n\r\n  socketTask.onClose(function () {\r\n    stream.end()\r\n    stream.destroy()\r\n  })\r\n\r\n  socketTask.onError(function (res) {\r\n    stream.destroy(new Error(res.errMsg))\r\n  })\r\n}\r\n\r\nfunction buildStream (client, opts) {\r\n  opts.hostname = opts.hostname || opts.host\r\n\r\n  if (!opts.hostname) {\r\n    throw new Error('Could not determine host. Specify host manually.')\r\n  }\r\n\r\n  var websocketSubProtocol =\r\n    (opts.protocolId === 'MQIsdp') && (opts.protocolVersion === 3)\r\n      ? 'mqttv3.1'\r\n      : 'mqtt'\r\n\r\n  setDefaultOpts(opts)\r\n\r\n  var url = buildUrl(opts, client)\r\n  socketTask = wx.connectSocket({\r\n    url: url,\r\n    protocols: [websocketSubProtocol]\r\n  })\r\n\r\n  proxy = buildProxy()\r\n  stream = duplexify.obj()\r\n  stream._destroy = function (err, cb) {\r\n    socketTask.close({\r\n      success: function () {\r\n        cb && cb(err)\r\n      }\r\n    })\r\n  }\r\n\r\n  var destroyRef = stream.destroy\r\n  stream.destroy = function () {\r\n    stream.destroy = destroyRef\r\n\r\n    var self = this\r\n    setTimeout(function () {\r\n      socketTask.close({\r\n        fail: function () {\r\n          self._destroy(new Error())\r\n        }\r\n      })\r\n    }, 0)\r\n  }.bind(stream)\r\n\r\n  bindEventHandler()\r\n\r\n  return stream\r\n}\r\n\r\nmodule.exports = buildStream\r\n\n}).call(this)}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":14,\"duplexify\":17,\"readable-stream\":51}],7:[function(require,module,exports){\n'use strict'\r\n\r\n/**\r\n * Module dependencies\r\n */\r\nvar xtend = require('xtend')\r\n\r\nvar Readable = require('readable-stream').Readable\r\nvar streamsOpts = { objectMode: true }\r\nvar defaultStoreOptions = {\r\n  clean: true\r\n}\r\n\r\n/**\r\n * In-memory implementation of the message store\r\n * This can actually be saved into files.\r\n *\r\n * @param {Object} [options] - store options\r\n */\r\nfunction Store (options) {\r\n  if (!(this instanceof Store)) {\r\n    return new Store(options)\r\n  }\r\n\r\n  this.options = options || {}\r\n\r\n  // Defaults\r\n  this.options = xtend(defaultStoreOptions, options)\r\n\r\n  this._inflights = new Map()\r\n}\r\n\r\n/**\r\n * Adds a packet to the store, a packet is\r\n * anything that has a messageId property.\r\n *\r\n */\r\nStore.prototype.put = function (packet, cb) {\r\n  this._inflights.set(packet.messageId, packet)\r\n\r\n  if (cb) {\r\n    cb()\r\n  }\r\n\r\n  return this\r\n}\r\n\r\n/**\r\n * Creates a stream with all the packets in the store\r\n *\r\n */\r\nStore.prototype.createStream = function () {\r\n  var stream = new Readable(streamsOpts)\r\n  var destroyed = false\r\n  var values = []\r\n  var i = 0\r\n\r\n  this._inflights.forEach(function (value, key) {\r\n    values.push(value)\r\n  })\r\n\r\n  stream._read = function () {\r\n    if (!destroyed && i < values.length) {\r\n      this.push(values[i++])\r\n    } else {\r\n      this.push(null)\r\n    }\r\n  }\r\n\r\n  stream.destroy = function () {\r\n    if (destroyed) {\r\n      return\r\n    }\r\n\r\n    var self = this\r\n\r\n    destroyed = true\r\n\r\n    setTimeout(function () {\r\n      self.emit('close')\r\n    }, 0)\r\n  }\r\n\r\n  return stream\r\n}\r\n\r\n/**\r\n * deletes a packet from the store.\r\n */\r\nStore.prototype.del = function (packet, cb) {\r\n  packet = this._inflights.get(packet.messageId)\r\n  if (packet) {\r\n    this._inflights.delete(packet.messageId)\r\n    cb(null, packet)\r\n  } else if (cb) {\r\n    cb(new Error('missing packet'))\r\n  }\r\n\r\n  return this\r\n}\r\n\r\n/**\r\n * get a packet from the store.\r\n */\r\nStore.prototype.get = function (packet, cb) {\r\n  packet = this._inflights.get(packet.messageId)\r\n  if (packet) {\r\n    cb(null, packet)\r\n  } else if (cb) {\r\n    cb(new Error('missing packet'))\r\n  }\r\n\r\n  return this\r\n}\r\n\r\n/**\r\n * Close the store\r\n */\r\nStore.prototype.close = function (cb) {\r\n  if (this.options.clean) {\r\n    this._inflights = null\r\n  }\r\n  if (cb) {\r\n    cb()\r\n  }\r\n}\r\n\r\nmodule.exports = Store\r\n\n},{\"readable-stream\":51,\"xtend\":61}],8:[function(require,module,exports){\n'use strict'\r\n\r\n/**\r\n * Validate a topic to see if it's valid or not.\r\n * A topic is valid if it follow below rules:\r\n * - Rule #1: If any part of the topic is not `+` or `#`, then it must not contain `+` and '#'\r\n * - Rule #2: Part `#` must be located at the end of the mailbox\r\n *\r\n * @param {String} topic - A topic\r\n * @returns {Boolean} If the topic is valid, returns true. Otherwise, returns false.\r\n */\r\nfunction validateTopic (topic) {\r\n  var parts = topic.split('/')\r\n\r\n  for (var i = 0; i < parts.length; i++) {\r\n    if (parts[i] === '+') {\r\n      continue\r\n    }\r\n\r\n    if (parts[i] === '#') {\r\n      // for Rule #2\r\n      return i === parts.length - 1\r\n    }\r\n\r\n    if (parts[i].indexOf('+') !== -1 || parts[i].indexOf('#') !== -1) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n\r\n/**\r\n * Validate an array of topics to see if any of them is valid or not\r\n  * @param {Array} topics - Array of topics\r\n * @returns {String} If the topics is valid, returns null. Otherwise, returns the invalid one\r\n */\r\nfunction validateTopics (topics) {\r\n  if (topics.length === 0) {\r\n    return 'empty_topic_list'\r\n  }\r\n  for (var i = 0; i < topics.length; i++) {\r\n    if (!validateTopic(topics[i])) {\r\n      return topics[i]\r\n    }\r\n  }\r\n  return null\r\n}\r\n\r\nmodule.exports = {\r\n  validateTopics: validateTopics\r\n}\r\n\n},{}],9:[function(require,module,exports){\n(function (process){(function (){\n'use strict'\r\n\r\nvar MqttClient = require('../client')\r\nvar Store = require('../store')\r\nvar url = require('url')\r\nvar xtend = require('xtend')\r\nvar debug = require('debug')('mqttjs')\r\n\r\nvar protocols = {}\r\n\r\n// eslint-disable-next-line camelcase\r\nif ((typeof process !== 'undefined' && process.title !== 'browser') || typeof __webpack_require__ !== 'function') {\r\n  protocols.mqtt = require('./tcp')\r\n  protocols.tcp = require('./tcp')\r\n  protocols.ssl = require('./tls')\r\n  protocols.tls = require('./tls')\r\n  protocols.mqtts = require('./tls')\r\n} else {\r\n  protocols.wx = require('./wx')\r\n  protocols.wxs = require('./wx')\r\n\r\n  protocols.ali = require('./ali')\r\n  protocols.alis = require('./ali')\r\n}\r\n\r\nprotocols.ws = require('./ws')\r\nprotocols.wss = require('./ws')\r\n\r\n/**\r\n * Parse the auth attribute and merge username and password in the options object.\r\n *\r\n * @param {Object} [opts] option object\r\n */\r\nfunction parseAuthOptions (opts) {\r\n  var matches\r\n  if (opts.auth) {\r\n    matches = opts.auth.match(/^(.+):(.+)$/)\r\n    if (matches) {\r\n      opts.username = matches[1]\r\n      opts.password = matches[2]\r\n    } else {\r\n      opts.username = opts.auth\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * connect - connect to an MQTT broker.\r\n *\r\n * @param {String} [brokerUrl] - url of the broker, optional\r\n * @param {Object} opts - see MqttClient#constructor\r\n */\r\nfunction connect (brokerUrl, opts) {\r\n  debug('connecting to an MQTT broker...')\r\n  if ((typeof brokerUrl === 'object') && !opts) {\r\n    opts = brokerUrl\r\n    brokerUrl = null\r\n  }\r\n\r\n  opts = opts || {}\r\n\r\n  if (brokerUrl) {\r\n    var parsed = url.parse(brokerUrl, true)\r\n    if (parsed.port != null) {\r\n      parsed.port = Number(parsed.port)\r\n    }\r\n\r\n    opts = xtend(parsed, opts)\r\n\r\n    if (opts.protocol === null) {\r\n      throw new Error('Missing protocol')\r\n    }\r\n\r\n    opts.protocol = opts.protocol.replace(/:$/, '')\r\n  }\r\n\r\n  // merge in the auth options if supplied\r\n  parseAuthOptions(opts)\r\n\r\n  // support clientId passed in the query string of the url\r\n  if (opts.query && typeof opts.query.clientId === 'string') {\r\n    opts.clientId = opts.query.clientId\r\n  }\r\n\r\n  if (opts.cert && opts.key) {\r\n    if (opts.protocol) {\r\n      if (['mqtts', 'wss', 'wxs', 'alis'].indexOf(opts.protocol) === -1) {\r\n        switch (opts.protocol) {\r\n          case 'mqtt':\r\n            opts.protocol = 'mqtts'\r\n            break\r\n          case 'ws':\r\n            opts.protocol = 'wss'\r\n            break\r\n          case 'wx':\r\n            opts.protocol = 'wxs'\r\n            break\r\n          case 'ali':\r\n            opts.protocol = 'alis'\r\n            break\r\n          default:\r\n            throw new Error('Unknown protocol for secure connection: \"' + opts.protocol + '\"!')\r\n        }\r\n      }\r\n    } else {\r\n      // A cert and key was provided, however no protocol was specified, so we will throw an error.\r\n      throw new Error('Missing secure protocol key')\r\n    }\r\n  }\r\n\r\n  if (!protocols[opts.protocol]) {\r\n    var isSecure = ['mqtts', 'wss'].indexOf(opts.protocol) !== -1\r\n    opts.protocol = [\r\n      'mqtt',\r\n      'mqtts',\r\n      'ws',\r\n      'wss',\r\n      'wx',\r\n      'wxs',\r\n      'ali',\r\n      'alis'\r\n    ].filter(function (key, index) {\r\n      if (isSecure && index % 2 === 0) {\r\n        // Skip insecure protocols when requesting a secure one.\r\n        return false\r\n      }\r\n      return (typeof protocols[key] === 'function')\r\n    })[0]\r\n  }\r\n\r\n  if (opts.clean === false && !opts.clientId) {\r\n    throw new Error('Missing clientId for unclean clients')\r\n  }\r\n\r\n  if (opts.protocol) {\r\n    opts.defaultProtocol = opts.protocol\r\n  }\r\n\r\n  function wrapper (client) {\r\n    if (opts.servers) {\r\n      if (!client._reconnectCount || client._reconnectCount === opts.servers.length) {\r\n        client._reconnectCount = 0\r\n      }\r\n\r\n      opts.host = opts.servers[client._reconnectCount].host\r\n      opts.port = opts.servers[client._reconnectCount].port\r\n      opts.protocol = (!opts.servers[client._reconnectCount].protocol ? opts.defaultProtocol : opts.servers[client._reconnectCount].protocol)\r\n      opts.hostname = opts.host\r\n\r\n      client._reconnectCount++\r\n    }\r\n\r\n    debug('calling streambuilder for', opts.protocol)\r\n    return protocols[opts.protocol](client, opts)\r\n  }\r\n  var client = new MqttClient(wrapper, opts)\r\n  client.on('error', function () { /* Automatically set up client error handling */ })\r\n  return client\r\n}\r\n\r\nmodule.exports = connect\r\nmodule.exports.connect = connect\r\nmodule.exports.MqttClient = MqttClient\r\nmodule.exports.Store = Store\r\n\n}).call(this)}).call(this,require('_process'))\n},{\"../client\":1,\"../store\":7,\"./ali\":2,\"./tcp\":3,\"./tls\":4,\"./ws\":5,\"./wx\":6,\"_process\":32,\"debug\":15,\"url\":56,\"xtend\":61}],10:[function(require,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n},{}],11:[function(require,module,exports){\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst symbol = Symbol.for('BufferList')\n\nfunction BufferList (buf) {\n  if (!(this instanceof BufferList)) {\n    return new BufferList(buf)\n  }\n\n  BufferList._init.call(this, buf)\n}\n\nBufferList._init = function _init (buf) {\n  Object.defineProperty(this, symbol, { value: true })\n\n  this._bufs = []\n  this.length = 0\n\n  if (buf) {\n    this.append(buf)\n  }\n}\n\nBufferList.prototype._new = function _new (buf) {\n  return new BufferList(buf)\n}\n\nBufferList.prototype._offset = function _offset (offset) {\n  if (offset === 0) {\n    return [0, 0]\n  }\n\n  let tot = 0\n\n  for (let i = 0; i < this._bufs.length; i++) {\n    const _t = tot + this._bufs[i].length\n    if (offset < _t || i === this._bufs.length - 1) {\n      return [i, offset - tot]\n    }\n    tot = _t\n  }\n}\n\nBufferList.prototype._reverseOffset = function (blOffset) {\n  const bufferId = blOffset[0]\n  let offset = blOffset[1]\n\n  for (let i = 0; i < bufferId; i++) {\n    offset += this._bufs[i].length\n  }\n\n  return offset\n}\n\nBufferList.prototype.get = function get (index) {\n  if (index > this.length || index < 0) {\n    return undefined\n  }\n\n  const offset = this._offset(index)\n\n  return this._bufs[offset[0]][offset[1]]\n}\n\nBufferList.prototype.slice = function slice (start, end) {\n  if (typeof start === 'number' && start < 0) {\n    start += this.length\n  }\n\n  if (typeof end === 'number' && end < 0) {\n    end += this.length\n  }\n\n  return this.copy(null, 0, start, end)\n}\n\nBufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {\n  if (typeof srcStart !== 'number' || srcStart < 0) {\n    srcStart = 0\n  }\n\n  if (typeof srcEnd !== 'number' || srcEnd > this.length) {\n    srcEnd = this.length\n  }\n\n  if (srcStart >= this.length) {\n    return dst || Buffer.alloc(0)\n  }\n\n  if (srcEnd <= 0) {\n    return dst || Buffer.alloc(0)\n  }\n\n  const copy = !!dst\n  const off = this._offset(srcStart)\n  const len = srcEnd - srcStart\n  let bytes = len\n  let bufoff = (copy && dstStart) || 0\n  let start = off[1]\n\n  // copy/slice everything\n  if (srcStart === 0 && srcEnd === this.length) {\n    if (!copy) {\n      // slice, but full concat if multiple buffers\n      return this._bufs.length === 1\n        ? this._bufs[0]\n        : Buffer.concat(this._bufs, this.length)\n    }\n\n    // copy, need to copy individual buffers\n    for (let i = 0; i < this._bufs.length; i++) {\n      this._bufs[i].copy(dst, bufoff)\n      bufoff += this._bufs[i].length\n    }\n\n    return dst\n  }\n\n  // easy, cheap case where it's a subset of one of the buffers\n  if (bytes <= this._bufs[off[0]].length - start) {\n    return copy\n      ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)\n      : this._bufs[off[0]].slice(start, start + bytes)\n  }\n\n  if (!copy) {\n    // a slice, we need something to copy in to\n    dst = Buffer.allocUnsafe(len)\n  }\n\n  for (let i = off[0]; i < this._bufs.length; i++) {\n    const l = this._bufs[i].length - start\n\n    if (bytes > l) {\n      this._bufs[i].copy(dst, bufoff, start)\n      bufoff += l\n    } else {\n      this._bufs[i].copy(dst, bufoff, start, start + bytes)\n      bufoff += l\n      break\n    }\n\n    bytes -= l\n\n    if (start) {\n      start = 0\n    }\n  }\n\n  // safeguard so that we don't return uninitialized memory\n  if (dst.length > bufoff) return dst.slice(0, bufoff)\n\n  return dst\n}\n\nBufferList.prototype.shallowSlice = function shallowSlice (start, end) {\n  start = start || 0\n  end = typeof end !== 'number' ? this.length : end\n\n  if (start < 0) {\n    start += this.length\n  }\n\n  if (end < 0) {\n    end += this.length\n  }\n\n  if (start === end) {\n    return this._new()\n  }\n\n  const startOffset = this._offset(start)\n  const endOffset = this._offset(end)\n  const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)\n\n  if (endOffset[1] === 0) {\n    buffers.pop()\n  } else {\n    buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1])\n  }\n\n  if (startOffset[1] !== 0) {\n    buffers[0] = buffers[0].slice(startOffset[1])\n  }\n\n  return this._new(buffers)\n}\n\nBufferList.prototype.toString = function toString (encoding, start, end) {\n  return this.slice(start, end).toString(encoding)\n}\n\nBufferList.prototype.consume = function consume (bytes) {\n  // first, normalize the argument, in accordance with how Buffer does it\n  bytes = Math.trunc(bytes)\n  // do nothing if not a positive number\n  if (Number.isNaN(bytes) || bytes <= 0) return this\n\n  while (this._bufs.length) {\n    if (bytes >= this._bufs[0].length) {\n      bytes -= this._bufs[0].length\n      this.length -= this._bufs[0].length\n      this._bufs.shift()\n    } else {\n      this._bufs[0] = this._bufs[0].slice(bytes)\n      this.length -= bytes\n      break\n    }\n  }\n\n  return this\n}\n\nBufferList.prototype.duplicate = function duplicate () {\n  const copy = this._new()\n\n  for (let i = 0; i < this._bufs.length; i++) {\n    copy.append(this._bufs[i])\n  }\n\n  return copy\n}\n\nBufferList.prototype.append = function append (buf) {\n  if (buf == null) {\n    return this\n  }\n\n  if (buf.buffer) {\n    // append a view of the underlying ArrayBuffer\n    this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength))\n  } else if (Array.isArray(buf)) {\n    for (let i = 0; i < buf.length; i++) {\n      this.append(buf[i])\n    }\n  } else if (this._isBufferList(buf)) {\n    // unwrap argument into individual BufferLists\n    for (let i = 0; i < buf._bufs.length; i++) {\n      this.append(buf._bufs[i])\n    }\n  } else {\n    // coerce number arguments to strings, since Buffer(number) does\n    // uninitialized memory allocation\n    if (typeof buf === 'number') {\n      buf = buf.toString()\n    }\n\n    this._appendBuffer(Buffer.from(buf))\n  }\n\n  return this\n}\n\nBufferList.prototype._appendBuffer = function appendBuffer (buf) {\n  this._bufs.push(buf)\n  this.length += buf.length\n}\n\nBufferList.prototype.indexOf = function (search, offset, encoding) {\n  if (encoding === undefined && typeof offset === 'string') {\n    encoding = offset\n    offset = undefined\n  }\n\n  if (typeof search === 'function' || Array.isArray(search)) {\n    throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.')\n  } else if (typeof search === 'number') {\n    search = Buffer.from([search])\n  } else if (typeof search === 'string') {\n    search = Buffer.from(search, encoding)\n  } else if (this._isBufferList(search)) {\n    search = search.slice()\n  } else if (Array.isArray(search.buffer)) {\n    search = Buffer.from(search.buffer, search.byteOffset, search.byteLength)\n  } else if (!Buffer.isBuffer(search)) {\n    search = Buffer.from(search)\n  }\n\n  offset = Number(offset || 0)\n\n  if (isNaN(offset)) {\n    offset = 0\n  }\n\n  if (offset < 0) {\n    offset = this.length + offset\n  }\n\n  if (offset < 0) {\n    offset = 0\n  }\n\n  if (search.length === 0) {\n    return offset > this.length ? this.length : offset\n  }\n\n  const blOffset = this._offset(offset)\n  let blIndex = blOffset[0] // index of which internal buffer we're working on\n  let buffOffset = blOffset[1] // offset of the internal buffer we're working on\n\n  // scan over each buffer\n  for (; blIndex < this._bufs.length; blIndex++) {\n    const buff = this._bufs[blIndex]\n\n    while (buffOffset < buff.length) {\n      const availableWindow = buff.length - buffOffset\n\n      if (availableWindow >= search.length) {\n        const nativeSearchResult = buff.indexOf(search, buffOffset)\n\n        if (nativeSearchResult !== -1) {\n          return this._reverseOffset([blIndex, nativeSearchResult])\n        }\n\n        buffOffset = buff.length - search.length + 1 // end of native search window\n      } else {\n        const revOffset = this._reverseOffset([blIndex, buffOffset])\n\n        if (this._match(revOffset, search)) {\n          return revOffset\n        }\n\n        buffOffset++\n      }\n    }\n\n    buffOffset = 0\n  }\n\n  return -1\n}\n\nBufferList.prototype._match = function (offset, search) {\n  if (this.length - offset < search.length) {\n    return false\n  }\n\n  for (let searchOffset = 0; searchOffset < search.length; searchOffset++) {\n    if (this.get(offset + searchOffset) !== search[searchOffset]) {\n      return false\n    }\n  }\n  return true\n}\n\n;(function () {\n  const methods = {\n    readDoubleBE: 8,\n    readDoubleLE: 8,\n    readFloatBE: 4,\n    readFloatLE: 4,\n    readInt32BE: 4,\n    readInt32LE: 4,\n    readUInt32BE: 4,\n    readUInt32LE: 4,\n    readInt16BE: 2,\n    readInt16LE: 2,\n    readUInt16BE: 2,\n    readUInt16LE: 2,\n    readInt8: 1,\n    readUInt8: 1,\n    readIntBE: null,\n    readIntLE: null,\n    readUIntBE: null,\n    readUIntLE: null\n  }\n\n  for (const m in methods) {\n    (function (m) {\n      if (methods[m] === null) {\n        BufferList.prototype[m] = function (offset, byteLength) {\n          return this.slice(offset, offset + byteLength)[m](0, byteLength)\n        }\n      } else {\n        BufferList.prototype[m] = function (offset = 0) {\n          return this.slice(offset, offset + methods[m])[m](0)\n        }\n      }\n    }(m))\n  }\n}())\n\n// Used internally by the class and also as an indicator of this object being\n// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser\n// environment because there could be multiple different copies of the\n// BufferList class and some `BufferList`s might be `BufferList`s.\nBufferList.prototype._isBufferList = function _isBufferList (b) {\n  return b instanceof BufferList || BufferList.isBufferList(b)\n}\n\nBufferList.isBufferList = function isBufferList (b) {\n  return b != null && b[symbol]\n}\n\nmodule.exports = BufferList\n\n},{\"buffer\":14}],12:[function(require,module,exports){\n'use strict'\n\nconst DuplexStream = require('readable-stream').Duplex\nconst inherits = require('inherits')\nconst BufferList = require('./BufferList')\n\nfunction BufferListStream (callback) {\n  if (!(this instanceof BufferListStream)) {\n    return new BufferListStream(callback)\n  }\n\n  if (typeof callback === 'function') {\n    this._callback = callback\n\n    const piper = function piper (err) {\n      if (this._callback) {\n        this._callback(err)\n        this._callback = null\n      }\n    }.bind(this)\n\n    this.on('pipe', function onPipe (src) {\n      src.on('error', piper)\n    })\n    this.on('unpipe', function onUnpipe (src) {\n      src.removeListener('error', piper)\n    })\n\n    callback = null\n  }\n\n  BufferList._init.call(this, callback)\n  DuplexStream.call(this)\n}\n\ninherits(BufferListStream, DuplexStream)\nObject.assign(BufferListStream.prototype, BufferList.prototype)\n\nBufferListStream.prototype._new = function _new (callback) {\n  return new BufferListStream(callback)\n}\n\nBufferListStream.prototype._write = function _write (buf, encoding, callback) {\n  this._appendBuffer(buf)\n\n  if (typeof callback === 'function') {\n    callback()\n  }\n}\n\nBufferListStream.prototype._read = function _read (size) {\n  if (!this.length) {\n    return this.push(null)\n  }\n\n  size = Math.min(size, this.length)\n  this.push(this.slice(0, size))\n  this.consume(size)\n}\n\nBufferListStream.prototype.end = function end (chunk) {\n  DuplexStream.prototype.end.call(this, chunk)\n\n  if (this._callback) {\n    this._callback(null, this.slice())\n    this._callback = null\n  }\n}\n\nBufferListStream.prototype._destroy = function _destroy (err, cb) {\n  this._bufs.length = 0\n  this.length = 0\n  cb(err)\n}\n\nBufferListStream.prototype._isBufferList = function _isBufferList (b) {\n  return b instanceof BufferListStream || b instanceof BufferList || BufferListStream.isBufferList(b)\n}\n\nBufferListStream.isBufferList = BufferList.isBufferList\n\nmodule.exports = BufferListStream\nmodule.exports.BufferListStream = BufferListStream\nmodule.exports.BufferList = BufferList\n\n},{\"./BufferList\":11,\"inherits\":21,\"readable-stream\":51}],13:[function(require,module,exports){\n\n},{}],14:[function(require,module,exports){\n(function (Buffer){(function (){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  buf.__proto__ = Buffer.prototype\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n    Buffer[Symbol.species] === Buffer) {\n  Object.defineProperty(Buffer, Symbol.species, {\n    value: null,\n    configurable: true,\n    enumerable: false,\n    writable: false\n  })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayLike(value)\n  }\n\n  if (value == null) {\n    throw TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  buf.__proto__ = Buffer.prototype\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      buf = Buffer.from(buf)\n    }\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  var strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n        : (firstByte > 0xBF) ? 2\n          : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  newBuf.__proto__ = Buffer.prototype\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (var i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    var len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n}).call(this)}).call(this,require(\"buffer\").Buffer)\n},{\"base64-js\":10,\"buffer\":14,\"ieee754\":20}],15:[function(require,module,exports){\n(function (process){(function (){\n/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n\n}).call(this)}).call(this,require('_process'))\n},{\"./common\":16,\"_process\":32}],16:[function(require,module,exports){\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride,\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n\n},{\"ms\":29}],17:[function(require,module,exports){\n(function (process,Buffer){(function (){\nvar stream = require('readable-stream')\nvar eos = require('end-of-stream')\nvar inherits = require('inherits')\nvar shift = require('stream-shift')\n\nvar SIGNAL_FLUSH = (Buffer.from && Buffer.from !== Uint8Array.from)\n  ? Buffer.from([0])\n  : new Buffer([0])\n\nvar onuncork = function(self, fn) {\n  if (self._corked) self.once('uncork', fn)\n  else fn()\n}\n\nvar autoDestroy = function (self, err) {\n  if (self._autoDestroy) self.destroy(err)\n}\n\nvar destroyer = function(self, end) {\n  return function(err) {\n    if (err) autoDestroy(self, err.message === 'premature close' ? null : err)\n    else if (end && !self._ended) self.end()\n  }\n}\n\nvar end = function(ws, fn) {\n  if (!ws) return fn()\n  if (ws._writableState && ws._writableState.finished) return fn()\n  if (ws._writableState) return ws.end(fn)\n  ws.end()\n  fn()\n}\n\nvar noop = function() {}\n\nvar toStreams2 = function(rs) {\n  return new (stream.Readable)({objectMode:true, highWaterMark:16}).wrap(rs)\n}\n\nvar Duplexify = function(writable, readable, opts) {\n  if (!(this instanceof Duplexify)) return new Duplexify(writable, readable, opts)\n  stream.Duplex.call(this, opts)\n\n  this._writable = null\n  this._readable = null\n  this._readable2 = null\n\n  this._autoDestroy = !opts || opts.autoDestroy !== false\n  this._forwardDestroy = !opts || opts.destroy !== false\n  this._forwardEnd = !opts || opts.end !== false\n  this._corked = 1 // start corked\n  this._ondrain = null\n  this._drained = false\n  this._forwarding = false\n  this._unwrite = null\n  this._unread = null\n  this._ended = false\n\n  this.destroyed = false\n\n  if (writable) this.setWritable(writable)\n  if (readable) this.setReadable(readable)\n}\n\ninherits(Duplexify, stream.Duplex)\n\nDuplexify.obj = function(writable, readable, opts) {\n  if (!opts) opts = {}\n  opts.objectMode = true\n  opts.highWaterMark = 16\n  return new Duplexify(writable, readable, opts)\n}\n\nDuplexify.prototype.cork = function() {\n  if (++this._corked === 1) this.emit('cork')\n}\n\nDuplexify.prototype.uncork = function() {\n  if (this._corked && --this._corked === 0) this.emit('uncork')\n}\n\nDuplexify.prototype.setWritable = function(writable) {\n  if (this._unwrite) this._unwrite()\n\n  if (this.destroyed) {\n    if (writable && writable.destroy) writable.destroy()\n    return\n  }\n\n  if (writable === null || writable === false) {\n    this.end()\n    return\n  }\n\n  var self = this\n  var unend = eos(writable, {writable:true, readable:false}, destroyer(this, this._forwardEnd))\n\n  var ondrain = function() {\n    var ondrain = self._ondrain\n    self._ondrain = null\n    if (ondrain) ondrain()\n  }\n\n  var clear = function() {\n    self._writable.removeListener('drain', ondrain)\n    unend()\n  }\n\n  if (this._unwrite) process.nextTick(ondrain) // force a drain on stream reset to avoid livelocks\n\n  this._writable = writable\n  this._writable.on('drain', ondrain)\n  this._unwrite = clear\n\n  this.uncork() // always uncork setWritable\n}\n\nDuplexify.prototype.setReadable = function(readable) {\n  if (this._unread) this._unread()\n\n  if (this.destroyed) {\n    if (readable && readable.destroy) readable.destroy()\n    return\n  }\n\n  if (readable === null || readable === false) {\n    this.push(null)\n    this.resume()\n    return\n  }\n\n  var self = this\n  var unend = eos(readable, {writable:false, readable:true}, destroyer(this))\n\n  var onreadable = function() {\n    self._forward()\n  }\n\n  var onend = function() {\n    self.push(null)\n  }\n\n  var clear = function() {\n    self._readable2.removeListener('readable', onreadable)\n    self._readable2.removeListener('end', onend)\n    unend()\n  }\n\n  this._drained = true\n  this._readable = readable\n  this._readable2 = readable._readableState ? readable : toStreams2(readable)\n  this._readable2.on('readable', onreadable)\n  this._readable2.on('end', onend)\n  this._unread = clear\n\n  this._forward()\n}\n\nDuplexify.prototype._read = function() {\n  this._drained = true\n  this._forward()\n}\n\nDuplexify.prototype._forward = function() {\n  if (this._forwarding || !this._readable2 || !this._drained) return\n  this._forwarding = true\n\n  var data\n\n  while (this._drained && (data = shift(this._readable2)) !== null) {\n    if (this.destroyed) continue\n    this._drained = this.push(data)\n  }\n\n  this._forwarding = false\n}\n\nDuplexify.prototype.destroy = function(err, cb) {\n  if (!cb) cb = noop\n  if (this.destroyed) return cb(null)\n  this.destroyed = true\n\n  var self = this\n  process.nextTick(function() {\n    self._destroy(err)\n    cb(null)\n  })\n}\n\nDuplexify.prototype._destroy = function(err) {\n  if (err) {\n    var ondrain = this._ondrain\n    this._ondrain = null\n    if (ondrain) ondrain(err)\n    else this.emit('error', err)\n  }\n\n  if (this._forwardDestroy) {\n    if (this._readable && this._readable.destroy) this._readable.destroy()\n    if (this._writable && this._writable.destroy) this._writable.destroy()\n  }\n\n  this.emit('close')\n}\n\nDuplexify.prototype._write = function(data, enc, cb) {\n  if (this.destroyed) return\n  if (this._corked) return onuncork(this, this._write.bind(this, data, enc, cb))\n  if (data === SIGNAL_FLUSH) return this._finish(cb)\n  if (!this._writable) return cb()\n\n  if (this._writable.write(data) === false) this._ondrain = cb\n  else if (!this.destroyed) cb()\n}\n\nDuplexify.prototype._finish = function(cb) {\n  var self = this\n  this.emit('preend')\n  onuncork(this, function() {\n    end(self._forwardEnd && self._writable, function() {\n      // haxx to not emit prefinish twice\n      if (self._writableState.prefinished === false) self._writableState.prefinished = true\n      self.emit('prefinish')\n      onuncork(self, cb)\n    })\n  })\n}\n\nDuplexify.prototype.end = function(data, enc, cb) {\n  if (typeof data === 'function') return this.end(null, null, data)\n  if (typeof enc === 'function') return this.end(data, null, enc)\n  this._ended = true\n  if (data) this.write(data)\n  if (!this._writableState.ending) this.write(SIGNAL_FLUSH)\n  return stream.Writable.prototype.end.call(this, cb)\n}\n\nmodule.exports = Duplexify\n\n}).call(this)}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"_process\":32,\"buffer\":14,\"end-of-stream\":18,\"inherits\":21,\"readable-stream\":51,\"stream-shift\":54}],18:[function(require,module,exports){\n(function (process){(function (){\nvar once = require('once');\n\nvar noop = function() {};\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tprocess.nextTick(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n\n}).call(this)}).call(this,require('_process'))\n},{\"_process\":32,\"once\":30}],19:[function(require,module,exports){\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 objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n  if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n    this._events = objectCreate(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nvar hasDefineProperty;\ntry {\n  var o = {};\n  if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n  hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n    enumerable: true,\n    get: function() {\n      return defaultMaxListeners;\n    },\n    set: function(arg) {\n      // check whether the input is a positive number (whose value is zero or\n      // greater and not a NaN).\n      if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n        throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n      defaultMaxListeners = arg;\n    }\n  });\n} else {\n  EventEmitter.defaultMaxListeners = defaultMaxListeners;\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 || isNaN(n))\n    throw new TypeError('\"n\" argument must be a positive number');\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\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n  if (isFn)\n    handler.call(self);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self);\n  }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n  if (isFn)\n    handler.call(self, arg1);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1);\n  }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n  if (isFn)\n    handler.call(self, arg1, arg2);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2);\n  }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n  if (isFn)\n    handler.call(self, arg1, arg2, arg3);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2, arg3);\n  }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n  if (isFn)\n    handler.apply(self, args);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].apply(self, args);\n  }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n  var er, handler, len, args, i, events;\n  var doError = (type === 'error');\n\n  events = this._events;\n  if (events)\n    doError = (doError && events.error == null);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    if (arguments.length > 1)\n      er = arguments[1];\n    if (er instanceof Error) {\n      throw er; // Unhandled 'error' event\n    } else {\n      // At least give some kind of context to the user\n      var err = new Error('Unhandled \"error\" event. (' + er + ')');\n      err.context = er;\n      throw err;\n    }\n    return false;\n  }\n\n  handler = events[type];\n\n  if (!handler)\n    return false;\n\n  var isFn = typeof handler === 'function';\n  len = arguments.length;\n  switch (len) {\n      // fast cases\n    case 1:\n      emitNone(handler, isFn, this);\n      break;\n    case 2:\n      emitOne(handler, isFn, this, arguments[1]);\n      break;\n    case 3:\n      emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n      break;\n    case 4:\n      emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n      break;\n      // slower\n    default:\n      args = new Array(len - 1);\n      for (i = 1; i < len; i++)\n        args[i - 1] = arguments[i];\n      emitMany(handler, isFn, 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  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n\n  events = target._events;\n  if (!events) {\n    events = target._events = objectCreate(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) {\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) {\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    } else {\n      // If we've already got an array, just append.\n      if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n    }\n\n    // Check for listener leak\n    if (!existing.warned) {\n      m = $getMaxListeners(target);\n      if (m && m > 0 && existing.length > m) {\n        existing.warned = true;\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        if (typeof console === 'object' && console.warn) {\n          console.warn('%s: %s', w.name, w.message);\n        }\n      }\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    switch (arguments.length) {\n      case 0:\n        return this.listener.call(this.target);\n      case 1:\n        return this.listener.call(this.target, arguments[0]);\n      case 2:\n        return this.listener.call(this.target, arguments[0], arguments[1]);\n      case 3:\n        return this.listener.call(this.target, arguments[0], arguments[1],\n            arguments[2]);\n      default:\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i)\n          args[i] = arguments[i];\n        this.listener.apply(this.target, args);\n    }\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = bind.call(onceWrapper, state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\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      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      list = events[type];\n      if (!list)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = objectCreate(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        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (!events.removeListener) {\n        if (arguments.length === 0) {\n          this._events = objectCreate(null);\n          this._eventsCount = 0;\n        } else if (events[type]) {\n          if (--this._eventsCount === 0)\n            this._events = objectCreate(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 = objectKeys(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 = objectCreate(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) {\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)\n    return [];\n\n  var evlistener = events[type];\n  if (!evlistener)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ? 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) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n    list[i] = list[k];\n  list.pop();\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 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\nfunction objectCreatePolyfill(proto) {\n  var F = function() {};\n  F.prototype = proto;\n  return new F;\n}\nfunction objectKeysPolyfill(obj) {\n  var keys = [];\n  for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n    keys.push(k);\n  }\n  return k;\n}\nfunction functionBindPolyfill(context) {\n  var fn = this;\n  return function () {\n    return fn.apply(context, arguments);\n  };\n}\n\n},{}],20:[function(require,module,exports){\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n},{}],21:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n\n},{}],22:[function(require,module,exports){\n(function (Buffer){(function (){\n/* Protocol - protocol constants */\nconst protocol = module.exports\n\n/* Command code => mnemonic */\nprotocol.types = {\n  0: 'reserved',\n  1: 'connect',\n  2: 'connack',\n  3: 'publish',\n  4: 'puback',\n  5: 'pubrec',\n  6: 'pubrel',\n  7: 'pubcomp',\n  8: 'subscribe',\n  9: 'suback',\n  10: 'unsubscribe',\n  11: 'unsuback',\n  12: 'pingreq',\n  13: 'pingresp',\n  14: 'disconnect',\n  15: 'auth'\n}\n\n/* Mnemonic => Command code */\nprotocol.codes = {}\nfor (const k in protocol.types) {\n  const v = protocol.types[k]\n  protocol.codes[v] = k\n}\n\n/* Header */\nprotocol.CMD_SHIFT = 4\nprotocol.CMD_MASK = 0xF0\nprotocol.DUP_MASK = 0x08\nprotocol.QOS_MASK = 0x03\nprotocol.QOS_SHIFT = 1\nprotocol.RETAIN_MASK = 0x01\n\n/* Length */\nprotocol.VARBYTEINT_MASK = 0x7F\nprotocol.VARBYTEINT_FIN_MASK = 0x80\nprotocol.VARBYTEINT_MAX = 268435455\n\n/* Connack */\nprotocol.SESSIONPRESENT_MASK = 0x01\nprotocol.SESSIONPRESENT_HEADER = Buffer.from([protocol.SESSIONPRESENT_MASK])\nprotocol.CONNACK_HEADER = Buffer.from([protocol.codes.connack << protocol.CMD_SHIFT])\n\n/* Connect */\nprotocol.USERNAME_MASK = 0x80\nprotocol.PASSWORD_MASK = 0x40\nprotocol.WILL_RETAIN_MASK = 0x20\nprotocol.WILL_QOS_MASK = 0x18\nprotocol.WILL_QOS_SHIFT = 3\nprotocol.WILL_FLAG_MASK = 0x04\nprotocol.CLEAN_SESSION_MASK = 0x02\nprotocol.CONNECT_HEADER = Buffer.from([protocol.codes.connect << protocol.CMD_SHIFT])\n\n/* Properties */\nprotocol.properties = {\n  sessionExpiryInterval: 17,\n  willDelayInterval: 24,\n  receiveMaximum: 33,\n  maximumPacketSize: 39,\n  topicAliasMaximum: 34,\n  requestResponseInformation: 25,\n  requestProblemInformation: 23,\n  userProperties: 38,\n  authenticationMethod: 21,\n  authenticationData: 22,\n  payloadFormatIndicator: 1,\n  messageExpiryInterval: 2,\n  contentType: 3,\n  responseTopic: 8,\n  correlationData: 9,\n  maximumQoS: 36,\n  retainAvailable: 37,\n  assignedClientIdentifier: 18,\n  reasonString: 31,\n  wildcardSubscriptionAvailable: 40,\n  subscriptionIdentifiersAvailable: 41,\n  sharedSubscriptionAvailable: 42,\n  serverKeepAlive: 19,\n  responseInformation: 26,\n  serverReference: 28,\n  topicAlias: 35,\n  subscriptionIdentifier: 11\n}\nprotocol.propertiesCodes = {}\nfor (const prop in protocol.properties) {\n  const id = protocol.properties[prop]\n  protocol.propertiesCodes[id] = prop\n}\nprotocol.propertiesTypes = {\n  sessionExpiryInterval: 'int32',\n  willDelayInterval: 'int32',\n  receiveMaximum: 'int16',\n  maximumPacketSize: 'int32',\n  topicAliasMaximum: 'int16',\n  requestResponseInformation: 'byte',\n  requestProblemInformation: 'byte',\n  userProperties: 'pair',\n  authenticationMethod: 'string',\n  authenticationData: 'binary',\n  payloadFormatIndicator: 'byte',\n  messageExpiryInterval: 'int32',\n  contentType: 'string',\n  responseTopic: 'string',\n  correlationData: 'binary',\n  maximumQoS: 'int8',\n  retainAvailable: 'byte',\n  assignedClientIdentifier: 'string',\n  reasonString: 'string',\n  wildcardSubscriptionAvailable: 'byte',\n  subscriptionIdentifiersAvailable: 'byte',\n  sharedSubscriptionAvailable: 'byte',\n  serverKeepAlive: 'int16',\n  responseInformation: 'string',\n  serverReference: 'string',\n  topicAlias: 'int16',\n  subscriptionIdentifier: 'var'\n}\n\nfunction genHeader (type) {\n  return [0, 1, 2].map(qos => {\n    return [0, 1].map(dup => {\n      return [0, 1].map(retain => {\n        const buf = Buffer.alloc(1)\n        buf.writeUInt8(\n          protocol.codes[type] << protocol.CMD_SHIFT |\n          (dup ? protocol.DUP_MASK : 0) |\n          qos << protocol.QOS_SHIFT | retain, 0, true)\n        return buf\n      })\n    })\n  })\n}\n\n/* Publish */\nprotocol.PUBLISH_HEADER = genHeader('publish')\n\n/* Subscribe */\nprotocol.SUBSCRIBE_HEADER = genHeader('subscribe')\nprotocol.SUBSCRIBE_OPTIONS_QOS_MASK = 0x03\nprotocol.SUBSCRIBE_OPTIONS_NL_MASK = 0x01\nprotocol.SUBSCRIBE_OPTIONS_NL_SHIFT = 2\nprotocol.SUBSCRIBE_OPTIONS_RAP_MASK = 0x01\nprotocol.SUBSCRIBE_OPTIONS_RAP_SHIFT = 3\nprotocol.SUBSCRIBE_OPTIONS_RH_MASK = 0x03\nprotocol.SUBSCRIBE_OPTIONS_RH_SHIFT = 4\nprotocol.SUBSCRIBE_OPTIONS_RH = [0x00, 0x10, 0x20]\nprotocol.SUBSCRIBE_OPTIONS_NL = 0x04\nprotocol.SUBSCRIBE_OPTIONS_RAP = 0x08\nprotocol.SUBSCRIBE_OPTIONS_QOS = [0x00, 0x01, 0x02]\n\n/* Unsubscribe */\nprotocol.UNSUBSCRIBE_HEADER = genHeader('unsubscribe')\n\n/* Confirmations */\nprotocol.ACKS = {\n  unsuback: genHeader('unsuback'),\n  puback: genHeader('puback'),\n  pubcomp: genHeader('pubcomp'),\n  pubrel: genHeader('pubrel'),\n  pubrec: genHeader('pubrec')\n}\n\nprotocol.SUBACK_HEADER = Buffer.from([protocol.codes.suback << protocol.CMD_SHIFT])\n\n/* Protocol versions */\nprotocol.VERSION3 = Buffer.from([3])\nprotocol.VERSION4 = Buffer.from([4])\nprotocol.VERSION5 = Buffer.from([5])\nprotocol.VERSION131 = Buffer.from([131])\nprotocol.VERSION132 = Buffer.from([132])\n\n/* QoS */\nprotocol.QOS = [0, 1, 2].map(qos => {\n  return Buffer.from([qos])\n})\n\n/* Empty packets */\nprotocol.EMPTY = {\n  pingreq: Buffer.from([protocol.codes.pingreq << 4, 0]),\n  pingresp: Buffer.from([protocol.codes.pingresp << 4, 0]),\n  disconnect: Buffer.from([protocol.codes.disconnect << 4, 0])\n}\n\n}).call(this)}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":14}],23:[function(require,module,exports){\n(function (Buffer){(function (){\nconst writeToStream = require('./writeToStream')\nconst EventEmitter = require('events')\n\nfunction generate (packet, opts) {\n  const stream = new Accumulator()\n  writeToStream(packet, stream, opts)\n  return stream.concat()\n}\n\nclass Accumulator extends EventEmitter {\n  constructor () {\n    super()\n    this._array = new Array(20)\n    this._i = 0\n  }\n\n  write (chunk) {\n    this._array[this._i++] = chunk\n    return true\n  }\n\n  concat () {\n    let length = 0\n    const lengths = new Array(this._array.length)\n    const list = this._array\n    let pos = 0\n    let i\n\n    for (i = 0; i < list.length && list[i] !== undefined; i++) {\n      if (typeof list[i] !== 'string') lengths[i] = list[i].length\n      else lengths[i] = Buffer.byteLength(list[i])\n\n      length += lengths[i]\n    }\n\n    const result = Buffer.allocUnsafe(length)\n\n    for (i = 0; i < list.length && list[i] !== undefined; i++) {\n      if (typeof list[i] !== 'string') {\n        list[i].copy(result, pos)\n        pos += lengths[i]\n      } else {\n        result.write(list[i], pos)\n        pos += lengths[i]\n      }\n    }\n\n    return result\n  }\n}\n\nmodule.exports = generate\n\n}).call(this)}).call(this,require(\"buffer\").Buffer)\n},{\"./writeToStream\":28,\"buffer\":14,\"events\":19}],24:[function(require,module,exports){\nexports.parser = require('./parser').parser\nexports.generate = require('./generate')\nexports.writeToStream = require('./writeToStream')\n\n},{\"./generate\":23,\"./parser\":27,\"./writeToStream\":28}],25:[function(require,module,exports){\n(function (Buffer){(function (){\nconst max = 65536\nconst cache = {}\n\n// in node 6 Buffer.subarray returns a Uint8Array instead of a Buffer\n// later versions return a Buffer\n// alternative is Buffer.slice but that creates a new buffer\n// creating new buffers takes time\n// SubOk is only false on node < 8\nconst SubOk = Buffer.isBuffer(Buffer.from([1, 2]).subarray(0, 1))\n\nfunction generateBuffer (i) {\n  const buffer = Buffer.allocUnsafe(2)\n  buffer.writeUInt8(i >> 8, 0)\n  buffer.writeUInt8(i & 0x00FF, 0 + 1)\n\n  return buffer\n}\n\nfunction generateCache () {\n  for (let i = 0; i < max; i++) {\n    cache[i] = generateBuffer(i)\n  }\n}\n\nfunction genBufVariableByteInt (num) {\n  const maxLength = 4 // max 4 bytes\n  let digit = 0\n  let pos = 0\n  const buffer = Buffer.allocUnsafe(maxLength)\n\n  do {\n    digit = num % 128 | 0\n    num = num / 128 | 0\n    if (num > 0) digit = digit | 0x80\n\n    buffer.writeUInt8(digit, pos++)\n  } while (num > 0 && pos < maxLength)\n\n  if (num > 0) {\n    pos = 0\n  }\n\n  return SubOk ? buffer.subarray(0, pos) : buffer.slice(0, pos)\n}\n\nfunction generate4ByteBuffer (num) {\n  const buffer = Buffer.allocUnsafe(4)\n  buffer.writeUInt32BE(num, 0)\n  return buffer\n}\n\nmodule.exports = {\n  cache,\n  generateCache,\n  generateNumber: generateBuffer,\n  genBufVariableByteInt,\n  generate4ByteBuffer\n}\n\n}).call(this)}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":14}],26:[function(require,module,exports){\nclass Packet {\n  constructor () {\n    this.cmd = null\n    this.retain = false\n    this.qos = 0\n    this.dup = false\n    this.length = -1\n    this.topic = null\n    this.payload = null\n  }\n}\n\nmodule.exports = Packet\n\n},{}],27:[function(require,module,exports){\nconst bl = require('bl')\nconst EventEmitter = require('events')\nconst Packet = require('./packet')\nconst constants = require('./constants')\nconst debug = require('debug')('mqtt-packet:parser')\n\nclass Parser extends EventEmitter {\n  constructor () {\n    super()\n    this.parser = this.constructor.parser\n  }\n\n  static parser (opt) {\n    if (!(this instanceof Parser)) return (new Parser()).parser(opt)\n\n    this.settings = opt || {}\n\n    this._states = [\n      '_parseHeader',\n      '_parseLength',\n      '_parsePayload',\n      '_newPacket'\n    ]\n\n    this._resetState()\n    return this\n  }\n\n  _resetState () {\n    debug('_resetState: resetting packet, error, _list, and _stateCounter')\n    this.packet = new Packet()\n    this.error = null\n    this._list = bl()\n    this._stateCounter = 0\n  }\n\n  parse (buf) {\n    if (this.error) this._resetState()\n\n    this._list.append(buf)\n    debug('parse: current state: %s', this._states[this._stateCounter])\n    while ((this.packet.length !== -1 || this._list.length > 0) &&\n      this[this._states[this._stateCounter]]() &&\n      !this.error) {\n      this._stateCounter++\n      debug('parse: state complete. _stateCounter is now: %d', this._stateCounter)\n      debug('parse: packet.length: %d, buffer list length: %d', this.packet.length, this._list.length)\n      if (this._stateCounter >= this._states.length) this._stateCounter = 0\n    }\n    debug('parse: exited while loop. packet: %d, buffer list length: %d', this.packet.length, this._list.length)\n    return this._list.length\n  }\n\n  _parseHeader () {\n    // There is at least one byte in the buffer\n    const zero = this._list.readUInt8(0)\n    this.packet.cmd = constants.types[zero >> constants.CMD_SHIFT]\n    this.packet.retain = (zero & constants.RETAIN_MASK) !== 0\n    this.packet.qos = (zero >> constants.QOS_SHIFT) & constants.QOS_MASK\n    this.packet.dup = (zero & constants.DUP_MASK) !== 0\n    debug('_parseHeader: packet: %o', this.packet)\n\n    this._list.consume(1)\n\n    return true\n  }\n\n  _parseLength () {\n    // There is at least one byte in the list\n    const result = this._parseVarByteNum(true)\n\n    if (result) {\n      this.packet.length = result.value\n      this._list.consume(result.bytes)\n    }\n    debug('_parseLength %d', result.value)\n    return !!result\n  }\n\n  _parsePayload () {\n    debug('_parsePayload: payload %O', this._list)\n    let result = false\n\n    // Do we have a payload? Do we have enough data to complete the payload?\n    // PINGs have no payload\n    if (this.packet.length === 0 || this._list.length >= this.packet.length) {\n      this._pos = 0\n\n      switch (this.packet.cmd) {\n        case 'connect':\n          this._parseConnect()\n          break\n        case 'connack':\n          this._parseConnack()\n          break\n        case 'publish':\n          this._parsePublish()\n          break\n        case 'puback':\n        case 'pubrec':\n        case 'pubrel':\n        case 'pubcomp':\n          this._parseConfirmation()\n          break\n        case 'subscribe':\n          this._parseSubscribe()\n          break\n        case 'suback':\n          this._parseSuback()\n          break\n        case 'unsubscribe':\n          this._parseUnsubscribe()\n          break\n        case 'unsuback':\n          this._parseUnsuback()\n          break\n        case 'pingreq':\n        case 'pingresp':\n          // These are empty, nothing to do\n          break\n        case 'disconnect':\n          this._parseDisconnect()\n          break\n        case 'auth':\n          this._parseAuth()\n          break\n        default:\n          this._emitError(new Error('Not supported'))\n      }\n\n      result = true\n    }\n    debug('_parsePayload complete result: %s', result)\n    return result\n  }\n\n  _parseConnect () {\n    debug('_parseConnect')\n    let topic // Will topic\n    let payload // Will payload\n    let password // Password\n    let username // Username\n    const flags = {}\n    const packet = this.packet\n\n    // Parse protocolId\n    const protocolId = this._parseString()\n\n    if (protocolId === null) return this._emitError(new Error('Cannot parse protocolId'))\n    if (protocolId !== 'MQTT' && protocolId !== 'MQIsdp') {\n      return this._emitError(new Error('Invalid protocolId'))\n    }\n\n    packet.protocolId = protocolId\n\n    // Parse constants version number\n    if (this._pos >= this._list.length) return this._emitError(new Error('Packet too short'))\n\n    packet.protocolVersion = this._list.readUInt8(this._pos)\n\n    if (packet.protocolVersion >= 128) {\n      packet.bridgeMode = true\n      packet.protocolVersion = packet.protocolVersion - 128\n    }\n\n    if (packet.protocolVersion !== 3 && packet.protocolVersion !== 4 && packet.protocolVersion !== 5) {\n      return this._emitError(new Error('Invalid protocol version'))\n    }\n\n    this._pos++\n\n    if (this._pos >= this._list.length) {\n      return this._emitError(new Error('Packet too short'))\n    }\n\n    // Parse connect flags\n    flags.username = (this._list.readUInt8(this._pos) & constants.USERNAME_MASK)\n    flags.password = (this._list.readUInt8(this._pos) & constants.PASSWORD_MASK)\n    flags.will = (this._list.readUInt8(this._pos) & constants.WILL_FLAG_MASK)\n\n    if (flags.will) {\n      packet.will = {}\n      packet.will.retain = (this._list.readUInt8(this._pos) & constants.WILL_RETAIN_MASK) !== 0\n      packet.will.qos = (this._list.readUInt8(this._pos) &\n        constants.WILL_QOS_MASK) >> constants.WILL_QOS_SHIFT\n    }\n\n    packet.clean = (this._list.readUInt8(this._pos) & constants.CLEAN_SESSION_MASK) !== 0\n    this._pos++\n\n    // Parse keepalive\n    packet.keepalive = this._parseNum()\n    if (packet.keepalive === -1) return this._emitError(new Error('Packet too short'))\n\n    // parse properties\n    if (packet.protocolVersion === 5) {\n      const properties = this._parseProperties()\n      if (Object.getOwnPropertyNames(properties).length) {\n        packet.properties = properties\n      }\n    }\n    // Parse clientId\n    const clientId = this._parseString()\n    if (clientId === null) return this._emitError(new Error('Packet too short'))\n    packet.clientId = clientId\n    debug('_parseConnect: packet.clientId: %s', packet.clientId)\n\n    if (flags.will) {\n      if (packet.protocolVersion === 5) {\n        const willProperties = this._parseProperties()\n        if (Object.getOwnPropertyNames(willProperties).length) {\n          packet.will.properties = willProperties\n        }\n      }\n      // Parse will topic\n      topic = this._parseString()\n      if (topic === null) return this._emitError(new Error('Cannot parse will topic'))\n      packet.will.topic = topic\n      debug('_parseConnect: packet.will.topic: %s', packet.will.topic)\n\n      // Parse will payload\n      payload = this._parseBuffer()\n      if (payload === null) return this._emitError(new Error('Cannot parse will payload'))\n      packet.will.payload = payload\n      debug('_parseConnect: packet.will.paylaod: %s', packet.will.payload)\n    }\n\n    // Parse username\n    if (flags.username) {\n      username = this._parseString()\n      if (username === null) return this._emitError(new Error('Cannot parse username'))\n      packet.username = username\n      debug('_parseConnect: packet.username: %s', packet.username)\n    }\n\n    // Parse password\n    if (flags.password) {\n      password = this._parseBuffer()\n      if (password === null) return this._emitError(new Error('Cannot parse password'))\n      packet.password = password\n    }\n    // need for right parse auth packet and self set up\n    this.settings = packet\n    debug('_parseConnect: complete')\n    return packet\n  }\n\n  _parseConnack () {\n    debug('_parseConnack')\n    const packet = this.packet\n\n    if (this._list.length < 1) return null\n    packet.sessionPresent = !!(this._list.readUInt8(this._pos++) & constants.SESSIONPRESENT_MASK)\n\n    if (this.settings.protocolVersion === 5) {\n      if (this._list.length >= 2) {\n        packet.reasonCode = this._list.readUInt8(this._pos++)\n      } else {\n        packet.reasonCode = 0\n      }\n    } else {\n      if (this._list.length < 2) return null\n      packet.returnCode = this._list.readUInt8(this._pos++)\n    }\n\n    if (packet.returnCode === -1 || packet.reasonCode === -1) return this._emitError(new Error('Cannot parse return code'))\n    // mqtt 5 properties\n    if (this.settings.protocolVersion === 5) {\n      const properties = this._parseProperties()\n      if (Object.getOwnPropertyNames(properties).length) {\n        packet.properties = properties\n      }\n    }\n    debug('_parseConnack: complete')\n  }\n\n  _parsePublish () {\n    debug('_parsePublish')\n    const packet = this.packet\n    packet.topic = this._parseString()\n\n    if (packet.topic === null) return this._emitError(new Error('Cannot parse topic'))\n\n    // Parse messageId\n    if (packet.qos > 0) if (!this._parseMessageId()) { return }\n\n    // Properties mqtt 5\n    if (this.settings.protocolVersion === 5) {\n      const properties = this._parseProperties()\n      if (Object.getOwnPropertyNames(properties).length) {\n        packet.properties = properties\n      }\n    }\n\n    packet.payload = this._list.slice(this._pos, packet.length)\n    debug('_parsePublish: payload from buffer list: %o', packet.payload)\n  }\n\n  _parseSubscribe () {\n    debug('_parseSubscribe')\n    const packet = this.packet\n    let topic\n    let options\n    let qos\n    let rh\n    let rap\n    let nl\n    let subscription\n\n    if (packet.qos !== 1) {\n      return this._emitError(new Error('Wrong subscribe header'))\n    }\n\n    packet.subscriptions = []\n\n    if (!this._parseMessageId()) { return }\n\n    // Properties mqtt 5\n    if (this.settings.protocolVersion === 5) {\n      const properties = this._parseProperties()\n      if (Object.getOwnPropertyNames(properties).length) {\n        packet.properties = properties\n      }\n    }\n\n    while (this._pos < packet.length) {\n      // Parse topic\n      topic = this._parseString()\n      if (topic === null) return this._emitError(new Error('Cannot parse topic'))\n      if (this._pos >= packet.length) return this._emitError(new Error('Malformed Subscribe Payload'))\n\n      options = this._parseByte()\n      qos = options & constants.SUBSCRIBE_OPTIONS_QOS_MASK\n      nl = ((options >> constants.SUBSCRIBE_OPTIONS_NL_SHIFT) & constants.SUBSCRIBE_OPTIONS_NL_MASK) !== 0\n      rap = ((options >> constants.SUBSCRIBE_OPTIONS_RAP_SHIFT) & constants.SUBSCRIBE_OPTIONS_RAP_MASK) !== 0\n      rh = (options >> constants.SUBSCRIBE_OPTIONS_RH_SHIFT) & constants.SUBSCRIBE_OPTIONS_RH_MASK\n\n      subscription = { topic, qos }\n\n      // mqtt 5 options\n      if (this.settings.protocolVersion === 5) {\n        subscription.nl = nl\n        subscription.rap = rap\n        subscription.rh = rh\n      } else if (this.settings.bridgeMode) {\n        subscription.rh = 0\n        subscription.rap = true\n        subscription.nl = true\n      }\n\n      // Push pair to subscriptions\n      debug('_parseSubscribe: push subscription `%s` to subscription', subscription)\n      packet.subscriptions.push(subscription)\n    }\n  }\n\n  _parseSuback () {\n    debug('_parseSuback')\n    const packet = this.packet\n    this.packet.granted = []\n\n    if (!this._parseMessageId()) { return }\n\n    // Properties mqtt 5\n    if (this.settings.protocolVersion === 5) {\n      const properties = this._parseProperties()\n      if (Object.getOwnPropertyNames(properties).length) {\n        packet.properties = properties\n      }\n    }\n\n    // Parse granted QoSes\n    while (this._pos < this.packet.length) {\n      this.packet.granted.push(this._list.readUInt8(this._pos++))\n    }\n  }\n\n  _parseUnsubscribe () {\n    debug('_parseUnsubscribe')\n    const packet = this.packet\n\n    packet.unsubscriptions = []\n\n    // Parse messageId\n    if (!this._parseMessageId()) { return }\n\n    // Properties mqtt 5\n    if (this.settings.protocolVersion === 5) {\n      const properties = this._parseProperties()\n      if (Object.getOwnPropertyNames(properties).length) {\n        packet.properties = properties\n      }\n    }\n\n    while (this._pos < packet.length) {\n      // Parse topic\n      const topic = this._parseString()\n      if (topic === null) return this._emitError(new Error('Cannot parse topic'))\n\n      // Push topic to unsubscriptions\n      debug('_parseUnsubscribe: push topic `%s` to unsubscriptions', topic)\n      packet.unsubscriptions.push(topic)\n    }\n  }\n\n  _parseUnsuback () {\n    debug('_parseUnsuback')\n    const packet = this.packet\n    if (!this._parseMessageId()) return this._emitError(new Error('Cannot parse messageId'))\n    // Properties mqtt 5\n    if (this.settings.protocolVersion === 5) {\n      const properties = this._parseProperties()\n      if (Object.getOwnPropertyNames(properties).length) {\n        packet.properties = properties\n      }\n      // Parse granted QoSes\n      packet.granted = []\n      while (this._pos < this.packet.length) {\n        this.packet.granted.push(this._list.readUInt8(this._pos++))\n      }\n    }\n  }\n\n  // parse packets like puback, pubrec, pubrel, pubcomp\n  _parseConfirmation () {\n    debug('_parseConfirmation: packet.cmd: `%s`', this.packet.cmd)\n    const packet = this.packet\n\n    this._parseMessageId()\n\n    if (this.settings.protocolVersion === 5) {\n      if (packet.length > 2) {\n        // response code\n        packet.reasonCode = this._parseByte()\n        debug('_parseConfirmation: packet.reasonCode `%d`', packet.reasonCode)\n      } else {\n        packet.reasonCode = 0\n      }\n\n      if (packet.length > 3) {\n        // properies mqtt 5\n        const properties = this._parseProperties()\n        if (Object.getOwnPropertyNames(properties).length) {\n          packet.properties = properties\n        }\n      }\n    }\n\n    return true\n  }\n\n  // parse disconnect packet\n  _parseDisconnect () {\n    const packet = this.packet\n    debug('_parseDisconnect')\n\n    if (this.settings.protocolVersion === 5) {\n      // response code\n      if (this._list.length > 0) {\n        packet.reasonCode = this._parseByte()\n      } else {\n        packet.reasonCode = 0\n      }\n      // properies mqtt 5\n      const properties = this._parseProperties()\n      if (Object.getOwnPropertyNames(properties).length) {\n        packet.properties = properties\n      }\n    }\n\n    debug('_parseDisconnect result: true')\n    return true\n  }\n\n  // parse auth packet\n  _parseAuth () {\n    debug('_parseAuth')\n    const packet = this.packet\n\n    if (this.settings.protocolVersion !== 5) {\n      return this._emitError(new Error('Not supported auth packet for this version MQTT'))\n    }\n\n    // response code\n    packet.reasonCode = this._parseByte()\n    // properies mqtt 5\n    const properties = this._parseProperties()\n    if (Object.getOwnPropertyNames(properties).length) {\n      packet.properties = properties\n    }\n\n    debug('_parseAuth: result: true')\n    return true\n  }\n\n  _parseMessageId () {\n    const packet = this.packet\n\n    packet.messageId = this._parseNum()\n\n    if (packet.messageId === null) {\n      this._emitError(new Error('Cannot parse messageId'))\n      return false\n    }\n\n    debug('_parseMessageId: packet.messageId %d', packet.messageId)\n    return true\n  }\n\n  _parseString (maybeBuffer) {\n    const length = this._parseNum()\n    const end = length + this._pos\n\n    if (length === -1 || end > this._list.length || end > this.packet.length) return null\n\n    const result = this._list.toString('utf8', this._pos, end)\n    this._pos += length\n    debug('_parseString: result: %s', result)\n    return result\n  }\n\n  _parseStringPair () {\n    debug('_parseStringPair')\n    return {\n      name: this._parseString(),\n      value: this._parseString()\n    }\n  }\n\n  _parseBuffer () {\n    const length = this._parseNum()\n    const end = length + this._pos\n\n    if (length === -1 || end > this._list.length || end > this.packet.length) return null\n\n    const result = this._list.slice(this._pos, end)\n\n    this._pos += length\n    debug('_parseBuffer: result: %o', result)\n    return result\n  }\n\n  _parseNum () {\n    if (this._list.length - this._pos < 2) return -1\n\n    const result = this._list.readUInt16BE(this._pos)\n    this._pos += 2\n    debug('_parseNum: result: %s', result)\n    return result\n  }\n\n  _parse4ByteNum () {\n    if (this._list.length - this._pos < 4) return -1\n\n    const result = this._list.readUInt32BE(this._pos)\n    this._pos += 4\n    debug('_parse4ByteNum: result: %s', result)\n    return result\n  }\n\n  _parseVarByteNum (fullInfoFlag) {\n    debug('_parseVarByteNum')\n    const maxBytes = 4\n    let bytes = 0\n    let mul = 1\n    let value = 0\n    let result = false\n    let current\n    const padding = this._pos ? this._pos : 0\n\n    while (bytes < maxBytes && (padding + bytes) < this._list.length) {\n      current = this._list.readUInt8(padding + bytes++)\n      value += mul * (current & constants.VARBYTEINT_MASK)\n      mul *= 0x80\n\n      if ((current & constants.VARBYTEINT_FIN_MASK) === 0) {\n        result = true\n        break\n      }\n      if (this._list.length <= bytes) {\n        break\n      }\n    }\n\n    if (!result && bytes === maxBytes && this._list.length >= bytes) {\n      this._emitError(new Error('Invalid variable byte integer'))\n    }\n\n    if (padding) {\n      this._pos += bytes\n    }\n\n    result = result\n      ? fullInfoFlag ? {\n        bytes,\n        value\n      } : value\n      : false\n\n    debug('_parseVarByteNum: result: %o', result)\n    return result\n  }\n\n  _parseByte () {\n    let result\n    if (this._pos < this._list.length) {\n      result = this._list.readUInt8(this._pos)\n      this._pos++\n    }\n    debug('_parseByte: result: %o', result)\n    return result\n  }\n\n  _parseByType (type) {\n    debug('_parseByType: type: %s', type)\n    switch (type) {\n      case 'byte': {\n        return this._parseByte() !== 0\n      }\n      case 'int8': {\n        return this._parseByte()\n      }\n      case 'int16': {\n        return this._parseNum()\n      }\n      case 'int32': {\n        return this._parse4ByteNum()\n      }\n      case 'var': {\n        return this._parseVarByteNum()\n      }\n      case 'string': {\n        return this._parseString()\n      }\n      case 'pair': {\n        return this._parseStringPair()\n      }\n      case 'binary': {\n        return this._parseBuffer()\n      }\n    }\n  }\n\n  _parseProperties () {\n    debug('_parseProperties')\n    const length = this._parseVarByteNum()\n    const start = this._pos\n    const end = start + length\n    const result = {}\n    while (this._pos < end) {\n      const type = this._parseByte()\n      if (!type) {\n        this._emitError(new Error('Cannot parse property code type'))\n        return false\n      }\n      const name = constants.propertiesCodes[type]\n      if (!name) {\n        this._emitError(new Error('Unknown property'))\n        return false\n      }\n      // user properties process\n      if (name === 'userProperties') {\n        if (!result[name]) {\n          result[name] = Object.create(null)\n        }\n        const currentUserProperty = this._parseByType(constants.propertiesTypes[name])\n        if (result[name][currentUserProperty.name]) {\n          if (Array.isArray(result[name][currentUserProperty.name])) {\n            result[name][currentUserProperty.name].push(currentUserProperty.value)\n          } else {\n            const currentValue = result[name][currentUserProperty.name]\n            result[name][currentUserProperty.name] = [currentValue]\n            result[name][currentUserProperty.name].push(currentUserProperty.value)\n          }\n        } else {\n          result[name][currentUserProperty.name] = currentUserProperty.value\n        }\n        continue\n      }\n      if (result[name]) {\n        if (Array.isArray(result[name])) {\n          result[name].push(this._parseByType(constants.propertiesTypes[name]))\n        } else {\n          result[name] = [result[name]]\n          result[name].push(this._parseByType(constants.propertiesTypes[name]))\n        }\n      } else {\n        result[name] = this._parseByType(constants.propertiesTypes[name])\n      }\n    }\n    return result\n  }\n\n  _newPacket () {\n    debug('_newPacket')\n    if (this.packet) {\n      this._list.consume(this.packet.length)\n      debug('_newPacket: parser emit packet: packet.cmd: %s, packet.payload: %s, packet.length: %d', this.packet.cmd, this.packet.payload, this.packet.length)\n      this.emit('packet', this.packet)\n    }\n    debug('_newPacket: new packet')\n    this.packet = new Packet()\n\n    this._pos = 0\n\n    return true\n  }\n\n  _emitError (err) {\n    debug('_emitError')\n    this.error = err\n    this.emit('error', err)\n  }\n}\n\nmodule.exports = Parser\n\n},{\"./constants\":22,\"./packet\":26,\"bl\":12,\"debug\":15,\"events\":19}],28:[function(require,module,exports){\n(function (Buffer){(function (){\nconst protocol = require('./constants')\nconst empty = Buffer.allocUnsafe(0)\nconst zeroBuf = Buffer.from([0])\nconst numbers = require('./numbers')\nconst nextTick = require('process-nextick-args').nextTick\nconst debug = require('debug')('mqtt-packet:writeToStream')\n\nconst numCache = numbers.cache\nconst generateNumber = numbers.generateNumber\nconst generateCache = numbers.generateCache\nconst genBufVariableByteInt = numbers.genBufVariableByteInt\nconst generate4ByteBuffer = numbers.generate4ByteBuffer\nlet writeNumber = writeNumberCached\nlet toGenerate = true\n\nfunction generate (packet, stream, opts) {\n  debug('generate called')\n  if (stream.cork) {\n    stream.cork()\n    nextTick(uncork, stream)\n  }\n\n  if (toGenerate) {\n    toGenerate = false\n    generateCache()\n  }\n  debug('generate: packet.cmd: %s', packet.cmd)\n  switch (packet.cmd) {\n    case 'connect':\n      return connect(packet, stream, opts)\n    case 'connack':\n      return connack(packet, stream, opts)\n    case 'publish':\n      return publish(packet, stream, opts)\n    case 'puback':\n    case 'pubrec':\n    case 'pubrel':\n    case 'pubcomp':\n      return confirmation(packet, stream, opts)\n    case 'subscribe':\n      return subscribe(packet, stream, opts)\n    case 'suback':\n      return suback(packet, stream, opts)\n    case 'unsubscribe':\n      return unsubscribe(packet, stream, opts)\n    case 'unsuback':\n      return unsuback(packet, stream, opts)\n    case 'pingreq':\n    case 'pingresp':\n      return emptyPacket(packet, stream, opts)\n    case 'disconnect':\n      return disconnect(packet, stream, opts)\n    case 'auth':\n      return auth(packet, stream, opts)\n    default:\n      stream.emit('error', new Error('Unknown command'))\n      return false\n  }\n}\n/**\n * Controls numbers cache.\n * Set to \"false\" to allocate buffers on-the-flight instead of pre-generated cache\n */\nObject.defineProperty(generate, 'cacheNumbers', {\n  get () {\n    return writeNumber === writeNumberCached\n  },\n  set (value) {\n    if (value) {\n      if (!numCache || Object.keys(numCache).length === 0) toGenerate = true\n      writeNumber = writeNumberCached\n    } else {\n      toGenerate = false\n      writeNumber = writeNumberGenerated\n    }\n  }\n})\n\nfunction uncork (stream) {\n  stream.uncork()\n}\n\nfunction connect (packet, stream, opts) {\n  const settings = packet || {}\n  const protocolId = settings.protocolId || 'MQTT'\n  let protocolVersion = settings.protocolVersion || 4\n  const will = settings.will\n  let clean = settings.clean\n  const keepalive = settings.keepalive || 0\n  const clientId = settings.clientId || ''\n  const username = settings.username\n  const password = settings.password\n  /* mqtt5 new oprions */\n  const properties = settings.properties\n\n  if (clean === undefined) clean = true\n\n  let length = 0\n\n  // Must be a string and non-falsy\n  if (!protocolId ||\n     (typeof protocolId !== 'string' && !Buffer.isBuffer(protocolId))) {\n    stream.emit('error', new Error('Invalid protocolId'))\n    return false\n  } else length += protocolId.length + 2\n\n  // Must be 3 or 4 or 5\n  if (protocolVersion !== 3 && protocolVersion !== 4 && protocolVersion !== 5) {\n    stream.emit('error', new Error('Invalid protocol version'))\n    return false\n  } else length += 1\n\n  // ClientId might be omitted in 3.1.1 and 5, but only if cleanSession is set to 1\n  if ((typeof clientId === 'string' || Buffer.isBuffer(clientId)) &&\n     (clientId || protocolVersion >= 4) && (clientId || clean)) {\n    length += Buffer.byteLength(clientId) + 2\n  } else {\n    if (protocolVersion < 4) {\n      stream.emit('error', new Error('clientId must be supplied before 3.1.1'))\n      return false\n    }\n    if ((clean * 1) === 0) {\n      stream.emit('error', new Error('clientId must be given if cleanSession set to 0'))\n      return false\n    }\n  }\n\n  // Must be a two byte number\n  if (typeof keepalive !== 'number' ||\n      keepalive < 0 ||\n      keepalive > 65535 ||\n      keepalive % 1 !== 0) {\n    stream.emit('error', new Error('Invalid keepalive'))\n    return false\n  } else length += 2\n\n  // Connect flags\n  length += 1\n\n  // Properties\n  if (protocolVersion === 5) {\n    var propertiesData = getProperties(stream, properties)\n    if (!propertiesData) { return false }\n    length += propertiesData.length\n  }\n\n  // If will exists...\n  if (will) {\n    // It must be an object\n    if (typeof will !== 'object') {\n      stream.emit('error', new Error('Invalid will'))\n      return false\n    }\n    // It must have topic typeof string\n    if (!will.topic || typeof will.topic !== 'string') {\n      stream.emit('error', new Error('Invalid will topic'))\n      return false\n    } else {\n      length += Buffer.byteLength(will.topic) + 2\n    }\n\n    // Payload\n    length += 2 // payload length\n    if (will.payload) {\n      if (will.payload.length >= 0) {\n        if (typeof will.payload === 'string') {\n          length += Buffer.byteLength(will.payload)\n        } else {\n          length += will.payload.length\n        }\n      } else {\n        stream.emit('error', new Error('Invalid will payload'))\n        return false\n      }\n    }\n    // will properties\n    var willProperties = {}\n    if (protocolVersion === 5) {\n      willProperties = getProperties(stream, will.properties)\n      if (!willProperties) { return false }\n      length += willProperties.length\n    }\n  }\n\n  // Username\n  let providedUsername = false\n  if (username != null) {\n    if (isStringOrBuffer(username)) {\n      providedUsername = true\n      length += Buffer.byteLength(username) + 2\n    } else {\n      stream.emit('error', new Error('Invalid username'))\n      return false\n    }\n  }\n\n  // Password\n  if (password != null) {\n    if (!providedUsername) {\n      stream.emit('error', new Error('Username is required to use password'))\n      return false\n    }\n\n    if (isStringOrBuffer(password)) {\n      length += byteLength(password) + 2\n    } else {\n      stream.emit('error', new Error('Invalid password'))\n      return false\n    }\n  }\n\n  // Generate header\n  stream.write(protocol.CONNECT_HEADER)\n\n  // Generate length\n  writeVarByteInt(stream, length)\n\n  // Generate protocol ID\n  writeStringOrBuffer(stream, protocolId)\n\n  if (settings.bridgeMode) {\n    protocolVersion += 128\n  }\n\n  stream.write(\n    protocolVersion === 131\n      ? protocol.VERSION131\n      : protocolVersion === 132\n        ? protocol.VERSION132\n        : protocolVersion === 4\n          ? protocol.VERSION4\n          : protocolVersion === 5\n            ? protocol.VERSION5\n            : protocol.VERSION3\n  )\n\n  // Connect flags\n  let flags = 0\n  flags |= (username != null) ? protocol.USERNAME_MASK : 0\n  flags |= (password != null) ? protocol.PASSWORD_MASK : 0\n  flags |= (will && will.retain) ? protocol.WILL_RETAIN_MASK : 0\n  flags |= (will && will.qos) ? will.qos << protocol.WILL_QOS_SHIFT : 0\n  flags |= will ? protocol.WILL_FLAG_MASK : 0\n  flags |= clean ? protocol.CLEAN_SESSION_MASK : 0\n\n  stream.write(Buffer.from([flags]))\n\n  // Keepalive\n  writeNumber(stream, keepalive)\n\n  // Properties\n  if (protocolVersion === 5) {\n    propertiesData.write()\n  }\n\n  // Client ID\n  writeStringOrBuffer(stream, clientId)\n\n  // Will\n  if (will) {\n    if (protocolVersion === 5) {\n      willProperties.write()\n    }\n    writeString(stream, will.topic)\n    writeStringOrBuffer(stream, will.payload)\n  }\n\n  // Username and password\n  if (username != null) {\n    writeStringOrBuffer(stream, username)\n  }\n  if (password != null) {\n    writeStringOrBuffer(stream, password)\n  }\n  // This is a small packet that happens only once on a stream\n  // We assume the stream is always free to receive more data after this\n  return true\n}\n\nfunction connack (packet, stream, opts) {\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const rc = version === 5 ? settings.reasonCode : settings.returnCode\n  const properties = settings.properties\n  let length = 2 // length of rc and sessionHeader\n\n  // Check return code\n  if (typeof rc !== 'number') {\n    stream.emit('error', new Error('Invalid return code'))\n    return false\n  }\n  // mqtt5 properties\n  let propertiesData = null\n  if (version === 5) {\n    propertiesData = getProperties(stream, properties)\n    if (!propertiesData) { return false }\n    length += propertiesData.length\n  }\n\n  stream.write(protocol.CONNACK_HEADER)\n  // length\n  writeVarByteInt(stream, length)\n  stream.write(settings.sessionPresent ? protocol.SESSIONPRESENT_HEADER : zeroBuf)\n\n  stream.write(Buffer.from([rc]))\n  if (propertiesData != null) {\n    propertiesData.write()\n  }\n  return true\n}\n\nfunction publish (packet, stream, opts) {\n  debug('publish: packet: %o', packet)\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const qos = settings.qos || 0\n  const retain = settings.retain ? protocol.RETAIN_MASK : 0\n  const topic = settings.topic\n  const payload = settings.payload || empty\n  const id = settings.messageId\n  const properties = settings.properties\n\n  let length = 0\n\n  // Topic must be a non-empty string or Buffer\n  if (typeof topic === 'string') length += Buffer.byteLength(topic) + 2\n  else if (Buffer.isBuffer(topic)) length += topic.length + 2\n  else {\n    stream.emit('error', new Error('Invalid topic'))\n    return false\n  }\n\n  // Get the payload length\n  if (!Buffer.isBuffer(payload)) length += Buffer.byteLength(payload)\n  else length += payload.length\n\n  // Message ID must a number if qos > 0\n  if (qos && typeof id !== 'number') {\n    stream.emit('error', new Error('Invalid messageId'))\n    return false\n  } else if (qos) length += 2\n\n  // mqtt5 properties\n  let propertiesData = null\n  if (version === 5) {\n    propertiesData = getProperties(stream, properties)\n    if (!propertiesData) { return false }\n    length += propertiesData.length\n  }\n\n  // Header\n  stream.write(protocol.PUBLISH_HEADER[qos][settings.dup ? 1 : 0][retain ? 1 : 0])\n\n  // Remaining length\n  writeVarByteInt(stream, length)\n\n  // Topic\n  writeNumber(stream, byteLength(topic))\n  stream.write(topic)\n\n  // Message ID\n  if (qos > 0) writeNumber(stream, id)\n\n  // Properties\n  if (propertiesData != null) {\n    propertiesData.write()\n  }\n\n  // Payload\n  debug('publish: payload: %o', payload)\n  return stream.write(payload)\n}\n\n/* Puback, pubrec, pubrel and pubcomp */\nfunction confirmation (packet, stream, opts) {\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const type = settings.cmd || 'puback'\n  const id = settings.messageId\n  const dup = (settings.dup && type === 'pubrel') ? protocol.DUP_MASK : 0\n  let qos = 0\n  const reasonCode = settings.reasonCode\n  const properties = settings.properties\n  let length = version === 5 ? 3 : 2\n\n  if (type === 'pubrel') qos = 1\n\n  // Check message ID\n  if (typeof id !== 'number') {\n    stream.emit('error', new Error('Invalid messageId'))\n    return false\n  }\n\n  // properies mqtt 5\n  let propertiesData = null\n  if (version === 5) {\n    // Confirm should not add empty property length with no properties (rfc 3.4.2.2.1)\n    if (typeof properties === 'object') {\n      propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length)\n      if (!propertiesData) { return false }\n      length += propertiesData.length\n    }\n  }\n\n  // Header\n  stream.write(protocol.ACKS[type][qos][dup][0])\n\n  // Length\n  writeVarByteInt(stream, length)\n\n  // Message ID\n  writeNumber(stream, id)\n\n  // reason code in header\n  if (version === 5) {\n    stream.write(Buffer.from([reasonCode]))\n  }\n\n  // properies mqtt 5\n  if (propertiesData !== null) {\n    propertiesData.write()\n  }\n  return true\n}\n\nfunction subscribe (packet, stream, opts) {\n  debug('subscribe: packet: ')\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const dup = settings.dup ? protocol.DUP_MASK : 0\n  const id = settings.messageId\n  const subs = settings.subscriptions\n  const properties = settings.properties\n\n  let length = 0\n\n  // Check message ID\n  if (typeof id !== 'number') {\n    stream.emit('error', new Error('Invalid messageId'))\n    return false\n  } else length += 2\n\n  // properies mqtt 5\n  let propertiesData = null\n  if (version === 5) {\n    propertiesData = getProperties(stream, properties)\n    if (!propertiesData) { return false }\n    length += propertiesData.length\n  }\n\n  // Check subscriptions\n  if (typeof subs === 'object' && subs.length) {\n    for (let i = 0; i < subs.length; i += 1) {\n      const itopic = subs[i].topic\n      const iqos = subs[i].qos\n\n      if (typeof itopic !== 'string') {\n        stream.emit('error', new Error('Invalid subscriptions - invalid topic'))\n        return false\n      }\n      if (typeof iqos !== 'number') {\n        stream.emit('error', new Error('Invalid subscriptions - invalid qos'))\n        return false\n      }\n\n      if (version === 5) {\n        const nl = subs[i].nl || false\n        if (typeof nl !== 'boolean') {\n          stream.emit('error', new Error('Invalid subscriptions - invalid No Local'))\n          return false\n        }\n        const rap = subs[i].rap || false\n        if (typeof rap !== 'boolean') {\n          stream.emit('error', new Error('Invalid subscriptions - invalid Retain as Published'))\n          return false\n        }\n        const rh = subs[i].rh || 0\n        if (typeof rh !== 'number' || rh > 2) {\n          stream.emit('error', new Error('Invalid subscriptions - invalid Retain Handling'))\n          return false\n        }\n      }\n\n      length += Buffer.byteLength(itopic) + 2 + 1\n    }\n  } else {\n    stream.emit('error', new Error('Invalid subscriptions'))\n    return false\n  }\n\n  // Generate header\n  debug('subscribe: writing to stream: %o', protocol.SUBSCRIBE_HEADER)\n  stream.write(protocol.SUBSCRIBE_HEADER[1][dup ? 1 : 0][0])\n\n  // Generate length\n  writeVarByteInt(stream, length)\n\n  // Generate message ID\n  writeNumber(stream, id)\n\n  // properies mqtt 5\n  if (propertiesData !== null) {\n    propertiesData.write()\n  }\n\n  let result = true\n\n  // Generate subs\n  for (const sub of subs) {\n    const jtopic = sub.topic\n    const jqos = sub.qos\n    const jnl = +sub.nl\n    const jrap = +sub.rap\n    const jrh = sub.rh\n    let joptions\n\n    // Write topic string\n    writeString(stream, jtopic)\n\n    // options process\n    joptions = protocol.SUBSCRIBE_OPTIONS_QOS[jqos]\n    if (version === 5) {\n      joptions |= jnl ? protocol.SUBSCRIBE_OPTIONS_NL : 0\n      joptions |= jrap ? protocol.SUBSCRIBE_OPTIONS_RAP : 0\n      joptions |= jrh ? protocol.SUBSCRIBE_OPTIONS_RH[jrh] : 0\n    }\n    // Write options\n    result = stream.write(Buffer.from([joptions]))\n  }\n\n  return result\n}\n\nfunction suback (packet, stream, opts) {\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const id = settings.messageId\n  const granted = settings.granted\n  const properties = settings.properties\n  let length = 0\n\n  // Check message ID\n  if (typeof id !== 'number') {\n    stream.emit('error', new Error('Invalid messageId'))\n    return false\n  } else length += 2\n\n  // Check granted qos vector\n  if (typeof granted === 'object' && granted.length) {\n    for (let i = 0; i < granted.length; i += 1) {\n      if (typeof granted[i] !== 'number') {\n        stream.emit('error', new Error('Invalid qos vector'))\n        return false\n      }\n      length += 1\n    }\n  } else {\n    stream.emit('error', new Error('Invalid qos vector'))\n    return false\n  }\n\n  // properies mqtt 5\n  let propertiesData = null\n  if (version === 5) {\n    propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length)\n    if (!propertiesData) { return false }\n    length += propertiesData.length\n  }\n\n  // header\n  stream.write(protocol.SUBACK_HEADER)\n\n  // Length\n  writeVarByteInt(stream, length)\n\n  // Message ID\n  writeNumber(stream, id)\n\n  // properies mqtt 5\n  if (propertiesData !== null) {\n    propertiesData.write()\n  }\n\n  return stream.write(Buffer.from(granted))\n}\n\nfunction unsubscribe (packet, stream, opts) {\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const id = settings.messageId\n  const dup = settings.dup ? protocol.DUP_MASK : 0\n  const unsubs = settings.unsubscriptions\n  const properties = settings.properties\n\n  let length = 0\n\n  // Check message ID\n  if (typeof id !== 'number') {\n    stream.emit('error', new Error('Invalid messageId'))\n    return false\n  } else {\n    length += 2\n  }\n  // Check unsubs\n  if (typeof unsubs === 'object' && unsubs.length) {\n    for (let i = 0; i < unsubs.length; i += 1) {\n      if (typeof unsubs[i] !== 'string') {\n        stream.emit('error', new Error('Invalid unsubscriptions'))\n        return false\n      }\n      length += Buffer.byteLength(unsubs[i]) + 2\n    }\n  } else {\n    stream.emit('error', new Error('Invalid unsubscriptions'))\n    return false\n  }\n  // properies mqtt 5\n  let propertiesData = null\n  if (version === 5) {\n    propertiesData = getProperties(stream, properties)\n    if (!propertiesData) { return false }\n    length += propertiesData.length\n  }\n\n  // Header\n  stream.write(protocol.UNSUBSCRIBE_HEADER[1][dup ? 1 : 0][0])\n\n  // Length\n  writeVarByteInt(stream, length)\n\n  // Message ID\n  writeNumber(stream, id)\n\n  // properies mqtt 5\n  if (propertiesData !== null) {\n    propertiesData.write()\n  }\n\n  // Unsubs\n  let result = true\n  for (let j = 0; j < unsubs.length; j++) {\n    result = writeString(stream, unsubs[j])\n  }\n\n  return result\n}\n\nfunction unsuback (packet, stream, opts) {\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const id = settings.messageId\n  const dup = settings.dup ? protocol.DUP_MASK : 0\n  const granted = settings.granted\n  const properties = settings.properties\n  const type = settings.cmd\n  const qos = 0\n\n  let length = 2\n\n  // Check message ID\n  if (typeof id !== 'number') {\n    stream.emit('error', new Error('Invalid messageId'))\n    return false\n  }\n\n  // Check granted\n  if (version === 5) {\n    if (typeof granted === 'object' && granted.length) {\n      for (let i = 0; i < granted.length; i += 1) {\n        if (typeof granted[i] !== 'number') {\n          stream.emit('error', new Error('Invalid qos vector'))\n          return false\n        }\n        length += 1\n      }\n    } else {\n      stream.emit('error', new Error('Invalid qos vector'))\n      return false\n    }\n  }\n\n  // properies mqtt 5\n  let propertiesData = null\n  if (version === 5) {\n    propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length)\n    if (!propertiesData) { return false }\n    length += propertiesData.length\n  }\n\n  // Header\n  stream.write(protocol.ACKS[type][qos][dup][0])\n\n  // Length\n  writeVarByteInt(stream, length)\n\n  // Message ID\n  writeNumber(stream, id)\n\n  // properies mqtt 5\n  if (propertiesData !== null) {\n    propertiesData.write()\n  }\n\n  // payload\n  if (version === 5) {\n    stream.write(Buffer.from(granted))\n  }\n  return true\n}\n\nfunction emptyPacket (packet, stream, opts) {\n  return stream.write(protocol.EMPTY[packet.cmd])\n}\n\nfunction disconnect (packet, stream, opts) {\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const reasonCode = settings.reasonCode\n  const properties = settings.properties\n  let length = version === 5 ? 1 : 0\n\n  // properies mqtt 5\n  let propertiesData = null\n  if (version === 5) {\n    propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length)\n    if (!propertiesData) { return false }\n    length += propertiesData.length\n  }\n\n  // Header\n  stream.write(Buffer.from([protocol.codes.disconnect << 4]))\n\n  // Length\n  writeVarByteInt(stream, length)\n\n  // reason code in header\n  if (version === 5) {\n    stream.write(Buffer.from([reasonCode]))\n  }\n\n  // properies mqtt 5\n  if (propertiesData !== null) {\n    propertiesData.write()\n  }\n\n  return true\n}\n\nfunction auth (packet, stream, opts) {\n  const version = opts ? opts.protocolVersion : 4\n  const settings = packet || {}\n  const reasonCode = settings.reasonCode\n  const properties = settings.properties\n  let length = version === 5 ? 1 : 0\n\n  if (version !== 5) stream.emit('error', new Error('Invalid mqtt version for auth packet'))\n\n  // properies mqtt 5\n  const propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length)\n  if (!propertiesData) { return false }\n  length += propertiesData.length\n\n  // Header\n  stream.write(Buffer.from([protocol.codes.auth << 4]))\n\n  // Length\n  writeVarByteInt(stream, length)\n\n  // reason code in header\n  stream.write(Buffer.from([reasonCode]))\n\n  // properies mqtt 5\n  if (propertiesData !== null) {\n    propertiesData.write()\n  }\n  return true\n}\n\n/**\n * writeVarByteInt - write an MQTT style variable byte integer to the buffer\n *\n * @param <Buffer> buffer - destination\n * @param <Number> pos - offset\n * @param <Number> length - length (>0)\n * @returns <Number> number of bytes written\n *\n * @api private\n */\n\nconst varByteIntCache = {}\nfunction writeVarByteInt (stream, num) {\n  if (num > protocol.VARBYTEINT_MAX) {\n    stream.emit('error', new Error(`Invalid variable byte integer: ${num}`))\n    return false\n  }\n\n  let buffer = varByteIntCache[num]\n\n  if (!buffer) {\n    buffer = genBufVariableByteInt(num)\n    if (num < 16384) varByteIntCache[num] = buffer\n  }\n  debug('writeVarByteInt: writing to stream: %o', buffer)\n  return stream.write(buffer)\n}\n\n/**\n * writeString - write a utf8 string to the buffer\n *\n * @param <Buffer> buffer - destination\n * @param <Number> pos - offset\n * @param <String> string - string to write\n * @return <Number> number of bytes written\n *\n * @api private\n */\n\nfunction writeString (stream, string) {\n  const strlen = Buffer.byteLength(string)\n  writeNumber(stream, strlen)\n\n  debug('writeString: %s', string)\n  return stream.write(string, 'utf8')\n}\n\n/**\n * writeStringPair - write a utf8 string pairs to the buffer\n *\n * @param <Buffer> buffer - destination\n * @param <String> name - string name to write\n * @param <String> value - string value to write\n * @return <Number> number of bytes written\n *\n * @api private\n */\nfunction writeStringPair (stream, name, value) {\n  writeString(stream, name)\n  writeString(stream, value)\n}\n\n/**\n * writeNumber - write a two byte number to the buffer\n *\n * @param <Buffer> buffer - destination\n * @param <Number> pos - offset\n * @param <String> number - number to write\n * @return <Number> number of bytes written\n *\n * @api private\n */\nfunction writeNumberCached (stream, number) {\n  debug('writeNumberCached: number: %d', number)\n  debug('writeNumberCached: %o', numCache[number])\n  return stream.write(numCache[number])\n}\nfunction writeNumberGenerated (stream, number) {\n  const generatedNumber = generateNumber(number)\n  debug('writeNumberGenerated: %o', generatedNumber)\n  return stream.write(generatedNumber)\n}\nfunction write4ByteNumber (stream, number) {\n  const generated4ByteBuffer = generate4ByteBuffer(number)\n  debug('write4ByteNumber: %o', generated4ByteBuffer)\n  return stream.write(generated4ByteBuffer)\n}\n/**\n * writeStringOrBuffer - write a String or Buffer with the its length prefix\n *\n * @param <Buffer> buffer - destination\n * @param <Number> pos - offset\n * @param <String> toWrite - String or Buffer\n * @return <Number> number of bytes written\n */\nfunction writeStringOrBuffer (stream, toWrite) {\n  if (typeof toWrite === 'string') {\n    writeString(stream, toWrite)\n  } else if (toWrite) {\n    writeNumber(stream, toWrite.length)\n    stream.write(toWrite)\n  } else writeNumber(stream, 0)\n}\n\nfunction getProperties (stream, properties) {\n  /* connect properties */\n  if (typeof properties !== 'object' || properties.length != null) {\n    return {\n      length: 1,\n      write () {\n        writeProperties(stream, {}, 0)\n      }\n    }\n  }\n  let propertiesLength = 0\n  function getLengthProperty (name, value) {\n    const type = protocol.propertiesTypes[name]\n    let length = 0\n    switch (type) {\n      case 'byte': {\n        if (typeof value !== 'boolean') {\n          stream.emit('error', new Error(`Invalid ${name}: ${value}`))\n          return false\n        }\n        length += 1 + 1\n        break\n      }\n      case 'int8': {\n        if (typeof value !== 'number' || value < 0 || value > 0xff) {\n          stream.emit('error', new Error(`Invalid ${name}: ${value}`))\n          return false\n        }\n        length += 1 + 1\n        break\n      }\n      case 'binary': {\n        if (value && value === null) {\n          stream.emit('error', new Error(`Invalid ${name}: ${value}`))\n          return false\n        }\n        length += 1 + Buffer.byteLength(value) + 2\n        break\n      }\n      case 'int16': {\n        if (typeof value !== 'number' || value < 0 || value > 0xffff) {\n          stream.emit('error', new Error(`Invalid ${name}: ${value}`))\n          return false\n        }\n        length += 1 + 2\n        break\n      }\n      case 'int32': {\n        if (typeof value !== 'number' || value < 0 || value > 0xffffffff) {\n          stream.emit('error', new Error(`Invalid ${name}: ${value}`))\n          return false\n        }\n        length += 1 + 4\n        break\n      }\n      case 'var': {\n        // var byte integer is max 24 bits packed in 32 bits\n        if (typeof value !== 'number' || value < 0 || value > 0x0fffffff) {\n          stream.emit('error', new Error(`Invalid ${name}: ${value}`))\n          return false\n        }\n        length += 1 + Buffer.byteLength(genBufVariableByteInt(value))\n        break\n      }\n      case 'string': {\n        if (typeof value !== 'string') {\n          stream.emit('error', new Error(`Invalid ${name}: ${value}`))\n          return false\n        }\n        length += 1 + 2 + Buffer.byteLength(value.toString())\n        break\n      }\n      case 'pair': {\n        if (typeof value !== 'object') {\n          stream.emit('error', new Error(`Invalid ${name}: ${value}`))\n          return false\n        }\n        length += Object.getOwnPropertyNames(value).reduce((result, name) => {\n          const currentValue = value[name]\n          if (Array.isArray(currentValue)) {\n            result += currentValue.reduce((currentLength, value) => {\n              currentLength += 1 + 2 + Buffer.byteLength(name.toString()) + 2 + Buffer.byteLength(value.toString())\n              return currentLength\n            }, 0)\n          } else {\n            result += 1 + 2 + Buffer.byteLength(name.toString()) + 2 + Buffer.byteLength(value[name].toString())\n          }\n          return result\n        }, 0)\n        break\n      }\n      default: {\n        stream.emit('error', new Error(`Invalid property ${name}: ${value}`))\n        return false\n      }\n    }\n    return length\n  }\n  if (properties) {\n    for (const propName in properties) {\n      let propLength = 0\n      let propValueLength = 0\n      const propValue = properties[propName]\n      if (Array.isArray(propValue)) {\n        for (let valueIndex = 0; valueIndex < propValue.length; valueIndex++) {\n          propValueLength = getLengthProperty(propName, propValue[valueIndex])\n          if (!propValueLength) { return false }\n          propLength += propValueLength\n        }\n      } else {\n        propValueLength = getLengthProperty(propName, propValue)\n        if (!propValueLength) { return false }\n        propLength = propValueLength\n      }\n      if (!propLength) return false\n      propertiesLength += propLength\n    }\n  }\n  const propertiesLengthLength = Buffer.byteLength(genBufVariableByteInt(propertiesLength))\n\n  return {\n    length: propertiesLengthLength + propertiesLength,\n    write () {\n      writeProperties(stream, properties, propertiesLength)\n    }\n  }\n}\n\nfunction getPropertiesByMaximumPacketSize (stream, properties, opts, length) {\n  const mayEmptyProps = ['reasonString', 'userProperties']\n  const maximumPacketSize = opts && opts.properties && opts.properties.maximumPacketSize ? opts.properties.maximumPacketSize : 0\n\n  let propertiesData = getProperties(stream, properties)\n  if (maximumPacketSize) {\n    while (length + propertiesData.length > maximumPacketSize) {\n      const currentMayEmptyProp = mayEmptyProps.shift()\n      if (currentMayEmptyProp && properties[currentMayEmptyProp]) {\n        delete properties[currentMayEmptyProp]\n        propertiesData = getProperties(stream, properties)\n      } else {\n        return false\n      }\n    }\n  }\n  return propertiesData\n}\n\nfunction writeProperty (stream, propName, value) {\n  const type = protocol.propertiesTypes[propName]\n  switch (type) {\n    case 'byte': {\n      stream.write(Buffer.from([protocol.properties[propName]]))\n      stream.write(Buffer.from([+value]))\n      break\n    }\n    case 'int8': {\n      stream.write(Buffer.from([protocol.properties[propName]]))\n      stream.write(Buffer.from([value]))\n      break\n    }\n    case 'binary': {\n      stream.write(Buffer.from([protocol.properties[propName]]))\n      writeStringOrBuffer(stream, value)\n      break\n    }\n    case 'int16': {\n      stream.write(Buffer.from([protocol.properties[propName]]))\n      writeNumber(stream, value)\n      break\n    }\n    case 'int32': {\n      stream.write(Buffer.from([protocol.properties[propName]]))\n      write4ByteNumber(stream, value)\n      break\n    }\n    case 'var': {\n      stream.write(Buffer.from([protocol.properties[propName]]))\n      writeVarByteInt(stream, value)\n      break\n    }\n    case 'string': {\n      stream.write(Buffer.from([protocol.properties[propName]]))\n      writeString(stream, value)\n      break\n    }\n    case 'pair': {\n      Object.getOwnPropertyNames(value).forEach(name => {\n        const currentValue = value[name]\n        if (Array.isArray(currentValue)) {\n          currentValue.forEach(value => {\n            stream.write(Buffer.from([protocol.properties[propName]]))\n            writeStringPair(stream, name.toString(), value.toString())\n          })\n        } else {\n          stream.write(Buffer.from([protocol.properties[propName]]))\n          writeStringPair(stream, name.toString(), currentValue.toString())\n        }\n      })\n      break\n    }\n    default: {\n      stream.emit('error', new Error(`Invalid property ${propName} value: ${value}`))\n      return false\n    }\n  }\n}\n\nfunction writeProperties (stream, properties, propertiesLength) {\n  /* write properties to stream */\n  writeVarByteInt(stream, propertiesLength)\n  for (const propName in properties) {\n    if (Object.prototype.hasOwnProperty.call(properties, propName) && properties[propName] !== null) {\n      const value = properties[propName]\n      if (Array.isArray(value)) {\n        for (let valueIndex = 0; valueIndex < value.length; valueIndex++) {\n          writeProperty(stream, propName, value[valueIndex])\n        }\n      } else {\n        writeProperty(stream, propName, value)\n      }\n    }\n  }\n}\n\nfunction byteLength (bufOrString) {\n  if (!bufOrString) return 0\n  else if (bufOrString instanceof Buffer) return bufOrString.length\n  else return Buffer.byteLength(bufOrString)\n}\n\nfunction isStringOrBuffer (field) {\n  return typeof field === 'string' || field instanceof Buffer\n}\n\nmodule.exports = generate\n\n}).call(this)}).call(this,require(\"buffer\").Buffer)\n},{\"./constants\":22,\"./numbers\":25,\"buffer\":14,\"debug\":15,\"process-nextick-args\":31}],29:[function(require,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n},{}],30:[function(require,module,exports){\nvar wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n  Object.defineProperty(Function.prototype, 'once', {\n    value: function () {\n      return once(this)\n    },\n    configurable: true\n  })\n\n  Object.defineProperty(Function.prototype, 'onceStrict', {\n    value: function () {\n      return onceStrict(this)\n    },\n    configurable: true\n  })\n})\n\nfunction once (fn) {\n  var f = function () {\n    if (f.called) return f.value\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  f.called = false\n  return f\n}\n\nfunction onceStrict (fn) {\n  var f = function () {\n    if (f.called)\n      throw new Error(f.onceError)\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  var name = fn.name || 'Function wrapped with `once`'\n  f.onceError = name + \" shouldn't be called more than once\"\n  f.called = false\n  return f\n}\n\n},{\"wrappy\":59}],31:[function(require,module,exports){\n(function (process){(function (){\n'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n\n}).call(this)}).call(this,require('_process'))\n},{\"_process\":32}],32:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],33:[function(require,module,exports){\n(function (global){(function (){\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],34:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\n},{}],35:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n\n},{}],36:[function(require,module,exports){\n'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n\n},{\"./decode\":34,\"./encode\":35}],37:[function(require,module,exports){\n'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n\n},{}],38:[function(require,module,exports){\n(function (process){(function (){\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n\n  for (var key in obj) {\n    keys.push(key);\n  }\n\n  return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n}); // the no-half-open enforcer\n\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return; // no more data can be written.\n  // But allow more writes to happen in this tick.\n\n  process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n}).call(this)}).call(this,require('_process'))\n},{\"./_stream_readable\":40,\"./_stream_writable\":42,\"_process\":32,\"inherits\":21}],39:[function(require,module,exports){\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};\n},{\"./_stream_transform\":41,\"inherits\":21}],40:[function(require,module,exports){\n(function (process,global){(function (){\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'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n    getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n    ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n\n  this.sync = true; // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n  this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n  this.destroyed = false; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n  this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  } // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n\n\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n\n  return er;\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n  this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n  var p = this._readableState.buffer.head;\n  var content = '';\n\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n\n  this._readableState.buffer.clear();\n\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n\n  return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n; // Don't have enough\n\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n\n  return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  } // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n  // if we need a readable event, then we need to do some reading.\n\n\n  var doRead = state.needReadable;\n  debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  } // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n\n\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n    if (state.length === 0) state.needReadable = true; // call internal read method\n\n    this._read(state.highWaterMark);\n\n    state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n\n  state.ended = true;\n\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  } // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n\n\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length) // didn't get any data, stop spinning.\n      break;\n  }\n\n  state.readingMore = false;\n} // abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  } // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n\n\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n\n  function cleanup() {\n    debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true; // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  src.on('data', ondata);\n\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n\n      src.pause();\n    }\n  } // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n\n\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  } // Make sure our error handler is attached before userland ones.\n\n\n  prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n\n  dest.once('close', onclose);\n\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  } // tell the dest that it's being piped to\n\n\n  dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  }; // if we're not piping anywhere, then do nothing.\n\n  if (state.pipesCount === 0) return this; // just one destination.  most common case.\n\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes; // got a match.\n\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  } // slow case. multiple pipe destinations.\n\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      });\n    }\n\n    return this;\n  } // try to find the right one.\n\n\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n\n  return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n\n  return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n\n  return res;\n};\n\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true; // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n\n  if (!state.flowing) {\n    debug('resume'); // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n\n  state.paused = false;\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n\n  if (!state.reading) {\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n\n  this._readableState.paused = true;\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n\n  while (state.flowing && stream.read() !== null) {\n    ;\n  }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  }); // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  } // proxy certain important events.\n\n\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  } // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n\n\n  this._read = function (n) {\n    debug('wrapped _read', n);\n\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n\n    return createReadableStreamAsyncIterator(this);\n  };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\n\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n\n    return from(Readable, iterable, opts);\n  };\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n\n  return -1;\n}\n}).call(this)}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../errors\":37,\"./_stream_duplex\":38,\"./internal/streams/async_iterator\":43,\"./internal/streams/buffer_list\":44,\"./internal/streams/destroy\":45,\"./internal/streams/from\":47,\"./internal/streams/state\":49,\"./internal/streams/stream\":50,\"_process\":32,\"buffer\":14,\"events\":19,\"inherits\":21,\"string_decoder/\":55,\"util\":13}],41:[function(require,module,exports){\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// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n    ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n    ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  }; // start out asking for a readable event once data is transformed.\n\n  this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  } // When the writable side finishes, then flush out anything remaining.\n\n\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}\n},{\"../errors\":37,\"./_stream_duplex\":38,\"inherits\":21}],42:[function(require,module,exports){\n(function (process,global){(function (){\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n    getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n    ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n    ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n    ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n    ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n  this.finalCalled = false; // drain event flag.\n\n  this.needDrain = false; // at the start of calling end()\n\n  this.ending = false; // when end() has been called, and returned\n\n  this.ended = false; // when 'finish' is emitted\n\n  this.finished = false; // has it been destroyed\n\n  this.destroyed = false; // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n\n  this.length = 0; // a flag to see when we're in the middle of a write.\n\n  this.writing = false; // when true all writes will be buffered until .uncork() call\n\n  this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n\n  this.sync = true; // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n\n  this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n  this.writecb = null; // the amount that is being written when _write is called.\n\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n\n  this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n\n  this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n  this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n  this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n  this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n\n  return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er); // this can emit finish, and it will always happen\n    // after error\n\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er); // this can emit finish, but finish must\n    // always follow error\n\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  } // ignore unnecessary end() calls.\n\n\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\n\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n\n  if (need) {\n    prefinish(stream, state);\n\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  } // reuse the free corkReq.\n\n\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n}).call(this)}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../errors\":37,\"./_stream_duplex\":38,\"./internal/streams/destroy\":45,\"./internal/streams/state\":49,\"./internal/streams/stream\":50,\"_process\":32,\"buffer\":14,\"inherits\":21,\"util-deprecate\":58}],43:[function(require,module,exports){\n(function (process){(function (){\n'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\n\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n\n  if (resolve !== null) {\n    var data = iter[kStream].read(); // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\n\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n\n  next: function next() {\n    var _this = this;\n\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    } // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n\n\n    var lastPromise = this[kLastPromise];\n    var promise;\n\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n\n      promise = new Promise(this[kHandlePromise]);\n    }\n\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n\n      iterator[kError] = err;\n      return;\n    }\n\n    var resolve = iterator[kLastResolve];\n\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;\n}).call(this)}).call(this,require('_process'))\n},{\"./end-of-stream\":46,\"_process\":32}],44:[function(require,module,exports){\n'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n    Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n    inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n\n      while (p = p.next) {\n        ret += s + p.data;\n      }\n\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n\n      return ret;\n    } // Consumes a specified amount of bytes or characters from the buffered data.\n\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    } // Consumes a specified amount of characters from the buffered data.\n\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n\n          break;\n        }\n\n        ++c;\n      }\n\n      this.length -= c;\n      return ret;\n    } // Consumes a specified amount of bytes from the buffered data.\n\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n\n          break;\n        }\n\n        ++c;\n      }\n\n      this.length -= c;\n      return ret;\n    } // Make sure the linked list only shows the minimal necessary information.\n\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread({}, options, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n\n  return BufferList;\n}();\n},{\"buffer\":14,\"util\":13}],45:[function(require,module,exports){\n(function (process){(function (){\n'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  } // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n\n  return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};\n}).call(this)}).call(this,require('_process'))\n},{\"_process\":32}],46:[function(require,module,exports){\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    callback.apply(this, args);\n  };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n\n  var writableEnded = stream._writableState && stream._writableState.finished;\n\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n\n  var onclose = function onclose() {\n    var err;\n\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\n\nmodule.exports = eos;\n},{\"../../../errors\":37}],47:[function(require,module,exports){\nmodule.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n\n},{}],48:[function(require,module,exports){\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\n\nvar _require$codes = require('../../../errors').codes,\n    ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\n\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true; // request.destroy just do .end - .abort is what we want\n\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\n\nfunction call(fn) {\n  fn();\n}\n\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\n\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;\n},{\"../../../errors\":37,\"./end-of-stream\":46}],49:[function(require,module,exports){\n'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n\n    return Math.floor(hwm);\n  } // Default value\n\n\n  return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};\n},{\"../../../errors\":37}],50:[function(require,module,exports){\nmodule.exports = require('events').EventEmitter;\n\n},{\"events\":19}],51:[function(require,module,exports){\nexports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n\n},{\"./lib/_stream_duplex.js\":38,\"./lib/_stream_passthrough.js\":39,\"./lib/_stream_readable.js\":40,\"./lib/_stream_transform.js\":41,\"./lib/_stream_writable.js\":42,\"./lib/internal/streams/end-of-stream.js\":46,\"./lib/internal/streams/pipeline.js\":48}],52:[function(require,module,exports){\n'use strict'\n\nfunction ReInterval (callback, interval, args) {\n  var self = this;\n\n  this._callback = callback;\n  this._args = args;\n\n  this._interval = setInterval(callback, interval, this._args);\n\n  this.reschedule = function (interval) {\n    // if no interval entered, use the interval passed in on creation\n    if (!interval)\n      interval = self._interval;\n\n    if (self._interval)\n      clearInterval(self._interval);\n    self._interval = setInterval(self._callback, interval, self._args);\n  };\n\n  this.clear = function () {\n    if (self._interval) {\n      clearInterval(self._interval);\n      self._interval = undefined;\n    }\n  };\n  \n  this.destroy = function () {\n    if (self._interval) {\n      clearInterval(self._interval);\n    }\n    self._callback = undefined;\n    self._interval = undefined;\n    self._args = undefined;\n  };\n}\n\nfunction reInterval () {\n  if (typeof arguments[0] !== 'function')\n    throw new Error('callback needed');\n  if (typeof arguments[1] !== 'number')\n    throw new Error('interval needed');\n\n  var args;\n\n  if (arguments.length > 0) {\n    args = new Array(arguments.length - 2);\n\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i + 2];\n    }\n  }\n\n  return new ReInterval(arguments[0], arguments[1], args);\n}\n\nmodule.exports = reInterval;\n\n},{}],53:[function(require,module,exports){\n/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":14}],54:[function(require,module,exports){\nmodule.exports = shift\n\nfunction shift (stream) {\n  var rs = stream._readableState\n  if (!rs) return null\n  return (rs.objectMode || typeof stream._duplexState === 'number') ? stream.read() : stream.read(getStateLength(rs))\n}\n\nfunction getStateLength (state) {\n  if (state.buffer.length) {\n    // Since node 6.3.0 state.buffer is a BufferList not an array\n    if (state.buffer.head) {\n      return state.buffer.head.data.length\n    }\n\n    return state.buffer[0].length\n  }\n\n  return state.length\n}\n\n},{}],55:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n},{\"safe-buffer\":53}],56:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n\n},{\"./util\":57,\"punycode\":33,\"querystring\":36}],57:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n\n},{}],58:[function(require,module,exports){\n(function (global){(function (){\n\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],59:[function(require,module,exports){\n// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n  if (fn && cb) return wrappy(fn)(cb)\n\n  if (typeof fn !== 'function')\n    throw new TypeError('need wrapper function')\n\n  Object.keys(fn).forEach(function (k) {\n    wrapper[k] = fn[k]\n  })\n\n  return wrapper\n\n  function wrapper() {\n    var args = new Array(arguments.length)\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n    var ret = fn.apply(this, args)\n    var cb = args[args.length-1]\n    if (typeof ret === 'function' && ret !== cb) {\n      Object.keys(cb).forEach(function (k) {\n        ret[k] = cb[k]\n      })\n    }\n    return ret\n  }\n}\n\n},{}],60:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n  throw new Error(\n    'ws does not work in the browser. Browser clients must use the native ' +\n      'WebSocket object'\n  );\n};\n\n},{}],61:[function(require,module,exports){\nmodule.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n\n},{}]},{},[9])(9)\n});\n","import { match, when } from '../utils/match'\nimport debounce from 'lodash.debounce'\nimport { EventEmitter } from 'pietile-eventemitter'\n\n// import { connect } from '../lib/mqtt'\n// import type { IClientPublishOptions, MqttClient, IClientOptions } from '../lib/mqtt'\nimport { connect } from 'mqtt'\nimport type { IClientPublishOptions, MqttClient, IClientOptions } from 'mqtt'\n\nimport type { Callback, Subscription } from '../defs'\nimport * as m from '../model'\nimport * as Decoder from '../decoder'\nimport { getLogger } from './logger'\nimport { Storage } from '../storage'\nimport { tryCatch, wrapP, getOrThrow } from '../utils/try-catch'\nimport * as Api from '../api'\nimport { Provider } from '../provider'\n\nconst reNewMessage = /^([\\w]+)\\/c/i\nconst reNotification = /^([\\w]+)\\/n/i\nconst reTyping = /^r\\/([\\d]+)\\/([\\d]+)\\/([\\S]+)\\/t$/i\nconst reDelivery = /^r\\/([\\d]+)\\/([\\d]+)\\/([\\S]+)\\/d$/i\nconst reRead = /^r\\/([\\d]+)\\/([\\d]+)\\/([\\S]+)\\/r$/i\nconst reOnlineStatus = /^u\\/([\\S]+)\\/s$/i\nconst reChannelMessage = /^([\\S]+)\\/([\\S]+)\\/c/i\nconst reCustomEvent = /^r\\/[\\w]+\\/[\\w]+\\/e$/i\nconst reMessageUpdated = /^([\\w]+)\\/update/i\n\nfunction getMqttHandler(emitter: EventEmitter<Events>): IQMqttHandler {\n  return {\n    channelMessageHandler: (_) => (data) => {\n      const message = tryCatch(\n        () => Decoder.message(JSON.parse(data)),\n        data,\n        (error) => console.log('error when parsing data', error)\n      )\n      emitter.emit('message::received', message)\n    },\n    customEventHandler: (topic) => (data) => {\n      const topicData = reCustomEvent.exec(topic)\n      const roomId = parseInt(getOrThrow<string>(topicData?.[1], '`roomId` are null on customEventHandler'))\n      const payload = JSON.parse(data)\n      emitter.emit('custom-event', { roomId, payload })\n    },\n    notificationHandler: (_) => (data: string) => {\n      const payload = JSON.parse(data) as MqttNotification\n\n      if (payload.action_topic === 'delete_message') {\n        const deletedMessagesData = payload.payload.data.deleted_messages\n        deletedMessagesData.forEach((data) => {\n          const roomId = parseInt(data.room_id, 10)\n          data.message_unique_ids.forEach((uniqueId) => {\n            emitter.emit('message::deleted', { roomId, uniqueId })\n          })\n        })\n      }\n      if (payload.action_topic === 'clear_room') {\n        const clearedRooms = payload.payload.data.deleted_rooms\n        clearedRooms.forEach((room) => {\n          const roomId = room.id\n          emitter.emit('room::cleared', roomId)\n        })\n      }\n    },\n    onlineHandler: (topic) => (data) => {\n      const topicData = reOnlineStatus.exec(topic)\n      const payload = data.split(':')\n      const userId = getOrThrow<string>(topicData?.[1], '`userId` are null on onlineHandler')\n      const isOnline = Number(payload[0]) === 1\n      const lastSeen = new Date(Number(payload[1]))\n      emitter.emit('user::presence', { userId, isOnline, lastSeen })\n    },\n    deliveredHandler: (topic) => (data) => {\n      const topicData = reDelivery.exec(topic)\n      const payload = data.split(':')\n      const roomId = parseInt(getOrThrow<string>(topicData?.[1], '`roomId` are null on deliveredHandler'), 10)\n      const userId = getOrThrow<string>(topicData?.[3], '`userId` are null on deliveredHandler')\n      const messageId = payload[0]\n      const messageUniqueId = payload[1]\n      emitter.emit('message::delivered', {\n        roomId,\n        userId,\n        messageId,\n        messageUniqueId,\n      })\n    },\n    newMessage: (_) => (data) => {\n      const message: m.IQMessage = tryCatch(() => Decoder.message(JSON.parse(data)), data)\n      emitter.emit('message::received', message)\n    },\n    readHandler: (topic) => (data) => {\n      const topicData = reRead.exec(topic)\n      const roomId = parseInt(getOrThrow<string>(topicData?.[1], '`roomId` are null on readHandler'), 10)\n      const userId = getOrThrow<string>(topicData?.[3], '`userId` are null on readHandler')\n      const payload = data.split(':')\n      const messageId = payload[0]\n      const messageUniqueId = payload[1]\n      emitter.emit('message::read', {\n        roomId,\n        userId,\n        messageId,\n        messageUniqueId,\n      })\n    },\n    typingHandler: (topic) => (data) => {\n      const topicData = reTyping.exec(topic)\n      const roomId = parseInt(getOrThrow<string>(topicData?.[1], '`roomId` are null on typingHandler'), 10)\n      const userId = getOrThrow<string>(topicData?.[3], '`userId` are null on typingHandler')\n      const isTyping = Number(data) === 1\n      emitter.emit('user::typing', { roomId, userId, isTyping })\n    },\n    messageUpdatedHandler: (_) => (data) => {\n      const message: m.IQMessage = tryCatch(() => Decoder.message(JSON.parse(data)), data)\n      emitter.emit('message::updated', message)\n    },\n  }\n}\n\nexport type MqttAdapter = ReturnType<typeof getMqttAdapter>\nexport default function getMqttAdapter(s: Storage, opts?: { getClientId?: () => string }) {\n  let mqtt: _MqttClient | undefined = undefined\n  let cacheUrl: string = s.getBrokerUrl()\n  let shouldConnect = true\n\n  const emitter = new EventEmitter<Events>()\n  const handler = getMqttHandler(emitter)\n  const subscribedCustomEventTopics = new Map<number, any>()\n  const getTopicForCustomEvent = (roomId: number) => `r/${roomId}/${roomId}/e`\n  const logger = getLogger(s)\n  const matcher = match({\n    [when(reNewMessage)]: handler.newMessage,\n    [when(reNotification)]: handler.notificationHandler,\n    [when(reTyping)]: handler.typingHandler,\n    [when(reDelivery)]: handler.deliveredHandler,\n    [when(reRead)]: handler.readHandler,\n    [when(reOnlineStatus)]: handler.onlineHandler,\n    [when(reChannelMessage)]: handler.channelMessageHandler,\n    [when(reCustomEvent)]: handler.customEventHandler,\n    [when(reMessageUpdated)]: handler.messageUpdatedHandler,\n    [when()]: (topic: string) => (message: any) => logger.log('topic not handled', topic, message),\n  })\n\n  const api = Api.getMqttNode(s)(Provider(s).withCredentials)\n  const getMqttNode = () =>\n    Api.makeApiRequest(s)\n      .request<GetMqttNodeResponse>(api)\n      .then((r) => {\n        const url = r.data.url\n        const port = r.data.wss_port\n        return `wss://${url}:${port}/mqtt`\n      })\n\n  const __mqtt_connected_handler = () => emitter.emit('mqtt::connected')\n  const __mqtt_reconnect_handler = () => emitter.emit('mqtt::reconnecting')\n  const __mqtt_closed_handler = () => emitter.emit('mqtt::close')\n  const __mqtt_message_handler = (t: string, m: string) => {\n    const message = m.toString()\n    const func = matcher(t)\n    logger.log('message', t, message)\n    if (func != null) func(message)\n  }\n  const __mqtt_error_handler = (err: Error) => {\n    if (err && err.message === 'client disconnecting') return\n    emitter.emit('mqtt::error', err.message)\n    logger.log('error', err.message)\n  }\n  let intervalId = -1\n  const _getClientId = () => {\n    if (opts?.getClientId != null) opts?.getClientId()\n    const appId = s.getAppId()\n    const userId = s.getCurrentUser().id\n    const now = Date.now()\n    return `${appId}_${userId}_${now}`\n  }\n  const __mqtt_conneck = (brokerUrl: string) => {\n    if (mqtt != null) {\n      mqtt?.removeAllListeners()\n      mqtt?.end(true)\n      mqtt = undefined\n    }\n    const lastWill = `u/${s.getCurrentUser().id}/s`\n    const opts: IClientOptions = {\n      clientId: _getClientId(),\n      will: {\n        topic: lastWill,\n        payload: '0',\n        retain: true,\n        qos: 1,\n      },\n    }\n\n    const mqtt_: MqttClient = connect(brokerUrl, opts)\n    mqtt_.addListener('connect', __mqtt_connected_handler)\n    mqtt_.addListener('reconnect', __mqtt_reconnect_handler)\n    mqtt_.addListener('close', __mqtt_closed_handler)\n    mqtt_.addListener('error', __mqtt_error_handler)\n    mqtt_.addListener('message', __mqtt_message_handler)\n\n    intervalId = setInterval(() => {\n      if (s.getCurrentUser() != null) {\n        sendPresence(mqtt, s.getCurrentUser().id, true)\n      }\n    }, 3500) as unknown as number\n\n    return mqtt_ as _MqttClient\n  }\n\n  cacheUrl = s.getBrokerUrl()\n\n  emitter.on(\n    'mqtt::close',\n    debounce(async () => {\n      if (shouldConnect === false) return\n      if (s.getCurrentUser() == null) return\n      if (!s.getBrokerLbEnabled()) return\n\n      if (intervalId !== -1) {\n        clearInterval(intervalId)\n        intervalId = -1\n      }\n\n      // TODO: Need a better way to get all subscribed topics\n      const topics = Object.keys((mqtt as any)._resubscribeTopics)\n      const [url, err] = await wrapP(getMqttNode())\n      if (err) {\n        logger.log(`cannot get new brokerUrl, using old url instead (${cacheUrl})`)\n        mqtt = __mqtt_conneck(cacheUrl)\n      } else {\n        cacheUrl = url\n        logger.log(`connecting to new broker url ${url}`)\n        mqtt = __mqtt_conneck(url)\n      }\n      logger.log(`resubscribe to old topics ${topics}`)\n      topics.forEach((t) => mqtt?.subscribe(t))\n    }, 300)\n  )\n  emitter.on('custom-event', (data) => {\n    const roomId = data.roomId\n    if (subscribedCustomEventTopics.has(roomId)) {\n      const callback = subscribedCustomEventTopics.get(roomId)\n      callback(data.payload)\n    }\n  })\n\n  function sendPresence(mqttClient: MqttClient | undefined, userId: string, isOnline: boolean) {\n    const status = isOnline ? '1' : '0'\n    mqttClient?.publish(`u/${userId}/s`, status, {\n      retain: true,\n    } as IClientPublishOptions)\n  }\n\n  return {\n    get mqtt() {\n      return mqtt\n    },\n    clear() {\n      // sendPresence(mqtt, userId, false)\n      clearInterval(intervalId)\n      Object.keys(mqtt?._resubscribeTopics ?? {}).forEach((it) => mqtt?.unsubscribe(it))\n      mqtt?.end()\n    },\n    async close() {\n      shouldConnect = false\n      this.mqtt?.end(true)\n    },\n    async open() {\n      shouldConnect = true\n      this.conneck()\n    },\n    conneck() {\n      mqtt = __mqtt_conneck(s.getBrokerUrl())\n    },\n    onMqttConnected(callback: () => void): () => void {\n      emitter.on('mqtt::connected', callback)\n      return () => emitter.off('mqtt::connected', callback)\n    },\n    onMqttReconnecting(callback: () => void): Subscription {\n      emitter.on('mqtt::reconnecting', callback)\n      return () => emitter.off('mqtt::reconnecting', callback)\n    },\n    onMqttDisconnected(callback: () => void): Subscription {\n      emitter.on('mqtt::disconnected', callback)\n      return () => emitter.off('mqtt::disconnected', callback)\n    },\n    onMessageDeleted(callback: (data: m.IQMessage) => void): () => void {\n      const handler = (msg: { roomId: number; uniqueId: string }) => {\n        const message = Decoder.message({\n          room_id: msg.roomId,\n          unique_temp_id: msg.uniqueId,\n        } as any)\n        callback(message)\n      }\n      emitter.on('message::deleted', handler)\n      return () => emitter.off('message::deleted', handler)\n    },\n    onMessageDelivered(callback: (data: m.IQMessage) => void): () => void {\n      const handler = (data: MqttMessageDelivery) => {\n        const message = Decoder.message({\n          unique_temp_id: data.messageUniqueId,\n          id: parseInt(data.messageId),\n          email: data.userId,\n          room_id: data.roomId,\n        } as any)\n        callback(message)\n      }\n\n      emitter.on('message::delivered', handler)\n      return () => emitter.off('message::delivered', handler)\n    },\n    onMessageRead(callback: (m: m.IQMessage) => void): () => void {\n      const handler = (data: MqttMessageDelivery) => {\n        const message = Decoder.message({\n          unique_temp_id: data.messageUniqueId,\n          id: parseInt(data.messageId),\n          email: data.userId,\n          room_id: data.roomId,\n        } as any)\n        callback(message)\n      }\n\n      emitter.on('message::read', handler)\n      return () => emitter.off('message::read', handler)\n    },\n    onNewMessage(callback: (data: m.IQMessage) => void): () => void {\n      emitter.on('message::received', callback)\n      return () => emitter.off('message::received', callback)\n    },\n    onMessageUpdated(callback: (data: m.IQMessage) => void): () => void {\n      emitter.on('message::updated', callback)\n      return () => emitter.off('message::updated', callback)\n    },\n    onRoomDeleted(callback: (data: number) => void): () => void {\n      emitter.on('room::cleared', callback)\n      return () => emitter.off('room::cleared', callback)\n    },\n    onUserPresence(callback: (userId: string, isOnline: boolean, lastSeen: Date) => void): () => void {\n      const handler = (data: MqttUserPresence) => {\n        callback(data.userId, data.isOnline, data.lastSeen)\n      }\n      emitter.on('user::presence', handler)\n      return () => emitter.off('user::presence', handler)\n    },\n    onUserTyping(callback: (userId: string, roomId: number, isTyping: boolean) => void): () => void {\n      const handler = (data: MqttUserTyping) => {\n        callback(data.userId, data.roomId, data.isTyping)\n      }\n      emitter.on('user::typing', handler)\n      return () => emitter.off('user::typing', handler)\n    },\n    publishCustomEvent(roomId: number, userId: string, data: any): void {\n      const payload = JSON.stringify({\n        sender: userId,\n        data: data,\n      })\n      mqtt?.publish(getTopicForCustomEvent(roomId), payload)\n    },\n    subscribeCustomEvent(roomId: number, callback: Callback<any>): void {\n      const topic = getTopicForCustomEvent(roomId)\n      if (subscribedCustomEventTopics.has(roomId)) return\n\n      mqtt?.subscribe(topic)\n      subscribedCustomEventTopics.set(roomId, callback)\n    },\n    unsubscribeCustomEvent(roomId: number): void {\n      const topic = getTopicForCustomEvent(roomId)\n      if (!subscribedCustomEventTopics.has(roomId)) return\n\n      mqtt?.unsubscribe(topic)\n      subscribedCustomEventTopics.delete(roomId)\n    },\n    sendPresence(userId: string, isOnline: boolean): void {\n      sendPresence(mqtt, userId, isOnline)\n    },\n    sendTyping(roomId: number, userId: string, isTyping: boolean): void {\n      const payload = isTyping ? '1' : '0'\n      mqtt?.publish(`r/${roomId}/${roomId}/${userId}/t`, payload)\n    },\n    subscribeUser(userToken: string): Subscription {\n      mqtt //\n        ?.subscribe(`${userToken}/c`)\n        ?.subscribe(`${userToken}/n`)\n        ?.subscribe(`${userToken}/update`)\n      return () => {\n        mqtt //\n          ?.unsubscribe(`${userToken}/c`)\n          ?.unsubscribe(`${userToken}/n`)\n          ?.unsubscribe(`${userToken}/update`)\n      }\n    },\n    subscribeUserPresence(userId: string): void {\n      mqtt?.subscribe(`u/${userId}/s`)\n    },\n    unsubscribeUserPresence(userId: string): void {\n      mqtt?.unsubscribe(`u/${userId}/s`)\n    },\n    subscribeRoom(roomId: number): void {\n      mqtt\n        ?.subscribe(`r/${roomId}/${roomId}/+/t`)\n        ?.subscribe(`r/${roomId}/${roomId}/+/d`)\n        ?.subscribe(`r/${roomId}/${roomId}/+/r`)\n    },\n    unsubscribeRoom(roomId: number): void {\n      mqtt\n        ?.unsubscribe(`r/${roomId}/${roomId}/+/t`)\n        ?.unsubscribe(`r/${roomId}/${roomId}/+/d`)\n        ?.unsubscribe(`r/${roomId}/${roomId}/+/r`)\n    },\n    subscribeChannel(appId: string, channelUniqueId: string): void {\n      mqtt?.subscribe(`${appId}/${channelUniqueId}/c`)\n    },\n    unsubscribeChannel(appId: string, channelUniqueId: string): void {\n      mqtt?.unsubscribe(`${appId}/${channelUniqueId}/c`)\n    },\n  }\n}\n\n// region Type\nexport type MqttMessage = {\n  id: number\n  comment_before_id: number\n  message: string\n  username: string\n  email: string\n  user_avatar: string\n  timestamp: string\n  unix_timestamp: number\n  created_at: Date\n  room_id: number\n  room_name: string\n  topic_id: number\n  unique_temp_id: string\n  disable_link_preview: boolean\n  chat_type: string\n  comment_before_id_str: string\n  extras: object\n  is_public_channel: boolean\n  payload: object\n  raw_room_name: string\n  room_avatar: string\n  room_id_str: string\n  room_options: string\n  room_type: string\n  status: string\n  topic_id_str: string\n  type: string\n  unix_nano_timestamp: number\n  user_avatar_url: string\n  user_id: number\n  user_id_str: string\n}\nexport type MqttNotification = {\n  id: number\n  timestamp: number\n  action_topic: string\n  payload: {\n    actor: {\n      id: string\n      email: string\n      name: string\n    }\n    data: {\n      deleted_messages: [\n        {\n          message_unique_ids: string[]\n          room_id: string\n        }\n      ]\n      is_hard_delete: boolean\n      deleted_rooms: [\n        {\n          avatar_url: string\n          chat_type: string\n          id: number\n          id_str: string\n          options: object\n          raw_room_name: string\n          room_name: string\n          unique_id: string\n          last_comment: object\n        }\n      ]\n    }\n  }\n}\nexport type MqttMessageReceived = {\n  message: MqttMessage\n}\nexport type MqttMessageDelivery = {\n  roomId: number\n  userId: string\n  messageId: string\n  messageUniqueId: string\n}\nexport type MqttUserPresence = {\n  userId: string\n  isOnline: boolean\n  lastSeen: Date\n}\nexport type MqttUserTyping = {\n  isTyping: boolean\n  userId: string\n  roomId: number\n}\nexport type MqttCustomEvent = { roomId: number; payload: any }\n\ninterface Events {\n  'message::received': (message: m.IQMessage) => void\n  'message::delivered': (message: MqttMessageDelivery) => void\n  'message::read': (message: MqttMessageDelivery) => void\n  'message::deleted': (data: { roomId: number; uniqueId: string }) => void\n  'message::updated': (data: m.IQMessage) => void\n  'room::cleared': (roomId: number) => void\n  'user::typing': (data: MqttUserTyping) => void\n  'user::presence': (data: MqttUserPresence) => void\n  'channel-message::new': (message: { message: m.IQMessage; channelUniqueId: string }) => void\n  'custom-event': (payload: MqttCustomEvent) => void\n  'mqtt::connected': () => void\n  'mqtt::disconnected': () => void\n  'mqtt::reconnecting': () => void\n  'mqtt::error': (err: string) => void\n  'mqtt::close': () => void\n}\n\ninterface MQTTHandler {\n  (topic: string): (data: any) => void\n}\n\ninterface IQMqttHandler {\n  newMessage: MQTTHandler\n  notificationHandler: MQTTHandler\n  typingHandler: MQTTHandler\n  deliveredHandler: MQTTHandler\n  readHandler: MQTTHandler\n  onlineHandler: MQTTHandler\n  channelMessageHandler: MQTTHandler\n  customEventHandler: MQTTHandler\n  messageUpdatedHandler: MQTTHandler\n}\n\ntype _MqttClient = MqttClient & {\n  _resubscribeTopics: string[]\n}\n\ntype GetMqttNodeResponse = {\n  data: {\n    ssl_port: string\n    url: string\n    wss_port: string\n  }\n  node: string\n  status: number\n}\n// endregion\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array ? array.length : 0;\n  return length ? baseFlatten(array, 1) : [];\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\nmodule.exports = flatten;\n","import flatten from 'lodash.flatten'\nimport { EventEmitter } from 'pietile-eventemitter'\nimport xs from 'xstream'\nimport * as Api from '../api'\nimport * as Decoder from '../decoder'\nimport * as m from '../model'\nimport * as Provider from '../provider'\nimport type { Storage } from '../storage'\nimport { IntervalProducer, tap } from '../utils/stream'\n\ninterface SynchronizeEventData {\n  'last-event-id.new': (lastId: m.IQAccount['lastSyncEventId']) => void\n  'message.delivered': (message: m.IQMessage) => void\n  'message.deleted': (message: m.IQMessage) => void\n  'message.read': (message: m.IQMessage) => void\n  'message.received': (message: m.IQMessage) => void\n  'room.cleared': (room: m.IQChatRoom) => void\n}\n\nexport function synchronizeEventFactory(\n  getInterval: () => number,\n  getEnableSync: () => boolean,\n  getId: () => m.IQAccount['lastSyncEventId'],\n  logger: (...args: string[]) => void,\n  s: Storage,\n  api: Api.ApiRequester\n) {\n  const emitter = new EventEmitter<SynchronizeEventData>()\n  // const emitter = new EventEmitter()\n  const synchronize = (eventId: m.IQAccount['lastSyncEventId']) => {\n    return api\n      .request<SyncEventResponse.RootObject>(\n        Api.synchronizeEvent({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          lastEventId: eventId,\n        })\n      )\n      .then((resp) => {\n        const events = resp.events\n        const lastId: string =\n          events\n            .map((it) => it.id)\n            .sort((a, b) => a - b)\n            .pop() ?? '0'\n\n        //region Delivered\n        const messageDelivered = events\n          .filter((it) => it.action_topic === 'delivered')\n          .map((it) => it.payload.data as SyncEventResponse.DataMessageDelivered)\n          .map((it) =>\n            Decoder.message({\n              id: it.comment_id,\n              unique_temp_id: it.comment_unique_id,\n              email: it.email,\n              room_id: it.room_id,\n            } as any)\n          )\n        //endregion\n        //region Read\n        const messageRead = events\n          .filter((it) => it.action_topic === 'read')\n          .map((it) => it.payload.data as SyncEventResponse.DataMessageDelivered)\n          .map((it) =>\n            Decoder.message({\n              id: it.comment_id,\n              unique_temp_id: it.comment_unique_id,\n              email: it.email,\n              room_id: it.room_id,\n            } as any)\n          )\n        //endregion\n        //region Deleted\n        const messageDeleted = events\n          .filter((it) => it.action_topic === 'deleted_message')\n          .map((it) => it.payload.data as SyncEventResponse.DataMessageDeleted)\n          .map((p1) => {\n            const msgs = p1.deleted_messages.map((it) =>\n              it.message_unique_ids.map((id) =>\n                Decoder.message({\n                  unique_temp_id: id,\n                  room_id: parseInt(it.room_id),\n                } as any)\n              )\n            )\n            return flatten(msgs)\n          })\n        //endregion\n        //region Room Cleared\n        const roomCleared = events\n          .filter((it) => it.action_topic === 'clear_room')\n          .map((it) => it.payload.data as SyncEventResponse.DataRoomCleared)\n          .map((p1) => p1.deleted_rooms.map((r: any) => Decoder.room(r)))\n        //endregion\n        return {\n          lastId,\n          messageDelivered,\n          messageRead,\n          messageDeleted,\n          roomCleared,\n          interval: getInterval(),\n        }\n      })\n  }\n\n  async function processResult(result: ReturnType<typeof synchronize>) {\n    let res = await result\n    const lastId = res.lastId\n\n    emitter.emit('last-event-id.new', lastId)\n    res.messageDelivered.forEach((it) => emitter.emit('message.delivered', it))\n    res.messageDeleted.forEach((it) => it.forEach((m) => emitter.emit('message.deleted', m)))\n    res.messageRead.forEach((it) => emitter.emit('message.read', it))\n    res.roomCleared.forEach((it) => it.forEach((room) => emitter.emit('room.cleared', room)))\n\n    return result\n  }\n\n  return {\n    get synchronize(): typeof synchronize {\n      return (eventId) => processResult(synchronize(eventId))\n    },\n    get on() {\n      return emitter.on.bind(emitter)\n    },\n    get off() {\n      return emitter.off.bind(emitter)\n    },\n    stream() {\n      return xs\n        .create(new IntervalProducer(s.getAccSyncInterval, getInterval))\n        .map((_) => getId())\n        .filter((_) => getEnableSync())\n        .map((id) => xs.from(synchronize(id)))\n        .flatten()\n        .compose(tap((v) => logger(`synchronize event returned id: ${v.lastId}`)))\n        .map((v) => xs.from(processResult(Promise.resolve(v))))\n        .flatten()\n    },\n  }\n}\n\nexport declare module SyncEventResponse {\n  export interface Actor {\n    id: string\n    email: string\n    name: string\n  }\n\n  export interface DeletedMessage {\n    message_unique_ids: string[]\n    room_id: string\n  }\n\n  export interface DeletedRoom {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    last_comment: any\n    options: object\n    raw_room_name: string\n    room_name: string\n    unique_id: string\n    unread_count: number\n  }\n\n  export interface DataMessageDeleted {\n    deleted_messages: DeletedMessage[]\n    is_hard_delete: boolean\n  }\n\n  export interface DataRoomCleared {\n    deleted_rooms: DeletedRoom[]\n  }\n\n  export interface DataMessageDelivered {\n    comment_id: number\n    comment_unique_id: string\n    email: string\n    room_id: number\n  }\n\n  export interface Payload {\n    actor: Actor\n    data: DataMessageDeleted | DataMessageDelivered | DataRoomCleared\n  }\n\n  export interface Event {\n    id: any\n    timestamp: any\n    action_topic: 'read' | 'delivered' | 'clear_room' | 'deleted_message'\n    payload: Payload\n  }\n\n  export interface RootObject {\n    events: Event[]\n    is_start_event_id_found: boolean\n  }\n}\n","import { EventEmitter } from 'pietile-eventemitter'\nimport xs from 'xstream'\nimport * as Api from '../api'\nimport * as Decoder from '../decoder'\nimport * as m from '../model'\nimport * as Provider from '../provider'\nimport type { Storage } from '../storage'\nimport { IntervalProducer, tap } from '../utils/stream'\n\ninterface SynchronizeData {\n  'last-message-id.new': (messageId: m.IQAccount['lastMessageId']) => void\n  'message.new': (message: m.IQMessage) => void\n  synchronized: () => void\n}\n\nexport function synchronizeFactory(\n  getInterval: () => number,\n  getEnableSync: () => boolean,\n  getId: () => m.IQAccount['lastMessageId'],\n  // @ts-ignore\n  logger: (...arg: string[]) => void,\n  s: Storage,\n  api: Api.ApiRequester\n) {\n  const emitter = new EventEmitter<SynchronizeData>()\n  const synchronize = (\n    messageId: m.IQAccount['lastMessageId']\n  ): Promise<{\n    lastMessageId: m.IQAccount['lastMessageId']\n    messages: m.IQMessage[]\n    interval: number\n  }> => {\n    return api\n      .request<SyncResponse.RootObject>(\n        Api.synchronize({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          lastMessageId: messageId,\n          limit: 20,\n        })\n      )\n      .then((resp) => {\n        const messages = resp.results.comments.map((it) =>\n          Decoder.message({\n            ...it,\n            room_type: it.chat_type,\n          })\n        )\n        const lastMessageId = resp.results.meta.last_received_comment_id ?? 0\n        logger(`lastMessageId:${JSON.stringify(resp.results.meta, null, 2)}`)\n        return { lastMessageId, messages, interval: getInterval() }\n      })\n  }\n\n  async function processResult(result: ReturnType<typeof synchronize>) {\n    let res = await result\n    const messageId = res.lastMessageId\n    const messages = res.messages\n    if (messageId > 0) {\n      emitter.emit('last-message-id.new', messageId)\n    }\n    messages\n      .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime())\n      .forEach((m) => {\n        emitter.emit('message.new', m)\n      })\n\n    return result\n  }\n\n  return {\n    get synchronize(): typeof synchronize {\n      return (eventId) => processResult(synchronize(eventId))\n    },\n    get on() {\n      return emitter.on.bind(emitter)\n    },\n    get off() {\n      return emitter.off.bind(emitter)\n    },\n    stream() {\n      return xs\n        .create(new IntervalProducer(s.getAccSyncInterval, getInterval))\n        .map((_) => getId())\n        .filter((_) => getEnableSync())\n        .map((id) => xs.fromPromise(synchronize(id)))\n        .flatten()\n        .compose(tap((_) => emitter.emit('synchronized')))\n        .compose(tap((v) => logger(`synchronize returned id: ${v.lastMessageId}`)))\n        .map((v) => xs.fromPromise(processResult(Promise.resolve(v))))\n        .flatten()\n    },\n  }\n}\n\nexport declare module SyncResponse {\n  export interface Extras {}\n\n  export interface Payload {}\n\n  export interface Avatar {\n    url: string\n  }\n\n  export interface UserAvatar {\n    avatar: Avatar\n  }\n\n  export interface Comment {\n    chat_type: string\n    comment_before_id: number\n    comment_before_id_str: string\n    disable_link_preview: boolean\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    is_deleted: boolean\n    is_public_channel: boolean\n    message: string\n    payload: Payload\n    room_avatar: string\n    room_id: number\n    room_id_str: string\n    room_name: string\n    status: string\n    timestamp: string\n    topic_id: number\n    topic_id_str: string\n    type: string\n    unique_temp_id: string\n    unix_nano_timestamp: number\n    unix_timestamp: number\n    user_avatar: UserAvatar\n    user_avatar_url: string\n    user_id: number\n    user_id_str: string\n    username: string\n  }\n\n  export interface Meta {\n    last_received_comment_id: number\n    need_clear: boolean\n  }\n\n  export interface Results {\n    comments: Comment[]\n    meta: Meta\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\n","import { EventEmitter } from 'pietile-eventemitter'\nimport * as Api from '../api'\nimport * as m from '../model'\nimport { Storage } from '../storage'\nimport { synchronizeEventFactory } from './sync-event-factory'\nimport { synchronizeFactory } from './sync-factory'\n\nconst noop = () => {}\n\nexport interface IQSyncEvent {\n  'room.cleared': (room: m.IQChatRoom) => void\n  'message.new': (message: m.IQMessage) => void\n  'message.delivered': (data: m.IQMessage) => void\n  'message.deleted': (message: m.IQMessage) => void\n  'message.read': (message: m.IQMessage) => void\n  'message.updated': (message: m.IQMessage) => void\n  'last-message-id': (id: m.IQAccount['lastMessageId']) => void\n  'last-event-id': (id: m.IQAccount['lastSyncEventId']) => void\n}\n\nexport type SyncAdapter = ReturnType<typeof getSyncAdapter>\nexport default function getSyncAdapter(o: {\n  s: Storage\n  api: Api.ApiRequester\n  isMqttConnected: () => boolean\n  logger: (...args: string[]) => void\n}) {\n  const emitter = new EventEmitter<IQSyncEvent>()\n  function shouldSync(): boolean {\n    let isAuthenticated = o.s.getCurrentUser() != null\n    let isNotForceDisabled = o.s.getForceDisableSync() !== true\n\n    o.logger(`enableSync --> isNotForceDisabled(${isNotForceDisabled})`)\n    o.logger(`enableSync --> isAuthenticated(${isAuthenticated})`)\n\n    return isAuthenticated && isNotForceDisabled\n  }\n  function isSyncEnabled(): boolean {\n    let isAbleToSync = shouldSync()\n    let isEnabled = o.s.getIsSyncEnabled()\n    return isAbleToSync && isEnabled\n  }\n  function isSyncEventEnabled(): boolean {\n    let isAbleToSync = shouldSync()\n    let isEnabled = o.s.getIsSyncEventEnabled()\n    return isAbleToSync && isEnabled\n  }\n\n  const getInterval = (): number => {\n    if (o.isMqttConnected()) return o.s.getSyncIntervalWhenConnected()\n    return o.s.getSyncInterval()\n  }\n\n  const sync = synchronizeFactory(getInterval, isSyncEnabled, () => o.s.getLastMessageId(), o.logger, o.s, o.api)\n  sync.on('last-message-id.new', (id) => o.s.setLastMessageId(id))\n  sync.on('message.new', (m) => {\n    emitter.emit('message.new', m)\n  })\n  sync.stream().subscribe({\n    error: (err) => o.logger('got error when sync', err),\n  })\n\n  const syncEvent = synchronizeEventFactory(\n    getInterval,\n    isSyncEventEnabled,\n    () => o.s.getLastEventId(),\n    o.logger,\n    o.s,\n    o.api\n  )\n  syncEvent.on('last-event-id.new', (id) => o.s.setLastEventId(id))\n  syncEvent.on('message.read', (it) => emitter.emit('message.read', it))\n  syncEvent.on('message.delivered', (it) => emitter.emit('message.delivered', it))\n  syncEvent.on('message.deleted', (it) => emitter.emit('message.deleted', it))\n  syncEvent.on('room.cleared', (it) => emitter.emit('room.cleared', it))\n  syncEvent.stream().subscribe({\n    error: (err) => o.logger('got error when sync event', err),\n  })\n\n  return {\n    synchronize(messageId: m.IQAccount['lastMessageId']): void {\n      sync.synchronize(messageId).catch(noop)\n    },\n    synchronizeEvent(eventId: m.IQAccount['lastSyncEventId']): void {\n      syncEvent.synchronize(eventId).catch(noop)\n    },\n    onNewMessage(callback: (message: m.IQMessage) => void): () => void {\n      emitter.on('message.new', callback)\n      return () => emitter.off('message.new', callback)\n    },\n    onMessageUpdated(callback: (message: m.IQMessage) => void): () => void {\n      emitter.on('message.updated', callback)\n      return () => emitter.off('message.updated', callback)\n    },\n    onMessageDelivered(callback: (m: m.IQMessage) => void): () => void {\n      emitter.on('message.delivered', callback)\n      return () => emitter.off('message.delivered', callback)\n    },\n    onMessageRead(callback: (m: m.IQMessage) => void): () => void {\n      emitter.on('message.read', callback)\n      return () => emitter.off('message.read', callback)\n    },\n    onMessageDeleted(callback: (message: m.IQMessage) => void): () => void {\n      emitter.on('message.deleted', callback)\n      return () => emitter.off('message.deleted', callback)\n    },\n    onRoomCleared(callback: (room: m.IQChatRoom) => void): () => void {\n      emitter.on('room.cleared', callback)\n      return () => emitter.off('room.cleared', callback)\n    },\n    onSynchronized(callback: () => void): () => void {\n      sync.on('synchronized', callback)\n      return () => sync.off('synchronized', callback)\n    },\n  }\n}\n","import { ApiRequester } from 'src/api'\nimport xs from 'xstream'\nimport { Callback, Subscription } from '../defs'\nimport * as model from '../model'\nimport { Storage } from '../storage'\nimport { subscribeOnNext } from '../utils/stream'\nimport { getLogger } from './logger'\nimport getMqttAdapter from './mqtt'\nimport getSyncAdapter from './sync'\n\nexport type SyncMethod<T extends any[]> = (callback: (...data: T) => void) => Subscription\n\nfunction fromSync<T extends any[]>(method: SyncMethod<T>) {\n  let subscription: Subscription\n  return xs.create<T>({\n    start(listener) {\n      subscription = method((...data) => {\n        listener.next([...data] as T)\n      })\n    },\n    stop() {\n      subscription()\n    },\n  })\n}\n\nfunction isChatRoom(data: model.IQChatRoom | number): data is model.IQChatRoom {\n  return (data as model.IQChatRoom).id != null\n}\n\nfunction isNumber(data: model.IQChatRoom | number): data is number {\n  return typeof (data as number) === 'number'\n}\n\nexport type RealtimeAdapter = ReturnType<typeof getRealtimeAdapter>\nexport default function getRealtimeAdapter(storage: Storage, api: ApiRequester) {\n  const mqtt = getMqttAdapter(storage)\n  const logger = getLogger(storage)\n  const sync = getSyncAdapter({\n    s: storage,\n    api: api,\n    isMqttConnected: () => mqtt.mqtt?.connected === true,\n    logger: (...args: string[]) => logger.log(...args),\n  })\n\n  // region emitter\n  const newMessage$ = xs.merge(fromSync(sync.onNewMessage), fromSync(mqtt.onNewMessage))\n  const onMessageRead$ = xs.merge(fromSync(sync.onMessageRead), fromSync(mqtt.onMessageRead))\n  const onMessageDelivered$ = xs.merge(fromSync(sync.onMessageDelivered), fromSync(mqtt.onMessageDelivered))\n  const onMessageDeleted$ = xs.merge(fromSync(sync.onMessageDeleted), fromSync(mqtt.onMessageDeleted))\n  const onRoomCleared$ = xs.merge(fromSync(sync.onRoomCleared), fromSync(mqtt.onRoomDeleted))\n  const onMessageUpdated$ = xs.merge(fromSync(sync.onMessageUpdated), fromSync(mqtt.onMessageUpdated))\n  // endregion\n\n  return {\n    sync: sync,\n    get mqtt() {\n      return mqtt\n    },\n    clear(): void {\n      mqtt.clear()\n    },\n    async openMqtt() {\n      await mqtt.open()\n    },\n    async closeMqtt() {\n      await mqtt.close()\n    },\n    onMessageDeleted(callback: Callback<model.IQMessage>): Subscription {\n      const subscription = onMessageDeleted$.compose(subscribeOnNext(([message]) => callback(message)))\n      return () => subscription.unsubscribe()\n    },\n    onMessageDelivered(callback: Callback<model.IQMessage>): Subscription {\n      const subscription = onMessageDelivered$.compose(subscribeOnNext(([it]) => callback(it)))\n      return () => subscription.unsubscribe()\n    },\n    onMessageRead(callback: Callback<model.IQMessage>): Subscription {\n      const subscription = onMessageRead$.compose(subscribeOnNext(([it]) => callback(it)))\n      return () => subscription.unsubscribe()\n    },\n    onNewMessage(callback: Callback<model.IQMessage>): Subscription {\n      const subscription = newMessage$.compose(subscribeOnNext(([message]) => callback(message)))\n      return () => subscription.unsubscribe()\n    },\n    onMessageUpdated(callback: Callback<model.IQMessage>): Subscription {\n      const subscription = onMessageUpdated$.compose(subscribeOnNext(([message]) => callback(message)))\n      return () => subscription.unsubscribe()\n    },\n    onNewMessage$() {\n      return newMessage$.map(([msg]) => msg)\n    },\n    get onMessageUpdated$() {\n      return onMessageUpdated$.map(([msg]) => msg)\n    },\n    onMessageRead$() {\n      return onMessageRead$.map(([it]) => it)\n    },\n    onMessageDelivered$() {\n      return onMessageDelivered$.map(([it]) => it)\n    },\n    get onMessageDeleted$() {\n      return onMessageDeleted$.map(([it]) => it)\n    },\n    onRoomCleared$() {\n      return onRoomCleared$.map(([it]) => it)\n    },\n\n    onPresence(callback: (userId: string, isOnline: boolean, lastSeen: Date) => void): Subscription {\n      const subscription = fromSync(mqtt.onUserPresence).compose(\n        subscribeOnNext(([userId, isOnline, lastSeen]) => callback(userId, isOnline, lastSeen))\n      )\n      return () => subscription.unsubscribe()\n    },\n    onRoomCleared(callback: Callback<number>): Subscription {\n      const subscription = onRoomCleared$.compose(\n        subscribeOnNext(([room]) => {\n          if (isNumber(room)) callback(room)\n          if (isChatRoom(room)) callback(room.id)\n        })\n      )\n      return () => subscription.unsubscribe()\n    },\n    onTyping(callback: (userId: string, roomId: number, isTyping: boolean) => void): Subscription {\n      const subscription = fromSync(mqtt.onUserTyping).compose(\n        subscribeOnNext(([userId, roomId, isTyping]) => callback(userId, roomId, isTyping))\n      )\n      return () => subscription.unsubscribe()\n    },\n    sendPresence(userId: string, isOnline: boolean): void {\n      mqtt.sendPresence(userId, isOnline)\n    },\n    sendTyping(roomId: number, userId: string, isTyping: boolean): void {\n      mqtt.sendTyping(roomId, userId, isTyping)\n    },\n    synchronize(lastMessageId: model.IQAccount['lastMessageId']): void {\n      sync.synchronize(lastMessageId)\n    },\n    synchronizeEvent(lastEventId: model.IQAccount['lastSyncEventId']): void {\n      sync.synchronizeEvent(lastEventId)\n    },\n  }\n}\n","import * as model from '../model'\nimport * as Api from '../api'\nimport * as Provider from '../provider'\nimport * as Decoder from '../decoder'\nimport { Storage } from '../storage'\n\nexport const getRoomAdapter = (s: Storage, api: Api.ApiRequester) => ({\n  async addParticipants(roomId: number, participantIds: string[]): Promise<model.IQParticipant[]> {\n    const apiConfig = Api.addRoomParticipants({\n      ...Provider.withBaseUrl(s),\n      ...Provider.withCredentials(s),\n      id: roomId,\n      userIds: participantIds,\n    })\n    const resp = await api.request<AddParticipantsResponse.RootObject>(apiConfig)\n    return resp.results.participants_added.map(Decoder.participant)\n  },\n  async removeParticipants(\n    id: model.IQChatRoom['id'],\n    participantIds: model.IQParticipant['id'][]\n  ): Promise<model.IQParticipant[]> {\n    const resp = await api.request<RemoveParticipantResponse.RootObject>(\n      Api.removeRoomParticipants({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        id,\n        userIds: participantIds,\n      })\n    )\n    return resp.results.participants_removed.map((email) =>\n      Decoder.participant({\n        email,\n      } as any)\n    )\n  },\n  async chatUser(userId: model.IQUser['id'], extras?: model.IQChatRoom['extras']): Promise<model.IQChatRoom> {\n    const resp = await api.request<ChatUserResponse.RootObject>(\n      Api.getOrCreateRoomWithTarget({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        userIds: [userId],\n        extras,\n      })\n    )\n    return Decoder.room({\n      ...resp.results.room,\n      is_removed: false,\n      last_comment: resp.results.comments.find((it) => it.id === resp.results.room.last_comment_id),\n    })\n  },\n  async clearRoom(uniqueIds: string[]): Promise<void> {\n    await api.request<ClearRoomResponse.RootObject>(\n      Api.clearRooms({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        uniqueIds,\n      })\n    )\n    return undefined as void\n  },\n  async createGroup(\n    name: model.IQChatRoom['name'],\n    userIds: model.IQUser['id'][],\n    avatarUrl?: model.IQChatRoom['avatarUrl'],\n    extras?: model.IQChatRoom['extras']\n  ): Promise<model.IQChatRoom> {\n    const resp = await api.request<CreateRoomResponse.RootObject>(\n      Api.createRoom({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        name,\n        userIds,\n        avatarUrl,\n        extras,\n      })\n    )\n    return Decoder.room({\n      ...resp.results.room,\n      is_removed: false,\n      last_comment: resp.results.comments.pop(),\n    })\n  },\n  async getChannel(\n    uniqueId: model.IQChatRoom['uniqueId'],\n    name?: model.IQChatRoom['name'],\n    avatarUrl?: model.IQChatRoom['avatarUrl'],\n    extras?: model.IQChatRoom['extras']\n  ): Promise<model.IQChatRoom> {\n    const resp = await api.request<GetChannelResponse.RootObject>(\n      Api.getOrCreateRoomWithUniqueId({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        uniqueId,\n        name,\n        avatarUrl,\n        options: extras,\n      })\n    )\n    return Decoder.room({\n      ...resp.results.room,\n      is_removed: false,\n      last_comment: resp.results.comments.find((it) => it.id === resp.results.room.last_comment_id),\n    })\n  },\n  async getParticipantList(\n    uniqueId: string,\n    page?: number,\n    limit?: number,\n    sorting?: 'asc' | 'desc'\n  ): Promise<model.IQParticipant[]> {\n    const resp = await api.request<GetParticipantResponse.RootObject>(\n      Api.getRoomParticipants({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        uniqueId,\n        page,\n        limit,\n        sorting,\n      })\n    )\n    return resp.results.participants.map(Decoder.participant)\n  },\n  async getRoom(roomId: number): Promise<[model.IQChatRoom, model.IQMessage[]]> {\n    const resp = await api.request<GetRoomResponse.RootObject>(\n      Api.getRoomById({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        id: roomId,\n      })\n    )\n    const room = Decoder.room({ ...resp.results.room, is_removed: false, last_comment: resp.results.comments.pop() })\n    const comments = resp.results.comments.map((c) => Decoder.message(c))\n\n    return [room, comments]\n  },\n  async getRoomInfo(\n    roomIds?: number[],\n    roomUniqueIds?: string[],\n    page?: number,\n    showRemoved: boolean = false,\n    showParticipants: boolean = false\n  ): Promise<model.IQChatRoom[]> {\n    const resp = await api.request<GetRoomInfoResponse.RootObject>(\n      Api.getRoomInfo({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        showParticipants,\n        showRemoved,\n        roomIds,\n        roomUniqueIds,\n        page,\n      })\n    )\n    return resp.results.rooms_info.map(Decoder.room)\n  },\n  async getRoomList(\n    showParticipants?: boolean,\n    showRemoved?: boolean,\n    showEmpty?: boolean,\n    page?: number,\n    limit?: number\n  ): Promise<model.IQChatRoom[]> {\n    const apiConfig = Api.getUserRooms({\n      ...Provider.withBaseUrl(s),\n      ...Provider.withCredentials(s),\n      showEmpty,\n      showRemoved,\n      showParticipants,\n      page,\n      limit,\n    })\n    const res = await api.request<GetRoomListResponse.RootObject>(apiConfig)\n    return res.results.rooms_info.map<model.IQChatRoom>((it: any) => Decoder.room(it))\n  },\n  async getUnreadCount(): Promise<number> {\n    const resp = await api.request<GetUnreadResponse.RootObject>(\n      Api.getTotalUnreadCount({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n      })\n    )\n    return resp.results.total_unread_count\n  },\n  async getRoomUnreadCount(): Promise<number> {\n    const resp = await api.request<GetUnreadResponse.RootObject>(\n      Api.getRoomUnreadCount({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n      })\n    )\n    return resp.results.total_unread_count\n  },\n  async updateRoom(\n    roomId: model.IQChatRoom['id'],\n    name?: model.IQChatRoom['name'],\n    avatarUrl?: model.IQChatRoom['avatarUrl'],\n    extras?: model.IQChatRoom['extras']\n  ): Promise<model.IQChatRoom> {\n    const resp = await api.request<UpdateRoomResponse.RootObject>(\n      Api.updateRoom({\n        ...Provider.withBaseUrl(s),\n        ...Provider.withCredentials(s),\n        avatarUrl,\n        extras,\n        name,\n        id: roomId,\n      })\n    )\n    return Decoder.room(resp.results.room as any)\n  },\n})\n\nexport default getRoomAdapter\n\nexport type RoomAdapter = ReturnType<typeof getRoomAdapter>\n\n//region Response Type\ndeclare module AddParticipantsResponse {\n  export interface Extras {}\n\n  export interface ParticipantsAdded {\n    avatar_url: string\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    last_comment_read_id: number\n    last_comment_read_id_str: string\n    last_comment_received_id: number\n    last_comment_received_id_str: string\n    username: string\n  }\n\n  export interface Results {\n    participants_added: ParticipantsAdded[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module ChatUserResponse {\n  export interface Participant {\n    avatar_url: string\n    email: string\n    extras: object\n    id: number\n    id_str: string\n    last_comment_read_id: number\n    last_comment_read_id_str: string\n    last_comment_received_id: number\n    last_comment_received_id_str: string\n    username: string\n  }\n\n  export interface Room {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    is_public_channel: boolean\n    last_comment_id: number\n    last_comment_id_str: string\n    last_comment_message: string\n    last_topic_id: number\n    last_topic_id_str: string\n    options: string\n    participants: Participant[]\n    raw_room_name: string\n    room_name: string\n    room_total_participants: number\n    unique_id: string\n    unread_count: number\n  }\n\n  export interface Results {\n    comments: any[]\n    room: Room\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module ClearRoomResponse {\n  export interface Room {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    options: string\n    raw_room_name: string\n    room_name: string\n    unique_id: string\n    last_comment?: any\n  }\n\n  export interface Results {\n    rooms: Room[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module CreateRoomResponse {\n  export interface Extras {\n    role: string\n  }\n\n  export interface Participant {\n    avatar_url: string\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    last_comment_read_id: number\n    last_comment_read_id_str: string\n    last_comment_received_id: number\n    last_comment_received_id_str: string\n    username: string\n  }\n\n  export interface Room {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    is_public_channel: boolean\n    last_comment_id: number\n    last_comment_id_str: string\n    last_comment_message: string\n    last_topic_id: number\n    last_topic_id_str: string\n    options: string\n    participants: Participant[]\n    raw_room_name: string\n    room_name: string\n    room_total_participants: number\n    unique_id: string\n    unread_count: number\n  }\n\n  export interface Results {\n    comments: any[]\n    room: Room\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module GetChannelResponse {\n  export interface Room {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    is_public_channel: boolean\n    last_comment_id: number\n    last_comment_id_str: string\n    last_comment_message: string\n    last_topic_id: number\n    last_topic_id_str: string\n    options: string\n    participants: any[]\n    raw_room_name: string\n    room_name: string\n    room_total_participants: number\n    unique_id: string\n    unread_count: number\n  }\n\n  export interface Results {\n    changed: boolean\n    comments: any[]\n    room: Room\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module GetParticipantResponse {\n  export interface Meta {\n    current_offset: number\n    per_page: number\n    total: number\n  }\n\n  export interface Extras {}\n\n  export interface Participant {\n    avatar_url: string\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    last_comment_read_id: number\n    last_comment_read_id_str: string\n    last_comment_received_id: number\n    last_comment_received_id_str: string\n    username: string\n  }\n\n  export interface Results {\n    meta: Meta\n    participants: Participant[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module GetRoomResponse {\n  export interface Payload {}\n\n  export interface Avatar {\n    url: string\n  }\n\n  export interface UserAvatar {\n    avatar: Avatar\n  }\n\n  export interface Comment {\n    comment_before_id: number\n    comment_before_id_str: string\n    disable_link_preview: boolean\n    email: string\n    extras: object\n    id: number\n    id_str: string\n    is_deleted: boolean\n    is_public_channel: boolean\n    message: string\n    payload: Payload\n    room_avatar: string\n    room_id: number\n    room_id_str: string\n    room_name: string\n    room_type: string\n    status: string\n    timestamp: string\n    topic_id: number\n    topic_id_str: string\n    type: string\n    unique_temp_id: string\n    unix_nano_timestamp: number\n    unix_timestamp: number\n    user_avatar: UserAvatar\n    user_avatar_url: string\n    user_id: number\n    user_id_str: string\n    username: string\n  }\n\n  export interface Extras2 {\n    role: string\n  }\n\n  export interface Participant {\n    avatar_url: string\n    email: string\n    extras: Extras2\n    id: number\n    id_str: string\n    last_comment_read_id: number\n    last_comment_read_id_str: string\n    last_comment_received_id: number\n    last_comment_received_id_str: string\n    username: string\n  }\n\n  export interface Room {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    is_public_channel: boolean\n    last_comment_id: number\n    last_comment_id_str: string\n    last_comment_message: string\n    last_topic_id: number\n    last_topic_id_str: string\n    options: string\n    participants: Participant[]\n    raw_room_name: string\n    room_name: string\n    room_total_participants: number\n    unique_id: string\n    unread_count: number\n  }\n\n  export interface Results {\n    comments: Comment[]\n    room: Room\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module GetRoomInfoResponse {\n  export interface Meta {\n    request_rooms_total: number\n    response_rooms_total: number\n  }\n\n  export interface Extras {}\n\n  export interface Payload {}\n\n  export interface Avatar {\n    url: string\n  }\n\n  export interface UserAvatar {\n    avatar: Avatar\n  }\n\n  export interface LastComment {\n    comment_before_id: number\n    comment_before_id_str: string\n    disable_link_preview: boolean\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    is_deleted: boolean\n    is_public_channel: boolean\n    message: string\n    payload: Payload\n    room_avatar: string\n    room_id: number\n    room_id_str: string\n    room_name: string\n    room_type: string\n    status: string\n    timestamp: string\n    topic_id: number\n    topic_id_str: string\n    type: string\n    unique_temp_id: string\n    unix_nano_timestamp: number\n    unix_timestamp: number\n    user_avatar: UserAvatar\n    user_avatar_url: string\n    user_id: number\n    user_id_str: string\n    username: string\n  }\n\n  export interface Participant {\n    avatar_url: string\n    email: string\n    extras: object\n    id: number\n    id_str: string\n    last_comment_read_id: number\n    last_comment_read_id_str: string\n    last_comment_received_id: number\n    last_comment_received_id_str: string\n    username: string\n  }\n\n  export interface RoomsInfo {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    is_public_channel: boolean\n    is_removed: boolean\n    last_comment: LastComment\n    options: string\n    participants: Participant[]\n    raw_room_name: string\n    room_name: string\n    room_total_participants: number\n    unique_id: string\n    unread_count: number\n  }\n\n  export interface Results {\n    meta: Meta\n    rooms_info: RoomsInfo[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module GetRoomListResponse {\n  export interface Meta {\n    current_page: number\n    total_room: number\n  }\n\n  export interface Extras {}\n\n  export interface Payload {}\n\n  export interface Avatar {\n    url: string\n  }\n\n  export interface UserAvatar {\n    avatar: Avatar\n  }\n\n  export interface LastComment {\n    comment_before_id: number\n    comment_before_id_str: string\n    disable_link_preview: boolean\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    is_deleted: boolean\n    is_public_channel: boolean\n    message: string\n    payload: Payload\n    room_avatar: string\n    room_id: number\n    room_id_str: string\n    room_name: string\n    room_type: string\n    status: string\n    timestamp: string\n    topic_id: number\n    topic_id_str: string\n    type: string\n    unique_temp_id: string\n    unix_nano_timestamp: any\n    unix_timestamp: number\n    user_avatar: UserAvatar\n    user_avatar_url: string\n    user_id: number\n    user_id_str: string\n    username: string\n  }\n\n  export interface RoomsInfo {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    is_public_channel: boolean\n    is_removed: boolean\n    last_comment: LastComment\n    options: string\n    raw_room_name: string\n    room_name: string\n    unique_id: string\n    unread_count: number\n    participants?: GetRoomInfoResponse.Participant[]\n    room_total_participants?: number\n  }\n\n  export interface Results {\n    meta: Meta\n    rooms_info: RoomsInfo[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module GetUnreadResponse {\n  export interface Results {\n    total_unread_count: number\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module RemoveParticipantResponse {\n  export interface Results {\n    participants_removed: string[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module UpdateRoomResponse {\n  export interface Extras {\n    role: string\n  }\n\n  export interface Participant {\n    avatar_url: string\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    last_comment_read_id: number\n    last_comment_read_id_str: string\n    last_comment_received_id: number\n    last_comment_received_id_str: string\n    username: string\n  }\n\n  export interface Room {\n    avatar_url: string\n    chat_type: string\n    id: number\n    id_str: string\n    is_public_channel: boolean\n    last_comment_id: number\n    last_comment_id_str: string\n    last_comment_message: string\n    last_topic_id: number\n    last_topic_id_str: string\n    options: string\n    participants: Participant[]\n    raw_room_name: string\n    room_name: string\n    room_total_participants: number\n    unique_id: string\n    unread_count: number\n  }\n\n  export interface Results {\n    changed: boolean\n    comments: any[]\n    room: Room\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\n//endregion\n","import { IQUserExtraProps, IAppConfig } from '../defs'\nimport * as Decoder from '../decoder'\nimport * as model from '../model'\nimport * as Api from '../api'\nimport { Storage } from '../storage'\nimport * as Provider from '../provider'\n\ntype NonceResponse = {\n  status: number\n  results: { expired_at: number; nonce: string }\n}\nexport type UserAdapter = ReturnType<typeof getUserAdapter>\n\nconst getUserAdapter = (s: Storage, api: Api.ApiRequester) => ({\n  login(userId: string, userKey: string, { avatarUrl, extras, name }: IQUserExtraProps): Promise<model.IQAccount> {\n    const apiConfig = Api.loginOrRegister({\n      ...Provider.withBaseUrl(s),\n      ...Provider.withHeaders(s),\n      userId,\n      userKey,\n      username: name,\n      extras,\n      avatarUrl,\n    })\n\n    return api.request<UserResponse.RootObject>(apiConfig).then((resp) => {\n      const [account, token_] = Decoder.account(resp.results.user)\n      s.setCurrentUser(account)\n      s.setToken(token_)\n      s.setLastMessageId(account.lastMessageId)\n      s.setLastEventId(account.lastSyncEventId)\n      return account\n    })\n  },\n  clear() {\n    // @ts-ignore\n    s.setCurrentUser(undefined)\n    // @ts-ignore\n    s.setToken(undefined)\n  },\n  blockUser(userId: string): Promise<model.IQUser> {\n    const apiConfig = Api.blockUser({\n      ...Provider.withBaseUrl(s),\n      ...Provider.withCredentials(s),\n      userId: userId,\n    })\n    return api.request<BlockUserResponse.RootObject>(apiConfig).then((resp) => Decoder.user(resp.results.user))\n  },\n  getBlockedUser(page: number = 1, limit: number = 20): Promise<model.IQUser[]> {\n    const apiConfig = Api.getBlockedUsers({\n      ...Provider.withBaseUrl(s),\n      ...Provider.withCredentials(s),\n      limit,\n      page,\n    })\n    return api\n      .request<BlockedUserListResponse.RootObject>(apiConfig)\n      .then((resp) => resp.results.users.map(Decoder.user))\n  },\n  getUserList(query: string = '', page: number = 1, limit: number = 20): Promise<model.IQUser[]> {\n    return api\n      .request<UserListResponse.RootObject>(\n        Api.getUserList({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          query,\n          page,\n          limit,\n        })\n      )\n      .then((resp) => resp.results.users.map((it) => Decoder.user(it as any)))\n  },\n  unblockUser(userId: string): Promise<model.IQUser> {\n    return api\n      .request<BlockUserResponse.RootObject>(\n        Api.unblockUser({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          userId,\n        })\n      )\n      .then((resp) => Decoder.user(resp.results.user))\n  },\n  setUserFromIdentityToken(identityToken: string): Promise<model.IQAccount> {\n    return api\n      .request<UserResponse.RootObject>(\n        Api.verifyIdentityToken({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withHeaders(s),\n          identityToken,\n        })\n      )\n      .then((resp) => {\n        const [account, token] = Decoder.account(resp.results.user)\n        s.setCurrentUser(account)\n        s.setToken(token)\n        return account\n      })\n  },\n  updateUser(\n    name?: model.IQAccount['name'],\n    avatarUrl?: model.IQAccount['avatarUrl'],\n    extras?: model.IQAccount['extras']\n  ): Promise<model.IQAccount> {\n    return api\n      .request<UserResponse.RootObject>(\n        Api.patchProfile({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          name,\n          avatarUrl,\n          extras,\n          id: s.getCurrentUser().id,\n        })\n      )\n      .then((resp) => {\n        const [account] = Decoder.account(resp.results.user)\n        return account\n      })\n  },\n  getNonce(): Promise<string> {\n    return api\n      .request<NonceResponse>(\n        Api.getNonce({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withHeaders(s),\n        })\n      )\n      .then((resp) => resp.results.nonce)\n  },\n  getUserData(): Promise<model.IQAccount> {\n    return api\n      .request<UserResponse.RootObject>(\n        Api.getProfile({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n        })\n      )\n      .then((resp) => {\n        const [account] = Decoder.account(resp.results.user)\n        return account\n      })\n  },\n  registerDeviceToken(deviceToken: string, isDevelopment: boolean = false): Promise<boolean> {\n    return api\n      .request<DeviceTokenResponse.RootObject>(\n        Api.setDeviceToken({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          isDevelopment,\n          deviceToken,\n        })\n      )\n      .then((resp) => resp.results.changed)\n  },\n  unregisterDeviceToken(deviceToken: string, isDevelopment: boolean = false): Promise<boolean> {\n    return api\n      .request<DeviceTokenResponse.RootObject>(\n        Api.removeDeviceToken({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withCredentials(s),\n          deviceToken,\n          isDevelopment,\n        })\n      )\n      .then((resp) => resp.results.changed)\n  },\n  async getAppConfig(): Promise<IAppConfig> {\n    return api\n      .request<AppConfigResponse.RootObject>(\n        Api.appConfig({\n          ...Provider.withBaseUrl(s),\n          ...Provider.withHeaders(s),\n        })\n      )\n      .then((r) => Decoder.appConfig(r.results))\n  },\n})\n\nexport default getUserAdapter\n\n// Response type\ndeclare module UserResponse {\n  export interface App {\n    code: string\n    id: number\n    id_str: string\n    name: string\n  }\n\n  export interface Avatar2 {\n    url: string\n  }\n\n  export interface Avatar {\n    avatar: Avatar2\n  }\n\n  export interface Extras {\n    role: string\n  }\n\n  export interface User {\n    app: App\n    avatar: Avatar\n    avatar_url: string\n    email: string\n    extras: object\n    id: number\n    id_str: string\n    last_comment_id: number\n    last_comment_id_str: string\n    last_sync_event_id: number\n    pn_android_configured: boolean\n    pn_ios_configured: boolean\n    rtKey: string\n    token: string\n    username: string\n  }\n\n  export interface Results {\n    user: User\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module BlockUserResponse {\n  export interface Avatar2 {\n    url: string\n  }\n\n  export interface Avatar {\n    avatar: Avatar2\n  }\n\n  export interface Extras {}\n\n  export interface User {\n    avatar: Avatar\n    avatar_url: string\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    username: string\n  }\n\n  export interface Results {\n    user: User\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module UserListResponse {\n  export interface Meta {\n    total_data: number\n    total_page: number\n  }\n\n  export interface Extras {}\n\n  export interface User {\n    avatar_url: string\n    created_at: Date\n    email: string\n    extras: Extras\n    id: number\n    name: string\n    updated_at: Date\n    username: string\n  }\n\n  export interface Results {\n    meta: Meta\n    users: User[]\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module BlockedUserListResponse {\n  export interface Avatar2 {\n    url: string\n  }\n\n  export interface Avatar {\n    avatar: Avatar2\n  }\n\n  export interface Extras {}\n\n  export interface BlockedUser {\n    avatar: Avatar\n    avatar_url: string\n    email: string\n    extras: Extras\n    id: number\n    id_str: string\n    username: string\n  }\n\n  export interface Results {\n    users: BlockedUser[]\n    total: number\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module DeviceTokenResponse {\n  export interface Results {\n    changed: boolean\n    pn_android_configured: boolean\n    pn_ios_configured: boolean\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\ndeclare module AppConfigResponse {\n  export interface Results {\n    base_url: string\n    broker_lb_url: string\n    broker_url: string\n    enable_event_report: boolean\n    sync_interval: number\n    sync_on_connect: number\n    enable_realtime: boolean\n    enable_realtime_check: boolean\n    extras: string\n    enable_sync: boolean | undefined\n    enable_sync_event: boolean | undefined\n  }\n\n  export interface RootObject {\n    results: Results\n    status: number\n  }\n}\n","import { PostCommentResponse } from './adapters/message'\nimport * as model from './model'\n\nexport type IQCallback2<T> = (response?: T, error?: Error) => void\nexport type IQCallback1 = (error?: Error) => void\n\nexport type IQProgressListener<O = string> = (error?: Error, progress?: number, url?: O) => void\n\nexport interface Callback<T1> {\n  (data1: T1): void\n}\nexport interface Subscription {\n  (): void\n}\n\nexport interface IQiscus {\n  setup(appId: string, syncInterval: number): void\n  setupWithCustomServer(\n    appId: string,\n    baseUrl: string,\n    brokerUrl: string,\n    brokerLbUrl: string,\n    syncInterval: number\n  ): void\n\n  // for event handler ------------------------------\n  onMessageReceived(handler: (message: IQMessage) => void): Subscription\n  onMessageDeleted(handler: (message: IQMessage) => void): Subscription\n  onMessageDelivered(handler: (message: IQMessage) => void): Subscription\n  onMessageRead(handler: (message: IQMessage) => void): Subscription\n  onUserTyping(handler: (userId: string, roomId: number, isTyping: boolean) => void): Subscription\n  onUserOnlinePresence(handler: (userId: string, isOnline: boolean, lastSeen: Date) => void): Subscription\n  onChatRoomCleared(handler: (roomId: number) => void): Subscription\n  onConnected(handler: () => void): Subscription\n  onReconnecting(handler: () => void): Subscription\n  onDisconnected(handler: () => void): Subscription\n  subscribeChatRoom(room: IQRoom): void\n  unsubscribeChatRoom(room: IQRoom): void\n  subscribeUserOnlinePresence(userId: string): void\n  unsubscribeUserOnlinePresence(userId: string): void\n  // ------------------------------------------------\n\n  // from UserAdapter -------------------------------\n  setUser(\n    userId: string,\n    userKey: string,\n    username: string,\n    avatarUrl: string,\n    extras: object,\n    callback: IQCallback2<IQUser>\n  ): void | Promise<IQUser>\n  setUserWithIdentityToken(token: string, callback?: IQCallback2<IQUser>): void | Promise<IQUser>\n  blockUser(userId: string, callback?: IQCallback2<IQUser>): void | Promise<IQUser>\n  unblockUser(userId: string, callback?: IQCallback2<IQUser>): void | Promise<IQUser>\n  getBlockedUsers(page?: number, limit?: number, callback?: IQCallback2<IQUser[]>): void | Promise<IQUser[]>\n  getUserData(callback?: IQCallback2<IQUser>): void | Promise<IQUser>\n  updateUser(\n    username?: string,\n    avatarUrl?: string,\n    extras?: object,\n    callback?: IQCallback2<IQUser>\n  ): void | Promise<IQUser>\n  getUsers(\n    searchUsername?: string,\n    page?: number,\n    limit?: number,\n    callback?: IQCallback2<IQUser[]>\n  ): void | Promise<IQUser[]>\n  // ------------------------------------------------\n\n  // TODO: I'm not discussed yet\n  clearUser(callback?: IQCallback2<void>): void\n\n  // from RoomAdapter ----------\n  chatUser(userId: string, extras: object, callback?: IQCallback2<IQRoom>): void | Promise<IQRoom>\n  createGroupChat(\n    name: string,\n    userIds: string[],\n    avatarUrl: string,\n    extras: object,\n    callback?: IQCallback2<IQRoom>\n  ): void | Promise<IQRoom>\n  createChannel(\n    uniqueId: string,\n    name: string,\n    avatarUrl: string,\n    extras: object,\n    callback?: IQCallback2<IQRoom>\n  ): void | Promise<IQRoom>\n  getChannel(uniqueId: string, callback?: IQCallback2<IQRoom>): void | Promise<IQRoom>\n  updateChatRoom(\n    roomId: number,\n    name: string,\n    avatarUrl: string,\n    extras: object,\n    callback?: IQCallback2<IQRoom>\n  ): void | Promise<IQRoom>\n  addParticipants(\n    roomId: number,\n    userIds: string[],\n    callback?: IQCallback2<IQParticipant[]>\n  ): void | Promise<IQParticipant[]>\n  removeParticipants(\n    roomId: number,\n    userIds: string[],\n    callback?: IQCallback2<IQParticipant[]>\n  ): void | Promise<IQParticipant[] | string[]>\n  getChatRoomWithMessages(roomId: number, callback?: IQCallback2<IQRoom>): void | Promise<IQRoom>\n  getChatRooms(\n    roomIds: number[],\n    page?: number,\n    showRemoved?: boolean,\n    showParticipant?: boolean,\n    callback?: IQCallback2<IQRoom[]>\n  ): void | Promise<IQRoom[]>\n  getChatRooms(\n    uniqueIds: string[],\n    page?: number,\n    showRemoved?: boolean,\n    showParticipant?: boolean,\n    callback?: IQCallback2<IQRoom[]>\n  ): void | Promise<IQRoom[]>\n  getAllChatRooms(\n    showParticipant?: boolean,\n    showRemoved?: boolean,\n    showEmpty?: boolean,\n    page?: number,\n    limit?: number,\n    callback?: IQCallback2<IQRoom[]>\n  ): void | Promise<IQRoom[]>\n  getParticipants(\n    roomUniqueId: string,\n    offset?: number,\n    sorting?: 'asc' | 'desc' | null,\n    callback?: IQCallback2<IQParticipant[]>\n  ): void\n  // ---------------------------\n\n  // from MessageAdapter -----------------------------------\n  sendMessage(roomId: number, message: IQMessageT, callback?: IQCallback2<IQMessage>): void | Promise<IQMessage>\n  markAsRead(roomId: number, messageId: number, callback?: IQCallback2<IQMessage>): void | Promise<IQMessage>\n  markAsDelivered(roomId: number, messageId: number, callback?: IQCallback2<IQMessage>): void | Promise<IQMessage>\n  getPreviouseMessagesById(\n    roomId: number,\n    limit?: number,\n    messageId?: number,\n    callback?: IQCallback2<IQMessage[]>\n  ): void | Promise<IQMessage[]>\n  getNextMessagesById(\n    roomId: number,\n    limit?: number,\n    messageId?: number,\n    callback?: IQCallback2<IQMessage[]>\n  ): void | Promise<IQMessage[]>\n  deleteMessages(messageUniqueIds: string[], callback?: IQCallback2<IQMessage[]>): void | Promise<IQMessage[]>\n  clearMessagesByChatRoomId(roomUniqueIds: string[], callback?: IQCallback2<IQRoom[]>): void | Promise<IQRoom[]>\n  // -------------------------------------------------------\n\n  // Misc -------------------------------------\n  upload(file: File, callback?: IQProgressListener): void\n  registerDeviceToken(token: string, isDevelopment: boolean, callback?: IQCallback2<boolean>): void | Promise<boolean>\n  removeDeviceToken(token: string, isDevelopment: boolean, callback?: IQCallback2<boolean>): void | Promise<boolean>\n  getJWTNonce(callback?: IQCallback2<string>): void | Promise<string>\n  synchronize(lastMessageId: number): void\n  synchronizeEvent(lastEventId: number): void\n  getTotalUnreadCount(callback?: IQCallback2<number>): void | Promise<number>\n  setSyncInterval(interval: number): void\n  hasSetupUser(callback?: (isSetup: boolean) => void): void | Promise<boolean>\n  getThumbnailURL(url: string): string\n  sendFileMessage(\n    roomId: number,\n    message: string,\n    file: File,\n    callback: (error: Error, progress: number, message: IQMessage) => void\n  ): void\n\n  // ------------------------------------------\n  publishTyping(roomId: number, isTyping?: boolean): void\n\n  // from CustomEventAdapter\n  publishCustomEvent(roomId: number, data: any): void\n  subscribeCustomEvent(roomId: number, callback: IQCallback2<any>): void\n  unsubscribeCustomEvent(roomId: number): void\n}\n\nexport interface IQUserExtraProps {\n  avatarUrl?: model.IQAccount['avatarUrl']\n  name?: model.IQAccount['name']\n  extras?: model.IQAccount['extras']\n}\n\nexport interface IQUserAdapter {\n  login(userId: string, userKey: string, extra: IQUserExtraProps): Promise<IQUser>\n  clear(): void\n  updateUser(name: string, avatarUrl: string, extras: string): Promise<IQUser>\n  getNonce(): Promise<QNonce>\n  setUserFromIdentityToken(token: string): Promise<IQUser>\n  getUserList(query: string, page?: number, limit?: number): Promise<IQUser[]>\n  getBlockedUser(page?: number, limit?: number): Promise<IQUser[]>\n  blockUser(userId: string): Promise<IQUser>\n  unblockUser(userId: string): Promise<IQUser>\n  getUserData(): Promise<IQUser>\n  registerDeviceToken(token: string, isDevelopment: boolean): Promise<boolean>\n  unregisterDeviceToken(token: string, isDevelopment: boolean): Promise<boolean>\n\n  readonly token: string\n  readonly currentUser: IQUser\n}\n\nexport interface IQUser {\n  id: number\n  userId: string\n  displayName: string\n  avatarUrl?: string | null\n}\n\nexport type QNonce = { expired: number; nonce: string }\n\nexport enum IQRoomType {\n  Group = 'group',\n  Single = 'single',\n}\n\nexport interface IQRoom {\n  id: number\n  name: string\n  avatarUrl: string\n  isChannel: boolean\n  lastMessageId?: number\n  lastMessageContent?: string\n  uniqueId: string\n  unreadCount: number\n  type: IQRoomType\n  totalParticipants?: number\n  participants?: IQParticipant[]\n  options?: string\n  messages?: IQMessage[]\n}\n\nexport interface IQParticipant extends IQUser {\n  lastReadMessageId: number\n  lastReceivedMessageId: number\n}\n\nexport interface IQRoomAdapter {\n  chatUser(userId: string, extras: any): Promise<IQRoom>\n  getRoomList(\n    showParticipant?: boolean,\n    showRemoved?: boolean,\n    showEmpty?: boolean,\n    page?: number,\n    limit?: number\n  ): Promise<IQRoom[]>\n  getRoom(roomId: number): Promise<IQRoom>\n  getChannel(uniqueId: string, name?: string, avatarUrl?: string, extras?: string): Promise<IQRoom>\n  updateRoom(roomId: number, name?: string | null, avatarUrl?: string | null, extras?: string | null): Promise<IQRoom>\n  getParticipantList(roomId: string, offset?: number | null, sorting?: 'asc' | 'desc' | null): Promise<IQParticipant[]>\n  createGroup(name: string, userIds: string[], avatarUrl?: string, extras?: string): Promise<IQRoom>\n  removeParticipants(roomId: number, participantIds: string[]): Promise<IQParticipant[]>\n\n  addParticipants(roomId: number, participantIds: string[]): Promise<IQParticipant[]>\n\n  getRoomInfo(\n    roomId?: number[],\n    uniqueId?: string[],\n    page?: number,\n    showRemoved?: boolean,\n    showParticipant?: boolean\n  ): Promise<IQRoom[]>\n  clearRoom(roomUniqueIds: string[]): Promise<IQRoom[]>\n  getUnreadCount(): Promise<number>\n  readonly rooms: { [key: string]: IQRoom }\n  readonly getRoomDataWithId: (roomId: number) => IQRoom\n  readonly getRoomDataWithUniqueId: (roomUniqueId: string) => IQRoom\n}\n\nexport type IQMessageT = {\n  payload: object\n  extras: object\n  type: string\n  message: string\n}\nexport enum IQMessageStatus {\n  Sending = 'sending',\n  Sent = 'sent',\n  Delivered = 'delivered',\n  Read = 'read',\n  Failed = 'failed',\n}\n\nexport enum IQMessageType {\n  Text = 'text',\n  Custom = 'custom',\n  Attachment = 'file_attachment',\n  Reply = 'reply',\n}\n\nexport interface IQMessage {\n  id: number\n  uniqueId: string\n  roomId: number\n  userId: string\n  content: string\n  previousMessageId: number\n  extras: object\n  payload: object\n  timestamp: Date\n  type: IQMessageType\n  status: IQMessageStatus\n\n  updateFromJson(json: PostCommentResponse.Comment): IQMessage\n}\n\nexport interface IQMessageAdapter {\n  readonly messages: { [key: string]: IQMessage }\n  readonly getMessageDataWithId: (messageId: number) => IQMessage\n  sendMessage(roomId: number, message: IQMessageT): Promise<IQMessage>\n  getMessages(roomId: number, lastMessageId?: number, limit?: number, after?: boolean): Promise<IQMessage[]>\n  deleteMessage(messageUniqueIds: string[]): Promise<IQMessage[]>\n  markAsRead(roomId: number, messageId: number): Promise<IQMessage>\n  markAsDelivered(roomId: number, messageId: number): Promise<IQMessage>\n}\n\nexport type UploadResult = {\n  results: {\n    file: {\n      name: string\n      pages: number\n      size: number\n      url: string\n    }\n  }\n  status: number\n}\n\nexport interface IAppConfig {\n  baseUrl: string\n  brokerLbUrl: string\n  brokerUrl: string\n  enableEventReport: boolean\n  enableRealtime: boolean\n  enableRealtimeCheck: boolean\n  extras: Record<string, any>\n  syncInterval: number\n  syncOnConnect: number\n  isSyncEnabled: boolean | undefined\n  isSyncEventEnabled: boolean | undefined\n}\n","export const Hooks = {\n  MESSAGE_BEFORE_SENT: 'message::before-sent',\n  MESSAGE_BEFORE_RECEIVED: 'message::before-received',\n}\n\nexport function hookAdapterFactory() {\n  type Callback<T extends unknown> = (data: T) => T\n  const hooks: Record<string, Callback<any>[]> = {}\n  const get = (key: string) => {\n    if (!Array.isArray(hooks[key])) hooks[key] = []\n    return hooks[key]\n  }\n\n  function intercept<T extends unknown>(\n    hook: string,\n    callback: (data: T) => T\n  ): () => void {\n    get(hook).push(callback)\n\n    const index = get(hook).length\n    return () => get(hook).splice(index, 1)\n  }\n\n  function trigger<T extends unknown>(hook: string, payload: T): Promise<T> {\n    return get(hook).reduce(\n      (acc, fn) => Promise.resolve(acc).then(fn),\n      Promise.resolve(payload)\n    )\n  }\n\n  async function triggerBeforeReceived$<T extends unknown>(payload: T): Promise<T> {\n    return trigger(Hooks.MESSAGE_BEFORE_RECEIVED, payload)\n  }\n\n  return {\n    trigger,\n    triggerBeforeReceived$,\n    intercept,\n  }\n}\n","import { IQAccount, IQChatRoom, IQMessage } from './model'\n\nexport type Storage = ReturnType<typeof storageFactory>\n\nexport const listStorageFactory = <T extends unknown>() => {\n  const storage = new Map<string, T>()\n  return {\n    getOrSet(id: string, valueIfNull: T) {\n      if (!storage.has(id)) storage.set(id, valueIfNull)\n      return storage.get(id)\n    },\n    [Symbol.iterator]: storage[Symbol.iterator],\n  }\n}\nexport type ListStorageFactory = ReturnType<typeof listStorageFactory>\n\nexport const storageFactory = () => {\n  // const storage = new Map<string, any>()\n  const storage: Record<string, any> = {}\n  const makeSetter =\n    <T>(name: string) =>\n    (value: T): void => {\n      // storage.set(name, value)\n      storage[name] = value\n    }\n  const makeGetter =\n    <T>(name: string, defaultValue?: T) =>\n    (): T => {\n      // storage.get(name) ?? defaultValue\n      return storage[name] ?? defaultValue\n    }\n\n  const defaultBaseURL = 'https://api.qiscus.com'\n  const defaultUploadUrl = `${defaultBaseURL}/api/v2/sdk/upload`\n  const defaultBrokerUrl = 'wss://mqtt.qiscus.com:1886/mqtt'\n  const defaultBrokerLbUrl = 'https://realtime-lb.qiscus.com'\n  const defaultSyncInterval = 5000\n  const defaultSyncIntervalWhenConnected = 30000\n\n  return {\n    defaultBaseURL,\n    defaultUploadUrl,\n    defaultBrokerLbUrl,\n    defaultBrokerUrl,\n    defaultSyncInterval,\n    defaultSyncIntervalWhenConnected,\n    // @ts-ignore\n    __storage: storage,\n    getAppId: makeGetter<string>('app-id'),\n    setAppId: makeSetter<string>('app-id'),\n\n    getBaseUrl: makeGetter<string>('base-url', defaultBaseURL),\n    setBaseUrl: makeSetter<string>('base-url'),\n    getBrokerUrl: makeGetter<string>('broker-url', defaultBrokerUrl),\n    setBrokerUrl: makeSetter<string>('broker-url'),\n    getBrokerLbUrl: makeGetter<string>('broker-lb-url', defaultBrokerLbUrl),\n    setBrokerLbUrl: makeSetter<string>('broker-lb-url'),\n    getUploadUrl: makeGetter<string>('upload-url', defaultUploadUrl),\n    setUploadUrl: makeSetter<string>('upload-url'),\n\n    getSyncInterval: makeGetter<number>('sync-interval', defaultSyncInterval),\n    setSyncInterval: makeSetter<number>('sync-interval'),\n    getSyncIntervalWhenConnected: makeGetter<number>('sync-interval-when-connected', defaultSyncIntervalWhenConnected),\n    setSyncIntervalWhenConnected: makeSetter<number>('sync-interval-when-connected'),\n    getVersion: makeGetter<string>('version'),\n    setVersion: makeSetter<string>('version'),\n    getAccSyncInterval: makeGetter<number>('acc-sync-interval', 1000),\n    setAccSyncInterval: makeSetter<number>('acc-sync-interval'),\n\n    getDebugEnabled: makeGetter<boolean>('is-debug-enabled', false),\n    setDebugEnabled: makeSetter<boolean>('is-debug-enabled'),\n    getBrokerLbEnabled: makeGetter<boolean>('is-broker-lb-enabled', true),\n    setBrokerLbEnabled: makeSetter<boolean>('is-broker-lb-enabled'),\n\n    getToken: makeGetter<string>('token'),\n    setToken: makeSetter<string>('token'),\n    getCurrentUser: makeGetter<IQAccount>('current-user'),\n    setCurrentUser: makeSetter<IQAccount>('current-user'),\n    getCustomHeaders: makeGetter<Record<string, string>>('custom-headers'),\n    setCustomHeaders: makeSetter<Record<string, string>>('custom-headers'),\n\n    getRooms: makeGetter<IQChatRoom[]>('chat-rooms'),\n    setRooms: makeSetter<IQChatRoom[]>('chat-rooms'),\n    getMessages: makeGetter<IQMessage[]>('messages'),\n    setMessages: makeSetter<IQMessage[]>('messages'),\n\n    getLastMessageId: makeGetter<IQAccount['lastMessageId']>('last-message-id'),\n    setLastMessageId: makeSetter<IQAccount['lastMessageId']>('last-message-id'),\n    getLastEventId: makeGetter<IQAccount['lastSyncEventId']>('last-event-id'),\n    setLastEventId: makeSetter<IQAccount['lastSyncEventId']>('last-event-id'),\n\n    getForceDisableSync: makeGetter<boolean>('force-disable-sync', false),\n    setForceDisableSync: makeSetter<boolean>('force-disable-sync'),\n\n    getIsSyncEnabled: makeGetter<boolean>('is-sync-enabled', true),\n    setIsSyncEnabled: makeSetter<boolean>('is-sync-enabled'),\n    getIsSyncEventEnabled: makeGetter<boolean>('is-sync-event-enabled', false),\n    setIsSyncEventEnabled: makeSetter<boolean>('is-sync-event-enabled'),\n  }\n}\n","import axios, { AxiosResponse } from 'axios'\nimport xs from 'xstream'\nimport flattenConcurrently from 'xstream/extra/flattenConcurrently'\nimport { getLogger } from './adapters/logger'\nimport getMessageAdapter from './adapters/message'\nimport getRealtimeAdapter from './adapters/realtime'\nimport getRoomAdapter from './adapters/room'\nimport getUserAdapter from './adapters/user'\nimport { makeApiRequest } from './api'\nimport {\n  Callback,\n  IQCallback1,\n  IQCallback2,\n  IQMessageStatus,\n  IQMessageType,\n  IQProgressListener,\n  Subscription,\n  UploadResult,\n} from './defs'\nimport { hookAdapterFactory, Hooks } from './hook'\nimport * as model from './model'\nimport * as Provider from './provider'\nimport { storageFactory } from './storage'\nimport {\n  isArrayOfNumber,\n  isArrayOfString,\n  isOptArrayString,\n  isOptBoolean,\n  isOptCallback,\n  isOptJson,\n  isOptNumber,\n  isOptString,\n  isReqArrayNumber,\n  isReqArrayOfStringOrNumber,\n  isReqArrayString,\n  isReqBoolean,\n  isReqJson,\n  isReqNumber,\n  isReqString,\n  isRequired,\n} from './utils/param-utils'\nimport {\n  bufferUntil,\n  process,\n  subscribeOnNext,\n  tap,\n  toCallbackOrPromise,\n  toEventSubscription,\n  toEventSubscription_,\n} from './utils/stream'\nimport { isChatRoom } from './utils/try-catch'\nimport { nanoid } from 'nanoid/non-secure'\n\nexport type { IQAccount, IQChatRoom, IQMessage, IQParticipant, IQUser } from './model'\n\nexport default class Qiscus {\n  private static _instance: Qiscus\n\n  private storage = storageFactory()\n\n  // region Property\n  private readonly apiAdapter = makeApiRequest(this.storage)\n  private readonly hookAdapter = hookAdapterFactory()\n  private readonly userAdapter = getUserAdapter(this.storage, this.apiAdapter)\n  private readonly realtimeAdapter = getRealtimeAdapter(this.storage, this.apiAdapter)\n  private readonly loggerAdapter = getLogger(this.storage)\n  private readonly roomAdapter = getRoomAdapter(this.storage, this.apiAdapter)\n  private readonly messageAdapter = getMessageAdapter(this.storage, this.apiAdapter)\n\n  private readonly _onMessageReceived$ = this.realtimeAdapter\n    .onNewMessage$()\n    .map((it) => xs.fromPromise(this.hookAdapter.triggerBeforeReceived$(it)))\n    .compose(flattenConcurrently)\n    .compose(\n      tap((message) => {\n        if (this.currentUser?.id !== message.sender.id) {\n          this.messageAdapter.markAsDelivered(message.chatRoomId, message.id)\n        }\n      })\n    )\n  private readonly _onMessageUpdated$ = this.realtimeAdapter.onMessageUpdated$\n  private readonly _onMessageRead$ = this.realtimeAdapter\n    .onMessageRead$()\n    .map((data) => xs.fromPromise(this.hookAdapter.triggerBeforeReceived$(data)))\n    .compose(flattenConcurrently)\n  private readonly _onMessageDelivered$ = this.realtimeAdapter\n    .onMessageDelivered$()\n    .map((it) => xs.fromPromise(this.hookAdapter.triggerBeforeReceived$(it)))\n    .compose(flattenConcurrently)\n  private readonly _onMessageDeleted$ = this.realtimeAdapter.onMessageDeleted$\n    .map((it) => xs.fromPromise(this.hookAdapter.triggerBeforeReceived$(it)))\n    .compose(flattenConcurrently)\n  private readonly _onRoomCleared$ = this.realtimeAdapter\n    .onRoomCleared$()\n    .map((it) => xs.fromPromise(this.hookAdapter.triggerBeforeReceived$(it)))\n    .compose(flattenConcurrently)\n  // endregion\n\n  public static get instance(): Qiscus {\n    if (this._instance == null) this._instance = new this()\n    return this._instance\n  }\n\n  // region helpers\n  public get appId() {\n    return this.storage.getAppId()\n  }\n  public get token() {\n    return this.storage.getToken()\n  }\n  public get isLogin() {\n    return this.currentUser != null\n  }\n  public get currentUser() {\n    return this.storage.getCurrentUser()\n  }\n  // endregion\n\n  setup(appId: string): Promise<void>\n  setup(appId: string, callback?: IQCallback1): void\n  setup(appId: string, callback?: IQCallback1): void | Promise<void> {\n    return this.setupWithCustomServer(appId, undefined, undefined, undefined, undefined, callback)\n  }\n  setupWithCustomServer(\n    appId: string,\n    baseUrl?: string,\n    brokerUrl?: string,\n    brokerLbUrl?: string,\n    syncInterval?: number\n  ): Promise<void>\n  setupWithCustomServer(\n    appId: string,\n    baseUrl?: string,\n    brokerUrl?: string,\n    brokerLbUrl?: string,\n    syncInterval?: number,\n    callback?: IQCallback1\n  ): void\n  setupWithCustomServer(\n    appId: string,\n    baseUrl: string = this.storage.getBaseUrl(),\n    brokerUrl: string = this.storage.getBrokerUrl(),\n    brokerLbUrl: string = this.storage.getBrokerLbUrl(),\n    syncInterval: number = 5000,\n    callback?: (error?: Error) => void\n  ): void | Promise<void> {\n    const setterHelper = <T>(fromUser: T, fromServer: T | undefined, defaultValue: T): T => {\n      if (typeof fromServer === 'string' && fromServer === '') {\n        if (fromUser != null) {\n          if (typeof fromUser !== 'string') return fromUser\n          if (fromUser.length > 0) return fromUser\n        }\n      }\n      if (typeof fromServer === 'string' && fromServer != null) {\n        if (fromServer.length > 0) return fromServer\n        if (typeof fromServer !== 'string') return fromServer\n      }\n      return defaultValue\n    }\n\n    const brokerUrlSetter = (mqttResult: string) => {\n      if (mqttResult.includes('wss://')) {\n        return mqttResult\n      } else {\n        return `wss://${mqttResult}:1886/mqtt`\n      }\n    }\n\n    return xs\n      .combine(\n        process(appId, isReqString({ appId })),\n        process(baseUrl, isOptString({ baseUrl })),\n        process(brokerUrl, isOptString({ brokerUrl })),\n        process(brokerLbUrl, isOptString({ brokerLbUrl })),\n        process(syncInterval, isOptNumber({ syncInterval })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .map(([appId, baseUrl, brokerUrl, brokerLbUrl, syncInterval]) => {\n        const defaultBaseUrl = this.storage.getBaseUrl()\n        const defaultBrokerUrl = this.storage.getBrokerUrl()\n        const defaultBrokerLbUrl = this.storage.getBrokerLbUrl()\n\n        // We need to disable realtime load balancing if user are using custom server\n        // and did not provide a brokerLbUrl\n        const isDifferentBaseUrl = baseUrl !== defaultBaseUrl\n        const isDifferentBrokerUrl = brokerUrl !== defaultBrokerUrl\n        const isDifferentBrokerLbUrl = brokerLbUrl !== defaultBrokerLbUrl\n        // disable realtime lb if user change baseUrl or mqttUrl but did not change\n        // broker lb url\n        if ((isDifferentBaseUrl || isDifferentBrokerUrl) && !isDifferentBrokerLbUrl) {\n          this.loggerAdapter.log(\n            '' +\n              'force disable load balancing for realtime server, because ' +\n              '`baseUrl` or `brokerUrl` get changed but ' +\n              'did not provide `brokerLbURL`'\n          )\n          this.storage.setBrokerLbEnabled(false)\n        }\n\n        this.storage.setAppId(appId)\n        this.storage.setBaseUrl(baseUrl)\n        this.storage.setBrokerUrl(brokerUrl)\n        this.storage.setBrokerLbUrl(brokerLbUrl)\n        this.storage.setSyncInterval(syncInterval)\n        this.storage.setDebugEnabled(false)\n        this.storage.setVersion('javascript-3.4.2')\n\n        return xs.fromPromise(this.userAdapter.getAppConfig())\n      })\n      .compose(flattenConcurrently)\n      .map((appConfig) => {\n        this.storage.setBaseUrl(setterHelper(baseUrl, appConfig.baseUrl, this.storage.defaultBaseURL))\n        this.storage.setBrokerUrl(\n          brokerUrlSetter(setterHelper(brokerUrl, appConfig.brokerUrl, this.storage.defaultBrokerUrl))\n        )\n        this.storage.setBrokerLbUrl(setterHelper(brokerLbUrl, appConfig.brokerLbUrl, this.storage.defaultBrokerLbUrl))\n        this.storage.setSyncInterval(\n          setterHelper(syncInterval, appConfig.syncInterval, this.storage.defaultSyncInterval)\n        )\n        this.storage.setSyncIntervalWhenConnected(\n          setterHelper(\n            this.storage.defaultSyncIntervalWhenConnected,\n            appConfig.syncOnConnect,\n            this.storage.defaultSyncIntervalWhenConnected\n          )\n        )\n        this.storage.setIsSyncEnabled(setterHelper(true, appConfig.isSyncEnabled, true))\n        this.storage.setIsSyncEventEnabled(setterHelper(false, appConfig.isSyncEventEnabled, false))\n      })\n      .compose(toCallbackOrPromise<void>(callback))\n  }\n\n  setCustomHeader(headers: Record<string, string>): void {\n    this.storage.setCustomHeaders(headers)\n  }\n\n  // User Adapter ------------------------------------------\n  setUser(\n    userId: string,\n    userKey: string,\n    username?: string,\n    avatarUrl?: string,\n    extras?: object | null\n  ): Promise<model.IQAccount>\n  setUser(\n    userId: string,\n    userKey: string,\n    username?: string,\n    avatarUrl?: string,\n    extras?: object | null,\n    callback?: null | IQCallback2<model.IQAccount>\n  ): void\n  setUser(\n    userId: string,\n    userKey: string,\n    username?: string,\n    avatarUrl?: string,\n    extras?: object | null,\n    callback?: null | IQCallback2<model.IQAccount>\n  ): void | Promise<model.IQAccount> {\n    return xs\n      .combine(\n        process(userId, isReqString({ userId })),\n        process(userKey, isReqString({ userKey })),\n        process(username, isOptString({ username })),\n        process(avatarUrl, isOptString({ avatarUrl })),\n        process(extras, isOptJson({ extras })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .map(([userId, userKey, username, avatarUrl, extras]) =>\n        xs.fromPromise(\n          this.userAdapter.login(userId, userKey, {\n            name: username,\n            avatarUrl,\n            extras,\n          } as { name: string; avatarUrl: string; extras: any })\n        )\n      )\n      .compose(flattenConcurrently)\n      .compose(\n        tap(() => {\n          this.realtimeAdapter.mqtt.conneck()\n          this.realtimeAdapter.mqtt.subscribeUser(this.storage.getToken())\n        })\n      )\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  blockUser(userId: string): Promise<model.IQUser>\n  blockUser(userId: string, callback?: IQCallback2<model.IQUser>): void\n  blockUser(userId: string, callback?: IQCallback2<model.IQUser>) {\n    return xs\n      .combine(process(userId, isReqString({ userId })), process(callback, isOptCallback({ callback })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([userId]) => xs.fromPromise(this.userAdapter.blockUser(userId)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  clearUser(): Promise<void>\n  clearUser(callback?: IQCallback1): void\n  clearUser(callback?: IQCallback1): void | Promise<void> {\n    // this method should clear currentUser and token\n    return xs\n      .combine(process(callback, isOptCallback({ callback })))\n      .map(() =>\n        xs.fromPromise(\n          Promise.all([\n            Promise.resolve(this.publishOnlinePresence(false)),\n            Promise.resolve(this.userAdapter.clear()),\n            Promise.resolve(this.realtimeAdapter.clear()),\n          ])\n        )\n      )\n      .compose(flattenConcurrently)\n      .map(() => undefined as void)\n      .compose(toCallbackOrPromise<void>(callback))\n  }\n\n  unblockUser(userId: string): Promise<model.IQUser>\n  unblockUser(userId: string, callback: IQCallback2<model.IQUser>): void\n  unblockUser(userId: string, callback?: IQCallback2<model.IQUser>) {\n    return xs\n      .combine(process(userId, isReqString({ userId })), process(callback, isOptCallback({ callback })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([userId]) => xs.fromPromise(this.userAdapter.unblockUser(userId)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  updateUser(username: string, avatarUrl: string, extras?: object): Promise<model.IQAccount>\n  updateUser(username: string, avatarUrl: string, extras?: object, callback?: IQCallback2<model.IQAccount>): void\n  updateUser(username: string, avatarUrl: string, extras?: object, callback?: IQCallback2<model.IQAccount>) {\n    // this method should update current user\n    return xs\n      .combine(\n        process(username, isOptString({ username })),\n        process(avatarUrl, isOptString({ avatarUrl })),\n        process(extras, isOptJson({ extras })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([username, avatarUrl, extras]) =>\n        xs.fromPromise(this.userAdapter.updateUser(username, avatarUrl, extras as any))\n      )\n      .compose(flattenConcurrently)\n      .compose(\n        tap((user: model.IQAccount) => {\n          const currentUser = this.storage.getCurrentUser()\n          this.storage.setCurrentUser({\n            ...currentUser,\n            ...user,\n          })\n        })\n      )\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  updateMessage(message: model.IQMessage): Promise<void>\n  updateMessage(message: model.IQMessage, callback?: IQCallback1): void\n  updateMessage(message: model.IQMessage, callback?: IQCallback1) {\n    return xs\n      .combine(process(message, isReqJson({ message })), process(callback, isOptCallback({ callback })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([message]) => xs.fromPromise(this.messageAdapter.updateMessage(message)))\n      .compose(flattenConcurrently)\n      .mapTo(undefined as void)\n      .compose(toCallbackOrPromise<void>(callback))\n  }\n\n  getBlockedUsers(page?: number, limit?: number): Promise<model.IQUser[]>\n  getBlockedUsers(page?: number, limit?: number, callback?: IQCallback2<model.IQUser[]>): void\n  getBlockedUsers(page?: number, limit?: number, callback?: IQCallback2<model.IQUser[]>) {\n    return xs\n      .combine(\n        process(page, isOptNumber({ page })),\n        process(limit, isOptNumber({ limit })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([page, limit]) => xs.fromPromise(this.userAdapter.getBlockedUser(page, limit)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getUsers(searchUsername?: string, page?: number, limit?: number): Promise<model.IQUser[]>\n  getUsers(searchUsername?: string, page?: number, limit?: number, callback?: IQCallback2<model.IQUser[]>): void\n  getUsers(searchUsername?: string, page?: number, limit?: number, callback?: IQCallback2<model.IQUser[]>) {\n    return xs\n      .combine(\n        process(searchUsername, isOptString({ searchUsername })),\n        process(page, isOptNumber({ page })),\n        process(limit, isOptNumber({ limit })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([search, page, limit]) => xs.fromPromise(this.userAdapter.getUserList(search, page, limit)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getJWTNonce(): Promise<string>\n  getJWTNonce(callback: IQCallback2<string>): void\n  getJWTNonce(callback?: IQCallback2<string>): void | Promise<string> {\n    return xs\n      .combine(process(callback, isOptCallback({ callback })))\n      .map(() => xs.fromPromise(this.userAdapter.getNonce()))\n      .compose(flattenConcurrently)\n      .map((nonce) => nonce)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getUserData(): Promise<model.IQAccount>\n  getUserData(callback: IQCallback2<model.IQAccount>): void\n  getUserData(callback?: IQCallback2<model.IQAccount>) {\n    return xs\n      .combine(process(callback, isOptCallback({ callback })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(() => xs.fromPromise(this.userAdapter.getUserData()))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  registerDeviceToken(token: string, isDevelopment: boolean): Promise<boolean>\n  registerDeviceToken(token: string, isDevelopment: boolean, callback: IQCallback2<boolean>): void\n  registerDeviceToken(token: string, isDevelopment: boolean, callback?: IQCallback2<boolean>) {\n    return xs\n      .combine(\n        process(token, isReqString({ token })),\n        process(isDevelopment, isOptBoolean({ isDevelopment })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([token, isDevelopment]) => xs.fromPromise(this.userAdapter.registerDeviceToken(token, isDevelopment)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  removeDeviceToken(token: string, isDevelopment: boolean): Promise<boolean>\n  removeDeviceToken(token: string, isDevelopment: boolean, callback: IQCallback2<boolean>): void\n  removeDeviceToken(token: string, isDevelopment: boolean, callback?: IQCallback2<boolean>) {\n    return xs\n      .combine(\n        process(token, isReqString({ token })),\n        process(isDevelopment, isOptBoolean({ isDevelopment })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([token, isDevelopment]) => xs.fromPromise(this.userAdapter.unregisterDeviceToken(token, isDevelopment)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n  updateChatRoom(roomId: number, name?: string, avatarUrl?: string, extras?: object): Promise<model.IQChatRoom>\n  updateChatRoom(\n    roomId: number,\n    name?: string,\n    avatarUrl?: string,\n    extras?: object,\n    callback?: IQCallback2<model.IQChatRoom>\n  ): void\n  updateChatRoom(\n    roomId: number,\n    name?: string,\n    avatarUrl?: string,\n    extras?: object,\n    callback?: IQCallback2<model.IQChatRoom>\n  ) {\n    // this method should update room list\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(name, isOptString({ name })),\n        process(avatarUrl, isOptString({ avatarUrl })),\n        process(extras, isOptJson({ extras }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, name, avatarUrl, extras]) =>\n        xs.fromPromise(this.roomAdapter.updateRoom(roomId, name, avatarUrl, extras as any))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  setUserWithIdentityToken(token: string): Promise<model.IQAccount>\n  setUserWithIdentityToken(token: string, callback?: IQCallback2<model.IQAccount>): void\n  setUserWithIdentityToken(token: string, callback?: IQCallback2<model.IQAccount>): void | Promise<model.IQAccount> {\n    return xs\n      .combine(process(token, isReqString({ token })), process(callback, isOptCallback({ callback })))\n      .map(([token]) => xs.fromPromise(this.userAdapter.setUserFromIdentityToken(token)))\n      .compose(flattenConcurrently)\n      .compose(\n        tap(() => {\n          this.realtimeAdapter.mqtt.conneck()\n          this.realtimeAdapter.mqtt.subscribeUser(this.storage.getToken())\n        })\n      )\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getChannel(uniqueId: string): Promise<model.IQChatRoom>\n  getChannel(uniqueId: string, callback?: IQCallback2<model.IQChatRoom>): void\n  getChannel(uniqueId: string, callback?: IQCallback2<model.IQChatRoom>) {\n    return xs\n      .combine(process(uniqueId, isReqString({ uniqueId })), process(callback, isOptCallback({ callback })))\n      .map(([uniqueId]) => xs.fromPromise(this.roomAdapter.getChannel(uniqueId)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n  // -------------------------------------------------------\n\n  // Room Adapter ------------------------------------------\n  chatUser(userId: string, extras?: Record<string, any>): Promise<model.IQChatRoom>\n  chatUser(userId: string, extras?: Record<string, any>, callback?: IQCallback2<model.IQChatRoom>): void\n  chatUser(userId: string, extras?: Record<string, any>, callback?: IQCallback2<model.IQChatRoom>) {\n    return xs\n      .combine(\n        process(userId, isReqString({ userId })),\n        process(extras, isOptJson({ extras })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([userId, extras]) => xs.fromPromise(this.roomAdapter.chatUser(userId, extras)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n  addParticipants(roomId: number, userIds: string[]): Promise<model.IQParticipant[]>\n  addParticipants(roomId: number, userIds: string[], callback?: IQCallback2<model.IQParticipant[]>): void\n  addParticipants(roomId: number, userIds: string[], callback?: IQCallback2<model.IQParticipant[]>) {\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(userIds, isReqArrayString({ userIds })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, userIds]) => xs.fromPromise(this.roomAdapter.addParticipants(roomId, userIds)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  removeParticipants(roomId: number, userIds: string[]): Promise<model.IQParticipant[] | string[]>\n  removeParticipants(roomId: number, userIds: string[], callback?: IQCallback2<model.IQParticipant[]>): void\n  removeParticipants(\n    roomId: number,\n    userIds: string[],\n    callback?: IQCallback2<model.IQParticipant[]>\n  ): void | Promise<model.IQParticipant[] | string[]> {\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(userIds, isReqArrayString({ userIds })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, userIds]) => xs.fromPromise(this.roomAdapter.removeParticipants(roomId, userIds)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  clearMessagesByChatRoomId(roomUniqueIds: string[]): Promise<void>\n  clearMessagesByChatRoomId(roomUniqueIds: string[], callback?: IQCallback1): void\n  clearMessagesByChatRoomId(roomUniqueIds: string[], callback?: IQCallback1): void | Promise<void> {\n    return xs\n      .combine(\n        process(roomUniqueIds, isReqArrayString({ roomIds: roomUniqueIds })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomIds]) => xs.fromPromise(this.roomAdapter.clearRoom(roomIds)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise<void>(callback))\n  }\n\n  createGroupChat(name: string, userIds: string[], avatarUrl?: string, extras?: object): Promise<model.IQChatRoom>\n  createGroupChat(\n    name: string,\n    userIds: string[],\n    avatarUrl?: string,\n    extras?: object,\n    callback?: IQCallback2<model.IQChatRoom>\n  ): void\n  createGroupChat(\n    name: string,\n    userIds: string[],\n    avatarUrl?: string,\n    extras?: object,\n    callback?: IQCallback2<model.IQChatRoom>\n  ): void | Promise<model.IQChatRoom> {\n    return xs\n      .combine(\n        process(name, isReqString({ name })),\n        process(userIds, isReqArrayString({ userIds })),\n        process(avatarUrl, isOptString({ avatarUrl })),\n        process(extras, isOptJson({ extras })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([name, userIds, avatarUrl, extras]) =>\n        xs.fromPromise(this.roomAdapter.createGroup(name, userIds, avatarUrl, extras as any))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  createChannel(uniqueId: string, name?: string, avatarUrl?: string, extras?: object): Promise<model.IQChatRoom>\n  createChannel(\n    uniqueId: string,\n    name?: string,\n    avatarUrl?: string,\n    extras?: object,\n    callback?: IQCallback2<model.IQChatRoom>\n  ): void\n  createChannel(\n    uniqueId: string,\n    name?: string,\n    avatarUrl?: string,\n    extras?: object,\n    callback?: IQCallback2<model.IQChatRoom>\n  ): void | Promise<model.IQChatRoom> {\n    return xs\n      .combine(\n        process(uniqueId, isReqString({ uniqueId })),\n        process(name, isReqString({ name })),\n        process(avatarUrl, isOptString({ avatarUrl })),\n        process(extras, isOptJson({ extras })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([uniqueId, name, avatarUrl, extras]) =>\n        xs.fromPromise(this.roomAdapter.getChannel(uniqueId, name, avatarUrl, extras as any))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getParticipants(\n    roomUniqueId: string,\n    page?: number,\n    limit?: number,\n    sorting?: 'asc' | 'desc'\n  ): Promise<model.IQParticipant[]>\n  getParticipants(\n    roomUniqueId: string,\n    page?: number,\n    limit?: number,\n    sorting?: 'asc' | 'desc',\n    callback?: IQCallback2<model.IQParticipant[]>\n  ): void\n  getParticipants(\n    roomUniqueId: string,\n    page?: number,\n    limit?: number,\n    sorting?: 'asc' | 'desc',\n    callback?: IQCallback2<model.IQParticipant[]>\n  ): void | Promise<model.IQParticipant[]> {\n    return xs\n      .combine(\n        process(roomUniqueId, isReqString({ roomUniqueId })),\n        process(page, isOptNumber({ page })),\n        process(limit, isOptNumber({ limit })),\n        process(sorting, isOptString({ sorting })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, page, limit, sorting]) =>\n        xs.fromPromise(this.roomAdapter.getParticipantList(roomId, page, limit, sorting))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getChatRooms(\n    roomIds: number[],\n    page?: number,\n    showRemoved?: boolean,\n    showParticipant?: boolean\n  ): Promise<model.IQChatRoom[]>\n  getChatRooms(\n    uniqueIds: string[],\n    page?: number,\n    showRemoved?: boolean,\n    showParticipant?: boolean,\n    callback?: IQCallback2<model.IQChatRoom[]>\n  ): void\n  getChatRooms(\n    ids: number[] | string[],\n    page?: number,\n    showRemoved?: boolean,\n    showParticipant?: boolean,\n    callback?: IQCallback2<model.IQChatRoom[]>\n  ): void | Promise<model.IQChatRoom[]> {\n    let uniqueIds: string[] | undefined\n    let roomIds: number[] | undefined\n    if (isArrayOfNumber(ids)) {\n      roomIds = ids\n    }\n    if (isArrayOfString(ids)) {\n      uniqueIds = ids\n    }\n    return xs\n      .combine(\n        // process(roomIds, isOptArrayNumber({ roomIds })),\n        // process(uniqueIds, isOptArrayString({ uniqueIds })),\n        process(ids, isReqArrayOfStringOrNumber({ ids })),\n        process(page, isOptNumber({ page })),\n        process(showRemoved, isOptBoolean({ showRemoved })),\n        process(showParticipant, isOptBoolean({ showParticipant })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([_, page, showRemoved, showParticipant]) =>\n        xs.fromPromise(this.roomAdapter.getRoomInfo(roomIds, uniqueIds, page, showRemoved, showParticipant))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getAllChatRooms(\n    showParticipant?: boolean,\n    showRemoved?: boolean,\n    showEmpty?: boolean,\n    page?: number,\n    limit?: number\n  ): Promise<model.IQChatRoom[]>\n  getAllChatRooms(\n    showParticipant?: boolean,\n    showRemoved?: boolean,\n    showEmpty?: boolean,\n    page?: number,\n    limit?: number,\n    callback?: IQCallback2<model.IQChatRoom[]>\n  ): void\n  getAllChatRooms(\n    showParticipant?: boolean,\n    showRemoved?: boolean,\n    showEmpty?: boolean,\n    page?: number,\n    limit?: number,\n    callback?: IQCallback2<model.IQChatRoom[]>\n  ): void | Promise<model.IQChatRoom[]> {\n    return xs\n      .combine(\n        process(showParticipant, isOptBoolean({ showParticipant })),\n        process(showRemoved, isOptBoolean({ showRemoved })),\n        process(showEmpty, isOptBoolean({ showEmpty })),\n        process(page, isOptNumber({ page })),\n        process(limit, isOptNumber({ limit })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([showParticipant, showRemoved, showEmpty, page, limit]) =>\n        xs.fromPromise(this.roomAdapter.getRoomList(showParticipant, showRemoved, showEmpty, page, limit))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getChatRoomWithMessages(roomId: number): Promise<[model.IQChatRoom, model.IQMessage[]]>\n  getChatRoomWithMessages(roomId: number, callback?: IQCallback2<[model.IQChatRoom, model.IQMessage[]]>): void\n  getChatRoomWithMessages(\n    roomId: number,\n    callback?: IQCallback2<[model.IQChatRoom, model.IQMessage[]]>\n  ): void | Promise<[model.IQChatRoom, model.IQMessage[]]> {\n    return xs\n      .combine(process(roomId, isReqNumber({ roomId })), process(callback, isOptCallback({ callback })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId]) => xs.fromPromise(this.roomAdapter.getRoom(roomId)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback) as any)\n  }\n\n  getTotalUnreadCount(): Promise<number>\n  getTotalUnreadCount(callback?: IQCallback2<number>): void\n  getTotalUnreadCount(callback?: IQCallback2<number>): void | Promise<number> {\n    return xs\n      .combine(process(callback, isOptCallback({ callback })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(() => xs.fromPromise(this.roomAdapter.getUnreadCount()))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getRoomUnreadCount(): Promise<number>\n  getRoomUnreadCount(callback?: IQCallback2<number>): void\n  getRoomUnreadCount(callback?: IQCallback2<number>): void | Promise<number> {\n    return xs\n      .combine(process(callback, isOptCallback({ callback })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(() => xs.fromPromise(this.roomAdapter.getRoomUnreadCount()))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n  // ------------------------------------------------------\n\n  // Message Adapter --------------------------------------\n  sendMessage(message: model.IQMessage): Promise<model.IQMessage>\n  sendMessage(message: model.IQMessage, callback?: IQCallback2<model.IQMessage>): void\n  sendMessage(message: model.IQMessage, callback?: IQCallback2<model.IQMessage>) {\n    const roomId = message.chatRoomId\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(message, isReqJson({ message })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, message]) =>\n        xs.fromPromise(\n          Promise.all([roomId, this.hookAdapter.trigger(Hooks.MESSAGE_BEFORE_SENT, message) as Promise<typeof message>])\n        )\n      )\n      .compose(flattenConcurrently)\n      .map(([roomId, message]) => xs.fromPromise(this.messageAdapter.sendMessage(roomId, message)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  markAsDelivered(roomId: number, messageId: number): Promise<void>\n  markAsDelivered(roomId: number, messageId: number, callback?: IQCallback2<void>): void\n  markAsDelivered(roomId: number, messageId: number, callback?: IQCallback2<void>): void | Promise<void> {\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(messageId, isReqNumber({ messageId })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, messageId]) => xs.fromPromise(this.messageAdapter.markAsDelivered(roomId, messageId)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  markAsRead(roomId: number, messageId: number): Promise<void>\n  markAsRead(roomId: number, messageId: number, callback?: IQCallback2<void>): void\n  markAsRead(roomId: number, messageId: number, callback?: IQCallback2<void>): void | Promise<void> {\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(messageId, isReqNumber({ messageId })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, messageId]) => xs.fromPromise(this.messageAdapter.markAsRead(roomId, messageId)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  deleteMessages(messageUniqueIds: string[]): Promise<model.IQMessage[]>\n  deleteMessages(messageUniqueIds: string[], callback?: IQCallback2<model.IQMessage[]>): void\n  deleteMessages(messageUniqueIds: string[], callback?: IQCallback2<model.IQMessage[]>) {\n    return xs\n      .combine(\n        process(messageUniqueIds, isReqArrayString({ messageUniqueIds })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([messageUniqueIds]) => xs.fromPromise(this.messageAdapter.deleteMessage(messageUniqueIds)))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getPreviousMessagesById(roomId: number, limit?: number, messageId?: number): Promise<model.IQMessage[]>\n  getPreviousMessagesById(\n    roomId: number,\n    limit?: number,\n    messageId?: number,\n    callback?: IQCallback2<model.IQMessage[]>\n  ): void\n  getPreviousMessagesById(\n    roomId: number,\n    limit?: number,\n    messageId?: number,\n    callback?: IQCallback2<model.IQMessage[]>\n  ) {\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(limit, isOptNumber({ limit })),\n        process(messageId, isOptNumber({ messageId })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, limit, messageId]) =>\n        xs.fromPromise(this.messageAdapter.getMessages(roomId, messageId, limit, false))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getNextMessagesById(roomId: number, limit?: number, messageId?: number): Promise<model.IQMessage[]>\n  getNextMessagesById(\n    roomId: number,\n    limit?: number,\n    messageId?: number,\n    callback?: IQCallback2<model.IQMessage[]>\n  ): void\n  getNextMessagesById(\n    roomId: number,\n    limit?: number,\n    messageId?: number,\n    callback?: IQCallback2<model.IQMessage[]>\n  ): void | Promise<model.IQMessage[]> {\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(limit, isOptNumber({ limit })),\n        process(messageId, isOptNumber({ messageId })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, limit, messageId]) =>\n        xs.fromPromise(this.messageAdapter.getMessages(roomId, messageId, limit, true))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  searchMessage(opts: {\n    query: string\n    roomIds: number[]\n    userId?: string\n    type?: string\n    roomType?: string\n    page?: number\n    limit?: number\n  }): Promise<model.IQMessage[]>\n  searchMessage(opts: {\n    query: string\n    roomIds: number[]\n    userId?: string\n    type?: string\n    roomType?: string\n    page?: number\n    limit?: number\n    callback?: (messages?: model.IQMessage[], error?: Error) => void\n  }): void\n  searchMessage({\n    query,\n    roomIds = [],\n    userId,\n    type,\n    roomType,\n    page,\n    limit,\n    callback,\n  }: {\n    query: string\n    roomIds: number[]\n    userId?: string\n    type?: string\n    roomType?: string\n    page?: number\n    limit?: number\n    callback?: (messages?: model.IQMessage[], error?: Error) => void\n  }) {\n    return xs\n      .combine(\n        process(query, isReqString({ query })),\n        process(\n          roomIds,\n          isReqArrayString({\n            roomIds,\n          })\n        ),\n        process(userId, isOptString({ userId })),\n        process(type, isOptString({ type })),\n        process(roomType, isOptString({ roomType })),\n        process(page, isOptNumber({ page })),\n        process(limit, isOptNumber({ limit })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .map(([query, roomIds, userId, type, roomType, page, limit]) => {\n        return xs.fromPromise(\n          this.messageAdapter.searchMessages({\n            query,\n            roomIds,\n            userId,\n            type,\n            roomType,\n            page,\n            limit,\n          })\n        )\n      })\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  getFileList(opts: {\n    roomIds?: number[]\n    fileType?: string\n    page?: number\n    limit?: number\n  }): Promise<model.IQMessage[]>\n  getFileList(opts: {\n    roomIds?: number[]\n    fileType?: string\n    page?: number\n    limit?: number\n    callback?: (messages?: model.IQMessage[], error?: Error) => void\n  }): void\n  getFileList({\n    roomIds = [],\n    fileType,\n    page,\n    limit,\n    userId,\n    includeExtensions,\n    excludeExtensions,\n    callback,\n  }: {\n    roomIds?: number[]\n    fileType?: string\n    page?: number\n    limit?: number\n    userId?: string\n    includeExtensions?: string[]\n    excludeExtensions?: string[]\n    callback?: (messages?: model.IQMessage[], error?: Error) => void\n  }): void | Promise<model.IQMessage[]> {\n    return xs\n      .combine(\n        process(roomIds, isReqArrayNumber({ roomIds })),\n        process(\n          fileType,\n          isOptString({\n            fileType,\n          })\n        ),\n        process(page, isOptNumber({ page })),\n        process(limit, isOptNumber({ limit })),\n        process(userId, isOptString({ userId })),\n        process(includeExtensions, isOptArrayString({ includeExtensions })),\n        process(excludeExtensions, isOptArrayString({ excludeExtensions })),\n        process(callback, isOptCallback({ callback }))\n      )\n      .map(([roomIds, fileType, page, limit, userId, includeExtensions, excludeExtensions]) => {\n        return xs.fromPromise(\n          this.messageAdapter.getFileList({\n            roomIds,\n            fileType,\n            page,\n            limit,\n            userId,\n            includeExtensions,\n            excludeExtensions,\n          })\n        )\n      })\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise(callback))\n  }\n  // -------------------------------------------------------\n\n  // Misc --------------------------------------------------\n  publishCustomEvent(roomId: number, data: any): Promise<void>\n  publishCustomEvent(roomId: number, data: any, callback?: IQCallback1): void\n  publishCustomEvent(roomId: number, data: any, callback?: IQCallback1) {\n    const userId = this.currentUser?.id\n    return xs\n      .combine(\n        process(roomId, isReqNumber({ roomId })),\n        process(userId, isReqString({ userId })),\n        process(data, isOptJson({ data }))\n      )\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, userId, data]) =>\n        xs.fromPromise(Promise.resolve(this.realtimeAdapter.mqtt.publishCustomEvent(roomId, userId, data)))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise<void>(callback))\n  }\n\n  publishOnlinePresence(isOnline: boolean): Promise<void>\n  publishOnlinePresence(isOnline: boolean, callback?: IQCallback1): void\n  publishOnlinePresence(isOnline: boolean, callback?: IQCallback1): void | Promise<void> {\n    const userId = this.currentUser?.id\n    return xs\n      .combine(process(isOnline, isReqBoolean({ isOnline })), process(userId, isReqString({ userId })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([isOnline, userId]) => xs.fromPromise(Promise.resolve(this.realtimeAdapter.sendPresence(userId, isOnline))))\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise<void>(callback))\n  }\n\n  publishTyping(roomId: number, isTyping?: boolean): Promise<void>\n  publishTyping(roomId: number, isTyping?: boolean, callback?: IQCallback1): void\n  publishTyping(roomId: number, isTyping?: boolean, callback?: IQCallback1): void | Promise<void> {\n    return xs\n      .combine(process(roomId, isReqNumber({ roomId })), process(isTyping, isOptBoolean({ isTyping })))\n      .compose(bufferUntil(() => this.isLogin))\n      .map(([roomId, isTyping]) =>\n        xs.fromPromise(Promise.resolve(this.realtimeAdapter.sendTyping(roomId, this.currentUser.id, isTyping ?? true)))\n      )\n      .compose(flattenConcurrently)\n      .compose(toCallbackOrPromise<void>(callback))\n  }\n\n  subscribeCustomEvent(roomId: number, callback: IQCallback2<any>): void {\n    this.realtimeAdapter.mqtt.subscribeCustomEvent(roomId, callback)\n  }\n\n  unsubscribeCustomEvent(roomId: number): void {\n    this.realtimeAdapter.mqtt.unsubscribeCustomEvent(roomId)\n  }\n\n  upload(file: File, callback?: IQProgressListener): void {\n    const data = new FormData()\n    data.append('file', file)\n    data.append('token', this.token)\n\n    axios({\n      ...Provider.withHeaders(this.storage),\n      baseURL: this.storage.getBaseUrl(),\n      url: this.storage.getUploadUrl(),\n      method: 'post',\n      data: data,\n      onUploadProgress(event: ProgressEvent) {\n        const percentage = ((event.loaded / event.total) * 100).toFixed(2)\n        callback?.(undefined, Number(percentage))\n      },\n    })\n      .then((resp: AxiosResponse<UploadResult>) => {\n        const url = resp.data.results.file.url\n        callback?.(undefined, undefined, url)\n      })\n      .catch((error) => callback?.(error))\n  }\n\n  hasSetupUser(): Promise<boolean>\n  hasSetupUser(callback: IQCallback2<boolean>): void\n  hasSetupUser(callback?: IQCallback2<boolean>): void | Promise<boolean> {\n    return xs\n      .of(this.currentUser)\n      .map((user) => user != null)\n      .compose(toCallbackOrPromise(callback))\n  }\n\n  sendFileMessage(message: model.IQMessage, file: File, callback?: IQProgressListener<model.IQMessage>): void {\n    this.upload(file, (error, progress, url) => {\n      if (error) return callback?.(error)\n      if (progress) callback?.(undefined, progress)\n      if (url) {\n        const _message = this.generateFileAttachmentMessage({\n          roomId: message.chatRoomId,\n          caption: message.payload?.['caption'] as string,\n          url,\n          text: message.text,\n          extras: message.extras ?? {},\n          filename: file.name,\n          size: file.size,\n        })\n\n        this.sendMessage(_message, (msg) => {\n          callback?.(undefined, undefined, msg)\n        })\n      }\n    })\n  }\n\n  getThumbnailURL(url: string) {\n    return url.replace('/upload/', '/upload/w_30,c_scale/')\n  }\n\n  setSyncInterval(interval: number): void {\n    this.storage.setSyncInterval(interval)\n  }\n\n  synchronize(lastMessageId: model.IQAccount['lastMessageId']): void {\n    this.realtimeAdapter.synchronize(lastMessageId)\n  }\n\n  synchronizeEvent(lastEventId: model.IQAccount['lastSyncEventId']): void {\n    this.realtimeAdapter.synchronizeEvent(lastEventId)\n  }\n\n  enableDebugMode(enable: boolean, callback?: IQCallback1) {\n    return process(enable, isReqBoolean({ enable }))\n      .compose(bufferUntil(() => this.isLogin))\n      .map((enable: boolean) => this.loggerAdapter.setEnable(enable))\n      .compose(toCallbackOrPromise<void>(callback))\n  }\n  static Interceptor = Hooks\n  get Interceptor() {\n    return Hooks\n  }\n  intercept(interceptor: string, callback: (data: unknown) => unknown) {\n    return this.hookAdapter.intercept(interceptor, callback)\n  }\n\n  onMessageReceived(handler: (message: model.IQMessage) => void) {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .mapTo(this._onMessageReceived$)\n      .compose(flattenConcurrently)\n      .compose(toEventSubscription_(handler))\n  }\n\n  onMessageUpdated(handler: (message: model.IQMessage) => void): () => void {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .mapTo(this._onMessageUpdated$)\n      .compose(flattenConcurrently)\n      .compose(toEventSubscription_(handler))\n  }\n  onMessageDeleted(handler: (message: model.IQMessage) => void): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .mapTo(this._onMessageDeleted$)\n      .compose(flattenConcurrently)\n      .compose(toEventSubscription_(handler))\n  }\n  onMessageDelivered(handler: (message: model.IQMessage) => void): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .mapTo(this._onMessageDelivered$)\n      .compose(flattenConcurrently)\n      .compose(toEventSubscription_(handler))\n  }\n  onMessageRead(handler: (message: model.IQMessage) => void): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .mapTo(this._onMessageRead$)\n      .compose(flattenConcurrently)\n      .compose(toEventSubscription_(handler))\n  }\n  onUserTyping(handler: (userId: string, roomId: number, isTyping: boolean) => void): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .compose(toEventSubscription(this.realtimeAdapter.onTyping))\n  }\n  onUserOnlinePresence(handler: (userId: string, isOnline: boolean, lastSeen: Date) => void): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .compose(toEventSubscription(this.realtimeAdapter.onPresence))\n  }\n  onChatRoomCleared(handler: Callback<number>): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .mapTo(this._onRoomCleared$)\n      .compose(flattenConcurrently)\n      .compose(\n        toEventSubscription_((data) => {\n          if (typeof data === 'number') return handler(data)\n          if (isChatRoom(data)) return handler(data.id)\n        })\n      )\n  }\n  onConnected(handler: () => void): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .compose(toEventSubscription(this.realtimeAdapter.mqtt.onMqttConnected))\n  }\n  onReconnecting(handler: () => void): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .compose(toEventSubscription(this.realtimeAdapter.mqtt.onMqttReconnecting))\n  }\n  onDisconnected(handler: () => void): Subscription {\n    return process(handler, isRequired({ handler }))\n      .compose(bufferUntil(() => this.isLogin))\n      .compose(toEventSubscription(this.realtimeAdapter.mqtt.onMqttDisconnected))\n  }\n  subscribeChatRoom(room: model.IQChatRoom): void {\n    process(room, isRequired({ room }))\n      .compose(bufferUntil(() => this.isLogin))\n      .map((it) => [it])\n      .compose(\n        subscribeOnNext(([room]) => {\n          if (room.type === 'channel') {\n            this.realtimeAdapter.mqtt.subscribeChannel(this.appId, room.uniqueId)\n          } else {\n            this.realtimeAdapter.mqtt.subscribeRoom(room.id)\n          }\n        })\n      )\n  }\n  unsubscribeChatRoom(room: model.IQChatRoom): void {\n    process(room, isRequired({ room }))\n      .compose(bufferUntil(() => this.isLogin))\n      .map((it) => [it])\n      .compose(\n        subscribeOnNext(([room]) => {\n          if (room.type === 'channel') this.realtimeAdapter.mqtt.unsubscribeChannel(this.appId, room.uniqueId)\n          else this.realtimeAdapter.mqtt.unsubscribeRoom(room.id)\n        })\n      )\n  }\n  subscribeUserOnlinePresence(userId: string): void {\n    process(userId, isReqString({ userId }))\n      .compose(bufferUntil(() => this.isLogin))\n      .map((it) => [it])\n      .compose(subscribeOnNext(([userId]) => this.realtimeAdapter.mqtt.subscribeUserPresence(userId)))\n  }\n  unsubscribeUserOnlinePresence(userId: string): void {\n    process(userId, isReqString({ userId }))\n      .compose(bufferUntil(() => this.isLogin))\n      .map((it) => [it])\n      .compose(subscribeOnNext(([userId]) => this.realtimeAdapter.mqtt.unsubscribeUserPresence(userId)))\n  }\n\n  _generateUniqueId(): string {\n    return `javascript-${nanoid()}`\n  }\n\n  async startSync() {\n    this.storage.setForceDisableSync(false)\n  }\n  async stopSync() {\n    this.storage.setForceDisableSync(true)\n  }\n\n  async openRealtimeConnection() {\n    return this.realtimeAdapter.openMqtt()\n  }\n  async closeRealtimeConnection() {\n    return this.realtimeAdapter.closeMqtt()\n  }\n\n  generateMessage({\n    roomId,\n    text,\n    extras,\n  }: {\n    roomId: number\n    text: string\n    extras?: Record<string, any>\n  }): model.IQMessage {\n    const id = Math.ceil(Math.random() * 1e4)\n    return {\n      chatRoomId: roomId,\n      text: text,\n      extras: extras,\n      timestamp: new Date(),\n      uniqueId: this._generateUniqueId(),\n      //\n      id: id,\n      payload: undefined,\n      previousMessageId: 0,\n      sender: this.currentUser,\n      status: IQMessageStatus.Sending,\n      type: IQMessageType.Text,\n    }\n  }\n  generateFileAttachmentMessage({\n    roomId,\n    caption,\n    url,\n    text = 'File attachment',\n    extras,\n    filename,\n    size,\n  }: {\n    roomId: number\n    caption: string\n    url: string\n    text: string\n    extras?: Record<string, unknown>\n    filename?: string\n    size?: number\n  }): model.IQMessage {\n    const id = Math.ceil(Math.random() * 1e4)\n    return {\n      chatRoomId: roomId,\n      text: text,\n      extras: extras,\n      timestamp: new Date(),\n      uniqueId: this._generateUniqueId(),\n      //\n      id: id,\n      payload: {\n        url,\n        file_name: filename,\n        size,\n        caption,\n      },\n      previousMessageId: 0,\n      sender: this.currentUser,\n      status: IQMessageStatus.Sending,\n      type: IQMessageType.Attachment,\n    }\n  }\n  generateCustomMessage({\n    roomId,\n    text,\n    type,\n    payload,\n    extras,\n  }: {\n    roomId: number\n    text: string\n    type: string\n    extras?: Record<string, unknown>\n    payload?: Record<string, any>\n  }): model.IQMessage {\n    const id = Math.ceil(Math.random() * 1e4)\n    return {\n      chatRoomId: roomId,\n      text: text,\n      extras: extras,\n      timestamp: new Date(),\n      uniqueId: this._generateUniqueId(),\n      //\n      id: id,\n      payload: {\n        type,\n        payload,\n      },\n      previousMessageId: 0,\n      sender: this.currentUser,\n      status: IQMessageStatus.Sending,\n      type: IQMessageType.Custom,\n    }\n  }\n  generateReplyMessage({\n    roomId,\n    text,\n    repliedMessage,\n    extras,\n  }: {\n    roomId: number\n    text: string\n    repliedMessage: model.IQMessage\n    extras?: Record<string, unknown>\n  }): model.IQMessage {\n    const id = Math.ceil(Math.random() * 1e4)\n    return {\n      chatRoomId: roomId,\n      text: text,\n      extras: extras,\n      timestamp: new Date(),\n      uniqueId: this._generateUniqueId(),\n      //\n      id: id,\n      payload: {\n        type: 'reply',\n        replied_comment_id: repliedMessage.id,\n      },\n      previousMessageId: 0,\n      sender: this.currentUser,\n      status: IQMessageStatus.Sending,\n      type: IQMessageType.Reply,\n    }\n  }\n}\n"],"names":["bind","fn","thisArg","args","require$$0","toString","kindOf","cache","thing","str","kindOfTest","type","isArray","val","isUndefined","isBuffer","isArrayBuffer","isArrayBufferView","result","isString","isNumber","isObject","isPlainObject","prototype","isDate","isFile","isBlob","isFileList","isFunction","isStream","isFormData","pattern","isURLSearchParams","trim","isStandardBrowserEnv","forEach","obj","i","l","key","merge","assignValue","extend","a","b","stripBOM","content","inherits","constructor","superConstructor","props","descriptors","toFlatObject","sourceObj","destObj","filter","prop","merged","endsWith","searchString","position","lastIndex","toArray","arr","isTypedArray","TypedArray","utils","encode","buildURL","url","params","paramsSerializer","serializedParams","parts","v","hashmarkIndex","InterceptorManager","fulfilled","rejected","options","id","h","InterceptorManager_1","normalizeHeaderName","headers","normalizedName","value","name","AxiosError","message","code","config","request","response","error","customProps","axiosError","AxiosError_1","transitional","toFormData","formData","stack","convertValue","build","data","parentKey","fullKey","el","toFormData_1","settle","resolve","reject","validateStatus","cookies","expires","path","domain","secure","cookie","match","isAbsoluteURL","combineURLs","baseURL","relativeURL","require$$1","buildFullPath","requestedURL","ignoreDuplicateOf","parseHeaders","parsed","line","isURLSameOrigin","msie","urlParsingNode","originURL","resolveURL","href","requestURL","CanceledError","CanceledError_1","parseProtocol","require$$2","require$$3","require$$4","require$$5","require$$6","transitionalDefaults","require$$7","require$$8","require$$9","require$$10","xhr","requestData","requestHeaders","responseType","onCanceled","done","username","password","fullPath","onloadend","responseHeaders","responseData","err","timeoutErrorMessage","xsrfValue","cancel","protocol","_null","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","getDefaultAdapter","adapter","stringifySafely","rawValue","parser","encoder","e","defaults","isObjectPayload","contentType","_FormData","silentJSONParsing","forcedJSONParsing","strictJSONParsing","status","method","defaults_1","transformData","fns","context","isCancel","throwIfCancellationRequested","dispatchRequest","reason","mergeConfig","config1","config2","getMergedValue","target","source","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","assertOptions","schema","allowUnknown","keys","Axios","instanceConfig","configOrUrl","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","newConfig","onFulfilled","onRejected","generateHTTPMethod","isForm","Axios_1","CancelToken","executor","resolvePromise","token","onfulfilled","_resolve","listener","index","c","CancelToken_1","spread","callback","isAxiosError","payload","createInstance","defaultConfig","instance","axios","promises","require$$11","require$$12","axiosModule","axios_1","module","exports","symbolObservablePonyfill","root","_Symbol","toStr","isArguments","isArgs","keysShim","has","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","o","ctor","excludedKeys","hasAutomationEqualityBug","k","equalsConstructorPrototypeIfNotBuggy","object","theKeys","skipProto","j","skipConstructor","implementation","slice","origKeys","originalKeys","keysWorksWithArguments","objectKeys","shams","sym","symObj","symVal","syms","descriptor","origSymbol","hasSymbolSham","hasSymbols","ERROR_MESSAGE","funcType","that","bound","binder","boundLength","boundArgs","Empty","functionBind","src","undefined","$SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","getProto","x","needsEval","INTRINSICS","doEval","gen","LEGACY_ALIASES","hasOwn","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","string","first","last","number","quote","subString","getBaseIntrinsic","allowMissing","intrinsicName","alias","getIntrinsic","intrinsicBaseName","intrinsic","intrinsicRealName","skipFurtherCaching","isOwn","part","GetIntrinsic","$defineProperty","hasPropertyDescriptors","hasPropertyDescriptors_1","concat","origDefineProperty","supportsDescriptors","defineProperty","predicate","defineProperties","map","predicates","defineProperties_1","implementation_browserModule","polyfill","global","define","getPolyfill","shim","getGlobal","globalthis","__extends","this","extendStatics","d","p","__","xstream","ponyfill_1","globalthis_1","$$observable","NO","noop","cp","and","f1","f2","t","_try","u","NO_IL","internalizeProducer","producer","il","StreamSub","_stream","_listener","Observer","FromObservable","observable","out","Merge","insArr","s","L","CombineListener","Combine","Nn","vals","n","ils","FromArray","FromPromise","prod","Periodic","period","self","intervalHandler","Debug","ins","arg","Drop","max","EndWhenListener","op","EndWhen","Filter","passes","r","FlattenListener","Flatten","_a","inner","Fold","f","seed","_this","Last","MapOp","project","Remember","ReplaceError","replacer","StartWith","Take","m","Stream","ta","trace","N","MemoryStream","input","items","_i","array","obs","projectedValue","amount","initial","other","accumulate","replace","operator","labelOrSpy","streams","_super","xs","_default","flattenConcurrently_1","index_1","FCIL","FlattenConcOperator","flattenConcurrently","getLogger","isEnabled","enable","loginOrRegister","verifyIdentityToken","patchProfile","tryCatch","default_","onError","onSuccess","resp","wrapP","res","getOrThrow","item","msg","isChatRoom","makeApiRequest","storage","api","useCredentials","useHeaders","useParams","useUrl","useGetUrl","usePostUrl","usePatchUrl","useDeleteUrl","useBody","mapper","compose","body","baseUrl","acc","Encode.loginOrRegister","getNonce","Encode.verifyIdentityToken","getProfile","Encode.patchProfile","getUserList","blockUser","unblockUser","getBlockedUsers","getTotalUnreadCount","getRoomUnreadCount","createRoom","it","getOrCreateRoomWithTarget","getOrCreateRoomWithUniqueId","getRoomById","updateRoom","getUserRooms","getRoomInfo","getRoomParticipants","addRoomParticipants","removeRoomParticipants","postComment","getComment","updateCommentStatus","_b","deleteMessages","clearRooms","setDeviceToken","removeDeviceToken","synchronize","synchronizeEvent","appConfig","searchMessagesV2","room","roomType","rType","isPublic","getFileList","updateMessage","getMqttNode","withHeaders","withCredentials","withBaseUrl","Provider","account","json","isJson1","isJson2","user","avatarUrl","participant","getRoomType","isChannel","urlAlphabet","nanoid","size","getMessageAdapter","roomId","apiConfig","Api.postComment","Provider.withBaseUrl","Provider.withCredentials","Decoder.message","lastMessageId","limit","after","Api.getComment","uniqueIds","Api.deleteMessages","messageId","Api.updateCommentStatus","query","roomIds","userId","page","Api.searchMessagesV2","comments","fileType","includeExtensions","excludeExtensions","Api.getFileList","Api.updateMessage","factory","is","hasOwnProperty","not","func","all","getParams","length","any","comparator","compareVersion","range","tag","min","regexes","regexpCheck","regexp","words","word","chr","half","charCode","days","months","date","day","january","july","stdTimezoneOffset","now","start","end","stamp","year","month","quarter","todayString","tomorrowString","yesterdayString","freeGlobal","freeSelf","thisGlobal","document","previousIs","navigator","appVersion","userAgent","vendor","count","property","sign","setInterfaces","option","interfaces","every","checkers","check","some","checker","getName","getMsg","isRequired","isReqString","isReqNumber","isReqBoolean","isReqJson","isReqArrayNumber","isReqArrayString","isReqArrayOfStringOrNumber","isOptArrayString","isOptString","isOptNumber","isOptJson","isOptCallback","isOptBoolean","isArrayOfNumber","ids","isArrayOfString","isCallback1","cb","isCallback2","toPromise","stream","toCallback","subscription","toCallbackOrPromise","process","tap","onNext","onComplete","sleep","time","bufferUntil","buffer","subscribeOnNext","toEventSubscription","eventSubscribe","subs","handler","toEventSubscription_","IntervalProducer","getInterval","getSyncInterval","__publicField","sink","_catchAllSymbol","_patternOR","_patternORStr","_patternAND","_patternANDStr","_patternRANGE","_patternRANGEStr","_patternREGEXP","_patternREGEXPStr","EXTRACT_PATTERN_AND_FLAGS","MissingCatchAllPattern","matchers","when","calculateResult","matched","matcher","_serialize","mixed","_unserialize","_true","_match","_matching","serializedKey","deserialized","matcherConfiguration","FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","objectProto","objectToString","nativeMax","nativeMin","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","toNumber","invokeFunc","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","flush","debounced","isInvoking","isObjectLike","isSymbol","isBinary","lodash_debounce","EventEmitter_1","EventEmitter","event","eventHandlers","__export","require","Store","mqttPacket","Writable","reInterval","validations","xtend","debug","nextTick","setImmediate","defaultConnectOptions","socketErrors","errors","defaultId","sendPacket","client","packet","queue","flushVolatile","storeAndSend","cbStorePut","nop","MqttClient","streamBuilder","deliver","entry","connectPacket","writable","completeParse","packets","nextTickWork","work","buf","enc","streamErrorHandler","authPacket","topic","defaultOpts","resubscribe","invalidTopic","currentOpts","topics","sub","granted","force","closeStores","e1","e2","finish","forced","rc","qos","validReasonCodes","pubackRC","pubrecRC","grantedI","comp","pub","connack","_resubscribeTopicsKeys","topicI","resubscribeTopic","startStreamProcess","outStore","clearStoreProcessing","remove","storeDeliver","allProcessed","Buffer","Transform","duplexify","my","proxy","isInitialized","buildProxy","chunk","encoding","next","setDefaultOpts","buildUrl","bindEventHandler","reader","buildStream","websocketSubProtocol","net","port","host","tls","buildBuilder","mqttClient","connection","handleTLSerrors","WS","WSS_OPTIONS","IS_BROWSER","setDefaultBrowserOpts","createWebSocket","createBrowserWebSocket","socket","webSocketStream","browserStreamBuilder","bufferSize","bufferTimeout","coerceToBuffer","socketWriteBrowser","socketEndBrowser","writev","eventListenerSupport","onopen","onclose","onerror","onmessage","socketWrite","socketEnd","chunks","buffers","socketTask","errMsg","destroyRef","Readable","streamsOpts","defaultStoreOptions","destroyed","values","validateTopic","validateTopics","protocols","parseAuthOptions","matches","connect","brokerUrl","isSecure","wrapper","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","num","encodeChunk","uint8","output","extraBytes","maxChunkLength","len2","symbol","BufferList","offset","tot","_t","blOffset","bufferId","dst","dstStart","srcStart","srcEnd","copy","off","bytes","bufoff","startOffset","endOffset","search","blIndex","buffOffset","buff","nativeSearchResult","revOffset","searchOffset","methods","DuplexStream","BufferListStream","piper","base64","ieee754","SlowBuffer","K_MAX_LENGTH","typedArraySupport","createBuffer","encodingOrOffset","allocUnsafe","from","fromString","fromArrayLike","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","alloc","fill","checked","actual","byteOffset","numberIsNaN","y","list","pos","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","toHex","newBuf","checkOffset","ext","noAssert","mul","checkInt","maxBytes","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","hi","lo","formatArgs","save","load","useColors","localstorage","warned","lastC","namespaces","formatters","setup","env","createDebug","coerce","disable","enabled","destroy","selectColor","namespace","hash","prevTime","enableOverride","curr","ms","format","formatter","delimiter","newDebug","split","toNamespace","eos","shift","SIGNAL_FLUSH","onuncork","autoDestroy","destroyer","ws","toStreams2","rs","Duplexify","readable","unend","ondrain","clear","onreadable","onend","once","isRequest","isChildProcess","cancelled","onlegacyfinish","onfinish","onexit","exitCode","onclosenexttick","onrequest","objectCreate","objectCreatePolyfill","objectKeysPolyfill","functionBindPolyfill","defaultMaxListeners","hasDefineProperty","$getMaxListeners","emitNone","isFn","listeners","arrayClone","emitOne","arg1","emitTwo","arg2","emitThree","arg3","emitMany","er","events","doError","_addListener","prepend","existing","w","onceWrapper","_onceWrap","state","wrapped","originalListener","spliceOne","_listeners","unwrap","evlistener","unwrapListeners","emitter","listenerCount","proto","F","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","superCtor","TempCtor","genHeader","dup","retain","writeToStream","generate","Accumulator","lengths","SubOk","generateBuffer","generateCache","genBufVariableByteInt","digit","generate4ByteBuffer","Packet","bl","constants","Parser","zero","flags","protocolId","properties","clientId","willProperties","rh","rap","nl","maybeBuffer","fullInfoFlag","current","padding","currentUserProperty","currentValue","empty","zeroBuf","numbers","numCache","generateNumber","writeNumber","writeNumberCached","toGenerate","uncork","publish","confirmation","subscribe","suback","unsubscribe","unsuback","emptyPacket","disconnect","auth","writeNumberGenerated","settings","protocolVersion","will","clean","keepalive","propertiesData","getProperties","providedUsername","isStringOrBuffer","writeVarByteInt","writeStringOrBuffer","writeString","reasonCode","getPropertiesByMaximumPacketSize","itopic","iqos","jtopic","jqos","jnl","jrap","jrh","joptions","unsubs","varByteIntCache","strlen","writeStringPair","generatedNumber","write4ByteNumber","generated4ByteBuffer","toWrite","writeProperties","propertiesLength","getLengthProperty","currentLength","propName","propLength","propValueLength","propValue","valueIndex","mayEmptyProps","maximumPacketSize","currentMayEmptyProp","writeProperty","bufOrString","field","parse","fmtLong","fmtShort","msAbs","plural","isPlural","wrappy","onceStrict","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","marker","draining","currentQueue","queueIndex","cleanUpNextTick","drainQueue","timeout","Item","freeExports","freeModule","punycode","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","stringFromCharCode","mapDomain","labels","encoded","ucs2decode","counter","extra","ucs2encode","basicToDigit","digitToBasic","flag","adapt","delta","numPoints","firstTime","decode","inputLength","bias","basic","oldi","baseMinusT","handledCPCount","basicLength","q","handledCPCountPlusOne","qMinusT","toUnicode","toASCII","qs","sep","eq","maxKeys","idx","kstr","vstr","stringifyPrimitive","ks","_inheritsLoose","subClass","superClass","codes","createErrorType","Base","getMessage","NodeError","_Base","oneOf","expected","startsWith","this_len","includes","determiner","Duplex","onEndNT","PassThrough","ReadableState","EElistenerCount","OurUint8Array","_uint8ArrayToBuffer","_isUint8Array","debugUtil","destroyImpl","_require","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","StringDecoder","createReadableStreamAsyncIterator","errorOrDestroy","kProxyEvents","prependListener","isDuplex","skipChunkCheck","readableAddChunk","addToFront","onEofChunk","chunkInvalid","addChunk","maybeReadMore","emitReadable","decoder","MAX_HWM","computeNewHighWaterMark","howMuchToRead","nOrig","endReadable","doRead","fromList","emitReadable_","flow","maybeReadMore_","dest","pipeOpts","doEnd","endFn","unpipe","onunpipe","unpipeInfo","cleanup","pipeOnDrain","cleanedUp","ondata","indexOf","dests","ev","nReadingNextTick","updateReadableListening","resume","resume_","paused","endReadableNT","wState","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","prefinish","err2","CorkedRequest","onCorkedFinish","WritableState","internalUtil","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","noDecode","onwrite","realHasInstance","writeAfterEnd","validChunk","isBuf","writeOrBuffer","clearBuffer","decodeChunk","newChunk","doWrite","onwriteError","sync","finishMaybe","onwriteStateUpdate","finished","needFinish","afterWrite","onwriteDrain","holder","allBuffers","endWritable","callFinal","need","rState","corkReq","_Object$setPrototypeO","_defineProperty","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","wrapForNext","lastPromise","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","_this2","_Object$create","iterator","ownKeys","enumerableOnly","symbols","_objectSpread","_classCallCheck","Constructor","_defineProperties","_createClass","protoProps","staticProps","_require2","inspect","custom","copyBuffer","hasStrings","nb","_","readableDestroyed","writableDestroyed","emitErrorNT","emitCloseNT","emitErrorAndCloseNT","undestroy","ERR_STREAM_PREMATURE_CLOSE","called","_len","_key","writableEnded","readableEnded","ERR_MISSING_ARGS","reading","writing","closed","call","pipe","to","popCallback","pipeline","destroys","ERR_INVALID_OPT_VALUE","highWaterMarkFrom","duplexKey","hwm","ReInterval","interval","copyProps","SafeBuffer","getStateLength","isEncoding","_normalizeEncoding","retried","normalizeEncoding","nenc","utf16Text","utf16End","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","utf8End","utf8Text","utf8CheckByte","byte","utf8CheckIncomplete","utf8CheckExtraBytes","total","util","urlParse","urlResolve","urlResolveObject","urlFormat","Url","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","queryIndex","splitter","uSplit","slashRegex","rest","simplePath","lowerProto","slashes","hostEnd","hec","atSign","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","ae","esc","qm","pathname","relative","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","up","isAbsolute","deprecate","deprecated","reNewMessage","reNotification","reTyping","reDelivery","reRead","reOnlineStatus","reChannelMessage","reCustomEvent","reMessageUpdated","getMqttHandler","topicData","uniqueId","isOnline","lastSeen","messageUniqueId","isTyping","getMqttAdapter","mqtt","cacheUrl","shouldConnect","subscribedCustomEventTopics","getTopicForCustomEvent","logger","Api.getMqttNode","Api.makeApiRequest","__mqtt_connected_handler","__mqtt_reconnect_handler","__mqtt_closed_handler","__mqtt_message_handler","__mqtt_error_handler","intervalId","_getClientId","appId","__mqtt_conneck","lastWill","mqtt_","sendPresence","userToken","channelUniqueId","MAX_SAFE_INTEGER","argsTag","funcTag","genTag","arrayPush","Symbol","propertyIsEnumerable","spreadableSymbol","baseFlatten","depth","isStrict","isFlattenable","flatten","isArrayLikeObject","isArrayLike","isLength","lodash_flatten","synchronizeEventFactory","getEnableSync","getId","eventId","Api.synchronizeEvent","lastId","messageDelivered","messageRead","messageDeleted","p1","msgs","roomCleared","Decoder.room","processResult","synchronizeFactory","Api.synchronize","messages","getSyncAdapter","shouldSync","isAuthenticated","isNotForceDisabled","isSyncEnabled","isAbleToSync","isSyncEventEnabled","syncEvent","fromSync","getRealtimeAdapter","newMessage$","onMessageRead$","onMessageDelivered$","onMessageDeleted$","onRoomCleared$","onMessageUpdated$","lastEventId","getRoomAdapter","participantIds","Api.addRoomParticipants","Decoder.participant","Api.removeRoomParticipants","email","extras","Api.getOrCreateRoomWithTarget","Api.clearRooms","userIds","Api.createRoom","Api.getOrCreateRoomWithUniqueId","sorting","Api.getRoomParticipants","Api.getRoomById","roomUniqueIds","showRemoved","showParticipants","Api.getRoomInfo","showEmpty","Api.getUserRooms","Api.getTotalUnreadCount","Api.getRoomUnreadCount","Api.updateRoom","getUserAdapter","userKey","Api.loginOrRegister","Provider.withHeaders","token_","Decoder.account","Api.blockUser","Decoder.user","Api.getBlockedUsers","Api.getUserList","Api.unblockUser","identityToken","Api.verifyIdentityToken","Api.patchProfile","Api.getNonce","Api.getProfile","deviceToken","isDevelopment","Api.setDeviceToken","Api.removeDeviceToken","Api.appConfig","Decoder.appConfig","IQMessageStatus","IQMessageType","Hooks","hookAdapterFactory","hooks","get","intercept","hook","trigger","triggerBeforeReceived$","storageFactory","makeSetter","makeGetter","defaultValue","defaultBaseURL","defaultUploadUrl","defaultBrokerUrl","defaultBrokerLbUrl","defaultSyncInterval","defaultSyncIntervalWhenConnected","Qiscus","brokerLbUrl","syncInterval","setterHelper","fromUser","fromServer","brokerUrlSetter","mqttResult","defaultBaseUrl","currentUser","searchUsername","nonce","roomUniqueId","showParticipant","messageUniqueIds","file","percentage","progress","_message","text","caption","filename","repliedMessage"],"mappings":"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"}