You're Invited: Meet the Socket team at BSidesSF and RSAC - April 27 - May 1.RSVP
Socket
Sign inDemoInstall
Socket

bearychat-rtm-client

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bearychat-rtm-client - npm Package Compare versions

Comparing version

to
0.2.0-alpha4

6

package.json
{
"name": "bearychat-rtm-client",
"version": "0.2.0-alpha3",
"version": "0.2.0-alpha4",
"description": "RTM client for BearyChat",

@@ -22,6 +22,4 @@ "main": "lib/index.js",

"delay": "^2.0.0",
"detect-node": "^2.0.3",
"invariant": "^2.2.2",
"warning": "^3.0.0",
"ws": "^3.0.0"
"warning": "^3.0.0"
},

@@ -28,0 +26,0 @@ "keywords": [

@@ -16,8 +16,8 @@ 'use strict';

var timeoutDelay = function () {
var _ref9 = _asyncToGenerator(_regenerator2.default.mark(function _callee5(timeout, message) {
return _regenerator2.default.wrap(function _callee5$(_context5) {
var _ref10 = _asyncToGenerator(_regenerator2.default.mark(function _callee6(timeout, message) {
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context5.prev = _context5.next) {
switch (_context6.prev = _context6.next) {
case 0:
_context5.next = 2;
_context6.next = 2;
return (0, _delay2.default)(timeout);

@@ -30,10 +30,10 @@

case 'end':
return _context5.stop();
return _context6.stop();
}
}
}, _callee5, this);
}, _callee6, this);
}));
return function timeoutDelay(_x3, _x4) {
return _ref9.apply(this, arguments);
return function timeoutDelay(_x4, _x5) {
return _ref10.apply(this, arguments);
};

@@ -97,2 +97,17 @@ }();

var RTMNotConnectedError = function (_Error2) {
_inherits(RTMNotConnectedError, _Error2);
function RTMNotConnectedError(errorMessage, rtmMessage) {
_classCallCheck(this, RTMNotConnectedError);
var _this2 = _possibleConstructorReturn(this, (RTMNotConnectedError.__proto__ || Object.getPrototypeOf(RTMNotConnectedError)).call(this, errorMessage));
_this2.rtmMessage = rtmMessage;
return _this2;
}
return RTMNotConnectedError;
}(Error);
/**

@@ -128,9 +143,9 @@ * Keep an RTM client running with multiple.

function RTMClient(options) {
var _this3 = this;
var _this4 = this;
_classCallCheck(this, RTMClient);
var _this2 = _possibleConstructorReturn(this, (RTMClient.__proto__ || Object.getPrototypeOf(RTMClient)).call(this));
var _this3 = _possibleConstructorReturn(this, (RTMClient.__proto__ || Object.getPrototypeOf(RTMClient)).call(this));
_this2._doConnect = _asyncToGenerator(_regenerator2.default.mark(function _callee() {
_this3._doConnect = _asyncToGenerator(_regenerator2.default.mark(function _callee() {
var wsUrl;

@@ -141,3 +156,3 @@ return _regenerator2.default.wrap(function _callee$(_context) {

case 0:
_this2._state = _RTMClientState2.default.CONNECTING;
_this3._state = _RTMClientState2.default.CONNECTING;

@@ -147,3 +162,3 @@ wsUrl = void 0;

_context.next = 5;
return _this2._getUrl();
return _this3._getUrl();

@@ -159,4 +174,4 @@ case 5:

_this2._reconnect(); // intentionally ignore "await"
_this2.emit(_RTMClientEvents2.default.ERROR, _context.t0);
_this3._reconnect(); // intentionally ignore "await"
_this3.emit(_RTMClientEvents2.default.ERROR, _context.t0);
return _context.abrupt('return');

@@ -166,4 +181,7 @@

_this2._reconnectAttempts = 1;
_this2._setConnection(new _RTMConnection2.default(wsUrl));
_this3._reconnectAttempts = 1;
_this3._setConnection(new _RTMConnection2.default({
url: wsUrl,
WebSocket: _this3.WebSocket
}));

@@ -175,30 +193,30 @@ case 15:

}
}, _callee, _this3, [[2, 8]]);
}, _callee, _this4, [[2, 8]]);
}));
_this2._handleConnectionOpen = function () {
_this2._state = _RTMClientState2.default.CONNECTED;
_this2.emit(_RTMClientEvents2.default.ONLINE);
_this3._handleConnectionOpen = function () {
_this3._state = _RTMClientState2.default.CONNECTED;
_this3.emit(_RTMClientEvents2.default.ONLINE);
};
_this2._handleConnectionClose = function () {
_this2._removeConnection();
_this2.emit(_RTMClientEvents2.default.OFFLINE);
if (_this2._forceClose) {
_this3._handleConnectionClose = function () {
_this3._removeConnection();
_this3.emit(_RTMClientEvents2.default.OFFLINE);
if (_this3._forceClose) {
// client close, close normally
_this2._state = _RTMClientState2.default.CLOSED;
_this2.emit(_RTMClientEvents2.default.CLOSE);
_this2._forceClose = false;
_this3._state = _RTMClientState2.default.CLOSED;
_this3.emit(_RTMClientEvents2.default.CLOSE);
_this3._forceClose = false;
} else {
// server close or error, re-connect
_this2._reconnect();
_this3._reconnect();
}
};
_this2._handleConnectionError = function (error) {
_this2.emit(_RTMClientEvents2.default.ERROR, error);
_this3._handleConnectionError = function (error) {
_this3.emit(_RTMClientEvents2.default.ERROR, error);
};
_this2._handleConnectionMessage = function (message) {
_this2.emit(_RTMClientEvents2.default.MESSAGE, message);
_this3._handleConnectionMessage = function (message) {
_this3.emit(_RTMClientEvents2.default.MESSAGE, message);
};

@@ -215,13 +233,18 @@

_this2._url = url;
var WebSocket = options.WebSocket || window.WebSocket;
_this2._connectionEvents = [[_RTMConnectionEvents2.default.OPEN, _this2._handleConnectionOpen], [_RTMConnectionEvents2.default.CLOSE, _this2._handleConnectionClose], [_RTMConnectionEvents2.default.ERROR, _this2._handleConnectionError], [_RTMConnectionEvents2.default.MESSAGE, _this2._handleConnectionMessage]];
(0, _invariant2.default)(WebSocket, 'A Websocket client is required.');
_this2._state = _RTMClientState2.default.INITIAL;
_this2._connection = null;
_this2._forceClose = false;
_this2._reconnectAttempts = 1;
_this3._url = url;
_this3.WebSocket = WebSocket;
_this2.connect();
return _this2;
_this3._connectionEvents = [[_RTMConnectionEvents2.default.OPEN, _this3._handleConnectionOpen], [_RTMConnectionEvents2.default.CLOSE, _this3._handleConnectionClose], [_RTMConnectionEvents2.default.ERROR, _this3._handleConnectionError], [_RTMConnectionEvents2.default.MESSAGE, _this3._handleConnectionMessage]];
_this3._state = _RTMClientState2.default.INITIAL;
_this3._connection = null;
_this3._forceClose = false;
_this3._reconnectAttempts = 1;
_this3.connect();
return _this3;
}

@@ -317,6 +340,5 @@

}, {
key: 'send',
key: '_send',
value: function () {
var _ref4 = _asyncToGenerator(_regenerator2.default.mark(function _callee4(message, timeout) {
var sendPromise, timeoutPromise;
var _ref4 = _asyncToGenerator(_regenerator2.default.mark(function _callee4(message) {
return _regenerator2.default.wrap(function _callee4$(_context4) {

@@ -326,2 +348,39 @@ while (1) {

case 0:
if (!this._connection) {
_context4.next = 4;
break;
}
_context4.next = 3;
return this._connection.send(message);
case 3:
return _context4.abrupt('return', _context4.sent);
case 4:
throw new RTMNotConnectedError('Client currently not connected, the current state is: ' + this.getState());
case 5:
case 'end':
return _context4.stop();
}
}
}, _callee4, this);
}));
function _send(_x) {
return _ref4.apply(this, arguments);
}
return _send;
}()
}, {
key: 'send',
value: function () {
var _ref5 = _asyncToGenerator(_regenerator2.default.mark(function _callee5(message, timeout) {
var sendPromise, timeoutPromise;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (!timeout || timeout < 0) {

@@ -332,27 +391,27 @@ timeout = Infinity;

if (Number.isFinite(timeout)) {
_context4.next = 5;
_context5.next = 5;
break;
}
_context4.next = 4;
return this._connection.send(message);
_context5.next = 4;
return this._send(message);
case 4:
return _context4.abrupt('return', _context4.sent);
return _context5.abrupt('return', _context5.sent);
case 5:
sendPromise = this._connection.send(message);
sendPromise = this._send(message);
timeoutPromise = timeoutDelay(timeout, message);
return _context4.abrupt('return', Promise.race([sendPromise, timeoutPromise]));
return _context5.abrupt('return', Promise.race([sendPromise, timeoutPromise]));
case 8:
case 'end':
return _context4.stop();
return _context5.stop();
}
}
}, _callee4, this);
}, _callee5, this);
}));
function send(_x, _x2) {
return _ref4.apply(this, arguments);
function send(_x2, _x3) {
return _ref5.apply(this, arguments);
}

@@ -374,6 +433,6 @@

this._connectionEvents.forEach(function (_ref5) {
var _ref6 = _slicedToArray(_ref5, 2),
name = _ref6[0],
handler = _ref6[1];
this._connectionEvents.forEach(function (_ref6) {
var _ref7 = _slicedToArray(_ref6, 2),
name = _ref7[0],
handler = _ref7[1];

@@ -394,6 +453,6 @@ connection.on(name, handler);

this._connectionEvents.forEach(function (_ref7) {
var _ref8 = _slicedToArray(_ref7, 2),
name = _ref8[0],
handler = _ref8[1];
this._connectionEvents.forEach(function (_ref8) {
var _ref9 = _slicedToArray(_ref8, 2),
name = _ref9[0],
handler = _ref9[1];

@@ -410,3 +469,3 @@ connection.removeListener(name, handler);

// exponential backoff
// exponential backoff, 30 seconds max

@@ -423,2 +482,2 @@

module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SVE1DbGllbnQuanMiXSwibmFtZXMiOlsidGltZW91dCIsIm1lc3NhZ2UiLCJSVE1UaW1lb3V0RXJyb3IiLCJ0aW1lb3V0RGVsYXkiLCJlcnJvck1lc3NhZ2UiLCJydG1NZXNzYWdlIiwiRXJyb3IiLCJSVE1DbGllbnQiLCJvcHRpb25zIiwiX2RvQ29ubmVjdCIsIl9zdGF0ZSIsIkNPTk5FQ1RJTkciLCJ3c1VybCIsIl9nZXRVcmwiLCJfcmVjb25uZWN0IiwiZW1pdCIsIkVSUk9SIiwiX3JlY29ubmVjdEF0dGVtcHRzIiwiX3NldENvbm5lY3Rpb24iLCJfaGFuZGxlQ29ubmVjdGlvbk9wZW4iLCJDT05ORUNURUQiLCJPTkxJTkUiLCJfaGFuZGxlQ29ubmVjdGlvbkNsb3NlIiwiX3JlbW92ZUNvbm5lY3Rpb24iLCJPRkZMSU5FIiwiX2ZvcmNlQ2xvc2UiLCJDTE9TRUQiLCJDTE9TRSIsIl9oYW5kbGVDb25uZWN0aW9uRXJyb3IiLCJlcnJvciIsIl9oYW5kbGVDb25uZWN0aW9uTWVzc2FnZSIsIk1FU1NBR0UiLCJ1cmwiLCJfdXJsIiwiX2Nvbm5lY3Rpb25FdmVudHMiLCJPUEVOIiwiSU5JVElBTCIsIl9jb25uZWN0aW9uIiwiY29ubmVjdCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIlJFQ09OTkVDVCIsImdlbmVyYXRlSW50ZXJ2YWwiLCJDTE9TSU5HIiwiY2xvc2UiLCJJbmZpbml0eSIsIk51bWJlciIsImlzRmluaXRlIiwic2VuZCIsInNlbmRQcm9taXNlIiwidGltZW91dFByb21pc2UiLCJQcm9taXNlIiwicmFjZSIsImNvbm5lY3Rpb24iLCJmb3JFYWNoIiwibmFtZSIsImhhbmRsZXIiLCJvbiIsInJlbW92ZUxpc3RlbmVyIiwiUlRNQ2xpZW50RXZlbnRzIiwiUlRNQ2xpZW50U3RhdGUiLCJhdHRlbXB0cyIsIm1heEludGVydmFsIiwiTWF0aCIsIm1pbiIsInBvdyIsInJhbmRvbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OzJE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O0FBQUE7QUFBQSxZQUFuQkMsSUFBbUI7QUFBQSxZQUFiQyxPQUFhOztBQUNsREgsbUJBQVdLLGNBQVgsQ0FBMEJILElBQTFCLEVBQWdDQyxPQUFoQztBQUNELE9BRkQ7O0FBSUEsV0FBS3BCLFdBQUwsR0FBbUIsSUFBbkI7QUFDRDs7Ozs7O0FBR0g7OztBQWpMcUI5QixTLENBRVpxRCxlO0FBRllyRCxTLENBSVpzRCxjO2tCQUpZdEQsUztBQWtMckIsU0FBU29DLGdCQUFULENBQTBCbUIsUUFBMUIsRUFBb0M7QUFDbEMsTUFBTUMsY0FBY0MsS0FBS0MsR0FBTCxDQUFTLEVBQVQsRUFBY0QsS0FBS0UsR0FBTCxDQUFTLENBQVQsRUFBWUosUUFBWixJQUF3QixDQUF0QyxJQUE0QyxJQUFoRTtBQUNBLFNBQU9FLEtBQUtHLE1BQUwsS0FBZ0JKLFdBQXZCO0FBQ0QiLCJmaWxlIjoiUlRNQ2xpZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnO1xuaW1wb3J0IGRlbGF5IGZyb20gJ2RlbGF5JztcbmltcG9ydCBSVE1DbGllbnRFdmVudHMgZnJvbSAnLi9SVE1DbGllbnRFdmVudHMnO1xuaW1wb3J0IFJUTUNsaWVudFN0YXRlIGZyb20gJy4vUlRNQ2xpZW50U3RhdGUnO1xuaW1wb3J0IFJUTUNvbm5lY3Rpb25FdmVudHMgZnJvbSAnLi9SVE1Db25uZWN0aW9uRXZlbnRzJztcbmltcG9ydCBSVE1Db25uZWN0aW9uIGZyb20gJy4vUlRNQ29ubmVjdGlvbic7XG5cbmNsYXNzIFJUTVRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZXJyb3JNZXNzYWdlLCBydG1NZXNzYWdlKSB7XG4gICAgc3VwZXIoZXJyb3JNZXNzYWdlKTtcbiAgICB0aGlzLnJ0bU1lc3NhZ2UgPSBydG1NZXNzYWdlO1xuICB9XG59XG5cbi8qKlxuICogS2VlcCBhbiBSVE0gY2xpZW50IHJ1bm5pbmcgd2l0aCBtdWx0aXBsZS5cbiAqXG4gKiBTdGF0ZSBkaWFncmFtOlxuICpcbiAqICAgICAgICAgICAgICAgICAgICBJTklUSUFMXG4gKiAgICAgICAgICAgICAgICAgICAgICAgK1xuICogICAgICAgICAgZXJyb3IgICAgICAgIHxcbiAqICAgICAgKy0tLS0tLS0tLS0tLS0rICB8XG4gKiAgICAgIHYgICAgICAgICAgICAgKyAgdiAgICAgICAgY29ubmVjdFxuICogIFJFQ09OTkVDVCstLS0tLS0tPkNPTk5FQ1RJTkc8LS0tLS0tLS0tK0NMT1NFRFxuICogICAgICBeICAgICAgICAgICAgICAgICsgICAgICAgICAgICAgICAgICAgIF5cbiAqICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgIHwgICAgc2VydmVyICAgICAgfCAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgIGNsb3NlLyAgICAgIHYgICAgICAgIGNsb3NlICAgICAgICtcbiAqICAgICAgKy0tLS0tLS0tLS0tLStDT05ORUNURUQrLS0tLS0tLS0tLT5DTE9TSU5HXG4gKiAgICAgICAgICAgZXJyb3JcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gb3B0aW9ucy51cmwgLSBBIHN0cmluZyBvciBhIGZ1bmN0aW9uIHJldHVybmluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdHJpbmcgb3IgYSBQcm9taXNlIHJlc29sdmVzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0cmluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlRNQ2xpZW50IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcblxuICBzdGF0aWMgUlRNQ2xpZW50RXZlbnRzID0gUlRNQ2xpZW50RXZlbnRzO1xuXG4gIHN0YXRpYyBSVE1DbGllbnRTdGF0ZSA9IFJUTUNsaWVudFN0YXRlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3QgeyB1cmwgfSA9IG9wdGlvbnM7XG5cbiAgICB3YXJuaW5nKFxuICAgICAgdXJsLFxuICAgICAgJ1widXJsXCIgaXMgcmVxdWlyZWQuJ1xuICAgICk7XG5cbiAgICB3YXJuaW5nKFxuICAgICAgdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdcInVybFwiIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJpbmcuJ1xuICAgICk7XG5cbiAgICB0aGlzLl91cmwgPSB1cmw7XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uRXZlbnRzID0gW1xuICAgICAgW1JUTUNvbm5lY3Rpb25FdmVudHMuT1BFTiwgdGhpcy5faGFuZGxlQ29ubmVjdGlvbk9wZW5dLFxuICAgICAgW1JUTUNvbm5lY3Rpb25FdmVudHMuQ0xPU0UsIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25DbG9zZV0sXG4gICAgICBbUlRNQ29ubmVjdGlvbkV2ZW50cy5FUlJPUiwgdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yXSxcbiAgICAgIFtSVE1Db25uZWN0aW9uRXZlbnRzLk1FU1NBR0UsIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25NZXNzYWdlXSxcbiAgICBdO1xuXG4gICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5JTklUSUFMO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuX2ZvcmNlQ2xvc2UgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWNvbm5lY3RBdHRlbXB0cyA9IDE7XG5cbiAgICB0aGlzLmNvbm5lY3QoKTtcbiAgfVxuXG4gIGNvbm5lY3QoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgdGhpcy5fc3RhdGUgPT09IFJUTUNsaWVudFN0YXRlLklOSVRJQUwgfHxcbiAgICAgICAgdGhpcy5fc3RhdGUgPT09IFJUTUNsaWVudFN0YXRlLkNMT1NFRCB8fFxuICAgICAgICB0aGlzLl9zdGF0ZSA9PT0gUlRNQ2xpZW50U3RhdGUuUkVDT05ORUNULFxuICAgICAgICAnSW52YWxpZCBzdGF0ZTogY29ubmVjdCgpIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdoZW4gY3VycmVudCBzdGF0ZSAnICtcbiAgICAgICAgJ2lzIFwiJXNcIiwgXCIlc1wiIG9yIFwiJXNcIiBidXQgdGhlIGN1cnJlbnQgc3RhdGUgaXMgXCIlc1wiLicsXG4gICAgICAgIFJUTUNsaWVudFN0YXRlLklOSVRJQUwsXG4gICAgICAgIFJUTUNsaWVudFN0YXRlLkNMT1NFRCxcbiAgICAgICAgUlRNQ2xpZW50U3RhdGUuUkVDT05ORUNULFxuICAgICAgICB0aGlzLl9zdGF0ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kb0Nvbm5lY3QoKTtcbiAgfVxuXG4gIF9kb0Nvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5DT05ORUNUSU5HO1xuXG4gICAgbGV0IHdzVXJsO1xuICAgIHRyeSB7XG4gICAgICB3c1VybCA9IGF3YWl0IHRoaXMuX2dldFVybCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3JlY29ubmVjdCgpOyAvLyBpbnRlbnRpb25hbGx5IGlnbm9yZSBcImF3YWl0XCJcbiAgICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuRVJST1IsIGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzID0gMTtcbiAgICB0aGlzLl9zZXRDb25uZWN0aW9uKG5ldyBSVE1Db25uZWN0aW9uKHdzVXJsKSk7XG4gIH07XG5cbiAgYXN5bmMgX3JlY29ubmVjdCgpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLlJFQ09OTkVDVDtcbiAgICBhd2FpdCBkZWxheShnZW5lcmF0ZUludGVydmFsKHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzKSk7XG4gICAgdGhpcy5fcmVjb25uZWN0QXR0ZW1wdHMrKztcbiAgICB0aGlzLmNvbm5lY3QoKTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRVcmwoKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5fdXJsO1xuXG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGFzc3VtZSB1cmwgaXMgYSBmdW5jdGlvblxuICAgIHJldHVybiBhd2FpdCB1cmwoKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl9jb25uZWN0aW9uICYmIHRoaXMuX3N0YXRlICE9PSBSVE1DbGllbnRTdGF0ZS5DTE9TSU5HKSB7XG4gICAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLkNMT1NJTkc7XG4gICAgICB0aGlzLl9mb3JjZUNsb3NlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kKG1lc3NhZ2UsIHRpbWVvdXQpIHtcbiAgICBpZiAoIXRpbWVvdXQgfHwgdGltZW91dCA8IDApIHtcbiAgICAgIHRpbWVvdXQgPSBJbmZpbml0eTtcbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lb3V0KSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Nvbm5lY3Rpb24uc2VuZChtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZW5kUHJvbWlzZSA9IHRoaXMuX2Nvbm5lY3Rpb24uc2VuZChtZXNzYWdlKTtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IHRpbWVvdXREZWxheSh0aW1lb3V0LCBtZXNzYWdlKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtzZW5kUHJvbWlzZSwgdGltZW91dFByb21pc2VdKTtcbiAgfVxuXG4gIF9oYW5kbGVDb25uZWN0aW9uT3BlbiA9ICgpID0+IHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNsaWVudFN0YXRlLkNPTk5FQ1RFRDtcbiAgICB0aGlzLmVtaXQoUlRNQ2xpZW50RXZlbnRzLk9OTElORSk7XG4gIH07XG5cbiAgX2hhbmRsZUNvbm5lY3Rpb25DbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLl9yZW1vdmVDb25uZWN0aW9uKCk7XG4gICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5PRkZMSU5FKTtcbiAgICBpZiAodGhpcy5fZm9yY2VDbG9zZSkge1xuICAgICAgLy8gY2xpZW50IGNsb3NlLCBjbG9zZSBub3JtYWxseVxuICAgICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5DTE9TRUQ7XG4gICAgICB0aGlzLmVtaXQoUlRNQ2xpZW50RXZlbnRzLkNMT1NFKTtcbiAgICAgIHRoaXMuX2ZvcmNlQ2xvc2UgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2VydmVyIGNsb3NlIG9yIGVycm9yLCByZS1jb25uZWN0XG4gICAgICB0aGlzLl9yZWNvbm5lY3QoKTtcbiAgICB9XG4gIH07XG5cbiAgX2hhbmRsZUNvbm5lY3Rpb25FcnJvciA9IChlcnJvcikgPT4ge1xuICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuRVJST1IsIGVycm9yKTtcbiAgfTtcblxuICBfaGFuZGxlQ29ubmVjdGlvbk1lc3NhZ2UgPSAobWVzc2FnZSkgPT4ge1xuICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuTUVTU0FHRSwgbWVzc2FnZSk7XG4gIH07XG5cbiAgZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICB9XG5cbiAgX3NldENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgICF0aGlzLl9jb25uZWN0aW9uLFxuICAgICAgICAnU2hvdWxkIG5vdCBzZXQgY29ubmVjdGlvbiB3aGVuIGNvbm5lY3Rpb24gYWxyZWFkeSBleGlzdHMuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLmZvckVhY2goKFtuYW1lLCBoYW5kbGVyXSkgPT4ge1xuICAgICAgY29ubmVjdGlvbi5vbihuYW1lLCBoYW5kbGVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICB9XG5cbiAgX3JlbW92ZUNvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb247XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICBjb25uZWN0aW9uLFxuICAgICAgICAnQ29ubmVjdGlvbiBub3Qgc2V0IG9yIGFscmVhZHkgcmVtb3ZlZC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25FdmVudHMuZm9yRWFjaCgoW25hbWUsIGhhbmRsZXJdKSA9PiB7XG4gICAgICBjb25uZWN0aW9uLnJlbW92ZUxpc3RlbmVyKG5hbWUsIGhhbmRsZXIpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gIH1cbn1cblxuLy8gZXhwb25lbnRpYWwgYmFja29mZlxuZnVuY3Rpb24gZ2VuZXJhdGVJbnRlcnZhbChhdHRlbXB0cykge1xuICBjb25zdCBtYXhJbnRlcnZhbCA9IE1hdGgubWluKDMwLCAoTWF0aC5wb3coMiwgYXR0ZW1wdHMpIC0gMSkpICogMTAwMDtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiBtYXhJbnRlcnZhbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdGltZW91dERlbGF5KHRpbWVvdXQsIG1lc3NhZ2UpIHtcbiAgYXdhaXQgZGVsYXkodGltZW91dCk7XG4gIHRocm93IG5ldyBSVE1UaW1lb3V0RXJyb3IoJ1JUTSBtZXNzYWdlIHNlbmQgdGltZW91dC4nLCBtZXNzYWdlKTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SVE1DbGllbnQuanMiXSwibmFtZXMiOlsidGltZW91dCIsIm1lc3NhZ2UiLCJSVE1UaW1lb3V0RXJyb3IiLCJ0aW1lb3V0RGVsYXkiLCJlcnJvck1lc3NhZ2UiLCJydG1NZXNzYWdlIiwiRXJyb3IiLCJSVE1Ob3RDb25uZWN0ZWRFcnJvciIsIlJUTUNsaWVudCIsIm9wdGlvbnMiLCJfZG9Db25uZWN0IiwiX3N0YXRlIiwiQ09OTkVDVElORyIsIndzVXJsIiwiX2dldFVybCIsIl9yZWNvbm5lY3QiLCJlbWl0IiwiRVJST1IiLCJfcmVjb25uZWN0QXR0ZW1wdHMiLCJfc2V0Q29ubmVjdGlvbiIsInVybCIsIldlYlNvY2tldCIsIl9oYW5kbGVDb25uZWN0aW9uT3BlbiIsIkNPTk5FQ1RFRCIsIk9OTElORSIsIl9oYW5kbGVDb25uZWN0aW9uQ2xvc2UiLCJfcmVtb3ZlQ29ubmVjdGlvbiIsIk9GRkxJTkUiLCJfZm9yY2VDbG9zZSIsIkNMT1NFRCIsIkNMT1NFIiwiX2hhbmRsZUNvbm5lY3Rpb25FcnJvciIsImVycm9yIiwiX2hhbmRsZUNvbm5lY3Rpb25NZXNzYWdlIiwiTUVTU0FHRSIsIndpbmRvdyIsIl91cmwiLCJfY29ubmVjdGlvbkV2ZW50cyIsIk9QRU4iLCJJTklUSUFMIiwiX2Nvbm5lY3Rpb24iLCJjb25uZWN0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiUkVDT05ORUNUIiwiZ2VuZXJhdGVJbnRlcnZhbCIsIkNMT1NJTkciLCJjbG9zZSIsInNlbmQiLCJnZXRTdGF0ZSIsIkluZmluaXR5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJfc2VuZCIsInNlbmRQcm9taXNlIiwidGltZW91dFByb21pc2UiLCJQcm9taXNlIiwicmFjZSIsImNvbm5lY3Rpb24iLCJmb3JFYWNoIiwibmFtZSIsImhhbmRsZXIiLCJvbiIsInJlbW92ZUxpc3RlbmVyIiwiUlRNQ2xpZW50RXZlbnRzIiwiUlRNQ2xpZW50U3RhdGUiLCJhdHRlbXB0cyIsIm1heEludGVy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dEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnZGVsYXknO1xuaW1wb3J0IFJUTUNsaWVudEV2ZW50cyBmcm9tICcuL1JUTUNsaWVudEV2ZW50cyc7XG5pbXBvcnQgUlRNQ2xpZW50U3RhdGUgZnJvbSAnLi9SVE1DbGllbnRTdGF0ZSc7XG5pbXBvcnQgUlRNQ29ubmVjdGlvbkV2ZW50cyBmcm9tICcuL1JUTUNvbm5lY3Rpb25FdmVudHMnO1xuaW1wb3J0IFJUTUNvbm5lY3Rpb24gZnJvbSAnLi9SVE1Db25uZWN0aW9uJztcblxuY2xhc3MgUlRNVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihlcnJvck1lc3NhZ2UsIHJ0bU1lc3NhZ2UpIHtcbiAgICBzdXBlcihlcnJvck1lc3NhZ2UpO1xuICAgIHRoaXMucnRtTWVzc2FnZSA9IHJ0bU1lc3NhZ2U7XG4gIH1cbn1cblxuY2xhc3MgUlRNTm90Q29ubmVjdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycm9yTWVzc2FnZSwgcnRtTWVzc2FnZSkge1xuICAgIHN1cGVyKGVycm9yTWVzc2FnZSk7XG4gICAgdGhpcy5ydG1NZXNzYWdlID0gcnRtTWVzc2FnZTtcbiAgfVxufVxuXG4vKipcbiAqIEtlZXAgYW4gUlRNIGNsaWVudCBydW5uaW5nIHdpdGggbXVsdGlwbGUuXG4gKlxuICogU3RhdGUgZGlhZ3JhbTpcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgSU5JVElBTFxuICogICAgICAgICAgICAgICAgICAgICAgICtcbiAqICAgICAgICAgIGVycm9yICAgICAgICB8XG4gKiAgICAgICstLS0tLS0tLS0tLS0tKyAgfFxuICogICAgICB2ICAgICAgICAgICAgICsgIHYgICAgICAgIGNvbm5lY3RcbiAqICBSRUNPTk5FQ1QrLS0tLS0tLT5DT05ORUNUSU5HPC0tLS0tLS0tLStDTE9TRURcbiAqICAgICAgXiAgICAgICAgICAgICAgICArICAgICAgICAgICAgICAgICAgICBeXG4gKiAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgIHNlcnZlciAgICAgIHwgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICBjbG9zZS8gICAgICB2ICAgICAgICBjbG9zZSAgICAgICArXG4gKiAgICAgICstLS0tLS0tLS0tLS0rQ09OTkVDVEVEKy0tLS0tLS0tLS0+Q0xPU0lOR1xuICogICAgICAgICAgIGVycm9yXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IG9wdGlvbnMudXJsIC0gQSBzdHJpbmcgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc3RyaW5nIG9yIGEgUHJvbWlzZSByZXNvbHZlcyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJUTUNsaWVudCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgc3RhdGljIFJUTUNsaWVudEV2ZW50cyA9IFJUTUNsaWVudEV2ZW50cztcblxuICBzdGF0aWMgUlRNQ2xpZW50U3RhdGUgPSBSVE1DbGllbnRTdGF0ZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHsgdXJsIH0gPSBvcHRpb25zO1xuXG4gICAgd2FybmluZyhcbiAgICAgIHVybCxcbiAgICAgICdcInVybFwiIGlzIHJlcXVpcmVkLidcbiAgICApO1xuXG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgPT09ICdmdW5jdGlvbicsXG4gICAgICAnXCJ1cmxcIiBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nLidcbiAgICApO1xuXG4gICAgY29uc3QgV2ViU29ja2V0ID0gb3B0aW9ucy5XZWJTb2NrZXQgfHwgd2luZG93LldlYlNvY2tldDtcblxuICAgIGludmFyaWFudChcbiAgICAgIFdlYlNvY2tldCxcbiAgICAgICdBIFdlYnNvY2tldCBjbGllbnQgaXMgcmVxdWlyZWQuJ1xuICAgICk7XG5cbiAgICB0aGlzLl91cmwgPSB1cmw7XG4gICAgdGhpcy5XZWJTb2NrZXQgPSBXZWJTb2NrZXQ7XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uRXZlbnRzID0gW1xuICAgICAgW1JUTUNvbm5lY3Rpb25FdmVudHMuT1BFTiwgdGhpcy5faGFuZGxlQ29ubmVjdGlvbk9wZW5dLFxuICAgICAgW1JUTUNvbm5lY3Rpb25FdmVudHMuQ0xPU0UsIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25DbG9zZV0sXG4gICAgICBbUlRNQ29ubmVjdGlvbkV2ZW50cy5FUlJPUiwgdGhpcy5faGFuZGxlQ29ubmVjdGlvbkVycm9yXSxcbiAgICAgIFtSVE1Db25uZWN0aW9uRXZlbnRzLk1FU1NBR0UsIHRoaXMuX2hhbmRsZUNvbm5lY3Rpb25NZXNzYWdlXSxcbiAgICBdO1xuXG4gICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5JTklUSUFMO1xuICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuX2ZvcmNlQ2xvc2UgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWNvbm5lY3RBdHRlbXB0cyA9IDE7XG5cbiAgICB0aGlzLmNvbm5lY3QoKTtcbiAgfVxuXG4gIGNvbm5lY3QoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgdGhpcy5fc3RhdGUgPT09IFJUTUNsaWVudFN0YXRlLklOSVRJQUwgfHxcbiAgICAgICAgdGhpcy5fc3RhdGUgPT09IFJUTUNsaWVudFN0YXRlLkNMT1NFRCB8fFxuICAgICAgICB0aGlzLl9zdGF0ZSA9PT0gUlRNQ2xpZW50U3RhdGUuUkVDT05ORUNULFxuICAgICAgICAnSW52YWxpZCBzdGF0ZTogY29ubmVjdCgpIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdoZW4gY3VycmVudCBzdGF0ZSAnICtcbiAgICAgICAgJ2lzIFwiJXNcIiwgXCIlc1wiIG9yIFwiJXNcIiBidXQgdGhlIGN1cnJlbnQgc3RhdGUgaXMgXCIlc1wiLicsXG4gICAgICAgIFJUTUNsaWVudFN0YXRlLklOSVRJQUwsXG4gICAgICAgIFJUTUNsaWVudFN0YXRlLkNMT1NFRCxcbiAgICAgICAgUlRNQ2xpZW50U3RhdGUuUkVDT05ORUNULFxuICAgICAgICB0aGlzLl9zdGF0ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kb0Nvbm5lY3QoKTtcbiAgfVxuXG4gIF9kb0Nvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5DT05ORUNUSU5HO1xuXG4gICAgbGV0IHdzVXJsO1xuICAgIHRyeSB7XG4gICAgICB3c1VybCA9IGF3YWl0IHRoaXMuX2dldFVybCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3JlY29ubmVjdCgpOyAvLyBpbnRlbnRpb25hbGx5IGlnbm9yZSBcImF3YWl0XCJcbiAgICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuRVJST1IsIGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzID0gMTtcbiAgICB0aGlzLl9zZXRDb25uZWN0aW9uKG5ldyBSVE1Db25uZWN0aW9uKHtcbiAgICAgIHVybDogd3NVcmwsXG4gICAgICBXZWJTb2NrZXQ6IHRoaXMuV2ViU29ja2V0XG4gICAgfSkpO1xuICB9O1xuXG4gIGFzeW5jIF9yZWNvbm5lY3QoKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5SRUNPTk5FQ1Q7XG4gICAgYXdhaXQgZGVsYXkoZ2VuZXJhdGVJbnRlcnZhbCh0aGlzLl9yZWNvbm5lY3RBdHRlbXB0cykpO1xuICAgIHRoaXMuX3JlY29ubmVjdEF0dGVtcHRzKys7XG4gICAgdGhpcy5jb25uZWN0KCk7XG4gIH1cblxuICBhc3luYyBfZ2V0VXJsKCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBhc3N1bWUgdXJsIGlzIGEgZnVuY3Rpb25cbiAgICByZXR1cm4gYXdhaXQgdXJsKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5fY29ubmVjdGlvbiAmJiB0aGlzLl9zdGF0ZSAhPT0gUlRNQ2xpZW50U3RhdGUuQ0xPU0lORykge1xuICAgICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5DTE9TSU5HO1xuICAgICAgdGhpcy5fZm9yY2VDbG9zZSA9IHRydWU7XG4gICAgICB0aGlzLl9jb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3NlbmQobWVzc2FnZSkge1xuICAgIGlmICh0aGlzLl9jb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdGlvbi5zZW5kKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUlRNTm90Q29ubmVjdGVkRXJyb3IoXG4gICAgICAnQ2xpZW50IGN1cnJlbnRseSBub3QgY29ubmVjdGVkLCB0aGUgY3VycmVudCBzdGF0ZSBpczogJyArIHRoaXMuZ2V0U3RhdGUoKVxuICAgICk7XG4gIH1cblxuXG4gIGFzeW5jIHNlbmQobWVzc2FnZSwgdGltZW91dCkge1xuICAgIGlmICghdGltZW91dCB8fCB0aW1lb3V0IDwgMCkge1xuICAgICAgdGltZW91dCA9IEluZmluaXR5O1xuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVvdXQpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fc2VuZChtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZW5kUHJvbWlzZSA9IHRoaXMuX3NlbmQobWVzc2FnZSk7XG4gICAgY29uc3QgdGltZW91dFByb21pc2UgPSB0aW1lb3V0RGVsYXkodGltZW91dCwgbWVzc2FnZSk7XG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbc2VuZFByb21pc2UsIHRpbWVvdXRQcm9taXNlXSk7XG4gIH1cblxuICBfaGFuZGxlQ29ubmVjdGlvbk9wZW4gPSAoKSA9PiB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1DbGllbnRTdGF0ZS5DT05ORUNURUQ7XG4gICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5PTkxJTkUpO1xuICB9O1xuXG4gIF9oYW5kbGVDb25uZWN0aW9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy5fcmVtb3ZlQ29ubmVjdGlvbigpO1xuICAgIHRoaXMuZW1pdChSVE1DbGllbnRFdmVudHMuT0ZGTElORSk7XG4gICAgaWYgKHRoaXMuX2ZvcmNlQ2xvc2UpIHtcbiAgICAgIC8vIGNsaWVudCBjbG9zZSwgY2xvc2Ugbm9ybWFsbHlcbiAgICAgIHRoaXMuX3N0YXRlID0gUlRNQ2xpZW50U3RhdGUuQ0xPU0VEO1xuICAgICAgdGhpcy5lbWl0KFJUTUNsaWVudEV2ZW50cy5DTE9TRSk7XG4gICAgICB0aGlzLl9mb3JjZUNsb3NlID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNlcnZlciBjbG9zZSBvciBlcnJvciwgcmUtY29ubmVjdFxuICAgICAgdGhpcy5fcmVjb25uZWN0KCk7XG4gICAgfVxuICB9O1xuXG4gIF9oYW5kbGVDb25uZWN0aW9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICB0aGlzLmVtaXQoUlRNQ2xpZW50RXZlbnRzLkVSUk9SLCBlcnJvcik7XG4gIH07XG5cbiAgX2hhbmRsZUNvbm5lY3Rpb25NZXNzYWdlID0gKG1lc3NhZ2UpID0+IHtcbiAgICB0aGlzLmVtaXQoUlRNQ2xpZW50RXZlbnRzLk1FU1NBR0UsIG1lc3NhZ2UpO1xuICB9O1xuXG4gIGdldFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgfVxuXG4gIF9zZXRDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW52YXJpYW50KFxuICAgICAgICAhdGhpcy5fY29ubmVjdGlvbixcbiAgICAgICAgJ1Nob3VsZCBub3Qgc2V0IGNvbm5lY3Rpb24gd2hlbiBjb25uZWN0aW9uIGFscmVhZHkgZXhpc3RzLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdGlvbkV2ZW50cy5mb3JFYWNoKChbbmFtZSwgaGFuZGxlcl0pID0+IHtcbiAgICAgIGNvbm5lY3Rpb24ub24obmFtZSwgaGFuZGxlcik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgfVxuXG4gIF9yZW1vdmVDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGludmFyaWFudChcbiAgICAgICAgY29ubmVjdGlvbixcbiAgICAgICAgJ0Nvbm5lY3Rpb24gbm90IHNldCBvciBhbHJlYWR5IHJlbW92ZWQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25uZWN0aW9uRXZlbnRzLmZvckVhY2goKFtuYW1lLCBoYW5kbGVyXSkgPT4ge1xuICAgICAgY29ubmVjdGlvbi5yZW1vdmVMaXN0ZW5lcihuYW1lLCBoYW5kbGVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbi8vIGV4cG9uZW50aWFsIGJhY2tvZmYsIDMwIHNlY29uZHMgbWF4XG5mdW5jdGlvbiBnZW5lcmF0ZUludGVydmFsKGF0dGVtcHRzKSB7XG4gIGNvbnN0IG1heEludGVydmFsID0gTWF0aC5taW4oMzAsIChNYXRoLnBvdygyLCBhdHRlbXB0cykgLSAxKSkgKiAxMDAwO1xuICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIG1heEludGVydmFsO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0aW1lb3V0RGVsYXkodGltZW91dCwgbWVzc2FnZSkge1xuICBhd2FpdCBkZWxheSh0aW1lb3V0KTtcbiAgdGhyb3cgbmV3IFJUTVRpbWVvdXRFcnJvcignUlRNIG1lc3NhZ2Ugc2VuZCB0aW1lb3V0LicsIG1lc3NhZ2UpO1xufVxuIl19

@@ -15,6 +15,2 @@ 'use strict';

var _WebSocket = require('./WebSocket');
var _WebSocket2 = _interopRequireDefault(_WebSocket);
var _events = require('events');

@@ -78,5 +74,8 @@

function RTMConnection(url) {
function RTMConnection(_ref) {
var _this2 = this;
var url = _ref.url,
WebSocket = _ref.WebSocket;
_classCallCheck(this, RTMConnection);

@@ -146,3 +145,3 @@

_this._state = _RTMConnectionState2.default.INITIAL;
_this._ws = new _WebSocket2.default(url);
_this._ws = new WebSocket(url);
_this._callbackMap = new Map();

@@ -219,2 +218,2 @@

module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SVE1Db25uZWN0aW9uLmpzIl0sIm5hbWVzIjpbIlJUTUNvbm5lY3Rpb24iLCJ1cmwiLCJzdGF0ZSIsIl9oYW5kbGVPcGVuIiwiX3N0YXRlIiwiQ09OTkVDVEVEIiwiZW1pdCIsIk9QRU4iLCJfc3RhcnRMb29wIiwiX2hhbmRsZUNsb3NlIiwiQ0xPU0VEIiwiQ0xPU0UiLCJfaGFuZGxlTWVzc2FnZSIsImV2ZW50IiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJ0eXBlIiwiUE9ORyIsIk9LIiwiUkVQTFkiLCJfaGFuZGxlUmVwbHlNZXNzYWdlIiwiTUVTU0FHRSIsIl9oYW5kbGVFcnJvciIsImVycm9yIiwiRVJST1IiLCJfcGluZyIsIl9jdXJyZW50Q2FsbElkIiwiSU5JVElBTCIsIl93cyIsIl9jYWxsYmFja01hcCIsIk1hcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYWxsYmFja01hcCIsImNhbGxJZCIsImNhbGxfaWQiLCJoYXMiLCJjYWxsYmFjayIsImdldCIsImRlbGV0ZSIsIl9nZXROZXh0Q2FsbElkIiwiY2FsbElkTWFwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXQiLCJzZW5kIiwic3RyaW5naWZ5IiwiUElORyIsIkNMT1NJTkciLCJjbG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBdUJxQkEsYTs7O0FBSW5CLHlCQUFZQyxHQUFaLEVBQWlCO0FBQUE7O0FBQUE7O0FBQUE7O0FBQUEsVUFGakJDLEtBRWlCLEdBRlQsRUFFUzs7QUFBQSxVQWFqQkMsV0FiaUIsR0FhSCxZQUFNO0FBQ2xCLFlBQUtDLE1BQUwsR0FBYyw2QkFBbUJDLFNBQWpDO0FBQ0EsWUFBS0MsSUFBTCxDQUFVLDhCQUFvQkMsSUFBOUI7QUFDQSxZQUFLQyxVQUFMO0FBQ0QsS0FqQmdC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akMsT0FBZixDQUFkO0FBQ0QsT0FITSxDQUFQO0FBSUQ7Ozs0QkFFTztBQUNOLFdBQUtnQyxJQUFMLENBQVU7QUFDUjVCLGNBQU0sMEJBQWdCOEI7QUFEZCxPQUFWO0FBR0Q7Ozs0QkFTTztBQUNOLFdBQUs1QyxNQUFMLEdBQWMsNkJBQW1CNkMsT0FBakM7QUFDQSxXQUFLbkIsR0FBTCxDQUFTb0IsS0FBVDtBQUNEOzs7K0JBRVU7QUFDVCxhQUFPLEtBQUs5QyxNQUFaO0FBQ0Q7Ozs7OztrQkE1R2tCSixhIiwiZmlsZSI6IlJUTUNvbm5lY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV2ViU29ja2V0IGZyb20gJy4vV2ViU29ja2V0JztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9ICBmcm9tICdldmVudHMnO1xuaW1wb3J0IFJUTUNvbm5lY3Rpb25TdGF0ZSBmcm9tICcuL1JUTUNvbm5lY3Rpb25TdGF0ZSc7XG5pbXBvcnQgUlRNQ29ubmVjdGlvbkV2ZW50cyBmcm9tICcuL1JUTUNvbm5lY3Rpb25FdmVudHMnO1xuaW1wb3J0IFJUTU1lc3NhZ2VUeXBlcyBmcm9tICcuL1JUTU1lc3NhZ2VUeXBlcyc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnZGVsYXknO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5cbi8qKlxuICogS2VlcCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIHdpdGggc2VydmVyLCBoYW5kbGluZyBoZWFydGJlYXQgZXZlbnRzLFxuICogb21pdHRpbmcgb2Jzb2xldGUgbWVzc2FnZSB0eXBlcy5cbiAqXG4gKiBTdGF0ZSBkaWFncmFtOlxuICpcbiAqICAgIElOSVRJQUxcbiAqICAgICAgICtcbiAqICAgICAgIHxcbiAqICAgICAgIHxcbiAqICAgICAgIHZcbiAqICAgQ09OTkVDVEVEICstK1xuICogICAgICAgKyAgICAgICB8XG4gKiBjbGllbnR8ICAgICAgIHxcbiAqIGNsb3NlIHwgICAgICAgfCBzZXJ2ZXJcbiAqICAgICAgIHYgICAgICAgfCBjbG9zZS9cbiAqICAgIENMT1NJTkcgICAgfCBlcnJvclxuICogICAgICAgKyAgICAgICB8XG4gKiAgICAgICB8ICAgICAgIHxcbiAqICAgICAgIHwgICAgICAgfFxuICogICAgICAgdiAgICAgICB8XG4gKiAgICBDTE9TRUQgPC0tLStcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlRNQ29ubmVjdGlvbiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgc3RhdGUgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcih1cmwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2N1cnJlbnRDYWxsSWQgPSAwO1xuICAgIHRoaXMuX3N0YXRlID0gUlRNQ29ubmVjdGlvblN0YXRlLklOSVRJQUw7XG4gICAgdGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7XG4gICAgdGhpcy5fY2FsbGJhY2tNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICB0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy5faGFuZGxlT3Blbik7XG4gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9oYW5kbGVDbG9zZSk7XG4gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuX2hhbmRsZU1lc3NhZ2UpO1xuICAgIHRoaXMuX3dzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5faGFuZGxlRXJyb3IpO1xuICB9XG5cbiAgX2hhbmRsZU9wZW4gPSAoKSA9PiB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1Db25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEO1xuICAgIHRoaXMuZW1pdChSVE1Db25uZWN0aW9uRXZlbnRzLk9QRU4pO1xuICAgIHRoaXMuX3N0YXJ0TG9vcCgpO1xuICB9O1xuXG4gIF9oYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7XG4gICAgdGhpcy5lbWl0KFJUTUNvbm5lY3Rpb25FdmVudHMuQ0xPU0UpO1xuICB9O1xuXG4gIF9oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgUlRNTWVzc2FnZVR5cGVzLlBPTkc6XG4gICAgICBjYXNlIFJUTU1lc3NhZ2VUeXBlcy5PSzpcbiAgICAgICAgLy8gaWdub3JlIGRlcHJlY2F0ZWQgZXZlbnRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSVE1NZXNzYWdlVHlwZXMuUkVQTFk6XG4gICAgICAgIHRoaXMuX2hhbmRsZVJlcGx5TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5NRVNTQUdFLCBtZXNzYWdlKTtcbiAgICB9XG4gIH07XG5cbiAgX2hhbmRsZVJlcGx5TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgY29uc3QgY2FsbGJhY2tNYXAgPSB0aGlzLl9jYWxsYmFja01hcDtcbiAgICBjb25zdCBjYWxsSWQgPSBtZXNzYWdlLmNhbGxfaWQ7XG5cbiAgICB3YXJuaW5nKFxuICAgICAgY2FsbGJhY2tNYXAuaGFzKGNhbGxJZCksXG4gICAgICAnQ2FsbCBpZCByZXBsaWVkIHdpdGhvdXQgc2VuZGluZzogJXMnLFxuICAgICAgY2FsbElkXG4gICAgKTtcblxuICAgIGNvbnN0IGNhbGxiYWNrID0gY2FsbGJhY2tNYXAuZ2V0KGNhbGxJZCk7XG4gICAgY2FsbGJhY2tNYXAuZGVsZXRlKGNhbGxJZCk7XG4gICAgY2FsbGJhY2sobWVzc2FnZSk7XG4gIH1cblxuICBfaGFuZGxlRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5FUlJPUiwgZXJyb3IpO1xuICB9O1xuXG4gIF9nZXROZXh0Q2FsbElkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q2FsbElkKys7XG4gIH1cblxuICBzZW5kKG1lc3NhZ2UpIHtcbiAgICBpZiAoIW1lc3NhZ2UuY2FsbF9pZCkge1xuICAgICAgbWVzc2FnZSA9IHtcbiAgICAgICAgLi4ubWVzc2FnZSxcbiAgICAgICAgY2FsbF9pZDogdGhpcy5fZ2V0TmV4dENhbGxJZCgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxJZE1hcCA9IHRoaXMuX2NhbGxiYWNrTWFwO1xuICAgIGNvbnN0IGNhbGxJZCA9IG1lc3NhZ2UuY2FsbF9pZDtcbiAgICB3YXJuaW5nKFxuICAgICAgIWNhbGxJZE1hcC5oYXMoY2FsbElkKSxcbiAgICAgICdEdXBsaWNhdGUgY2FsbCBpZCAlcycsXG4gICAgICBjYWxsSWRcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjYWxsSWRNYXAuc2V0KGNhbGxJZCwgcmVzb2x2ZSk7XG4gICAgICB0aGlzLl93cy5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9waW5nKCkge1xuICAgIHRoaXMuc2VuZCh7XG4gICAgICB0eXBlOiBSVE1NZXNzYWdlVHlwZXMuUElOR1xuICAgIH0pO1xuICB9XG5cbiAgX3N0YXJ0TG9vcCA9IGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAodGhpcy5fc3RhdGUgPT09IFJUTUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHtcbiAgICAgIHRoaXMuX3BpbmcoKTtcbiAgICAgIGF3YWl0IGRlbGF5KDUwMDApO1xuICAgIH1cbiAgfTtcblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNvbm5lY3Rpb25TdGF0ZS5DTE9TSU5HO1xuICAgIHRoaXMuX3dzLmNsb3NlKCk7XG4gIH1cblxuICBnZXRTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SVE1Db25uZWN0aW9uLmpzIl0sIm5hbWVzIjpbIlJUTUNvbm5lY3Rpb24iLCJ1cmwiLCJXZWJTb2NrZXQiLCJzdGF0ZSIsIl9oYW5kbGVPcGVuIiwiX3N0YXRlIiwiQ09OTkVDVEVEIiwiZW1pdCIsIk9QRU4iLCJfc3RhcnRMb29wIiwiX2hhbmRsZUNsb3NlIiwiQ0xPU0VEIiwiQ0xPU0UiLCJfaGFuZGxlTWVzc2FnZSIsImV2ZW50IiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJ0eXBlIiwiUE9ORyIsIk9LIiwiUkVQTFkiLCJfaGFuZGxlUmVwbHlNZXNzYWdlIiwiTUVTU0FHRSIsIl9oYW5kbGVFcnJvciIsImVycm9yIiwiRVJST1IiLCJfcGluZyIsIl9jdXJyZW50Q2FsbElkIiwiSU5JVElBTCIsIl93cyIsIl9jYWxsYmFja01hcCIsIk1hcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYWxsYmFja01hcCIsImNhbGxJZCIsImNhbGxfaWQiLCJoYXMiLCJjYWxsYmFjayIsImdldCIsImRlbGV0ZSIsIl9nZXROZXh0Q2FsbElkIiwiY2FsbElkTWFwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXQiLCJzZW5kIiwic3RyaW5naWZ5IiwiUElORyIsIkNMT1NJTkciLCJjbG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXVCcUJBLGE7OztBQUluQiwrQkFBZ0M7QUFBQTs7QUFBQSxRQUFsQkMsR0FBa0IsUUFBbEJBLEdBQWtCO0FBQUEsUUFBYkMsU0FBYSxRQUFiQSxTQUFhOztBQUFBOztBQUFBOztBQUFBLFVBRmhDQyxLQUVnQyxHQUZ4QixFQUV3Qjs7QUFBQSxVQWFoQ0MsV0FiZ0MsR0FhbEIsWUFBTTtBQUNsQixZQUFLQyxNQUFMLEdBQWMsNkJBQW1CQyxTQUFqQztBQUNBLFlBQUtDLElBQUwsQ0FBVSw4QkFBb0JDLElBQTlCO0FBQ0EsWUFBS0MsVUFBTDtBQUNELEtBakIrQjs7QUFBQSxVQW1CaENDLFlBbkJnQyxHQW1CakIsWUFBTTtBQUNuQixZQUFLTCxNQUFMLEdBQWMsNkJBQW1CTSxNQUFqQztBQUNBLFlBQUtKLElBQUwsQ0FBVSw4QkFBb0JLLEtBQTlCO0FBQ0QsS0F0QitCOztBQUFBLFVBd0JoQ0MsY0F4QmdDLEdBd0JmLFVBQUNDLEtBQUQsRUFBVztBQUMxQixVQUFNQyxVQUFVQyxLQUFLQyxLQUFMLENBQVdILE1BQU1JLElBQWpCLENBQWhCO0FBQ0EsY0FBUUgsUUFBUUksSUFBaEI7QUFDRSxhQUFLLDBCQUFnQkMsSUFBckI7QUFDQSxhQUFLLDBCQUFnQkMsRUFBckI7QUFDRTtBQUNBO0FBQ0YsYUFBSywwQkFBZ0JDLEtBQXJCO0FBQ0UsZ0JBQUtDLG1CQUFMLENBQXlCUixPQUF6QjtBQUNBO0FBQ0Y7QUFDRSxnQkFBS1IsSUFBTCxDQUFVLDhCQUFvQmlCLE9BQTlCLEVBQXVDVCxPQUF2QztBQVRKO0FBV0QsS0FyQytCOztBQUFBLFVBc0RoQ1UsWUF0RGdDLEdBc0RqQixVQUFDQyxLQUFELEVBQVc7QUFDeEIsWUFBS25CLElBQUwsQ0FBVSw4QkFBb0JvQixLQUE5QixFQUFxQ0QsS0FBckM7QUFDRCxLQXhEK0I7O0FBQUEsVUEwRmhDakIsVUExRmdDLGdEQTBGbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUNKLE1BQUtKLE1BQUwsS0FBZ0IsNkJBQW1CQyxTQUQvQjtBQUFBO0FBQUE7QUFBQTs7QUFFVCxvQkFBS3NCLEtBQUw7QUFGUztBQUFBLHFCQUdILHFCQUFNLElBQU4sQ0FIRzs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0ExRm1COztBQUU5QixVQUFLQyxjQUFMLEdBQXNCLENBQXRCO0FBQ0EsVUFBS3hCLE1BQUwsR0FBYyw2QkFBbUJ5QixPQUFqQztBQUNBLFVBQUtDLEdBQUwsR0FBVyxJQUFJN0IsU0FBSixDQUFjRCxHQUFkLENBQVg7QUFDQSxVQUFLK0IsWUFBTCxHQUFvQixJQUFJQyxHQUFKLEVBQXBCOztBQUVBLFVBQUtGLEdBQUwsQ0FBU0csZ0JBQVQsQ0FBMEIsTUFBMUIsRUFBa0MsTUFBSzlCLFdBQXZDO0FBQ0EsVUFBSzJCLEdBQUwsQ0FBU0csZ0JBQVQsQ0FBMEIsT0FBMUIsRUFBbUMsTUFBS3hCLFlBQXhDO0FBQ0EsVUFBS3FCLEdBQUwsQ0FBU0csZ0JBQVQsQ0FBMEIsU0FBMUIsRUFBcUMsTUFBS3JCLGNBQTFDO0FBQ0EsVUFBS2tCLEdBQUwsQ0FBU0csZ0JBQVQsQ0FBMEIsT0FBMUIsRUFBbUMsTUFBS1QsWUFBeEM7QUFWOEI7QUFXL0I7Ozs7d0NBNEJtQlYsTyxFQUFTO0FBQzNCLFVBQU1vQixjQUFjLEtBQUtILFlBQXpCO0FBQ0EsVUFBTUksU0FBU3JCLFFBQVFzQixPQUF2Qjs7QUFFQSw2QkFDRUYsWUFBWUcsR0FBWixDQUFnQkYsTUFBaEIsQ0FERixFQUVFLHFDQUZGLEVBR0VBLE1BSEY7O0FBTUEsVUFBTUcsV0FBV0osWUFBWUssR0FBWixDQUFnQkosTUFBaEIsQ0FBakI7QUFDQUQsa0JBQVlNLE1BQVosQ0FBbUJMLE1BQW5CO0FBQ0FHLGVBQVN4QixPQUFUO0FBQ0Q7OztxQ0FNZ0I7QUFDZixhQUFPLEtBQUtjLGNBQUwsRUFBUDtBQUNEOzs7eUJBRUlkLE8sRUFBUztBQUFBOztBQUNaLFVBQUksQ0FBQ0EsUUFBUXNCLE9BQWIsRUFBc0I7QUFDcEJ0QiwrQkFDS0EsT0FETDtBQUVFc0IsbUJBQVMsS0FBS0ssY0FBTDtBQUZYO0FBSUQ7O0FBRUQsVUFBTUMsWUFBWSxLQUFLWCxZQUF2QjtBQUNBLFVBQU1JLFNBQVNyQixRQUFRc0IsT0FBdkI7QUFDQSw2QkFDRSxDQUFDTSxVQUFVTCxHQUFWLENBQWNGLE1BQWQsQ0FESCxFQUVFLHNCQUZGLEVBR0VBLE1BSEY7O0FBTUEsYUFBTyxJQUFJUSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFhO0FBQzlCRixrQkFBVUcsR0FBVixDQUFjVixNQUFkLEVBQXNCUyxPQUF0QjtBQUNBLGVBQUtkLEdBQUwsQ0FBU2dCLElBQVQsQ0FBYy9CLEtBQUtnQyxTQUFMLENBQWVqQyxPQUFmLENBQWQ7QUFDRCxPQUhNLENBQVA7QUFJRDs7OzRCQUVPO0FBQ04sV0FBS2dDLElBQUwsQ0FBVTtBQUNSNUIsY0FBTSwwQkFBZ0I4QjtBQURkLE9BQVY7QUFHRDs7OzRCQVNPO0FBQ04sV0FBSzVDLE1BQUwsR0FBYyw2QkFBbUI2QyxPQUFqQztBQUNBLFdBQUtuQixHQUFMLENBQVNvQixLQUFUO0FBQ0Q7OzsrQkFFVTtBQUNULGFBQU8sS0FBSzlDLE1BQVo7QUFDRDs7Ozs7O2tCQTVHa0JMLGEiLCJmaWxlIjoiUlRNQ29ubmVjdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9ICBmcm9tICdldmVudHMnO1xuaW1wb3J0IFJUTUNvbm5lY3Rpb25TdGF0ZSBmcm9tICcuL1JUTUNvbm5lY3Rpb25TdGF0ZSc7XG5pbXBvcnQgUlRNQ29ubmVjdGlvbkV2ZW50cyBmcm9tICcuL1JUTUNvbm5lY3Rpb25FdmVudHMnO1xuaW1wb3J0IFJUTU1lc3NhZ2VUeXBlcyBmcm9tICcuL1JUTU1lc3NhZ2VUeXBlcyc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnZGVsYXknO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5cbi8qKlxuICogS2VlcCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIHdpdGggc2VydmVyLCBoYW5kbGluZyBoZWFydGJlYXQgZXZlbnRzLFxuICogb21pdHRpbmcgb2Jzb2xldGUgbWVzc2FnZSB0eXBlcy5cbiAqXG4gKiBTdGF0ZSBkaWFncmFtOlxuICpcbiAqICAgIElOSVRJQUxcbiAqICAgICAgICtcbiAqICAgICAgIHxcbiAqICAgICAgIHxcbiAqICAgICAgIHZcbiAqICAgQ09OTkVDVEVEICstK1xuICogICAgICAgKyAgICAgICB8XG4gKiBjbGllbnR8ICAgICAgIHxcbiAqIGNsb3NlIHwgICAgICAgfCBzZXJ2ZXJcbiAqICAgICAgIHYgICAgICAgfCBjbG9zZS9cbiAqICAgIENMT1NJTkcgICAgfCBlcnJvclxuICogICAgICAgKyAgICAgICB8XG4gKiAgICAgICB8ICAgICAgIHxcbiAqICAgICAgIHwgICAgICAgfFxuICogICAgICAgdiAgICAgICB8XG4gKiAgICBDTE9TRUQgPC0tLStcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlRNQ29ubmVjdGlvbiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgc3RhdGUgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcih7IHVybCwgV2ViU29ja2V0IH0pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2N1cnJlbnRDYWxsSWQgPSAwO1xuICAgIHRoaXMuX3N0YXRlID0gUlRNQ29ubmVjdGlvblN0YXRlLklOSVRJQUw7XG4gICAgdGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7XG4gICAgdGhpcy5fY2FsbGJhY2tNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICB0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy5faGFuZGxlT3Blbik7XG4gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9oYW5kbGVDbG9zZSk7XG4gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuX2hhbmRsZU1lc3NhZ2UpO1xuICAgIHRoaXMuX3dzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5faGFuZGxlRXJyb3IpO1xuICB9XG5cbiAgX2hhbmRsZU9wZW4gPSAoKSA9PiB7XG4gICAgdGhpcy5fc3RhdGUgPSBSVE1Db25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEO1xuICAgIHRoaXMuZW1pdChSVE1Db25uZWN0aW9uRXZlbnRzLk9QRU4pO1xuICAgIHRoaXMuX3N0YXJ0TG9vcCgpO1xuICB9O1xuXG4gIF9oYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7XG4gICAgdGhpcy5lbWl0KFJUTUNvbm5lY3Rpb25FdmVudHMuQ0xPU0UpO1xuICB9O1xuXG4gIF9oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgUlRNTWVzc2FnZVR5cGVzLlBPTkc6XG4gICAgICBjYXNlIFJUTU1lc3NhZ2VUeXBlcy5PSzpcbiAgICAgICAgLy8gaWdub3JlIGRlcHJlY2F0ZWQgZXZlbnRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSVE1NZXNzYWdlVHlwZXMuUkVQTFk6XG4gICAgICAgIHRoaXMuX2hhbmRsZVJlcGx5TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5NRVNTQUdFLCBtZXNzYWdlKTtcbiAgICB9XG4gIH07XG5cbiAgX2hhbmRsZVJlcGx5TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgY29uc3QgY2FsbGJhY2tNYXAgPSB0aGlzLl9jYWxsYmFja01hcDtcbiAgICBjb25zdCBjYWxsSWQgPSBtZXNzYWdlLmNhbGxfaWQ7XG5cbiAgICB3YXJuaW5nKFxuICAgICAgY2FsbGJhY2tNYXAuaGFzKGNhbGxJZCksXG4gICAgICAnQ2FsbCBpZCByZXBsaWVkIHdpdGhvdXQgc2VuZGluZzogJXMnLFxuICAgICAgY2FsbElkXG4gICAgKTtcblxuICAgIGNvbnN0IGNhbGxiYWNrID0gY2FsbGJhY2tNYXAuZ2V0KGNhbGxJZCk7XG4gICAgY2FsbGJhY2tNYXAuZGVsZXRlKGNhbGxJZCk7XG4gICAgY2FsbGJhY2sobWVzc2FnZSk7XG4gIH1cblxuICBfaGFuZGxlRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICB0aGlzLmVtaXQoUlRNQ29ubmVjdGlvbkV2ZW50cy5FUlJPUiwgZXJyb3IpO1xuICB9O1xuXG4gIF9nZXROZXh0Q2FsbElkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q2FsbElkKys7XG4gIH1cblxuICBzZW5kKG1lc3NhZ2UpIHtcbiAgICBpZiAoIW1lc3NhZ2UuY2FsbF9pZCkge1xuICAgICAgbWVzc2FnZSA9IHtcbiAgICAgICAgLi4ubWVzc2FnZSxcbiAgICAgICAgY2FsbF9pZDogdGhpcy5fZ2V0TmV4dENhbGxJZCgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxJZE1hcCA9IHRoaXMuX2NhbGxiYWNrTWFwO1xuICAgIGNvbnN0IGNhbGxJZCA9IG1lc3NhZ2UuY2FsbF9pZDtcbiAgICB3YXJuaW5nKFxuICAgICAgIWNhbGxJZE1hcC5oYXMoY2FsbElkKSxcbiAgICAgICdEdXBsaWNhdGUgY2FsbCBpZCAlcycsXG4gICAgICBjYWxsSWRcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjYWxsSWRNYXAuc2V0KGNhbGxJZCwgcmVzb2x2ZSk7XG4gICAgICB0aGlzLl93cy5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9waW5nKCkge1xuICAgIHRoaXMuc2VuZCh7XG4gICAgICB0eXBlOiBSVE1NZXNzYWdlVHlwZXMuUElOR1xuICAgIH0pO1xuICB9XG5cbiAgX3N0YXJ0TG9vcCA9IGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAodGhpcy5fc3RhdGUgPT09IFJUTUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHtcbiAgICAgIHRoaXMuX3BpbmcoKTtcbiAgICAgIGF3YWl0IGRlbGF5KDUwMDApO1xuICAgIH1cbiAgfTtcblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IFJUTUNvbm5lY3Rpb25TdGF0ZS5DTE9TSU5HO1xuICAgIHRoaXMuX3dzLmNsb3NlKCk7XG4gIH1cblxuICBnZXRTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gIH1cbn1cbiJdfQ==