UNPKG

weauthjs

Version:

WeYouMe Protocol Javascript SDK Library

90 lines (83 loc) 63.5 kB
/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("/* WEBPACK VAR INJECTION */(function(global) {\n\n/* eslint-env browser */\n\nvar weauthjs = __webpack_require__(2);\n\nif (typeof window !== 'undefined') {\n window.weauthjs = weauthjs;\n}\n\nif (typeof global !== 'undefined') {\n global.weauthjs = weauthjs;\n}\n\nmodule.exports = weauthjs;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9icm93c2VyLmpzPzA1NGIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxudmFyIHdlYXV0aGpzID0gcmVxdWlyZSgnLi9pbmRleC5qcycpO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93LndlYXV0aGpzID0gd2VhdXRoanM7XG59XG5cbmlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICBnbG9iYWwud2VhdXRoanMgPSB3ZWF1dGhqcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3ZWF1dGhqcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n"); /***/ }), /* 1 */ /***/ (function(module, exports) { eval("var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanM/MzY5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1\n"); /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar fetch = __webpack_require__(3);\n\nvar SDKError = function (_Error) {\n _inherits(SDKError, _Error);\n\n function SDKError(message, obj) {\n _classCallCheck(this, SDKError);\n\n var _this = _possibleConstructorReturn(this, (SDKError.__proto__ || Object.getPrototypeOf(SDKError)).call(this, message));\n\n _this.name = 'SDKError';\n _this.error = obj.error;\n _this.error_description = obj.error_description;\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(_this, _this.constructor);\n } else {\n _this.stack = new Error(message).stack;\n }\n return _this;\n }\n\n return SDKError;\n}(Error);\n\nfunction weauthjs() {\n this.options = {\n baseURL: 'https://auth.WeYouMe.io',\n app: '',\n callbackURL: '',\n scope: []\n };\n}\n\nweauthjs.prototype.setBaseURL = function setBaseURL(baseURL) {\n this.options.baseURL = baseURL;\n};\nweauthjs.prototype.setApp = function setApp(app) {\n this.options.app = app;\n};\nweauthjs.prototype.setCallbackURL = function setCallbackURL(callbackURL) {\n this.options.callbackURL = callbackURL;\n};\nweauthjs.prototype.setAccessToken = function setAccessToken(accessToken) {\n this.options.accessToken = accessToken;\n};\nweauthjs.prototype.removeAccessToken = function removeAccessToken() {\n this.options.accessToken = undefined;\n};\nweauthjs.prototype.setScope = function setScope(scope) {\n this.options.scope = scope;\n};\n\nweauthjs.prototype.getLoginURL = function getLoginURL(state) {\n var loginURL = this.options.baseURL + '/oauth2/authorize?client_id=' + this.options.app + '&redirect_uri=' + encodeURIComponent(this.options.callbackURL);\n loginURL += this.options.scope ? '&scope=' + this.options.scope.join(',') : '';\n loginURL += state ? '&state=' + encodeURIComponent(state) : '';\n return loginURL;\n};\n\nweauthjs.prototype.send = function send(route, method, body, cb) {\n var url = this.options.baseURL + '/api/' + route;\n var promise = fetch(url, {\n method: method,\n headers: {\n Accept: 'application/json, text/plain, */*',\n 'Content-Type': 'application/json',\n Authorization: this.options.accessToken\n },\n body: JSON.stringify(body)\n }).then(function (res) {\n var json = res.json();\n // If the status is something other than 200 we need\n // to reject the result since the request is not considered as a fail\n if (res.status !== 200) {\n return json.then(function (result) {\n return Promise.reject(new SDKError('weauthjs error', result));\n });\n }\n return json;\n }).then(function (res) {\n if (res.error) {\n return Promise.reject(new SDKError('weauthjs error', res));\n }\n return res;\n });\n\n if (!cb) return promise;\n\n return promise.then(function (res) {\n return cb(null, res);\n }).catch(function (err) {\n return cb(err, null);\n });\n};\n\nweauthjs.prototype.broadcast = function broadcast(operations, cb) {\n return this.send('broadcast', 'POST', { operations: operations }, cb);\n};\n\nweauthjs.prototype.me = function me(cb) {\n return this.send('me', 'POST', {}, cb);\n};\n\nweauthjs.prototype.vote = function vote(voter, author, permlink, weight, cb) {\n var params = {\n voter: voter,\n author: author,\n permlink: permlink,\n weight: weight\n };\n return this.broadcast([['vote', params]], cb);\n};\n\nweauthjs.prototype.comment = function comment(parentAuthor, parentPermlink, author, permlink, title, body, json, cb) {\n var params = {\n parent_author: parentAuthor,\n parent_permlink: parentPermlink,\n author: author,\n permlink: permlink,\n title: title,\n body: body,\n json: JSON.stringify(json)\n };\n return this.broadcast([['comment', params]], cb);\n};\n\nweauthjs.prototype.reblog = function reblog(account, author, permlink, cb) {\n var params = {\n required_auths: [],\n required_posting_auths: [account],\n id: 'follow',\n json: JSON.stringify(['reblog', {\n account: account,\n author: author,\n permlink: permlink\n }])\n };\n return this.broadcast([['customJson', params]], cb);\n};\n\nweauthjs.prototype.follow = function follow(follower, following, cb) {\n var params = {\n required_auths: [],\n required_posting_auths: [follower],\n id: 'follow',\n json: JSON.stringify(['follow', { follower: follower, following: following, what: ['blog'] }])\n };\n return this.broadcast([['customJson', params]], cb);\n};\n\nweauthjs.prototype.unfollow = function unfollow(unfollower, unfollowing, cb) {\n var params = {\n required_auths: [],\n required_posting_auths: [unfollower],\n id: 'follow',\n json: JSON.stringify(['follow', { follower: unfollower, following: unfollowing, what: [] }])\n };\n return this.broadcast([['customJson', params]], cb);\n};\n\nweauthjs.prototype.ignore = function ignore(follower, following, cb) {\n var params = {\n required_auths: [],\n required_posting_auths: [follower],\n id: 'follow',\n json: JSON.stringify(['follow', { follower: follower, following: following, what: ['ignore'] }])\n };\n return this.broadcast([['customJson', params]], cb);\n};\n\nweauthjs.prototype.claimRewardBalance = function claimRewardBalance(account, TMEreward, TSDreward, SCOREreward, cb) {\n var params = {\n account: account,\n TMEreward: TMEreward,\n TSDreward: TSDreward,\n SCOREreward: SCOREreward\n };\n return this.broadcast([['claimRewardBalance', params]], cb);\n};\n\nweauthjs.prototype.revokeToken = function revokeToken(cb) {\n var _this2 = this;\n\n return this.send('oauth2/token/revoke', 'POST', { token: this.options.accessToken }, cb).then(function () {\n return _this2.removeAccessToken();\n });\n};\n\nweauthjs.prototype.updateUserMetadata = function updateUserMetadata() {\n var metadata = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var cb = arguments[1];\n\n return this.send('me', 'PUT', { user_metadata: metadata }, cb);\n};\n\nweauthjs.prototype.sign = function sign(name, params, redirectUri) {\n if (typeof name !== 'string' || (typeof params === 'undefined' ? 'undefined' : _typeof(params)) !== 'object') {\n return new SDKError('weauthjs error', {\n error: 'invalid_request',\n error_description: 'Request has an invalid format'\n });\n }\n var url = this.options.baseURL + '/sign/' + name + '?';\n url += Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n url += redirectUri ? '&redirect_uri=' + encodeURIComponent(redirectUri) : '';\n return url;\n};\n\nexports.Initialize = function Initialize(config) {\n var instance = new weauthjs();\n\n if (!config) {\n throw new Error('You have to provide config');\n }\n\n if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) !== 'object') {\n throw new Error('Config must be an object');\n }\n\n if (config.baseURL) instance.setBaseURL(config.baseURL);\n if (config.app) instance.setApp(config.app);\n if (config.callbackURL) instance.setCallbackURL(config.callbackURL);\n if (config.accessToken) instance.setAccessToken(config.accessToken);\n if (config.scope) instance.setScope(config.scope);\n\n return instance;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9pbmRleC5qcz84NzQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBmZXRjaCA9IHJlcXVpcmUoJ2Nyb3NzLWZldGNoJyk7XG5cbnZhciBTREtFcnJvciA9IGZ1bmN0aW9uIChfRXJyb3IpIHtcbiAgX2luaGVyaXRzKFNES0Vycm9yLCBfRXJyb3IpO1xuXG4gIGZ1bmN0aW9uIFNES0Vycm9yKG1lc3NhZ2UsIG9iaikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTREtFcnJvcik7XG5cbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoU0RLRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTREtFcnJvcikpLmNhbGwodGhpcywgbWVzc2FnZSkpO1xuXG4gICAgX3RoaXMubmFtZSA9ICdTREtFcnJvcic7XG4gICAgX3RoaXMuZXJyb3IgPSBvYmouZXJyb3I7XG4gICAgX3RoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBvYmouZXJyb3JfZGVzY3JpcHRpb247XG4gICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3RoaXMuc3RhY2sgPSBuZXcgRXJyb3IobWVzc2FnZSkuc3RhY2s7XG4gICAgfVxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBTREtFcnJvcjtcbn0oRXJyb3IpO1xuXG5mdW5jdGlvbiB3ZWF1dGhqcygpIHtcbiAgdGhpcy5vcHRpb25zID0ge1xuICAgIGJhc2VVUkw6ICdodHRwczovL2F1dGguV2VZb3VNZS5pbycsXG4gICAgYXBwOiAnJyxcbiAgICBjYWxsYmFja1VSTDogJycsXG4gICAgc2NvcGU6IFtdXG4gIH07XG59XG5cbndlYXV0aGpzLnByb3RvdHlwZS5zZXRCYXNlVVJMID0gZnVuY3Rpb24gc2V0QmFzZVVSTChiYXNlVVJMKSB7XG4gIHRoaXMub3B0aW9ucy5iYXNlVVJMID0gYmFzZVVSTDtcbn07XG53ZWF1dGhqcy5wcm90b3R5cGUuc2V0QXBwID0gZnVuY3Rpb24gc2V0QXBwKGFwcCkge1xuICB0aGlzLm9wdGlvbnMuYXBwID0gYXBwO1xufTtcbndlYXV0aGpzLnByb3RvdHlwZS5zZXRDYWxsYmFja1VSTCA9IGZ1bmN0aW9uIHNldENhbGxiYWNrVVJMKGNhbGxiYWNrVVJMKSB7XG4gIHRoaXMub3B0aW9ucy5jYWxsYmFja1VSTCA9IGNhbGxiYWNrVVJMO1xufTtcbndlYXV0aGpzLnByb3RvdHlwZS5zZXRBY2Nlc3NUb2tlbiA9IGZ1bmN0aW9uIHNldEFjY2Vzc1Rva2VuKGFjY2Vzc1Rva2VuKSB7XG4gIHRoaXMub3B0aW9ucy5hY2Nlc3NUb2tlbiA9IGFjY2Vzc1Rva2VuO1xufTtcbndlYXV0aGpzLnByb3RvdHlwZS5yZW1vdmVBY2Nlc3NUb2tlbiA9IGZ1bmN0aW9uIHJlbW92ZUFjY2Vzc1Rva2VuKCkge1xuICB0aGlzLm9wdGlvbnMuYWNjZXNzVG9rZW4gPSB1bmRlZmluZWQ7XG59O1xud2VhdXRoanMucHJvdG90eXBlLnNldFNjb3BlID0gZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgdGhpcy5vcHRpb25zLnNjb3BlID0gc2NvcGU7XG59O1xuXG53ZWF1dGhqcy5wcm90b3R5cGUuZ2V0TG9naW5VUkwgPSBmdW5jdGlvbiBnZXRMb2dpblVSTChzdGF0ZSkge1xuICB2YXIgbG9naW5VUkwgPSB0aGlzLm9wdGlvbnMuYmFzZVVSTCArICcvb2F1dGgyL2F1dGhvcml6ZT9jbGllbnRfaWQ9JyArIHRoaXMub3B0aW9ucy5hcHAgKyAnJnJlZGlyZWN0X3VyaT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMub3B0aW9ucy5jYWxsYmFja1VSTCk7XG4gIGxvZ2luVVJMICs9IHRoaXMub3B0aW9ucy5zY29wZSA/ICcmc2NvcGU9JyArIHRoaXMub3B0aW9ucy5zY29wZS5qb2luKCcsJykgOiAnJztcbiAgbG9naW5VUkwgKz0gc3RhdGUgPyAnJnN0YXRlPScgKyBlbmNvZGVVUklDb21wb25lbnQoc3RhdGUpIDogJyc7XG4gIHJldHVybiBsb2dpblVSTDtcbn07XG5cbndlYXV0aGpzLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gc2VuZChyb3V0ZSwgbWV0aG9kLCBib2R5LCBjYikge1xuICB2YXIgdXJsID0gdGhpcy5vcHRpb25zLmJhc2VVUkwgKyAnL2FwaS8nICsgcm91dGU7XG4gIHZhciBwcm9taXNlID0gZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiBtZXRob2QsXG4gICAgaGVhZGVyczoge1xuICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBBdXRob3JpemF0aW9uOiB0aGlzLm9wdGlvbnMuYWNjZXNzVG9rZW5cbiAgICB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpXG4gIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgIHZhciBqc29uID0gcmVzLmpzb24oKTtcbiAgICAvLyBJZiB0aGUgc3RhdHVzIGlzIHNvbWV0aGluZyBvdGhlciB0aGFuIDIwMCB3ZSBuZWVkXG4gICAgLy8gdG8gcmVqZWN0IHRoZSByZXN1bHQgc2luY2UgdGhlIHJlcXVlc3QgaXMgbm90IGNvbnNpZGVyZWQgYXMgYSBmYWlsXG4gICAgaWYgKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgcmV0dXJuIGpzb24udGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU0RLRXJyb3IoJ3dlYXV0aGpzIGVycm9yJywgcmVzdWx0KSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgIGlmIChyZXMuZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU0RLRXJyb3IoJ3dlYXV0aGpzIGVycm9yJywgcmVzKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0pO1xuXG4gIGlmICghY2IpIHJldHVybiBwcm9taXNlO1xuXG4gIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgIHJldHVybiBjYihudWxsLCByZXMpO1xuICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgcmV0dXJuIGNiKGVyciwgbnVsbCk7XG4gIH0pO1xufTtcblxud2VhdXRoanMucHJvdG90eXBlLmJyb2FkY2FzdCA9IGZ1bmN0aW9uIGJyb2FkY2FzdChvcGVyYXRpb25zLCBjYikge1xuICByZXR1cm4gdGhpcy5zZW5kKCdicm9hZGNhc3QnLCAnUE9TVCcsIHsgb3BlcmF0aW9uczogb3BlcmF0aW9ucyB9LCBjYik7XG59O1xuXG53ZWF1dGhqcy5wcm90b3R5cGUubWUgPSBmdW5jdGlvbiBtZShjYikge1xuICByZXR1cm4gdGhpcy5zZW5kKCdtZScsICdQT1NUJywge30sIGNiKTtcbn07XG5cbndlYXV0aGpzLnByb3RvdHlwZS52b3RlID0gZnVuY3Rpb24gdm90ZSh2b3RlciwgYXV0aG9yLCBwZXJtbGluaywgd2VpZ2h0LCBjYikge1xuICB2YXIgcGFyYW1zID0ge1xuICAgIHZvdGVyOiB2b3RlcixcbiAgICBhdXRob3I6IGF1dGhvcixcbiAgICBwZXJtbGluazogcGVybWxpbmssXG4gICAgd2VpZ2h0OiB3ZWlnaHRcbiAgfTtcbiAgcmV0dXJuIHRoaXMuYnJvYWRjYXN0KFtbJ3ZvdGUnLCBwYXJhbXNdXSwgY2IpO1xufTtcblxud2VhdXRoanMucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbiBjb21tZW50KHBhcmVudEF1dGhvciwgcGFyZW50UGVybWxpbmssIGF1dGhvciwgcGVybWxpbmssIHRpdGxlLCBib2R5LCBqc29uLCBjYikge1xuICB2YXIgcGFyYW1zID0ge1xuICAgIHBhcmVudF9hdXRob3I6IHBhcmVudEF1dGhvcixcbiAgICBwYXJlbnRfcGVybWxpbms6IHBhcmVudFBlcm1saW5rLFxuICAgIGF1dGhvcjogYXV0aG9yLFxuICAgIHBlcm1saW5rOiBwZXJtbGluayxcbiAgICB0aXRsZTogdGl0bGUsXG4gICAgYm9keTogYm9keSxcbiAgICBqc29uOiBKU09OLnN0cmluZ2lmeShqc29uKVxuICB9O1xuICByZXR1cm4gdGhpcy5icm9hZGNhc3QoW1snY29tbWVudCcsIHBhcmFtc11dLCBjYik7XG59O1xuXG53ZWF1dGhqcy5wcm90b3R5cGUucmVibG9nID0gZnVuY3Rpb24gcmVibG9nKGFjY291bnQsIGF1dGhvciwgcGVybWxpbmssIGNiKSB7XG4gIHZhciBwYXJhbXMgPSB7XG4gICAgcmVxdWlyZWRfYXV0aHM6IFtdLFxuICAgIHJlcXVpcmVkX3Bvc3RpbmdfYXV0aHM6IFthY2NvdW50XSxcbiAgICBpZDogJ2ZvbGxvdycsXG4gICAganNvbjogSlNPTi5zdHJpbmdpZnkoWydyZWJsb2cnLCB7XG4gICAgICBhY2NvdW50OiBhY2NvdW50LFxuICAgICAgYXV0aG9yOiBhdXRob3IsXG4gICAgICBwZXJtbGluazogcGVybWxpbmtcbiAgICB9XSlcbiAgfTtcbiAgcmV0dXJuIHRoaXMuYnJvYWRjYXN0KFtbJ2N1c3RvbUpzb24nLCBwYXJhbXNdXSwgY2IpO1xufTtcblxud2VhdXRoanMucHJvdG90eXBlLmZvbGxvdyA9IGZ1bmN0aW9uIGZvbGxvdyhmb2xsb3dlciwgZm9sbG93aW5nLCBjYikge1xuICB2YXIgcGFyYW1zID0ge1xuICAgIHJlcXVpcmVkX2F1dGhzOiBbXSxcbiAgICByZXF1aXJlZF9wb3N0aW5nX2F1dGhzOiBbZm9sbG93ZXJdLFxuICAgIGlkOiAnZm9sbG93JyxcbiAgICBqc29uOiBKU09OLnN0cmluZ2lmeShbJ2ZvbGxvdycsIHsgZm9sbG93ZXI6IGZvbGxvd2VyLCBmb2xsb3dpbmc6IGZvbGxvd2luZywgd2hhdDogWydibG9nJ10gfV0pXG4gIH07XG4gIHJldHVybiB0aGlzLmJyb2FkY2FzdChbWydjdXN0b21Kc29uJywgcGFyYW1zXV0sIGNiKTtcbn07XG5cbndlYXV0aGpzLnByb3RvdHlwZS51bmZvbGxvdyA9IGZ1bmN0aW9uIHVuZm9sbG93KHVuZm9sbG93ZXIsIHVuZm9sbG93aW5nLCBjYikge1xuICB2YXIgcGFyYW1zID0ge1xuICAgIHJlcXVpcmVkX2F1dGhzOiBbXSxcbiAgICByZXF1aXJlZF9wb3N0aW5nX2F1dGhzOiBbdW5mb2xsb3dlcl0sXG4gICAgaWQ6ICdmb2xsb3cnLFxuICAgIGpzb246IEpTT04uc3RyaW5naWZ5KFsnZm9sbG93JywgeyBmb2xsb3dlcjogdW5mb2xsb3dlciwgZm9sbG93aW5nOiB1bmZvbGxvd2luZywgd2hhdDogW10gfV0pXG4gIH07XG4gIHJldHVybiB0aGlzLmJyb2FkY2FzdChbWydjdXN0b21Kc29uJywgcGFyYW1zXV0sIGNiKTtcbn07XG5cbndlYXV0aGpzLnByb3RvdHlwZS5pZ25vcmUgPSBmdW5jdGlvbiBpZ25vcmUoZm9sbG93ZXIsIGZvbGxvd2luZywgY2IpIHtcbiAgdmFyIHBhcmFtcyA9IHtcbiAgICByZXF1aXJlZF9hdXRoczogW10sXG4gICAgcmVxdWlyZWRfcG9zdGluZ19hdXRoczogW2ZvbGxvd2VyXSxcbiAgICBpZDogJ2ZvbGxvdycsXG4gICAganNvbjogSlNPTi5zdHJpbmdpZnkoWydmb2xsb3cnLCB7IGZvbGxvd2VyOiBmb2xsb3dlciwgZm9sbG93aW5nOiBmb2xsb3dpbmcsIHdoYXQ6IFsnaWdub3JlJ10gfV0pXG4gIH07XG4gIHJldHVybiB0aGlzLmJyb2FkY2FzdChbWydjdXN0b21Kc29uJywgcGFyYW1zXV0sIGNiKTtcbn07XG5cbndlYXV0aGpzLnByb3RvdHlwZS5jbGFpbVJld2FyZEJhbGFuY2UgPSBmdW5jdGlvbiBjbGFpbVJld2FyZEJhbGFuY2UoYWNjb3VudCwgVE1FcmV3YXJkLCBUU0RyZXdhcmQsIFNDT1JFcmV3YXJkLCBjYikge1xuICB2YXIgcGFyYW1zID0ge1xuICAgIGFjY291bnQ6IGFjY291bnQsXG4gICAgVE1FcmV3YXJkOiBUTUVyZXdhcmQsXG4gICAgVFNEcmV3YXJkOiBUU0RyZXdhcmQsXG4gICAgU0NPUkVyZXdhcmQ6IFNDT1JFcmV3YXJkXG4gIH07XG4gIHJldHVybiB0aGlzLmJyb2FkY2FzdChbWydjbGFpbVJld2FyZEJhbGFuY2UnLCBwYXJhbXNdXSwgY2IpO1xufTtcblxud2VhdXRoanMucHJvdG90eXBlLnJldm9rZVRva2VuID0gZnVuY3Rpb24gcmV2b2tlVG9rZW4oY2IpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgcmV0dXJuIHRoaXMuc2VuZCgnb2F1dGgyL3Rva2VuL3Jldm9rZScsICdQT1NUJywgeyB0b2tlbjogdGhpcy5vcHRpb25zLmFjY2Vzc1Rva2VuIH0sIGNiKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3RoaXMyLnJlbW92ZUFjY2Vzc1Rva2VuKCk7XG4gIH0pO1xufTtcblxud2VhdXRoanMucHJvdG90eXBlLnVwZGF0ZVVzZXJNZXRhZGF0YSA9IGZ1bmN0aW9uIHVwZGF0ZVVzZXJNZXRhZGF0YSgpIHtcbiAgdmFyIG1ldGFkYXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIGNiID0gYXJndW1lbnRzWzFdO1xuXG4gIHJldHVybiB0aGlzLnNlbmQoJ21lJywgJ1BVVCcsIHsgdXNlcl9tZXRhZGF0YTogbWV0YWRhdGEgfSwgY2IpO1xufTtcblxud2VhdXRoanMucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG5hbWUsIHBhcmFtcywgcmVkaXJlY3RVcmkpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCAodHlwZW9mIHBhcmFtcyA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocGFyYW1zKSkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG5ldyBTREtFcnJvcignd2VhdXRoanMgZXJyb3InLCB7XG4gICAgICBlcnJvcjogJ2ludmFsaWRfcmVxdWVzdCcsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ1JlcXVlc3QgaGFzIGFuIGludmFsaWQgZm9ybWF0J1xuICAgIH0pO1xuICB9XG4gIHZhciB1cmwgPSB0aGlzLm9wdGlvbnMuYmFzZVVSTCArICcvc2lnbi8nICsgbmFtZSArICc/JztcbiAgdXJsICs9IE9iamVjdC5rZXlzKHBhcmFtcykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4ga2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1trZXldKTtcbiAgfSkuam9pbignJicpO1xuICB1cmwgKz0gcmVkaXJlY3RVcmkgPyAnJnJlZGlyZWN0X3VyaT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKSA6ICcnO1xuICByZXR1cm4gdXJsO1xufTtcblxuZXhwb3J0cy5Jbml0aWFsaXplID0gZnVuY3Rpb24gSW5pdGlhbGl6ZShjb25maWcpIHtcbiAgdmFyIGluc3RhbmNlID0gbmV3IHdlYXV0aGpzKCk7XG5cbiAgaWYgKCFjb25maWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIHByb3ZpZGUgY29uZmlnJyk7XG4gIH1cblxuICBpZiAoKHR5cGVvZiBjb25maWcgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGNvbmZpZykpICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29uZmlnIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAoY29uZmlnLmJhc2VVUkwpIGluc3RhbmNlLnNldEJhc2VVUkwoY29uZmlnLmJhc2VVUkwpO1xuICBpZiAoY29uZmlnLmFwcCkgaW5zdGFuY2Uuc2V0QXBwKGNvbmZpZy5hcHApO1xuICBpZiAoY29uZmlnLmNhbGxiYWNrVVJMKSBpbnN0YW5jZS5zZXRDYWxsYmFja1VSTChjb25maWcuY2FsbGJhY2tVUkwpO1xuICBpZiAoY29uZmlnLmFjY2Vzc1Rva2VuKSBpbnN0YW5jZS5zZXRBY2Nlc3NUb2tlbihjb25maWcuYWNjZXNzVG9rZW4pO1xuICBpZiAoY29uZmlnLnNjb3BlKSBpbnN0YW5jZS5zZXRTY29wZShjb25maWcuc2NvcGUpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2\n"); /***/ }), /* 3 */ /***/ (function(module, exports) { eval("var self = {};\n(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n };\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue+','+value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) { items.push(name); });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) { items.push(value); });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) { items.push([name, value]); });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'omit';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n };\n\n function decode(body) {\n var form = new FormData();\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = 'status' in options ? options.status : 200;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n var xhr = new XMLHttpRequest();\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n };\n self.fetch.polyfill = true;\n})(typeof self !== 'undefined' ? self : this);\n\n/*\n * Rollup wraps up the whatwg-fetch code on ponyfill mode in\n * order to prevent it from adding fetch to the global object.\n */\n\n var fetch = self.fetch;\n\n fetch.fetch = fetch;\n fetch.Response = self.Response;\n fetch.Headers = self.Headers;\n fetch.Request = self.Request;\n\n // fetch now can be imported as the default object\n module.exports = fetch;\n \n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jcm9zcy1mZXRjaC9kaXN0L2Jyb3dzZXIuanM/YzY0OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2VsZiA9IHt9O1xuKGZ1bmN0aW9uKHNlbGYpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmIChzZWxmLmZldGNoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3VwcG9ydCA9IHtcbiAgICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIHNlbGYsXG4gICAgaXRlcmFibGU6ICdTeW1ib2wnIGluIHNlbGYgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gICAgYmxvYjogJ0ZpbGVSZWFkZXInIGluIHNlbGYgJiYgJ0Jsb2InIGluIHNlbGYgJiYgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIHNlbGYsXG4gICAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gc2VsZlxuICB9O1xuXG4gIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgXTtcblxuICAgIHZhciBpc0RhdGFWaWV3ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbiAgICB9O1xuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID0gQXJyYXlCdWZmZXIuaXNWaWV3IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgfVxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLlxcXl9gfH5dL2kudGVzdChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUnKVxuICAgIH1cbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbiAgZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvclxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlcmF0b3JcbiAgfVxuXG4gIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICAgIHRoaXMubWFwID0ge307XG5cbiAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdO1xuICAgIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSsnLCcrdmFsdWUgOiB2YWx1ZTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChuYW1lKTsgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkgeyBpdGVtcy5wdXNoKHZhbHVlKTsgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKTsgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgICAgfTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHk7XG4gICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcik7XG4gICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSk7XG4gICAgICB9IGVsc2Uge