ws-messaging
Advanced tools
Comparing version 0.7.0 to 0.7.1
@@ -5,2 +5,12 @@ # Change Log | ||
<a name="0.7.1"></a> | ||
## [0.7.1](https://github.com/an-sh/ws-messaging/compare/v0.7.0...v0.7.1) (2017-01-17) | ||
### Bug Fixes | ||
* don't ignore promises returned by the receiveHook ([4547cbf](https://github.com/an-sh/ws-messaging/commit/4547cbf)) | ||
<a name="0.7.0"></a> | ||
@@ -7,0 +17,0 @@ # [0.7.0](https://github.com/an-sh/ws-messaging/compare/v0.6.0...v0.7.0) (2017-01-06) |
@@ -202,5 +202,3 @@ 'use strict'; | ||
}).then(function () { | ||
if (_this3.receiveHook) { | ||
_this3.receiveHook(message); | ||
} | ||
if (_this3.receiveHook) _this3.receiveHook(message); | ||
}).then(function () { | ||
@@ -516,2 +514,2 @@ return _this3._dispatch(message); | ||
module.exports = Client; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9DbGllbnQuanMiXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsImFzc2lnbiIsImF0dGVtcHQiLCJmcm9tQ2FsbGJhY2siLCJQcm9taXNlIiwiYmxhY2tsaXN0IiwiY29uY2F0IiwiYmluZCIsImVtaXQiLCJwcm90b3R5cGUiLCJpc0JsYWNrbGlzdGVkRXZlbnQiLCJuYW1lIiwiaW5kZXhPZiIsImdldE93blByb3AiLCJvYmoiLCJoYXNPd25Qcm9wZXJ0eSIsInVuZGVmaW5lZCIsIkNvbm5lY3Rpb25FcnJvciIsImlkIiwiT2JqZWN0IiwiY3JlYXRlIiwiRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJOb1Byb2NlZHVyZUVycm9yIiwicHJvY2VkdXJlIiwidmFsaWRhdGVJZCIsInZhbGlkYXRlIiwibWVzc2FnZSIsInBhc3NlZCIsImFyZ3MiLCJBcnJheSIsIm5wcm9wcyIsImtleXMiLCJsZW5ndGgiLCJBY2siLCJ0aW1lb3V0IiwiY2IiLCJwcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJmb3JjZU5hY2siLCJlcnJvciIsImNsZWFyVGltZW91dCIsInJlc3VsdCIsInJldHJ5Q29uZmlnIiwiZmFjdG9yIiwibWF4VGltZW91dCIsIkluZmluaXR5IiwibWluVGltZW91dCIsInJhbmRvbWl6ZSIsInJldHJpZXMiLCJkZWZhdWx0cyIsImFja1RpbWVvdXQiLCJhdXRoIiwiYXV0b1JlY29ubmVjdCIsImF1dG9SZWNvbm5lY3RPcHRpb25zIiwiYmluYXJ5VHlwZSIsImRlY29kZXIiLCJKU09OIiwicGFyc2UiLCJlbmNvZGVyIiwic3RyaW5naWZ5IiwiZXJyb3JGb3JtYXR0ZXIiLCJTdHJpbmciLCJwaW5nSW50ZXJ2YWwiLCJwaW5nVGltZW91dCIsInByb3RvY29scyIsInJlY2VpdmVIb29rIiwic2VuZEhvb2siLCJza2lwVmFsaWRhdGlvbiIsIldlYlNvY2tldCIsInczYyIsIndzT3B0aW9ucyIsIkNsaWVudCIsInVybCIsIm9wdGlvbnMiLCJjb25uZWN0ZWQiLCJjb3VudGVyIiwiZGF0YSIsImhhbmRsZXJzIiwicGVuZGluZ0Fja3MiLCJ0ZXJtaW5hdGVkIiwicmVnaXN0ZXIiLCJyZWNvbm5lY3QiLCJ0aGVuIiwibXNnIiwiX2Rpc3BhdGNoIiwiY2F0Y2giLCJzZW5kIiwic29ja2V0Iiwib25vcGVuIiwib25lcnJvciIsIm9uY2xvc2UiLCJfb25DbG9zZSIsIm9ubWVzc2FnZSIsIl9vbk1lc3NhZ2UiLCJwaW5nVGltZW91dElkIiwiY2FsbCIsIl9tYWtlTWVzc2FnZSIsIl9zZW5kIiwiX3BpbmciLCJjbG9zZSIsInJlYWR5U3RhdGUiLCJyYW5kIiwiTWF0aCIsInJhbmRvbSIsIm1pbiIsInBvdyIsInJlY29ubmVjdFRpbWVvdXRJZCIsImNvbm5lY3RIYW5kbGVyIiwiYXV0aFRpbWVvdXRJZCIsIm9wZW5IYW5kbGVyIiwiaXNBdXRoIiwib25jZSIsIl9zZXRFdmVudHMiLCJldiIsIm9mZiIsImNvZGUiLCJhY2siLCJfcmVjb25uZWN0IiwibmVlZHNBY2siLCJmbiIsImFwcGx5Iiwic2V0dGxlIiwic2tpcEVuY29kZXIiLCJiaW5hcnkiLCJldmVudCIsImhhbmRsZXIiLCJfaXNPcGVuIiwiX29wZW4iLCJzdHIiLCJ0ZXJtaW5hdGUiLCJlbWl0RW5jb2RlZCIsInNlbmRFbmNvZGVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztBQUtBLElBQU1BLGVBQWVDLFFBQVEsZUFBUixDQUFyQjs7ZUFDbURBLFFBQVEsU0FBUixDO0lBQTNDQyxNLFlBQUFBLE07SUFBUUMsTyxZQUFBQSxPO0lBQVNDLFksWUFBQUEsWTtJQUFjQyxPLFlBQUFBLE87O0FBRXZDLElBQU1DLFlBQVksQ0FBRSxPQUFGLEVBQVcsTUFBWCxFQUFtQixPQUFuQixFQUE0QixNQUE1QixFQUFvQyxPQUFwQyxDQUFsQjs7QUFJQSxJQUFNQyxTQUFTLEdBQUdBLE1BQUgsQ0FBVUMsSUFBVixDQUFlLEVBQWYsQ0FB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QWpCLEdBQStCM0QsT0FBT2pFLFNBQVAsQ0FBaUI2SCxXQUFoRDs7QUFFQTVELE9BQU96RCxlQUFQLEdBQXlCQSxlQUF6QjtBQUNBeUQsT0FBT25ELGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQW1ELE9BQU9wRCxZQUFQLEdBQXNCQSxZQUF0Qjs7QUFFQWlILE9BQU9DLE9BQVAsR0FBaUI5RCxNQUFqQiIsImZpbGUiOiJDbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcbi8qIGdsb2JhbCBXZWJTb2NrZXQgKi9cblxuLy8gU2hhcmVkIGNvZGUgZm9yIG5vZGUgYW5kIGNsaWVudHMvYnJvd3NlcnNcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpXG5jb25zdCB7IGFzc2lnbiwgYXR0ZW1wdCwgZnJvbUNhbGxiYWNrLCBQcm9taXNlIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcblxuY29uc3QgYmxhY2tsaXN0ID0gWyAnY2xvc2UnLCAnb3BlbicsICdlcnJvcicsICdwb25nJywgJ3JldHJ5JyBdXG5cbi8vIHV0aWxzXG5cbmNvbnN0IGNvbmNhdCA9IFtdLmNvbmNhdC5iaW5kKFtdKVxuXG5jb25zdCBlbWl0ID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0XG5cbmZ1bmN0aW9uIGlzQmxhY2tsaXN0ZWRFdmVudCAobmFtZSkge1xuICByZXR1cm4gYmxhY2tsaXN0LmluZGV4T2YobmFtZSkgPj0gMFxufVxuXG5mdW5jdGlvbiBnZXRPd25Qcm9wIChvYmosIG5hbWUpIHtcbiAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IG9ialtuYW1lXSA6IHVuZGVmaW5lZFxufVxuXG4vLyBlcnJvcnNcblxuLyoqXG4gKiB7QGxpbmsgQ2xpZW50I3NlbmR9L3tAbGluayBDbGllbnQjaW52b2tlfSBpcyByZWplY3RlZCB3aXRoIHRoaXNcbiAqIGVycm9yIHdoZW4gY29ubmVjdGlvbiBpcyBjbG9zZWQgYmVmb3JlIGEgbWVzc2FnZSBpcyBzZW5kIG9yIHJlcGx5XG4gKiByZWNlaXZlZCAoZm9yIGBpbnZva2VgIG9ubHkpLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIEVycm9yXG4gKiBAbWVtYmVyb2YgQ2xpZW50XG4gKiBAcGFyYW0ge251bWJlcn0gW2lkXSBNZXNzYWdlIGlkLlxuICovXG5mdW5jdGlvbiBDb25uZWN0aW9uRXJyb3IgKGlkKSB7XG4gIHRoaXMubmFtZSA9ICdDb25uZWN0aW9uRXJyb3InXG4gIHRoaXMuaWQgPSBpZFxufVxuXG5Db25uZWN0aW9uRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG5cbi8qKlxuICoge0BsaW5rIENsaWVudCNpbnZva2V9IGlzIHJlamVjdGVkIHdpdGggdGhpcyBlcnJvciB3aGVuIG5vIHJlcGx5IGlzXG4gKiByZWNlaXZlZCBiZWZvcmUge0BsaW5rIENsaWVudC5Tb2NrZXRPcHRpb25zfSBgYWNrVGltZW91dGAuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgRXJyb3JcbiAqIEBtZW1iZXJvZiBDbGllbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZCBNZXNzYWdlIGlkLlxuICovXG5mdW5jdGlvbiBUaW1lb3V0RXJyb3IgKGlkKSB7XG4gIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InXG4gIHRoaXMuaWQgPSBpZFxufVxuXG5UaW1lb3V0RXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG5cbi8qKlxuICoge0BsaW5rIENsaWVudCNpbnZva2V9IGlzIHJlamVjdGVkIHdpdGggdGhpcyBlcnJvciBieSB0aGUgb3RoZXIgc2lkZVxuICogd2hlbiBubyBoYW5kbGVyIGlzIGZvdW5kIGZvciBhIHByb2NlZHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBFcnJvclxuICogQG1lbWJlcm9mIENsaWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHByb2NlZHVyZSBOYW1lLlxuICovXG5mdW5jdGlvbiBOb1Byb2NlZHVyZUVycm9yIChwcm9jZWR1cmUpIHtcbiAgdGhpcy5uYW1lID0gJ05vUHJvY2VkdXJlRXJyb3InXG4gIHRoaXMucHJvY2VkdXJlID0gcHJvY2VkdXJlXG59XG5cbk5vUHJvY2VkdXJlRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG5cbi8vIHZhbGlkYXRpb25cblxuZnVuY3Rpb24gdmFsaWRhdGVJZCAoaWQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gJ251bWJlcicgJiYgKGlkICUgMSkgPT09IDAgJiYgaWQgPiAwXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlIChtZXNzYWdlKSB7XG4gIGxldCBwYXNzZWQgPSBmYWxzZVxuICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIGlmIChtZXNzYWdlLm5hbWUpIHsgLy8gbWVzc2FnZVxuICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLm5hbWUgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UuYXJncyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGxldCBucHJvcHMgPSBPYmplY3Qua2V5cyhtZXNzYWdlKS5sZW5ndGhcbiAgICAgICAgaWYgKG5wcm9wcyA9PT0gMiB8fCAobnByb3BzID09PSAzICYmIHZhbGlkYXRlSWQobWVzc2FnZS5pZCkpKSB7XG4gICAgICAgICAgcGFzc2VkID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gYWNrIG1lc3NhZ2VcbiAgICAgIGxldCBucHJvcHMgPSBPYmplY3Qua2V5cyhtZXNzYWdlKS5sZW5ndGhcbiAgICAgIGlmIChucHJvcHMgPT09IDIgJiYgdmFsaWRhdGVJZChtZXNzYWdlLmlkKSkge1xuICAgICAgICBpZiAobWVzc2FnZS5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSB8fCBtZXNzYWdlLmhhc093blByb3BlcnR5KCdyZXN1bHQnKSkge1xuICAgICAgICAgIHBhc3NlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIXBhc3NlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVmFsaWRhdGlvbiBlcnJvcicpXG4gIH1cbn1cblxuLy8gYWNrXG5cbmNsYXNzIEFjayB7XG4gIGNvbnN0cnVjdG9yIChpZCwgdGltZW91dCwgY2IpIHtcbiAgICB0aGlzLmlkID0gaWRcbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmUgPSByZXNvbHZlXG4gICAgICB0aGlzLnJlamVjdCA9IHJlamVjdFxuICAgIH0pXG4gICAgdGhpcy5jYiA9IGNiXG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvcmNlTmFjayhuZXcgVGltZW91dEVycm9yKGlkKSksIHRpbWVvdXQpXG4gIH1cblxuICBmb3JjZU5hY2sgKGVycm9yKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICB0aGlzLmNiKClcbiAgICB0aGlzLnJlamVjdChlcnJvcilcbiAgfVxuXG4gIHNldHRsZSAobWVzc2FnZSkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy5jYigpXG4gICAgaWYgKG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykpIHtcbiAgICAgIHRoaXMucmVqZWN0KG1lc3NhZ2UuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzb2x2ZShtZXNzYWdlLnJlc3VsdClcbiAgICB9XG4gIH1cbn1cblxuLy8gY2xpZW50XG5cbi8qKlxuICogR2VuZXJhbCBmb3JtYXQgZm9yIGFsbCBkYXRhIHRoYXQgaXMgc2VudCBvciByZWNlaXZlZCBvdmVyIGFcbiAqIHdlYnNvY2tldC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGllbnQuTWVzc2FnZVxuICpcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbaWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXG4gKiBAcHJvcGVydHkge0FycmF5fSBbYXJnc11cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcmVzdWx0XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtlcnJvcl1cbiAqL1xuXG4vKipcbiAqIE1lc3NhZ2VzIGVuY29kZXIuIE1heSBhbHNvIHJldHVybiBwcm9taXNlcyBmb3IgYW4gYXN5bmNocm9ub3VzXG4gKiBleGVjdXRpb24uXG4gKlxuICogQGNhbGxiYWNrIENsaWVudC5FbmNvZGVyXG4gKiBAcGFyYW0ge0NsaWVudC5NZXNzYWdlfSBtZXNzYWdlIE1lc3NhZ2UuXG4gKiBAcmV0dXJuIHtQcm9taXNlPE9iamVjdD58T2JqZWN0fSBEYXRhIHRvIHNlbmQuXG4gKi9cblxuLyoqXG4gKiBNZXNzYWdlcyBkZWNvZGVyLiBNYXkgYWxzbyByZXR1cm4gcHJvbWlzZXMgZm9yIGFuIGFzeW5jaHJvbm91c1xuICogZXhlY3V0aW9uLlxuICpcbiAqIEBjYWxsYmFjayBDbGllbnQuRGVjb2RlclxuICogQHBhcmFtIHtPYmplY3R9IGRhdGEgUmVjZWl2ZWQgZGF0YS5cbiAqIEByZXR1cm4ge1Byb21pc2U8Q2xpZW50Lk1lc3NhZ2U+fENsaWVudC5NZXNzYWdlfSBNZXNzYWdlLlxuICovXG5cbi8qKlxuICogUmVjZWl2ZSBob29rIGlzIHJ1biB3aGVuIGEgY2xpZW50IHJlY2VpdmVzIGEgdmFsaWQgbWVzc2FnZSB2aWEgYVxuICogd2Vic29ja2V0LiBNYXkgYWxzbyByZXR1cm4gcHJvbWlzZXMgZm9yIGFuIGFzeW5jaHJvbm91cyBleGVjdXRpb24uXG4gKlxuICogQGNhbGxiYWNrIENsaWVudC5SZWNlaXZlSG9va1xuICogQHBhcmFtIHtDbGllbnQuTWVzc2FnZX0gbWVzc2FnZSBNZXNzYWdlLlxuICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fHVuZGVmaW5lZH0gUHJvbWlzZSwgaWYgaXQgaXMgcmVqZWN0ZWQgbm9cbiAqIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkLlxuICovXG5cbi8qKlxuICogU2VuZCBob29rIGlzIHJ1biB3aGVuIGEgY2xpZW50IHNlbmRzIGFueSBtZXNzYWdlIHZpYSBhXG4gKiB3ZWJzb2NrZXQuIE1heSBhbHNvIHJldHVybiBwcm9taXNlcyBmb3IgYW4gYXN5bmNocm9ub3VzIGV4ZWN1dGlvbi5cbiAqXG4gKiBAY2FsbGJhY2sgQ2xpZW50LlNlbmRIb29rXG4gKiBAcGFyYW0ge0NsaWVudC5NZXNzYWdlfE9iamVjdH0gbWVzc2FnZSBNZXNzYWdlIG9yIG9iamVjdCBpZlxuICogYGlzRW5jb2RlZGAgaXMgYHRydWVgLlxuICogQHBhcmFtIHtib29sZWFufSBpc0VuY29kZWQgSWYgYSBtZXNzYWdlIGhhcyBiZWVuIGFscmVhZHkgZW5jb2RlZFxuICogdmlhIHtAbGluayBDbGllbnQjZW5jb2RlTWVzc2FnZX0gb3Ige0BsaW5rIFNlcnZlciNlbmNvZGVNZXNzYWdlfS5cbiAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPnx1bmRlZmluZWR9IFByb21pc2UsIGlmIGl0IGlzIHJlamVjdGVkIG5vXG4gKiBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWVudC5SZXRyeUNvbmZpZ1xuICpcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZmFjdG9yPTJdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFRpbWVvdXQ9SW5maW5pdHldXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21pblRpbWVvdXQ9MTAwMF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JhbmRvbWl6ZT10cnVlXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXRyaWVzPTEwXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpZW50LlNvY2tldE9wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2Fja1RpbWVvdXQ9MjAwMDBdIFJlc3VsdCB3YWl0IHRpbWVvdXQgZm9yXG4gKiB7QGxpbmsgQ2xpZW50I2ludm9rZX0gaW4gbXMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2F1dGg9e31dIEF1dGggZGF0YS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2F1dG9SZWNvbm5lY3Q9dHJ1ZV0gRW5hYmxlIGF1dG8gcmVjb25uZWN0LlxuICogQHByb3BlcnR5IHtDbGllbnQuUmV0cnlDb25maWd9IFthdXRvUmVjb25uZWN0T3B0aW9uc10gQXV0b1xuICogcmVjb25uZWN0IGNvbmZpZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYmluYXJ5VHlwZT0nYXJyYXlidWZmZXInXSBXM0MgV2ViU29ja2V0XG4gKiBiaW5hcnkgZGF0YSB0eXBlLlxuICogQHByb3BlcnR5IHtDbGllbnQuRGVjb2Rlcn0gW2RlY29kZXI9SlNPTi5wYXJzZV0gTWVzc2FnZXMgZGVjb2Rlci5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LkVuY29kZXJ9IFtlbmNvZGVyPUpTT04uc3RyaW5naWZ5XSBNZXNzYWdlc1xuICogZW5jb2Rlci5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IFtlcnJvckZvcm1hdHRlcj1TdHJpbmddIENvbnZlcnRlciBmb3IgSlNcbiAqIGVycm9ycyB0byBzb21lIG5ldHdvcmsgZm9ybWF0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwaW5nSW50ZXJ2YWw9MjAwMDBdIFBpbmcgaW50ZXJ2YWwgaW4gbXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BpbmdUaW1lb3V0PTIwMDAwXSBQaW5nIHRpbWVvdXQgaW4gbXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBbcHJvdG9jb2xzPSd3cy1tZXNzYWdpbmcnXVxuICogV2ViU29ja2V0IHByb3RvY29scy5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LlJlY2VpdmVIb29rfSBbcmVjZWl2ZUhvb2tdIFJlY2VpdmUgaG9vay5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LlNlbmRIb29rfSBbU2VuZEhvb2tdIFNlbmQgaG9vay5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBWYWxpZGF0aW9uPWZhbHNlXSBTa2lwcyBidWlsZC1pblxuICogbWVzc2FnZXMgdmFsaWRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbV2ViU29ja2V0PXVuZGVmaW5lZF0gQWx0ZXJuYXRpdmUgd2Vic29ja2V0XG4gKiBjb25zdHJ1Y3RvciwgaWYgaXQgaXMgdW5kZWZpbmVkIHRoZW4gYSBnbG9iYWwgV2ViU29ja2V0IGlzIHVzZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt3M2M9dW5kZWZpbmVkXSBJZiBXZWJTb2NrZXQgaXMgdXNpbmcgYSB3M2NcbiAqIHNlbmQgQVBJLCBvciBhIHdzIG9uZSAoZnJvbSBOb2RlLmpzIHNlcnZlciBpbXBsZW1lbnRhdGlvbiB3aXRoIGFcbiAqIGNhbGxiYWNrKS4gQnkgZGVmYXVsdCBpZiBhIGdsb2JhbCB2YWx1ZSBpcyB1c2VkLCB0aGVuIGl0IGlzIGB0cnVlYFxuICogYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFt3c09wdGlvbnNdIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBwYXNzIHRvIHdzXG4gKiBzb2NrZXQgY29uc3RydWN0b3IuXG4gKi9cblxuY29uc3QgcmV0cnlDb25maWcgPSB7XG4gIGZhY3RvcjogMixcbiAgbWF4VGltZW91dDogSW5maW5pdHksXG4gIG1pblRpbWVvdXQ6IDEwMDAsXG4gIHJhbmRvbWl6ZTogdHJ1ZSxcbiAgcmV0cmllczogMTBcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIGFja1RpbWVvdXQ6IDIwMDAwLFxuICBhdXRoOiB7fSxcbiAgYXV0b1JlY29ubmVjdDogdHJ1ZSxcbiAgYXV0b1JlY29ubmVjdE9wdGlvbnM6IHJldHJ5Q29uZmlnLFxuICBiaW5hcnlUeXBlOiAnYXJyYXlidWZmZXInLFxuICBkZWNvZGVyOiBKU09OLnBhcnNlLFxuICBlbmNvZGVyOiBKU09OLnN0cmluZ2lmeSxcbiAgZXJyb3JGb3JtYXR0ZXI6IFN0cmluZyxcbiAgcGluZ0ludGVydmFsOiAyMDAwMCxcbiAgcGluZ1RpbWVvdXQ6IDIwMDAwLFxuICBwcm90b2NvbHM6ICd3cy1tZXNzYWdpbmcnLFxuICByZWNlaXZlSG9vazogbnVsbCxcbiAgc2VuZEhvb2s6IG51bGwsXG4gIHNraXBWYWxpZGF0aW9uOiBmYWxzZSxcbiAgV2ViU29ja2V0OiB1bmRlZmluZWQsXG4gIHczYzogdW5kZWZpbmVkLFxuICB3c09wdGlvbnM6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICpcbiAqIEBlbWl0cyBDbGllbnQjY2xvc2VcbiAqIEBlbWl0cyBDbGllbnQjb3BlblxuICogQGVtaXRzIENsaWVudCNlcnJvclxuICogQGVtaXRzIENsaWVudCNjb25uZWN0XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xpZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFdlYlNvY2tldCBjb25uZWN0aW9uIHVybC5cbiAgICogQHBhcmFtIHtDbGllbnQuU29ja2V0T3B0aW9uc30gW29wdGlvbnNdIFNvY2tldCBvcHRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMudXJsID0gdXJsXG4gICAgLyoqXG4gICAgICogQ2xpZW50IGlkLiBTZXJ2ZXItc2lkZSBvbmx5LlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gaWRcbiAgICAgKiBAbWVtYmVyb2YgQ2xpZW50XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgYXNzaWduKHRoaXMsIGRlZmF1bHRzLCBvcHRpb25zKVxuICAgIHRoaXMucmV0cnlDb25maWcgPSB7fVxuICAgIGFzc2lnbih0aGlzLnJldHJ5Q29uZmlnLCByZXRyeUNvbmZpZywgb3B0aW9ucy5hdXRvUmVjb25uZWN0T3B0aW9ucylcbiAgICBpZiAoIXRoaXMuV2ViU29ja2V0KSB7XG4gICAgICB0aGlzLldlYlNvY2tldCA9IFdlYlNvY2tldFxuICAgICAgdGhpcy53M2MgPSB0aGlzLnczYyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMudzNjXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHRoZW4gYSBjbGllbnQgaXMgY29ubmVjdGVkLlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZVxuICAgIHRoaXMuY291bnRlciA9IDFcbiAgICB0aGlzLmRhdGEgPSB7fVxuICAgIHRoaXMuaGFuZGxlcnMgPSB7fVxuICAgIHRoaXMucGVuZGluZ0Fja3MgPSB7fVxuICAgIHRoaXMuYXR0ZW1wdCA9IDBcbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCB0aGVuIGEgY2xpZW50IHdhcyBjbG9zZWQgdmlhIGEgY2xvc2UgbWV0aG9kIG9yIGFuIGF1dGhcbiAgICAgKiBlcnJvciBvY2N1cnJlZC5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudGVybWluYXRlZCA9IGZhbHNlXG4gICAgdGhpcy5yZWdpc3RlcigncGluZycsICgpID0+IFByb21pc2UucmVzb2x2ZSgpKVxuICAgIHRoaXMucmVjb25uZWN0KClcbiAgfVxuXG4gIF9vbk1lc3NhZ2UgKGRhdGEpIHtcbiAgICBsZXQgbWVzc2FnZVxuICAgIGF0dGVtcHQoKCkgPT4gdGhpcy5kZWNvZGVyKGRhdGEuZGF0YSkpXG4gICAgICAudGhlbihtc2cgPT4geyBtZXNzYWdlID0gbXNnIH0pXG4gICAgICAudGhlbigoKSA9PiB7IGlmICghdGhpcy5za2lwVmFsaWRhdGlvbikgeyB2YWxpZGF0ZShtZXNzYWdlKSB9IH0pXG4gICAgICAudGhlbigoKSA9PiB7IGlmICh0aGlzLnJlY2VpdmVIb29rKSB7IHRoaXMucmVjZWl2ZUhvb2sobWVzc2FnZSkgfSB9KVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fZGlzcGF0Y2gobWVzc2FnZSkpXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBvdGhlciBzaWRlIGZhaWxlZCB0byBkZWNvZGUgb3IgdmFsaWRhdGUgYVxuICAgICAqIHdlYnNvY2tldCBtZXNzYWdlLCBuYW1lbHkgYW4gZXJyb3IgaXMgb2NjdXJyZWQgaW5zaWRlIGVpdGhlclxuICAgICAqIGBkZWNvZGVyYCBvciBgcmVjZWl2ZUhvb2tgLlxuICAgICAqIEBldmVudCBDbGllbnQjcHJlcHJvY2Vzc2luZ0Vycm9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGVycm9yIENvbnZlcnRlZCBlcnJvci5cbiAgICAgKi9cbiAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLnNlbmQoJ3ByZXByb2Nlc3NpbmdFcnJvcicsIHRoaXMuZXJyb3JGb3JtYXR0ZXIoZXJyb3IpKSlcbiAgfVxuXG4gIF9zZXRFdmVudHMgKCkge1xuICAgIC8qKlxuICAgICAqIEVtaXRzIHczYyBvbm9wZW4gV2ViU29ja2V0IGV2ZW50cy5cbiAgICAgKiBAZXZlbnQgQ2xpZW50I29wZW5cbiAgICAgKi9cbiAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSBlbWl0LmJpbmQodGhpcywgJ29wZW4nKVxuICAgIC8qKlxuICAgICAqIEVtaXRzIHczYyBvbmVycm9yIFdlYlNvY2tldCBldmVudHMuIERvZXMgbm90IHRocm93IGlmIHRoZXJlIGFyZVxuICAgICAqIG5vIGxpc3RlbmVycy5cbiAgICAgKiBAZXZlbnQgQ2xpZW50I2Vycm9yXG4gICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgRXJyb3IuXG4gICAgICovXG4gICAgdGhpcy5zb2NrZXQub25lcnJvciA9IGVtaXQuYmluZCh0aGlzLCAnZXJyb3InKVxuICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSB0aGlzLl9vbkNsb3NlLmJpbmQodGhpcylcbiAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKVxuICB9XG5cbiAgX3BpbmcgKCkge1xuICAgIHRoaXMucGluZ1RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZW1pdC5jYWxsKHRoaXMsICdwaW5nJylcbiAgICAgIGxldCB0aW1lb3V0ID0gdGhpcy5waW5nVGltZW91dFxuICAgICAgbGV0IHsgbWVzc2FnZSwgcHJvbWlzZSB9ID0gdGhpcy5fbWFrZU1lc3NhZ2UoJ3BpbmcnLCBbXSwgdHJ1ZSwgdGltZW91dClcbiAgICAgIHRoaXMuX3NlbmQobWVzc2FnZSkudGhlbigoKSA9PiBwcm9taXNlKVxuICAgICAgICAudGhlbigoKSA9PiBlbWl0LmNhbGwodGhpcywgJ3BvbmcnKSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fcGluZygpKVxuICAgICAgICAuY2F0Y2goKCkgPT4gdGhpcy5jbG9zZSg0MDA4LCAnUGluZyB0aW1lb3V0JywgZmFsc2UpKVxuICAgIH0sIHRoaXMucGluZ0ludGVydmFsKVxuICB9XG5cbiAgX2lzT3BlbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ja2V0ICYmXG4gICAgICAodGhpcy5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gMCB8fCB0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSAxKVxuICB9XG5cbiAgX3JlY29ubmVjdCAoKSB7XG4gICAgbGV0IHsgZmFjdG9yLCBtYXhUaW1lb3V0LCBtaW5UaW1lb3V0LCByYW5kb21pemUsIHJldHJpZXMgfSA9IHRoaXMucmV0cnlDb25maWdcbiAgICBpZiAodGhpcy5hdHRlbXB0ID49IHJldHJpZXMgfHwgdGhpcy50ZXJtaW5hdGVkKSB7IHJldHVybiB9XG4gICAgbGV0IHJhbmQgPSAxICsgKHJhbmRvbWl6ZSA/IE1hdGgucmFuZG9tKCkgOiAwKVxuICAgIGxldCB0aW1lb3V0ID0gTWF0aC5taW4ocmFuZCAqIG1pblRpbWVvdXQgKiBNYXRoLnBvdyhmYWN0b3IsIHRoaXMuYXR0ZW1wdCksIG1heFRpbWVvdXQpXG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMucmVjb25uZWN0LmJpbmQodGhpcyksIHRpbWVvdXQpXG4gICAgdGhpcy5hdHRlbXB0KytcbiAgfVxuXG4gIF9vcGVuICgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lb3V0SWQpXG4gICAgLyoqXG4gICAgICogVW5kZXJseWluZyB3ZWJzb2NrZXQuXG4gICAgICogQG1lbWJlciB7V2ViU29ja2V0fVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc29ja2V0ID0gbmV3IHRoaXMuV2ViU29ja2V0KHRoaXMudXJsLCB0aGlzLnByb3RvY29scywgdGhpcy53c09wdGlvbnMpXG4gICAgaWYgKHRoaXMudzNjKSB7IHRoaXMuc29ja2V0LmJpbmFyeVR5cGUgPSB0aGlzLmJpbmFyeVR5cGUgfVxuICAgIHRoaXMuY29ubmVjdEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWVcbiAgICAgIHRoaXMuYXR0ZW1wdCA9IDBcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmF1dGhUaW1lb3V0SWQpXG4gICAgICB0aGlzLl9waW5nKClcbiAgICB9XG4gICAgdGhpcy5vcGVuSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3NlbmQodGhpcy5hdXRoLCB7aXNBdXRoOiB0cnVlfSlcbiAgICAgIHRoaXMuYXV0aFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgIHRoaXMuY2xvc2UuYmluZCh0aGlzLCA0MDA4LCAnQXV0aCB0aW1lb3V0JywgZmFsc2UpLFxuICAgICAgICB0aGlzLmFja1RpbWVvdXQpXG4gICAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCB0aGlzLmNvbm5lY3RIYW5kbGVyKVxuICAgIH1cbiAgICB0aGlzLm9uY2UoJ29wZW4nLCB0aGlzLm9wZW5IYW5kbGVyKVxuICAgIHRoaXMuX3NldEV2ZW50cygpXG4gICAgaWYgKHRoaXMuYXR0ZW1wdCA+IDApIHtcbiAgICAgIC8qKlxuICAgICAgICogRW1pdHMgcmV0cnkgZXZlbnRzIHdoZW4gYXV0byByZWNvbm5lY3RpbmcuXG4gICAgICAgKiBAZXZlbnQgQ2xpZW50I3JldHJ5XG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gYXR0ZW1wdCBBdHRlbXB0IG51bWJlciBzdGFydGluZyBmcm9tIGAxYC5cbiAgICAgICAqL1xuICAgICAgZW1pdC5jYWxsKHRoaXMsICdyZXRyeScsIHRoaXMuYXR0ZW1wdClcbiAgICB9XG4gIH1cblxuICBfb25DbG9zZSAoZXYpIHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMucGluZ1RpbWVvdXRJZClcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hdXRoVGltZW91dElkKVxuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXRJZClcbiAgICB0aGlzLm9mZignY29ubmVjdCcsIHRoaXMuY29ubmVjdEhhbmRsZXIpXG4gICAgdGhpcy5vZmYoJ29wZW4nLCB0aGlzLm9wZW5IYW5kbGVyKVxuICAgIGlmIChldi5jb2RlID09PSA0MDAzIHx8ICF0aGlzLnVybCkgeyB0aGlzLnRlcm1pbmF0ZWQgPSB0cnVlIH1cbiAgICBmb3IgKGxldCBpZCBpbiB0aGlzLnBlbmRpbmdBY2tzKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMucGVuZGluZ0Fja3MuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgIGxldCBhY2sgPSB0aGlzLnBlbmRpbmdBY2tzW2lkXVxuICAgICAgICBhY2suZm9yY2VOYWNrKG5ldyBDb25uZWN0aW9uRXJyb3IoaWQpKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdBY2tzID0ge31cbiAgICBpZiAoIXRoaXMudGVybWluYXRlZCAmJiB0aGlzLmF1dG9SZWNvbm5lY3QpIHsgdGhpcy5fcmVjb25uZWN0KCkgfVxuICAgIC8qKlxuICAgICAqIEVtaXRzIHczYyBvbmNsb3NlIFdlYlNvY2tldCBldmVudHMuXG4gICAgICogQGV2ZW50IENsaWVudCNjbG9zZVxuICAgICAqIEBwYXJhbSB7Q2xvc2VFdmVudH0gZGF0YSBDbG9zZSBldmVudCBkYXRhLlxuICAgICAqL1xuICAgIGVtaXQuY2FsbCh0aGlzLCAnY2xvc2UnLCBldilcbiAgfVxuXG4gIF9tYWtlTWVzc2FnZSAobmFtZSwgYXJncywgbmVlZHNBY2ssIGFja1RpbWVvdXQgPSB0aGlzLmFja1RpbWVvdXQpIHtcbiAgICBsZXQgcHJvbWlzZSwgbWVzc2FnZVxuICAgIG1lc3NhZ2UgPSB7bmFtZSwgYXJnc31cbiAgICBpZiAobmVlZHNBY2spIHtcbiAgICAgIGxldCBpZCA9IHRoaXMuY291bnRlcisrXG4gICAgICBsZXQgYWNrID0gbmV3IEFjayhpZCwgYWNrVGltZW91dCwgKCkgPT4gZGVsZXRlIHRoaXMucGVuZGluZ0Fja3NbaWRdKVxuICAgICAgdGhpcy5wZW5kaW5nQWNrc1tpZF0gPSBhY2tcbiAgICAgIHByb21pc2UgPSBhY2sucHJvbWlzZVxuICAgICAgbWVzc2FnZS5pZCA9IGlkXG4gICAgfVxuICAgIHJldHVybiB7IG1lc3NhZ2UsIHByb21pc2UgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvY2tldCBjb25uZWN0aW9uIGlzIG9wZW4gYW5kIGNsaWVudCBoYXMgcGFzc2VkIGFuIGF1dGhcbiAgICogY2hlY2suIENsaWVudC1zaWRlIG9ubHkuXG4gICAqIEBldmVudCBDbGllbnQjY29ubmVjdFxuICAgKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IGRhdGEgQXV0aCByZXBseSBkYXRhLlxuICAgKi9cbiAgX2Rpc3BhdGNoIChtZXNzYWdlKSB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSkge1xuICAgICAgaWYgKGlzQmxhY2tsaXN0ZWRFdmVudChtZXNzYWdlLm5hbWUpKSB7IHJldHVybiB9XG4gICAgICBpZiAobWVzc2FnZS5uYW1lID09PSAnY29ubmVjdCcgJiYgdGhpcy5jb25uZWN0ZWQpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChtZXNzYWdlLmlkKSB7XG4gICAgICAgIGxldCBpZCA9IG1lc3NhZ2UuaWRcbiAgICAgICAgbGV0IGZuID0gZ2V0T3duUHJvcCh0aGlzLmhhbmRsZXJzLCBtZXNzYWdlLm5hbWUpXG4gICAgICAgIGlmIChmbikge1xuICAgICAgICAgIGF0dGVtcHQoKCkgPT4gZm4uYXBwbHkobnVsbCwgbWVzc2FnZS5hcmdzKSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQgPSBudWxsKSA9PiB0aGlzLl9zZW5kKHtpZCwgcmVzdWx0fSkpXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5fc2VuZCh7aWQsIGVycm9yOiB0aGlzLmVycm9yRm9ybWF0dGVyKGVycm9yKX0pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBlcnJvciA9IHRoaXMuZXJyb3JGb3JtYXR0ZXIobmV3IE5vUHJvY2VkdXJlRXJyb3IobWVzc2FnZS5uYW1lKSlcbiAgICAgICAgICB0aGlzLl9zZW5kKHtpZCwgZXJyb3J9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0LmFwcGx5KHRoaXMsIGNvbmNhdChtZXNzYWdlLm5hbWUsIG1lc3NhZ2UuYXJncykpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBhY2sgPSB0aGlzLnBlbmRpbmdBY2tzW21lc3NhZ2UuaWRdXG4gICAgICBpZiAoYWNrKSB7IGFjay5zZXR0bGUobWVzc2FnZSkgfVxuICAgIH1cbiAgfVxuXG4gIF9zZW5kIChtZXNzYWdlLCB7IHNraXBFbmNvZGVyID0gZmFsc2UsIGlzQXV0aCA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHJldHVybiBhdHRlbXB0KCgpID0+IHRoaXMuc2VuZEhvb2sgPyB0aGlzLnNlbmRIb29rKG1lc3NhZ2UsIHNraXBFbmNvZGVyKSA6IG51bGwpXG4gICAgICAudGhlbigoKSA9PiBza2lwRW5jb2RlciA/IG1lc3NhZ2UgOiB0aGlzLmVuY29kZXIobWVzc2FnZSkpXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3RlZCAmJiAhaXNBdXRoKSB7XG4gICAgICAgICAgbGV0IGlkID0gc2tpcEVuY29kZXIgPyB1bmRlZmluZWQgOiBtZXNzYWdlLmlkXG4gICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25FcnJvcihpZClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53M2MpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQuc2VuZChkYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBiaW5hcnkgPSB0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZydcbiAgICAgICAgICByZXR1cm4gZnJvbUNhbGxiYWNrKGNiID0+IHRoaXMuc29ja2V0LnNlbmQoZGF0YSwge2JpbmFyeX0sIGNiKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGFuIGV2ZW50LCBubyByZXBseS4gVXNlIHtAbGluayBvbn0gb3Ige0BsaW5rIG9uY2V9IG1ldGhvZHNcbiAgICogdG8gbGlzdGVuIGV2ZW50cyBvbiBhIHJlY2lwaWVudCBzaWRlLiBSZXNlcnZlZCBldmVudCBuYW1lc1xuICAgKiAoX19NVVNUIE5PVF9fIGJlIHVzZWQpOiBgY29ubmVjdGAsIGBjbG9zZWAsIGBvcGVuYCwgYGVycm9yYCxcbiAgICogYHBpbmdgLCBgcG9uZ2AsIGByZXRyeWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0geyp9IFthcmdzXSBBcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVuZGVmaW5lZD59IFJlc29sdmVzIHdoZW4gYSBkYXRhIGhhcyBiZWVuIHNlbnQuXG4gICAqL1xuICBzZW5kIChldmVudCwgLi4uYXJncykge1xuICAgIGxldCB7IG1lc3NhZ2UgfSA9IHRoaXMuX21ha2VNZXNzYWdlKGV2ZW50LCBhcmdzLCBmYWxzZSlcbiAgICByZXR1cm4gdGhpcy5fc2VuZChtZXNzYWdlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlIGVuY29kZWQgYnkge0BsaW5rIENsaWVudCNlbmNvZGVNZXNzYWdlfSBvciB7QGxpbmtcbiAgICogU2VydmVyI2VuY29kZU1lc3NhZ2V9LCB1c2VmdWwgZm9yIGlkZW50aWNhbCBtZXNzYWdlc1xuICAgKiBicm9hZGNhc3RpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFJlc3VsdCBvZiB7QGxpbmsgQ2xpZW50I2VuY29kZU1lc3NhZ2V9LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmRlZmluZWQ+fSBSZXNvbHZlcyB3aGVuIGEgZGF0YSBoYXMgYmVlbiBzZW50LlxuICAgKi9cbiAgc2VuZEVuY29kZWQgKGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZChkYXRhLCB7c2tpcEVuY29kZXI6IHRydWV9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSBhIG1lc3NhZ2UgZm9yIGEgbGF0ZXIgdXNlIHdpdGgge0BsaW5rIENsaWVudCNzZW5kRW5jb2RlZH0uXG4gICAqIFJlc2VydmVkIGV2ZW50IG5hbWVzIChfX01VU1QgTk9UX18gYmUgdXNlZCk6IGBjb25uZWN0YCwgYGNsb3NlYCxcbiAgICogYG9wZW5gLCBgZXJyb3JgLCBgcGluZ2AsIGBwb25nYCwgYHJldHJ5YC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gW2FyZ3NdIEFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge09iamVjdH0gRW5jb2RlZCBtZXNzYWdlLlxuICAgKi9cbiAgZW5jb2RlTWVzc2FnZSAoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICBsZXQgeyBtZXNzYWdlIH0gPSB0aGlzLl9tYWtlTWVzc2FnZShldmVudCwgYXJncywgZmFsc2UpXG4gICAgcmV0dXJuIGF0dGVtcHQoKCkgPT4gdGhpcy5lbmNvZGVyKG1lc3NhZ2UpKVxuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBhbiBSUEMgcHJvY2VkdXJlLiBVc2Uge0BsaW5rIENsaWVudCNyZWdpc3Rlcn0gbWV0aG9kIHRvXG4gICAqIGFzc2lnbiBhbiBSUEMgbWV0aG9kIGhhbmRsZXIuIFJlc2VydmVkIHByb2NlZHVyZSBuYW1lcyAoX19NVVNUXG4gICAqIE5PVF9fIGJlIHVzZWQpOiBgY29ubmVjdGAsIGBjbG9zZWAsIGBvcGVuYCwgYGVycm9yYCwgYHBpbmdgLFxuICAgKiBgcG9uZ2AsIGByZXRyeWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFByb2NlZHVyZSBuYW1lLlxuICAgKiBAcGFyYW0geyp9IFthcmdzXSBBcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFJlc29sdmVzIG9yIHJlamVjdHMgd2hlbiBhIHJlcGx5IGlzXG4gICAqIHJlY2VpdmVkLlxuICAgKi9cbiAgaW52b2tlIChuYW1lLCAuLi5hcmdzKSB7XG4gICAgbGV0IHsgbWVzc2FnZSwgcHJvbWlzZSB9ID0gdGhpcy5fbWFrZU1lc3NhZ2UobmFtZSwgYXJncywgdHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5fc2VuZChtZXNzYWdlKS50aGVuKCgpID0+IHByb21pc2UpXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gUlBDIGhhbmRsZXIuIEVhY2ggbmFtZSBtdXN0IGhhdmUgbm8gbW9yZSB0aGFuIGEgb25lXG4gICAqIGhhbmRsZXIsIHNvIGl0IHRocm93cyBhbiBlcnJvciBvbiBhIGR1cGxpY2F0ZSBoYW5kbGVyXG4gICAqIHJlZ2lzdHJhdGlvbiBhdHRlbXB0LiBVc2Uge0BsaW5rIENsaWVudCNpbnZva2V9IHRvIGNhbGwgYSBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFByb2NlZHVyZSBuYW1lLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBoYW5kbGVyIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgUHJvbWlzZS5cbiAgICovXG4gIHJlZ2lzdGVyIChuYW1lLCBoYW5kbGVyKSB7XG4gICAgaWYgKGdldE93blByb3AodGhpcy5oYW5kbGVycywgbmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgcmVnaXN0ZXIgYSBkdXBsaWNhdGUgUlBDIGhhbmRsZXIgZm9yICR7bmFtZX1gKVxuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJzW25hbWVdID0gaGFuZGxlclxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29ubmVjdC4gQ2xpZW50LXNpZGUgb25seS5cbiAgICovXG4gIHJlY29ubmVjdCAoKSB7XG4gICAgdGhpcy50ZXJtaW5hdGVkID0gZmFsc2VcbiAgICBpZiAodGhpcy5faXNPcGVuKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAodGhpcy5XZWJTb2NrZXQgJiYgdGhpcy51cmwpIHtcbiAgICAgIHRoaXMuX29wZW4oKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBjb25maWd1cmF0aW9uIG9wdGlvbnMnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYSBjbGllbnQgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2RlPTEwMDBdIENvZGUgYXMgcGVyIFdlYlNvY2tldCBzcGVjLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl0gT3B0aW9uYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0ZXJtaW5hdGU9dHJ1ZV0gRGlzYWJsZSByZWNvbm5lY3QuXG4gICAqL1xuICBjbG9zZSAoY29kZSA9IDEwMDAsIHN0ciwgdGVybWluYXRlID0gdHJ1ZSkge1xuICAgIGlmICghdGhpcy50ZXJtaW5hdGVkKSB7XG4gICAgICB0aGlzLnRlcm1pbmF0ZWQgPSB0ZXJtaW5hdGVcbiAgICAgIGlmICh0aGlzLl9pc09wZW4oKSkgeyB0aGlzLnNvY2tldC5jbG9zZShjb2RlLCBzdHIpIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIENsaWVudCNzZW5kfS5cbiAqIEBtZXRob2RcbiAqIEBuYW1lIENsaWVudCNlbWl0XG4gKi9cbkNsaWVudC5wcm90b3R5cGUuZW1pdCA9IENsaWVudC5wcm90b3R5cGUuc2VuZFxuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgQ2xpZW50I3NlbmRFbmNvZGVkfS5cbiAqIEBtZXRob2RcbiAqIEBuYW1lIENsaWVudCNlbWl0RW5jb2RlZFxuICovXG5DbGllbnQucHJvdG90eXBlLmVtaXRFbmNvZGVkID0gQ2xpZW50LnByb3RvdHlwZS5zZW5kRW5jb2RlZFxuXG5DbGllbnQuQ29ubmVjdGlvbkVycm9yID0gQ29ubmVjdGlvbkVycm9yXG5DbGllbnQuTm9Qcm9jZWR1cmVFcnJvciA9IE5vUHJvY2VkdXJlRXJyb3JcbkNsaWVudC5UaW1lb3V0RXJyb3IgPSBUaW1lb3V0RXJyb3JcblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9DbGllbnQuanMiXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsImFzc2lnbiIsImF0dGVtcHQiLCJmcm9tQ2FsbGJhY2siLCJQcm9taXNlIiwiYmxhY2tsaXN0IiwiY29uY2F0IiwiYmluZCIsImVtaXQiLCJwcm90b3R5cGUiLCJpc0JsYWNrbGlzdGVkRXZlbnQiLCJuYW1lIiwiaW5kZXhPZiIsImdldE93blByb3AiLCJvYmoiLCJoYXNPd25Qcm9wZXJ0eSIsInVuZGVmaW5lZCIsIkNvbm5lY3Rpb25FcnJvciIsImlkIiwiT2JqZWN0IiwiY3JlYXRlIiwiRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJOb1Byb2NlZHVyZUVycm9yIiwicHJvY2VkdXJlIiwidmFsaWRhdGVJZCIsInZhbGlkYXRlIiwibWVzc2FnZSIsInBhc3NlZCIsImFyZ3MiLCJBcnJheSIsIm5wcm9wcyIsImtleXMiLCJsZW5ndGgiLCJBY2siLCJ0aW1lb3V0IiwiY2IiLCJwcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJmb3JjZU5hY2siLCJlcnJvciIsImNsZWFyVGltZW91dCIsInJlc3VsdCIsInJldHJ5Q29uZmlnIiwiZmFjdG9yIiwibWF4VGltZW91dCIsIkluZmluaXR5IiwibWluVGltZW91dCIsInJhbmRvbWl6ZSIsInJldHJpZXMiLCJkZWZhdWx0cyIsImFja1RpbWVvdXQiLCJhdXRoIiwiYXV0b1JlY29ubmVjdCIsImF1dG9SZWNvbm5lY3RPcHRpb25zIiwiYmluYXJ5VHlwZSIsImRlY29kZXIiLCJKU09OIiwicGFyc2UiLCJlbmNvZGVyIiwic3RyaW5naWZ5IiwiZXJyb3JGb3JtYXR0ZXIiLCJTdHJpbmciLCJwaW5nSW50ZXJ2YWwiLCJwaW5nVGltZW91dCIsInByb3RvY29scyIsInJlY2VpdmVIb29rIiwic2VuZEhvb2siLCJza2lwVmFsaWRhdGlvbiIsIldlYlNvY2tldCIsInczYyIsIndzT3B0aW9ucyIsIkNsaWVudCIsInVybCIsIm9wdGlvbnMiLCJjb25uZWN0ZWQiLCJjb3VudGVyIiwiZGF0YSIsImhhbmRsZXJzIiwicGVuZGluZ0Fja3MiLCJ0ZXJtaW5hdGVkIiwicmVnaXN0ZXIiLCJyZWNvbm5lY3QiLCJ0aGVuIiwibXNnIiwiX2Rpc3BhdGNoIiwiY2F0Y2giLCJzZW5kIiwic29ja2V0Iiwib25vcGVuIiwib25lcnJvciIsIm9uY2xvc2UiLCJfb25DbG9zZSIsIm9ubWVzc2FnZSIsIl9vbk1lc3NhZ2UiLCJwaW5nVGltZW91dElkIiwiY2FsbCIsIl9tYWtlTWVzc2FnZSIsIl9zZW5kIiwiX3BpbmciLCJjbG9zZSIsInJlYWR5U3RhdGUiLCJyYW5kIiwiTWF0aCIsInJhbmRvbSIsIm1pbiIsInBvdyIsInJlY29ubmVjdFRpbWVvdXRJZCIsImNvbm5lY3RIYW5kbGVyIiwiYXV0aFRpbWVvdXRJZCIsIm9wZW5IYW5kbGVyIiwiaXNBdXRoIiwib25jZSIsIl9zZXRFdmVudHMiLCJldiIsIm9mZiIsImNvZGUiLCJhY2siLCJfcmVjb25uZWN0IiwibmVlZHNBY2siLCJmbiIsImFwcGx5Iiwic2V0dGxlIiwic2tpcEVuY29kZXIiLCJiaW5hcnkiLCJldmVudCIsImhhbmRsZXIiLCJfaXNPcGVuIiwiX29wZW4iLCJzdHIiLCJ0ZXJtaW5hdGUiLCJlbWl0RW5jb2RlZCIsInNlbmRFbmNvZGVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztBQUtBLElBQU1BLGVBQWVDLFFBQVEsZUFBUixDQUFyQjs7ZUFDbURBLFFBQVEsU0FBUixDO0lBQTNDQyxNLFlBQUFBLE07SUFBUUMsTyxZQUFBQSxPO0lBQVNDLFksWUFBQUEsWTtJQUFjQyxPLFlBQUFBLE87O0FBRXZDLElBQU1DLFlBQVksQ0FBRSxPQUFGLEVBQVcsTUFBWCxFQUFtQixPQUFuQixFQUE0QixNQUE1QixFQUFvQyxPQUFwQyxDQUFsQjs7QUFJQSxJQUFNQyxTQUFTLEdBQUdBLE1BQUgsQ0FBVUMsSUFBVixDQUFlLEVBQWYsQ0FB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LE9BQU9qRSxTQUFQLENBQWlCNkgsV0FBaEQ7O0FBRUE1RCxPQUFPekQsZUFBUCxHQUF5QkEsZUFBekI7QUFDQXlELE9BQU9uRCxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0FtRCxPQUFPcEQsWUFBUCxHQUFzQkEsWUFBdEI7O0FBRUFpSCxPQUFPQyxPQUFQLEdBQWlCOUQsTUFBakIiLCJmaWxlIjoiQ2xpZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG4vKiBnbG9iYWwgV2ViU29ja2V0ICovXG5cbi8vIFNoYXJlZCBjb2RlIGZvciBub2RlIGFuZCBjbGllbnRzL2Jyb3dzZXJzXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKVxuY29uc3QgeyBhc3NpZ24sIGF0dGVtcHQsIGZyb21DYWxsYmFjaywgUHJvbWlzZSB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmNvbnN0IGJsYWNrbGlzdCA9IFsgJ2Nsb3NlJywgJ29wZW4nLCAnZXJyb3InLCAncG9uZycsICdyZXRyeScgXVxuXG4vLyB1dGlsc1xuXG5jb25zdCBjb25jYXQgPSBbXS5jb25jYXQuYmluZChbXSlcblxuY29uc3QgZW1pdCA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdFxuXG5mdW5jdGlvbiBpc0JsYWNrbGlzdGVkRXZlbnQgKG5hbWUpIHtcbiAgcmV0dXJuIGJsYWNrbGlzdC5pbmRleE9mKG5hbWUpID49IDBcbn1cblxuZnVuY3Rpb24gZ2V0T3duUHJvcCAob2JqLCBuYW1lKSB7XG4gIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkobmFtZSkgPyBvYmpbbmFtZV0gOiB1bmRlZmluZWRcbn1cblxuLy8gZXJyb3JzXG5cbi8qKlxuICoge0BsaW5rIENsaWVudCNzZW5kfS97QGxpbmsgQ2xpZW50I2ludm9rZX0gaXMgcmVqZWN0ZWQgd2l0aCB0aGlzXG4gKiBlcnJvciB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGJlZm9yZSBhIG1lc3NhZ2UgaXMgc2VuZCBvciByZXBseVxuICogcmVjZWl2ZWQgKGZvciBgaW52b2tlYCBvbmx5KS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBFcnJvclxuICogQG1lbWJlcm9mIENsaWVudFxuICogQHBhcmFtIHtudW1iZXJ9IFtpZF0gTWVzc2FnZSBpZC5cbiAqL1xuZnVuY3Rpb24gQ29ubmVjdGlvbkVycm9yIChpZCkge1xuICB0aGlzLm5hbWUgPSAnQ29ubmVjdGlvbkVycm9yJ1xuICB0aGlzLmlkID0gaWRcbn1cblxuQ29ubmVjdGlvbkVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vKipcbiAqIHtAbGluayBDbGllbnQjaW52b2tlfSBpcyByZWplY3RlZCB3aXRoIHRoaXMgZXJyb3Igd2hlbiBubyByZXBseSBpc1xuICogcmVjZWl2ZWQgYmVmb3JlIHtAbGluayBDbGllbnQuU29ja2V0T3B0aW9uc30gYGFja1RpbWVvdXRgLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIEVycm9yXG4gKiBAbWVtYmVyb2YgQ2xpZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaWQgTWVzc2FnZSBpZC5cbiAqL1xuZnVuY3Rpb24gVGltZW91dEVycm9yIChpZCkge1xuICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJ1xuICB0aGlzLmlkID0gaWRcbn1cblxuVGltZW91dEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vKipcbiAqIHtAbGluayBDbGllbnQjaW52b2tlfSBpcyByZWplY3RlZCB3aXRoIHRoaXMgZXJyb3IgYnkgdGhlIG90aGVyIHNpZGVcbiAqIHdoZW4gbm8gaGFuZGxlciBpcyBmb3VuZCBmb3IgYSBwcm9jZWR1cmUuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgRXJyb3JcbiAqIEBtZW1iZXJvZiBDbGllbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9jZWR1cmUgTmFtZS5cbiAqL1xuZnVuY3Rpb24gTm9Qcm9jZWR1cmVFcnJvciAocHJvY2VkdXJlKSB7XG4gIHRoaXMubmFtZSA9ICdOb1Byb2NlZHVyZUVycm9yJ1xuICB0aGlzLnByb2NlZHVyZSA9IHByb2NlZHVyZVxufVxuXG5Ob1Byb2NlZHVyZUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuXG4vLyB2YWxpZGF0aW9uXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSWQgKGlkKSB7XG4gIHJldHVybiB0eXBlb2YgaWQgPT09ICdudW1iZXInICYmIChpZCAlIDEpID09PSAwICYmIGlkID4gMFxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZSAobWVzc2FnZSkge1xuICBsZXQgcGFzc2VkID0gZmFsc2VcbiAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lKSB7IC8vIG1lc3NhZ2VcbiAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5uYW1lID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmFyZ3MgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBsZXQgbnByb3BzID0gT2JqZWN0LmtleXMobWVzc2FnZSkubGVuZ3RoXG4gICAgICAgIGlmIChucHJvcHMgPT09IDIgfHwgKG5wcm9wcyA9PT0gMyAmJiB2YWxpZGF0ZUlkKG1lc3NhZ2UuaWQpKSkge1xuICAgICAgICAgIHBhc3NlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIGFjayBtZXNzYWdlXG4gICAgICBsZXQgbnByb3BzID0gT2JqZWN0LmtleXMobWVzc2FnZSkubGVuZ3RoXG4gICAgICBpZiAobnByb3BzID09PSAyICYmIHZhbGlkYXRlSWQobWVzc2FnZS5pZCkpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgfHwgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eSgncmVzdWx0JykpIHtcbiAgICAgICAgICBwYXNzZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFwYXNzZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZXJyb3InKVxuICB9XG59XG5cbi8vIGFja1xuXG5jbGFzcyBBY2sge1xuICBjb25zdHJ1Y3RvciAoaWQsIHRpbWVvdXQsIGNiKSB7XG4gICAgdGhpcy5pZCA9IGlkXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgdGhpcy5yZWplY3QgPSByZWplY3RcbiAgICB9KVxuICAgIHRoaXMuY2IgPSBjYlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb3JjZU5hY2sobmV3IFRpbWVvdXRFcnJvcihpZCkpLCB0aW1lb3V0KVxuICB9XG5cbiAgZm9yY2VOYWNrIChlcnJvcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy5jYigpXG4gICAgdGhpcy5yZWplY3QoZXJyb3IpXG4gIH1cblxuICBzZXR0bGUgKG1lc3NhZ2UpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMuY2IoKVxuICAgIGlmIChtZXNzYWdlLmhhc093blByb3BlcnR5KCdlcnJvcicpKSB7XG4gICAgICB0aGlzLnJlamVjdChtZXNzYWdlLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc29sdmUobWVzc2FnZS5yZXN1bHQpXG4gICAgfVxuICB9XG59XG5cbi8vIGNsaWVudFxuXG4vKipcbiAqIEdlbmVyYWwgZm9ybWF0IGZvciBhbGwgZGF0YSB0aGF0IGlzIHNlbnQgb3IgcmVjZWl2ZWQgb3ZlciBhXG4gKiB3ZWJzb2NrZXQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpZW50Lk1lc3NhZ2VcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2lkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtBcnJheX0gW2FyZ3NdXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3Jlc3VsdF1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbZXJyb3JdXG4gKi9cblxuLyoqXG4gKiBNZXNzYWdlcyBlbmNvZGVyLiBNYXkgYWxzbyByZXR1cm4gcHJvbWlzZXMgZm9yIGFuIGFzeW5jaHJvbm91c1xuICogZXhlY3V0aW9uLlxuICpcbiAqIEBjYWxsYmFjayBDbGllbnQuRW5jb2RlclxuICogQHBhcmFtIHtDbGllbnQuTWVzc2FnZX0gbWVzc2FnZSBNZXNzYWdlLlxuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3Q+fE9iamVjdH0gRGF0YSB0byBzZW5kLlxuICovXG5cbi8qKlxuICogTWVzc2FnZXMgZGVjb2Rlci4gTWF5IGFsc28gcmV0dXJuIHByb21pc2VzIGZvciBhbiBhc3luY2hyb25vdXNcbiAqIGV4ZWN1dGlvbi5cbiAqXG4gKiBAY2FsbGJhY2sgQ2xpZW50LkRlY29kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFJlY2VpdmVkIGRhdGEuXG4gKiBAcmV0dXJuIHtQcm9taXNlPENsaWVudC5NZXNzYWdlPnxDbGllbnQuTWVzc2FnZX0gTWVzc2FnZS5cbiAqL1xuXG4vKipcbiAqIFJlY2VpdmUgaG9vayBpcyBydW4gd2hlbiBhIGNsaWVudCByZWNlaXZlcyBhIHZhbGlkIG1lc3NhZ2UgdmlhIGFcbiAqIHdlYnNvY2tldC4gTWF5IGFsc28gcmV0dXJuIHByb21pc2VzIGZvciBhbiBhc3luY2hyb25vdXMgZXhlY3V0aW9uLlxuICpcbiAqIEBjYWxsYmFjayBDbGllbnQuUmVjZWl2ZUhvb2tcbiAqIEBwYXJhbSB7Q2xpZW50Lk1lc3NhZ2V9IG1lc3NhZ2UgTWVzc2FnZS5cbiAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPnx1bmRlZmluZWR9IFByb21pc2UsIGlmIGl0IGlzIHJlamVjdGVkIG5vXG4gKiBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZC5cbiAqL1xuXG4vKipcbiAqIFNlbmQgaG9vayBpcyBydW4gd2hlbiBhIGNsaWVudCBzZW5kcyBhbnkgbWVzc2FnZSB2aWEgYVxuICogd2Vic29ja2V0LiBNYXkgYWxzbyByZXR1cm4gcHJvbWlzZXMgZm9yIGFuIGFzeW5jaHJvbm91cyBleGVjdXRpb24uXG4gKlxuICogQGNhbGxiYWNrIENsaWVudC5TZW5kSG9va1xuICogQHBhcmFtIHtDbGllbnQuTWVzc2FnZXxPYmplY3R9IG1lc3NhZ2UgTWVzc2FnZSBvciBvYmplY3QgaWZcbiAqIGBpc0VuY29kZWRgIGlzIGB0cnVlYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbmNvZGVkIElmIGEgbWVzc2FnZSBoYXMgYmVlbiBhbHJlYWR5IGVuY29kZWRcbiAqIHZpYSB7QGxpbmsgQ2xpZW50I2VuY29kZU1lc3NhZ2V9IG9yIHtAbGluayBTZXJ2ZXIjZW5jb2RlTWVzc2FnZX0uXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVuZGVmaW5lZD58dW5kZWZpbmVkfSBQcm9taXNlLCBpZiBpdCBpcyByZWplY3RlZCBub1xuICogaGFuZGxlcnMgd2lsbCBiZSBjYWxsZWQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGllbnQuUmV0cnlDb25maWdcbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2ZhY3Rvcj0yXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhUaW1lb3V0PUluZmluaXR5XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttaW5UaW1lb3V0PTEwMDBdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyYW5kb21pemU9dHJ1ZV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmV0cmllcz0xMF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWVudC5Tb2NrZXRPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFthY2tUaW1lb3V0PTIwMDAwXSBSZXN1bHQgd2FpdCB0aW1lb3V0IGZvclxuICoge0BsaW5rIENsaWVudCNpbnZva2V9IGluIG1zLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFthdXRoPXt9XSBBdXRoIGRhdGEuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvUmVjb25uZWN0PXRydWVdIEVuYWJsZSBhdXRvIHJlY29ubmVjdC5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LlJldHJ5Q29uZmlnfSBbYXV0b1JlY29ubmVjdE9wdGlvbnNdIEF1dG9cbiAqIHJlY29ubmVjdCBjb25maWcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2JpbmFyeVR5cGU9J2FycmF5YnVmZmVyJ10gVzNDIFdlYlNvY2tldFxuICogYmluYXJ5IGRhdGEgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7Q2xpZW50LkRlY29kZXJ9IFtkZWNvZGVyPUpTT04ucGFyc2VdIE1lc3NhZ2VzIGRlY29kZXIuXG4gKiBAcHJvcGVydHkge0NsaWVudC5FbmNvZGVyfSBbZW5jb2Rlcj1KU09OLnN0cmluZ2lmeV0gTWVzc2FnZXNcbiAqIGVuY29kZXIuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZXJyb3JGb3JtYXR0ZXI9U3RyaW5nXSBDb252ZXJ0ZXIgZm9yIEpTXG4gKiBlcnJvcnMgdG8gc29tZSBuZXR3b3JrIGZvcm1hdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGluZ0ludGVydmFsPTIwMDAwXSBQaW5nIGludGVydmFsIGluIG1zLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwaW5nVGltZW91dD0yMDAwMF0gUGluZyB0aW1lb3V0IGluIG1zLlxuICogQHByb3BlcnR5IHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gW3Byb3RvY29scz0nd3MtbWVzc2FnaW5nJ11cbiAqIFdlYlNvY2tldCBwcm90b2NvbHMuXG4gKiBAcHJvcGVydHkge0NsaWVudC5SZWNlaXZlSG9va30gW3JlY2VpdmVIb29rXSBSZWNlaXZlIGhvb2suXG4gKiBAcHJvcGVydHkge0NsaWVudC5TZW5kSG9va30gW1NlbmRIb29rXSBTZW5kIGhvb2suXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwVmFsaWRhdGlvbj1mYWxzZV0gU2tpcHMgYnVpbGQtaW5cbiAqIG1lc3NhZ2VzIHZhbGlkYXRpb24uXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1dlYlNvY2tldD11bmRlZmluZWRdIEFsdGVybmF0aXZlIHdlYnNvY2tldFxuICogY29uc3RydWN0b3IsIGlmIGl0IGlzIHVuZGVmaW5lZCB0aGVuIGEgZ2xvYmFsIFdlYlNvY2tldCBpcyB1c2VkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdzNjPXVuZGVmaW5lZF0gSWYgV2ViU29ja2V0IGlzIHVzaW5nIGEgdzNjXG4gKiBzZW5kIEFQSSwgb3IgYSB3cyBvbmUgKGZyb20gTm9kZS5qcyBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gd2l0aCBhXG4gKiBjYWxsYmFjaykuIEJ5IGRlZmF1bHQgaWYgYSBnbG9iYWwgdmFsdWUgaXMgdXNlZCwgdGhlbiBpdCBpcyBgdHJ1ZWBcbiAqIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbd3NPcHRpb25zXSBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gcGFzcyB0byB3c1xuICogc29ja2V0IGNvbnN0cnVjdG9yLlxuICovXG5cbmNvbnN0IHJldHJ5Q29uZmlnID0ge1xuICBmYWN0b3I6IDIsXG4gIG1heFRpbWVvdXQ6IEluZmluaXR5LFxuICBtaW5UaW1lb3V0OiAxMDAwLFxuICByYW5kb21pemU6IHRydWUsXG4gIHJldHJpZXM6IDEwXG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICBhY2tUaW1lb3V0OiAyMDAwMCxcbiAgYXV0aDoge30sXG4gIGF1dG9SZWNvbm5lY3Q6IHRydWUsXG4gIGF1dG9SZWNvbm5lY3RPcHRpb25zOiByZXRyeUNvbmZpZyxcbiAgYmluYXJ5VHlwZTogJ2FycmF5YnVmZmVyJyxcbiAgZGVjb2RlcjogSlNPTi5wYXJzZSxcbiAgZW5jb2RlcjogSlNPTi5zdHJpbmdpZnksXG4gIGVycm9yRm9ybWF0dGVyOiBTdHJpbmcsXG4gIHBpbmdJbnRlcnZhbDogMjAwMDAsXG4gIHBpbmdUaW1lb3V0OiAyMDAwMCxcbiAgcHJvdG9jb2xzOiAnd3MtbWVzc2FnaW5nJyxcbiAgcmVjZWl2ZUhvb2s6IG51bGwsXG4gIHNlbmRIb29rOiBudWxsLFxuICBza2lwVmFsaWRhdGlvbjogZmFsc2UsXG4gIFdlYlNvY2tldDogdW5kZWZpbmVkLFxuICB3M2M6IHVuZGVmaW5lZCxcbiAgd3NPcHRpb25zOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqXG4gKiBAZW1pdHMgQ2xpZW50I2Nsb3NlXG4gKiBAZW1pdHMgQ2xpZW50I29wZW5cbiAqIEBlbWl0cyBDbGllbnQjZXJyb3JcbiAqIEBlbWl0cyBDbGllbnQjY29ubmVjdFxuICovXG5jbGFzcyBDbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsaWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBXZWJTb2NrZXQgY29ubmVjdGlvbiB1cmwuXG4gICAqIEBwYXJhbSB7Q2xpZW50LlNvY2tldE9wdGlvbnN9IFtvcHRpb25zXSBTb2NrZXQgb3B0aW9ucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnVybCA9IHVybFxuICAgIC8qKlxuICAgICAqIENsaWVudCBpZC4gU2VydmVyLXNpZGUgb25seS5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGlkXG4gICAgICogQG1lbWJlcm9mIENsaWVudFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGFzc2lnbih0aGlzLCBkZWZhdWx0cywgb3B0aW9ucylcbiAgICB0aGlzLnJldHJ5Q29uZmlnID0ge31cbiAgICBhc3NpZ24odGhpcy5yZXRyeUNvbmZpZywgcmV0cnlDb25maWcsIG9wdGlvbnMuYXV0b1JlY29ubmVjdE9wdGlvbnMpXG4gICAgaWYgKCF0aGlzLldlYlNvY2tldCkge1xuICAgICAgdGhpcy5XZWJTb2NrZXQgPSBXZWJTb2NrZXRcbiAgICAgIHRoaXMudzNjID0gdGhpcy53M2MgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB0aGlzLnczY1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCB0aGVuIGEgY2xpZW50IGlzIGNvbm5lY3RlZC5cbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2VcbiAgICB0aGlzLmNvdW50ZXIgPSAxXG4gICAgdGhpcy5kYXRhID0ge31cbiAgICB0aGlzLmhhbmRsZXJzID0ge31cbiAgICB0aGlzLnBlbmRpbmdBY2tzID0ge31cbiAgICB0aGlzLmF0dGVtcHQgPSAwXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlbiBhIGNsaWVudCB3YXMgY2xvc2VkIHZpYSBhIGNsb3NlIG1ldGhvZCBvciBhbiBhdXRoXG4gICAgICogZXJyb3Igb2NjdXJyZWQuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmVnaXN0ZXIoJ3BpbmcnLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSlcbiAgICB0aGlzLnJlY29ubmVjdCgpXG4gIH1cblxuICBfb25NZXNzYWdlIChkYXRhKSB7XG4gICAgbGV0IG1lc3NhZ2VcbiAgICBhdHRlbXB0KCgpID0+IHRoaXMuZGVjb2RlcihkYXRhLmRhdGEpKVxuICAgICAgLnRoZW4obXNnID0+IHsgbWVzc2FnZSA9IG1zZyB9KVxuICAgICAgLnRoZW4oKCkgPT4geyBpZiAoIXRoaXMuc2tpcFZhbGlkYXRpb24pIHsgdmFsaWRhdGUobWVzc2FnZSkgfSB9KVxuICAgICAgLnRoZW4oKCkgPT4geyBpZiAodGhpcy5yZWNlaXZlSG9vaykgdGhpcy5yZWNlaXZlSG9vayhtZXNzYWdlKSB9KVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fZGlzcGF0Y2gobWVzc2FnZSkpXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBvdGhlciBzaWRlIGZhaWxlZCB0byBkZWNvZGUgb3IgdmFsaWRhdGUgYVxuICAgICAqIHdlYnNvY2tldCBtZXNzYWdlLCBuYW1lbHkgYW4gZXJyb3IgaXMgb2NjdXJyZWQgaW5zaWRlIGVpdGhlclxuICAgICAqIGBkZWNvZGVyYCBvciBgcmVjZWl2ZUhvb2tgLlxuICAgICAqIEBldmVudCBDbGllbnQjcHJlcHJvY2Vzc2luZ0Vycm9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGVycm9yIENvbnZlcnRlZCBlcnJvci5cbiAgICAgKi9cbiAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLnNlbmQoJ3ByZXByb2Nlc3NpbmdFcnJvcicsIHRoaXMuZXJyb3JGb3JtYXR0ZXIoZXJyb3IpKSlcbiAgfVxuXG4gIF9zZXRFdmVudHMgKCkge1xuICAgIC8qKlxuICAgICAqIEVtaXRzIHczYyBvbm9wZW4gV2ViU29ja2V0IGV2ZW50cy5cbiAgICAgKiBAZXZlbnQgQ2xpZW50I29wZW5cbiAgICAgKi9cbiAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSBlbWl0LmJpbmQodGhpcywgJ29wZW4nKVxuICAgIC8qKlxuICAgICAqIEVtaXRzIHczYyBvbmVycm9yIFdlYlNvY2tldCBldmVudHMuIERvZXMgbm90IHRocm93IGlmIHRoZXJlIGFyZVxuICAgICAqIG5vIGxpc3RlbmVycy5cbiAgICAgKiBAZXZlbnQgQ2xpZW50I2Vycm9yXG4gICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgRXJyb3IuXG4gICAgICovXG4gICAgdGhpcy5zb2NrZXQub25lcnJvciA9IGVtaXQuYmluZCh0aGlzLCAnZXJyb3InKVxuICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSB0aGlzLl9vbkNsb3NlLmJpbmQodGhpcylcbiAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKVxuICB9XG5cbiAgX3BpbmcgKCkge1xuICAgIHRoaXMucGluZ1RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZW1pdC5jYWxsKHRoaXMsICdwaW5nJylcbiAgICAgIGxldCB0aW1lb3V0ID0gdGhpcy5waW5nVGltZW91dFxuICAgICAgbGV0IHsgbWVzc2FnZSwgcHJvbWlzZSB9ID0gdGhpcy5fbWFrZU1lc3NhZ2UoJ3BpbmcnLCBbXSwgdHJ1ZSwgdGltZW91dClcbiAgICAgIHRoaXMuX3NlbmQobWVzc2FnZSkudGhlbigoKSA9PiBwcm9taXNlKVxuICAgICAgICAudGhlbigoKSA9PiBlbWl0LmNhbGwodGhpcywgJ3BvbmcnKSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fcGluZygpKVxuICAgICAgICAuY2F0Y2goKCkgPT4gdGhpcy5jbG9zZSg0MDA4LCAnUGluZyB0aW1lb3V0JywgZmFsc2UpKVxuICAgIH0sIHRoaXMucGluZ0ludGVydmFsKVxuICB9XG5cbiAgX2lzT3BlbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ja2V0ICYmXG4gICAgICAodGhpcy5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gMCB8fCB0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSAxKVxuICB9XG5cbiAgX3JlY29ubmVjdCAoKSB7XG4gICAgbGV0IHsgZmFjdG9yLCBtYXhUaW1lb3V0LCBtaW5UaW1lb3V0LCByYW5kb21pemUsIHJldHJpZXMgfSA9IHRoaXMucmV0cnlDb25maWdcbiAgICBpZiAodGhpcy5hdHRlbXB0ID49IHJldHJpZXMgfHwgdGhpcy50ZXJtaW5hdGVkKSB7IHJldHVybiB9XG4gICAgbGV0IHJhbmQgPSAxICsgKHJhbmRvbWl6ZSA/IE1hdGgucmFuZG9tKCkgOiAwKVxuICAgIGxldCB0aW1lb3V0ID0gTWF0aC5taW4ocmFuZCAqIG1pblRpbWVvdXQgKiBNYXRoLnBvdyhmYWN0b3IsIHRoaXMuYXR0ZW1wdCksIG1heFRpbWVvdXQpXG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMucmVjb25uZWN0LmJpbmQodGhpcyksIHRpbWVvdXQpXG4gICAgdGhpcy5hdHRlbXB0KytcbiAgfVxuXG4gIF9vcGVuICgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lb3V0SWQpXG4gICAgLyoqXG4gICAgICogVW5kZXJseWluZyB3ZWJzb2NrZXQuXG4gICAgICogQG1lbWJlciB7V2ViU29ja2V0fVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuc29ja2V0ID0gbmV3IHRoaXMuV2ViU29ja2V0KHRoaXMudXJsLCB0aGlzLnByb3RvY29scywgdGhpcy53c09wdGlvbnMpXG4gICAgaWYgKHRoaXMudzNjKSB7IHRoaXMuc29ja2V0LmJpbmFyeVR5cGUgPSB0aGlzLmJpbmFyeVR5cGUgfVxuICAgIHRoaXMuY29ubmVjdEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWVcbiAgICAgIHRoaXMuYXR0ZW1wdCA9IDBcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmF1dGhUaW1lb3V0SWQpXG4gICAgICB0aGlzLl9waW5nKClcbiAgICB9XG4gICAgdGhpcy5vcGVuSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3NlbmQodGhpcy5hdXRoLCB7aXNBdXRoOiB0cnVlfSlcbiAgICAgIHRoaXMuYXV0aFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgIHRoaXMuY2xvc2UuYmluZCh0aGlzLCA0MDA4LCAnQXV0aCB0aW1lb3V0JywgZmFsc2UpLFxuICAgICAgICB0aGlzLmFja1RpbWVvdXQpXG4gICAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCB0aGlzLmNvbm5lY3RIYW5kbGVyKVxuICAgIH1cbiAgICB0aGlzLm9uY2UoJ29wZW4nLCB0aGlzLm9wZW5IYW5kbGVyKVxuICAgIHRoaXMuX3NldEV2ZW50cygpXG4gICAgaWYgKHRoaXMuYXR0ZW1wdCA+IDApIHtcbiAgICAgIC8qKlxuICAgICAgICogRW1pdHMgcmV0cnkgZXZlbnRzIHdoZW4gYXV0byByZWNvbm5lY3RpbmcuXG4gICAgICAgKiBAZXZlbnQgQ2xpZW50I3JldHJ5XG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gYXR0ZW1wdCBBdHRlbXB0IG51bWJlciBzdGFydGluZyBmcm9tIGAxYC5cbiAgICAgICAqL1xuICAgICAgZW1pdC5jYWxsKHRoaXMsICdyZXRyeScsIHRoaXMuYXR0ZW1wdClcbiAgICB9XG4gIH1cblxuICBfb25DbG9zZSAoZXYpIHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMucGluZ1RpbWVvdXRJZClcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hdXRoVGltZW91dElkKVxuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVvdXRJZClcbiAgICB0aGlzLm9mZignY29ubmVjdCcsIHRoaXMuY29ubmVjdEhhbmRsZXIpXG4gICAgdGhpcy5vZmYoJ29wZW4nLCB0aGlzLm9wZW5IYW5kbGVyKVxuICAgIGlmIChldi5jb2RlID09PSA0MDAzIHx8ICF0aGlzLnVybCkgeyB0aGlzLnRlcm1pbmF0ZWQgPSB0cnVlIH1cbiAgICBmb3IgKGxldCBpZCBpbiB0aGlzLnBlbmRpbmdBY2tzKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMucGVuZGluZ0Fja3MuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgIGxldCBhY2sgPSB0aGlzLnBlbmRpbmdBY2tzW2lkXVxuICAgICAgICBhY2suZm9yY2VOYWNrKG5ldyBDb25uZWN0aW9uRXJyb3IoaWQpKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdBY2tzID0ge31cbiAgICBpZiAoIXRoaXMudGVybWluYXRlZCAmJiB0aGlzLmF1dG9SZWNvbm5lY3QpIHsgdGhpcy5fcmVjb25uZWN0KCkgfVxuICAgIC8qKlxuICAgICAqIEVtaXRzIHczYyBvbmNsb3NlIFdlYlNvY2tldCBldmVudHMuXG4gICAgICogQGV2ZW50IENsaWVudCNjbG9zZVxuICAgICAqIEBwYXJhbSB7Q2xvc2VFdmVudH0gZGF0YSBDbG9zZSBldmVudCBkYXRhLlxuICAgICAqL1xuICAgIGVtaXQuY2FsbCh0aGlzLCAnY2xvc2UnLCBldilcbiAgfVxuXG4gIF9tYWtlTWVzc2FnZSAobmFtZSwgYXJncywgbmVlZHNBY2ssIGFja1RpbWVvdXQgPSB0aGlzLmFja1RpbWVvdXQpIHtcbiAgICBsZXQgcHJvbWlzZSwgbWVzc2FnZVxuICAgIG1lc3NhZ2UgPSB7bmFtZSwgYXJnc31cbiAgICBpZiAobmVlZHNBY2spIHtcbiAgICAgIGxldCBpZCA9IHRoaXMuY291bnRlcisrXG4gICAgICBsZXQgYWNrID0gbmV3IEFjayhpZCwgYWNrVGltZW91dCwgKCkgPT4gZGVsZXRlIHRoaXMucGVuZGluZ0Fja3NbaWRdKVxuICAgICAgdGhpcy5wZW5kaW5nQWNrc1tpZF0gPSBhY2tcbiAgICAgIHByb21pc2UgPSBhY2sucHJvbWlzZVxuICAgICAgbWVzc2FnZS5pZCA9IGlkXG4gICAgfVxuICAgIHJldHVybiB7IG1lc3NhZ2UsIHByb21pc2UgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvY2tldCBjb25uZWN0aW9uIGlzIG9wZW4gYW5kIGNsaWVudCBoYXMgcGFzc2VkIGFuIGF1dGhcbiAgICogY2hlY2suIENsaWVudC1zaWRlIG9ubHkuXG4gICAqIEBldmVudCBDbGllbnQjY29ubmVjdFxuICAgKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IGRhdGEgQXV0aCByZXBseSBkYXRhLlxuICAgKi9cbiAgX2Rpc3BhdGNoIChtZXNzYWdlKSB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSkge1xuICAgICAgaWYgKGlzQmxhY2tsaXN0ZWRFdmVudChtZXNzYWdlLm5hbWUpKSB7IHJldHVybiB9XG4gICAgICBpZiAobWVzc2FnZS5uYW1lID09PSAnY29ubmVjdCcgJiYgdGhpcy5jb25uZWN0ZWQpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChtZXNzYWdlLmlkKSB7XG4gICAgICAgIGxldCBpZCA9IG1lc3NhZ2UuaWRcbiAgICAgICAgbGV0IGZuID0gZ2V0T3duUHJvcCh0aGlzLmhhbmRsZXJzLCBtZXNzYWdlLm5hbWUpXG4gICAgICAgIGlmIChmbikge1xuICAgICAgICAgIGF0dGVtcHQoKCkgPT4gZm4uYXBwbHkobnVsbCwgbWVzc2FnZS5hcmdzKSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQgPSBudWxsKSA9PiB0aGlzLl9zZW5kKHtpZCwgcmVzdWx0fSkpXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5fc2VuZCh7aWQsIGVycm9yOiB0aGlzLmVycm9yRm9ybWF0dGVyKGVycm9yKX0pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBlcnJvciA9IHRoaXMuZXJyb3JGb3JtYXR0ZXIobmV3IE5vUHJvY2VkdXJlRXJyb3IobWVzc2FnZS5uYW1lKSlcbiAgICAgICAgICB0aGlzLl9zZW5kKHtpZCwgZXJyb3J9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0LmFwcGx5KHRoaXMsIGNvbmNhdChtZXNzYWdlLm5hbWUsIG1lc3NhZ2UuYXJncykpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBhY2sgPSB0aGlzLnBlbmRpbmdBY2tzW21lc3NhZ2UuaWRdXG4gICAgICBpZiAoYWNrKSB7IGFjay5zZXR0bGUobWVzc2FnZSkgfVxuICAgIH1cbiAgfVxuXG4gIF9zZW5kIChtZXNzYWdlLCB7IHNraXBFbmNvZGVyID0gZmFsc2UsIGlzQXV0aCA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHJldHVybiBhdHRlbXB0KCgpID0+IHRoaXMuc2VuZEhvb2sgPyB0aGlzLnNlbmRIb29rKG1lc3NhZ2UsIHNraXBFbmNvZGVyKSA6IG51bGwpXG4gICAgICAudGhlbigoKSA9PiBza2lwRW5jb2RlciA/IG1lc3NhZ2UgOiB0aGlzLmVuY29kZXIobWVzc2FnZSkpXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3RlZCAmJiAhaXNBdXRoKSB7XG4gICAgICAgICAgbGV0IGlkID0gc2tpcEVuY29kZXIgPyB1bmRlZmluZWQgOiBtZXNzYWdlLmlkXG4gICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25FcnJvcihpZClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53M2MpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQuc2VuZChkYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBiaW5hcnkgPSB0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZydcbiAgICAgICAgICByZXR1cm4gZnJvbUNhbGxiYWNrKGNiID0+IHRoaXMuc29ja2V0LnNlbmQoZGF0YSwge2JpbmFyeX0sIGNiKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGFuIGV2ZW50LCBubyByZXBseS4gVXNlIHtAbGluayBvbn0gb3Ige0BsaW5rIG9uY2V9IG1ldGhvZHNcbiAgICogdG8gbGlzdGVuIGV2ZW50cyBvbiBhIHJlY2lwaWVudCBzaWRlLiBSZXNlcnZlZCBldmVudCBuYW1lc1xuICAgKiAoX19NVVNUIE5PVF9fIGJlIHVzZWQpOiBgY29ubmVjdGAsIGBjbG9zZWAsIGBvcGVuYCwgYGVycm9yYCxcbiAgICogYHBpbmdgLCBgcG9uZ2AsIGByZXRyeWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0geyp9IFthcmdzXSBBcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVuZGVmaW5lZD59IFJlc29sdmVzIHdoZW4gYSBkYXRhIGhhcyBiZWVuIHNlbnQuXG4gICAqL1xuICBzZW5kIChldmVudCwgLi4uYXJncykge1xuICAgIGxldCB7IG1lc3NhZ2UgfSA9IHRoaXMuX21ha2VNZXNzYWdlKGV2ZW50LCBhcmdzLCBmYWxzZSlcbiAgICByZXR1cm4gdGhpcy5fc2VuZChtZXNzYWdlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlIGVuY29kZWQgYnkge0BsaW5rIENsaWVudCNlbmNvZGVNZXNzYWdlfSBvciB7QGxpbmtcbiAgICogU2VydmVyI2VuY29kZU1lc3NhZ2V9LCB1c2VmdWwgZm9yIGlkZW50aWNhbCBtZXNzYWdlc1xuICAgKiBicm9hZGNhc3RpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFJlc3VsdCBvZiB7QGxpbmsgQ2xpZW50I2VuY29kZU1lc3NhZ2V9LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmRlZmluZWQ+fSBSZXNvbHZlcyB3aGVuIGEgZGF0YSBoYXMgYmVlbiBzZW50LlxuICAgKi9cbiAgc2VuZEVuY29kZWQgKGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZChkYXRhLCB7c2tpcEVuY29kZXI6IHRydWV9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSBhIG1lc3NhZ2UgZm9yIGEgbGF0ZXIgdXNlIHdpdGgge0BsaW5rIENsaWVudCNzZW5kRW5jb2RlZH0uXG4gICAqIFJlc2VydmVkIGV2ZW50IG5hbWVzIChfX01VU1QgTk9UX18gYmUgdXNlZCk6IGBjb25uZWN0YCwgYGNsb3NlYCxcbiAgICogYG9wZW5gLCBgZXJyb3JgLCBgcGluZ2AsIGBwb25nYCwgYHJldHJ5YC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gW2FyZ3NdIEFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge09iamVjdH0gRW5jb2RlZCBtZXNzYWdlLlxuICAgKi9cbiAgZW5jb2RlTWVzc2FnZSAoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICBsZXQgeyBtZXNzYWdlIH0gPSB0aGlzLl9tYWtlTWVzc2FnZShldmVudCwgYXJncywgZmFsc2UpXG4gICAgcmV0dXJuIGF0dGVtcHQoKCkgPT4gdGhpcy5lbmNvZGVyKG1lc3NhZ2UpKVxuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBhbiBSUEMgcHJvY2VkdXJlLiBVc2Uge0BsaW5rIENsaWVudCNyZWdpc3Rlcn0gbWV0aG9kIHRvXG4gICAqIGFzc2lnbiBhbiBSUEMgbWV0aG9kIGhhbmRsZXIuIFJlc2VydmVkIHByb2NlZHVyZSBuYW1lcyAoX19NVVNUXG4gICAqIE5PVF9fIGJlIHVzZWQpOiBgY29ubmVjdGAsIGBjbG9zZWAsIGBvcGVuYCwgYGVycm9yYCwgYHBpbmdgLFxuICAgKiBgcG9uZ2AsIGByZXRyeWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFByb2NlZHVyZSBuYW1lLlxuICAgKiBAcGFyYW0geyp9IFthcmdzXSBBcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFJlc29sdmVzIG9yIHJlamVjdHMgd2hlbiBhIHJlcGx5IGlzXG4gICAqIHJlY2VpdmVkLlxuICAgKi9cbiAgaW52b2tlIChuYW1lLCAuLi5hcmdzKSB7XG4gICAgbGV0IHsgbWVzc2FnZSwgcHJvbWlzZSB9ID0gdGhpcy5fbWFrZU1lc3NhZ2UobmFtZSwgYXJncywgdHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5fc2VuZChtZXNzYWdlKS50aGVuKCgpID0+IHByb21pc2UpXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gUlBDIGhhbmRsZXIuIEVhY2ggbmFtZSBtdXN0IGhhdmUgbm8gbW9yZSB0aGFuIGEgb25lXG4gICAqIGhhbmRsZXIsIHNvIGl0IHRocm93cyBhbiBlcnJvciBvbiBhIGR1cGxpY2F0ZSBoYW5kbGVyXG4gICAqIHJlZ2lzdHJhdGlvbiBhdHRlbXB0LiBVc2Uge0BsaW5rIENsaWVudCNpbnZva2V9IHRvIGNhbGwgYSBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFByb2NlZHVyZSBuYW1lLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBoYW5kbGVyIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgUHJvbWlzZS5cbiAgICovXG4gIHJlZ2lzdGVyIChuYW1lLCBoYW5kbGVyKSB7XG4gICAgaWYgKGdldE93blByb3AodGhpcy5oYW5kbGVycywgbmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgcmVnaXN0ZXIgYSBkdXBsaWNhdGUgUlBDIGhhbmRsZXIgZm9yICR7bmFtZX1gKVxuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJzW25hbWVdID0gaGFuZGxlclxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29ubmVjdC4gQ2xpZW50LXNpZGUgb25seS5cbiAgICovXG4gIHJlY29ubmVjdCAoKSB7XG4gICAgdGhpcy50ZXJtaW5hdGVkID0gZmFsc2VcbiAgICBpZiAodGhpcy5faXNPcGVuKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAodGhpcy5XZWJTb2NrZXQgJiYgdGhpcy51cmwpIHtcbiAgICAgIHRoaXMuX29wZW4oKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBjb25maWd1cmF0aW9uIG9wdGlvbnMnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYSBjbGllbnQgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2RlPTEwMDBdIENvZGUgYXMgcGVyIFdlYlNvY2tldCBzcGVjLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl0gT3B0aW9uYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0ZXJtaW5hdGU9dHJ1ZV0gRGlzYWJsZSByZWNvbm5lY3QuXG4gICAqL1xuICBjbG9zZSAoY29kZSA9IDEwMDAsIHN0ciwgdGVybWluYXRlID0gdHJ1ZSkge1xuICAgIGlmICghdGhpcy50ZXJtaW5hdGVkKSB7XG4gICAgICB0aGlzLnRlcm1pbmF0ZWQgPSB0ZXJtaW5hdGVcbiAgICAgIGlmICh0aGlzLl9pc09wZW4oKSkgeyB0aGlzLnNvY2tldC5jbG9zZShjb2RlLCBzdHIpIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIENsaWVudCNzZW5kfS5cbiAqIEBtZXRob2RcbiAqIEBuYW1lIENsaWVudCNlbWl0XG4gKi9cbkNsaWVudC5wcm90b3R5cGUuZW1pdCA9IENsaWVudC5wcm90b3R5cGUuc2VuZFxuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgQ2xpZW50I3NlbmRFbmNvZGVkfS5cbiAqIEBtZXRob2RcbiAqIEBuYW1lIENsaWVudCNlbWl0RW5jb2RlZFxuICovXG5DbGllbnQucHJvdG90eXBlLmVtaXRFbmNvZGVkID0gQ2xpZW50LnByb3RvdHlwZS5zZW5kRW5jb2RlZFxuXG5DbGllbnQuQ29ubmVjdGlvbkVycm9yID0gQ29ubmVjdGlvbkVycm9yXG5DbGllbnQuTm9Qcm9jZWR1cmVFcnJvciA9IE5vUHJvY2VkdXJlRXJyb3JcbkNsaWVudC5UaW1lb3V0RXJyb3IgPSBUaW1lb3V0RXJyb3JcblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiJdfQ== |
{ | ||
"name": "ws-messaging", | ||
"version": "0.7.0", | ||
"version": "0.7.1", | ||
"description": "A minimalistic abstraction layer for websockets.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -323,3 +323,3 @@ 'use strict' | ||
.then(() => { if (!this.skipValidation) { validate(message) } }) | ||
.then(() => { if (this.receiveHook) { this.receiveHook(message) } }) | ||
.then(() => { if (this.receiveHook) this.receiveHook(message) }) | ||
.then(() => this._dispatch(message)) | ||
@@ -326,0 +326,0 @@ /** |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
153776
2065